diff --git a/published/201601/20151127 Linux or UNIX grep Command Tutorial series 7--Linux or UNIX View Only Configuration File Directives Uncommented Lines of a Config File.md b/published/201601/20151127 Linux or UNIX grep Command Tutorial series 7--Uncommented Lines of a Config File.md similarity index 100% rename from published/201601/20151127 Linux or UNIX grep Command Tutorial series 7--Linux or UNIX View Only Configuration File Directives Uncommented Lines of a Config File.md rename to published/201601/20151127 Linux or UNIX grep Command Tutorial series 7--Uncommented Lines of a Config File.md diff --git a/published/201908/20190817 GNOME and KDE team up on the Linux desktop, docs for Nvidia GPUs open up, a powerful new way to scan for firmware vulnerabilities, and more news.md b/published/201908/20190817 GNOME and KDE team up on the Linux desktop, docs for Nvidia GPUs open up.md similarity index 100% rename from published/201908/20190817 GNOME and KDE team up on the Linux desktop, docs for Nvidia GPUs open up, a powerful new way to scan for firmware vulnerabilities, and more news.md rename to published/201908/20190817 GNOME and KDE team up on the Linux desktop, docs for Nvidia GPUs open up.md diff --git a/published/201909/20190831 Google opens Android speech transcription and gesture tracking, Twitter-s telemetry tooling, Blender-s growing adoption, and more news.md b/published/201909/20190831 Google opens Android speech transcription and gesture tracking.md similarity index 100% rename from published/201909/20190831 Google opens Android speech transcription and gesture tracking, Twitter-s telemetry tooling, Blender-s growing adoption, and more news.md rename to published/201909/20190831 Google opens Android speech transcription and gesture tracking.md diff --git a/published/20200511 Start using systemd as a troubleshooting tool.md b/published/20200511 Start using systemd as a troubleshooting tool.md new file mode 100644 index 0000000000..60bb8550d3 --- /dev/null +++ b/published/20200511 Start using systemd as a troubleshooting tool.md @@ -0,0 +1,264 @@ +[#]: collector: (lujun9972) +[#]: translator: (tt67wq) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13452-1.html) +[#]: subject: (Start using systemd as a troubleshooting tool) +[#]: via: (https://opensource.com/article/20/5/systemd-troubleshooting-tool) +[#]: author: (David Both https://opensource.com/users/dboth) + +使用 systemd 作为问题定位工具 +====== + +> 虽然 systemd 并非真正的故障定位工具,但其输出中的信息为解决问题指明了方向。 + +![](https://img.linux.net.cn/data/attachment/album/202106/02/214321uqzzrqza9mlt9iam.jpg) + +没有人会认为 systemd 是一个故障定位工具,但当我的 web 服务器遇到问题时,我对 systemd 和它的一些功能的不断了解帮助我找到并规避了问题。 + +我遇到的问题是这样,我的服务器 yorktown 为我的家庭办公网络提供名称服务 、DHCP、NTP、HTTPD 和 SendMail 邮件服务,它在正常启动时未能启动 Apache HTTPD 守护程序。在我意识到它没有运行之后,我不得不手动启动它。这个问题已经持续了一段时间,我最近才开始尝试去解决它。 + +你们中的一些人会说,systemd 本身就是这个问题的原因,根据我现在了解的情况,我同意你们的看法。然而,我在使用 SystemV 时也遇到了类似的问题。(在本系列文章的 [第一篇][2] 中,我探讨了围绕 systemd 作为旧有 SystemV 启动程序和启动脚本的替代品所产生的争议。如果你有兴趣了解更多关于 systemd 的信息,也可以阅读 [第二篇][3] 和 [第三篇][4] 文章。)没有完美的软件,systemd 和 SystemV 也不例外,但 systemd 为解决问题提供的信息远远多于 SystemV。 + +### 确定问题所在 + +找到这个问题根源的第一步是确定 httpd 服务的状态: + +``` +[root@yorktown ~]# systemctl status httpd +● httpd.service - The Apache HTTP Server +   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) +   Active: failed (Result: exit-code) since Thu 2020-04-16 11:54:37 EDT; 15min ago +     Docs: man:httpd.service(8) +  Process: 1101 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) + Main PID: 1101 (code=exited, status=1/FAILURE) +   Status: "Reading configuration..." +      CPU: 60ms + +Apr 16 11:54:35 yorktown.both.org systemd[1]: Starting The Apache HTTP Server... +Apr 16 11:54:37 yorktown.both.org httpd[1101]: (99)Cannot assign requested address: AH00072: make_sock: could not bind to address 192.168.0.52:80 +Apr 16 11:54:37 yorktown.both.org httpd[1101]: no listening sockets available, shutting down +Apr 16 11:54:37 yorktown.both.org httpd[1101]: AH00015: Unable to open logs +Apr 16 11:54:37 yorktown.both.org systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE +Apr 16 11:54:37 yorktown.both.org systemd[1]: httpd.service: Failed with result 'exit-code'. +Apr 16 11:54:37 yorktown.both.org systemd[1]: Failed to start The Apache HTTP Server. +[root@yorktown ~]# +``` + +这种状态信息是 systemd 的功能之一,我觉得比 SystemV 提供的任何功能都要有用。这里的大量有用信息使我很容易得出逻辑性的结论,让我找到正确的方向。我从旧的 `chkconfig` 命令中得到的是服务是否在运行,以及如果它在运行的话,进程 ID(PID)是多少。这可没多大帮助。 + +该状态报告中的关键条目显示,HTTPD 不能与 IP 地址绑定,这意味着它不能接受传入的请求。这表明网络启动速度不够快,因为 IP 地址还没有设置好,所以 HTTPD 服务还没有准备好与 IP 地址绑定。这是不应该发生的,所以我查看了我的网络服务的 systemd 启动配置文件;在正确的 `after` 和 `requires` 语句下,所有这些似乎都没问题。下面是我服务器上的 `/lib/systemd/system/httpd.service` 文件: + +``` +# Modifying this file in-place is not recommended, because changes +# will be overwritten during package upgrades. To customize the +# behaviour, run "systemctl edit httpd" to create an override unit. + +# For example, to pass additional options (such as -D definitions) to +# the httpd binary at startup, create an override unit (as is done by +# systemctl edit) and enter the following: + +# [Service] +# Environment=OPTIONS=-DMY_DEFINE + +[Unit] +Description=The Apache HTTP Server +Wants=httpd-init.service +After=network.target remote-fs.target nss-lookup.target httpd-init.service +Documentation=man:httpd.service(8) + +[Service] +Type=notify +Environment=LANG=C + +ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND +ExecReload=/usr/sbin/httpd $OPTIONS -k graceful +# Send SIGWINCH for graceful stop +KillSignal=SIGWINCH +KillMode=mixed +PrivateTmp=true + +[Install] +WantedBy=multi-user.target +``` + +`httpd.service` 单元文件明确规定,它应该在 `network.target` 和 `httpd-init.service`(以及其他)之后加载。我试着用 `systemctl list-units` 命令找到所有这些服务,并在结果数据流中搜索它们。所有这些服务都存在,应该可以确保在设置网络 IP 地址之前,httpd 服务没有加载。 + +### 第一个解决方案 + +在互联网上搜索了一下,证实其他人在 httpd 和其他服务也遇到了类似的问题。这似乎是由于其中一个所需的服务向 systemd 表示它已经完成了启动,但实际上它却启动了一个尚未完成的子进程。通过更多搜索,我想到了一个规避方法。 + +我搞不清楚为什么花了这么久才把 IP 地址分配给网卡。所以我想,如果我可以将 HTTPD 服务的启动推迟合理的一段时间,那么 IP 地址就会在那个时候分配。 + +幸运的是,上面的 `/lib/systemd/system/httpd.service` 文件提供了一些方向。虽然它说不要修改它,但是它还是指出了如何操作:使用 `systemctl edit httpd` 命令,它会自动创建一个新文件(`/etc/systemd/system/httpd.service.d/override.conf`)并打开 [GNU Nano][5] 编辑器(如果你对 Nano 不熟悉,一定要看一下 Nano 界面底部的提示)。 + +在新文件中加入以下代码并保存: + +``` +[root@yorktown ~]# cd /etc/systemd/system/httpd.service.d/ +[root@yorktown httpd.service.d]# ll +total 4 +-rw-r--r-- 1 root root 243 Apr 16 11:43 override.conf +[root@yorktown httpd.service.d]# cat override.conf +# Trying to delay the startup of httpd so that the network is +# fully up and running so that httpd can bind to the correct +# IP address +# +# By David Both, 2020-04-16 + +[Service] +ExecStartPre=/bin/sleep 30 +``` + +这个覆盖文件的 `[Service]` 段有一行代码,将 HTTPD 服务的启动时间推迟了 30 秒。下面的状态命令显示了等待时间里的服务状态: + +``` +[root@yorktown ~]# systemctl status httpd +● httpd.service - The Apache HTTP Server +   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) +  Drop-In: /etc/systemd/system/httpd.service.d +           └─override.conf +           /usr/lib/systemd/system/httpd.service.d +           └─php-fpm.conf +   Active: activating (start-pre) since Thu 2020-04-16 12:14:29 EDT; 28s ago +     Docs: man:httpd.service(8) +Cntrl PID: 1102 (sleep) +    Tasks: 1 (limit: 38363) +   Memory: 260.0K +      CPU: 2ms +   CGroup: /system.slice/httpd.service +           └─1102 /bin/sleep 30 + +Apr 16 12:14:29 yorktown.both.org systemd[1]: Starting The Apache HTTP Server... +Apr 16 12:15:01 yorktown.both.org systemd[1]: Started The Apache HTTP Server. +[root@yorktown ~]# +``` + +这个命令显示了 30 秒延迟过后 HTTPD 服务的状态。该服务已经启动并正常运行。 + +``` +[root@yorktown ~]# systemctl status httpd +● httpd.service - The Apache HTTP Server +   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled) +  Drop-In: /etc/systemd/system/httpd.service.d +           └─override.conf +           /usr/lib/systemd/system/httpd.service.d +           └─php-fpm.conf +   Active: active (running) since Thu 2020-04-16 12:15:01 EDT; 1min 18s ago +     Docs: man:httpd.service(8) +  Process: 1102 ExecStartPre=/bin/sleep 30 (code=exited, status=0/SUCCESS) + Main PID: 1567 (httpd) +   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec" +    Tasks: 213 (limit: 38363) +   Memory: 21.8M +      CPU: 82ms +   CGroup: /system.slice/httpd.service +           ├─1567 /usr/sbin/httpd -DFOREGROUND +           ├─1569 /usr/sbin/httpd -DFOREGROUND +           ├─1570 /usr/sbin/httpd -DFOREGROUND +           ├─1571 /usr/sbin/httpd -DFOREGROUND +           └─1572 /usr/sbin/httpd -DFOREGROUND + +Apr 16 12:14:29 yorktown.both.org systemd[1]: Starting The Apache HTTP Server... +Apr 16 12:15:01 yorktown.both.org systemd[1]: Started The Apache HTTP Server. +``` + +我本来可以实验下更短的延迟时间是否也能奏效,但是我的系统并不用那么严格,所以我觉得不这样做。目前系统的工作状态很可靠,所以我很高兴。 + +因为我收集了所有这些信息,我将其作为 Bug[1825554][6] 报告给红帽 Bugzilla。我相信报告 Bug 比抱怨 Bug 更有有用。 + +### 更好的解决方案 + +把这个问题作为 bug 上报几天后,我收到了回复,表示 systemd 只是一个管理工具,如果 httpd 需要在满足某些要求之后被拉起,需要在单元文件中表达出来。这个回复指引我去查阅 `httpd.service` 的手册页。我希望我能早点发现这个,因为它是比我自己想出的更优秀的解决方案。这种方案明确的针对了前置目标单元,而不仅仅是随机延迟。 + +来自 [httpd.service 手册页][7]: + +> **在启动时开启服务** +> +> `httpd.service` 和 `httpd.socket` 单元默认是 _禁用_ 的。为了在启动阶段开启 httpd 服务,执行:`systemctl enable httpd.service`。在默认配置中,httpd 守护进程会接受任何配置好的 IPv4 或 IPv6 地址的 80 口上的连接(如果安装了 mod_ssl,就会接受 443 端口上的 TLS 连接)。 +> +> 如果 httpd 被配置成依赖任一特定的 IP 地址(比如使用 `Listen` 指令),该地址可能只在启动阶段可用,又或者 httpd 依赖其他服务(比如数据库守护进程),那么必须配置该服务,以确保正确的启动顺序。 +> +> 例如,为了确保 httpd 在所有配置的网络接口配置完成之后再运行,可以创建一个带有以下代码段的 drop-in 文件(如上述): +> +> ``` +> [Unit] +> After=network-online.target +> Wants=network-online.target +> ``` + + +我仍然觉得这是个 bug,因为在 `httpd.conf` 配置文件中使用 Listen 指令是很常见的,至少在我的经验中。我一直在使用 Listen 指令,即使在只有一个 IP 地址的主机上,在多个网卡和 IP 地址的机器上这显然也是有必要的。在 `/usr/lib/systemd/system/httpd.service` 默认配置文件中加入上述几行,对不使用 `Listen` 指令的不会造成问题,对使用 `Listen` 指令的则会规避这个问题。 + +同时,我将使用建议的方法。 + +### 下一步 + +本文描述了一个我在服务器上启动 Apache HTTPD 服务时遇到的一个问题。它指引你了解我在解决这个问题上的思路,并说明了我是如何使用 systemd 来协助解决问题。我也介绍了我用 systemd 实现的规避方法,以及我按照我的 bug 报告得到的更好的解决方案。 + +如我在开头处提到的那样,这有很大可能是一个 systemd 的问题,特别是 httpd 启动的配置问题。尽管如此,systemd 还是提供了工具让我找到了问题的可能来源,并制定和实现了规避方案。两种方案都没有真正令我满意地解决问题。目前,这个问题根源依旧存在,必须要解决。如果只是在 `/usr/lib/systemd/system/httpd.service` 文件中添加推荐的代码,那对我来说是可行的。 + +在这个过程中我发现了一件事,我需要了解更多关于定义服务启动顺序的知识。我会在下一篇文章中探索这个领域,即本系列的第五篇。 + +### 资源 + +网上有大量的关于 systemd 的参考资料,但是大部分都有点简略、晦涩甚至有误导性。除了本文中提到的资料,下列的网页提供了跟多可靠且详细的 systemd 入门信息。 + +- Fedora 项目有一篇切实好用的 [systemd 入门][8],它囊括了几乎所有你需要知道的关于如何使用 systemd 配置、管理和维护 Fedora 计算机的信息。 +- Fedora 项目也有一个不错的 [备忘录][9],交叉引用了过去 SystemV 命令和 systemd 命令做对比。 +- 关于 systemd 的技术细节和创建这个项目的原因,请查看 [Freedesktop.org][10] 上的 [systemd 描述][11]。 +- [Linux.com][12] 的“更多 systemd 的乐趣”栏目提供了更多高级的 systemd [信息和技巧][13]。 + +此外,还有一系列深度的技术文章,是由 systemd 的设计者和主要开发者 Lennart Poettering 为 Linux 系统管理员撰写的。这些文章写于 2010 年 4 月至 2011 年 9 月间,但它们现在和当时一样具有现实意义。关于 systemd 及其生态的许多其他好文章都是基于这些文章: + + * [Rethinking PID 1][14] + * [systemd for Administrators,Part I][15] + * [systemd for Administrators,Part II][16] + * [systemd for Administrators,Part III][17] + * [systemd for Administrators,Part IV][18] + * [systemd for Administrators,Part V][19] + * [systemd for Administrators,Part VI][20] + * [systemd for Administrators,Part VII][21] + * [systemd for Administrators,Part VIII][22] + * [systemd for Administrators,Part IX][23] + * [systemd for Administrators,Part X][24] + * [systemd for Administrators,Part XI][25] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/5/systemd-troubleshooting-tool + +作者:[David Both][a] +选题:[lujun9972][b] +译者:[tt67wq](https://github.com/tt67wq) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dboth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/find-file-linux-code_magnifying_glass_zero.png?itok=E2HoPDg0 (Magnifying glass on code) +[2]: https://opensource.com/article/20/4/systemd +[3]: https://opensource.com/article/20/4/systemd-startup +[4]: https://opensource.com/article/20/4/understanding-and-using-systemd-units +[5]: https://www.nano-editor.org/ +[6]: https://bugzilla.redhat.com/show_bug.cgi?id=1825554 +[7]: https://www.mankier.com/8/httpd.service#Description-Starting_the_service_at_boot_time +[8]: https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html +[9]: https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet +[10]: http://Freedesktop.org +[11]: http://www.freedesktop.org/wiki/Software/systemd +[12]: http://Linux.com +[13]: https://www.linux.com/training-tutorials/more-systemd-fun-blame-game-and-stopping-services-prejudice/ +[14]: http://0pointer.de/blog/projects/systemd.html +[15]: http://0pointer.de/blog/projects/systemd-for-admins-1.html +[16]: http://0pointer.de/blog/projects/systemd-for-admins-2.html +[17]: http://0pointer.de/blog/projects/systemd-for-admins-3.html +[18]: http://0pointer.de/blog/projects/systemd-for-admins-4.html +[19]: http://0pointer.de/blog/projects/three-levels-of-off.html +[20]: http://0pointer.de/blog/projects/changing-roots +[21]: http://0pointer.de/blog/projects/blame-game.html +[22]: http://0pointer.de/blog/projects/the-new-configuration-files.html +[23]: http://0pointer.de/blog/projects/on-etc-sysinit.html +[24]: http://0pointer.de/blog/projects/instances.html +[25]: http://0pointer.de/blog/projects/inetd.html diff --git a/sources/tech/20171025 Typeset your docs with LaTeX and TeXstudio on Fedora.md b/published/202102/20171025 Typeset your docs with LaTeX and TeXstudio on Fedora.md similarity index 56% rename from sources/tech/20171025 Typeset your docs with LaTeX and TeXstudio on Fedora.md rename to published/202102/20171025 Typeset your docs with LaTeX and TeXstudio on Fedora.md index 4a64e58971..8339eaf7d4 100644 --- a/sources/tech/20171025 Typeset your docs with LaTeX and TeXstudio on Fedora.md +++ b/published/202102/20171025 Typeset your docs with LaTeX and TeXstudio on Fedora.md @@ -1,23 +1,24 @@ [#]: collector: (Chao-zhi) [#]: translator: (Chao-zhi) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13136-1.html) [#]: subject: (Typeset your docs with LaTeX and TeXstudio on Fedora) [#]: via: (https://fedoramagazine.org/typeset-latex-texstudio-fedora/) -[#]: author: (Julita Inca Chiroque ) +[#]: author: (Julita Inca Chiroque https://fedoramagazine.org/author/yulytas/) -Typeset your docs with LaTeX and TeXstudio on Fedora +使用 LaTeX 和 TeXstudio 排版文档 ====== + ![](https://fedoramagazine.org/wp-content/uploads/2017/07/latex-texstudio-945x400.jpg) -LaTeX is [a document preparation system][1] for high-quality typesetting. It’s often used for larger technical or scientific documents. However, you can use LaTeX for almost any form of publishing. Teachers can edit their exams and syllabi, and students can present their thesis and reports for classes. This article gets you started with the TeXstudio app. TeXstudio makes it easy to edit LaTeX documents. +LaTeX 是一个服务于高质量排版的[文档准备系统][1]。通常用于大量的技术和科学文档的排版。不过,你也可以使用 LaTex 排版各种形式的文档。教师可以编辑他们的考试和教学大纲,学生可以展示他们的论文和报告。这篇文章让你尝试使用 TeXstudio。TeXstudio 是一个便于编辑 LaTeX 文档的软件。 -### Launching TeXstudio +### 启动 TeXstudio -If you’re using Fedora Workstation, launch Software, and type TeXstudio to search for the app. Then select Install to add TeXstudio to your system. You can also launch the app from Software, or go to the shell overview as usual. +如果你使用的是 Fedora Workstation,请启动软件管理,然后输入 TeXstudio 以搜索该应用程序。然后选择安装并添加 TeXstudio 到你的系统。你可以从软件管理中启动这个程序,或者像以往一样在概览中启动这个软件。 -Alternately, if you use a terminal, type texstudio. If the package isn’t installed, the system prompts you to install it. Type y to start the installation. +或者,如果你使用终端,请输入 `texstudio`。如果未安装该软件包,系统将提示你安装它。键入 `y` 开始安装。 ``` $ texstudio @@ -25,9 +26,11 @@ bash: texstudio: command not found... Install package 'texstudio' to provide command 'texstudio'? [N/y] y ``` -LaTeX commands typically start with a backslash (), and command parameters are enclosed in curly braces { }. Start by declaring the type of the documentclass. This example shows you the document class is an article. +### 你的第一份文档 -Then, once you declare the documentclass, mark the beginning and the end of the document with begin and end. In between these commands, write a paragraph similar to the following: +LaTeX 命令通常以反斜杠 `\` 开头,命令参数用大括号 `{}` 括起来。首先声明 `documentclass` 的类型。这个例子向你展示了该文档的类是一篇文章。 + +然后,在声明 `documentclass` 之后,用 `begin` 和 `end` 标记文档的开始和结束。在这些命令之间,写一段类似以下的内容: ``` \documentclass{article} @@ -38,13 +41,13 @@ The Fedora Project is a project sponsored by Red Hat primarily to co-ordinate th ![](https://fedoramagazine.org/wp-content/uploads/2017/07/Screenshot-from-2017-10-05-20-19-15.png) -### Working with spacing +### 使用间距 -To create a paragraph break, leave one or more blank spaces between text.  Here’s an example with four paragraphs: +要创建段落分隔符,请在文本之间保留一个或多个换行符。下面是一个包含四个段落的示例: ![](https://fedoramagazine.org/wp-content/uploads/2017/07/Screenshot-from-2017-10-18-14-24-42.png) -You can see from the example that more than one line break doesn’t create additional blank space between paragraphs. However, if you do need to leave additional space, use the commands hspace and vspace. These add horizontal and vertical space, respectively. Here is some example code that shows additional spacing around paragraphs: +从该示例中可以看出,多个换行符不会在段落之间创建额外的空格。但是,如果你确实需要留出额外的空间,请使用 `hspace` 和 `vspace` 命令。这两个命令分别添加水平和垂直空间。下面是一些示例代码,显示了段落周围的附加间距: ``` \documentclass{article} @@ -65,13 +68,15 @@ The freedom to distribute copies of your modified versions to others (freedom 3) \end{document} ``` +如果需要,你也可以使用 `noindent` 命令来避免缩进。这里是上面 LaTeX 源码的结果: + ![](https://fedoramagazine.org/wp-content/uploads/2017/07/Screenshot-from-2017-10-18-17-24-53.png) -### Using Lists and Formats +### 使用列表和格式 -This example would look better if it presented the four essential freedoms of free software as a list. Set the list structure by using \begin{itemize} at the beginning of the list, and \end{itemize} at the end. Precede each item with the command \item. +如果把自由软件的四大基本自由列为一个清单,这个例子看起来会更好。通过在列表的开头使用`\begin{itemize}`,在末尾使用 `\end{itemize}` 来设置列表结构。在每个项目前面加上 `\item` 命令。 -Additional format also helps make the text more readable. Useful commands for formatting include bold, italic, underline, huge, large, tiny and textsc to help emphasize text: +额外的格式也有助于使文本更具可读性。用于格式化的有用命令包括粗体、斜体、下划线、超大、大、小和 textsc 以帮助强调文本: ``` \documentclass{article} @@ -93,15 +98,17 @@ Additional format also helps make the text more readable. Useful commands for fo \end{document} ``` -### Adding columns, images and links +![](https://fedoramagazine.org/wp-content/uploads/2017/07/Screenshot-from-2017-10-18-17-21-30.png) -Columns, images and links help add further information to your text. LaTeX includes functions for some advanced features as packages. The \usepackage command loads the package so you can make use of these features. +### 添加列、图像和链接 -For example, to make an image visible, you might use the command \usepackage{graphicx}. Or, to set up columns and links, use \usepackage{multicol} and \usepackage{hyperref}, respectively. +列、图像和链接有助于为文本添加更多信息。LaTeX 包含一些高级功能的函数作为宏包。`\usepackage` 命令加载宏包以便你可以使用这些功能。 -The \includegraphics command places an image inline in your document. (For simplicity, include the graphics file in the same directory as your LaTeX source file.) +例如,要使用图像,可以使用命令 `\usepackage{graphicx}`。或者,要设置列和链接,请分别使用 `\usepackage{multicol}` 和 `\usepackage{hyperref}`。 -Here’s an example that uses all these concepts. It also uses two PNG graphics files that were downloaded. Try your own graphics to see how they work. +`\includegraphics` 命令将图像内联放置在文档中。(为简单起见,请将图形文件包含在与 LaTeX 源文件相同的目录中。) + +下面是一个使用所有这些概念的示例。它还使用下载的两个 PNG 图片。试试你自己的图片,看看它们是如何工作的。 ``` \documentclass{article} @@ -132,9 +139,9 @@ Here’s an example that uses all these concepts. It also uses two PNG graphics \end{document} ``` -[][2] +![](https://fedoramagazine.org/wp-content/uploads/2017/07/Screenshot-from-2017-10-18-20-32-32.png) -The features here only scratch the surface of LaTeX capabilities. You can learn more about them at the project [help and documentation site][3]. +这里的功能只触及 LaTeX 功能的表面。你可以在该项目的[帮助和文档站点][3]了解更多关于它们的信息。 -------------------------------------------------------------------------------- @@ -143,7 +150,7 @@ via: https://fedoramagazine.org/typeset-latex-texstudio-fedora/ 作者:[Julita Inca Chiroque][a] 选题:[Chao-zhi][b] 译者:[Chao-zhi][b] -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/20190312 When the web grew up- A browser story.md b/published/202102/20190312 When the web grew up- A browser story.md similarity index 100% rename from published/20190312 When the web grew up- A browser story.md rename to published/202102/20190312 When the web grew up- A browser story.md diff --git a/published/20190404 Intel formally launches Optane for data center memory caching.md b/published/202102/20190404 Intel formally launches Optane for data center memory caching.md similarity index 100% rename from published/20190404 Intel formally launches Optane for data center memory caching.md rename to published/202102/20190404 Intel formally launches Optane for data center memory caching.md diff --git a/published/20190610 Tmux Command Examples To Manage Multiple Terminal Sessions.md b/published/202102/20190610 Tmux Command Examples To Manage Multiple Terminal Sessions.md similarity index 100% rename from published/20190610 Tmux Command Examples To Manage Multiple Terminal Sessions.md rename to published/202102/20190610 Tmux Command Examples To Manage Multiple Terminal Sessions.md diff --git a/published/20190626 Where are all the IoT experts going to come from.md b/published/202102/20190626 Where are all the IoT experts going to come from.md similarity index 100% rename from published/20190626 Where are all the IoT experts going to come from.md rename to published/202102/20190626 Where are all the IoT experts going to come from.md diff --git a/published/20190810 EndeavourOS Aims to Fill the Void Left by Antergos in Arch Linux World.md b/published/202102/20190810 EndeavourOS Aims to Fill the Void Left by Antergos in Arch Linux World.md similarity index 100% rename from published/20190810 EndeavourOS Aims to Fill the Void Left by Antergos in Arch Linux World.md rename to published/202102/20190810 EndeavourOS Aims to Fill the Void Left by Antergos in Arch Linux World.md diff --git a/published/20191227 The importance of consistency in your Python code.md b/published/202102/20191227 The importance of consistency in your Python code.md similarity index 100% rename from published/20191227 The importance of consistency in your Python code.md rename to published/202102/20191227 The importance of consistency in your Python code.md diff --git a/published/20191228 The Zen of Python- Why timing is everything.md b/published/202102/20191228 The Zen of Python- Why timing is everything.md similarity index 100% rename from published/20191228 The Zen of Python- Why timing is everything.md rename to published/202102/20191228 The Zen of Python- Why timing is everything.md diff --git a/published/20191229 How to tell if implementing your Python code is a good idea.md b/published/202102/20191229 How to tell if implementing your Python code is a good idea.md similarity index 100% rename from published/20191229 How to tell if implementing your Python code is a good idea.md rename to published/202102/20191229 How to tell if implementing your Python code is a good idea.md diff --git a/published/20191230 Namespaces are the shamash candle of the Zen of Python.md b/published/202102/20191230 Namespaces are the shamash candle of the Zen of Python.md similarity index 100% rename from published/20191230 Namespaces are the shamash candle of the Zen of Python.md rename to published/202102/20191230 Namespaces are the shamash candle of the Zen of Python.md diff --git a/published/202102/20200121 Ansible Automation Tool Installation, Configuration and Quick Start Guide.md b/published/202102/20200121 Ansible Automation Tool Installation, Configuration and Quick Start Guide.md new file mode 100644 index 0000000000..600a37c4cd --- /dev/null +++ b/published/202102/20200121 Ansible Automation Tool Installation, Configuration and Quick Start Guide.md @@ -0,0 +1,344 @@ +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13142-1.html" +[#]: subject: "Ansible Automation Tool Installation, Configuration and Quick Start Guide" +[#]: via: "https://www.2daygeek.com/install-configure-ansible-automation-tool-linux-quick-start-guide/" +[#]: author: "Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/" + +Ansible 自动化工具安装、配置和快速入门指南 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/22/124803cgryrgxqezjllfqg.jpg) + +市面上有很多自动化工具。我可以举几个例子,例如 Puppet、Chef、CFEngine、Foreman、Katello、Saltstock、Space Walk,它们被许多组织广泛使用。 + +### 自动化工具可以做什么? + +自动化工具可以自动执行例行任务,无需人工干预,从而使 Linux 管理员的工作变得更加轻松。这些工具允许用户执行配置管理,应用程序部署和资源调配。 + +### 为什么喜欢 Ansible? + +Ansible 是一种无代理的自动化工具,使用 SSH 执行所有任务,但其它工具需要在客户端节点上安装代理。 + +### 什么是 Ansible? + +Ansible 是一个开源、易于使用的功能强大的 IT 自动化工具,通过 SSH 在客户端节点上执行任务。 + +它是用 Python 构建的,这是当今世界上最流行、最强大的编程语言之一。两端都需要使用 Python 才能执行所有模块。 + +它可以配置系统、部署软件和安排高级 IT 任务,例如连续部署或零停机滚动更新。你可以通过 Ansible 轻松执行任何类型的自动化任务,包括简单和复杂的任务。 + +在开始之前,你需要了解一些 Ansible 术语,这些术语可以帮助你更好的创建任务。 + +### Ansible 如何工作? + +Ansible 通过在客户端节点上推送称为 ansible 模块的小程序来工作,这些模块临时存储在客户端节点中,通过 JSON 协议与 Ansible 服务器进行通信。 + +Ansible 通过 SSH 运行这些模块,并在完成后将其删除。 + +模块是用 Python 或 Perl 等编写的一些脚本。 + +![][1] + +*控制节点,用于控制剧本的全部功能,包括客户端节点(主机)。* + + * 控制节点Control node:使用 Ansible 在受控节点上执行任务的主机。你可以有多个控制节点,但不能使用 Windows 系统主机当作控制节点。 + * 受控节点Managed node:控制节点配置的主机列表。 + * 清单Inventory:控制节点管理的一个主机列表,这些节点在 `/etc/ansible/hosts` 文件中配置。它包含每个节点的信息,比如 IP 地址或其主机名,还可以根据需要对这些节点进行分组。 + * 模块Module:每个模块用于执行特定任务,目前有 3387 个模块。 + * 点对点ad-hoc:它允许你一次性运行一个任务,它使用 `/usr/bin/ansible` 二进制文件。 + * 任务Task:每个动作Play都有一个任务列表。任务按顺序执行,在受控节点中一次执行一个任务。 + * 剧本Playbook:你可以使用剧本同时执行多个任务,而使用点对点只能执行一个任务。剧本使用 YAML 编写,易于阅读。将来,我们将会写一篇有关剧本的文章,你可以用它来执行复杂的任务。 + +### 测试环境 + +此环境包含一个控制节点(`server.2g.lab`)和三个受控节点(`node1.2g.lab`、`node2.2g.lab`、`node3.2g.lab`),它们均在虚拟环境中运行,操作系统分别为: + +| System Purpose | Hostname | IP Address | OS | +|----------------------|---------------|-------------|---------------| +| Ansible Control Node | server.2g.lab | 192.168.1.7 | Manjaro 18 | +| Managed Node1 | node1.2g.lab | 192.168.1.6 | CentOS7 | +| Managed Node2 | node2.2g.lab | 192.168.1.5 | CentOS8 | +| Managed Node3 | node3.2g.lab | 192.168.1.9 | Ubuntu 18.04 | +| User: daygeek | + +### 前置条件 + + * 在 Ansible 控制节点和受控节点之间启用无密码身份验证。 + * 控制节点必须是 Python 2(2.7 版本) 或 Python 3(3.5 或更高版本)。 + * 受控节点必须是 Python 2(2.6 或更高版本) 或 Python 3(3.5 或更高版本)。 + * 如果在远程节点上启用了 SELinux,则在 Ansible 中使用任何与复制、文件、模板相关的功能之前,还需要在它们上安装 `libselinux-python`。 + +### 如何在控制节点上安装 Ansible + +对于 Fedora/RHEL 8/CentOS 8 系统,使用 [DNF 命令][2] 来安装 Ansible。 + +注意:你需要在 RHEL/CentOS 系统上启用 [EPEL 仓库][3],因为 Ansible 软件包在发行版官方仓库中不可用。 + +``` +$ sudo dnf install ansible +``` + +对于 Debian/Ubuntu 系统,使用 [APT-GET 命令][4] 或 [APT 命令][5] 来安装 Ansible。 + +配置下面的 PPA 以便在 Ubuntu 上安装最新稳定版本的 Ansible。 + +``` +$ sudo apt update +$ sudo apt install software-properties-common +$ sudo apt-add-repository --yes --update ppa:ansible/ansible +$ sudo apt install ansible +``` + +对于 Debian 系统,配置以下源列表: + +``` +$ echo "deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" | sudo tee -a /etc/apt/sources.list.d/ansible.list +$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367 +$ sudo apt update +$ sudo apt install ansible +``` + +对于 Arch Linux 系统,使用 [Pacman 命令][6] 来安装 Ansible: + +``` +$ sudo pacman -S ansible +``` + +对于 RHEL/CentOS 系统,使用 [YUM 命令][7] 来安装 Ansible: + +``` +$ sudo yum install ansible +``` + +对于 openSUSE 系统,使用 [Zypper 命令][8] 来安装 Ansible: + +``` +$ sudo zypper install ansible +``` + +或者,你可以使用 [Python PIP 包管理工具][9] 来安装: + +``` +$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py +$ sudo python get-pip.py +$ sudo pip install ansible +``` + +在控制节点上检查安装的 Ansible 版本: + +``` +$ ansible --version + +ansible 2.9.2 + config file = /etc/ansible/ansible.cfg + configured module search path = ['/home/daygeek/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] + ansible python module location = /usr/lib/python3.8/site-packages/ansible + executable location = /usr/bin/ansible + python version = 3.8.1 (default, Jan 8 2020, 23:09:20) [GCC 9.2.0] +``` + +### 如何在受控节点上安装 Python? + +使用以下命令在受控节点上安装 python: + +``` +$ sudo yum install -y python +$ sudo dnf install -y python +$ sudo zypper install -y python +$ sudo pacman -S python +$ sudo apt install -y python +``` + +### 如何在 Linux 设置 SSH 密钥身份验证(无密码身份验证) + +使用以下命令创建 ssh 密钥,然后将其复制到远程计算机。 + +``` +$ ssh-keygen +$ ssh-copy-id daygeek@node1.2g.lab +$ ssh-copy-id daygeek@node2.2g.lab +$ ssh-copy-id daygeek@node3.2g.lab +``` + +具体参考这篇文章《[在 Linux 上设置 SSH 密钥身份验证(无密码身份验证)][10]》。 + +### 如何创建 Ansible 主机清单 + +在 `/etc/ansible/hosts` 文件中添加要管理的节点列表。如果没有该文件,则可以创建一个新文件。以下是我的测试环境的主机清单文件: + +``` +$ sudo vi /etc/ansible/hosts + +[web] +node1.2g.lab +node2.2g.lab + +[app] +node3.2g.lab +``` + +让我们看看是否可以使用以下命令查找所有主机。 + +``` +$ ansible all --list-hosts + + hosts (3): + node1.2g.lab + node2.2g.lab + node3.2g.lab +``` + +对单个组运行以下命令: + +``` +$ ansible web --list-hosts + + hosts (2): + node1.2g.lab + node2.2g.lab +``` + +### 如何使用点对点命令执行任务 + +一旦完成主机清单验证检查后,你就可以上路了。干的漂亮! + +**语法:** + +``` +ansible [pattern] -m [module] -a "[module options]" + +Details: +======== +ansible: A command +pattern: Enter the entire inventory or a specific group +-m [module]: Run the given module name +-a [module options]: Specify the module arguments +``` + +使用 Ping 模块对主机清单中的所有节点执行 ping 操作: + +``` +$ ansible all -m ping + +node3.2g.lab | SUCCESS => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "ping": "pong" +} +node1.2g.lab | SUCCESS => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "ping": "pong" +} +node2.2g.lab | SUCCESS => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/libexec/platform-python" + }, + "changed": false, + "ping": "pong" +} +``` + +所有系统都返回了成功,但什么都没有改变,只返回了 `pong` 代表成功。 + +你可以使用以下命令获取可用模块的列表。 + +``` +$ ansible-doc -l +``` + +当前有 3387 个内置模块,它们会随着 Ansible 版本的递增而增加: + +``` +$ ansible-doc -l | wc -l +3387 +``` + +使用 command 模块对主机清单中的所有节点执行命令: + +``` +$ ansible all -m command -a "uptime" + +node3.2g.lab | CHANGED | rc=0 >> + 18:05:07 up 1:21, 3 users, load average: 0.12, 0.06, 0.01 +node1.2g.lab | CHANGED | rc=0 >> + 06:35:06 up 1:21, 4 users, load average: 0.01, 0.03, 0.05 +node2.2g.lab | CHANGED | rc=0 >> + 18:05:07 up 1:25, 3 users, load average: 0.01, 0.01, 0.00 +``` + +对指定组执行 command 模块。 + +检查 app 组主机的内存使用情况: + +``` +$ ansible app -m command -a "free -m" + +node3.2g.lab | CHANGED | rc=0 >> + total used free shared buff/cache available +Mem: 1993 1065 91 6 836 748 +Swap: 1425 0 1424 +``` + +要对 web 组运行 `hostnamectl` 命令,使用以下格式: + +``` +$ ansible web -m command -a "hostnamectl" + +node1.2g.lab | CHANGED | rc=0 >> + Static hostname: CentOS7.2daygeek.com + Icon name: computer-vm + Chassis: vm + Machine ID: 002f47b82af248f5be1d67b67e03514c + Boot ID: dc38f9b8089d4b2d9304e526e00c6a8f + Virtualization: kvm + Operating System: CentOS Linux 7 (Core) + CPE OS Name: cpe:/o:centos:centos:7 + Kernel: Linux 3.10.0-957.el7.x86_64 + Architecture: x86-64 +node2.2g.lab | CHANGED | rc=0 >> + Static hostname: node2.2g.lab + Icon name: computer-vm + Chassis: vm + Machine ID: e39e3a27005d44d8bcbfcab201480b45 + Boot ID: 27b46a09dde546da95ace03420fe12cb + Virtualization: oracle + Operating System: CentOS Linux 8 (Core) + CPE OS Name: cpe:/o:centos:centos:8 + Kernel: Linux 4.18.0-80.el8.x86_64 + Architecture: x86-64 +``` + +参考:[Ansible 文档][11]。 + +-------------------------------------------------------------------------------- + +via: https://www.2daygeek.com/install-configure-ansible-automation-tool-linux-quick-start-guide/ + +作者:[Magesh Maruthamuthu][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.2daygeek.com/author/magesh/ +[b]: https://github.com/lujun9972 +[1]: https://www.2daygeek.com/wp-content/uploads/2020/01/ansible-architecture-2daygeek.png +[2]: https://www.2daygeek.com/linux-dnf-command-examples-manage-packages-fedora-centos-rhel-systems/ +[3]: https://www.2daygeek.com/install-enable-epel-repository-on-rhel-centos-oracle-linux/ +[4]: https://www.2daygeek.com/apt-get-apt-cache-command-examples-manage-packages-debian-ubuntu-systems/ +[5]: https://www.2daygeek.com/apt-command-examples-manage-packages-debian-ubuntu-systems/ +[6]: https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/ +[7]: https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/ +[8]: https://www.2daygeek.com/zypper-command-examples-manage-packages-opensuse-system/ +[9]: https://www.2daygeek.com/install-pip-manage-python-packages-linux/ +[10]: https://www.2daygeek.com/configure-setup-passwordless-ssh-key-based-authentication-linux/ +[11]: https://docs.ansible.com/ansible/latest/user_guide/index.html diff --git a/published/202102/20200124 Ansible Ad-hoc Command Quick Start Guide with Examples.md b/published/202102/20200124 Ansible Ad-hoc Command Quick Start Guide with Examples.md new file mode 100644 index 0000000000..d1b5c335fe --- /dev/null +++ b/published/202102/20200124 Ansible Ad-hoc Command Quick Start Guide with Examples.md @@ -0,0 +1,294 @@ +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13163-1.html" +[#]: subject: "Ansible Ad-hoc Command Quick Start Guide with Examples" +[#]: via: "https://www.2daygeek.com/ansible-ad-hoc-command-quick-start-guide-with-examples/" +[#]: author: "Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/" + +Ansible 点对点命令快速入门指南示例 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/28/221449b8ldh7v4ll8dw774.jpg) + +之前,我们写了一篇有关 [Ansible 安装和配置][1] 的文章。在那个教程中只包含了一些使用方法的示例。如果你是 Ansible 新手,建议你阅读上篇文章。一旦你熟悉了,就可以继续阅读本文了。 + +默认情况下,Ansible 仅使用 5 个并行进程。如果要在多个主机上执行任务,需要通过添加 `-f [进程数]` 选项来手动设置进程数。 + +### 什么是点对点ad-hoc命令? + +点对点命令用于在一个或多个受控节点上自动执行任务。它非常简单,但是不可重用。它使用 `/usr/bin/ansible` 二进制文件执行所有操作。 + +点对点命令最适合运行一次的任务。例如,如果要检查指定用户是否可用,你可以使用一行命令而无需编写剧本。 + +#### 为什么你要了解点对点命令? + +点对点命令证明了 Ansible 的简单性和强大功能。从 2.9 版本开始,它支持 3389 个模块,因此你需要了解和学习要定期使用的 Ansible 模块列表。 + +如果你是一个 Ansible 新手,可以借助点对点命令轻松地练习这些模块及参数。 + +你在这里学习到的概念将直接移植到剧本中。 + +**点对点命令的一般语法:** + +``` +ansible [模式] -m [模块] -a "[模块选项]" +``` + +点对点命令包含四个部分,详细信息如下: + +| 部分 | 描述 | +|----------|-----------------------------------| +| `ansible`| 命令 | +| 模式 | 输入清单或指定组 | +| 模块 | 运行指定的模块名称 | +| 模块选项 | 指定模块参数 | + +#### 如何使用 Ansible 清单文件 + +如果使用 Ansible 的默认清单文件 `/etc/ansible/hosts`,你可以直接调用它。否则你可以使用 `-i` 选项指定 Ansible 清单文件的路径。 + +#### 什么是模式以及如何使用它? + +Ansible 模式可以代指某个主机、IP 地址、清单组、一组主机或者清单中的所有主机。它允许你对它们运行命令和剧本。模式非常灵活,你可以根据需要使用它们。 + +例如,你可以排除主机、使用通配符或正则表达式等等。 + +下表描述了常见的模式以及用法。但是,如果它不能满足你的需求,你可以在 `ansible-playbook` 中使用带有 `-e` 参数的模式中的变量。 + +| 描述 | 模式 | 目标 | +|-----|------|-----| +| 所有主机 | `all`(或 `*`) | 对清单中的所有服务器运行 Ansible | +| 一台主机 | `host1` | 只针对给定主机运行 Ansible | +| 多台主机 | `host1:host2`(或 `host1,host2`)| 对上述多台主机运行 Ansible | +| 一组 | `webservers` | 在 `webservers` 群组中运行 Ansible | +| 多组 | `webservers:dbservers` | `webservers` 中的所有主机加上 `dbservers` 中的所有主机 | +| 排除组 | `webservers:!atlanta` | `webservers` 中除 `atlanta` 以外的所有主机 | +| 组之间的交集 | `webservers:&staging` | `webservers` 中也在 `staging` 的任何主机 | + +#### 什么是 Ansible 模块,它干了什么? + +模块,也称为“任务插件”或“库插件”,它是一组代码单元,可以直接或通过剧本在远程主机上执行指定任务。 + +Ansible 在远程目标节点上执行指定模块并收集其返回值。 + +每个模块都支持多个参数,可以满足用户的需求。除少数模块外,几乎所有模块都采用 `key=value` 参数。你可以一次添加带有空格的多个参数,而 `command` 或 `shell` 模块会直接运行你输入的字符串。 + +我们将添加一个包含最常用的“模块选项”参数的表。 + +列出所有可用的模块,运行以下命令: + +``` +$ ansible-doc -l +``` + +运行以下命令来阅读指定模块的文档: + +``` +$ ansible-doc [模块] +``` + +### 1)如何在 Linux 上使用 Ansible 列出目录的内容 + +可以使用 Ansible `command` 模块来完成这项操作,如下所示。我们列出了 `node1.2g.lab` 和 `nod2.2g.lab`* 远程服务器上 `daygeek` 用户主目录的内容。 + +``` +$ ansible web -m command -a "ls -lh /home/daygeek" + +node1.2g.lab | CHANGED | rc=0 >> +total 12K +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Desktop +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Documents +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Downloads +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Music +-rwxr-xr-x. 1 daygeek daygeek 159 Mar 4 2019 passwd-up.sh +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Pictures +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Public +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Templates +-rwxrwxr-x. 1 daygeek daygeek 138 Mar 10 2019 user-add.sh +-rw-rw-r--. 1 daygeek daygeek 18 Mar 10 2019 user-list1.txt +drwxr-xr-x. 2 daygeek daygeek 6 Feb 15 2019 Videos + +node2.2g.lab | CHANGED | rc=0 >> +total 0 +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Desktop +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Documents +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Downloads +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Music +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Pictures +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Public +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Templates +drwxr-xr-x. 2 daygeek daygeek 6 Nov 9 09:55 Videos +``` + +### 2)如何在 Linux 使用 Ansible 管理文件 + +Ansible 的 `copy` 模块将文件从本地系统复制到远程系统。使用 Ansible `command` 模块将文件移动或复制到远程计算机。 + +``` +$ ansible web -m copy -a "src=/home/daygeek/backup/CentOS7.2daygeek.com-20191025.tar dest=/home/u1" --become + +node1.2g.lab | CHANGED => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": true, + "checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c", + "dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar", + "gid": 0, + "group": "root", + "md5sum": "ee8e778646e00456a4cedd5fd6458cf5", + "mode": "0644", + "owner": "root", + "secontext": "unconfined_u:object_r:user_home_t:s0", + "size": 30720, + "src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.474042-118186643704900/source", + "state": "file", + "uid": 0 +} + +node2.2g.lab | CHANGED => { + "ansible_facts": { + "discovered_interpreter_python": "/usr/libexec/platform-python" + }, + "changed": true, + "checksum": "ad8aadc0542028676b5fe34c94347829f0485a8c", + "dest": "/home/u1/CentOS7.2daygeek.com-20191025.tar", + "gid": 0, + "group": "root", + "md5sum": "ee8e778646e00456a4cedd5fd6458cf5", + "mode": "0644", + "owner": "root", + "secontext": "unconfined_u:object_r:user_home_t:s0", + "size": 30720, + "src": "/home/daygeek/.ansible/tmp/ansible-tmp-1579726582.4793239-237229399335623/source", + "state": "file", + "uid": 0 +} +``` + +我们可以运行以下命令进行验证: + +``` +$ ansible web -m command -a "ls -lh /home/u1" --become + +node1.2g.lab | CHANGED | rc=0 >> +total 36K +-rw-r--r--. 1 root root 30K Jan 22 14:56 CentOS7.2daygeek.com-20191025.tar +-rw-r--r--. 1 root root 25 Dec 9 03:31 user-add.sh + +node2.2g.lab | CHANGED | rc=0 >> +total 36K +-rw-r--r--. 1 root root 30K Jan 23 02:26 CentOS7.2daygeek.com-20191025.tar +-rw-rw-r--. 1 u1 u1 18 Jan 23 02:21 magi.txt +``` + +要将文件从一个位置复制到远程计算机上的另一个位置,使用以下命令: + +``` +$ ansible web -m command -a "cp /home/u2/magi/ansible-1.txt /home/u2/magi/2g" --become +``` + +移动文件,使用以下命令: + +``` +$ ansible web -m command -a "mv /home/u2/magi/ansible.txt /home/u2/magi/2g" --become +``` + +在 `u1` 用户目录下创建一个名为 `ansible.txt` 的新文件,运行以下命令: + +``` +$ ansible web -m file -a "dest=/home/u1/ansible.txt owner=u1 group=u1 state=touch" --become +``` + +在 `u1` 用户目录下创建一个名为 `magi` 的新目录,运行以下命令: + +``` +$ ansible web -m file -a "dest=/home/u1/magi mode=755 owner=u2 group=u2 state=directory" --become +``` + +将 `u1` 用户目录下的 `ansible.txt`* 文件权限更改为 `777`,运行以下命令: + +``` +$ ansible web -m file -a "dest=/home/u1/ansible.txt mode=777" --become +``` + +删除 `u1` 用户目录下的 `ansible.txt` 文件,运行以下命令: + +``` +$ ansible web -m file -a "dest=/home/u2/magi/ansible-1.txt state=absent" --become +``` + +使用以下命令删除目录,它将递归删除指定目录: + +``` +$ ansible web -m file -a "dest=/home/u2/magi/2g state=absent" --become +``` + +### 3)用户管理 + +你可以使用 Ansible 轻松执行用户管理活动。例如创建、删除用户以及向一个组添加用户。 + +``` +$ ansible all -m user -a "name=foo password=[crypted password here]" +``` + +运行以下命令删除用户: + +``` +$ ansible all -m user -a "name=foo state=absent" +``` + +### 4)管理包 + +使用合适的 Ansible 包管理器模块可以轻松地管理安装包。例如,我们将使用 `yum` 模块来管理 CentOS 系统上的软件包。 + +安装最新的 Apache(httpd): + +``` +$ ansible web -m yum -a "name=httpd state=latest" +``` + +卸载 Apache(httpd) 包: + +``` +$ ansible web -m yum -a "name=httpd state=absent" +``` + +### 5)管理服务 + +使用以下 Ansible 模块命令可以在 Linux 上管理任何服务。 + +停止 httpd 服务: + +``` +$ ansible web -m service -a "name=httpd state=stopped" +``` + +启动 httpd 服务: + +``` +$ ansible web -m service -a "name=httpd state=started" +``` + +重启 httpd 服务: + +``` +$ ansible web -m service -a "name=httpd state=restarted" +``` + +-------------------------------------------------------------------------------- + +via: https://www.2daygeek.com/ansible-ad-hoc-command-quick-start-guide-with-examples/ + +作者:[Magesh Maruthamuthu][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.2daygeek.com/author/magesh/ +[b]: https://github.com/lujun9972 +[1]: https://linux.cn/article-13142-1.html diff --git a/published/20200419 Getting Started With Pacman Commands in Arch-based Linux Distributions.md b/published/202102/20200419 Getting Started With Pacman Commands in Arch-based Linux Distributions.md similarity index 100% rename from published/20200419 Getting Started With Pacman Commands in Arch-based Linux Distributions.md rename to published/202102/20200419 Getting Started With Pacman Commands in Arch-based Linux Distributions.md diff --git a/published/20200529 A new way to build cross-platform UIs for Linux ARM devices.md b/published/202102/20200529 A new way to build cross-platform UIs for Linux ARM devices.md similarity index 100% rename from published/20200529 A new way to build cross-platform UIs for Linux ARM devices.md rename to published/202102/20200529 A new way to build cross-platform UIs for Linux ARM devices.md diff --git a/published/20200607 Top Arch-based User Friendly Linux Distributions That are Easier to Install and Use Than Arch Linux Itself.md b/published/202102/20200607 Top Arch-based User Friendly Linux Distributions That are Easier to Install and Use Than Arch Linux Itself.md similarity index 100% rename from published/20200607 Top Arch-based User Friendly Linux Distributions That are Easier to Install and Use Than Arch Linux Itself.md rename to published/202102/20200607 Top Arch-based User Friendly Linux Distributions That are Easier to Install and Use Than Arch Linux Itself.md diff --git a/published/20200615 LaTeX Typesetting - Part 1 (Lists).md b/published/202102/20200615 LaTeX Typesetting - Part 1 (Lists).md similarity index 100% rename from published/20200615 LaTeX Typesetting - Part 1 (Lists).md rename to published/202102/20200615 LaTeX Typesetting - Part 1 (Lists).md diff --git a/translated/tech/20200629 LaTeX typesetting part 2 (tables).md b/published/202102/20200629 LaTeX typesetting part 2 (tables).md similarity index 75% rename from translated/tech/20200629 LaTeX typesetting part 2 (tables).md rename to published/202102/20200629 LaTeX typesetting part 2 (tables).md index 4b91e8cc0d..6b134a2c06 100644 --- a/translated/tech/20200629 LaTeX typesetting part 2 (tables).md +++ b/published/202102/20200629 LaTeX typesetting part 2 (tables).md @@ -1,23 +1,22 @@ [#]: collector: (lujun9972) [#]: translator: (Chao-zhi) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (LaTeX typesetting part 2 (tables)) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13146-1.html) +[#]: subject: (LaTeX typesetting part 2 \(tables\)) [#]: via: (https://fedoramagazine.org/latex-typesetting-part-2-tables/) [#]: author: (Earl Ramirez https://fedoramagazine.org/author/earlramirez/) - LaTex 排版 (2):表格 ====== ![][1] -LaTeX 提供了许多工具来创建和定制表格,在本系列中,我们将使用 tabular 和 tabularx 环境来创建和定制表。 +LaTeX 提供了许多工具来创建和定制表格,在本系列中,我们将使用 `tabular` 和 `tabularx` 环境来创建和定制表。 ### 基础表格 -要创建表,只需指定环境 `\begin{tabular}{ 列选项}` +要创建表,只需指定环境 `\begin{tabular}{列选项}`: ``` \begin{tabular}{c|c} @@ -35,25 +34,25 @@ LaTeX 提供了许多工具来创建和定制表格,在本系列中,我们 参数 | 位置 |:---:|:--- -c | 将文本置于中间 -l | 将文本左对齐 -r | 将文本右对齐 -p{width} | 文本对齐单元格顶部 -m{width} | 文本对齐单元格中间 -b{width} | 文本对齐单元格底部 +`c` | 将文本置于中间 +`l` | 将文本左对齐 +`r` | 将文本右对齐 +`p{宽度}` | 文本对齐单元格顶部 +`m{宽度}` | 文本对齐单元格中间 +`b{宽度}` | 文本对齐单元格底部 -> m{width} 和 b{width} 都要求在最前面指定数组包。 +> `m{宽度}` 和 `b{宽度}` 都要求在最前面指定数组包。 -使用上面的例子,让我们来详细讲解使用的要点,并描述您将在本系列中看到的更多选项 +使用上面的例子,让我们来详细讲解使用的要点,并描述你将在本系列中看到的更多选项: 选项 | 意义 |:-:|:-| -& | 定义每个单元格,这个符号仅用于第二列 -\ | 这将终止该行并开始一个新行 -\| | 指定表格中的垂直线(可选) -\hline | 指定表格中水平线(可选) -*{num}{form} | 当您有许多列时,可以使用这个,并且是限制重复的有效方法 -\|\| | 指定表格中垂直双线 +`&` | 定义每个单元格,这个符号仅用于第二列 +`\\` | 这将终止该行并开始一个新行 +`|` | 指定表格中的垂直线(可选) +`\hline` | 指定表格中的水平线(可选) +`*{数量}{格式}` | 当你有许多列时,可以使用这个,并且是限制重复的有效方法 +`||` | 指定表格中垂直双线 ### 定制表格 @@ -77,7 +76,7 @@ b{width} | 文本对齐单元格底部 如果列中有很多文本,那么它的格式就不好处理,看起来也不好看。 -下面的示例显示了文本的格式长度,我们将在导言区中使用 “blindtext”,以便生成示例文本。 +下面的示例显示了文本的格式长度,我们将在导言区中使用 `blindtext`,以便生成示例文本。 ``` \begin{tabular}{|l|l|}\hline @@ -88,15 +87,14 @@ b{width} | 文本对齐单元格底部 ![Default Formatting][4] -正如您所看到的,文本超出了页面宽度;但是,有几个选项可以克服这个问题。 - - * 指定列宽,例如 m{5cm} - * 利用 tablarx 环境,这需要在导言区中引用 tablarx 宏包。 +正如你所看到的,文本超出了页面宽度;但是,有几个选项可以克服这个问题。 + * 指定列宽,例如 `m{5cm}` + * 利用 `tablarx` 环境,这需要在导言区中引用 `tablarx` 宏包。 #### 使用列宽管理长文本 -通过指定列宽,文本将被包装为如下示例所示的宽度。 +通过指定列宽,文本将被折行为如下示例所示的宽度。 ``` \begin{tabular}{|l|m{14cm}|} \hline @@ -105,14 +103,11 @@ b{width} | 文本对齐单元格底部 \end{tabular}\vspace{3mm} ``` -![Column width][5] +![Column Width][5] #### 使用 tabularx 管理长文本 -在我们利用表格之前,我们需要在导言区中加上它。TABLARX 方法见以下示例 - -`\begin{tabularx}{ 宽度}{列选项}` - +在我们利用表格之前,我们需要在导言区中加上它。`tabularx` 方法见以下示例:`\begin{tabularx}{宽度}{列选项}`。 ``` \begin{tabularx}{\textwidth}{|l|X|} \hline @@ -121,18 +116,17 @@ Text &\blindtext \\ \hline \end{tabularx} ``` - ![Tabularx][6] -请注意,我们需要处理长文本的列在花括号中指定了大写 “X”。 +请注意,我们需要处理长文本的列在花括号中指定了大写 `X`。 ### 合并行合并列 -有时需要合并行或列。本节描述了如何完成。要使用 multirow 和 multicolumn,请将 multirow 添加到导言区。 +有时需要合并行或列。本节描述了如何完成。要使用 `multirow` 和 `multicolumn`,请将 `multirow` 添加到导言区。 #### 合并行 -Multirow 采用以下参数 `\multirow{ 行的数量}{宽度}{文本}`,让我们看看下面的示例。 +`multirow` 采用以下参数 `\multirow{行的数量}{宽度}{文本}`,让我们看看下面的示例。 ``` \begin{tabular}{|l|l|}\hline @@ -145,11 +139,11 @@ Multirow 采用以下参数 `\multirow{ 行的数量}{宽度}{文本}`,让我 ![MultiRow][7] -在上面的示例中,指定了两行,'*'告诉 LaTeX 自动管理单元格的大小。 +在上面的示例中,指定了两行,`*` 告诉 LaTeX 自动管理单元格的大小。 #### 合并列 -Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文本}`,下面的示例演示 Multicolumn。 +`multicolumn` 参数是 `{multicolumn{列的数量}{单元格选项}{位置}{文本}`,下面的示例演示合并列。 ``` \begin{tabular}{|l|l|l|}\hline @@ -165,14 +159,14 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 可以为文本、单个单元格或整行指定颜色。此外,我们可以为每一行配置交替的颜色。 -在给表添加颜色之前,我们需要在导言区引用 `\usepackage[table]{xcolor}`。我们还可以使用以下颜色参考 [LaTeX Color][9] 或在颜色前缀后面添加感叹号(从 0 到 100 的阴影)来定义颜色。例如,`gray!30` +在给表添加颜色之前,我们需要在导言区引用 `\usepackage[table]{xcolor}`。我们还可以使用以下颜色参考 [LaTeX Color][9] 或在颜色前缀后面添加感叹号(从 0 到 100 的阴影)来定义颜色。例如,`gray!30`。 ``` \definecolor{darkblue}{rgb}{0.0, 0.0, 0.55} \definecolor{darkgray}{rgb}{0.66, 0.66, 0.66} ``` -下面的示例演示了一个具有各种颜色的表,`\rowcolors` 采用以下选项 `\rowcolors{ 起始行颜色}{偶数行颜色}{奇数行颜色}`。 +下面的示例演示了一个具有各种颜色的表,`\rowcolors` 采用以下选项 `\rowcolors{起始行颜色}{偶数行颜色}{奇数行颜色}`。 ``` \rowcolors{2}{darkgray}{gray!20} @@ -207,7 +201,7 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 让我们讲解一下为解决合并行替换颜色问题而实施的更改。 * 第一行从合并行上方开始 - * 行数从 2 更改为 -2,这意味着从上面的行开始读取 + * 行数从 `2` 更改为 `-2`,这意味着从上面的行开始读取 * `\rowcolor` 是为每一行指定的,更重要的是,多行必须具有相同的颜色,这样才能获得所需的结果。 关于颜色的最后一个注意事项是,要更改列的颜色,需要创建新的列类型并定义颜色。下面的示例说明了如何定义新的列颜色。 @@ -216,10 +210,10 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 \newcolumntype{g}{>{\columncolor{darkblue}}l} ``` -我们把它分解一下 +我们把它分解一下: - * `\newcolumntype{g}`:将字母 _g_ 定义为新列 - * `{>{\columncolor{darkblue}}l}`:在这里我们选择我们想要的颜色,并且 `l` 告诉列左对齐,这可以用 `c` 或 `r` 代替 + * `\newcolumntype{g}`:将字母 `g` 定义为新列 + * `{>{\columncolor{darkblue}}l}`:在这里我们选择我们想要的颜色,并且 `l` 告诉列左对齐,这可以用 `c` 或 `r` 代替。 ``` \begin{tabular}{g|l} @@ -234,7 +228,7 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 ### 横向表 -有时,您的表可能有许多列,纵向排列会很不好看。在导言区加入 “rotating” 包,您将能够创建一个横向表。下面的例子说明了这一点。 +有时,你的表可能有许多列,纵向排列会很不好看。在导言区加入 `rotating` 包,你将能够创建一个横向表。下面的例子说明了这一点。 对于横向表,我们将使用 `sidewaystable` 环境并在其中添加表格环境,我们还指定了其他选项。 @@ -260,7 +254,7 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 ### 列表和表格 -要将列表包含到表中,可以使用 tabularx,并将列表包含在指定的列中。另一个办法是使用表格格式,但必须指定列宽。 +要将列表包含到表中,可以使用 `tabularx`,并将列表包含在指定的列中。另一个办法是使用表格格式,但必须指定列宽。 #### 用 tabularx 处理列表 @@ -279,7 +273,6 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 #### 用 tabular 处理列表 - ``` \begin{tabular}{|l|m{6cm}|}\hline         Fedora Version &amp;amp;Editions \\\ \hline @@ -293,9 +286,9 @@ Multicolumn 参数是 `{Multicolumn{ 列的数量}{单元格选项}{位置}{文 ![List in tabular][16] -### 结论 +### 总结 -LaTeX 提供了许多使用 tablar 和 tablarx 自定义表的方法,您还可以在表环境 (\begin\table) 中添加 tablar 和 tablarx 来添加表的名称和定位表。 +LaTeX 提供了许多使用 `tablar` 和 `tablarx` 自定义表的方法,你还可以在表环境 (`\begin\table`) 中添加 `tablar` 和 `tablarx` 来添加表的名称和定位表。 ### LaTeX 宏包 @@ -324,7 +317,7 @@ via: https://fedoramagazine.org/latex-typesetting-part-2-tables/ 作者:[Earl Ramirez][a] 选题:[lujun9972][b] 译者:[Chao-zhi](https://github.com/Chao-zhi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/202102/20200724 LaTeX typesetting, Part 3- formatting.md b/published/202102/20200724 LaTeX typesetting, Part 3- formatting.md new file mode 100644 index 0000000000..2ae8a2991c --- /dev/null +++ b/published/202102/20200724 LaTeX typesetting, Part 3- formatting.md @@ -0,0 +1,283 @@ +[#]: collector: (Chao-zhi) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13154-1.html) +[#]: subject: (LaTeX typesetting,Part 3: formatting) +[#]: via: (https://fedoramagazine.org/latex-typesetting-part-3-formatting/) +[#]: author: (Earl Ramirez https://fedoramagazine.org/author/earlramirez/) + +LaTeX 排版(3):排版 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/26/113031wattha0hojj4f4ej.png) + +本 [系列][1] 介绍了 LaTeX 中的基本格式。[第 1 部分][2] 介绍了列表。[第 2 部分][3] 阐述了表格。在第 3 部分中,你将了解 LaTeX 的另一个重要特性:细腻灵活的文档排版。本文介绍如何自定义页面布局、目录、标题部分和页面样式。 + +### 页面维度 + +当你第一次编写 LaTeX 文档时,你可能已经注意到默认边距比你想象的要大一些。页边距与指定的纸张类型有关,例如 A4、letter 和 documentclass(article、book、report) 等等。要修改页边距,有几个选项,最简单的选项之一是使用 [fullpage][4] 包。 + +> 该软件包设置页面的主体,可以使主体几乎占满整个页面。 +> +> —— FULLPAGE PACKAGE DOCUMENTATION + +另一个选择是使用 [geometry][5] 包。在探索 `geometry` 包如何操纵页边距之前,请首先查看如下所示的页面尺寸。 + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image.png) + +1. 1 英寸 + `\hoffset` +2. 1 英寸 + `\voffset` +3. `\oddsidemargin` = 31pt +4. `\topmargin` = 20pt +5. `\headheight` = 12pt +6. `\headsep` = 25pt +7. `\textheight` = 592pt +8. `\textwidth` = 390pt +9. `\marginparsep` = 35pt +10. `\marginparwidth` = 35pt +11. `\footskip` = 30pt + +要使用 `geometry` 包将边距设置为 1 英寸,请使用以下示例 + +``` +\usepackage{geometry} +\geometry{a4paper, margin=1in} +``` + +除上述示例外,`geometry` 命令还可以修改纸张尺寸和方向。要更改纸张尺寸,请使用以下示例: + +``` +\usepackage[a4paper, total={7in, 8in}]{geometry} +``` + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-2-1024x287.png) + +要更改页面方向,需要将横向(`landscape`)添加到 `geometery` 选项中,如下所示: + +``` +\usepackage{geometery} +\geometry{a4paper, landscape, margin=1.5in +``` + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-9.png) + +### 目录 + +默认情况下,目录的标题为 “contents”。有时,你想将标题更改为 “Table of Content”,更改目录和章节第一节之间的垂直间距,或者只更改文本的颜色。 + +若要更改文本,请在导言区中添加以下行,用所需语言替换英语(`english`): + +``` +\usepackage[english]{babel} +\addto\captionsenglish{ +\renewcommand{\contentsname} +{\bfseries{Table of Contents}}} +``` + +要操纵目录与图、小节和章节列表之间的虚拟间距,请使用 `tocloft` 软件包。本文中使用的两个选项是 `cftbeforesecskip` 和 `cftaftertoctitleskip`。 + +> tocloft 包提供了控制目录、图表列表和表格列表的排版方法。 +> +> —— TOCLOFT PACKAGE DOUCMENTATION + +``` +\usepackage{tocloft} +\setlength\ctfbeforesecskip{2pt} +\setlength\cftaftertoctitleskip{30pt} +``` + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-3.png) + +*默认目录* + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-4.png) + +*定制目录* + +### 边框 + +在文档中使用包 [hyperref][6] 时,目录中的 LaTeX 章节列表和包含 `\url` 的引用都有边框,如下图所示。 + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-5.png) + +要删除这些边框,请在导言区中包括以下内容,你将看到目录中没有任何边框。 + +``` +\usepackage{hyperref} +\hypersetup{ pdfborder = {0 0 0}} +``` + +要修改标题部分的字体、样式或颜色,请使用程序包 [titlesec][7]。在本例中,你将更改节、子节和三级子节的字体大小、字体样式和字体颜色。首先,在导言区中增加以下内容。 + +``` +\usepackage{titlesec} +\titleformat*{\section}{\Huge\bfseries\color{darkblue}} +\titleformat*{\subsection}{\huge\bfseries\color{darkblue}} +\titleformat*{\subsubsection}{\Large\bfseries\color{darkblue}} +``` + +仔细看看代码,`\titleformat*{\section}` 指定要使用的节的深度。上面的示例最多使用第三个深度。`{\Huge\bfseries\color{darkblue}}` 部分指定字体大小、字体样式和字体颜色。 + +### 页面样式 + +要自定义的页眉和页脚,请使用 [fancyhdr][8]。此示例使用此包修改页面样式、页眉和页脚。下面的代码简要描述了每个选项的作用。 + +``` +\pagestyle{fancy} %for header to be on each page +\fancyhead[L]{} %keep left header blank +\fancyhead[C]{} %keep centre header blank +\fancyhead[R]{\leftmark} %add the section/chapter to the header right +\fancyfoot[L]{Static Content} %add static test to the left footer +\fancyfoot[C]{} %keep centre footer blank +\fancyfoot[R]{\thepage} %add the page number to the right footer +\setlength\voffset{-0.25in} %space between page border and header (1in + space) +\setlength\headheight{12pt} %height of the actual header. +\setlength\headsep{25pt} %separation between header and text. +\renewcommand{\headrulewidth}{2pt} % add header horizontal line +\renewcommand{\footrulewidth}{1pt} % add footer horizontal line +``` + +结果如下所示: + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-7.png) + +*页眉* + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-8.png) + +*页脚* + +### 小贴士 + +#### 集中导言区 + +如果要编写许多 TeX 文档,可以根据文档类别创建一个包含所有导言区的 `.tex` 文件并引用此文件。例如,我使用结构 `.tex` 如下所示。 + +``` +$ cat article_structure.tex +\usepackage[english]{babel} +\addto\captionsenglish{ +\renewcommand{\contentsname} +{\bfseries{\color{darkblue}Table of Contents}} +} % Relable the contents +%\usepackage[margin=0.5in]{geometry} % specifies the margin of the document +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{graphicx} % allows you to add graphics to the document +\usepackage{hyperref} % permits redirection of URL from a PDF document +\usepackage{fullpage} % formate the content to utilise the full page +%\usepackage{a4wide} +\usepackage[export]{adjustbox} % to force image position +%\usepackage[section]{placeins} % to have multiple images in a figure +\usepackage{tabularx} % for wrapping text in a table +%\usepackage{rotating} +\usepackage{multirow} +\usepackage{subcaption} % to have multiple images in a figure +%\usepackage{smartdiagram} % initialise smart diagrams +\usepackage{enumitem} % to manage the spacing between lists and enumeration +\usepackage{fancyhdr} %, graphicx} %for header to be on each page +\pagestyle{fancy} %for header to be on each page +%\fancyhf{} +\fancyhead[L]{} +\fancyhead[C]{} +\fancyhead[R]{\leftmark} +\fancyfoot[L]{Static Content} %\includegraphics[width=0.02\textwidth]{virgin_voyages.png}} +\fancyfoot[C]{} % clear center +\fancyfoot[R]{\thepage} +\setlength\voffset{-0.25in} %Space between page border and header (1in + space) +\setlength\headheight{12pt} %Height of the actual header. +\setlength\headsep{25pt} %Separation between header and text. +\renewcommand{\headrulewidth}{2pt} % adds horizontal line +\renewcommand{\footrulewidth}{1pt} % add horizontal line (footer) +%\renewcommand{\oddsidemargin}{2pt} % adjuct the margin spacing +%\renewcommand{\pagenumbering}{roman} % change the numbering style +%\renewcommand{\hoffset}{20pt} +%\usepackage{color} +\usepackage[table]{xcolor} +\hypersetup{ pdfborder = {0 0 0}} % removes the red boarder from the table of content +%\usepackage{wasysym} %add checkbox +%\newcommand\insq[1]{% +% \Square\ #1\quad% +%} % specify the command to add checkbox +%\usepackage{xcolor} +%\usepackage{colortbl} +%\definecolor{Gray}{gray}{0.9} % create new colour +%\definecolor{LightCyan}{rgb}{0.88,1,1} % create new colour +%\usepackage[first=0,last=9]{lcg} +%\newcommand{\ra}{\rand0.\arabic{rand}} +%\newcolumntype{g}{>{\columncolor{LightCyan}}c} % create new column type g +%\usesmartdiagramlibrary{additions} +%\setcounter{figure}{0} +\setcounter{secnumdepth}{0} % sections are level 1 +\usepackage{csquotes} % the proper was of using double quotes +%\usepackage{draftwatermark} % Enable watermark +%\SetWatermarkText{DRAFT} % Specify watermark text +%\SetWatermarkScale{5} % Toggle watermark size +\usepackage{listings} % add code blocks +\usepackage{titlesec} % Manipulate section/subsection +\titleformat{\section}{\Huge\bfseries\color{darkblue}} % update sections to bold with the colour blue \titleformat{\subsection}{\huge\bfseries\color{darkblue}} % update subsections to bold with the colour blue +\titleformat*{\subsubsection}{\Large\bfseries\color{darkblue}} % update subsubsections to bold with the colour blue +\usepackage[toc]{appendix} % Include appendix in TOC +\usepackage{xcolor} +\usepackage{tocloft} % For manipulating Table of Content virtical spacing +%\setlength\cftparskip{-2pt} +\setlength\cftbeforesecskip{2pt} %spacing between the sections +\setlength\cftaftertoctitleskip{30pt} % space between the first section and the text ``Table of Contents'' +\definecolor{navyblue}{rgb}{0.0,0.0,0.5} +\definecolor{zaffre}{rgb}{0.0, 0.08, 0.66} +\definecolor{white}{rgb}{1.0, 1.0, 1.0} +\definecolor{darkblue}{rgb}{0.0, 0.2, 0.6} +\definecolor{darkgray}{rgb}{0.66, 0.66, 0.66} +\definecolor{lightgray}{rgb}{0.83, 0.83, 0.83} +%\pagenumbering{roman} +``` + +在你的文章中,请参考以下示例中所示的方法引用 `structure.tex` 文件: + +``` +\documentclass[a4paper,11pt]{article} +\input{/path_to_structure.tex}} +\begin{document} +...... +\end{document} +``` + +#### 添加水印 + +要在 LaTeX 文档中启用水印,请使用 [draftwatermark][9] 软件包。下面的代码段和图像演示了如何在文档中添加水印。默认情况下,水印颜色为灰色,可以将其修改为所需的颜色。 + +``` +\usepackage{draftwatermark} +\SetWatermarkText{\color{red}Classified} %add watermark text +\SetWatermarkScale{4} %specify the size of the text +``` + +![](https://fedoramagazine.org/wp-content/uploads/2020/07/image-10.png) + +### 结论 + +在本系列中,你了解了 LaTeX 提供的一些基本但丰富的功能,这些功能可用于自定义文档以满足你的需要或将文档呈现给的受众。LaTeX 海洋中,还有许多软件包需要大家自行去探索。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/latex-typesetting-part-3-formatting/ + +作者:[Earl Ramirez][a] +选题:[Chao-zhi][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/earlramirez/ +[b]: https://github.com/Chao-zhi +[1]:https://fedoramagazine.org/tag/latex/ +[2]:https://linux.cn/article-13112-1.html +[3]:https://linux.cn/article-13146-1.html +[4]:https://www.ctan.org/pkg/fullpage +[5]:https://www.ctan.org/geometry +[6]:https://www.ctan.org/pkg/hyperref +[7]:https://www.ctan.org/pkg/titlesec +[8]:https://www.ctan.org/pkg/fancyhdr +[9]:https://www.ctan.org/pkg/draftwatermark \ No newline at end of file diff --git a/published/20200922 Give Your GNOME Desktop a Tiling Makeover With Material Shell GNOME Extension.md b/published/202102/20200922 Give Your GNOME Desktop a Tiling Makeover With Material Shell GNOME Extension.md similarity index 100% rename from published/20200922 Give Your GNOME Desktop a Tiling Makeover With Material Shell GNOME Extension.md rename to published/202102/20200922 Give Your GNOME Desktop a Tiling Makeover With Material Shell GNOME Extension.md diff --git a/published/202102/20201001 Navigating your Linux files with ranger.md b/published/202102/20201001 Navigating your Linux files with ranger.md new file mode 100644 index 0000000000..4c2387fde9 --- /dev/null +++ b/published/202102/20201001 Navigating your Linux files with ranger.md @@ -0,0 +1,124 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13137-1.html) +[#]: subject: (Navigating your Linux files with ranger) +[#]: via: (https://www.networkworld.com/article/3583890/navigating-your-linux-files-with-ranger.html) +[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/) + +用 ranger 在 Linux 文件的海洋中导航 +===== + +> ranger 是一个很好的工具,它为你的 Linux 文件提供了一个多级视图,并允许你使用方向键和一些方便的命令进行浏览和更改。 + +![](https://img.linux.net.cn/data/attachment/album/202102/20/121918g5hqhjfcjyffh3lt.jpg) + +`ranger` 是一款独特且非常方便的文件系统导航器,它允许你在 Linux 文件系统中移动,进出子目录,查看文本文件内容,甚至可以在不离开该工具的情况下对文件进行修改。 + +它运行在终端窗口中,并允许你按下方向键进行导航。它提供了一个多级的文件显示,让你很容易看到你在哪里、在文件系统中移动、并选择特定的文件。 + +要安装 `ranger`,请使用标准的安装命令(例如,`sudo apt install ranger`)。要启动它,只需键入 `ranger`。它有一个很长的、非常详细的手册页面,但开始使用 `ranger` 非常简单。 + +### ranger 的显示方式 + +你需要马上习惯的最重要的一件事就是 `ranger` 的文件显示方式。一旦你启动了 `ranger`,你会看到四列数据。第一列是你启动 `ranger` 的位置的上一级。例如,如果你从主目录开始,`ranger` 将在第一列中列出所有的主目录。第二列将显示你的主目录(或者你开始的目录)中的目录和文件的第一屏内容。 + +这里的关键是超越你可能有的任何习惯,将每一行显示的细节看作是相关的。第二列中的所有条目与第一列中的单个条目相关,第四列中的内容与第二列中选定的文件或目录相关。 + +与一般的命令行视图不同的是,目录将被列在第一位(按字母数字顺序),文件将被列在第二位(也是按字母数字顺序)。从你的主目录开始,显示的内容可能是这样的: + +``` +shs@dragonfly /home/shs/backups <== current selection + bugfarm backups 0 empty + dory bin 59 + eel Buttons 15 + nemo Desktop 0 + shark Documents 0 + shs Downloads 1 + ^ ^ ^ ^ + | | | | + homes directories # files listing + in selected in each of files in + home directory selected directory +``` + +`ranger` 显示的最上面一行告诉你在哪里。在这个例子中,当前目录是 `/home/shs/backups`。我们看到高亮显示的是 `empty`,因为这个目录中没有文件。如果我们按下方向键选择 `bin`,我们会看到一个文件列表: + +``` +shs@dragonfly /home/shs/bin <== current selection + bugfarm backups 0 append + dory bin 59 calcPower + eel Buttons 15 cap + nemo Desktop 0 extract + shark Documents 0 finddups + shs Downloads 1 fix + ^ ^ ^ ^ + | | | | + homes directories # files listing + in selected in each of files in + home directory selected directory +``` + +每一列中高亮显示的条目显示了当前的选择。使用右方向键可移动到更深的目录或查看文件内容。 + +如果你继续按下方向键移动到列表的文件部分,你会注意到第三列将显示文件大小(而不是文件的数量)。“当前选择”行也会显示当前选择的文件名,而最右边的一列则会尽可能地显示文件内容。 + +``` +shs@dragonfly /home/shs/busy_wait.c <== current selection + bugfarm BushyRidge.zip 170 K /* + dory busy_wait.c 338 B * program that does a busy wait + eel camper.jpg 5.55 M * it's used to show ASLR, and that's it + nemo check_lockscreen 80 B */ + shark chkrootkit-output 438 B #include + ^ ^ ^ ^ + | | | | + homes files sizes file content +``` + +在该显示的底行会显示一些文件和目录的详细信息: + +``` +-rw-rw-r—- shs shs 338B 2019-01-05 14:44 1.52G, 365G free 67/488 11% +``` + +如果你选择了一个目录并按下回车键,你将进入该目录。然后,在你的显示屏中最左边的一列将是你的主目录的内容列表,第二列将是该目录内容的文件列表。然后你可以检查子目录的内容和文件的内容。 + +按左方向键可以向上移动一级。 + +按 `q` 键退出 `ranger`。 + +### 做出改变 + +你可以按 `?` 键,在屏幕底部弹出一条帮助行。它看起来应该是这样的: + +``` +View [m]an page, [k]ey bindings, [c]commands or [s]ettings? (press q to abort) +``` + +按 `c` 键,`ranger` 将提供你可以在该工具内使用的命令信息。例如,你可以通过输入 `:chmod` 来改变当前文件的权限,后面跟着预期的权限。例如,一旦选择了一个文件,你可以输入 `:chmod 700` 将权限设置为 `rwx------`。 + +输入 `:edit` 可以在 `nano` 中打开该文件,允许你进行修改,然后使用 `nano` 的命令保存文件。 + +### 总结 + +使用 `ranger` 的方法比本篇文章所描述的更多。该工具提供了一种非常不同的方式来列出 Linux 系统上的文件并与之交互,一旦你习惯了它的多级的目录和文件列表方式,并使用方向键代替 `cd` 命令来移动,就可以很轻松地在 Linux 的文件中导航。 + +-------------------------------------------------------------------------------- + +via: https://www.networkworld.com/article/3583890/navigating-your-linux-files-with-ranger.html + +作者:[Sandra Henry-Stocker][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/ +[b]: https://github.com/lujun9972 +[1]: https://unsplash.com/photos/mHC0qJ7l-ls +[2]: https://creativecommons.org/publicdomain/zero/1.0/ +[3]: https://www.networkworld.com/newsletters/signup.html +[4]: https://www.facebook.com/NetworkWorld/ +[5]: https://www.linkedin.com/company/network-world diff --git a/published/20201013 My first day using Ansible.md b/published/202102/20201013 My first day using Ansible.md similarity index 100% rename from published/20201013 My first day using Ansible.md rename to published/202102/20201013 My first day using Ansible.md diff --git a/published/202102/20201103 How the Kubernetes scheduler works.md b/published/202102/20201103 How the Kubernetes scheduler works.md new file mode 100644 index 0000000000..e988199b45 --- /dev/null +++ b/published/202102/20201103 How the Kubernetes scheduler works.md @@ -0,0 +1,150 @@ +[#]: collector: (lujun9972) +[#]: translator: (MZqk) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13155-1.html) +[#]: subject: (How the Kubernetes scheduler works) +[#]: via: (https://opensource.com/article/20/11/kubernetes-scheduler) +[#]: author: (Mike Calizo https://opensource.com/users/mcalizo) + +Kubernetes 调度器是如何工作的 +===== + +> 了解 Kubernetes 调度器是如何发现新的吊舱并将其分配到节点。 + +![](https://img.linux.net.cn/data/attachment/album/202102/26/123446popgvrc0vppptvtk.jpg) + +[Kubernetes][2] 已经成为容器和容器化工作负载的标准编排引擎。它提供一个跨公有云和私有云环境的通用和开源的抽象层。 + +对于那些已经熟悉 Kuberbetes 及其组件的人,他们的讨论通常围绕着如何尽量发挥 Kuberbetes 的功能。但当你刚刚开始学习 Kubernetes 时,尝试在生产环境中使用前,明智的做法是从一些关于 Kubernetes 相关组件(包括 [Kubernetes 调度器][3]) 开始学习,如下抽象视图中所示: + +![][4] + +Kubernetes 也分为控制平面和工作节点: + + 1. **控制平面:** 也称为主控,负责对集群做出全局决策,以及检测和响应集群事件。控制平面组件包括: + * etcd + * kube-apiserver + * kube-controller-manager + * 调度器 + 2. **工作节点:** 也称节点,这些节点是工作负载所在的位置。它始终和主控联系,以获取工作负载运行所需的信息,并与集群外部进行通讯和连接。工作节点组件包括: + * kubelet + * kube-proxy + * CRI + +我希望这个背景信息可以帮助你理解 Kubernetes 组件是如何关联在一起的。 + +### Kubernetes 调度器是如何工作的 + +Kubernetes [吊舱][5]pod 由一个或多个容器组成组成,共享存储和网络资源。Kubernetes 调度器的任务是确保每个吊舱分配到一个节点上运行。 + +(LCTT 译注:容器技术领域大量使用了航海比喻,pod 一词,意为“豆荚”,在航海领域指“吊舱” —— 均指盛装多个物品的容器。常不翻译,考虑前后文,可译做“吊舱”。) + +在更高层面下,Kubernetes 调度器的工作方式是这样的: + + 1. 每个需要被调度的吊舱都需要加入到队列 + 2. 新的吊舱被创建后,它们也会加入到队列 + 3. 调度器持续地从队列中取出吊舱并对其进行调度 + +[调度器源码][6](`scheduler.go`)很大,约 9000 行,且相当复杂,但解决了重要问题: + +#### 等待/监视吊舱创建的代码 + +监视吊舱创建的代码始于 `scheduler.go` 的 8970 行,它持续等待新的吊舱: + +``` +// Run begins watching and scheduling. It waits for cache to be synced, then starts a goroutine and returns immediately. + +func (sched *Scheduler) Run() { + if !sched.config.WaitForCacheSync() { + return + } + + go wait.Until(sched.scheduleOne, 0, sched.config.StopEverything) +``` + +#### 负责对吊舱进行排队的代码 + +负责对吊舱进行排队的功能是: + +``` +// queue for pods that need scheduling + podQueue *cache.FIFO +``` + +负责对吊舱进行排队的代码始于 `scheduler.go` 的 7360 行。当事件处理程序触发,表明新的吊舱显示可用时,这段代码将新的吊舱加入队列中: + +``` +func (f *ConfigFactory) getNextPod() *v1.Pod { + for { + pod := cache.Pop(f.podQueue).(*v1.Pod) + if f.ResponsibleForPod(pod) { + glog.V(4).Infof("About to try and schedule pod %v", pod.Name) + return pod + } + } +} +``` + +#### 处理错误代码 + +在吊舱调度中不可避免会遇到调度错误。以下代码是处理调度程序错误的方法。它监听 `podInformer` 然后抛出一个错误,提示此吊舱尚未调度并被终止: + +``` +// scheduled pod cache + podInformer.Informer().AddEventHandler( + cache.FilteringResourceEventHandler{ + FilterFunc: func(obj interface{}) bool { + switch t := obj.(type) { + case *v1.Pod: + return assignedNonTerminatedPod(t) + default: + runtime.HandleError(fmt.Errorf("unable to handle object in %T: %T", c, obj)) + return false + } + }, +``` + +换句话说,Kubernetes 调度器负责如下: + + * 将新创建的吊舱调度至具有足够空间的节点上,以满足吊舱的资源需求。 + * 监听 kube-apiserver 和控制器是否创建新的吊舱,然后调度它至集群内一个可用的节点。 + * 监听未调度的吊舱,并使用 `/binding` 子资源 API 将吊舱绑定至节点。 + +例如,假设正在部署一个需要 1 GB 内存和双核 CPU 的应用。因此创建应用吊舱的节点上需有足够资源可用,然后调度器会持续运行监听是否有吊舱需要调度。 + +### 了解更多 + +要使 Kubernetes 集群工作,你需要使以上所有组件一起同步运行。调度器有一段复杂的的代码,但 Kubernetes 是一个很棒的软件,目前它仍是我们在讨论或采用云原生应用程序时的首选。 + +学习 Kubernetes 需要精力和时间,但是将其作为你的专业技能之一能为你的职业生涯带来优势和回报。有很多很好的学习资源可供使用,而且 [官方文档][7] 也很棒。如果你有兴趣了解更多,建议从以下内容开始: + + * [Kubernetes the hard way][8] + * [Kubernetes the hard way on bare metal][9] + * [Kubernetes the hard way on AWS][10] + +你喜欢的 Kubernetes 学习方法是什么?请在评论中分享吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/11/kubernetes-scheduler + +作者:[Mike Calizo][a] +选题:[lujun9972][b] +译者:[MZqk](https://github.com/MZqk) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mcalizo +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/containers_modules_networking_hardware_parts.png?itok=rPpVj92- (Parts, modules, containers for software) +[2]: https://kubernetes.io/ +[3]: https://kubernetes.io/docs/concepts/scheduling-eviction/kube-scheduler/ +[4]: https://lh4.googleusercontent.com/egB0SSsAglwrZeWpIgX7MDF6u12oxujfoyY6uIPa8WLqeVHb8TYY_how57B4iqByELxvitaH6-zjAh795wxAB8zenOwoz2YSMIFRqHsMWD9ohvUTc3fNLCzo30r7lUynIHqcQIwmtRo +[5]: https://kubernetes.io/docs/concepts/workloads/pods/ +[6]: https://github.com/kubernetes/kubernetes/blob/e4551d50e57c089aab6f67333412d3ca64bc09ae/plugin/pkg/scheduler/scheduler.go +[7]: https://kubernetes.io/docs/home/ +[8]: https://github.com/kelseyhightower/kubernetes-the-hard-way +[9]: https://github.com/Praqma/LearnKubernetes/blob/master/kamran/Kubernetes-The-Hard-Way-on-BareMetal.md +[10]: https://github.com/Praqma/LearnKubernetes/blob/master/kamran/Kubernetes-The-Hard-Way-on-AWS.md diff --git a/published/20210111 7 Bash tutorials to enhance your command line skills in 2021.md b/published/202102/20210111 7 Bash tutorials to enhance your command line skills in 2021.md similarity index 100% rename from published/20210111 7 Bash tutorials to enhance your command line skills in 2021.md rename to published/202102/20210111 7 Bash tutorials to enhance your command line skills in 2021.md diff --git a/published/20210115 How to Create and Manage Archive Files in Linux.md b/published/202102/20210115 How to Create and Manage Archive Files in Linux.md similarity index 100% rename from published/20210115 How to Create and Manage Archive Files in Linux.md rename to published/202102/20210115 How to Create and Manage Archive Files in Linux.md diff --git a/published/20210118 10 ways to get started with open source in 2021.md b/published/202102/20210118 10 ways to get started with open source in 2021.md similarity index 100% rename from published/20210118 10 ways to get started with open source in 2021.md rename to published/202102/20210118 10 ways to get started with open source in 2021.md diff --git a/published/202102/20210119 Set up a Linux cloud on bare metal.md b/published/202102/20210119 Set up a Linux cloud on bare metal.md new file mode 100644 index 0000000000..a9f806b711 --- /dev/null +++ b/published/202102/20210119 Set up a Linux cloud on bare metal.md @@ -0,0 +1,119 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13161-1.html) +[#]: subject: (Set up a Linux cloud on bare metal) +[#]: via: (https://opensource.com/article/21/1/cloud-image-virt-install) +[#]: author: (Sumantro Mukherjee https://opensource.com/users/sumantro) + +在裸机上建立 Linux 云实例 +====== + +> 在 Fedora 上用 virt-install 创建云镜像。 + +![](https://img.linux.net.cn/data/attachment/album/202102/28/130111cx5pux33bt74o36g.jpg) + +虚拟化是使用最多的技术之一。Fedora Linux 使用 [Cloud Base 镜像][2] 来创建通用虚拟机(VM),但设置 Cloud Base 镜像的方法有很多。最近,用于调配虚拟机的 `virt-install` 命令行工具增加了对 `cloud-init` 的支持,因此现在可以使用它在本地配置和运行云镜像。 + +本文介绍了如何在裸机上设置一个基本的 Fedora 云实例。同样的步骤可以用于任何 raw 或Qcow2 Cloud Base 镜像。 + +### 什么是 --cloud-init? + +`virt-install` 命令使用 `libvirt` 创建一个 KVM、Xen 或 [LXC][3] 客户机。`--cloud-init` 选项使用一个本地文件(称为 “nocloud 数据源”),所以你不需要网络连接来创建镜像。在第一次启动时,`nocloud` 方法会从 iso9660 文件系统(`.iso` 文件)中获取访客机的用户数据和元数据。当你使用这个选项时,`virt-install` 会为 root 用户账户生成一个随机的(临时)密码,提供一个串行控制台,以便你可以登录并更改密码,然后在随后的启动中禁用 `--cloud-init` 选项。  + +### 设置 Fedora Cloud Base 镜像 + +首先,[下载一个 Fedora Cloud Base(for OpenStack)镜像][2]。 + +![Fedora Cloud 网站截图][4] + +然后安装 `virt-install` 命令: + +``` +$ sudo dnf install virt-install +``` + +一旦 `virt-install` 安装完毕并下载了 Fedora Cloud Base 镜像,请创建一个名为`cloudinit-user-data.yaml` 的小型 YAML 文件,其中包含 `virt-install` 将使用的一些配置行: + +``` +#cloud-config +password: 'r00t' +chpasswd: { expire: false } +``` + +这个简单的云配置可以设置默认的 `fedora` 用户的密码。如果你想使用会过期的密码,可以将其设置为登录后过期。 + +创建并启动虚拟机: + +``` +$ virt-install --name local-cloud18012709 \ +--memory 2000 --noreboot \ +--os-variant detect=on,name=fedora-unknown \ +--cloud-init user-data="/home/r3zr/cloudinit-user-data.yaml" \ +--disk=size=10,backing_store="/home/r3zr/Downloads/Fedora-Cloud-Base-33-1.2.x86_64.qcow2" +``` + +在这个例子中,`local-cloud18012709` 是虚拟机的名称,内存设置为 2000MiB,磁盘大小(虚拟硬盘)设置为 10GB,`--cloud-init` 和 `backing_store` 分别带有你创建的 YAML 配置文件和你下载的 Qcow2 镜像的绝对路径。 + +### 登录 + +在创建镜像后,你可以用用户名 `fedora` 和 YAML 文件中设置的密码登录(在我的例子中,密码是 `r00t`,但你可能用了别的密码)。一旦你第一次登录,请更改你的密码。 + +要关闭虚拟机的电源,执行 `sudo poweroff` 命令,或者按键盘上的 `Ctrl+]`。 + +### 启动、停止和销毁虚拟机 + +`virsh` 命令用于启动、停止和销毁虚拟机。 + +要启动任何停止的虚拟机: + +``` +$ virsh start +``` + +要停止任何运行的虚拟机: + +``` +$ virsh shutdown +``` + +要列出所有处于运行状态的虚拟机: + +``` +$ virsh list +``` + +要销毁虚拟机: + +``` +$ virsh destroy +``` + +![销毁虚拟机][6] + +### 快速而简单 + +`virt-install` 命令与 `--cloud-init` 选项相结合,可以快速轻松地创建云就绪镜像,而无需担心是否有云来运行它们。无论你是在为重大部署做准备,还是在学习容器,都可以试试`virt-install --cloud-init`。 + +在云计算工作中,你有喜欢的工具吗?请在评论中告诉我们。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/1/cloud-image-virt-install + +作者:[Sumantro Mukherjee][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/sumantro +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bus-cloud.png?itok=vz0PIDDS (Sky with clouds and grass) +[2]: https://alt.fedoraproject.org/cloud/ +[3]: https://www.redhat.com/sysadmin/exploring-containers-lxc +[4]: https://opensource.com/sites/default/files/uploads/fedoracloud.png (Fedora Cloud website) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/sites/default/files/uploads/destroyvm.png (Destroying a VM) diff --git a/published/20210120 Learn JavaScript by writing a guessing game.md b/published/202102/20210120 Learn JavaScript by writing a guessing game.md similarity index 100% rename from published/20210120 Learn JavaScript by writing a guessing game.md rename to published/202102/20210120 Learn JavaScript by writing a guessing game.md diff --git a/published/20210121 How Nextcloud is the ultimate open source productivity suite.md b/published/202102/20210121 How Nextcloud is the ultimate open source productivity suite.md similarity index 100% rename from published/20210121 How Nextcloud is the ultimate open source productivity suite.md rename to published/202102/20210121 How Nextcloud is the ultimate open source productivity suite.md diff --git a/published/20210122 3 tips for automating your email filters.md b/published/202102/20210122 3 tips for automating your email filters.md similarity index 100% rename from published/20210122 3 tips for automating your email filters.md rename to published/202102/20210122 3 tips for automating your email filters.md diff --git a/published/20210125 Explore binaries using this full-featured Linux tool.md b/published/202102/20210125 Explore binaries using this full-featured Linux tool.md similarity index 100% rename from published/20210125 Explore binaries using this full-featured Linux tool.md rename to published/202102/20210125 Explore binaries using this full-featured Linux tool.md diff --git a/published/20210125 Use Joplin to find your notes faster.md b/published/202102/20210125 Use Joplin to find your notes faster.md similarity index 100% rename from published/20210125 Use Joplin to find your notes faster.md rename to published/202102/20210125 Use Joplin to find your notes faster.md diff --git a/published/20210125 Why you need to drop ifconfig for ip.md b/published/202102/20210125 Why you need to drop ifconfig for ip.md similarity index 100% rename from published/20210125 Why you need to drop ifconfig for ip.md rename to published/202102/20210125 Why you need to drop ifconfig for ip.md diff --git a/published/20210126 Use your Raspberry Pi as a productivity powerhouse.md b/published/202102/20210126 Use your Raspberry Pi as a productivity powerhouse.md similarity index 100% rename from published/20210126 Use your Raspberry Pi as a productivity powerhouse.md rename to published/202102/20210126 Use your Raspberry Pi as a productivity powerhouse.md diff --git a/published/20210126 Write GIMP scripts to make image processing faster.md b/published/202102/20210126 Write GIMP scripts to make image processing faster.md similarity index 100% rename from published/20210126 Write GIMP scripts to make image processing faster.md rename to published/202102/20210126 Write GIMP scripts to make image processing faster.md diff --git a/published/20210127 3 email mistakes and how to avoid them.md b/published/202102/20210127 3 email mistakes and how to avoid them.md similarity index 100% rename from published/20210127 3 email mistakes and how to avoid them.md rename to published/202102/20210127 3 email mistakes and how to avoid them.md diff --git a/published/20210127 Why I use the D programming language for scripting.md b/published/202102/20210127 Why I use the D programming language for scripting.md similarity index 100% rename from published/20210127 Why I use the D programming language for scripting.md rename to published/202102/20210127 Why I use the D programming language for scripting.md diff --git a/published/20210128 4 tips for preventing notification fatigue.md b/published/202102/20210128 4 tips for preventing notification fatigue.md similarity index 100% rename from published/20210128 4 tips for preventing notification fatigue.md rename to published/202102/20210128 4 tips for preventing notification fatigue.md diff --git a/published/20210128 How to Run a Shell Script in Linux -Essentials Explained for Beginners.md b/published/202102/20210128 How to Run a Shell Script in Linux -Essentials Explained for Beginners.md similarity index 100% rename from published/20210128 How to Run a Shell Script in Linux -Essentials Explained for Beginners.md rename to published/202102/20210128 How to Run a Shell Script in Linux -Essentials Explained for Beginners.md diff --git a/published/20210129 Manage containers with Podman Compose.md b/published/202102/20210129 Manage containers with Podman Compose.md similarity index 100% rename from published/20210129 Manage containers with Podman Compose.md rename to published/202102/20210129 Manage containers with Podman Compose.md diff --git a/published/20210131 3 wishes for open source productivity in 2021.md b/published/202102/20210131 3 wishes for open source productivity in 2021.md similarity index 100% rename from published/20210131 3 wishes for open source productivity in 2021.md rename to published/202102/20210131 3 wishes for open source productivity in 2021.md diff --git a/published/20210201 Generate QR codes with this open source tool.md b/published/202102/20210201 Generate QR codes with this open source tool.md similarity index 100% rename from published/20210201 Generate QR codes with this open source tool.md rename to published/202102/20210201 Generate QR codes with this open source tool.md diff --git a/published/20210202 Filmulator is a Simple, Open Source, Raw Image Editor for Linux Desktop.md b/published/202102/20210202 Filmulator is a Simple, Open Source, Raw Image Editor for Linux Desktop.md similarity index 100% rename from published/20210202 Filmulator is a Simple, Open Source, Raw Image Editor for Linux Desktop.md rename to published/202102/20210202 Filmulator is a Simple, Open Source, Raw Image Editor for Linux Desktop.md diff --git a/published/20210203 Paru - A New AUR Helper and Pacman Wrapper Based on Yay.md b/published/202102/20210203 Paru - A New AUR Helper and Pacman Wrapper Based on Yay.md similarity index 100% rename from published/20210203 Paru - A New AUR Helper and Pacman Wrapper Based on Yay.md rename to published/202102/20210203 Paru - A New AUR Helper and Pacman Wrapper Based on Yay.md diff --git a/published/20210204 A hands-on tutorial of SQLite3.md b/published/202102/20210204 A hands-on tutorial of SQLite3.md similarity index 100% rename from published/20210204 A hands-on tutorial of SQLite3.md rename to published/202102/20210204 A hands-on tutorial of SQLite3.md diff --git a/published/20210207 Why the success of open source depends on empathy.md b/published/202102/20210207 Why the success of open source depends on empathy.md similarity index 100% rename from published/20210207 Why the success of open source depends on empathy.md rename to published/202102/20210207 Why the success of open source depends on empathy.md diff --git a/published/20210208 3 open source tools that make Linux the ideal workstation.md b/published/202102/20210208 3 open source tools that make Linux the ideal workstation.md similarity index 100% rename from published/20210208 3 open source tools that make Linux the ideal workstation.md rename to published/202102/20210208 3 open source tools that make Linux the ideal workstation.md diff --git a/translated/tech/20210208 Why choose Plausible for an open source alternative to Google Analytics.md b/published/202102/20210208 Why choose Plausible for an open source alternative to Google Analytics.md similarity index 63% rename from translated/tech/20210208 Why choose Plausible for an open source alternative to Google Analytics.md rename to published/202102/20210208 Why choose Plausible for an open source alternative to Google Analytics.md index 989e43db08..ed909d31a1 100644 --- a/translated/tech/20210208 Why choose Plausible for an open source alternative to Google Analytics.md +++ b/published/202102/20210208 Why choose Plausible for an open source alternative to Google Analytics.md @@ -1,67 +1,64 @@ [#]: collector: (lujun9972) [#]: translator: (geekpi) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13135-1.html) [#]: subject: (Why choose Plausible for an open source alternative to Google Analytics) [#]: via: (https://opensource.com/article/21/2/plausible) [#]: author: (Ben Rometsch https://opensource.com/users/flagsmith) 为什么选择 Plausible 作为 Google Analytics 的开源替代品? ====== -Plausible作为Google Analytics 的可行,有效的替代方案正在引起用户的关注。 -![Analytics: Charts and Graphs][1] -发挥 Google Analytics 的威力似乎是一个巨大的挑战。实际上,你可以说这听起来似乎不合理。但这正是 [Plausible.io][2]取得巨大成功的原因,自 2018 年以来已注册了数千名新用户。 +> Plausible 作为 Google Analytics 的可行、有效的替代方案正在引起用户的关注。 -Plausible 的联合创始人 Uku Taht 和 Marko Saric 最近出现在 [The Craft of Open Source][3] 播客上,谈论了这个项目以及他们如何: +![](https://img.linux.net.cn/data/attachment/album/202102/19/233627sb7mvtt7hn93lvvr.jpg) + +替代 Google Analytics 似乎是一个巨大的挑战。实际上,你可以说这听起来似乎不合理(LCTT 译注:Plausible 意即“貌似合理”)。但这正是 [Plausible.io][2] 取得巨大成功的原因,自 2018 年以来已注册了数千名新用户。 + +Plausible 的联合创始人 Uku Taht 和 Marko Saric 最近出现在 [The Craft of Open Source][3] 播客上,谈论了这个项目以及他们是如何: * 创建了一个可行的替代 Google Analytics 的方案 * 在不到两年的时间里获得了如此大的发展势头 -* 通过开源项目外包实现其目标 - - +* 通过开源他们的项目实现其目标 请继续阅读他们与播客主持人和 Flagsmith 创始人 Ben Rometsch 的对话摘要。 ### Plausible 是如何开始的 -2018年 冬天,Uku 开始编写一个他认为急需的项目:一个可行的、有效的 Google Analytics 替代方案。因为他对 Google 产品的发展方向感到失望,而且所有其他数据解决方案似乎都把 Google 当作“数据处理中间人”。 +2018 年冬天,Uku 开始编写一个他认为急需的项目:一个可行的、有效的 Google Analytics 替代方案。因为他对 Google 产品的发展方向感到失望,而且所有其他数据解决方案似乎都把 Google 当作“数据处理中间人”。 -Uku 的第一直觉是利用现有的数据库解决方案专注于分析方面的工作。马上,他就遇到了一些挑战。第一次尝试使用了 PostgreSQL,这在技术上很幼稚,因为它很快就变得不堪重负,效率很低。因此,他的目标蜕变成了做一个分析产品,可以处理大量的数据点,而且性能不会有明显的下降。长话短说,Uku 成功了,Plausible 现在每月可以摄取超过 8000 万条记录。 +Uku 的第一直觉是利用现有的数据库解决方案专注于分析方面的工作。马上,他就遇到了一些挑战。开始尝试使用了 PostgreSQL,这在技术上很幼稚,因为它很快就变得不堪重负,效率低下。因此,他的目标蜕变成了做一个分析产品,可以处理大量的数据点,而且性能不会有明显的下降。简而言之,Uku 成功了,Plausible 现在每月可以收取超过 8000 万条记录。 -Plausible 的第一个版本于 2019 年夏天发布。2020 年 3 月,Marko 加入,负责项目的传播和营销方面的工作。从那时起,它的受欢迎程度以相当大的势头增长。 +Plausible 的第一个版本于 2019 年夏天发布。2020 年 3 月,Marko 加入,负责项目的传播和营销方面的工作。从那时起,它它的受欢迎程度有了很大的增长。 ### 为什么要开源? -Uku 热衷于遵循“独立黑客”的软件开发路线:创建一个产品,把它放在那里,然后看看它如何成长。开源在这方面是有意义的,因为你可以迅速发展一个社区并获得人气。 +Uku 热衷于遵循“独立黑客”的软件开发路线:创建一个产品,把它投放出去,然后看看它如何成长。开源在这方面是有意义的,因为你可以迅速发展一个社区并获得人气。 但 Plausible 一开始并不是开源的。Uku 最初担心软件的敏感代码,比如计费代码,但他很快就发布了,因为这对没有 API 令牌的人来说是没有用的。 +现在,Plausible 是在 [AGPL][4] 下完全开源的,他们选择了 AGPL 而不是 MIT 许可。Uku 解释说,在 MIT 许可下,任何人都可以不受限制地对代码做任何事情。在 AGPL 下,如果有人修改代码,他们必须将他们的修改开源,并将代码回馈给社区。这意味着,大公司不能拿着原始代码在此基础上进行构建,然后获得所有的回报。他们必须共享,使得竞争环境更加公平。例如,如果一家公司想插入他们的计费或登录系统,他们有法律义务发布代码。 -现在,Plausible 是在 [AGPL][4] 下完全开源的,他们选择了 AGPL 而不是 MIT 许可。Uku 解释说,在 MIT 许可下,任何人都可以不受限制地对代码做任何事情。在 AGPL 下,如果有人修改代码,他们必须将他们的修改开源,并将代码回馈给社区。这意味着,大公司不能拿着原始代码,在此基础上进行构建,然后获得所有的回报。他们必须共享,使得竞争环境更加公平。例如,如果一家公司想插入他们的计费或登录系统,他们将有法律义务发布代码。 - - -在播客中,Uku 问我关于 Flagsmith 的授权,目前Flagsmith的授权采用 BSD 3-Clause 许可,该许可证是高度允许的,但我即将把一些功能移到更严格的许可后面。到目前为止,Flagsmith 社区已经理解了这一变化,因为他们意识到这将带来更多更好的功能。 +在播客中,Uku 向我询问了关于 Flagsmith 的授权,目前 Flagsmith 的授权采用 BSD 三句版许可,该许可证是高度开放的,但我即将把一些功能移到更严格的许可后面。到目前为止,Flagsmith 社区已经理解了这一变化,因为他们意识到这将带来更多更好的功能。 ### Plausible vs. Google Analytics -Uku说,在他看来,开源的精神是,代码应该是开放的,任何人都可以进行商业使用,并与社区共享,但你可以把一个闭源的 API 模块作为专有附加组件保留下来。这样一来,Plausible 和其他公司就可以通过创建和销售定制的 API 附加许可来满足不同的使用场景。 +Uku 说,在他看来,开源的精神是,代码应该是开放的,任何人都可以进行商业使用,并与社区共享,但你可以把一个闭源的 API 模块作为专有附加组件保留下来。这样一来,Plausible 和其他公司就可以通过创建和销售定制的 API 附加许可来满足不同的使用场景。 -Marko 职位上是一名开发者,但从营销方面来说,他努力让这个项目在 Hacker News 和 Lobster 等网站上得到报道,并建立了 Twitter 帐户以帮助产生动力。这种宣传带来的热潮也意味着该项目在 GitHub 上起飞,从 500 颗星到 4300 颗星。随着流量的增长,Plausible 出现在 GitHub 的趋势列表中,这帮助它的人气滚起了雪球。 +Marko 职位上是一名开发者,但从营销方面来说,他努力让这个项目在 Hacker News 和 Lobster 等网站上得到报道,并建立了 Twitter 帐户以帮助产生动力。这种宣传带来的热潮也意味着该项目在 GitHub 上起飞,从 500 颗星到 4300 颗星。随着流量的增长,Plausible 出现在 GitHub 的趋势列表中,这让其受欢迎程度像滚雪球一样。 Marko 还非常注重发布和推广博客文章。这一策略得到了回报,在最初的 6 个月里,有四五篇文章进入了病毒式传播,他利用这些峰值来放大营销信息,加速了增长。 Plausible 成长过程中最大的挑战是让人们从 Google Analytics 上转换过来。这个项目的主要目标是创建一个有用、高效、准确的网络分析产品。它还需要符合法规,并为企业和网站访问者提供高度的隐私。 -Plausible 现在已经在 8000 多个网站上运行。通过与客户的交谈,Uku 估计其中约 90% 的客户会已经用过 Google Analytics。 +Plausible 现在已经在 8000 多个网站上运行。通过与客户的交谈,Uku 估计其中约 90% 的客户运行过 Google Analytics。 Plausible 以标准的软件即服务 (SaaS) 订阅模式运行。为了让事情更公平,它按月页面浏览量收费,而不是按网站收费。对于季节性网站来说,这可能会有麻烦,比如说电子商务网站在节假日会激增,或者美国大选网站每四年激增一次。这些可能会导致月度订阅模式下的定价问题,但它通常对大多数网站很好。 - ### 查看播客 -想要了解更多关于 Uku 和 Marko 如何以惊人的速度发展开源 Plausible 项目,并使其获得商业上的成功,请[收听播客][3],并查看[其他集锦][5],了解更多关于“开源软件社区的来龙去脉”。 +想要了解更多关于 Uku 和 Marko 如何以惊人的速度发展开源 Plausible 项目,并使其获得商业上的成功,请[收听播客][3],并查看[其他剧集][5],了解更多关于“开源软件社区的来龙去脉”。 -------------------------------------------------------------------------------- @@ -70,7 +67,7 @@ via: https://opensource.com/article/21/2/plausible 作者:[Ben Rometsch][a] 选题:[lujun9972][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/translated/tech/20210209 Viper Browser- A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism.md b/published/202102/20210209 Viper Browser- A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism.md similarity index 86% rename from translated/tech/20210209 Viper Browser- A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism.md rename to published/202102/20210209 Viper Browser- A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism.md index eda14eb676..78f9f8bc07 100644 --- a/translated/tech/20210209 Viper Browser- A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism.md +++ b/published/202102/20210209 Viper Browser- A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism.md @@ -1,16 +1,18 @@ [#]: collector: (lujun9972) [#]: translator: (geekpi) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13139-1.html) [#]: subject: (Viper Browser: A Lightweight Qt5-based Web Browser With A Focus on Privacy and Minimalism) [#]: via: (https://itsfoss.com/viper-browser/) [#]: author: (Ankush Das https://itsfoss.com/author/ankush/) -Viper 浏览器:一款基于 Qt5 的轻量级浏览器,注重隐私和简约 +Viper 浏览器:一款注重隐私和简约的轻量级 Qt5 浏览器 ====== -**简介:Viper 浏览器是一个基于 Qt 的浏览器,它提供了简单的用户体验,同时考虑到隐私问题。**_ +![](https://img.linux.net.cn/data/attachment/album/202102/21/110148d7r3hlurczc1ci73.jpg) + +> Viper 浏览器是一个基于 Qt 的浏览器,它提供了简单易用的用户体验,同时考虑到隐私问题。 虽然大多数流行的浏览器都运行在 Chromium 之上,但像 [Firefox][1]、[Beaker 浏览器][2]以及其他一些 [chrome 替代品][3]这样独特的替代品不应该停止存在。 @@ -20,11 +22,9 @@ Viper 浏览器:一款基于 Qt5 的轻量级浏览器,注重隐私和简约 ### Viper 浏览器:一个基于 Qt5 的开源浏览器 -_**注意**:Viper 浏览器是一个只有几个贡献者的相当新的项目。它缺乏某些功能,我将在下文提及。_ +**注意**:Viper 浏览器是一个只有几个贡献者的相当新的项目。它缺乏某些功能,我将在下文提及。 -![][7] - -Viper 是一款有趣的网络浏览器,在利用 [QtWebEngine][8] 的同时,它专注于成为一个强大而又轻巧的选择。 +Viper 是一款有趣的 Web 浏览器,在利用 [QtWebEngine][8] 的同时,它专注于成为一个强大而又轻巧的选择。 QtWebEngine 借用了 Chromium 的代码,但它不包括连接到 Google 平台的二进制文件和服务。 @@ -49,8 +49,6 @@ QtWebEngine 借用了 Chromium 的代码,但它不包括连接到 Google 平 * 禁用 JavaScript 的选项 * 能够阻止图像加载 - - 除了这些亮点之外,你还可以轻松地调整隐私设置,以删除你的历史记录、清理已有 cookies,以及一些更多的选项。 ![][12] @@ -61,7 +59,7 @@ QtWebEngine 借用了 Chromium 的代码,但它不包括连接到 Google 平 如果你需要帮助,你也可以参考我们的[在 Linux 上使用 AppImage 文件][14]指南。如果你好奇,你可以在 [GitHub][5] 上探索更多关于它的内容。 -[Viper 浏览器][5] +- [Viper 浏览器][5] ### 我对使用 Viper 浏览器的看法 @@ -86,7 +84,7 @@ via: https://itsfoss.com/viper-browser/ 作者:[Ankush Das][a] 选题:[lujun9972][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/202102/20210212 4 reasons to choose Linux for art and design.md b/published/202102/20210212 4 reasons to choose Linux for art and design.md new file mode 100644 index 0000000000..fbb040cf2e --- /dev/null +++ b/published/202102/20210212 4 reasons to choose Linux for art and design.md @@ -0,0 +1,95 @@ +[#]: collector: (lujun9972) +[#]: translator: (amorsu) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13157-1.html) +[#]: subject: (4 reasons to choose Linux for art and design) +[#]: via: (https://opensource.com/article/21/2/linux-art-design) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +选择 Linux 来做艺术设计的 4 个理由 +====== + +> 开源会强化你的创造力。因为它把你带出专有的思维定势,开阔你的视野,从而带来更多的可能性。让我们探索一些开源的创意项目。 + +![](https://img.linux.net.cn/data/attachment/album/202102/27/135654k1x4um187i1i7wm1.jpg) + +2021 年,人们比以前的任何时候都更有理由来爱上 Linux。在这个系列,我会分享 21 个选择 Linux 的原因。今天,让我来解释一下,为什么 Linux 是艺术设计的绝佳选择。 + +Linux 在服务器和云计算方面获得很多的赞誉。让不少人感到惊讶的是,Linux 刚好也有一系列的很棒的创意设计工具,并且这些工具在用户体验和质量方面可以媲美那些流行的创意设计工具。我第一次使用开源的设计工具时,并不是因为我没有其他工具可以选择。相反的,我是在接触了大量的这些领先的公司提供的专有设计工具后,才开始使用开源设计工具。我之所以最后选择开源设计工具是因为开源更有意义,而且我能获得更好的产出。这些都是一些笼统的说法,所以请允许我解释一下。 + +### 高可用性意味着高生产力 + +“生产力”这一次对于不同的人来说含义不一样。当我想到生产力,就是当你坐下来做事情,并能够完成你给自己设定的所有任务的时候,这时就很有成就感。但是当你总是被一些你无法掌控的事情打断,那你的生产力就下降了。 + +计算机看起来是不可预测的,诚然有很多事情会出错。电脑是由很多的硬件组成的,它们任何一个都有可能在任何时间出问题。软件会有 bug,也有修复这些 bug 的更新,而更新后又会带来新的 bug。如果你对电脑不了解,它可能就像一个定时炸弹,等着爆发。带着数字世界里的这么多的潜在问题,去接受一个当某些条件不满足(比如许可证,或者订阅费)就会不工作的软件,对我来说就显得很不理智。 + +![Inkscape 应用][2] + +开源的创意设计应用不需要订阅费,也不需要许可证。在你需要的时候,它们都能获取得到,并且通常都是跨平台的。这就意味着,当你坐在工作的电脑面前,你就能确定你能用到那些必需的软件。而如果某天你很忙碌,却发现你面前的电脑不工作了,解决办法就是找到一个能工作的,安装你的创意设计软件,然后开始工作。 + +例如,要找到一台无法运行 Inkscape 的电脑,比找到一台可以运行那些专有软件的电脑要难得多。这就叫做高可用。这是游戏规则的改变者。我从来不曾遇到因为软件用不了而不得不干等,浪费我数小时时间的事情。 + +### 开放访问更有利于多样性 + +我在设计行业工作的时候,我的很多同事都是通过自学的方式来学习艺术和技术方面的知识,这让我感到惊讶。有的通过使用那些最新的昂贵的“专业”软件来自学,但总有一大群人是通过使用自由和开源的软件来完善他们的数字化的职业技能。因为,对于孩子,或者没钱的大学生来说,这才是他们能负担的起,而且很容易就能获得的。 + +这是一种不同的高可用性,但这对我和许多其他用户来说很重要,如果不是因为开源,他们就不会从事创意行业。即使那些有提供付费订阅的开源项目,比如 Ardour,都能确保他的用户在不需要支付任何费用的时候也能使用软件。 + +![Ardour 界面][4] + +当你不限制别人用你的软件的时候,你其实拥有了更多的潜在用户。如果你这样做了,那么你就开放了一个接收多样的创意声音的窗口。艺术钟爱影响力,你可以借鉴的经验和想法越多就越好。这就是开源设计软件所带来的可能性。 + +### 文件格式支持更具包容性 + +我们都知道在几乎所有行业里面包容性的价值。在各种意义上,邀请更多的人到派对可以造就更壮观的场面。知道这一点,当看到有的项目或者创新公司只邀请某些人去合作,只接受某些文件格式,就让我感到很痛苦。这看起来很陈旧,就像某个远古时代的精英主义的遗迹,而这是即使在今天都在发生的真实问题。 + +令人惊讶和不幸的是,这不是因为技术上的限制。专有软件可以访问开源的文件格式,因为这些格式是开源的,而且可以自由地集成到各种应用里面。集成这些格式不需要任何回报。而相比之下,专有的文件格式被笼罩在秘密之中,只被限制于提供给几个愿意付钱的人使用。这很糟糕,而且常常,你无法在没有这些专有软件的情况下打开一些文件来获取你的数据。令人惊喜的是,开源的设计软件却是尽力的支持更多的专有文件格式。以下是一些 Inkscape 所支持的令人难以置信的列表样本: + +![可用的 Inkscape 文件格式][5] + +而这大部分都是在没有这些专有格式厂商的支持下开发出来的。 + +支持开放的文件格式可以更包容,对所有人都更好。 + +### 对新的创意没有限制 + +我之所以爱上开源的其中一个原因是,解决一个指定任务时,有彻底的多样性。当你在专有软件周围时,你所看到的世界是基于你所能够获取得到的东西。比如说,你过你打算处理一些照片,你通常会把你的意图局限在你所知道的可能性上面。你从你的架子上的 4 款或 10 款应用中,挑选出 3 款,因为它们是目前你唯一能够获取得到的选项。 + +在开源领域,你通常会有好几个“显而易见的”必备解决方案,但同时你还有一打的角逐者在边缘转悠,供你选择。这些选项有时只是半成品,或者它们超级专注于某项任务,又或者它们学起来有点挑战性,但最主要的是,它们是独特的,而且充满创新的。有时候,它们是被某些不按“套路”出牌的人所开发的,因此处理的方法和市场上现有的产品截然不同。其他时候,它们是被那些熟悉做事情的“正确”方式,但还是在尝试不同策略的人所开发的。这就像是一个充满可能性的巨大的动态的头脑风暴。 + +这种类型的日常创新能够引领出闪现的灵感、光辉时刻,或者影响广泛的通用性改进。比如说,著名的 GIMP 滤镜,(用于从图像中移除项目并自动替换背景)是如此的受欢迎以至于后来被专有图片编辑软件商拿去“借鉴”。这是成功的一步,但是对于一个艺术家而言,个人的影响才是最关键的。我常感叹于新的 Linux 用户的创意,而我只是在技术展会上展示给他们一个简单的音频,或者视频滤镜,或者绘图应用。没有任何的指导,或者应用场景,从简单的交互中喷发出来的关于新的工具的主意,是令人兴奋和充满启发的,通过实验中一些简单的工具,一个全新的艺术系列可以轻而易举的浮现出来。 + +只要在适当的工具集都有的情况下,有很多方式来更有效的工作。虽然私有软件通常也不会反对更聪明的工作习惯的点子,专注于实现自动化任务让用户可以更轻松的工作,对他们也没有直接的收益。Linux 和开源软件就是很大程度专为 [自动化和编排][6] 而建的,而不只是服务器。像 [ImageMagick][7] 和 [GIMP 脚本][8] 这样的工具改变了我的处理图片的方式,包括批量处理方面和纯粹实验方面。 + +你永远不知道你可以创造什么,如果你有一个你从来想象不到会存在的工具的话。 + +### Linux 艺术家 + +这里有 [使用开源的艺术家社区][9],从 [photography][10] 到 [makers][11] 到 [musicians][12],还有更多更多。如果你想要创新,试试 Linux 吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-art-design + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[amorsu](https://github.com/amorsu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/painting_computer_screen_art_design_creative.png?itok=LVAeQx3_ (Painting art on a computer screen) +[2]: https://opensource.com/sites/default/files/inkscape_0.jpg +[3]: https://community.ardour.org/subscribe +[4]: https://opensource.com/sites/default/files/ardour.jpg +[5]: https://opensource.com/sites/default/files/formats.jpg +[6]: https://opensource.com/article/20/11/orchestration-vs-automation +[7]: https://opensource.com/life/16/6/fun-and-semi-useless-toys-linux#imagemagick +[8]: https://opensource.com/article/21/1/gimp-scripting +[9]: https://librearts.org +[10]: https://pixls.us +[11]: https://www.redhat.com/en/blog/channel/red-hat-open-studio +[12]: https://linuxmusicians.com diff --git a/translated/tech/20210215 A practical guide to JavaScript closures.md b/published/202102/20210215 A practical guide to JavaScript closures.md similarity index 95% rename from translated/tech/20210215 A practical guide to JavaScript closures.md rename to published/202102/20210215 A practical guide to JavaScript closures.md index 094da3e089..cebf757a5a 100644 --- a/translated/tech/20210215 A practical guide to JavaScript closures.md +++ b/published/202102/20210215 A practical guide to JavaScript closures.md @@ -1,8 +1,8 @@ [#]: collector: (lujun9972) [#]: translator: (wxy) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13140-1.html) [#]: subject: (A practical guide to JavaScript closures) [#]: via: (https://opensource.com/article/21/2/javascript-closures) [#]: author: (Nimisha Mukherjee https://opensource.com/users/nimisha) @@ -12,7 +12,7 @@ JavaScript 闭包实践 > 通过深入了解 JavaScript 的高级概念之一:闭包,更好地理解 JavaScript 代码的工作和执行方式。 -![女性编程][1] +![](https://img.linux.net.cn/data/attachment/album/202102/21/162941ogyb74z3ahfbfe35.jpg) 在《[JavaScript 如此受欢迎的 4 个原因][2]》中,我提到了一些高级 JavaScript 概念。在本文中,我将深入探讨其中的一个概念:闭包closure。 @@ -123,7 +123,7 @@ via: https://opensource.com/article/21/2/javascript-closures 作者:[Nimisha Mukherjee][a] 选题:[lujun9972][b] 译者:[wxy](https://github.com/wxy) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 diff --git a/published/202102/20210216 Meet Plots- A Mathematical Graph Plotting App for Linux Desktop.md b/published/202102/20210216 Meet Plots- A Mathematical Graph Plotting App for Linux Desktop.md new file mode 100644 index 0000000000..1232812fab --- /dev/null +++ b/published/202102/20210216 Meet Plots- A Mathematical Graph Plotting App for Linux Desktop.md @@ -0,0 +1,98 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13151-1.html) +[#]: subject: (Meet Plots: A Mathematical Graph Plotting App for Linux Desktop) +[#]: via: (https://itsfoss.com/plots-graph-app/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) + +认识 Plots:一款适用于 Linux 桌面的数学图形绘图应用 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/25/140338su2fju6016t5q2tz.jpg) + +Plots 是一款图形绘图应用,它可以轻松实现数学公式的可视化。你可以用它来绘制任意三角函数、双曲函数、指数函数和对数函数的和与积。 + +### 在 Linux 上使用 Plots 绘制数学图形 + +[Plots][1] 是一款简单的应用,它的灵感来自于像 [Desmos][2] 这样的 Web 图形绘图应用。它能让你绘制不同数学函数的图形,你可以交互式地输入这些函数,还可以自定义绘图的颜色。 + +Plots 是用 Python 编写的,它使用 [OpenGL][3] 来利用现代硬件。它使用 GTK 3,因此可以很好地与 GNOME 桌面集成。 + +![][4] + +使用 Plots 非常直白。要添加一个新的方程,点击加号。点击垃圾箱图标可以删除方程。还可以选择撤销和重做。你也可以放大和缩小。 + +![][5] + +你输入方程的文本框是友好的。菜单中有一个“帮助”选项可以访问文档。你可以在这里找到关于如何编写各种数学符号的有用提示。你也可以复制粘贴方程。 + +![][6] + +在深色模式下,侧栏公式区域变成了深色,但主绘图区域仍然是白色。我相信这也许是这样设计的。 + +你可以使用多个函数,并将它们全部绘制在一张图中: + +![][7] + +我发现它在尝试粘贴一些它无法理解的方程时崩溃了。如果你写了一些它不能理解的东西,或者与现有的方程冲突,所有图形都会消失,去掉不正确的方程就会恢复图形。 + +不幸的是,没有导出绘图或复制到剪贴板的选项。你可以随时 [在 Linux 中截图][8],并在你要添加图像的文档中使用它。 + +### 在 Linux 上安装 Plots + +Plots 为各种发行版提供了不同的安装方式。 + +Ubuntu 20.04 和 20.10 用户可以[使用 PPA][11]: + +``` +sudo add-apt-repository ppa:apandada1/plots +sudo apt update +sudo apt install plots +``` + +对于其他基于 Debian 的发行版,你可以使用 [这里][13] 的 [deb 文件安装][12]。 + +我没有在 AUR 软件包列表中找到它,但是作为 Arch Linux 用户,你可以使用 Flatpak 软件包或者使用 Python 安装它。 + +- [Plots Flatpak 软件包][14] + +如果你感兴趣,可以在它的 GitHub 仓库中查看源代码。如果你喜欢这款应用,请考虑在 GitHub 上给它 star。 + +- [GitHub 上的 Plots 源码][1] + +### 结论 + +Plots 主要用于帮助学生学习数学或相关科目,但它在很多其他场景下也能发挥作用。我知道不是每个人都需要,但肯定会对学术界和学校的人有帮助。 + +不过我倒是希望能有导出图片的功能。也许开发者可以在未来的版本中加入这个功能。 + +你知道有什么类似的绘图应用吗?Plots 与它们相比如何? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/plots-graph-app/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://github.com/alexhuntley/Plots/ +[2]: https://www.desmos.com/ +[3]: https://www.opengl.org/ +[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/fourier-graph-plots.png?resize=800%2C492&ssl=1 +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/plots-app-linux-1.png?resize=800%2C518&ssl=1 +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/plots-app-linux.png?resize=800%2C527&ssl=1 +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/multiple-equations-plots.png?resize=800%2C492&ssl=1 +[8]: https://itsfoss.com/take-screenshot-linux/ +[10]: https://itsfoss.com/keenwrite/ +[11]: https://itsfoss.com/ppa-guide/ +[12]: https://itsfoss.com/install-deb-files-ubuntu/ +[13]: https://launchpad.net/~apandada1/+archive/ubuntu/plots/+packages +[14]: https://flathub.org/apps/details/com.github.alexhuntley.Plots diff --git a/published/202102/20210217 5 reasons to use Linux package managers.md b/published/202102/20210217 5 reasons to use Linux package managers.md new file mode 100644 index 0000000000..76842524a3 --- /dev/null +++ b/published/202102/20210217 5 reasons to use Linux package managers.md @@ -0,0 +1,75 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13160-1.html) +[#]: subject: (5 reasons to use Linux package managers) +[#]: via: (https://opensource.com/article/21/2/linux-package-management) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +使用 Linux 软件包管理器的 5 个理由 +====== + +> 包管理器可以跟踪你安装的软件的所有组件,使得更新、重装和故障排除更加容易。 + +![](https://img.linux.net.cn/data/attachment/album/202102/28/123014kuhttz1kkkexwh9j.jpg) + +在 2021 年,人们喜欢 Linux 的理由比以往任何时候都多。在这个系列中,我将分享 21 个使用 Linux 的不同理由。今天,我将谈谈软件仓库。 + +在我使用 Linux 之前,我认为在计算机上安装的应用是理所当然的。我会根据需要安装应用,如果我最后没有使用它们,我就会把它们忘掉,让它们占用我的硬盘空间。终于有一天,我的硬盘空间会变得稀缺,我就会疯狂地删除应用,为更重要的数据腾出空间。但不可避免的是,应用只能释放出有限的空间,所以我将注意力转移到与这些应用一起安装的所有其他零碎内容上,无论是媒体内容还是配置文件和文档。这不是一个管理电脑的好方法。我知道这一点,但我并没有想过要有其他的选择,因为正如人们所说,你不知道自己不知道什么。 + +当我改用 Linux 时,我发现安装应用的方式有些不同。在 Linux 上,会建议你不要去网站上找应用的安装程序。取而代之的是,运行一个命令,应用就会被安装到系统上,并记录每个单独的文件、库、配置文件、文档和媒体资产。 + +### 什么是软件仓库? + +在 Linux 上安装应用的默认方法是从发行版软件仓库中安装。这可能听起来像应用商店,那是因为现代应用商店借鉴了很多软件仓库的概念。[Linux 也有应用商店][2],但软件仓库是独一无二的。你通过一个*包管理器*从软件仓库中获得一个应用,它使你的 Linux 系统能够记录和跟踪你所安装的每一个组件。 + +这里有五个原因可以让你确切地知道你的系统上有什么东西,可以说是非常有用。 + +#### 1、移除旧应用 + +当你的计算机知道应用安装的每一个文件时,卸载你不再需要的文件真的很容易。在 Linux 上,安装 [31 个不同的文本编辑器][3],然后卸载 30 个你不喜欢的文本编辑器是没有问题的。当你在 Linux 上卸载的时候,你就真的卸载了。 + +#### 2、按你的意思重新安装 + +不仅卸载要彻底,*重装*也很有意义。在许多平台上,如果一个应用出了问题,有时会建议你重新安装它。通常情况下,谁也说不清为什么要重装一个应用。不过,人们还是经常会隐隐约约地怀疑某个地方的文件已经损坏了(换句话说,数据写入错误),所以希望重装可以覆盖坏的文件以让软件重新工作。这是个不错的建议,但对于任何技术人员来说,不知道是什么地方出了问题都是令人沮丧的。更糟糕的是,如果不仔细跟踪,就不能保证所有的文件都会在重装过程中被刷新,因为通常没有办法知道与应用程序一起安装的所有文件在第一时间就删除了。有了软件包管理器,你可以强制彻底删除旧文件,以确保新文件的全新安装。同样重要的是,你可以研究每个文件并可能找出导致问题的文件,但这是开源和 Linux 的一个特点,而不是包管理。 + +#### 3、保持你应用的更新 + +不要听别人告诉你的 Linux 比其他操作系统“更安全”。计算机是由代码组成的,而我们人类每天都会以新的、有趣的方式找到利用这些代码的方法。因为 Linux 上的绝大多数应用都是开源的,所以许多漏洞都会以“常见漏洞和暴露Common Vulnerability and Exposures”(CVE)的形式公开。大量涌入的安全漏洞报告似乎是一件坏事,但这绝对是一个*知道*远比*不知道*好的案例。毕竟,没有人告诉你有问题,并不意味着没有问题。漏洞报告是好的。它们对每个人都有好处。而且,当开发人员修复安全漏洞时,对你而言,及时获得这些修复程序很重要,最好不用自己记着动手修复。 + +包管理器正是为了实现这一点而设计的。当应用收到更新时,无论是修补潜在的安全问题还是引入令人兴奋的新功能,你的包管理器应用都会提醒你可用的更新。 + +#### 4、保持轻便 + +假设你有应用 A 和应用 B,这两个应用都需要库 C。在某些操作系统上,通过得到 A 和 B,就会得到了两个 C 的副本。这显然是多余的,所以想象一下,每个应用都会发生几次。冗余的库很快就会增加,而且由于对一个给定的库没有单一的“正确”来源,所以几乎不可能确保你使用的是最新的甚至是一致的版本。 + +我承认我不会整天坐在这里琢磨软件库,但我确实记得我琢磨的日子,尽管我不知道这就是困扰我的原因。在我还没有改用 Linux 之前,我在处理工作用的媒体文件时遇到错误,或者在玩不同的游戏时出现故障,或者在阅读 PDF 时出现怪异的现象,等等,这些都不是什么稀奇的事情。当时我花了很多时间去调查这些错误。我仍然记得,我的系统上有两个主要的应用分别捆绑了相同(但有区别)的图形后端技术。当一个程序的输出导入到另一个程序时,这种不匹配会导致错误。它本来是可以工作的,但是由于同一个库文件集合的旧版本中的一个错误,一个应用的热修复程序并没有给另一个应用带来好处。 + +包管理器知道每个应用需要哪些后端(被称为*依赖关系*),并且避免重新安装已经在你系统上的软件。 + +#### 5、保持简单 + +作为一个 Linux 用户,我要感谢包管理器,因为它帮助我的生活变得简单。我不必考虑我安装的软件,我需要更新的东西,也不必考虑完成后是否真的将其卸载了。我毫不犹豫地试用软件。而当我在安装一台新电脑时,我运行 [一个简单的 Ansible 脚本][4] 来自动安装我所依赖的所有软件的最新版本。这很简单,很智能,也是一种独特的解放。 + +### 更好的包管理 + +Linux 从整体看待应用和操作系统。毕竟,开源是建立在其他开源工作基础上的,所以发行版维护者理解依赖*栈*的概念。Linux 上的包管理了解你的整个系统、系统上的库和支持文件以及你安装的应用。这些不同的部分协调工作,为你提供了一套高效、优化和强大的应用。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-package-management + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_gift_giveaway_box_520x292.png?itok=w1YQhNH1 (Gift box opens with colors coming out) +[2]: http://flathub.org +[3]: https://opensource.com/article/21/1/text-editor-roundup +[4]: https://opensource.com/article/20/9/install-packages-ansible diff --git a/published/202102/20210217 Use this bootable USB drive on Linux to rescue Windows users.md b/published/202102/20210217 Use this bootable USB drive on Linux to rescue Windows users.md new file mode 100644 index 0000000000..73d93d1246 --- /dev/null +++ b/published/202102/20210217 Use this bootable USB drive on Linux to rescue Windows users.md @@ -0,0 +1,82 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13143-1.html) +[#]: subject: (Use this bootable USB drive on Linux to rescue Windows users) +[#]: via: (https://opensource.com/article/21/2/linux-woeusb) +[#]: author: (Don Watkins https://opensource.com/users/don-watkins) + +如何在 Linux 中创建 USB 启动盘来拯救 Windows 用户 +====== + +> WoeUSB 可以在 Linux 中制作 Windows 启动盘,并帮助你的朋友解锁他们罢工的机器。 + +![](https://img.linux.net.cn/data/attachment/album/202102/22/143829x0gm1gkmw1yb1zu8.jpg) + +人们经常要求我帮助他们恢复被锁死或损坏的 Windows 电脑。有时,我可以使用 Linux USB 启动盘来挂载 Windows 分区,然后从损坏的系统中传输和备份文件。 + +有的时候,客户丢失了他们的密码或以其他方式锁死了他们的登录账户凭证。解锁账户的一种方法是创建一个 Windows 启动盘来修复计算机。微软允许你从网站下载 Windows 的副本,并提供创建 USB 启动盘的工具。但要使用它们,你需要一台 Windows 电脑,这意味着,作为一个 Linux 用户,我需要其他方法来创建一个 DVD 或 USB 启动盘。我发现在 Linux 上创建 Windows USB 很困难。我的可靠工具,如 [Etcher.io][2]、[Popsicle][3](适用于 Pop!_OS)和 [UNetbootin][4],或者从命令行使用 `dd` 来创建可启动媒体,都不是很成功。 + +直到我发现了 [WoeUSB-ng][5],一个 [GPL 3.0][6] 许可的 Linux 工具,它可以为 Windows Vista、7、8 和 10 创建一个 USB 启动盘。这个开源软件有两个程序:一个命令行工具和一个图形用户界面 (GUI) 版本。 + +### 安装 WoeUSB-ng + +GitHub 仓库包含了在 Arch、Ubuntu、Fedora 或使用 pip3 [安装][7] WoeUSB-ng 的说明。 + +如果你是受支持的 Linux 发行版,你可以使用你的包管理器安装 WoeUSB-ng。或者,你可以使用 Python 的包管理器 [pip][8] 来安装应用程序。这在任何 Linux 发行版中都是通用的。这些方法在功能上没有区别,所以使用你熟悉的任何一种。 + +我运行的是 Pop!_OS,它是 Ubuntu 的衍生版本,但由于对 Python 很熟悉,我选择了 pip3 安装: + +``` +$ sudo pip3 install WoeUSB-ng +``` + +### 创建一个启动盘 + +你可以从命令行或 GUI 版本使用 WoeUSB-ng。 + +要从命令行创建一个启动盘,语法要求命令包含 Windows ISO 文件的路径和一个设备。(本例中是 `/dev/sdX`。使用 `lsblk` 命令来确定你的驱动器) + +``` +$ sudo woeusb --device Windows.iso /dev/sdX +``` + +你也可以启动该程序,以获得简单易用的界面。在 WoeUSB-ng 应用程序窗口中,找到 `Windows.iso` 文件并选择它。选择你的 USB 目标设备(你想变成 Windows 启动盘的驱动器)。这将会删除这个驱动器上的所有信息,所以要谨慎选择,然后仔细检查(再三检查)你的选择! + +当你确认正确选择目标驱动器后,点击 **Install** 按钮。 + +![WoeUSB-ng UI][9] + +创建该介质需要 5 到 10 分钟,这取决于你的 Linux 电脑的处理器、内存、USB 端口速度等。请耐心等待。 + +当这个过程完成并验证后,你将有可用的 Windows USB 启动盘,以帮助其他人修复 Windows 计算机。 + +### 帮助他人 + +开源就是为了帮助他人。很多时候,你可以通过使用基于 Linux 的[系统救援 CD][11] 来帮助 Windows 用户。但有时,唯一的帮助方式是直接从 Windows 中获取,而 WoeUSB-ng 是一个很好的开源工具,它可以让这成为可能。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-woeusb + +作者:[Don Watkins][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://etcher.io/ +[3]: https://github.com/pop-os/popsicle +[4]: https://github.com/unetbootin/unetbootin +[5]: https://github.com/WoeUSB/WoeUSB-ng +[6]: https://github.com/WoeUSB/WoeUSB-ng/blob/master/COPYING +[7]: https://github.com/WoeUSB/WoeUSB-ng#installation +[8]: https://opensource.com/downloads/pip-cheat-sheet +[9]: https://opensource.com/sites/default/files/uploads/woeusb-ng-gui.png (WoeUSB-ng UI) +[10]: https://creativecommons.org/licenses/by-sa/4.0/ +[11]: https://www.system-rescue.org/ diff --git a/published/202102/20210218 5 must-have Linux media players.md b/published/202102/20210218 5 must-have Linux media players.md new file mode 100644 index 0000000000..1125465ae2 --- /dev/null +++ b/published/202102/20210218 5 must-have Linux media players.md @@ -0,0 +1,90 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13148-1.html) +[#]: subject: (5 must-have Linux media players) +[#]: via: (https://opensource.com/article/21/2/linux-media-players) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +5 款值得拥有的 Linux 媒体播放器 +====== + +> 无论是电影还是音乐,Linux 都能为你提供一些优秀的媒体播放器。 + +![](https://img.linux.net.cn/data/attachment/album/202102/24/101806k2g26zfcamiffhlb.jpg) + +在 2021 年,人们有更多的理由喜欢 Linux。在这个系列中,我将分享 21 个使用 Linux 的不同理由。媒体播放是我最喜欢使用 Linux 的理由之一。 + +你可能更喜欢黑胶唱片和卡带,或者录像带和激光影碟,但你很有可能还是在数字设备上播放你喜欢的大部分媒体。电脑上的媒体有一种无法比拟的便利性,这主要是因为我们大多数人一天中的大部分时间都在电脑附近。许多现代电脑用户并没有过多考虑有哪些应用可以用来听音乐和看电影,因为大多数操作系统都默认提供了媒体播放器,或者因为他们订阅了流媒体服务,因此并没有把媒体文件放在自己身边。但如果你的口味超出了通常的热门音乐和节目列表,或者你以媒体工作为乐趣或利润,那么你就会有你想要播放的本地文件。你可能还对现有用户界面有意见。在 Linux 上,*选择*是一种权利,因此你可以选择无数种播放媒体的方式。 + +以下是我在 Linux 上必备的五个媒体播放器。 + +### 1、mpv + +![mpv interface][2] + +一个现代、干净、简约的媒体播放器。得益于它的 Mplayer、[ffmpeg][3] 和 `libmpv` 后端,它可以播放你可能会扔给它的任何类型媒体。我说“扔给它”,是因为播放一个文件的最快捷、最简单的方法就是把文件拖到 mpv 窗口中。如果你拖动多个文件,mpv 会为你创建一个播放列表。 + +当你把鼠标放在上面时,它提供了直观的覆盖控件,但最好还是通过键盘操作界面。例如,`Alt+1` 会使 mpv 窗口变成全尺寸,而 `Alt+0` 会使其缩小到一半大小。你可以使用 `,` 和 `.` 键逐帧浏览视频,`[` 和 `]` 键调整播放速度,`/` 和 `*` 调整音量,`m` 静音等等。这些主控功能可以让你快速调整,一旦你学会了这些功能,你几乎可以在想到要调整播放的时候快速调整。无论是工作还是娱乐,mpv 都是我播放媒体的首选。 + +### 2、Kaffeine 和 Rhythmbox + +![Kaffeine interface][4] + +KDE Plasma 和 GNOME 桌面都提供了音乐应用([Kaffeine][5] 和 [Rhythmbox][]),可以作为你个人音乐库的前端。它们会让你为你的音乐文件提供一个标准的位置,然后扫描你的音乐收藏,这样你就可以根据专辑、艺术家等来浏览。这两款软件都很适合那些你无法完全决定你想听什么,而又想用一种简单的方式来浏览现有音乐的时候。 + +[Kaffeine][5] 其实不仅仅是一个音乐播放器。它可以播放视频文件、DVD、CD,甚至数字电视(假设你有输入信号)。我已经整整几天没有关闭 Kaffeine 了,因为不管我是想听音乐还是看电影,Kaffeine 都能让我轻松地开始播放。 + +### 3、Audacious + +![Audacious interface][6] + +[Audacious][7] 媒体播放器是一个轻量级的应用,它可以播放你的音乐文件(甚至是 MIDI 文件)或来自互联网的流媒体音乐。对我来说,它的主要吸引力在于它的模块化架构,它鼓励开发插件。这些插件可以播放几乎所有你能想到的音频媒体格式,用图形均衡器调整声音,应用效果,甚至可以重塑整个应用,改变其界面。 + +很难把 Audacious 仅仅看作是一个应用,因为它很容易让它变成你想要的应用。无论你是 Linux 上的 XMMS、Windows 上的 WinAmp,还是任何其他替代品,你大概都可以用 Audacious 来近似它们。Audacious 还提供了一个终端命令,`audtool`,所以你可以从命令行控制一个正在运行的 Audacious 实例,所以它甚至可以近似于一个终端媒体播放器! + +### 4、VLC + +![vlc interface][8] + +[VLC][9] 播放器可能是向用户介绍开源的应用之首。作为一款久经考验的多媒体播放器,VLC 可以播放音乐、视频、光盘。它还可以通过网络摄像头或麦克风进行流式传输和录制,从而使其成为捕获快速视频或语音消息的简便方法。像 mpv 一样,大多数情况下都可以通过按单个字母的键盘操作来控制它,但它也有一个有用的右键菜单。它可以将媒体从一种格式转换为另一种格式、创建播放列表、跟踪你的媒体库等。VLC 是最好的,大多数播放器甚至无法在功能上与之匹敌。无论你在什么平台上,它都是一款必备的应用。 + +### 5、Music player daemon + +![mpd with the ncmpc interface][10] + +[music player daemon(mpd)][11] 是一个特别有用的播放器,因为它在服务器上运行。这意味着你可以在 [树莓派][12] 上启动它,然后让它处于空闲状态,这样你就可以在任何时候播放一首曲子。mpd 的客户端有很多,但我用的是 [ncmpc][13]。有了 ncmpc 或像 [netjukebox][14] 这样的 Web 客户端,我可以从本地主机或远程机器上连接 mpd,选择一张专辑,然后从任何地方播放它。 + +### Linux 上的媒体播放 + +在 Linux 上播放媒体是很容易的,这要归功于它出色的编解码器支持和惊人的播放器选择。我只提到了我最喜欢的五个播放器,但还有更多的播放器供你探索。试试它们,找到最好的,然后坐下来放松一下。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-media-players + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/LIFE_film.png?itok=aElrLLrw (An old-fashioned video camera) +[2]: https://opensource.com/sites/default/files/mpv_0.png +[3]: https://opensource.com/article/17/6/ffmpeg-convert-media-file-formats +[4]: https://opensource.com/sites/default/files/kaffeine.png +[5]: https://apps.kde.org/en/kaffeine +[6]: https://opensource.com/sites/default/files/audacious.png +[7]: https://audacious-media-player.org/ +[8]: https://opensource.com/sites/default/files/vlc_0.png +[9]: http://videolan.org +[10]: https://opensource.com/sites/default/files/mpd-ncmpc.png +[11]: https://www.musicpd.org/ +[12]: https://opensource.com/article/21/1/raspberry-pi-hifi +[13]: https://www.musicpd.org/clients/ncmpc/ +[14]: http://www.netjukebox.nl/ +[15]: https://wiki.gnome.org/Apps/Rhythmbox \ No newline at end of file diff --git a/published/202102/20210219 7 Ways to Customize Cinnamon Desktop in Linux -Beginner-s Guide.md b/published/202102/20210219 7 Ways to Customize Cinnamon Desktop in Linux -Beginner-s Guide.md new file mode 100644 index 0000000000..5fd5bdcd1a --- /dev/null +++ b/published/202102/20210219 7 Ways to Customize Cinnamon Desktop in Linux -Beginner-s Guide.md @@ -0,0 +1,132 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13145-1.html) +[#]: subject: (7 Ways to Customize Cinnamon Desktop in Linux [Beginner’s Guide]) +[#]: via: (https://itsfoss.com/customize-cinnamon-desktop/) +[#]: author: (Dimitrios https://itsfoss.com/author/dimitrios/) + +初级:在 Linux 中自定义 Cinnamon 桌面的 7 种方法 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/23/095703u8t88l0rpf4o4p5o.jpg) + +Linux Mint 是最好的 [适合初学者的 Linux 发行版][1] 之一。尤其是想 [转战 Linux][2] 的 Windows 用户,会发现它的 Cinnamon 桌面环境非常熟悉。 + +Cinnamon 给人一种传统的桌面体验,很多用户喜欢它的样子。这并不意味着你必须满足于它提供的东西。Cinnamon 提供了几种自定义桌面的方式。 + +在阅读了 [MATE][3] 和 [KDE 自定义][4] 指南后,很多读者要求为 Linux Mint Cinnamon 也提供类似的教程。因此,我创建了这个关于调整 Cinnamon 桌面的外观和感觉的基本指南。 + +### 7 种自定义 Cinnamon 桌面的不同方法 + +在本教程中,我使用的是 [Linux Mint Debian Edition][5](LMDE 4)。你可以在任何运行 Cinnamon 的 Linux 发行版上使用这篇文章的方法。如果你不确定,这里有 [如何检查你使用的桌面环境][6]。 + +当需要改变 Cinnamon 桌面外观时,我发现非常简单,因为只需点击两下即可。如下图所示,点击菜单图标,然后点击“设置”。 + +![][7] + +所有的外观设置都放在该窗口的顶部。在“系统设置”窗口上的一切都显得整齐划一。 + +![][8] + +#### 1、效果 + +效果选项简单,不言自明,一目了然。你可以开启或关闭桌面不同元素的特效,或者通过改变特效风格来改变窗口过渡。如果你想改变效果的速度,可以通过自定义标签来实现。 + +![][9] + +#### 2、字体选择 + +在这个部分,你可以区分整个系统中使用的字体大小和类型,通过字体设置,你可以对外观进行微调。 + +![][10] + +#### 3、主题和图标 + +我曾经做了几年的 Linux Mint 用户,一个原因是你不需要到处去改变你想要的东西。窗口管理器、图标和面板定制都在一个地方! + +你可以将面板改成深色或浅色,窗口边框也可以根据你要的而改变。默认的 Cinnamon 外观设置在我眼里是最好的,我甚至在测试 [Ubuntu Cinnamon Remix][11] 时也应用了一模一样的设置,不过是橙色的。 + +![][12] + +#### 4、Cinnamon 小程序 + +Cinnamon 小程序是所有包含在底部面板的元素,如日历或键盘布局切换器。在管理选项卡中,你可以添加/删除已经安装的小程序。 + +你一定要探索一下可以下载的小程序,如天气和 [CPU 温度][13]指示小程序是我额外选择的。 + +![][14] + +#### 5、Cinnamon Desklets + +Cinnamon Desklets 是可以直接放置在桌面上的应用。和其他所有的自定义选项一样,Desklets 可以从设置菜单中访问,各种各样的选择可以吸引任何人的兴趣。谷歌日历是一个方便的应用,可以直接在桌面上跟踪你的日程安排。 + +![][15] + +#### 6、桌面壁纸 + +要改变 Cinnamon 桌面的背景,只需在桌面上点击右键,选择“改变桌面背景”。它将打开一个简单易用的窗口,在左侧列出了可用的背景系统文件夹,右侧有每个文件夹内的图片预览。 + +![][16] + +你可以通过点击加号(`+`)并选择路径来添加自己的文件夹。在“设置”选项卡中,你可以选择你的背景是静态还是幻灯片,以及背景在屏幕上的位置。 + +![][17] + +#### 7、自定义桌面屏幕上的内容 + +背景并不是你唯一可以改变的桌面元素。如果你在桌面上点击右键,然后点击“自定义”,你可以找到更多的选项。 + +![][18] + +你可以改变图标的大小,将摆放方式从垂直改为水平,并改变它们在两个轴上的间距。如果你不喜欢你所做的,点击重置网格间距回到默认值。 + +![][19] + +此外,如果你点击“桌面设置”,将显示更多的选项。你可以禁用桌面上的图标,将它们放在主显示器或副显示器上,甚至两个都可以。如你所见,你可以选择一些图标出现在桌面上。 + +![][20] + +### 总结 + +Cinnamon 桌面是最好的选择之一,尤其是当你正在 [从 windows 切换到 Linux][21] 的时候,同时对一个简单而优雅的桌面追求者也是如此。 + +Cinnamon 桌面非常稳定,在我手上从来没有崩溃过,这也是在各种 Linux 发行版之间,我使用它这么久的主要原因之一。 + +我没有讲得太详细,但给了你足够的指导,让你自己去探索设置。欢迎反馈你对 Cinnamon 的定制。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/customize-cinnamon-desktop/ + +作者:[Dimitrios][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/dimitrios/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/best-linux-beginners/ +[2]: https://itsfoss.com/reasons-switch-linux-windows-xp/ +[3]: https://itsfoss.com/ubuntu-mate-customization/ +[4]: https://itsfoss.com/kde-customization/ +[5]: https://itsfoss.com/lmde-4-release/ +[6]: https://itsfoss.com/find-desktop-environment/ +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/6-Cinnamon-settings.png?resize=800%2C680&ssl=1 +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/7-Cinnamon-Settings.png?resize=800%2C630&ssl=1 +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/8-cinnamon-effects.png?resize=800%2C630&ssl=1 +[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/11-font-selection.png?resize=800%2C650&ssl=1 +[11]: https://itsfoss.com/ubuntu-cinnamon-remix-review/ +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/10-cinnamon-themes-and-icons.png?resize=800%2C630&ssl=1 +[13]: https://itsfoss.com/check-laptop-cpu-temperature-ubuntu/ +[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/12-cinnamon-applets.png?resize=800%2C630&ssl=1 +[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/13-cinnamon-desklets.png?resize=800%2C630&ssl=1 +[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/1.-Cinnamon-change-desktop-background.png?resize=800%2C400&ssl=1 +[17]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/2-Cinnamon-change-desktop-background.png?resize=800%2C630&ssl=1 +[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/1.-desktop-additional-customization.png?resize=800%2C400&ssl=1 +[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/4-desktop-additional-customization.png?resize=800%2C480&ssl=1 +[20]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/5-desktop-additional-customization.png?resize=800%2C630&ssl=1 +[21]: https://itsfoss.com/guide-install-linux-mint-16-dual-boot-windows/ diff --git a/published/202102/20210219 Unlock your Chromebook-s hidden potential with Linux.md b/published/202102/20210219 Unlock your Chromebook-s hidden potential with Linux.md new file mode 100644 index 0000000000..7612fa716f --- /dev/null +++ b/published/202102/20210219 Unlock your Chromebook-s hidden potential with Linux.md @@ -0,0 +1,127 @@ +[#]: collector: (lujun9972) +[#]: translator: (max27149) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13149-1.html) +[#]: subject: (Unlock your Chromebook's hidden potential with Linux) +[#]: via: (https://opensource.com/article/21/2/chromebook-linux) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +用 Linux 释放你 Chromebook 的隐藏潜能 +====== + +> Chromebook 是令人惊叹的工具,但通过解锁它内部的 Linux 系统,你可以让它变得更加不同凡响。 + +![](https://img.linux.net.cn/data/attachment/album/202102/24/114254qstdq1dhj288jh1z.jpg) + +Google Chromebook 运行在 Linux 系统之上,但通常它运行的 Linux 系统对普通用户而言,并不是十分容易就能访问得到。Linux 被用作基于开源的 [Chromium OS][2] 运行时环境的后端技术,然后 Google 将其转换为 Chrome OS。大多数用户体验到的界面是一个电脑桌面,可以用来运行 Chrome 浏览器及其应用程序。然而,在这一切的背后,有一个 Linux 系统等待被你发现。如果你知道怎么做,你可以在 Chromebook 上启用 Linux,把一台可能价格相对便宜、功能相对基础的电脑变成一个严谨的笔记本,获取数百个应用和你需要的所有能力,使它成为一个通用计算机。 + +### 什么是 Chromebook? + +Chromebook 是专为 Chrome OS 创造的笔记本电脑,它本身专为特定的笔记本电脑型号而设计。Chrome OS 不是像 Linux 或 Windows 这样的通用操作系统,而是与 Android 或 iOS 有更多的共同点。如果你决定购买 Chromebook,你会发现有许多不同制造商的型号,包括惠普、华硕和联想等等。有些是为学生而设计,而另一些是为家庭或商业用户而设计的。主要的区别通常分别集中在电池功率或处理能力上。 + +无论你决定买哪一款,Chromebook 都会运行 Chrome OS,并为你提供现代计算机所期望的基本功能。有连接到互联网的网络管理器、蓝牙、音量控制、文件管理器、桌面等等。 + +![Chrome OS desktop][3] + +*Chrome OS 桌面截图* + +不过,想从这个简单易用的操作系统中获得更多,你只需要激活 Linux。 + +### 启用 Chromebook 的开发者模式 + +如果我让你觉得启用 Linux 看似简单,那是因为它确实简单但又有欺骗性。之所以说有欺骗性,是因为在启用 Linux 之前,你*必须*备份数据。 + +这个过程虽然简单,但它确实会将你的计算机重置回出厂默认状态。你必须重新登录到你的笔记本电脑中,如果你有数据存储在 Google 云盘帐户上,你必须得把它重新同步回计算机中。启用 Linux 还需要为 Linux 预留硬盘空间,因此无论你的 Chromebook 硬盘容量是多少,都将减少一半或四分之一(自主选择)。 + +在 Chromebook 上接入 Linux 仍被 Google 视为测试版功能,因此你必须选择使用开发者模式。开发者模式的目的是允许软件开发者测试新功能,安装新版本的操作系统等等,但它可以为你解锁仍在开发中的特殊功能。 + +要启用开发者模式,请首先关闭你的 Chromebook。假定你已经备份了设备上的所有重要信息。 + +接下来,按下键盘上的 `ESC` 和 `⟳`,再按 **电源键** 启动 Chromebook。 + +![ESC and refresh buttons][4] + +*ESC 键和 ⟳ 键* + +当提示开始恢复时,按键盘上的 `Ctrl+D`。 + +恢复结束后,你的 Chromebook 已重置为出厂设置,且没有默认的使用限制。 + +### 开机启动进入开发者模式 + +在开发者模式下运行意味着每次启动 Chromebook 时,都会提醒你处于开发者模式。你可以按 `Ctrl+D` 跳过启动延迟。有些 Chromebook 会在几秒钟后发出蜂鸣声来提醒你处于开发者模式,使得 `Ctrl+D` 操作几乎是强制的。从理论上讲,这个操作很烦人,但在实践中,我不经常启动我的 Chromebook,因为我只是唤醒它,所以当我需要这样做的时候,`Ctrl+D` 只不过是整个启动过程中小小的一步。 + +启用开发者模式后的第一次启动时,你必须重新设置你的设备,就好像它是全新的一样。你只需要这样做一次(除非你在未来某个时刻停用开发者模式)。 + +### 启用 Chromebook 上的 Linux + +现在,你已经运行在开发者模式下,你可以激活 Chrome OS 中的 **Linux Beta** 功能。要做到这一点,请打开 **设置**,然后单击左侧列表中的 **Linux Beta**。 + +激活 **Linux Beta**,并为你的 Linux 系统和应用程序分配一些硬盘空间。在最糟糕的时候,Linux 是相当轻量级的,所以你真的不需要分配太多硬盘空间,但它显然取决于你打算用 Linux 来做多少事。4 GB 的空间对于 Linux 以及几百个终端命令还有二十多个图形应用程序是足够的。我的 Chromebook 有一个 64 GB 的存储卡,我给了 Linux 系统 30 GB,那是因为我在 Chromebook 上所做的大部分事情都是在 Linux 内完成的。 + +一旦你的 **Linux Beta** 环境准备就绪,你可以通过按键盘上的**搜索**按钮和输入 `terminal` 来启动终端。如果你还是 Linux 新手,你可能不知道当前进入的终端能用来安装什么。当然,这取决于你想用 Linux 来做什么。如果你对 Linux 编程感兴趣,那么你可能会从 Bash(它已经在终端中安装和运行了)和 Python 开始。如果你对 Linux 中的那些迷人的开源应用程序感兴趣,你可以试试 GIMP、MyPaint、LibreOffice 或 Inkscape 等等应用程序。 + +Chrome OS 的 **Linux Beta** 模式不包含图形化的软件安装程序,但 [应用程序可以从终端安装][5]。可以使用 `sudo apt install` 命令安装应用程序。 + + * `sudo` 命令可以允许你使用超级管理员权限来执行某些命令(即 Linux 中的 `root`)。 + * `apt` 命令是一个应用程序的安装工具。 + * `install` 是命令选项,即告诉 `apt` 命令要做什么。 + +你还必须把想要安装的软件包的名字和 `apt` 命令写在一起。以安装 LibreOffice 举例: + +``` +sudo apt install libreoffice +``` +当有提示是否继续时,输入 `y`(代表“确认”),然后按 **回车键**。 + +一旦应用程序安装完毕,你可以像在 Chrome OS 上启动任何应用程序一样启动它:只需要在应用程序启动器输入它的名字。 + +了解 Linux 应用程序的名字和它的包名需要花一些时间,但你也可以用 `apt search` 命令来搜索。例如,可以用以下的方法是找到关于照片的应用程序: + +``` +apt search photo +``` + +因为 Linux 中有很多的应用程序,所以你可以找一些感兴趣的东西,然后尝试一下! + +### 与 Linux 共享文件和设备 + + **Linux Beta** 环境运行在 [容器][7] 中,因此 Chrome OS 需要获得访问 Linux 文件的权限。要授予 Chrome OS 与你在 Linux 上创建的文件的交互权限,请右击要共享的文件夹并选择 **管理 Linux 共享**。 + +![Chrome OS Manage Linux sharing interface][8] + +*Chrome OS 的 Linux 管理共享界面* + +你可以通过 Chrome OS 的 **设置** 程序来管理共享设置以及其他设置。 + +![Chrome OS Settings menu][9] + +*Chrome OS 设置菜单* + +### 学习 Linux + +如果你肯花时间学习 Linux,你不仅能够解锁你 Chromebook 中隐藏的潜力,还能最终学到很多关于计算机的知识。Linux 是一个有价值的工具,一个非常有趣的玩具,一个通往比常规计算更令人兴奋的事物的大门。去了解它吧,你可能会惊讶于你自己和你 Chromebook 的无限潜能。 + +--- + +源自: https://opensource.com/article/21/2/chromebook-linux + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[max27149](https://github.com/max27149) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/wfh_work_home_laptop_work.png?itok=VFwToeMy (Working from home at a laptop) +[2]: https://www.chromium.org/chromium-os +[3]: https://opensource.com/sites/default/files/chromeos.png +[4]: https://opensource.com/sites/default/files/esc-refresh.png +[5]: https://opensource.com/article/18/1/how-install-apps-linux +[6]: https://opensource.com/tags/linux +[7]: https://opensource.com/resources/what-are-linux-containers +[8]: https://opensource.com/sites/default/files/chromeos-manage-linux-sharing.png +[9]: https://opensource.com/sites/default/files/chromeos-beta-linux.png diff --git a/published/202102/20210220 Starship- Open-Source Customizable Prompt for Any Shell.md b/published/202102/20210220 Starship- Open-Source Customizable Prompt for Any Shell.md new file mode 100644 index 0000000000..0f04781757 --- /dev/null +++ b/published/202102/20210220 Starship- Open-Source Customizable Prompt for Any Shell.md @@ -0,0 +1,180 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13152-1.html) +[#]: subject: (Starship: Open-Source Customizable Prompt for Any Shell) +[#]: via: (https://itsfoss.com/starship/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +Starship:跨 shell 的可定制的提示符 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/25/142817taqq2ahab0t61zss.jpg) + +> 如果你很在意你的终端的外观的话,一个跨 shell 的提示符可以让你轻松地定制和配置 Linux 终端提示符。 + +虽然我已经介绍了一些帮助你 [自定义终端外观][1] 的技巧,但我也发现了一些有趣的跨 shell 提示符的建议。 + +### Starship:轻松地调整你的 Linux Shell 提示符 + +![][2] + +[Starship][3] 是一个用 [Rust][4] 编写的开源项目,它可以帮助你建立一个精简、快速、可定制的 shell 提示符。 + +无论你是使用 bash、fish、还是 Windows 上的 PowerShell,抑或其他 shell,你都可以利用Starship 来定制外观。 + +请注意,你必须了解它的 [官方文档][5] 才能对所有你喜欢的东西进行高级配置,但在这里,我将包括一个简单的示例配置,以有一个良好的开端,以及一些关于 Startship 的关键信息。 + +Startship 专注于为你提供一个精简的、快速的、有用的默认 shell 提示符。它甚至会记录并显示执行一个命令所需的时间。例如,这里有一张截图: + +![][6] + +不仅如此,根据自己的喜好定制提示符也相当简单。下面是一张官方 GIF,展示了它的操作: + +![][7] + +让我帮你设置一下。我是在 Ubuntu 上使用 bash shell 来测试的。你可以参考我提到的步骤,或者你可以看看 [官方安装说明][8],以获得在你的系统上安装它的更多选择。 + +### Starship 的亮点 + + * 跨平台 + * 跨 shell 支持 + * 能够添加自定义命令 + * 定制 git 体验 + * 定制使用特定编程语言时的体验 + * 轻松定制提示符的每一个方面,而不会对性能造成实质影响 + +### 在 Linux 上安装 Starship + +> 安装 Starship 需要下载一个 bash 脚本,然后用 root 权限运行该脚本。 +> +> 如果你不习惯这样做,你可以使用 snap。 +> +> ``` +> sudo snap install starship +> ``` + +**注意**:你需要安装 [Nerd 字体][9] 才能获得完整的体验。 + +要开始使用,请确保你安装了 [curl][10]。你可以通过键入如下命令来轻松安装它: + +``` +sudo apt install curl +``` + +完成后,输入以下内容安装 Starship: + +``` +curl -fsSL https://starship.rs/install.sh | bash +``` + +这应该会以 root 身份将 Starship 安装到 `usr/local/bin`。你可能会被提示输入密码。看起来如下: + +![][11] + +### 在 bash 中添加 Starship + +如截图所示,你会在终端本身得到设置的指令。在这里,我们需要在 `.bashrc` 用户文件的末尾添加以下一行: + +``` +eval "$(starship init bash)" +``` + +要想轻松添加,只需键入: + +``` +nano .bashrc +``` + +然后,通过向下滚动导航到文件的末尾,并在文件末尾添加如下图所示的行: + +![][12] + +完成后,只需重启终端或重启会话即可看到一个精简的提示符。对于你的 shell 来说,它可能看起来有点不同,但默认情况下应该是一样的。 + +![][13] + +设置好后,你就可以继续自定义和配置提示符了。让我给你看一个我做的配置示例: + +### 配置 Starship 提示符:基础 + +开始你只需要在 `.config` 目录下制作一个配置文件([TOML文件][14])。如果你已经有了这个目录,直接导航到该目录并创建配置文件。 + +下面是创建目录和配置文件时需要输入的内容: + +``` +mkdir -p ~/.config && touch ~/.config/starship.toml +``` + +请注意,这是一个隐藏目录。所以,当你试图使用文件管理器从主目录访问它时,请确保在继续之前 [启用查看隐藏文件][15]。 + +接下来如果你想探索一些你喜欢的东西,你应该参考配置文档。 + +举个例子,我配置了一个简单的自定义提示,看起来像这样: + +![][16] + +为了实现这个目标,我的配置文件是这样的: + +![][17] + +根据他们的官方文档,这是一个基本的自定义格式。但是,如果你不想要自定义格式,只是想用一种颜色或不同的符号来自定义默认的提示,那就会像这样: + +![][18] + +上述定制的配置文件是这样的: + +![][19] + +当然,这不是我能做出的最好看的提示符,但我希望你能理解其配置方式。 + +你可以通过包括图标或表情符来定制目录的外观,你可以调整变量、格式化字符串、显示 git 提交,或者根据使用特定编程语言而调整。 + +不仅如此,你还可以创建在你的 shell 中使用的自定义命令,让事情变得更简单或舒适。 + +你可以在他们的 [官方网站][3] 和它的 [GitHub 页面][20] 中探索更多的信息。 + +- [Starship.rs][3] + +### 结论 + +如果你只是想做一些小的调整,这文档可能会太复杂了。但是,即使如此,它也可以让你用很少的努力实现一个自定义的提示符或精简的提示符,你可以应用于任何普通的 shell 和你正在使用的系统。 + +总的来说,我不认为它非常有用,但有几个读者建议使用它,看来人们确实喜欢它。我很想看看你是如何 [自定义 Linux 终端][1] 以适应不同的使用方式。 + +欢迎在下面的评论中分享你的看法,如果你喜欢的话。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/starship/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/customize-linux-terminal/ +[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-screenshot.png?resize=800%2C577&ssl=1 +[3]: https://starship.rs/ +[4]: https://www.rust-lang.org/ +[5]: https://starship.rs/config/ +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-time.jpg?resize=800%2C281&ssl=1 +[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-demo.gif?resize=800%2C501&ssl=1 +[8]: https://starship.rs/guide/#%F0%9F%9A%80-installation +[9]: https://www.nerdfonts.com +[10]: https://curl.se/ +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/install-starship.png?resize=800%2C534&ssl=1 +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/startship-bashrc-file.png?resize=800%2C545&ssl=1 +[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-prompt.png?resize=800%2C552&ssl=1 +[14]: https://en.wikipedia.org/wiki/TOML +[15]: https://itsfoss.com/hide-folders-and-show-hidden-files-in-ubuntu-beginner-trick/ +[16]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-custom.png?resize=800%2C289&ssl=1 +[17]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-custom-config.png?resize=800%2C320&ssl=1 +[18]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-different-symbol.png?resize=800%2C224&ssl=1 +[19]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/starship-symbol-change.jpg?resize=800%2C167&ssl=1 +[20]: https://github.com/starship/starship diff --git a/published/202102/20210221 Not Comfortable Using youtube-dl in Terminal- Use These GUI Apps.md b/published/202102/20210221 Not Comfortable Using youtube-dl in Terminal- Use These GUI Apps.md new file mode 100644 index 0000000000..e41e61a54c --- /dev/null +++ b/published/202102/20210221 Not Comfortable Using youtube-dl in Terminal- Use These GUI Apps.md @@ -0,0 +1,161 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13158-1.html) +[#]: subject: (Not Comfortable Using youtube-dl in Terminal? Use These GUI Apps) +[#]: via: (https://itsfoss.com/youtube-dl-gui-apps/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +不习惯在终端使用 youtube-dl?可以使用这些 GUI 应用 +====== + +![](https://img.linux.net.cn/data/attachment/album/202102/27/143909m29a8m8kgkzmmskc.jpg) + +如果你一直在关注我们,可能已经知道 [youtube-dl 项目曾被 GitHub 暂时下架][1] 以合规。但它现在已经恢复并完全可以访问,可以说它并不是一个非法的工具。 + +它是一个非常有用的命令行工具,可以让你 [从 YouTube][2] 和其他一些网站下载视频。使用 [youtube-dl][3] 并不复杂,但我明白使用命令来完成这种任务并不是每个人都喜欢的方式。 + +好在有一些应用为 `youtube-dl` 工具提供了 GUI 前端。 + +### 使用 youtube-dl GUI 应用的先决条件 + +在你尝试下面提到的一些选择之前,你可能需要在你的系统上安装 `youtube-dl` 和 [FFmpeg][4],才能够下载/选择不同的格式进行下载。 + +你可以按照我们的 [ffmpeg 使用完整指南][5] 进行设置,并探索更多关于它的内容。 + +要安装 [youtube-dl][6],你可以在 Linux 终端输入以下命令: + +``` +sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl +``` + +下载最新版本后,你只需要输入以下内容使其可执行就可使用: + +``` +sudo chmod a+rx /usr/local/bin/youtube-dl +``` + +如果你需要其他方法安装它,也可以按照[官方安装说明][7]进行安装。 + +### Youtube-dl GUI 应用 + +大多数 Linux 上的下载管理器也允许你从 YouTube 和其他网站下载视频。然而,youtube-dl GUI 应用可能有额外的选项,如只提取音频或下载特定分辨率和视频格式。 + +请注意,下面的列表没有特别的排名顺序。你可以根据你的要求选择。 + +#### 1、AllTube Download + +![][8] + +**主要特点:** + + * Web GUI + * 开源 + * 可以自托管 + +AllTube 是一个开源的 web GUI,你可以通过 来访问。 + +如果你选择使用这款软件,你不需要在系统上安装 youtube-dl 或 ffmpeg。它提供了一个简单的用户界面,你只需要粘贴视频的 URL,然后继续选择你喜欢的文件格式下载。你也可以选择将其部署在你的服务器上。 + +请注意,你不能使用这个工具提取视频的 MP3 文件,它只适用于视频。你可以通过他们的 [GitHub 页面][9]探索更多关于它的信息。 + +- [AllTube Download Web GUI][10] + +#### 2、youtube-dl GUI + +![][11] + +**主要特点:** + + * 跨平台 + * 显示预计下载大小 + * 有音频和视频下载选择 + +一个使用 electron 和 node.js 制作的有用的跨平台 GUI 应用。你可以很容易地下载音频和视频,以及选择各种可用的文件格式的选项。 + +如果你愿意的话,你还可以下载一个频道或播放列表的部分内容。特别是当你下载高质量的视频文件时,预计的下载大小绝对是非常方便的。 + +如上所述,它也适用于 Windows 和 MacOS。而且,你会在它的 [GitHub 发布][12]中得到一个适用于 Linux 的 AppImage 文件。 + +- [Youtube-dl GUI][13] + +#### 3、Videomass + +![][14] + +**主要特点:** + + * 跨平台 + * 转换音频/视频格式 + * 支持多个 URL + * 适用于也想使用 FFmpeg 的用户 + +如果你想从 YouTube 下载视频或音频,并将它们转换为你喜欢的格式,Videomass 可以是一个不错的选择。 + +要做到这点,你需要在你的系统上同时安装 youtube-dl 和 ffmpeg。你可以轻松的添加多个 URL 来下载,还可以根据自己的喜好设置输出目录。 + +![][15] + +你还可以获得一些高级设置来禁用 youtube-dl,改变文件首选项,以及随着你的探索,还有一些更方便的选项。 + +它为 Ubuntu 用户提供了一个 PPA,为任何其他 Linux 发行版提供了一个 AppImage 文件。在它的 [Github 页面][16]探索更多信息。 + +- [Videomass][17] + +#### 附送:Haruna Video Player + +![][18] + +**主要特点:** + + * 播放/流式传输 YouTube 视频 + +Haruna Video Player 原本是 [MPV][19] 的前端。虽然使用它不能下载 YouTube 视频,但可以通过 youtube-dl 观看/流式传输 YouTube 视频。 + +你可以在我们的[文章][20]中探索更多关于视频播放器的内容。 + +### 总结 + +尽管你可能会在 GitHub 和其他平台上找到更多的 youtube-dl GUI,但它们中的大多数都不能很好地运行,最终会显示出多个错误,或者不再积极开发。 + +[Tartube][21] 就是这样的一个选择,你可以尝试一下,但可能无法达到预期的效果。我用 Pop!_OS 和 Ubuntu MATE 20.04(全新安装)进行了测试。每次我尝试下载一些东西时,无论我怎么做都会失败(即使系统中安装了 youtube-dl 和 ffmpeg)。 + +所以,我个人最喜欢的似乎是 Web GUI([AllTube Download][9]),它不依赖于安装在你系统上的任何东西,也可以自托管。 + +如果我错过了你最喜欢的选择,请在评论中告诉我什么是最适合你的。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/youtube-dl-gui-apps/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/youtube-dl-github-takedown/ +[2]: https://itsfoss.com/download-youtube-videos-ubuntu/ +[3]: https://itsfoss.com/download-youtube-linux/ +[4]: https://ffmpeg.org/ +[5]: https://itsfoss.com/ffmpeg/#install +[6]: https://youtube-dl.org/ +[7]: https://ytdl-org.github.io/youtube-dl/download.html +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/alltube-download.jpg?resize=772%2C593&ssl=1 +[9]: https://github.com/Rudloff/alltube +[10]: https://alltubedownload.net/ +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/youtube-dl-gui.jpg?resize=800%2C548&ssl=1 +[12]: https://github.com/jely2002/youtube-dl-gui/releases/tag/v1.8.7 +[13]: https://github.com/jely2002/youtube-dl-gui +[14]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/videomass.jpg?resize=800%2C537&ssl=1 +[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/videomass-1.jpg?resize=800%2C542&ssl=1 +[16]: https://github.com/jeanslack/Videomass +[17]: https://jeanslack.github.io/Videomass/ +[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/haruna-video-player-dark.jpg?resize=800%2C512&ssl=1 +[19]: https://mpv.io/ +[20]: https://itsfoss.com/haruna-video-player/ +[21]: https://github.com/axcore/tartube diff --git a/published/202103/20160921 lawyer The MIT License, Line by Line.md b/published/202103/20160921 lawyer The MIT License, Line by Line.md new file mode 100644 index 0000000000..8679330528 --- /dev/null +++ b/published/202103/20160921 lawyer The MIT License, Line by Line.md @@ -0,0 +1,296 @@ +[#]: collector: (lujun9972) +[#]: translator: (bestony) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13180-1.html) +[#]: subject: (lawyer The MIT License, Line by Line) +[#]: via: (https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html) +[#]: author: (Kyle E. Mitchell https://kemitchell.com/) + +逐行解读 MIT 许可证 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/06/224509d0zt70ctxtt7iibo.png) + +> 每个程序员都应该明白的 171 个字。 + +[MIT 许可证][1] 是世界上最流行的开源软件许可证。以下是它的逐行解读。 + +### 阅读许可证 + +如果你参与了开源软件,但还没有花时间从头到尾的阅读过这个许可证(它只有 171 个单词),你需要现在就去读一下。尤其是如果许可证不是你日常每天都会接触的,把任何看起来不对劲或不清楚的地方记下来,然后继续阅读。我会分段、按顺序、加入上下文和注释,把每一个词再重复一遍。但最重要的还是要有个整体概念。 + +> The MIT License (MIT) +> +> Copyright (c) \ \ +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> *The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the Software.* + +(LCTT 译注:MIT 许可证并无官方的中文文本,我们也没找到任何可靠的、精确的非官方中文文本。在本文中,我们仅作为参考目的提供一份逐字逐行而没有经过润色的中文翻译文本,但该文本及对其的理解**不能**作为 MIT 许可证使用,我们也不为此中文翻译文本的使用承担任何责任,这份中文文本,我们贡献给公共领域。) + +> MIT 许可证(MIT) +> +> 版权 (c) <年份> <版权人> +> +> 特此免费授予任何获得本软件副本和相关文档文件(下称“软件”)的人不受限制地处置该软件的权利,包括不受限制地使用、复制、修改、合并、发布、分发、转授许可和/或出售该软件副本,以及再授权被配发了本软件的人如上的权利,须在下列条件下: +> +> 上述版权声明和本许可声明应包含在该软件的所有副本或实质成分中。 +> +> 本软件是“如此”提供的,没有任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人都不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。 + +该许可证分为五段,按照逻辑划分如下: + + * **头部** + * **许可证名称**:“MIT 许可证” + * **版权说明**:“版权 (c) …” + * **许可证授予**:“特此授予 …” + * **授予范围**:“… 处置软件 …” + * **条件**:“… 须在 …” + * **归因和声明**:“上述 … 应包含在 …” + * **免责声明**:“本软件是‘如此’提供的 …” + * **责任限制**:“在任何情况下 …” + +接下来详细看看。 + +### 头部 + +#### 许可证名称 + +> The MIT License (MIT) + +> MIT 许可证(MIT) + +“MIT 许可证”不是一个单一的许可证,而是根据麻省理工学院Massachusetts Institute of Technology(MIT)为发行版本准备的语言衍生出来一系列许可证形式。多年来,无论是对于使用它的原始项目,还是作为其他项目的范本,它经历了许多变化。Fedora 项目一直保持着 [收藏 MIT 许可证的好奇心][2],以纯文本的方式记录了那些平淡的变化,如同泡在甲醛中的解剖标本一般,追溯了它的各种演变。 + +幸运的是,[开放源码倡议组织][3]Open Source Initiative(OSI) 和 [软件数据包交换][4]Software Package Data eXchange组织(SPDX)已经将一种通用的 MIT 式的许可证形式标准化为“MIT 许可证The MIT License”。OSI 反过来又采用了 SPDX 通用开源许可证的标准化 [字符串标志符][5],并将其中的 “MIT” 明确指向了标准化形式的“MIT 许可证”。如果你想为一个新项目使用 MIT 式的条款,请使用其 [标准化的形式][1]。 + +即使你在 `LICENSE` 文件中包含 “The MIT License” 或 “SPDX:MIT”,任何负责的审查者仍会将文本与标准格式进行比较,以确保安全。尽管自称为“MIT 许可证”的各种许可证形式只在细微的细节上有所不同,但所谓的“MIT 许可证”的松散性已经诱使了一些作者加入麻烦的“自定义”。典型的糟糕、不好的、非常坏的例子是 [JSON 许可证][6],一个 MIT 家族的许可证被加上了“本软件应用于善,而非恶”。这件事情可能是“非常克罗克福特”的(LCTT 译者注,Crockford 是 JSON 格式和 JSON.org 的作者)。这绝对是一件麻烦事,也许这个玩笑本来是开在律师身上的,但他们却笑得前仰后合。 + +这个故事的寓意是:“MIT 许可证”本身就是模棱两可的。大家可能很清楚你的意思,但你只需要把标准的 MIT 许可证文本复制到你的项目中,就可以节省每个人的时间。如果使用元数据(如包管理器中的元数据文件)来指定 “MIT 许可证”,请确保 `LICENSE` 文件和任何头部的注释都使用标准的许可证文本。所有的这些都可以 [自动化完成][7]。 + +#### 版权声明 + +> Copyright (c) + +> 版权 (c) <年份> <版权持有人> + +在 1976 年(美国)《版权法》颁布之前,美国的版权法规要求采取具体的行动,即所谓的“手续”来确保创意作品的版权。如果你不遵守这些手续,你起诉他人未经授权使用你的作品的权力就会受到限制,往往会完全丧失权力,其中一项手续就是“声明notice”。在你的作品上打上记号,以其他方式让市场知道你拥有版权。“©” 是一个标准符号,用于标记受版权保护的作品,以发出版权声明。ASCII 字符集没有 © 符号,但 `Copyright (c)` 可以表达同样的意思。 + +1976 年的《版权法》“落实”了国际《伯尔尼公约Berne Convention》的许多要求,取消了确保版权的手续。至少在美国,著作权人在起诉侵权之前,仍然需要对自己的版权作品进行登记,如果在侵权行为开始之前进行登记,可能会获得更高的赔偿。但在实践中,很多人在对某个人提起诉讼之前,都会先注册版权。你并不会因为没有在上面贴上声明、注册它、向国会图书馆寄送副本等而失去版权。 + +即使版权声明不像过去那样绝对必要,但它们仍然有很多用处。说明作品的创作年份和版权属于谁,可以让人知道作品的版权何时到期,从而使作品纳入公共领域。作者或作者们的身份也很有用。美国法律对个人作者和“公司”作者的版权条款的计算方式不同。特别是在商业用途中,公司在使用已知竞争对手的软件时,可能也要三思而行,即使许可条款给予了非常慷慨的许可。如果你希望别人看到你的作品并想从你这里获得许可,版权声明可以很好地起到归属作用。 + +至于“版权持有人copyright holder”。并非所有标准形式的许可证都有写明这一点的空间。最新的许可证形式,如 [Apache 2.0][8] 和 [GPL 3.0][9],发布的许可证文本是要逐字复制的,并在其他地方加上标题注释和单独文件,以表明谁拥有版权并提供许可证。这些办法巧妙地阻止了对“标准”文本的意外或故意的修改。这还使自动许可证识别更加可靠。 + +MIT 许可证是从为机构发布的代码而写的语言演变而来。对于机构发布的代码,只有一个明确的“版权持有人”,即发布代码的机构。其他机构抄袭了这些许可证,用他们自己的名字代替了 “MIT”,最终形成了我们现在拥有的通用形式。这一过程同样适用于该时代的其他简短的机构许可证,特别是加州大学伯克利分校的最初的 [四条款 BSD 许可证][10]four-clause BSD License 成为了现在使用的 [三条款][11] 和 [两条款][12] 变体,以及 MIT 许可证的变体互联网系统联盟Internet Systems Consortium的 [ISC 许可证][13]。 + +在每一种情况下,该机构都根据版权所有权规则将自己列为版权持有人,这些规则称为“[雇佣作品][14]”规则,这些规则赋予雇主和客户在其雇员和承包商代表其从事的某些工作中的版权所有权。这些规则通常不适用于自愿提交代码的分布式协作者。这给项目监管型基金会(如 Apache 基金会和 Eclipse 基金会)带来了一个问题,因为它们接受来自更多不同的贡献者的贡献。到目前为止,通常的基础方法是使用一个单一的许可证,它规定了一个版权持有者,如 [Apache 2.0][8] 和 [EPL 1.0][15],并由贡献者许可协议contributor license agreements [Apache CLA][16] 以及 [Eclipse CLA][17] 为后盾,以从贡献者中收集权利。在像 GPL 这样的左版copyleft许可证下,将版权所有权收集在一个地方就更加重要了,因为 GPL 依靠版权所有者来执行许可证条件,以促进软件自由的价值。 + +如今,大量没有机构或商业管理人的项目都在使用 MIT 风格的许可条款。SPDX 和 OSI 通过标准化不涉及特定实体或机构版权持有人的 MIT 和 ISC 之类的许可证形式,为这些用例提供了帮助。有了这些许可证形式,项目作者的普遍做法是在许可证的版权声明中尽早填上自己的名字...也许还会在这里或那里填上年份。至少根据美国的版权法,由此产生的版权声明并不能说明全部情况。 + +软件的原始所有者保留其工作的所有权。但是,尽管 MIT 风格的许可条款赋予了他人开发和更改软件的权利,创造了法律上所谓的“衍生作品”,但它们并没有赋予原始作者对他人的贡献的所有权。相反,每个贡献者在以现有代码为起点所做的任何作品都拥有版权,[即使是稍做了一点创意][18]。 + +这些项目大多数也对接受贡献者许可协议contributor license agreements(CLA)的想法嗤之以鼻,更不用说签署版权转让协议了。这既幼稚又可以理解。尽管一些较新的开源开发人员认为,在 GitHub 上发送拉取请求Pull Request,就会“自动”根据项目现有的许可证条款授权分发贡献,但美国法律不承认任何此类规则。强有力的版权保护是默认的,而不是宽松许可。 + +> 更新:GitHub 后来修改了全站的服务条款,包括试图至少在 GitHub.com 上改变这一默认值。我在 [另一篇文章][19] 中写了一些对这一发展的想法,并非所有想法都是积极的。 + +为了填补法律上有效的、有据可查的贡献权利授予与完全没有纸质痕迹之间的差距,一些项目采用了 [开发者原创证书][20]Developer Certificate of Origin,这是贡献者在 Git 提交中使用 `Signed-Off-By` 元数据标签暗示的标准声明。开发者原创证书是在臭名昭著的 SCO 诉讼之后为 Linux 内核开发而开发的,该诉讼称 Linux 的大部分代码源自 SCO 拥有的 Unix 源代码。作为创建显示 Linux 的每一行都来自贡献者的书面记录的一种方法,开发者原创证书的功能良好。尽管开发者原创证书不是许可证,但它确实提供了大量证据,证明提交代码的人希望项目分发其代码,并让其他人根据内核现有的许可证条款使用该代码。内核还维护着一个机器可读的 `CREDITS` 文件,其中列出了贡献者的名字、所属机构、贡献领域和其他元数据。我做了 [一些][21] [实验][22],把这种方法改编成适用于不使用内核开发流程的项目。 + +### 许可证授权 + +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), + +> 特此免费授予任何获得本软件副本和相关文档文件(下称“软件”)的人 + +MIT 许可证的实质是许可证(你猜对了)。一般来说,许可证是一个人或法律实体(“许可人licensor”)给予另一个人(“被许可人licensee”)做一些法律允许他们起诉的事情的许可。MIT 许可证是一种不起诉的承诺。 + +法律有时将许可证与给予许可证的承诺区分开来。如果有人违背了提供许可证的承诺,你可以起诉他们违背了承诺,但你最终可能得不到许可证。“特此Hereby”是律师们永远摆脱不了的一个矫揉造作、老生常谈的词。这里使用它来表明,许可证文本本身提供了许可证,而不仅仅是许可证的承诺。这是一个合法的 [即调函数表达式(IIFE)][23]。 + +尽管许多许可证都是授予特定的、指定的被许可人的,但 MIT 许可证是一个“公共许可证public license”。公共许可证授予所有人(整个公众)许可。这是开源许可中的三大理念之一。MIT 许可证通过“向任何获得……软件副本的人”授予许可证来体现这一思想。稍后我们将看到,获得此许可证还有一个条件,以确保其他人也可以了解他们的许可。 + +在美国式法律文件中,括号中带引号的首字母大写词汇是赋予术语特定含义的标准方式(“定义”)。当法庭看到文件中其他地方使用了一个已定义的大写术语时,法庭会可靠地回顾定义中的术语。 + +#### 授权范围 + +> to deal in the Software without restriction, + +> 不受限制地处置该软件的权利, + +从被许可人的角度来看,这是 MIT 许可证中最重要的七个字。主要的法律问题就是因侵犯版权而被起诉,和因侵犯专利而被起诉。无论是版权法还是专利法都没有将 “处置to deal in” 作为一个术语,它在法庭上没有特定的含义。因此,任何法庭在裁决许可人和被许可人之间的纠纷时,都会询问当事人对这一措辞的含义和理解。法庭将看到的是,该措辞有意宽泛和开放。它为被许可人提供了一个强有力的论据,反对许可人提出的任何主张 —— 即他们不允许被许可人使用该软件做那件特定的事情,即使在授予许可证时双方都没有明显想到。 + +> including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, + +> 包括不受限制地使用、复制、修改、合并、发布、分发、转授许可和/或出售该软件副本,以及再授权被配发了本软件的人如上的权利, + +没有一篇法律是完美的、“意义上完全确定”、或明确无误的。小心那些假装不然的人。这是 MIT 许可证中最不完美的部分。主要有三个问题: + +首先,“包括不受限制地including without limitation”是一种法律反模式。它有多种衍生: + + * 包括,但不受限制including, without limitation + * 包括,但不限于前述的一般性including, without limiting the generality of the foregoing + * 包括,但不限于including, but not limited to + * 很多、很多毫无意义的变化 + +所有这些都有一个共同的目标,但都未能可靠地实现。从根本上说,使用它们的起草者也会尽量试探着去做。在 MIT 许可证中,这意味着引入“处置软件dealing in the Software”的具体例子 — “使用、复制、修改”等等,但不意味着被许可方的行为必须与给出的例子类似,才能算作“处置”。问题是,如果你最终需要法庭来审查和解释许可证的条款,法庭将把它的工作看作是找出这些语言的含义。如果法庭需要决定“处置deal in”的含义,它不能“无视”这些例子,即使你告诉它。我认为,“不受限制地处置本软件”本身对被许可人更好,也更短。 + +其次,作为“处置deal in”的例子的那些动词是一个大杂烩。有些在版权法或专利法下有特定的含义,有些稍微有或根本没有含义: + + * “使用use”出现在 [《美国法典》第 35 篇,第 271(a)节][24],这是专利法中专利权人可以起诉他人未经许可的行为的清单。 + * “复制copy”出现在 [《美国法典》第 17 篇,第 106 节][25],即版权法列出的版权所有人可以起诉他人未经许可的行为。 + * “修改modify”既不出现在版权法中,也不出现在专利法中。它可能最接近版权法下的“准备衍生作品prepare derivative works”,但也可能涉及改进或其他衍生发明。 + * 无论是在版权法还是专利法中,“合并merge”都没有出现。“合并merger”在版权方面有特定的含义,但这显然不是这里的意图。相反,法庭可能会根据其在行业中的含义来解读“合并”,如“合并代码”。 + * 无论是在版权法还是专利法中,都没有“发布publish”。由于“软件”是被发布的内容,根据《[版权法][25]》,它可能最接近于“分发distribute”。该法令还包括“公开”表演和展示作品的权利,但这些权利只适用于特定类型的受版权保护的作品,如戏剧、录音和电影。 + * “分发distribute”出现在《[版权法][25]》中。 + * “转授许可sublicense”是知识产权法中的一个总称。转授许可的权利是指把自己的许可证授予他人,有权进行你所许可的部分或全部活动。实际上,MIT 许可证的转授许可的权利在开源代码许可证中并不常见。通常的做法是 Heather Meeker 所说的“直接许可direct licensing”方式,在这种方法中,每个获得该软件及其许可证条款副本的人都直接从所有者那里获得授权。任何可能根据 MIT 许可证获得转授许可的人都可能会得到一份许可证副本,告诉他们其也有直接许可证。 + * “出售副本sell copies”是个混杂品。它接近于《[专利法][24]》中的“要约出售offer to sell”和“出售sell”,但指的是“副本coyies”,这是一种版权概念。在版权方面,它似乎接近于“分发distribute”,但《[版权法][25]》没有提到销售。 + * “允许被配发了本软件的人这样做permit persons to whom the Software is furnished to do so”似乎是多余的“转授许可”。这也是不必要的,因为获得副本的人也可以直接获得许可证。 + +最后,由于这种法律、行业、一般知识产权和一般使用条款的混杂,并不清楚 MIT 许可证是否包括专利许可。一般性语言“处置deal in”和一些例子动词,尤其是“使用”,指向了一个专利许可,尽管是一个非常不明确的许可。许可证来自于版权持有人,而版权持有人可能对软件中的发明拥有或不拥有专利权,以及大多数的例子动词和“软件the Software”本身的定义,都强烈地指向版权许可证。诸如 [Apache 2.0][8] 之类的较新的宽容开源许可分别具体地处理了版权、专利甚至商标问题。 + +#### 三个许可条件 + +> subject to the following conditions: + +> 须在下列条件下: + +总有一个陷阱!MIT 许可证有三个! + +如果你不遵守 MIT 许可证的条件,你就得不到许可证提供的许可。因此,如果不能履行条件,至少从理论上说,会让你面临一场诉讼,很可能是一场版权诉讼。 + +开源软件的第二个伟大思想是,利用软件对被许可人的价值来激励被许可人遵守条件,即使被许可人没有支付任何许可费用。最后一个伟大思想,在 MIT 许可证中没有,它构建了许可证条件:像 [GNU 通用公共许可证][9](GPL)这样的左版许可证,使用许可证条件来控制如何对修改后的版本进行许可和发布。 + +#### 声明条件 + +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +> 上述版权声明和本许可声明应包含在该软件的所有副本或实质成分中。 + +如果你给别人一份软件的副本,你需要包括许可证文本和任何版权声明。这有几个关键目的: + + 1. 给别人一个声明,说明他们有权使用该公共许可证下的软件。这是直接授权模式的一个关键部分,在这种模式下,每个用户直接从版权持有人那里获得许可证。 + 2. 让人们知道谁是软件的幕后人物,这样他们就可以得到赞美、荣耀和冷冰冰的现金捐赠。 + 3. 确保保修免责声明和责任限制(在后面)伴随该软件。每个得到该副本的人也应该得到一份这些许可人保护的副本。 + +没有什么可以阻止你对提供一个副本、甚至是一个没有源代码的编译形式的副本而收费。但是当你这么做的时候,你不能假装 MIT 代码是你自己的专有代码,也不能在其他许可证下提供。接受的人要知道自己在“公共许可证”下的权利。 + +坦率地说,遵守这个条件正在崩溃。几乎所有的开源许可证都有这样的“归因attribution”条件。系统和装机软件的制作者往往明白,他们需要为自己的每一个发行版本编制一个声明文件或“许可证信息”屏,并附上库和组件的许可证文本副本。项目监管型基金会在教授这些做法方面起到了重要作用。但是整个 Web 开发者群体还没有取得这种经验。这不能用缺乏工具来解释,工具有很多,也不能用 npm 和其他资源库中的包的高度模块化来解释,它们统一了许可证信息的元数据格式。所有好的 JavaScript 压缩器都有保存许可证标题注释的命令行标志。其他工具可以从包树中串联 `LICENSE` 文件。这实在是没有借口。 + +#### 免责声明 + +> The Software is provided “as is”, without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. + +> 本软件是“如此”提供的,没有任何形式的明示或暗示的保证,包括但不限于对适销性、特定用途的适用性和不侵权的保证。 + +美国几乎每个州都颁布了一个版本的《统一商业法典Uniform Commercial Code》(UCC),这是一部规范商业交易的示范性法律。UCC 的第 2 条(加利福尼亚州的“第 2 部分”)规定了商品销售合同,包括了从二手汽车的购买到向制造厂运送大量工业化学品。 + +UCC 关于销售合同的某些规则是强制性的。这些规则始终适用,无论买卖双方是否喜欢。其他只是“默认”。除非买卖双方以书面形式选择不适用这些默认,否则 UCC 潜在视作他们希望在 UCC 文本中找到交易的基准规则。默认规则中包括隐含的“免责warranties”,或卖方对买方关于所售商品的质量和可用性的承诺。 + +关于诸如 MIT 许可证之类的公共许可证是合同(许可方和被许可方之间的可执行协议)还是仅仅是许可证(单向的,但可能有附加条件),这在理论上存在很大争议。关于软件是否被视为“商品”,从而触发 UCC 规则的争论较少。许可人之间没有就赔偿责任进行辩论:如果他们免费提供的软件出现故障、导致问题、无法正常工作或以其他方式引起麻烦,他们不想被起诉和被要求巨额赔偿。这与“默示保证implied warranty”的三个默认规则完全相反: + + 1. 据 [UCC 第 2-314 节][26],“适销性merchantability”的默示保证是一种承诺:“商品”(即软件)的质量至少为平均水平,并经过适当包装和标记,并适用于其常规用途。仅当提供该软件的人是该软件的“商人”时,此保证才适用,这意味着他们从事软件交易,并表现出对软件的熟练程度。 + 2. 据 [UCC 第 2-315 节][27],当卖方知道买方依靠他们提供用于特定目的的货物时,“适用于某一特定目的fitness for a particular purpose”的默示保证就会生效。商品实际上需要“适用”这一目的。 + 3. “非侵权noninfringement”的默示保证不是 UCC 的一部分,而是一般合同法的共同特征。如果事实证明买方收到的商品侵犯了他人的知识产权,则这种默示的承诺将保护买方。如果根据 MIT 许可证获得的软件实际上并不属于尝试许可该软件的许可人,或者属于他人拥有的专利,那就属于这种情况。 + +UCC 的 [第2-316(3)节][28] 要求,选择不适用或“排除”适销性和适用于某一特定目的的默示保证措辞必须醒目。“醒目”意味着书面化或格式化,以引起人们的注意,这与旨在从不小心的消费者身边溜走的细小字体相反。各州法律可以对不侵权的免责声明提出类似的引人注目的要求。 + +长期以来,律师们都有一种错觉,认为用“全大写”写任何东西都符合明显的要求。这是不正确的。法庭曾批评律师协会自以为是,而且大多数人都认为,全大写更多的是阻止阅读,而不是强制阅读。同样的,大多数开源许可证的形式都将其免责声明设置为全大写,部分原因是这是在纯文本的 `LICENSE` 文件中唯一明显的方式。我更喜欢使用星号或其他 ASCII 艺术,但那是很久很久以前的事了。 + +#### 责任限制 + +> In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the Software or the use or other dealings in the Software. + +> 在任何情况下,作者或版权持有人都不对任何索赔、损害或其他责任负责,无论这些追责来自合同、侵权或其它行为中,还是产生于、源于或有关于本软件以及本软件的使用或其它处置。 + +MIT 许可证授予软件“免费”许可,但法律并不认为接受免费许可证的人在出错时放弃了起诉的权利,而许可人应该受到责备。“责任限制”,通常与“损害赔偿排除”条款搭配使用,其作用与许可证很像,是不起诉的承诺。但这些都是保护许可人免受被许可人起诉的保护措施。 + +一般来说,法庭对责任限制和损害赔偿排除条款的解读非常谨慎,因为这些条款可以将大量的风险从一方转移到另一方。为了保护社会的切身利益,让民众有办法纠正在法庭上所犯的错误,他们“严格地”用措辞限制责任,尽可能地对受其保护的一方进行解读。责任限制必须具体才能成立。特别是在“消费者”合同和其他放弃起诉权的人缺乏成熟度或讨价还价能力的情况下,法庭有时会拒绝尊重那些似乎被埋没在视线之外的措辞。部分是出于这个原因,部分是出于习惯,律师们往往也会给责任限制以全大写处理。 + +再往下看,“责任限制”部分是对被许可人可以起诉的金额上限。在开源许可证中,这个上限总是没有钱,0 元,“不承担责任”。相比之下,在商业许可证中,它通常是过去 12 个月内支付的许可证费用的倍数,尽管它通常是经过谈判的。 + +“排除”部分具体列出了各种法律主张,即请求赔偿的理由,许可人不能使用。像许多其他法律形式一样,MIT 许可证 提到了“违约of contract”行为(即违反合同)和“侵权of tort”行为。侵权规则是防止粗心或恶意伤害他人的一般规则。如果你在发短信时在路上撞倒了人,你就犯了侵权行为。如果你的公司销售的有问题的耳机会烧伤人们的耳朵,则说明贵公司已经侵权。如果合同没有明确排除侵权索赔,那么法庭有时会在合同中使用排除措辞以防止合同索赔。出于很好的考虑,MIT 许可证抛出“或其它”字样,只是为了截住奇怪的海事法或其它异国情调的法律主张。 + +“产生于、源于或有关于arising from, out of or in connection with”这句话是法律起草人固有的、焦虑的不安全感反复出现的症状。关键是,任何与软件有关的诉讼都被这些限制和排除范围所覆盖。万一某些事情可以“产生于arising from”,但不能“源于out of”或“有关于in connection with”,那就最好把这三者都写在里面,所以要把它们打包在一起。更不用说,任何被迫在这部分内容中斤斤计较的法庭将不得不为每个词提出不同的含义,前提是专业的起草者不会在一行中使用不同的词来表示同一件事。更不用说,在实践中,如果法庭对一开始就不利的限制感觉不好,那么他们会更愿意狭隘地解读范围触发器。但我离题了,同样的语言出现在数以百万计的合同中。 + +### 总结 + +所有这些诡辩都有点像在进教堂的路上吐口香糖。MIT 许可证是一个法律经典,且有效。它绝不是解决所有软件知识产权弊病的灵丹妙药,尤其是它比已经出现的软件专利灾难还要早几十年。但 MIT 风格的许可证发挥了令人钦佩的作用,实现了一个狭隘的目的,用最少的、谨慎的法律工具组合扭转了版权、销售和合同法等棘手的默认规则。在计算机技术的大背景下,它的寿命是惊人的。MIT 许可证已经超过、并将要超过绝大多数软件许可证。我们只能猜测,当它最终失去青睐时,它能提供多少年的忠实法律服务。对于那些无法提供自己的律师的人来说,这尤其慷慨。 + +我们已经看到,我们今天所知道的 MIT 许可证是如何成为一套具体的、标准化的条款,使机构特有的、杂乱无章的变化终于有了秩序。 + +我们已经看到了它对归因和版权声明的处理方法如何为学术、标准、商业和基金会机构的知识产权管理实践提供信息。 + +我们已经看到了 MIT 许可证是如何运行所有人免费试用软件的,但前提是要保护许可人不受担保和责任的影响。 + +我们已经看到,尽管有一些生硬的措辞和律师的矫揉造作,但一百七十一个小词可以完成大量的法律工作,为开源软件在知识产权和合同的密集丛林中开辟一条道路。 + +我非常感谢所有花时间阅读这篇相当长的文章的人,让我知道他们发现它很有用,并帮助改进它。一如既往,我欢迎你通过 [e-mail][29]、[Twitter][30] 和 [GitHub][31] 发表评论。 + +--- + +有很多人问,他们在哪里可以读到更多的东西,或者找到其他许可证,比如 GNU 通用公共许可证或 Apache 2.0 许可证。无论你的兴趣是什么,我都会向你推荐以下书籍: + + * Andrew M. St. Laurent 的 [Understanding Open Source & Free Software Licensing][32],来自 O’Reilly。 + > 我先说这本,因为虽然它有些过时,但它的方法也最接近上面使用的逐行方法。O'Reilly 已经把它[放在网上][33]。 + * Heather Meeker 的 [Open (Source) for Business][34] + > 在我看来,这是迄今为止关于 GNU 通用公共许可证和更广泛的左版的最佳著作。这本书涵盖了历史、许可证、它们的发展,以及兼容性和合规性。这本书是我给那些考虑或处理 GPL 的客户的书。 + * Larry Rosen 的 [Open Source Licensing][35],来自 Prentice Hall。 + > 一本很棒的入门书,也可以免费 [在线阅读][36]。对于从零开始的程序员来说,这是开源许可和相关法律的最好介绍。这本在一些具体细节上也有点过时了,但 Larry 的许可证分类法和对开源商业模式的简洁总结经得起时间的考验。 + +所有这些都对我作为一个开源许可律师的教育至关重要。它们的作者都是我的职业英雄。请读一读吧 — K.E.M + +我将此文章基于 [Creative Commons Attribution-ShareAlike 4.0 license][37] 授权 + +-------------------------------------------------------------------------------- + +via: https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html + +作者:[Kyle E. Mitchell][a] +选题:[lujun9972][b] +译者:[bestony](https://github.com/bestony) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://kemitchell.com/ +[b]: https://github.com/lujun9972 +[1]: http://spdx.org/licenses/MIT +[2]: https://fedoraproject.org/wiki/Licensing:MIT?rd=Licensing/MIT +[3]: https://opensource.org +[4]: https://spdx.org +[5]: http://spdx.org/licenses/ +[6]: https://spdx.org/licenses/JSON +[7]: https://www.npmjs.com/package/licensor +[8]: https://www.apache.org/licenses/LICENSE-2.0 +[9]: https://www.gnu.org/licenses/gpl-3.0.en.html +[10]: http://spdx.org/licenses/BSD-4-Clause +[11]: https://spdx.org/licenses/BSD-3-Clause +[12]: https://spdx.org/licenses/BSD-2-Clause +[13]: http://www.isc.org/downloads/software-support-policy/isc-license/ +[14]: http://worksmadeforhire.com/ +[15]: https://www.eclipse.org/legal/epl-v10.html +[16]: https://www.apache.org/licenses/#clas +[17]: https://wiki.eclipse.org/ECA +[18]: https://en.wikipedia.org/wiki/Feist_Publications,_Inc.,_v._Rural_Telephone_Service_Co. +[19]: https://writing.kemitchell.com/2017/02/16/Against-Legislating-the-Nonobvious.html +[20]: http://developercertificate.org/ +[21]: https://github.com/berneout/berneout-pledge +[22]: https://github.com/berneout/authors-certificate +[23]: https://en.wikipedia.org/wiki/Immediately-invoked_function_expression +[24]: https://www.govinfo.gov/app/details/USCODE-2017-title35/USCODE-2017-title35-partIII-chap28-sec271 +[25]: https://www.govinfo.gov/app/details/USCODE-2017-title17/USCODE-2017-title17-chap1-sec106 +[26]: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?sectionNum=2314.&lawCode=COM +[27]: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?sectionNum=2315.&lawCode=COM +[28]: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?sectionNum=2316.&lawCode=COM +[29]: mailto:kyle@kemitchell.com +[30]: https://twitter.com/kemitchell +[31]: https://github.com/kemitchell/writing/tree/master/_posts/2016-09-21-MIT-License-Line-by-Line.md +[32]: https://lccn.loc.gov/2006281092 +[33]: http://www.oreilly.com/openbook/osfreesoft/book/ +[34]: https://www.amazon.com/dp/1511617772 +[35]: https://lccn.loc.gov/2004050558 +[36]: http://www.rosenlaw.com/oslbook.htm +[37]: https://creativecommons.org/licenses/by-sa/4.0/legalcode \ No newline at end of file diff --git a/published/202103/20190221 Testing Bash with BATS.md b/published/202103/20190221 Testing Bash with BATS.md new file mode 100644 index 0000000000..f41ea939b7 --- /dev/null +++ b/published/202103/20190221 Testing Bash with BATS.md @@ -0,0 +1,262 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13194-1.html) +[#]: subject: (Testing Bash with BATS) +[#]: via: (https://opensource.com/article/19/2/testing-bash-bats) +[#]: author: (Darin London https://opensource.com/users/dmlond) + +利用 BATS 测试 Bash 脚本和库 +====== + +> Bash 自动测试系统可以使 Bash 代码也通过 Java、Ruby 和 Python 开发人员所使用的同类测试过程。 + +![](https://img.linux.net.cn/data/attachment/album/202103/11/214705wcjm3vjpn9g69gl3.jpg) + +用 Java、Ruby 和 Python 等语言编写应用程序的软件开发人员拥有复杂的库,可以帮助他们随着时间的推移保持软件的完整性。他们可以创建测试,以在结构化环境中通过执行一系列动作来运行应用程序,以确保其软件所有的方面均按预期工作。 + +当这些测试在持续集成(CI)系统中自动进行时,它们的功能就更加强大了,每次推送到源代码库都会触发测试,并且在测试失败时会立即通知开发人员。这种快速反馈提高了开发人员对其应用程序功能完整性的信心。 + +Bash 自动测试系统Bash Automated Testing System([BATS][1])使编写 Bash 脚本和库的开发人员能够将 Java、Ruby、Python 和其他开发人员所使用的相同惯例应用于其 Bash 代码中。 + +### 安装 BATS + +BATS GitHub 页面包含了安装指令。有两个 BATS 辅助库提供更强大的断言或允许覆写 BATS 使用的 Test Anything Protocol([TAP][2])输出格式。这些库可以安装在一个标准位置,并被所有的脚本引用。更方便的做法是,将 BATS 及其辅助库的完整版本包含在 Git 仓库中,用于要测试的每组脚本或库。这可以通过 [git 子模块][3] 系统来完成。 + +以下命令会将 BATS 及其辅助库安装到 Git 知识库中的 `test` 目录中。 + +``` +git submodule init +git submodule add https://github.com/sstephenson/bats test/libs/bats +git submodule add https://github.com/ztombol/bats-assert test/libs/bats-assert +git submodule add https://github.com/ztombol/bats-support test/libs/bats-support +git add . +git commit -m 'installed bats' +``` + +要克隆 Git 仓库并同时安装其子模块,请在 `git clone` 时使用 +`--recurse-submodules` 标记。 + +每个 BATS 测试脚本必须由 `bats` 可执行文件执行。如果你将 BATS 安装到源代码仓库的 `test/libs` 目录中,则可以使用以下命令调用测试: + +``` +./test/libs/bats/bin/bats <测试脚本的路径> +``` + +或者,将以下内容添加到每个 BATS 测试脚本的开头: + +``` +#!/usr/bin/env ./test/libs/bats/bin/bats +load 'libs/bats-support/load' +load 'libs/bats-assert/load' +``` + +并且执行命令 `chmod +x <测试脚本的路径>`。 这将 a、使它们可与安装在 `./test/libs/bats` 中的 BATS 一同执行,并且 b、包含这些辅助库。BATS 测试脚本通常存储在 `test` 目录中,并以要测试的脚本命名,扩展名为 `.bats`。例如,一个测试 `bin/build` 的 BATS 脚本应称为 `test/build.bats`。 + +你还可以通过向 BATS 传递正则表达式来运行一整套 BATS 测试文件,例如 `./test/lib/bats/bin/bats test/*.bats`。 + +### 为 BATS 覆盖率而组织库和脚本 + +Bash 脚本和库必须以一种有效地方式将其内部工作原理暴露给 BATS 进行组织。通常,在调用或执行时库函数和运行诸多命令的 Shell 脚本不适合进行有效的 BATS 测试。 + +例如,[build.sh][4] 是许多人都会编写的典型脚本。本质上是一大堆代码。有些人甚至可能将这堆代码放入库中的函数中。但是,在 BATS 测试中运行一大堆代码,并在单独的测试用例中覆盖它可能遇到的所有故障类型是不可能的。测试这堆代码并有足够的覆盖率的唯一方法就是把它分解成许多小的、可重用的、最重要的是可独立测试的函数。 + +向库添加更多的函数很简单。额外的好处是其中一些函数本身可以变得出奇的有用。将库函数分解为许多较小的函数后,你可以在 BATS 测试中援引source这些库,并像测试任何其他命令一样运行这些函数。 + +Bash 脚本也必须分解为多个函数,执行脚本时,脚本的主要部分应调用这些函数。此外,还有一个非常有用的技巧,可以让你更容易地用 BATS 测试 Bash 脚本:将脚本主要部分中执行的所有代码都移到一个函数中,称为 `run_main`。然后,将以下内容添加到脚本的末尾: + +``` +if [[ "${BASH_SOURCE[0]}" == "${0}" ]] +then +  run_main +fi +``` + +这段额外的代码做了一些特别的事情。它使脚本在作为脚本执行时与使用援引source进入环境时的行为有所不同。通过援引并测试单个函数,这个技巧使得脚本的测试方式和库的测试方式变得一样。例如,[这是重构的 build.sh,以获得更好的 BATS 可测试性][5]。 + +### 编写和运行测试 + +如上所述,BATS 是一个 TAP 兼容的测试框架,其语法和输出对于使用过其他 TAP 兼容测试套件(例如 JUnit、RSpec 或 Jest)的用户来说将是熟悉的。它的测试被组织成单个测试脚本。测试脚本被组织成一个或多个描述性 `@test` 块中,它们描述了被测试应用程序的单元。每个 `@test` 块将运行一系列命令,这些命令准备测试环境、运行要测试的命令,并对被测试命令的退出和输出进行断言。许多断言函数是通过 `bats`、`bats-assert` 和 `bats-support` 库导入的,这些库在 BATS 测试脚本的开头加载到环境中。下面是一个典型的 BATS 测试块: + +``` +@test "requires CI_COMMIT_REF_SLUG environment variable" { +  unset CI_COMMIT_REF_SLUG +  assert_empty "${CI_COMMIT_REF_SLUG}" +  run some_command +  assert_failure +  assert_output --partial "CI_COMMIT_REF_SLUG" +} +``` + +如果 BATS 脚本包含 `setup`(安装)和/或 `teardown`(拆卸) 函数,则 BATS 将在每个测试块运行之前和之后自动执行它们。这样就可以创建环境变量、测试文件以及执行一个或所有测试所需的其他操作,然后在每次测试运行后将其拆卸。[Build.bats][6] 是对我们新格式化的 `build.sh` 脚本的完整 BATS 测试。(此测试中的 `mock_docker` 命令将在以下关于模拟/打标的部分中进行说明。) + +当测试脚本运行时,BATS 使用 `exec`(执行)来将每个 `@test` 块作为单独的子进程运行。这样就可以在一个 `@test` 中导出环境变量甚至函数,而不会影响其他 `@test` 或污染你当前的 Shell 会话。测试运行的输出是一种标准格式,可以被人理解,并且可以由 TAP 使用端以编程方式进行解析或操作。下面是 `CI_COMMIT_REF_SLUG` 测试块失败时的输出示例: + +``` + ✗ requires CI_COMMIT_REF_SLUG environment variable +   (from function `assert_output' in file test/libs/bats-assert/src/assert.bash, line 231, +    in test file test/ci_deploy.bats, line 26) +     `assert_output --partial "CI_COMMIT_REF_SLUG"' failed + +   -- output does not contain substring -- +   substring (1 lines): +     CI_COMMIT_REF_SLUG +   output (3 lines): +     ./bin/deploy.sh: join_string_by: command not found +     oc error +     Could not login +   -- + +   ** Did not delete , as test failed ** + +1 test, 1 failure +``` + +下面是成功测试的输出: + +``` +✓ requires CI_COMMIT_REF_SLUG environment variable +``` + +### 辅助库 + +像任何 Shell 脚本或库一样,BATS 测试脚本可以包括辅助库,以在测试之间共享通用代码或增强其性能。这些辅助库,例如 `bats-assert` 和 `bats-support` 甚至可以使用 BATS 进行测试。 + +库可以和 BATS 脚本放在同一个测试目录下,如果测试目录下的文件数量过多,也可以放在 `test/libs` 目录下。BATS 提供了 `load` 函数,该函数接受一个相对于要测试的脚本的 Bash 文件的路径(例如,在我们的示例中的 `test`),并援引该文件。文件必须以后缀 `.bash` 结尾,但是传递给 `load` 函数的文件路径不能包含后缀。`build.bats` 加载 `bats-assert` 和 `bats-support` 库、一个小型 [helpers.bash][7] 库以及 `docker_mock.bash` 库(如下所述),以下代码位于测试脚本的开头,解释器魔力行下方: + +``` +load 'libs/bats-support/load' +load 'libs/bats-assert/load' +load 'helpers' +load 'docker_mock' +``` + +### 打标测试输入和模拟外部调用 + +大多数 Bash 脚本和库运行时都会执行函数和/或可执行文件。通常,它们被编程为基于这些函数或可执行文件的输出状态或输出(`stdout`、`stderr`)以特定方式运行。为了正确地测试这些脚本,通常需要制作这些命令的伪版本,这些命令被设计成在特定测试过程中以特定方式运行,称为“打标stubbing”。可能还需要监视正在测试的程序,以确保其调用了特定命令,或者使用特定参数调用了特定命令,此过程称为“模拟mocking”。有关更多信息,请查看在 Ruby RSpec 中 [有关模拟和打标的讨论][8],它适用于任何测试系统。 + +Bash shell 提供了一些技巧,可以在你的 BATS 测试脚本中使用这些技巧进行模拟和打标。所有这些都需要使用带有 `-f` 标志的 Bash `export` 命令来导出一个覆盖了原始函数或可执行文件的函数。必须在测试程序执行之前完成此操作。下面是重写可执行命令 `cat` 的简单示例: + +``` +function cat() { echo "THIS WOULD CAT ${*}" } +export -f cat +``` + +此方法以相同的方式覆盖了函数。如果一个测试需要覆盖要测试的脚本或库中的函数,则在对函数进行打标或模拟之前,必须先声明已测试脚本或库,这一点很重要。否则,在声明脚本时,打标/模拟将被原函数替代。另外,在运行即将进行的测试命令之前确认打标/模拟。下面是`build.bats` 的示例,该示例模拟 `build.sh` 中描述的`raise` 函数,以确保登录函数会引发特定的错误消息: + +``` +@test ".login raises on oc error" { +  source ${profile_script} +  function raise() { echo "${1} raised"; } +  export -f raise +  run login +  assert_failure +  assert_output -p "Could not login raised" +} +``` + +一般情况下,没有必要在测试后复原打标/模拟的函数,因为 `export`(输出)仅在当前 `@test` 块的 `exec`(执行)期间影响当前子进程。但是,可以模拟/打标 BATS `assert` 函数在内部使用的命令(例如 `cat`、`sed` 等)是可能的。在运行这些断言命令之前,必须对这些模拟/打标函数进行 `unset`(复原),否则它们将无法正常工作。下面是 `build.bats` 中的一个示例,该示例模拟 `sed`,运行 `build_deployable` 函数并在运行任何断言之前复原 `sed`: + +``` +@test ".build_deployable prints information, runs docker build on a modified Dockerfile.production and publish_image when its not a dry_run" { +  local expected_dockerfile='Dockerfile.production' +  local application='application' +  local environment='environment' +  local expected_original_base_image="${application}" +  local expected_candidate_image="${application}-candidate:${environment}" +  local expected_deployable_image="${application}:${environment}" +  source ${profile_script} +  mock_docker build --build-arg OAUTH_CLIENT_ID --build-arg OAUTH_REDIRECT --build-arg DDS_API_BASE_URL -t "${expected_deployable_image}" - +  function publish_image() { echo "publish_image ${*}"; } +  export -f publish_image +  function sed() { +    echo "sed ${*}" >&2; +    echo "FROM application-candidate:environment"; +  } +  export -f sed +  run build_deployable "${application}" "${environment}" +  assert_success +  unset sed +  assert_output --regexp "sed.*${expected_dockerfile}" +  assert_output -p "Building ${expected_original_base_image} deployable ${expected_deployable_image} FROM ${expected_candidate_image}" +  assert_output -p "FROM ${expected_candidate_image} piped" +  assert_output -p "build --build-arg OAUTH_CLIENT_ID --build-arg OAUTH_REDIRECT --build-arg DDS_API_BASE_URL -t ${expected_deployable_image} -" +  assert_output -p "publish_image ${expected_deployable_image}" +} +``` + +有的时候相同的命令,例如 `foo`,将在被测试的同一函数中使用不同的参数多次调用。这些情况需要创建一组函数: + + * `mock_foo`:将期望的参数作为输入,并将其持久化到 TMP 文件中 + * `foo`:命令的模拟版本,该命令使用持久化的预期参数列表处理每个调用。必须使用 `export -f` 将其导出。 + * `cleanup_foo`:删除 TMP 文件,用于拆卸函数。这可以进行测试以确保在删除之前成功完成 `@test` 块。 + +由于此功能通常在不同的测试中重复使用,因此创建一个可以像其他库一样加载的辅助库会变得有意义。 + +[docker_mock.bash][9] 是一个很棒的例子。它被加载到 `build.bats` 中,并在任何测试调用 Docker 可执行文件的函数的测试块中使用。使用 `docker_mock` 典型的测试块如下所示: + +``` +@test ".publish_image fails if docker push fails" { +  setup_publish +  local expected_image="image" +  local expected_publishable_image="${CI_REGISTRY_IMAGE}/${expected_image}" +  source ${profile_script} +  mock_docker tag "${expected_image}" "${expected_publishable_image}" +  mock_docker push "${expected_publishable_image}" and_fail +  run publish_image "${expected_image}" +  assert_failure +  assert_output -p "tagging ${expected_image} as ${expected_publishable_image}" +  assert_output -p "tag ${expected_image} ${expected_publishable_image}" +  assert_output -p "pushing image to gitlab registry" +  assert_output -p "push ${expected_publishable_image}" +} +``` + +该测试建立了一个使用不同的参数两次调用 Docker 的预期。在对Docker 的第二次调用失败时,它会运行测试命令,然后测试退出状态和对 Docker 调用的预期。 + +一方面 BATS 利用 `mock_docker.bash` 引入 `${BATS_TMPDIR}` 环境变量,BATS 在测试开始的位置对其进行了设置,以允许测试和辅助程序在标准位置创建和销毁 TMP 文件。如果测试失败,`mock_docker.bash` 库不会删除其持久化的模拟文件,但会打印出其所在位置,以便可以查看和删除它。你可能需要定期从该目录中清除旧的模拟文件。 + +关于模拟/打标的一个注意事项:`build.bats` 测试有意识地违反了关于测试声明的规定:[不要模拟没有拥有的!][10] 该规定要求调用开发人员没有编写代码的测试命令,例如 `docker`、`cat`、`sed` 等,应封装在自己的库中,应在使用它们脚本的测试中对其进行模拟。然后应该在不模拟外部命令的情况下测试封装库。 + +这是一个很好的建议,而忽略它是有代价的。如果 Docker CLI API 发生变化,则测试脚本不会检测到此变化,从而导致错误内容直到经过测试的 `build.sh` 脚本在使用新版本 Docker 的生产环境中运行后才显示出来。测试开发人员必须确定要严格遵守此标准的程度,但是他们应该了解其所涉及的权衡。 + +### 总结 + +在任何软件开发项目中引入测试制度,都会在以下两方面产生权衡: a、增加开发和维护代码及测试所需的时间和组织,b、增加开发人员在对应用程序整个生命周期中完整性的信心。测试制度可能不适用于所有脚本和库。 + +通常,满足以下一个或多个条件的脚本和库才可以使用 BATS 测试: + + * 值得存储在源代码管理中 + * 用于关键流程中,并依靠它们长期稳定运行 + * 需要定期对其进行修改以添加/删除/修改其功能 + * 可以被其他人使用 + +一旦决定将测试规则应用于一个或多个 Bash 脚本或库,BATS 就提供其他软件开发环境中可用的全面测试功能。 + +致谢:感谢 [Darrin Mann][11] 向我引荐了 BATS 测试。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/2/testing-bash-bats + +作者:[Darin London][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dmlond +[b]: https://github.com/lujun9972 +[1]: https://github.com/sstephenson/bats +[2]: http://testanything.org/ +[3]: https://git-scm.com/book/en/v2/Git-Tools-Submodules +[4]: https://github.com/dmlond/how_to_bats/blob/preBats/build.sh +[5]: https://github.com/dmlond/how_to_bats/blob/master/bin/build.sh +[6]: https://github.com/dmlond/how_to_bats/blob/master/test/build.bats +[7]: https://github.com/dmlond/how_to_bats/blob/master/test/helpers.bash +[8]: https://www.codewithjason.com/rspec-mocks-stubs-plain-english/ +[9]: https://github.com/dmlond/how_to_bats/blob/master/test/docker_mock.bash +[10]: https://github.com/testdouble/contributing-tests/wiki/Don't-mock-what-you-don't-own +[11]: https://github.com/dmann diff --git a/published/202103/20190730 Using Python to explore Google-s Natural Language API.md b/published/202103/20190730 Using Python to explore Google-s Natural Language API.md new file mode 100644 index 0000000000..5141eae275 --- /dev/null +++ b/published/202103/20190730 Using Python to explore Google-s Natural Language API.md @@ -0,0 +1,299 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13233-1.html) +[#]: subject: (Using Python to explore Google's Natural Language API) +[#]: via: (https://opensource.com/article/19/7/python-google-natural-language-api) +[#]: author: (JR Oakes https://opensource.com/users/jroakes) + +利用 Python 探究 Google 的自然语言 API +====== + +> Google API 可以凸显出有关 Google 如何对网站进行分类的线索,以及如何调整内容以改进搜索结果的方法。 + +![](https://img.linux.net.cn/data/attachment/album/202103/24/232018q66pz2uc5uuq1p03.jpg) + +作为一名技术性的搜索引擎优化人员,我一直在寻找以新颖的方式使用数据的方法,以更好地了解 Google 如何对网站进行排名。我最近研究了 Google 的 [自然语言 API][2] 能否更好地揭示 Google 是如何分类网站内容的。 + +尽管有 [开源 NLP 工具][3],但我想探索谷歌的工具,前提是它可能在其他产品中使用同样的技术,比如搜索。本文介绍了 Google 的自然语言 API,并探究了常见的自然语言处理(NLP)任务,以及如何使用它们来为网站内容创建提供信息。 + +### 了解数据类型 + +首先,了解 Google 自然语言 API 返回的数据类型非常重要。 + +#### 实体 + +实体Entities是可以与物理世界中的某些事物联系在一起的文本短语。命名实体识别Named Entity Recognition(NER)是 NLP 的难点,因为工具通常需要查看关键字的完整上下文才能理解其用法。例如,同形异义字homographs拼写相同,但是具有多种含义。句子中的 “lead” 是指一种金属:“铅”(名词),使某人移动:“牵领”(动词),还可能是剧本中的主要角色(也是名词)?Google 有 12 种不同类型的实体,还有第 13 个名为 “UNKNOWN”(未知)的统称类别。一些实体与维基百科的文章相关,这表明 [知识图谱][4] 对数据的影响。每个实体都会返回一个显著性分数,即其与所提供文本的整体相关性。 + +![实体][5] + +#### 情感 + +情感Sentiment,即对某事的看法或态度,是在文件和句子层面以及文件中发现的单个实体上进行衡量。情感的得分score范围从 -1.0(消极)到 1.0(积极)。幅度magnitude代表情感的非归一化non-normalized强度;它的范围是 0.0 到无穷大。 + +![情感][6] + +#### 语法 + +语法Syntax解析包含了大多数在较好的库中常见的 NLP 活动,例如 [词形演变][7]lemmatization[词性标记][8]part-of-speech tagging[依赖树解析][9]dependency-tree parsing。NLP 主要处理帮助机器理解文本和关键字之间的关系。语法解析是大多数语言处理或理解任务的基础部分。 + +![语法][10] + +#### 分类 + +分类Categories是将整个给定内容分配给特定行业或主题类别,其置信度confidence得分从 0.0 到 1.0。这些分类似乎与其他 Google 工具使用的受众群体和网站类别相同,如 AdWords。 + +![分类][11] + +### 提取数据 + +现在,我将提取一些示例数据进行处理。我使用 Google 的 [搜索控制台 API][12] 收集了一些搜索查询及其相应的网址。Google 搜索控制台是一个报告人们使用 Google Search 查找网站页面的术语的工具。这个 [开源的 Jupyter 笔记本][13] 可以让你提取有关网站的类似数据。在此示例中,我在 2019 年 1 月 1 日至 6 月 1 日期间生成的一个网站(我没有提及名字)上提取了 Google 搜索控制台数据,并将其限制为至少获得一次点击(而不只是曝光impressions)的查询。 + +该数据集包含 2969 个页面和在 Google Search 的结果中显示了该网站网页的 7144 条查询的信息。下表显示,绝大多数页面获得的点击很少,因为该网站侧重于所谓的长尾(越特殊通常就更长尾)而不是短尾(非常笼统,搜索量更大)搜索查询。 + +![所有页面的点击次数柱状图][14] + +为了减少数据集的大小并仅获得效果最好的页面,我将数据集限制为在此期间至少获得 20 次曝光的页面。这是精炼数据集的按页点击的柱状图,其中包括 723 个页面: + +![部分网页的点击次数柱状图][15] + +### 在 Python 中使用 Google 自然语言 API 库 + +要测试 API,在 Python 中创建一个利用 [google-cloud-language][16] 库的小脚本。以下代码基于 Python 3.5+。 + +首先,激活一个新的虚拟环境并安装库。用环境的唯一名称替换 `` 。 + +``` +virtualenv +source /bin/activate +pip install --upgrade google-cloud-language +pip install --upgrade requests +``` + +该脚本从 URL 提取 HTML,并将 HTML 提供给自然语言 API。返回一个包含 `sentiment`、 `entities` 和 `categories` 的字典,其中这些键的值都是列表。我使用 Jupyter 笔记本运行此代码,因为使用同一内核注释和重试代码更加容易。 + +``` +# Import needed libraries +import requests +import json + +from google.cloud import language +from google.oauth2 import service_account +from google.cloud.language import enums +from google.cloud.language import types + +# Build language API client (requires service account key) +client = language.LanguageServiceClient.from_service_account_json('services.json') + +# Define functions +def pull_googlenlp(client, url, invalid_types = ['OTHER'], **data): + + html = load_text_from_url(url, **data) + + if not html: + return None + + document = types.Document( + content=html, + type=language.enums.Document.Type.HTML ) + + features = {'extract_syntax': True, + 'extract_entities': True, + 'extract_document_sentiment': True, + 'extract_entity_sentiment': True, + 'classify_text': False + } + + response = client.annotate_text(document=document, features=features) + sentiment = response.document_sentiment + entities = response.entities + + response = client.classify_text(document) + categories = response.categories + + def get_type(type): + return client.enums.Entity.Type(entity.type).name + + result = {} + + result['sentiment'] = [] + result['entities'] = [] + result['categories'] = [] + + if sentiment: + result['sentiment'] = [{ 'magnitude': sentiment.magnitude, 'score':sentiment.score }] + + for entity in entities: + if get_type(entity.type) not in invalid_types: + result['entities'].append({'name': entity.name, 'type': get_type(entity.type), 'salience': entity.salience, 'wikipedia_url': entity.metadata.get('wikipedia_url', '-') }) + + for category in categories: + result['categories'].append({'name':category.name, 'confidence': category.confidence}) + + + return result + + +def load_text_from_url(url, **data): + + timeout = data.get('timeout', 20) + + results = [] + + try: + + print("Extracting text from: {}".format(url)) + response = requests.get(url, timeout=timeout) + + text = response.text + status = response.status_code + + if status == 200 and len(text) > 0: + return text + + return None + + + except Exception as e: + print('Problem with url: {0}.'.format(url)) + return None +``` + +要访问该 API,请按照 Google 的 [快速入门说明][17] 在 Google 云主控台中创建一个项目,启用该 API 并下载服务帐户密钥。之后,你应该拥有一个类似于以下内容的 JSON 文件: + +![services.json 文件][18] + +命名为 `services.json`,并上传到项目文件夹。 + +然后,你可以通过运行以下程序来提取任何 URL(例如 Opensource.com)的 API 数据: + +``` +url = "https://opensource.com/article/19/6/how-ssh-running-container" +pull_googlenlp(client,url) +``` + +如果设置正确,你将看到以下输出: + +![拉取 API 数据的输出][19] + +为了使入门更加容易,我创建了一个 [Jupyter 笔记本][20],你可以下载并使用它来测试提取网页的实体、类别和情感。我更喜欢使用 [JupyterLab][21],它是 Jupyter 笔记本的扩展,其中包括文件查看器和其他增强的用户体验功能。如果你不熟悉这些工具,我认为利用 [Anaconda][22] 是开始使用 Python 和 Jupyter 的最简单途径。它使安装和设置 Python 以及常用库变得非常容易,尤其是在 Windows 上。 + +### 处理数据 + +使用这些函数,可抓取给定页面的 HTML 并将其传递给自然语言 API,我可以对 723 个 URL 进行一些分析。首先,我将通过查看所有页面中返回的顶级分类的数量来查看与网站相关的分类。 + +#### 分类 + +![来自示例站点的分类数据][23] + +这似乎是该特定站点的关键主题的相当准确的代表。通过查看一个效果最好的页面进行排名的单个查询,我可以比较同一查询在 Google 搜索结果中的其他排名页面。 + + * URL 1 |顶级类别:/法律和政府/与法律相关的(0.5099999904632568)共 1 个类别。 + * 未返回任何类别。 + * URL 3 |顶级类别:/互联网与电信/移动与无线(0.6100000143051147)共 1 个类别。 + * URL 4 |顶级类别:/计算机与电子产品/软件(0.5799999833106995)共有 2 个类别。 + * URL 5 |顶级类别:/互联网与电信/移动与无线/移动应用程序和附件(0.75)共有 1 个类别。 + * 未返回任何类别。 + * URL 7 |顶级类别:/计算机与电子/软件/商业与生产力软件(0.7099999785423279)共 2 个类别。 + * URL 8 |顶级类别:/法律和政府/与法律相关的(0.8999999761581421)共 3 个类别。 + * URL 9 |顶级类别:/参考/一般参考/类型指南和模板(0.6399999856948853)共有 1 个类别。 + * 未返回任何类别。 + +上方括号中的数字表示 Google 对页面内容与该分类相关的置信度。对于相同分类,第八个结果比第一个结果具有更高的置信度,因此,这似乎不是定义排名相关性的灵丹妙药。此外,分类太宽泛导致无法满足特定搜索主题的需要。 + +通过排名查看平均置信度,这两个指标之间似乎没有相关性,至少对于此数据集而言如此: + +![平均置信度排名分布图][24] + +这两种方法对网站进行规模审查是有意义的,以确保内容类别易于理解,并且样板或销售内容不会使你的页面与你的主要专业知识领域无关。想一想,如果你出售工业用品,但是你的页面返回 “Marketing(销售)” 作为主要分类。似乎没有一个强烈的迹象表明,分类相关性与你的排名有什么关系,至少在页面级别如此。 + +#### 情感 + +我不会在情感上花很多时间。在所有从 API 返回情感的页面中,它们分为两个区间:0.1 和 0.2,这几乎是中立的情感。根据直方图,很容易看出情感没有太大价值。对于新闻或舆论网站而言,测量特定页面的情感到中位数排名之间的相关性将是一个更加有趣的指标。 + +![独特页面的情感柱状图][25] + +#### 实体 + +在我看来,实体是 API 中最有趣的部分。这是在所有页面中按显著性salience(或与页面的相关性)选择的顶级实体。请注意,对于相同的术语(销售清单),Google 会推断出不同的类型,可能是错误的。这是由于这些术语出现在内容中的不同上下文中引起的。 + +![示例网站的顶级实体][26] + +然后,我分别查看了每个实体类型,并一起查看了该实体的显著性与页面的最佳排名位置之间是否存在任何关联。对于每种类型,我匹配了与该类型匹配的顶级实体的显著性(与页面的整体相关性),按显著性排序(降序)。 + +有些实体类型在所有示例中返回的显著性为零,因此我从下面的图表中省略了这些结果。 + +![显著性与最佳排名位置的相关性][27] + +“Consumer Good(消费性商品)” 实体类型具有最高的正相关性,皮尔森相关度Pearson correlation为 0.15854,尽管由于较低编号的排名更好,所以 “Person” 实体的结果最好,相关度为 -0.15483。这是一个非常小的样本集,尤其是对于单个实体类型,我不能对数据做太多的判断。我没有发现任何具有强相关性的值,但是 “Person” 实体最有意义。网站通常都有关于其首席执行官和其他主要雇员的页面,这些页面很可能在这些查询的搜索结果方面做得好。 + +继续,当从整体上看站点,根据实体名称和实体类型,出现了以下主题。 + +![基于实体名称和实体类型的主题][28] + +我模糊了几个看起来过于具体的结果,以掩盖网站的身份。从主题上讲,名称信息是在你(或竞争对手)的网站上局部查看其核心主题的一种好方法。这样做仅基于示例网站的排名网址,而不是基于所有网站的可能网址(因为 Search Console 数据仅记录 Google 中展示的页面),但是结果会很有趣,尤其是当你使用像 [Ahrefs][29] 之类的工具提取一个网站的主要排名 URL,该工具会跟踪许多查询以及这些查询的 Google 搜索结果。 + +实体数据中另一个有趣的部分是标记为 “CONSUMER_GOOD” 的实体倾向于 “看起来” 像我在看到 “知识结果Knowledge Results”的结果,即页面右侧的 Google 搜索结果。 + +![Google 搜索结果][30] + +在我们的数据集中具有三个或三个以上关键字的 “Consumer Good(消费性商品)” 实体名称中,有 5.8% 的知识结果与 Google 对该实体命名的结果相同。这意味着,如果你在 Google 中搜索术语或短语,则右侧的框(例如,上面显示 Linux 的知识结果)将显示在搜索结果页面中。由于 Google 会 “挑选” 代表实体的示例网页,因此这是一个很好的机会,可以在搜索结果中识别出具有唯一特征的机会。同样有趣的是,5.8% 的在 Google 中显示这些知识结果名称中,没有一个实体的维基百科 URL 从自然语言 API 中返回。这很有趣,值得进行额外的分析。这将是非常有用的,特别是对于传统的全球排名跟踪工具(如 Ahrefs)数据库中没有的更深奥的主题。 + +如前所述,知识结果对于那些希望自己的内容在 Google 中被收录的网站所有者来说是非常重要的,因为它们在桌面搜索中加强高亮显示。假设,它们也很可能与 Google [Discover][31] 的知识库主题保持一致,这是一款适用于 Android 和 iOS 的产品,它试图根据用户感兴趣但没有明确搜索的主题为用户浮现内容。 + +### 总结 + +本文介绍了 Google 的自然语言 API,分享了一些代码,并研究了此 API 对网站所有者可能有用的方式。关键要点是: + + * 学习使用 Python 和 Jupyter 笔记本可以为你的数据收集任务打开到一个由令人难以置信的聪明和有才华的人建立的不可思议的 API 和开源项目(如 Pandas 和 NumPy)的世界。 + * Python 允许我为了一个特定目的快速提取和测试有关 API 值的假设。 + * 通过 Google 的分类 API 传递网站页面可能是一项很好的检查,以确保其内容分解成正确的主题分类。对于竞争对手的网站执行此操作还可以提供有关在何处进行调整或创建内容的指导。 + * 对于示例网站,Google 的情感评分似乎并不是一个有趣的指标,但是对于新闻或基于意见的网站,它可能是一个有趣的指标。 + * Google 发现的实体从整体上提供了更细化的网站的主题级别视图,并且像分类一样,在竞争性内容分析中使用将非常有趣。 + * 实体可以帮助定义机会,使你的内容可以与搜索结果或 Google Discover 结果中的 Google 知识块保持一致。我们将 5.8% 的结果设置为更长的(字计数)“Consumer Goods(消费商品)” 实体,显示这些结果,对于某些网站来说,可能有机会更好地优化这些实体的页面显著性分数,从而有更好的机会在 Google 搜索结果或 Google Discovers 建议中抓住这个重要作用的位置。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/7/python-google-natural-language-api + +作者:[JR Oakes][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jroakes +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/search_find_code_issue_bug_programming.png?itok=XPrh7fa0 (magnifying glass on computer screen) +[2]: https://cloud.google.com/natural-language/#natural-language-api-demo +[3]: https://opensource.com/article/19/3/natural-language-processing-tools +[4]: https://en.wikipedia.org/wiki/Knowledge_Graph +[5]: https://opensource.com/sites/default/files/uploads/entities.png (Entities) +[6]: https://opensource.com/sites/default/files/uploads/sentiment.png (Sentiment) +[7]: https://en.wikipedia.org/wiki/Lemmatisation +[8]: https://en.wikipedia.org/wiki/Part-of-speech_tagging +[9]: https://en.wikipedia.org/wiki/Parse_tree#Dependency-based_parse_trees +[10]: https://opensource.com/sites/default/files/uploads/syntax.png (Syntax) +[11]: https://opensource.com/sites/default/files/uploads/categories.png (Categories) +[12]: https://developers.google.com/webmaster-tools/ +[13]: https://github.com/MLTSEO/MLTS/blob/master/Demos.ipynb +[14]: https://opensource.com/sites/default/files/uploads/histogram_1.png (Histogram of clicks for all pages) +[15]: https://opensource.com/sites/default/files/uploads/histogram_2.png (Histogram of clicks for subset of pages) +[16]: https://pypi.org/project/google-cloud-language/ +[17]: https://cloud.google.com/natural-language/docs/quickstart +[18]: https://opensource.com/sites/default/files/uploads/json_file.png (services.json file) +[19]: https://opensource.com/sites/default/files/uploads/output.png (Output from pulling API data) +[20]: https://github.com/MLTSEO/MLTS/blob/master/Tutorials/Google_Language_API_Intro.ipynb +[21]: https://github.com/jupyterlab/jupyterlab +[22]: https://www.anaconda.com/distribution/ +[23]: https://opensource.com/sites/default/files/uploads/categories_2.png (Categories data from example site) +[24]: https://opensource.com/sites/default/files/uploads/plot.png (Plot of average confidence by ranking position ) +[25]: https://opensource.com/sites/default/files/uploads/histogram_3.png (Histogram of sentiment for unique pages) +[26]: https://opensource.com/sites/default/files/uploads/entities_2.png (Top entities for example site) +[27]: https://opensource.com/sites/default/files/uploads/salience_plots.png (Correlation between salience and best ranking position) +[28]: https://opensource.com/sites/default/files/uploads/themes.png (Themes based on entity name and entity type) +[29]: https://ahrefs.com/ +[30]: https://opensource.com/sites/default/files/uploads/googleresults.png (Google search results) +[31]: https://www.blog.google/products/search/introducing-google-discover/ diff --git a/published/202103/20200122 9 favorite open source tools for Node.js developers.md b/published/202103/20200122 9 favorite open source tools for Node.js developers.md new file mode 100644 index 0000000000..361c8a87d4 --- /dev/null +++ b/published/202103/20200122 9 favorite open source tools for Node.js developers.md @@ -0,0 +1,232 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13206-1.html) +[#]: subject: (9 favorite open source tools for Node.js developers) +[#]: via: (https://opensource.com/article/20/1/open-source-tools-nodejs) +[#]: author: (Hiren Dhadhuk https://opensource.com/users/hirendhadhuk) + +9 个 Node.js 开发人员最喜欢的开源工具 +====== + +> 在众多可用于简化 Node.js 开发的工具中,以下 9 种是最佳选择。 + +![](https://img.linux.net.cn/data/attachment/album/202103/15/233658i99wxvzin13o5319.png) + +我最近在 [StackOverflow][2] 上读到了一项调查,该调查称超过 49% 的开发人员在其项目中使用了 Node.js。这结果对我来说并不意外。 + +作为一个狂热的技术使用者,我可以肯定地说 Node.js 的引入引领了软件开发的新时代。现在,它是软件开发最受欢迎的技术之一,仅次于JavaScript。 + +### Node.js 是什么,为什么如此受欢迎? + +Node.js 是一个跨平台的开源运行环境,用于在浏览器之外执行 JavaScript 代码。它也是建立在 Chrome 的 JavaScript 运行时之上的首选运行时环境,主要用于构建快速、可扩展和高效的网络应用程序。 + +我记得当时我们要花费几个小时来协调前端和后端开发人员,他们分别编写不同脚本。当 Node.js 出现后,所有这些都改变了。我相信,促使开发人员采用这项技术是因为它的双向效率。 + +使用 Node.js,你可以让你的代码同时运行在客户端和服务器端,从而加快了整个开发过程。Node.js 弥合了前端和后端开发之间的差距,并使开发过程更加高效。 + +### Node.js 工具浪潮 + +对于 49% 的开发人员(包括我)来说,Node.js 处于在前端和后端开发的金字塔顶端。有大量的 [Node.js 用例][3] 帮助我和我的团队在截止日期之内交付复杂的项目。幸运的是,Node.js 的日益普及也产生了一系列开源项目和工具,以帮助开发人员使用该环境。 + +近来,对使用 Node.js 构建的项目的需求突然增加。有时,我发现管理这些项目,并同时保持交付高质量项目的步伐非常具有挑战性。因此,我决定使用为 Node.js 开发人员提供的许多开源工具中一些最高效的,使某些方面的开发自动化。 + +根据我在 Node.js 方面的丰富经验,我使用了许多的工具,这些工具对整个开发过程都非常有帮助:从简化编码过程,到监测再到内容管理。 + +为了帮助我的 Node.js 开发同道,我整理了这个列表,其中包括我最喜欢的 9 个简化 Node.js 开发的开源工具。 + +### Webpack + +[Webpack][4] 是一个容易使用的 JavaScript 模块捆绑程序module bundler,用于简化前端开发。它会检测具有依赖的模块,并将其转换为描述模块的静态素材asset。 + +可以通过软件包管理器 npm 或 Yarn 安装该工具。 + +利用 npm 命令安装如下: + +``` +npm install --save-dev webpack +``` + +利用 Yarn 命令安装如下: + +``` +yarn add webpack --dev +``` + +Webpack 可以创建在运行时异步加载的单个捆绑包或多个素材链。不必单独加载。使用 Webpack 工具可以快速高效地打包这些素材并提供服务,从而改善用户整体体验,并减少开发人员在管理加载时间方面的困难。 + +### Strapi + +[Strapi][5] 是一个开源的无界面headless内容管理系统(CMS)。无界面 CMS 是一种基础软件,可以管理内容而无需预先构建好的前端。它是一个使用 RESTful API 函数的只有后端的系统。 + +可以通过软件包管理器 Yarn 或 npx 安装 Strapi。 + +利用 Yarn 命令安装如下: + +``` +yarn create strapi-app my-project --quickstart +``` + +利用 npx 命令安装如下: + +``` +npx create-strapi-app my-project --quickstart +``` + +Strapi 的目标是在任何设备上以结构化的方式获取和交付内容。CMS 可以使你轻松管理应用程序的内容,并确保它们是动态的,可以在任何设备上访问。 + +它提供了许多功能,包括文件上传、内置的电子邮件系统、JSON Web Token(JWT)验证和自动生成文档。我发现它非常方便,因为它简化了整个 CMS,并为我提供了编辑、创建或删除所有类型内容的完全自主权。 + +另外,通过 Strapi 构建的内容结构非常灵活,因为你可以创建和重用内容组和可定制的 API。 + +### Broccoli + +[Broccoli][6] 是一个功能强大的构建工具,运行在 [ES6][7] 模块上。构建工具是一种软件,可让你将应用程序或网站中的所有各种素材(例如图像、CSS、JavaScript 等)组合成一种可分发的格式。Broccoli 将自己称为 “雄心勃勃的应用程序的素材管道”。 + +使用 Broccoli 你需要一个项目目录。有了项目目录后,可以使用以下命令通过 npm 安装 Broccoli: + +``` +npm install --save-dev broccoli +npm install --global broccoli-cli +``` + +你也可以使用 Yarn 进行安装。 + +当前版本的 Node.js 就是使用该工具的最佳版本,因为它提供了长期支持。它可以帮助你避免进行更新和重新安装过程中的麻烦。安装过程完成后,可以在 `Brocfile.js` 文件中包含构建规范。 + +在 Broccoli 中,抽象单位是“树”,该树将文件和子目录存储在特定子目录中。因此,在构建之前,你必须有一个具体的想法,你希望你的构建是什么样子的。 + +最好的是,Broccoli 带有用于开发的内置服务器,可让你将素材托管在本地 HTTP 服务器上。Broccoli 非常适合流线型重建,因为其简洁的架构和灵活的生态系统可提高重建和编译速度。Broccoli 可让你井井有条,以节省时间并在开发过程中最大限度地提高生产力。 + +### Danger + +[Danger][8] 是一个非常方便的开源工具,用于简化你的拉取请求pull request(PR)检查。正如 Danger 库描述所说,该工具可通过管理 PR 检查来帮助 “正规化” 你的代码审查系统。Danger 可以与你的 CI 集成在一起,帮助你加快审核过程。 + +将 Danger 与你的项目集成是一个简单的逐步过程:你只需要包括 Danger 模块,并为每个项目创建一个 Danger 文件。然而,创建一个 Danger 帐户(通过 GitHub 或 Bitbucket 很容易做到),并且为开源软件项目设置访问令牌更加方便。 + +可以通过 NPM 或 Yarn 安装 Danger。要使用 Yarn,请添加 `danger -D` 到 `package.JSON` 中。 + +将 Danger 添加到 CI 后,你可以: + + * 高亮显示重要的创建工件 + * 通过强制链接到 Trello 和 Jira 之类的工具来管理 sprint + * 强制生成更新日志 + * 使用描述性标签 + * 以及更多 + +例如,你可以设计一个定义团队文化并为代码审查和 PR 检查设定特定规则的系统。根据 Danger 提供的元数据及其广泛的插件生态系统,可以解决常见的议题issue。 + +### Snyk + +网络安全是开发人员的主要关注点。[Snyk][9] 是修复开源组件中漏洞的最著名工具之一。它最初是一个用于修复 Node.js 项目漏洞的项目,并且已经演变为可以检测并修复 Ruby、Java、Python 和 Scala 应用程序中的漏洞。Snyk 主要分四个阶段运行: + + * 查找漏洞依赖性 + * 修复特定漏洞 + * 通过 PR 检查预防安全风险 + * 持续监控应用程序 + +Snyk 可以集成在项目的任何阶段,包括编码、CI/CD 和报告。我发现这对于测试 Node.js 项目非常有帮助,可以测试或构建 npm 软件包时检查是否存在安全风险。你还可以在 GitHub 中为你的应用程序运行 PR 检查,以使你的项目更安全。Synx 还提供了一系列集成,可用于监控依赖关系并解决特定问题。 + +要在本地计算机上运行 Snyk,可以通过 NPM 安装它: + +``` +npm install -g snyk +``` + +### Migrat + +[Migrat][10] 是一款使用纯文本的数据迁移工具,非常易于使用。 它可在各种软件堆栈和进程中工作,从而使其更加实用。你可以使用简单的代码行安装 Migrat: + +``` +$ npm install -g migrat +``` + +Migrat 并不需要特别的数据库引擎。它支持多节点环境,因为迁移可以在一个全局节点上运行,也可以在每个服务器上运行一次。Migrat 之所以方便,是因为它便于向每个迁移传递上下文。 + +你可以定义每个迁移的用途(例如,数据库集、连接、日志接口等)。此外,为了避免随意迁移,即多个服务器在全局范围内进行迁移,Migrat 可以在进程运行时进行全局锁定,从而使其只能在全局范围内运行一次。它还附带了一系列用于 SQL 数据库、Slack、HipChat 和 Datadog 仪表盘的插件。你可以将实时迁移状况发送到这些平台中的任何一个。 + +### Clinic.js + +[Clinic.js][11] 是一个用于 Node.js 项目的开源监视工具。它结合了三种不同的工具 Doctor、Bubbleprof 和 Flame,帮助你监控、检测和解决 Node.js 的性能问题。 + +你可以通过运行以下命令从 npm 安装 Clinic.js: + +``` +$ npm install clinic +``` + +你可以根据要监视项目的某个方面以及要生成的报告,选择要使用的 Clinic.js 包含的三个工具中的一个: + + * Doctor 通过注入探针来提供详细的指标,并就项目的总体运行状况提供建议。 + * Bubbleprof 非常适合分析,并使用 `async_hooks` 生成指标。 + * Flame 非常适合发现代码中的热路径和瓶颈。 + +### PM2 + +监视是后端开发过程中最重要的方面之一。[PM2][12] 是一款 Node.js 的进程管理工具,可帮助开发人员监视项目的多个方面,例如日志、延迟和速度。该工具与 Linux、MacOS 和 Windows 兼容,并支持从 Node.js 8.X 开始的所有 Node.js 版本。 + +你可以使用以下命令通过 npm 安装 PM2: + +``` +$ npm install pm2 --g +``` + +如果尚未安装 Node.js,则可以使用以下命令安装: + +``` +wget -qO- https://getpm2.com/install.sh | bash +``` + +安装完成后,使用以下命令启动应用程序: + +``` +$ pm2 start app.js +``` + +关于 PM2 最好的地方是可以在集群模式下运行应用程序。可以同时为多个 CPU 内核生成一个进程。这样可以轻松增强应用程序性能并最大程度地提高可靠性。PM2 也非常适合更新工作,因为你可以使用 “热重载” 选项更新应用程序并以零停机时间重新加载应用程序。总体而言,它是为 Node.js 应用程序简化进程管理的好工具。 + +### Electrode + +[Electrode][13] 是 Walmart Labs 的一个开源应用程序平台。该平台可帮助你以结构化方式构建大规模通用的 React/Node.js 应用程序。 + +Electrode 应用程序生成器使你可以构建专注于代码的灵活内核,提供一些出色的模块以向应用程序添加复杂功能,并附带了广泛的工具来优化应用程序的 Node.js 包。 + +可以使用 npm 安装 Electrode。安装完成后,你可以使用 Ignite 启动应用程序,并深入研究 Electrode 应用程序生成器。 + +你可以使用 NPM 安装 Electrode: + +``` +npm install -g electrode-ignite xclap-cli +``` + +### 你最喜欢哪一个? + +这些只是不断增长的开源工具列表中的一小部分,在使用 Node.js 时,这些工具可以在不同阶段派上用场。你最喜欢使用哪些开源 Node.js 工具?请在评论中分享你的建议。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/1/open-source-tools-nodejs + +作者:[Hiren Dhadhuk][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hirendhadhuk +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tools_hardware_purple.png?itok=3NdVoYhl (Tools illustration) +[2]: https://insights.stackoverflow.com/survey/2019#technology-_-other-frameworks-libraries-and-tools +[3]: https://www.simform.com/nodejs-use-case/ +[4]: https://webpack.js.org/ +[5]: https://strapi.io/ +[6]: https://broccoli.build/ +[7]: https://en.wikipedia.org/wiki/ECMAScript#6th_Edition_-_ECMAScript_2015 +[8]: https://danger.systems/ +[9]: https://snyk.io/ +[10]: https://github.com/naturalatlas/migrat +[11]: https://clinicjs.org/ +[12]: https://pm2.keymetrics.io/ +[13]: https://www.electrode.io/ diff --git a/published/202103/20200127 Managing processes on Linux with kill and killall.md b/published/202103/20200127 Managing processes on Linux with kill and killall.md new file mode 100644 index 0000000000..1d5e76b80e --- /dev/null +++ b/published/202103/20200127 Managing processes on Linux with kill and killall.md @@ -0,0 +1,152 @@ +[#]: collector: "lujun9972" +[#]: translator: "wyxplus" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13215-1.html" +[#]: subject: "Managing processes on Linux with kill and killall" +[#]: via: "https://opensource.com/article/20/1/linux-kill-killall" +[#]: author: "Jim Hall https://opensource.com/users/jim-hall" + +在 Linux 上使用 kill 和 killall 命令来管理进程 +====== + +> 了解如何使用 ps、kill 和 killall 命令来终止进程并回收系统资源。 + +![](https://img.linux.net.cn/data/attachment/album/202103/18/230625q6g65gz6ugdk8ygr.jpg) + +在 Linux 中,每个程序和守护程序daemon都是一个“进程process”。 大多数进程代表一个正在运行的程序。而另外一些程序可以派生出其他进程,比如说它会侦听某些事件的发生,然后对其做出响应。并且每个进程都需要一定的内存和处理能力。你运行的进程越多,所需的内存和 CPU 使用周期就越多。在老式电脑(例如我使用了 7 年的笔记本电脑)或轻量级计算机(例如树莓派)上,如果你关注过后台运行的进程,就能充分利用你的系统。 + +你可以使用 `ps` 命令来查看正在运行的进程。你通常会使用 `ps` 命令的参数来显示出更多的输出信息。我喜欢使用 `-e` 参数来查看每个正在运行的进程,以及 `-f` 参数来获得每个进程的全部细节。以下是一些例子: + +``` +$ ps + PID TTY TIME CMD + 88000 pts/0 00:00:00 bash + 88052 pts/0 00:00:00 ps + 88053 pts/0 00:00:00 head +``` +``` +$ ps -e | head + PID TTY TIME CMD + 1 ? 00:00:50 systemd + 2 ? 00:00:00 kthreadd + 3 ? 00:00:00 rcu_gp + 4 ? 00:00:00 rcu_par_gp + 6 ? 00:00:02 kworker/0:0H-events_highpri + 9 ? 00:00:00 mm_percpu_wq + 10 ? 00:00:01 ksoftirqd/0 + 11 ? 00:00:12 rcu_sched + 12 ? 00:00:00 migration/0 +``` +``` +$ ps -ef | head +UID PID PPID C STIME TTY TIME CMD +root 1 0 0 13:51 ? 00:00:50 /usr/lib/systemd/systemd --switched-root --system --deserialize 36 +root 2 0 0 13:51 ? 00:00:00 [kthreadd] +root 3 2 0 13:51 ? 00:00:00 [rcu_gp] +root 4 2 0 13:51 ? 00:00:00 [rcu_par_gp] +root 6 2 0 13:51 ? 00:00:02 [kworker/0:0H-kblockd] +root 9 2 0 13:51 ? 00:00:00 [mm_percpu_wq] +root 10 2 0 13:51 ? 00:00:01 [ksoftirqd/0] +root 11 2 0 13:51 ? 00:00:12 [rcu_sched] +root 12 2 0 13:51 ? 00:00:00 [migration/0] +``` + +最后的例子显示最多的细节。在每一行,`UID`(用户 ID)显示了该进程的所有者。`PID`(进程 ID)代表每个进程的数字 ID,而 `PPID`(父进程 ID)表示其父进程的数字 ID。在任何 Unix 系统中,进程是从 1 开始编号,是内核启动后运行的第一个进程。在这里,`systemd` 是第一个进程,它催生了 `kthreadd`,而 `kthreadd` 还创建了其他进程,包括 `rcu_gp`、`rcu_par_gp` 等一系列进程。 + +### 使用 kill 命令来管理进程 + +系统会处理大多数后台进程,所以你不需要操心这些进程。你只需要关注那些你所运行的应用创建的进程。虽然许多应用一次只运行一个进程(如音乐播放器、终端模拟器或游戏等),但其他应用则可能创建后台进程。其中一些应用可能当你退出后还在后台运行,以便下次你使用的时候能快速启动。 + +当我运行 Chromium(作为谷歌 Chrome 浏览器所基于的开源项目)时,进程管理便成了问题。 Chromium 在我的笔记本电脑上运行非常吃力,并产生了许多额外的进程。现在我仅打开五个选项卡,就能看到这些 Chromium 进程: + +``` +$ ps -ef | fgrep chromium +jhall 66221 [...] /usr/lib64/chromium-browser/chromium-browser [...] +jhall 66230 [...] /usr/lib64/chromium-browser/chromium-browser [...] +[...] +jhall 66861 [...] /usr/lib64/chromium-browser/chromium-browser [...] +jhall 67329 65132 0 15:45 pts/0 00:00:00 grep -F chromium +``` + +我已经省略一些行,其中有 20 个 Chromium 进程和一个正在搜索 “chromium" 字符的 `grep` 进程。 + +``` +$ ps -ef | fgrep chromium | wc -l +21 +``` + +但是在我退出 Chromium 之后,这些进程仍旧运行。如何关闭它们并回收这些进程占用的内存和 CPU 呢? + +`kill` 命令能让你终止一个进程。在最简单的情况下,你告诉 `kill` 命令终止你想终止的进程的 PID。例如,要终止这些进程,我需要对 20 个 Chromium 进程 ID 都执行 `kill` 命令。一种方法是使用命令行获取 Chromium 的 PID,而另一种方法针对该列表运行 `kill`: + + +``` +$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' +66221 +66230 +66239 +66257 +66262 +66283 +66284 +66285 +66324 +66337 +66360 +66370 +66386 +66402 +66503 +66539 +66595 +66734 +66848 +66861 +69702 + +$ ps -ef | fgrep /usr/lib64/chromium-browser/chromium-browser | awk '{print $2}' > /tmp/pids +$ kill $(cat /tmp/pids) +``` + +最后两行是关键。第一个命令行为 Chromium 浏览器生成一个进程 ID 列表。第二个命令行针对该进程 ID 列表运行 `kill` 命令。 + +### 介绍 killall 命令 + +一次终止多个进程有个更简单方法,使用 `killall` 命令。你或许可以根据名称猜测出,`killall` 会终止所有与该名字匹配的进程。这意味着我们可以使用此命令来停止所有流氓 Chromium 进程。这很简单: + +``` +$ killall /usr/lib64/chromium-browser/chromium-browser +``` + +但是要小心使用 `killall`。该命令能够终止与你所给出名称相匹配的所有进程。这就是为什么我喜欢先使用 `ps -ef` 命令来检查我正在运行的进程,然后针对要停止的命令的准确路径运行 `killall`。 + +你也可以使用 `-i` 或 `--interactive` 参数,来让 `killkill` 在停止每个进程之前提示你。 + +`killall` 还支持使用 `-o` 或 `--older-than` 参数来查找比特定时间更早的进程。例如,如果你发现了一组已经运行了好几天的恶意进程,这将会很有帮助。又或是,你可以查找比特定时间更晚的进程,例如你最近启动的失控进程。使用 `-y` 或 `--young-than` 参数来查找这些进程。 + +### 其他管理进程的方式 + +进程管理是系统维护重要的一部分。在我作为 Unix 和 Linux 系统管理员的早期职业生涯中,杀死非法作业的能力是保持系统正常运行的关键。在如今,你可能不需要亲手在 Linux 上的终止流氓进程,但是知道 `kill` 和 `killall` 能够在最终出现问题时为你提供帮助。 + +你也能寻找其他方式来管理进程。在我这个案例中,我并不需要在我退出浏览器后,使用 `kill` 或 `killall` 来终止后台 Chromium 进程。在 Chromium 中有个简单设置就可以进行控制: + +![Chromium background processes setting][2] + +不过,始终关注系统上正在运行哪些进程,并且在需要的时候进行干预是一个明智之举。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/1/linux-kill-killall + +作者:[Jim Hall][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jim-hall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux_penguin_green.png?itok=ENdVzW22 "Penguin with green background" +[2]: https://opensource.com/sites/default/files/uploads/chromium-settings-continue-running.png "Chromium background processes setting" diff --git a/translated/tech/20200129 Ansible Playbooks Quick Start Guide with Examples.md b/published/202103/20200129 Ansible Playbooks Quick Start Guide with Examples.md similarity index 77% rename from translated/tech/20200129 Ansible Playbooks Quick Start Guide with Examples.md rename to published/202103/20200129 Ansible Playbooks Quick Start Guide with Examples.md index b2e80cc517..bf14ca23c7 100644 --- a/translated/tech/20200129 Ansible Playbooks Quick Start Guide with Examples.md +++ b/published/202103/20200129 Ansible Playbooks Quick Start Guide with Examples.md @@ -1,8 +1,8 @@ [#]: collector: "lujun9972" [#]: translator: "MjSeven" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13167-1.html" [#]: subject: "Ansible Playbooks Quick Start Guide with Examples" [#]: via: "https://www.2daygeek.com/ansible-playbooks-quick-start-guide-with-examples/" [#]: author: "Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/" @@ -14,22 +14,20 @@ Ansible 剧本快速入门指南 如果你是 Ansible 新手,我建议你阅读下面这两篇文章,它会教你一些 Ansible 的基础以及它是什么。 - * **第一篇: [在 Linux 如何安装和配置 Ansible][1]** - * **第二篇: [Ansible ad-hoc 命令快速入门指南][2]** + * 第一篇: [Ansible 自动化工具安装、配置和快速入门指南][1] + * 第二篇: [Ansible 点对点命令快速入门指南示例][2] 如果你已经阅读过了,那么在阅读本文时你才不会感到突兀。 ### 什么是 Ansible 剧本? -剧本比临时命令模式更强大,而且完全不同。 +剧本playbook比点对点命令模式更强大,而且完全不同。 -它使用了 **"/usr/bin/ansible-playbook"** 二进制文件,并且提供丰富的特性使得复杂的任务变得更容易。 +它使用了 `/usr/bin/ansible-playbook` 二进制文件,并且提供丰富的特性使得复杂的任务变得更容易。 -如果你想经常运行一个任务,剧本是非常有用的。 +如果你想经常运行一个任务,剧本是非常有用的。此外,如果你想在服务器组上执行多个任务,它也是非常有用的。 -此外,如果你想在服务器组上执行多个任务,它也是非常有用的。 - -剧本由 YAML 语言编写。YAML 代表一种标记语言,它比其它常见的数据格式(如 XML 或 JSON)更容易读写。 +剧本是由 YAML 语言编写。YAML 代表一种标记语言,它比其它常见的数据格式(如 XML 或 JSON)更容易读写。 下面这张 Ansible 剧本流程图将告诉你它的详细结构。 @@ -37,22 +35,22 @@ Ansible 剧本快速入门指南 ### 理解 Ansible 剧本的术语 - * **控制节点:** Ansible 安装的机器,它负责管理客户端节点。 - * **被控节点:** 被控制节点管理的主机列表。 - * **剧本:** 一个剧本文件,包含一组自动化任务。 - * **主机清单:*** 这个文件包含有关管理的服务器的信息。 - * **任务:** 每个剧本都有大量的任务。任务在指定机器上依次执行(一个主机或多个主机)。 - * **模块:** 模块是一个代码单元,用于从客户端节点收集信息。 - * **角色:** 角色是根据已知文件结构自动加载一些变量文件、任务和处理程序的方法。 - * **Play:** 每个剧本含有大量的 play, 一个 play 从头到尾执行一个特定的自动化。 - * **Handlers:** 它可以帮助你减少在剧本中的重启任务。处理程序任务列表实际上与常规任务没有什么不同,更改由通知程序通知。如果处理程序没有收到任何通知,它将不起作用。 + * 控制节点Control node:Ansible 安装的机器,它负责管理客户端节点。 + * 受控节点Managed node:控制节点管理的主机列表。 + * 剧本playbook:一个剧本文件包含一组自动化任务。 + * 主机清单Inventory:这个文件包含有关管理的服务器的信息。 + * 任务Task:每个剧本都有大量的任务。任务在指定机器上依次执行(一个主机或多个主机)。 + * 模块Module: 模块是一个代码单元,用于从客户端节点收集信息。 + * 角色Role:角色是根据已知文件结构自动加载一些变量文件、任务和处理程序的方法。 + * 动作Play:每个剧本含有大量的动作,一个动作从头到尾执行一个特定的自动化。 + * 处理程序Handler: 它可以帮助你减少在剧本中的重启任务。处理程序任务列表实际上与常规任务没有什么不同,更改由通知程序通知。如果处理程序没有收到任何通知,它将不起作用。 ### 基本的剧本是怎样的? 下面是一个剧本的模板: -```yaml ---- [YAML 文件应该以三个破折号开头] +``` +--- [YAML 文件应该以三个破折号开头] - name: [脚本描述] hosts: group [添加主机或主机组] become: true [如果你想以 root 身份运行任务,则标记它] @@ -69,14 +67,14 @@ Ansible 剧本快速入门指南 Ansible 剧本的输出有四种颜色,下面是具体含义: - * **绿色:** **ok –** 代表成功,关联的任务数据已经存在,并且已经根据需要进行了配置。 - * **黄色: 已更改 –** 指定的数据已经根据任务的需要更新或修改。 - * **红色: 失败–** 如果在执行任务时出现任何问题,它将返回一个失败消息,它可能是任何东西,你需要相应地修复它。 - * **白色:** 表示有多个参数。 + * **绿色**:`ok` 代表成功,关联的任务数据已经存在,并且已经根据需要进行了配置。 + * **黄色**:`changed` 指定的数据已经根据任务的需要更新或修改。 + * **红色**:`FAILED` 如果在执行任务时出现任何问题,它将返回一个失败消息,它可能是任何东西,你需要相应地修复它。 + * **白色**:表示有多个参数。 为此,创建一个剧本目录,将它们都放在同一个地方。 -```bash +``` $ sudo mkdir /etc/ansible/playbooks ``` @@ -84,7 +82,7 @@ $ sudo mkdir /etc/ansible/playbooks 这个示例剧本允许你在指定的目标机器上安装 Apache Web 服务器: -```bash +``` $ sudo nano /etc/ansible/playbooks/apache.yml --- @@ -102,7 +100,7 @@ $ sudo nano /etc/ansible/playbooks/apache.yml state: started ``` -```bash +``` $ ansible-playbook apache1.yml ``` @@ -112,7 +110,7 @@ $ ansible-playbook apache1.yml 使用以下命令来查看语法错误。如果没有发现错误,它只显示剧本文件名。如果它检测到任何错误,你将得到一个如下所示的错误,但内容可能根据你的输入文件而有所不同。 -```bash +``` $ ansible-playbook apache1.yml --syntax-check ERROR! Syntax Error while loading YAML. @@ -139,9 +137,9 @@ Should be written as: 或者,你可以使用这个 URL [YAML Lint][4] 在线检查 Ansible 剧本内容。 -执行以下命令进行**“演练”**。当你运行带有 **"-check"** 选项的剧本时,它不会对远程机器进行任何修改。相反,它会告诉你它将要做什么改变但不是真的执行。 +执行以下命令进行“演练”。当你运行带有 `--check` 选项的剧本时,它不会对远程机器进行任何修改。相反,它会告诉你它将要做什么改变但不是真的执行。 -```bash +``` $ ansible-playbook apache.yml --check PLAY [Install and Configure Apache Webserver] ******************************************************************** @@ -163,9 +161,9 @@ node1.2g.lab : ok=3 changed=2 unreachable=0 failed=0 s node2.2g.lab : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -如果你想要知道 ansible 剧本实现的详细信息,使用 **"-vv"** 选项,它会展示如何收集这些信息。 +如果你想要知道 ansible 剧本实现的详细信息,使用 `-vv` 选项,它会展示如何收集这些信息。 -```bash +``` $ ansible-playbook apache.yml --check -vv ansible-playbook 2.9.2 @@ -210,7 +208,7 @@ node2.2g.lab : ok=3 changed=2 unreachable=0 failed=0 s 这个示例剧本允许你在指定的目标节点上安装 Apache Web 服务器。 -```bash +``` $ sudo nano /etc/ansible/playbooks/apache-ubuntu.yml --- @@ -248,9 +246,9 @@ $ sudo nano /etc/ansible/playbooks/apache-ubuntu.yml 这个示例剧本允许你在指定的目标节点上安装软件包。 -**方法-1:** +**方法-1:** -```bash +``` $ sudo nano /etc/ansible/playbooks/packages-redhat.yml --- @@ -267,9 +265,9 @@ $ sudo nano /etc/ansible/playbooks/packages-redhat.yml - htop ``` -**方法-2:** +**方法-2:** -```bash +``` $ sudo nano /etc/ansible/playbooks/packages-redhat-1.yml --- @@ -286,9 +284,9 @@ $ sudo nano /etc/ansible/playbooks/packages-redhat-1.yml - htop ``` -**方法-3: 使用数组变量** +**方法-3:使用数组变量** -```bash +``` $ sudo nano /etc/ansible/playbooks/packages-redhat-2.yml --- @@ -307,7 +305,7 @@ $ sudo nano /etc/ansible/playbooks/packages-redhat-2.yml 这个示例剧本允许你在基于 Red Hat 或 Debian 的 Linux 系统上安装更新。 -```bash +``` $ sudo nano /etc/ansible/playbooks/security-update.yml --- @@ -331,13 +329,13 @@ via: https://www.2daygeek.com/ansible-playbooks-quick-start-guide-with-examples/ 作者:[Magesh Maruthamuthu][a] 选题:[lujun9972][b] 译者:[MjSeven](https://github.com/MjSeven) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: https://www.2daygeek.com/author/magesh/ [b]: https://github.com/lujun9972 -[1]: https://www.2daygeek.com/install-configure-ansible-automation-tool-linux-quick-start-guide/ -[2]: https://www.2daygeek.com/ansible-ad-hoc-command-quick-start-guide-with-examples/ -[3]: data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7 +[1]: https://linux.cn/article-13142-1.html +[2]: https://linux.cn/article-13163-1.html +[3]: https://www.2daygeek.com/wp-content/uploads/2020/01/ansible-playbook-structure-flow-chart-explained.png [4]: http://www.yamllint.com/ diff --git a/published/202103/20200219 Multicloud, security integration drive massive SD-WAN adoption.md b/published/202103/20200219 Multicloud, security integration drive massive SD-WAN adoption.md new file mode 100644 index 0000000000..42239ba15a --- /dev/null +++ b/published/202103/20200219 Multicloud, security integration drive massive SD-WAN adoption.md @@ -0,0 +1,74 @@ +[#]: collector: (lujun9972) +[#]: translator: (cooljelly) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13239-1.html) +[#]: subject: (Multicloud, security integration drive massive SD-WAN adoption) +[#]: via: (https://www.networkworld.com/article/3527194/multicloud-security-integration-drive-massive-sd-wan-adoption.html) +[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/) + +多云融合和安全集成推动 SD-WAN 的大规模应用 +====== + +> 2022 年 SD-WAN 市场 40% 的同比增长主要来自于包括 Cisco、VMWare、Juniper 和 Arista 在内的网络供应商和包括 AWS、Microsoft Azure,Google Anthos 和 IBM RedHat 在内的服务提供商之间的紧密联系。 + +![](https://img.linux.net.cn/data/attachment/album/202103/27/095154f0625f3k8455800x.jpg) + +越来越多的云应用,以及越来越完善的网络安全性、可视化特性和可管理性,正以惊人的速度推动企业软件定义广域网software-defined WAN([SD-WAN][3])的部署。 + +IDC(LCTT 译注:International Data Corporation)公司的网络基础架构副总裁 Rohit Mehra 表示,根据 IDC 的研究,过去一年中,特别是软件和基础设施即服务(SaaS 和 IaaS)产品推动了 SD-WAN 的实施。 + +例如,IDC 表示,根据其最近的客户调查结果,有 95% 的客户将在两年内使用 [SD-WAN][7] 技术,而 42% 的客户已经部署了它。IDC 还表示,到 2022 年,SD-WAN 基础设施市场将达到 45 亿美元,此后每年将以每年 40% 的速度增长。 + +“SD-WAN 的增长是一个广泛的趋势,很大程度上是由企业希望优化远程站点的云连接性的需求推动的。” Mehra 说。 + +思科最近撰文称,多云网络的发展正在促使许多企业改组其网络,以更好地使用 SD-WAN 技术。SD-WAN 对于采用云服务的企业至关重要,它是园区网、分支机构、[物联网][8]、[数据中心][9] 和云之间的连接中间件。思科公司表示,根据调查,平均每个思科的企业客户有 30 个付费的 SaaS 应用程序,而他们实际使用的 SaaS 应用会更多——在某些情况下甚至超过 100 种。 + +这种趋势的部分原因是由网络供应商(例如 Cisco、VMware、Juniper、Arista 等)(LCTT 译注:这里的网络供应商指的是提供硬件或软件并可按需组网的厂商)与服务提供商(例如 Amazon AWS、Microsoft Azure、Google Anthos 和 IBM RedHat 等)建立的关系推动的。 + +去年 12 月,AWS 为其云产品发布了关键服务,其中包括诸如 [AWS Transit Gateway][10] 等新集成技术的关键服务,这标志着 SD-WAN 与多云场景关系的日益重要。使用 AWS Transit Gateway 技术,客户可以将 AWS 中的 VPC(虚拟私有云Virtual Private Cloud)和其自有网络均连接到相同的网关。Aruba、Aviatrix Cisco、Citrix Systems、Silver Peak 和 Versa 已经宣布支持该技术,这将简化和增强这些公司的 SD-WAN 产品与 AWS 云服务的集成服务的性能和表现。 + +Mehra 说,展望未来,对云应用的友好兼容和完善的性能监控等增值功能将是 SD-WAN 部署的关键部分。 + +随着 SD-WAN 与云的关系不断发展,SD-WAN 对集成安全功能的需求也在不断增长。 + +Mehra 说,SD-WAN 产品集成安全性的方式比以往单独打包的广域网安全软件或服务要好得多。SD-WAN 是一个更加敏捷的安全环境。SD-WAN 公认的主要组成部分包括安全功能,数据分析功能和广域网优化功能等,其中安全功能则是下一代 SD-WAN 解决方案的首要需求。 + +Mehra 说,企业将越来越少地关注仅解决某个具体问题的 SD-WAN 解决方案,而将青睐于能够解决更广泛的网络管理和安全需求的 SD-WAN 平台。他们将寻找可以与他们的 IT 基础设施(包括企业数据中心网络、企业园区局域网、[公有云][12] 资源等)集成更紧密的 SD-WAN 平台。他说,企业将寻求无缝融合的安全服务,并希望有其他各种功能的支持,例如可视化、数据分析和统一通信功能。 + +“随着客户不断将其基础设施与软件集成在一起,他们可以做更多的事情,例如根据其局域网和广域网上的用户、设备或应用程序的需求,实现一致的管理和安全策略,并最终获得更好的整体使用体验。” Mehra 说。 + +一个新兴趋势是 SD-WAN 产品包需要支持 [SD-branch][13] 技术。 Mehra 说,超过 70% 的 IDC 受调查客户希望在明年使用 SD-Branch。在最近几周,[Juniper][14] 和 [Aruba][15] 公司已经优化了 SD-branch 产品,这一趋势预计将在今年持续下去。 + +SD-Branch 技术建立在 SD-WAN 的概念和支持的基础上,但更专注于满足分支机构中局域网的组网和管理需求。展望未来,SD-Branch 如何与其他技术集成,例如数据分析、音视频、统一通信等,将成为该技术的主要驱动力。 + +-------------------------------------------------------------------------------- + +via: https://www.networkworld.com/article/3527194/multicloud-security-integration-drive-massive-sd-wan-adoption.html + +作者:[Michael Cooney][a] +选题:[lujun9972][b] +译者:[cooljelly](https://github.com/cooljelly) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.networkworld.com/author/Michael-Cooney/ +[b]: https://github.com/lujun9972 +[1]: https://images.idgesg.net/images/article/2018/07/branches_branching_trees_bare_black_and_white_by_gratisography_cc0_via_pexels_1200x800-100763250-large.jpg +[2]: https://creativecommons.org/publicdomain/zero/1.0/ +[3]: https://www.networkworld.com/article/3031279/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html +[4]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html +[5]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html +[6]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html +[7]: https://www.networkworld.com/article/3489938/what-s-hot-at-the-edge-for-2020-everything.html +[8]: https://www.networkworld.com/article/3207535/what-is-iot-the-internet-of-things-explained.html +[9]: https://www.networkworld.com/article/3223692/what-is-a-data-centerhow-its-changed-and-what-you-need-to-know.html +[10]: https://aws.amazon.com/transit-gateway/ +[11]: https://www.networkworld.com/article/3440100/take-the-intelligent-route-with-consumption-based-storage.html?utm_source=IDG&utm_medium=promotions&utm_campaign=HPE21620&utm_content=sidebar ( Take the Intelligent Route with Consumption-Based Storage) +[12]: https://www.networkworld.com/article/2159885/cloud-computing-gartner-5-things-a-private-cloud-is-not.html +[13]: https://www.networkworld.com/article/3250664/sd-branch-what-it-is-and-why-youll-need-it.html +[14]: https://www.networkworld.com/article/3487801/juniper-broadens-sd-branch-management-switch-options.html +[15]: https://www.networkworld.com/article/3513357/aruba-reinforces-sd-branch-with-security-management-upgrades.html +[16]: https://www.facebook.com/NetworkWorld/ +[17]: https://www.linkedin.com/company/network-world diff --git a/published/202103/20200410 Get started with Bash programming.md b/published/202103/20200410 Get started with Bash programming.md new file mode 100644 index 0000000000..84b9aeca70 --- /dev/null +++ b/published/202103/20200410 Get started with Bash programming.md @@ -0,0 +1,148 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13210-1.html) +[#]: subject: (Get started with Bash programming) +[#]: via: (https://opensource.com/article/20/4/bash-programming-guide) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +如何入门 Bash 编程 +====== + +> 了解如何在 Bash 中编写定制程序以自动执行重复性操作任务。 + +![](https://img.linux.net.cn/data/attachment/album/202103/17/110745ctcuzcnt0dv0toi7.jpg) + +Unix 最初的希望之一是,让计算机的日常用户能够微调其计算机,以适应其独特的工作风格。几十年来,人们对计算机定制的期望已经降低,许多用户认为他们的应用程序和网站的集合就是他们的 “定制环境”。原因之一是许多操作系统的组件未不开源,普通用户无法使用其源代码。 + +但是对于 Linux 用户而言,定制程序是可以实现的,因为整个系统都围绕着可通过终端使用的命令啦进行的。终端不仅是用于快速命令或深入排除故障的界面;也是一个脚本环境,可以通过为你处理日常任务来减少你的工作量。 + +### 如何学习编程 + +如果你以前从未进行过任何编程,可能面临考虑两个不同的挑战:一个是了解怎样编写代码,另一个是了解要编写什么代码。你可以学习 _语法_,但是如果你不知道 _语言_ 中有哪些可用的关键字,你将无法继续。在实践中,要同时开始学习这两个概念,是因为如果没有关键字的堆砌就无法学习语法,因此,最初你要使用基本命令和基本编程结构来编写简单的任务。一旦熟悉了基础知识,就可以探索更多编程语言的内容,从而使你的程序能够做越来越重要的事情。 + +在 [Bash][2] 中,你使用的大多数 _关键字_ 是 Linux 命令。 _语法_ 就是 Bash。如果你已经频繁地使用过了 Bash,则向 Bash 编程的过渡相对容易。但是,如果你不曾使用过 Bash,你会很高兴地了解到它是一种为清晰和简单而构建的简单语言。 + +### 交互设计 + +有时,学习编程时最难搞清楚的事情就是计算机可以为你做些什么。显然,如果一台计算机可以自己完成你要做的所有操作,那么你就不必再碰计算机了。但是现实是,人类很重要。找到你的计算机可以帮助你的事情的关键是注意到你一周内需要重复执行的任务。计算机特别擅长于重复的任务。 + +但是,为了能告知计算机为你做某事,你必须知道怎么做。这就是 Bash 擅长的领域:交互式编程。在终端中执行一个动作时,你也在学习如何编写脚本。 + +例如,我曾经负责将大量 PDF 书籍转换为低墨和友好打印的版本。一种方法是在 PDF 编辑器中打开 PDF,从数百张图像(页面背景和纹理都算作图像)中选择每张图像,删除它们,然后将其保存到新的 PDF中。仅仅是一本书,这样就需要半天时间。 + +我的第一个想法是学习如何编写 PDF 编辑器脚本,但是经过数天的研究,我找不到可以编写编辑 PDF 应用程序的脚本(除了非常丑陋的鼠标自动化技巧)。因此,我将注意力转向了从终端内找出完成任务的方法。这让我有了几个新发现,包括 GhostScript,它是 PostScript 的开源版本(PDF 基于的打印机语言)。通过使用 GhostScript 处理了几天的任务,我确认这是解决我的问题的方法。 + +编写基本的脚本来运行命令,只不过是复制我用来从 PDF 中删除图像的命令和选项,并将其粘贴到文本文件中而已。将这个文件作为脚本运行,大概也会产生同样的结果。 + +### 向 Bash 脚本传参数 + +在终端中运行命令与在 Shell 脚本中运行命令之间的区别在于前者是交互式的。在终端中,你可以随时进行调整。例如,如果我刚刚处理 `example_1.pdf` 并准备处理下一个文档,以适应我的命令,则只需要更改文件名即可。 + +Shell 脚本不是交互式的。实际上,Shell _脚本_ 存在的唯一原因是让你不必亲自参与。这就是为什么命令(以及运行它们的 Shell 脚本)会接受参数的原因。 + +在 Shell 脚本中,有一些预定义的可以反映脚本启动方式的变量。初始变量是 `$0`,它代表了启动脚本的命令。下一个变量是 `$1` ,它表示传递给 Shell 脚本的第一个 “参数”。例如,在命令 `echo hello` 中,命令 `echo` 为 `$0,`,关键字 `hello` 为 `$1`,而 `world` 是 `$2`。 + +在 Shell 中交互如下所示: + +``` +$ echo hello world +hello world +``` + +在非交互式 Shell 脚本中,你 _可以_ 以非常直观的方式执行相同的操作。将此文本输入文本文件并将其另存为 `hello.sh`: + +``` +echo hello world +``` + +执行这个脚本: + +``` +$ bash hello.sh +hello world +``` + +同样可以,但是并没有利用脚本可以接受输入这一优势。将 `hello.sh` 更改为: + +``` +echo $1 +``` + +用引号将两个参数组合在一起来运行脚本: + +``` +$ bash hello.sh "hello bash" +hello bash +``` + +对于我的 PDF 瘦身项目,我真的需要这种非交互性,因为每个 PDF 都花了几分钟来压缩。但是通过创建一个接受我的输入的脚本,我可以一次将几个 PDF 文件全部提交给脚本。该脚本按顺序处理了每个文件,这可能需要半小时或稍长一点时间,但是我可以用半小时来完成其他任务。 + +### 流程控制 + +创建 Bash 脚本是完全可以接受的,从本质上讲,这些脚本是你开始实现需要重复执行任务的准确过程的副本。但是,可以通过控制信息流的方式来使脚本更强大。管理脚本对数据响应的常用方法是: + + * `if`/`then` 选择结构语句 + * `for` 循环结构语句 + * `while` 循环结构语句 + * `case` 语句 + +计算机不是智能的,但是它们擅长比较和分析数据。如果你在脚本中构建一些数据分析,则脚本会变得更加智能。例如,基本的 `hello.sh` 脚本运行后不管有没有内容都会显示: + +``` +$ bash hello.sh foo +foo +$ bash hello.sh + +$ +``` + +如果在没有接收输入的情况下提供帮助消息,将会更加容易使用。如下是一个 `if`/`then` 语句,如果你以一种基本的方式使用 Bash,则你可能不知道 Bash 中存在这样的语句。但是编程的一部分是学习语言,通过一些研究,你将了解 `if/then` 语句: + +``` +if [ "$1" = "" ]; then +        echo "syntax: $0 WORD" +        echo "If you provide more than one word, enclose them in quotes." +else +        echo "$1" +fi +``` + +运行新版本的 `hello.sh` 输出如下: + +``` +$ bash hello.sh +syntax: hello.sh WORD +If you provide more than one word, enclose them in quotes. +$ bash hello.sh "hello world" +hello world +``` + +### 利用脚本工作 + +无论你是从 PDF 文件中查找要删除的图像,还是要管理混乱的下载文件夹,抑或要创建和提供 Kubernetes 镜像,学习编写 Bash 脚本都需要先使用 Bash,然后学习如何将这些脚本从仅仅是一个命令列表变成响应输入的东西。通常这是一个发现的过程:你一定会找到新的 Linux 命令来执行你从未想象过可以通过文本命令执行的任务,你会发现 Bash 的新功能,使你的脚本可以适应所有你希望它们运行的不同方式。 + +学习这些技巧的一种方法是阅读其他人的脚本。了解人们如何在其系统上自动化死板的命令。看看你熟悉的,并寻找那些陌生事物的更多信息。 + +另一种方法是下载我们的 [Bash 编程入门][3] 电子书。它向你介绍了特定于 Bash 的编程概念,并且通过学习的构造,你可以开始构建自己的命令。当然,它是免费的,并根据 [创作共用许可证][4] 进行下载和分发授权,所以今天就来获取它吧。 + +- [下载我们介绍用 Bash 编程的电子书!][3] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/4/bash-programming-guide + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/command_line_prompt.png?itok=wbGiJ_yg (Command line prompt) +[2]: https://opensource.com/resources/what-bash +[3]: https://opensource.com/downloads/bash-programming-guide +[4]: https://opensource.com/article/20/1/what-creative-commons diff --git a/published/202103/20200415 How to automate your cryptocurrency trades with Python.md b/published/202103/20200415 How to automate your cryptocurrency trades with Python.md new file mode 100644 index 0000000000..f310476575 --- /dev/null +++ b/published/202103/20200415 How to automate your cryptocurrency trades with Python.md @@ -0,0 +1,414 @@ +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13242-1.html) +[#]: subject: (How to automate your cryptocurrency trades with Python) +[#]: via: (https://opensource.com/article/20/4/python-crypto-trading-bot) +[#]: author: (Stephan Avenwedde https://opensource.com/users/hansic99) + + +如何使用 Python 来自动交易加密货币 +====== + +> 在本教程中,教你如何设置和使用 Pythonic 来编程。它是一个图形化编程工具,用户可以很容易地使用现成的函数模块创建 Python 程序。 + +![](https://img.linux.net.cn/data/attachment/album/202103/28/093858qu0bh3w2sd3rh20s.jpg) + +然而,不像纽约证券交易所这样的传统证券交易所一样,有一段固定的交易时间。对于加密货币而言,则是 7×24 小时交易,这使得任何人都无法独自盯着市场。 + +在以前,我经常思考与加密货币交易相关的问题: + +- 一夜之间发生了什么? +- 为什么没有日志记录? +- 为什么下单? +- 为什么不下单? + +通常的解决手段是使用加密交易机器人,当在你做其他事情时,例如睡觉、与家人在一起或享受空闲时光,代替你下单。虽然有很多商业解决方案可用,但是我选择开源的解决方案,因此我编写了加密交易机器人 [Pythonic][2]。 正如去年 [我写过的文章][3] 一样,“Pythonic 是一种图形化编程工具,它让用户可以轻松使用现成的函数模块来创建 Python 应用程序。” 最初它是作为加密货币机器人使用,并具有可扩展的日志记录引擎以及经过精心测试的可重用部件,例如调度器和计时器。 + +### 开始 + +本教程将教你如何开始使用 Pythonic 进行自动交易。我选择 [币安][6]Binance 交易所的 [波场][4]Tron[比特币][3]Bitcoin 交易对为例。我之所以选择这个加密货币对,是因为它们彼此之间的波动性大,而不是出于个人喜好。 + +机器人将根据 [指数移动平均][7]exponential moving averages (EMA)来做出决策。 + +![TRX/BTC 1-hour candle chart][8] + +*TRX/BTC 1 小时 K 线图* + +EMA 指标通常是一个加权的移动平均线,可以对近期价格数据赋予更多权重。尽管移动平均线可能只是一个简单的指标,但我对它很有经验。 + +上图中的紫色线显示了 EMA-25 指标(这表示要考虑最近的 25 个值)。 + +机器人监视当前的 EMA-25 值(t0)和前一个 EMA-25 值(t-1)之间的差距。如果差值超过某个值,则表示价格上涨,机器人将下达购买订单。如果差值低于某个值,则机器人将下达卖单。 + +差值将是做出交易决策的主要指标。在本教程中,它称为交易参数。 + +### 工具链 + +将在本教程使用如下工具: + +- 币安专业交易视图(已经有其他人做了数据可视化,所以不需要重复造轮子) +- Jupyter 笔记本:用于数据科学任务 +- Pythonic:作为整体框架 +- PythonicDaemon :作为终端运行(仅适用于控制台和 Linux) + +### 数据挖掘 + +为了使加密货币交易机器人尽可能做出正确的决定,以可靠的方式获取资产的美国线open-high-low-close chart([OHLC][9])数据是至关重要。你可以使用 Pythonic 的内置元素,还可以根据自己逻辑来对其进行扩展。 + +一般的工作流程: + +1. 与币安时间同步 +2. 下载 OHLC 数据 +3. 从文件中把 OHLC 数据加载到内存 +4. 比较数据集并扩展更新数据集 + +这个工作流程可能有点夸张,但是它能使得程序更加健壮,甚至在停机和断开连接时,也能平稳运行。 + +一开始,你需要 **币安 OHLC 查询**Binance OHLC Query 元素和一个 **基础操作**Basic Operation 元素来执行你的代码。 + +![Data-mining workflow][10] + +*数据挖掘工作流程* + +OHLC 查询设置为每隔一小时查询一次 **TRXBTC** 资产对(波场/比特币)。 + +![Configuration of the OHLC query element][11] + +*配置 OHLC 查询元素* + +其中输出的元素是 [Pandas DataFrame][12]。你可以在 **基础操作** 元素中使用 **输入**input 变量来访问 DataFrame。其中,将 Vim 设置为 **基础操作** 元素的默认代码编辑器。 + +![Basic Operation element set up to use Vim][13] + +*使用 Vim 编辑基础操作元素* + +具体代码如下: + +``` +import pickle, pathlib, os +import pandas as pd + +outout = None + +if isinstance(input, pd.DataFrame): + file_name = 'TRXBTC_1h.bin' + home_path = str(pathlib.Path.home()) + data_path = os.path.join(home_path, file_name) + + try: + df = pickle.load(open(data_path, 'rb')) + n_row_cnt = df.shape[0] + df = pd.concat([df,input], ignore_index=True).drop_duplicates(['close_time']) + df.reset_index(drop=True, inplace=True) + n_new_rows = df.shape[0] - n_row_cnt + log_txt = '{}: {} new rows written'.format(file_name, n_new_rows) + except: + log_txt = 'File error - writing new one: {}'.format(e) + df = input + + pickle.dump(df, open(data_path, "wb" )) + output = df +``` + +首先,检查输入是否为 DataFrame 元素。然后在用户的家目录(`~/`)中查找名为 `TRXBTC_1h.bin` 的文件。如果存在,则将其打开,执行新代码段(`try` 部分中的代码),并删除重复项。如果文件不存在,则触发异常并执行 `except` 部分中的代码,创建一个新文件。 + +只要启用了复选框 **日志输出**log output,你就可以使用命令行工具 `tail` 查看日志记录: + + +``` +$ tail -f ~/Pythonic_2020/Feb/log_2020_02_19.txt +``` + +出于开发目的,现在跳过与币安时间的同步和计划执行,这将在下面实现。 + +### 准备数据 + +下一步是在单独的 网格Grid 中处理评估逻辑。因此,你必须借助**返回元素**Return element 将 DataFrame 从网格 1 传递到网格 2 的第一个元素。 + +在网格 2 中,通过使 DataFrame 通过 **基础技术分析**Basic Technical Analysis 元素,将 DataFrame 扩展包含 EMA 值的一列。 + +![Technical analysis workflow in Grid 2][14] + +*在网格 2 中技术分析工作流程* + +配置技术分析元素以计算 25 个值的 EMA。 + +![Configuration of the technical analysis element][15] + +*配置技术分析元素* + +当你运行整个程序并开启 **技术分析**Technical Analysis 元素的调试输出时,你将发现 EMA-25 列的值似乎都相同。 + +![Missing decimal places in output][16] + +*输出中精度不够* + +这是因为调试输出中的 EMA-25 值仅包含六位小数,即使输出保留了 8 个字节完整精度的浮点值。 + +为了能进行进一步处理,请添加 **基础操作** 元素: + +![Workflow in Grid 2][17] + +*网格 2 中的工作流程* + +使用 **基础操作** 元素,将 DataFrame 与添加的 EMA-25 列一起转储,以便可以将其加载到 Jupyter 笔记本中; + +![Dump extended DataFrame to file][18] + +*将扩展后的 DataFrame 存储到文件中* + +### 评估策略 + +在 Juypter 笔记本中开发评估策略,让你可以更直接地访问代码。要加载 DataFrame,你需要使用如下代码: + +![Representation with all decimal places][19] + +*用全部小数位表示* + +你可以使用 [iloc][20] 和列名来访问最新的 EMA-25 值,并且会保留所有小数位。 + +你已经知道如何来获得最新的数据。上面示例的最后一行仅显示该值。为了能将该值拷贝到不同的变量中,你必须使用如下图所示的 `.at` 方法方能成功。 + +你也可以直接计算出你下一步所需的交易参数。 + +![Buy/sell decision][21] + +*买卖决策* + +### 确定交易参数 + +如上面代码所示,我选择 0.009 作为交易参数。但是我怎么知道 0.009 是决定交易的一个好参数呢? 实际上,这个参数确实很糟糕,因此,你可以直接计算出表现最佳的交易参数。 + +假设你将根据收盘价进行买卖。 + +![Validation function][22] + +*回测功能* + +在此示例中,`buy_factor` 和 `sell_factor` 是预先定义好的。因此,发散思维用直接计算出表现最佳的参数。 + +![Nested for loops for determining the buy and sell factor][23] + +*嵌套的 for 循环,用于确定购买和出售的参数* + +这要跑 81 个循环(9x9),在我的机器(Core i7 267QM)上花费了几分钟。 + +![System utilization while brute forcing][24] + +*在暴力运算时系统的利用率* + +在每个循环之后,它将 `buy_factor`、`sell_factor` 元组和生成的 `profit` 元组追加到 `trading_factors` 列表中。按利润降序对列表进行排序。 + +![Sort profit with related trading factors in descending order][25] + +*将利润与相关的交易参数按降序排序* + +当你打印出列表时,你会看到 0.002 是最好的参数。 + +![Sorted list of trading factors and profit][26] + +*交易要素和收益的有序列表* + +当我在 2020 年 3 月写下这篇文章时,价格的波动还不足以呈现出更理想的结果。我在 2 月份得到了更好的结果,但即使在那个时候,表现最好的交易参数也在 0.002 左右。 + +### 分割执行路径 + +现在开始新建一个网格以保持逻辑清晰。使用 **返回** 元素将带有 EMA-25 列的 DataFrame 从网格 2 传递到网格 3 的 0A 元素。 + +在网格 3 中,添加 **基础操作** 元素以执行评估逻辑。这是该元素中的代码: + +![Implemented evaluation logic][27] + +*实现评估策略* + +如果输出 `1` 表示你应该购买,如果输出 `2` 则表示你应该卖出。 输出 `0` 表示现在无需操作。使用 **分支**Branch 元素来控制执行路径。 + +![Branch element: Grid 3 Position 2A][28] + +*分支元素:网格 3,2A 位置* + +因为 `0` 和 `-1` 的处理流程一样,所以你需要在最右边添加一个分支元素来判断你是否应该卖出。 + +![Branch element: Grid 3 Position 3B][29] + +*分支元素:网格 3,3B 位置* + +网格 3 应该现在如下图所示: + +![Workflow on Grid 3][30] + +*网格 3 的工作流程* + +### 下单 + +由于无需在一个周期中购买两次,因此必须在周期之间保留一个持久变量,以指示你是否已经购买。 + +你可以利用 **栈**Stack 元素来实现。顾名思义,栈元素表示可以用任何 Python 数据类型来放入的基于文件的栈。 + +你需要定义栈仅包含一个布尔类型,该布尔类型决定是否购买了(`True`)或(`False`)。因此,你必须使用 `False` 来初始化栈。例如,你可以在网格 4 中简单地通过将 `False` 传递给栈来进行设置。 + +![Forward a False-variable to the subsequent Stack element][31] + +*将 False 变量传输到后续的栈元素中* + +在分支树后的栈实例可以进行如下配置: + +![Configuration of the Stack element][32] + +*设置栈元素* + +在栈元素设置中,将 对输入的操作Do this with input 设置成 Nothing。否则,布尔值将被 `1` 或 `0` 覆盖。 + +该设置确保仅将一个值保存于栈中(`True` 或 `False`),并且只能读取一个值(为了清楚起见)。 + +在栈元素之后,你需要另外一个 **分支** 元素来判断栈的值,然后再放置 币安订单Binance Order 元素。 + +![Evaluate the variable from the stack][33] + +*判断栈中的变量* + +将币安订单元素添加到分支元素的 `True` 路径。网格 3 上的工作流现在应如下所示: + +![Workflow on Grid 3][34] + +*网格 3 的工作流程* + +币安订单元素应如下配置: + +![Configuration of the Binance Order element][35] + +*编辑币安订单元素* + +你可以在币安网站上的帐户设置中生成 API 和密钥。 + +![Creating an API key in Binance][36] + +*在币安账户设置中创建一个 API 密钥* + +在本文中,每笔交易都是作为市价交易执行的,交易量为 10,000 TRX(2020 年 3 月约为 150 美元)(出于教学的目的,我通过使用市价下单来演示整个过程。因此,我建议至少使用限价下单。) + +如果未正确执行下单(例如,网络问题、资金不足或货币对不正确),则不会触发后续元素。因此,你可以假定如果触发了后续元素,则表示该订单已下达。 + +这是一个成功的 XMRBTC 卖单的输出示例: + +![Output of a successfully placed sell order][37] + +*成功卖单的输出* + +该行为使后续步骤更加简单:你可以始终假设只要成功输出,就表示订单成功。因此,你可以添加一个 **基础操作** 元素,该元素将简单地输出 **True** 并将此值放入栈中以表示是否下单。 + +如果出现错误的话,你可以在日志信息中查看具体细节(如果启用日志功能)。 + +![Logging output of Binance Order element][38] + +*币安订单元素中的输出日志信息* + +### 调度和同步 + +对于日程调度和同步,请在网格 1 中将整个工作流程置于 币安调度器Binance Scheduler 元素的前面。 + +![Binance Scheduler at Grid 1, Position 1A][39] + +*在网格 1,1A 位置的币安调度器* + +由于币安调度器元素只执行一次,因此请在网格 1 的末尾拆分执行路径,并通过将输出传递回币安调度器来强制让其重新同步。 + +![Grid 1: Split execution path][40] + +*网格 1:拆分执行路径* + +5A 元素指向 网格 2 的 1A 元素,并且 5B 元素指向网格 1 的 1A 元素(币安调度器)。 + +### 部署 + +你可以在本地计算机上全天候 7×24 小时运行整个程序,也可以将其完全托管在廉价的云系统上。例如,你可以使用 Linux/FreeBSD 云系统,每月约 5 美元,但通常不提供图形化界面。如果你想利用这些低成本的云,可以使用 PythonicDaemon,它能在终端中完全运行。 + +![PythonicDaemon console interface][41] + +*PythonicDaemon 控制台* + +PythonicDaemon 是基础程序的一部分。要使用它,请保存完整的工作流程,将其传输到远程运行的系统中(例如,通过安全拷贝协议Secure Copy SCP),然后把工作流程文件作为参数来启动 PythonicDaemon: + +``` +$ PythonicDaemon trading_bot_one +``` + +为了能在系统启动时自启 PythonicDaemon,可以将一个条目添加到 crontab 中: + +``` +# crontab -e +``` + +![Crontab on Ubuntu Server][42] + +*在 Ubuntu 服务器上的 Crontab* + +### 下一步 + +正如我在一开始时所说的,本教程只是自动交易的入门。对交易机器人进行编程大约需要 10% 的编程和 90% 的测试。当涉及到让你的机器人用金钱交易时,你肯定会对编写的代码再三思考。因此,我建议你编码时要尽可能简单和易于理解。 + +如果你想自己继续开发交易机器人,接下来所需要做的事: + +- 收益自动计算(希望你有正收益!) +- 计算你想买的价格 +- 比较你的预订单(例如,订单是否填写完整?) + +你可以从 [GitHub][2] 上获取完整代码。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/4/python-crypto-trading-bot + +作者:[Stephan Avenwedde][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/calculator_money_currency_financial_tool.jpg?itok=2QMa1y8c "scientific calculator" +[2]: https://github.com/hANSIc99/Pythonic +[3]: https://opensource.com/article/19/5/graphically-programming-pythonic +[4]: https://tron.network/ +[5]: https://bitcoin.org/en/ +[6]: https://www.binance.com/ +[7]: https://www.investopedia.com/terms/e/ema.asp +[8]: https://opensource.com/sites/default/files/uploads/1_ema-25.png "TRX/BTC 1-hour candle chart" +[9]: https://en.wikipedia.org/wiki/Open-high-low-close_chart +[10]: https://opensource.com/sites/default/files/uploads/2_data-mining-workflow.png "Data-mining workflow" +[11]: https://opensource.com/sites/default/files/uploads/3_ohlc-query.png "Configuration of the OHLC query element" +[12]: https://pandas.pydata.org/pandas-docs/stable/getting_started/dsintro.html#dataframe +[13]: https://opensource.com/sites/default/files/uploads/4_edit-basic-operation.png "Basic Operation element set up to use Vim" +[14]: https://opensource.com/sites/default/files/uploads/6_grid2-workflow.png "Technical analysis workflow in Grid 2" +[15]: https://opensource.com/sites/default/files/uploads/7_technical-analysis-config.png "Configuration of the technical analysis element" +[16]: https://opensource.com/sites/default/files/uploads/8_missing-decimals.png "Missing decimal places in output" +[17]: https://opensource.com/sites/default/files/uploads/9_basic-operation-element.png "Workflow in Grid 2" +[18]: https://opensource.com/sites/default/files/uploads/10_dump-extended-dataframe.png "Dump extended DataFrame to file" +[19]: https://opensource.com/sites/default/files/uploads/11_load-dataframe-decimals.png "Representation with all decimal places" +[20]: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html +[21]: https://opensource.com/sites/default/files/uploads/12_trade-factor-decision.png "Buy/sell decision" +[22]: https://opensource.com/sites/default/files/uploads/13_validation-function.png "Validation function" +[23]: https://opensource.com/sites/default/files/uploads/14_brute-force-tf.png "Nested for loops for determining the buy and sell factor" +[24]: https://opensource.com/sites/default/files/uploads/15_system-utilization.png "System utilization while brute forcing" +[25]: https://opensource.com/sites/default/files/uploads/16_sort-profit.png "Sort profit with related trading factors in descending order" +[26]: https://opensource.com/sites/default/files/uploads/17_sorted-trading-factors.png "Sorted list of trading factors and profit" +[27]: https://opensource.com/sites/default/files/uploads/18_implemented-evaluation-logic.png "Implemented evaluation logic" +[28]: https://opensource.com/sites/default/files/uploads/19_output.png "Branch element: Grid 3 Position 2A" +[29]: https://opensource.com/sites/default/files/uploads/20_editbranch.png "Branch element: Grid 3 Position 3B" +[30]: https://opensource.com/sites/default/files/uploads/21_grid3-workflow.png "Workflow on Grid 3" +[31]: https://opensource.com/sites/default/files/uploads/22_pass-false-to-stack.png "Forward a False-variable to the subsequent Stack element" +[32]: https://opensource.com/sites/default/files/uploads/23_stack-config.png "Configuration of the Stack element" +[33]: https://opensource.com/sites/default/files/uploads/24_evaluate-stack-value.png "Evaluate the variable from the stack" +[34]: https://opensource.com/sites/default/files/uploads/25_grid3-workflow.png "Workflow on Grid 3" +[35]: https://opensource.com/sites/default/files/uploads/26_binance-order.png "Configuration of the Binance Order element" +[36]: https://opensource.com/sites/default/files/uploads/27_api-key-binance.png "Creating an API key in Binance" +[37]: https://opensource.com/sites/default/files/uploads/28_sell-order.png "Output of a successfully placed sell order" +[38]: https://opensource.com/sites/default/files/uploads/29_binance-order-output.png "Logging output of Binance Order element" +[39]: https://opensource.com/sites/default/files/uploads/30_binance-scheduler.png "Binance Scheduler at Grid 1, Position 1A" +[40]: https://opensource.com/sites/default/files/uploads/31_split-execution-path.png "Grid 1: Split execution path" +[41]: https://opensource.com/sites/default/files/uploads/32_pythonic-daemon.png "PythonicDaemon console interface" +[42]: https://opensource.com/sites/default/files/uploads/33_crontab.png "Crontab on Ubuntu Server" diff --git a/published/202103/20200702 6 best practices for managing Git repos.md b/published/202103/20200702 6 best practices for managing Git repos.md new file mode 100644 index 0000000000..81fb81347e --- /dev/null +++ b/published/202103/20200702 6 best practices for managing Git repos.md @@ -0,0 +1,136 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13200-1.html) +[#]: subject: (6 best practices for managing Git repos) +[#]: via: (https://opensource.com/article/20/7/git-repos-best-practices) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +6 个最佳的 Git 仓库管理实践 +====== + +> 抵制在 Git 中添加一些会增加管理难度的东西的冲动;这里有替代方法。 + +![](https://img.linux.net.cn/data/attachment/album/202103/13/225927c3mvm5x275vano5m.jpg) + +有权访问源代码使对安全性的分析以及应用程序的安全成为可能。但是,如果没有人真正看过代码,问题就不会被发现,即使人们主动地看代码,通常也要看很多东西。幸运的是,GitHub 拥有一个活跃的安全团队,最近,他们 [发现了已提交到多个 Git 仓库中的特洛伊木马病毒][2],甚至仓库的所有者也偷偷溜走了。尽管我们无法控制其他人如何管理自己的仓库,但我们可以从他们的错误中吸取教训。为此,本文回顾了将文件添加到自己的仓库中的一些最佳实践。 + +### 了解你的仓库 + +![Git 仓库终端][3] + +这对于安全的 Git 仓库来可以说是头号规则。作为项目维护者,无论是你自己创建的还是采用别人的,你的工作是了解自己仓库中的内容。你可能无法记住代码库中每一个文件,但是你需要了解你所管理的内容的基本组成部分。如果在几十个合并后出现一个游离的文件,你会很容易地发现它,因为你不知道它的用途,你需要检查它来刷新你的记忆。发生这种情况时,请查看该文件,并确保准确了解为什么它是必要的。 + +### 禁止二进制大文件 + +![终端中 Git 的二进制检查命令][4] + +Git 是为文本而生的,无论是用纯文本编写的 C 或 Python 还是 Java 文本,亦或是 JSON、YAML、XML、Markdown、HTML 或类似的文本。Git 对于二进制文件不是很理想。 + +两者之间的区别是: + +``` +$ cat hello.txt +This is plain text. +It's readable by humans and machines alike. +Git knows how to version this. + +$ git diff hello.txt +diff --git a/hello.txt b/hello.txt +index f227cc3..0d85b44 100644 +--- a/hello.txt ++++ b/hello.txt +@@ -1,2 +1,3 @@ + This is plain text. ++It's readable by humans and machines alike. + Git knows how to version this. +``` + +和 + +``` +$ git diff pixel.png +diff --git a/pixel.png b/pixel.png +index 563235a..7aab7bc 100644 +Binary files a/pixel.png and b/pixel.png differ + +$ cat pixel.png +�PNG +▒ +IHDR7n�$gAMA�� + �abKGD݊�tIME� + + -2R�� +IDA�c`�!�3%tEXtdate:create2020-06-11T11:45:04+12:00��r.%tEXtdate:modify2020-06-11T11:45:04+12:00��ʒIEND�B`� +``` + +二进制文件中的数据不能像纯文本一样被解析,因此,如果二进制文件发生任何更改,则必须重写整个内容。一个版本与另一个版本之间唯一的区别就是全部不同,这会快速增加仓库大小。 + +更糟糕的是,Git 仓库维护者无法合理地审计二进制数据。这违反了头号规则:应该对仓库的内容了如指掌。 + +除了常用的 [POSIX][5] 工具之外,你还可以使用 `git diff` 检测二进制文件。当你尝试使用 `--numstat` 选项来比较二进制文件时,Git 返回空结果: + +``` +$ git diff --numstat /dev/null pixel.png | tee +- - /dev/null => pixel.png +$ git diff --numstat /dev/null file.txt | tee +5788 0 /dev/null => list.txt +``` + +如果你正在考虑将二进制大文件(BLOB)提交到仓库,请停下来先思考一下。如果它是二进制文件,那它是由什么生成的。是否有充分的理由不在构建时生成它们,而是将它们提交到仓库?如果你认为提交二进制数据是有意义的,请确保在 `README` 文件或类似文件中指明二进制文件的位置、为什么是二进制文件的原因以及更新它们的协议是什么。必须谨慎对其更新,因为你每提交一个二进制大文件的变化,它的存储空间实际上都会加倍。 + +### 让第三方库留在第三方 + +第三方库也不例外。尽管它是开源的众多优点之一,你可以不受限制地重用和重新分发不是你编写的代码,但是有很多充分的理由不把第三方库存储在你自己的仓库中。首先,除非你自己检查了所有代码(以及将来的合并),否则你不能为第三方完全担保。其次,当你将第三方库复制到你的 Git 仓库中时,会将焦点从真正的上游源代码中分离出来。从技术上讲,对库有信心的人只对该库的主副本有把握,而不是对随机仓库的副本有把握。如果你需要锁定特定版本的库,请给开发者提供一个合理的项目所需的发布 URL,或者使用 [Git 子模块][6]。 + +### 抵制盲目的 git add + +![Git 手动添加命令终端中][7] + +如果你的项目已编译,请抵制住使用 `git add .` 的冲动(其中 `.` 是当前目录或特定文件夹的路径),因为这是一种添加任何新东西的简单方法。如果你不是手动编译项目,而是使用 IDE 为你管理项目,这一点尤其重要。用 IDE 管理项目时,跟踪添加到仓库中的内容会非常困难,因此仅添加你实际编写的内容非常重要,而不是添加项目文件夹中出现的任何新对象。 + +如果你使用了 `git add .`,请在推送之前检查暂存区里的内容。如果在运行 `make clean` 或等效命令后,执行 `git status` 时在项目文件夹中看到一个陌生的对象,请找出它的来源,以及为什么仍然在项目的目录中。这是一种罕见的构建工件,不会在编译期间重新生成,因此在提交前请三思。 + +### 使用 Git ignore + +![终端中的 `Git ignore` 命令][8] + +许多为程序员打造的便利也非常杂乱。任何项目的典型项目目录,无论是编程的,还是艺术的或其他的,到处都是隐藏的文件、元数据和遗留的工件。你可以尝试忽略这些对象,但是 `git status` 中的提示越多,你错过某件事的可能性就越大。 + +你可以通过维护一个良好的 `gitignore` 文件来为你过滤掉这种噪音。因为这是使用 Git 的用户的共同要求,所以有一些入门级的 `gitignore` 文件。[Github.com/github/gitignore][9] 提供了几个专门创建的 `gitignore` 文件,你可以下载这些文件并将其放置到自己的项目中,[Gitlab.com][10] 在几年前就将`gitignore` 模板集成到了仓库创建工作流程中。使用这些模板来帮助你为项目创建适合的 `gitignore` 策略并遵守它。 + +### 查看合并请求 + +![Git 合并请求][11] + +当你通过电子邮件收到一个合并/拉取请求或补丁文件时,不要只是为了确保它能正常工作而进行测试。你的工作是阅读进入代码库的新代码,并了解其是如何产生结果的。如果你不同意这个实现,或者更糟的是,你不理解这个实现,请向提交该实现的人发送消息,并要求其进行说明。质疑那些希望成为版本库永久成员的代码并不是一种社交失误,但如果你不知道你把什么合并到用户使用的代码中,那就是违反了你和用户之间的社交契约。 + +### Git 责任 + +社区致力于开源软件良好的安全性。不要鼓励你的仓库中不良的 Git 实践,也不要忽视你克隆的仓库中的安全威胁。Git 功能强大,但它仍然只是一个计算机程序,因此要以人为本,确保每个人的安全。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/7/git-repos-best-practices + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/wfh_work_home_laptop_work.png?itok=VFwToeMy (Working from home at a laptop) +[2]: https://securitylab.github.com/research/octopus-scanner-malware-open-source-supply-chain/ +[3]: https://opensource.com/sites/default/files/uploads/git_repo.png (Git repository ) +[4]: https://opensource.com/sites/default/files/uploads/git-binary-check.jpg (Git binary check) +[5]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains +[6]: https://git-scm.com/book/en/v2/Git-Tools-Submodules +[7]: https://opensource.com/sites/default/files/uploads/git-cola-manual-add.jpg (Git manual add) +[8]: https://opensource.com/sites/default/files/uploads/git-ignore.jpg (Git ignore) +[9]: https://github.com/github/gitignore +[10]: https://about.gitlab.com/releases/2016/05/22/gitlab-8-8-released +[11]: https://opensource.com/sites/default/files/uploads/git_merge_request.png (Git merge request) diff --git a/published/202103/20200915 Improve your time management with Jupyter.md b/published/202103/20200915 Improve your time management with Jupyter.md new file mode 100644 index 0000000000..3a1cd3d81d --- /dev/null +++ b/published/202103/20200915 Improve your time management with Jupyter.md @@ -0,0 +1,315 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13212-1.html) +[#]: subject: (Improve your time management with Jupyter) +[#]: via: (https://opensource.com/article/20/9/calendar-jupyter) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) + +使用 Jupyter 改善你的时间管理 +====== + +> 在 Jupyter 里使用 Python 来分析日历,以了解你是如何使用时间的。 + +![](https://img.linux.net.cn/data/attachment/album/202103/18/095530cxx6663ptypyzvmx.jpg) + +[Python][2] 在探索数据方面具有令人难以置信的可扩展性。利用 [Pandas][3] 或 [Dask][4],你可以将 [Jupyter][5] 扩展到大数据领域。但是小数据、个人资料、私人数据呢? + +JupyterLab 和 Jupyter Notebook 为我提供了一个绝佳的环境,可以让我审视我的笔记本电脑生活。 + +我的探索是基于以下事实:我使用的几乎每个服务都有一个 Web API。我使用了诸多此类服务:待办事项列表、时间跟踪器、习惯跟踪器等。还有一个几乎每个人都会使用到:_日历_。相同的思路也可以应用于其他服务,但是日历具有一个很酷的功能:几乎所有 Web 日历都支持的开放标准 —— CalDAV。 + +### 在 Jupyter 中使用 Python 解析日历 + +大多数日历提供了导出为 CalDAV 格式的方法。你可能需要某种身份验证才能访问这些私有数据。按照你的服务说明进行操作即可。如何获得凭据取决于你的服务,但是最终,你应该能够将这些凭据存储在文件中。我将我的凭据存储在根目录下的一个名为 `.caldav` 的文件中: + +``` +import os +with open(os.path.expanduser("~/.caldav")) as fpin: +    username, password = fpin.read().split() +``` + +切勿将用户名和密码直接放在 Jupyter Notebook 的笔记本中!它们可能会很容易因 `git push` 的错误而导致泄漏。 + +下一步是使用方便的 PyPI [caldav][6] 库。我找到了我的电子邮件服务的 CalDAV 服务器(你可能有所不同): + +``` +import caldav +client = caldav.DAVClient(url="https://caldav.fastmail.com/dav/", username=username, password=password) +``` + +CalDAV 有一个称为 `principal`(主键)的概念。它是什么并不重要,只要知道它是你用来访问日历的东西就行了: + +``` +principal = client.principal() +calendars = principal.calendars() +``` + +从字面上讲,日历就是关于时间的。访问事件之前,你需要确定一个时间范围。默认一星期就好: + +``` +from dateutil import tz +import datetime +now = datetime.datetime.now(tz.tzutc()) +since = now - datetime.timedelta(days=7) +``` + +大多数人使用的日历不止一个,并且希望所有事件都在一起出现。`itertools.chain.from_iterable` 方法使这一过程变得简单: + +``` +import itertools + +raw_events = list( +    itertools.chain.from_iterable( +        calendar.date_search(start=since, end=now, expand=True) +        for calendar in calendars +    ) +) +``` + +将所有事件读入内存很重要,以 API 原始的本地格式进行操作是重要的实践。这意味着在调整解析、分析和显示代码时,无需返回到 API 服务刷新数据。 + +但 “原始” 真的是原始,事件是以特定格式的字符串出现的: + +``` +print(raw_events[12].data) +``` + +``` +    BEGIN:VCALENDAR +    VERSION:2.0 +    PRODID:-//CyrusIMAP.org/Cyrus +     3.3.0-232-g4bdb081-fm-20200825.002-g4bdb081a//EN +    BEGIN:VEVENT +    DTEND:20200825T230000Z +    DTSTAMP:20200825T181915Z +    DTSTART:20200825T220000Z +    SUMMARY:Busy +    UID: +     1302728i-040000008200E00074C5B7101A82E00800000000D939773EA578D601000000000 +     000000010000000CD71CC3393651B419E9458134FE840F5 +    END:VEVENT +    END:VCALENDAR +``` + +幸运的是,PyPI 可以再次使用另一个辅助库 [vobject][7] 解围: + +``` +import io +import vobject + +def parse_event(raw_event): + data = raw_event.data + parsed = vobject.readOne(io.StringIO(data)) + contents = parsed.vevent.contents + return contents +``` + +``` +parse_event(raw_events[12]) +``` + +``` + {'dtend': [], + 'dtstamp': [], + 'dtstart': [], + 'summary': [], + 'uid': []} +``` + +好吧,至少好一点了。 + +仍有一些工作要做,将其转换为合理的 Python 对象。第一步是 _拥有_ 一个合理的 Python 对象。[attrs][8] 库提供了一个不错的开始: + +``` +import attr +from __future__ import annotations +@attr.s(auto_attribs=True, frozen=True) +class Event: +    start: datetime.datetime +    end: datetime.datetime +    timezone: Any +    summary: str +``` + +是时候编写转换代码了! + +第一个抽象从解析后的字典中获取值,不需要所有的装饰: + +``` +def get_piece(contents, name): + return contents[name][0].value +get_piece(_, "dtstart") + datetime.datetime(2020, 8, 25, 22, 0, tzinfo=tzutc()) +``` + +日历事件总有一个“开始”、有一个“结束”、有一个 “持续时间”。一些谨慎的解析逻辑可以将两者协调为同一个 Python 对象: + +``` +def from_calendar_event_and_timezone(event, timezone): +    contents = parse_event(event) +    start = get_piece(contents, "dtstart") +    summary = get_piece(contents, "summary") +    try: +        end = get_piece(contents, "dtend") +    except KeyError: +        end = start + get_piece(contents, "duration") +    return Event(start=start, end=end, summary=summary, timezone=timezone) +``` + +将事件放在 _本地_ 时区而不是 UTC 中很有用,因此使用本地时区: + +``` +my_timezone = tz.gettz() +from_calendar_event_and_timezone(raw_events[12], my_timezone) + Event(start=datetime.datetime(2020, 8, 25, 22, 0, tzinfo=tzutc()), end=datetime.datetime(2020, 8, 25, 23, 0, tzinfo=tzutc()), timezone=tzfile('/etc/localtime'), summary='Busy') +``` + +既然事件是真实的 Python 对象,那么它们实际上应该具有附加信息。幸运的是,可以将方法添加到类中。 + +但是要弄清楚哪个事件发生在哪一天不是很直接。你需要在 _本地_ 时区中选择一天: + +``` +def day(self): + offset = self.timezone.utcoffset(self.start) + fixed = self.start + offset + return fixed.date() +Event.day = property(day) +``` + +``` +print(_.day) + 2020-08-25 +``` + +事件在内部始终是以“开始”/“结束”的方式表示的,但是持续时间是有用的属性。持续时间也可以添加到现有类中: + +``` +def duration(self): + return self.end - self.start +Event.duration = property(duration) +``` + +``` +print(_.duration) + 1:00:00 +``` + +现在到了将所有事件转换为有用的 Python 对象了: + +``` +all_events = [from_calendar_event_and_timezone(raw_event, my_timezone) +              for raw_event in raw_events] +``` + +全天事件是一种特例,可能对分析生活没有多大用处。现在,你可以忽略它们: + +``` +# ignore all-day events +all_events = [event for event in all_events if not type(event.start) == datetime.date] +``` + +事件具有自然顺序 —— 知道哪个事件最先发生可能有助于分析: + +``` +all_events.sort(key=lambda ev: ev.start) +``` + +现在,事件已排序,可以将它们加载到每天: + +``` +import collections +events_by_day = collections.defaultdict(list) +for event in all_events: +    events_by_day[event.day].append(event) +``` + +有了这些,你就有了作为 Python 对象的带有日期、持续时间和序列的日历事件。 + +### 用 Python 报到你的生活 + +现在是时候编写报告代码了!带有适当的标题、列表、重要内容以粗体显示等等,有醒目的格式是很意义。 + +这就是一些 HTML 和 HTML 模板。我喜欢使用 [Chameleon][9]: + +``` +template_content = """ + +
+

Day

+
    +
  • Thing
  • +
+
+""" +``` + +Chameleon 的一个很酷的功能是使用它的 `html` 方法渲染对象。我将以两种方式使用它: + + * 摘要将以粗体显示 + * 对于大多数活动,我都会删除摘要(因为这是我的个人信息) + +``` +def __html__(self): + offset = my_timezone.utcoffset(self.start) + fixed = self.start + offset + start_str = str(fixed).split("+")[0] + summary = self.summary + if summary != "Busy": + summary = "<REDACTED>" + return f"{summary[:30]} -- {start_str} ({self.duration})" +Event.__html__ = __html__ +``` + +为了简洁起见,将该报告切成每天的: + +``` +import chameleon +from IPython.display import HTML +template = chameleon.PageTemplate(template_content) +html = template(items=itertools.islice(events_by_day.items(), 3, 4)) +HTML(html) +``` + +渲染后,它将看起来像这样: + +**2020-08-25** + +- **\** -- 2020-08-25 08:30:00 (0:45:00) +- **\** -- 2020-08-25 10:00:00 (1:00:00) +- **\** -- 2020-08-25 11:30:00 (0:30:00) +- **\** -- 2020-08-25 13:00:00 (0:25:00) +- Busy -- 2020-08-25 15:00:00 (1:00:00) +- **\** -- 2020-08-25 15:00:00 (1:00:00) +- **\** -- 2020-08-25 19:00:00 (1:00:00) +- **\** -- 2020-08-25 19:00:12 (1:00:00) + +### Python 和 Jupyter 的无穷选择 + +通过解析、分析和报告各种 Web 服务所拥有的数据,这只是你可以做的事情的表面。 + +为什么不对你最喜欢的服务试试呢? + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/9/calendar-jupyter + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/calendar.jpg?itok=jEKbhvDT (Calendar close up snapshot) +[2]: https://opensource.com/resources/python +[3]: https://pandas.pydata.org/ +[4]: https://dask.org/ +[5]: https://jupyter.org/ +[6]: https://pypi.org/project/caldav/ +[7]: https://pypi.org/project/vobject/ +[8]: https://opensource.com/article/19/5/python-attrs +[9]: https://chameleon.readthedocs.io/en/latest/ diff --git a/published/202103/20201014 Teach a virtual class with Moodle on Linux.md b/published/202103/20201014 Teach a virtual class with Moodle on Linux.md new file mode 100644 index 0000000000..b41b64f498 --- /dev/null +++ b/published/202103/20201014 Teach a virtual class with Moodle on Linux.md @@ -0,0 +1,181 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13190-1.htmlhttps://linux.cn/article-13190-1.html) +[#]: subject: (Teach a virtual class with Moodle on Linux) +[#]: via: (https://opensource.com/article/20/10/moodle) +[#]: author: (Don Watkins https://opensource.com/users/don-watkins) + +基于 Linux 的 Moodle 虚拟课堂教学 +====== + +> 基于 Linux 的 Moodle 学习管理系统进行远程教学。 + +![](https://img.linux.net.cn/data/attachment/album/202103/10/094113q0ggsbz0a0wb9eg4.jpg) + +这次大流行对远程教育的需求比以往任何时候都更大。使得像 [Moodle][2] 这样的学习管理系统learning management system(LMS)比以往任何时候都重要,因为越来越多的学校教育是借助虚拟现实技术的提供。 + +Moodle 是用 PHP 编写的免费 LMS,并以开源 [GNU 公共许可证][3](GPL)分发。它是由 [Martin Dougiamas][4] 开发的,自 2002 年发布以来一直在不断发展。Moodle 可用于混合学习、远程学习、翻转课堂flipped classroom和其他形式的在线学习。目前,全球有超过 [1.9 亿用户][5] 和 145,000 个注册的 Moodle 网站。 + +我曾作为 Moodle 管理员、教师和学生等角色使用过 Moodle,在本文中,我将向你展示如何设置并开始使用它。 + +### 在 Linux 系统上安装 Moodle + +Moodle 对 [系统要求][6] 适中,并且有大量文档可为你提供帮助。我最喜欢的安装方法是从 [Turnkey Linux][7] 下载并制作 ISO,然后在 VirtualBox 中安装 Moodle 网站。 + +首先,下载 [Moodle ISO][8] 保存到电脑中。 + +下一步,安装 VirtualBox 的 Linux 命令行如下: + +``` +$ sudo apt install virtualbox +``` + +或, + +``` +$ sudo dnf install virtualbox +``` + +当下载完成后,启动 VirtualBox 并在控制台中选择“新建New”按钮。 + +![创建一个新的 VirtualBox 虚拟机][9] + +选择使用的虚拟机的名称、操作系统(Linux)和 Linux 类型(例如 Debian 64 位)。 + +![命名 VirtualBox 虚拟机][11] + +下一步,配置虚拟机内存大小,使用默认值 1024 MB。接下来选择 “动态分配dynamically allocated”虚拟磁盘并在虚拟机中添加 `Moodle.iso` 镜像。 + +![添加 Moodle.iso 到虚拟机][12] + +将你的网络设置从 NAT 更改为 “桥接模式Bridged adapter”。然后启动虚拟机并安装 ISO 以创建 Moodle 虚拟机。在安装过程中,系统将提示为 root 帐户、MySQL 和Moodle 创建密码。Moodle 密码必须至少包含八个字符,至少一个大写字母和至少一个特殊字符。 + +重启虚拟机。安装完成后,请确保将 Moodle 应用配置内容记录在安全的地方。(安装后,可以根据需要删除 ISO 文件。) + +![Moodle 应用配置][13] + +重要提示,在互联网上的任何人还看不到你的 Moodle 实例。它仅存在于你的本地网络中:现在只有建筑物中与你连接到相同的路由器或 wifi 接入点的人可以访问你的站点。全世界的互联网无法连接到它,因为你位于防火墙(可能嵌入在路由器中,还可能嵌入在计算机中)的后面。有关网络配置的更多信息,请阅读 Seth Kenlon 关于 [打开端口和通过防火墙进行流量路由][14] 的文章。 + +### 开始使用 Moodle + +现在你可以登录到 Moodle 机器并熟悉该软件了。使用默认的用户名 `admin` 和创建 Moodle VM 时设置的密码登录 Moodle。 + +![Moodle 登录界面][15] + +首次登录后,你将看到初始的 Moodle 网站的主仪表盘。 + +![Moodle 管理员仪表盘][16] + +默认的应用名称是 “Turnkey Moodle”,但是可以很容易地对其进行更改以适合你的学校、课堂或其他需要和选择。要使你的 Moodle 网站个性化,请在用户界面左侧的菜单中,选择“站点首页Site home”。然后,点击屏幕右侧的 “设置Settings” 图标,然后选择 “编辑设置Edit settings”。 + +![Moodle 设置][17] + +你可以根据需要更改站点名称,并添加简短名称和站点描述。 + +![Moodle 网站名][18] + +确保滚动到底部并保存更改。现在,你的网站已定制好。 + +![Moodle 保存更改][19] + +默认类别为其他,这不会帮助人们识别你网站的目的。要添加类别,请返回主仪表盘,然后从左侧菜单中选择 “站点管理Site administration”。 在 “课程Courses”下,选择 “添加类别Add a category”并输入有关你的网站的详细信息。 + +![在 Moodle 中添加类别选项][20] + +要添加课程,请返回 “站点管理Site administration”,然后单击 “添加新课程Add a new course”。你将看到一系列选项,例如为课程命名、提供简短名称、设定类别以及设置课程的开始和结束日期。你还可以为课程形式设置选项,例如社交、每周式课程、主题,以及其外观、文件上传大小、完成情况跟踪等等。 + +![在 Moodle 中添加课程选项][21] + +### 添加和管理用户 + +现在,你已经设置了课程,你可以添加用户。有多种方法可以做到这一点。如果你是家庭教师,则手动输入是一个不错的开始。Moodle 支持基于电子邮件的注册、[LDAP][22]、[Shibboleth(口令或暗语)][23] 和许多其他方式等。校区和其他较大的机构可以用逗号分隔的文件上传用户。也可以批量添加密码,并在首次登录时强制更改密码。有关更多信息,一定要查阅 Moodle [文档][24]。 + +Moodle 是一个非常细化的、面向许可的环境。使用 Moodle 的菜单将策略和角色分配给用户并执行这些分配很容易。 + +Moodle 中有许多角色,每个角色都有特定的特权和许可。默认角色有管理员、课程创建者、教师、非编辑教师、学生、来宾和经过身份验证的用户,但你可以添加其他角色。 + +### 为课程添加内容 + +一旦搭建了 Moodle 网站并设置了课程,就可以向课程中添加内容。Moodle 拥有创建出色内容所需要的所有工具,并且它建立在强调 [社会建构主义][25] 观点的坚实教学法之上。 + +我创建了一个名为 “Code with [Mu][26]” 的示例课程。它在 “编程Programming” 类别和 “Python” 子类别中。 + +![Moodle 课程列表][27] + +我为课程选择了每周式课程,默认为四个星期。使用编辑工具,我隐藏了除课程第一周以外的所有内容。这样可以确保我的学生始终专注于材料。 + +作为教师或 Moodle 管理员,我可以通过单击 “添加活动或资源Add an activity or resource” 来将活动添加到每周的教学中。 + +![在 Moodle 中添加活动][28] + +我会看到一个弹出窗口,其中包含可以分配给我的学生的各种活动。 + +![Moodle 活动菜单][29] + +Moodle 的工具和活动使我可以轻松地创建学习材料,并以一个简短的测验来结束一周的学习。 + +![Moodle 活动清单][30] + +你可以使用 1600 多个插件来扩展 Moodle,包括新的活动、问题类型,与其他系统的集成等等。例如,[BigBlueButton][31] 插件支持幻灯片共享、白板、音频和视频聊天以及分组讨论。其他值得考虑的包括用于视频会议的 [Jitsi][32] 插件、[抄袭检查器][33] 和用于颁发徽章的 [开放徽章工厂][34]。 + +### 继续探索 Moodle + +Moodle 是一个功能强大的 LMS,我希望此介绍能引起你的兴趣,以了解更多信息。有很多出色的 [指南][35] 可以帮助你提高技能,如果想要查看 Moodle 的内容,可以在其 [演示站点][36] 上查看运行中的 Moodle;如果你想了解 Moodle 的底层结构或为开发做出 [贡献][38],也可以访问 [Moodle 的源代码][37]。如果你喜欢在旅途中工作,Moodle 也有一款出色的 [移动应用][39],适用于 iOS 和 Android。在 [Twitter][40]、[Facebook][41] 和 [LinkedIn][42] 上关注 Moodle,以了解最新消息。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/10/moodle + +作者:[Don Watkins][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_desk_home_laptop_browser.png?itok=Y3UVpY0l (Digital images of a computer desktop) +[2]: https://moodle.org/ +[3]: https://docs.moodle.org/19/en/GNU_General_Public_License +[4]: https://dougiamas.com/about/ +[5]: https://docs.moodle.org/39/en/History +[6]: https://docs.moodle.org/39/en/Installation_quick_guide#Basic_Requirements +[7]: https://www.turnkeylinux.org/ +[8]: https://www.turnkeylinux.org/download?file=turnkey-moodle-16.0-buster-amd64.iso +[9]: https://opensource.com/sites/default/files/uploads/virtualbox_new.png (Create a new VirtualBox) +[10]: https://creativecommons.org/licenses/by-sa/4.0/ +[11]: https://opensource.com/sites/default/files/uploads/virtualbox_namevm.png (Naming the VirtualBox VM) +[12]: https://opensource.com/sites/default/files/uploads/virtualbox_attach-iso.png (Attaching Moodle.iso to VM) +[13]: https://opensource.com/sites/default/files/uploads/moodle_appliance.png (Moodle appliance settings) +[14]: https://opensource.com/article/20/9/firewall +[15]: https://opensource.com/sites/default/files/uploads/moodle_login.png (Moodle login screen) +[16]: https://opensource.com/sites/default/files/uploads/moodle_dashboard.png (Moodle admin dashboard) +[17]: https://opensource.com/sites/default/files/uploads/moodle_settings.png (Moodle settings) +[18]: https://opensource.com/sites/default/files/uploads/moodle_name-site.png (Name Moodle site) +[19]: https://opensource.com/sites/default/files/uploads/moodle_saved.png (Moodle changes saved) +[20]: https://opensource.com/sites/default/files/uploads/moodle_addcategory.png (Add category option in Moodle) +[21]: https://opensource.com/sites/default/files/uploads/moodle_addcourse.png (Add course option in Moodle) +[22]: https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol +[23]: https://www.shibboleth.net/ +[24]: https://docs.moodle.org/39/en/Main_page +[25]: https://docs.moodle.org/39/en/Pedagogy#How_Moodle_tries_to_support_a_Social_Constructionist_view +[26]: https://opensource.com/article/20/9/teach-python-mu +[27]: https://opensource.com/sites/default/files/uploads/moodle_choosecourse.png (Moodle course list) +[28]: https://opensource.com/sites/default/files/uploads/moodle_addactivity_0.png (Add activity in Moodle) +[29]: https://opensource.com/sites/default/files/uploads/moodle_activitiesmenu.png (Moodle activities menu) +[30]: https://opensource.com/sites/default/files/uploads/moodle_activitieschecklist.png (Moodle activities checklist) +[31]: https://moodle.org/plugins/mod_bigbluebuttonbn +[32]: https://moodle.org/plugins/mod_jitsi +[33]: https://moodle.org/plugins/plagiarism_unicheck +[34]: https://moodle.org/plugins/local_obf +[35]: https://learn.moodle.org/ +[36]: https://school.moodledemo.net/ +[37]: https://git.in.moodle.com/moodle/moodle +[38]: https://git.in.moodle.com/moodle/moodle/-/blob/master/CONTRIBUTING.txt +[39]: https://download.moodle.org/mobile/ +[40]: https://twitter.com/moodle +[41]: https://www.facebook.com/moodle +[42]: https://www.linkedin.com/company/moodle/ diff --git a/published/202103/20201215 6 container concepts you need to understand.md b/published/202103/20201215 6 container concepts you need to understand.md new file mode 100644 index 0000000000..30d8ba7631 --- /dev/null +++ b/published/202103/20201215 6 container concepts you need to understand.md @@ -0,0 +1,104 @@ +[#]: collector: (lujun9972) +[#]: translator: (AmorSu) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13170-1.html) +[#]: subject: (6 container concepts you need to understand) +[#]: via: (https://opensource.com/article/20/12/containers-101) +[#]: author: (Mike Calizo https://opensource.com/users/mcalizo) + +6 个必知必会的关于容器的概念 +====== + +> 容器现在是无所不在,它们已经快速的改变了 IT 格局。关于容器你需要知道一些什么呢? + +![](https://img.linux.net.cn/data/attachment/album/202103/02/204713fgp7fasvm4ii2ire.jpg) + +因为容器给企业所带来的巨大的价值和大量的好处,它快速的改变了 IT 格局。几乎所有最新的业务创新,都有容器化贡献的一部分因素,甚至是主要因素。 + +在现代化应用架构中,能够快速的把变更交付到生产环境的能力,让你比你的竞争对手更胜一筹。容器通过使用微服务架构,帮助开发团队开发功能、更小的失败、更快的恢复,从而加快交付速度。容器化还让应用软件能够快速启动、按需自动扩展云资源。还有,[DevOps][2] 通过灵活性、移动性、和有效性让产品可以尽快进入市场,从而将容器化的所能带来的好处最大化。 + +在 DevOps 中,虽然速度、敏捷、灵活是容器化的主要保障,但安全则是一个重要的因素。这就导致了 DevSecOps 的出现。它从一开始,到贯穿容器化应用的整个生命周期,都始终将安全融合到应用的开发中。默认情况下,容器化大大地增强了安全性,因为它将应用和宿主机以及其他的容器化应用相互隔离开来。 + +### 什么是容器? + +容器是单体式应用程序所遗留的问题的解决方案。虽然单体式有它的优点,但是它阻碍了组织以敏捷的方式快速前进。而容器则让你能够将单体式分解成 [微服务][3]。 + +本质上来说,容器只是一些轻量化组件的应用集,比如软件依赖、库、配置文件等等,然后运行在一个隔离的环境之中,这个隔离的环境又是运行在传统操作系统之上的,或者为了可移植性和灵活性而运行在虚拟化环境之上。 + +![容器的架构][4] + +总而言之,容器通过利用像 cgroup、 [内核命名空间][6] 和 [SELinux][7] 这样的内核技术来实现隔离。容器跟宿主机共用一个内核,因此比虚拟机占用更少的资源。 + +### 容器的优势 + +这种架构所带来的敏捷性是虚拟机所不可能做到的。此外,在计算和内存资源方面,容器支持一种更灵活的模型,而且它支持突发资源模式,因此应用程序可以在需要的时候,在限定的范围内,使用更多的资源。用另一句话来说,容器提供的扩展性和灵活性,是你在虚拟机上运行的应用程序中所无法实现的。 + +容器让在公有云或者私有云上部署和分享应用变得非常容易。更重要的是,它所提供的连贯性,帮助运维和开发团队降低了在跨平台部署的过程中的复杂度。 + +容器还可以实现一套通用的构建组件,可以在开发的任何阶段拿来复用,从而可以重建出一样的环境供开发、测试、预备、生产使用,将“一次编写、到处执行”的概念加以扩展。 + +和虚拟化相比,容器使实现灵活性、连贯性和快速部署应用的能力变得更加简单 —— 这是 DevOps 的主要原则。 + +### Docker 因素 + +[Docker][8] 已经变成了容器的代名词。Docker 让容器技术发生彻底变革并得以推广普及,虽然早在 Docker 之前容器技术就已经存在。这些容器技术包括 AIX 工作负载分区、 Solaris 容器、以及 Linux 容器([LXC][9]),后者被用来 [在一台 Linux 宿主机上运行多个 Linux 环境][10]。 + +### Kubernetes 效应 + +Kubernetes 如今已被广泛认为是 [编排引擎][11] 中的领导者。在过去的几年里,[Kubernetes 的普及][12] 加上容器技术的应用日趋成熟,为运维、开发、以及安全团队可以拥抱日益变革的行业,创造了一个理想的环境。 + +Kubernetes 为容器的管理提供了完整全面的解决方案。它可以在一个集群中运行容器,从而实现类似自动扩展云资源这样的功能,这些云资源包括:自动的、分布式的事件驱动的应用需求。这就保证了“免费的”高可用性。(比如,开发和运维都不需要花太大的劲就可以实现) + +此外,在 OpenShift 和 类似 Kubernetes 这样的企业的帮助下,容器的应用变得更加的容易。 + +![Kubernetes 集群][13] + +### 容器会替代虚拟机吗? + +[KubeVirt][14] 和类似的 [开源][15] 项目很大程度上表明,容器将会取代虚拟机。KubeVirt 通过将虚拟机转化成容器,把虚拟机带入到容器化的工作流中,因此它们就可以利用容器化应用的优势。 + +现在,容器和虚拟机更多的是互补的关系,而不是相互竞争的。容器在虚拟机上面运行,因此增加可用性,特别是对于那些要求有持久性的应用。同时容器可以利用虚拟化技术的优势,让硬件的基础设施(如:内存和网络)的管理更加便捷。 + +### 那么 Windows 容器呢? + +微软和开源社区方面都对 Windows 容器的成功实现做了大量的推动。Kubernetes 操作器Operator 加速了 Windows 容器的应用进程。还有像 OpenShift 这样的产品现在可以启用 [Windows 工作节点][16] 来运行 Windows 容器。 + +Windows 的容器化创造出巨大的诱人的可能性。特别是对于使用混合环境的企业。在 Kubernetes 集群上运行你最关键的应用程序,是你成功实现混合云/多种云环境的目标迈出的一大步。 + +### 容器的未来 + +容器在 IT 行业日新月异的变革中扮演着重要的角色,因为企业在向着快速、敏捷的交付软件及解决方案的方向前进,以此来 [超越竞争对手][17]。 + +容器会继续存在下去。在不久的将来,其他的使用场景,比如边缘计算中的无服务器,将会浮现出来,并且更深地影响我们对从数字设备来回传输数据的速度的认知。唯一在这种变化中存活下来的方式,就是去应用它们。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/12/containers-101 + +作者:[Mike Calizo][a] +选题:[lujun9972][b] +译者:[AmorSu](https://github.com/amorsu) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mcalizo +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/kubernetes_containers_ship_lead.png?itok=9EUnSwci (Ships at sea on the web) +[2]: https://opensource.com/resources/devops +[3]: https://opensource.com/resources/what-are-microservices +[4]: https://opensource.com/sites/default/files/uploads/container_architecture.png (Container architecture) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/article/19/10/namespaces-and-containers-linux +[7]: https://opensource.com/article/20/11/selinux-containers +[8]: https://opensource.com/resources/what-docker +[9]: https://linuxcontainers.org/ +[10]: https://opensource.com/article/18/11/behind-scenes-linux-containers +[11]: https://opensource.com/article/20/11/orchestration-vs-automation +[12]: https://enterprisersproject.com/article/2020/6/kubernetes-statistics-2020 +[13]: https://opensource.com/sites/default/files/uploads/kubernetes_cluster.png (Kubernetes cluster) +[14]: https://kubevirt.io/ +[15]: https://opensource.com/resources/what-open-source +[16]: https://www.openshift.com/blog/announcing-the-community-windows-machine-config-operator-on-openshift-4.6 +[17]: https://www.imd.org/research-knowledge/articles/the-battle-for-digital-disruption-startups-vs-incumbents/ diff --git a/published/202103/20210113 Turn your Raspberry Pi into a HiFi music system.md b/published/202103/20210113 Turn your Raspberry Pi into a HiFi music system.md new file mode 100644 index 0000000000..4f25621cf2 --- /dev/null +++ b/published/202103/20210113 Turn your Raspberry Pi into a HiFi music system.md @@ -0,0 +1,83 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13209-1.html) +[#]: subject: (Turn your Raspberry Pi into a HiFi music system) +[#]: via: (https://opensource.com/article/21/1/raspberry-pi-hifi) +[#]: author: (Peter Czanik https://opensource.com/users/czanik) + +把你的树莓派变成一个 HiFi 音乐系统 +====== + +> 为你的朋友、家人、同事或其他任何拥有廉价发烧设备的人播放音乐。 + +![](https://img.linux.net.cn/data/attachment/album/202103/17/094819ad5vzy0kqwvlxeee.jpg) + +在过去的 10 年里,我大部分时间都是远程工作,但当我走进办公室时,我坐在一个充满内向的同伴的房间里,他们很容易被环境噪音和谈话所干扰。我们发现,听音乐可以抑制办公室的噪音,让声音不那么扰人,用愉快的音乐提供一个愉快的工作环境。 + +起初,我们的一位同事带来了一些老式的有源电脑音箱,把它们连接到他的桌面电脑上,然后问我们想听什么。它可以工作,但音质不是很好,而且只有当他在办公室的时候才可以使用。接下来,我们又买了一对 Altec Lansing 音箱。音质有所改善,但没有什么灵活性。 + +不久之后,我们得到了一台通用 ARM 单板计算机(SBC),这意味着任何人都可以通过 Web 界面控制播放列表和音箱。但一块普通的 ARM 开发板意味着我们不能使用流行的音乐设备软件。由于非标准的内核,更新操作系统是一件很痛苦的事情,而且 Web 界面也经常出现故障。 + +当团队壮大并搬进更大的房间后,我们开始梦想着有更好音箱和更容易处理软件和硬件组合的方法。 + +为了用一种相对便宜、灵活、音质好的方式解决我们的问题,我们用树莓派、音箱和开源软件开发了一个办公室 HiFi。 + +### HiFi 硬件 + +用一个专门的 PC 来播放背景音乐就有点过分了。它昂贵、嘈杂(除非是静音的,但那就更贵了),而且不环保。即使是最便宜的 ARM 板也能胜任这个工作,但从软件的角度来看,它们往往存在问题。树莓派还是比较便宜的,虽然不是标准的计算机,但在硬件和软件方面都有很好的支持。 + +接下来的问题是:用什么音箱。质量好的、有源的音箱很贵。无源音箱的成本较低,但需要一个功放,这需要为这套设备增加另一个盒子。它们还必须使用树莓派的音频输出;虽然可以工作,但并不是最好的,特别是当你已经在高质量的音箱和功放上投入资金的时候。 + +幸运的是,在数以千计的树莓派硬件扩展中,有内置数字模拟转换器(DAC)的功放。我们选择了 [HiFiBerry 的 Amp][2]。它在我们买来后不久就停产了(被采样率更好的 Amp+ 型号取代),但对于我们的目的来说,它已经足够好了。在开着空调的情况下,我想无论如何你也听不出 48kHz 或 192kHz 的 DAC 有什么不同。 + +音箱方面,我们选择了 [Audioengine P4][3],是在某店家清仓大甩卖的时候买的,价格超低。它很容易让我们的办公室房间充满了声音而不失真(并且还能传到我们的房间之外,有一些失真,隔壁的工程师往往不喜欢)。 + +### HiFi 软件 + +在我们旧的通用 ARM SBC 上我们需要维护一个 Ubuntu,使用一个固定的、古老的、在软件包仓库外的系统内核,这是有问题的。树莓派操作系统包括一个维护良好的内核包,使其成为一个稳定且易于更新的基础系统,但它仍然需要我们定期更新 Python 脚本来访问 Spotify 和 YouTube。对于我们的目的来说,这有点过于高维护。 + +幸运的是,使用树莓派作为基础意味着有许多现成的软件设备可用。 + +我们选择了 [Volumio][4],这是一个将树莓派变成音乐播放设备的开源项目。安装是一个简单的*一步步完成*的过程。安装和升级是完全无痛的,而不用辛辛苦苦地安装和维护一个操作系统,并定期调试破损的 Python 代码。配置 HiFiBerry 功放不需要编辑任何配置文件,你只需要从列表中选择即可。当然,习惯新的用户界面需要一定的时间,但稳定性和维护的便捷性让这个改变是值得的。 + +![Volumio interface][5] + +### 播放音乐并体验 + +虽然大流行期间我们都在家里办公,不过我把办公室的 HiFi 安装在我的家庭办公室里,这意味着我可以自由支配它的运行。一个不断变化的用户界面对于一个团队来说会很痛苦,但对于一个有研发背景的人来说,自己玩一个设备,变化是很有趣的。 + +我不是一个程序员,但我有很强的 Linux 和 Unix 系统管理背景。这意味着,虽然我觉得修复坏掉的 Python 代码很烦人,但 Volumio 对我来说却足够完美,足够无聊(这是一个很好的“问题”)。幸运的是,在树莓派上播放音乐还有很多其他的可能性。 + +作为一个终端狂人(我甚至从终端窗口启动 LibreOffice),我主要使用 Music on Console([MOC][6])来播放我的网络存储(NAS)中的音乐。我有几百张 CD,都转换成了 [FLAC][7] 文件。而且我还从 [BandCamp][8] 或 [Society of Sound][9] 等渠道购买了许多数字专辑。 + +另一个选择是 [音乐播放器守护进程(MPD)][10]。把它运行在树莓派上,我可以通过网络使用 Linux 和 Android 的众多客户端之一与我的音乐进行远程交互。 + +### 音乐不停歇 + +正如你所看到的,创建一个廉价的 HiFi 系统在软件和硬件方面几乎是无限可能的。我们的解决方案只是众多解决方案中的一个,我希望它能启发你建立适合你环境的东西。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/1/raspberry-pi-hifi + +作者:[Peter Czanik][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/czanik +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/hi-fi-stereo-vintage.png?itok=KYY3YQwE (HiFi vintage stereo) +[2]: https://www.hifiberry.com/products/amp/ +[3]: https://audioengineusa.com/shop/passivespeakers/p4-passive-speakers/ +[4]: https://volumio.org/ +[5]: https://opensource.com/sites/default/files/uploads/volumeio.png (Volumio interface) +[6]: https://en.wikipedia.org/wiki/Music_on_Console +[7]: https://xiph.org/flac/ +[8]: https://bandcamp.com/ +[9]: https://realworldrecords.com/news/society-of-sound-statement/ +[10]: https://www.musicpd.org/ diff --git a/published/202103/20210118 KDE Customization Guide- Here are 11 Ways You Can Change the Look and Feel of Your KDE-Powered Linux Desktop.md b/published/202103/20210118 KDE Customization Guide- Here are 11 Ways You Can Change the Look and Feel of Your KDE-Powered Linux Desktop.md new file mode 100644 index 0000000000..5f5ced02d5 --- /dev/null +++ b/published/202103/20210118 KDE Customization Guide- Here are 11 Ways You Can Change the Look and Feel of Your KDE-Powered Linux Desktop.md @@ -0,0 +1,171 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13172-1.html) +[#]: subject: (KDE Customization Guide: Here are 11 Ways You Can Change the Look and Feel of Your KDE-Powered Linux Desktop) +[#]: via: (https://itsfoss.com/kde-customization/) +[#]: author: (Dimitrios Savvopoulos https://itsfoss.com/author/dimitrios/) + +KDE 桌面环境定制指南 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/03/234801udzaled8erltd78u.jpg) + +[KDE Plasma 桌面][1] 无疑是定制化的巅峰,因为你几乎可以改变任何你想要的东西。你甚至可以让它充当 [平铺窗口管理器][2]。 + +KDE Plasma 提供的定制化程度会让初学者感到困惑。用户会迷失在层层深入的选项之中。 + +为了解决这个问题,我将向你展示你应该注意的 KDE Plasma 定制的关键点。这里有 11 种方法可以改变你的 KDE 桌面的外观和感觉。 + +![][3] + +### 定制 KDE Plasma + +我在本教程中使用了 [KDE Neon][4],但你可以在任何使用 KDE Plasma 桌面的发行版中遵循这些方法。 + +#### 1、Plasma 桌面小工具 + +桌面小工具可以增加用户体验的便利性,因为你可以立即访问桌面上的重要项目。 + +现在学生和专业人士使用电脑的时候越来越多,其中一个有用的小部件是便签。 + +右键点击桌面,选择“添加小工具Add Widgets”。 + +![][5] + +选择你喜欢的小部件,然后简单地将其拖放到桌面上。 + +![][6] + +#### 2、桌面壁纸 + +不用说,更换壁纸可以改变桌面的外观。 + +![][7] + +在“壁纸Wallpaper”选项卡中,你可以改变的不仅仅是壁纸。从“布局Layout”下拉菜单中,你还可以选择桌面是否放置图标。 + +“文件夹视图Folder View”布局的命名来自于主目录中的传统桌面文件夹,你可以在那里访问你的桌面文件。因此,“文件夹视图Folder View”选项将保留桌面上的图标。 + +如果你选择“桌面Desktop”布局,它会使你的桌面图标保持自由而普通。当然,你仍然可以访问主目录下的桌面文件夹。 + +![][8] + +在“壁纸类型Wallpaper Type”中,你可以选择是否要壁纸,是静止的还是变化的,最后在“位置Positioning”中,选择它在屏幕上的样子。 + +#### 3、鼠标动作 + +每一个鼠标按键都可以配置为以下动作之一: + + * 切换窗口Switch Window + * 切换桌面Switch Desktop + * 粘贴Paste + * 标准菜单Standard Menu + * 应用程序启动器Application Launcher + * 切换活动区Switch Activity + +右键默认设置为标准菜单Standard Menu,也就是在桌面上点击右键时的菜单。点击旁边的设置图标可以更改动作。 + +![][9] + +#### 4、桌面内容的位置 + +只有在壁纸选项卡中选择“文件夹视图”时,该选项才可用。默认情况下,桌面上显示的内容是你在主目录下的“桌面Desktop”文件夹中的内容。这个位置选项卡让你可以选择不同的文件夹来改变桌面上的内容。 + +![][10] + +#### 5、桌面图标 + +在这里,你可以选择图标的排列方式(水平或垂直)、左右对齐、排序标准及其大小。如果这些还不够,你还可以探索其他的美学功能。 + +![][11] + +#### 6、桌面过滤器 + +让我们坦然面对自己吧! 相信每个用户最后都会在某些时候出现桌面凌乱的情况。如果你的桌面变得乱七八糟,找不到文件,你可以按名称或类型应用过滤器,找到你需要的文件。虽然,最好是养成一个良好的文件管理习惯! + +![][12] + +#### 7、应用仪表盘 + +如果你喜欢 GNOME 3 的应用程序启动器,那么你可以试试 KDE 应用程序仪表板。你所要做的就是右击菜单图标 > “显示替代品Show Alternatives”。 + +![][13] + +点击“应用仪表盘Application Dashboard”。 + +![][14] + +#### 8、窗口管理器主题 + +就像你在 [Xfce 自定义教程][15] 中看到的那样,你也可以在 KDE 中独立改变窗口管理器的主题。这样你就可以为面板选择一种主题,为窗口管理器选择另外一种主题。如果预装的主题不够用,你可以下载更多的主题。 + +不过受 [MX Linux][16] Xfce 版的启发,我还是忍不住选择了我最喜欢的 “Arc Dark”。 + +导航到“设置Settings” > “应用风格Application Style” > “窗口装饰Window decorations” > “主题Theme”。 + +![][17] + +#### 9、全局主题 + +如上所述,KDE Plasma 面板的外观和感觉可以从“设置Settings” > “全局主题Global theme”选项卡中进行配置。预装的主题数量并不多,但你可以下载一个适合自己口味的主题。不过默认的 “Breeze Dark” 是一款养眼的主题。 + +![][18] + +#### 10、系统图标 + +系统图标样式对桌面的外观有很大的影响。无论你选择哪一种,如果你的全局主题是深色的,你应该选择深色图标版本。唯一的区别在于图标文字对比度上,图标文字对比度应该与面板颜色反色,使其具有可读性。你可以在系统设置中轻松访问“图标Icons”标签。 + +![][19] + +#### 11、系统字体 + +系统字体并不是定制的重点,但如果你每天有一半的时间都在屏幕前,它可能是眼睛疲劳的因素之一。有阅读障碍的用户会喜欢 [OpenDyslexic][20] 字体。我个人选择的是 Ubuntu 字体,不仅我觉得美观,而且是在屏幕前度过一天的好字体。 + +当然,你也可以通过下载外部资源来 [在 Linux 系统上安装更多的字体][21]。 + +![][22] + +### 总结 + +KDE Plasma 是 Linux 社区最灵活和可定制的桌面之一。无论你是否是一个修理工,KDE Plasma 都是一个不断发展的桌面环境,具有惊人的现代功能。更好的是,它也可以在性能中等的系统配置上进行管理。 + +现在,我试图让本指南对初学者友好。当然,可以有更多的高级定制,比如那个 [窗口切换动画][23]。如果你知道一些别的技巧,为什么不在评论区与我们分享呢? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/kde-customization/ + +作者:[Dimitrios Savvopoulos][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/dimitrios/ +[b]: https://github.com/lujun9972 +[1]: https://kde.org/plasma-desktop/ +[2]: https://github.com/kwin-scripts/kwin-tiling +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/kde-neon-neofetch.png?resize=800%2C600&ssl=1 +[4]: https://itsfoss.com/kde-neon-review/ +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/16-kde-neon-add-widgets.png?resize=800%2C500&ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/17-kde-neon-widgets.png?resize=800%2C768&ssl=1 +[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/1-kde-neon-configure-desktop.png?resize=800%2C500&ssl=1 +[8]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/2-kde-neon-wallpaper.png?resize=800%2C600&ssl=1 +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/3-kde-neon-mouse-actions.png?resize=800%2C600&ssl=1 +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/10-kde-neon-location.png?resize=800%2C650&ssl=1 +[11]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/4-kde-neon-desktop-icons.png?resize=798%2C635&ssl=1 +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/11-kde-neon-desktop-icons-filter.png?resize=800%2C650&ssl=1 +[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/5-kde-neon-show-alternatives.png?resize=800%2C500&ssl=1 +[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/6-kde-neon-application-dashboard.png?resize=800%2C450&ssl=1 +[15]: https://itsfoss.com/customize-xfce/ +[16]: https://itsfoss.com/mx-linux-kde-edition/ +[17]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/12-kde-neon-window-manager.png?resize=800%2C512&ssl=1 +[18]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/15-kde-neon-global-theme.png?resize=800%2C524&ssl=1 +[19]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/13-kde-neon-system-icons.png?resize=800%2C524&ssl=1 +[20]: https://www.opendyslexic.org/about +[21]: https://itsfoss.com/install-fonts-ubuntu/ +[22]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/14-kde-neon-fonts.png?resize=800%2C524&ssl=1 +[23]: https://itsfoss.com/customize-task-switcher-kde/ diff --git a/published/202103/20210121 Convert your Windows install into a VM on Linux.md b/published/202103/20210121 Convert your Windows install into a VM on Linux.md new file mode 100644 index 0000000000..5262d6d8b6 --- /dev/null +++ b/published/202103/20210121 Convert your Windows install into a VM on Linux.md @@ -0,0 +1,244 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13240-1.html) +[#]: subject: (Convert your Windows install into a VM on Linux) +[#]: via: (https://opensource.com/article/21/1/virtualbox-windows-linux) +[#]: author: (David Both https://opensource.com/users/dboth) + +在 Linux 上将你的 Windows 系统转换为虚拟机 +====== + +> 下面是我如何配置 VirtualBox 虚拟机以在我的 Linux 工作站上使用物理的 Windows 操作系统。 + +![](https://img.linux.net.cn/data/attachment/album/202103/27/105053kyd66r1cpr1s2vz2.jpg) + +我经常使用 VirtualBox 来创建虚拟机来测试新版本的 Fedora、新的应用程序和很多管理工具,比如 Ansible。我甚至使用 VirtualBox 来测试创建一个 Windows 访客主机。 + +我从来没有在我的任何一台个人电脑上使用 Windows 作为我的主要操作系统,甚至也没在虚拟机中执行过一些用 Linux 无法完成的冷门任务。不过,我确实为一个需要使用 Windows 下的财务程序的组织做志愿者。这个程序运行在办公室经理的电脑上,使用的是预装的 Windows 10 Pro。 + +这个财务应用程序并不特别,[一个更好的 Linux 程序][2] 可以很容易地取代它,但我发现许多会计和财务主管极不愿意做出改变,所以我还没能说服我们组织中的人迁移。 + +这一系列的情况,加上最近的安全恐慌,使得我非常希望将运行 Windows 的主机转换为 Fedora,并在该主机上的虚拟机中运行 Windows 和会计程序。 + +重要的是要明白,我出于多种原因极度不喜欢 Windows。主要原因是,我不愿意为了在新的虚拟机上安装它而再花钱购买一个 Windows 许可证(Windows 10 Pro 大约需要 200 美元)。此外,Windows 10 在新系统上设置时或安装后需要足够的信息,如果微软的数据库被攻破,破解者就可以窃取一个人的身份。任何人都不应该为了注册软件而需要提供自己的姓名、电话号码和出生日期。 + +### 开始 + +这台实体电脑已经在主板上唯一可用的 m.2 插槽中安装了一个 240GB 的 NVMe m.2 的 SSD 存储设备。我决定在主机上安装一个新的 SATA SSD,并将现有的带有 Windows 的 SSD 作为 Windows 虚拟机的存储设备。金士顿在其网站上对各种 SSD 设备、外形尺寸和接口做了很好的概述。 + +这种方法意味着我不需要重新安装 Windows 或任何现有的应用软件。这也意味着,在这台电脑上工作的办公室经理将使用 Linux 进行所有正常的活动,如电子邮件、访问 Web、使用 LibreOffice 创建文档和电子表格。这种方法增加了主机的安全性。唯一会使用 Windows 虚拟机的时间是运行会计程序。 + +### 先备份 + +在做其他事情之前,我创建了整个 NVMe 存储设备的备份 ISO 镜像。我在 500GB 外置 USB 存储盘上创建了一个分区,在其上创建了一个 ext4 文件系统,然后将该分区挂载到 `/mnt`。我使用 `dd` 命令来创建镜像。 + +我在主机中安装了新的 500GB SATA SSD,并从临场live USB 上安装了 Fedora 32 Xfce 偏好版spin。在安装后的初次重启时,在 GRUB2 引导菜单上,Linux 和 Windows 操作系统都是可用的。此时,主机可以在 Linux 和 Windows 之间进行双启动。 + +### 在网上寻找帮助 + +现在我需要一些关于创建一个使用物理硬盘或 SSD 作为其存储设备的虚拟机的信息。我很快就在 VirtualBox 文档和互联网上发现了很多关于如何做到这一点的信息。虽然 VirtualBox 文档初步帮助了我,但它并不完整,遗漏了一些关键信息。我在互联网上找到的大多数其他信息也很不完整。 + +在我们的记者 Joshua Holm 的帮助下,我得以突破这些残缺的信息,并以一个可重复的流程来完成这项工作。 + +### 让它发挥作用 + +这个过程其实相当简单,虽然需要一个玄妙的技巧才能实现。当我准备好这一步的时候,Windows 和 Linux 操作系统已经到位了。 + +首先,我在 Linux 主机上安装了最新版本的 VirtualBox。VirtualBox 可以从许多发行版的软件仓库中安装,也可以直接从 Oracle VirtualBox 仓库中安装,或者从 VirtualBox 网站上下载所需的包文件并在本地安装。我选择下载 AMD64 版本,它实际上是一个安装程序而不是一个软件包。我使用这个版本来规避一个与这个特定项目无关的问题。 + +安装过程总是在 `/etc/group` 中创建一个 `vboxusers` 组。我把打算运行这个虚拟机的用户添加到 `/etc/group` 中的 `vboxusers` 和 `disk` 组。将相同的用户添加到 `disk` 组是很重要的,因为 VirtualBox 是以启动它的用户身份运行的,而且还需要直接访问 `/dev/sdx` 特殊设备文件才能在这种情况下工作。将用户添加到 `disk` 组可以提供这种级别的访问权限,否则他们就不会有这种权限。 + +然后,我创建了一个目录来存储虚拟机,并赋予它 `root.vboxusers` 的所有权和 `775` 的权限。我使用 `/vms` 用作该目录,但可以是任何你想要的目录。默认情况下,VirtualBox 会在创建虚拟机的用户的子目录中创建新的虚拟机。这将使多个用户之间无法共享对虚拟机的访问,从而不会产生巨大的安全漏洞。将虚拟机目录放置在一个可访问的位置,可以共享虚拟机。 + +我以非 root 用户的身份启动 VirtualBox 管理器。然后,我使用 VirtualBox 的“偏好Preferences => 一般General”菜单将“默认机器文件夹Default Machine Folder”设置为 `/vms` 目录。 + +我创建的虚拟机没有虚拟磁盘。“类型Type” 应该是 `Windows`,“版本Version”应该设置为 `Windows 10 64-bit`。为虚拟机设置一个合理的内存量,但只要虚拟机处于关闭状态,以后可以更改。在安装的“硬盘Hard disk”页面,我选择了 “不要添加虚拟硬盘Do not add a virtual hard disk”,点击“创建Create”。新的虚拟机出现在VirtualBox 管理器窗口中。这个过程也创建了 `/vms/Test1` 目录。 + +我使用“高级Advanced”菜单在一个页面上设置了所有的配置,如图 1 所示。“向导模式Guided Mode”可以获得相同的信息,但需要更多的点击,以通过一个窗口来进行每个配置项目。它确实提供了更多的帮助内容,但我并不需要。 + +![VirtualBox 对话框:创建新的虚拟机,但不添加硬盘][3] + +*图 1:创建一个新的虚拟机,但不要添加硬盘。* + +然后,我需要知道 Linux 给原始 Windows 硬盘分配了哪个设备。在终端会话中以 root 身份使用 `lshw` 命令来发现 Windows 磁盘的设备分配情况。在本例中,代表整个存储设备的设备是 `/dev/sdb`。 + +``` +# lshw -short -class disk,volume +H/W path           Device      Class          Description +========================================================= +/0/100/17/0        /dev/sda    disk           500GB CT500MX500SSD1 +/0/100/17/0/1                  volume         2047MiB Windows FAT volume +/0/100/17/0/2      /dev/sda2   volume         4GiB EXT4 volume +/0/100/17/0/3      /dev/sda3   volume         459GiB LVM Physical Volume +/0/100/17/1        /dev/cdrom  disk           DVD+-RW DU-8A5LH +/0/100/17/0.0.0    /dev/sdb    disk           256GB TOSHIBA KSG60ZMV +/0/100/17/0.0.0/1  /dev/sdb1   volume         649MiB Windows FAT volume +/0/100/17/0.0.0/2  /dev/sdb2   volume         127MiB reserved partition +/0/100/17/0.0.0/3  /dev/sdb3   volume         236GiB Windows NTFS volume +/0/100/17/0.0.0/4  /dev/sdb4   volume         989MiB Windows NTFS volume +[root@office1 etc]# +``` + +VirtualBox 不需要把虚拟存储设备放在 `/vms/Test1` 目录中,而是需要有一种方法来识别要从其启动的物理硬盘。这种识别是通过创建一个 `*.vmdk` 文件来实现的,该文件指向将作为虚拟机存储设备的原始物理磁盘。作为非 root 用户,我创建了一个 vmdk 文件,指向整个 Windows 设备 `/dev/sdb`。 + +``` +$ VBoxManage internalcommands createrawvmdk -filename /vms/Test1/Test1.vmdk -rawdisk /dev/sdb +RAW host disk access VMDK file /vms/Test1/Test1.vmdk created successfully. +``` + +然后,我使用 VirtualBox 管理器 “文件File => 虚拟介质管理器Virtual Media Manager” 对话框将 vmdk 磁盘添加到可用硬盘中。我点击了“添加Add”,文件管理对话框中显示了默认的 `/vms` 位置。我选择了 `Test1` 目录,然后选择了 `Test1.vmdk` 文件。然后我点击“打开Open”,`Test1.vmdk` 文件就显示在可用硬盘列表中。我选择了它,然后点击“关闭Close”。 + +下一步就是将这个 vmdk 磁盘添加到我们的虚拟机的存储设备中。在 “Test1 VM” 的设置菜单中,我选择了 “存储Storage”,并点击了添加硬盘的图标。这时打开了一个对话框,在一个名为“未连接Not attached”的列表中显示了 `Test1vmdk` 虚拟磁盘文件。我选择了这个文件,并点击了“选择Choose”按钮。这个设备现在显示在连接到 “Test1 VM” 的存储设备列表中。这个虚拟机上唯一的其他存储设备是一个空的 CD/DVD-ROM 驱动器。 + +我点击了“确定OK”,完成了将此设备添加到虚拟机中。 + +在新的虚拟机工作之前,还有一个项目需要配置。使用 VirtualBox 管理器设置对话框中的 “Test1 VM”,我导航到 “系统System => 主板Motherboard”页面,并在 “启用 EFIEnable EFI”的方框中打上勾。如果你不这样做,当你试图启动这个虚拟机时,VirtualBox 会产生一个错误,说明它无法找到一个可启动的介质。 + +现在,虚拟机从原始的 Windows 10 硬盘驱动器启动。然而,我无法登录,因为我在这个系统上没有一个常规账户,而且我也无法获得 Windows 管理员账户的密码。 + +### 解锁驱动器 + +不,本节并不是要破解硬盘的加密,而是要绕过众多 Windows 管理员账户之一的密码,而这些账户是不属于组织中某个人的。 + +尽管我可以启动 Windows 虚拟机,但我无法登录,因为我在该主机上没有账户,而向人们索要密码是一种可怕的安全漏洞。尽管如此,我还是需要登录这个虚拟机来安装 “VirtualBox Guest Additions”,它可以提供鼠标指针的无缝捕捉和释放,允许我将虚拟机调整到大于 1024x768 的大小,并在未来进行正常的维护。 + +这是一个完美的用例,Linux 的功能就是更改用户密码。尽管我是访问之前的管理员的账户来启动,但在这种情况下,他不再支持这个系统,我也无法辨别他的密码或他用来生成密码的模式。我就直接清除了上一个系统管理员的密码。 + +有一个非常不错的开源软件工具,专门用于这个任务。在 Linux 主机上,我安装了 `chntpw`,它的意思大概是:“更改 NT 的密码”。 + +``` +# dnf -y install chntpw +``` + +我关闭了虚拟机的电源,然后将 `/dev/sdb3` 分区挂载到 `/mnt` 上。我确定 `/dev/sdb3` 是正确的分区,因为它是我在之前执行 `lshw` 命令的输出中看到的第一个大的 NTFS 分区。一定不要在虚拟机运行时挂载该分区,那样会导致虚拟机存储设备上的数据严重损坏。请注意,在其他主机上分区可能有所不同。 + +导航到 `/mnt/Windows/System32/config` 目录。如果当前工作目录(PWD)不在这里,`chntpw` 实用程序就无法工作。请启动该程序。 + +``` +# chntpw -i SAM +chntpw version 1.00 140201, (c) Petter N Hagen +Hive name (from header): <\SystemRoot\System32\Config\SAM> +ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c +File size 131072 [20000] bytes, containing 11 pages (+ 1 headerpage) +Used for data: 367/44720 blocks/bytes, unused: 14/24560 blocks/bytes. + +<>========<> chntpw Main Interactive Menu <>========<> + +Loaded hives: + + 1 - Edit user data and passwords + 2 - List groups + - - - + 9 - Registry editor, now with full write support! + q - Quit (you will be asked if there is something to save) + + +What to do? [1] -> +``` + +`chntpw` 命令使用 TUI(文本用户界面),它提供了一套菜单选项。当选择其中一个主要菜单项时,通常会显示一个次要菜单。按照明确的菜单名称,我首先选择了菜单项 `1`。 + +``` +What to do? [1] -> 1 + +===== chntpw Edit User Info & Passwords ==== + +| RID -|---------- Username ------------| Admin? |- Lock? --| +| 01f4 | Administrator | ADMIN | dis/lock | +| 03eb | john | ADMIN | dis/lock | +| 01f7 | DefaultAccount | | dis/lock | +| 01f5 | Guest | | dis/lock | +| 01f8 | WDAGUtilityAccount | | dis/lock | + +Please enter user number (RID) or 0 to exit: [3e9] +``` + +接下来,我选择了我们的管理账户 `john`,在提示下输入 RID。这将显示用户的信息,并提供额外的菜单项来管理账户。 + +``` +Please enter user number (RID) or 0 to exit: [3e9] 03eb +================= USER EDIT ==================== + +RID : 1003 [03eb] +Username: john +fullname: +comment : +homedir : + +00000221 = Users (which has 4 members) +00000220 = Administrators (which has 5 members) + +Account bits: 0x0214 = +[ ] Disabled | [ ] Homedir req. | [ ] Passwd not req. | +[ ] Temp. duplicate | [X] Normal account | [ ] NMS account | +[ ] Domain trust ac | [ ] Wks trust act. | [ ] Srv trust act | +[X] Pwd don't expir | [ ] Auto lockout | [ ] (unknown 0x08) | +[ ] (unknown 0x10) | [ ] (unknown 0x20) | [ ] (unknown 0x40) | + +Failed login count: 0, while max tries is: 0 +Total login count: 47 + +- - - - User Edit Menu: + 1 - Clear (blank) user password + 2 - Unlock and enable user account [probably locked now] + 3 - Promote user (make user an administrator) + 4 - Add user to a group + 5 - Remove user from a group + q - Quit editing user, back to user select +Select: [q] > 2 +``` + +这时,我选择了菜单项 `2`,“解锁并启用用户账户Unlock and enable user account”,这样就可以删除密码,使我可以不用密码登录。顺便说一下 —— 这就是自动登录。然后我退出了该程序。在继续之前,一定要先卸载 `/mnt`。 + +我知道,我知道,但为什么不呢! 我已经绕过了这个硬盘和主机的安全问题,所以一点也不重要。这时,我确实登录了旧的管理账户,并为自己创建了一个新的账户,并设置了安全密码。然后,我以自己的身份登录,并删除了旧的管理账户,这样别人就无法使用了。 + +网上也有 Windows Administrator 账号的使用说明(上面列表中的 `01f4`)。如果它不是作为组织管理账户,我可以删除或更改该账户的密码。还要注意的是,这个过程也可以从目标主机上运行临场 USB 来执行。 + +### 重新激活 Windows + +因此,我现在让 Windows SSD 作为虚拟机在我的 Fedora 主机上运行了。然而,令人沮丧的是,在运行了几个小时后,Windows 显示了一条警告信息,表明我需要“激活 Windows”。 + +在看了许许多多的死胡同网页之后,我终于放弃了使用现有激活码重新激活的尝试,因为它似乎已经以某种方式被破坏了。最后,当我试图进入其中一个在线虚拟支持聊天会话时,虚拟的“获取帮助”应用程序显示我的 Windows 10 Pro 实例已经被激活。这怎么可能呢?它一直希望我激活它,然而当我尝试时,它说它已经被激活了。 + +### 或者不 + +当我在三天内花了好几个小时做研究和实验时,我决定回到原来的 SSD 启动到 Windows 中,以后再来处理这个问题。但后来 Windows —— 即使从原存储设备启动,也要求重新激活。 + +在微软支持网站上搜索也无济于事。在不得不与之前一样的自动支持大费周章之后,我拨打了提供的电话号码,却被自动响应系统告知,所有对 Windows 10 Pro 的支持都只能通过互联网提供。到现在,我已经晚了将近一天才让电脑运行起来并安装回办公室。 + +### 回到未来 + +我终于吸了一口气,购买了一份 Windows 10 Home,大约 120 美元,并创建了一个带有虚拟存储设备的虚拟机,将其安装在上面。 + +我将大量的文档和电子表格文件复制到办公室经理的主目录中。我重新安装了一个我们需要的 Windows 程序,并与办公室经理验证了它可以工作,数据都在那里。 + +### 总结 + +因此,我的目标达到了,实际上晚了一天,花了 120 美元,但使用了一种更标准的方法。我仍在对权限进行一些调整,并恢复 Thunderbird 通讯录;我有一些 CSV 备份,但 `*.mab` 文件在 Windows 驱动器上包含的信息很少。我甚至用 Linux 的 `find` 命令来定位原始存储设备上的所有。 + +我走了很多弯路,每次都要自己重新开始。我遇到了一些与这个项目没有直接关系的问题,但却影响了我的工作。这些问题包括一些有趣的事情,比如把 Windows 分区挂载到我的 Linux 机器的 `/mnt` 上,得到的信息是该分区已经被 Windows 不正确地关闭(是的,在我的 Linux 主机上),并且它已经修复了不一致的地方。即使是 Windows 通过其所谓的“恢复”模式多次重启后也做不到这一点。 + +也许你从 `chntpw` 工具的输出数据中发现了一些线索。出于安全考虑,我删掉了主机上显示的其他一些用户账号,但我从这些信息中看到,所有的用户都是管理员。不用说,我也改了。我仍然对我遇到的糟糕的管理方式感到惊讶,但我想我不应该这样。 + +最后,我被迫购买了一个许可证,但这个许可证至少比原来的要便宜一些。我知道的一点是,一旦我找到了所有必要的信息,Linux 这一块就能完美地工作。问题是处理 Windows 激活的问题。你们中的一些人可能已经成功地让 Windows 重新激活了。如果是这样,我还是想知道你们是怎么做到的,所以请把你们的经验添加到评论中。 + +这是我不喜欢 Windows,只在自己的系统上使用 Linux 的又一个原因。这也是我将组织中所有的计算机都转换为 Linux 的原因之一。只是需要时间和说服力。我们只剩下这一个会计程序了,我需要和财务主管一起找到一个适合她的程序。我明白这一点 —— 我喜欢自己的工具,我需要它们以一种最适合我的方式工作。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/1/virtualbox-windows-linux + +作者:[David Both][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dboth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen) +[2]: https://opensource.com/article/20/7/godbledger +[3]: https://opensource.com/sites/default/files/virtualbox.png diff --git a/published/202103/20210204 5 Tweaks to Customize the Look of Your Linux Terminal.md b/published/202103/20210204 5 Tweaks to Customize the Look of Your Linux Terminal.md new file mode 100644 index 0000000000..6170252cc3 --- /dev/null +++ b/published/202103/20210204 5 Tweaks to Customize the Look of Your Linux Terminal.md @@ -0,0 +1,243 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13181-1.html) +[#]: subject: (5 Tweaks to Customize the Look of Your Linux Terminal) +[#]: via: (https://itsfoss.com/customize-linux-terminal/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +定制你的 Linux 终端外观的 5 项调整 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/06/232911eg4g65gp4g2ww24u.jpg) + +终端仿真器(或简称终端)是任何 Linux 发行版中不可或缺的一部分。 + +当你改变发行版的主题时,往往终端也会自动得到改造。但这并不意味着你不能进一步定制终端。 + +事实上,很多读者都问过我们,为什么我们截图或视频中的终端看起来那么酷,我们用的是什么字体等等。 + +为了回答这个经常被问到的问题,我将向你展示一些简单或复杂的调整来改变终端的外观。你可以在下图中对比一下视觉上的差异: + +![][1] + +### 自定义 Linux 终端 + +本教程利用 Pop!_OS 上的 GNOME 终端来定制和调整终端的外观。但是,大多数建议也应该适用于其他终端。 + +对于大多数元素,如颜色、透明度和字体,你可以利用 GUI 来调整它,而不需要输入任何特殊的命令。 + +打开你的终端。在右上角寻找汉堡菜单。在这里,点击 “偏好设置”,如下图所示: + +![][2] + +在这里你可以找到改变终端外观的所有设置。 + +#### 技巧 0:使用独立的终端配置文件进行定制 + +我建议你建立一个新的配置文件用于你的定制。为什么要这样做?因为这样一来,你的改变就不会影响到终端的主配置文件。假设你做了一些奇怪的改变,却想不起默认值?配置文件有助于分离你的定制。 + +如你所见,我有个单独的配置文件,用于截图和制作视频。 + +![终端配置文件][3] + +你可以轻松地更改终端配置文件,并使用新的配置文件打开一个新的终端窗口。 + +![更改终端配置文件][4] + +这就是我想首先提出的建议。现在,让我们看看这些调整。 + +#### 技巧 1:使用深色/浅色终端主题 + +你可以改变系统主题,终端主题也会随之改变。除此之外,如果你不想改变系统主题。你也可以切换终端的深色主题或浅色主题, + +一旦你进入“偏好设置”,你会注意到在“常规”选项中可以改变主题和其他设置。 + +![][5] + +#### 技巧 2:改变字体和大小 + +选择你要自定义的配置文件。现在你可以选择自定义文本外观、字体大小、字体样式、间距、光标形状,还可以切换终端铃声。 + +对于字体,你只能改成你系统上可用的字体。如果你想要不同的字体,请先在你的 Linux 系统上下载并安装字体。 + +还有一点! 要使用等宽字体,否则字体可能会重叠,文字可能无法清晰阅读。如果你想要一些建议,可以选择 [Share Tech Mono][6](开源)或 [Larabiefont][7](不开源)。 + +在“文本”选项卡下,选择“自定义字体”,然后更改字体及其大小(如果需要)。 + +![][8] + +#### 技巧 3:改变调色板和透明度 + +除了文字和间距,你还可以进入“颜色”选项,改变终端的文字和背景的颜色。你还可以调整透明度,让它看起来更酷。 + +正如你所注意到的那样,你可以从一组预先配置的选项中选择调色板,也可以自己调整。 + +![][9] + +如果你想和我一样启用透明,点击“使用透明背景”选项。 + +如果你想要和你的系统主题类似的颜色设置,你也可以选择使用系统主题的颜色。 + +![][10] + +#### 技巧 4:调整 bash 提示符变量 + +通常当你启动终端时,无需任何修改你就会看到你的用户名和主机名(你的发行版名称)作为 bash 提示符。 + +例如,在我的例子中,它会是 “ankushdas@pop-os:~$”。然而,我把 [主机名永久地改成了][11] “itsfoss”,所以现在看起来像这样: + +![][12] + +要改变主机名,你可以键入: + +``` +hostname 定制名称 +``` + +然而,这只适用于当前会话。因此,当你重新启动时,它将恢复到默认值。要永久地更改主机名,你需要输入: + +``` +sudo hostnamectl set-hostname 定制名称 +``` + +同样,你也可以改变你的用户名,但它需要一些额外的配置,包括杀死所有与活动用户名相关联的当前进程,所以我们会跳过用它来改变终端的外观/感觉。 + +#### 技巧 5:不推荐:改变 bash 提示符的字体和颜色(面向高级用户) + +然而,你可以使用命令调整 bash 提示符的字体和颜色。 + +你需要利用 `PS1` 环境变量来控制提示符的显示内容。你可以在 [手册页][14] 中了解更多关于它的信息。 + +例如,当你键入: + +``` +echo $PS1 +``` + +在我这里输出: + +``` +\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ +``` + +我们需要关注的是该输出的第一部分: + +``` +\[\e]0;\u@\h: \w\a\]$ +``` + +在这里,你需要知道以下几点: + + * `\e` 是一个特殊的字符,表示一个颜色序列的开始。 + * `\u` 表示用户名,后面可以跟着 `@` 符号。 + * `\h` 表示系统的主机名。 + * `\w` 表示基本目录。 + * `\a` 表示活动目录。 + * `$` 表示非 root 用户。 + +在你的情况下输出可能不一样,但变量是一样的,所以你需要根据你的输出来试验下面提到的命令。 + +在你这样做之前,请记住这些: + + * 文本格式代码:`0` 代表正常文本,`1` 代表粗体,`3` 代表斜体,`4` 代表下划线文本。 + * 背景色的颜色范围:`40` - `47`。 + * 文本颜色的颜色范围:`30` - `37`。 + +你只需要键入以下内容来改变颜色和字体: + +``` +PS1="\e[41;3;32m[\u@\h:\w\a\$]" +``` + +这是输入该命令后 bash 提示符的样子: + +![][15] + +如果你注意到这个命令,就像上面提到的,`\e` 可以帮助我们分配一个颜色序列。 + +在上面的命令中,我先分配了一个**背景色**,然后是**文字样式**,接着是**字体颜色**,然后是 `m`。这里,`m` 表示颜色序列的结束。 + +所以,你要做的就是,调整这部分: + +``` +41;3;32 +``` + +命令其余部分应该是不变的,你只需要分配不同的数字来改变背景色、文字样式和文字颜色。 + +要注意的是,这并没有特定的顺序,你可以先指定文字样式,再指定背景色,最后指定文字颜色,如 `3;41;32`,这里的命令就变成了: + +``` +PS1="\e[3;41;32m[\u@\h:\w\a\$]" +``` + +![][16] + +正如你所注意到的,无论顺序如何,颜色的定制都是一样的。所以,只要记住自定义的代码,并在你确定你想把它作为一个永久的变化之前,试试它。 + +上面我提到的命令会临时定制当前会话的 bash 提示符。如果你关闭了会话,你将失去这个自定义设置。 + +所以,要想把它变成一个永久的改变,你需要把它添加到 `.bashrc` 文件中(这是一个配置文件,每次加载会话时都会加载)。 + +![][17] + +简单键入如下命令来访问该文件: + +``` +nano ~/.bashrc +``` + +除非你明确知道你在做什么,否则不要改变任何东西。而且,为了可以恢复设置,你应该把 `PS1` 环境变量的备份(默认情况下复制粘贴其中的内容)保存到一个文本文件中。 + +所以,即使你需要默认的字体和颜色,你也可以再次编辑 `.bashrc` 文件并粘贴 `PS1` 环境变量。 + +#### 附赠技巧:根据你的墙纸改变终端的调色板 + +如果你想改变终端的背景和文字颜色,但又不知道该选哪种颜色,你可以使用一个基于 Python 的工具 Pywal,它可以 [根据你的壁纸][18] 或你提供的图片自动改变终端的颜色。 + +![][19] + +如果你有兴趣使用这个工具,我之前已经详细[介绍][18]过了。 + +### 总结 + +当然,使用 GUI 定制很容易,同时也可以更好地控制你可以改变的东西。但是,需要知道命令也是必要的,万一你开始 [使用 WSL][21] 或者使用 SSH 访问远程服务器,无论如何都可以定制你的体验。 + +你是如何定制 Linux 终端的?在评论中与我们分享你的秘方。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/customize-linux-terminal/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/default-terminal.jpg?resize=773%2C493&ssl=1 +[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/linux-terminal-preferences.jpg?resize=800%2C350&ssl=1 +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/terminal-profiles.jpg?resize=800%2C619&ssl=1 +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/change-terminal-profile.jpg?resize=796%2C347&ssl=1 +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/terminal-theme.jpg?resize=800%2C363&ssl=1 +[6]: https://fonts.google.com/specimen/Share+Tech+Mono +[7]: https://www.dafont.com/larabie-font.font +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/terminal-customization-1.jpg?resize=800%2C500&ssl=1 +[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/terminal-color-customization.jpg?resize=759%2C607&ssl=1 +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/linux-terminal.jpg?resize=800%2C571&ssl=1 +[11]: https://itsfoss.com/change-hostname-ubuntu/ +[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/itsfoss-hostname.jpg?resize=800%2C188&ssl=1 +[13]: https://itsfoss.com/cdn-cgi/l/email-protection +[14]: https://linux.die.net/man/1/bash +[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/terminal-bash-prompt-customization.jpg?resize=800%2C190&ssl=1 +[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/linux-terminal-customization-1s.jpg?resize=800%2C158&ssl=1 +[17]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/bashrch-customization-terminal.png?resize=800%2C615&ssl=1 +[18]: https://itsfoss.com/pywal/ +[19]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/08/wallpy-2.jpg?resize=800%2C442&ssl=1 +[20]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/08/pywal-linux.jpg?fit=800%2C450&ssl=1 +[21]: https://itsfoss.com/install-bash-on-windows/ diff --git a/published/202103/20210204 Get started with distributed tracing using Grafana Tempo.md b/published/202103/20210204 Get started with distributed tracing using Grafana Tempo.md new file mode 100644 index 0000000000..5326ff3421 --- /dev/null +++ b/published/202103/20210204 Get started with distributed tracing using Grafana Tempo.md @@ -0,0 +1,103 @@ +[#]: collector: (lujun9972) +[#]: translator: (ShuyRoy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13229-1.html) +[#]: subject: (Get started with distributed tracing using Grafana Tempo) +[#]: via: (https://opensource.com/article/21/2/tempo-distributed-tracing) +[#]: author: (Annanay Agarwal https://opensource.com/users/annanayagarwal) + +使用 Grafana Tempo 进行分布式跟踪 +====== + +> Grafana Tempo 是一个新的开源、大容量分布式跟踪后端。 + +![](https://img.linux.net.cn/data/attachment/album/202103/23/221354lc1eiill7lln4lli.jpg) + +Grafana 的 [Tempo][2] 是出自 Grafana 实验室的一个简单易用、大规模的、分布式的跟踪后端。Tempo 集成了 [Grafana][3]、[Prometheus][4] 以及 [Loki][5],并且它只需要对象存储进行操作,因此成本低廉,操作简单。 + +我从一开始就参与了这个开源项目,所以我将介绍一些关于 Tempo 的基础知识,并说明为什么云原生社区会注意到它。 + +### 分布式跟踪 + +想要收集对应用程序请求的遥测数据是很常见的。但是在现在的服务器中,单个应用通常被分割为多个微服务,可能运行在几个不同的节点上。 + +分布式跟踪是一种获得关于应用的性能细粒度信息的方式,该应用程序可能由离散的服务组成。当请求到达一个应用时,它提供了该请求的生命周期的统一视图。Tempo 的分布式跟踪可以用于单体应用或微服务应用,它提供 [请求范围的信息][6],使其成为可观察性的第三个支柱(另外两个是度量和日志)。 + +接下来是一个分布式跟踪系统生成应用程序甘特图的示例。它使用 Jaeger [HotROD][7] 的演示应用生成跟踪,并把它们存到 Grafana 云托管的 Tempo 上。这个图展示了按照服务和功能划分的请求处理时间。 + +![Gantt chart from Grafana Tempo][8] + +### 减少索引的大小 + +在丰富且定义良好的数据模型中,跟踪包含大量信息。通常,跟踪后端有两种交互:使用元数据选择器(如服务名或者持续时间)筛选跟踪,以及筛选后的可视化跟踪。 + +为了加强搜索,大多数的开源分布式跟踪框架会对跟踪中的许多字段进行索引,包括服务名称、操作名称、标记和持续时间。这会导致索引很大,并迫使你使用 Elasticsearch 或者 [Cassandra][10] 这样的数据库。但是,这些很难管理,而且大规模运营成本很高,所以我在 Grafana 实验室的团队开始提出一个更好的解决方案。 + +在 Grafana 中,我们的待命调试工作流从使用指标报表开始(我们使用 [Cortex][11] 来存储我们应用中的指标,它是一个云原生基金会孵化的项目,用于扩展 Prometheus),深入研究这个问题,筛选有问题服务的日志(我们将日志存储在 Loki 中,它就像 Prometheus 一样,只不过 Loki 是存日志的),然后查看跟踪给定的请求。我们意识到,我们过滤时所需的所有索引信息都可以在 Cortex 和 Loki 中找到。但是,我们需要一个强大的集成,以通过这些工具实现跟踪的可发现性,并需要一个很赞的存储,以根据跟踪 ID 进行键值查找。 + +这就是 [Grafana Tempo][12] 项目的开始。通过专注于给定检索跟踪 ID 的跟踪,我们将 Tempo 设计为最小依赖性、大容量、低成本的分布式跟踪后端。 + +### 操作简单,性价比高 + +Tempo 使用对象存储后端,这是它唯一的依赖。它既可以被用于单一的二进制下,也可以用于微服务模式(请参考仓库中的 [例子][13],了解如何轻松上手)。使用对象存储还意味着你可以存储大量的应用程序的痕迹,而无需任何采样。这可以确保你永远不会丢弃那百万分之一的出错或具有较高延迟的请求的跟踪。 + +### 与开源工具的强大集成 + +[Grafana 7.3 包括了 Tempo 数据源][14],这意味着你可以在 Grafana UI 中可视化来自Tempo 的跟踪。而且,[Loki 2.0 的新查询特性][15] 使得 Tempo 中的跟踪更简单。为了与 Prometheus 集成,该团队正在添加对范例exemplar的支持,范例是可以添加到时间序列数据中的高基数元数据信息。度量存储后端不会对它们建立索引,但是你可以在 Grafana UI 中检索和显示度量值。尽管范例可以存储各种元数据,但是在这个用例中,存储跟踪 ID 是为了与 Tempo 紧密集成。 + +这个例子展示了使用带有请求延迟直方图的范例,其中每个范例数据点都链接到 Tempo 中的一个跟踪。 + +![Using exemplars in Tempo][16] + +### 元数据一致性 + +作为容器化应用程序运行的应用发出的遥测数据通常具有一些相关的元数据。这可以包括集群 ID、命名空间、吊舱 IP 等。这对于提供基于需求的信息是好的,但如果你能将元数据中包含的信息用于生产性的东西,那就更好了。 +  +例如,你可以使用 [Grafana 云代理将跟踪信息导入 Tempo 中][17],代理利用 Prometheus 服务发现机制轮询 Kubernetes API 以获取元数据信息,并且将这些标记添加到应用程序发出的跨域数据中。由于这些元数据也在 Loki 中也建立了索引,所以通过元数据转换为 Loki 标签选择器,可以很容易地从跟踪跳转到查看给定服务的日志。 + +下面是一个一致元数据的示例,它可用于Tempo跟踪中查看给定范围的日志。 + +![][18] + +### 云原生 + +Grafana Tempo 可以作为容器化应用,你可以在如 Kubernetes、Mesos 等编排引擎上运行它。根据获取/查询路径上的工作负载,各种服务可以水平伸缩。你还可以使用云原生的对象存储,如谷歌云存储、Amazon S3 或者 Tempo Azure 博客存储。更多的信息,请阅读 Tempo 文档中的 [架构部分][19]。 + +### 试一试 Tempo + +如果这对你和我们一样有用,可以 [克隆 Tempo 仓库][20]试一试。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/tempo-distributed-tracing + +作者:[Annanay Agarwal][a] +选题:[lujun9972][b] +译者:[RiaXu](https://github.com/ShuyRoy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/annanayagarwal +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_space_graphic_cosmic.png?itok=wu493YbB (Computer laptop in space) +[2]: https://grafana.com/oss/tempo/ +[3]: http://grafana.com/oss/grafana +[4]: https://prometheus.io/ +[5]: https://grafana.com/oss/loki/ +[6]: https://peter.bourgon.org/blog/2017/02/21/metrics-tracing-and-logging.html +[7]: https://github.com/jaegertracing/jaeger/tree/master/examples/hotrod +[8]: https://opensource.com/sites/default/files/uploads/tempo_gantt.png (Gantt chart from Grafana Tempo) +[9]: https://creativecommons.org/licenses/by-sa/4.0/ +[10]: https://opensource.com/article/19/8/how-set-apache-cassandra-cluster +[11]: https://cortexmetrics.io/ +[12]: http://github.com/grafana/tempo +[13]: https://grafana.com/docs/tempo/latest/getting-started/example-demo-app/ +[14]: https://grafana.com/blog/2020/10/29/grafana-7.3-released-support-for-the-grafana-tempo-tracing-system-new-color-palettes-live-updates-for-dashboard-viewers-and-more/ +[15]: https://grafana.com/blog/2020/11/09/trace-discovery-in-grafana-tempo-using-prometheus-exemplars-loki-2.0-queries-and-more/ +[16]: https://opensource.com/sites/default/files/uploads/tempo_exemplar.png (Using exemplars in Tempo) +[17]: https://grafana.com/blog/2020/11/17/tracing-with-the-grafana-cloud-agent-and-grafana-tempo/ +[18]: https://lh5.googleusercontent.com/vNqk-ygBOLjKJnCbTbf2P5iyU5Wjv2joR7W-oD7myaP73Mx0KArBI2CTrEDVi04GQHXAXecTUXdkMqKRq8icnXFJ7yWUEpaswB1AOU4wfUuADpRV8pttVtXvTpVVv8_OfnDINgfN +[19]: https://grafana.com/docs/tempo/latest/architecture/architecture/ +[20]: https://github.com/grafana/tempo diff --git a/published/202103/20210216 How to install Linux in 3 steps.md b/published/202103/20210216 How to install Linux in 3 steps.md new file mode 100644 index 0000000000..15f9d474fc --- /dev/null +++ b/published/202103/20210216 How to install Linux in 3 steps.md @@ -0,0 +1,144 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13164-1.html) +[#]: subject: (How to install Linux in 3 steps) +[#]: via: (https://opensource.com/article/21/2/linux-installation) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +安装 Linux,只需三步 +====== + +> 操作系统的安装看似神秘,但其实很简单。以下是成功安装 Linux 的步骤。 + +![](https://img.linux.net.cn/data/attachment/album/202103/01/084538it1188e8zeepgzyb.jpg) + +在 2021 年,有更多让人们喜欢 Linux 的理由。在这个系列中,我将分享 21 种使用 Linux 的不同理由。下面是如何安装 Linux。  + +安装一个操作系统(OS)总是令人生畏。对大多数人来说,这是一个难题。安装操作系统不能从操作系统内部进行,因为它要么没有被安装,要么即将被另一个操作系统取代,那么它是如何发生的呢?更糟糕的是,它通常会涉及到硬盘格式、安装位置、时区、用户名、密码等一系列你通常不会想到的混乱问题。Linux 发行版知道这一点,所以它们多年来一直在努力将你在操作系统安装程序中花费的时间减少到最低限度。 + +### 安装时发生了什么 + +无论你安装的是一个应用程序还是整个操作系统,*安装*的过程只是将文件从一种媒介复制到另一种媒介的一种花哨方式。不管是什么用户界面,还是用动画将安装过程伪装成多么高度专业化的东西,最终都是一回事:曾经存储在光盘或驱动器上的文件被复制到硬盘上的特定位置。 + +当安装的是一个应用程序时,放置这些文件的有效位置被高度限制在你的*文件系统*或你的操作系统知道它可以使用的硬盘驱动器的部分。这一点很重要,因为它可以将硬盘分割成不同的空间(苹果公司在本世纪初的 Bootcamp 中使用了这一技巧,允许用户将 macOS 和 Windows 安装到一个硬盘上,但作为单独的实体)。当你安装一个操作系统时,一些特殊的文件会被安装到硬盘上通常是禁区的地方。更重要的是,至少在默认情况下,你的硬盘上的所有现有数据都会被擦除,以便为新系统腾出空间,所以创建一个备份是*必要的*。 + +### 安装程序 + +从技术上讲,你实际上不需要用安装程序来安装应用程序甚至操作系统。不管你信不信,有些人通过挂载一块空白硬盘、编译代码并复制文件来手动安装 Linux。这是在一个名为 [Linux From Scratch(LFS)][2] 的项目的帮助下完成的。这个项目旨在帮助爱好者、学生和未来的操作系统设计者更多地了解计算机的工作原理以及每个组件执行的功能。这并不是安装 Linux 的推荐方法,但你会发现,在开源中,通常是这样的:*如果*有些事情可以做,那么就有人在做。而这也是一件好事,因为这些小众的兴趣往往会带来令人惊讶的有用的创新。 + +假设你不是想对 Linux 进行逆向工程,那么正常的安装方式是使用安装光盘或镜像。 + +### 3 个简单的步骤来安装 Linux + +当你从一个 Linux 安装 DVD 或 U 盘启动时,你会置身于一个最小化的操作环境中,这个环境是为了运行一个或多个有用的应用程序。安装程序是最主要的应用程序,但由于 Linux 是一个如此灵活的系统,你通常也可以运行标准的桌面应用程序,以在你决定安装它之前感受一下这个操作系统是什么样子的。 + +不同的 Linux 发行版有不同的安装程序界面。下面是两个例子。 + +Fedora Linux 有一个灵活的安装程序(称为 Anaconda),能够进行复杂的系统配置: + +![Fedora 上的 Anaconda 安装界面][3] + +*Fedora 上的 Anaconda 安装程序* + +Elementary OS 有一个简单的安装程序,主要是为了在个人电脑上安装而设计的: + +![Elementary OS 安装程序][4] + +*Elementary OS 安装程序* + +#### 1、获取安装程序 + +安装 Linux 的第一步是下载一个安装程序。你可以从你选择尝试的发行版中获得一个 Linux 安装镜像。 + + * [Fedora][5] 以率先更新软件而闻名。 + * [Linux Mint][6] 提供了安装缺失驱动程序的简易选项。 + * [Elementary][7] 提供了一个美丽的桌面体验和几个特殊的、定制的应用程序。 + +Linux 安装程序是 `.iso` 文件,是 DVD 介质的“蓝图”。如果你还在使用光学介质,你可以把 `.iso` 文件刻录到 DVD-R 上,或者你可以把它烧录到 U 盘上(确保它是一个空的 U 盘,因为当镜像被烧录到它上时,它的所有内容都会被删除)。要将镜像烧录到 U 盘上,你可以 [使用开源的 Etcher 应用程序][8]。 + +![Etcher 用于烧录 U 盘][9] + +*Etcher 应用程序可以烧录 U 盘。* + +现在你可以安装 Linux 了。 + +#### 2、引导顺序 + +要在电脑上安装操作系统,你必须引导到操作系统安装程序。这对于一台电脑来说并不是常见的行为,因为很少有人这样做。理论上,你只需要安装一次操作系统,然后你就会不断更新它。当你选择在电脑上安装不同的操作系统时,你就中断了这个正常的生命周期。这不是一件坏事。这是你的电脑,所以你有权力对它进行重新规划。然而,这与电脑的默认行为不同,它的默认行为是开机后立即启动到硬盘上找到的任何操作系统。 + +在安装 Linux 之前,你必须备份你在目标计算机上的任何数据,因为这些数据在安装时都会被清除。 + +假设你已经将数据保存到了一个外部硬盘上,然后你将它秘密地存放在安全的地方(而不是连接到你的电脑上),那么你就可以继续了。 + +首先,将装有 Linux 安装程序的 U 盘连接到电脑上。打开电脑电源,观察屏幕上是否有一些如何中断其默认启动序列的指示。这通常是像 `F2`、`F8`、`Esc` 甚至 `Del` 这样的键,但根据你的主板制造商不同而不同。如果你错过了这个时间窗口,只需等待默认操作系统加载,然后重新启动并再次尝试。 + +当你中断启动序列时,电脑会提示你引导指令。具体来说,嵌入主板的固件需要知道该到哪个驱动器寻找可以加载的操作系统。在这种情况下,你希望计算机从包含 Linux 镜像的 U 盘启动。如何提示你这些信息取决于主板制造商。有时,它会直接问你,并配有一个菜单: + +![引导设备菜单][10] + +*启动设备选择菜单* + +其他时候,你会被带入一个简陋的界面,你可以用来设置启动顺序。计算机通常默认设置为先查看内部硬盘。如果引导失败,它就会移动到 U 盘、网络驱动器或光驱。你需要告诉你的计算机先寻找一个 U 盘,这样它就会绕过自己的内部硬盘驱动器,而引导 U 盘上的 Linux 镜像。 + +![BIOS 选择屏幕][11] + +*BIOS 选择屏幕* + +起初,这可能会让人望而生畏,但一旦你熟悉了界面,这就是一个快速而简单的任务。一旦安装了Linux,你就不必这样做了,因为,在这之后,你会希望你的电脑再次从内部硬盘启动。这是一个很好的技巧,因为在 U 盘上使用 Linux 的关键原因,是在安装前测试计算机的 Linux 兼容性,以及无论涉及什么操作系统的一般性故障排除。 + +一旦你选择了你的 U 盘作为引导设备,保存你的设置,让电脑复位,然后启动到 Linux 镜像。 + +#### 3、安装 Linux + +一旦你启动进入 Linux 安装程序,就只需通过提示进行操作。 + +Fedora 安装程序 Anaconda 为你提供了一个“菜单”,上面有你在安装前可以自定义的所有事项。大多数设置为合理的默认值,可能不需要你的互动,但有些则用警示符号标记,表示不能安全地猜测出你的配置,因此需要设置。这些配置包括你想安装操作系统的硬盘位置,以及你想为账户使用的用户名。在你解决这些问题之前,你不能继续进行安装。 + +对于硬盘的位置,你必须知道你要擦除哪个硬盘,然后用你选择的 Linux 发行版重新写入。对于只有一个硬盘的笔记本来说,这可能是一个显而易见的选择。 + +![选择安装驱动器的屏幕][12] + +*选择要安装操作系统的硬盘(本例中只有一个硬盘)。* + +如果你的电脑里有不止一个硬盘,而你只想在其中一个硬盘上安装 Linux,或者你想把两个硬盘当作一个硬盘,那么你必须帮助安装程序了解你的目标。最简单的方法是只给 Linux 分配一个硬盘,让安装程序执行自动分区和格式化,但对于高级用户来说,还有很多其他的选择。 + +你的电脑必须至少有一个用户,所以要为自己创建一个用户账户。完成后,你可以最后点击 **Done** 按钮,安装 Linux。 + +![Anaconda 选项完成并准备安装][13] + +*Anaconda 选项已经完成,可以安装了* + +其他的安装程序可能会更简单,所以你看到的可能与本文中的图片不同。无论怎样,除了预装的操作系统之外,这个安装过程都是最简单的操作系统安装过程之一,所以不要让安装操作系统的想法吓到你。这是你的电脑。你可以、也应该安装一个你拥有所有权的操作系统。 + +### 拥有你的电脑 + +最终,Linux 成为了你的操作系统。它是一个由来自世界各地的人们开发的操作系统,其核心是一个:创造一种参与、共同拥有、合作管理的计算文化。如果你有兴趣更好地了解开源,那么就请你迈出一步,了解它的一个光辉典范 Linux,并安装它。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-installation + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bash_command_line.png?itok=k4z94W2U (bash logo on green background) +[2]: http://www.linuxfromscratch.org +[3]: https://opensource.com/sites/default/files/anaconda-installer.png +[4]: https://opensource.com/sites/default/files/elementary-installer.png +[5]: http://getfedora.org +[6]: http://linuxmint.com +[7]: http://elementary.io +[8]: https://opensource.com/article/18/7/getting-started-etcherio +[9]: https://opensource.com/sites/default/files/etcher_0.png +[10]: https://opensource.com/sites/default/files/boot-menu.jpg +[11]: https://opensource.com/sites/default/files/bios_1.jpg +[12]: https://opensource.com/sites/default/files/install-harddrive-chooser.png +[13]: https://opensource.com/sites/default/files/anaconda-done.png diff --git a/published/202103/20210216 What does being -technical- mean.md b/published/202103/20210216 What does being -technical- mean.md new file mode 100644 index 0000000000..896988d23d --- /dev/null +++ b/published/202103/20210216 What does being -technical- mean.md @@ -0,0 +1,166 @@ +[#]: collector: (lujun9972) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13168-1.html) +[#]: subject: (What does being 'technical' mean?) +[#]: via: (https://opensource.com/article/21/2/what-technical) +[#]: author: (Dawn Parzych https://opensource.com/users/dawnparzych) + +“技术”是什么意思? +====== + +> 用“技术”和“非技术”的标签对人们进行分类,会伤害个人和组织。本文作为本系列的第 1 篇,将阐述这个问题。 + +![](https://img.linux.net.cn/data/attachment/album/202103/02/003141oz1l1765c598t6u7.jpg) + +“技术technical”一词描述了许多项目和学科:**技术**淘汰赛、**技术性**犯规、攀岩比赛的**技术**课程和花样滑冰运动的**技术**得分。广受欢迎的烹饪节目 “_The Great British Bake-Off_” 包括一个“烘焙**技术**挑战”。任何参加过剧院演出的人都可能熟悉**技术**周,即戏剧或音乐剧首演前的一周。 + +如你所见,**技术**一词并不严格适用于软件工程和软件操作,所以当我们称一个人或一个角色为“技术”时,我们的意思是什么,为什么使用这个术语? + +在我 20 年的技术生涯中,这些问题引起了我的兴趣,所以我决定通过一系列的采访来探讨这个问题。我不是工程师,也不写代码,但这并不意味着我是**非技术型**的。但我经常被贴上这样的标签。我认为自己是**技术型**的,通过这个系列,我希望你会明白为什么。 + +我知道我不是孤独一个人。群众讨论是很重要的,因为如何定义和看待一个人或一个角色会影响他们做好工作的信心和能力。如果他们感到被压垮或不受尊重,就会降低他们的工作质量,挤压创新和新思想。你看,这一切都是循序渐进的,那么我们怎样才能改善这种状况呢? + +我首先采访了 7 个不同角色的人。 + +在本系列中,我将探讨“技术”一词背后的含义、技术的连续性、将人分类为技术型或非技术型的意外副作用,以及通常被认为是非技术性的技术角色。 + +### 定义技术和非技术 + +首先,我们需要做个名词解释。根据字典网,“技术/技术性的”是一个具有多重含义的形容词,包括: + + * 属于或与艺术、科学等学科有关的 + * 精通或熟悉某一特定的艺术或行业的实际操作 + * 技术要求高或困难(通常用于体育或艺术) + +而“非技术性”一词在科技公司中经常被用来描述非工程人员。但是“非技术性”的定义是“不涉及、不具有某个特定活动领域及其术语的特点,或不熟练”。 + +作为一个写作和谈论技术的人,我认为自己是技术型的。如果你不熟悉这个领域和术语,就不可能书写或谈论一个技术主题。有了这种理解,每个从事技术工作的人都是技术人员。 + +### 为什么要分配标签? + +那么,为什么划分技术与非技术?这在技术领域有什么意义呢?我们试图通过分配这些标签来实现什么?有没有一个好的理由?而我们有没有重新评估这些理由?让我们讨论一下。 + +当我听到人们谈论技术人员和非技术人员时,我不禁想起 Seuss 教授写的童话故事 《[The Sneetches][2]》。Sneetches 有没有星星被演化为一种渴望。Sneetches 们进入了一个无限循环,试图达到正确的状态。 + +标签可以起到一定的作用,但当它们迫使一个群体的等级被视为比另一个更好时,它们就会变得危险。想想你的组织或部门:销售、资源、营销、质控、工程等,哪一组的在重要性上高于或低于另一组? + +即使它不是直接说的或写在什么地方,也可能是被人们默认的。这些等级划分通常也存在于规章制度中。技术内容经理 Liz Harris 表示,“在技术写作界存在着一个技术含量的评级,你越是偏技术的文章,你得到的报酬就越高,而且往往在技术写作社区里你得到的关注就越多。” + +术语“技术”通常用于指一个人在某一主题上的深度或专业知识水平。销售人员也有可能会要求需要懂技术以更好的帮助客户。从事技术工作的人,他们是技术型的,但是也许更专业的技术人员才能胜任这个项目。因此,请求技术支援可能是含糊不清的表述。你需要一个对产品有深入了解的人吗?你需要一位了解基础设施堆栈的人员吗?还是需要一个能写下如何配置 API 的步骤的人? + +我们应该要把技术能力看作是一个连续体,而不是把人简单的看作技术型的或非技术型的。这是什么意思?开发人员关系主管 Mary thengwall 描述了她如何对特定角色所需的不同深度的技术知识进行分类。例如,项目可能需要一个开发人员、一个具有开发人员背景的人员,或一个精通技术的人员。就是那些被归类为精通技术的人也经常被贴上非技术的标签。 + +根据 Mary 的说法,如果“你能解释(一个技术性的)话题,你知道你的产品工作方式,你知道该说什么和不该说什么的基本知识,那么你就是技术高手。你不必有技术背景,但你需要知道高层次的技术信息,然后还要知道向谁提供更多信息。” + +### 标签带来的问题 + +当我们使用标签来具体说明我们需要完成一项工作时,它们可能会很有帮助,比如“开发人员”、“有开发人员背景”和“技术达人”。但是当我们使用标签的范围太广时,将人们分为两组中的一组可能会产生“弱于”和“优于”的感觉 + +当一个标签成为现实时,无论是有意还是无意,我们都必须审视自己,重新评估自己的措辞、标签和意图。 + +高级产品经理 Leon Stigter 提出了他的观点:“作为一个集体行业,我们正在构建更多的技术,让每个人都更容易参与。如果我们对每个人说:‘你不是技术型的’,或者说:‘你是技术型的’,然后把他们分成几个小组,那些被贴上非技术型标签的人可能永远不会去想:‘其实我自己就能完成这个项目’,实际上,我们需要所有这些人真正思考我们行业和社区的发展方向,我认为每一个人都应该有这个主观能动性。” + +#### 身份 + +如果我们把我们的身份贴在一个标签上,当我们认为这个标签不再适用时会发生什么?当 Adam Gordon Bell 从一个开发人员转变为一个管理人员时,他很纠结,因为他总是认为自己是技术人员,而作为一个管理人员,这些技术技能没有被使用。他觉得自己不再有价值了。编写代码并不能提供比帮助团队成员发展事业或确保项目按时交付更大的价值。所有角色都有价值,因为它们都是确保商品和服务的创建、执行和交付所必需的。 + +“我想我成为一名经理的原因是,我们有一支非常聪明的团队和很多非常有技能的人,但是我们并不总是能完成最出色的工作。所以技术不是限制因素,对吧?”Adam 说:“我想通常不是技术限制了团队的发挥”。 + +Leon Stigter 说,让人们一起合作并完成令人惊叹的工作的能力是一项很有价值的技能,不应低于技术角色的价值。 + +#### 自信 + +[冒充者综合症][3]Impostor syndrome 是指无法认识到自己的能力和知识,从而导致信心下降,以及完成工作和做好工作的能力下降。当你申请在会议上发言,向科技刊物提交文章,或申请工作时,冒充者综合症就会发作。冒充者综合症是一种微小的声音,它说: + + * “我技术不够胜任这个角色。” + * “我认识更多的技术人员,他们在演讲中会做得更好。” + * “我在市场部工作,所以我无法为这样的技术网站写文章。” + +当你把某人或你自己贴上非技术型标签的时候,这些声音就会变得更响亮。这很容易导致在会议上听不到新的声音或失去团队中的人才。 + +#### 刻板印象 + +当你认为某人是技术人员时,你会看到什么样的印象?他们穿什么?他们还有什么特点?他们是外向健谈,还是害羞安静? + +Shailvi Wakhlu 是一位高级数据总监,她的职业生涯始于软件工程师,并过渡到数据和分析领域。“当我是一名软件工程师的时候,很多人都认为我不太懂技术,因为我很健谈,很明显这就意味着你不懂技术。他们认为你不孤独的待在角落就是不懂技术。”她说。 + +我们对谁是技术型与非技术型的刻板印象会影响招聘决策或我们的社区是否具有包容性。你也可能冒犯别人,甚至是能够帮助你的人。几年前,我在某个展台工作,问别人我能不能帮他们。“我要找最专业的人帮忙”他回答说。然后他就出发去寻找他的问题的答案。几分钟后,摊位上的销售代表和那位先生走到我跟前说:“Dawn,你是回答这个人问题的最佳人选。” + +#### 污名化 + +随着时间的推移,我们夸大了“技术”技能的重要性,这导致了“非技术”的标签被贬义地使用。随着技术的蓬勃发展,编程人员的价值也随之增加,因为这种技能为市场带来了新产品和新的商业方式,并直接帮助了盈利。然而,现在我们看到人们故意将技术角色凌驾于非技术角色之上,阻碍了公司的发展和成功。 + +人际交往技能通常被称为非技术技能。然而,它们有着高度的技术性,比如提供如何完成一项任务的分步指导,或者确定最合适的词语来传达信息或观点。这些技能往往也是决定你能否在工作中取得成功的更重要因素。 + +通读“城市词典Urban Dictionary”上的文章和定义,难怪人们会觉得自己的标签有道理,而其他人会患上冒充者综合症,或者觉得自己失去了身份。在线搜索时,“城市词典”定义通常出现在搜索结果的顶部。这个网站大约 20 年前开始是一个定义俚语、文化表达和其他术语的众包词典,现在变成了一个充满敌意和负面定义的网站。 + +这里有几个例子:“城市词典”将非技术经理定义为“不知道他们管理的人应该做什么的人” + +提供如何与“非技术”人员交谈技巧的文章包括以下短语: + + * “如果我抗争,非技术人员究竟是如何应对的?” + * “在当今的职业专业人士中,开发人员和工程师拥有一些最令人印象深刻的技能,这些技能是由多年的技术培训和实际经验磨练而成的。” + +这些句子意味着非工程师是低人一等的,他们多年的训练和现实世界的经验在某种程度上没有那么令人印象深刻。对于这样的说辞,我可以举一个反例:Therese Eberhard,她的工作被许多人认为是非技术性的。她是个风景画家。她为电影和戏剧画道具和风景。她的工作是确保像甘道夫的手杖这样的道具看起来栩栩如生,而不是像塑料玩具。要想在这个角色上取得成功,需要有很多解决问题和实验化学反应的方法。Therese 在多年的实战经验中磨练了这些技能,对我来说,这相当令人印象深刻。 + +#### 守门人行为 + +使用标签会设置障碍,并导致守门人行为,这决定谁可以进入我们的组织,我们的团队,我们的社区。 + +据一位开源开发者 Eddie Jaoude 所说,“`技术’、`开发人员‘或`测试人员’的头衔在不应该出现的地方制造了障碍或权威。我们应该将重点放在谁能为团队或项目增加价值,而头衔是无关紧要的。” + +如果我们把每个人看作一个团队成员,他们应该以这样或那样的方式贡献价值,而不是看他们是否编写文档、测试用例或代码,那么我们将根据真正重要的东西来重视他们,并创建一个能完成惊人工作的团队。如果测试工程师想学习编写代码,或者程序员想学习如何在活动中与人交谈,为什么要设置障碍来阻止这种成长呢?拥抱团队成员学习、改变和向任何方向发展的渴望,为团队和公司的使命服务。 + +如果有人在某个角色上失败了,与其把他们说成“技术不够”,不如去看看问题到底是什么。你是否需要一个精通 JavaScript 的人,而这个人又是另一种编程语言的专家?并不是说他们不专业,是技能和知识不匹配。你需要合适的人来扮演合适的角色。如果你强迫一个精通业务分析和编写验收标准的人去编写自动化测试用例,他们就会失败。 + +### 如何取消标签 + +如果你已经准备好改变你对技术性和非技术性标签的看法,这里有帮助你改变的提示。 + +#### 寻找替代词 + +我问我采访过的每个人,我们可以用什么词来代替技术和非技术。没有人能回答!我认为这里的挑战是我们不能把它归结为一个词。要替换术语,你需要使用更多的词。正如我之前写的,我们需要做的是变得更加具体。 + +你说过或听到过多少次这样的话: + + * “我正在为这个项目寻找技术资源。” + * “那个候选人技术不够。” + * “我们的软件是为非技术用户设计的。” + +技术和非技术词语的这些用法是模糊的,不能表达它们的全部含义。更真实、更详细地了解你的需求那么你应该说: + + * “我想找一个对如何配置 Kubernetes 有深入了解的人。” + * “那个候选人对 Go 的了解不够深入。” + * “我们的软件是为销售和营销团队设计的。” + +#### 拥抱成长心态 + +知识和技能不是天生的。它们是经过数小时或数年的实践和经验形成的。认为“我只是技术不够”或“我不能学习如何做营销”反映了一种固定的心态。你可以向任何你想发展的方向学习技能。列一张清单,列出你认为哪些是技术技能,或非技术技能,但要具体(如上面的清单)。 + +#### 认可每个人的贡献 + +如果你在科技行业工作,你就是技术人员。在一个项目或公司的成功中,每个人都有自己的作用。与所有做出贡献的人分享荣誉,而不仅仅是少数人。认可提出新功能的产品经理,而不仅仅是开发新功能的工程师。认可一个作家,他的文章在你的公司迅速传播并产生了新的线索。认可在数据中发现新模式的数据分析师。 + +### 下一步 + +在本系列的下一篇文章中,我将探讨技术中经常被标记为“非技术”的非工程角色。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/what-technical + +作者:[Dawn Parzych][a] +选题:[lujun9972][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dawnparzych +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/question-mark_chalkboard.jpg?itok=DaG4tje9 (question mark in chalk) +[2]: https://en.wikipedia.org/wiki/The_Sneetches_and_Other_Stories +[3]: https://opensource.com/business/15/9/tips-avoiding-impostor-syndrome +[4]: https://enterprisersproject.com/article/2019/8/why-soft-skills-core-to-IT diff --git a/published/202103/20210217 4 tech jobs for people who don-t code.md b/published/202103/20210217 4 tech jobs for people who don-t code.md new file mode 100644 index 0000000000..4252efa8a5 --- /dev/null +++ b/published/202103/20210217 4 tech jobs for people who don-t code.md @@ -0,0 +1,127 @@ +[#]: collector: (lujun9972) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13178-1.html) +[#]: subject: (4 tech jobs for people who don't code) +[#]: via: (https://opensource.com/article/21/2/non-engineering-jobs-tech) +[#]: author: (Dawn Parzych https://opensource.com/users/dawnparzych) + +不懂代码的人也可以干的 4 种技术工作 +====== + +> 对于不是工程师的人来说也有很多技术工作可以做。本文作为本系列的第二篇,就具体阐述这些工作。 + +![](https://img.linux.net.cn/data/attachment/album/202103/06/094041jnrriww0g6ggjn0p.jpg) + +在 [本系列的第一篇文章][2] 中,我解释了技术行业如何将人员和角色划分为“技术”或“非技术”类别,以及与此相关的问题。科技行业使得那些对科技感兴趣但不懂编程的人很难找到适合自己的角色。 + +如果你对技术或开源感兴趣,但对编程不感兴趣,这也有一些工作适合你。科技公司的任何一个职位都可能需要一个精通科技但不一定会写代码的人。但是,你确实需要了解术语并理解产品。 + +我最近注意到,在诸如技术客户经理、技术产品经理、技术社区经理等职位头衔上增加了“技术”一词。这反映了几年前的趋势,即在头衔上加上“工程师”一词,以表示该职位的技术需要。过了一段时间,每个人的头衔中都有“工程师”这个词,这样的分类就失去了一些吸引力。 + +当我坐下来写这些文章时,Tim Banks 的这条推特出现在我的通知栏上: + +> 已经将职业生涯规划为技术行业的非开发人员(除了信息安全、数据科学/分析师、基础设施工程师等以外的人员)的女性,你希望知道的事情有哪些,有价值的资源有哪些,或者对希望做出类似改变的人有哪些建议? +> +> —— Tim Banks is a buttery biscuit (@elchefe) [December 15,2020][3] + +这遵循了我第一篇文章中的建议:Tim 并不是简单地询问“非技术角色”;他提供了更重要的详细描述。在 Twitter 这样的媒体上,每一个字符都很重要,这些额外的字符会产生不同的效果。这些是技术角色。如果为了节约笔墨,而简单的称呼他们为“非技术人员”,会改变你的原意,产生不好的影响。 + +以下是需要技术知识的非工程类角色的示例。 + +### 技术作者 + +[技术作者的工作][4] 是在两方或多方之间传递事实信息。传统上,技术作者提供有关如何使用技术产品的说明或文档。最近,我看到术语“技术作者”指的是写其他形式内容的人。科技公司希望一个人为他们的开发者读者写博客文章,而这种技巧不同于文案或内容营销。 + +**需要的技术技能:** + + * 写作 + * 特定技术或产品的用户知识或经验 + * 快速跟上新产品或新特性的速度的能力 + * 在各种环境中创作的技能 + +**适合人群:** + + * 可以清楚地提供分步说明 + * 享受合作 + * 对活跃的声音和音乐有热情 + * 喜欢描述事物和解释原理 + +### 产品经理 + +[产品经理][5] 负责领导产品战略。职责可能包括收集客户需求并确定其优先级,撰写业务案例,以及培训销售人员。产品经理跨职能工作,利用创造性和技术技能的结合,成功地推出产品。产品经理需要深厚的产品专业知识。 + +**所需技术技能:** + + * 掌握产品知识,并且会配置或运行演示模型 + * 与产品相关的技术生态系统知识 + * 分析和研究技能 + +**适合以下人群:** + + * 享受制定战略和规划下一步的工作 + * 在不同的人的需求中可以看到一条共同的线索 + * 能够清楚地表达业务需求和要求 + * 喜欢描述原因 + +### 数据分析师 + +数据分析师负责收集和解释数据,以帮助推动业务决策,如是否进入新市场、瞄准哪些客户或在何处投资。这个角色需要知道如何使用所有可用的潜在数据来做出决策。我们常常希望把事情简单化,而数据分析往往过于简单化。获取正确的信息并不像编写查询 `select all limit 10` 来获取前 10 行那么简单。你需要知道要加入哪些表。你需要知道如何分类。你需要知道是否需要在运行查询之前或之后以某种方式清理数据。 + +**所需技术技能:** + + * 了解 SQL、Python 和 R + * 能够看到和提取数据中的样本 + * 了解事物如何端到端运行 + * 批判性思维 + * 机器学习 + +**适合以下人群:** + + * 享受解决问题的乐趣 + * 渴望学习和提出问题 + +### 开发者关系 + +[开发者关系][6] 是一门相对较新的技术学科。它包括 [开发者代言人][7] developer advocate开发者传道者developer evangelist开发者营销developer marketing等角色。这些角色要求你与开发人员沟通,与他们建立关系,并帮助他们提高工作效率。你向公司倡导开发者的需求,并向开发者代表公司。开发者关系可以包括撰写文章、创建教程、录制播客、在会议上发言以及创建集成和演示。有人说你需要做过开发才能进入开发者关系。我没有走那条路,我知道很多人没有。 + +**所需技术技能:** + +这些将高度依赖于公司和具体角色。你需要部分技能(不是全部)取决于你自己。 + + * 了解与产品相关的技术概念 + * 写作 + * 教程和播客的视频和音频编辑 + * 说话 + +**适合以下人群:** + + * 有同情心,想要教导和授权他人 + * 可以为他人辩护 + * 你很有创意 + +### 无限的可能性 + +这并不是一个完整的清单,并没有列出技术领域中所有的非工程类角色,而是一些不喜欢每天编写代码的人可以尝试的工作。如果你对科技职业感兴趣,看看你的技能和什么角色最适合。可能性是无穷的。为了帮助你完成旅程,在本系列的最后一篇文章中,我将与这些角色的人分享一些建议。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/non-engineering-jobs-tech + +作者:[Dawn Parzych][a] +选题:[lujun9972][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dawnparzych +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tips_map_guide_ebook_help_troubleshooting_lightbulb_520.png?itok=L0BQHgjr (Looking at a map) +[2]: https://linux.cn/article-13168-1.html +[3]: https://twitter.com/elchefe/status/1338933320147750915?ref_src=twsrc%5Etfw +[4]: https://opensource.com/article/17/5/technical-writing-job-interview-tips +[5]: https://opensource.com/article/20/2/product-management-open-source-company +[6]: https://www.marythengvall.com/blog/2019/5/22/what-is-developer-relations-and-why-should-you-care +[7]: https://opensource.com/article/20/10/open-source-developer-advocates diff --git a/published/202103/20210220 Run your favorite Windows applications on Linux.md b/published/202103/20210220 Run your favorite Windows applications on Linux.md new file mode 100644 index 0000000000..4ecc4a59e2 --- /dev/null +++ b/published/202103/20210220 Run your favorite Windows applications on Linux.md @@ -0,0 +1,98 @@ +[#]: collector: (lujun9972) +[#]: translator: (robsean) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13184-1.html) +[#]: subject: (Run your favorite Windows applications on Linux) +[#]: via: (https://opensource.com/article/21/2/linux-wine) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +在 Linux 上运行你最喜欢的 Windows 应用程序 +====== + +> WINE 是一个开源项目,它可以协助很多 Windows 应用程序在 Linux 上运行,就好像它们是原生程序一样。 + +![](https://img.linux.net.cn/data/attachment/album/202103/07/231159kwsn2snlilwbs9ns.jpg) + +在 2021 年,有很多比以往更喜欢 Linux 的原因。在这系列中,我将分享使用 Linux 的 21 种原因。这里是如何使用 WINE 来实现从 Windows 到 Linux 的无缝切换。 + +你有只能在 Windows 上运行的应用程序吗?那一个应用程序阻碍你切换到 Linux 的唯一因素吗?如果是这样的话,你将会很高兴知道 WINE,这是一个开源项目,它几乎重新发明了关键的 Windows 库,使为 Windows 编译的应用程序可以在 Linux 上运行。 + +WINE 代表着“Wine Is Not an Emulator” ,它指的是驱动这项技术的代码。开源开发者从 1993 年就开始致力将应用程序的任何传入 Windows API 调用翻译为 [POSIX][2] 调用。 + +这是一个令人十分惊讶的编程壮举,尤其是考虑到这个项目是独立运行的,没有来自微软的帮助(至少可以这样说),但是也有局限性。一个应用程序偏离 Windows API 的 “内核” 越远,WINE 就越不能预期应用程序的请求。有一些供应商可以弥补这一点,尤其是 [Codeweavers][3] 和 [Valve Software][4]。在需要翻译应用程序的制作者和翻译的人们及公司之间没有协调配合,因此,比如说一个更新的软件作品和从 [WINE 总部][5] 获得完美适配状态之间可能会有一些时间上的滞后。 + +然而,如果你想在 Linux 上运行一个著名的 Windows 应用程序,WINE 可能已经为它准备好了可能性。 + +### 安装 WINE + +你可以从你的 Linux 发行版的软件包存储库中安装 WINE 。在 Fedora、CentOS Stream 或 RHEL 系统上: + +``` +$ sudo dnf install wine +``` + +在 Debian、Linux Mint、Elementary 及相似的系统上: + +``` +$ sudo apt install wine +``` + +WINE 不是一个你自己启动的应用程序。当启动一个 Windows 应用程序时,它是一个被调用的后端。你与 WINE 的第一次交互很可能就发生在你启动一个 Windows 应用程序的安装程序时。 + +### 安装一个应用程序 + +[TinyCAD][6] 是一个极好的用于设计电路的开源应用程序,但是它仅在 Windows 上可用。虽然它是一个小型的应用程序,但是它确实包含一些 .NET 组件,因此应该能对 WINE 进行一些压力测试。 + +首先,下载 TinyCAD 的安装程序。Windows 安装程序通常都是这样,它是一个 `.exe` 文件。在下载后,双击文件来启动它。 + +![WINE TinyCAD 安装向导][7] + +*TinyCAD 的 WINE 安装向导* + +像你在 Windows 上一样逐步完成安装程序。通常最好接受默认选项,尤其是与 WINE 有关的地方。WINE 环境基本上是独立的,隐藏在你的硬盘驱动器上的一个 `drive_c` 目录中,作为 Windows 应用程序使用的一个文件系统的仿真根目录。 + +![WINE TinyCAD 安装和目标驱动器][8] + +*WINE TinyCAD 目标驱动器* + +安装完成后,应用程序通常会为你提供启动机会。如果你正准备测试一下它的话,启动应用程序。 + +### 启动 Windows 应用程序 + +除了在安装后的第一次启动外,在正常情况下,你启动一个 WINE 应用程序的方式与你启动一个本地 Linux 应用程序相同。不管你使用应用程序菜单、活动屏幕或者只是在运行器中输入应用程序的名称,在 WINE 中运行的桌面 Windows 应用程序都会被视为在 Linux 上的本地应用程序。 + +![TinyCAD 使用 WINE 运行][9] + +*通过 WINE 的支持来运行 TinyCAD* + +### 当 WINE 失败时 + +我在 WINE 中的大多数应用程序,包括 TinyCAD ,都能如期运行。不过,也会有例外。在这些情况下,你可以等几个月来查看 WINE 开发者 (或者,如果是一款游戏,就等候 Valve Software)是否进行追加修补,或者你可以联系一个像 Codeweavers 这样的供应商来查看他们是否出售对你所需要的应用程序的服务支持。 + +### WINE 是种欺骗,但它用于正道 + +一些 Linux 用户觉得:如果你使用 WINE 的话,你就是在“欺骗” Linux。它可能会让人有这种感觉,但是 WINE 是一个开源项目,它使用户能够切换到 Linux ,并且仍然能够运行工作或爱好所需的应用程序。如果 WINE 解决了你的问题,让你使用 Linux,那就使用它,并拥抱 Linux 的灵活性。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-wine + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[robsean](https://github.com/robsean) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_screen_windows_files.png?itok=kLTeQUbY (Computer screen with files or windows open) +[2]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains +[3]: https://www.codeweavers.com/crossover +[4]: https://github.com/ValveSoftware/Proton +[5]: http://winehq.org +[6]: https://sourceforge.net/projects/tinycad/ +[7]: https://opensource.com/sites/default/files/wine-tinycad-install.jpg +[8]: https://opensource.com/sites/default/files/wine-tinycad-drive_0.jpg +[9]: https://opensource.com/sites/default/files/wine-tinycad-running.jpg diff --git a/published/202103/20210223 A guide to Python virtual environments with virtualenvwrapper.md b/published/202103/20210223 A guide to Python virtual environments with virtualenvwrapper.md new file mode 100644 index 0000000000..35b591cf1b --- /dev/null +++ b/published/202103/20210223 A guide to Python virtual environments with virtualenvwrapper.md @@ -0,0 +1,126 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13174-1.html) +[#]: subject: (A guide to Python virtual environments with virtualenvwrapper) +[#]: via: (https://opensource.com/article/21/2/python-virtualenvwrapper) +[#]: author: (Ben Nuttall https://opensource.com/users/bennuttall) + +使用 virtualenvwrapper 构建 Python 虚拟环境 +====== + +> 虚拟环境是安全地使用不同版本的 Python 和软件包组合的关键。 + +![](https://img.linux.net.cn/data/attachment/album/202103/04/072251y8wkis7c40i8crkw.jpg) + +Python 对管理虚拟环境的支持,已经提供了一段时间了。Python 3.3 甚至增加了内置的 `venv` 模块,用于创建没有第三方库的环境。Python 程序员可以使用几种不同的工具来管理他们的环境,我使用的工具叫做 [virtualenvwrapper][2]。 + +虚拟环境是将你的 Python 项目及其依赖关系与你的系统安装的 Python 分离的一种方式。如果你使用的是基于 macOS 或 Linux 的操作系统,它很可能在安装中附带了一个 Python 版本,事实上,它很可能依赖于那个特定版本的 Python 才能正常运行。但这是你的计算机,你可能想用它来达到自己的目的。你可能需要安装另一个版本的 Python,而不是操作系统提供的版本。你可能还需要安装一些额外的库。尽管你可以升级你的系统 Python,但不推荐这样做。你也可以安装其他库,但你必须注意不要干扰系统所依赖的任何东西。 + +虚拟环境是创建隔离的关键,你需要安全地修改不同版本的 Python 和不同组合的包。它们还允许你为不同的项目安装同一库的不同版本,这解决了在相同环境满足所有项目需求这个不可能的问题。 + +为什么选择 `virtualenvwrapper` 而不是其他工具?简而言之: + + * 与 `venv` 需要在项目目录内或旁边有一个 `venv` 目录不同,`virtualenvwrapper` 将所有环境保存在一个地方:默认在 `~/.virtualenvs` 中。 + * 它提供了用于创建和激活环境的命令,而且激活环境不依赖于找到正确的 `activate` 脚本。它只需要(从任何地方)`workon projectname`而不需要 `source ~/Projects/flashylights-env/bin/activate`。  + +### 开始使用 + +首先,花点时间了解一下你的系统 Python 是如何配置的,以及 `pip` 工具是如何工作的。 + +以树莓派系统为例,该系统同时安装了 Python 2.7 和 3.7。它还提供了单独的 `pip` 实例,每个版本一个: + + * 命令 `python` 运行 Python 2.7,位于 `/usr/bin/python`。 + * 命令 `python3` 运行 Python 3.7,位于 `/usr/bin/python3`。 + * 命令 `pip` 安装 Python 2.7 的软件包,位于 `/usr/bin/pip`。 + * 命令 `pip3` 安装 Python 3.7 的包,位于 `/usr/bin/pip3`。 + +![Python commands on Raspberry Pi][3] + +在开始使用虚拟环境之前,验证一下使用 `python` 和 `pip` 命令的状态是很有用的。关于你的 `pip` 实例的更多信息可以通过运行 `pip debug` 或 `pip3 debug` 命令找到。 + +在我运行 Ubuntu Linux 的电脑上几乎是相同的信息(除了它是 Python 3.8)。在我的 Macbook 上也很相似,除了唯一的系统 Python 是 2.6,而我用 `brew` 安装 Python 3.8,所以它位于 `/usr/local/bin/python3`(和 `pip3` 一起)。 + +### 安装 virtualenvwrapper + +你需要使用系统 Python 3 的 `pip` 安装 `virtualenvwrapper`: + + +``` +sudo pip3 install virtualenvwrapper +``` + +下一步是配置你的 shell 来加载 `virtualenvwrapper` 命令。你可以通过编辑 shell 的 RC 文件(例如 `.bashrc`、`.bash_profile` 或 `.zshrc`)并添加以下几行: + +``` +export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 +export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv +source /usr/local/bin/virtualenvwrapper.sh +``` + +![bashrc][5] + +如果你的 Python 3 位于其他地方,请根据你的设置修改第一行。 + +关闭你的终端,然后重新打开它,这样才能生效。第一次打开终端时,你应该看到 `virtualenvwrapper` 的一些输出。这只会发生一次,因为一些目录是作为设置的一部分被创建的。 + +现在你应该可以输入 `mkvirtualenv --version` 命令来验证 `virtualenvwrapper` 是否已经安装。 + +### 创建一个新的虚拟环境 + +假设你正在进行一个名为 `flashylights` 的项目。要用这个名字创建一个虚拟环境,请运行该命令: + +``` +mkvirtualenv flashylights +``` + +环境已经创建并激活,所以你会看到 `(flashlylights)` 出现在你的提示前: + +![Flashylights prompt][6] + +现在环境被激活了,事情发生了变化。`python` 现在指向一个与你之前在系统中识别的 Python 实例完全不同的 Python 实例。它为你的环境创建了一个目录,并在其中放置了 Python 3 二进制文件、pip 命令等的副本。输入 `which python` 和 `which pip` 来查看它们的位置。 + +![Flashylights command][7] + +如果你现在运行一个 Python 程序,你可以用 `python` 代替 `python3` 来运行,你可以用 `pip` 代替 `pip3`。你使用 `pip`安装的任何包都将只安装在这个环境中,它们不会干扰你的其他项目、其他环境或系统安装。 + +要停用这个环境,运行 `deactivate` 命令。要重新启用它,运行 `workon flashylights`。 + +你可以用 `workon` 或使用 `lsvirtualenv` 列出所有可用的环境。你可以用 `rmvirtualenv flashylights` 删除一个环境。 + +在你的开发流程中添加虚拟环境是一件明智的事情。根据我的经验,它可以防止我在系统范围内安装我正在试验的库,这可能会导致问题。我发现 `virtualenvwrapper` 是最简单的可以让我进入流程的方法,并无忧无虑地管理我的项目环境,而不需要考虑太多,也不需要记住太多命令。 + +### 高级特性 + + * 你可以在你的系统上安装多个 Python 版本(例如,在 Ubuntu 上使用 [deadsnakes PPA][8]),并使用该版本创建一个虚拟环境,例如,`mkvirtualenv -p /usr/bin/python3.9 myproject`。 + * 可以在进入和离开目录时自动激活、停用。 + * 你可以使用 `postmkvirtualenv` 钩子在每次创建新环境时安装常用工具。 + +更多提示请参见[文档][9]。 + +_本文基于 Ben Nuttall 在 [Tooling Tuesday 上关于 virtualenvwrapper 的帖子][10],经许可后重用。_ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/python-virtualenvwrapper + +作者:[Ben Nuttall][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/bennuttall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/coffee_python.jpg?itok=G04cSvp_ (Python in a coffee cup.) +[2]: https://virtualenvwrapper.readthedocs.io/en/latest/index.html +[3]: https://opensource.com/sites/default/files/uploads/pi-python-cmds.png (Python commands on Raspberry Pi) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://opensource.com/sites/default/files/uploads/bashrc.png (bashrc) +[6]: https://opensource.com/sites/default/files/uploads/flashylights-activated-prompt.png (Flashylights prompt) +[7]: https://opensource.com/sites/default/files/uploads/flashylights-activated-cmds.png (Flashylights command) +[8]: https://tooling.bennuttall.com/deadsnakes/ +[9]: https://virtualenvwrapper.readthedocs.io/en/latest/tips.html +[10]: https://tooling.bennuttall.com/virtualenvwrapper/ diff --git a/published/202103/20210224 Check Your Disk Usage Using ‘duf- Terminal Tool -Friendly Alternative to du and df commands.md b/published/202103/20210224 Check Your Disk Usage Using ‘duf- Terminal Tool -Friendly Alternative to du and df commands.md new file mode 100644 index 0000000000..4a72a2ac46 --- /dev/null +++ b/published/202103/20210224 Check Your Disk Usage Using ‘duf- Terminal Tool -Friendly Alternative to du and df commands.md @@ -0,0 +1,117 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13165-1.html) +[#]: subject: (Check Your Disk Usage Using ‘duf’ Terminal Tool [Friendly Alternative to du and df commands]) +[#]: via: (https://itsfoss.com/duf-disk-usage/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +使用 duf 终端工具检查你的磁盘使用情况 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/01/091533qkx95xomkzfmsdxo.jpg) + +> `duf` 是一个终端工具,旨在增强传统的 Linux 命令 `df` 和 `du`。它可以让你轻松地检查可用磁盘空间,对输出进行分类,并以用户友好的方式呈现。 + +### duf:一个用 Golang 编写的跨平台磁盘使用情况工具 + +![][1] + +在我知道这个工具之前,我更喜欢使用像 [Stacer][2] 这样的 GUI 程序或者预装的 GNOME 磁盘使用情况程序来 [检查可用的磁盘空间][3] 和系统的磁盘使用量。 + +不过,[duf][4] 似乎是一个有用的终端工具,可以检查磁盘使用情况和可用空间,它是用 [Golang][5] 编写的。Abhishek 建议我试一试它,但我对它很感兴趣,尤其是考虑到我目前正在学习 Golang,真是太巧了! + +无论你是终端大师还是只是一个对终端不适应的初学者,它都相当容易使用。当然,它比 [检查磁盘空间利用率命令 df][6] 更容易理解。 + +在你把它安装到你的系统上之前,让我重点介绍一下它的一些主要功能和用法。 + +### duf 的特点 + +![][7] + + * 提供所有挂载设备的概览且易于理解。 + * 能够指定目录/文件名并检查该挂载点的可用空间。 + * 更改/删除输出中的列。 + * 列出 [inode][8] 信息。 + * 输出排序。 + * 支持 JSON 输出。 + * 如果不能自动检测终端的主题,可以指定主题。 + +### 在 Linux 上安装和使用 duf + +你可以在 [AUR][9] 中找到一个 Arch Linux 的软件包。如果你使用的是 [Nix 包管理器][10],也可以找到一个包。 + +对于基于 Debian 的发行版和 RPM 包,你可以去它的 [GitHub 发布区][11] 中获取适合你系统的包。 + +它也适用于 Windows、Android、macOS 和 FreeBSD。 + +在我这里,我需要 [安装 DEB 包][12],然后就可以使用了。安装好后,使用起来很简单,你只要输入: + +``` +duf +``` + +这应该会给你提供所有本地设备、已挂载的任何云存储设备以及任何其他特殊设备(包括临时存储位置等)的详细信息。 + +如果你想一目了然地查看所有 `duf` 的可用命令,你可以输入: + +``` +duf --help +``` + +![][13] + +例如,如果你只想查看本地连接设备的详细信息,而不是其他的,你只需要输入: + +``` +duf --only local +``` + +另一个例子是根据大小按特定顺序对输出进行排序,下面是你需要输入的内容: + +``` +duf --sort size +``` + +输出应该是像这样的: + +![][14] + +你可以探索它的 [GitHub 页面][4],以获得更多关于额外命令和安装说明的信息。 + +- [下载 duf][4] + +### 结束语 + +我发现终端工具 `duf` 相当方便,可以在不需要使用 GUI 程序的情况下,随时查看可用磁盘空间或使用情况。 + +你知道有什么类似的工具吗?欢迎在下面的评论中告诉我你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/duf-disk-usage/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/duf-screenshot.jpg?resize=800%2C481&ssl=1 +[2]: https://itsfoss.com/optimize-ubuntu-stacer/ +[3]: https://itsfoss.com/check-free-disk-space-linux/ +[4]: https://github.com/muesli/duf +[5]: https://golang.org/ +[6]: https://linuxhandbook.com/df-command/ +[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/duf-local.jpg?resize=800%2C195&ssl=1 +[8]: https://linuxhandbook.com/inode-linux/ +[9]: https://itsfoss.com/aur-arch-linux/ +[10]: https://github.com/NixOS/nixpkgs +[11]: https://github.com/muesli/duf/releases +[12]: https://itsfoss.com/install-deb-files-ubuntu/ +[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/duf-commands.jpg?resize=800%2C443&ssl=1 +[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/duf-sort-example.jpg?resize=800%2C365&ssl=1 diff --git a/published/202103/20210224 Set your path in FreeDOS.md b/published/202103/20210224 Set your path in FreeDOS.md new file mode 100644 index 0000000000..00ab8c9daf --- /dev/null +++ b/published/202103/20210224 Set your path in FreeDOS.md @@ -0,0 +1,161 @@ +[#]: subject: (Set your path in FreeDOS) +[#]: via: (https://opensource.com/article/21/2/path-freedos) +[#]: author: (Kevin O'Brien https://opensource.com/users/ahuka) +[#]: collector: (lujun9972) +[#]: translator: (robsean) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13218-1.html) + +在 FreeDOS 中设置你的路径 +====== + +> 学习 FreeDOS 路径的知识,如何设置它,并且如何使用它。 + +![查看职业生涯地图][1] + +你在开源 [FreeDOS][2] 操作系统中所做的一切工作都是通过命令行完成的。命令行以一个 _提示符_ 开始,这是计算机说法的方式,“我准备好了。请给我一些事情来做。”你可以配置你的提示符的外观,但是默认情况下,它是: + +``` +C:\> +``` + +从命令行中,你可以做两件事:运行一个内部命令或运行一个程序。外部命令是在你的 `FDOS` 目录中可找到的以单独文件形式存在的程序,以便运行程序包括运行外部命令。它也意味着你可以使用你的计算机运行应用程序软件来做一些东西。你也可以运行一个批处理文件,但是在这种情况下,你所做的全部工作就变成了运行批处理文件中所列出的一系列命令或程序。 + +### 可执行应用程序文件 + +FreeDOS 可以运行三种类型的应用程序文件: + + 1. **COM** 是一个用机器语言写的,且小于 64 KB 的文件。 + 2. **EXE** 也是一个用机器语言写的文件,但是它可以大于 64 KB 。此外,在 EXE 文件的开头部分有信息,用于告诉 DOS 系统该文件是什么类型的以及如何加载和运行。 + 3. **BAT** 是一个使用文本编辑器以 ASCII 文本格式编写的 _批处理文件_ ,其中包含以批处理模式执行的 FreeDOS 命令。这意味着每个命令都会按顺序执行到文件的结尾。 + +如果你所输入的一个文件名称不能被 FreeDOS 识别为一个内部命令或一个程序,你将收到一个错误消息 “Bad command or filename” 。如果你看到这个错误,它意味着会是下面三种情况中的其中一种: + + 1. 由于某些原因,你所给予的名称是错误的。你可能拼错了文件名称,或者你可能正在使用错误的命令名称。检查名称和拼写,并再次尝试。 + 2. 可能你正在尝试运行的程序并没有安装在计算机上。请确认它已经安装了。 + 3. 文件确实存在,但是 FreeDOS 不知道在哪里可以找到它。 + +在清单上的最后一项就是这篇文章的主题,它被称为路径。如果你已经习惯于使用 Linux 或 Unix ,你可能已经理解 [PATH 变量][3] 的概念。如果你是命令行的新手,那么路径是一个非常重要的足以让你舒适的东西。 + +### 路径 + +当你输入一个可执行应用程序文件的名称时,FreeDOS 必须能找到它。FreeDOS 会在一个具体指定的位置层次结构中查找文件: + + 1. 首先,它查找当前驱动器的活动目录(称为 _工作目录_)。如果你正在目录 `C:\FDOS` 中,接着,你输入名称 `FOOBAR.EXE`,FreeDOS 将在 `C:\FDOS` 中查找带有这个名称的文件。你甚至不需要输入完整的名称。如果你输入 `FOOBAR` ,FreeDOS 将查找任何带有这个名称的可执行文件,不管它是 `FOOBAR.EXE`,`FOOBAR.COM`,或 `FOOBAR.BAT`。只要 FreeDOS 能找到一个匹配该名称的文件,它就会运行该可执行文件。 + 2. 如果 FreeDOS 不能找到你所输入名称的文件,它将查询被称为 `PATH` 的一些东西。每当 DOS 不能在当前活动命令中找到文件时,会指示 DOS 检查这个列表中目录。 + +你可以随时使用 `path` 命令来查看你的计算机的路径。只需要在 FreeDOS 提示符中输入 `path` ,FreeDOS 就会返回你的路径设置: + +``` +C:\>path +PATH=C:\FDOS\BIN +``` + +第一行是提示符和命令,第二行是计算机返回的东西。你可以看到 DOS 第一个查看的位置就是位于 `C` 驱动器上的 `FDOS\BIN`。如果你想更改你的路径,你可以输入一个 `path` 命令以及你想使用的新路径: + +``` +C:\>path=C:\HOME\BIN;C:\FDOS\BIN +``` + +在这个示例中,我设置我的路径到我个人的 `BIN` 文件夹,我把它放在一个叫 `HOME` 的自定义目录中,然后再设置为 `FDOS/BIN`。现在,当你检查你的路径时: + +``` +C:\>path +PATH=C:\HOME\BIN;C:\FDOS\BIN +``` + +路径设置是按所列目录的顺序处理的。 + +你可能会注意到有一些字符是小写的,有一些字符是大写的。你使用哪一种都真的不重要。FreeDOS 是不区分大小写的,并且把所有的东西都作为大写字母对待。在内部,FreeDOS 使用的全是大写字母,这就是为什么你看到来自你命令的输出都是大写字母的原因。如果你以小写字母的形式输入命令和文件名称,在一个转换器将自动转换它们为大写字母后,它们将被执行。 + +输入一个新的路径来替换先前设置的路径。 + +### autoexec.bat 文件 + +你可能遇到的下一个问题的是 FreeDOS 默认使用的第一个路径来自何处。这与其它一些重要的设置一起定义在你的 `C` 驱动器的根目录下的 `AUTOEXEC.BAT` 文件中。这是一个批处理文件,它在你启动 FreeDOS 时会自动执行(由此得名)。你可以使用 FreeDOS 程序 `EDIT` 来编辑这个文件。为查看或编辑这个文件的内容,输入下面的命令: + +``` +C:\>edit autoexec.bat +``` + +这一行出现在顶部附近: + +``` +SET PATH=%dosdir%\BIN +``` + +这一行定义默认路径的值。 + +在你查看 `AUTOEXEC.BAT` 后,你可以通过依次按下面的按键来退出 EDIT 应用程序: + + 1. `Alt` + 2. `f` + 3. `x` + +你也可以使用键盘快捷键 `Alt+X`。 + +### 使用完整的路径 + +如果你在你的路径中忘记包含 `C:\FDOS\BIN` ,那么你将不能快速访问存储在这里的任何应用程序,因为 FreeDOS 不知道从哪里找到它们。例如,假设我设置我的路径到我个人应用程序集合: + +``` +C:\>path=C:\HOME\BIN +``` + +内置在命令行中应用程序仍然能正常工作: + +``` +C:\cd HOME +C:\HOME>dir +ARTICLES +BIN +CHEATSHEETS +GAMES +DND +``` + +不过,外部的命令将不能运行: + +``` +C:HOME\ARTICLES>BZIP2 -c example.txt +Bad command or filename - "BZIP2" +``` + +通过提供命令的一个 _完整路径_ ,你可以总是执行一个在你的系统上且不在你的路径中的命令: + +``` +C:HOME\ARTICLES>C:\FDOS\BIN\BZIP2 -c example.txt +C:HOME\ARTICLES>DIR +example.txb +``` + +你可以使用同样的方法从外部介质或其它目录执行应用程序。 + +### FreeDOS 路径 + +通常情况下,你很可能希望在路径中保留 `C:\PDOS\BIN` ,因为它包含所有使用 FreeDOS 分发的默认应用程序。 + +除非你更改 `AUTOEXEC.BAT` 中的路径,否则将在重新启动后恢复默认路径。 + +现在,你知道如何在 FreeDOS 中管理你的路径,你能够以最适合你的方式了执行命令和维护你的工作环境。 + +_致谢 [DOS 课程 5: 路径][4] (在 CC BY-SA 4.0 协议下发布) 为本文提供的一些信息。_ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/path-freedos + +作者:[Kevin O'Brien][a] +选题:[lujun9972][b] +译者:[robsean](https://github.com/robsean) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ahuka +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/career_journey_road_gps_path_map_520.png?itok=PpL6jJgY (Looking at a map for career journey) +[2]: https://www.freedos.org/ +[3]: https://opensource.com/article/17/6/set-path-linux +[4]: https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-5-the-path/ diff --git a/published/202103/20210225 4 new open source licenses.md b/published/202103/20210225 4 new open source licenses.md new file mode 100644 index 0000000000..56cdc56402 --- /dev/null +++ b/published/202103/20210225 4 new open source licenses.md @@ -0,0 +1,59 @@ +[#]: subject: (4 new open source licenses) +[#]: via: (https://opensource.com/article/21/2/osi-licenses-cal-cern-ohl) +[#]: author: (Pam Chestek https://opensource.com/users/pchestek) +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13224-1.html) + +四个新式开源许可证 +====== + +> 让我们来看看 OSI 最新批准的加密自治许可证和 CERN 开源硬件许可协议。 + +![](https://img.linux.net.cn/data/attachment/album/202103/21/221014mw8lhxox0kkjk04z.jpg) + +作为 [开源定义][2]Open Source Defintion(OSD)的管理者,[开源促进会][3]Open Source Initiative(OSI)20 年来一直在批准“开源”许可证。这些许可证是开源软件生态系统的基础,可确保每个人都可以使用、改进和共享软件。当一个许可证获批为“开源”时,是因为 OSI 认为该许可证可以促进相互的协作和共享,从而使得每个参与开源生态的人获益。 + +在过去的 20 年里,世界发生了翻天覆地的变化。现如今,软件以新的甚至是无法想象的方式在被使用。OSI 已经预料到,曾经被人们所熟知的开源许可证现已无法满足如今的要求。因此,许可证管理者已经加强了工作,为更广泛的用途提交了几个新的许可证。OSI 所面临的挑战是在评估这些新的许可证概念是否会继续推动共享和合作,是否被值得称为“开源”许可证,最终 OSI 批准了一些用于特殊领域的新式许可证。 + +### 四个新式许可证 + +第一个是 [加密自治许可证][4]Cryptographic Autonomy License(CAL)。该许可证是为分布式密码应用程序而设计的。此许可证所解决的问题是,现有的开源许可证无法保证开放性,因为如果没有义务也与其他对等体共享数据,那么一个对等体就有可能损害网络的运行。因此,除了是一个强有力的版权保护许可外,CAL 还包括向第三方提供独立使用和修改软件所需的权限和资料的义务,而不会让第三方有数据或功能的损失。 + +随着越来越多的人使用加密结构进行点对点共享,那么更多的开发人员发现自己需要诸如 CAL 之类的法律工具也就不足为奇了。 OSI 的两个邮件列表 License-Discuss 和 License-Review 上的社区,讨论了拟议的新开源许可证,并询问了有关此许可证的诸多问题。我们希望由此产生的许可证清晰易懂,并希望对其他开源从业者有所裨益。 + +接下来是,欧洲核研究组织(CERN)提交的 CERN 开放硬件许可证Open Hardware Licence(OHL)系列许可证以供审议。它包括三个许可证,其主要用于开放硬件,这是一个与开源软件相似的开源访问领域,但有其自身的挑战和细微差别。硬件和软件之间的界线现已变得相当模糊,因此应用单独的硬件和软件许可证变得越来越困难。欧洲核子研究组织(CERN)制定了一个可以确保硬件和软件自由的许可证。 + +OSI 可能在开始时就没考虑将开源硬件许可证添加到其开源许可证列表中,但是世界早已发生变革。因此,尽管 CERN 许可证中的措词涵盖了硬件术语,但它也符合 OSI 认可的所有开源软件许可证的条件。 + +CERN 开源硬件许可证包括一个 [宽松许可证][5]、一个 [弱互惠许可证][6] 和一个 [强互惠许可证][7]。最近,该许可证已被一个国际研究项目采用,该项目正在制造可用于 COVID-19 患者的简单、易于生产的呼吸机。 + +### 了解更多 + +CAL 和 CERN OHL 许可证是针对特殊用途的,并且 OSI 不建议把它们用于其它领域。但是 OSI 想知道这些许可证是否会按预期发展,从而有助于在较新的计算机领域中培育出健壮的开源生态。 + +可以从 OSI 获得关于 [许可证批准过程][8] 的更多信息。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/osi-licenses-cal-cern-ohl + +作者:[Pam Chestek][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/pchestek +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/LAW_lawdotgov3.png?itok=e4eFKe0l "Law books in a library" +[2]: https://opensource.org/osd +[3]: https://opensource.org/ +[4]: https://opensource.org/licenses/CAL-1.0 +[5]: https://opensource.org/CERN-OHL-P +[6]: https://opensource.org/CERN-OHL-W +[7]: https://opensource.org/CERN-OHL-S +[8]: https://opensource.org/approval diff --git a/published/202103/20210226 3 Linux terminals you need to try.md b/published/202103/20210226 3 Linux terminals you need to try.md new file mode 100644 index 0000000000..8a70f27572 --- /dev/null +++ b/published/202103/20210226 3 Linux terminals you need to try.md @@ -0,0 +1,81 @@ +[#]: subject: (3 Linux terminals you need to try) +[#]: via: (https://opensource.com/article/21/2/linux-terminals) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13186-1.html) + +值得尝试的 3 个 Linux 终端 +====== + +> Linux 让你能够选择你喜欢的终端界面,而不是它强加的界面。 + +![](https://img.linux.net.cn/data/attachment/album/202103/09/054053zum6n77cpnnug0x1.jpg) + +在 2021 年,人们喜欢 Linux 的理由比以往任何时候都多。在这个系列中,我将分享 21 个使用 Linux 的不同理由。能够选择自己的终端是使用 Linux 的一个重要原因。 + +很多人认为一旦你用过一个终端界面,你就已经用过所有的终端了。但喜欢终端的用户都知道,它们之间有一些细微但重要的区别。本文将介绍我最喜欢的三种。 + +不过在深入研究它们之前,先要了解 shell 和终端terminal之间的区别。终端(技术上说是终端模拟器terminal emulator,因为终端曾经是物理硬件设备)是一个在桌面上的窗口中运行的应用。shell 是在终端窗口中对你可见的引擎。流行的 shell 有 [Bash][2]、[tcsh][3] 和 [zsh][4],它们都在终端中运行。 + +在现代 Linux 上几乎不用说,至少本文中所有的终端都有标签界面。 + +### Xfce 终端 + +![Xfce ][5] + +[轻量级 Xfce 桌面][7] 提供了一个轻量级的终端,很好地平衡了功能和简单性。它提供了对 shell 的访问(如预期的那样),并且它可以轻松访问几个重要的配置选项。你可以设置当你双击文本时哪些字符会断字、选择你的默认字符编码,并禁用终端窗口的 Alt 快捷方式,这样你最喜欢的 Bash 快捷方式就会传递到 shell。你还可以设置字体和新的颜色主题,或者从常用预设列表中加载颜色主题。它甚至在顶部有一个可选的工具栏,方便你访问你最喜欢的功能。 + +对我来说,Xfce 的亮点功能是可以非常容易地为你打开的每一个标签页改变背景颜色。当在服务器上运行远程 shell 时,这是非常有价值的。它让我知道自己在哪个标签页中,从而避免了我犯愚蠢的错误。 + +### rxvt-unicode + +![rxvt][8] + +[rxvt 终端][9] 是我最喜欢的轻量级控制台。它有许多老式 [xterm][10] 终端仿真器的功能,但它的扩展性更强。它的配置是在 `~/.Xdefaults` 中定义的,所以没有偏好面板或设置菜单,但这使得它很容易管理和备份你的设置。通过使用一些 Perl 库,rxvt 可以有标签,并且通过 xrdb,它可以访问字体和任何你能想到的颜色主题。你可以设置像 `URxvt.urlLancher: firefox` 这样的属性来设置当你打开 URL 时启动的网页浏览器,改变滚动条的外观,修改键盘快捷键等等。 + +最初的 rxvt 不支持 Unicode(因为当时 Unicode 还不存在),但 `rxvt-unicode`(有时也叫 `urxvt`)包提供了一个完全支持 Unicode 的补丁版本。 + +我在每台电脑上都有 rxvt,因为对我来说它是最好的通用终端。它不一定是所有用户的最佳终端(例如,它没有拖放界面)。不过,对于寻找快速和灵活终端的中高级用户来说,rxvt 是一个简单的选择。 + +### Konsole + +![Konsole][11] + +Konsole 是 KDE Plasma 桌面的终端,是我转到 Linux 后使用的第一个终端,所以它是我对所有其他终端的标准。它确实设定了一个很高的标准。Konsole 有所有通常的不错的功能(还有些其他的),比如简单的颜色主题加上配置文件支持、字体选择、编码、可分离标签、可重命名标签等等。但这在现代桌面上是可以预期的(至少,如果你的桌面运行的是 Plasma 的话)。 + +Konsole 比其他终端领先许多年(或者几个月)。它可以垂直或水平地分割窗口。你可以把输入复制到所有的标签页上(就像 [tmux][12] 一样)。你可以将其设置为监视自身是否静音或活动并配置通知。如果你在 Android 手机上使用 KDE Connect,这意味着当一个任务完成时,你可以在手机上收到通知。你可以将 Konsole 的输出保存到文本或 HTML 文件中,为打开的标签页添加书签,克隆标签页,调整搜索设置等等。 + +Konsole 是一个真正的高级用户终端,但它也非常适合新用户。你可以将文件拖放到 Konsole 中,将目录改为硬盘上的特定位置,也可以将路径粘贴进去,甚至可以将文件复制到 Konsole 的当前工作目录中。这让使用终端变得很简单,这也是所有用户都能理解的。 + +### 尝试一个终端 + +你的审美观念是黑暗的办公室和黑色背景下绿色文字的温暖光芒吗?还是喜欢阳光明媚的休息室和屏幕上舒缓的墨黑色字体?无论你对完美电脑设置的愿景是什么,如果你喜欢通过输入命令高效地与操作系统交流,那么 Linux 已经为你提供了一个接口。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-terminals + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/freedos.png?itok=aOBLy7Ky (4 different color terminal windows with code) +[2]: https://opensource.com/resources/what-bash +[3]: https://opensource.com/article/20/8/tcsh +[4]: https://opensource.com/article/19/9/getting-started-zsh +[5]: https://opensource.com/sites/default/files/uploads/terminal-xfce.jpg (Xfce ) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://opensource.com/article/19/12/xfce-linux-desktop +[8]: https://opensource.com/sites/default/files/uploads/terminal-rxvt.jpg (rxvt) +[9]: https://opensource.com/article/19/10/why-use-rxvt-terminal +[10]: https://opensource.com/article/20/7/xterm +[11]: https://opensource.com/sites/default/files/uploads/terminal-konsole.jpg (Konsole) +[12]: https://opensource.com/article/20/1/tmux-console diff --git a/published/202103/20210228 How to Install the Latest Erlang on Ubuntu Linux.md b/published/202103/20210228 How to Install the Latest Erlang on Ubuntu Linux.md new file mode 100644 index 0000000000..57d06c19bb --- /dev/null +++ b/published/202103/20210228 How to Install the Latest Erlang on Ubuntu Linux.md @@ -0,0 +1,120 @@ +[#]: subject: (How to Install the Latest Erlang on Ubuntu Linux) +[#]: via: (https://itsfoss.com/install-erlang-ubuntu/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13182-1.html) + +如何在 Ubuntu Linux 上安装最新的 Erlang +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/07/001753blfwcg2gc2c2lcgl.jpg) + +[Erlang][1] 是一种用于构建大规模可扩展实时系统的函数式编程语言。Erlang 最初是由 [爱立信][2] 创建的专有软件,后来被开源。 + +Erlang 在 [Ubuntu 的 Universe 仓库][3] 中可用。启用该仓库后,你可以使用下面的命令轻松安装它: + +``` +sudo apt install erlang +``` + +![][4] + +但是,*Ubuntu 仓库提供的 Erlang 版本可能不是最新的*。 + +如果你想要 Ubuntu 上最新的 Erlang 版本,你可以添加 [Erlang Solutions 提供的][5]仓库。它们为各种 Linux 发行版、Windows 和 macOS 提供了预编译的二进制文件。 + +如果你之前安装了一个名为 `erlang` 的包,那么它将会被升级到由添加的仓库提供的较新版本。 + +### 在 Ubuntu 上安装最新版本的 Erlang + +你需要[在 Linux 终端下载密钥文件][6]。你可以使用 `wget` 工具,所以请确保你已经安装了它: + +``` +sudo apt install wget +``` + +接下来,使用 `wget` 下载 Erlang Solution 仓库的 GPG 密钥,并将其添加到你的 apt 打包系统中。添加了密钥后,你的系统就会信任来自该仓库的包。 + +``` +wget -O- https://packages.erlang-solutions.com/ubuntu/erlang_solutions.asc | sudo apt-key add - +``` + +现在,你应该在你的 APT `sources.list.d` 目录下为 Erlang 添加一个文件,这个文件将包含有关仓库的信息,APT 包管理器将使用它来获取包和未来的更新。 + +对于 Ubuntu 20.04(和 Ubuntu 20.10),使用以下命令: + +``` +echo "deb https://packages.erlang-solutions.com/ubuntu focal contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list +``` + +我知道上面的命令提到了 Ubuntu 20.04 focal,但它也适用于 Ubuntu 20.10 groovy。 + +对于 **Ubuntu 18.04**,使用以下命令: + +``` +echo "deb https://packages.erlang-solutions.com/ubuntu bionic contrib" | sudo tee /etc/apt/sources.list.d/erlang-solution.list +``` + +你必须更新本地的包缓存,以通知它关于新添加的仓库的包。 + +``` +sudo apt update +``` + +你会注意到,它建议你进行一些升级。如果你列出了可用的升级,你会在那里找到 erlang 包。要更新现有的 erlang 版本或重新安装,使用这个命令: + +``` +sudo apt install erlang +``` + +安装好后,你可以测试一下。 + +![][7] + +要退出 Erlang shell,使用 `Ctrl+g`,然后输入 `q`,由于我从来没有用过 Erlang,所以我只好尝试了一些按键,然后发现了操作方法。 + +#### 删除 erlang + +要删除该程序,请使用以下命令: + +``` +sudo apt remove erlang +``` + +还会有一些依赖关系。你可以用下面的命令删除它们: + +``` +sudo apt autoremove +``` + +如果你愿意,你也可以删除添加的仓库文件。 + +``` +sudo rm /etc/apt/sources.list.d/erlang-solution.list +``` + +就是这样。享受在 Ubuntu Linux 上使用 Erlang 学习和编码的乐趣。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-erlang-ubuntu/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://www.erlang.org/ +[2]: https://www.ericsson.com/en +[3]: https://itsfoss.com/ubuntu-repositories/ +[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/install-erlang-ubuntu.png?resize=800%2C445&ssl=1 +[5]: https://www.erlang-solutions.com/downloads/ +[6]: https://itsfoss.com/download-files-from-linux-terminal/ +[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/erlang-shell.png?resize=800%2C274&ssl=1 diff --git a/published/202103/20210301 4 open source tools for running a Linux server.md b/published/202103/20210301 4 open source tools for running a Linux server.md new file mode 100644 index 0000000000..9e19ca6352 --- /dev/null +++ b/published/202103/20210301 4 open source tools for running a Linux server.md @@ -0,0 +1,95 @@ +[#]: subject: (4 open source tools for running a Linux server) +[#]: via: (https://opensource.com/article/21/3/linux-server) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13192-1.html) + +4 个打造多媒体和共享服务器的开源工具 +====== + +> 通过 Linux,你可以将任何设备变成服务器,以共享数据、媒体文件,以及其他资源。 + +![](https://img.linux.net.cn/data/attachment/album/202103/10/200529sqfnhnh553xfixuw.jpg) + +在 2021 年,人们喜欢 Linux 的理由比以往任何时候都多。在这个系列中,我将分享 21 个使用 Linux 的不同理由。这里有四个开源工具,可以将任何设备变成 Linux 服务器。  + +有时,我会发现有关服务器概念的某种神秘色彩。许多人,如果他们在脑海中有一个形象的话,他们认为服务器一定是又大又重的机架式机器,由一个谨慎的系统管理员和一群神奇的修理工精心维护。另一些人则把服务器设想成虚无缥缈的云朵,以某种方式为互联网提供动力。 + +虽然这种敬畏对 IT 工作的安全性是有好处的,但事实上,在开源计算中,没有人认为服务器是或应该是专家的专属领域。文件和资源共享是开源不可或缺的,而开源让它变得比以往任何时候都更容易,正如这四个开源服务器项目所展示的那样。 + +### Samba + +[Samba 项目][2] 是 Linux 和 Unix 的 Windows 互操作程序套件。尽管它是大多数用户从未与之交互的底层代码,但它的重要性却不容小觑。从历史上看,早在微软争相消灭 Linux 和开源的时候,它就是最大最重要的目标。时代变了,微软已经与 Samba 团队会面以提供支持(至少目前是这样),在这一切中,该项目继续确保 Linux 和 Windows 计算机可以轻松地在同一网络上共存。换句话说,无论你使用什么平台,Samba 都可以让你可以轻松地在本地网络上共享文件。 + +在 [KDE Plasma][3] 桌面上,你可以右键点击自己的任何目录,选择**属性**。在**属性**对话框中,点击**共享**选项卡,并启用**与 Samba 共享(Microsoft Windows)**。 + +![Samba][4] + +就这样,你已经为本地网络上的用户打开了一个只读访问的目录。也就是说,当你在家的时候,你家同一个 WiFi 网络上的任何人都可以访问该文件夹,如果你在工作,工作场所网络上的任何人都可以访问该文件夹。当然,要访问它,其他用户需要知道在哪里可以找到它。通往计算机的路径可以用 [IP 地址][6] 表示,也可以根据你的网络配置,用主机名表示。 + +### Snapdrop + +如果通过 IP 地址和主机名来打开网络是令人困惑的,或者如果你不喜欢打开一个文件夹进行共享而忘记它是开放的,那么你可能更喜欢 [Snapdrop][7]。这是一个开源项目,你可以自己运行,也可以使用互联网上的演示实例通过 WebRTC 连接计算机。WebRTC 可以通过 Web 浏览器实现点对点的连接,也就是说同一网络上的两个用户可以通过 Snapdrop 找到对方,然后直接进行通信,而不需要通过外部服务器。 + +![Snapdrop][8] + +一旦两个或更多的客户端连接了同一个 Snapdrop 服务,用户就可以通过本地网络来回交换文件和聊天信息。传输的速度很快,而且你的数据也保持在本地。 + +### VLC + +流媒体服务比以往任何时候都更常见,但我在音乐和电影方面有非常规的口味,所以典型的服务似乎很少有我想要的东西。幸运的是,通过连接到媒体驱动器,我可以很容易地将自己的内容从我的电脑上传送到我的房子各个角落。例如,当我想在电脑显示器以外的屏幕上观看一部电影时,我可以在我的网络上串流电影文件,并通过任何可以接收 HTTP 的应用来播放它,无论该应用是在我的电视、游戏机还是手机上。 + +[VLC][9] 可以轻松设置流媒体。事实上,它是**媒体**菜单中的一个选项,或者你可以按下键盘 `Ctrl+S`。将一个文件或一组文件添加到你的流媒体队列中,然后点击 **Stream** 按钮。 + +![VLC][10] + +VLC 通过配置向导来帮助你决定流媒体数据时使用什么协议。我倾向于使用 HTTP,因为它通常在任何设备上可用。当 VLC 开始播放文件时,请进入播放文件计算机的 IP 或主机名以及给它分配的端口 (当使用 HTTP 时,默认是 8080), 然后坐下来享受。 + +### PulseAudio + +我最喜欢的现代 Linux 功能之一是 [PulseAudio][11]。Pulse 为 Linux 上的音频实现了惊人的灵活性,包括可自动发现的本地网络流媒体。这个功能对我来说的好处是,我可以在办公室的工作站上播放播客和技术会议视频,并通过手机串流音频。无论我走进厨房、休息室还是后院最远的地方,我都能获得完美的音频。此功能在 PulseAudio 之前很久就存在,但是 Pulse 使它像单击按钮一样容易。 + +需要进行一些设置。首先,你必须确保安装 PulseAudio 设置包(**paprefs**),以便在 PulseAudio 配置中启用网络音频。 + +![PulseAudio][12] + +在 **paprefs** 中,启用网络访问你的本地声音设备,可能不需要认证(假设你信任本地网络上的其他人),并启用你的计算机作为 **Multicast/RTP 发送者**。我通常只选择串流通过我的扬声器播放的任何音频,但你可以在 Pulse 输出选项卡中创建一个单独的音频设备,这样你就可以准确地选择串流的内容。你在这里有三个选项: + + * 串流任何在扬声器上播放的音频 + * 串流所有输出的声音 + * 只将音频直接串流到多播设备(按需)。 + +一旦启用,你的声音就会串流到网络中,并可被其他本地 Linux 设备接收。这是简单和动态的音频共享。 + +### 分享的不仅仅是代码 + +Linux 是共享的。它在服务器领域很有名,因为它很擅长*服务*。无论是提供音频流、视频流、文件,还是出色的用户体验,每一台 Linux 电脑都是一台出色的 Linux 服务器。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/linux-server + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rack_server_sysadmin_cloud_520.png?itok=fGmwhf8I (A rack of servers, blue background) +[2]: http://samba.org +[3]: https://opensource.com/article/19/12/linux-kde-plasma +[4]: https://opensource.com/sites/default/files/uploads/samba_0.jpg (Samba) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/article/18/5/how-find-ip-address-linux +[7]: https://github.com/RobinLinus/snapdrop +[8]: https://opensource.com/sites/default/files/uploads/snapdrop.jpg (Snapdrop) +[9]: https://www.videolan.org/index.html +[10]: https://opensource.com/sites/default/files/uploads/vlc-stream.jpg (VLC) +[11]: https://www.freedesktop.org/wiki/Software/PulseAudio/ +[12]: https://opensource.com/sites/default/files/uploads/pulse.jpg (PulseAudio) diff --git a/published/202103/20210302 Meet SysMonTask- A Windows Task Manager Lookalike for Linux.md b/published/202103/20210302 Meet SysMonTask- A Windows Task Manager Lookalike for Linux.md new file mode 100644 index 0000000000..f26fb208ae --- /dev/null +++ b/published/202103/20210302 Meet SysMonTask- A Windows Task Manager Lookalike for Linux.md @@ -0,0 +1,130 @@ +[#]: subject: (Meet SysMonTask: A Windows Task Manager Lookalike for Linux) +[#]: via: (https://itsfoss.com/sysmontask/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13189-1.html) + +SysMonTask:一个类似于 Windows 任务管理器的 Linux 系统监控器 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/09/232304ljsr5jfgluffn4a4.jpg) + +得益于桌面环境,几乎所有的 [Linux 发行版都带有任务管理器应用程序][1]。除此之外,还有 [一些其他的 Linux 的系统监控应用程序][2],它们具有更多的功能。 + +但最近我遇到了一个为 Linux 创建的任务管理器,它看起来像……嗯……Windows 的任务管理器。 + +你自己看看就知道了。 + +![][3] + +就我个人而言,我不确定用户界面的相似性是否有意义,但开发者和其他一些 Linux 用户可能不同意我的观点。 + +### SysMonTask: 一个具有 Windows 任务管理器外观的系统监控器 + +![][4] + +开源软件 [SysMonTask][5] 将自己描述为“具有 Windows 任务管理器的紧凑性和实用性的 Linux 系统监控器,以实现更高的控制和监控”。 + +SysMonTask 以 Python 编写,拥有以下功能: + + * 系统监控图。 + * 显示 CPU、内存、磁盘、网络适配器、单个 Nvidia GPU 的统计数据。 + * 在最近的版本中增加了对挂载磁盘列表的支持。 + * 用户进程选项卡可以进行进程过滤,显示递归-CPU、递归-内存和列头的汇总值。 + * 当然,你可以在进程选项卡中杀死一个进程。 + * 还支持系统主题(深色和浅色)。 + +### 体验 SysMonTask + +SysMonTask 需要提升权限。当你启动它时,你会被要求提供你的管理员密码。我不喜欢一个任务管理器一直用 `sudo` 运行,但这只是我的喜好。 + +我玩了一下,探索它的功能。磁盘的使用量基本稳定不变,所以我把一个 10GB 的文件从外部 SSD 复制到笔记本的磁盘上几次。你可以看到文件传输时对应的峰值。 + +![][6] + +进程标签也很方便。它在列的顶部显示了累积的资源利用率。 + +杀死按钮被添加在底部,所以你要做的就是选择一个进程,然后点击“Killer” 按钮。它在 [杀死进程][7] 之前会询问你的确认。 + +![][8] + +### 在 Linux 发行版上安装 SysMonTask + +对于一个简单的应用程序,它需要下载 50 MB 的存档文件,并占用了大约 200 MB 的磁盘。我想这是因为 Python 的依赖性。 + +还有就是它读取的是 env。 + +在写这篇文章的时候,SysMonTask 可以通过 [PPA][9] 在基于 Ubuntu 的发行版上使用。 + +在基于 Ubuntu 的发行版上,打开一个终端,使用以下命令添加 PPA 仓库: + +``` +sudo add-apt-repository ppa:camel-neeraj/sysmontask +``` + +当然,你会被要求输入密码。在新版本中,仓库列表会自动更新。所以,你可以直接安装应用程序: + +``` +sudo apt install sysmontask +``` + +基于 Debian 的发行版也可以尝试从 deb 文件中安装它。它可以在发布页面找到。 + +对于其他发行版,没有现成的软件包。令我惊讶的是,它基本上是一个 Python 应用程序,所以可以为其他发行版添加一个 PIP 安装程序。也许开发者会在未来的版本中添加它。 + +由于它是开源软件,你可以随时得到源代码。 + +- [SysMonTask Deb 文件和源代码][10] + +安装完毕后,在菜单中寻找 SysMonTask,并从那里启动它。 + +#### 删除 SysMonTask + +如果你想删除它,使用以下命令: + +``` +sudo apt remove sysmontask +``` + +最好也 [删除 PPA][11]: + +``` +sudo add-apt-repository -r ppa:camel-neeraj/sysmontask +``` + +你也可以在这里 [使用 PPA 清除][12] 工具,这是一个处理 PPA 应用程序删除的方便工具。 + +### 你会尝试吗? + +对我来说,功能比外观更重要。SysMonTask 确实有额外的功能,监测磁盘性能和检查 GPU 统计数据,这是其他系统监视器通常不包括的东西。 + +如果你尝试并喜欢它,也许你会喜欢添加 `Ctrl+Alt+Del` 快捷键来启动 SysMonTask,以获得完整的感觉 :) + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/sysmontask/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/task-manager-linux/ +[2]: https://itsfoss.com/linux-system-monitoring-tools/ +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/sysmontask-1.png?resize=800%2C559&ssl=1 +[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/SysMonTask-CPU.png?resize=800%2C537&ssl=1 +[5]: https://github.com/KrispyCamel4u/SysMonTask +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/02/sysmontask-disk-usage.png?resize=800%2C498&ssl=1 +[7]: https://itsfoss.com/how-to-find-the-process-id-of-a-program-and-kill-it-quick-tip/ +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/kill-process-sysmontask.png?resize=800%2C500&ssl=1 +[9]: https://itsfoss.com/ppa-guide/ +[10]: https://github.com/KrispyCamel4u/SysMonTask/releases +[11]: https://itsfoss.com/how-to-remove-or-delete-ppas-quick-tip/ +[12]: https://itsfoss.com/ppa-purge/ diff --git a/published/202103/20210303 Guake Terminal- A Customizable Linux Terminal for Power Users -Inspired by an FPS Game.md b/published/202103/20210303 Guake Terminal- A Customizable Linux Terminal for Power Users -Inspired by an FPS Game.md new file mode 100644 index 0000000000..14688c7cde --- /dev/null +++ b/published/202103/20210303 Guake Terminal- A Customizable Linux Terminal for Power Users -Inspired by an FPS Game.md @@ -0,0 +1,102 @@ +[#]: subject: (Guake Terminal: A Customizable Linux Terminal for Power Users [Inspired by an FPS Game]) +[#]: via: (https://itsfoss.com/guake-terminal/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13187-1.html) + +Guake 终端:一个灵感来自于 FPS 游戏的 Linux 终端 +====== + +> 使用 Guake 终端这个可自定义且强大的适合各种用户的工具快速访问你的终端。 + +### Guake 终端:GNOME 桌面中自上而下终端 + +![](https://img.linux.net.cn/data/attachment/album/202103/09/062119ba36tottztz4torn.jpg) + +[Guake][2] 是一款为 GNOME 桌面量身定做的终端模拟器,采用下拉式设计。 + +它最初的灵感来自于一款 FPS 游戏([Quake][3])中的终端。尽管它最初是作为一个快速和易于使用的终端而设计的,但它的功能远不止于此。 + +Guake 终端提供了大量的功能,以及可定制的选项。在这里,我将重点介绍终端的主要功能,以及如何将它安装到你的任何 Linux 发行版上。 + +### Guake 终端的特点 + +![][4] + + * 按下键盘快捷键(`F12`)以覆盖方式在任何地方启动终端 + * Guake 终端在后台运行,以便持久访问 + * 能够横向和纵向分割标签页 + * 从可用的 shell 中(如果有的话)更改默认的 shell + * 重新对齐 + * 从多种调色板中选择改变终端的外观 + * 能够使用 GUI 方式将终端内容保存到文件中 + * 需要时切换全屏 + * 你可以轻松地保存标签,或在需要时打开新的标签 + * 恢复标签的能力 + * 可选择配置和学习新的键盘快捷键,以快速访问终端和执行任务 + * 改变特定选项卡的颜色 + * 轻松重命名标签,快速访问你需要的内容 + * 快速打开功能,只需点击一下,就可直接在终端中用你最喜欢的编辑器打开文件 + * 能够在启动或显示 Guake 终端时添加自己的命令或脚本。 + * 支持多显示器 + +![][5] + +只是出于乐趣,你可以做很多事情。但是,我也相信,高级用户可以利用这些功能使他们的终端体验更轻松,更高效。 + +就我用它来测试一些东西和写这篇文章的时候,说实话,我觉得我是在召唤终端。所以,我绝对觉得它很酷! + +### 在 Linux 上安装 Guake + +![][6] + +在 Ubuntu、Fedora 和 Arch 的默认仓库中都有 Guake 终端。 + +你可以按照它的官方说明来了解你可以使用的命令,如果你使用的是基于 Ubuntu 的发行版,只需输入: + +``` +sudo apt install guake +``` + +请注意,使用这种方法可能无法获得最新版本。所以,如果你想获得最新的版本,你可以选择使用 [Linux Uprising][7] 的 PPA 来获得最新版本: + +``` +sudo add-apt-repository ppa:linuxuprising/guake +sudo apt update +sudo apt install guake +``` + +无论是哪种情况,你也可以使用 [Pypi][8] 或者参考[官方文档][9]或从 [GitHub 页面][10]获取源码。 + +- [Guake Terminal][10] + +你觉得 Guake 终端怎么样?你认为它是一个有用的终端仿真器吗?你知道有什么类似的软件吗? + +欢迎在下面的评论中告诉我你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/guake-terminal/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/guake-terminal-1.png?resize=800%2C363&ssl=1 +[2]: http://guake-project.org/ +[3]: https://quake.bethesda.net/en +[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/guake-terminal.jpg?resize=800%2C245&ssl=1 +[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/guake-preferences.jpg?resize=800%2C559&ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/guake-terminal-2.png?resize=800%2C432&ssl=1 +[7]: https://www.linuxuprising.com/ +[8]: https://pypi.org/ +[9]: https://guake.readthedocs.io/en/latest/user/installing.html +[10]: https://github.com/Guake/guake diff --git a/published/202103/20210304 An Introduction to WebAssembly.md b/published/202103/20210304 An Introduction to WebAssembly.md new file mode 100644 index 0000000000..a949407612 --- /dev/null +++ b/published/202103/20210304 An Introduction to WebAssembly.md @@ -0,0 +1,84 @@ +[#]: subject: (An Introduction to WebAssembly) +[#]: via: (https://www.linux.com/news/an-introduction-to-webassembly/) +[#]: author: (Marco Fioretti https://training.linuxfoundation.org/announcements/an-introduction-to-webassembly/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13197-1.html) + +WebAssembly 介绍 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/12/222938jww882da88oqzays.jpg) + +### 到底什么是 WebAssembly? + +[WebAssembly][1],也叫 Wasm,是一种为 Web 优化的代码格式和 API(应用编程接口),它可以大大提高网站的性能和能力。WebAssembly 的 1.0 版本于 2017 年发布,并于 2019 年成为 W3C 官方标准。 + +该标准得到了所有主流浏览器供应商的积极支持,原因显而易见:官方列出的 [“浏览器内部”用例][2] 中提到了,其中包括视频编辑、3D 游戏、虚拟和增强现实、p2p 服务和科学模拟。除了让浏览器的功能比JavaScript 强大得多,该标准甚至可以延长网站的寿命:例如,正是 WebAssembly 为 [互联网档案馆的 Flash 动画和游戏][3] 提供了持续的支持。 + +不过,WebAssembly 并不只用于浏览器,目前它还被用于移动和基于边缘环境的 Cloudflare Workers 等产品中。 + +### WebAssembly 如何工作? + +.wasm 格式的文件包含低级二进制指令(字节码),可由使用通用栈的虚拟机以“接近 CPU 原生速度”执行。这些代码被打包成模块(可以被浏览器直接执行的对象),每个模块可以被一个网页多次实例化。模块内部定义的函数被列在一个专用数组中,或称为Table,相应的数据被包含在另一个结构中,称为 缓存数组arraybuffer。开发者可以通过 Javascript `WebAssembly.memory()` 的调用,为 .wasm 代码显式分配内存。 + +.wasm 格式也有纯文本版本,它可以大大简化学习和调试。然而,WebAssembly 并不是真的要供人直接使用。从技术上讲,.wasm 只是一个与浏览器兼容的**编译目标**:一种用高级编程语言编写的软件编译器可以自动翻译的代码格式。 + +这种选择正是使开发人员能够使用数十亿人熟悉的语言(C/C++、Python、Go、Rust 等)直接为用户界面进行编程的方式,但以前浏览器无法对其进行有效利用。更妙的是,至少在理论上程序员可以利用它们,无需直接查看 WebAssembly 代码,也无需担心物理 CPU 实际运行他们的代码(因为目标是一个**虚拟**机)。 + +### 但是我们已经有了 JavaScript,我们真的需要 WebAssembly 吗? + +是的,有几个原因。首先,作为二进制指令,.wasm 文件比同等功能的 JavaScript 文件小得多,下载速度也快得多。最重要的是,Javascript 文件必须在浏览器将其转换为其内部虚拟机可用的字节码之前进行完全解析和验证。 + +而 .wasm 文件则可以一次性验证和编译,从而使“流式编译”成为可能:浏览器在开始**下载它们**的那一刻就可以开始编译和执行它们,就像串流电影一样。 + +这就是说,并不是所有可以想到的 WebAssembly 应用都肯定会比由专业程序员手动优化的等效 JavaScript 应用更快或更小。例如,如果一些 .wasm 需要包含 JavaScript 不需要的库,这种情况可能会发生。 + +### WebAssembly 是否会让 JavaScript 过时? + +一句话:不会。暂时不会,至少在浏览器内不会。WebAssembly 模块仍然需要 JavaScript,因为在设计上它们不能访问文档对象模型 (DOM)—— [主要用于修改网页的 API][4]。此外,.wasm 代码不能进行系统调用或读取浏览器的内存。WebAssembly 只能在沙箱中运行,一般来说,它能与外界的交互甚至比 JavaScript 更少,而且只能通过 JavaScript 接口进行。 + +因此,至少在不久的将来 .wasm 模块将只是通过 JavaScript 提供那些如果用 JavaScript 语言编写会消耗更多带宽、内存或 CPU 时间的部分。 + +### Web 浏览器如何运行 WebAssembly? + +一般来说,浏览器至少需要两块来处理动态应用:运行应用代码的虚拟机(VM),以及可以同时修改浏览器行为和网页显示的 API。 + +现代浏览器内部的虚拟机通过以下方式同时支持 JavaScript 和 WebAssembly: + + 1. 浏览器下载一个用 HTML 标记语言编写的网页,然后进行渲染 + 2. 如果该 HTML 调用 JavaScript 代码,浏览器的虚拟机就会执行该代码。但是... + 3. 如果 JavaScript 代码中包含了 WebAssembly 模块的实例,那么就按照上面的描述获取该实例,然后根据需要通过 JavaScript 的 WebAssembly API 来使用该实例 + 4. 当 WebAssembly 代码产生的东西将修改 DOM(即“宿主”网页)的结构,JavaScript 代码就会接收到,并继续进行实际的修改。 + +### 我如何才能创建可用的 WebAssembly 代码? + +越来越多的编程语言社区支持直接编译到 Wasm,我们建议从 webassembly.org 的 [入门指南][5] 开始,这取决于你使用什么语言。请注意,并不是所有的编程语言都有相同水平的 Wasm 支持,因此你的工作量可能会有所不同。  + +我们计划在未来几个月内发布一系列文章,提供更多关于 WebAssembly 的信息。要自己开始使用它,你可以报名参加 Linux 基金会的免费 [WebAssembly 介绍][6]在线培训课程。 + +这篇[WebAssembly 介绍][7]首次发布在 [Linux Foundation – Training][8]。 + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/news/an-introduction-to-webassembly/ + +作者:[Dan Brown][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://training.linuxfoundation.org/announcements/an-introduction-to-webassembly/ +[b]: https://github.com/lujun9972 +[1]: https://webassembly.org/ +[2]: https://webassembly.org/docs/use-cases/ +[3]: https://blog.archive.org/2020/11/19/flash-animations-live-forever-at-the-internet-archive/ +[4]: https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model/Introduction +[5]: https://webassembly.org/getting-started/developers-guide/ +[6]: https://training.linuxfoundation.org/training/introduction-to-webassembly-lfd133/ +[7]: https://training.linuxfoundation.org/announcements/an-introduction-to-webassembly/ +[8]: https://training.linuxfoundation.org/ diff --git a/published/202103/20210304 Learn to debug code with the GNU Debugger.md b/published/202103/20210304 Learn to debug code with the GNU Debugger.md new file mode 100644 index 0000000000..0aa5d13cda --- /dev/null +++ b/published/202103/20210304 Learn to debug code with the GNU Debugger.md @@ -0,0 +1,301 @@ +[#]: subject: (Learn to debug code with the GNU Debugger) +[#]: via: (https://opensource.com/article/21/3/debug-code-gdb) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13203-1.html) + +学习使用 GDB 调试代码 +====== + +> 使用 GNU 调试器来解决你的代码问题。 + +![](https://img.linux.net.cn/data/attachment/album/202103/14/210547k3q5lek8j9qspkks.jpg) + +GNU 调试器常以它的命令 `gdb` 称呼它,它是一个交互式的控制台,可以帮助你浏览源代码、分析执行的内容,其本质上是对错误的应用程序中出现的问题进行逆向工程。 + +故障排除的麻烦在于它很复杂。[GNU 调试器][2] 并不是一个特别复杂的应用程序,但如果你不知道从哪里开始,甚至不知道何时和为何你可能需要求助于 GDB 来进行故障排除,那么它可能会让人不知所措。如果你一直使用 `print`、`echo` 或 [printf 语句][3]来调试你的代码,当你开始思考是不是还有更强大的东西时,那么本教程就是为你准备的。 + +### 有错误的代码 + +要开始使用 GDB,你需要一些代码。这里有一个用 C++ 写的示例应用程序(如果你一般不使用 C++ 编写程序也没关系,在所有语言中原理都是一样的),其来源于 [猜谜游戏系列][4] 中的一个例子。 + +``` +#include +#include //srand +#include //printf + +using namespace std; + +int main () { + +srand (time(NULL)); +int alpha = rand() % 8; +cout << "Hello world." << endl; +int beta = 2; + +printf("alpha is set to is %s\n", alpha); +printf("kiwi is set to is %s\n", beta); + + return 0; +} // main +``` + +这个代码示例中有一个 bug,但它确实可以编译(至少在 GCC 5 的时候)。如果你熟悉 C++,你可能已经看到了,但这是一个简单的问题,可以帮助新的 GDB 用户了解调试过程。编译并运行它就可以看到错误: + +``` +$ g++ -o buggy example.cpp +$ ./buggy +Hello world. +Segmentation fault +``` + +### 排除段故障 + +从这个输出中,你可以推测变量 `alpha` 的设置是正确的,因为否则的话,你就不会看到它*后面*的那行代码执行。当然,这并不总是正确的,但这是一个很好的工作理论,如果你使用 `printf` 作为日志和调试器,基本上也会得出同样的结论。从这里,你可以假设 bug 在于成功打印的那一行之后的*某行*。然而,不清楚错误是在下一行还是在几行之后。 + +GNU 调试器是一个交互式的故障排除工具,所以你可以使用 `gdb` 命令来运行错误的代码。为了得到更好的结果,你应该从包含有*调试符号*的源代码中重新编译你的错误应用程序。首先,看看 GDB 在不重新编译的情况下能提供哪些信息: + +``` +$ gdb ./buggy +Reading symbols from ./buggy...done. +(gdb) start +Temporary breakpoint 1 at 0x400a44 +Starting program: /home/seth/demo/buggy + +Temporary breakpoint 1, 0x0000000000400a44 in main () +(gdb) +``` + +当你以一个二进制可执行文件作为参数启动 GDB 时,GDB 会加载该应用程序,然后等待你的指令。因为这是你第一次在这个可执行文件上运行 GDB,所以尝试重复这个错误是有意义的,希望 GDB 能够提供进一步的见解。很直观,GDB 用来启动它所加载的应用程序的命令就是 `start`。默认情况下,GDB 内置了一个*断点*,所以当它遇到你的应用程序的 `main` 函数时,它会暂停执行。要让 GDB 继续执行,使用命令 `continue`: + +``` +(gdb) continue +Continuing. +Hello world. + +Program received signal SIGSEGV, Segmentation fault. +0x00007ffff71c0c0b in vfprintf () from /lib64/libc.so.6 +(gdb) +``` + +毫不意外:应用程序在打印 “Hello world” 后不久就崩溃了,但 GDB 可以提供崩溃发生时正在发生的函数调用。这有可能就足够你找到导致崩溃的 bug,但为了更好地了解 GDB 的功能和一般的调试过程,想象一下,如果问题还没有变得清晰,你想更深入地挖掘这段代码发生了什么。 + +### 用调试符号编译代码 + +要充分利用 GDB,你需要将调试符号编译到你的可执行文件中。你可以用 GCC 中的 `-g` 选项来生成这个符号: + +``` +$ g++ -g -o debuggy example.cpp +$ ./debuggy +Hello world. +Segmentation fault +``` + +将调试符号编译到可执行文件中的结果是得到一个大得多的文件,所以通常不会分发它们,以增加便利性。然而,如果你正在调试开源代码,那么用调试符号重新编译测试是有意义的: + +``` +$ ls -l *buggy* *cpp +-rw-r--r--    310 Feb 19 08:30 debug.cpp +-rwxr-xr-x  11624 Feb 19 10:27 buggy* +-rwxr-xr-x  22952 Feb 19 10:53 debuggy* +``` + +### 用 GDB 调试 + +加载新的可执行文件(本例中为 `debuggy`)以启动 GDB: + +``` +$ gdb ./debuggy +Reading symbols from ./debuggy...done. +(gdb) start +Temporary breakpoint 1 at 0x400a44 +Starting program: /home/seth/demo/debuggy + +Temporary breakpoint 1, 0x0000000000400a44 in main () +(gdb) +``` + +如前所述,使用 `start` 命令进行: + +``` +(gdb) start +Temporary breakpoint 1 at 0x400a48: file debug.cpp, line 9. +Starting program: /home/sek/demo/debuggy + +Temporary breakpoint 1, main () at debug.cpp:9 +9       srand (time(NULL)); +(gdb) +``` + +这一次,自动的 `main` 断点可以指明 GDB 暂停的行号和该行包含的代码。你可以用 `continue` 恢复正常操作,但你已经知道应用程序在完成之前就会崩溃,因此,你可以使用 `next` 关键字逐行步进检查你的代码: + +``` +(gdb) next +10 int alpha = rand() % 8; +(gdb) next +11 cout << "Hello world." << endl; +(gdb) next +Hello world. +12 int beta = 2; +(gdb) next +14 printf("alpha is set to is %s\n", alpha); +(gdb) next + +Program received signal SIGSEGV, Segmentation fault. +0x00007ffff71c0c0b in vfprintf () from /lib64/libc.so.6 +(gdb) +``` + +从这个过程可以确认,崩溃不是发生在设置 `beta` 变量的时候,而是执行 `printf` 行的时候。这个 bug 在本文中已经暴露了好几次(破坏者:向 `printf` 提供了错误的数据类型),但暂时假设解决方案仍然不明确,需要进一步调查。 + +### 设置断点 + +一旦你的代码被加载到 GDB 中,你就可以向 GDB 询问到目前为止代码所产生的数据。要尝试数据自省,通过再次发出 `start` 命令来重新启动你的应用程序,然后进行到第 11 行。一个快速到达 11 行的简单方法是设置一个寻找特定行号的断点: + +``` +(gdb) start +The program being debugged has been started already. +Start it from the beginning? (y or n) y +Temporary breakpoint 2 at 0x400a48: file debug.cpp, line 9. +Starting program: /home/sek/demo/debuggy + +Temporary breakpoint 2, main () at debug.cpp:9 +9       srand (time(NULL)); +(gdb) break 11 +Breakpoint 3 at 0x400a74: file debug.cpp, line 11. +``` + +建立断点后,用 `continue` 继续执行: + +``` +(gdb) continue +Continuing. + +Breakpoint 3, main () at debug.cpp:11 +11 cout << "Hello world." << endl; +(gdb) +``` + +现在暂停在第 11 行,就在 `alpha` 变量被设置之后,以及 `beta` 被设置之前。 + +### 用 GDB 进行变量自省 + +要查看一个变量的值,使用 `print` 命令。在这个示例代码中,`alpha` 的值是随机的,所以你的实际结果可能与我的不同: + +``` +(gdb) print alpha +$1 = 3 +(gdb) +``` + +当然,你无法看到一个尚未建立的变量的值: + +``` +(gdb) print beta +$2 = 0 +``` + + +### 使用流程控制 + +要继续进行,你可以步进代码行来到达将 `beta` 设置为一个值的位置: + +``` +(gdb) next +Hello world. +12  int beta = 2; +(gdb) next +14  printf("alpha is set to is %s\n", alpha); +(gdb) print beta +$3 = 2 +``` + +另外,你也可以设置一个观察点,它就像断点一样,是一种控制 GDB 执行代码流程的方法。在这种情况下,你知道 `beta` 变量应该设置为 `2`,所以你可以设置一个观察点,当 `beta` 的值发生变化时提醒你: + +``` +(gdb) watch beta > 0 +Hardware watchpoint 5: beta > 0 +(gdb) continue +Continuing. + +Breakpoint 3, main () at debug.cpp:11 +11 cout << "Hello world." << endl; +(gdb) continue +Continuing. +Hello world. + +Hardware watchpoint 5: beta > 0 + +Old value = false +New value = true +main () at debug.cpp:14 +14 printf("alpha is set to is %s\n", alpha); +(gdb) +``` + +你可以用 `next` 手动步进完成代码的执行,或者你可以用断点、观察点和捕捉点来控制代码的执行。 + +### 用 GDB 分析数据 + +你可以以不同格式查看数据。例如,以八进制值查看 `beta` 的值: + +``` +(gdb) print /o beta +$4 = 02 +``` + +要查看其在内存中的地址: + +``` +(gdb) print /o &beta +$5 = 0x2 +``` + +你也可以看到一个变量的数据类型: + +``` +(gdb) whatis beta +type = int +``` + +### 用 GDB 解决错误 + +这种自省不仅能让你更好地了解什么代码正在执行,还能让你了解它是如何执行的。在这个例子中,对变量运行的 `whatis` 命令给了你一个线索,即你的 `alpha` 和 `beta` 变量是整数,这可能会唤起你对 `printf` 语法的记忆,使你意识到在你的 `printf` 语句中,你必须使用 `%d` 来代替 `%s`。做了这个改变,就可以让应用程序按预期运行,没有更明显的错误存在。 + +当代码编译后发现有 bug 存在时,特别令人沮丧,但最棘手的 bug 就是这样,如果它们很容易被发现,那它们就不是 bug 了。使用 GDB 是猎取并消除它们的一种方法。 + +### 下载我们的速查表 + +生活的真相就是这样,即使是最基本的编程,代码也会有 bug。并不是所有的错误都会导致应用程序无法运行(甚至无法编译),也不是所有的错误都是由错误的代码引起的。有时,bug 是基于一个特别有创意的用户所做的意外的选择组合而间歇性发生的。有时,程序员从他们自己的代码中使用的库中继承了 bug。无论原因是什么,bug 基本上无处不在,程序员的工作就是发现并消除它们。 + +GNU 调试器是一个寻找 bug 的有用工具。你可以用它做的事情比我在本文中演示的要多得多。你可以通过 GNU Info 阅读器来了解它的许多功能: + +``` +$ info gdb +``` + +无论你是刚开始学习 GDB 还是专业人员的,提醒一下你有哪些命令是可用的,以及这些命令的语法是什么,都是很有帮助的。 + +- [下载 GDB 速查表][5] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/debug-code-gdb + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/mistake_bug_fix_find_error.png?itok=PZaz3dga (magnifying glass on computer screen, finding a bug in the code) +[2]: https://www.gnu.org/software/gdb/ +[3]: https://opensource.com/article/20/8/printf +[4]: https://linux.cn/article-12985-1.html +[5]: https://opensource.com/downloads/gnu-debugger-cheat-sheet diff --git a/published/202103/20210304 You Can Now Install Official Evernote Client on Ubuntu and Debian-based Linux Distributions.md b/published/202103/20210304 You Can Now Install Official Evernote Client on Ubuntu and Debian-based Linux Distributions.md new file mode 100644 index 0000000000..c6eb182519 --- /dev/null +++ b/published/202103/20210304 You Can Now Install Official Evernote Client on Ubuntu and Debian-based Linux Distributions.md @@ -0,0 +1,104 @@ +[#]: subject: (You Can Now Install Official Evernote Client on Ubuntu and Debian-based Linux Distributions) +[#]: via: (https://itsfoss.com/install-evernote-ubuntu/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13195-1.html) + +在 Linux 上安装官方 Evernote 客户端 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/12/064741kvenjiev6qvia4ia.jpg) + +[Evernote][1] 是一款流行的笔记应用。它在推出时是一个革命性的产品。从那时起,已经有好几个这样的应用,可以将网络剪报、笔记等保存为笔记本格式。 + +多年来,Evernote 一直没有在 Linux 上使用的桌面客户端。前段时间 Evernote 承诺推出 Linux 应用,其测试版终于可以在基于 Ubuntu 的发行版上使用了。 + +> 非 FOSS 警报! +> +> Evernote Linux 客户端不是开源的。之所以在这里介绍它,是因为该应用是在 Linux 上提供的,我们也会不定期地介绍 Linux 用户常用的非 FOSS 应用。这对普通桌面 Linux 用户有帮助。 + +### 在 Ubuntu 和基于 Debian 的 Linux 发行版上安装 Evernote + +进入这个 Evernote 的[网站页面][2]。 + +向下滚动一点,接受“早期测试计划”的条款和条件。你会看到一个“立即安装”的按钮出现在屏幕上。点击它来下载 DEB 文件。 + +![][3] + +要 [从 DEB 文件安装应用][4],请双击它。它应该会打开软件中心,并给你选择安装它。 + +![][5] + +安装完成后,在系统菜单中搜索 Evernote 并启动它。 + +![][6] + +当你第一次启动应用时,你需要登录到你的 Evernote 账户。 + +![][7] + +第一次运行会带你进入“主页面”,在这里你可以整理你的笔记本,以便更快速地访问。 + +![][8] + +你现在可以享受在 Linux 上使用 Evernote 了。 + +### 体验 Evernote 的 Linux 测试版客户端 + +由于软件处于测试版,因此这里或那里会有些问题。 + +如上图所示,Evernote Linux 客户端检测到 [Ubuntu 中的深色模式][9] 并自动切换到深色主题。然而,当我把系统主题改为浅色或标准主题时,它并没有立即改变应用主题。这些变化是在我重启 Evernote 应用后才生效的。 + +另一个问题是关于关闭应用。如果你点击 “X” 按钮关闭 Evernote,程序会进入后台而不是退出。 + +有一个似乎可以启动最小化的 Evernote 的应用指示器,就像 [Linux 上的 Skype][10]。不幸的是,事实并非如此。它打开了便笺,让你快速输入笔记。 + +这为你提供了另一个 [Linux 上的笔记应用][11],但它也带来了一个问题。这里没有退出 Evernote 的选项。它只用于打开快速记事应用。 + +![][12] + +那么,如何退出 Evernote 应用呢?为此,再次打开 Evernote 应用。如果它在后台运行,在菜单中搜索它,并启动它,就像你重新打开它一样。 + +当 Evernote 应用在前台运行时,点击 “文件->退出” 来退出 Evernote。 + +![][13] + +这一点开发者应该在未来的版本中寻求改进。 + +我也不能说测试版的程序将来会如何更新。它没有添加任何仓库。我只是希望程序本身能够通知用户有新的版本,这样用户就可以下载新的 DEB 文件。 + +我并没有订阅 Evernote Premium,但我仍然可以在没有网络连接的情况下访问保存的网络文章和笔记。很奇怪,对吧? + +总的来说,我很高兴看到 Evernote 终于努力把这个应用带到了 Linux 上。现在,你不必再尝试第三方应用来在 Linux 上使用 Evernote 了,至少在 Ubuntu 和基于 Debian 的发行版上是这样。当然,你可以使用 [Evernote 替代品][14],比如 [Joplin][15],它们都是开源的。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-evernote-ubuntu/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://evernote.com/ +[2]: https://evernote.com/intl/en/b1433t1422 +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/evernote-early-access-linux.png?resize=799%2C495&ssl=1 +[4]: https://itsfoss.com/install-deb-files-ubuntu/ +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/install-evernote-linux.png?resize=800%2C539&ssl=1 +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/evernote-ubuntu.jpg?resize=800%2C230&ssl=1 +[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/evernote-running-ubuntu.png?resize=800%2C505&ssl=1 +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/evernote-on-ubuntu.png?resize=800%2C537&ssl=1 +[9]: https://itsfoss.com/dark-mode-ubuntu/ +[10]: https://itsfoss.com/install-skype-ubuntu-1404/ +[11]: https://itsfoss.com/note-taking-apps-linux/ +[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/evernote-app-indicator.png?resize=800%2C480&ssl=1 +[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/quit-evernote-linux.png?resize=799%2C448&ssl=1 +[14]: https://itsfoss.com/5-evernote-alternatives-linux/ +[15]: https://itsfoss.com/joplin/ diff --git a/published/202103/20210305 5 surprising things you can do with LibreOffice from the command line.md b/published/202103/20210305 5 surprising things you can do with LibreOffice from the command line.md new file mode 100644 index 0000000000..35a3f2fc9f --- /dev/null +++ b/published/202103/20210305 5 surprising things you can do with LibreOffice from the command line.md @@ -0,0 +1,171 @@ +[#]: subject: (5 surprising things you can do with LibreOffice from the command line) +[#]: via: (https://opensource.com/article/21/3/libreoffice-command-line) +[#]: author: (Don Watkins https://opensource.com/users/don-watkins) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13219-1.html) + +5 个用命令行操作 LibreOffice 的技巧 +====== + +> 直接在命令行中对文件进行转换、打印、保护等操作。 + +![](https://img.linux.net.cn/data/attachment/album/202103/20/110200xjkkijnjixbyi4ui.jpg) + +LibreOffice 拥有所有你想要的办公软件套件的生产力功能,使其成为微软 Office 或谷歌套件的流行的开源替代品。LibreOffice 的能力之一是可以从命令行操作。例如,Seth Kenlon 最近解释了如何使用 LibreOffice 用全局 [命令行选项将多个文件][2] 从 DOCX 转换为 EPUB。他的文章启发我分享一些其他 LibreOffice 命令行技巧和窍门。 + +在查看 LibreOffice 命令的一些隐藏功能之前,你需要了解如何使用应用选项。并不是所有的应用都接受选项(除了像 `--help` 选项这样的基本选项,它在大多数 Linux 应用中都可以使用)。 + +``` +$ libreoffice --help +``` + +这将返回 LibreOffice 接受的其他选项的描述。有些应用没有太多选项,但 LibreOffice 好几页有用的选项,所以有很多东西可以玩。 + +就是说,你可以在终端上使用 LibreOffice 进行以下五项有用的操作,来让使软件更加有用。 + +### 1、自定义你的启动选项 + +你可以修改你启动 LibreOffice 的方式。例如,如果你想只打开 LibreOffice 的文字处理器组件: + +``` +$ libreoffice --writer  # 启动文字处理器 +``` + +你可以类似地打开它的其他组件: + + +``` +$ libreoffice --calc  # 启动一个空的电子表格 +$ libreoffice --draw  # 启动一个空的绘图文档 +$ libreoffice --web   # 启动一个空的 HTML 文档 +``` + +你也可以从命令行访问特定的帮助文件: + +``` +$ libreoffice --helpwriter +``` + +![LibreOffice Writer help][3] + +或者如果你需要电子表格应用方面的帮助: + +``` +$ libreoffice --helpcalc +``` + +你可以在不显示启动屏幕的情况下启动 LibreOffice: + +``` +$ libreoffice --writer --nologo +``` + +你甚至可以在你完成当前窗口的工作时,让它在后台最小化启动: + +``` +$ libreoffice --writer --minimized +``` + +### 2、以只读模式打开一个文件 + +你可以使用 `--view` 以只读模式打开文件,以防止意外地对重要文件进行修改和保存: + +``` +$ libreoffice --view example.odt +``` + +### 3、打开一个模板文档 + +你是否曾经创建过用作信头或发票表格的文档?LibreOffice 具有丰富的内置模板系统,但是你可以使用 `-n` 选项将任何文档作为模板: + +``` +$ libreoffice --writer -n example.odt +``` + +你的文档将在 LibreOffice 中打开,你可以对其进行修改,但保存时不会覆盖原始文件。 + +### 4、转换文档 + +当你需要做一个小任务,比如将一个文件转换为新的格式时,应用启动的时间可能与完成任务的时间一样长。解决办法是 `--headless` 选项,它可以在不启动图形用户界面的情况下执行 LibreOffice 进程。 + +例如,在 LibreOffic 中,将一个文档转换为 EPUB 是一个非常简单的任务,但使用 `libreoffice` 命令就更容易: + +``` +$ libreoffice --headless --convert-to epub example.odt +``` + +使用通配符意味着你可以一次转换几十个文档: + +``` +$ libreoffice --headless --convert-to epub *.odt +``` + +你可以将文件转换为多种格式,包括 PDF、HTML、DOC、DOCX、EPUB、纯文本等。 + +### 5、从终端打印 + +你可以从命令行打印 LibreOffice 文档,而无需打开应用: + +``` +$ libreoffice --headless -p example.odt +``` + +这个选项不需要打开 LibreOffice 就可以使用默认打印机打印,它只是将文档发送到你的打印机。 + +要打印一个目录中的所有文件: + +``` +$ libreoffice -p *.odt +``` + +(我不止一次执行了这个命令,然后用完了纸,所以在你开始之前,确保你的打印机里有足够的纸张。) + +你也可以把文件输出成 PDF。通常这和使用 `--convert-to-pdf` 选项没有什么区别,但是很容易记住: + + +``` +$ libreoffice --print-to-file example.odt --headless +``` + +### 额外技巧:Flatpak 和命令选项 + +如果你是使用 [Flatpak][5] 安装的 LibreOffice,所有这些命令选项都可以使用,但你必须通过 Flatpak 传递。下面是一个例子: + +``` +$ flatpak run org.libreoffice.LibreOffice --writer +``` + +它比本地安装要麻烦得多,所以你可能会受到启发 [写一个 Bash 别名][6] 来使它更容易直接与 LibreOffice 交互。 + +### 令人惊讶的终端选项 + +通过查阅手册页面,了解如何从命令行扩展 LibreOffice 的功能: + +``` +$ man libreoffice +``` + +你是否知道 LibreOffice 具有如此丰富的命令行选项? 你是否发现了其他人似乎都不了解的其他选项? 请在评论中分享它们! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/libreoffice-command-line + +作者:[Don Watkins][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/shortcut_command_function_editing_key.png?itok=a0sEc5vo (hot keys for shortcuts or features on computer keyboard) +[2]: https://opensource.com/article/21/2/linux-workday +[3]: https://opensource.com/sites/default/files/uploads/libreoffice-help.png (LibreOffice Writer help) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://www.libreoffice.org/download/flatpak/ +[6]: https://opensource.com/article/19/7/bash-aliases diff --git a/published/202103/20210307 Track your family calendar with a Raspberry Pi and a low-power display.md b/published/202103/20210307 Track your family calendar with a Raspberry Pi and a low-power display.md new file mode 100644 index 0000000000..165ca68e13 --- /dev/null +++ b/published/202103/20210307 Track your family calendar with a Raspberry Pi and a low-power display.md @@ -0,0 +1,81 @@ +[#]: subject: (Track your family calendar with a Raspberry Pi and a low-power display) +[#]: via: (https://opensource.com/article/21/3/family-calendar-raspberry-pi) +[#]: author: (Javier Pena https://opensource.com/users/jpena) +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13222-1.html) + +利用树莓派和低功耗显示器来跟踪你的家庭日程表 +====== + +> 通过利用开源工具和电子墨水屏,让每个人都清楚家庭的日程安排。 + +![](https://img.linux.net.cn/data/attachment/album/202103/21/091512dkbgb3vzgjrz2935.jpg) + +有些家庭的日程安排很复杂:孩子们有上学活动和放学后的活动,你想要记住的重要事情,每个人都有多个约会等等。虽然你可以使用手机和应用程序来关注所有事情,但在家中放置一个大型低功耗显示器以显示家人的日程不是更好吗?电子墨水日程表刚好满足! + +![E Ink calendar][2] + +### 硬件 + +这个项目是作为假日项目开始,因此我试着尽可能多的旧物利用。其中包括一台已经闲置了太长时间树莓派 2。由于我没有电子墨水屏,因此我需要购买一个。幸运的是,我找到了一家供应商,该供应商为支持树莓派的屏幕提供了 [开源驱动程序和示例][4],该屏幕使用 [GPIO][5] 端口连接。 + +我的家人还想在不同的日程表之间切换,因此需要某种形式的输入。我没有添加 USB 键盘,而是选择了一种更简单的解决方案,并购买了一个类似于在 [这篇文章][6] 中所描述 1x4 大小的键盘。这使我可以将键盘连接到树莓派中的某些 GPIO 端口。 + +最后,我需要一个相框来容纳整个设置。虽然背面看起来有些凌乱,但它能完成工作。 + +![Calendar internals][7] + +### 软件 + +我从 [一个类似的项目][8] 中获得了灵感,并开始为我的项目编写 Python 代码。我需要从两个地方获取数据: + + * 天气信息:从 [OpenWeather API][9] 获取 + * 时间信息:我打算使用 [CalDav 标准][10] 连接到一个在我家服务器上运行的日程表 + +由于必须等待一些零件的送达,因此我使用了模块化的方法来进行输入和显示,这样我可以在没有硬件的情况下调试大多数代码。日程表应用程序需要驱动程序,于是我编写了一个 [Pygame][11] 驱动程序以便能在台式机上运行它。 + +编写代码最好的部分是能够重用现有的开源项目,所以访问不同的 API 很容易。我可以专注于设计用户界面,其中包括每个人的周历和每个人的日历,以及允许使用小键盘来选择日程。并且我花时间又添加了一些额外的功能,例如特殊日子的自定义屏幕保护程序。 + +![E Ink calendar screensaver][12] + +最后的集成步骤将确保我的日程表应用程序将在启动时运行,并且能够容错。我使用了一个基本的 [树莓派系统][13] 镜像,并将该应用程序配置到 systemd 服务,以便它可以在出现故障和系统重新启动依旧运行。 + +做完所有工作,我把代码上传到了 [GitHub][14]。因此,如果你要创建类似的日历,可以随时查看并重构它! + +### 结论 + +日程表已成为我们厨房中的日常工具。它可以帮助我们记住我们的日常活动,甚至我们的孩子在上学前,都可以使用它来查看日程的安排。 + +对我而言,这个项目让我感受到开源的力量。如果没有开源的驱动程序、库以及开放 API,我们依旧还在用纸和笔来安排日程。很疯狂,不是吗? + +需要确保你的日程不冲突吗?学习如何使用这些免费的开源项目来做到这点。 + +------ +via: https://opensource.com/article/21/3/family-calendar-raspberry-pi + +作者:[Javier Pena][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jpena +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/calendar-coffee.jpg?itok=9idm1917 "Calendar with coffee and breakfast" +[2]: https://opensource.com/sites/default/files/uploads/calendar.jpg "E Ink calendar" +[3]: https://creativecommons.org/licenses/by-sa/4.0/ +[4]: https://github.com/waveshare/e-Paper +[5]: https://opensource.com/article/19/3/gpio-pins-raspberry-pi +[6]: https://www.instructables.com/1x4-Membrane-Keypad-w-Arduino/ +[7]: https://opensource.com/sites/default/files/uploads/calendar_internals.jpg "Calendar internals" +[8]: https://github.com/zli117/EInk-Calendar +[9]: https://openweathermap.org +[10]: https://en.wikipedia.org/wiki/CalDAV +[11]: https://github.com/pygame/pygame +[12]: https://opensource.com/sites/default/files/uploads/calendar_screensaver.jpg "E Ink calendar screensaver" +[13]: https://www.raspberrypi.org/software/ +[14]: https://github.com/javierpena/eink-calendar diff --git a/published/202103/20210308 How to use Poetry to manage your Python projects on Fedora.md b/published/202103/20210308 How to use Poetry to manage your Python projects on Fedora.md new file mode 100644 index 0000000000..6692e699d1 --- /dev/null +++ b/published/202103/20210308 How to use Poetry to manage your Python projects on Fedora.md @@ -0,0 +1,200 @@ +[#]: subject: (How to use Poetry to manage your Python projects on Fedora) +[#]: via: (https://fedoramagazine.org/how-to-use-poetry-to-manage-your-python-projects-on-fedora/) +[#]: author: (Kader Miyanyedi https://fedoramagazine.org/author/moonkat/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13202-1.html) + +如何在 Fedora 上使用 Poetry 来管理你的 Python 项目? +====== + +![Python & Poetry on Fedora][1] + +Python 开发人员经常创建一个新的虚拟环境来分离项目依赖,然后用 `pip`、`pipenv` 等工具来管理它们。Poetry 是一个简化 Python 中依赖管理和打包的工具。这篇文章将向你展示如何在 Fedora 上使用 Poetry 来管理你的 Python 项目。 + +与其他工具不同,Poetry 只使用一个配置文件来进行依赖管理、打包和发布。这消除了对不同文件的需求,如 `Pipfile`、`MANIFEST.in`、`setup.py` 等。这也比使用多个工具更快。 + +下面详细介绍一下开始使用 Poetry 时使用的命令。 + +### 在 Fedora 上安装 Poetry + +如果你已经使用 Fedora 32 或以上版本,你可以使用这个命令直接从命令行安装 Poetry: + +``` +$ sudo dnf install poetry +``` + +编者注:在 Fedora Silverblue 或 CoreOs上,Python 3.9.2 是核心提交的一部分,你可以用下面的命令安装 Poetry: + +``` +rpm-ostree install poetry +``` + +### 初始化一个项目 + +使用 `new` 命令创建一个新项目: + +``` +$ poetry new poetry-project +``` + +用 Poetry 创建的项目结构是这样的: + +``` +├── poetry_project +│ └── init.py +├── pyproject.toml +├── README.rst +└── tests + ├── init.py + └── test_poetry_project.py +``` + +Poetry 使用 `pyproject.toml` 来管理项目的依赖。最初,这个文件看起来类似于这样: + +``` +[tool.poetry] +name = "poetry-project" +version = "0.1.0" +description = "" +authors = ["Kadermiyanyedi "] + +[tool.poetry.dependencies] +python = "^3.9" + +[tool.poetry.dev-dependencies] +pytest = "^5.2" + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" +``` + +这个文件包含 4 个部分: + + * 第一部分包含描述项目的信息,如项目名称、项目版本等。 + * 第二部分包含项目的依赖。这些依赖是构建项目所必需的。 + * 第三部分包含开发依赖。 + * 第四部分描述的是符合 [PEP 517][2] 的构建系统。 + +如果你已经有一个项目,或者创建了自己的项目文件夹,并且你想使用 Poetry,请在你的项目中运行 `init` 命令。 + +``` +$ poetry init +``` + +在这个命令之后,你会看到一个交互式的 shell 来配置你的项目。 + +### 创建一个虚拟环境 + +如果你想创建一个虚拟环境或激活一个现有的虚拟环境,请使用以下命令: + +``` +$ poetry shell +``` + +Poetry 默认在 `/home/username/.cache/pypoetry` 项目中创建虚拟环境。你可以通过编辑 Poetry 配置来更改默认路径。使用下面的命令查看配置列表: + +``` +$ poetry config --list + +cache-dir = "/home/username/.cache/pypoetry" +virtualenvs.create = true +virtualenvs.in-project = true +virtualenvs.path = "{cache-dir}/virtualenvs" +``` + +修改 `virtualenvs.in-project` 配置变量,在项目目录下创建一个虚拟环境。Poetry 命令是: + +``` +$ poetry config virtualenv.in-project true +``` + +### 添加依赖 + +使用 `poetry add` 命令为项目安装一个依赖: + +``` +$ poetry add django +``` + +你可以使用带有 `--dev` 选项的 `add` 命令来识别任何只用于开发环境的依赖: + +``` +$ poetry add black --dev +``` + +`add` 命令会创建一个 `poetry.lock` 文件,用来跟踪软件包的版本。如果 `poetry.lock` 文件不存在,那么会安装 `pyproject.toml` 中所有依赖项的最新版本。如果 `poetry.lock` 存在,Poetry 会使用文件中列出的确切版本,以确保每个使用这个项目的人的软件包版本是一致的。 + +使用 `poetry install` 命令来安装当前项目中的所有依赖: + +``` +$ poetry install +``` + +通过使用 `--no-dev` 选项防止安装开发依赖: + +``` +$ poetry install --no-dev +``` + +### 列出软件包 + +`show` 命令会列出所有可用的软件包。`--tree` 选项将以树状列出软件包: + +``` +$ poetry show --tree + +django 3.1.7 A high-level Python Web framework that encourages rapid development and clean, pragmatic design. +├── asgiref >=3.2.10,<4 +├── pytz * +└── sqlparse >=0.2.2 +``` + +包含软件包名称,以列出特定软件包的详细信息: + +``` +$ poetry show requests + +name : requests +version : 2.25.1 +description : Python HTTP for Humans. + +dependencies + - certifi >=2017.4.17 + - chardet >=3.0.2,<5 + - idna >=2.5,<3 + - urllib3 >=1.21.1,<1.27 +``` + +最后,如果你想知道软件包的最新版本,你可以通过 `--latest` 选项: + +``` +$ poetry show --latest + +idna 2.10 3.1 Internationalized Domain Names in Applications +asgiref 3.3.1 3.3.1 ASGI specs, helper code, and adapters +``` + +### 更多信息 + +Poetry 的更多详情可在[文档][3]中获取。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/how-to-use-poetry-to-manage-your-python-projects-on-fedora/ + +作者:[Kader Miyanyedi][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/moonkat/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/03/Poetry_Python-816x345.jpg +[2]: https://www.python.org/dev/peps/pep-0517/ +[3]: https://python-poetry.org/docs/ diff --git a/published/202103/20210309 Learn Python dictionary values with Jupyter.md b/published/202103/20210309 Learn Python dictionary values with Jupyter.md new file mode 100644 index 0000000000..2087eb3da6 --- /dev/null +++ b/published/202103/20210309 Learn Python dictionary values with Jupyter.md @@ -0,0 +1,150 @@ +[#]: subject: (Learn Python dictionary values with Jupyter) +[#]: via: (https://opensource.com/article/21/3/dictionary-values-python) +[#]: author: (Lauren Maffeo https://opensource.com/users/lmaffeo) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13236-1.html) + +用 Jupyter 学习 Python 字典 +====== + +> 字典数据结构可以帮助你快速访问信息。 + +![](https://img.linux.net.cn/data/attachment/album/202103/26/094720i58u5qxx3l4qsssx.jpg) + +字典是 Python 编程语言使用的数据结构。一个 Python 字典由多个键值对组成;每个键值对将键映射到其关联的值上。 + +例如你是一名老师,想把学生姓名与成绩对应起来。你可以使用 Python 字典,将学生姓名映射到他们关联的成绩上。此时,键值对中键是姓名,值是对应的成绩。 + +如果你想知道某个学生的考试成绩,你可以从字典中访问。这种快捷查询方式可以为你节省解析整个列表找到学生成绩的时间。 + +本文介绍了如何通过键访问对应的字典值。学习前,请确保你已经安装了 [Anaconda 包管理器][2]和 [Jupyter 笔记本][3]。 + +### 1、在 Jupyter 中打开一个新的笔记本 + +首先在 Web 浏览器中打开并运行 Jupyter。然后, + + 1. 转到左上角的 “File”。 + 2. 选择 “New Notebook”,点击 “Python 3”。 + +![新建 Jupyter 笔记本][4] + +开始时,新建的笔记本是无标题的,你可以将其重命名为任何名称。我为我的笔记本取名为 “OpenSource.com Data Dictionary Tutorial”。 + +笔记本中标有行号的位置就是你写代码的区域,也是你输入的位置。 + +在 macOS 上,可以同时按 `Shift + Return` 键得到输出。在创建新的代码区域前,请确保完成上述动作;否则,你写的任何附加代码可能无法运行。 + +### 2、新建一个键值对 + +在字典中输入你希望访问的键与值。输入前,你需要在字典上下文中定义它们的含义: + +``` +empty_dictionary = {} +grades = { +    "Kelsey": 87, +    "Finley": 92 +} + +one_line = {a: 1, b: 2} +``` + +![定义字典键值对的代码][6] + +这段代码让字典将特定键与其各自的值关联起来。字典按名称存储数据,从而可以更快地查询。 + +### 3、通过键访问字典值 + +现在你想查询指定的字典值;在上述例子中,字典值指特定学生的成绩。首先,点击 “Insert” 后选择 “Insert Cell Below”。 + +![在 Jupyter 插入新建单元格][7] + +在新单元格中,定义字典中的键与值。 + +然后,告诉字典打印该值的键,找到需要的值。例如,查询名为 Kelsey 的学生的成绩: + +``` +# 访问字典中的数据 +grades = { +    "Kelsey": 87, +    "Finley": 92 +} + +print(grades["Kelsey"]) +87 +``` + +![查询特定值的代码][8] + +当你查询 Kelsey 的成绩(也就是你想要查询的值)时,如果你用的是 macOS,只需要同时按 `Shift+Return` 键。 + +你会在单元格下方看到 Kelsey 的成绩。 + +### 4、更新已有的键 + +当把一位学生的错误成绩添加到字典时,你会怎么办?可以通过更新字典、存储新值来修正这类错误。 + +首先,选择你想更新的那个键。在上述例子中,假设你错误地输入了 Finley 的成绩,那么 Finley 就是你需要更新的键。 + +为了更新 Finley 的成绩,你需要在下方插入新的单元格,然后创建一个新的键值对。同时按 `Shift+Return` 键打印字典全部信息: + +``` +grades["Finley"] = 90 +print(grades) + +{'Kelsey': 87; "Finley": 90} +``` + +![更新键的代码][9] + +单元格下方输出带有 Finley 更新成绩的字典。 + +### 5、添加新键 + +假设你得到一位新学生的考试成绩。你可以用新键值对将那名学生的姓名与成绩补充到字典中。 + +插入新的单元格,以键值对形式添加新学生的姓名与成绩。当你完成这些后,同时按 `Shift+Return` 键打印字典全部信息: + +``` +grades["Alex"] = 88 +print(grades) + +{'Kelsey': 87, 'Finley': 90, 'Alex': 88} +``` + +![添加新键][10] + +所有的键值对输出在单元格下方。 + +### 使用字典 + +请记住,键与值可以是任意数据类型,但它们很少是[扩展数据类型][11]non-primitive types。此外,字典不能以指定的顺序存储、组织里面的数据。如果你想要数据有序,最好使用 Python 列表,而非字典。 + +如果你考虑使用字典,首先要确认你的数据结构是否是合适的,例如像电话簿的结构。如果不是,列表、元组、树或者其他数据结构可能是更好的选择。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/dictionary-values-python + +作者:[Lauren Maffeo][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/lmaffeo +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/python-programming-code-keyboard.png?itok=fxiSpmnd (Hands on a keyboard with a Python book ) +[2]: https://docs.anaconda.com/anaconda/ +[3]: https://opensource.com/article/18/3/getting-started-jupyter-notebooks +[4]: https://opensource.com/sites/default/files/uploads/new-jupyter-notebook.png (Create Jupyter notebook) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/sites/default/files/uploads/define-keys-values.png (Code for defining key-value pairs in the dictionary) +[7]: https://opensource.com/sites/default/files/uploads/jupyter_insertcell.png (Inserting a new cell in Jupyter) +[8]: https://opensource.com/sites/default/files/uploads/lookforvalue.png (Code to look for a specific value) +[9]: https://opensource.com/sites/default/files/uploads/jupyter_updatekey.png (Code for updating a key) +[10]: https://opensource.com/sites/default/files/uploads/jupyter_addnewkey.png (Add a new key) +[11]: https://www.datacamp.com/community/tutorials/data-structures-python diff --git a/published/202103/20210309 Use gImageReader to Extract Text From Images and PDFs on Linux.md b/published/202103/20210309 Use gImageReader to Extract Text From Images and PDFs on Linux.md new file mode 100644 index 0000000000..af9f99d71a --- /dev/null +++ b/published/202103/20210309 Use gImageReader to Extract Text From Images and PDFs on Linux.md @@ -0,0 +1,101 @@ +[#]: subject: (Use gImageReader to Extract Text From Images and PDFs on Linux) +[#]: via: (https://itsfoss.com/gimagereader-ocr/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13205-1.html) + +在 Linux 上使用 gImageReader 从图像和 PDF 中提取文本 +====== + +> gImageReader 是一个 GUI 工具,用于在 Linux 中利用 Tesseract OCR 引擎从图像和 PDF 文件中提取文本。 + +[gImageReader][1] 是 [Tesseract 开源 OCR 引擎][2]的一个前端。Tesseract 最初是由 HP 公司开发的,然后在 2006 年开源。 + +基本上,OCR(光学字符识别)引擎可以让你从图片或文件(PDF)中扫描文本。默认情况下,它可以检测几种语言,还支持通过 Unicode 字符扫描。 + +然而,Tesseract 本身是一个没有任何 GUI 的命令行工具。因此,gImageReader 就来解决这点,它可以让任何用户使用它从图像和文件中提取文本。 + +让我重点介绍一些有关它的内容,同时说下我在测试期间的使用经验。 + +### gImageReader:一个跨平台的 Tesseract OCR 前端 + +![][3] + +为了简化事情,gImageReader 在从 PDF 文件或包含任何类型文本的图像中提取文本时非常方便。 + +无论你是需要它来进行拼写检查还是翻译,它都应该对特定的用户群体有用。 + +以列表总结下功能,这里是你可以用它做的事情: + + * 从磁盘、扫描设备、剪贴板和截图中添加 PDF 文档和图像 + * 能够旋转图像 + * 常用的图像控制,用于调整亮度、对比度和分辨率。 + * 直接通过应用扫描图像 + * 能够一次性处理多个图像或文件 + * 手动或自动识别区域定义 + * 识别纯文本或 [hOCR][4] 文档 + * 编辑器显示识别的文本 + * 可对对提取的文本进行拼写检查 + * 从 hOCR 文件转换/导出为 PDF 文件 + * 将提取的文本导出为 .txt 文件 + * 跨平台(Windows) + +### 在 Linux 上安装 gImageReader + +**注意**:你需要安装 Tesseract 语言包,才能从软件管理器中的图像/文件中进行检测。 + +![][5] + +你可以在一些 Linux 发行版如 Fedora 和 Debian 的默认仓库中找到 gImageReader。 + +对于 Ubuntu,你需要添加一个 PPA,然后安装它。要做到这点,下面是你需要在终端中输入的内容: + +``` +sudo add-apt-repository ppa:sandromani/gimagereader +sudo apt update +sudo apt install gimagereader +``` + +你也可以从 openSUSE 的构建服务中找到它,Arch Linux 用户可在 [AUR][6] 中找到。 + +所有的仓库和包的链接都可以在他们的 [GitHub 页面][1]中找到。 + +### gImageReader 使用经验 + +当你需要从图像中提取文本时,gImageReader 是一个相当有用的工具。当你尝试从 PDF 文件中提取文本时,它的效果非常好。 + +对于从智能手机拍摄的图片中提取,检测很接近,但有点不准确。也许当你进行扫描时,从文件中识别字符可能会更好。 + +所以,你需要亲自尝试一下,看看它是否对你而言工作良好。我在 Linux Mint 20.1(基于 Ubuntu 20.04)上试过。 + +我只遇到了一个从设置中管理语言的问题,我没有得到一个快速的解决方案。如果你遇到此问题,那么可能需要对其进行故障排除,并进一步了解如何解决该问题。 + +![][7] + +除此之外,它工作良好。 + +试试吧,让我知道它是如何为你服务的!如果你知道类似的东西(和更好的),请在下面的评论中告诉我。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/gimagereader-ocr/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://github.com/manisandro/gImageReader +[2]: https://tesseract-ocr.github.io/ +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/gImageReader.png?resize=800%2C456&ssl=1 +[4]: https://en.wikipedia.org/wiki/HOCR +[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/tesseract-language-pack.jpg?resize=800%2C620&ssl=1 +[6]: https://itsfoss.com/aur-arch-linux/ +[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/gImageReader-1.jpg?resize=800%2C460&ssl=1 diff --git a/published/202103/20210310 How to Update openSUSE Linux System.md b/published/202103/20210310 How to Update openSUSE Linux System.md new file mode 100644 index 0000000000..9ff041647e --- /dev/null +++ b/published/202103/20210310 How to Update openSUSE Linux System.md @@ -0,0 +1,107 @@ +[#]: subject: (How to Update openSUSE Linux System) +[#]: via: (https://itsfoss.com/update-opensuse/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13199-1.html) + +如何更新 openSUSE Linux 系统 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/13/110932nsq33tjit9933h2k.jpg) + +就我记忆所及,我一直是 Ubuntu 的用户。我曾经转向过其他发行版,但最终还是一次次回到 Ubuntu。但最近,我开始使用 openSUSE 来尝试一些非 Debian 的东西。 + +随着我对 [openSUSE][1] 的不断探索,我不断发现 SUSE 中略有不同的东西,并打算在教程中介绍它们。 + +第一篇我写的是更新 openSUSE 系统。有两种方法可以做到: + + * 使用终端(适用于 openSUSE 桌面和服务器) + * 使用图形工具(适用于 openSUSE 桌面) + +### 通过命令行更新 openSUSE + +更新 openSUSE 的最简单方法是使用 `zypper` 命令。它提供了补丁和更新管理的全部功能。它可以解决文件冲突和依赖性问题。更新也包括 Linux 内核。 + +如果你正在使用 openSUSE Leap,请使用这个命令: + +``` +sudo zypper update +``` + +你也可以用 `up` 代替 `update`,但我觉得 `update` 更容易记住。 + +如果你正在使用 openSUSE Tumbleweed,请使用 `dist-upgrade` 或者 `dup`(简称)。Tumbleweed 是[滚动发行版][2],因此建议使用 `dist-upgrade` 选项。 + +``` +sudo zypper dist-upgrade +``` + +它将显示要升级、删除或安装的软件包列表。 + +![][3] + +如果你的系统需要重启,你会得到通知。 + +如果你只是想刷新仓库(像 `sudo apt update` 一样),你可以使用这个命令: + +``` +sudo zypper refresh +``` + +如果你想列出可用的更新,也可以这样做: + +``` +sudo zypper list-updates +``` + +### 以图形方式更新 openSUSE + +如果你使用 openSUSE 作为桌面,你可以选择使用 GUI 工具来安装更新。这个工具可能会根据 [你使用的桌面环境][4] 而改变。 + +例如,KDE 有自己的软件中心,叫做 “Discover”。你可以用它来搜索和安装新的应用。你也可以用它来安装系统更新。 + +![][5] + +事实上,KDE 会在通知区通知你可用的系统更新。你必须打开 Discover,因为点击通知不会自动进入 Discover。 + +![][6] + +如果你觉得这很烦人,你可以使用这些命令禁用它: + +``` +sudo zypper remove plasma5-pk-updates +sudo zypper addlock plasma5-pk-updates +``` + +不过我不推荐。最好是获取可用的更新通知。 + +还有一个 YAST 软件管理 [GUI 工具][7],你可以用它来对软件包管理进行更精细的控制。 + +![][8] + +就是这些了。这是一篇简短的文章。在下一篇 SUSE 教程中,我将通过实例向大家展示一些常用的 `zypper` 命令。敬请期待。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/update-opensuse/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://www.opensuse.org/ +[2]: https://itsfoss.com/rolling-release/ +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/update-opensuse-with-zypper.png?resize=800%2C406&ssl=1 +[4]: https://itsfoss.com/find-desktop-environment/ +[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/opensuse-update-gui.png?resize=800%2C500&ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/update-notification-opensuse.png?resize=800%2C259&ssl=1 +[7]: https://itsfoss.com/gui-cli-tui/ +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/yast-software-management-suse.png?resize=800%2C448&ssl=1 diff --git a/published/202103/20210310 Understanding file names and directories in FreeDOS.md b/published/202103/20210310 Understanding file names and directories in FreeDOS.md new file mode 100644 index 0000000000..41fa649a93 --- /dev/null +++ b/published/202103/20210310 Understanding file names and directories in FreeDOS.md @@ -0,0 +1,110 @@ +[#]: subject: (Understanding file names and directories in FreeDOS) +[#]: via: (https://opensource.com/article/21/3/files-freedos) +[#]: author: (Kevin O'Brien https://opensource.com/users/ahuka) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13208-1.html) + +了解 FreeDOS 中的文件名和目录 +====== + +> 了解如何在 FreeDOS 中创建,编辑和命名文件。 + +![](https://img.linux.net.cn/data/attachment/album/202103/16/094544qanrpbnlmltilump.jpg) + +开源操作系统 [FreeDOS][2] 是一个久经考验的项目,可帮助用户玩复古游戏、更新固件、运行过时但受欢迎的应用以及研究操作系统设计。FreeDOS 提供了有关个人计算历史的见解(因为它实现了 80 年代初的事实上的操作系统),但是它是在现代环境中进行的。在本文中,我将使用 FreeDOS 来解释文件名和扩展名是如何发展的。 + +### 了解文件名和 ASCII 文本 + +FreeDOS 文件名遵循所谓的 *8.3 惯例*。这意味着所有的 FreeDOS 文件名都有两个部分,分别包含最多八个和三个字符。第一部分通常被称为*文件名*(这可能会让人有点困惑,因为文件名和文件扩展名的组合也被称为文件名)。这一部分可以有一个到八个字符。之后是*扩展名*,可以有零到三个字符。这两部分之间用一个点隔开。 + +文件名可以使用任何字母或数字。键盘上的许多其他字符也是允许的,但不是所有的字符。这是因为许多其他字符在 FreeDOS 中被指定了特殊用途。一些可以出现在 FreeDOS 文件名中的字符有: + + +``` +~ ! @ # $ % ^ & ( ) _ - { } ` +``` + +扩展 [ASCII][3] 字符集中也有一些字符可以使用,例如 `�`。 + +在 FreeDOS 中具有特殊意义的字符,因此不能用于文件名中,包括: + +``` +* / + | \ = ? [ ] ; : " . < > , +``` + +另外,你不能在 FreeDOS 文件名中使用空格。FreeDOS 控制台[使用空格将命令的与选项和参数分隔][4]。 + +FreeDOS 是*不区分大小写*的,所以不管你是使用大写字母还是小写字母都无所谓。所有的字母都会被转换为大写字母,所以无论你做什么,你的文件最终都会在名称中使用大写字母。 + +#### 文件扩展名 + +FreeDOS 中的文件不需要有扩展名,但文件扩展名确实有一些用途。某些文件扩展名在 FreeDOS 中有内置的含义,例如: + + * **EXE**:可执行文件 + * **COM**:命令文件 + * **SYS**:系统文件 + * **BAT**:批处理文件 + +特定的软件程序使用其他扩展名,或者你可以在创建文件时使用它们。这些扩展名没有绝对的文件关联,因此如果你使用 FreeDOS 的文字处理器,你的文件使用什么扩展名并不重要。如果你愿意,你可以发挥创意,将扩展名作为你的文件系统的一部分。例如,你可以用 `*.JAN`、`*.FEB`、`*.MAR`、`*.APR` 等等来命名你的备忘录。 + +### 编辑文件 + +FreeDOS 自带的 Edit 应用可以快速方便地进行文本编辑。它是一个简单的编辑器,沿屏幕顶部有一个菜单栏,可以方便地访问所有常用的功能(如复制、粘贴、保存等)。 + +![Editing in FreeDOS][5] + +正如你所期望的那样,还有很多其他的文本编辑器可以使用,包括小巧但用途广泛的 [e3 编辑器][7]。你可以在 GitLab 上找到各种各样的 [FreeDOS 应用][8] 。 + +### 创建文件 + +你可以在 FreeDOS 中使用 `touch` 命令创建空文件。这个简单的工具可以更新文件的修改时间或创建一个新文件。 + +``` +C:\>touch foo.txt +C:\>dir +FOO TXT 0 01-12-2021 10:00a +``` + +你也可以直接从 FreeDOS 控制台创建文件,而不需要使用 Edit 文本编辑器。首先,使用 `copy` 命令将控制台中的输入(简称 `con`)复制到一个新的文件对象中。用 `Ctrl+Z` 终止输入,然后按**回车**键: + +``` +C:\>copy con test.txt +con => test.txt +This is a test file. +^Z +``` + +`Ctrl+Z` 字符在控制台中显示为 `^Z`。它并没有被复制到文件中,而是作为文件结束(EOF)的分隔符。换句话说,它告诉 FreeDOS 何时停止复制。这是一个很好的技巧,可以用来做快速的笔记或开始一个简单的文档,以便以后工作。 + +### 文件和 FreeDOS + +FreeDOS 是开源的、免费的且 [易于安装][9]。探究 FreeDOS 如何处理文件,可以帮助你了解多年来计算的发展,不管你平时使用的是什么操作系统。启动 FreeDOS,开始探索现代复古计算吧! + +_本文中的部分信息曾发表在 [DOS 课程 7:DOS 文件名;ASCII][10] 中(CC BY-SA 4.0)。_ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/files-freedos + +作者:[Kevin O'Brien][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ahuka +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/files_documents_paper_folder.png?itok=eIJWac15 (Files in a folder) +[2]: https://www.freedos.org/ +[3]: tmp.2sISc4Tp3G#ASCII +[4]: https://opensource.com/article/21/2/set-your-path-freedos +[5]: https://opensource.com/sites/default/files/uploads/freedos_2_files-edit.jpg (Editing in FreeDOS) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://opensource.com/article/20/12/e3-linux +[8]: https://gitlab.com/FDOS/ +[9]: https://opensource.com/article/18/4/gentle-introduction-freedos +[10]: https://www.ahuka.com/dos-lessons-for-self-study-purposes/dos-lesson-7-dos-filenames-ascii/ diff --git a/published/202103/20210311 Linux Mint Cinnamon vs MATE vs Xfce- Which One Should You Use.md b/published/202103/20210311 Linux Mint Cinnamon vs MATE vs Xfce- Which One Should You Use.md new file mode 100644 index 0000000000..001e18125d --- /dev/null +++ b/published/202103/20210311 Linux Mint Cinnamon vs MATE vs Xfce- Which One Should You Use.md @@ -0,0 +1,175 @@ +[#]: subject: (Linux Mint Cinnamon vs MATE vs Xfce: Which One Should You Use?) +[#]: via: (https://itsfoss.com/linux-mint-cinnamon-mate-xfce/) +[#]: author: (Dimitrios https://itsfoss.com/author/dimitrios/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13213-1.html) + +Cinnamon vs MATE vs Xfce:你应该选择那一个 Linux Mint 口味? +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/18/111916ljidnfwwsxec1fqf.jpg) + +Linux Mint 无疑是 [最适合初学者的 Linux 发行版之一][1]。尤其是对于刚刚迈向 Linux 世界的 Windows 用户来说,更是如此。 + +2006 年以来(也就是 Linux Mint 首次发布的那一年),他们开发了一系列的提高用户的体验的 [工具][2]。此外,Linux Mint 是基于 Ubuntu 的,所以你有一个可以寻求帮助的庞大的用户社区。 + +我不打算讨论 Linux Mint 有多好。如果你已经下定决心 [安装Linux Mint][3],你可能会对它网站上的 [下载部分][4] 感到有些困惑。 + +它给了你三个选择:Cinnamon、MATE 和 Xfce。不知道该如何选择吗?我将在本文中帮你解决这个问题。 + +![][5] + +如果你是个 Linux 的绝对新手,对上面的东西一无所知,我建议你了解一下 [什么是 Linux 桌面环境][6]。如果你能再多花点时间,请阅读这篇关于 [什么是 Linux,以及为什么有这么多看起来相似的 Linux 操作系统][7] 的优秀解释。 + +有了这些信息,你就可以了解各种 Linux Mint 版本之间的区别了。如果你不知道该选择哪一个,通过这篇文章,我将帮助你做出一个有意识的选择。 + +### 你应该选择哪个 Linux Mint 版本? + +![][8] + +简单来说,可供选择的有以下几种: + + * **Cinnamon 桌面**:具有现代感的传统桌面。 + * **MATE 桌面**:类似 GNOME 2 时代的传统外观桌面。 + * **Xfce 桌面**:一个流行的轻量级桌面环境。 + +我们来逐一看看 Mint 的各个变种。 + +#### Linux Mint Cinnamon 版 + +Cinnamon 桌面是由 Linux Mint 团队开发的,显然它是 Linux Mint 的主力版本。 + +早在近十年前,当 GNOME 桌面选择了非常规的 GNOME 3 用户界面时,人们就开始了 Cinnamon 的开发,通过复刻 GNOME 2 的一些组件来保持桌面的传统外观。 + +很多 Linux 用户喜欢 Cinnamon,就是因为它有像 Windows 7 一样的界面。 + +![Linux Mint Cinnamon desktop][9] + +##### 性能和相应能力 + +Cinnamon 桌面的性能比过去的版本有所提高,但如果没有固态硬盘,你会觉得有点迟钝。上一次我使用 Cinnamon 桌面是在 4.4.8 版,开机后的内存消耗在 750MB 左右。现在的 4.8.6 版有了很大的改进,开机后减少了 100MB 内存消耗。 + +为了获得最佳的用户体验,应该考虑双核 CPU,最低 4GB 内存。 + +![Linux Mint 20 Cinnamon idle system stats][10] + +##### 优势 + + * 从 Windows 无缝切换 + * 赏心悦目 + * 高度 [可定制][11] + +##### 劣势 + + * 如果你的系统只有 2GB 内存,可能还是不够理想 + +**附加建议**:如果你喜欢 Debian 而不是 Ubuntu,你可以选择 [Linux Mint Debian 版][12](LMDE)。LMDE 和带有 Cinnamon 桌面的 Debian 主要区别在于 LMDE 向其仓库提供最新的桌面环境。 + +#### Linux Mint Mate 版 + +[MATE 桌面环境][13] 也有类似的故事,它的目的是维护和支持 GNOME 2 的代码库和应用程序。它的外观和感觉与 GNOME 2 非常相似。 + +在我看来,到目前为止,MATE 桌面的最佳实现是 [Ubuntu MATE][14]。在 Linux Mint 中,你会得到一个定制版的 MATE 桌面,它符合 Cinnamon 美学,而不是传统的 GNOME 2 设定。 + +![Screenshot of Linux Mint MATE desktop][15] + +##### 性能和响应能力 + +MATE 桌面以轻薄著称,这一点毋庸置疑。与 Cinnamon 桌面相比,其 CPU 的使用率始终保持在较低的水平,换言之,在笔记本电脑上会有更好的电池续航时间。 + +虽然感觉没有 Xfce 那么敏捷(在我看来),但不至于影响用户体验。内存消耗在 500MB 以下起步,这对于功能丰富的桌面环境来说是令人印象深刻的。 + +![Linux Mint 20 MATE idle system stats][16] + +##### 优势 + + * 不影响 [功能][17] 的轻量级桌面 + * 足够的 [定制化][18] 可能性 + +##### 劣势 + + * 传统的外观可能会给你一种过时的感觉 + +#### Linux Mint Xfce 版 + +Xfce 项目始于 1996 年,受到了 UNIX 的 [通用桌面环境(CDE)][19] 的启发。Xfce 是 “[XForms][20] Common Environment” 的缩写,但由于它不再使用 XForms 工具箱,所以名字拼写为 “Xfce”。 + +它的目标是快速、轻量级和易于使用。Xfce 是许多流行的 Linux 发行版的主要桌面,如 [Manjaro][21] 和 [MX Linux][22]。 + +Linux Mint 提供了一个精致的 Xfce 桌面,但即使是黑暗主题也无法与 Cinnamon 桌面的美感相比。 + +![Linux Mint 20 Xfce desktop][23] + +##### 性能和响应能力 + +Xfce 是 Linux Mint 提供的最精简的桌面环境。通过点击开始菜单、设置控制面板或探索底部面板,你会发现这是一个简单而又灵活的桌面环境。 + +尽管我觉得极简主义是一个积极的属性,但 Xfce 并不是一个养眼的产品,反而留下的是比较传统的味道。但对于一些用户来说,经典的桌面环境才是他们的首选。 + +在第一次开机时,内存的使用情况与 MATE 桌面类似,但并不尽如人意。如果你的电脑没有配备 SSD,Xfce 桌面环境可以让你的系统复活。 + +![Linux Mint 20 Xfce idle system stats][24] + +##### 优势 + + * 使用简单 + * 非常轻巧,适合老式硬件 + * 坚如磐石的稳定 + +##### 劣势 + + * 过时的外观 + * 与 Cinnamon 相比,可能没有那么多的定制化服务 + +### 总结 + +由于这三款桌面环境都是基于 GTK 工具包的,所以选择哪个纯属个人喜好。它们都很节约系统资源,对于 4GB 内存的适度系统来说,表现良好。Xfce 和 MATE 可以更低一些,支持低至 2GB 内存的系统。 + +Linux Mint 并不是唯一提供多种选择的发行版。Manjaro、Fedora和 [Ubuntu 等发行版也有各种口味][25] 可供选择。 + +如果你还是无法下定决心,我建议先选择默认的 Cinnamon 版,并尝试 [在虚拟机中使用 Linux Mint][26]。看看你是否喜欢这个外观和感觉。如果不喜欢,你可以用同样的方式测试其他变体。如果你决定了这个版本,你可以继续 [在你的主系统上安装它][3]。 + +希望我的这篇文章能够帮助到你。如果你对这个话题还有疑问或建议,请在下方留言。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/linux-mint-cinnamon-mate-xfce/ + +作者:[Dimitrios][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/dimitrios/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/best-linux-beginners/ +[2]: https://linuxmint-developer-guide.readthedocs.io/en/latest/mint-tools.html# +[3]: https://itsfoss.com/install-linux-mint/ +[4]: https://linuxmint.com/download.php +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/linux-mint-version-options.png?resize=789%2C277&ssl=1 +[6]: https://itsfoss.com/what-is-desktop-environment/ +[7]: https://itsfoss.com/what-is-linux/ +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/Linux-Mint-variants.jpg?resize=800%2C450&ssl=1 +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/linux-mint-20.1-cinnamon.jpg?resize=800%2C500&ssl=1 +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/Linux-Mint-20-Cinnamon-ram-usage.png?resize=800%2C600&ssl=1 +[11]: https://itsfoss.com/customize-cinnamon-desktop/ +[12]: https://itsfoss.com/lmde-4-release/ +[13]: https://mate-desktop.org/ +[14]: https://itsfoss.com/ubuntu-mate-20-04-review/ +[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/07/linux-mint-mate.jpg?resize=800%2C500&ssl=1 +[16]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/Linux-Mint-20-MATE-ram-usage.png?resize=800%2C600&ssl=1 +[17]: https://mate-desktop.org/blog/2020-02-10-mate-1-24-released/ +[18]: https://itsfoss.com/ubuntu-mate-customization/ +[19]: https://en.wikipedia.org/wiki/Common_Desktop_Environment +[20]: https://en.wikipedia.org/wiki/XForms_(toolkit) +[21]: https://itsfoss.com/manjaro-linux-review/ +[22]: https://itsfoss.com/mx-linux-19/ +[23]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/07/linux-mint-xfce.jpg?resize=800%2C500&ssl=1 +[24]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/Linux-Mint-20-Xfce-ram-usage.png?resize=800%2C600&ssl=1 +[25]: https://itsfoss.com/which-ubuntu-install/ +[26]: https://itsfoss.com/install-linux-mint-in-virtualbox/ diff --git a/published/202103/20210311 Set up network parental controls on a Raspberry Pi.md b/published/202103/20210311 Set up network parental controls on a Raspberry Pi.md new file mode 100644 index 0000000000..79b2b0aa0a --- /dev/null +++ b/published/202103/20210311 Set up network parental controls on a Raspberry Pi.md @@ -0,0 +1,84 @@ +[#]: subject: (Set up network parental controls on a Raspberry Pi) +[#]: via: (https://opensource.com/article/21/3/raspberry-pi-parental-control) +[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13216-1.html) + +在树莓派上设置家庭网络的家长控制 +====== + +> 用最少的时间和金钱投入,就能保证孩子上网安全。 + +![Family learning and reading together at night in a room][1] + +家长们一直在寻找保护孩子们上网的方法,从防止恶意软件、横幅广告、弹出窗口、活动跟踪脚本和其他问题,到防止他们在应该做功课的时候玩游戏和看 YouTube。许多企业使用工具来规范员工的网络安全和活动,但问题是如何在家里实现这一点? + +简短的答案是一台小巧、廉价的树莓派电脑,它可以让你为孩子和你在家的工作设置家长控制parental controls。本文将引导你了解使用树莓派构建自己的启用了家长控制功能的家庭网络有多么容易。 + +### 安装硬件和软件 + +对于这个项目,你需要一个树莓派和一个家庭网络路由器。如果你在线购物网站花上 5 分钟浏览,就可以发现很多选择。[树莓派 4][2] 和 [TP-Link 路由器][3] 是初学者的好选择。 + +有了网络设备和树莓派后,你需要在 Linux 容器或者受支持的操作系统中安装 [Pi-hole][4]。有几种 [安装方法][5],但一个简单的方法是在你的树莓派上执行以下命令: + +``` +curl -sSL https://install.pi-hole.net | bash +``` + +### 配置 Pi-hole 作为你的 DNS 服务器 + +接下来,你需要在路由器和 Pi-hole 中配置 DHCP 设置: + + 1. 禁用路由器中的 DHCP 服务器设置 + 2. 在 Pi-hole 中启用 DHCP 服务器 + +每台设备都不一样,所以我没有办法告诉你具体需要点击什么来调整设置。一般来说,你可以通过浏览器访问你家的路由器。你的路由器的地址有时会印在路由器的底部,它以 192.168 或 10 开头。 + +在浏览器中,打开你的路由器的地址,并用你的凭证登录。它通常是简单的 `admin` 和一个数字密码(有时这个密码也打印在路由器上)。如果你不知道登录名,请打电话给你的供应商并询问详情。 + +在图形界面中,寻找你的局域网内关于 DHCP 的部分,并停用 DHCP 服务器。 你的路由器界面几乎肯定会与我的不同,但这是一个我设置的例子。取消勾选 **DHCP 服务器**: + +![Disable DHCP][6] + +接下来,你必须在 Pi-hole 上激活 DHCP 服务器。如果你不这样做,除非你手动分配 IP 地址,否则你的设备将无法上网! + +### 让你的网络适合家庭 + +设置完成了。现在,你的网络设备(如手机、平板电脑、笔记本电脑等)将自动找到树莓派上的 DHCP 服务器。然后,每个设备将被分配一个动态 IP 地址来访问互联网。 + +注意:如果你的路由器设备支持设置 DNS 服务器,你也可以在路由器中配置 DNS 客户端。客户端将把 Pi-hole 作为你的 DNS 服务器。 + +要设置你的孩子可以访问哪些网站和活动的规则,打开浏览器进入 Pi-hole 管理页面,`http://pi.hole/admin/`。在仪表板上,点击“Whitelist”来添加你的孩子可以访问的网页。你也可以将不允许孩子访问的网站(如游戏、成人、广告、购物等)添加到“Blocklist”。 + +![Pi-hole admin dashboard][8] + +### 接下来是什么? + +现在,你已经在树莓派上设置了家长控制,你可以让你的孩子更安全地上网,同时让他们访问经批准的娱乐选项。这也可以通过减少你的家庭串流来降低你的家庭网络使用量。更多高级使用方法,请访问 Pi-hole 的[文档][9]和[博客][10]。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/raspberry-pi-parental-control + +作者:[Daniel Oh][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/daniel-oh +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/family_learning_kids_night_reading.png?itok=6K7sJVb1 (Family learning and reading together at night in a room) +[2]: https://www.raspberrypi.org/products/ +[3]: https://www.amazon.com/s?k=tp-link+router&crid=3QRLN3XRWHFTC&sprefix=TP-Link%2Caps%2C186&ref=nb_sb_ss_ts-doa-p_3_7 +[4]: https://pi-hole.net/ +[5]: https://github.com/pi-hole/pi-hole/#one-step-automated-install +[6]: https://opensource.com/sites/default/files/uploads/disabledhcp.jpg (Disable DHCP) +[7]: https://creativecommons.org/licenses/by-sa/4.0/ +[8]: https://opensource.com/sites/default/files/uploads/blocklist.png (Pi-hole admin dashboard) +[9]: https://docs.pi-hole.net/ +[10]: https://pi-hole.net/blog/#page-content diff --git a/published/202103/20210312 Visualize multi-threaded Python programs with an open source tool.md b/published/202103/20210312 Visualize multi-threaded Python programs with an open source tool.md new file mode 100644 index 0000000000..2a389f5245 --- /dev/null +++ b/published/202103/20210312 Visualize multi-threaded Python programs with an open source tool.md @@ -0,0 +1,256 @@ +[#]: subject: (Visualize multi-threaded Python programs with an open source tool) +[#]: via: (https://opensource.com/article/21/3/python-viztracer) +[#]: author: (Tian Gao https://opensource.com/users/gaogaotiantian) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13253-1.html) + +用一个开源工具实现多线程 Python 程序的可视化 +====== + +> VizTracer 可以跟踪并发的 Python 程序,以帮助记录、调试和剖析。 + +![](https://img.linux.net.cn/data/attachment/album/202103/30/230404xi9pox38ookk8xe2.jpg) + +并发是现代编程中必不可少的一部分,因为我们有多个核心,有许多需要协作的任务。然而,当并发程序不按顺序运行时,就很难理解它们。对于工程师来说,在这些程序中发现 bug 和性能问题不像在单线程、单任务程序中那么容易。 + +在 Python 中,你有多种并发的选择。最常见的可能是用 `threading` 模块的多线程,用`subprocess` 和 `multiprocessing` 模块的多进程,以及最近用 `asyncio` 模块提供的 `async` 语法。在 [VizTracer][2] 之前,缺乏分析使用了这些技术程序的工具。 + +VizTracer 是一个追踪和可视化 Python 程序的工具,对日志、调试和剖析很有帮助。尽管它对单线程、单任务程序很好用,但它在并发程序中的实用性是它的独特之处。 + +### 尝试一个简单的任务 + +从一个简单的练习任务开始:计算出一个数组中的整数是否是质数并返回一个布尔数组。下面是一个简单的解决方案: + +``` +def is_prime(n): + for i in range(2, n): + if n % i == 0: + return False + return True + +def get_prime_arr(arr): + return [is_prime(elem) for elem in arr] +``` + +试着用 VizTracer 以单线程方式正常运行它: + +``` +if __name__ == "__main__": + num_arr = [random.randint(100, 10000) for _ in range(6000)] + get_prime_arr(num_arr) +``` + +``` +viztracer my_program.py +``` + +![Running code in a single thread][3] + +调用堆栈报告显示,耗时约 140ms,大部分时间花在 `get_prime_arr` 上。 + +![call-stack report][5] + +这只是在数组中的元素上一遍又一遍地执行 `is_prime` 函数。 + +这是你所期望的,而且它并不有趣(如果你了解 VizTracer 的话)。 + +### 试试多线程程序 + +试着用多线程程序来做: + +``` +if __name__ == "__main__": +    num_arr = [random.randint(100, 10000) for i in range(2000)] +    thread1 = Thread(target=get_prime_arr, args=(num_arr,)) +    thread2 = Thread(target=get_prime_arr, args=(num_arr,)) +    thread3 = Thread(target=get_prime_arr, args=(num_arr,)) + +    thread1.start() +    thread2.start() +    thread3.start() + +    thread1.join() +    thread2.join() +    thread3.join() +``` + +为了配合单线程程序的工作负载,这就为三个线程使用了一个 2000 元素的数组,模拟了三个线程共享任务的情况。 + +![Multi-thread program][6] + +如果你熟悉 Python 的全局解释器锁(GIL),就会想到,它不会再快了。由于开销太大,花了 140ms 多一点的时间。不过,你可以观察到多线程的并发性: + +![Concurrency of multiple threads][7] + +当一个线程在工作(执行多个 `is_prime` 函数)时,另一个线程被冻结了(一个 `is_prime` 函数);后来,它们进行了切换。这是由于 GIL 的原因,这也是 Python 没有真正的多线程的原因。它可以实现并发,但不能实现并行。 + +### 用多进程试试 + +要想实现并行,办法就是 `multiprocessing` 库。下面是另一个使用 `multiprocessing` 的版本: + +``` +if __name__ == "__main__": +    num_arr = [random.randint(100, 10000) for _ in range(2000)] +    +    p1 = Process(target=get_prime_arr, args=(num_arr,)) +    p2 = Process(target=get_prime_arr, args=(num_arr,)) +    p3 = Process(target=get_prime_arr, args=(num_arr,)) + +    p1.start() +    p2.start() +    p3.start() + +    p1.join() +    p2.join() +    p3.join() +``` + +要使用 VizTracer 运行它,你需要一个额外的参数: + +``` +viztracer --log_multiprocess my_program.py +``` + +![Running with extra argument][8] + +整个程序在 50ms 多一点的时间内完成,实际任务在 50ms 之前完成。程序的速度大概提高了三倍。 + +为了和多线程版本进行比较,这里是多进程版本: + +![Multi-process version][9] + +在没有 GIL 的情况下,多个进程可以实现并行,也就是多个 `is_prime` 函数可以并行执行。 + +不过,Python 的多线程也不是一无是处。例如,对于计算密集型和 I/O 密集型程序,你可以用睡眠来伪造一个 I/O 绑定的任务: + +``` +def io_task(): +    time.sleep(0.01) +``` + +在单线程、单任务程序中试试: + +``` +if __name__ == "__main__": +    for _ in range(3): +        io_task() +``` + +![I/O-bound single-thread, single-task program][10] + +整个程序用了 30ms 左右,没什么特别的。 + +现在使用多线程: + +``` +if __name__ == "__main__": +    thread1 = Thread(target=io_task) +    thread2 = Thread(target=io_task) +    thread3 = Thread(target=io_task) + +    thread1.start() +    thread2.start() +    thread3.start() + +    thread1.join() +    thread2.join() +    thread3.join() +``` + +![I/O-bound multi-thread program][11] + +程序耗时 10ms,很明显三个线程是并发工作的,这提高了整体性能。 + +### 用 asyncio 试试 + +Python 正在尝试引入另一个有趣的功能,叫做异步编程。你可以制作一个异步版的任务: + +``` +import asyncio + +async def io_task(): +    await asyncio.sleep(0.01) + +async def main(): +    t1 = asyncio.create_task(io_task()) +    t2 = asyncio.create_task(io_task()) +    t3 = asyncio.create_task(io_task()) + +    await t1 +    await t2 +    await t3 + +if __name__ == "__main__": +    asyncio.run(main()) +``` + +由于 `asyncio` 从字面上看是一个带有任务的单线程调度器,你可以直接在它上使用 VizTracer: + +![VizTracer with asyncio][12] + +依然花了 10ms,但显示的大部分函数都是底层结构,这可能不是用户感兴趣的。为了解决这个问题,可以使用 `--log_async` 来分离真正的任务: + +``` +viztracer --log_async my_program.py +``` + +![Using --log_async to separate tasks][13] + +现在,用户任务更加清晰了。在大部分时间里,没有任务在运行(因为它唯一做的事情就是睡觉)。有趣的部分是这里: + +![Graph of task creation and execution][14] + +这显示了任务的创建和执行时间。Task-1 是 `main()` 协程,创建了其他任务。Task-2、Task-3、Task-4 执行 `io_task` 和 `sleep` 然后等待唤醒。如图所示,因为是单线程程序,所以任务之间没有重叠,VizTracer 这样可视化是为了让它更容易理解。 + +为了让它更有趣,可以在任务中添加一个 `time.sleep` 的调用来阻止异步循环: + +``` +async def io_task(): +    time.sleep(0.01) +    await asyncio.sleep(0.01) +``` + +![time.sleep call][15] + +程序耗时更长(40ms),任务填补了异步调度器中的空白。 + +这个功能对于诊断异步程序的行为和性能问题非常有帮助。 + +### 看看 VizTracer 发生了什么? + +通过 VizTracer,你可以在时间轴上查看程序的进展情况,而不是从复杂的日志中想象。这有助于你更好地理解你的并发程序。 + +VizTracer 是开源的,在 Apache 2.0 许可证下发布,支持所有常见的操作系统(Linux、macOS 和 Windows)。你可以在 [VizTracer 的 GitHub 仓库][16]中了解更多关于它的功能和访问它的源代码。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/python-viztracer + +作者:[Tian Gao][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gaogaotiantian +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/colorful_sound_wave.png?itok=jlUJG0bM (Colorful sound wave graph) +[2]: https://readthedocs.org/projects/viztracer/ +[3]: https://opensource.com/sites/default/files/uploads/viztracer_singlethreadtask.png (Running code in a single thread) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://opensource.com/sites/default/files/uploads/viztracer_callstackreport.png (call-stack report) +[6]: https://opensource.com/sites/default/files/uploads/viztracer_multithread.png (Multi-thread program) +[7]: https://opensource.com/sites/default/files/uploads/viztracer_concurrency.png (Concurrency of multiple threads) +[8]: https://opensource.com/sites/default/files/uploads/viztracer_multithreadrun.png (Running with extra argument) +[9]: https://opensource.com/sites/default/files/uploads/viztracer_comparewithmultiprocess.png (Multi-process version) +[10]: https://opensource.com/sites/default/files/uploads/io-bound_singlethread.png (I/O-bound single-thread, single-task program) +[11]: https://opensource.com/sites/default/files/uploads/io-bound_multithread.png (I/O-bound multi-thread program) +[12]: https://opensource.com/sites/default/files/uploads/viztracer_asyncio.png (VizTracer with asyncio) +[13]: https://opensource.com/sites/default/files/uploads/log_async.png (Using --log_async to separate tasks) +[14]: https://opensource.com/sites/default/files/uploads/taskcreation.png (Graph of task creation and execution) +[15]: https://opensource.com/sites/default/files/uploads/time.sleep_call.png (time.sleep call) +[16]: https://github.com/gaogaotiantian/viztracer diff --git a/published/202103/20210315 6 things to know about using WebAssembly on Firefox.md b/published/202103/20210315 6 things to know about using WebAssembly on Firefox.md new file mode 100644 index 0000000000..86b133d783 --- /dev/null +++ b/published/202103/20210315 6 things to know about using WebAssembly on Firefox.md @@ -0,0 +1,94 @@ +[#]: subject: (6 things to know about using WebAssembly on Firefox) +[#]: via: (https://opensource.com/article/21/3/webassembly-firefox) +[#]: author: (Stephan Avenwedde https://opensource.com/users/hansic99) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13230-1.html) + +在 Firefox 上使用 WebAssembly 要了解的 6 件事 +====== + +> 了解在 Firefox 上运行 WebAssembly 的机会和局限性。 + +![](https://img.linux.net.cn/data/attachment/album/202103/23/223901pi6tcg7ybsyxos7x.jpg) + +WebAssembly 是一种可移植的执行格式,由于它能够以近乎原生的速度在浏览器中执行应用而引起了人们的极大兴趣。WebAssembly 本质上有一些特殊的属性和局限性。但是,通过将其与其他技术结合,将出现全新的可能性,尤其是与浏览器中的游戏有关的可能性。 + +本文介绍了在 Firefox 上运行 WebAssembly 的概念、可能性和局限性。 + +### 沙盒 + +WebAssembly 有 [严格的安全策略][2]。 WebAssembly 中的程序或功能单元称为*模块*。每个模块实例都运行在自己的隔离内存空间中。因此,即使同一个网页加载了多个模块,它们也无法访问另一个模块的虚拟地址空间。设计上,WebAssembly 还考虑了内存安全性和控制流完整性,这使得(几乎)确定性的执行成为可能。 + +### Web API + +通过 JavaScript [Web API][3] 可以访问多种输入和输出设备。根据这个 [提案][4],将来可以不用绕道到 JavaScript 来访问 Web API。C++ 程序员可以在 [Emscripten.org][5] 上找到有关访问 Web API 的信息。Rust 程序员可以使用 [rustwasm.github.io][7] 中写的 [wasm-bindgen][6] 库。 + +### 文件输入/输出 + +因为 WebAssembly 是在沙盒环境中执行的,所以当它在浏览器中执行时,它无法访问主机的文件系统。但是,Emscripten 提供了虚拟文件系统形式的解决方案。 + +Emscripten 使在编译时将文件预加载到内存文件系统成为可能。然后可以像在普通文件系统上一样从 WebAssembly 应用中读取这些文件。这个 [教程][8] 提供了更多信息。 + +### 持久化数据 + +如果你需要在客户端存储持久化数据,那么必须通过 JavaScript Web API 来完成。请参考 Mozilla 开发者网络(MDN)关于 [浏览器存储限制和过期标准][9] 的文档,了解不同方法的详细信息。 + +### 内存管理 + +WebAssembly 模块作为 [堆栈机][10] 在线性内存上运行。这意味着堆内存分配等概念是没有的。然而,如果你在 C++ 中使用 `new` 或者在 Rust 中使用 `Box::new`,你会期望它会进行堆内存分配。将堆内存分配请求转换成 WebAssembly 的方式在很大程度上依赖于工具链。你可以在 Frank Rehberger 关于 [WebAssembly 和动态内存][11] 的文章中找到关于不同工具链如何处理堆内存分配的详细分析。 + +### 游戏! + +与 [WebGL][12] 结合使用时,WebAssembly 的执行速度很高,因此可以在浏览器中运行原生游戏。大型专有游戏引擎 [Unity][13] 和[虚幻 4][14] 展示了 WebGL 可以实现的功能。也有使用 WebAssembly 和 WebGL 接口的开源游戏引擎。这里有些例子: + + * 自 2011 年 11 月起,[id Tech 4][15] 引擎(更常称之为 Doom 3 引擎)可在 [GitHub][16] 上以 GPL 许可的形式获得。此外,还有一个 [Doom 3 的 WebAssembly 移植版][17]。 + * Urho3D 引擎提供了一些 [令人印象深刻的例子][18],它们可以在浏览器中运行。 + * 如果你喜欢复古游戏,可以试试这个 [Game Boy 模拟器][19]。 + * [Godot 引擎也能生成 WebAssembly][20]。我找不到演示,但 [Godot 编辑器][21] 已经被移植到 WebAssembly 上。 + +### 有关 WebAssembly 的更多信息 + +WebAssembly 是一项很有前途的技术,我相信我们将来会越来越多地看到它。除了在浏览器中执行之外,WebAssembly 还可以用作可移植的执行格式。[Wasmer][22] 容器主机使你可以在各种平台上执行 WebAssembly 代码。 + +如果你需要更多的演示、示例和教程,请看一下这个 [WebAssembly 主题集合][23]。Mozilla 的 [游戏和示例合集][24] 并非全是 WebAssembly,但仍然值得一看。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/webassembly-firefox + +作者:[Stephan Avenwedde][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-concentration-focus-windows-office.png?itok=-8E2ihcF (Woman using laptop concentrating) +[2]: https://webassembly.org/docs/security/ +[3]: https://developer.mozilla.org/en-US/docs/Web/API +[4]: https://github.com/WebAssembly/gc/blob/master/README.md +[5]: https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html +[6]: https://github.com/rustwasm/wasm-bindgen +[7]: https://rustwasm.github.io/wasm-bindgen/ +[8]: https://emscripten.org/docs/api_reference/Filesystem-API.html +[9]: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Browser_storage_limits_and_eviction_criteria +[10]: https://en.wikipedia.org/wiki/Stack_machine +[11]: https://frehberg.wordpress.com/webassembly-and-dynamic-memory/ +[12]: https://en.wikipedia.org/wiki/WebGL +[13]: https://beta.unity3d.com/jonas/AngryBots/ +[14]: https://www.youtube.com/watch?v=TwuIRcpeUWE +[15]: https://en.wikipedia.org/wiki/Id_Tech_4 +[16]: https://github.com/id-Software/DOOM-3 +[17]: https://wasm.continuation-labs.com/d3demo/ +[18]: https://urho3d.github.io/samples/ +[19]: https://vaporboy.net/ +[20]: https://docs.godotengine.org/en/stable/development/compiling/compiling_for_web.html +[21]: https://godotengine.org/editor/latest/godot.tools.html +[22]: https://github.com/wasmerio/wasmer +[23]: https://github.com/mbasso/awesome-wasm +[24]: https://developer.mozilla.org/en-US/docs/Games/Examples diff --git a/published/202103/20210315 Learn how file input and output works in C.md b/published/202103/20210315 Learn how file input and output works in C.md new file mode 100644 index 0000000000..39915a214f --- /dev/null +++ b/published/202103/20210315 Learn how file input and output works in C.md @@ -0,0 +1,274 @@ +[#]: subject: (Learn how file input and output works in C) +[#]: via: (https://opensource.com/article/21/3/file-io-c) +[#]: author: (Jim Hall https://opensource.com/users/jim-hall) +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13252-1.html) + +学习如何用 C 语言来进行文件输入输出操作 +====== + +> 理解 I/O 有助于提升你的效率。 + +![](https://img.linux.net.cn/data/attachment/album/202103/30/222717gyuegz88ryu8ry7i.jpg) + +如果你打算学习 C 语言的输入、输出,可以从 `stdio.h` 包含文件开始。正如你从其名字中猜到的,该文件定义了所有的标准(“std”)的输入和输出(“io”)函数。 + +大多数人学习的第一个 `stdio.h` 的函数是打印格式化输出的 `printf` 函数。或者是用来打印一个字符串的 `puts` 函数。这些函数非常有用,可以将信息打印给用户,但是如果你想做更多的事情,则需要了解其他函数。 + +你可以通过编写一个常见 Linux 命令的副本来了解其中一些功能和方法。`cp` 命令主要用于复制文件。如果你查看 `cp` 的帮助手册,可以看到 `cp` 命令支持非常多的参数和选项。但最简单的功能,就是复制文件: + +``` +cp infile outfile +``` + +你只需使用一些读写文件的基本函数,就可以用 C 语言来自己实现 `cp` 命令。 + +### 一次读写一个字符 + +你可以使用 `fgetc` 和 `fputc` 函数轻松地进行输入输出。这些函数一次只读写一个字符。该用法被定义在 `stdio.h`,并且这也很浅显易懂:`fgetc` 是从文件中读取一个字符,`fputc` 是将一个字符保存到文件中。 + +``` +int fgetc(FILE *stream); +int fputc(int c, FILE *stream); +``` + +编写 `cp` 命令需要访问文件。在 C 语言中,你使用 `fopen` 函数打开一个文件,该函数需要两个参数:文件名和打开文件的模式。模式通常是从文件读取(`r`)或向文件写入(`w`)。打开文件的方式也有其他选项,但是对于本教程而言,仅关注于读写操作。 + +因此,将一个文件复制到另一个文件就变成了打开源文件和目标文件,接着,不断从第一个文件读取字符,然后将该字符写入第二个文件。`fgetc` 函数返回从输入文件中读取的单个字符,或者当文件完成后返回文件结束标记(`EOF`)。一旦读取到 `EOF`,你就完成了复制操作,就可以关闭两个文件。该代码如下所示: + +``` + do { + ch = fgetc(infile); + if (ch != EOF) { + fputc(ch, outfile); + } + } while (ch != EOF); +``` + +你可以使用此循环编写自己的 `cp` 程序,以使用 `fgetc` 和 `fputc` 函数一次读写一个字符。`cp.c` 源代码如下所示: + +``` +#include + +int +main(int argc, char **argv) +{ + FILE *infile; + FILE *outfile; + int ch; + + /* parse the command line */ + + /* usage: cp infile outfile */ + + if (argc != 3) { + fprintf(stderr, "Incorrect usage\n"); + fprintf(stderr, "Usage: cp infile outfile\n"); + return 1; + } + + /* open the input file */ + + infile = fopen(argv[1], "r"); + if (infile == NULL) { + fprintf(stderr, "Cannot open file for reading: %s\n", argv[1]); + return 2; + } + + /* open the output file */ + + outfile = fopen(argv[2], "w"); + if (outfile == NULL) { + fprintf(stderr, "Cannot open file for writing: %s\n", argv[2]); + fclose(infile); + return 3; + } + + /* copy one file to the other */ + + /* use fgetc and fputc */ + + do { + ch = fgetc(infile); + if (ch != EOF) { + fputc(ch, outfile); + } + } while (ch != EOF); + + /* done */ + + fclose(infile); + fclose(outfile); + + return 0; +} +``` + +你可以使用 `gcc` 来将 `cp.c` 文件编译成一个可执行文件: + +``` +$ gcc -Wall -o cp cp.c +``` + +`-o cp` 选项告诉编译器将编译后的程序保存到 `cp` 文件中。`-Wall` 选项告诉编译器提示所有可能的警告,如果你没有看到任何警告,则表示一切正常。 + +### 读写数据块 + +通过每次读写一个字符来实现自己的 `cp` 命令可以完成这项工作,但这并不是很快。在复制“日常”文件(例如文档和文本文件)时,你可能不会注意到,但是在复制大型文件或通过网络复制文件时,你才会注意到差异。每次处理一个字符需要大量的开销。 + +实现此 `cp` 命令的一种更好的方法是,读取一块的输入数据到内存中(称为缓存),然后将该数据集合写入到第二个文件。这样做的速度要快得多,因为程序可以一次读取更多的数据,这就就减少了从文件中“读取”的次数。 + +你可以使用 `fread` 函数将文件读入一个变量中。这个函数有几个参数:将数据读入的数组或内存缓冲区的指针(`ptr`),要读取的最小对象的大小(`size`),要读取对象的个数(`nmemb`),以及要读取的文件(`stream`): + +``` +size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); +``` + +不同的选项为更高级的文件输入和输出(例如,读取和写入具有特定数据结构的文件)提供了很大的灵活性。但是,在从一个文件读取数据并将数据写入另一个文件的简单情况下,可以使用一个由字符数组组成的缓冲区。 + +你可以使用 `fwrite` 函数将缓冲区中的数据写入到另一个文件。这使用了与 `fread` 函数有相似的一组选项:要从中读取数据的数组或内存缓冲区的指针,要读取的最小对象的大小,要读取对象的个数以及要写入的文件。 + +``` +size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); +``` + +如果程序将文件读入缓冲区,然后将该缓冲区写入另一个文件,则数组(`ptr`)可以是固定大小的数组。例如,你可以使用长度为 200 个字符的字符数组作为缓冲区。 + +在该假设下,你需要更改 `cp` 程序中的循环,以将数据从文件读取到缓冲区中,然后将该缓冲区写入另一个文件中: + +``` + while (!feof(infile)) { + buffer_length = fread(buffer, sizeof(char), 200, infile); + fwrite(buffer, sizeof(char), buffer_length, outfile); + } +``` + +这是更新后的 `cp` 程序的完整源代码,该程序现在使用缓冲区读取和写入数据: + +``` +#include + +int +main(int argc, char **argv) +{ + FILE *infile; + FILE *outfile; + char buffer[200]; + size_t buffer_length; + + /* parse the command line */ + + /* usage: cp infile outfile */ + + if (argc != 3) { + fprintf(stderr, "Incorrect usage\n"); + fprintf(stderr, "Usage: cp infile outfile\n"); + return 1; + } + + /* open the input file */ + + infile = fopen(argv[1], "r"); + if (infile == NULL) { + fprintf(stderr, "Cannot open file for reading: %s\n", argv[1]); + return 2; + } + + /* open the output file */ + + outfile = fopen(argv[2], "w"); + if (outfile == NULL) { + fprintf(stderr, "Cannot open file for writing: %s\n", argv[2]); + fclose(infile); + return 3; + } + + /* copy one file to the other */ + + /* use fread and fwrite */ + + while (!feof(infile)) { + buffer_length = fread(buffer, sizeof(char), 200, infile); + fwrite(buffer, sizeof(char), buffer_length, outfile); + } + + /* done */ + + fclose(infile); + fclose(outfile); + + return 0; +} +``` + +由于你想将此程序与其他程序进行比较,因此请将此源代码另存为 `cp2.c`。你可以使用 `gcc` 编译程序: + +``` +$ gcc -Wall -o cp2 cp2.c +``` + +和之前一样,`-o cp2` 选项告诉编译器将编译后的程序保存到 `cp2` 程序文件中。`-Wall` 选项告诉编译器打开所有警告。如果你没有看到任何警告,则表示一切正常。 + +### 是的,这真的更快了 + +使用缓冲区读取和写入数据是实现此版本 `cp` 程序更好的方法。由于它可以一次将文件的多个数据读取到内存中,因此该程序不需要频繁读取数据。在小文件中,你可能没有注意到使用这两种方案的区别,但是如果你需要复制大文件,或者在较慢的介质(例如通过网络连接)上复制数据时,会发现明显的差距。 + +我使用 Linux `time` 命令进行了比较。此命令可以运行另一个程序,然后告诉你该程序花费了多长时间。对于我的测试,我希望了解所花费时间的差距,因此我复制了系统上的 628 MB CD-ROM 镜像文件。 + +我首先使用标准的 Linux 的 `cp` 命令复制了映像文件,以查看所需多长时间。一开始通过运行 Linux 的 `cp` 命令,同时我还避免使用 Linux 内置的文件缓存系统,使其不会给程序带来误导性能提升的可能性。使用 Linux `cp` 进行的测试,总计花费不到一秒钟的时间: + +``` +$ time cp FD13LIVE.iso tmpfile + +real 0m0.040s +user 0m0.001s +sys 0m0.003s +``` + +运行我自己实现的 `cp` 命令版本,复制同一文件要花费更长的时间。每次读写一个字符则花了将近五秒钟来复制文件: + +``` +$ time ./cp FD13LIVE.iso tmpfile + +real 0m4.823s +user 0m4.100s +sys 0m0.571s +``` + +从输入读取数据到缓冲区,然后将该缓冲区写入输出文件则要快得多。使用此方法复制文件花不到一秒钟: + +``` +$ time ./cp2 FD13LIVE.iso tmpfile + +real 0m0.944s +user 0m0.224s +sys 0m0.608s +``` + +我演示的 `cp` 程序使用了 200 个字符大小的缓冲区。我确信如果一次将更多文件数据读入内存,该程序将运行得更快。但是,通过这种比较,即使只有 200 个字符的缓冲区,你也已经看到了性能上的巨大差异。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/file-io-c + +作者:[Jim Hall][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jim-hall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/file_system.jpg?itok=pzCrX1Kc "4 manilla folders, yellow, green, purple, blue" +[2]: http://www.opengroup.org/onlinepubs/009695399/functions/fgetc.html +[3]: http://www.opengroup.org/onlinepubs/009695399/functions/fputc.html +[4]: http://www.opengroup.org/onlinepubs/009695399/functions/fprintf.html +[5]: http://www.opengroup.org/onlinepubs/009695399/functions/fopen.html +[6]: http://www.opengroup.org/onlinepubs/009695399/functions/fclose.html +[7]: http://www.opengroup.org/onlinepubs/009695399/functions/feof.html +[8]: http://www.opengroup.org/onlinepubs/009695399/functions/fread.html +[9]: http://www.opengroup.org/onlinepubs/009695399/functions/fwrite.html diff --git a/published/202103/20210316 How to write -Hello World- in WebAssembly.md b/published/202103/20210316 How to write -Hello World- in WebAssembly.md new file mode 100644 index 0000000000..b2e423aeb9 --- /dev/null +++ b/published/202103/20210316 How to write -Hello World- in WebAssembly.md @@ -0,0 +1,155 @@ +[#]: subject: (How to write 'Hello World' in WebAssembly) +[#]: via: (https://opensource.com/article/21/3/hello-world-webassembly) +[#]: author: (Stephan Avenwedde https://opensource.com/users/hansic99) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13250-1.html) + +如何在 WebAssembly 中写 “Hello World”? +====== +> 通过这个分步教程,开始用人类可读的文本编写 WebAssembly。 + +![](https://img.linux.net.cn/data/attachment/album/202103/30/095907r6ecev48dw0l9w44.jpg) + +WebAssembly 是一种字节码格式,[几乎所有的浏览器][2] 都可以将它编译成其宿主操作系统的机器代码。除了 JavaScript 和 WebGL 之外,WebAssembly 还满足了将应用移植到浏览器中以实现平台独立的需求。作为 C++ 和 Rust 的编译目标,WebAssembly 使 Web 浏览器能够以接近原生的速度执行代码。 + +当谈论 WebAssembly 应用时,你必须区分三种状态: + + 1. **源码(如 C++ 或 Rust):** 你有一个用兼容语言编写的应用,你想把它在浏览器中执行。 + 2. **WebAssembly 字节码:** 你选择 WebAssembly 字节码作为编译目标。最后,你得到一个 `.wasm` 文件。 + 3. **机器码(opcode):** 浏览器加载 `.wasm` 文件,并将其编译成主机系统的相应机器码。 + +WebAssembly 还有一种文本格式,用人类可读的文本表示二进制格式。为了简单起见,我将其称为 **WASM-text**。WASM-text 可以比作高级汇编语言。当然,你不会基于 WASM-text 来编写一个完整的应用,但了解它的底层工作原理是很好的(特别是对于调试和性能优化)。 + +本文将指导你在 WASM-text 中创建经典的 “Hello World” 程序。 + +### 创建 .wat 文件 + +WASM-text 文件通常以 `.wat` 结尾。第一步创建一个名为 `helloworld.wat` 的空文本文件,用你最喜欢的文本编辑器打开它,然后粘贴进去: + +``` +(module +    ;; 从 JavaScript 命名空间导入 +    (import  "console"  "log" (func  $log (param  i32  i32))) ;; 导入 log 函数 +    (import  "js"  "mem" (memory  1)) ;; 导入 1 页 内存(64kb) +    +    ;; 我们的模块的数据段 +    (data (i32.const 0) "Hello World from WebAssembly!") +    +    ;; 函数声明:导出 helloWorld(),无参数 +    (func (export  "helloWorld") +        i32.const 0  ;; 传递偏移 0 到 log +        i32.const 29  ;; 传递长度 29 到 log(示例文本的字符串长度) +        call  $log +        ) +) +``` + +WASM-text 格式是基于 S 表达式的。为了实现交互,JavaScript 函数用 `import` 语句导入,WebAssembly 函数用 `export` 语句导出。在这个例子中,从 `console` 模块中导入 `log` 函数,它需要两个类型为 `i32` 的参数作为输入,以及一页内存(64KB)来存储字符串。 + +字符串将被写入偏移量 为 `0` 的数据段。数据段是你的内存的叠加投影overlay,内存是在 JavaScript 部分分配的。 + +函数用关键字 `func` 标记。当进入函数时,栈是空的。在调用另一个函数之前,函数参数会被压入栈中(这里是偏移量和长度)(见 `call $log`)。当一个函数返回一个 `f32` 类型时(例如),当离开函数时,一个 `f32` 变量必须保留在栈中(但在本例中不是这样)。 + +### 创建 .wasm 文件 + +WASM-text 和 WebAssembly 字节码是 1:1 对应的,这意味着你可以将 WASM-text 转换成字节码(反之亦然)。你已经有了 WASM-text,现在将创建字节码。 + +转换可以通过 [WebAssembly Binary Toolkit][3](WABT)来完成。从该链接克隆仓库,并按照安装说明进行安装。 + +建立工具链后,打开控制台并输入以下内容,将 WASM-text 转换为字节码: + +``` +wat2wasm helloworld.wat -o helloworld.wasm +``` + +你也可以用以下方法将字节码转换为 WASM-text: + +``` +wasm2wat helloworld.wasm -o helloworld_reverse.wat +``` + +一个从 `.wasm` 文件创建的 `.wat` 文件不包括任何函数或参数名称。默认情况下,WebAssembly 用它们的索引来识别函数和参数。 + +### 编译 .wasm 文件 + +目前,WebAssembly 只与 JavaScript 共存,所以你必须编写一个简短的脚本来加载和编译 `.wasm` 文件并进行函数调用。你还需要在 WebAssembly 模块中定义你要导入的函数。 + +创建一个空的文本文件,并将其命名为 `helloworld.html`,然后打开你喜欢的文本编辑器并粘贴进去: + +``` + + + + + Simple template + + + + + +``` + +`WebAssembly.Memory(...)` 方法返回一个大小为 64KB 的内存页。函数 `consoleLogString` 根据长度和偏移量从该内存页读取一个字符串。这两个对象作为 `importObject` 的一部分传递给你的 WebAssembly 模块。 + +在你运行这个例子之前,你可能必须允许 Firefox 从这个目录中访问文件,在地址栏输入 `about:config`,并将 `privacy.file_unique_origin` 设置为 `true`: + +![Firefox setting][4] + +> **注意:** 这样做会使你容易受到 [CVE-2019-11730][6] 安全问题的影响。 + +现在,在 Firefox 中打开 `helloworld.html`,按下 `Ctrl+K` 打开开发者控制台。 + +![Debugger output][7] + +### 了解更多 + +这个 Hello World 的例子只是 MDN 的 [了解 WebAssembly 文本格式][8] 文档中的教程之一。如果你想了解更多关于 WebAssembly 的知识以及它的工作原理,可以看看这些文档。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/hello-world-webassembly + +作者:[Stephan Avenwedde][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/helloworld_bread_lead.jpeg?itok=1r8Uu7gk (Hello World inked on bread) +[2]: https://developer.mozilla.org/en-US/docs/WebAssembly#browser_compatibility +[3]: https://github.com/webassembly/wabt +[4]: https://opensource.com/sites/default/files/uploads/firefox_setting.png (Firefox setting) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730 +[7]: https://opensource.com/sites/default/files/uploads/debugger_output.png (Debugger output) +[8]: https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format diff --git a/published/202103/20210316 Kooha is a Nascent Screen Recorder for GNOME With Wayland Support.md b/published/202103/20210316 Kooha is a Nascent Screen Recorder for GNOME With Wayland Support.md new file mode 100644 index 0000000000..20cd761dd8 --- /dev/null +++ b/published/202103/20210316 Kooha is a Nascent Screen Recorder for GNOME With Wayland Support.md @@ -0,0 +1,106 @@ +[#]: subject: (Kooha is a Nascent Screen Recorder for GNOME With Wayland Support) +[#]: via: (https://itsfoss.com/kooha-screen-recorder/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13227-1.html) + +Kooha:一款支持 Wayland 的新生 GNOME 屏幕录像机 +====== + +Linux 中没有一个 [像样的支持 Wayland 显示服务器的屏幕录制软件][1]。 + +如果你使用 Wayland 的话,[GNOME 内置的屏幕录像机][1] 可能是少有的(也是唯一的)支持的软件。但是那个屏幕录像机没有可视界面和你所期望的标准屏幕录像软件的功能。 + +值得庆幸的是,有一个新的应用正在开发中,它提供了比 GNOME 屏幕录像机更多一点的功能,并且在 Wayland 上也能正常工作。 + +### 遇见 Kooha:一个新的 GNOME 桌面屏幕录像机 + +![][2] + +[Kooha][3] 是一个处于开发初期阶段的应用,它可以在 GNOME 中使用,是用 GTK 和 PyGObject 构建的。事实上,它利用了与 GNOME 内置屏幕录像机相同的后端。 + +以下是 Kooha 的功能: + + * 录制整个屏幕或选定区域 + * 在 Wayland 和 Xorg 显示服务器上均可使用 + * 在视频里用麦克风记录音频 + * 包含或忽略鼠标指针的选项 + * 可以在开始录制前增加 5 秒或 10 秒的延迟 + * 支持 WebM 和 MKV 格式的录制 + * 允许更改默认保存位置 + * 支持一些键盘快捷键 + +### 我的 Kooha 体验 + +![][4] + +它的开发者 Dave Patrick 联系了我,由于我急需一款好用的屏幕录像机,所以我马上就去试用了。 + +目前,[Kooha 只能通过 Flatpak 安装][5]。我安装了 Flatpak,当我试着使用时,它什么都没有记录。我和 Dave 进行了快速的邮件讨论,他告诉我这是由于 [Ubuntu 20.10 中 GNOME 屏幕录像机的 bug][6]。 + +你可以想象我对支持 Wayland 的屏幕录像机的绝望,我 [将我的 Ubuntu 升级到 21.04 测试版][7]。 + +在 21.04 中,可以屏幕录像,但仍然无法录制麦克风的音频。 + +我注意到了另外几件无法按照我的喜好顺利进行的事情。 + +例如,在录制时,计时器在屏幕上仍然可见,并且包含在录像中。我不会希望在视频教程中出现这种情况。我想你也不会喜欢看到这些吧。 + +![][8] + +另外就是关于多显示器的支持。没有专门选择某一个屏幕的选项。我连接了两个外部显示器,默认情况下,它录制所有三个显示器。可以使用设置捕捉区域,但精确拖动屏幕区域是一项耗时的任务。 + +它也没有 [Kazam][9] 或其他传统屏幕录像机中有的设置帧率或者编码的选项。 + +### 在 Linux 上安装 Kooha(如果你使用 GNOME) + +请确保在你的 Linux 发行版上启用 Flatpak 支持。目前它只适用于 GNOME,所以请检查你使用的桌面环境。 + +使用此命令将 Flathub 添加到你的 Flatpak 仓库列表中: + +``` +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +``` + +然后用这个命令来安装: + +``` +flatpak install flathub io.github.seadve.Kooha +``` + +你可以通过菜单或使用这个命令来运行它: + +``` +flatpak run io.github.seadve.Kooha +``` + +### 总结 + +Kooha 并不完美,但考虑到 Wayland 领域的巨大空白,我希望开发者努力修复这些问题并增加更多的功能。考虑到 [Ubuntu 21.04 将默认切换到 Wayland][10],以及其他一些流行的发行版如 Fedora 和 openSUSE 已经默认使用 Wayland,这一点很重要。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/kooha-screen-recorder/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/gnome-screen-recorder/ +[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/kooha-screen-recorder.png?resize=800%2C450&ssl=1 +[3]: https://github.com/SeaDve/Kooha +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/kooha.png?resize=797%2C364&ssl=1 +[5]: https://flathub.org/apps/details/io.github.seadve.Kooha +[6]: https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1901391 +[7]: https://itsfoss.com/upgrade-ubuntu-beta/ +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/kooha-recording.jpg?resize=800%2C636&ssl=1 +[9]: https://itsfoss.com/kazam-screen-recorder/ +[10]: https://news.itsfoss.com/ubuntu-21-04-wayland/ diff --git a/published/202103/20210317 Use gdu for a Faster Disk Usage Checking in Linux Terminal.md b/published/202103/20210317 Use gdu for a Faster Disk Usage Checking in Linux Terminal.md new file mode 100644 index 0000000000..81b216a7ab --- /dev/null +++ b/published/202103/20210317 Use gdu for a Faster Disk Usage Checking in Linux Terminal.md @@ -0,0 +1,105 @@ +[#]: subject: (Use gdu for a Faster Disk Usage Checking in Linux Terminal) +[#]: via: (https://itsfoss.com/gdu/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13234-1.html) + +使用 gdu 进行更快的磁盘使用情况检查 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/24/233818dkfvi4fviiysn8o9.jpg) + +在 Linux 终端中有两种常用的 [检查磁盘使用情况的方法][1]:`du` 命令和 `df` 命令。[du 命令更多的是用来检查目录的使用空间][2],`df` 命令则是提供文件系统级别的磁盘使用情况。 + +还有更友好的 [用 GNOME “磁盘” 等图形工具在 Linux 中查看磁盘使用情况的方法][3]。如果局限于终端,你可以使用像 [ncdu][5] 这样的 [TUI][4] 工具,以一种图形化的方式获取磁盘使用信息。 + +### gdu: 在 Linux 终端中检查磁盘使用情况 + +[gdu][6] 就是这样一个用 Go 编写的工具(因此是 gdu 中的 “g”)。gdu 开发者的 [基准测试][7] 表明,它的磁盘使用情况检查速度相当快,特别是在 SSD 上。事实上,gdu 主要是针对 SSD 的,尽管它也可以在 HDD 上工作。 + +如果你在使用 `gdu` 命令时没有使用任何选项,它就会显示你当前所在目录的磁盘使用情况。 + +![][8] + +由于它具有文本用户界面(TUI),你可以使用箭头浏览目录和磁盘。你也可以按文件名或大小对结果进行排序。 + +你可以用它做到: + + * 向上箭头或 `k` 键将光标向上移动 + * 向下箭头或 `j` 键将光标向下移动 + * 回车选择目录/设备 + * 左箭头或 `h` 键转到上级目录 + * 使用 `d` 键删除所选文件或目录 + * 使用 `n` 键按名称排序 + * 使用 `s` 键按大小排序 + * 使用 `c` 键按项目排序 + +你会注意到一些条目前的一些符号。这些符号有特定的意义。 + +![][9] + + * `!` 表示读取目录时发生错误。 + * `.` 表示在读取子目录时发生错误,大小可能不正确。 + * `@` 表示文件是一个符号链接或套接字。 + * `H` 表示文件已经被计数(硬链接)。 + * `e` 表示目录为空。 + +要查看所有挂载磁盘的磁盘利用率和可用空间,使用选项 `d`: + +``` +gdu -d +``` + +它在一屏中显示所有的细节: + +![][10] + +看起来是个方便的工具,对吧?让我们看看如何在你的 Linux 系统上安装它。 + +### 在 Linux 上安装 gdu + +gdu 是通过 [AUR][11] 提供给 Arch 和 Manjaro 用户的。我想,作为一个 Arch 用户,你应该知道如何使用 AUR。 + +它包含在即将到来的 Ubuntu 21.04 的 universe 仓库中,但有可能你现在还没有使用它。这种情况下,你可以使用 Snap 安装它,这可能看起来有很多条 `snap` 命令: + +``` +snap install gdu-disk-usage-analyzer +snap connect gdu-disk-usage-analyzer:mount-observe :mount-observe +snap connect gdu-disk-usage-analyzer:system-backup :system-backup +snap alias gdu-disk-usage-analyzer.gdu gdu +``` + +你也可以在其发布页面找到源代码: + +- [下载 gdu 的源代码][12] + +我更习惯于使用 `du` 和 `df` 命令,但我觉得一些 Linux 用户可能会喜欢 gdu。你是其中之一吗? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/gdu/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://linuxhandbook.com/df-command/ +[2]: https://linuxhandbook.com/find-directory-size-du-command/ +[3]: https://itsfoss.com/check-free-disk-space-linux/ +[4]: https://itsfoss.com/gui-cli-tui/ +[5]: https://dev.yorhel.nl/ncdu +[6]: https://github.com/dundee/gdu +[7]: https://github.com/dundee/gdu#benchmarks +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/gdu-disk-utilization.png?resize=800%2C471&ssl=1 +[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/gdu-entry-symbols.png?resize=800%2C302&ssl=1 +[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/gdu-disk-utilization-for-all-drives.png?resize=800%2C471&ssl=1 +[11]: https://itsfoss.com/aur-arch-linux/ +[12]: https://github.com/dundee/gdu/releases diff --git a/published/202103/20210318 Practice using the Linux grep command.md b/published/202103/20210318 Practice using the Linux grep command.md new file mode 100644 index 0000000000..5fc2936d2e --- /dev/null +++ b/published/202103/20210318 Practice using the Linux grep command.md @@ -0,0 +1,193 @@ +[#]: subject: "Practice using the Linux grep command" +[#]: via: "https://opensource.com/article/21/3/grep-cheat-sheet" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "lxbwolf" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13247-1.html" + +练习使用 Linux 的 grep 命令 +====== + +> 来学习下搜索文件中内容的基本操作,然后下载我们的备忘录作为 grep 和正则表达式的快速参考指南。 + +![](https://img.linux.net.cn/data/attachment/album/202103/29/093323yn6ilqvg6z6iizcf.jpg) + +`grep`(全局正则表达式打印Global Regular Expression Print)是由 Ken Thompson 早在 1974 年开发的基本 Unix 命令之一。在计算领域,它无处不在,通常被用作为动词(“搜索一个文件中的内容”)。如果你的谈话对象有极客精神,那么它也能在真实生活场景中使用。(例如,“我会 `grep` 我的内存条来回想起那些信息。”)简而言之,`grep` 是一种用特定的字符模式来搜索文件中内容的方式。如果你感觉这听起来像是文字处理器或文本编辑器的现代 Find 功能,那么你就已经在计算行业感受到了 `grep` 的影响。 + +`grep` 绝不是被现代技术抛弃的远古命令,它的强大体现在两个方面: + + * `grep` 可以在终端操作数据流,因此你可以把它嵌入到复杂的处理中。你不仅可以在一个文本文件中*查找*文字,还可以提取文字后把它发给另一个命令。 + * `grep` 使用正则表达式来提供灵活的搜索能力。 + +虽然需要一些练习,但学习 `grep` 命令还是很容易的。本文会介绍一些我认为 `grep` 最有用的功能。 + +- 下载我们免费的 [grep 备忘录][2] + +### 安装 grep + +Linux 默认安装了 `grep`。 + +MacOS 默认安装了 BSD 版的 `grep`。BSD 版的 `grep` 跟 GNU 版有一点不一样,因此如果你想完全参照本文,那么请使用 [Homebrew][3] 或 [MacPorts][4] 安装 GNU 版的 `grep`。 + +### 基础的 grep + +所有版本的 `grep` 基础语法都一样。入参是匹配模式和你需要搜索的文件。它会把匹配到的每一行输出到你的终端。 + +``` +$ grep gnu gpl-3.0.txt + along with this program. If not, see . +. +. +``` + +`grep` 命令默认大小写敏感,因此 “gnu”、“GNU”、“Gnu” 是三个不同的值。你可以使用 `--ignore-case` 选项来忽略大小写。 + +``` +$ grep --ignore-case gnu gpl-3.0.txt + GNU GENERAL PUBLIC LICENSE + The GNU General Public License is a free, copyleft license for +the GNU General Public License is intended to guarantee your freedom to +GNU General Public License for most of our software; it applies also to +[...16 more results...] +. +. +``` + +你也可以通过 `--invert-match` 选项来输出所有没有匹配到的行: + +``` +$ grep --invert-match \ +--ignore-case gnu gpl-3.0.txt + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. +[...648 lines...] +Public License instead of this License. But first, please read +``` + +### 管道 + +能搜索文件中的文本内容是很有用的,但是 [POSIX][8] 的真正强大之处是可以通过“管道”来连接多条命令。我发现我使用 `grep` 最好的方式是把它与其他工具如 `cut`、`tr` 或 [curl][9] 联合使用。 + +假如现在有一个文件,文件中每一行是我想要下载的技术论文。我可以打开文件手动点击每一个链接,然后点击火狐浏览器的选项把每一个文件保存到我的硬盘,但是需要点击多次且耗费很长时间。而我还可以搜索文件中的链接,用 `--only-matching` 选项*只*打印出匹配到的字符串。 + +``` +$ grep --only-matching http\:\/\/.*pdf example.html +http://example.com/linux_whitepaper.pdf +http://example.com/bsd_whitepaper.pdf +http://example.com/important_security_topic.pdf +``` + +输出是一系列的 URL,每行一个。而这与 Bash 处理数据的方式完美契合,因此我不再把 URL 打印到终端,而是把它们通过管道传给 `curl`: + +``` +$ grep --only-matching http\:\/\/.*pdf \ +example.html | curl --remote-name +``` + +这条命令可以下载每一个文件,然后以各自的远程文件名命名保存在我的硬盘上。 + +这个例子中我的搜索模式可能很晦涩。那是因为它用的是正则表达式,一种在大量文本中进行模糊搜索时非常有用的”通配符“语言。 + +### 正则表达式 + +没有人会觉得正则表达式regular expression(简称 “regex”)很简单。然而,我发现它的名声往往比它应得的要差。诚然,很多人在使用正则表达式时“过于炫耀聪明”,直到它变得难以阅读,大而全,以至于复杂得换行才好理解,但是你不必过度使用正则。这里简单介绍一下我使用正则表达式的方式。 + +首先,创建一个名为 `example.txt` 的文件,输入以下内容: + +``` +Albania +Algeria +Canada +0 +1 +3 +11 +``` + +最基础的元素是不起眼的 `.` 字符。它表示一个字符。 + +``` +$ grep Can.da example.txt +Canada +``` + +模式 `Can.da` 能成功匹配到 `Canada` 是因为 `.` 字符表示任意*一个*字符。 + +可以使用下面这些符号来使 `.` 通配符表示多个字符: + + * `?` 匹配前面的模式零次或一次 + * `*` 匹配前面的模式零次或多次 + * `+` 匹配前面的模式一次或多次 + * `{4}` 匹配前面的模式 4 次(或是你在括号中写的其他次数) + +了解了这些知识后,你可以用你认为有意思的所有模式来在 `example.txt` 中做练习。可能有些会成功,有些不会成功。重要的是你要去分析结果,这样你才会知道原因。 + +例如,下面的命令匹配不到任何国家: + +``` +$ grep A.a example.txt +``` + +因为 `.` 字符只能匹配一个字符,除非你增加匹配次数。使用 `*` 字符,告诉 `grep` 匹配一个字符零次或者必要的任意多次直到单词末尾。因为你知道你要处理的内容,因此在本例中*零次*是没有必要的。在这个列表中一定没有单个字母的国家。因此,你可以用 `+` 来匹配一个字符至少一次且任意多次直到单词末尾: + +``` +$ grep A.+a example.txt +Albania +Algeria +``` + +你可以使用方括号来提供一系列的字母: + +``` +$ grep [A,C].+a example.txt +Albania +Algeria +Canada +``` + +也可以用来匹配数字。结果可能会震惊你: + +``` +$ grep [1-9] example.txt +1 +3 +11 +``` + +看到 11 出现在搜索数字 1 到 9 的结果中,你惊讶吗? + +如果把 13 加到搜索列表中,会出现什么结果呢? + +这些数字之所以会被匹配到,是因为它们包含 1,而 1 在要匹配的数字中。 + +你可以发现,正则表达式有时会令人费解,但是通过体验和练习,你可以熟练掌握它,用它来提高你搜索数据的能力。 + +### 下载备忘录 + +`grep` 命令还有很多文章中没有列出的选项。有用来更好地展示匹配结果、列出文件、列出匹配到的行号、通过打印匹配到的行周围的内容来显示上下文的选项,等等。如果你在学习 `grep`,或者你经常使用它并且通过查阅它的`帮助`页面来查看选项,那么你可以下载我们的备忘录。这个备忘录使用短选项(例如,使用 `-v`,而不是 `--invert-matching`)来帮助你更好地熟悉 `grep`。它还有一部分正则表达式可以帮你记住用途最广的正则表达式代码。 [现在就下载 grep 备忘录!][2] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/grep-cheat-sheet + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[lxbwolf](https://github.com/lxbwolf) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC "Hand putting a Linux file folder into a drawer" +[2]: https://opensource.com/downloads/grep-cheat-sheet +[3]: https://opensource.com/article/20/6/homebrew-mac +[4]: https://opensource.com/article/20/11/macports +[5]: http://www.gnu.org/licenses/\> +[6]: http://www.gnu.org/philosophy/why-not-lgpl.html\> +[7]: http://fsf.org/\> +[8]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains +[9]: https://opensource.com/downloads/curl-command-cheat-sheet diff --git a/published/202103/20210319 4 cool new projects to try in Copr for March 2021.md b/published/202103/20210319 4 cool new projects to try in Copr for March 2021.md new file mode 100644 index 0000000000..90754cca83 --- /dev/null +++ b/published/202103/20210319 4 cool new projects to try in Copr for March 2021.md @@ -0,0 +1,143 @@ +[#]: subject: (4 cool new projects to try in Copr for March 2021) +[#]: via: (https://fedoramagazine.org/4-cool-new-projects-to-try-in-copr-for-march-2021/) +[#]: author: (Jakub Kadlčík https://fedoramagazine.org/author/frostyx/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13243-1.html) + +COPR 仓库中 4 个很酷的新项目(2021.03) +====== + +![][1] + +> COPR 是个人软件仓库 [集合][2],它不在 Fedora 中。这是因为某些软件不符合轻松打包的标准;或者它可能不符合其他 Fedora 标准,尽管它是自由而开源的。COPR 可以在 Fedora 套件之外提供这些项目。COPR 中的软件不受 Fedora 基础设施的支持,或者是由项目自己背书的。但是,这是一种尝试新的或实验性的软件的一种巧妙的方式。 + +本文介绍了 COPR 中一些有趣的新项目。如果你第一次使用 COPR,请参阅 [COPR 用户文档][3]。 + +### Ytfzf + +[Ytfzf][5] 是一个简单的命令行工具,用于搜索和观看 YouTube 视频。它提供了围绕模糊查找程序 [fzf][6] 构建的快速直观的界面。它使用 [youtube-dl][7] 来下载选定的视频,并打开外部视频播放器来观看。由于这种方式,`ytfzf` 比使用浏览器观看 YouTube 资源占用要少得多。它支持缩略图(通过 [ueberzug][8])、历史记录保存、多个视频排队或下载它们以供以后使用、频道订阅以及其他方便的功能。多亏了像 [dmenu][9] 或 [rofi][10] 这样的工具,它甚至可以在终端之外使用。 + +![][11] + +#### 安装说明 + +目前[仓库][13]为 Fedora 33 和 34 提供 Ytfzf。要安装它,请使用以下命令: + +``` +sudo dnf copr enable bhoman/ytfzf +sudo dnf install ytfzf +``` + +### Gemini 客户端 + +你有没有想过,如果万维网走的是一条完全不同的路线,不采用 CSS 和客户端脚本,你的互联网浏览体验会如何?[Gemini][15] 是 HTTPS 协议的现代替代品,尽管它并不打算取代 HTTPS 协议。[stenstorp/gemini][16] COPR 项目提供了各种客户端来浏览 Gemini _网站_,有 [Castor][17]、[Dragonstone][18]、[Kristall][19] 和 [Lagrange][20]。 + +[Gemini][21] 站点提供了一些使用该协议的主机列表。以下显示了使用 Castor 访问这个站点的情况: + +![][22] + +#### 安装说明 + +该 [仓库][16] 目前为 Fedora 32、33、34 和 Fedora Rawhide 提供 Gemini 客户端。EPEL 7 和 8,以及 CentOS Stream 也可使用。要安装浏览器,请从这里显示的安装命令中选择: + +``` +sudo dnf copr enable stenstorp/gemini + +sudo dnf install castor +sudo dnf install dragonstone +sudo dnf install kristall +sudo dnf install lagrange +``` + +### Ly + +[Ly][25] 是一个 Linux 和 BSD 的轻量级登录管理器。它有一个类似于 ncurses 的基于文本的用户界面。理论上,它应该支持所有的 X 桌面环境和窗口管理器(其中很多都 [经过测试][26])。Ly 还提供了基本的 Wayland 支持(Sway 也工作良好)。在配置的某个地方,有一个复活节彩蛋选项,可以在背景中启用著名的 [PSX DOOM fire][27] 动画,就其本身而言,值得一试。 + +![][28] + +#### 安装说明 + +该 [仓库][30] 目前为 Fedora 32、33 和 Fedora Rawhide 提供 Ly。要安装它,请使用以下命令: + +``` +sudo dnf copr enable dhalucario/ly +sudo dnf install ly +``` + +在将 Ly 设置为系统登录界面之前,请在终端中运行 `ly` 命令以确保其正常工作。然后关闭当前的登录管理器,启用 Ly。 + +``` +sudo systemctl disable gdm +sudo systemctl enable ly +``` + +最后,重启计算机,使其更改生效。 + +### AWS CLI v2 + +[AWS CLI v2][32] 带来基于社区反馈进行的稳健而有条理的演变,而不是对原有客户端的大规模重新设计。它引入了配置凭证的新机制,现在允许用户从 AWS 控制台中生成的 `.csv` 文件导入凭证。它还提供了对 AWS SSO 的支持。其他主要改进是服务端自动补全,以及交互式参数生成。一个新功能是交互式向导,它提供了更高层次的抽象,并结合多个 AWS API 调用来创建、更新或删除 AWS 资源。 + +![][33] + +#### 安装说明 + +该 [仓库][35] 目前为 Fedora Linux 32、33、34 和 Fedora Rawhide 提供 AWS CLI v2。要安装它,请使用以下命令: + +``` +sudo dnf copr enable spot/aws-cli-2 +sudo dnf install aws-cli-2 +``` + +自然地,访问 AWS 账户凭证是必要的。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/4-cool-new-projects-to-try-in-copr-for-march-2021/ + +作者:[Jakub Kadlčík][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/frostyx/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2020/10/4-copr-945x400-1-816x345.jpg +[2]: https://copr.fedorainfracloud.org/ +[3]: https://docs.pagure.org/copr.copr/user_documentation.html +[4]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#droidcam +[5]: https://github.com/pystardust/ytfzf +[6]: https://github.com/junegunn/fzf +[7]: http://ytdl-org.github.io/youtube-dl/ +[8]: https://github.com/seebye/ueberzug +[9]: https://tools.suckless.org/dmenu/ +[10]: https://github.com/davatorium/rofi +[11]: https://fedoramagazine.org/wp-content/uploads/2021/03/ytfzf.png +[12]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#installation-instructions +[13]: https://copr.fedorainfracloud.org/coprs/bhoman/ytfzf/ +[14]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#gemini-clients +[15]: https://gemini.circumlunar.space/ +[16]: https://copr.fedorainfracloud.org/coprs/stenstorp/gemini/ +[17]: https://git.sr.ht/~julienxx/castor +[18]: https://gitlab.com/baschdel/dragonstone +[19]: https://kristall.random-projects.net/ +[20]: https://github.com/skyjake/lagrange +[21]: https://gemini.circumlunar.space/servers/ +[22]: https://fedoramagazine.org/wp-content/uploads/2021/03/gemini.png +[23]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#installation-instructions-1 +[24]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#ly +[25]: https://github.com/nullgemm/ly +[26]: https://github.com/nullgemm/ly#support +[27]: https://fabiensanglard.net/doom_fire_psx/index.html +[28]: https://fedoramagazine.org/wp-content/uploads/2021/03/ly.png +[29]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#installation-instructions-2 +[30]: https://copr.fedorainfracloud.org/coprs/dhalucario/ly/ +[31]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#aws-cli-v2 +[32]: https://aws.amazon.com/blogs/developer/aws-cli-v2-is-now-generally-available/ +[33]: https://fedoramagazine.org/wp-content/uploads/2021/03/aws-cli-2.png +[34]: https://github.com/FrostyX/fedora-magazine/blob/main/2021-march.md#installation-instructions-3 +[35]: https://copr.fedorainfracloud.org/coprs/spot/aws-cli-2/ diff --git a/published/202103/20210319 Top 10 Terminal Emulators for Linux (With Extra Features or Amazing Looks).md b/published/202103/20210319 Top 10 Terminal Emulators for Linux (With Extra Features or Amazing Looks).md new file mode 100644 index 0000000000..eaeeccfab7 --- /dev/null +++ b/published/202103/20210319 Top 10 Terminal Emulators for Linux (With Extra Features or Amazing Looks).md @@ -0,0 +1,308 @@ +[#]: subject: (Top 10 Terminal Emulators for Linux \(With Extra Features or Amazing Looks\)) +[#]: via: (https://itsfoss.com/linux-terminal-emulators/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13221-1.html) + +10 个常见的 Linux 终端仿真器 +====== + +![](https://img.linux.net.cn/data/attachment/album/202103/21/073043q4j4o6hr33b595j4.jpg) + +默认情况下,所有的 Linux 发行版都已经预装了“终端terminal”应用程序或“终端仿真器terminal emulator”(这才是正确的技术术语)。当然,根据桌面环境的不同,它的外观和感觉会有所不同。 + +Linux 的特点是,你可以不用局限于你的发行版所提供的东西,你可以用你所选择的替代应用程序。终端也不例外。有几个提供了独特功能的终端仿真器令人印象深刻,可以获得更好的用户体验或更好的外观。 + +在这里,我将整理一个有趣的终端应用程序的列表,你可以在你的 Linux 发行版上尝试它们。 + +### 值得赞叹的 Linux 终端仿真器 + +此列表没有特别的排名顺序,我会先列出一些有趣的,然后是一些最流行的终端仿真器。此外,我还强调了每个提到的终端仿真器的主要功能,你可以选择你喜欢的终端仿真器。 + +#### 1、Terminator + +![][1] + +主要亮点: + +* 可以在一个窗口中使用多个 GNOME 终端 + +[Terminator][2] 是一款非常流行的终端仿真器,目前仍在维护中(从 Launchpad 移到了 GitHub)。 + +它基本上是在一个窗口中为你提供了多个 GNOME 终端。在它的帮助下,你可以轻松地对终端窗口进行分组和重组。你可能会觉得这像是在使用平铺窗口管理器,不过有一些限制。 + +##### 如何安装 Terminator? + +对于基于 Ubuntu 的发行版,你只需在终端输入以下命令: + +``` +sudo apt install terminator +``` + +你应该可以在大多数 Linux 发行版的默认仓库中找到它。但是,如果你需要安装帮助,请访问它的 [GitHub 页面][3]。 + +#### 2、Guake 终端 + +![][4] + +主要亮点: + + * 专为在 GNOME 上快速访问终端而设计 + * 工作速度快,不需要大量的系统资源 + * 访问的快捷键 + +[Guake][6] 终端最初的灵感来自于一款 FPS 游戏 Quake。与其他一些终端仿真器不同的是,它的工作方式是覆盖在其他的活动窗口上。 + +你所要做的就是使用快捷键(`F12`)召唤该仿真器,它就会从顶部出现。你可以自定义该仿真器的宽度或位置,但大多数用户使用默认设置就可以了。 + +它不仅仅是一个方便的终端仿真器,还提供了大量的功能,比如能够恢复标签、拥有多个标签、对每个标签进行颜色编码等等。你可以查看我关于 [Guake 的单独文章][5] 来了解更多。 + +##### 如何安装 Guake 终端? + +Guake 在大多数 Linux 发行版的默认仓库中都可以找到,你可以参考它的 [官方安装说明][7]。 + +如果你使用的是基于 Debian 的发行版,只需输入以下命令: + +``` +sudo apt install guake +``` + +#### 3、Tilix 终端 + +![][8] + +主要亮点: + + * 平铺功能 + * 支持拖放 + * 下拉式 Quake 模式 + +[Tilix][10] 终端提供了与 Guake 类似的下拉式体验 —— 但它允许你在平铺模式下拥有多个终端窗口。 + +如果你的 Linux 发行版中默认没有平铺窗口,而且你有一个大屏幕,那么这个功能就特别有用,你可以在多个终端窗口上工作,而不需要在不同的工作空间之间切换。 + +如果你想了解更多关于它的信息,我们之前已经 [单独介绍][9] 过了。 + +##### 如何安装 Tilix? + +Tilix 在大多数发行版的默认仓库中都有。如果你使用的是基于 Ubuntu 的发行版,只需输入: + +``` +sudo apt install tilix +``` + +#### 4、Hyper + +![][13] + +主要亮点: + + * 基于 HTML/CSS/JS 的终端 + * 基于 Electron + * 跨平台 + * 丰富的配置选项 + +[Hyper][15] 是另一个有趣的终端仿真器,它建立在 Web 技术之上。它并没有提供独特的用户体验,但看起来很不一样,并提供了大量的自定义选项。 + +它还支持安装主题和插件来轻松定制终端的外观。你可以在他们的 [GitHub 页面][14] 中探索更多关于它的内容。 + +##### 如何安装 Hyper? + +Hyper 在默认的资源库中是不可用的。然而,你可以通过他们的 [官方网站][16] 找到 .deb 和 .rpm 包来安装。 + +如果你是新手,请阅读文章以获得 [使用 deb 文件][17] 和 [使用 rpm 文件][18] 的帮助。 + +#### 5、Tilda + +![][19] + +主要亮点: + + * 下拉式终端 + * 搜索栏整合 + +[Tilda][20] 是另一款基于 GTK 的下拉式终端仿真器。与其他一些不同的是,它提供了一个你可以切换的集成搜索栏,还可以让你自定义很多东西。 + +你还可以设置热键来快速访问或执行某个动作。从功能上来说,它是相当令人印象深刻的。然而,在视觉上,我不喜欢覆盖的行为,而且它也不支持拖放。不过你可以试一试。 + +##### 如何安装 Tilda? + +对于基于 Ubuntu 的发行版,你可以简单地键入: + +``` +sudo apt install tilda +``` + +你可以参考它的 [GitHub 页面][20],以了解其他发行版的安装说明。 + +#### 6、eDEX-UI + +![][21] + +主要亮点: + + * 科幻感的外观 + * 跨平台 + * 自定义主题选项 + * 支持多个终端标签 + +如果你不是特别想找一款可以帮助你更快的完成工作的终端仿真器,那么 [eDEX-UI][23] 绝对是你应该尝试的。 + +对于科幻迷和只想让自己的终端看起来独特的用户来说,这绝对是一款漂亮的终端仿真器。如果你不知道,它的灵感很大程度上来自于电影《创:战纪》。 + +不仅仅是设计或界面,总的来说,它为你提供了独特的用户体验,你会喜欢的。它还可以让你 [自定义终端][12]。如果你打算尝试的话,它确实需要大量的系统资源。 + +你不妨看看我们 [专门介绍 eDEX-UI][22] 的文章,了解更多关于它的信息和安装步骤。 + +##### 如何安装 eDEX-UI? + +你可以在一些包含 [AUR][24] 的仓库中找到它。无论是哪种情况,你都可以从它的 [GitHub 发布部分][25] 中抓取一个适用于你的 Linux 发行版的软件包(或 AppImage 文件)。 + +#### 7、Cool Retro Terminal + +![][26] + +主要亮点: + + * 复古主题 + * 动画/效果调整 + +[Cool Retro Terminal][27] 是一款独特的终端仿真器,它为你提供了一个复古的阴极射线管显示器的外观。 + +如果你正在寻找一些额外功能的终端仿真器,这可能会让你失望。然而,令人印象深刻的是,它在资源上相当轻盈,并允许你自定义颜色、效果和字体。 + +##### 如何安装 Cool Retro Terminal? + +你可以在其 [GitHub 页面][27] 中找到所有主流 Linux 发行版的安装说明。对于基于 Ubuntu 的发行版,你可以在终端中输入以下内容: + +``` +sudo apt install cool-retro-term +``` + +#### 8、Alacritty + +![][28] + +主要亮点: + + * 跨平台 + * 选项丰富,重点是整合。 + +[Alacritty][29] 是一款有趣的开源跨平台终端仿真器。尽管它被认为是处于“测试”阶段的东西,但它仍然可以工作。 + +它的目标是为你提供广泛的配置选项,同时考虑到性能。例如,使用键盘点击 URL、将文本复制到剪贴板、使用 “Vi” 模式进行搜索等功能可能会吸引你去尝试。 + +你可以探索它的 [GitHub 页面][29] 了解更多信息。 + +##### 如何安装 Alacritty? + +官方 GitHub 页面上说可以使用包管理器安装 Alacritty,但我在 Linux Mint 20.1 的默认仓库或 [synaptic 包管理器][30] 中找不到它。 + +如果你想尝试的话,可以按照 [安装说明][31] 来手动设置。 + +#### 9、Konsole + +![][32] + +主要亮点: + + * KDE 的终端 + * 轻巧且可定制 + +如果你不是新手,这个可能不用介绍了。[Konsole][33] 是 KDE 桌面环境的默认终端仿真器。 + +不仅如此,它还集成了很多 KDE 应用。即使你使用的是其他的桌面环境,你也可以试试 Konsole。它是一个轻量级的终端仿真器,拥有众多的功能。 + +你可以拥有多个标签和多个分组窗口。以及改变终端仿真器的外观和感觉的大量的自定义选项。 + +##### 如何安装 Konsole? + +对于基于 Ubuntu 的发行版和大多数其他发行版,你可以使用默认的版本库来安装它。对于基于 Debian 的发行版,你只需要在终端中输入以下内容: + +``` +sudo apt install konsole +``` + +#### 10、GNOME 终端 + +![][34] + +主要亮点: + + * GNOME 的终端 + * 简单但可定制 + +如果你使用的是任何基于 Ubuntu 的 GNOME 发行版,它已经是天生的了,它可能不像 Konsole 那样可以自定义,但它可以让你轻松地配置终端的大部分重要方面。它可能不像 Konsole 那样可以自定义(取决于你在做什么),但它可以让你轻松配置终端的大部分重要方面。 + +总的来说,它提供了良好的用户体验和易于使用的界面,并提供了必要的功能。 + +如果你好奇的话,我还有一篇 [自定义你的 GNOME 终端][12] 的教程。 + +##### 如何安装 GNOME 终端? + +如果你没有使用 GNOME 桌面,但又想尝试一下,你可以通过默认的软件仓库轻松安装它。 + +对于基于 Debian 的发行版,以下是你需要在终端中输入的内容: + +``` +sudo apt install gnome-terminal +``` + +### 总结 + +有好几个终端仿真器。如果你正在寻找不同的用户体验,你可以尝试任何你喜欢的东西。然而,如果你的目标是一个稳定的和富有成效的体验,你需要测试一下,然后才能依靠它们。 + +对于大多数用户来说,默认的终端仿真器应该足够好用了。但是,如果你正在寻找快速访问(Quake 模式)、平铺功能或在一个终端中的多个窗口,请试试上述选择。 + +你最喜欢的 Linux 终端仿真器是什么?我有没有错过列出你最喜欢的?欢迎在下面的评论中告诉我你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/linux-terminal-emulators/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/terminator-terminal.jpg?resize=800%2C436&ssl=1 +[2]: https://gnome-terminator.org +[3]: https://github.com/gnome-terminator/terminator +[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/guake-terminal-2.png?resize=800%2C432&ssl=1 +[5]: https://itsfoss.com/guake-terminal/ +[6]: https://github.com/Guake/guake +[7]: https://guake.readthedocs.io/en/latest/user/installing.html#system-wide-installation +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/tilix-screenshot.png?resize=800%2C460&ssl=1 +[9]: https://itsfoss.com/tilix-terminal-emulator/ +[10]: https://gnunn1.github.io/tilix-web/ +[11]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/linux-terminal-customization.jpg?fit=800%2C450&ssl=1 +[12]: https://itsfoss.com/customize-linux-terminal/ +[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/hyper-screenshot.png?resize=800%2C527&ssl=1 +[14]: https://github.com/vercel/hyper +[15]: https://hyper.is/ +[16]: https://hyper.is/#installation +[17]: https://itsfoss.com/install-deb-files-ubuntu/ +[18]: https://itsfoss.com/install-rpm-files-fedora/ +[19]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/tilda-terminal.jpg?resize=800%2C427&ssl=1 +[20]: https://github.com/lanoxx/tilda +[21]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/09/edex-ui-screenshot.png?resize=800%2C450&ssl=1 +[22]: https://itsfoss.com/edex-ui-sci-fi-terminal/ +[23]: https://github.com/GitSquared/edex-ui +[24]: https://itsfoss.com/aur-arch-linux/ +[25]: https://github.com/GitSquared/edex-ui/releases +[26]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2015/10/cool-retro-term-1.jpg?resize=799%2C450&ssl=1 +[27]: https://github.com/Swordfish90/cool-retro-term +[28]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/alacritty-screenshot.png?resize=800%2C496&ssl=1 +[29]: https://github.com/alacritty/alacritty +[30]: https://itsfoss.com/synaptic-package-manager/ +[31]: https://github.com/alacritty/alacritty/blob/master/INSTALL.md#debianubuntu +[32]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/konsole-screenshot.png?resize=800%2C512&ssl=1 +[33]: https://konsole.kde.org/ +[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/default-terminal.jpg?resize=773%2C493&ssl=1 diff --git a/published/202103/20210322 5 everyday sysadmin tasks to automate with Ansible.md b/published/202103/20210322 5 everyday sysadmin tasks to automate with Ansible.md new file mode 100644 index 0000000000..6f12202b57 --- /dev/null +++ b/published/202103/20210322 5 everyday sysadmin tasks to automate with Ansible.md @@ -0,0 +1,300 @@ +[#]: subject: (5 everyday sysadmin tasks to automate with Ansible) +[#]: via: (https://opensource.com/article/21/3/ansible-sysadmin) +[#]: author: (Mike Calizo https://opensource.com/users/mcalizo) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13256-1.html) + +用 Ansible 自动化系统管理员的 5 个日常任务 +====== + +> 通过使用 Ansible 自动执行可重复的日常任务,提高工作效率并避免错误。 + +![](https://img.linux.net.cn/data/attachment/album/202103/31/233904oo7q68eo2njfmf8o.jpg) + +如果你讨厌执行重复性的任务,那么我有一个提议给你,去学习 [Ansible][2]! + +Ansible 是一个工具,它可以帮助你更轻松、更快速地完成日常任务,这样你就可以更有效地利用时间,比如学习重要的新技术。对于系统管理员来说,它是一个很好的工具,因为它可以帮助你实现标准化,并在日常活动中进行协作,包括: + + 1. 安装、配置和调配服务器和应用程序; + 2. 定期更新和升级系统; + 3. 监测、减轻和排除问题。 + +通常,许多这些基本的日常任务都需要手动步骤,而根据个人的技能的不同,可能会造成不一致并导致配置发生漂移。这在小规模的实施中可能是可以接受的,因为你管理一台服务器,并且知道自己在做什么。但当你管理数百或数千台服务器时会发生什么? + +如果不小心,这些手动的、可重复的任务可能会因为人为的错误而造成延误和问题,而这些错误可能会影响你及你的组织的声誉。 + +这就是自动化的价值所在。而 [Ansible][3] 是自动化这些可重复的日常任务的完美工具。 + +自动化的一些原因是: + + 1. 你想要一个一致和稳定的环境。 + 2. 你想要促进标准化。 + 3. 你希望减少停机时间,减少严重事故案例,以便可以享受生活。 + 4. 你想喝杯啤酒,而不是排除故障问题! + +本文提供了一些系统管理员可以使用 Ansible 自动化的日常任务的例子。我把本文中的剧本和角色放到了 GitHub 上的 [系统管理员任务仓库][4] 中,以方便你使用它们。 + +这些剧本的结构是这样的(我的注释前面有 `==>`)。 + +``` +[root@homebase 6_sysadmin_tasks]# tree -L 2 +. +├── ansible.cfg ==> 负责控制 Ansible 行为的配置文件 +├── ansible.log +├── inventory +│ ├── group_vars +│ ├── hosts ==> 包含我的目标服务器列表的清单文件 +│ └── host_vars +├── LICENSE +├── playbooks ==> 包含我们将在本文中使用的剧本的目录 +│ ├── c_logs.yml +│ ├── c_stats.yml +│ ├── c_uptime.yml +│ ├── inventory +│ ├── r_cron.yml +│ ├── r_install.yml +│ └── r_script.yml +├── README.md +├── roles ==> 包含我们将在本文中使用的角色的目录 +│ ├── check_logs +│ ├── check_stats +│ ├── check_uptime +│ ├── install_cron +│ ├── install_tool +│ └── run_scr +└── templates ==> 包含 jinja 模板的目录 + ├── cron_output.txt.j2 + ├── sar.txt.j2 + └── scr_output.txt.j2 +``` + +清单类似这样的: + +``` +[root@homebase 6_sysadmin_tasks]# cat inventory/hosts +[rhel8] +master ansible_ssh_host=192.168.1.12 +workernode1 ansible_ssh_host=192.168.1.15 + +[rhel8:vars] +ansible_user=ansible ==> 请用你的 ansible 用户名更新它 +``` + +这里有五个你可以用 Ansible 自动完成的日常系统管理任务。 + +### 1、检查服务器的正常运行时间 + +你需要确保你的服务器一直处于正常运行状态。机构会拥有企业监控工具来监控服务器和应用程序的正常运行时间,但自动监控工具时常会出现故障,你需要登录进去验证一台服务器的状态。手动验证每台服务器的正常运行时间需要花费大量的时间。你的服务器越多,你需要花费的时间就越长。但如果有了自动化,这种验证可以在几分钟内完成。 + +使用 [check_uptime][5] 角色和 `c_uptime.yml` 剧本: + +``` +[root@homebase 6_sysadmin_tasks]# ansible-playbook -i inventory/hosts playbooks/c_uptime.yml -k +SSH password: +PLAY [Check Uptime for Servers] **************************************************************************************************************************************** +TASK [check_uptime : Capture timestamp] ************************************************************************************************* +. +截断... +. +PLAY RECAP ************************************************************************************************************************************************************* +master : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +workernode1 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +[root@homebase 6_sysadmin_tasks]# +``` + +剧本的输出是这样的: + +``` +[root@homebase 6_sysadmin_tasks]# cat /var/tmp/uptime-master-20210221004417.txt +----------------------------------------------------- + Uptime for master +----------------------------------------------------- + 00:44:17 up 44 min, 2 users, load average: 0.01, 0.09, 0.09 +----------------------------------------------------- +[root@homebase 6_sysadmin_tasks]# cat /var/tmp/uptime-workernode1-20210221184525.txt +----------------------------------------------------- + Uptime for workernode1 +----------------------------------------------------- + 18:45:26 up 44 min, 2 users, load average: 0.01, 0.01, 0.00 +----------------------------------------------------- +``` + +使用 Ansible,你可以用较少的努力以人类可读的格式获得多个服务器的状态,[Jinja 模板][6] 允许你根据自己的需要调整输出。通过更多的自动化,你可以按计划运行,并通过电子邮件发送输出,以达到报告的目的。 + +### 2、配置额外的 cron 作业 + +你需要根据基础设施和应用需求定期更新服务器的计划作业。这似乎是一项微不足道的工作,但必须正确且持续地完成。想象一下,如果你对数百台生产服务器进行手动操作,这需要花费多少时间。如果做错了,就会影响生产应用程序,如果计划的作业重叠,就会导致应用程序停机或影响服务器性能。 + +使用 [install_cron][7] 角色和 `r_cron.yml` 剧本: + +``` +[root@homebase 6_sysadmin_tasks]# ansible-playbook -i inventory/hosts playbooks/r_cron.yml -k +SSH password: +PLAY [Install additional cron jobs for root] *************************************************************************************************************************** +. +截断... +. +PLAY RECAP ************************************************************************************************************************************************************* +master : ok=10 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +workernode1 : ok=10 changed=7 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +验证剧本的结果: + +``` +[root@homebase 6_sysadmin_tasks]# ansible -i inventory/hosts all -m shell -a "crontab -l" -k +SSH password: +master | CHANGED | rc=0 >> +1 2 3 4 5 /usr/bin/ls /tmp +#Ansible: Iotop Monitoring +0 5,2 * * * /usr/sbin/iotop -b -n 1 >> /var/tmp/iotop.log 2>> /var/tmp/iotop.err +workernode1 | CHANGED | rc=0 >> +1 2 3 4 5 /usr/bin/ls /tmp +#Ansible: Iotop Monitoring +0 5,2 * * * /usr/sbin/iotop -b -n 1 >> /var/tmp/iotop.log 2>> /var/tmp/iotop.err +``` + +使用 Ansible,你可以以快速和一致的方式更新所有服务器上的 crontab 条目。你还可以使用一个简单的点对点 Ansible 命令来报告更新后的 crontab 的状态,以验证最近应用的变化。 + +### 3、收集服务器统计和 sars + +在常规的故障排除过程中,为了诊断服务器性能或应用程序问题,你需要收集系统活动报告system activity reports(sars)和服务器统计。在大多数情况下,服务器日志包含非常重要的信息,开发人员或运维团队需要这些信息来帮助解决影响整个环境的具体问题。 + +安全团队在进行调查时非常特别,大多数时候,他们希望查看多个服务器的日志。你需要找到一种简单的方法来收集这些文档。如果你能把收集任务委托给他们就更好了。 + +通过 [check_stats][8] 角色和 `c_stats.yml` 剧本来完成这个任务: + +``` +$ ansible-playbook -i inventory/hosts playbooks/c_stats.yml + +PLAY [Check Stats/sar for Servers] *********************************************************************************************************************************** + +TASK [check_stats : Get current date time] *************************************************************************************************************************** +changed: [master] +changed: [workernode1] +. +截断... +. +PLAY RECAP *********************************************************************************************************************************************************** +master : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +workernode1 : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +输出看起来像这样: + +``` +$ cat /tmp/sar-workernode1-20210221214056.txt +----------------------------------------------------- + sar output for workernode1 +----------------------------------------------------- +Linux 4.18.0-193.el8.x86_64 (node1) 21/02/21 _x86_64_ (2 CPU) +21:39:30 LINUX RESTART (2 CPU) +----------------------------------------------------- +``` + +### 4、收集服务器日志 + +除了收集服务器统计和 sars 信息,你还需要不时地收集日志,尤其是当你需要帮助调查问题时。 + +通过 [check_logs][9] 角色和 `r_cron.yml` 剧本来实现: + +``` +$ ansible-playbook -i inventory/hosts playbooks/c_logs.yml -k +SSH password: + +PLAY [Check Logs for Servers] **************************************************************************************************************************************** +. +截断... +. +TASK [check_logs : Capture Timestamp] ******************************************************************************************************************************** +changed: [master] +changed: [workernode1] +PLAY RECAP *********************************************************************************************************************************************************** +master : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +workernode1 : ok=6 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +为了确认输出,打开转储位置生成的文件。日志应该是这样的: + +``` +$ cat /tmp/logs-workernode1-20210221214758.txt | more +----------------------------------------------------- + Logs gathered: /var/log/messages for workernode1 +----------------------------------------------------- + +Feb 21 18:00:27 node1 kernel: Command line: BOOT_IMAGE=(hd0,gpt2)/vmlinuz-4.18.0-193.el8.x86_64 root=/dev/mapper/rhel-root ro crashkernel=auto resume=/dev/mapper/rhel +-swap rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb quiet +Feb 21 18:00:27 node1 kernel: Disabled fast string operations +Feb 21 18:00:27 node1 kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' +Feb 21 18:00:27 node1 kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' +Feb 21 18:00:27 node1 kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' +Feb 21 18:00:27 node1 kernel: x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 +Feb 21 18:00:27 node1 kernel: x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'compacted' format. +``` + +### 5、安装或删除软件包和软件 + +你需要能够持续快速地在系统上安装和更新软件和软件包。缩短安装或更新软件包和软件所需的时间,可以避免服务器和应用程序不必要的停机时间。 + +通过 [install_tool][10] 角色和 `r_install.yml` 剧本来实现这一点: + +``` +$ ansible-playbook -i inventory/hosts playbooks/r_install.yml -k +SSH password: +PLAY [Install additional tools/packages] *********************************************************************************** + +TASK [install_tool : Install specified tools in the role vars] ************************************************************* +ok: [master] => (item=iotop) +ok: [workernode1] => (item=iotop) +ok: [workernode1] => (item=traceroute) +ok: [master] => (item=traceroute) + +PLAY RECAP ***************************************************************************************************************** +master : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +workernode1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +这个例子安装了在 vars 文件中定义的两个特定包和版本。使用 Ansible 自动化,你可以比手动安装更快地安装多个软件包或软件。你也可以使用 vars 文件来定义你要安装的软件包的版本。 + +``` +$ cat roles/install_tool/vars/main.yml +--- +# vars file for install_tool +ins_action: absent +package_list: +  - iotop-0.6-16.el8.noarch +  - traceroute +``` + +### 拥抱自动化 + +要成为一名有效率的系统管理员,你需要接受自动化来鼓励团队内部的标准化和协作。Ansible 使你能够在更少的时间内做更多的事情,这样你就可以将时间花在更令人兴奋的项目上,而不是做重复的任务,如管理你的事件和问题管理流程。 + +有了更多的空闲时间,你可以学习更多的知识,让自己可以迎接下一个职业机会的到来。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/ansible-sysadmin + +作者:[Mike Calizo][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mcalizo +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/gears_devops_learn_troubleshooting_lightbulb_tips_520.png?itok=HcN38NOk (Tips and gears turning) +[2]: https://www.ansible.com/ +[3]: https://opensource.com/tags/ansible +[4]: https://github.com/mikecali/6_sysadmin_tasks +[5]: https://github.com/mikecali/6_sysadmin_tasks/tree/main/roles/check_uptime +[6]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_templating.html +[7]: https://github.com/mikecali/6_sysadmin_tasks/tree/main/roles/install_cron +[8]: https://github.com/mikecali/6_sysadmin_tasks/tree/main/roles/check_stats +[9]: https://github.com/mikecali/6_sysadmin_tasks/tree/main/roles/check_logs +[10]: https://github.com/mikecali/6_sysadmin_tasks/tree/main/roles/install_tool diff --git a/published/202103/20210322 Why I use exa instead of ls on Linux.md b/published/202103/20210322 Why I use exa instead of ls on Linux.md new file mode 100644 index 0000000000..1015284fcc --- /dev/null +++ b/published/202103/20210322 Why I use exa instead of ls on Linux.md @@ -0,0 +1,100 @@ +[#]: subject: (Why I use exa instead of ls on Linux) +[#]: via: (https://opensource.com/article/21/3/replace-ls-exa) +[#]: author: (Sudeshna Sur https://opensource.com/users/sudeshna-sur) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13237-1.html) + +为什么我在 Linux 上使用 exa 而不是 ls? +====== + +> exa 是一个 Linux ls 命令的现代替代品。 + +![](https://img.linux.net.cn/data/attachment/album/202103/26/101726h008fn6tttn4g6gt.jpg) + +我们生活在一个繁忙的世界里,当我们需要查找文件和数据时,使用 `ls` 命令可以节省时间和精力。但如果不经过大量调整,默认的 `ls` 输出并不十分舒心。当有一个 exa 替代方案时,为什么要花时间眯着眼睛看黑白文字呢? + +[exa][2] 是一个常规 `ls` 命令的现代替代品,它让生活变得更轻松。这个工具是用 [Rust][3] 编写的,该语言以并行性和安全性而闻名。 + +### 安装 exa + +要安装 `exa`,请运行: + +``` +$ dnf install exa +``` + +### 探索 exa 的功能 + +`exa` 改进了 `ls` 文件列表,它提供了更多的功能和更好的默认值。它使用颜色来区分文件类型和元数据。它能识别符号链接、扩展属性和 Git。而且它体积小、速度快,只有一个二进制文件。 + +#### 跟踪文件 + +你可以使用 `exa` 来跟踪某个 Git 仓库中新增的文件。 + +![Tracking Git files with exa][4] + +#### 树形结构 + +这是 `exa` 的基本树形结构。`--level` 的值决定了列表的深度,这里设置为 2。如果你想列出更多的子目录和文件,请增加 `--level` 的值。 + +![exa's default tree structure][6] + +这个树包含了每个文件的很多元数据。 + +![Metadata in exa's tree structure][7] + +#### 配色方案 + +默认情况下,`exa` 根据 [内置的配色方案][8] 来标识不同的文件类型。它不仅对文件和目录进行颜色编码,还对 `Cargo.toml`、`CMakeLists.txt`、`Gruntfile.coffee`、`Gruntfile.js`、`Makefile` 等多种文件类型进行颜色编码。 + +#### 扩展文件属性 + +当你使用 `exa` 探索 xattrs(扩展的文件属性)时,`--extended` 会显示所有的 xattrs。 + +![xattrs in exa][9] + +#### 符号链接 + +`exa` 能识别符号链接,也能指出实际的文件。 + +![symlinks in exa][10] + +#### 递归 + +当你想递归当前目录下所有目录的列表时,`exa` 能进行递归。 + +![recurse in exa][11] + +### 总结 + +我相信 `exa 是最简单、最容易适应的工具之一。它帮助我跟踪了很多 Git 和 Maven 文件。它的颜色编码让我更容易在多个子目录中进行搜索,它还能帮助我了解当前的 xattrs。 + +你是否已经用 `exa` 替换了 `ls`?请在评论中分享你的反馈。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/replace-ls-exa + +作者:[Sudeshna Sur][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/sudeshna-sur +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bash_command_line.png?itok=k4z94W2U (bash logo on green background) +[2]: https://the.exa.website/docs +[3]: https://opensource.com/tags/rust +[4]: https://opensource.com/sites/default/files/uploads/exa_trackingfiles.png (Tracking Git files with exa) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/sites/default/files/uploads/exa_treestructure.png (exa's default tree structure) +[7]: https://opensource.com/sites/default/files/uploads/exa_metadata.png (Metadata in exa's tree structure) +[8]: https://the.exa.website/features/colours +[9]: https://opensource.com/sites/default/files/uploads/exa_xattrs.png (xattrs in exa) +[10]: https://opensource.com/sites/default/files/uploads/exa_symlinks.png (symlinks in exa) +[11]: https://opensource.com/sites/default/files/uploads/exa_recurse.png (recurse in exa) diff --git a/published/202103/20210323 3 new Java tools to try in 2021.md b/published/202103/20210323 3 new Java tools to try in 2021.md new file mode 100644 index 0000000000..9dc03f05b4 --- /dev/null +++ b/published/202103/20210323 3 new Java tools to try in 2021.md @@ -0,0 +1,75 @@ +[#]: subject: (3 new Java tools to try in 2021) +[#]: via: (https://opensource.com/article/21/3/enterprise-java-tools) +[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13249-1.html) + +2021 年要尝试的 3 个新的 Java 工具 +====== + +> 通过这三个工具和框架,为你的企业级 Java 应用和你的职业生涯提供助力。 + +![](https://img.linux.net.cn/data/attachment/album/202103/29/212649w9j5e05b0ppi9bew.jpg) + +尽管在 Kubernetes 上广泛使用 [Python][2]、[Go][3] 和 [Node.js][4] 实现 [人工智能][5] 和机器学习应用以及 [无服务函数][6],但 Java 技术仍然在开发企业应用中发挥着关键作用。根据 [开发者经济学][7] 的数据,在 2020 年第三季度,全球有 800 万名企业 Java 开发者。 + +虽然这门语言已经存在了超过 25 年,但 Java 世界中总是有新的趋势、工具和框架,可以为你的应用和你的职业生涯赋能。 + +绝大多数 Java 框架都是为具有动态行为的长时间运行的进程而设计的,这些动态行为用于运行可变的应用服务器,例如物理服务器和虚拟机。自从 Kubernetes 容器在 2014 年发布以来,情况已经发生了变化。在 Kubernetes 上使用 Java 应用的最大问题是通过减少内存占用、加快启动和响应时间以及减少文件大小来优化应用性能。 + +### 3 个值得考虑的新 Java 框架和工具 + +Java 开发人员也一直在寻找更简便的方法,将闪亮的新开源工具和项目集成到他们的 Java 应用和日常工作中。这极大地提高了开发效率,并激励更多的企业和个人开发者继续使用 Java 栈。 + +当试图满足上述企业 Java 生态系统的期望时,这三个新的 Java 框架和工具值得你关注。 + +#### 1、Quarkus + +[Quarkus][8] 旨在以惊人的快速启动时间、超低的常驻内存集(RSS)和高密度内存利用率,在 Kubernetes 等容器编排平台中开发云原生的微服务和无服务。根据 JRebel 的 [第九届全球 Java 开发者生产力年度报告][9],Java 开发者对 Quarkus 的使用率从不到 1% 上升到 6%,[Micronaut][10] 和 [Vert.x][11] 均从去年的 1% 左右分别增长到 4% 和 2%。 + +#### 2、Eclipse JKube + +[Eclipse JKube][12] 使 Java 开发者能够使用 [Docker][13]、[Jib][14] 或 [Source-To-Image][15] 构建策略,基于云原生 Java 应用构建容器镜像。它还能在编译时生成 Kubernetes 和 OpenShift 清单,并改善开发人员对调试、观察和日志工具的体验。 + +#### 3、MicroProfile + +[MicroProfile][16] 解决了与优化企业 Java 的微服务架构有关的最大问题,而无需采用新的框架或重构整个应用。此外,MicroProfile [规范][17](即 Health、Open Tracing、Open API、Fault Tolerance、Metrics、Config)继续与 [Jakarta EE][18] 的实现保持一致。 + +### 总结 + +很难说哪个 Java 框架或工具是企业 Java 开发人员实现的最佳选择。只要 Java 栈还有改进的空间,并能加速企业业务的发展,我们就可以期待新的框架、工具和平台的出现,比如上面的三个。花点时间看看它们是否能在 2021 年改善你的企业 Java 应用。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/enterprise-java-tools + +作者:[Daniel Oh][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/daniel-oh +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/coffee_tea_laptop_computer_work_desk.png?itok=D5yMx_Dr (Person drinking a hot drink at the computer) +[2]: https://opensource.com/resources/python +[3]: https://opensource.com/article/18/11/learning-golang +[4]: https://opensource.com/article/18/7/node-js-interactive-cli +[5]: https://opensource.com/article/18/12/how-get-started-ai +[6]: https://opensource.com/article/19/4/enabling-serverless-kubernetes +[7]: https://developereconomics.com/ +[8]: https://quarkus.io/ +[9]: https://www.jrebel.com/resources/java-developer-productivity-report-2021 +[10]: https://micronaut.io/ +[11]: https://vertx.io/ +[12]: https://www.eclipse.org/jkube/ +[13]: https://opensource.com/resources/what-docker +[14]: https://github.com/GoogleContainerTools/jib +[15]: https://www.openshift.com/blog/create-s2i-builder-image +[16]: https://opensource.com/article/18/1/eclipse-microprofile +[17]: https://microprofile.io/ +[18]: https://opensource.com/article/18/5/jakarta-ee diff --git a/published/202103/20210323 Affordable high-temperature 3D printers at home.md b/published/202103/20210323 Affordable high-temperature 3D printers at home.md new file mode 100644 index 0000000000..fa2b49ee63 --- /dev/null +++ b/published/202103/20210323 Affordable high-temperature 3D printers at home.md @@ -0,0 +1,73 @@ +[#]: subject: (Affordable high-temperature 3D printers at home) +[#]: via: (https://opensource.com/article/21/3/desktop-3d-printer) +[#]: author: (Joshua Pearce https://opensource.com/users/jmpearce) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13255-1.html) + +在家就能用得起的高温 3D 打印机 +====== + +> 有多实惠?低于 1000 美元。 + +![High-temperature 3D-printed mask][1] + +3D 打印机从 20 世纪 80 年代就已经出现了,但是由于 [RepRap][2] 项目的出现,它们直到获得开源才受到人们的关注。RepRap 意即自我复制快速原型机self-replicating rapid prototyper,它是一种基本上可以自己打印的 3D 打印机。它的开源计划[2004 年][3] 发布之后,导致 3D 打印机的成本从几十万美金降到了几百美金。 + +这些开源的桌面工具一直局限于 ABS 等低性能、低温热塑性塑料(如乐高积木)。市场上有几款高温打印机,但其高昂的成本(几万到几十万美元)使大多数人无法获得。直到最近,它们才参与了很多竞争,因为它们被一项专利 (US6722872B1) 锁定,该专利于 2021 年 2 月 27 日[到期][4]。 + +随着这个路障的消除,我们即将看到高温、低成本、熔融纤维 3D 打印机的爆发。 + +价格低到什么程度?低于 1000 美元如何。 + +在疫情最严重的时候,我的团队赶紧发布了一个 [开源高温 3D 打印机][5] 的设计,用于制造可高温消毒的个人防护装备(PPE)。该项目的想法是让人们能够 [用高温材料打印 PPE][6](如口罩),并将它放入家用烤箱进行消毒。我们称我们的设备为 Cerberus,它具有以下特点: + + 1. 可达到 200℃ 的加热床 + 2. 可达到 500℃ 的热源 + 3. 带有 1kW 加热器核心的隔离式加热室。 + 4. 主电源(交流电源)电压室和床身加热,以便快速启动。 + +你可以用现成的零件来构建这个项目,其中一些零件你可以打印,价格不到 1000 美元。它可以成功打印聚醚酮酮 (PEKK) 和聚醚酰亚胺(PEI,以商品名 Ultem 出售)。这两种材料都比现在低成本打印机能打印的任何材料强得多。 + +![PPE printer][7] + +这款高温 3D 打印机的设计是有三个头,但我们发布的时候只有一个头。Cerberus 是以希腊神话中的三头冥界看门狗命名的。通常情况下,我们不会发布只有一个头的打印机,但疫情改变了我们的优先级。[开源社区团结起来][9],帮助解决早期的供应不足,许多桌面 3D 打印机都在产出有用的产品,以帮助保护人们免受 COVID 的侵害。 + +那另外两个头呢? + +其他两个头是为了高温熔融颗粒制造(例如,这个开源的 [3D打印机][10] 的高温版本)并铺设金属线(像在 [这个设计][11] 中),以建立一个开源的热交换器。Cerberus 打印机的其他功能可能是一个自动喷嘴清洁器和在高温下打印连续纤维的方法。另外,你还可以在转台上安装任何你喜欢的东西来制造高端产品。 + +把一个盒子放在 3D 打印机周围,而把电子元件留在外面的 [专利][12] 到期,为高温家用 3D 打印机铺平了道路,这将使这些设备以合理的成本从单纯的玩具变为工业工具。 + +已经有公司在 RepRap 传统的基础上,将这些低成本系统推向市场(例如,1250 美元的 [Creality3D CR-5 Pro][13] 3D 打印机可以达到 300℃)。Creality 销售最受欢迎的桌面 3D 打印机,并开源了部分设计。 + +然而,要打印超高端工程聚合物,这些打印机需要达到 350℃ 以上。开源计划已经可以帮助桌面 3D 打印机制造商开始与垄断公司竞争,这些公司由于躲在专利背后,已经阻碍了 3D 打印 20 年。期待低成本、高温桌面 3D 打印机的竞争将真正升温! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/desktop-3d-printer + +作者:[Joshua Pearce][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jmpearce +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/3d_printer_mask.jpg?itok=5ePZghTW (High-temperature 3D-printed mask) +[2]: https://reprap.org/wiki/RepRap +[3]: https://reprap.org/wiki/Wealth_Without_Money +[4]: https://3dprintingindustry.com/news/stratasys-heated-build-chamber-for-3d-printer-patent-us6722872b1-set-to-expire-this-week-185012/ +[5]: https://doi.org/10.1016/j.ohx.2020.e00130 +[6]: https://www.appropedia.org/Open_Source_High-Temperature_Reprap_for_3-D_Printing_Heat-Sterilizable_PPE_and_Other_Applications +[7]: https://opensource.com/sites/default/files/uploads/ppe-hight3dp.png (PPE printer) +[8]: https://www.gnu.org/licenses/fdl-1.3.html +[9]: https://opensource.com/article/20/3/volunteer-covid19 +[10]: https://www.liebertpub.com/doi/10.1089/3dp.2019.0195 +[11]: https://www.appropedia.org/Open_Source_Multi-Head_3D_Printer_for_Polymer-Metal_Composite_Component_Manufacturing +[12]: https://www.academia.edu/17609790/A_Novel_Approach_to_Obviousness_An_Algorithm_for_Identifying_Prior_Art_Concerning_3-D_Printing_Materials +[13]: https://creality3d.shop/collections/cr-series/products/cr-5-pro-h-3d-printer diff --git a/published/20210325 Identify Linux performance bottlenecks using open source tools.md b/published/20210325 Identify Linux performance bottlenecks using open source tools.md new file mode 100644 index 0000000000..55b95a5034 --- /dev/null +++ b/published/20210325 Identify Linux performance bottlenecks using open source tools.md @@ -0,0 +1,265 @@ +[#]: subject: (Identify Linux performance bottlenecks using open source tools) +[#]: via: (https://opensource.com/article/21/3/linux-performance-bottlenecks) +[#]: author: (Howard Fosdick https://opensource.com/users/howtech) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13462-1.html) + +使用开源工具识别 Linux 的性能瓶颈 +====== + +> 不久前,识别硬件瓶颈还需要深厚的专业知识。今天的开源 GUI 性能监视器使它变得相当简单。 + +![](https://img.linux.net.cn/data/attachment/album/202106/07/000141z5shv5nzxeln5y5c.jpg) + +计算机是一个集成的系统,它的性能取决于最慢的硬件组件。如果一个组件的能力比其他组件差,性能落后而不能跟上,它就会拖累你的整个系统。这就是一个 _性能瓶颈_。消除一个严重的瓶颈可以使你的系统飞起来。 + +本文解释了如何识别 Linux 系统中的硬件瓶颈。这些技术同时适用于个人的电脑和服务器。我强调的是个人电脑 —— 我不会涉及局域网管理或数据库系统等领域的服务器特定的瓶颈。这些通常涉及专门的工具。 + +我也不会多谈解决方案。这对本文来说是个太大的话题。相反,我将写一篇关于性能调整的后续文章。 + +我将只使用开源的图形用户界面(GUI)工具来完成这项工作。大多数关于 Linux 瓶颈的文章都相当复杂。它们使用专门的命令,并深入研究神秘的细节。 + +开源提供的 GUI 工具使得识别许多瓶颈变得简单。我的目标是给你一个快速、简单的方法,你可以在任何地方使用。 + +### 从哪里开始 + +一台计算机由六个关键的硬件资源组成。 + + * 处理器 + * 内存 + * 存储器 + * USB 端口 + * 互联网连接 + * 图形处理器 + +如果任何一个资源表现不佳,就会产生一个性能瓶颈。为了识别瓶颈,你必须监测这六种资源。 + +开源提供了大量的工具来完成这项工作。我会使用 [GNOME 系统监视器][2]。它的输出很容易理解,而且你可以在大多数软件库中找到它。 + +启动它并点击“资源”标签。你可以马上发现许多性能问题。 + +![系统监控-资源面板][3] + +*图 1. 系统监控器发现问题。(Howard Fosdick, [CC BY-SA 4.0][4])* + +在“资源”面板上显示三个部分:CPU 历史、内存和交换历史,以及网络历史。一眼就能看出你的处理器是否不堪负荷了,还是你的电脑没有内存了,抑或你的网络带宽被用光了。 + +我将在下面探讨这些问题。现在,当你的电脑速度变慢时,首先检查系统监视器。它可以立即为你提供最常见的性能问题的线索。 + +现在让我们来探讨一下如何识别特定方面的瓶颈。 + +### 如何识别处理器的瓶颈 + +要发现瓶颈,你必须首先知道你有什么硬件。开源为这个目的提供了几个工具。我喜欢 [HardInfo][5],因为它的屏幕显示很容易阅读,而且广泛流行。 + +启动 HardInfo。它的“计算机->摘要”面板可以识别你的 CPU 并告诉你它的核心数、线程数和速度。它还能识别你的主板和其他计算机部件。 + +![HardInfo Summary Panel][6] + +*图 2. HardInfo 显示了硬件细节。(Howard Fosdick, [CC BY-SA 4.0][4])* + +HardInfo 显示,这台计算机有一个物理 CPU 芯片。该芯片包含两个处理器(或称为核心)。每个核心支持两个线程(或称为逻辑处理器)。这就是总共四个逻辑处理器 —— 正是图 1 中系统监控器的 CPU 历史部分所显示的。 + +当处理器不能在其时间内对请求做出反应时,就会出现 _处理器瓶颈_,说明它们已经很忙了。 + +当系统监控器显示逻辑处理器的利用率持续在 80% 或 90% 以上时,你就可以确定这一点。这里有一个例子,四个逻辑处理器中有三个被淹没在 100% 的利用率中。这是一个瓶颈,因为它没有留下多少 CPU 用于其他工作。 + +![系统监视器的处理器瓶颈][7] + +*图 3. 一个处理器的瓶颈。(Howard Fosdick, [CC BY-SA 4.0][4])* + +#### 哪个程序导致了这个问题? + +你需要找出是哪个程序在消耗所有的 CPU。点击系统监视器的“进程”标签。然后点击“CPU 百分比”标头,根据它们消耗的 CPU 的多少对进程进行排序。你将看到哪些应用程序正在扼杀你的系统。 + +![系统监控进程面板][8] + +*图 4. 识别违规的进程。(Howard Fosdick, [CC BY-SA 4.0][4])* + +前三个进程各消耗了 _总 CPU 资源的 24%_。由于有四个逻辑处理器,这意味着每个进程消耗了一整个处理器。这就像图 3 所示。 + +在“进程”面板上,一个名为“analytical_AI”的程序被确定为罪魁祸首。你可以在面板上右键单击它,以查看其资源消耗的更多细节,包括内存使用、它所打开的文件、其输入/输出细节,等等。 + +如果你的登录会话有管理员权限,你可以管理这个进程。你可以改变它的优先级,并停止、继续、结束或杀死它。因此,你可以在这里立即解决你的瓶颈问题。 + +![系统监视器管理一个进程][9] + +*图 5. 右键点击一个进程来管理它。(Howard Fosdick, [CC BY-SA 4.0][4])* + +如何解决处理瓶颈问题?除了实时管理违规的进程外,你也可以防止瓶颈的发生。例如,你可以用另一个应用程序来代替违规进程,绕过它,改变你使用该应用程序的行为,将该应用程序安排在非工作时间,解决潜在的内存问题,对该应用程序或你的系统软件进行性能调整,或升级你的硬件。这里涉及的内容太多,所以我将在下一篇文章中探讨这些方式。 + +#### 常见的处理器瓶颈 + +在用系统监控器监控你的 CPU 时,你会遇到几种常见的瓶颈问题。 + +有时一个逻辑处理器出现瓶颈,而其他所有的处理器都处于低利用率。这意味着你有一个应用程序,它的代码不够智能,无法利用一个以上的逻辑处理器,而且它已经把正在使用的那个处理器耗尽了。这个应用程序完成的时间将比使用更多的处理器要长。但另一方面,至少它能让你的其他处理器腾出手来做别的工作,而不会接管你的电脑。 + +你也可能看到一个逻辑处理器永远停留在 100% 的利用率。要么它非常忙,要么是一个进程被挂起了。判断它是否被挂起的方法是,是看该进程是否从不进行任何磁盘活动(正如系统监视器“进程”面板所显示的那样)。 + +最后,你可能会注意到,当你所有的处理器都陷入瓶颈时,你的内存也被完全利用了。内存不足的情况有时会导致处理器瓶颈。在这种情况下,你要解决的是根本的内存问题,而不是体现出症状的 CPU 问题。 + +### 如何识别内存瓶颈 + +鉴于现代 PC 中有大量的内存,内存瓶颈比以前要少得多。然而,如果你运行内存密集型程序,特别是当你的计算机没有很多的随机存取内存(RAM)时,你仍然可能遇到这些问题。 + +Linux [使用内存][10] 既用于程序,也用于缓存磁盘数据。后者加快了磁盘数据的访问速度。Linux 可以在它需要的任何时候回收这些内存供程序使用。 + +系统监视器的“资源”面板显示了你的总内存和它被使用的程度。在“进程”面板上,你可以看到单个进程的内存使用情况。 + +下面是系统监控器“资源”面板中跟踪总内存使用的部分。 + +![系统监控器的内存瓶颈][11] + +*图 6. 一个内存瓶颈。(Howard Fosdick, [CC BY-SA 4.0][4])* + +在“内存”的右边,你会注意到 [交换空间][12]。这是 Linux 在内存不足时使用的磁盘空间。它将内存写入磁盘以继续操作,有效地将交换空间作为你的内存的一个较慢的扩展。 + +你要注意的两个内存性能问题是: + +1. 内存被大量使用,而且你看到交换空间的活动频繁或不断增加。 +2. 内存和交换空间都被大量使用。 + +情况一意味着更慢的性能,因为交换空间总是比内存更慢。你是否认为这是一个性能问题,取决于许多因素(例如,你的交换空间有多活跃、它的速度、你的预期,等等)。我的看法是,对于现代个人电脑来说,交换空间任何超过象征性的使用都是不可接受的。 + +情况二是指内存和交换空间都被大量使用。这是一个 _内存瓶颈_。计算机变得反应迟钝。它甚至可能陷入一种“咆哮”的状态,在这种状态下,除了内存管理之外,它几乎不能完成其他任务。 + +上面的图 6 显示了一台只有 2GB 内存的旧电脑。当内存使用量超过 80% 时,系统开始向交换空间写入,响应速度下降了。这张截图显示了内存使用量超过了 90%,而且这台电脑已经无法使用。 + +解决内存问题的最终答案是要么少用内存,要么多买内存。我将在后续文章中讨论解决方案。 + +### 如何识别存储瓶颈 + +如今的存储有固态和机械硬盘等多个品种。设备接口包括 PCIe、SATA、雷电和 USB。无论有哪种类型的存储,你都要使用相同的程序来识别磁盘瓶颈。 + +从系统监视器开始。它的“进程”面板显示各个进程的输入/输出率。因此,你可以快速识别哪些进程做了最多的磁盘 I/O。 + +但该工具并不显示每个磁盘的总数据传输率。你需要查看特定磁盘上的总负载,以确定该磁盘是否是一个存储瓶颈。 + +要做到这一点,使用 [atop][13] 命令。它在大多数 Linux 软件库中都有。 + +只要在命令行提示符下输入 `atop` 即可。下面的输出显示,设备 `sdb` 达到 `busy 101%`。很明显,它已经达到了性能极限,限制了你的系统完成工作的速度。 + +![atop 磁盘瓶颈][14] + +*图 7. atop 命令识别了一个磁盘瓶颈。(Howard Fosdick, [CC BY-SA 4.0][4])* + +注意到其中一个 CPU 有 85% 的时间在等待磁盘完成它的工作(`cpu001 w 85%`)。这是典型的存储设备成为瓶颈的情况。事实上,许多人首先看 CPU 的 I/O 等待时间来发现存储瓶颈。 + +因此,要想轻松识别存储瓶颈,请使用 `atop` 命令。然后使用系统监视器上的“进程”面板来识别导致瓶颈的各个进程。 + +### 如何识别 USB 端口的瓶颈 + +有些人整天都在使用他们的 USB 端口。然而,他们从不检查这些端口是否被最佳地使用。无论你是插入外部磁盘、U 盘,还是其他东西,你都要确认你是否从 USB 连接的设备中获得了最大性能。 + +这个图表显示了原因。潜在的 USB 数据传输率差异 _很大_。 + +![USB 标准][15] + +*图 8. USB 速度变化很大。(Howard Fosdick,根据 [Tripplite][16] 和 [Wikipedia][17] 提供的数字,[CC BY-SA 4.0][4])* + +HardInfo 的“USB 设备”标签显示了你的计算机支持的 USB 标准。大多数计算机提供不止一种速度。你怎么知道一个特定端口的速度呢?供应商对它们进行颜色编码,如图表中所示。或者你可以在你的计算机的文档中查找。 + +要看到你得到的实际速度,可以使用开源的 [GNOME 磁盘][18] 程序进行测试。只要启动 GNOME 磁盘,选择它的“磁盘基准”功能,然后运行一个基准测试。这将告诉你在一个端口插入特定设备时,你将得到的最大实际速度。 + +你可能会得到不同的端口传输速度,这取决于你将哪个设备插入它。数据速率取决于端口和设备的特定组合。 + +例如,一个可以以 3.1 速度运行的设备如果使用 2.0 端口就会以 2.0 的速度运行。(而且它不会告诉你它是以较慢的速度运行的!)相反,如果你把一个 USB 2.0 设备插入 3.1 端口,它能工作,但速度是 2.0 的速度。所以要获得快速的 USB,你必须确保端口和设备都支持它。GNOME 磁盘为你提供了验证这一点的方法。 + +要确定 USB 的处理瓶颈,使用你对固态和硬盘所做的同样程序。运行 `atop` 命令来发现 USB 存储瓶颈。然后,使用系统监视器来获取违规进程的详细信息。 + +### 如何识别互联网带宽瓶颈 + +系统监控器的“资源”面板会实时告诉你互联网连接速度(见图 1)。 + +有 [很好的 Python 工具][19] 可以测试你的最大网速,但你也可以在 [Speedtest][20]、[Fast.com][21] 和 [Speakeasy][22] 等网站进行测试。为了获得最佳结果,关闭所有东西,只运行 _速度测试_;关闭你的虚拟私有网络;在一天中的不同时间运行测试;并比较几个测试网站的结果。 + +然后将你的结果与你的供应商声称的下载和上传速度进行比较。这样,你就可以确认你得到的是你所付费的速度。 + +如果你有一个单独的路由器,在有和没有它的情况下进行测试。这可以告诉你,你的路由器是否是一个瓶颈。如果你使用 WiFi,在有 WiFi 和没有 WiFi 的情况下进行测试(通过将你的笔记本电脑直接与调制解调器连接)。我经常看到人们抱怨他们的互联网供应商,而实际上他们只是有一个 WiFi 瓶颈,可以自己解决。 + +如果某些程序正在消耗你的整个互联网连接,你想知道是哪一个。通过使用 `nethogs` 命令找到它。它在大多数软件库中都有。 + +有一天,我的系统监视器突然显示我的互联网访问量激增。我只是在命令行中输入了 `nethogs`,它立即确定带宽消耗者是 Clamav 防病毒更新。 + +![Nethogs][23] + +*图 9. Nethogs 识别带宽用户。(Howard Fosdick, [CC BY-SA 4.0][4])* + +### 如何识别图形处理瓶颈 + +如果你把显示器插在台式电脑后面的主板上,你就在使用 _板载显卡_。如果你把它插在后面的卡上,你就有一个专门的图形子系统。大多数人称它为 _视频卡_ 或 _显卡_。对于台式电脑来说,附加显卡通常比主板上的显卡更强大、更昂贵。笔记本电脑总是使用板载显卡。 + +HardInfo 的“PCI 设备”面板告诉你关于你的图形处理单元(GPU)。它还显示你的专用视频内存的数量(寻找标有“可预取”的内存)。 + +![视频芯片组信息][24] + +*图 10. HardInfo提供图形处理信息。(Howard Fosdick, [CC BY-SA 4.0][4])* + +CPU 和 GPU [非常密切地][25] 一起工作。简而言之,CPU 为 GPU 准备渲染的帧,然后 GPU 渲染这些帧。 + +当你的 CPU 在等待 100% 繁忙的 GPU 时,就会出现 _GPU 瓶颈_。 + +为了确定这一点,你需要监控 CPU 和 GPU 的利用率。像 [Conky][26] 和 [Glances][27] 这样的开源监控器,如果它们的扩展插件支持你的图形芯片组,就可以做到这一点。 + +看一下 Conky 的这个例子。你可以看到,这个系统有很多可用的 CPU。GPU 只有 25% 的使用率。想象一下,如果这个 GPU 的数量接近 100%。那么你就会知道 CPU 在等待 GPU,你就会有一个 GPU 的瓶颈。 + +![Conky CPU 和 GPU 监控][28] + +*图 11. Conky 显示 CPU 和 GPU 的利用率。 (图片来源:[AskUbuntu论坛][29])* + +在某些系统上,你需要一个供应商专属的工具来监控你的 GPU。它们可以从 GitHub 上下载,并在 [GPU 监控和诊断命令行工具][30] 这篇文章中有所描述。 + +### 总结 + +计算机由一系列集成的硬件资源组成。如果它们中的任何一个在工作量上远远落后于其他资源,就会产生性能瓶颈。这可能会拖累你的整个系统。你需要能够识别和纠正瓶颈,以实现最佳性能。 + +不久前,识别瓶颈需要深厚的专业知识。今天的开源 GUI 性能监控器使它变得相当简单。 + +在我的下一篇文章中,我将讨论改善你的 Linux 电脑性能的具体方法。同时,请在评论中分享你自己的经验。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/linux-performance-bottlenecks + +作者:[Howard Fosdick][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/howtech +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/BUSINESS_lightning.png?itok=wRzjWIlm (Lightning in a bottle) +[2]: https://wiki.gnome.org/Apps/SystemMonitor +[3]: https://opensource.com/sites/default/files/uploads/1_system_monitor_resources_panel.jpg (System Monitor - Resources Panel ) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://itsfoss.com/hardinfo/ +[6]: https://opensource.com/sites/default/files/uploads/2_hardinfo_summary_panel.jpg (HardInfo Summary Panel) +[7]: https://opensource.com/sites/default/files/uploads/3_system_monitor_100_processor_utilization.jpg (System Monitor processor bottleneck) +[8]: https://opensource.com/sites/default/files/uploads/4_system_monitor_processes_panel.jpg (System Monitor Processes panel) +[9]: https://opensource.com/sites/default/files/uploads/5_system_monitor_manage_a_process.jpg (System Monitor managing a process) +[10]: https://www.networkworld.com/article/3394603/when-to-be-concerned-about-memory-levels-on-linux.html +[11]: https://opensource.com/sites/default/files/uploads/6_system_monitor_out_of_memory.jpg (System Monitor memory bottleneck) +[12]: https://opensource.com/article/18/9/swap-space-linux-systems +[13]: https://opensource.com/life/16/2/open-source-tools-system-monitoring +[14]: https://opensource.com/sites/default/files/uploads/7_atop_storage_bottleneck.jpg (atop disk bottleneck) +[15]: https://opensource.com/sites/default/files/uploads/8_usb_standards_speeds.jpg (USB standards) +[16]: https://www.samsung.com/us/computing/memory-storage/solid-state-drives/ +[17]: https://en.wikipedia.org/wiki/USB +[18]: https://wiki.gnome.org/Apps/Disks +[19]: https://opensource.com/article/20/1/internet-speed-tests +[20]: https://www.speedtest.net/ +[21]: https://fast.com/ +[22]: https://www.speakeasy.net/speedtest/ +[23]: https://opensource.com/sites/default/files/uploads/9_nethogs_bandwidth_consumers.jpg (Nethogs) +[24]: https://opensource.com/sites/default/files/uploads/10_hardinfo_video_card_information.jpg (Video Chipset Information) +[25]: https://www.wepc.com/tips/cpu-gpu-bottleneck/ +[26]: https://itsfoss.com/conky-gui-ubuntu-1304/ +[27]: https://opensource.com/article/19/11/monitoring-linux-glances +[28]: https://opensource.com/sites/default/files/uploads/11_conky_cpu_and_gup_monitoring.jpg (Conky CPU and GPU monitoring) +[29]: https://askubuntu.com/questions/387594/how-to-measure-gpu-usage +[30]: https://www.cyberciti.biz/open-source/command-line-hacks/linux-gpu-monitoring-and-diagnostic-commands/ diff --git a/published/202104/20190319 How to set up a homelab from hardware to firewall.md b/published/202104/20190319 How to set up a homelab from hardware to firewall.md new file mode 100644 index 0000000000..54c24e7a14 --- /dev/null +++ b/published/202104/20190319 How to set up a homelab from hardware to firewall.md @@ -0,0 +1,107 @@ +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13262-1.html) +[#]: subject: (How to set up a homelab from hardware to firewall) +[#]: via: (https://opensource.com/article/19/3/home-lab) +[#]: author: (Michael Zamot https://opensource.com/users/mzamot) + +如何从硬件到防火墙建立一个家庭实验室 +====== + +> 了解一下用于构建自己的家庭实验室的硬件和软件方案。 + +![](https://img.linux.net.cn/data/attachment/album/202104/02/215222t2fiqpt17gfpkkii.jpg) + +你有想过创建一个家庭实验室吗?或许你想尝试不同的技术,构建开发环境、亦或是建立自己的私有云。拥有一个家庭实验室的理由很多,本教程旨在使入门变得更容易。 + +规划家庭实验室时,需要考虑三方面:硬件、软件和维护。我们将在这里查看前两方面,并在以后的文章中讲述如何节省维护计算机实验室的时间。 + +### 硬件 + +在考虑硬件需求时,首先要考虑如何使用实验室以及你的预算、噪声、空间和电力使用情况。 + +如果购买新硬件过于昂贵,请搜索当地的大学、广告以及诸如 eBay 或 Craigslist 之类的网站,能获取二手服务器的地方。它们通常很便宜,并且服务器级的硬件可以使用很多年。你将需要三类硬件:虚拟化服务器、存储设备和路由器/防火墙。 + +#### 虚拟化服务器 + +一个虚拟化服务器允许你去运行多个共享物理机资源的虚拟机,同时最大化利用和隔离资源。如果你弄坏了一台虚拟机,无需重建整个服务器,只需虚拟一个好了。如果你想进行测试或尝试某些操作而不损坏整个系统,仅需要新建一个虚拟机来运行即可。 + +在虚拟服务器中,需考虑两个最重要的因素是 CPU 的核心数及其运行速度以及内存容量。如果没有足够的资源够全部虚拟机共享,那么它们将被过度分配并试着获取其他虚拟机的 CPU 的周期和内存。 + +因此,考虑一个多核 CPU 的平台。你要确保 CPU 支持虚拟化指令(因特尔的 VT-x 指令集和 AMD 的 AMD-V 指令集)。能够处理虚拟化的优质的消费级处理器有因特尔的 i5 或 i7 和 AMD 的 Ryzen 处理器。如果你考虑服务器级的硬件,那么因特尔的志强系列和 AMD 的 EPYC 都是不错的选择。内存可能很昂贵,尤其是最近的 DDR4 内存。当我们估计所需多少内存时,请为主机操作系统的内存至少分配 2 GB 的空间。 + +如果你担心电费或噪声,则诸如因特尔 NUC 设备之类的解决方案虽然外形小巧、功耗低、噪音低,但是却以牺牲可扩展性为代价。 + +#### NAS + +如果希望装有硬盘驱动器的计算机存储你的所有个人数据,电影,图片等,并为虚拟化服务器提供存储,则需要网络附加存储Network-attached storage(NAS)。 + +在大多数情况下,你不太可能需要一颗强力的 CPU。实际上,许多商业 NAS 的解决方案使用低功耗的 ARM CPU。支持多个 SATA 硬盘的主板是必须的。如果你的主板没有足够的端口,请使用主机总线适配器host bus adapter(HBA)SAS 控制器添加额外的端口。 + +网络性能对于 NAS 来说是至关重要的,因此最好选择千兆gigabit网络(或更快网络)。 + +内存需求根据你的文件系统而有所不同。ZFS 是 NAS 上最受欢迎的文件系统之一,你需要更多内存才能使用诸如缓存或重复数据删除之类的功能。纠错码Error-correcting code(ECC)的内存是防止数据损坏的最佳选择(但在购买前请确保你的主板支持)。最后但同样重要的,不要忘记使用不间断电源uninterruptible power supply(UPS),因为断电可能会使得数据出错。 + +#### 防火墙和路由器 + +你是否曾意识到,廉价的路由器/防火墙通常是保护你的家庭网络不受外部环境影响的主要部分?这些路由器很少及时收到安全更新(如果有的话)。现在害怕了吗?好吧,[确实][2]! + +通常,你不需要一颗强大的 CPU 或是大量内存来构建你自己的路由器/防火墙,除非你需要高吞吐率或是执行 CPU 密集型任务,像是虚拟私有网络服务器或是流量过滤。在这种情况下,你将需要一个支持 AES-NI 的多核 CPU。 + +你可能想要至少 2 个千兆或更快的以太网卡Ethernet network interface cards(NIC),这不是必需的,但我推荐使用一个管理型交换机来连接你自己的装配的路由器,以创建 VLAN 来进一步隔离和保护你的网络。 + +![Home computer lab PfSense][4] + +### 软件 + +在选择完你的虚拟化服务器、NAS 和防火墙/路由器后,下一步是探索不同的操作系统和软件,以最大程度地发挥其作用。尽管你可以使用 CentOS、Debian或 Ubuntu 之类的常规 Linux 发行版,但是与以下软件相比,它们通常花费更多的时间进行配置和管理。 + +#### 虚拟化软件 + +[KVM][5](基于内核的虚拟机Kernel-based Virtual Machine)使你可以将 Linux 变成虚拟机监控程序,以便可以在同一台机器中运行多个虚拟机。最好的是,KVM 作为 Linux 的一部分,它是许多企业和家庭用户的首选。如果你愿意,可以安装 [libvirt][6] 和 [virt-manager][7] 来管理你的虚拟化平台。 + +[Proxmox VE][8] 是一个强大的企业级解决方案,并且是一个完全开源的虚拟化和容器平台。它基于 Debian,使用 KVM 作为其虚拟机管理程序,并使用 LXC 作为容器。Proxmox 提供了强大的网页界面、API,并且可以扩展到许多群集节点,这很有用,因为你永远不知道何时实验室容量不足。 + +[oVirt][9](RHV)是另一种使用 KVM 作为虚拟机管理程序的企业级解决方案。不要因为它是企业级的,就意味着你不能在家中使用它。oVirt 提供了强大的网页界面和 API,并且可以处理数百个节点(如果你运行那么多服务器,我可不想成为你的邻居!)。oVirt 用于家庭实验室的潜在问题是它需要一套最低限度的节点:你将需要一个外部存储(例如 NAS)和至少两个其他虚拟化节点(你可以只在一个节点上运行,但你会遇到环境维护方面的问题)。 + +#### 网络附加存储软件 + +[FreeNAS][10] 是最受欢迎的开源 NAS 发行版,它基于稳定的 FreeBSD 操作系统。它最强大的功能之一是支持 ZFS 文件系统,该文件系统提供了数据完整性检查、快照、复制和多个级别的冗余(镜像、条带化镜像和条带化)。最重要的是,所有功能都通过功能强大且易于使用的网页界面进行管理。在安装 FreeNAS 之前,请检查硬件是否支持,因为它不如基于 Linux 的发行版那么广泛。 + +另一个流行的替代方法是基于 Linux 的 [OpenMediaVault][11]。它的主要功能之一是模块化,带有可扩展和添加特性的插件。它包括的功能包括基于网页管理界面,CIFS、SFTP、NFS、iSCSI 等协议,以及卷管理,包括软件 RAID、资源配额,访问控制列表access control lists(ACL)和共享管理。由于它是基于 Linux 的,因此其具有广泛的硬件支持。 + +#### 防火墙/路由器软件 + +[pfSense][12] 是基于 FreeBSD 的开源企业级路由器和防火墙发行版。它可以直接安装在服务器上,甚至可以安装在虚拟机中(以管理虚拟或物理网络并节省空间)。它有许多功能,可以使用软件包进行扩展。尽管它也有命令行访问权限,但也可以完全使用网页界面对其进行管理。它具有你所希望路由器和防火墙提供的所有功能,例如 DHCP 和 DNS,以及更高级的功能,例如入侵检测(IDS)和入侵防御(IPS)系统。你可以侦听多个不同接口或使用 VLAN 的网络,并且只需鼠标点击几下即可创建安全的 VPN 服务器。pfSense 使用 pf,这是一种有状态的数据包筛选器,它是为 OpenBSD 操作系统开发的,使用类似 IPFilter 的语法。许多公司和组织都有使用 pfSense。 + +* * * + +考虑到所有的信息,是时候动手开始建立你的实验室了。在之后的文章中,我将介绍运行家庭实验室的第三方面:自动化进行部署和维护。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/19/3/home-lab + +作者:[Michael Zamot (Red Hat)][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mzamot +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_keyboard_laptop_development_code_woman.png?itok=vbYz6jjb +[2]: https://opensource.com/article/18/5/how-insecure-your-router +[3]: /file/427426 +[4]: https://opensource.com/sites/default/files/uploads/pfsense2.png (Home computer lab PfSense) +[5]: https://www.linux-kvm.org/page/Main_Page +[6]: https://libvirt.org/ +[7]: https://virt-manager.org/ +[8]: https://www.proxmox.com/en/proxmox-ve +[9]: https://ovirt.org/ +[10]: https://freenas.org/ +[11]: https://www.openmediavault.org/ +[12]: https://www.pfsense.org/ diff --git a/published/202104/20200106 Open Source Supply Chain- A Matter of Trust.md b/published/202104/20200106 Open Source Supply Chain- A Matter of Trust.md new file mode 100644 index 0000000000..60aa20fb4c --- /dev/null +++ b/published/202104/20200106 Open Source Supply Chain- A Matter of Trust.md @@ -0,0 +1,69 @@ +[#]: collector: (lujun9972) +[#]: translator: (Kevin3599) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13321-1.html) +[#]: subject: (Open Source Supply Chain: A Matter of Trust) +[#]: via: (https://www.linux.com/articles/open-source-supply-chain-a-matter-of-trust/) +[#]: author: (Swapnil Bhartiya https://www.linux.com/author/swapnil/) + +开源供应链:一个有关信任的问题 +====== + +[![][1]][2] + +共同作者:Curtis Franklin, Jr + +开源软件通常被认为比专有软件更安全、更有保障,因为如果用户愿意,他们可以从源代码编译软件。他们知道在他们环境中运行的代码的来源。在他们的环境中运行的代码每个部分都可以被审查,也可以追溯每段代码的开发者。 + +然而,用户和提供者们正在逐渐远离完全控制软件所带来的复杂性,而在转而追求软件的便捷和易用。 + +VMware 副总裁兼首席开源官 Dirk Hohndel 说:“当我看到在一个有关网络安全和隐私的讲座中,演讲者运行 `docker run` 命令来安装和运行一些从互联网上下载的随机二进制文件时,我经常会大吃一惊。这两件事似乎有点相左。” + +软件供应链,即将应用程序从编码、打包、分发到最终用户的过程是相当复杂的。如果其中有一环出现错误,可能会导致软件存在潜在的风险,特别是对于开源软件。一个恶意行为者可以访问后端,并在用户不知情或不受控的情况下向其插入任何可能的恶意代码。 + +这样的问题不单单存在于云原生领域,在现代应用开发中很常见,这包括 JavaScript、NPM、PyPI、RubyGems 等等。甚至连 Mac 上的 Homebrew 过去也是通过源代码提供,由用户自己编译。 + +“如今,你只需要下载二进制文件并安装它,并期望其源代码并没有被恶意修改过。”Hohndel 说,“作为一个行业,我们需要更加关注我们的开源代码供应。这对我来说是非常重要的事,我正努力让更多的人意识到其重要性。” + +然而,这不仅仅是一个二进制与源代码的关系。只运行一个二进制文件,而不必从源代码构建所有东西有着巨大的优势。当软件开发需求发生转变时候,这种运行方式允许开发人员在过程中更加灵活和响应更快。通过重用一些二进制文件,他们可以在新的开发和部署中快速地循环。 + +Hohndel 说:“如果有办法向这些软件添加签名,并建立一个‘即时’验证机制,让用户知道他们可以信任此软件,那就更好了。” + +Linux 发行版解决了这个问题,因为发行版充当了看门人的角色,负责检查进入受支持的软件存储库的软件包的完整性。 + +“像通过 Debian 等发行版提供的软件包都使用了密钥签名。要确保它确实是发行版中应包含的软件,需要进行大量工作。开发者们通过这种方式解决了开源供应链问题。”Hohndel 说。 + +但是,即使在 Linux 发行版上,人们也希望简化事情,并以正确性和安全性换取速度。现在,诸如 AppImage、Snap 和 Flatpack 之类的项目已经采用了二进制方式,从而将开源供应链信任问题带入了 Linux 发行版。这和 Docker 容器的问题如出一辙。 + +“理想的解决方案是为开源社区找到一种设计信任系统的方法,该系统可以确保如果二进制文件是用受信任网络中的密钥签名的,那么它就可以被信任,并允许我们可靠地返回源头并进行审核,” Hohndel 建议。 + +但是,所有这些额外的步骤都会产生成本,大多数项目开发者要么不愿意,或无力承担。一些项目正在尝试寻找解决该问题的方法。例如,NPM 已开始鼓励提交软件包的用户正确认证和保护其账户安全,以提高平台的可信度。 + +### 开源社区善于解决问题 + +Hohndel 致力于解决开源供应链问题,并正试图让更多开发者意识到其重要性。去年,VMware 收购了 Bitnami,这为管理由 VMware 所签名的开源软件提供了一个良机。 + +“我们正在与各种上游开源社区进行交流,以提高对此的认识。我们还在讨论技术解决方案,这些方案将使这些社区更容易解决潜在的开源供应链问题。” Hohndel 说。 + +开源社区历来致力于确保软件质量,这其中也包括安全性和隐私性。不过,Hohndel 说:“我最担心的是,在对下一个新事物感到兴奋时,我们经常忽略了需要的基础工程原则。” + +最终,Hohndel 认为答案将来自开源社区本身。 “开源是一种工程方法论,是一种社会实验。开源就是人们之间相互信任、相互合作、跨国界和公司之间以及竞争对手之间的合作,以我们以前从未有过的方式。”他解释说。 + +-------------------------------------------------------------------------------- + +via: https://www.linux.com/articles/open-source-supply-chain-a-matter-of-trust/ + +作者:[Swapnil Bhartiya][a] +选题:[lujun9972][b] +译者:[Kevin3599](https://github.com/kevin3599) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linux.com/author/swapnil/ +[b]: https://github.com/lujun9972 +[1]: https://www.linux.com/wp-content/uploads/2020/01/hand-1137978_1920-1068x801.jpg (hand-1137978_1920) +[2]: https://www.linux.com/wp-content/uploads/2020/01/hand-1137978_1920.jpg +[3]: https://www.swapnilbhartiya.com/open-source-leaders-dirk-hohndel-brings-open-source-to-vmware/ +[4]: https://techcrunch.com/2019/05/15/vmware-acquires-bitnami-to-deliver-packaged-applications-anywhere/ diff --git a/published/202104/20200423 4 open source chat applications you should use right now.md b/published/202104/20200423 4 open source chat applications you should use right now.md new file mode 100644 index 0000000000..5c445b9586 --- /dev/null +++ b/published/202104/20200423 4 open source chat applications you should use right now.md @@ -0,0 +1,138 @@ +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13271-1.html) +[#]: subject: (4 open source chat applications you should use right now) +[#]: via: (https://opensource.com/article/20/4/open-source-chat) +[#]: author: (Sudeshna Sur https://opensource.com/users/sudeshna-sur) + +值得现在就去尝试的四款开源聊天应用软件 +====== + +> 现在,远程协作已作为一项必不可少的能力,让开源实时聊天成为你工具箱中必不可少的一部分吧。 + +![](https://img.linux.net.cn/data/attachment/album/202104/06/103454xundd858446u08r0.jpg) + +清晨起床后,我们通常要做的第一件事是检查手机,看看是否有同事和朋友发来的重要信息。无论这是否是一个好习惯,但这种行为早已成为我们日常生活的一部分。 + +> 人是理性动物。他可以为任何他想相信的事情想出一个理由。 +> – 阿纳托尔·法朗士 + +无论理由是否合理,我们每天都在使用的一系列的通讯工具,例如电子邮件、电话、网络会议工具或社交网络。甚至在 COVID-19 之前,居家办公就已经使这些通信工具成为我们生活中的重要部分。随着疫情出现,居家办公成为新常态,我们交流方式的方方面面正面临着前所未有的改变,这让这些工具变得不可或缺。 + +### 为什么需要聊天? + +作为全球团队的一部分进行远程工作时,我们必须要有一个相互协作的环境。聊天应用软件在帮助我们保持相互联系中起着至关重要的作用。与电子邮件相比,聊天应用软件可提供与全球各地的同事快速、实时的通信。 + +选择一款聊天应用软件需要考虑很多因素。为了帮助你选择最适合你的应用软件,在本文中,我将探讨四款开源聊天应用软件,和一个当你需要与同事“面对面”时的开源视频通信工具,然后概述在高效的通讯应用软件中,你应当考虑的一些功能。 + +### 四款开源聊天软件 + +#### Rocket.Chat + +![Rocket.Chat][2] + +[Rocket.Chat][3] 是一个综合性的通讯平台,其将频道分为公开房间(任何人都可以加入)和私有房间(仅受邀请)。你还可以直接将消息发送给已登录的人员。其能共享文档、链接、照片、视频和动态图GIF,以及进行视频通话,并可以在平台中发送语音信息。 + +Rocket.Chat 是自由开源软件,但是其独特之处在于其可自托管的聊天系统。你可以将其下载到你的服务器上,无论它是本地服务器或是在公有云上的虚拟专用服务器。 + +Rocket.Chat 是完全免费,其 [源码][4] 可在 Github 获得。许多开源项目都使用 Rocket.Chat 作为他们官方交流平台。该软件在持续不断的发展且不断更新和改进新功能。 + +我最喜欢 Rocket.Chat 的地方是其能够根据用户需求来进行自定义操作,并且它使用机器学习在用户通讯间进行自动的、实时消息翻译。你也可以下载适用于你移动设备的 Rocket.Chat,以便能随时随地使用。 + +#### IRC + +![IRC on WeeChat 0.3.5][5] + +IRC([互联网中继聊天][6]Internet Relay Chat)是一款实时、基于文本格式的通信软件。尽管其是最古老的电子通讯形式之一,但在许多知名的软件项目中仍受欢迎。 + +IRC 频道是单独的聊天室。它可以让你在一个开放的频道中与多人进行聊天或与某人私下一对一聊天。如果频道名称以 `#` 开头,则可以假定它是官方的聊天室,而以 `##` 开头的聊天室通常是非官方的聊天室。 + +[上手 IRC][7] 很容易。你的 IRC 昵称可以让人们找到你,因此它必须是唯一的。但是,你可以完全自主地选择 IRC 客户端。如果你需要比标准 IRC 客户端更多功能的应用程序,则可以使用 [Riot.im][8] 连接到 IRC。 + +考虑到它悠久的历史,你为什么还要继续使用 IRC?出于一个原因是,其仍是我们所依赖的许多自由及开源项目的家园。如果你想参于开源软件开发和社区,可以选择用 IRC。 + +#### Zulip + +![Zulip][9] + +[Zulip][10] 是十分流行的群聊应用程序,它遵循基于话题线索的模式。在 Zulip 中,你可以订阅stream,就像在 IRC 频道或 Rocket.Chat 中一样。但是,每个 Zulip 流都会拥有一个唯一的话题topic,该话题可帮助你以后查找对话,因此其更有条理。 + +与其他平台一样,它支持表情符号、内嵌图片、视频和推特预览。它还支持 LaTeX 来分享数学公式或方程式、支持 Markdown 和语法高亮来分享代码。 + +Zulip 是跨平台的,并提供 API 用于编写你自己的程序。我特别喜欢 Zulip 的一点是它与 GitHub 的集成整合功能:如果我正在处理某个议题issue,则可以使用 Zulip 的标记回链某个拉取请求pull request ID。 + +Zulip 是开源的(你可以在 GitHub 上访问其 [源码][11])并且免费使用,但它有提供预置支持、[LDAP][12] 集成和更多存储类型的付费产品。 + +#### Let's Chat + +![Let's Chat][13] + +[Let's Chat][14] 是一个面向小型团队的自托管的聊天解决方案。它使用 Node.js 和 MongoDB 编写运行,只需鼠标点击几下即可将其部署到本地服务器或云服务器。它是自由开源软件,可以在 GitHub 上查看其 [源码][15]。 + +Let's Chat 与其他开源聊天工具的不同之处在于其企业功能:它支持 LDAP 和 [Kerberos][16] 身份验证。它还具有新用户想要的所有功能:你可以在历史记录中搜索过往消息,并使用 @username 之类的标签来标记人员。 + +我喜欢 Let's Chat 的地方是它拥有私人的受密码保护的聊天室、发送图片、支持 GIPHY 和代码粘贴。它不断更新,不断增加新功能。 + +### 附加:开源视频聊天软件 Jitsi + +![Jitsi][17] + +有时,文字聊天还不够,你还可能需要与某人面谈。在这种情况下,如果不能选择面对面开会交流,那么视频聊天是最好的选择。[Jitsi][18] 是一个完全开源的、支持多平台且兼容 WebRTC 的视频会议工具。 + +Jitsi 从 Jitsi Desktop 开始,已经发展成为许多 [项目][19],包括 Jitsi Meet、Jitsi Videobridge、jibri 和 libjitsi,并且每个项目都在 GitHub 上开放了 [源码][20]。 + +Jitsi 是安全且可扩展的,并支持诸如联播simulcast带宽预估bandwidth estimation之类的高级视频路由的概念,还包括音频、录制、屏幕共享和拨入功能等经典功能。你可以来为你的视频聊天室设置密码以保护其不受干扰,并且它还支持通过 YouTube 进行直播。你还可以搭建自己的 Jitsi 服务器,并将其托管在本地或虚拟专用服务器virtual private server(例如 Digital Ocean Droplet)上。 + +我最喜欢 Jitsi 的是它是免费且低门槛的。任何人都可以通过访问 [meet.jit.si][21] 来立即召开会议,并且用户无需注册或安装即可轻松参加会议。(但是,注册的话能拥有日程安排功能。)这种入门级低门槛的视频会议服务让 Jitsi 迅速普及。 + +### 选择一个聊天应用软件的建议 + +各种各样的开源聊天应用软件可能让你很难抉择。以下是一些选择一款聊天应用软件的一般准则。 + + * 最好具有交互式的界面和简单的导航工具。 + * 最好寻找一种功能强大且能让人们以各种方式使用它的工具。 + * 如果与你所使用的工具有进行集成整合的话,可以重点考虑。一些工具与 GitHub 或 GitLab 以及某些应用程序具有良好的无缝衔接,这将是一个非常有用的功能。 + * 有能托管到云主机的工具将十分方便。 + * 应考虑到聊天服务的安全性。在私人服务器上托管服务的能力对许多组织和个人来说是必要的。 + * 最好选择那些具有丰富的隐私设置,并拥有私人聊天室和公共聊天室的通讯工具。 + +由于人们比以往任何时候都更加依赖在线服务,因此拥有备用的通讯平台是明智之举。例如,如果一个项目正在使用 Rocket.Chat,则必要之时,它还应具有跳转到 IRC 的能力。由于这些软件在不断更新,你可能会发现自己已经连接到多个渠道,因此集成整合其他应用将变得非常有价值。 + +在各种可用的开源聊天服务中,你喜欢和使用哪些?这些工具又是如何帮助你进行远程办公?请在评论中分享你的想法。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/4/open-source-chat + +作者:[Sudeshna Sur][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/sudeshna-sur +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_communication_team.png?itok=CYfZ_gE7 (Chat bubbles) +[2]: https://opensource.com/sites/default/files/uploads/rocketchat.png (Rocket.Chat) +[3]: https://rocket.chat/ +[4]: https://github.com/RocketChat/Rocket.Chat +[5]: https://opensource.com/sites/default/files/uploads/irc.png (IRC on WeeChat 0.3.5) +[6]: https://en.wikipedia.org/wiki/Internet_Relay_Chat +[7]: https://opensource.com/article/16/6/getting-started-irc +[8]: https://opensource.com/article/17/5/introducing-riot-IRC +[9]: https://opensource.com/sites/default/files/uploads/zulip.png (Zulip) +[10]: https://zulipchat.com/ +[11]: https://github.com/zulip/zulip +[12]: https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol +[13]: https://opensource.com/sites/default/files/uploads/lets-chat.png (Let's Chat) +[14]: https://sdelements.github.io/lets-chat/ +[15]: https://github.com/sdelements/lets-chat +[16]: https://en.wikipedia.org/wiki/Kerberos_(protocol) +[17]: https://opensource.com/sites/default/files/uploads/jitsi_0_0.jpg (Jitsi) +[18]: https://jitsi.org/ +[19]: https://jitsi.org/projects/ +[20]: https://github.com/jitsi +[21]: http://meet.jit.si diff --git a/published/202104/20200617 How to handle dynamic and static libraries in Linux.md b/published/202104/20200617 How to handle dynamic and static libraries in Linux.md new file mode 100644 index 0000000000..d74b9a4b50 --- /dev/null +++ b/published/202104/20200617 How to handle dynamic and static libraries in Linux.md @@ -0,0 +1,271 @@ +[#]: collector: (lujun9972) +[#]: translator: (tt67wq) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13318-1.html) +[#]: subject: (How to handle dynamic and static libraries in Linux) +[#]: via: (https://opensource.com/article/20/6/linux-libraries) +[#]: author: (Stephan Avenwedde https://opensource.com/users/hansic99) + +怎样在 Linux 中使用动态和静态库 +====== + +> 了解 Linux 如何使用库,包括静态库和动态库的差别,有助于你解决依赖问题。 + +![](https://img.linux.net.cn/data/attachment/album/202104/21/184822euzoqsiwxxpiqqrr.jpg) + +Linux 从某种意义上来说就是一堆相互依赖的静态和动态库。对于 Linux 系统新手来说,库的整个处理过程简直是个迷。但对有经验的人来说,被构建进操作系统的大量共享代码对于编写新应用来说却是个优点。 + +为了让你熟悉这个话题,我准备了一个小巧的 [应用例子][2] 来展示在普通的 Linux 发行版(在其他操作系统上未验证)上是经常是如何处理库的。为了用这个例子来跟上这个需要动手的教程,请打开命令行输入: + +``` +$ git clone https://github.com/hANSIc99/library_sample +$ cd library_sample/ +$ make +cc -c main.c -Wall -Werror +cc -c libmy_static_a.c -o libmy_static_a.o -Wall -Werror +cc -c libmy_static_b.c -o libmy_static_b.o -Wall -Werror +ar -rsv libmy_static.a libmy_static_a.o libmy_static_b.o +ar: creating libmy_static.a +a - libmy_static_a.o +a - libmy_static_b.o +cc -c -fPIC libmy_shared.c -o libmy_shared.o +cc -shared -o libmy_shared.so libmy_shared.o +$ make clean +rm *.o +``` + +当执行完这些命令,这些文件应当被添加进目录下(执行 `ls` 来查看): + +``` +my_app +libmy_static.a +libmy_shared.so +``` + +### 关于静态链接 + +当你的应用链接了一个静态库,这个库的代码就变成了可执行文件的一部分。这个动作只在链接过程中执行一次,这些静态库通常以 `.a` 扩展符结尾。 + +静态库是多个目标object文件的归档archive([ar][3])。这些目标文件通常是 ELF 格式的。ELF 是 [可执行可链接格式][4]Executable and Linkable Format 的简写,它与多个操作系统兼容。 + +`file` 命令的输出可以告诉你静态库 `libmy_static.a` 是 `ar` 格式的归档文件类型。 + +``` +$ file libmy_static.a +libmy_static.a: current ar archive +``` + +使用 `ar -t`,你可以看到归档文件的内部。它展示了两个目标文件: + +``` +$ ar -t libmy_static.a +libmy_static_a.o +libmy_static_b.o +``` + +你可以用 `ax -x ` 命令来提取归档文件的文件。被提出的都是 ELF 格式的目标文件: + +``` +$ ar -x libmy_static.a +$ file libmy_static_a.o +libmy_static_a.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped +``` + +### 关于动态链接 + +动态链接指的是使用共享库。共享库通常以 `.so` 的扩展名结尾(“共享对象shared object” 的简写)。 + +共享库是 Linux 系统中依赖管理的最常用方法。这些共享库在应用启动前被载入内存,当多个应用都需要同一个库时,这个库在系统中只会被加载一次。这个特性减少了应用的内存占用。 + +另外一个值得注意的地方是,当一个共享库的 bug 被修复后,所有引用了这个库的应用都会受益。但这也意味着,如果一个 bug 还没被发现,那所有相关的应用都会遭受这个 bug 影响(如果这个应用使用了受影响的部分)。 + +当一个应用需要某个特定版本的库,但是链接器linker只知道某个不兼容版本的位置,对于初学者来说这个问题非常棘手。在这个场景下,你必须帮助链接器找到正确版本的路径。 + +尽管这不是一个每天都会遇到的问题,但是理解动态链接的原理总是有助于你修复类似的问题。 + +幸运的是,动态链接的机制其实非常简洁明了。 + +为了检查一个应用在启动时需要哪些库,你可以使用 `ldd` 命令,它会打印出给定文件所需的动态库: + +``` +$ ldd my_app +        linux-vdso.so.1 (0x00007ffd1299c000) +        libmy_shared.so => not found +        libc.so.6 => /lib64/libc.so.6 (0x00007f56b869b000) +        /lib64/ld-linux-x86-64.so.2 (0x00007f56b8881000) +``` + +可以注意到 `libmy_shared.so` 库是代码仓库的一部分,但是没有被找到。这是因为负责在应用启动之前将所有依赖加载进内存的动态链接器没有在它搜索的标准路径下找到这个库。 + +对新手来说,与常用库(例如 `bizp2`)版本不兼容相关的问题往往十分令人困惑。一种方法是把该仓库的路径加入到环境变量 `LD_LIBRARY_PATH` 中来告诉链接器去哪里找到正确的版本。在本例中,正确的版本就在这个目录下,所以你可以导出它至环境变量: + +``` +$ LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH +$ export LD_LIBRARY_PATH +``` + +现在动态链接器知道去哪找库了,应用也可以执行了。你可以再次执行 `ldd` 去调用动态链接器,它会检查应用的依赖然后加载进内存。内存地址会在对象路径后展示: + +``` +$ ldd my_app +        linux-vdso.so.1 (0x00007ffd385f7000) +        libmy_shared.so => /home/stephan/library_sample/libmy_shared.so (0x00007f3fad401000) +        libc.so.6 => /lib64/libc.so.6 (0x00007f3fad21d000) +        /lib64/ld-linux-x86-64.so.2 (0x00007f3fad408000) +``` + +想知道哪个链接器被调用了,你可以用 `file` 命令: + +``` +$ file my_app +my_app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=26c677b771122b4c99f0fd9ee001e6c743550fa6, for GNU/Linux 3.2.0, not stripped +``` + +链接器 `/lib64/ld-linux-x86–64.so.2` 是一个指向 `ld-2.30.so` 的软链接,它也是我的 Linux 发行版的默认链接器: + +``` +$ file /lib64/ld-linux-x86-64.so.2 +/lib64/ld-linux-x86-64.so.2: symbolic link to ld-2.31.so +``` + +回头看看 `ldd` 命令的输出,你还可以看到(在 `libmy_shared.so` 边上)每个依赖都以一个数字结尾(例如 `/lib64/libc.so.6`)。共享对象的常见命名格式为: + +``` +libXYZ.so.. +``` + +在我的系统中,`libc.so.6` 也是指向同一目录下的共享对象 `libc-2.31.so` 的软链接。 + +``` +$ file /lib64/libc.so.6 +/lib64/libc.so.6: symbolic link to libc-2.31.so +``` + +如果你正在面对一个应用因为加载库的版本不对导致无法启动的问题,有很大可能你可以通过检查整理这些软链接或者确定正确的搜索路径(查看下方“动态加载器:ld.so”一节)来解决这个问题。 + +更为详细的信息请查看 [ldd 手册页][5]。 + +#### 动态加载 + +动态加载的意思是一个库(例如一个 `.so` 文件)在程序的运行时被加载。这是使用某种特定的编程方法实现的。 + +当一个应用使用可以在运行时改变的插件时,就会使用动态加载。 + +查看 [dlopen 手册页][6] 获取更多信息。 + +#### 动态加载器:ld.so + +在 Linux 系统中,你几乎总是正在跟共享库打交道,所以必须有个机制来检测一个应用的依赖并将其加载进内存中。 + +`ld.so` 按以下顺序在这些地方寻找共享对象: + + 1. 应用的绝对路径或相对路径下(用 GCC 编译器的 `-rpath` 选项硬编码的) + 2. 环境变量 `LD_LIBRARY_PATH` + 3. `/etc/ld.so.cache` 文件 + +需要记住的是,将一个库加到系统库归档 `/usr/lib64` 中需要管理员权限。你可以手动拷贝 `libmy_shared.so` 至库归档中来让应用可以运行,而避免设置 `LD_LIBRARY_PATH`。 + +``` +unset LD_LIBRARY_PATH +sudo cp libmy_shared.so /usr/lib64/ +``` + +当你运行 `ldd` 时,你现在可以看到归档库的路径被展示出来: + +``` +$ ldd my_app +        linux-vdso.so.1 (0x00007ffe82fab000) +        libmy_shared.so => /lib64/libmy_shared.so (0x00007f0a963e0000) +        libc.so.6 => /lib64/libc.so.6 (0x00007f0a96216000) +        /lib64/ld-linux-x86-64.so.2 (0x00007f0a96401000) +``` + +### 在编译时定制共享库 + +如果你想你的应用使用你的共享库,你可以在编译时指定一个绝对或相对路径。 + +编辑 `makefile`(第 10 行)然后通过 `make -B` 来重新编译程序。然后 `ldd` 输出显示 `libmy_shared.so` 和它的绝对路径一起被列出来了。 + +把这个: + +``` +CFLAGS =-Wall -Werror -Wl,-rpath,$(shell pwd) +``` + +改成这个(记得修改用户名): + +``` +CFLAGS =/home/stephan/library_sample/libmy_shared.so +``` + +然后重新编译: + +``` +$ make +``` + +确认下它正在使用你设定的绝对路径,你可以在输出的第二行看到: + +``` +$ ldd my_app +    linux-vdso.so.1 (0x00007ffe143ed000) +        libmy_shared.so => /lib64/libmy_shared.so (0x00007fe50926d000) +        /home/stephan/library_sample/libmy_shared.so (0x00007fe509268000) +        libc.so.6 => /lib64/libc.so.6 (0x00007fe50909e000) +        /lib64/ld-linux-x86-64.so.2 (0x00007fe50928e000) +``` + +这是个不错的例子,但是如果你在编写给其他人用的库,它是怎样工作的呢?新库的路径可以通过写入 `/etc/ld.so.conf` 或是在 `/etc/ld.so.conf.d/` 目录下创建一个包含路径的 `.conf` 文件来注册至系统。之后,你必须执行 `ldconfig` 命令来覆写 `ld.so.cache` 文件。这一步有时候在你装了携带特殊的共享库的程序来说是不可省略的。 + +查看 [ld.so 的手册页][7] 获取更多详细信息。 + +### 怎样处理多种架构 + +通常来说,32 位和 64 位版本的应用有不同的库。下面列表展示了不同 Linux 发行版库的标准路径: + +**红帽家族** + + * 32 位:`/usr/lib` + * 64 位:`/usr/lib64` + +**Debian 家族** + + * 32 位:`/usr/lib/i386-linux-gnu` + * 64 位:`/usr/lib/x86_64-linux-gnu` + +**Arch Linux 家族** + + * 32 位:`/usr/lib32` + * 64 位:`/usr/lib64` + +[FreeBSD][8](技术上来说不算 Linux 发行版) + + * 32 位:`/usr/lib32` + * 64 位:`/usr/lib` + +知道去哪找这些关键库可以让库链接失效的问题成为历史。 + +虽然刚开始会有点困惑,但是理解 Linux 库的依赖管理是一种对操作系统掌控感的表现。在其他应用程序中运行这些步骤,以熟悉常见的库,然后继续学习怎样解决任何你可能遇到的库的挑战。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/6/linux-libraries + +作者:[Stephan Avenwedde][a] +选题:[lujun9972][b] +译者:[tt67wq](https://github.com/tt67wq) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC (Hand putting a Linux file folder into a drawer) +[2]: https://github.com/hANSIc99/library_sample +[3]: https://en.wikipedia.org/wiki/Ar_%28Unix%29 +[4]: https://linuxhint.com/understanding_elf_file_format/ +[5]: https://www.man7.org/linux/man-pages/man1/ldd.1.html +[6]: https://www.man7.org/linux/man-pages/man3/dlopen.3.html +[7]: https://www.man7.org/linux/man-pages/man8/ld.so.8.html +[8]: https://opensource.com/article/20/5/furybsd-linux diff --git a/published/202104/20200707 Use systemd timers instead of cronjobs.md b/published/202104/20200707 Use systemd timers instead of cronjobs.md new file mode 100644 index 0000000000..81e4553369 --- /dev/null +++ b/published/202104/20200707 Use systemd timers instead of cronjobs.md @@ -0,0 +1,529 @@ +[#]: collector: (lujun9972) +[#]: translator: (tt67wq) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13307-1.html) +[#]: subject: (Use systemd timers instead of cronjobs) +[#]: via: (https://opensource.com/article/20/7/systemd-timers) +[#]: author: (David Both https://opensource.com/users/dboth) + +使用 systemd 定时器代替 cron 作业 +====== + +> 定时器提供了比 cron 作业更为细粒度的事件控制。 + +![](https://img.linux.net.cn/data/attachment/album/202104/18/104406dgszkj3eeibkea55.jpg) + +我正在致力于将我的 [cron][2] 作业迁移到 systemd 定时器上。我已经使用定时器多年了,但通常来说,我的学识只足以支撑我当前的工作。但在我研究 [systemd 系列][3] 的过程中,我发现 systemd 定时器有一些非常有意思的能力。 + +与 cron 作业类似,systemd 定时器可以在特定的时间间隔触发事件(shell 脚本和程序),例如每天一次或在一个月中的特定某一天(或许只有在周一生效),或在从上午 8 点到下午 6 点的工作时间内每隔 15 分钟一次。定时器也可以做到 cron 作业无法做到的一些事情。举个例子,定时器可以在特定事件发生后的一段时间后触发一段脚本或者程序去执行,例如开机、启动、上个任务完成,甚至于定时器调用的上个服务单元的完成的时刻。 + +### 操作系统维护的计时器 + +当在一个新系统上安装 Fedora 或者是任意一个基于 systemd 的发行版时,作为系统维护过程的一部分,它会在 Linux 宿主机的后台中创建多个定时器。这些定时器会触发事件来执行必要的日常维护任务,比如更新系统数据库、清理临时目录、轮换日志文件,以及更多其他事件。 + +作为示例,我会查看一些我的主要工作站上的定时器,通过执行 `systemctl status *timer` 命令来展示主机上的所有定时器。星号的作用与文件通配相同,所以这个命令会列出所有的 systemd 定时器单元。 + +``` +[root@testvm1 ~]# systemctl status *timer +● mlocate-updatedb.timer - Updates mlocate database every day + Loaded: loaded (/usr/lib/systemd/system/mlocate-updatedb.timer; enabled; vendor preset: enabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Fri 2020-06-05 00:00:00 EDT; 15h left + Triggers: ● mlocate-updatedb.service + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Updates mlocate database every day. + +● logrotate.timer - Daily rotation of log files + Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; vendor preset: enabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Fri 2020-06-05 00:00:00 EDT; 15h left + Triggers: ● logrotate.service + Docs: man:logrotate(8) + man:logrotate.conf(5) + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Daily rotation of log files. + +● sysstat-summary.timer - Generate summary of yesterday's process accounting + Loaded: loaded (/usr/lib/systemd/system/sysstat-summary.timer; enabled; vendor preset: enabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Fri 2020-06-05 00:07:00 EDT; 15h left + Triggers: ● sysstat-summary.service + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Generate summary of yesterday's process accounting. + +● fstrim.timer - Discard unused blocks once a week + Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: enabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Mon 2020-06-08 00:00:00 EDT; 3 days left + Triggers: ● fstrim.service + Docs: man:fstrim + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Discard unused blocks once a week. + +● sysstat-collect.timer - Run system activity accounting tool every 10 minutes + Loaded: loaded (/usr/lib/systemd/system/sysstat-collect.timer; enabled; vendor preset: enabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Thu 2020-06-04 08:50:00 EDT; 41s left + Triggers: ● sysstat-collect.service + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Run system activity accounting tool every 10 minutes. + +● dnf-makecache.timer - dnf makecache --timer + Loaded: loaded (/usr/lib/systemd/system/dnf-makecache.timer; enabled; vendor preset: enabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Thu 2020-06-04 08:51:00 EDT; 1min 41s left + Triggers: ● dnf-makecache.service + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started dnf makecache –timer. + +● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories + Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled) + Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago + Trigger: Fri 2020-06-05 08:19:00 EDT; 23h left + Triggers: ● systemd-tmpfiles-clean.service + Docs: man:tmpfiles.d(5) + man:systemd-tmpfiles(8) + +Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Daily Cleanup of Temporary Directories. +``` + +每个定时器至少有六行相关信息: + + * 定时器的第一行有定时器名字和定时器目的的简短介绍 + * 第二行展示了定时器的状态,是否已加载,定时器单元文件的完整路径以及预设信息。 + * 第三行指明了其活动状态,包括该定时器激活的日期和时间。 + * 第四行包括了该定时器下次被触发的日期和时间和距离触发的大概时间。 + * 第五行展示了被定时器触发的事件或服务名称。 + * 部分(不是全部)systemd 单元文件有相关文档的指引。我虚拟机上输出中有三个定时器有文档指引。这是一个很好(但非必要)的信息。 + * 最后一行是计时器最近触发的服务实例的日志条目。 + +你也许有一些不一样的定时器,取决于你的主机。 + +### 创建一个定时器 + +尽管我们可以解构一个或多个现有的计时器来了解其工作原理,但让我们创建我们自己的 [服务单元][4] 和一个定时器去触发它。为了保持简单,我们将使用一个相当简单的例子。当我们完成这个实验之后,就能更容易理解其他定时器的工作原理以及发现它们正在做什么。 + +首先,创建一个运行基础东西的简单的服务,例如 `free` 命令。举个例子,你可能想定时监控空余内存。在 `/etc/systemd/system` 目录下创建如下的 `myMonitor.server` 单元文件。它不需要是可执行文件: + +``` +# This service unit is for testing timer units +# By David Both +# Licensed under GPL V2 +# + +[Unit] +Description=Logs system statistics to the systemd journal +Wants=myMonitor.timer + +[Service] +Type=oneshot +ExecStart=/usr/bin/free + +[Install] +WantedBy=multi-user.target +``` + +这大概是你能创建的最简单的服务单元了。现在我们查看一下服务状态同时测试一下服务单元确保它和我们预期一样可用。 + + +``` +[root@testvm1 system]# systemctl status myMonitor.service +● myMonitor.service - Logs system statistics to the systemd journal + Loaded: loaded (/etc/systemd/system/myMonitor.service; disabled; vendor preset: disabled) + Active: inactive (dead) +[root@testvm1 system]# systemctl start myMonitor.service +[root@testvm1 system]# +``` + +输出在哪里呢?默认情况下,systemd 服务单元执行程序的标准输出(`STDOUT`)会被发送到系统日志中,它保留了记录供现在或者之后(直到某个时间点)查看。(在本系列的后续文章中,我将介绍系统日志的记录和保留策略)。专门查看你的服务单元的日志,而且只针对今天。`-S` 选项,即 `--since` 的缩写,允许你指定 `journalctl` 工具搜索条目的时间段。这并不代表你不关心过往结果 —— 在这个案例中,不会有过往记录 —— 如果你的机器以及运行了很长时间且堆积了大量的日志,它可以缩短搜索时间。 + +``` +[root@testvm1 system]# journalctl -S today -u myMonitor.service +-- Logs begin at Mon 2020-06-08 07:47:20 EDT, end at Thu 2020-06-11 09:40:47 EDT. -- +Jun 11 09:12:09 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal... +Jun 11 09:12:09 testvm1.both.org free[377966]: total used free shared buff/cache available +Jun 11 09:12:09 testvm1.both.org free[377966]: Mem: 12635740 522868 11032860 8016 1080012 11821508 +Jun 11 09:12:09 testvm1.both.org free[377966]: Swap: 8388604 0 8388604 +Jun 11 09:12:09 testvm1.both.org systemd[1]: myMonitor.service: Succeeded. +[root@testvm1 system]# +``` + +由服务触发的任务可以是单个程序、一组程序或者是一个脚本语言写的脚本。通过在 `myMonitor.service` 单元文件里的 `[Service]` 块末尾中添加如下行可以为服务添加另一个任务: + +``` +ExecStart=/usr/bin/lsblk +``` + +再次启动服务,查看日志检查结果,结果应该看上去像这样。你应该在日志中看到两条命令的结果输出: + +``` +Jun 11 15:42:18 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal... +Jun 11 15:42:18 testvm1.both.org free[379961]: total used free shared buff/cache available +Jun 11 15:42:18 testvm1.both.org free[379961]: Mem: 12635740 531788 11019540 8024 1084412 11812272 +Jun 11 15:42:18 testvm1.both.org free[379961]: Swap: 8388604 0 8388604 +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: sda 8:0 0 120G 0 disk +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─sda1 8:1 0 4G 0 part /boot +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: └─sda2 8:2 0 116G 0 part +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─VG01-root 253:0 0 5G 0 lvm / +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─VG01-swap 253:1 0 8G 0 lvm [SWAP] +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─VG01-usr 253:2 0 30G 0 lvm /usr +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─VG01-tmp 253:3 0 10G 0 lvm /tmp +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─VG01-var 253:4 0 20G 0 lvm /var +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: └─VG01-home 253:5 0 10G 0 lvm /home +Jun 11 15:42:18 testvm1.both.org lsblk[379962]: sr0 11:0 1 1024M 0 rom +Jun 11 15:42:18 testvm1.both.org systemd[1]: myMonitor.service: Succeeded. +Jun 11 15:42:18 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal. +``` + +现在你知道了你的服务可以按预期工作了,在 `/etc/systemd/system` 目录下创建 `myMonitor.timer` 定时器单元文件,添加如下代码: + +``` +# This timer unit is for testing +# By David Both +# Licensed under GPL V2 +# + +[Unit] +Description=Logs some system statistics to the systemd journal +Requires=myMonitor.service + +[Timer] +Unit=myMonitor.service +OnCalendar=*-*-* *:*:00 + +[Install] +WantedBy=timers.target +``` + +在 `myMonitor.timer` 文件中的 `OnCalendar` 时间格式,`*-*-* *:*:00`,应该会每分钟触发一次定时器去执行 `myMonitor.service` 单元。我会在文章的后面进一步探索 `OnCalendar` 设置。 + +到目前为止,在服务被计时器触发运行时观察与之有关的日志记录。你也可以跟踪计时器,跟踪服务可以让你接近实时的看到结果。执行 `journalctl` 时带上 `-f` 选项: + +``` +[root@testvm1 system]# journalctl -S today -f -u myMonitor.service +-- Logs begin at Mon 2020-06-08 07:47:20 EDT. -- +``` + +执行但是不启用该定时器,看看它运行一段时间后发生了什么: + +``` +[root@testvm1 ~]# systemctl start myMonitor.service +[root@testvm1 ~]# +``` + +一条结果立即就显示出来了,下一条大概在一分钟后出来。观察几分钟日志,看看你有没有跟我发现同样的事情: + +``` +[root@testvm1 system]# journalctl -S today -f -u myMonitor.service +-- Logs begin at Mon 2020-06-08 07:47:20 EDT. -- +Jun 13 08:39:18 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal... +Jun 13 08:39:18 testvm1.both.org systemd[1]: myMonitor.service: Succeeded. +Jun 13 08:39:19 testvm1.both.org free[630566]: total used free shared buff/cache available +Jun 13 08:39:19 testvm1.both.org free[630566]: Mem: 12635740 556604 10965516 8036 1113620 11785628 +Jun 13 08:39:19 testvm1.both.org free[630566]: Swap: 8388604 0 8388604 +Jun 13 08:39:18 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal. +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: sda 8:0 0 120G 0 disk +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─sda1 8:1 0 4G 0 part /boot +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: └─sda2 8:2 0 116G 0 part +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─VG01-root 253:0 0 5G 0 lvm / +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─VG01-swap 253:1 0 8G 0 lvm [SWAP] +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─VG01-usr 253:2 0 30G 0 lvm /usr +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─VG01-tmp 253:3 0 10G 0 lvm /tmp +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─VG01-var 253:4 0 20G 0 lvm /var +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: └─VG01-home 253:5 0 10G 0 lvm /home +Jun 13 08:39:19 testvm1.both.org lsblk[630567]: sr0 11:0 1 1024M 0 rom +Jun 13 08:40:46 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal... +Jun 13 08:40:46 testvm1.both.org free[630572]: total used free shared buff/cache available +Jun 13 08:40:46 testvm1.both.org free[630572]: Mem: 12635740 555228 10966836 8036 1113676 11786996 +Jun 13 08:40:46 testvm1.both.org free[630572]: Swap: 8388604 0 8388604 +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: sda 8:0 0 120G 0 disk +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─sda1 8:1 0 4G 0 part /boot +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: └─sda2 8:2 0 116G 0 part +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─VG01-root 253:0 0 5G 0 lvm / +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─VG01-swap 253:1 0 8G 0 lvm [SWAP] +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─VG01-usr 253:2 0 30G 0 lvm /usr +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─VG01-tmp 253:3 0 10G 0 lvm /tmp +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─VG01-var 253:4 0 20G 0 lvm /var +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: └─VG01-home 253:5 0 10G 0 lvm /home +Jun 13 08:40:46 testvm1.both.org lsblk[630574]: sr0 11:0 1 1024M 0 rom +Jun 13 08:40:46 testvm1.both.org systemd[1]: myMonitor.service: Succeeded. +Jun 13 08:40:46 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal. +Jun 13 08:41:46 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal... +Jun 13 08:41:46 testvm1.both.org free[630580]: total used free shared buff/cache available +Jun 13 08:41:46 testvm1.both.org free[630580]: Mem: 12635740 553488 10968564 8036 1113688 11788744 +Jun 13 08:41:46 testvm1.both.org free[630580]: Swap: 8388604 0 8388604 +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: sda 8:0 0 120G 0 disk +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─sda1 8:1 0 4G 0 part /boot +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: └─sda2 8:2 0 116G 0 part +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─VG01-root 253:0 0 5G 0 lvm / +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─VG01-swap 253:1 0 8G 0 lvm [SWAP] +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─VG01-usr 253:2 0 30G 0 lvm /usr +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─VG01-tmp 253:3 0 10G 0 lvm /tmp +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─VG01-var 253:4 0 20G 0 lvm /var +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: └─VG01-home 253:5 0 10G 0 lvm /home +Jun 13 08:41:47 testvm1.both.org lsblk[630581]: sr0 11:0 1 1024M 0 rom +Jun 13 08:41:47 testvm1.both.org systemd[1]: myMonitor.service: Succeeded. +Jun 13 08:41:47 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal. +``` + +别忘了检查下计时器和服务的状态。 + +你在日志里大概至少注意到两件事。第一,你不需要特地做什么来让 `myMonitor.service` 单元中 `ExecStart` 触发器产生的 `STDOUT` 存储到日志里。这都是用 systemd 来运行服务的一部分功能。然而,它确实意味着你需要小心对待服务单元里面执行的脚本和它们能产生多少 `STDOUT`。 + +第二,定时器并不是精确在每分钟的 :00 秒执行的,甚至每次执行的时间间隔都不是刚好一分钟。这是特意的设计,但是有必要的话可以改变这种行为(如果只是它挑战了你的系统管理员的敏感神经)。 + +这样设计的初衷是为了防止多个服务在完全相同的时刻被触发。举个例子,你可以用例如 Weekly,Daily 等时间格式。这些快捷写法都被定义为在某一天的 00:00:00 执行。当多个定时器都这样定义的话,有很大可能它们会同时执行。 + +systemd 定时器被故意设计成在规定时间附近随机波动的时间点触发,以避免同一时间触发。它们在一个时间窗口内半随机触发,时间窗口开始于预设的触发时间,结束于预设时间后一分钟。根据 `systemd.timer` 的手册页,这个触发时间相对于其他已经定义的定时器单元保持在稳定的位置。你可以在日志条目中看到,定时器在启动后立即触发,然后在每分钟后的 46 或 47 秒触发。 + +大部分情况下,这种概率抖动的定时器是没事的。当调度类似执行备份的任务,只需要它们在下班时间运行,这样是没问题的。系统管理员可以选择确定的开始时间来确保不和其他任务冲突,例如 01:05:00 这样典型的 cron 作业时间,但是有很大范围的时间值可以满足这一点。在开始时间上的一个分钟级别的随机往往是无关紧要的。 + +然而,对某些任务来说,精确的触发时间是个硬性要求。对于这类任务,你可以向单元文件的 `Timer` 块中添加如下声明来指定更高的触发时间跨度精确度(精确到微秒以内): + +``` +AccuracySec=1us +``` + +时间跨度可用于指定所需的精度,以及定义重复事件或一次性事件的时间跨度。它能识别以下单位: + + * `usec`、`us`、`µs` + * `msec`、`ms` + * `seconds`、`second`、`sec`、`s` + * `minutes`、`minute`、`min`、`m` + * `hours`、`hour`、`hr`、`h` + * `days`、`day`、`d` + * `weeks`、`week`、`w` + * `months`、`month`、`M`(定义为 30.44 天) + * `years`、`year`、`y`(定义为 365.25 天) + +所有 `/usr/lib/systemd/system` 中的定时器都指定了一个更宽松的时间精度,因为精准时间没那么重要。看看这些系统创建的定时器的时间格式: + +``` +[root@testvm1 system]# grep Accur /usr/lib/systemd/system/*timer +/usr/lib/systemd/system/fstrim.timer:AccuracySec=1h +/usr/lib/systemd/system/logrotate.timer:AccuracySec=1h +/usr/lib/systemd/system/logwatch.timer:AccuracySec=12h +/usr/lib/systemd/system/mlocate-updatedb.timer:AccuracySec=24h +/usr/lib/systemd/system/raid-check.timer:AccuracySec=24h +/usr/lib/systemd/system/unbound-anchor.timer:AccuracySec=24h +[root@testvm1 system]# +``` + +看下 `/usr/lib/systemd/system` 目录下部分定时器单元文件的完整内容,看看它们是如何构建的。 + +在本实验中不必让这个定时器在启动时激活,但下面这个命令可以设置开机自启: + +``` +[root@testvm1 system]# systemctl enable myMonitor.timer +``` + +你创建的单元文件不需要是可执行的。你同样不需要启用服务,因为它是被定时器触发的。如果你需要的话,你仍然可以在命令行里手动触发该服务单元。尝试一下,然后观察日志。 + +关于定时器精度、事件时间规格和触发事件的详细信息,请参见 systemd.timer 和 systemd.time 的手册页。 + +### 定时器类型 + +systemd 定时器还有一些在 cron 中找不到的功能,cron 只在确定的、重复的、具体的日期和时间触发。systemd 定时器可以被配置成根据其他 systemd 单元状态发生改变时触发。举个例子,定时器可以配置成在系统开机、启动后,或是某个确定的服务单元激活之后的一段时间被触发。这些被称为单调计时器。“单调”指的是一个持续增长的计数器或序列。这些定时器不是持久的,因为它们在每次启动后都会重置。 + +表格 1 列出了一些单调定时器以及每个定时器的简短定义,同时有 `OnCalendar` 定时器,这些不是单调的,它们被用于指定未来有可能重复的某个确定时间。这个信息来自于 `systemd.timer` 的手册页,有一些不重要的修改。 + +定时器 | 单调性 | 定义 +---|---|--- +`OnActiveSec=` | X | 定义了一个与定时器被激活的那一刻相关的定时器。 +`OnBootSec=` | X | 定义了一个与机器启动时间相关的计时器。 +`OnStartupSec=` | X | 定义了一个与服务管理器首次启动相关的计时器。对于系统定时器来说,这个定时器与 `OnBootSec=` 类似,因为系统服务管理器在机器启动后很短的时间后就会启动。当以在每个用户服务管理器中运行的单元进行配置时,它尤其有用,因为用户的服务管理器通常在首次登录后启动,而不是机器启动后。 +`OnUnitActiveSec=` | X | 定义了一个与将要激活的定时器上次激活时间相关的定时器。 +`OnUnitInactiveSec=` | X | 定义了一个与将要激活的定时器上次停用时间相关的定时器。 +`OnCalendar=` | | 定义了一个有日期事件表达式语法的实时(即时钟)定时器。查看 `systemd.time(7)` 的手册页获取更多与日历事件表达式相关的语法信息。除此以外,它的语义和 `OnActiveSec=` 类似。 + +_Table 1: systemd 定时器定义_ + +单调计时器可使用同样的简写名作为它们的时间跨度,即我们之前提到的 `AccuracySec` 表达式,但是 systemd 将这些名字统一转换成了秒。举个例子,比如你想规定某个定时器在系统启动后五天触发一次事件;它可能看起来像 `OnBootSec=5d`。如果机器启动于 `2020-06-15 09:45:27`,这个定时器会在 `2020-06-20 09:45:27` 或在这之后的一分钟内触发。 + +### 日历事件格式 + +日历事件格式是定时器在所需的重复时间触发的关键。我们开始看下一些 `OnCalendar` 设置一起使用的格式。 + +与 crontab 中的格式相比,systemd 及其计时器使用的时间和日历格式风格不同。它比 crontab 更为灵活,而且可以使用类似 `at` 命令的方式允许模糊的日期和时间。它还应该足够熟悉使其易于理解。 + +systemd 定时器使用 `OnCalendar=` 的基础格式是 `DOW YYYY-MM-DD HH:MM:SS`。DOW(星期几)是选填的,其他字段可以用一个星号(`*`)来匹配此位置的任意值。所有的日历时间格式会被转换成标准格式。如果时间没有指定,它会被设置为 `00:00:00`。如果日期没有指定但是时间指定了,那么下次匹配的时间可能是今天或者明天,取决于当前的时间。月份和星期可以使用名称或数字。每个单元都可以使用逗号分隔的列表。单元范围可以在开始值和结束值之间用 `..` 指定。 + +指定日期有一些有趣的选项,波浪号(`~`)可以指定月份的最后一天或者最后一天之前的某几天。`/` 可以用来指定星期几作为修饰符。 + +这里有几个在 `OnCalendar` 表达式中使用的典型时间格式例子。 + +日期事件格式 | 描述 +---|--- +`DOW YYYY-MM-DD HH:MM:SS` | +`*-*-* 00:15:30` | 每年每月每天的 0 点 15 分 30 秒 +`Weekly` | 每个周一的 00:00:00 +`Mon *-*-* 00:00:00` | 同上 +`Mon` | 同上 +`Wed 2020-*-*` | 2020 年每个周三的 00:00:00 +`Mon..Fri 2021-*-*` | 2021 年的每个工作日(周一到周五)的 00:00:00 +`2022-6,7,8-1,15 01:15:00` | 2022 年 6、7、8 月的 1 到 15 号的 01:15:00 +`Mon *-05~03` | 每年五月份的下个周一同时也是月末的倒数第三天 +`Mon..Fri *-08~04` | 任何年份 8 月末的倒数第四天,同时也须是工作日 +`*-05~03/2` | 五月末的倒数第三天,然后 2 天后再来一次。每年重复一次。注意这个表达式使用了波浪号(`~`)。 +`*-05-03/2` | 五月的第三天,然后每两天重复一次直到 5 月底。注意这个表达式使用了破折号(`-`)。 + +_Table 2: `OnCalendar` 事件时间格式例子_ + + +### 测试日历格式 + +systemd 提供了一个绝佳的工具用于检测和测试定时器中日历时间事件的格式。`systemd-analyze calendar` 工具解析一个时间事件格式,提供标准格式和其他有趣的信息,例如下次“经过”(即匹配)的日期和时间,以及距离下次触发之前大概时间。 + +首先,看看未来没有时间的日(注意 `Next elapse` 和 `UTC` 的时间会根据你当地时区改变): + +``` +[student@studentvm1 ~]$ systemd-analyze calendar 2030-06-17 +  Original form: 2030-06-17                 +Normalized form: 2030-06-17 00:00:00         +    Next elapse: Mon 2030-06-17 00:00:00 EDT +       (in UTC): Mon 2030-06-17 04:00:00 UTC +       From now: 10 years 0 months left     +[root@testvm1 system]# +``` + +现在添加一个时间,在这个例子中,日期和时间是当作无关的部分分开解析的: + +``` +[root@testvm1 system]# systemd-analyze calendar 2030-06-17 15:21:16 +  Original form: 2030-06-17                 +Normalized form: 2030-06-17 00:00:00         +    Next elapse: Mon 2030-06-17 00:00:00 EDT +       (in UTC): Mon 2030-06-17 04:00:00 UTC +       From now: 10 years 0 months left     + +  Original form: 15:21:16                   +Normalized form: *-*-* 15:21:16             +    Next elapse: Mon 2020-06-15 15:21:16 EDT +       (in UTC): Mon 2020-06-15 19:21:16 UTC +       From now: 3h 55min left               +[root@testvm1 system]# +``` + +为了把日期和时间当作一个单元来分析,可以把它们包在引号里。你在定时器单元里 `OnCalendar=` 时间格式中使用的时候记得把引号去掉,否则会报错: + +``` +[root@testvm1 system]# systemd-analyze calendar "2030-06-17 15:21:16" +Normalized form: 2030-06-17 15:21:16         +    Next elapse: Mon 2030-06-17 15:21:16 EDT +       (in UTC): Mon 2030-06-17 19:21:16 UTC +       From now: 10 years 0 months left     +[root@testvm1 system]# +``` + +现在我们测试下 Table2 里的例子。我尤其喜欢最后一个: + +``` +[root@testvm1 system]# systemd-analyze calendar "2022-6,7,8-1,15 01:15:00" +  Original form: 2022-6,7,8-1,15 01:15:00 +Normalized form: 2022-06,07,08-01,15 01:15:00 +    Next elapse: Wed 2022-06-01 01:15:00 EDT +       (in UTC): Wed 2022-06-01 05:15:00 UTC +       From now: 1 years 11 months left +[root@testvm1 system]# +``` + +让我们看一个例子,这个例子里我们列出了时间表达式的五个经过时间。 + +``` +[root@testvm1 ~]# systemd-analyze calendar --iterations=5 "Mon *-05~3" +  Original form: Mon *-05~3                 +Normalized form: Mon *-05~03 00:00:00       +    Next elapse: Mon 2023-05-29 00:00:00 EDT +       (in UTC): Mon 2023-05-29 04:00:00 UTC +       From now: 2 years 11 months left     +       Iter. #2: Mon 2028-05-29 00:00:00 EDT +       (in UTC): Mon 2028-05-29 04:00:00 UTC +       From now: 7 years 11 months left     +       Iter. #3: Mon 2034-05-29 00:00:00 EDT +       (in UTC): Mon 2034-05-29 04:00:00 UTC +       From now: 13 years 11 months left     +       Iter. #4: Mon 2045-05-29 00:00:00 EDT +       (in UTC): Mon 2045-05-29 04:00:00 UTC +       From now: 24 years 11 months left     +       Iter. #5: Mon 2051-05-29 00:00:00 EDT +       (in UTC): Mon 2051-05-29 04:00:00 UTC +       From now: 30 years 11 months left     +[root@testvm1 ~]# +``` + +这些应该为你提供了足够的信息去开始测试你的 `OnCalendar` 时间格式。`systemd-analyze` 工具可用于其他有趣的分析,我会在这个系列的下一篇文章来探索这些。 + +### 总结 + +systemd 定时器可以用于执行和 cron 工具相同的任务,但是通过按照日历和单调时间格式去触发事件的方法提供了更多的灵活性。 + +虽然你为此次实验创建的服务单元通常是由定时器调用的,你也可以随时使用 `systemctl start myMonitor.service` 命令去触发它。可以在一个定时器中编写多个维护任务的脚本;它们可以是 Bash 脚本或者其他 Linux 程序。你可以通过触发定时器来运行所有的脚本来运行服务,也可以按照需要执行单独的脚本。 + +我会在下篇文章中更加深入的探索 systemd 时间格式的用处。 + +我还没有看到任何迹象表明 cron 和 at 将被废弃。我希望这种情况不会发生,因为至少 `at` 在执行一次性调度任务的时候要比 systemd 定时器容易的多。 + +### 参考资料 + +网上有大量的关于 systemd 的参考资料,但是大部分都有点简略、晦涩甚至有误导性。除了本文中提到的资料,下列的网页提供了跟多可靠且详细的 systemd 入门信息。 + + * Fedora 项目有一篇切实好用的 [systemd 入门][5],它囊括了几乎所有你需要知道的关于如何使用 systemd 配置、管理和维护 Fedora 计算机的信息。 + * Fedora 项目也有一个不错的 [备忘录][6],交叉引用了过去 SystemV 命令和 systemd 命令做对比。 + * 关于 systemd 的技术细节和创建这个项目的原因,请查看 [Freedesktop.org][7] 上的 [systemd 描述][8]。 + * [Linux.com][9] 的“更多 systemd 的乐趣”栏目提供了更多高级的 systemd [信息和技巧][10]。 + +此外,还有一系列深度的技术文章,是由 systemd 的设计者和主要实现者 Lennart Poettering 为 Linux 系统管理员撰写的。这些文章写于 2010 年 4 月至 2011 年 9 月间,但它们现在和当时一样具有现实意义。关于 systemd 及其生态的许多其他好文章都是基于这些文章: + + * [Rethinking PID 1][11] + * [systemd for Administrators,Part I][12] + * [systemd for Administrators,Part II][13] + * [systemd for Administrators,Part III][14] + * [systemd for Administrators,Part IV][15] + * [systemd for Administrators,Part V][16] + * [systemd for Administrators,Part VI][17] + * [systemd for Administrators,Part VII][18] + * [systemd for Administrators,Part VIII][19] + * [systemd for Administrators,Part IX][20] + * [systemd for Administrators,Part X][21] + * [systemd for Administrators,Part XI][22] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/7/systemd-timers + +作者:[David Both][a] +选题:[lujun9972][b] +译者:[tt67wq](https://github.com/tt67wq) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dboth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/checklist_todo_clock_time_team.png?itok=1z528Q0y (Team checklist) +[2]: https://opensource.com/article/17/11/how-use-cron-linux +[3]: https://opensource.com/users/dboth +[4]: https://opensource.com/article/20/5/manage-startup-systemd +[5]: https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html +[6]: https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet +[7]: http://Freedesktop.org +[8]: http://www.freedesktop.org/wiki/Software/systemd +[9]: http://Linux.com +[10]: https://www.linux.com/training-tutorials/more-systemd-fun-blame-game-and-stopping-services-prejudice/ +[11]: http://0pointer.de/blog/projects/systemd.html +[12]: http://0pointer.de/blog/projects/systemd-for-admins-1.html +[13]: http://0pointer.de/blog/projects/systemd-for-admins-2.html +[14]: http://0pointer.de/blog/projects/systemd-for-admins-3.html +[15]: http://0pointer.de/blog/projects/systemd-for-admins-4.html +[16]: http://0pointer.de/blog/projects/three-levels-of-off.html +[17]: http://0pointer.de/blog/projects/changing-roots +[18]: http://0pointer.de/blog/projects/blame-game.html +[19]: http://0pointer.de/blog/projects/the-new-configuration-files.html +[20]: http://0pointer.de/blog/projects/on-etc-sysinit.html +[21]: http://0pointer.de/blog/projects/instances.html +[22]: http://0pointer.de/blog/projects/inetd.html diff --git a/published/202104/20201106 11 Linux Distributions You Can Rely on for Your Ancient 32-bit Computer.md b/published/202104/20201106 11 Linux Distributions You Can Rely on for Your Ancient 32-bit Computer.md new file mode 100644 index 0000000000..6ab0eb1e6f --- /dev/null +++ b/published/202104/20201106 11 Linux Distributions You Can Rely on for Your Ancient 32-bit Computer.md @@ -0,0 +1,317 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13326-1.html) +[#]: subject: (11 Linux Distributions You Can Rely on for Your Ancient 32-bit Computer) +[#]: via: (https://itsfoss.com/32-bit-linux-distributions/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +14 种可以在古老的 32 位计算机上使用的 Linux 发行版 +====== + +如果你一直关注最新的 [Linux 发行版][1],那么你一定已经注意到,[大多数流行的 Linux 发行版][2] 已经终止了 32 位支持。Arch Linux、Ubuntu、Fedora,每一个都已经放弃了对这种较旧架构的支持。 + +但是,如果你拥有仍然需要再利用的老式硬件,或者想将其用于某些用途,该怎么办?不用担心,你的 32 位系统还有一些选择。 + +在本文中,我试图汇编一些最好的 Linux 发行版,这些发行版将在未来几年继续支持 32 位平台。 + +### 仍提供 32 位支持的最佳 Linux 发行版 + +![][3] + +此列表与 [我们之前的支持旧笔记本电脑的 Linux 发行版列表][4] 略有不同。即使是 64 位计算机,如果是在 2010 年之前发布的,那么也可以认为它们是旧的。这就是为什么其中列出的一些建议包括现在仅支持 64 位版本的发行版的原因。 + +根据我的知识和认知,此处提供的信息是正确的,但是如果你发现有误,请在评论部分让我知道。 + +在继续之前,我认为你知道 [如何检查你拥有的是否是 32 位或 64 位计算机][5]。 + +#### 1、Debian + +![图片来源: mrneilypops / Deviantart][6] + +对于 32 位系统,[Debian][11] 是一个绝佳的选择,因为他们的最新的稳定版本仍然支持它。在撰写本文时,最新的稳定发行版 **Debian 10 “buster”** 提供了 32 位版本,并一直支持到 2024 年。 + +如果你是 Debian 的新手,值得一提的是,你可以在 [官方 Wiki][7] 上获得有关其所有内容的可靠文档。因此,上手应该不是问题。 + +你可以浏览 [可用的安装程序][8] 进行安装。但是,在开始之前,除了 [安装手册][10] 外,我建议你参考 [安装 Debian 之前要记住的事情][9] 列表。 + +最低系统要求: + +- 512 MB 内存 +- 10 GB 磁盘空间 +- 1 GHz 处理器(奔腾 4 或同等水平) + +#### 2、Slax + +![][12] + +如果你只是想快速启动设备以进行一些临时工作,[Slax][13] 是一个令人印象深刻的选择。 + +它基于 Debian,但它通过 USB 设备或 DVD 运行旨在成为一种便携且快速的选项。你可以从他们的网站免费下载 32 位 ISO 文件,或购买预装有 Slax 的可擦写 DVD 或加密的闪存盘。 + +当然,这并不是要取代传统的桌面操作系统。但是,是的,你确实获得了以 Debian 为基础的 32 位支持。 + +最低系统要求: + +- 内存:128MB(离线使用)/ 512MB(用于网页浏览器使用) +- CPU: i686 或更新版本 + +#### 3、AntiX + +![图片来源: Opensourcefeed][14] + +[AntiX][15] 是另一个令人印象深刻的基于 Debian 的发行版。AntiX 是众所周知的无 systemd 发行版,该发行版侧重于性能,是一个轻量级的系统。 + +它完全适合于所有老式的 32 位系统。它只需要低至 256 MB 内存和 2.7 GB 存储空间。不仅易于安装,而且用户体验也是针对新手和有经验的用户的。 + +你应该可以得到基于 Debian 的最新稳定分支的最新版本。 + +最低系统要求: + +- 内存:256 MB 的内存 +- CPU:奔腾 3 系统 +- 磁盘空间:5GB 的驱动器空间 + +#### 4、openSUSE + +![][16] + +[openSUSE][18] 是一个独立的 Linux 发行版,也支持 32 位系统。实际上最新的常规版本(Leap)不提供 32 位镜像,但滚动发行版本(Tumbleweed)确实提供了 32 位镜像。 + +如果你是新手,那将是完全不同的体验。但是,我建议你仔细阅读 [为什么要使用 openSUSE 的原因][17]。 + +它主要面向开发人员和系统管理员,但也可以将其用作普通桌面用户。值得注意的是,openSUSE 不意味在老式硬件上运行,因此必须确保至少有 2 GB 内存、40+ GB 存储空间和双核处理器。 + +最低系统要求: +- 奔腾 4 1.6 GHz 或更高的处理器 +- 1GB 物理内存 +- 5 GB 硬盘 + +#### 5、Emmabuntüs + +![][19] + +[Emmanbuntus][20] 是一个有趣的发行版,旨在通过 32 位支持来延长硬件的使用寿命,以减少原材料的浪费。作为一个团体,他们还参与向学校提供计算机和数字技术的工作。 + +它提供了两个不同的版本,一个基于 Ubuntu,另一个基于 Debian。如果你需要更长久的 32 位支持,则可能要使用 Debian 版本。它可能不是最好的选择,但是它具有许多预配置的软件来简化 Linux 学习体验,并提供 32 位支持,如果你希望在此过程中支持他们的事业,那么这是一个相当不错的选择。 + +最低系统要求: + +- 512MB 内存 +- 硬盘驱动器:2GB +- 奔腾处理器或同等配置 + +#### 6、NixOS + +![Nixos KDE Edition \(图片来源: Distrowatch\)][21] + +[NixOS][23] 是另一个支持 32 位系统的独立 Linux 发行版。它着重于提供一个可靠的系统,其中程序包彼此隔离。 + +这可能不是直接面向普通用户,但它是一个 KDE 支持的可用发行版,具有独特的软件包管理方式。你可以从其官方网站上了解有关其 [功能][22] 的更多信息。 + +最低系统要求: + +- 内存:768 MB +- 8GB 磁盘空间 +- 奔腾 4 或同等水平 + +#### 7、Gentoo Linux + +![][24] + +如果你是经验丰富的 Linux 用户,并且正在寻找 32 位 Linux 发行版,那么 [Gentoo Linux][26] 应该是一个不错的选择。 + +如果需要,你可以使用 Gentoo Linux 的软件包管理器轻松配置、编译和安装内核。不仅限于众所周知的可配置性,你还可以在较旧的硬件上运行而不会出现任何问题。 + +即使你不是经验丰富的用户,也想尝试一下,只需阅读 [安装说明][25],就可以大胆尝试了。 + +最低系统要求: + +- 256MB 内存 +- 奔腾 4 或 AMD 的同类产品 +- 2.5 GB 磁盘空间 + +#### 8、Devuan + +![][27] + +[Devuan][30] 是另一种无 systemd 的发行版。从技术上讲,它是 Debian 的一个分支,只是没有 systemd ,并鼓励 [初始化系统自由][29]。 + +对于普通用户来说,它可能不是一个非常流行的 Linux 发行版,但是如果你想要一个无 systemd 的发行版和 32 位支持,Devuan 应该是一个不错的选择。 + +最低系统要求: + +- 内存:1GB +- CPU:奔腾 1.0GHz + +#### 9、Void Linux + +![][31] + +[Void Linux][33] 是由志愿者独立开发的有趣发行版。它旨在成为一个通用的操作系统,同时提供稳定的滚动发布周期。它以 runit 作为初始化系统替代 systemd,并为你提供了多个 [桌面环境][32] 选择。 + +它具有非常令人印象深刻的最低需求规格,只需 96 MB 的内存配以奔腾 4 或等同的芯片。试试看吧! + +最低系统要求: + +- 96MB 内存 +- 奔腾 4 或相当的 AMD 处理器 + +#### 10、Q4OS + +![][34] + +[Q4OS][37] 是另一个基于 Debian 的发行版,致力于提供极简和快速的桌面用户体验。它也恰好是我们的 [最佳轻量级 Linux 发行版][4] 列表中的一个。它的 32 位版本具有 [Trinity 桌面][35],你可以在 64 位版本上找到 KDE Plasma 支持。 + +与 Void Linux 类似,Q4OS 可以运行在至低 128 MB 的内存和 300 MHz 的 CPU 上,需要 3 GB 的存储空间。对于任何老式硬件来说,它应该绰绰有余。因此,我想说,你绝对应该尝试一下! + +要了解更多信息,你还可以查看 [我们对 Q4OS 的点评][36]。 + +Q4OS 的最低要求: + +- 内存:128MB(Trinity 桌面)/ 1GB(Plasma 桌面) +- CPU:300 MHz(Trinity 桌面)/ 1 GHz(Plasma 桌面) +- 存储空间:5GB(Trinity 桌面)/3GB(Plasma 桌面) + +#### 11、MX Linux + +![][38] + +如果有一个稍微不错的配置(不完全是老式的,而是旧的),对于 32 位系统,我个人推荐 [MX Linux][39]。它也恰好是适合各种类型用户的 [最佳 Linux 发行版][2] 之一。 + +通常,MX Linux 是基于 Debian 的出色的轻量级和可定制的发行版。你可以选择 KDE、XFce 或 Fluxbox(这是他们自己为旧硬件设计的桌面环境)。你可以在他们的官方网站上找到更多关于它的信息,并尝试一下。 + +最低系统要求: + +- 1GB 内存(建议使用 2GB,以便舒适地使用) +- 15GB 的磁盘空间(建议 20GB) + + +#### 12、Linux Mint Debian Edtion + +![][44] + +[基于 Debian 的 Linux Mint][45]?为什么不可以呢? + +你可以得到同样的 Cinnamon 桌面体验,只是不基于 Ubuntu。它和基于 Ubuntu 的 Linux Mint 一样容易使用,一样可靠。 + +不仅仅是基于 Debian,你还可以得到对 64 位和 32 位系统的支持。如果你不想在 32 位系统上使用一个你从未听说过的 Linux 发行版,这应该是一个不错的选择。 + +最低系统要求: + +- 1GB 内存(建议使用 2GB,以便舒适地使用) +- 15GB 的磁盘空间(建议 20GB) + +#### 13、Sparky Linux + +![][46] + +[Sparky Linux][47] 是 [为初学者定制的最好的轻量级 Linux 发行版][4] 之一。它很容易定制,而且资源占用很少。 + +它可以根据你的要求提供不同的版本,但它确实支持 32 位版本。考虑到你想为你的旧电脑买点东西,我建议你看看它的 MinimalGUI 版本,除非你真的需要像 Xfce 或 LXQt 这样成熟的桌面环境。 + +最低系统要求: + +- 内存:512 MB +- CPU:奔腾 4,或 AMD Athlon +- 磁盘空间:2GB(命令行版),10GB(家庭版),20GB(游戏版) + +#### 14、Mageia + +![][48] + +作为 [Mandriva Linux][49] 的分支,[Mageia Linux][50] 是一个由社区推动的 Linux 发行版,支持 32 位系统。 + +通常情况下,你会注意到每年都有一个重大版本。他们的目的是贡献他们的工作,以提供一个自由的操作系统,这也是潜在的安全。对于 32 位系统来说,它可能不是一个流行的选择,但它支持很多桌面环境(如 KDE Plasma、GNOME),如果你需要,你只需要从它的软件库中安装它。 + +你应该可以从他们的官方网站上得到下载桌面环境特定镜像的选项。 + +最低系统要求: + +- 512MB 内存(推荐 2GB) +- 最小安装需 5GB 存储空间(常规安装 20GB) +- CPU:奔腾4,或 AMD Athlon + +### 荣誉提名:Funtoo & Puppy Linux + +[Funtoo][40] 是基于 Gentoo 的由社区开发的 Linux 发行版。它着重于为你提供 Gentoo Linux 的最佳性能以及一些额外的软件包,以使用户获得完整的体验。有趣的是,该开发实际上是由 Gentoo Linux 的创建者 Daniel Robbins 领导的。 + +[Puppy Linux][51] 是一个很小的 Linux 发行版,除了基本的工具,几乎没有捆绑的软件应用。如果其他选择都不行,而你又想要最轻量级的发行版,Puppy Linux 可能是一个选择。 + +当然,如果你不熟悉 Linux,这两个可能都不能提供最好的体验。但是,它们确实支持 32 位系统,并且可以在许多较旧的 Intel/AMD 芯片组上很好地工作。可以在它们的官方网站上探索更多的信息。 + +### 总结 + +我将列表重点放在基于 Debian 的发行版和一些独立发行版上。但是,如果你不介意长期支持条款,而只想获得一个支持 32 位的镜像,也可以尝试使用任何基于 Ubuntu 18.04 的发行版(或任何官方版本)。 + +在撰写本文时,它们只剩下几个月的软件支持。因此,我避免将其作为主要选项提及。但是,如果你喜欢基于 Ubuntu 18.04 的发行版或其它任何版本,可以选择 [LXLE][41]、[Linux Lite][42]、[Zorin Lite 15][43] 及其他官方版本。 + +即使大多数基于 Ubuntu 的现代桌面操作系统都放弃了对 32 位的支持。你仍然有很多选项可以选择。 + +在 32 位系统中更喜欢哪一个?在下面的评论中让我知道你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/32-bit-linux-distributions/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/what-is-linux-distribution/ +[2]: https://itsfoss.com/best-linux-distributions/ +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/11/32-bit-linux.png?resize=800%2C450&ssl=1 +[4]: https://itsfoss.com/lightweight-linux-beginners/ +[5]: https://itsfoss.com/32-bit-64-bit-ubuntu/ +[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/08/debian-screenshot.png?resize=800%2C450&ssl=1 +[7]: https://wiki.debian.org/FrontPage +[8]: https://www.debian.org/releases/buster/debian-installer/ +[9]: https://itsfoss.com/before-installing-debian/ +[10]: https://www.debian.org/releases/buster/installmanual +[11]: https://www.debian.org/ +[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/04/slax-screenshot.jpg?resize=800%2C600&ssl=1 +[13]: https://www.slax.org +[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/antiX-19-1.jpg?resize=800%2C500&ssl=1 +[15]: https://antixlinux.com +[16]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/01/opensuse-15-1.png?resize=800%2C500&ssl=1 +[17]: https://itsfoss.com/why-use-opensuse/ +[18]: https://www.opensuse.org/ +[19]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/Emmabuntus-xfce.png?resize=800%2C500&ssl=1 +[20]: https://emmabuntus.org/ +[21]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/10/nixos-kde.jpg?resize=800%2C500&ssl=1 +[22]: https://nixos.org/features.html +[23]: https://nixos.org/ +[24]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/gentoo-linux.png?resize=800%2C450&ssl=1 +[25]: https://www.gentoo.org/get-started/ +[26]: https://www.gentoo.org +[27]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/06/devuan-beowulf.jpg?resize=800%2C600&ssl=1 +[28]: https://itsfoss.com/devuan-3-release/ +[29]: https://www.devuan.org/os/init-freedom +[30]: https://www.devuan.org +[31]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/10/void-linux.jpg?resize=800%2C450&ssl=1 +[32]: https://itsfoss.com/best-linux-desktop-environments/ +[33]: https://voidlinux.org/ +[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/02/q4os8Debonaire.jpg?resize=800%2C500&ssl=1 +[35]: https://en.wikipedia.org/wiki/Trinity_Desktop_Environment +[36]: https://itsfoss.com/q4os-linux-review/ +[37]: https://q4os.org/index.html +[38]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/08/mx-linux-19-2-kde.jpg?resize=800%2C452&ssl=1 +[39]: https://mxlinux.org/ +[40]: https://www.funtoo.org/Welcome +[41]: https://www.lxle.net/ +[42]: https://www.linuxliteos.com +[43]: https://zorinos.com/download/15/lite/32/ +[44]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/cinnamon-debian-edition.jpg?w=800&ssl=1 +[45]: https://www.linuxmint.com/download_lmde.php +[46]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/sparky-linux.jpg?w=800&ssl=1 +[47]: https://sparkylinux.org/download/stable/ +[48]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/11/mageia.jpg?w=800&ssl=1 +[49]: https://en.wikipedia.org/wiki/Mandriva_Linux +[50]: https://www.mageia.org/en/ +[51]: http://puppylinux.com/ \ No newline at end of file diff --git a/published/202104/20201109 Getting started with Stratis encryption.md b/published/202104/20201109 Getting started with Stratis encryption.md new file mode 100644 index 0000000000..6708bdaea5 --- /dev/null +++ b/published/202104/20201109 Getting started with Stratis encryption.md @@ -0,0 +1,201 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13311-1.html) +[#]: subject: (Getting started with Stratis encryption) +[#]: via: (https://fedoramagazine.org/getting-started-with-stratis-encryption/) +[#]: author: (briansmith https://fedoramagazine.org/author/briansmith/) + +Stratis 加密入门 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/19/094919orzaxwl5axiqqfiu.jpg) + +Stratis 在其 [官方网站][2] 上被描述为“_易于使用的 Linux 本地存储管理_”。请看这个 [短视频][3],快速演示基础知识。该视频是在 Red Hat Enterprise Linux 8 系统上录制的。视频中显示的概念也适用于 Fedora 中的 Stratis。 + +Stratis 2.1 版本引入了对加密的支持。继续阅读以了解如何在 Stratis 中开始加密。 + +### 先决条件 + +加密需要 Stratis 2.1 或更高版本。这篇文章中的例子使用的是 Fedora 33 的预发布版本。Stratis 2.1 将用在 Fedora 33 的最终版本中。 + +你还需要至少一个可用的块设备来创建一个加密池。下面的例子是在 KVM 虚拟机上完成的,虚拟磁盘驱动器为 5GB(`/dev/vdb`)。 + +### 在内核密钥环中创建一个密钥 + +Linux 内核密钥环keyring用于存储加密密钥。关于内核密钥环的更多信息,请参考 `keyrings` 手册页(`man keyrings`)。   + +使用 `stratis key set` 命令在内核钥匙圈中设置密钥。你必须指定从哪里读取密钥。要从标准输入中读取密钥,使用 `-capture-key` 选项。要从文件中读取密钥,使用 `-keyfile-path ` 选项。最后一个参数是一个密钥描述。它将稍后你创建加密的 Stratis 池时使用。 + +例如,要创建一个描述为 `pool1key` 的密钥,并从标准输入中读取密钥,可以输入: + +``` +# stratis key set --capture-key pool1key +Enter desired key data followed by the return key: +``` + +该命令提示我们输入密钥数据/密码,然后密钥就创建在内核密钥环中了。 + +要验证密钥是否已被创建,运行 `stratis key list`: + +``` +# stratis key list +Key Description +pool1key +``` + +这将验证是否创建了 `pool1key`。请注意,这些密钥不是持久的。如果主机重启,在访问加密的 Stratis 池之前,需要再次提供密钥(此过程将在后面介绍)。 + +如果你有多个加密池,它们可以有一个单独的密钥,也可以共享同一个密钥。 + +也可以使用以下 `keyctl` 命令查看密钥: + +``` +# keyctl get_persistent @s +318044983 +# keyctl show +Session Keyring + 701701270 --alswrv 0 0 keyring: _ses + 649111286 --alswrv 0 65534 \_ keyring: _uid.0 + 318044983 ---lswrv 0 65534 \_ keyring: _persistent.0 +1051260141 --alswrv 0 0 \_ user: stratis-1-key-pool1key +``` + +### 创建加密的 Stratis 池 + +现在已经为 Stratis 创建了一个密钥,下一步是创建加密的 Stratis 池。加密池只能在创建池时进行。目前不可能对现有的池进行加密。 + +使用 `stratis pool create` 命令创建一个池。添加 `-key-desc` 和你在上一步提供的密钥描述(`pool1key`)。这将向 Stratis 发出信号,池应该使用提供的密钥进行加密。下面的例子是在 `/dev/vdb` 上创建 Stratis 池,并将其命名为 `pool1`。确保在你的系统中指定一个空的/可用的设备。 + +``` +# stratis pool create --key-desc pool1key pool1 /dev/vdb +``` + +你可以使用 `stratis pool list` 命令验证该池是否已经创建: + +``` +# stratis pool list +Name Total Physical Properties +pool1 4.98 GiB / 37.63 MiB / 4.95 GiB ~Ca, Cr +``` + +在上面显示的示例输出中,`~Ca` 表示禁用了缓存(`~` 否定了该属性)。`Cr` 表示启用了加密。请注意,缓存和加密是相互排斥的。这两个功能不能同时启用。 + +接下来,创建一个文件系统。下面的例子演示了创建一个名为 `filesystem1` 的文件系统,将其挂载在 `/filesystem1` 挂载点上,并在新文件系统中创建一个测试文件: + +``` +# stratis filesystem create pool1 filesystem1 +# mkdir /filesystem1 +# mount /stratis/pool1/filesystem1 /filesystem1 +# cd /filesystem1 +# echo "this is a test file" > testfile +``` + +### 重启后访问加密池 + +当重新启动时,你会发现 Stratis 不再显示你的加密池或它的块设备: + +``` +# stratis pool list +Name Total Physical Properties +``` + +``` +# stratis blockdev list +Pool Name Device Node Physical Size Tier +``` + +要访问加密池,首先要用之前使用的相同的密钥描述和密钥数据/口令重新创建密钥: + +``` +# stratis key set --capture-key pool1key +Enter desired key data followed by the return key: +``` + +接下来,运行 `stratis pool unlock` 命令,并验证现在可以看到池和它的块设备: + +``` +# stratis pool unlock +# stratis pool list +Name Total Physical Properties +pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr +# stratis blockdev list +Pool Name Device Node Physical Size Tier +pool1 /dev/dm-2 4.98 GiB Data +``` + +接下来,挂载文件系统并验证是否可以访问之前创建的测试文件: + +``` +# mount /stratis/pool1/filesystem1 /filesystem1/ +# cat /filesystem1/testfile +this is a test file +``` + +### 使用 systemd 单元文件在启动时自动解锁 Stratis 池 + +可以在启动时自动解锁 Stratis 池,无需手动干预。但是,必须有一个包含密钥的文件。在某些环境下,将密钥存储在文件中可能会有安全问题。 + +下图所示的 systemd 单元文件提供了一个简单的方法来在启动时解锁 Stratis 池并挂载文件系统。欢迎提供更好的/替代方法的反馈。你可以在文章末尾的评论区提供建议。 + +首先用下面的命令创建你的密钥文件。确保用之前输入的相同的密钥数据/密码来代替`passphrase`。 + +``` +# echo -n passphrase > /root/pool1key +``` + +确保该文件只能由 root 读取: + +``` +# chmod 400 /root/pool1key +# chown root:root /root/pool1key +``` + +在 `/etc/systemd/system/stratis-filesystem1.service` 创建包含以下内容的 systemd 单元文件: + +``` +[Unit] +Description = stratis mount pool1 filesystem1 file system +After = stratisd.service + +[Service] +ExecStartPre=sleep 2 +ExecStartPre=stratis key set --keyfile-path /root/pool1key pool1key +ExecStartPre=stratis pool unlock +ExecStartPre=sleep 3 +ExecStart=mount /stratis/pool1/filesystem1 /filesystem1 +RemainAfterExit=yes + +[Install] +WantedBy = multi-user.target +``` + +接下来,启用服务,使其在启动时运行: + +``` +# systemctl enable stratis-filesystem1.service +``` + +现在重新启动并验证 Stratis 池是否已自动解锁,其文件系统是否已挂载。 + +### 结语 + +在今天的环境中,加密是很多人和组织的必修课。本篇文章演示了如何在 Stratis 2.1 中启用加密功能。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/getting-started-with-stratis-encryption/ + +作者:[briansmith][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/briansmith/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2020/11/stratis-encryption-2-816x345.jpg +[2]: https://stratis-storage.github.io/ +[3]: https://www.youtube.com/watch?v=CJu3kmY-f5o diff --git a/published/202104/20201204 9 Open Source Forum Software That You Can Deploy on Your Linux Servers.md b/published/202104/20201204 9 Open Source Forum Software That You Can Deploy on Your Linux Servers.md new file mode 100644 index 0000000000..74d7263544 --- /dev/null +++ b/published/202104/20201204 9 Open Source Forum Software That You Can Deploy on Your Linux Servers.md @@ -0,0 +1,213 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13329-1.html) +[#]: subject: (9 Open Source Forum Software That You Can Deploy on Your Linux Servers) +[#]: via: (https://itsfoss.com/open-source-forum-software/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) + +11 个可以部署在 Linux 服务器上的开源论坛软件 +====== + +> 是否想要建立社区论坛或客户支持门户站点?以下是一些可以在服务器上部署的最佳开源论坛软件。 + +就像我们的论坛一样,重要的是建立一个让志趣相投的人可以讨论,互动和寻求支持的平台。 + +论坛为用户(或客户)提供了一个空间,让他们可以接触到在互联网上大多数情况下不容易找到的东西。 + +如果你是一家企业,则可以聘请开发人员团队并按照自己的方式建立自己的论坛,但这会增加大量预算。 + +幸运的是,有几个令人印象深刻的开源论坛软件,你只需要将其部署在你的服务器上就万事大吉了!在此过程中,你将节省很多钱,但仍能获得所需的东西。 + +在这里,我列出了可以在 Linux 服务器上安装的最佳开源论坛软件列表。 + +### 建立社区门户的最佳开源论坛软件 + +![][2] + +如果你尚未建立过网站,则在部署论坛之前,可能需要看一下 [某些开源网站创建工具][3]。 + +**注意:** 此列表没有特定的排名顺序。 + +#### 1、Discourse(现代、流行) + +![][4] + +[Discourse][7] 是人们用来部署配置讨论平台的最流行的现代论坛软件。实际上,[It's FOSS 社区][1] 论坛使用了 Discourse 平台。 + +它提供了我所知道的大多数基本功能,包括电子邮件通知、审核工具、样式自定义选项,Slack/WordPress 等第三方集成等等。 + +它的自托管是完全免费的,你也可以在 [GitHub][5] 上找到该项目。如果你要减少将其部署在自托管服务器上的麻烦,可以选择 [Discourse 提供的托管服务][6](肯定会很昂贵)。 + +#### 2、Talkyard(受 Discourse 和 StackOverflow 启发) + +![][8] + +[Talkyard][10] 是完全免费使用的,是一个开源项目。它看起来很像 Discourse,但是如果你深入了解一下,还是有区别的。 + +你可以在这里获得 StackOverflow 的大多数关键功能,以及在论坛平台上期望得到的所有基本功能。它可能不是一个流行的论坛解决方案,但是如果你想要类似于 Discourse 的功能以及一些有趣的功能,那么值得尝试一下。 + +你可以在他们的 [GitHub 页面][9] 中进一步了解它。 + +#### 3、Forem (一种独特的社区平台,正在测试中) + +![](https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/12/dev-community-forem.png?w=800&ssl=1) + +你可能以前没有听说过 [Forem](https://www.forem.com/),但它支持了 [dev.to](https://dev.to/)(这是一个越来越受欢迎的开发者社区网站)。 + +它仍然处于测试阶段,所以你或许不会选择在生产服务器上实验。但是,你可以通过在他们的官方网站上填写一个表格并与他们取得联系,让他们为你托管。 + +尽管没有官方的功能列表来强调所有的东西,但如果我们以 [dev.to](https://dev.to/) 为例,你会得到许多基本的特性和功能,如社区列表、商店、帖子格式化等。你可以在他们的 [公告帖子](https://dev.to/devteam/for-empowering-community-2k6h) 中阅读更多关于它提供的内容,并在 [GitHub](https://github.com/forem/forem) 上探索该项目。 + +#### 4、NodeBB(现代化、功能齐全) + +![][11] + +[NodeBB][14] 是一个基于 [Node.js][12] 的开源论坛软件。它的目标是简单、优雅和快速。首先,它面向有托管计划的组织和企业。但是,你也可以选择自己托管它。 + +你还可以获得实时本地分析功能,以及聊天和通知支持。它还提供一个 API,可以将其与你的现有产品集成。它还支持审核工具和打击垃圾邮件的工具。 + +你可以获得一些开箱即用的第三方集成支持,例如 WordPress、Mailchimp 等。 + +请在他们的 [GitHub 页面][13] 或官方网站上可以进一步了解它。 + +#### 5、Vanilla 论坛(面向企业) + +![][15] + +[Vanilla 论坛][17] 主要是一款以企业为中心的论坛软件,它的基本功能是为你的平台打造品牌,为客户提供问答,还可以对帖子进行投票。 + +用户体验具有现代的外观,并且已被像 EA、Adobe 和其他一些大公司使用。 + +当然,如果你想尝试基于云的 Vanilla 论坛(由专业团队管理)以及对某些高级功能的访问权,可以随时申请演示。无论哪种情况,你都可以选择社区版,该社区版可以免费使用大多数最新功能,但需要自己托管和管理。 + +你可以在他们的官方网站和 [GitHub 页面][16] 上进一步了解它。 + +#### 6、bbPress (来自 WordPress) + +![][20] + +[bbPress][22] 是一个可靠的论坛软件,由 WordPress 的创建者建立。旨在提供一个简单而迅速的论坛体验。 + +用户界面看起来很老旧,但易于使用,它提供了你通常在论坛软件中需要的基本功能。审核工具很好用,易于设置。你可以使用现有的插件扩展功能,并从几个可用的主题中进行选择以调整论坛的外观。 + +如果你只想要一个没有花哨功能的简单论坛平台,bbPress 应该是完美的。你也可以查看他们的 [GitHub 页面][21] 了解更多信息。 + +#### 7、phpBB(经典论坛软件) + +![][23] + +如果你想要传统的论坛设计,只想要基本功能,则 [phpBB][25] 软件是一个不错的选择。当然,你可能无法获得最佳的用户体验或功能,但是作为按传统设计的论坛平台,它是实用的并且非常有效。 + +尤其是,对于习惯使用传统方式的用户而言,这将是一种简单而有效的解决方案。 + +不仅仅是简单,而且在一般的托管供应商那里,它的设置也是非常容易的。在任何共享主机平台上,你都能获得一键式安装功能,因此也不需要太多的技术知识来进行设置。 + +你可以在他们的官方网站或 [GitHub 页面][24] 上找到更多有关它的信息。 + +#### 8、Simple Machines 论坛(另一个经典) + +![][26] + +与 phpBB 类似,[Simple Machines 论坛][27] 是另一种基本(或简单)的论坛。很大程度上你可能无法自定义外观(至少不容易),但是默认外观是干净整洁的,提供了良好的用户体验。 + +就个人而言,相比 php BB 我更喜欢它,但是你可以前往他们的 [官方网站][27] 进行进一步的探索。同样,你可以使用一键安装方法在任何共享托管服务上轻松安装 Simple Machines 论坛。 + +#### 9、FluxBB(古典) + +![][28] + +[FluxBB][30] 是另一个简单、轻量级的开源论坛。与其他的相比,它可能维护的不是非常积极,但是如果你只想部署一个只有很少几个用户的基本论坛,则可以轻松尝试一下。 + +你可以在他们的官方网站和 [GitHub 页面][29] 上找到更多有关它的信息。 + +#### 10、MyBB(不太流行,但值得看看) + +![][31] + +[MyBB][33] 是一款独特的开源论坛软件,它提供多种样式,并包含你需要的基本功能。 + +从插件支持和审核工具开始,你将获得管理大型社区所需的一切。它还支持类似于 Discourse 和同类论坛软件面向个人用户的私人消息传递。 + +它可能不是一个流行的选项,但是它可以满足大多数用例,并且完全免费。你可以在 [GitHub][32] 上得到支持和探索这个项目。 + +#### 11、Flarum(测试版) + +![][34] + +如果你想要更简单和独特的论坛,请看一下 [Flarum][37]。它是一款轻量级的论坛软件,旨在以移动为先,同时提供快速的体验。 + +它支持某些第三方集成,也可以使用扩展来扩展功能。就我个人而言,它看起来很漂亮。我没有机会尝试它,你可以看一下它的 [文档][35],可以肯定它具有论坛所需的所有必要功能的特征。 + +值得注意的是 Flarum 是相当新的,因此仍处于测试阶段。你可能需要先将其部署在测试服务器上测试后,再应用到生产环境。请查看其 [GitHub 页面][36] 了解更多详细信息。 + +#### 补充:Lemmy(更像是 Reddit 的替代品,但也是一个不错的选择) + +![](https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/12/lemmy-forum.png?w=800&ssl=1) + +一个用 [Rust](https://www.rust-lang.org/) 构建的 Reddit 的联盟式论坛的替代品。它的用户界面很简单,有些人可能觉得它不够直观,无法获得有吸引力的论坛体验。 + +其联盟网络仍在构建中,但如果你想要一个类似 Reddit 的社区平台,你可以很容易地将它部署在你的 Linux 服务器上,并制定好管理规则、版主,然后就可以开始了。它支持跨版发帖(参见 Reddit),以及其他基本功能,如标签、投票、用户头像等。 + +你可以通过其 [官方文档](https://lemmy.ml/docs/about.html) 和 [GitHub 页面](https://github.com/LemmyNet/lemmy) 探索更多信息。 + +### 总结 + +大多数开源论坛软件都为基本用例提供了几乎相同的功能。如果你正在寻找特定的功能,则可能需要浏览其文档。 + +就个人而言,我推荐 Discourse。它很流行,外观现代,拥有大量的用户基础。 + +你认为最好的开源论坛软件是什么?我是否错过了你的偏爱?在下面的评论中让我知道。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/open-source-forum-software/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.community/ +[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/12/open-source-forum-software.png?resize=800%2C450&ssl=1 +[3]: https://itsfoss.com/open-source-cms/ +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/11/itsfoss-community-discourse.jpg?resize=800%2C561&ssl=1 +[5]: https://github.com/discourse/discourse +[6]: https://discourse.org/buy +[7]: https://www.discourse.org/ +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/talkyard-forum.jpg?resize=800%2C598&ssl=1 +[9]: https://github.com/debiki/talkyard +[10]: https://www.talkyard.io/ +[11]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/11/nodebb.jpg?resize=800%2C369&ssl=1 +[12]: https://nodejs.org/en/ +[13]: https://github.com/NodeBB/NodeBB +[14]: https://nodebb.org/ +[15]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/11/vanilla-forums.png?resize=800%2C433&ssl=1 +[16]: https://github.com/Vanilla +[17]: https://vanillaforums.com/en/ +[18]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/02/open-source-eCommerce.png?fit=800%2C450&ssl=1 +[19]: https://itsfoss.com/open-source-ecommerce/ +[20]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/11/bbpress.jpg?resize=800%2C552&ssl=1 +[21]: https://github.com/bbpress +[22]: https://bbpress.org/ +[23]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/11/phpBB.png?resize=798%2C600&ssl=1 +[24]: https://github.com/phpbb/phpbb +[25]: https://www.phpbb.com/ +[26]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/simplemachines.jpg?resize=800%2C343&ssl=1 +[27]: https://www.simplemachines.org/ +[28]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/FluxBB.jpg?resize=800%2C542&ssl=1 +[29]: https://github.com/fluxbb/fluxbb/ +[30]: https://fluxbb.org/ +[31]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/11/mybb-example.png?resize=800%2C461&ssl=1 +[32]: https://github.com/mybb/mybb +[33]: https://mybb.com/ +[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/flarum-screenshot.png?resize=800%2C503&ssl=1 +[35]: https://docs.flarum.org/ +[36]: https://github.com/flarum +[37]: https://flarum.org/ +[38]: https://highoncloud.com/ diff --git a/published/202104/20201209 Program a simple game with Elixir.md b/published/202104/20201209 Program a simple game with Elixir.md new file mode 100644 index 0000000000..4d7f6e6211 --- /dev/null +++ b/published/202104/20201209 Program a simple game with Elixir.md @@ -0,0 +1,134 @@ +[#]: collector: (lujun9972) +[#]: translator: (tt67wq) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13292-1.html) +[#]: subject: (Program a simple game with Elixir) +[#]: via: (https://opensource.com/article/20/12/elixir) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) + +使用 Elixir 语言编写一个小游戏 +====== + +> 通过编写“猜数字”游戏来学习 Elixir 编程语言,并将它与一个你熟知的语言做对比。 + +![](https://img.linux.net.cn/data/attachment/album/202104/12/223351t68886wmza1m9jnt.jpg) + +为了更好的学习一门新的编程语言,最好的方法是去关注主流语言的一些共有特征: + + * 变量 + * 表达式 + * 语句 + +这些概念是大多数编程语言的基础。因为这些相似性,只要你通晓了一门编程语言,你可以通过对比差异来熟知另一门编程语言。 + +另外一个学习新编程语言的好方法是开始编写一个简单标准的程序。它可以让你集中精力在语言上而非程序的逻辑本身。在这个系列的文章中,我们使用“猜数字”程序来实现,在这个程序中,计算机会选择一个介于 1 到 100 之间的数字,并要求你来猜测它。程序会循环执行,直到你正确猜出该数字为止。 + +“猜数字”这个程序使用了编程语言的以下概念: + + * 变量 + * 输入 + * 输出 + * 条件判断 + * 循环 + +这是一个学习新编程语言的绝佳实践。 + +### 猜数字的 Elixir 实现 + +[Elixir][2] 是一门被设计用于构建稳定可维护应用的动态类型的函数式编程语言。它与 [Erlang][3] 运行于同一虚拟机之上,吸纳了 Erlang 的众多长处的同时拥有更加简单的语法。 + +你可以编写一个 Elixir 版本的“猜数字”游戏来体验这门语言。 + +这是我的实现方法: + +``` +defmodule Guess do + def guess() do + random = Enum.random(1..100) + IO.puts "Guess a number between 1 and 100" + Guess.guess_loop(random) + end + def guess_loop(num) do + data = IO.read(:stdio, :line) + {guess, _rest} = Integer.parse(data) + cond do + guess < num -> + IO.puts "Too low!" + guess_loop(num) + guess > num -> + IO.puts "Too high!" + guess_loop(num) + true -> + IO.puts "That's right!" + end + end +end + +Guess.guess() +``` + +Elixir 通过列出变量的名称后面跟一个 `=` 号来为了给变量分配一个值。举个例子,表达式 `random = 0` 给 `random` 变量分配一个数值 0。 + +代码以定义一个模块开始。在 Elixir 语言中,只有模块可以包含命名函数。 + +紧随其后的这行代码定义了入口函数 `guess()`,这个函数: + + * 调用 `Enum.random()` 函数来获取一个随机整数 + * 打印游戏提示 + * 调用循环执行的函数 + +剩余的游戏逻辑实现在 `guess_loop()` 函数中。 + +`guess_loop()` 函数利用 [尾递归][4] 来实现循环。Elixir 中有好几种实现循环的方法,尾递归是比较常用的一种方式。`guess_loop()` 函数做的最后一件事就是调用自身。 + +`guess_loop()` 函数的第一行读取用户输入。下一行调用 `parse()` 函数将输入转换成一个整数。 + +`cond` 表达式是 Elixir 版本的多重分支表达式。与其他语言中的 `if/elif` 或者 `if/elsif` 表达式不同,Elixir 对于的首个分支或者最后一个没有分支并没有区别对待。 + +这个 `cond` 表达式有三路分支:猜测的结果可以比随机数大、小或者相等。前两个选项先输出不等式的方向然后递归调用 `guess_loop()`,循环返回至函数开始。最后一个选项输出 `That's right`,然后这个函数就完成了。 + +### 输出例子 + +现在你已经编写了你的 Elixir 代码,你可以运行它来玩“猜数字”的游戏。每次你执行这个程序,Elixir 会选择一个不同的随机数,你可以一直猜下去直到你找到正确的答案: + +``` +$ elixir guess.exs +Guess a number between 1 and 100 +50 +Too high +30 +Too high +20 +Too high +10 +Too low +15 +Too high +13 +Too low +14 +That's right! +``` + +“猜数字”游戏是一个学习一门新编程语言的绝佳入门程序,因为它用了非常直接的方法实践了常用的几个编程概念。通过用不同语言实现这个简单的小游戏,你可以实践各个语言的核心概念并且比较它们的细节。 + +你是否有你最喜爱的编程语言?你将怎样用它来编写“猜数字”这个游戏?关注这个系列的文章来看看其他你可能感兴趣的语言实现。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/12/elixir + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[tt67wq](https://github.com/tt67wq) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/dice_tabletop_board_gaming_game.jpg?itok=y93eW7HN (A die with rainbow color background) +[2]: https://elixir-lang.org/ +[3]: https://www.erlang.org/ +[4]: https://en.wikipedia.org/wiki/Tail_call diff --git a/published/202104/20210203 Improve your productivity with this Linux automation tool.md b/published/202104/20210203 Improve your productivity with this Linux automation tool.md new file mode 100644 index 0000000000..6ef7efff89 --- /dev/null +++ b/published/202104/20210203 Improve your productivity with this Linux automation tool.md @@ -0,0 +1,177 @@ +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13347-1.html) +[#]: subject: (Improve your productivity with this Linux automation tool) +[#]: via: (https://opensource.com/article/21/2/linux-autokey) +[#]: author: (Matt Bargenquast https://opensource.com/users/mbargenquast) + +使用 Linux 自动化工具提高生产率 +====== + +> 用 AutoKey 配置你的键盘,纠正常见的错别字,输入常用的短语等等。 + +![](https://img.linux.net.cn/data/attachment/album/202104/30/111130s7ffji6cmb7rkcfx.jpg) + +[AutoKey][2] 是一个开源的 Linux 桌面自动化工具,一旦它成为你工作流程的一部分,你就会想,如何没有它,那该怎么办。它可以成为一种提高生产率的变革性工具,或者仅仅是减少与打字有关的身体压力的一种方式。 + +本文将研究如何安装和开始使用 AutoKey ,介绍一些可以立即在工作流程中使用的简单方法,并探讨 AutoKey 高级用户可能会感兴趣的一些高级功能。 + +### 安装并设置 AutoKey + +AutoKey 在许多 Linux 发行版中都是现成的软件包。该项目的 [安装指南][3] 包含许多平台的说明,也包括了从源代码进行构建的指导。本文使用 Fedora 作为操作平台。 + +AutoKey 有两个变体:为像 GNOME 等基于 [GTK][4] 环境而设计的 autokey-gtk 和基于 [QT][5] 的 autokey-qt。 + +你可以从命令行安装任一变体: + +``` +sudo dnf install autokey-gtk +``` + +安装完成后,使用 `autokey-gtk`(或 `autokey-qt`)运行它。 + +### 探究界面 + +在将 AutoKey 设置为在后台运行并自动执行操作之前,你首先需要对其进行配置。调出用户界面(UI)配置: + +``` +autokey-gtk -c +``` + +AutoKey 提供了一些预设配置的示例。你可能希望在熟悉 UI 时将他们留作备用,但是可以根据需要删除它们。 + +![AutoKey 用户界面][6] + +左侧窗格包含一个文件夹式的短语和脚本的层次结构。“短语Phrases” 代表要让 AutoKey 输入的文本。“脚本Scripts” 是动态的、程序化的等效项,可以使用 Python 编写,并且获得与键盘击键发送到活动窗口基本相同的结果。 + +右侧窗格构建和配置短语和脚本。 + +对配置满意后,你可能希望在登录时自动运行 AutoKey,这样就不必每次都启动它。你可以通过在 “首选项Preferences”菜单(“编辑 -> 首选项Edit -> Preferences””)中勾选 “登录时自动启动 AutoKeyAutomatically start AutoKey at login”进行配置。 + +![登录时自动启动 AutoKey][8] + +### 使用 AutoKey 纠正常见的打字排版错误 + +修复常见的打字排版错误对于 AutoKey 来说是一个容易解决的问题。例如,我始终键入 “gerp” 来代替 “grep”。这里是如何配置 AutoKey 为你解决这些类型问题。 + +创建一个新的子文件夹,可以在其中将所有“打字排版错误校正”配置分组。在左侧窗格中选择 “My Phrases” ,然后选择 “文件 -> 新建 -> 子文件夹File -> New -> Subfolder”。将子文件夹命名为 “Typos”。 + +在 “文件 -> 新建 -> 短语File -> New -> Phrase” 中创建一个新短语。并将其称为 “grep”。 + +通过高亮选择短语 “grep”,然后在 输入短语内容Enter phrase contents部分(替换默认的 “Enter phrase contents” 文本)中输入 “grep” ,配置 AutoKey 插入正确的关键词。 + +接下来,通过定义缩写来设置 AutoKey 如何触发此短语。点击用户界面底部紧邻 “缩写Abbreviations” 的 “设置Set”按钮。 + +在弹出的对话框中,单击 “添加Add” 按钮,然后将 “gerp” 添加为新的缩写。勾选 “删除键入的缩写Remove typed abbreviation”;此选项让 AutoKey 将任何键入 “gerp” 一词的替换为 “grep”。请不要勾选“在键入单词的一部分时触发Trigger when typed as part of a word”,这样,如果你键入包含 “grep”的单词(例如 “fingerprint”),就不会尝试将其转换为 “fingreprint”。仅当将 “grep” 作为独立的单词键入时,此功能才有效。 + +![在 AutoKey 中设置缩写][9] + +### 限制对特定应用程序的更正 + +你可能希望仅在某些应用程序(例如终端窗口)中打字排版错误时才应用校正。你可以通过设置 窗口过滤器Window Filter进行配置。单击 “设置Set” 按钮来定义。 + +设置窗口过滤器Window Filter的最简单方法是让 AutoKey 为你检测窗口类型: + + 1. 启动一个新的终端窗口。 + 2. 返回 AutoKey,单击 “检测窗口属性Detect Window Properties”按钮。 + 3. 单击终端窗口。 + +这将自动填充窗口过滤器,可能的窗口类值为 `gnome-terminal-server.Gnome-terminal`。这足够了,因此单击 “OK”。 + +![AutoKey 窗口过滤器][10] + +### 保存并测试 + +对新配置满意后,请确保将其保存。 单击 “文件File” ,然后选择 “保存Save” 以使更改生效。 + +现在进行重要的测试!在你的终端窗口中,键入 “gerp” 紧跟一个空格,它将自动更正为 “grep”。要验证窗口过滤器是否正在运行,请尝试在浏览器 URL 栏或其他应用程序中键入单词 “gerp”。它并没有变化。 + +你可能会认为,使用 [shell 别名][11] 可以轻松解决此问题,我完全赞成!与别名不同,只要是面向命令行,无论你使用什么应用程序,AutoKey 都可以按规则纠正错误。 + +例如,我在浏览器,集成开发环境和终端中输入的另一个常见打字错误 “openshfit” 替代为 “openshift”。别名不能完全解决此问题,而 AutoKey 可以在任何情况下纠正它。 + +### 键入常用短语 + +你可以通过许多其他方法来调用 AutoKey 的短语来帮助你。例如,作为从事 OpenShift 的站点可靠性工程师(SRE),我经常在命令行上输入 Kubernetes 命名空间名称: + +``` +oc get pods -n openshift-managed-upgrade-operator +``` + +这些名称空间是静态的,因此它们是键入特定命令时 AutoKey 可以为我插入的理想短语。 + +为此,我创建了一个名为 “Namespaces” 的短语子文件夹,并为我经常键入的每个命名空间添加了一个短语条目。 + +### 分配热键 + +接下来,也是最关键的一点,我为子文件夹分配了一个 “热键hotkey”。每当我按下该热键时,它都会打开一个菜单,我可以在其中选择(要么使用 “方向键”+回车键要么使用数字)要插入的短语。这减少了我仅需几次击键就可以输入这些命令的击键次数。 + +“My Phrases” 文件夹中 AutoKey 的预配置示例使用 `Ctrl+F7` 热键进行配置。如果你将示例保留在 AutoKey 的默认配置中,请尝试一下。你应该在此处看到所有可用短语的菜单。使用数字或箭头键选择所需的项目。 + +### 高级自动键入 + +AutoKey 的 [脚本引擎][12] 允许用户运行可以通过相同的缩写和热键系统调用的 Python 脚本。这些脚本可以通过支持的 API 的函数来完成诸如切换窗口、发送按键或执行鼠标单击之类的操作。 + +AutoKey 用户非常欢迎这项功能,发布了自定义脚本供其他用户采用。例如,[NumpadIME 脚本][13] 将数字键盘转换为旧的手机样式的文本输入方法,[Emojis-AutoKey][14] 可以通过将诸如: `:smile:` 之类的短语转换为它们等价的表情符号来轻松插入。 + +这是我设置的一个小脚本,该脚本进入 Tmux 的复制模式,以将前一行中的第一个单词复制到粘贴缓冲区中: + +``` +from time import sleep + +# 发送 Tmux 命令前缀(b 更改为 s) +keyboard.send_keys("+s") +# Enter copy mode +keyboard.send_key("[") +sleep(0.01) +# Move cursor up one line +keyboard.send_keys("k") +sleep(0.01) +# Move cursor to start of line +keyboard.send_keys("0") +sleep(0.01) +# Start mark +keyboard.send_keys(" ") +sleep(0.01) +# Move cursor to end of word +keyboard.send_keys("e") +sleep(0.01) +# Add to copy buffer +keyboard.send_keys("+m") +``` + +之所以有 `sleep` 函数,是因为 Tmux 有时无法跟上 AutoKey 发送击键的速度,并且它们对整体执行时间的影响可忽略不计。 + +### 使用 AutoKey 自动化 + +我希望你喜欢这篇使用 AutoKey 进行键盘自动化的探索,它为你提供了有关如何改善工作流程的一些好主意。如果你在使用 AutoKey 时有什么有用的或新颖的方法,一定要在下面的评论中分享。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-autokey + +作者:[Matt Bargenquast][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mbargenquast +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux_keyboard_desktop.png?itok=I2nGw78_ (Linux keys on the keyboard for a desktop computer) +[2]: https://github.com/autokey/autokey +[3]: https://github.com/autokey/autokey/wiki/Installing +[4]: https://www.gtk.org/ +[5]: https://www.qt.io/ +[6]: https://opensource.com/sites/default/files/uploads/autokey-defaults.png (AutoKey UI) +[7]: https://creativecommons.org/licenses/by-sa/4.0/ +[8]: https://opensource.com/sites/default/files/uploads/startautokey.png (Automatically start AutoKey at login) +[9]: https://opensource.com/sites/default/files/uploads/autokey-set_abbreviation.png (Set abbreviation in AutoKey) +[10]: https://opensource.com/sites/default/files/uploads/autokey-window_filter.png (AutoKey Window Filter) +[11]: https://opensource.com/article/19/7/bash-aliases +[12]: https://autokey.github.io/index.html +[13]: https://github.com/luziferius/autokey_scripts +[14]: https://github.com/AlienKevin/Emojis-AutoKey diff --git a/published/202104/20210210 How to Add Fingerprint Login in Ubuntu and Other Linux Distributions.md b/published/202104/20210210 How to Add Fingerprint Login in Ubuntu and Other Linux Distributions.md new file mode 100644 index 0000000000..19bf109db5 --- /dev/null +++ b/published/202104/20210210 How to Add Fingerprint Login in Ubuntu and Other Linux Distributions.md @@ -0,0 +1,103 @@ +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13337-1.html) +[#]: subject: (How to Add Fingerprint Login in Ubuntu and Other Linux Distributions) +[#]: via: (https://itsfoss.com/fingerprint-login-ubuntu/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) + +如何在 Ubuntu 中添加指纹登录 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/26/191530msmenm3ges3kgyet.jpg) + +现在很多高端笔记本都配备了指纹识别器。Windows 和 macOS 支持指纹登录已经有一段时间了。在桌面 Linux 中,对指纹登录的支持更多需要极客的调整,但 [GNOME][1] 和 [KDE][2] 已经开始通过系统设置来支持它。 + +这意味着在新的 Linux 发行版上,你可以轻松使用指纹识别。在这里我将在 Ubuntu 中启用指纹登录,但你也可以在其他运行 GNOME 3.38 的发行版上使用这些步骤。 + +> **前提条件** +> +> 当然,这是显而易见的。你的电脑必须有一个指纹识别器。 +> +> 这个方法适用于任何运行 GNOME 3.38 或更高版本的 Linux 发行版。如果你不确定,你可以[检查你使用的桌面环境版本][3]。 +> +> KDE 5.21 也有一个指纹管理器。当然,截图看起来会有所不同。 + +### 在 Ubuntu 和其他 Linux 发行版中添加指纹登录功能 + +进入 “设置”,然后点击左边栏的 “用户”。你应该可以看到系统中所有的用户账号。你会看到几个选项,包括 “指纹登录”。 + +点击启用这里的指纹登录选项。 + +![Enable fingerprint login in Ubuntu][4] + +它将立即要求你扫描一个新的指纹。当你点击 “+” 号来添加指纹时,它会提供一些预定义的选项,这样你就可以很容易地识别出它是哪根手指或拇指。 + +当然,你可以点击右手食指但扫描左手拇指,不过我看不出你有什么好的理由要这么做。 + +![Adding fingerprint][5] + +在添加指纹时,请按照指示旋转你的手指或拇指。 + +![Rotate your finger][6] + +系统登记了整个手指后,就会给你一个绿色的信号,表示已经添加了指纹。 + +![Fingerprint successfully added][7] + +如果你想马上测试一下,在 Ubuntu 中按 `Super+L` 快捷键锁定屏幕,然后使用指纹进行登录。 + +![Login With Fingerprint in Ubuntu][8] + +#### 在 Ubuntu 上使用指纹登录的经验 + +指纹登录顾名思义就是使用你的指纹来登录系统。就是这样。当要求对需要 `sudo` 访问的程序进行认证时,你不能使用手指。它不能代替你的密码。 + +还有一件事。指纹登录可以让你登录,但当系统要求输入 `sudo` 密码时,你不能用手指。Ubuntu 中的 [钥匙环][9] 也仍然是锁定的。 + +另一件烦人的事情是因为 GNOME 的 GDM 登录界面。当你登录时,你必须先点击你的账户才能进入密码界面。你在这可以使用手指。如果能省去先点击用户帐户 ID 的麻烦就更好了。 + +我还注意到,指纹识别没有 Windows 中那么流畅和快速。不过,它可以使用。 + +如果你对 Linux 上的指纹登录有些失望,你可以禁用它。让我在下一节告诉你步骤。 + +### 禁用指纹登录 + +禁用指纹登录和最初启用指纹登录差不多。 + +进入 “设置→用户”,然后点击指纹登录选项。它会显示一个有添加更多指纹或删除现有指纹的页面。你需要删除现有的指纹。 + +![Disable Fingerprint Login][10] + +指纹登录确实有一些好处,特别是对于我这种懒人来说。我不用每次锁屏时输入密码,我也对这种有限的使用感到满意。 + +用 [PAM][11] 启用指纹解锁 `sudo` 应该不是完全不可能。我记得我 [在 Ubuntu 中设置脸部解锁][12]时,也可以用于 `sudo`。看看以后的版本是否会增加这个功能吧。 + +你有带指纹识别器的笔记本吗?你是否经常使用它,或者它只是你不关心的东西之一? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/fingerprint-login-ubuntu/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://www.gnome.org/ +[2]: https://kde.org/ +[3]: https://itsfoss.com/find-desktop-environment/ +[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/enable-fingerprint-ubuntu.png?resize=800%2C607&ssl=1 +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/adding-fingerprint-login-ubuntu.png?resize=800%2C496&ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/adding-fingerprint-ubuntu-linux.png?resize=800%2C603&ssl=1 +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/fingerprint-added-ubuntu.png?resize=797%2C510&ssl=1 +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/02/login-with-fingerprint-ubuntu.jpg?resize=800%2C320&ssl=1 +[9]: https://itsfoss.com/ubuntu-keyring/ +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/02/disable-fingerprint-login.png?resize=798%2C524&ssl=1 +[11]: https://tldp.org/HOWTO/User-Authentication-HOWTO/x115.html +[12]: https://itsfoss.com/face-unlock-ubuntu/ diff --git a/published/202104/20210222 5 benefits of choosing Linux.md b/published/202104/20210222 5 benefits of choosing Linux.md new file mode 100644 index 0000000000..df05f65e43 --- /dev/null +++ b/published/202104/20210222 5 benefits of choosing Linux.md @@ -0,0 +1,68 @@ +[#]: collector: (lujun9972) +[#]: translator: (max27149) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13284-1.html) +[#]: subject: (5 benefits of choosing Linux) +[#]: via: (https://opensource.com/article/21/2/linux-choice) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +选择 Linux 的五大好处 +====== + +> Linux 的一大优点是多样化选择,选择激发了用户之间自由分享想法和解决方案。Linux 将如何激发你为这个社区做出贡献呢? + +![](https://img.linux.net.cn/data/attachment/album/202104/10/131305ei6yyuyujui9fkkr.jpg) + +到了 2021 年,人​​们比以往任何时候都更有理由喜欢 Linux。在本系列中,我将分享 21 个使用 Linux 的理由。本文讨论选择 Linux 带来的好处。 + +_选择_ 是 Linux 中被误解最深的特性之一。这种误解从可被选择的 Linux 发行版数量就开始了。Distrowatch.org 报告了数百种可用的和活跃的 Linux 发行版。当然,在这些发行版当中,许多都是业余爱好项目或者针对某些晦涩需求的特别版。因为是开源的,所以实际上,任何人都可以“重新设计”或“重新混搭”现有的 Linux 发行版,赋予一个新名称,提供一个新的默认墙纸,然后称其为自己的作品。尽管这些修改似乎微不足道,但我认为这显示了 Linux 的一些特别之处。 + +### 灵感 + +Linux 似乎一直在启迪着人们,从了解它的那一刻起,到创造出自己的版本。 + +有数十家公司花费数百万美元来从他们自己的产品中获取灵感。商业技术广告试着强硬地说服你,只要你购买某种产品,你就会与所关心的人建立更多的联系,更具创造力、更加充满活力。这些广告用 4k 视频拍摄,焦点柔和,并在欢快振奋的音乐节奏下播放,试图说服人们不仅购买而且还要支持和宣传该公司的产品。 + +当然,Linux 基本没有营销预算,因为 Linux 是个形形色色的大集合,*没有固定实体*。然而,当人们发现它的存在时候,他们似乎就被启发着去构建属于自己的版本。 + +灵感的数量很难量化,但是它显然很有价值,要不然那些公司不会花钱来尝试创造灵感。 + +### 革新 + +灵感,无论给它标价有多难,它都因它的生产创造而有价值。许多 Linux 用户受启发来为各种奇怪问题定制解决方案。我们解决的大多数问题,对于其他大部分人而言,似乎微不足道:也许你使用 [Seeed 微控制器][2] 来监控番茄植株土壤的水分含量;或者你使用脚本来搜索 Python 软件包的索引,因为你总是会忘记每天导入的库的名称;或者设置了自动清理下载文件夹,因为将文件图标拖进回收站这个活儿干太多了。不管你在使用 Linux 的过程中,为自己解决过什么问题,都是这个平台包含的特性之一,你被这个正在运行中的开放的技术所启发,使其更好地服务于你自己。 + +### 开放策略 + +诚然,不论是灵感,还是创新,都不能算 Linux 独有的属性。其他平台也确实让我们激发灵感,我们也以或大或小的方式进行创新。运算能力已在很大程度上拉平了操作系统的竞争领域,你在一个操作系统上可以完成的任何事,在另一个操作系统上或许都能找到对应的方法来完成。 + +但是,许多用户发现,Linux 操作系统保留了坚定的开放策略,当你尝试可能无人想到过的尝试时,Linux 不会阻挡你。这种情况不会也不可能发生在专有的操作系统上,因为无法进入系统层级的某些区域,因为它们本身就是被设计为不开放源码的。有各种独断的封锁。当你完全按照操作系统的期望进行操作时,你不会碰到那些看不见的墙,但是当你心里想着要做一些只对你有意义的事情的时候,你的系统环境可能变得无从适应。 + +### 小小的选择,大大的意义 + +并非所有创新都是大的或重要的,但总的来说,它们带来的变化并不小。如今,数百万用户的那些疯狂想法在 Linux 的各个部分中愈发显现。它们存在于 KDE 或 GNOME 桌面的工作方式中,存在于 [31 种不同的文本编辑器][3] 中 —— 每一种都有人喜爱,存在于不计其数的浏览器插件和多媒体应用程序中,存在于文件系统和扩展属性中,以及数以百万行计的 Linux 内核代码中。而且,如果上述功能中的哪怕仅其中一项,能让你每天额外节省下一小时时间,陪家人、朋友或用在自己的业余爱好上,那么按照定义,套用一句老话就是,“改变生活”。 + +### 在社区中交流 + +开源的重要组成部分之一是共享工作。共享代码是开源软件中显而易见的、普遍流行的事务,但我认为,分享,可不仅仅是在 Gitlab 做一次提交那么简单。当人们彼此分享着自己的奇思妙想,除了获得有用的代码贡献作为回报外,再无其他动机,我们都认为这是一种馈赠。这与你花钱从某公司购买软件时的感觉非常不同,甚至与得到某公司对外分享他们自己生产的开源代码时的感觉也有很大不同。开源的实质是,由全人类创造,服务于全人类。当知识和灵感可以被自由地分享时,人与人之间就建立了连接,这是市场营销活动无法复制的东西,我认为我们都认同这一点。 + +### 选择 + +Linux 并不是唯一拥有很多选择的平台。无论使用哪种操作系统,你都可以找到针对同一问题的多种解决方案,尤其是在深入研究开源软件的时候。但是,Linux 明显的选择水准指示了推动 Linux 前进的因素:诚邀协作。在 Linux 上,有些创造会很快消失,有些会在你家用电脑中保留数年 —— 即便只是执行一些不起眼的自动化任务,然而有一些则非常成功,以至于被其他系统平台借鉴并变得司空见惯。没关系,无论你在 Linux 上创作出什么,都请毫不犹豫地把它加入千奇百怪的选择之中,你永远都不知道它可能会激发到谁的灵感。 + +--- + +via: https://opensource.com/article/21/2/linux-choice + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[max27149](https://github.com/max27149) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC (Hand putting a Linux file folder into a drawer) +[2]: https://opensource.com/article/19/12/seeeduino-nano-review +[3]: https://opensource.com/article/21/1/text-editor-roundup diff --git a/published/202104/20210225 How to use the Linux anacron command.md b/published/202104/20210225 How to use the Linux anacron command.md new file mode 100644 index 0000000000..ea7e31d4fe --- /dev/null +++ b/published/202104/20210225 How to use the Linux anacron command.md @@ -0,0 +1,160 @@ +[#]: subject: (How to use the Linux anacron command) +[#]: via: (https://opensource.com/article/21/2/linux-automation) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13270-1.html) + +如何使用 Linux anacron 命令 +====== + +> 与其手动执行重复性的任务,不如让 Linux 为你做。 + +![](https://img.linux.net.cn/data/attachment/album/202104/06/084133bphrxxeolhoyqr0o.jpg) + +在 2021 年,人们有更多的理由喜欢 Linux。在这个系列中,我将分享使用 Linux 的 21 个不同理由。自动化是使用 Linux 的最佳理由之一。 + +我最喜欢 Linux 的一个原因是它愿意为我做工作。我不想执行重复性的任务,这些任务会占用我的时间,或者容易出错,或者我可能会忘记,我安排 Linux 为我做这些工作。 + +### 为自动化做准备 + +“自动化”这个词既让人望而生畏,又让人心动。我发现用模块化的方式来处理它是有帮助的。 + +#### 1、你想实现什么? + +首先,要知道你想产生什么结果。你是要给图片加水印吗?从杂乱的目录中删除文件?执行重要数据的备份?为自己明确定义任务,这样你就知道自己的目标是什么。如果有什么任务是你发现自己每天都在做的,甚至一天一次以上,那么它可能是自动化的候选者。 + +#### 2、学习你需要的应用 + +将大的任务分解成小的组件,并学习如何手动但以可重复和可预测的方式产生每个结果。在 Linux 上可以做的很多事情都可以用脚本来完成,但重要的是要认识到你当前的局限性。学习如何自动调整几张图片的大小,以便可以方便地通过电子邮件发送,与使用机器学习为你的每周通讯生成精心制作的艺术品之间有天壤之别。有的事你可以在一个下午学会,而另一件事可能要花上几年时间。然而,我们都必须从某个地方开始,所以只要从小做起,并时刻注意改进的方法。 + +#### 3、自动化 + +在 Linux 上使用一个自动化工具来定期实现它。这就是本文介绍的步骤! + +要想自动化一些东西,你需要一个脚本来自动化一个任务。在测试时,最好保持简单,所以本文自动化的任务是在 `/tmp` 目录下创建一个名为 `hello` 的文件。 + +``` +#!/bin/sh + +touch /tmp/hello +``` + +将这个简单的脚本复制并粘贴到一个文本文件中,并将其命名为 `example`。 + +### Cron + +每个安装好的 Linux 系统都会有的内置自动化解决方案就是 cron 系统。Linux 用户往往把 cron 笼统地称为你用来安排任务的方法(通常称为 “cron 作业”),但有多个应用程序可以提供 cron 的功能。最通用的是 [cronie][2];它的优点是,它不会像历史上为系统管理员设计的 cron 应用程序那样,假设你的计算机总是开着。 + +验证你的 Linux 发行版提供的是哪个 cron 系统。如果不是 cronie,你可以从发行版的软件仓库中安装 cronie。如果你的发行版没有 cronie 的软件包,你可以使用旧的 anacron 软件包来代替。`anacron` 命令是包含在 cronie 中的,所以不管你是如何获得它的,你都要确保在你的系统上有 `anacron` 命令,然后再继续。anacron 可能需要管理员 root 权限,这取决于你的设置。 + +``` +$ which anacron +/usr/sbin/anacron +``` + +anacron 的工作是确保你的自动化作业定期执行。为了做到这一点,anacron 会检查找出最后一次运行作业的时间,然后检查你告诉它运行作业的频率。 + +假设你将 anacron 设置为每五天运行一次脚本。每次你打开电脑或从睡眠中唤醒电脑时,anacron都会扫描其日志以确定是否需要运行作业。如果一个作业在五天或更久之前运行,那么 anacron 就会运行该作业。 + +### Cron 作业 + +许多 Linux 系统都捆绑了一些维护工作,让 cron 来执行。我喜欢把我的工作与系统工作分开,所以我在我的主目录中创建了一个目录。具体来说,有一个叫做 `~/.local` 的隐藏文件夹(“local” 的意思是它是为你的用户账户定制的,而不是为你的“全局”计算机系统定制的),所以我创建了子目录 `etc/cron.daily` 来作为 cron 在我的系统上的家目录。你还必须创建一个 spool 目录来跟踪上次运行作业的时间。 + +``` +$ mkdir -p ~/.local/etc/cron.daily ~/.var/spool/anacron +``` + +你可以把任何你想定期运行的脚本放到 `~/.local/etc/cron.daily` 目录中。现在把 `example` 脚本复制到目录中,然后 [用 chmod 命令使其可执行][3]。 + +``` +$ cp example ~/.local/etc/cron.daily +# chmod +x ~/.local/etc/cron.daily/example +``` + +接下来,设置 anacron 来运行位于 `~/.local/etc/cron.daily` 目录下的任何脚本。 + +### anacron + +默认情况下,cron 系统的大部分内容都被认为是系统管理员的领域,因为它通常用于重要的底层任务,如轮换日志文件和更新证书。本文演示的配置是为普通用户设置个人自动化任务而设计的。 + +要配置 anacron 来运行你的 cron 作业,请在 `/.local/etc/anacrontab` 创建一个配置文件: + +``` +SHELL=/bin/sh +PATH=/sbin:/bin:/usr/sbin:/usr/bin +1  0  cron.mine    run-parts /home/tux/.local/etc/cron.daily/ +``` + +这个文件告诉 anacron 每到新的一天(也就是每日),延迟 0 分钟后,就运行(`run-parts`)所有在 `~/.local/etc/cron.daily` 中找到的可执行脚本。有时,会使用几分钟的延迟,这样你的计算机就不会在你登录后就被所有可能的任务冲击。不过这个设置适合测试。 + +`cron.mine` 值是进程的一个任意名称。我称它为 `cron.mine`,但你也可以称它为 `cron.personal` 或 `penguin` 或任何你想要的名字。 + +验证你的 `anacrontab` 文件的语法: + +``` +$ anacron -T -t ~/.local/etc/anacrontab \ + -S /home/tux/.var/spool/anacron +``` + +沉默意味着成功。 + +### 在 .profile 中添加 anacron + +最后,你必须确保 anacron 以你的本地配置运行。因为你是以普通用户而不是 root 用户的身份运行 anacron,所以你必须将它引导到你的本地配置:告诉 anacron 要做什么的 `anacrontab` 文件,以及帮助 anacron 跟踪每一个作业最后一次执行是多少天的 spool 目录: + +``` +anacron -fn -t /home/tux/.local/etc/anacrontab \ + -S /home/tux/.var/spool/anacron +``` + +`-fn` 选项告诉 anacron *忽略* 时间戳,这意味着你强迫它无论如何都要运行你的 cron 作业。这完全是为了测试的目的。 + +### 测试你的 cron 作业 + +现在一切都设置好了,你可以测试作业了。从技术上讲,你可以在不重启的情况下进行测试,但重启是最有意义的,因为这就是设计用来处理中断和不规则的登录会话的。花点时间重启电脑、登录,然后寻找测试文件: + +``` +$ ls /tmp/hello +/tmp/hello +``` + +假设文件存在,那么你的示例脚本已经成功执行。现在你可以从 `~/.profile` 中删除测试选项,留下这个作为你的最终配置。 + +``` +anacron -t /home/tux/.local/etc/anacrontab \ + -S /home/tux/.var/spool/anacron +``` + +### 使用 anacron + +你已经配置好了你的个人自动化基础设施,所以你可以把任何你想让你的计算机替你管理的脚本放到 `~/.local/etc/cron.daily` 目录下,它就会按计划运行。 + +这取决于你希望作业运行的频率。示例脚本是每天执行一次。很明显,这取决于你的计算机在任何一天是否开机和醒着。如果你在周五使用电脑,但把它设置在周末,脚本就不会在周六和周日运行。然而,在周一,脚本会执行,因为 anacron 会知道至少有一天已经过去了。你可以在 `~/.local/etc` 中添加每周、每两周、甚至每月的目录,以安排各种各样的间隔。 + +要添加一个新的时间间隔: + + 1. 在 `~/.local/etc` 中添加一个目录(例如 `cron.weekly`)。 + 2. 在 `~/.local/etc/anacrontab` 中添加一行,以便在新目录下运行脚本。对于每周一次的间隔,其配置如下。`7 0 cron.mine run-parts /home/tux/.local/etc/cron.weekly/`(`0` 的值可以选择一些分钟数,以适当地延迟脚本的启动)。 + 3. 把你的脚本放在 `cron.weekly` 目录下。 + +欢迎来到自动化的生活方式。它不会让人感觉到,但你将会变得更有效率。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-automation + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/command_line_prompt.png?itok=wbGiJ_yg (Command line prompt) +[2]: https://github.com/cronie-crond/cronie +[3]: https://opensource.com/article/19/8/linux-chmod-command diff --git a/published/202104/20210303 5 signs you might be a Rust programmer.md b/published/202104/20210303 5 signs you might be a Rust programmer.md new file mode 100644 index 0000000000..a2e2de6079 --- /dev/null +++ b/published/202104/20210303 5 signs you might be a Rust programmer.md @@ -0,0 +1,73 @@ +[#]: subject: (5 signs you might be a Rust programmer) +[#]: via: (https://opensource.com/article/21/3/rust-programmer) +[#]: author: (Mike Bursell https://opensource.com/users/mikecamel) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13280-1.html) + +你可能是 Rust 程序员的五个迹象 +====== + +> 在我学习 Rust 的过程中,我注意到了 Rust 一族的一些常见行为。 + +![](https://img.linux.net.cn/data/attachment/album/202104/08/233233asbjasbfuiuosiha.jpg) + +我是最近才 [皈依 Rust][2] 的,我大约在是 2020 年 4 月底开始学习的。但是,像许多皈依者一样,我还是一个热情的布道者。说实话,我也不是一个很好的 Rust 人,因为我的编码风格不是很好,我写的也不是特别符合 Rust 习惯。我猜想这一方面是因为我在写大量代码之前还没有没有真正学完 Rust(其中一些代码又困扰了我),另一方面是因为我并不是那么优秀的程序员。 + +但我喜欢 Rust,你也应该喜欢吧。它很友好,比 C 或 C++ 更友好;它为低级系统任务做好了准备,这比 Python 做的更好;而且结构良好,这要超过 Perl;而且,最重要的是,从设计层面开始,它就是完全开源的,这要比 Java 那些语言好得多。 + +尽管我缺乏专业知识,但我注意到了一些我认为是许多 Rust 爱好者和程序员的共同点。如果你对以下五个迹象点头(其中第一个迹象是由最近的一些令人兴奋的新闻引发的),那么你也可能是一个 Rust 程序员。 + +### 1、“基金会”一词会使你兴奋 + +对于 Rust 程序员来说,“基金会”一词将不再与艾萨克·阿西莫夫Isaac Asimov关联在一起,而是与新成立的 [Rust 基金会][3] 关联。微软、华为、谷歌、AWS 和Mozilla 为该基金会提供了董事(大概也提供了大部分初始资金),该基金会将负责该语言的各个方面,“预示着 Rust 成为企业生产级技术的到来”,[根据临时执行董事][4] Ashley Williams 说。(顺便说一句,很高兴看到一位女士领导这样一项重大的行业计划。) + +该基金会似乎致力于维护 Rust 的理念,并确保每个人都有参与的机会。在许多方面,Rust 都是开源项目的典型示例。并不是说它是完美的(无论是语言还是社区),而是因为似乎有足够的爱好者致力于维护高参与度、低门槛的社区方式,我认为这是许多开源项目的核心。我强烈欢迎此举,我认为这只会帮助促进 Rust 在未来数年和数月内的采用和成熟。 + +### 2、你会因为新闻源中提到 Rust 游戏而感到沮丧 + +还有一款和电脑有关的东西,也叫做“Rust”,它是一款“只限多玩家生存类的电子游戏”。它比 Rust 这个语言更新一些(2013 年宣布,2018 年发布),但我曾经在搜索 Rust 相关的内容时,犯了一个错误,用这个名字搜索了游戏。互联网络就是这样的,这意味着我的新闻源现在被这个另类的 Rust 野兽感染了,我现在会从它的影迷和公关人员那里随机得到一些更新消息。这是个低调的烦恼,但我很确定在 Rust(语言)社区中并不是就我一个人这样。我强烈建议,如果你确实想了解更多关于这个计算世界的后起之秀的信息,你可以使用一个提高隐私(我拒绝说 "保护隐私")的 [开源浏览器][5] 来进行研究。 + +### 3、“不安全”这个词会让你感到恐惧。 + +Rust(语言,再次强调)在帮助你做**正确的事情**™方面做得非常好,当然,在内存安全方面,这是 C 和 C++ 内部的主要关注点(不是因为不可能做到,而是因为真的很难持续正确)。Dave Herman 在 2016 年写了一篇文章《[Safety is Rust's fireflower][6]》,讲述了为什么安全是 Rust 语言的一个积极属性。安全性(内存、类型安全)可能并不赏心悦目,但随着你写的 Rust 越多,你就会习惯并感激它,尤其是当你参与任何系统编程时,这也是 Rust 经常擅长的地方。 + +现在,Rust 并不能阻止你做**错误的事情**™,但它确实通过让你使用 `unsafe` 关键字,让你在希望超出安全边界的时候做出一个明智的决定。这不仅对你有好处,因为它(希望)会让你非常、非常仔细地思考你在任何使用它的代码块中放入了什么;它对任何阅读你的代码的人也有好处,这是一个触发词,它能让任何不太清醒的 Rust 人至少可以稍微打起精神,在椅子上坐直,然后想:“嗯,这里发生了什么?我需要特别注意。”如果幸运的话,读你代码的人也许能想到重写它的方法,使它利用到 Rust 的安全特性,或者至少减少提交和发布的不安全代码的数量。 + +### 4、你想知道为什么没有 `?;`、`{:?}` 、`::<>` 这样的表情符号 + +人们喜欢(或讨厌)涡轮鱼(`::<>`),但在 Rust 代码中你经常还会看到其他的语义结构。特别是 `{:?}` (用于字符串格式化)和 `?;`(`?` 是向调用栈传播错误的一种方式,`;` 则是行/块的结束符,所以你经常会看到它们在一起)。它们在 Rust 代码中很常见,你只需边走边学,边走边解析,而且它们也很有用,我有时会想,为什么它们没有被纳入到正常对话中,至少可以作为表情符号。可能还有其他的。你有什么建议? + +### 5、Clippy 是你的朋友(而不是一个动画回形针) + +微软的动画回形针 Clippy 可能是 Office 用户很快就觉得讨厌的“功能”,并成为许多 [模因][7] 的起点。另一方面,`cargo clippy` 是那些 [很棒的 Cargo 命令][8] 之一,应该成为每个 Rust 程序员工具箱的一部分。Clippy 是一个语言整洁器Linter,它可以帮助改进你的代码,使它更干净、更整洁、更易读、更惯用,让你与同事或其他人分享 Rust 代码时,不会感到尴尬。Cargo 可以说是让 “Clippy” 这个名字恢复了声誉,虽然我不会选择给我的孩子起这个名字,但现在每当我在网络上遇到这个词的时候,我不会再有一种不安的感觉。 + +* * * + +这篇文章最初发表在 [Alice, Eve, and Bob] [9]上,经作者许可转载。 + + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/rust-programmer + +作者:[Mike Bursell][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mikecamel +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/EDU_OSDC_IntroOS_520x292_FINAL.png?itok=woiZamgj (name tag that says hello my name is open source) +[2]: https://opensource.com/article/20/6/why-rust +[3]: https://foundation.rust-lang.org/ +[4]: https://foundation.rust-lang.org/posts/2021-02-08-hello-world/ +[5]: https://opensource.com/article/19/7/open-source-browsers +[6]: https://www.thefeedbackloop.xyz/safety-is-rusts-fireflower/ +[7]: https://knowyourmeme.com/memes/clippy +[8]: https://opensource.com/article/20/11/commands-rusts-cargo +[9]: https://aliceevebob.com/2021/02/09/5-signs-that-you-may-be-a-rust-programmer/ diff --git a/published/202104/20210308 Cast your Android device with a Raspberry Pi.md b/published/202104/20210308 Cast your Android device with a Raspberry Pi.md new file mode 100644 index 0000000000..b41dd7f427 --- /dev/null +++ b/published/202104/20210308 Cast your Android device with a Raspberry Pi.md @@ -0,0 +1,141 @@ +[#]: subject: (Cast your Android device with a Raspberry Pi) +[#]: via: (https://opensource.com/article/21/3/android-raspberry-pi) +[#]: author: (Sudeshna Sur https://opensource.com/users/sudeshna-sur) +[#]: collector: (lujun9972) +[#]: translator: (ShuyRoy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13314-1.html) + +将你的安卓手机屏幕投射到 Linux +====== + +> 使用 Scrcpy 可以把你的手机屏幕变成一个“应用”,与在树莓派或任何其他基于 Linux 的设备上的应用一起运行。 + +![](https://img.linux.net.cn/data/attachment/album/202104/20/162346alpbh85xz26xcb5h.jpg) + +要远离我们日常使用的电子产品是很难的。在熙熙攘攘的现代生活中,我想确保我不会错过手机屏幕上弹出的来自朋友和家人的重要信息。我也很忙,不希望迷失在令人分心的事情中,但是拿起手机并且回复信息往往会使我分心。 + +更糟糕的是,有很多的设备。幸运地是,大多数的设备(从功能强大的笔记本电脑到甚至不起眼的树莓派)都可以运行 Linux。因为它们运行的是 Linux,所以我为一种设置找到的解决方案几乎都适用于其他设备。 + +### 普遍适用 + +我想要一种无论我使用什么屏幕,都能统一我生活中不同来源的数据的方法。 + +我决定通过把手机屏幕复制到电脑上来解决这个问题。本质上,我把手机变成了一个“应用”,可以和我所有的其他程序运行在一起。这有助于我将注意力集中在桌面上,防止我走神,并使我更容易回复紧急通知。 + +听起来有吸引力吗?你也可以这样做。 + +### 设置 Scrcpy + +[Scrcpy][2] 俗称屏幕复制(Screen Copy),是一个开源的屏幕镜像工具,它可以在 Linux、Windows 或者 macOS 上显示和控制安卓设备。安卓设备和计算机之间的通信主要是通过 USB 连接和安卓调试桥Android Debug Bridge(ADB)。它使用 TCP/IP,且不需要 root 权限访问。 + +Scrcpy 的设置和配置非常简单。如果你正在运行 Fedora,你可以从 COPR 仓库安装它: + +``` +$ sudo dnf copr enable zeno/scrcpy +$ sudo dnf install scrcpy -y +``` + +在 Debian 或者 Ubuntu 上: + +``` +$ sudo apt install scrcpy +``` + +你也可以自己编译 Scrcpy。即使是在树莓派上,按照 [Scrcpy 的 GitHub 主页][3] 上的说明来构建也不需要很长时间。 + +### 设置手机 + +Scrcpy 安装好后,你必须启用 USB 调试并授权每个设备(你的树莓派、笔记本电脑或者工作站)为受信任的控制器。 + +打开安卓上的“设置”应用程序。如果“开发者选项”没有被激活,按照安卓的 [说明来解锁它][4]。 + +接下来,启用“USB 调试”。 + +![Enable USB Debugging option][5] + +然后通过 USB 将手机连接到你的树莓派或者笔记本电脑(或者你正在使用的任何设备),如果可以选择的话,将模式设置为 [PTP][7]。如果你的手机不能使用 PTP,将你的手机设置为用于传输文件的模式(而不是,作为一个叠接tethering或者 MIDI 设备)。 + +你的手机可能会提示你授权你的电脑,这是通过它的 RSA 指纹进行识别的。你只需要在你第一次连接的时候操作即可,在之后你的手机会识别并信任你的计算机。 + +使用 `lsusb` 命令确认设置: + +``` +$ lsusb +Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub +Bus 011 Device 004: ID 046d:c21d Logitech, Inc. F310 Gamepad +Bus 005 Device 005: ID 0951:1666 Kingston Technology DataTraveler G4 +Bus 005 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub +Bus 004 Device 001: ID 18d1:4ee6 Google Inc. Nexus/Pixel Device (PTP + debug) +Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub +Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub +Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub +``` + +然后执行 `scrcpy` 以默认设置运行。 + +![Scrcpy running on a Raspberry Pi][8] + +性能和响应能力取决于你使用什么设备来控制你的手机。在树莓派派上,一些动画可能会变慢,甚至有时候会响应滞后。Scrcpy 提供了一个简单的解决办法:降低 Scrcpy 显示图像的位速率和分辨率使得你的计算机能够容易显示动画。使用以下命令来实现: + +``` +$ scrcpy --bit-rate 1M --max-size 800 +``` + +尝试不同的值来找到一个适合你的值。为了使键入更方便,在选定一个命令之后,可以考虑 [创建自己的 Bash 别名][9]。 + +### 剪断连线 + +Scrcpy 开始运行后,你甚至可以通过 WiFi 连接你的手机和计算机。Scrcpy 安装过程也会安装 `adb`,它是一个与安卓设备通信的命令。Scrcpy 也可以使用这个命令与你的设备通信,`adb` 可以通过 TCP/IP 连接。 + +![Scrcpy running on a computer][10] + +要尝试的话,请确保你的手机通过 WiFi 连在与你的计算机所使用的相同的无线网络上。依然不要断开你的手机与 USB 的连接! + +接下来,通过手机中的“设置”,选择“关于手机”来获取你手机的 IP 地址。查看“状态”选项来获得你的地址。它通常是 192.168 或者 10 开头。 + +或者,你也可以使用 `adb` 来获得你手机的IP地址: + +``` +$ adb shell ip route | awk '{print $9}' + +To connect to your device over WiFi, you must enable TCP/IP connections. This, you must do through the adb command: +$ adb tcpip 5555 +Now you can disconnect your mobile from USB. +Whenever you want to connect over WiFi, first connect to the mobile with the command adb connect. For instance, assuming my mobile's IP address is 10.1.1.22, the command is: +$ adb connect 10.1.1.22:5555 +``` + +连接好之后,你就可以像往常一样运行 Scrcpy 了。 + +### 远程控制 + +Scrcpy 很容易使用。你可以在终端或者 [一个图形界面应用][11] 中尝试它。 + +你是否在使用其它的屏幕镜像工具?如果有的话,请在评论中告诉我们吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/android-raspberry-pi + +作者:[Sudeshna Sur][a] +选题:[lujun9972][b] +译者:[ShuyRoy](https://github.com/ShuyRoy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/sudeshna-sur +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/idea_innovation_mobile_phone.png?itok=RqVtvxkd (A person looking at a phone) +[2]: https://github.com/Genymobile/scrcpy +[3]: https://github.com/Genymobile/scrcpy/blob/master/BUILD.md +[4]: https://developer.android.com/studio/debug/dev-options +[5]: https://opensource.com/sites/default/files/uploads/usb-debugging.jpg (Enable USB Debugging option) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://en.wikipedia.org/wiki/Picture_Transfer_Protocol +[8]: https://opensource.com/sites/default/files/uploads/scrcpy-pi.jpg (Scrcpy running on a Raspberry Pi) +[9]: https://opensource.com/article/19/7/bash-aliases +[10]: https://opensource.com/sites/default/files/uploads/ssur-desktop.png (Scrcpy running on a computer) +[11]: https://opensource.com/article/19/9/mirror-android-screen-guiscrcpy diff --git a/published/202104/20210317 My favorite open source project management tools.md b/published/202104/20210317 My favorite open source project management tools.md new file mode 100644 index 0000000000..e52c2a9a92 --- /dev/null +++ b/published/202104/20210317 My favorite open source project management tools.md @@ -0,0 +1,167 @@ +[#]: subject: (My favorite open source project management tools) +[#]: via: (https://opensource.com/article/21/3/open-source-project-management) +[#]: author: (Frank Bergmann https://opensource.com/users/fraber) +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13344-1.html) + +我最喜欢的开源项目管理工具 +====== + +> 如果你要管理大型复杂的项目,请尝试利用开源选择替换 MS-Project。 + +![](https://img.linux.net.cn/data/attachment/album/202104/29/145942py6qcc3lz1dyt1s6.jpg) + +诸如建造卫星、开发机器人或推出新产品之类的项目都是昂贵的,涉及不同的提供商,并且包含必须跟踪的硬依赖性。 + +大型项目领域中的项目管理方法非常简单(至少在理论上如此)。你可以创建项目计划并将其拆分为较小的部分,直到你可以合理地将成本、持续时间、资源和依赖性分配给各种活动。一旦项目计划获得负责人的批准,你就可以使用它来跟踪项目的执行情况。在时间轴上绘制项目的所有活动将产生一个称为[甘特图][2]Gantt chart的条形图。 + +甘特图一直被用于 [瀑布项目方法][3],也可以用于敏捷方法。例如,大型项目可能将甘特图用于 Scrum 冲刺,而忽略其他像用户需求这样的细节,从而嵌入敏捷阶段。其他大型项目可能包括多个产品版本(例如,最低可行产品 [MVP]、第二版本、第三版本等)。在这种情况下,上层结构是一种敏捷方法,而每个阶段都计划为甘特图,以处理预算和复杂的依赖关系。 + +### 项目管理工具 + +不夸张地说,有数百种现成的工具使用甘特图管理大型项目,而 MS-Project 可能是最受欢迎的工具。它是微软办公软件家族的一部分,可支持到成千上万的活动,并且有大量的功能,支持几乎所有可以想象到的管理项目进度的方式。对于 MS-Project,有时候你并不知道什么更昂贵:是软件许可证还是该工具的培训课程。 + +另一个缺点是 MS-Project 是一个独立的桌面应用程序,只有一个人可以更新进度表。如果要多个用户进行协作,则需要购买微软 Project 服务器、Web 版的 Project 或 Planner 的许可证。 + +幸运的是,专有工具还有开源的替代品,包括本文中提及的应用程序。所有这些都是开源的,并且包括基于资源和依赖项的分层活动调度的甘特图。ProjectLibre、GanttProject 和 TaskJuggler 都针对单个项目经理的桌面应用程序。ProjeQtOr 和 Redmine 是用于项目团队的 Web 应用程序,而 ]project-open[ 是用于管理整个组织的 Web 应用程序。 + +我根据一个单用户计划和对一个大型项目的跟踪评估了这些工具。我的评估标准包括甘特图编辑器功能、Windows/Linux/macOS 上的可用性、可扩展性、导入/导出和报告。(背景披露:我是 ]project-open[ 的创始人,我在多个开源社区中活跃了很多年。此列表包括我们的产品,因此我的观点可能有偏见,但我尝试着眼于每个产品的最佳功能。) + +### Redmine 4.1.0 + +![Redmine][4] + +[Redmine][6] 是一个基于 Web 的专注于敏捷方法论的项目管理工具。 + +其标准安装包括一个甘特图时间轴视图,但缺少诸如调度、拖放、缩进(缩排和凸排)以及资源分配之类的基本功能。你必须单独编辑任务属性才能更改任务树的结构。 + +Redmine 具有甘特图编辑器插件,但是它们要么已经过时(例如 [Plus Gantt][7]),要么是专有的(例如 [ANKO 甘特图][8])。如果你知道其他开源的甘特图编辑器插件,请在评论中分享它们。 + +Redmine 用 Ruby on Rails 框架编写,可用于 Windows、Linux 和 macOS。其核心部分采用 GPLv2 许可证。 + + * **适合于:** 使用敏捷方法的 IT 团队。 + * **独特卖点:** 这是 OpenProject 和 EasyRedmine 的原始“上游”父项目。 + +### ]project-open[ 5.1 + +![\]project-open\[][9] + +[\]project-open\[][10] 是一个基于 Web 的项目管理系统,从整个组织的角度看类似于企业资源计划enterprise resource planning(ERP)系统。它还可以管理项目档案、预算、发票、销售、人力资源和其他功能领域。有一些不同的变体,如用于管理项目公司的专业服务自动化professional services automation(PSA)、用于管理企业战略项目的项目管理办公室project management office(PMO)和用于管理部门项目的企业项目管理enterprise project management(EPM)。 + +]project-open[ 甘特图编辑器包括按等级划分的任务、依赖关系和基于计划工作和分配资源的调度。它不支持资源日历和非人力资源。]project-open[ 系统非常复杂,其 GUI 可能需要刷新。 + +]project-open[ 是用 TCL 和 JavaScript 编写的,可用于 Windows 和 Linux。 ]project-open[ 核心采用 GPLv2 许可证,并具有适用于大公司的专有扩展。 + + * **适合于:** 需要大量财务项目报告的大中型项目组织。 + * **独特卖点:** ]project-open[ 是一个综合系统,可以运行整个项目公司或部门。 + +### ProjectLibre 1.9.3 + +![ProjectLibre][11] + +在开源世界中,[ProjectLibre][12] 可能是最接近 MS-Project 的产品。它是一个桌面应用程序,支持所有重要的项目计划功能,包括资源日历、基线和成本管理。它还允许你使用 MS-Project 的文件格式导入和导出计划。 + +ProjectLibre 非常适合计划和执行中小型项目。然而,它缺少 MS-Project 中的一些高级功能,并且它的 GUI 并不是最漂亮的。 + +ProjectLibre 用 Java 编写,可用于 Windows、Linux 和macOS,并在开源的通用公共署名许可证Common Public Attribution License(CPAL)下授权。ProjectLibre 团队目前正在开发一个名为 ProjectLibre Cloud 的 Web 产品,并采用专有许可证。 + + * **适合于:** 负责中小型项目的个人项目管理者,或者作为没有完整的 MS-Project 许可证的项目成员的查看器。 + * **独特卖点:** 这是最接近 MS-Project 的开源软件。 + +### GanttProject 2.8.11 + +![GanttProject][13] + +[GanttProject][14] 与 ProjectLibre 类似,它是一个桌面甘特图编辑器,但功能集更为有限。它不支持基线,也不支持非人力资源,并且报告功能比较有限。 + +GanttProject 是一个用 Java 编写的桌面应用程序,可在 GPLv3 许可下用于 Windows、Linux 和 macOS。 + + * **适合于:** 简单的甘特图或学习基于甘特图的项目管理技术。 + * **独特卖点:** 它支持流程评估和审阅技术program evaluation and review technique([PERT][15])图表,并使用 WebDAV 的协作。 + +### TaskJuggler 3.7.1 + +![TaskJuggler][16] + +[TaskJuggler][17] 用于在大型组织中安排多个并行项目,重点是自动解决资源分配冲突(即资源均衡)。 + +它不是交互式的甘特图编辑器,而是一个命令行工具,其工作方式类似于一个编译器:它从文本文件中读取任务列表,并生成一系列报告,这些报告根据分配的资源、依赖项、优先级和许多其他参数为每个任务提供最佳的开始和结束时间。它支持多个项目、基线、资源日历、班次和时区,并且被设计为可扩展到具有许多项目和资源的企业场景。 + +使用特定语法编写 TaskJuggler 输入文件可能超出了普通项目经理的能力。但是,你可以使用 ]project-open[ 作为 TaskJuggler 的图形前端来生成输入,包括缺勤、任务进度和记录的工作时间。当以这种方式使用时,TaskJuggler 就成为了功能强大的假设情景规划器。 + +TaskJuggler 用 Ruby 编写,并且在 GPLv2 许可证下可用于 Windows、Linux 和 macOS。 + + * **适合于:** 由真正的技术极客管理的中大型部门。 + * **独特卖点:** 它在自动资源均衡方面表现出色。 + +### ProjeQtOr 9.0.4 + +![ProjeQtOr][18] + +[ProjeQtOr][19] 是适用于 IT 项目的、基于 Web 的项目管理应用程序。除了项目、工单和活动外,它还支持风险、预算、可交付成果和财务文件,以将项目管理的许多方面集成到单个系统中。 + +ProjeQtOr 提供了一个甘特图编辑器,与 ProjectLibre 功能类似,包括按等级划分的任务、依赖关系以及基于计划工作和分配资源。但是,它不支持取值的就地编辑(例如,任务名称、估计时间等);用户必须在甘特图视图下方的输入表单中更改取值,然后保存。 + +ProjeQtOr 用 PHP 编写,并且在 Affero GPL3 许可下可用于 Windows、Linux 和 macOS。 + + * **适合于:** 跟踪项目列表的 IT 部门。 + * **独特卖点:** 让你为存储每个项目的大量信息,将所有信息保存在一个地方。 + +### 其他工具 + +对于特定的用例,以下系统可能是有效的选择,但由于各种原因,它们被排除在主列表之外。 + +![LIbrePlan][20] + + * [LibrePlan][21] 是一个基于 Web 的项目管理应用程序,专注于甘特图。由于其功能集,它本来会在上面的列表中会占主导地位,但是没有可用于最新 Linux 版本(CentOS 7 或 8)的安装。作者说,更新的说明将很快推出。 + * [dotProject][22] 是一个用 PHP 编写的基于 Web 的项目管理系统,可在 GPLv2.x 许可证下使用。它包含一个甘特图时间轴报告,但是没有编辑它的选项,并且依赖项还不起作用(它们“仅部分起作用”)。 + * [Leantime][23] 是一个基于 Web 的项目管理系统,具有漂亮的用 PHP 编写的 GUI,并且可以在 GPLv2 许可证下使用。它包括一个里程碑的甘特时间线,但没有依赖性。 + * [Orangescrum][24] 是基于 Web 的项目管理工具。甘特图图可以作为付费附件或付费订阅使用。 + * [Talaia/OpenPPM][25] 是一个基于 Web 的项目组合管理系统。但是,版本 4.6.1 仍显示“即将推出:交互式甘特图”。 + * [Odoo][26] 和 [OpenProject][27] 都将某些重要功能限制在付费企业版中。 + +在这篇评论中,目的是包括所有带有甘特图编辑器和依赖调度的开源项目管理系统。如果我错过了一个项目或误导了什么,请在评论中让我知道。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/open-source-project-management + +作者:[Frank Bergmann][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/fraber +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/kanban_trello_organize_teams_520.png?itok=ObNjCpxt (Kanban-style organization action) +[2]: https://en.wikipedia.org/wiki/Gantt_chart +[3]: https://opensource.com/article/20/3/agiles-vs-waterfall +[4]: https://opensource.com/sites/default/files/uploads/redmine.png (Redmine) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://www.redmine.org/ +[7]: https://redmine.org/plugins/plus_gantt +[8]: https://www.redmine.org/plugins/anko_gantt_chart +[9]: https://opensource.com/sites/default/files/uploads/project-open.png (]project-open[) +[10]: https://www.project-open.com +[11]: https://opensource.com/sites/default/files/uploads/projectlibre.png (ProjectLibre) +[12]: http://www.projectlibre.org +[13]: https://opensource.com/sites/default/files/uploads/ganttproject.png (GanttProject) +[14]: https://www.ganttproject.biz +[15]: https://en.wikipedia.org/wiki/Program_evaluation_and_review_technique +[16]: https://opensource.com/sites/default/files/uploads/taskjuggler.png (TaskJuggler) +[17]: https://taskjuggler.org/ +[18]: https://opensource.com/sites/default/files/uploads/projeqtor.png (ProjeQtOr) +[19]: https://www.projeqtor.org +[20]: https://opensource.com/sites/default/files/uploads/libreplan.png (LIbrePlan) +[21]: https://www.libreplan.dev/ +[22]: https://dotproject.net/ +[23]: https://leantime.io +[24]: https://orangescrum.org/ +[25]: http://en.talaia-openppm.com/ +[26]: https://odoo.com +[27]: http://openproject.org diff --git a/published/202104/20210318 Reverse Engineering a Docker Image.md b/published/202104/20210318 Reverse Engineering a Docker Image.md new file mode 100644 index 0000000000..0afe15981d --- /dev/null +++ b/published/202104/20210318 Reverse Engineering a Docker Image.md @@ -0,0 +1,287 @@ +[#]: subject: (Reverse Engineering a Docker Image) +[#]: via: (https://theartofmachinery.com/2021/03/18/reverse_engineering_a_docker_image.html) +[#]: author: (Simon Arneaud https://theartofmachinery.com) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13258-1.html) + +一次 Docker 镜像的逆向工程 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/01/215523oajrgjo77irb7nun.jpg) + +这要从一次咨询的失误说起:政府组织 A 让政府组织 B 开发一个 Web 应用程序。政府机构 B 把部分工作外包给某个人。后来,项目的托管和维护被外包给一家私人公司 C。C 公司发现,之前外包的人(已经离开很久了)构建了一个自定义的 Docker 镜像,并将其成为系统构建的依赖项,但这个人没有提交原始的 Dockerfile。C 公司有合同义务管理这个 Docker 镜像,可是他们他们没有源代码。C 公司偶尔叫我进去做各种工作,所以处理一些关于这个神秘 Docker 镜像的事情就成了我的工作。 + +幸运的是,Docker 镜像的格式比想象的透明多了。虽然还需要做一些侦查工作,但只要解剖一个镜像文件,就能发现很多东西。例如,这里有一个 [Prettier 代码格式化][1] 的镜像可供快速浏览。 + +首先,让 Docker 守护进程daemon拉取镜像,然后将镜像提取到文件中: + +``` +docker pull tmknom/prettier:2.0.5 +docker save tmknom/prettier:2.0.5 > prettier.tar +``` + +是的,该文件只是一个典型 tarball 格式的归档文件: + +``` +$ tar xvf prettier.tar +6c37da2ee7de579a0bf5495df32ba3e7807b0a42e2a02779206d165f55f1ba70/ +6c37da2ee7de579a0bf5495df32ba3e7807b0a42e2a02779206d165f55f1ba70/VERSION +6c37da2ee7de579a0bf5495df32ba3e7807b0a42e2a02779206d165f55f1ba70/json +6c37da2ee7de579a0bf5495df32ba3e7807b0a42e2a02779206d165f55f1ba70/layer.tar +88f38be28f05f38dba94ce0c1328ebe2b963b65848ab96594f8172a9c3b0f25b.json +a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/ +a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/VERSION +a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/json +a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/layer.tar +d4f612de5397f1fc91272cfbad245b89eac8fa4ad9f0fc10a40ffbb54a356cb4/ +d4f612de5397f1fc91272cfbad245b89eac8fa4ad9f0fc10a40ffbb54a356cb4/VERSION +d4f612de5397f1fc91272cfbad245b89eac8fa4ad9f0fc10a40ffbb54a356cb4/json +d4f612de5397f1fc91272cfbad245b89eac8fa4ad9f0fc10a40ffbb54a356cb4/layer.tar +manifest.json +repositories +``` + +如你所见,Docker 在命名时经常使用哈希hash。我们看看 `manifest.json`。它是以难以阅读的压缩 JSON 写的,不过 [JSON 瑞士军刀 jq][2] 可以很好地打印 JSON: + +``` +$ jq . manifest.json +[ + { + "Config": "88f38be28f05f38dba94ce0c1328ebe2b963b65848ab96594f8172a9c3b0f25b.json", + "RepoTags": [ + "tmknom/prettier:2.0.5" + ], + "Layers": [ + "a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/layer.tar", + "d4f612de5397f1fc91272cfbad245b89eac8fa4ad9f0fc10a40ffbb54a356cb4/layer.tar", + "6c37da2ee7de579a0bf5495df32ba3e7807b0a42e2a02779206d165f55f1ba70/layer.tar" + ] + } +] +``` + +请注意,这三个Layer对应三个以哈希命名的目录。我们以后再看。现在,让我们看看 `Config` 键指向的 JSON 文件。它有点长,所以我只在这里转储第一部分: + +``` +$ jq . 88f38be28f05f38dba94ce0c1328ebe2b963b65848ab96594f8172a9c3b0f25b.json | head -n 20 +{ + "architecture": "amd64", + "config": { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Cmd": [ + "--help" + ], + "ArgsEscaped": true, + "Image": "sha256:93e72874b338c1e0734025e1d8ebe259d4f16265dc2840f88c4c754e1c01ba0a", +``` + +最重要的是 `history` 列表,它列出了镜像中的每一层。Docker 镜像由这些层堆叠而成。Dockerfile 中几乎每条命令都会变成一个层,描述该命令对镜像所做的更改。如果你执行 `RUN script.sh` 命令创建了 `really_big_file`,然后用 `RUN rm really_big_file` 命令删除文件,Docker 镜像实际生成两层:一个包含 `really_big_file`,一个包含 `.wh.really_big_file` 记录来删除它。整个镜像文件大小不变。这就是为什么你会经常看到像 `RUN script.sh && rm really_big_file` 这样的 Dockerfile 命令链接在一起——它保障所有更改都合并到一层中。 + +以下是该 Docker 镜像中记录的所有层。注意,大多数层不改变文件系统镜像,并且 `empty_layer` 标记为 `true`。以下只有三个层是非空的,与我们之前描述的相符。 + +``` +$ jq .history 88f38be28f05f38dba94ce0c1328ebe2b963b65848ab96594f8172a9c3b0f25b.json +[ + { + "created": "2020-04-24T01:05:03.608058404Z", + "created_by": "/bin/sh -c #(nop) ADD file:b91adb67b670d3a6ff9463e48b7def903ed516be66fc4282d22c53e41512be49 in / " + }, + { + "created": "2020-04-24T01:05:03.92860976Z", + "created_by": "/bin/sh -c #(nop) CMD [\"/bin/sh\"]", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:06.617130538Z", + "created_by": "/bin/sh -c #(nop) ARG BUILD_DATE", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:07.020521808Z", + "created_by": "/bin/sh -c #(nop) ARG VCS_REF", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:07.36915054Z", + "created_by": "/bin/sh -c #(nop) ARG VERSION", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:07.708820086Z", + "created_by": "/bin/sh -c #(nop) ARG REPO_NAME", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:08.06429638Z", + "created_by": "/bin/sh -c #(nop) LABEL org.label-schema.vendor=tmknom org.label-schema.name=tmknom/prettier org.label-schema.description=Prettier is an opinionated code formatter. org.label-schema.build-date=2020-04-29T06:34:01Z org +.label-schema.version=2.0.5 org.label-schema.vcs-ref=35d2587 org.label-schema.vcs-url=https://github.com/tmknom/prettier org.label-schema.usage=https://github.com/tmknom/prettier/blob/master/README.md#usage org.label-schema.docker.cmd=do +cker run --rm -v $PWD:/work tmknom/prettier --parser=markdown --write '**/*.md' org.label-schema.schema-version=1.0", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:08.511269907Z", + "created_by": "/bin/sh -c #(nop) ARG NODEJS_VERSION=12.15.0-r1", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:08.775876657Z", + "created_by": "/bin/sh -c #(nop) ARG PRETTIER_VERSION", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:26.399622951Z", + "created_by": "|6 BUILD_DATE=2020-04-29T06:34:01Z NODEJS_VERSION=12.15.0-r1 PRETTIER_VERSION=2.0.5 REPO_NAME=tmknom/prettier VCS_REF=35d2587 VERSION=2.0.5 /bin/sh -c set -x && apk add --no-cache nodejs=${NODEJS_VERSION} nodejs-np +m=${NODEJS_VERSION} && npm install -g prettier@${PRETTIER_VERSION} && npm cache clean --force && apk del nodejs-npm" + }, + { + "created": "2020-04-29T06:34:26.764034848Z", + "created_by": "/bin/sh -c #(nop) WORKDIR /work" + }, + { + "created": "2020-04-29T06:34:27.092671047Z", + "created_by": "/bin/sh -c #(nop) ENTRYPOINT [\"/usr/bin/prettier\"]", + "empty_layer": true + }, + { + "created": "2020-04-29T06:34:27.406606712Z", + "created_by": "/bin/sh -c #(nop) CMD [\"--help\"]", + "empty_layer": true + } +] +``` + +太棒了!所有的命令都在 `created_by` 字段中,我们几乎可以用这些命令重建 Dockerfile。但不是完全可以。最上面的 `ADD` 命令实际上没有给我们需要添加的文件。`COPY` 命令也没有全部信息。我们还失去了 `FROM` 语句,因为它们扩展成了从基础 Docker 镜像继承的所有层。 + +我们可以通过查看时间戳timestamp,按 Dockerfile 对层进行分组。大多数层的时间戳相差不到一分钟,代表每一层构建所需的时间。但是前两层是 `2020-04-24`,其余的是 `2020-04-29`。这是因为前两层来自一个基础 Docker 镜像。理想情况下,我们可以找出一个 `FROM` 命令来获得这个镜像,这样我们就有了一个可维护的 Dockerfile。 + +`manifest.json` 展示第一个非空层是 `a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/layer.tar`。让我们看看它: + +``` +$ cd a9cc4ace48cd792ef888ade20810f82f6c24aaf2436f30337a2a712cd054dc97/ +$ tar tf layer.tf | head +bin/ +bin/arch +bin/ash +bin/base64 +bin/bbconfig +bin/busybox +bin/cat +bin/chgrp +bin/chmod +bin/chown +``` + +看起来它可能是一个操作系统operating system基础镜像,这也是你期望从典型 Dockerfile 中看到的。Tarball 中有 488 个条目,如果你浏览一下,就会发现一些有趣的条目: + +``` +... +dev/ +etc/ +etc/alpine-release +etc/apk/ +etc/apk/arch +etc/apk/keys/ +etc/apk/keys/alpine-devel@lists.alpinelinux.org-4a6a0840.rsa.pub +etc/apk/keys/alpine-devel@lists.alpinelinux.org-5243ef4b.rsa.pub +etc/apk/keys/alpine-devel@lists.alpinelinux.org-5261cecb.rsa.pub +etc/apk/protected_paths.d/ +etc/apk/repositories +etc/apk/world +etc/conf.d/ +... +``` + +果不其然,这是一个 [Alpine][3] 镜像,如果你注意到其他层使用 `apk` 命令安装软件包,你可能已经猜到了。让我们解压 tarball 看看: + +``` +$ mkdir files +$ cd files +$ tar xf ../layer.tar +$ ls +bin dev etc home lib media mnt opt proc root run sbin srv sys tmp usr var +$ cat etc/alpine-release +3.11.6 +``` + +如果你拉取、解压 `alpine:3.11.6`,你会发现里面有一个非空层,`layer.tar` 与 Prettier 镜像基础层中的 `layer.tar` 是一样的。 + +出于兴趣,另外两个非空层是什么?第二层是包含 Prettier 安装包的主层。它有 528 个条目,包含 Prettier、一堆依赖项和证书更新: + +``` +... +usr/lib/libuv.so.1 +usr/lib/libuv.so.1.0.0 +usr/lib/node_modules/ +usr/lib/node_modules/prettier/ +usr/lib/node_modules/prettier/LICENSE +usr/lib/node_modules/prettier/README.md +usr/lib/node_modules/prettier/bin-prettier.js +usr/lib/node_modules/prettier/doc.js +usr/lib/node_modules/prettier/index.js +usr/lib/node_modules/prettier/package.json +usr/lib/node_modules/prettier/parser-angular.js +usr/lib/node_modules/prettier/parser-babel.js +usr/lib/node_modules/prettier/parser-flow.js +usr/lib/node_modules/prettier/parser-glimmer.js +usr/lib/node_modules/prettier/parser-graphql.js +usr/lib/node_modules/prettier/parser-html.js +usr/lib/node_modules/prettier/parser-markdown.js +usr/lib/node_modules/prettier/parser-postcss.js +usr/lib/node_modules/prettier/parser-typescript.js +usr/lib/node_modules/prettier/parser-yaml.js +usr/lib/node_modules/prettier/standalone.js +usr/lib/node_modules/prettier/third-party.js +usr/local/ +usr/local/share/ +usr/local/share/ca-certificates/ +usr/sbin/ +usr/sbin/update-ca-certificates +usr/share/ +usr/share/ca-certificates/ +usr/share/ca-certificates/mozilla/ +usr/share/ca-certificates/mozilla/ACCVRAIZ1.crt +usr/share/ca-certificates/mozilla/AC_RAIZ_FNMT-RCM.crt +usr/share/ca-certificates/mozilla/Actalis_Authentication_Root_CA.crt +... +``` + +第三层由 `WORKDIR /work` 命令创建,它只包含一个条目: + +``` +$ tar tf 6c37da2ee7de579a0bf5495df32ba3e7807b0a42e2a02779206d165f55f1ba70/layer.tar +work/ +``` + +[原始 Dockerfile 在 Prettier 的 git 仓库中][4]。 + +-------------------------------------------------------------------------------- + +via: https://theartofmachinery.com/2021/03/18/reverse_engineering_a_docker_image.html + +作者:[Simon Arneaud][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://theartofmachinery.com +[b]: https://github.com/lujun9972 +[1]: https://github.com/tmknom/prettier +[2]: https://stedolan.github.io/jq/ +[3]: https://www.alpinelinux.org/ +[4]: https://github.com/tmknom/prettier/blob/35d2587ec052e880d73f73547f1ffc2b11e29597/Dockerfile diff --git a/published/202104/20210324 Read and write files with Bash.md b/published/202104/20210324 Read and write files with Bash.md new file mode 100644 index 0000000000..d4e0e2b79e --- /dev/null +++ b/published/202104/20210324 Read and write files with Bash.md @@ -0,0 +1,192 @@ +[#]: subject: (Read and write files with Bash) +[#]: via: (https://opensource.com/article/21/3/input-output-bash) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13259-1.html) + +用 Bash 读写文件 +====== + +> 学习 Bash 读取和写入数据的不同方式,以及何时使用每种方法。 + +![](https://img.linux.net.cn/data/attachment/album/202104/01/223653bc334ac33e5e4pwe.jpg) + +当你使用 Bash 编写脚本时,有时你需要从一个文件中读取数据或向一个文件写入数据。有时文件可能包含配置选项,而另一些时候这个文件是你的用户用你的应用创建的数据。每种语言处理这个任务的方式都有些不同,本文将演示如何使用 Bash 和其他 [POSIX][2] shell 处理数据文件。 + +### 安装 Bash + +如果你在使用 Linux,你可能已经有了 Bash。如果没有,你可以在你的软件仓库里找到它。 + +在 macOS 上,你可以使用默认终端,Bash 或 [Zsh][3],这取决于你运行的 macOS 版本。 + +在 Windows 上,有几种方法可以体验 Bash,包括微软官方支持的 [Windows Subsystem for Linux][4](WSL)。 + +安装 Bash 后,打开你最喜欢的文本编辑器并准备开始。 + +### 使用 Bash 读取文件 + +除了是 [shell][5] 之外,Bash 还是一种脚本语言。有几种方法可以从 Bash 中读取数据。你可以创建一种数据流并解析输出, 或者你可以将数据加载到内存中。这两种方法都是有效的获取信息的方法,但每种方法都有相当具体的用例。 + +#### 在 Bash 中援引文件 + +当你在 Bash 中 “援引source” 一个文件时,你会让 Bash 读取文件的内容,期望它包含有效的数据,Bash 可以将这些数据放入它建立的数据模型中。你不会想要从旧文件中援引数据,但你可以使用这种方法来读取配置文件和函数。 + +(LCTT 译注:在 Bash 中,可以通过 `source` 或 `.` 命令来将一个文件读入,这个行为称为 “sourcing”,英文原意为“一次性(试)采购”、“寻找供应商”、“获得”等,考虑到 Bash 的语境和发音,我建议可以翻译为“援引”,或有不当,供大家讨论参考 —— wxy) + +例如,创建一个名为 `example.sh` 的文件,并输入以下内容: + +``` +#!/bin/sh + +greet opensource.com + +echo "The meaning of life is $var" +``` + +运行这段代码,看见失败了: + +``` +$ bash ./example.sh +./example.sh: line 3: greet: command not found +The meaning of life is +``` + +Bash 没有一个叫 `greet` 的命令,所以无法执行那一行,也没有一个叫 `var` 的变量记录,所以文件没有意义。为了解决这个问题,建立一个名为 `include.sh` 的文件: + +``` +greet() { +    echo "Hello ${1}" +} + +var=42 +``` + +修改你的 `example.sh` 脚本,加入一个 `source` 命令: + +``` +#!/bin/sh + +source include.sh + +greet opensource.com + +echo "The meaning of life is $var" +``` + +运行脚本,可以看到工作了: + +``` +$ bash ./example.sh +Hello opensource.com +The meaning of life is 42 +``` + +`greet` 命令被带入你的 shell 环境,因为它被定义在 `include.sh` 文件中,它甚至可以识别参数(本例中的 `opensource.com`)。变量 `var` 也被设置和导入。 + +#### 在 Bash 中解析文件 + +另一种让数据“进入” Bash 的方法是将其解析为数据流。有很多方法可以做到这一点. 你可以使用 `grep` 或 `cat` 或任何可以获取数据并管道输出到标准输出的命令。另外,你可以使用 Bash 内置的东西:重定向。重定向本身并不是很有用,所以在这个例子中,我也使用内置的 `echo` 命令来打印重定向的结果: + +``` +#!/bin/sh + +echo $( < include.sh ) +``` + +将其保存为 `stream.sh` 并运行它来查看结果: + +``` +$ bash ./stream.sh +greet() { echo "Hello ${1}" } var=42 +$ +``` + +对于 `include.sh` 文件中的每一行,Bash 都会将该行打印(或 `echo`)到你的终端。先用管道把它传送到一个合适的解析器是用 Bash 读取数据的常用方法。例如, 假设 `include.sh` 是一个配置文件, 它的键和值对用一个等号(`=`)分开. 你可以用 `awk` 甚至 `cut` 来获取值: + +``` +#!/bin/sh + +myVar=`grep var include.sh | cut -d'=' -f2` + +echo $myVar +``` + +试着运行这个脚本: + +``` +$ bash ./stream.sh +42 +``` + +### 用 Bash 将数据写入文件 + +无论你是要存储用户用你的应用创建的数据,还是仅仅是关于用户在应用中做了什么的元数据(例如,游戏保存或最近播放的歌曲),都有很多很好的理由来存储数据供以后使用。在 Bash 中,你可以使用常见的 shell 重定向将数据保存到文件中。 + +例如, 要创建一个包含输出的新文件, 使用一个重定向符号: + +``` +#!/bin/sh + +TZ=UTC +date > date.txt +``` + +运行脚本几次: + +``` +$ bash ./date.sh +$ cat date.txt +Tue Feb 23 22:25:06 UTC 2021 +$ bash ./date.sh +$ cat date.txt +Tue Feb 23 22:25:12 UTC 2021 +``` + +要追加数据,使用两个重定向符号: + +``` +#!/bin/sh + +TZ=UTC +date >> date.txt +``` + +运行脚本几次: + +``` +$ bash ./date.sh +$ bash ./date.sh +$ bash ./date.sh +$ cat date.txt +Tue Feb 23 22:25:12 UTC 2021 +Tue Feb 23 22:25:17 UTC 2021 +Tue Feb 23 22:25:19 UTC 2021 +Tue Feb 23 22:25:22 UTC 2021 +``` + +### Bash 轻松编程 + +Bash 的优势在于简单易学,因为只需要一些基本的概念,你就可以构建复杂的程序。完整的文档请参考 GNU.org 上的 [优秀的 Bash 文档][6]。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/input-output-bash + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/bash_command_line.png?itok=k4z94W2U (bash logo on green background) +[2]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains +[3]: https://opensource.com/article/19/9/getting-started-zsh +[4]: https://opensource.com/article/19/7/ways-get-started-linux#wsl +[5]: https://www.redhat.com/sysadmin/terminals-shells-consoles +[6]: http://gnu.org/software/bash diff --git a/published/202104/20210325 Plausible- Privacy-Focused Google Analytics Alternative.md b/published/202104/20210325 Plausible- Privacy-Focused Google Analytics Alternative.md new file mode 100644 index 0000000000..7b97f5144e --- /dev/null +++ b/published/202104/20210325 Plausible- Privacy-Focused Google Analytics Alternative.md @@ -0,0 +1,94 @@ +[#]: subject: (Plausible: Privacy-Focused Google Analytics Alternative) +[#]: via: (https://itsfoss.com/plausible/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13283-1.html) + +Plausible:注重隐私的 Google Analytics 替代方案 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/10/110720jc8hckngaqr6wch1.jpg) + +[Plausible][1]是一款简单的、对隐私友好的分析工具。它可以帮助你分析独立访客数量、页面浏览量、跳出率和访问时间。 + +如果你有一个网站,你可能会理解这些术语。作为一个网站所有者,它可以帮助你了解你的网站是否随着时间的推移获得更多的访问者,流量来自哪里,如果你对这些事情有一定的了解,你可以努力改进你的网站,以获得更多的访问量。 + +说到网站分析,统治这个领域的一个服务就是谷歌的免费工具 Google Analytics。就像 Google 是事实上的搜索引擎一样,Google Analytics 是事实上的分析工具。但你不必再忍受它,尤其是当你无法信任大科技公司使用你和你的网站访问者的数据的时候。 + +Plausible 让你摆脱 Google Analytics 的束缚,我将在本文中讨论这个开源项目。 + +请注意,如果你从来没有管理过网站或对分析感兴趣,文章中的一些技术术语可能对你来说是陌生的。 + +### Plausible 是隐私友好的网站分析工具 + +Plausible 使用的分析脚本是非常轻量级的,大小不到 1KB。 + +其重点在于保护隐私,因此你可以在不影响访客隐私的情况下获得有价值且可操作的统计数据。Plausible 是为数不多的不需要 cookie 横幅或 GDP 同意的分析工具之一,因为它在隐私方面已经符合 [GDPR 标准][2]。这是超级酷的。 + +在功能上,它没有 Google Analytics 那样的粒度和细节。Plausible 靠的是简单。它显示的是你过去 30 天的流量统计图。你也可以切换到实时视图。 + +![][3] + +你还可以看到你的流量来自哪里,以及你网站上的哪些页面访问量最大。来源也可以显示 UTM 活动。 + +![][4] + +你还可以选择启用 GeoIP 来了解网站访问者的地理位置。你还可以检查有多少访问者使用桌面或移动设备访问你的网站。还有一个操作系统的选项,正如你所看到的,[Linux Handbook][5] 有 48% 的访问者来自 Windows 设备。很奇怪,对吧? + +![][6] + +显然,提供的数据与 Google Analytics 的数据相差甚远,但这是有意为之。Plausible 意图是为你提供简单的模式。 + +### 使用 Plausible:选择付费托管或在你的服务器上自行托管 + +使用 Plausible 有两种方式:注册他们的官方托管服务。你必须为这项服务付费,这最终会帮助 Plausible 项目的发展。它们有 30 天的试用期,甚至不需要你这边提供任何支付信息。 + +定价从每月 1 万页浏览量 6 美元开始。价格会随着页面浏览量的增加而增加。你可以在 Plausible 网站上计算价格。 + +- [Plausible 价格][7] + +你可以试用 30 天,看看你是否愿意向 Plausible 开发者支付服务费用,并拥有你的数据。 + +如果你觉得定价不合理,你可以利用 Plausible 是开源的优势,自己部署。如果你有兴趣,请阅读我们的 [使用 Docker 自助托管 Plausible 实例的深度指南][8]。 + +我们自行托管 Plausible。我们的 Plausible 实例添加了我们的三个网站。 + +![Plausble dashboard for It’s FOSS websites][9] + +如果你维护一个开源项目的网站,并且想使用 Plausible,你可以通过我们的 [High on Cloud 项目][10] 联系我们。通过 High on Cloud,我们帮助小企业在其服务器上托管和使用开源软件。 + +### 总结 + +如果你不是超级痴迷于数据,只是想快速了解网站的表现,Plausible 是一个不错的选择。我喜欢它,因为它是轻量级的,而且遵守隐私。这也是我在 Linux Handbook,我们 [教授 Linux 服务器相关的门户网站][11] 上使用它的主要原因。 + +总的来说,我对 Plausible 相当满意,并向其他网站所有者推荐它。 + +你也经营或管理一个网站吗?你是用什么工具来做分析,还是根本不关心这个? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/plausible/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://plausible.io/ +[2]: https://gdpr.eu/compliance/ +[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/plausible-graph-lhb.png?resize=800%2C395&ssl=1 +[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/plausible-stats-lhb-2.png?resize=800%2C333&ssl=1 +[5]: https://linuxhandbook.com/ +[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/plausible-geo-ip-stats.png?resize=800%2C331&ssl=1 +[7]: https://plausible.io/#pricing +[8]: https://linuxhandbook.com/plausible-deployment-guide/ +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/plausible-analytics-for-itsfoss.png?resize=800%2C231&ssl=1 +[10]: https://highoncloud.com/ +[11]: https://linuxhandbook.com/about/#ethical-web-portal diff --git a/published/202104/20210326 How to read and write files in C.md b/published/202104/20210326 How to read and write files in C.md new file mode 100644 index 0000000000..721eda3db0 --- /dev/null +++ b/published/202104/20210326 How to read and write files in C.md @@ -0,0 +1,140 @@ +[#]: subject: (How to read and write files in C++) +[#]: via: (https://opensource.com/article/21/3/ccc-input-output) +[#]: author: (Stephan Avenwedde https://opensource.com/users/hansic99) +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13263-1.html) + +如何用 C++ 读写文件 +====== + +> 如果你知道如何在 C++ 中使用输入输出(I/O)流,那么(原则上)你便能够处理任何类型的输入输出设备。 + +![](https://img.linux.net.cn/data/attachment/album/202104/02/224507a2fq6ofotf4ff4rf.jpg) + +在 C++ 中,对文件的读写可以通过使用输入输出流与流运算符 `>>` 和 `<<` 来进行。当读写文件的时候,这些运算符被应用于代表硬盘驱动器上文件类的实例上。这种基于流的方法有个巨大的优势:从 C++ 的角度,无论你要读取或写入的内容是文件、数据库、控制台,亦或是你通过网络连接的另外一台电脑,这都无关紧要。因此,知道如何使用流运算符来写入文件能够被转用到其他领域。 + +### 输入输出流类 + +C++ 标准库提供了 [ios_base][2] 类。该类作为所有 I/O 流的基类,例如 [basic_ofstream][3] 和 [basic_ifstream][4]。本例将使用读/写字符的专用类型 `ifstream` 和 `ofstream`。 + +- `ofstream`:输出文件流,并且其能通过插入运算符 `<<` 来实现。 +- `ifstream`:输入文件流,并且其能通过提取运算符 `>>` 来实现。 + +该两种类型都是在头文件 `` 中所定义。 + +从 `ios_base` 继承的类在写入时可被视为数据接收器,在从其读取时可被视为数据源,与数据本身完全分离。这种面向对象的方法使 [关注点分离][5]separation of concerns[依赖注入][6]dependency injection 等概念易于实现。 + +### 一个简单的例子 + +本例程是非常简单:实例化了一个 `ofstream` 来写入,和实例化一个 `ifstream` 来读取。 + +``` +#include // cout, cin, cerr etc... +#include // ifstream, ofstream +#include + + +int main() +{ + std::string sFilename = "MyFile.txt"; + + /****************************************** + * * + * WRITING * + * * + ******************************************/ + + std::ofstream fileSink(sFilename); // Creates an output file stream + + if (!fileSink) { + std::cerr << "Canot open " << sFilename << std::endl; + exit(-1); + } + + /* std::endl will automatically append the correct EOL */ + fileSink << "Hello Open Source World!" << std::endl; + + + /****************************************** + * * + * READING * + * * + ******************************************/ + + std::ifstream fileSource(sFilename); // Creates an input file stream + + if (!fileSource) { + std::cerr << "Canot open " << sFilename << std::endl; + exit(-1); + } + else { + // Intermediate buffer + std::string buffer; + + // By default, the >> operator reads word by workd (till whitespace) + while (fileSource >> buffer) + { + std::cout << buffer << std::endl; + } + } + + exit(0); +} +``` + +该代码可以在 [GitHub][7] 上查看。当你编译并且执行它时,你应该能获得以下输出: + +![Console screenshot][8] + +这是个简化的、适合初学者的例子。如果你想去使用该代码在你自己的应用中,请注意以下几点: + + * 文件流在程序结束的时候自动关闭。如果你想继续执行,那么应该通过调用 `close()` 方法手动关闭。 + * 这些文件流类继承自 [basic_ios][10](在多个层次上),并且重载了 `!` 运算符。这使你可以进行简单的检查是否可以访问该流。在 [cppreference.com][11] 上,你可以找到该检查何时会(或不会)成功的概述,并且可以进一步实现错误处理。 + * 默认情况下,`ifstream` 停在空白处并跳过它。要逐行读取直到到达 [EOF][13] ,请使用 `getline(...)` 方法。 + * 为了读写二进制文件,请将 `std::ios::binary` 标志传递给构造函数:这样可以防止 [EOL][13] 字符附加到每一行。 + +### 从系统角度进行写入 + +写入文件时,数据将写入系统的内存写入缓冲区中。当系统收到系统调用 [sync][14] 时,此缓冲区的内容将被写入硬盘。这也是你在不告知系统的情况下,不要卸下 U 盘的原因。通常,守护进程会定期调用 `sync`。为了安全起见,也可以手动调用 `sync()`: + + +``` +#include // needs to be included + +sync(); +``` + +### 总结 + +在 C++ 中读写文件并不那么复杂。更何况,如果你知道如何处理输入输出流,(原则上)那么你也知道如何处理任何类型的输入输出设备。对于各种输入输出设备的库能让你更容易地使用流运算符。这就是为什么知道输入输出流的流程会对你有所助益的原因。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/ccc-input-output + +作者:[Stephan Avenwedde][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_screen_windows_files.png?itok=kLTeQUbY "Computer screen with files or windows open" +[2]: https://en.cppreference.com/w/cpp/io/ios_base +[3]: https://en.cppreference.com/w/cpp/io/basic_ofstream +[4]: https://en.cppreference.com/w/cpp/io/basic_ifstream +[5]: https://en.wikipedia.org/wiki/Separation_of_concerns +[6]: https://en.wikipedia.org/wiki/Dependency_injection +[7]: https://github.com/hANSIc99/cpp_input_output +[8]: https://opensource.com/sites/default/files/uploads/c_console_screenshot.png "Console screenshot" +[9]: https://creativecommons.org/licenses/by-sa/4.0/ +[10]: https://en.cppreference.com/w/cpp/io/basic_ios +[11]: https://en.cppreference.com/w/cpp/io/basic_ios/operator! +[12]: https://en.wikipedia.org/wiki/End-of-file +[13]: https://en.wikipedia.org/wiki/Newline +[14]: https://en.wikipedia.org/wiki/Sync_%28Unix%29 diff --git a/published/202104/20210326 Why you should care about service mesh.md b/published/202104/20210326 Why you should care about service mesh.md new file mode 100644 index 0000000000..9e387a2342 --- /dev/null +++ b/published/202104/20210326 Why you should care about service mesh.md @@ -0,0 +1,67 @@ +[#]: subject: (Why you should care about service mesh) +[#]: via: (https://opensource.com/article/21/3/service-mesh) +[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13261-1.html) + +为什么需要关心服务网格 +====== + +> 在微服务环境中,服务网格为开发和运营提供了好处。 + +![](https://img.linux.net.cn/data/attachment/album/202104/02/201409os5r13omp5p5bssb.jpg) + +很多开发者不知道为什么要关心[服务网格][2]Service Mesh。这是我在开发者见面会、会议和实践研讨会上关于云原生架构的微服务开发的演讲中经常被问到的问题。我的回答总是一样的:“只要你想简化你的微服务架构,它就应该运行在 Kubernetes 上。” + +关于简化,你可能也想知道,为什么分布式微服务必须设计得如此复杂才能在 Kubernetes 集群上运行。正如本文所解释的那样,许多开发人员通过服务网格解决了微服务架构的复杂性,并通过在生产中采用服务网格获得了额外的好处。 + +### 什么是服务网格? + +服务网格是一个专门的基础设施层,用于提供一个透明的、独立于代码的 (polyglot) 方式,以消除应用代码中的非功能性微服务能力。 + +![Before and After Service Mesh][3] + +### 为什么服务网格对开发者很重要 + +当开发人员将微服务部署到云时,无论业务功能如何,他们都必须解决非功能性微服务功能,以避免级联故障。这些功能通常可以体现在服务发现、日志、监控、韧性resiliency、认证、弹性elasticity和跟踪等方面。开发人员必须花费更多的时间将它们添加到每个微服务中,而不是开发实际的业务逻辑,这使得微服务变得沉重而复杂。 + +随着企业加速向云计算转移,服务网格 可以提高开发人员的生产力。Kubernetes 加服务网格平台不需要让服务负责处理这些复杂的问题,也不需要在每个服务中添加更多的代码来处理云原生的问题,而是负责向运行在该平台上的任何应用(现有的或新的,用任何编程语言或框架)提供这些服务。那么微服务就可以轻量级,专注于其业务逻辑,而不是云原生的复杂性。 + +### 为什么服务网格对运维很重要 + +这并没有回答为什么运维团队需要关心在 Kubernetes 上运行云原生微服务的服务网格。因为运维团队必须确保在 Kubernetes 环境上的大型混合云和多云上部署新的云原生应用的强大安全性、合规性和可观察性。 + +服务网格由一个用于管理代理路由流量的控制平面和一个用于注入边车Sidecar的数据平面组成。边车允许运维团队做一些比如添加第三方安全工具和追踪所有服务通信中的流量,以避免安全漏洞或合规问题。服务网格还可以通过在图形面板上可视化地跟踪指标来提高观察能力。 + +### 如何开始使用服务网格 + +对于开发者和运维人员,以及从应用开发到平台运维来说,服务网格可以更有效地管理云原生功能。 + +你可能想知道从哪里开始采用服务网格来配合你的微服务应用和架构。幸运的是,有许多开源的服务网格项目。许多云服务提供商也在他们的 Kubernetes 平台中提供 服务网格。 + +![CNCF Service Mesh Landscape][5] + +你可以在 [CNCF Service Mesh Landscape][6] 页面中找到最受欢迎的服务网格项目和服务的链接。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/service-mesh + +作者:[Daniel Oh][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/daniel-oh +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/data_analytics_cloud.png?itok=eE4uIoaB (Net catching 1s and 0s or data in the clouds) +[2]: https://www.redhat.com/en/topics/microservices/what-is-a-service-mesh +[3]: https://opensource.com/sites/default/files/uploads/vm-vs-service-mesh.png (Before and After Service Mesh) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://opensource.com/sites/default/files/uploads/service-mesh-providers.png (CNCF Service Mesh Landscape) +[6]: https://landscape.cncf.io/card-mode?category=service-mesh&grouping=category diff --git a/published/202104/20210329 Manipulate data in files with Lua.md b/published/202104/20210329 Manipulate data in files with Lua.md new file mode 100644 index 0000000000..eb0bf8808b --- /dev/null +++ b/published/202104/20210329 Manipulate data in files with Lua.md @@ -0,0 +1,95 @@ +[#]: subject: (Manipulate data in files with Lua) +[#]: via: (https://opensource.com/article/21/3/lua-files) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13268-1.html) + +用 Lua 操作文件中的数据 +====== + +> 了解 Lua 如何处理数据的读写。 + +![](https://img.linux.net.cn/data/attachment/album/202104/05/102424yczwucc3xcuyzkgw.jpg) + +有些数据是临时的,存储在 RAM 中,只有在应用运行时才有意义。但有些数据是要持久的,存储在硬盘上供以后使用。当你编程时,无论是简单的脚本还是复杂的工具套件,通常都需要读取和写入文件。有时文件可能包含配置选项,而另一些时候这个文件是你的用户用你的应用创建的数据。每种语言都会以不同的方式处理这项任务,本文将演示如何使用 Lua 处理文件数据。 + +### 安装 Lua + +如果你使用的是 Linux,你可以从你的发行版软件库中安装 Lua。在 macOS 上,你可以从 [MacPorts][2] 或 [Homebrew][3] 安装 Lua。在 Windows 上,你可以从 [Chocolatey][4] 安装 Lua。 + +安装 Lua 后,打开你最喜欢的文本编辑器并准备开始。 + +### 用 Lua 读取文件 + +Lua 使用 `io` 库进行数据输入和输出。下面的例子创建了一个名为 `ingest` 的函数来从文件中读取数据,然后用 `:read` 函数进行解析。在 Lua 中打开一个文件时,有几种模式可以启用。因为我只需要从这个文件中读取数据,所以我使用 `r`(代表“读”)模式: + +``` +function ingest(file) +   local f = io.open(file, "r") +   local lines = f:read("*all") +   f:close() +   return(lines) +end + +myfile=ingest("example.txt") +print(myfile) +``` + +在这段代码中,注意到变量 `myfile` 是为了触发 `ingest` 函数而创建的,因此,它接收该函数返回的任何内容。`ingest` 函数返回文件的行数(从一个称为 `lines` 的变量中0。当最后一步打印 `myfile` 变量的内容时,文件的行数就会出现在终端中。 + +如果文件 `example.txt` 中包含了配置选项,那么我会写一些额外的代码来解析这些数据,可能会使用另一个 Lua 库,这取决于配置是以 INI 文件还是 YAML 文件或其他格式存储。如果数据是 SVG 图形,我会写额外的代码来解析 XML,可能会使用 Lua 的 SVG 库。换句话说,你的代码读取的数据一旦加载到内存中,就可以进行操作,但是它们都需要加载 `io` 库。 + +### 用 Lua 将数据写入文件 + +无论你是要存储用户用你的应用创建的数据,还是仅仅是关于用户在应用中做了什么的元数据(例如,游戏保存或最近播放的歌曲),都有很多很好的理由来存储数据供以后使用。在 Lua 中,这是通过 `io` 库实现的,打开一个文件,将数据写入其中,然后关闭文件: + +``` +function exgest(file) +   local f = io.open(file, "a") +   io.output(f) +   io.write("hello world\n") +   io.close(f) +end + +exgest("example.txt") +``` + +为了从文件中读取数据,我以 `r` 模式打开文件,但这次我使用 `a` (用于”追加“)将数据写到文件的末尾。因为我是将纯文本写入文件,所以我添加了自己的换行符(`/n`)。通常情况下,你并不是将原始文本写入文件,你可能会使用一个额外的库来代替写入一个特定的格式。例如,你可能会使用 INI 或 YAML 库来帮助编写配置文件,使用 XML 库来编写 XML,等等。 + +### 文件模式 + +在 Lua 中打开文件时,有一些保护措施和参数来定义如何处理文件。默认值是 `r`,允许你只读数据: + + * `r` 只读 + * `w` 如果文件不存在,覆盖或创建一个新文件。 + * `r+` 读取和覆盖。 + * `a` 追加数据到文件中,或在文件不存在的情况下创建一个新文件。 + * `a+` 读取数据,将数据追加到文件中,或文件不存在的话,创建一个新文件。 + +还有一些其他的(例如,`b` 代表二进制格式),但这些是最常见的。关于完整的文档,请参考 [Lua.org/manual][5] 上的优秀 Lua 文档。 + +### Lua 和文件 + +和其他编程语言一样,Lua 有大量的库支持来访问文件系统来读写数据。因为 Lua 有一个一致且简单语法,所以很容易对任何格式的文件数据进行复杂的处理。试着在你的下一个软件项目中使用 Lua,或者作为 C 或 C++ 项目的 API。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/lua-files + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/data_metrics_analytics_desktop_laptop.png?itok=9QXd7AUr (Person standing in front of a giant computer screen with numbers, data) +[2]: https://opensource.com/article/20/11/macports +[3]: https://opensource.com/article/20/6/homebrew-mac +[4]: https://opensource.com/article/20/3/chocolatey +[5]: http://lua.org/manual diff --git a/published/202104/20210329 Why I love using the IPython shell and Jupyter notebooks.md b/published/202104/20210329 Why I love using the IPython shell and Jupyter notebooks.md new file mode 100644 index 0000000000..269735322f --- /dev/null +++ b/published/202104/20210329 Why I love using the IPython shell and Jupyter notebooks.md @@ -0,0 +1,157 @@ +[#]: subject: (Why I love using the IPython shell and Jupyter notebooks) +[#]: via: (https://opensource.com/article/21/3/ipython-shell-jupyter-notebooks) +[#]: author: (Ben Nuttall https://opensource.com/users/bennuttall) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13277-1.html) + +为什么我喜欢使用 IPython shell 和 Jupyter 笔记本 +====== + +> Jupyter 笔记本将 IPython shell 提升到一个新的高度。 + +![](https://img.linux.net.cn/data/attachment/album/202104/08/125206uvglkoqzukhfk3uv.jpg) + +Jupyter 项目最初是以 IPython 和 IPython 笔记本的形式出现的。它最初是一个专门针对 Python 的交互式 shell 和笔记本环境,后来扩展为不分语言的环境,支持 Julia、Python 和 R 以及其他任何语言。 + +![Jupyter][2] + +IPython 是一个 Python shell,类似于你在命令行输入 `python` 或者 `python3` 时看到的,但它更聪明、更有用。如果你曾经在 Python shell 中输入过多行命令,并且想重复它,你就会理解每次都要一行一行地滚动浏览历史记录的挫败感。有了 IPython,你可以一次滚动浏览整个块,同时还可以逐行浏览和编辑这些块的部分内容。 + +![iPython][4] + +它具有自动补全,并提供上下文感知的建议: + +![iPython offers suggestions][5] + +它默认会整理输出: + +![iPython pretty prints][6] + +它甚至允许你运行 shell 命令: + +![IPython shell commands][7] + +它还提供了一些有用的功能,比如将 `?` 添加到对象中,作为运行 `help()` 的快捷方式,而不会破坏你的流程: + +![IPython help][8] + +如果你使用的是虚拟环境(参见我关于 [virtualenvwrapper][9] 的帖子),可以在环境中用 `pip` 安装: + +``` +pip install ipython +``` + +要在全系统范围内安装,你可以在 Debian、Ubuntu 或树莓派上使用 `apt`: + +``` +sudo apt install ipython3 +``` + +或使用 `pip`: + +``` +sudo pip3 install ipython +``` + +### Jupyter 笔记本 + +Jupyter 笔记本将 IPython shell 提升到了一个新的高度。首先,它们是基于浏览器的,而不是基于终端的。要开始使用,请安装 `jupyter`。 + +如果你使用的是虚拟环境,请在环境中使用 `pip` 进行安装: + +``` +pip install jupyter +``` + +要在全系统范围内安装,你可以在 Debian、Ubuntu 或树莓派上使用 `apt`: + +``` +sudo apt install jupyter-notebook +``` + +或使用 `pip`: + +``` +sudo pip3 install jupyter +``` + +启动笔记本: + +``` +jupyter notebook +``` + +这将在你的浏览器中打开: + +![Jupyter Notebook][10] + +你可以使用 “New” 下拉菜单创建一个新的 Python 3 笔记本: + +![Python 3 in Jupyter Notebook][11] + +现在你可以在 `In[ ]` 字段中编写和执行命令。使用 `Enter` 在代码块中换行,使用 `Shift+Enter` 来执行: + +![Executing commands in Jupyter][12] + +你可以编辑和重新运行代码块,你可以重新排序、删除,复制/粘贴,等等。你可以以任何顺序运行代码块,但是要注意的是,任何创建的变量的作用域都将根据执行的时间而不是它们在笔记本中出现的顺序。你可以在 “Kernel” 菜单中重启并清除输出或重启并运行所有的代码块。 + +使用 `print` 函数每次都会输出。但是如果你有一条没有分配的语句,或者最后一条语句没有分配,那么它总是会输出: + +![Jupyter output][13] + +你甚至可以把 `In` 和 `Out` 作为可索引对象: + +![Jupyter output][14] + +所有的 IPython 功能都可以使用,而且通常也会表现得更漂亮一些: + +![Jupyter supports IPython features][15] + +你甚至可以使用 [Matplotlib][16] 进行内联绘图: + +![Graphing in Jupyter Notebook][17] + +最后,你可以保存你的笔记本,并将其包含在 Git 仓库中,如果你将其推送到 GitHub,它们将作为已完成的笔记本被渲染:输出、图形和所有一切(如 [本例][18]): + +![Saving Notebook to GitHub][19] + +* * * + +本文原载于 Ben Nuttall 的 [Tooling Tuesday 博客][20],经许可后重用。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/ipython-shell-jupyter-notebooks + +作者:[Ben Nuttall][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/bennuttall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_space_graphic_cosmic.png?itok=wu493YbB (Computer laptop in space) +[2]: https://opensource.com/sites/default/files/uploads/jupyterpreview.png (Jupyter) +[3]: https://creativecommons.org/licenses/by-sa/4.0/ +[4]: https://opensource.com/sites/default/files/uploads/ipython-loop.png (iPython) +[5]: https://opensource.com/sites/default/files/uploads/ipython-suggest.png (iPython offers suggestions) +[6]: https://opensource.com/sites/default/files/uploads/ipython-pprint.png (iPython pretty prints) +[7]: https://opensource.com/sites/default/files/uploads/ipython-ls.png (IPython shell commands) +[8]: https://opensource.com/sites/default/files/uploads/ipython-help.png (IPython help) +[9]: https://opensource.com/article/21/2/python-virtualenvwrapper +[10]: https://opensource.com/sites/default/files/uploads/jupyter-notebook-1.png (Jupyter Notebook) +[11]: https://opensource.com/sites/default/files/uploads/jupyter-python-notebook.png (Python 3 in Jupyter Notebook) +[12]: https://opensource.com/sites/default/files/uploads/jupyter-loop.png (Executing commands in Jupyter) +[13]: https://opensource.com/sites/default/files/uploads/jupyter-cells.png (Jupyter output) +[14]: https://opensource.com/sites/default/files/uploads/jupyter-cells-2.png (Jupyter output) +[15]: https://opensource.com/sites/default/files/uploads/jupyter-help.png (Jupyter supports IPython features) +[16]: https://matplotlib.org/ +[17]: https://opensource.com/sites/default/files/uploads/jupyter-graph.png (Graphing in Jupyter Notebook) +[18]: https://github.com/piwheels/stats/blob/master/2020.ipynb +[19]: https://opensource.com/sites/default/files/uploads/savenotebooks.png (Saving Notebook to GitHub) +[20]: https://tooling.bennuttall.com/the-ipython-shell-and-jupyter-notebooks/ diff --git a/published/202104/20210330 NewsFlash- A Modern Open-Source Feed Reader With Feedly Support.md b/published/202104/20210330 NewsFlash- A Modern Open-Source Feed Reader With Feedly Support.md new file mode 100644 index 0000000000..11f3c7231c --- /dev/null +++ b/published/202104/20210330 NewsFlash- A Modern Open-Source Feed Reader With Feedly Support.md @@ -0,0 +1,98 @@ +[#]: subject: (NewsFlash: A Modern Open-Source Feed Reader With Feedly Support) +[#]: via: (https://itsfoss.com/newsflash-feedreader/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13264-1.html) + +NewsFlash: 一款支持 Feedly 的现代开源 Feed 阅读器 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/03/001037r2udx6u6xqu5sqzu.jpg) + +有些人可能认为 RSS 阅读器已经不再,但它们仍然坚持在这里,特别是当你不想让大科技算法来决定你应该阅读什么的时候。Feed 阅读器可以帮你自助选择阅读来源。 + +我最近遇到一个很棒的 RSS 阅读器 NewsFlash。它支持通过基于网页的 Feed 阅读器增加 feed,例如 [Feedly][1] 和 NewsBlur。这是一个很大的安慰,因为如果你已经使用这种服务,就不必人工导入 feed,这节省了你的工作。 + +NewsFlash 恰好是 [FeedReadeer][2] 的精神继承者,原来的 FeedReader 开发人员也参与其中。 + +如果你正在找适用的 RSS 阅读器,我们整理了 [Linux Feed 阅读器][3] 列表供您参考。 + +### NewsFlash: 一款补充网页 RSS 阅读器账户的 Feed 阅读器 + +![][4] + +请注意,NewsFlash 并不只是针对基于网页的 RSS feed 账户量身定做的,你也可以选择使用本地 RSS feed,而不必在多设备间同步。 + +不过,如果你在用是任何一款支持的基于网页的 feed 阅读器,那么 NewsFlash 特别有用。 + +这里,我将重点介绍 NewsFlash 提供的一些功能。 + +### NewsFlash 功能 + +![][5] + + * 支持桌面通知 + * 快速搜索、过滤 + * 支持标签 + * 便捷、可重定义的键盘快捷键 + * 本地 feed + * OPML 文件导入/导出 + * 无需注册即可在 Feedly 库中轻松找到不同 RSS Feed + * 支持自定义字体 + * 支持多主题(包括深色主题) + * 启动/禁止缩略图 + * 细粒度调整定期同步间隔时间 + * 支持基于网页的 Feed 账户,例如 Feedly、Fever、NewsBlur、feedbin、Miniflux + +除上述功能外,当你调整窗口大小时,还可以打开阅读器视图,这是一个细腻的补充功能。 + +![newsflash 截图1][6] + +账户重新设置也很容易,这将删除所有本地数据。是的,你可以手动清除缓存并设置到期时间,并为你关注的所有 feed 设置一个用户数据存在本地的到期时间。 + +### 在 Linux 上安装 NewsFlash + +你无法找到适用于各种 Linux 发行版的官方软件包,只有 [Flatpak][8]。 + +对于 Arch 用户,可以从 [AUR][9] 下载。 + +幸运的是,[Flatpak][10] 软件包可以让你轻松在 Linux 发行版上安装 NewsFlash。具体请参阅我们的 [Flatpak 指南][11]。 + +你可以参考 NewsFlash 的 [GitLab 页面][12] 去解决大部分问题。 + +### 结束语 + +我现在用 NewsFlash 作为桌面本地解决方案,不用基于网页的服务。你可以通过直接导出 OPML 文件在移动 feed 应用上得到相同的 feed。这已经被我验证过了。 + +用户界面易于使用,也提供了数一数二的新版 UX。虽然这个 RSS 阅读器看似简单,但提供了你可以找到的所有重要功能。 + +你怎么看 NewsFlash?你喜欢用其他类似产品吗?欢迎在评论区中分享你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/newsflash-feedreader/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://feedly.com/ +[2]: https://jangernert.github.io/FeedReader/ +[3]: https://itsfoss.com/feed-reader-apps-linux/ +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/newsflash.jpg?resize=945%2C648&ssl=1 +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/newsflash-screenshot.jpg?resize=800%2C533&ssl=1 +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/newsflash-screenshot-1.jpg?resize=800%2C532&ssl=1 +[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2018/04/best-feed-reader-apps-linux.jpg?fit=800%2C450&ssl=1 +[8]: https://flathub.org/apps/details/com.gitlab.newsflash +[9]: https://itsfoss.com/aur-arch-linux/ +[10]: https://itsfoss.com/what-is-flatpak/ +[11]: https://itsfoss.com/flatpak-guide/ +[12]: https://gitlab.com/news-flash/news_flash_gtk diff --git a/published/202104/20210331 3 reasons I use the Git cherry-pick command.md b/published/202104/20210331 3 reasons I use the Git cherry-pick command.md new file mode 100644 index 0000000000..5f87ecc61e --- /dev/null +++ b/published/202104/20210331 3 reasons I use the Git cherry-pick command.md @@ -0,0 +1,181 @@ +[#]: subject: (3 reasons I use the Git cherry-pick command) +[#]: via: (https://opensource.com/article/21/3/git-cherry-pick) +[#]: author: (Manaswini Das https://opensource.com/users/manaswinidas) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13305-1.html) + +我使用 Git cherry-pick 命令的 3 个理由 +====== + +> “遴选”可以解决 Git 仓库中的很多问题。以下是用 `git cherry-pick` 修复错误的三种方法。 + +![](https://img.linux.net.cn/data/attachment/album/202104/17/174429qw1im6if6mf6zi9i.jpg) + +在版本控制系统中摸索前进是一件很棘手的事情。对于一个新手来说,这可能是非常难以应付的,但熟悉版本控制系统(如 Git)的术语和基础知识是开始为开源贡献的第一步。 + +熟悉 Git 也能帮助你在开源之路上走出困境。Git 功能强大,让你感觉自己在掌控之中 —— 没有哪一种方法会让你无法恢复到工作版本。 + +这里有一个例子可以帮助你理解“遴选cherry-pick”的重要性。假设你已经在一个分支上做了好几个提交,但你意识到这是个错误的分支!你现在该怎么办?你现在要做什么?要么在正确的分支上重复所有的变更,然后重新提交,要么把这个分支合并到正确的分支上。等一下,前者太过繁琐,而你可能不想做后者。那么,还有没有办法呢?有的,Git 已经为你准备好了。这就是“遴选”的作用。顾名思义,你可以用它从一个分支中手工遴选一个提交,然后转移到另一个分支。 + +使用遴选的原因有很多。以下是其中的三个原因。 + +### 避免重复性工作 + +如果你可以直接将相同的提交复制到另一个分支,就没有必要在不同的分支中重做相同的变更。请注意,遴选出来的提交会在另一个分支中创建带有新哈希的新提交,所以如果你看到不同的提交哈希,请不要感到困惑。 + +如果您想知道什么是提交的哈希,以及它是如何生成的,这里有一个说明可以帮助你。提交哈希是用 [SHA-1][2] 算法生成的字符串。SHA-1 算法接收一个输入,然后输出一个唯一的 40 个字符的哈希值。如果你使用的是 [POSIX][3] 系统,请尝试在您的终端上运行这个命令: + +``` +$ echo -n "commit" | openssl sha1 +``` + +这将输出一个唯一的 40 个字符的哈希值 `4015b57a143aec5156fd1444a017a32137a3fd0f`。这个哈希代表了字符串 `commit`。 + +Git 在提交时生成的 SHA-1 哈希值不仅仅代表一个字符串。它代表的是: + +``` +sha1( +    meta data +        commit message +        committer +        commit date +        author +        authoring date +    Hash of the entire tree object +) +``` + +这就解释了为什么你对代码所做的任何细微改动都会得到一个独特的提交哈希值。哪怕是一个微小的改动都会被发现。这是因为 Git 具有完整性。 + +### 撤销/恢复丢失的更改 + +当你想恢复到工作版本时,遴选就很方便。当多个开发人员在同一个代码库上工作时,很可能会丢失更改,最新的版本会被转移到一个陈旧的或非工作版本上。这时,遴选提交到工作版本就可以成为救星。 + +#### 它是如何工作的? + +假设有两个分支:`feature1` 和 `feature2`,你想把 `feature1` 中的提交应用到 `feature2`。 + +在 `feature1` 分支上,运行 `git log` 命令,复制你想遴选的提交哈希值。你可以看到一系列类似于下面代码示例的提交。`commit` 后面的字母数字代码就是你需要复制的提交哈希。为了方便起见,您可以选择复制前六个字符(本例中为 `966cf3`)。 + +``` +commit 966cf3d08b09a2da3f2f58c0818baa37184c9778 (HEAD -> master) +Author: manaswinidas +Date: Mon Mar 8 09:20:21 2021 +1300 + + add instructions +``` + +然后切换到 `feature2` 分支,在刚刚从日志中得到的哈希值上运行 `git cherry-pick`: + +``` +$ git checkout feature2 +$ git cherry-pick 966cf3. +``` + +如果该分支不存在,使用 `git checkout -b feature2` 来创建它。 + +这里有一个问题。你可能会遇到下面这种情况: + +``` +$ git cherry-pick 966cf3 +On branch feature2 +You are currently cherry-picking commit 966cf3d. + +nothing to commit, working tree clean +The previous cherry-pick is now empty, possibly due to conflict resolution. +If you wish to commit it anyway, use: + +   git commit --allow-empty + +Otherwise, please use 'git reset' +``` + +不要惊慌。只要按照建议运行 `git commit --allow-empty`: + +``` +$ git commit --allow-empty +[feature2 afb6fcb] add instructions +Date: Mon Mar 8 09:20:21 2021 +1300 +``` + +这将打开你的默认编辑器,允许你编辑提交信息。如果你没有什么要补充的,可以保存现有的信息。 + +就这样,你完成了你的第一次遴选。如上所述,如果你在分支 `feature2` 上运行 `git log`,你会看到一个不同的提交哈希。下面是一个例子: + +``` +commit afb6fcb87083c8f41089cad58deb97a5380cb2c2 (HEAD -> feature2) +Author: manaswinidas <[me@example.com][4]> +Date:   Mon Mar 8 09:20:21 2021 +1300 +   add instructions +``` + +不要对不同的提交哈希感到困惑。这只是区分 `feature1` 和 `feature2` 的提交。 + +### 遴选多个提交 + +但如果你想遴选多个提交的内容呢?你可以使用: + +``` +git cherry-pick ... +``` + +请注意,你不必使用整个提交的哈希值,你可以使用前五到六个字符。 + +同样,这也是很繁琐的。如果你想遴选的提交是一系列的连续提交呢?这种方法太费劲了。别担心,有一个更简单的方法。 + +假设你有两个分支: + + * `feature1` 包括你想复制的提交(从更早的 `commitA` 到 `commitB`)。 + * `feature2` 是你想把提交从 `feature1` 转移到的分支。 + +然后: + + 1. 输入 `git checkout `。 + 2. 获取 `commitA` 和 `commitB` 的哈希值。 + 3. 输入 `git checkout `。 + 4. 输入 `git cherry-pick ^..` (请注意,这包括 `commitA` 和 `commitB`)。 + 5. 如果遇到合并冲突,[像往常一样解决][5],然后输入 `git cherry-pick --continue` 恢复遴选过程。 + +### 重要的遴选选项 + +以下是 [Git 文档][6] 中的一些有用的选项,你可以在 `cherry-pick` 命令中使用。 + + * `-e`、`--edit`:用这个选项,`git cherry-pick` 可以让你在提交前编辑提交信息。 + * `-s`、`--signoff`:在提交信息的结尾添加 `Signed-off by` 行。更多信息请参见 `git-commit(1)` 中的 signoff 选项。 + * `-S[]`、`--pgg-sign[=]`:这些是 GPG 签名的提交。`keyid` 参数是可选的,默认为提交者身份;如果指定了,则必须嵌在选项中,不加空格。 + * `--ff`:如果当前 HEAD 与遴选的提交的父级提交相同,则会对该提交进行快进操作。 + +下面是除了 `--continue` 外的一些其他的后继操作子命令: + + * `--quit`:你可以忘记当前正在进行的操作。这可以用来清除遴选或撤销失败后的后继操作状态。 + * `--abort`:取消操作并返回到操作序列前状态。 + +下面是一些关于遴选的例子: + + * `git cherry-pick master`:应用 `master` 分支顶端的提交所引入的变更,并创建一个包含该变更的新提交。 + * `git cherry-pick master~4 master~2':应用 `master` 指向的第五个和第三个最新提交所带来的变化,并根据这些变化创建两个新的提交。 + +感到不知所措?你不需要记住所有的命令。你可以随时在你的终端输入 `git cherry-pick --help` 查看更多选项或帮助。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/git-cherry-pick + +作者:[Manaswini Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/manaswinidas +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/pictures/cherry-picking-recipe-baking-cooking.jpg?itok=XVwse6hw (Measuring and baking a cherry pie recipe) +[2]: https://en.wikipedia.org/wiki/SHA-1 +[3]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains +[4]: mailto:me@example.com +[5]: https://opensource.com/article/20/4/git-merge-conflict +[6]: https://git-scm.com/docs/git-cherry-pick diff --git a/published/202104/20210331 Use this open source tool to monitor variables in Python.md b/published/202104/20210331 Use this open source tool to monitor variables in Python.md new file mode 100644 index 0000000000..6349b1fe3c --- /dev/null +++ b/published/202104/20210331 Use this open source tool to monitor variables in Python.md @@ -0,0 +1,169 @@ +[#]: subject: (Use this open source tool to monitor variables in Python) +[#]: via: (https://opensource.com/article/21/4/monitor-debug-python) +[#]: author: (Tian Gao https://opensource.com/users/gaogaotiantian) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13279-1.html) + +使用这个开源工具来监控 Python 中的变量 +====== + +> Watchpoints 是一个简单但功能强大的工具,可以帮助你在调试 Python 时监控变量。 + +![](https://img.linux.net.cn/data/attachment/album/202104/08/231614imw8zqfncz5qwwow.jpg) + +在调试代码时,你经常面临着要弄清楚一个变量何时发生变化。如果没有任何高级工具,那么可以选择使用打印语句在期望它们更改时输出变量。然而,这是一种非常低效的方法,因为变量可能在很多地方发生变化,并且不断地将其打印到终端上会产生很大的干扰,而将它们打印到日志文件中则变得很麻烦。 + +这是一个常见的问题,但现在有一个简单而强大的工具可以帮助你监控变量:[watchpoints][2]。 + +[“监视点”的概念在 C 和 C++ 调试器中很常见][3],用于监控内存,但在 Python 中缺乏相应的工具。`watchpoints` 填补了这个空白。 + +### 安装 + +要使用它,你必须先用 `pip` 安装它: + +``` +$ python3 -m pip install watchpoints +``` + +### 在Python中使用 watchpoints + +对于任何一个你想监控的变量,使用 `watch` 函数对其进行监控。 + +``` +from watchpoints import watch + +a = 0 +watch(a) +a = 1 +``` + +当变量发生变化时,它的值就会被打印到**标准输出**: + +``` +====== Watchpoints Triggered ====== + +Call Stack (most recent call last): + (my_script.py:5): +> a = 1 +a: +0 +-> +1 +``` + +信息包括: + + * 变量被改变的行。 + * 调用栈。 + * 变量的先前值/当前值。 + +它不仅适用于变量本身,也适用于对象的变化: + +``` +from watchpoints import watch + +a = [] +watch(a) +a = {} # 触发 +a["a"] = 2 # 触发 +``` + +当变量 `a` 被重新分配时,回调会被触发,同时当分配给 `a` 的对象发生变化时也会被触发。 + +更有趣的是,监控不受作用域的限制。你可以在任何地方观察变量/对象,而且无论程序在执行什么函数,回调都会被触发。 + +``` +from watchpoints import watch + +def func(var): +    var["a"] = 1 + +a = {} +watch(a) +func(a) +``` + +例如,这段代码打印出: + +``` +====== Watchpoints Triggered ====== + +Call Stack (most recent call last): + + (my_script.py:8): +> func(a) + func (my_script.py:4): +> var["a"] = 1 +a: +{} +-> +{'a': 1} +``` + +`watch` 函数不仅可以监视一个变量,它也可以监视一个字典或列表的属性和元素。 + +``` +from watchpoints import watch + +class MyObj: +    def __init__(self): +        self.a = 0 + +obj = MyObj() +d = {"a": 0} +watch(obj.a, d["a"]) # 是的,你可以这样做 +obj.a = 1 # 触发 +d["a"] = 1 # 触发 +``` + +这可以帮助你缩小到一些你感兴趣的特定对象。 + +如果你对输出格式不满意,你可以自定义它。只需定义你自己的回调函数: + +``` +watch(a, callback=my_callback) + +# 或者全局设置 + +watch.config(callback=my_callback) +``` + +当触发时,你甚至可以使用 `pdb`: + +``` +watch.config(pdb=True) +``` + +这与 `breakpoint()` 的行为类似,会给你带来类似调试器的体验。 + +如果你不想在每个文件中都导入这个函数,你可以通过 `install` 函数使其成为全局: + +``` +watch.install() # 或 watch.install("func_name") ,然后以 func_name() 方式使用 +``` + +我个人认为,`watchpoints` 最酷的地方就是使用直观。你对一些数据感兴趣吗?只要“观察”它,你就会知道你的变量何时发生变化。 + +### 尝试 watchpoints + +我在 [GitHub][2] 上开发维护了 `watchpoints`,并在 Apache 2.0 许可下发布了它。安装并使用它,当然也欢迎大家做出贡献。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/monitor-debug-python + +作者:[Tian Gao][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gaogaotiantian +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/look-binoculars-sight-see-review.png?itok=NOw2cm39 (Looking back with binoculars) +[2]: https://github.com/gaogaotiantian/watchpoints +[3]: https://opensource.com/article/21/3/debug-code-gdb diff --git a/published/202104/20210401 Find what changed in a Git commit.md b/published/202104/20210401 Find what changed in a Git commit.md new file mode 100644 index 0000000000..47202013ef --- /dev/null +++ b/published/202104/20210401 Find what changed in a Git commit.md @@ -0,0 +1,134 @@ +[#]: subject: (Find what changed in a Git commit) +[#]: via: (https://opensource.com/article/21/4/git-whatchanged) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13286-1.html) + +查看 Git 提交中发生了什么变化 +====== + +> Git 提供了几种方式可以帮你快速查看提交中哪些文件被改变。 + +![](https://img.linux.net.cn/data/attachment/album/202104/11/093421yuololouo66woulu.jpg) + +如果你每天使用 Git,应该会提交不少改动。如果你每天和其他人在一个项目中使用 Git,假设 _每个人_ 每天的提交都是安全的,你会意识到 Git 日志会变得多么混乱,似乎永恒地滚动着变化,却没有任何迹象表明修改了什么。 + +那么,你该怎样查看指定提交中文件发生哪些变化?这比你想的容易。 + +### 查看提交中文件发生的变化 + +要想知道指定提交中哪些文件发生变化,可以使用 `git log --raw` 命令。这是发现一个提交影响了哪些文件的最快速、最方便的方法。`git log` 命令一般都没有被充分利用,主要是因为它有太多的格式化选项,许多用户在面对很多选择以及在一些情况下不明所以的文档时,会望而却步。 + +然而,Git 的日志机制非常灵活,`--raw` 选项提供了当前分支中的提交日志,以及更改的文件列表。 + +以下是标准的 `git log` 输出: + +``` +$ git log +commit fbbbe083aed75b24f2c77b1825ecab10def0953c (HEAD -> dev, origin/dev) +Author: tux +Date: Sun Nov 5 21:40:37 2020 +1300 + + exit immediately from failed download + +commit 094f9948cd995acfc331a6965032ea0d38e01f03 (origin/master, master) +Author: Tux +Date: Fri Aug 5 02:05:19 2020 +1200 + + export makeopts from etc/example.conf + +commit 76b7b46dc53ec13316abb49cc7b37914215acd47 +Author: Tux +Date: Sun Jul 31 21:45:24 2020 +1200 + + fix typo in help message +``` + +即使作者在提交消息中指定了哪些文件发生变化,日志也相当简洁。 + +以下是 `git log --raw` 输出: + +``` +$ git log --raw +commit fbbbe083aed75b24f2c77b1825ecab10def0953c (HEAD -> dev, origin/dev) +Author: tux +Date: Sun Nov 5 21:40:37 2020 +1300 + + exit immediately from failed download + +:100755 100755 cbcf1f3 4cac92f M src/example.lua + +commit 094f9948cd995acfc331a6965032ea0d38e01f03 (origin/master, master) +Author: Tux +Date: Fri Aug 5 02:05:19 2020 +1200 + + export makeopts from etc/example.conf + +:100755 100755 4c815c0 cbcf1f3 M src/example.lua +:100755 100755 71653e1 8f5d5a6 M src/example.spec +:100644 100644 9d21a6f e33caba R100 etc/example.conf etc/example.conf-default + +commit 76b7b46dc53ec13316abb49cc7b37914215acd47 +Author: Tux +Date: Sun Jul 31 21:45:24 2020 +1200 + + fix typo in help message + +:100755 100755 e253aaf 4c815c0 M src/example.lua +``` + +这会准确告诉你哪个文件被添加到提交中,哪些文件发生改变(`A` 是添加,`M` 是修改,`R` 是重命名,`D` 是删除)。 + +### Git whatchanged + +`git whatchanged` 命令是一个遗留命令,它的前身是日志功能。文档说用户不应该用该命令替代 `git log --raw`,并且暗示它实质上已经被废弃了。不过,我还是觉得它是一个很有用的捷径,可以得到同样的输出结果(尽管合并提交的内容不包括在内),如果它被删除的话,我打算为它创建一个别名。如果你只想查看已更改的文件,不想在日志中看到合并提交,可以尝试 `git whatchanged` 作为简单的助记符。 + +### 查看变化 + +你不仅可以看到哪些文件发生更改,还可以使用 `git log` 显示文件中发生了哪些变化。你的 Git 日志可以生成一个内联差异,用 `--patch` 选项可以逐行显示每个文件的所有更改: + +``` +commit 62a2daf8411eccbec0af69e4736a0fcf0a469ab1 (HEAD -> master) +Author: Tux +Date: Wed Mar 10 06:46:58 2021 +1300 + + commit + +diff --git a/hello.txt b/hello.txt +index 65a56c3..36a0a7d 100644 +--- a/hello.txt ++++ b/hello.txt +@@ -1,2 +1,2 @@ + Hello +-world ++opensource.com +``` + +在这个例子中,“world” 这行字从 `hello.txt` 中删掉,“opensource.com” 这行字则添加进去。 + +如果你需要在其他地方手动进行相同的修改,这些补丁patch可以与常见的 Unix 命令一起使用,例如 [diff 与 patch][4]。补丁也是一个好方法,可以总结指定提交中引入新信息的重要部分内容。当你在冲刺阶段引入一个 bug 时,你会发现这里的内容就是非常有价值的概述。为了更快地找到错误的原因,你可以忽略文件中没有更改的部分,只检查新代码。 + +### 用简单命令得到复杂的结果 + +你不必理解引用、分支和提交哈希,就可以查看提交中更改了哪些文件。你的 Git 日志旨在向你报告 Git 的活动,如果你想以特定方式格式化它或者提取特定的信息,通常需要费力地浏览许多文档来组合出正确的命令。幸运的是,关于 Git 历史记录最常用的请求之一只需要一两个选项:`--raw` 与 `--patch`。如果你不记得 `--raw`,就想想“Git,什么改变了?”,然后输入 `git whatchanged`。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/git-whatchanged + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/code_computer_development_programming.png?itok=4OM29-82 (Code going into a computer.) +[2]: mailto:tux@example.com +[3]: mailto:Tux@example.com +[4]: https://opensource.com/article/18/8/diffs-patches diff --git a/published/202104/20210401 Wrong Time Displayed in Windows-Linux Dual Boot Setup- Here-s How to Fix it.md b/published/202104/20210401 Wrong Time Displayed in Windows-Linux Dual Boot Setup- Here-s How to Fix it.md new file mode 100644 index 0000000000..625e7d9362 --- /dev/null +++ b/published/202104/20210401 Wrong Time Displayed in Windows-Linux Dual Boot Setup- Here-s How to Fix it.md @@ -0,0 +1,104 @@ +[#]: subject: (Wrong Time Displayed in Windows-Linux Dual Boot Setup? Here’s How to Fix it) +[#]: via: (https://itsfoss.com/wrong-time-dual-boot/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13276-1.html) + +如何解决 Windows-Linux 双启动设置中显示时间错误的问题 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/08/102102xaup3iofozn2uvbf.jpg) + +如果你 [双启动 Windows 和 Ubuntu][1] 或任何其他 Linux 发行版,你可能会注意到两个操作系统之间的时间差异。 + +当你 [使用 Linux][2] 时,它会显示正确的时间。但当你进入 Windows 时,它显示的时间是错误的。有时,情况正好相反,Linux 显示的是错误的时间,而 Windows 的时间是正确的。 + +特别奇怪的是,因为你已连接到互联网,并且已将日期和时间设置为自动使用。 + +别担心!你并不是唯一一个遇到这种问题的人。你可以在 Linux 终端上使用以下命令来解决这个问题: + +``` +timedatectl set-local-rtc 1 +``` + +同样,不要担心。我会解释为什么你在双启动设置中会遇到时间差。我会向你展示上面的命令是如何修复 Windows 双启动后的时间错误问题的。 + +### 为什么 Windows 和 Linux 在双启动时显示不同的时间? + +一台电脑有两个主要时钟:系统时钟和硬件时钟。 + +硬件时钟也叫 RTC([实时时钟][3])或 CMOS/BIOS 时钟。这个时钟在操作系统之外,在电脑的主板上。即使在你的系统关机后,它也会继续运行。 + +系统时钟是你在操作系统内看到的。 + +当计算机开机时,硬件时钟被读取并用于设置系统时钟。之后,系统时钟被用于跟踪时间。如果你的操作系统对系统时钟做了任何改变,比如改变时区等,它就会尝试将这些信息同步到硬件时钟上。 + +默认情况下,Linux 认为硬件时钟中存储的时间是 UTC,而不是本地时间。另一方面,Windows 认为硬件时钟上存储的时间是本地时间。这就是问题的开始。 + +让我用例子来解释一下。 + +你看我在加尔各答 UTC+5:30 时区。安装后,当我把 [Ubuntu 中的时区][4] 设置为加尔各答时区时,Ubuntu 会把这个时间信息同步到硬件时钟上,但会有 5:30 的偏移,因为对于 Linux 来说它必须是 UTC。 + +假设加尔各答时区的当前时间是 15:00,这意味着 UTC 时间是 09:30。 + +现在当我关闭系统并启动到 Windows 时,硬件时钟有 UTC 时间(本例中为 09:30)。但是 Windows 认为硬件时钟已经存储了本地时间。因此,它改变了系统时钟(应该显示为 15:00),而使用 UTC 时间(09:30)作为本地时间。因此,Windows 显示时间为 09:30,这比实际时间(我们的例子中为 15:00)早了 5:30。 + +![][5] + +同样,如果我在 Windows 中通过自动时区和时间按钮来设置正确的时间,你知道会发生什么吗?现在它将在系统上显示正确的时间(15:00),并将此信息(注意图片中的“同步你的时钟”选项)同步到硬件时钟。 + +如果你启动到 Linux,它会从硬件时钟读取时间,而硬件时钟是当地时间(15:00),但由于 Linux 认为它是 UTC 时间,所以它在系统时钟上增加了 5:30 的偏移。现在 Linux 显示的时间是 20:30,比实际时间超出晚了 5:30。 + +现在你了解了双启动中时差问题的根本原因,是时候看看如何解决这个问题了。 + +### 修复 Windows 在 Linux 双启动设置中显示错误时间的问题 + +有两种方法可以处理这个问题: + + * 让 Windows 将硬件时钟作为 UTC 时间 + * 让 Linux 将硬件时钟作为本地时间 + +在 Linux 中进行修改是比较容易的,因此我推荐使用第二种方法。 + +现在 Ubuntu 和大多数其他 Linux 发行版都使用 systemd,因此你可以使用 `timedatectl` 命令来更改设置。 + +你要做的是告诉你的 Linux 系统将硬件时钟(RTC)作为本地时间。你可以通过 `set-local-rtc` (为 RTC 设置本地时间)选项来实现: + +``` +timedatectl set-local-rtc 1 +``` + +如下图所示,RTC 现在使用本地时间。 + +![][6] + +现在如果你启动 Windows,它把硬件时钟当作本地时间,而这个时间实际上是正确的。当你在 Linux 中启动时,你的 Linux 系统知道硬件时钟使用的是本地时间,而不是 UTC。因此,它不会尝试添加这个时间的偏移。 + +这就解决了 Linux 和 Windows 双启动时的时差问题。 + +你会看到一个关于 RTC 不使用本地时间的警告。对于桌面设置,它不应该引起任何问题。至少,我想不出有什么问题。 + +希望我把事情给你讲清楚了。如果你还有问题,请在下面留言。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/wrong-time-dual-boot/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/ +[2]: https://itsfoss.com/why-use-linux/ +[3]: https://www.computerhope.com/jargon/r/rtc.htm +[4]: https://itsfoss.com/change-timezone-ubuntu/ +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/set-time-windows.jpg?resize=800%2C491&ssl=1 +[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/set-local-time-for-rtc-ubuntu.png?resize=800%2C490&ssl=1 diff --git a/published/202104/20210402 A practical guide to using the git stash command.md b/published/202104/20210402 A practical guide to using the git stash command.md new file mode 100644 index 0000000000..51917981dd --- /dev/null +++ b/published/202104/20210402 A practical guide to using the git stash command.md @@ -0,0 +1,223 @@ +[#]: subject: (A practical guide to using the git stash command) +[#]: via: (https://opensource.com/article/21/4/git-stash) +[#]: author: (Ramakrishna Pattnaik https://opensource.com/users/rkpattnaik780) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13293-1.html) + +git stash 命令实用指南 +====== + +> 学习如何使用 `git stash` 命令,以及何时应该使用它。 + +![](https://img.linux.net.cn/data/attachment/album/202104/12/232830chuyr6lkzevrfuzr.jpg) + +版本控制是软件开发人员日常生活中不可分割的一部分。很难想象有哪个团队在开发软件时不使用版本控制工具。同样也很难想象有哪个开发者没有使用过(或没有听说过)Git。在 2018 年 Stackoverflow 开发者调查中,74298 名参与者中有 87.2% 的人 [使用 Git][2] 进行版本控制。 + +Linus Torvalds 在 2005 年创建了 Git 用于开发 Linux 内核。本文将介绍 `git stash` 命令,并探讨一些有用的暂存变更的选项。本文假定你对 [Git 概念][3] 有基本的了解,并对工作树、暂存区和相关命令有良好的理解。 + +### 为什么 git stash 很重要? + +首先要明白为什么在 Git 中暂存变更很重要。假设 Git 没有暂存变更的命令。当你正在一个有两个分支(A 和 B)的仓库上工作时,这两个分支已经分叉了一段时间,并且有不同的头。当你正在处理 A 分支的一些文件时,你的团队要求你修复 B 分支的一个错误。你迅速将你的修改保存到 A 分支(但没有提交),并尝试用 `git checkout B` 来签出 B 分支。Git 会立即中止了这个操作,并抛出错误:“你对以下文件的本地修改会被该签出覆盖……请在切换分支之前提交你的修改或将它们暂存起来。” + +在这种情况下,有几种方法可以启用分支切换: + + * 在分支 A 中创建一个提交,提交并推送你的修改,以修复 B 中的错误,然后再次签出 A,并运行 `git reset HEAD^` 来恢复你的修改。 + * 手动保留不被 Git 跟踪的文件中的改动。 + +第二种方法是个馊主意。第一种方法虽然看起来很传统,但却不太灵活,因为保存未完成工作的修改会被当作一个检查点,而不是一个仍在进行中的补丁。这正是设计 `git stash` 的场景。 + +`git stash` 将未提交的改动保存在本地,让你可以进行修改、切换分支以及其他 Git 操作。然后,当你需要的时候,你可以重新应用这些存储的改动。暂存是本地范围的,不会被 `git push` 推送到远程。 + +### 如何使用 git stash + +下面是使用 `git stash` 时要遵循的顺序: + + 1. 将修改保存到分支 A。 + 2. 运行 `git stash`。 + 3. 签出分支 B。 + 4. 修正 B 分支的错误。 + 5. 提交并(可选)推送到远程。 + 6. 查看分支 A + 7. 运行 `git stash pop` 来取回你的暂存的改动。 + +`git stash` 将你对工作目录的修改存储在本地(在你的项目的 `.git` 目录内,准确的说是 `/.git/refs/stash`),并允许你在需要时检索这些修改。当你需要在不同的上下文之间切换时,它很方便。它允许你保存以后可能需要的更改,是让你的工作目录干净同时保持更改完整的最快方法。 + +### 如何创建一个暂存 + +暂存你的变化的最简单的命令是 `git stash`: + +``` +$ git stash +Saved working directory and index state WIP on master; d7435644 Feat: configure graphql endpoint +``` + +默认情况下,`git stash` 存储(或称之为“暂存”)未提交的更改(已暂存和未暂存的文件),并忽略未跟踪和忽略的文件。通常情况下,你不需要暂存未跟踪和忽略的文件,但有时它们可能会干扰你在代码库中要做的其他事情。 + +你可以使用附加选项让 `git stash` 来处理未跟踪和忽略的文件: + + * `git stash -u` 或 `git stash --includ-untracked` 储存未追踪的文件。 + * `git stash -a` 或 `git stash --all` 储存未跟踪的文件和忽略的文件。 + +要存储特定的文件,你可以使用 `git stash -p` 或 `git stash -patch` 命令: + +``` +$ git stash --patch +diff --git a/.gitignore b/.gitignore +index 32174593..8d81be6e 100644 +--- a/.gitignore ++++ b/.gitignore +@@ -3,6 +3,7 @@ + # dependencies + node_modules/ + /.pnp ++f,fmfm + .pnp.js + + # testing +(1/1) Stash this hunk [y,n,q,a,d,e,?]? +``` + +### 列出你的暂存 + +你可以用 `git stash list` 命令查看你的暂存。暂存是后进先出(LIFO)方式保存的: + +``` +$ git stash list +stash@{0}: WIP on master: d7435644 Feat: configure graphql endpoint +``` + +默认情况下,暂存会显示在你创建它的分支和提交的顶部,被标记为 `WIP`。然而,当你有多个暂存时,这种有限的信息量并没有帮助,因为很难记住或单独检查它们的内容。要为暂存添加描述,可以使用命令 `git stash save `: + +``` +$ git stash save "remove semi-colon from schema" +Saved working directory and index state On master: remove semi-colon from schema + +$ git stash list +stash@{0}: On master: remove semi-colon from schema +stash@{1}: WIP on master: d7435644 Feat: configure graphql endpoint +``` + +### 检索暂存起来的变化 + +你可以用 `git stash apply` 和 `git stash pop` 这两个命令来重新应用暂存的变更。这两个命令都会重新应用最新的暂存(即 `stash@{0}`)中的改动。`apply` 会重新应用变更;而 `pop` 则会将暂存的变更重新应用到工作副本中,并从暂存中删除。如果你不需要再次重新应用被暂存的更改,则首选 `pop`。 + +你可以通过传递标识符作为最后一个参数来选择你想要弹出或应用的储藏: + +``` +$ git stash pop stash@{1} +``` + +或 + +``` +$ git stash apply stash@{1} +``` + +### 清理暂存 + +删除不再需要的暂存是好的习惯。你必须用以下命令手动完成: + + * `git stash clear` 通过删除所有的暂存库来清空该列表。 + * `git stash drop ` 从暂存列表中删除一个特定的暂存。 + +### 检查暂存的差异 + +命令 `git stash show ` 允许你查看一个暂存的差异: + +``` +$ git stash show stash@{1} +console/console-init/ui/.graphqlrc.yml        |   4 +- +console/console-init/ui/generated-frontend.ts | 742 +++++++++--------- +console/console-init/ui/package.json          |   2 +- +``` + +要获得更详细的差异,需要传递 `--patch` 或 `-p` 标志: + +``` +$ git stash show stash@{0} --patch +diff --git a/console/console-init/ui/package.json b/console/console-init/ui/package.json +index 755912b97..5b5af1bd6 100644 +--- a/console/console-init/ui/package.json ++++ b/console/console-init/ui/package.json +@@ -1,5 +1,5 @@ + { +- "name": "my-usepatternfly", ++ "name": "my-usepatternfly-2", +  "version": "0.1.0", +  "private": true, +  "proxy": "http://localhost:4000" +diff --git a/console/console-init/ui/src/AppNavHeader.tsx b/console/console-init/ui/src/AppNavHeader.tsx +index a4764d2f3..da72b7e2b 100644 +--- a/console/console-init/ui/src/AppNavHeader.tsx ++++ b/console/console-init/ui/src/AppNavHeader.tsx +@@ -9,8 +9,8 @@ import { css } from "@patternfly/react-styles"; + +interface IAppNavHeaderProps extends PageHeaderProps { +- toolbar?: React.ReactNode; +- avatar?: React.ReactNode; ++ toolbar?: React.ReactNode; ++ avatar?: React.ReactNode; +} + +export class AppNavHeader extends React.Component<IAppNavHeaderProps>{ +  render() +``` + +### 签出到新的分支 + +你可能会遇到这样的情况:一个分支和你的暂存中的变更有分歧,当你试图重新应用暂存时,会造成冲突。一个简单的解决方法是使用 `git stash branch ` 命令,它将根据创建暂存时的提交创建一个新分支,并将暂存中的修改弹出: + +``` +$ git stash branch test_2 stash@{0} +Switched to a new branch 'test_2' +On branch test_2 +Changes not staged for commit: +(use "git add ..." to update what will be committed) +(use "git restore ..." to discard changes in working directory) +modified: .graphqlrc.yml +modified: generated-frontend.ts +modified: package.json +no changes added to commit (use "git add" and/or "git commit -a") +Dropped stash@{0} (fe4bf8f79175b8fbd3df3c4558249834ecb75cd1) +``` + +### 在不打扰暂存参考日志的情况下进行暂存 + +在极少数情况下,你可能需要创建一个暂存,同时保持暂存参考日志(`reflog`)的完整性。这些情况可能出现在你需要一个脚本作为一个实现细节来暂存的时候。这可以通过 `git stash create` 命令来实现;它创建了一个暂存条目,并返回它的对象名,而不将其推送到暂存参考日志中: + +``` +$ git stash create "sample stash" +63a711cd3c7f8047662007490723e26ae9d4acf9 +``` + +有时,你可能会决定将通过 `git stash create` 创建的暂存条目推送到暂存参考日志: + +``` +$ git stash store -m "sample stash testing.." "63a711cd3c7f8047662007490723e26ae9d4acf9" +$ git stash list +stash @{0}: sample stash testing.. +``` + +### 结论 + +我希望你觉得这篇文章很有用,并学到了新的东西。如果我遗漏了任何有用的使用暂存的选项,请在评论中告诉我。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/git-stash + +作者:[Ramakrishna Pattnaik][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/rkpattnaik780 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-window-focus.png?itok=g0xPm2kD (young woman working on a laptop) +[2]: https://insights.stackoverflow.com/survey/2018#work-_-version-control +[3]: https://opensource.com/downloads/cheat-sheet-git diff --git a/published/202104/20210403 What problems do people solve with strace.md b/published/202104/20210403 What problems do people solve with strace.md new file mode 100644 index 0000000000..3160de5910 --- /dev/null +++ b/published/202104/20210403 What problems do people solve with strace.md @@ -0,0 +1,136 @@ +[#]: subject: (What problems do people solve with strace?) +[#]: via: (https://jvns.ca/blog/2021/04/03/what-problems-do-people-solve-with-strace/) +[#]: author: (Julia Evans https://jvns.ca/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13267-1.html) + +strace 可以解决什么问题? +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/05/094825y66126r56z361rz1.jpg) + +昨天我 [在 Twitter 上询问大家用 strace 解决了什么问题?][1],和往常一样,大家真的是给出了自己的答案! 我收到了大约 200 个答案,然后花了很多时间手动将它们归为 9 类。 + +这些解决的问题都是关于寻找程序依赖的文件、找出程序卡住或慢的原因、或者找出程序失败的原因。这些总体上与我自己使用 `strace` 的内容相吻合,但也有一些我没有想到的东西! + +我不打算在这篇文章里解释什么是 `strace`,但我有一本 [关于它的免费杂志][2] 和 [一个讲座][3] 以及 [很多博文][4]。 + +### 问题 1:配置文件在哪里? + +最受欢迎的问题是“这个程序有一个配置文件,但我不知道它在哪里”。这可能也是我最常使用 `strace` 解决的问题,因为这是个很简单的问题。 + +这很好,因为一个程序有一百万种方法来记录它的配置文件在哪里(在手册页、网站上、`--help`等),但只有一种方法可以让它真正打开它(用系统调用!)。 + +### 问题 2:这个程序还依赖什么文件? + +你也可以使用 `strace` 来查找程序依赖的其他类型的文件,比如: + + * 动态链接库(“为什么我的程序加载了这个错误版本的 `.so` 文件?"),比如 [我在 2014 年调试的这个 ruby 问题][5] + * 它在哪里寻找它的 Ruby gem(Ruby 出现了几次这种情况!) + * SSL 根证书 + * 游戏的存档文件 + * 一个闭源程序的数据文件 + * [哪些 node_modules 文件没有被使用][6] + +### 问题 3:为什么这个程序会挂掉? + +你有一个程序,它只是坐在那里什么都不做,这是怎么回事?这个问题特别容易回答,因为很多时候你只需要运行 `strace -p PID`,看看当前运行的是什么系统调用。你甚至不需要看几百行的输出。 + +答案通常是“正在等待某种 I/O”。“为什么会卡住”的一些可能的答案(虽然还有很多!): + + * 它一直在轮询 `select()` + * 正在 `wait()` 等待一个子进程完成 + * 它在向某个没有响应的东西发出网络请求 + * 正在进行 `write()`,但由于缓冲区已满而被阻止。 + * 它在 stdin 上做 `read()`,等待输入。 + +有人还举了一个很好的例子,用 `strace` 调试一个卡住的 `df` 命令:“用 `strace df -h` 你可以找到卡住的挂载,然后卸载它”。 + +### 问题 4:这个程序卡住了吗? + +这是上一个问题的变种:有时一个程序运行的时间比你预期的要长,你只是想知道它是否卡住了,或者它是否还在继续进行。 + +只要程序在运行过程中进行系统调用,用 `strace` 就可以超简单地回答这个问题:只需 `strace` 它,看看它是否在进行新的系统调用! + +### 问题 5:为什么这个程序很慢? + +你可以使用 `strace` 作为一种粗略的剖析工具:`strace -t` 会显示每次系统调用的时间戳,这样你就可以寻找大的漏洞,找到罪魁祸首。 + +以下是 Twitter 上 9 个人使用 `strace` 调试“为什么这个程序很慢?”的小故事。 + + * 早在 2000 年,我帮助支持的一个基于 Java 的网站在适度的负载下奄奄一息:页面加载缓慢,甚至完全加载不出来。我们对 J2EE 应用服务器进行了测试,发现它每次只读取一个类文件。开发人员没有使用 BufferedReader,这是典型的 Java 错误。 + * 优化应用程序的启动时间……运行 `strace` 可以让人大开眼界,因为有大量不必要的文件系统交互在进行(例如,在同一个配置文件上反复打开/读取/关闭;在一个缓慢的 NFS 挂载上加载大量的字体文件,等等)。 + * 问自己为什么在 PHP 中从会话文件中读取(通常是小于 100 字节)非常慢。结果发现一些 `flock` 系统调用花了大约 60 秒。 + * 一个程序表现得异常缓慢。使用 `strace` 找出它在每次请求时,通过从 `/dev/random` 读取数据并耗尽熵来重新初始化其内部伪随机数发生器。 + * 我记得最近一件事是连接到一个任务处理程序,看到它有多少网络调用(这是意想不到的)。 + * `strace` 显示它打开/读取同一个配置文件数千次。 + * 服务器随机使用 100% 的 CPU 时间,实际流量很低。原来是碰到打开文件数限制,接受一个套接字时,得到 EMFILE 错误而没有报告,然后一直重试。 + * 一个工作流运行超慢,但是没有日志,结果它做一个 POST 请求花了 30 秒而超时,然后重试了 5 次……结果后台服务不堪重负,但是也没有可视性。 + * 使用 `strace` 注意到 `gethostbyname()` 需要很长时间才能返回(你不能直接看到 `gethostbyname`,但你可以看到 `strace` 中的 DNS 数据包) + +### 问题 6:隐藏的权限错误 + +有时候程序因为一个神秘的原因而失败,但问题只是有一些它没有权限打开的文件。在理想的世界里,程序会报告这些错误(“Error opening file /dev/whatever: permission denied”),当然这个世界并不完美,所以 `strace` 真的可以帮助解决这个问题! + +这其实是我最近使用 `strace` 做的事情。我使用了一台 AxiDraw 绘图仪,当我试图启动它时,它打印出了一个难以理解的错误信息。我 `strace` 它,结果发现我的用户没有权限打开 USB 设备。 + +### 问题 7:正在使用什么命令行参数? + +有时候,一个脚本正在运行另一个程序,你想知道它传递的是什么命令行标志! + +几个来自 Twitter 的例子。 + + * 找出实际上是用来编译代码的编译器标志 + * 由于命令行太长,命令失败了 + +### 问题 8:为什么这个网络连接失败? + +基本上,这里的目标是找到网络连接的域名 / IP 地址。你可以通过 DNS 请求来查找域名,或者通过 `connect` 系统调用来查找 IP。 + +一般来说,当 `tcpdump` 因为某些原因不能使用或者只是因为比较熟悉 `strace` 时,就经常会使用 `strace` 调试网络问题。 + +### 问题 9:为什么这个程序以一种方式运行时成功,以另一种方式运行时失败? + +例如: + + * 同样的二进制程序在一台机器上可以运行,在另一台机器上却失败了 + * 可以运行,但被 systemd 单元文件生成时失败 + * 可以运行,但以 `su - user /some/script` 的方式运行时失败 + * 可以运行,作为 cron 作业运行时失败 + +能够比较两种情况下的 `strace` 输出是非常有用的。虽然我在调试“以我的用户身份工作,而在同一台计算机上以不同方式运行时却失败了”时,第一步是“看看我的环境变量”。 + +### 我在做什么:慢慢地建立一些挑战 + +我之所以会想到这个问题,是因为我一直在慢慢地进行一些挑战,以帮助人们练习使用 `strace` 和其他命令行工具。我的想法是,给你一个问题,一个终端,你可以自由地以任何方式解决它。 + +所以我的目标是用它来建立一些你可以用 `strace` 解决的练习题,这些练习题反映了人们在现实生活中实际使用它解决的问题。 + +### 就是这样! + +可能还有更多的问题可以用 `strace` 解决,我在这里还没有讲到,我很乐意听到我错过了什么! + +我真的很喜欢看到很多相同的用法一次又一次地出现:至少有 20 个不同的人回答说他们使用 `strace` 来查找配置文件。而且和以往一样,我觉得这样一个简单的工具(“跟踪系统调用!”)可以用来解决这么多不同类型的问题,真的很令人高兴。 + +-------------------------------------------------------------------------------- + +via: https://jvns.ca/blog/2021/04/03/what-problems-do-people-solve-with-strace/ + +作者:[Julia Evans][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://jvns.ca/ +[b]: https://github.com/lujun9972 +[1]: https://twitter.com/b0rk/status/1378014888405168132 +[2]: https://wizardzines.com/zines/strace +[3]: https://www.youtube.com/watch?v=4pEHfGKB-OE +[4]: https://jvns.ca/categories/strace +[5]: https://jvns.ca/blog/2014/03/10/debugging-shared-library-problems-with-strace/ +[6]: https://indexandmain.com/post/shrink-node-modules-with-refining diff --git a/published/202104/20210404 Converting Multiple Markdown Files into HTML or Other Formats in Linux.md b/published/202104/20210404 Converting Multiple Markdown Files into HTML or Other Formats in Linux.md new file mode 100644 index 0000000000..fea402d238 --- /dev/null +++ b/published/202104/20210404 Converting Multiple Markdown Files into HTML or Other Formats in Linux.md @@ -0,0 +1,146 @@ +[#]: subject: "Converting Multiple Markdown Files into HTML or Other Formats in Linux" +[#]: via: "https://itsfoss.com/convert-markdown-files/" +[#]: author: "Bill Dyer https://itsfoss.com/author/bill/" +[#]: collector: "lujun9972" +[#]: translator: "lxbwolf" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13274-1.html" + +在 Linux 中把多个 Markdown 文件转换成 HTML 或其他格式 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/07/095441bztj6cz68j89568u.jpg) + +很多时候我与 Markdown 打交道的方式是,先写完一个文件,然后把它转换成 HTML 或其他格式。也有些时候,需要创建一些新的文件。当我要写多个 Markdown 文件时,通常要把他们全部写完之后才转换它们。 + +我用 `pandoc` 来转换文件,它可以一次性地转换所有 Markdown 文件。 + +Markdown 格式的文件可以转换成 .html 文件,有时候我需要把它转换成其他格式,如 epub,这个时候 [pandoc][1] 就派上了用场。我更喜欢用命令行,因此本文我会首先介绍它,然而你还可以使用 [VSCodium][2] 在非命令行下完成转换。后面我也会介绍它。 + +### 使用 pandoc 把多个 Markdown 文件转换成其他格式(命令行方式) + +你可以在 Ubuntu 及其他 Debian 系发行版本终端输入下面的命令来快速开始: + +``` +sudo apt-get install pandoc +``` + +本例中,在名为 `md_test` 目录下我有四个 Markdown 文件需要转换。 + +``` +[email protected]:~/Documents/md_test$ ls -l *.md +-rw-r--r-- 1 bdyer bdyer 3374 Apr 7 2020 file01.md +-rw-r--r-- 1 bdyer bdyer 782 Apr 2 05:23 file02.md +-rw-r--r-- 1 bdyer bdyer 9257 Apr 2 05:21 file03.md +-rw-r--r-- 1 bdyer bdyer 9442 Apr 2 05:21 file04.md +[email protected]:~/Documents/md_test$ +``` + +现在还没有 HTML 文件。现在我要对这些文件使用 `pandoc`。我会运行一行命令来实现: + + * 调用 `pandoc` + * 读取 .md 文件并导出为 .html + +下面是我要运行的命令: + +``` +for i in *.md ; do echo "$i" && pandoc -s $i -o $i.html ; done +``` + +如果你不太理解上面的命令中的 `;`,可以参考 [在 Linux 中一次执行多个命令][3]。 + +我执行命令后,运行结果如下: + +``` +[email protected]:~/Documents/md_test$ for i in *.md ; do echo "$i" && pandoc -s $i -o $i.html ; done +file01.md +file02.md +file03.md +file04.md +[email protected]:~/Documents/md_test$ +``` + +让我再使用一次 `ls` 命令来看看是否已经生成了 HTML 文件: + +``` +[email protected]:~/Documents/md_test$ ls -l *.html +-rw-r--r-- 1 bdyer bdyer 4291 Apr 2 06:08 file01.md.html +-rw-r--r-- 1 bdyer bdyer 1781 Apr 2 06:08 file02.md.html +-rw-r--r-- 1 bdyer bdyer 10272 Apr 2 06:08 file03.md.html +-rw-r--r-- 1 bdyer bdyer 10502 Apr 2 06:08 file04.md.html +[email protected]:~/Documents/md_test$ +``` + +转换很成功,现在你已经有了四个 HTML 文件,它们可以用在 Web 服务器上。 + +pandoc 功能相当多,你可以通过指定输出文件的扩展名来把 Markdown 文件转换成其他支持的格式。不难理解它为什么会被认为是[最好的写作开源工具][4]。 + +### 使用 VSCodium 把 Markdown 文件转换成 HTML(GUI 方式) + +就像我们前面说的那样,我通常使用命令行,但是对于批量转换,我不会使用命令行,你也不必。VSCode 或 [VSCodium][7] 可以完成批量操作。你只需要安装一个 Markdown-All-in-One 扩展,就可以在一次运行中转换多个 Markdown 文件。 + +有两种方式安装这个扩展: + + * VSCodium 的终端 + * VSCodium 的插件管理器 + +通过 VSCodium 的终端安装该扩展: + + 1. 点击菜单栏的 `终端`。会打开终端面板 + 2. 输入,或[复制下面的命令并粘贴到终端][8]: + +``` +codium --install-extension yzhang.markdown-all-in-one +``` + +**注意**:如果你使用的 VSCode 而不是 VSCodium,那么请把上面命令中的 `codium` 替换为 `code` + +![][9] + +第二种安装方式是通过 VSCodium 的插件/扩展管理器: + + 1. 点击 VSCodium 窗口左侧的块区域。会出现一个扩展列表,列表最上面有一个搜索框。 + 2. 在搜索框中输入 “Markdown All in One”。在列表最上面会出现该扩展。点击 “安装” 按钮来安装它。如果你已经安装过,在安装按钮的位置会出现一个齿轮图标。 + +![][10] + +安装完成后,你可以打开含有需要转换的 Markdown 文件的文件夹。 + +点击 VSCodium 窗口左侧的纸张图标。你可以选择文件夹。打开文件夹后,你需要打开至少一个文件。你也可以打开多个文件,但是最少打开一个。 + +当打开文件后,按下 `CTRL+SHIFT+P` 唤起命令面板。然后,在出现的搜索框中输入 `Markdown`。当你输入时,会出现一列 Markdown 相关的命令。其中有一个是 `Markdown All in One: Print documents to HTML` 命令。点击它: + +![][11] + +你需要选择一个文件夹来存放这些文件。它会自动创建一个 `out` 目录,转换后的 HTML 文件会存放在 `out` 目录下。从下面的图中可以看到,Markdown 文档被转换成了 HTML 文件。在这里,你可以打开、查看、编辑这些 HTML 文件。 + +![][12] + +在等待转换 Markdown 文件时,你可以更多地集中精力在写作上。当你准备好时,你就可以把它们转换成 HTML —— 你可以通过两种方式转换它们。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/convert-markdown-files/ + +作者:[Bill Dyer][a] +选题:[lujun9972][b] +译者:[lxbwolf](https://github.com/lxbwolf) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/bill/ +[b]: https://github.com/lujun9972 +[1]: https://pandoc.org/ +[2]: https://vscodium.com/ +[3]: https://itsfoss.com/run-multiple-commands-linux/ +[4]: https://itsfoss.com/open-source-tools-writers/ +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2016/10/Best-Markdown-Editors-for-Linux.jpg?fit=800%2C450&ssl=1 +[6]: https://itsfoss.com/best-markdown-editors-linux/ +[7]: https://itsfoss.com/vscodium/ +[8]: https://itsfoss.com/copy-paste-linux-terminal/ +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/vscodium_terminal.jpg?resize=800%2C564&ssl=1 +[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/vscodium_extension_select.jpg?resize=800%2C564&ssl=1 +[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/vscodium_markdown_function_options.jpg?resize=800%2C564&ssl=1 +[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/vscodium_html_filelist_shown.jpg?resize=800%2C564&ssl=1 diff --git a/published/202104/20210405 7 Git tips for managing your home directory.md b/published/202104/20210405 7 Git tips for managing your home directory.md new file mode 100644 index 0000000000..67d8a3ceea --- /dev/null +++ b/published/202104/20210405 7 Git tips for managing your home directory.md @@ -0,0 +1,135 @@ +[#]: subject: (7 Git tips for managing your home directory) +[#]: via: (https://opensource.com/article/21/4/git-home) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (stevenzdg988) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13313-1.html) + +7个管理家目录的 Git 技巧 +====== + +> 这是我怎样设置 Git 来管理我的家目录的方法。 + +![](https://img.linux.net.cn/data/attachment/album/202104/20/095224mtq14szo7opfofq7.jpg) + +我有好几台电脑。一台笔记本电脑用于工作,一台工作站放在家里,一台树莓派(或四台),一台 [Pocket CHIP][2],一台 [运行各种不同的 Linux 的 Chromebook][3],等等。我曾经在每台计算机上或多或少地按照相同的步骤设置我的用户环境,也经常告诉自己让每台计算机都略有不同。例如,我在工作中比在家里更经常使用 [Bash 别名][4],并且我在家里使用的辅助脚本可能对工作没有用。 + +这些年来,我对各种设备的期望开始相融,我会忘记我在家用计算机上建立的功能没有移植到我的工作计算机上,诸如此类。我需要一种标准化我的自定义工具包的方法。使我感到意外的答案是 Git。 + +Git 是版本跟踪软件。它以既可以用在非常大的开源项目也可以用在极小的开源项目而闻名,甚至最大的专有软件公司也在用它。但是它是为源代码设计的,而不是用在一个装满音乐和视频文件、游戏、照片等的家目录。我听说过有人使用 Git 管理其家目录,但我认为这是程序员们进行的一项附带实验,而不是像我这样的现实生活中的用户。 + +用 Git 管理我的家目录是一个不断发展的过程。随着时间的推移我一直在学习和适应。如果你决定使用 Git 管理家目录,则可能需要记住以下几点。 + +### 1、文本和二进制位置 + +![家目录][5] + +当由 Git 管理时,除了配置文件之外,你的家目录对于所有内容而言都是“无人之地”。这意味着当你打开主目录时,除了可预见的目录的列表之外,你什么都看不到。不应有任何杂乱无章的照片或 LibreOffice 文档,也不应有 “我就在这里放一分钟” 的临时文件。 + +原因很简单:使用 Git 管理家目录时,家目录中所有 _未_ 提交的内容都会变成噪音。每次执行 `git status` 时,你都必须翻过去之前 Git 未跟踪的任何文件,因此将这些文件保存在子目录(添加到 `.gitignore` 文件中)至关重要。 + +许多 Linux 发行版提供了一组默认目录: + + * `Documents` + * `Downloads` + * `Music` + * `Photos` + * `Templates` + * `Videos` + +如果需要,你可以创建更多。例如,我把创作的音乐(`Music`)和购买来聆听的音乐(`Albums`)区分开来。同样,我的电影(`Cinema`)目录包含了其他人的电影,而视频(`Videos`)目录包含我需要编辑的视频文件。换句话说,我的默认目录结构比大多数 Linux 发行版提供的默认设置更详细,但是我认为这样做有好处。如果没有适合你的目录结构,你更会将其存放在家目录中,因为没有更好的存放位置,因此请提前考虑并规划好适合你的工作目录。你以后总是可以添加更多,但是最好先开始擅长的。 + +### 2、、设置最优的 `.gitignore` + +清理家目录后,你可以像往常一样将其作为 Git 存储库实例化: + +``` +$ cd +$ git init . +``` + +你的 Git 仓库中还没有任何内容,你的家目录中的所有内容均未被跟踪。你的第一项工作是筛选未跟踪文件的列表,并确定要保持未跟踪状态的文件。要查看未跟踪的文件: + +``` +$ git status +  .AndroidStudio3.2/ +  .FBReader/ +  .ICEauthority +  .Xauthority +  .Xdefaults +  .android/ +  .arduino15/ +  .ash_history +[...] +``` + +根据你使用家目录的时间长短,此列表可能很长。简单的是你在上一步中确定的目录。通过将它们添加到名为 `.gitignore` 的隐藏文件中,你告诉 Git 停止将它们列为未跟踪文件,并且永远不对其进行跟踪: + +``` +$ \ls -lg | grep ^d | awk '{print $8}' >> ~/.gitignore +``` + +完成后,浏览 `git status` 所示的其余未跟踪文件,并确定是否有其他文件需要排除。这个过程帮助我发现了几个陈旧的配置文件和目录,这些文件和目录最终被我全部丢弃了,而且还发现了一些特定于一台计算机的文件和目录。我在这里非常严格,因为许多配置文件在自动生成时会表现得更好。例如,我从不提交我的 KDE 配置文件,因为许多文件包含了诸如最新文档之类的信息以及其他机器上不存在的其他元素。 + +我会跟踪我的个性化配置文件、脚本和实用程序、配置文件和 Bash 配置,以及速查表和我经常引用的其他文本片段。如果有软件主要负责维护的文件,则将其忽略。当对一个文件不确定时,我将其忽略。你以后总是可以取消忽略它(通过从 `.gitignore` 文件中删除它)。 + +### 3、了解你的数据 + +我使用的是 KDE,因此我使用开源扫描程序 [Filelight][7] 来了解我的数据概况。Filelight 为你提供了一个图表,可让你查看每个目录的大小。你可以浏览每个目录以查看占用了空间的内容,然后回溯调查其他地方。这是一个令人着迷的系统视图,它使你可以以全新的方式看待你的文件。 + +![Filelight][8] + +使用 Filelight 或类似的实用程序查找不需要提交的意外数据缓存。例如,KDE 文件索引器(Baloo)生成了大量特定于其主机的数据,我绝对不希望将其传输到另一台计算机。 + +### 4、不要忽略你的 `.gitignore` 文件 + +在某些项目中,我告诉 Git 忽略我的 `.gitignore` 文件,因为有时我要忽略的内容特定于我的工作目录,并且我不认为同一项目中的其他开发人员需要我告诉他们 `.gitignore` 文件应该是什么样子。因为我的家目录仅供我使用,所以我 _不_ 会忽略我的家目录的 `.gitignore` 文件。我将其与其他重要文件一起提交,因此它已在我的所有系统中被继承。当然,从家目录的角度来看,我所有的系统都是相同的:它们具有一组相同的默认文件夹和许多相同的隐藏配置文件。 + +### 5、不要担心二进制文件 + +我对我的系统进行了数周的严格测试,确信将二进制文件提交到 Git 绝对不是明智之举。我试过 GPG 加密的密码文件、试过 LibreOffice 文档、JPEG、PNG 等等。我甚至有一个脚本,可以在将 LibreOffice 文件添加到 Git 之前先解压缩,提取其中的 XML,以便仅提交 XML,然后重新构建 LibreOffice 文件,以便可以在 LibreOffice 中继续工作。我的理论是,提交 XML 会比使用 ZIP 文件(LibreOffice 文档实际上就是一个 ZIP 文件)会让 Git 存储库更小一些。 + +令我惊讶的是,我发现偶尔提交一些二进制文件并没有大幅增加我的 Git 存储库的大小。我使用 Git 已经很长时间了,我知道如果我要提交几千兆的二进制数据,我的存储库将会受到影响,但是偶尔提交几个二进制文件也不是不惜一切代价要避免的紧急情况。 + +有了这种信心,我将字体 OTF 和 TTF 文件添加到我的标准主存储库,以及 GDM 的 `.face` 文件以及其他偶尔小型二进制 Blob 文件。不要想太多,不要浪费时间去避免它。只需提交即可。 + +### 6、使用私有存储库 + +即使托管方提供了私人帐户,也不要将你的主目录提交到公共 Git 存储库。如果你像我一样,拥有 SSH 密钥、GPG 密钥链和 GPG 加密的文件,这些文件不应该出现在任何人的服务器上,而应该出现在我自己的服务器上。 + +我在树莓派上 [运行本地 Git 服务器][9](这比你想象的要容易),因此我可以在家里时随时更新任何一台计算机。我是一名远程工作者,所以通常情况下就足够了,但是我也可以在旅行时通过 [虚拟私人网络][10] 访问我的计算机。 + +### 7、要记得推送 + +Git 的特点是,只有当你告诉它要推送改动时,它才会把改动推送到你的服务器上。如果你是 Git 的老用户,则此过程可能对你很自然。对于可能习惯于 Nextcloud 或 Syncthing 自动同步的新用户,这可能需要一些时间来适应。 + +### Git 家目录 + +使用 Git 管理我的常用文件,不仅使我在不同设备上的生活更加便利。我知道我拥有所有配置和实用程序脚本的完整历史记录,这会鼓励我尝试新的想法,因为如果结果变得 _很糟糕_,则很容易回滚我的更改。Git 曾将我从在 `.bashrc` 文件中一个欠考虑的 `umask` 设置中解救出来、从深夜对包管理脚本的拙劣添加中解救出来、从当时看似很酷的 [rxvt][11] 配色方案的修改中解救出来,也许还有其他一些错误。在家目录中尝试 Git 吧,因为这些提交会让家目录融合在一起。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/git-home + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[stevenzdg988](https://github.com/stevenzdg988) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/house_home_colors_live_building.jpg?itok=HLpsIfIL (Houses in a row) +[2]: https://opensource.com/article/17/2/pocketchip-or-pi +[3]: https://opensource.com/article/21/2/chromebook-linux +[4]: https://opensource.com/article/17/5/introduction-alias-command-line-tool +[5]: https://opensource.com/sites/default/files/uploads/home-git.jpg (home directory) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://utils.kde.org/projects/filelight +[8]: https://opensource.com/sites/default/files/uploads/filelight.jpg (Filelight) +[9]: https://opensource.com/life/16/8/how-construct-your-own-git-server-part-6 +[10]: https://www.redhat.com/sysadmin/run-your-own-vpn-libreswan +[11]: https://opensource.com/article/19/10/why-use-rxvt-terminal diff --git a/published/202104/20210406 Experiment on your code freely with Git worktree.md b/published/202104/20210406 Experiment on your code freely with Git worktree.md new file mode 100644 index 0000000000..b684e0e46f --- /dev/null +++ b/published/202104/20210406 Experiment on your code freely with Git worktree.md @@ -0,0 +1,135 @@ +[#]: subject: (Experiment on your code freely with Git worktree) +[#]: via: (https://opensource.com/article/21/4/git-worktree) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13301-1.html) + +使用 Git 工作树对你的代码进行自由实验 +====== + +> 获得自由尝试的权利,同时在你的实验出错时可以安全地拥有一个新的、链接的克隆存储库。 + +![](https://img.linux.net.cn/data/attachment/album/202104/16/085512x3auafu5uaymk52u.jpg) + +Git 的设计部分是为了进行实验。如果你知道你的工作会被安全地跟踪,并且在出现严重错误时有安全状态存在,你就不会害怕尝试新的想法。不过,创新的部分代价是,你很可能会在这个过程中弄得一团糟。文件会被重新命名、移动、删除、更改、切割成碎片;新的文件被引入;你不打算跟踪的临时文件会在你的工作目录中占据一席之地等等。 + +简而言之,你的工作空间变成了纸牌屋,在“快好了!”和“哦,不,我做了什么?”之间岌岌可危地平衡着。那么,当你需要把仓库恢复到下午的一个已知状态,以便完成一些真正的工作时,该怎么办?我立刻想到了 `git branch` 和 [git stash][2] 这两个经典命令,但这两个命令都不是用来处理未被跟踪的文件的,而且文件路径的改变和其他重大的转变也会让人困惑,它们只能把工作暂存(`stash`)起来以备后用。解决这个需求的答案是 Git 工作树。 + +### 什么是 Git 工作树 + +Git 工作树worktree是 Git 仓库的一个链接副本,允许你同时签出多个分支。工作树与主工作副本的路径是分开的,它可以处于不同的状态和不同的分支上。在 Git 中新建工作树的好处是,你可以在不干扰当前工作环境的情况下,做出与当前任务无关的修改、提交修改,然后在以后合并。 + +直接从 `git-worktree` 手册中找到了一个典型的例子:当你正在为一个项目做一个令人兴奋的新功能时,你的项目经理告诉你有一个紧急的修复工作。问题是你的工作仓库(你的“工作树”)处于混乱状态,因为你正在开发一个重要的新功能。你不想在当前的冲刺中“偷偷地”进行修复,而且你也不愿意把变更暂存起来,为修复创建一个新的分支。相反,你决定创建一个新的工作树,这样你就可以在那里进行修复: + +``` +$ git branch | tee +* dev +trunk +$ git worktree add -b hotfix ~/code/hotfix trunk +Preparing ../hotfix (identifier hotfix) +HEAD is now at 62a2daf commit +``` + +在你的 `code` 目录中,你现在有一个新的目录叫做 `hotfix`,它是一个与你的主项目仓库相连的 Git 工作树,它的 `HEAD` 停在叫做 `trunk` 的分支上。现在你可以把这个工作树当作你的主工作区来对待。你可以把目录切换到它里面,进行紧急修复、提交、并最终删除这个工作树: + +``` +$ cd ~/code/hotfix +$ sed -i 's/teh/the/' hello.txt +$ git commit --all --message 'urgent hot fix' +``` + +一旦你完成了你的紧急工作,你就可以回到你之前的任务。你可以控制你的热修复何时被集成到主项目中。例如,你可以直接将变更从其工作树推送到项目的远程存储库中: + +``` +$ git push origin HEAD +$ cd ~/code/myproject +``` + +或者你可以将工作树存档为 TAR 或 ZIP 文件: + +``` +$ cd ~/code/myproject +$ git archive --format tar --output hotfix.tar master +``` + +或者你可以从单独的工作树中获取本地的变化: + +``` +$ git worktree list +/home/seth/code/myproject  15fca84 [dev] +/home/seth/code/hotfix     09e585d [master] +``` + +从那里,你可以使用任何最适合你和你的团队的策略合并你的变化。 + +### 列出活动工作树 + +你可以使用 `git worktree list` 命令获得工作树的列表,并查看每个工作树签出的分支: + +``` +$ git worktree list +/home/seth/code/myproject  15fca84 [dev] +/home/seth/code/hotfix     09e585d [master] +``` + +你可以在任何一个工作树中使用这个功能。工作树始终是连接的(除非你手动移动它们,破坏 Git 定位工作树的能力,从而切断连接)。 + +### 移动工作树 + +Git 会跟踪项目 `.git` 目录下工作树的位置和状态: + +``` +$ cat ~/code/myproject/.git/worktrees/hotfix/gitdir +/home/seth/code/hotfix/.git +``` + +如果你需要重定位一个工作树,必须使用 `git worktree move`;否则,当 Git 试图更新工作树的状态时,就会失败: + +``` +$ mkdir ~/Temp +$ git worktree move hotfix ~/Temp +$ git worktree list +/home/seth/code/myproject  15fca84 [dev] +/home/seth/Temp/hotfix     09e585d [master] +``` + +### 移除工作树 + +当你完成你的工作时,你可以用 `remove` 子命令删除它: + +``` +$ git worktree remove hotfix +$ git worktree list +/home/seth/code/myproject  15fca84 [dev] +``` + +为了确保你的 `.git` 目录是干净的,在删除工作树后使用 `prune` 子命令: + +``` +$ git worktree remove prune +``` + +### 何时使用工作树 + +与许多选项一样,无论是标签还是书签还是自动备份,都要靠你来跟踪你产生的数据,否则可能会变得不堪重负。不要经常使用工作树,要不你最终会有 20 份存储库的副本,每份副本的状态都略有不同。我发现最好是创建一个工作树,做需要它的任务,提交工作,然后删除树。保持简单和专注。 + +重要的是,工作树为你管理 Git 存储库的方式提供了更好的灵活性。在需要的时候使用它们,再也不用为了检查另一个分支上的内容而争先恐后地保存工作状态了。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/git-worktree + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/science_experiment_beaker_lab.png?itok=plKWRhlU (Science lab with beakers) +[2]: https://linux.cn/article-13293-1.html diff --git a/published/202104/20210406 Teach anyone how to code with Hedy.md b/published/202104/20210406 Teach anyone how to code with Hedy.md new file mode 100644 index 0000000000..68b0c45815 --- /dev/null +++ b/published/202104/20210406 Teach anyone how to code with Hedy.md @@ -0,0 +1,80 @@ +[#]: subject: (Teach anyone how to code with Hedy) +[#]: via: (https://opensource.com/article/21/4/hedy-teach-code) +[#]: author: (Joshua Allen Holm https://opensource.com/users/holmja) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13290-1.html) + +用 Hedy 教人编程 +====== + +> Hedy 是一种专门为教人编程而设计的新型编程语言。 + +![](https://img.linux.net.cn/data/attachment/album/202104/12/111814w62da2sannsd2q76.jpg) + +学习编程既要学习编程逻辑,又要学习特定编程语言的语法。我在大学上第一堂编程课的时候,教的语言是 C++。第一个代码例子是基本的 “Hello World” 程序,就像下面的例子。 + +``` +#include + +int main() { + std::cout << "Hello World!"; + return 0; +} +``` + +老师直到几节课后才会解释大部分的代码。我们的期望是,我们只需输入代码,并最终了解为什么需要这些东西以及它们如何工作。 + +C++(以及其他类似的语言)的复杂语法是为什么 Python 经常被建议作为一种更容易的编程教学语言。下面是 Python 中的同一个例子: + +``` +print("Hello World!") +``` + +虽然 Python 中的 “Hello World” 基础例子要简单得多,但它仍然有复杂而精确的语法规则。`print` 函数需要在字符串周围加括号和引号。这对于没有编程经验的人来说,还是会感到困惑。Python 比 C++ 少了 “我以后再解释” 的语法问题,但还是有一些。 + +[Hedy][2] 是一种专门为编码教学而设计的新语言,它通过在语言中将复杂性分成多个关卡来解决语法复杂性的问题。Hedy 没有马上提供语言的全部功能,而是采取循序渐进的方式,随着学生在 Hedy 的学习的通关,慢慢变得更加复杂。随着关卡的进展,该语言获得了新的功能,最终变得更像 Python。目前有七个关卡,但更多的关卡正在计划中。 + +在第 1 关,Hedy 程序除了打印(`print`)一条语句(不需要引号或括号),提出(`ask`)一个问题,并回传(`echo`)一个答案外,不能做任何事情。第 1 关没有变量,没有循环,结构极精简。回传的工作原理几乎和变量一样,但只针对用户的最后一个输入。这可以让学生对基本概念感到舒适,而不必一下子学习所有的东西。 + +这是一个第 1 关的 Hedy “Hello World” 程序: + +``` +print Hello World +``` + +第 2 关引入了变量,但由于 `print` 函数没有使用引号,可能会出现一些有趣的结果。如果用来存储一个人的名字的变量是 `name`,那么就不可能打印输出 `Your name is [name]`,因为 `name` 的第一次使用(本意是字符串)和第二次使用(是变量)都被解释为变量。如果将 `name` 设置为(`is`) `John Doe`,那么 `print Your name is name.` 的输出就会是 `Your John Doe is John Doe`。虽然这听起来很奇怪,但这是一个引入变量概念的好方法,这恰好是第 3 关中增加的一个功能。 + +第 3 关要求在字符串周围加引号,这使得变量的功能就像在 Python 中一样。现在可以输出与变量相结合的字符串,做出复杂的语句,而不用担心变量名和字符串中的单词之间的冲突。这个级别取消了 “回传”(`echo`)函数,这看起来确实是一个可能会让一些学习者感到沮丧的东西。他们应该使用变量,这是更好的代码,但如果一个 `ask`/`echo` 代码块变成无效语法,可能会让人感到困惑。 + +第 4 关增加了基本的 `if`/`else` 功能。学生可以从简单的问/答代码转向复杂的交互。例如,一个问“你最喜欢的颜色是什么?”的提示可以根据用户输入的内容接受不同的回复。如果他们输入绿色,回答可以是“绿色!这也是我最喜欢的颜色。”如果他们输入其他的东西,回复可以是不同的。`if`/`else` 块是一个基本的编程概念,Hedy 引入了这个概念,而不必担心复杂的语法或过于精确的格式。 + +第 5 关有一个 `repeat` 函数,在现有的功能上增加了一个基本的循环。这个循环只能多次重复同一个命令,所以它没有 Python 中的循环那么强大,但它让学生习惯了重复命令的一般概念。这是多介绍了一个编程概念,而不会用无谓的复杂来拖累。学生们可以先掌握概念的基础知识,然后再继续学习同一事物的更强大、更复杂的版本。 + +在第 6 关,Hedy 现在可以进行基本的数学计算。加法、减法、乘法和除法都支持,但更高级的数学功能不支持。不能使用指数、模数或其他任何 Python 和其他语言能处理的东西。目前,Hedy 还没有更高关卡的产品增加更复杂的数学功能。 + +第 7 关引入了 Python 风格的缩进,这意味着 `repeat` 可以处理多行代码。学生在这之前都是逐行处理代码,但现在他们可以处理代码块。这个 Hedy 关卡与非教学型编程语言能做的事情相比还是有很大的差距,但它可以教会学生很多东西。 + +开始学习 Hedy 最简单的方法是访问 Hedy 网站上的 [课程][3],目前有荷兰语、英语、法语、德语、葡萄牙语和西班牙语。这样一来,任何有网页浏览器的人都可以进入学习过程。也可以从 [GitHub][4] 下载 Hedy,并从命令行运行解释器,或者运行 Hedy 网站的本地副本及其交互式课程。基于网页的版本更容易使用,但网页版本和命令行版本都支持运行针对不同复杂程度的 Hedy 程序。 + +Hedy 永远不会与 Python、C++ 或其他语言竞争,成为现实世界项目编码的首选语言,但它是编码教学的绝佳方式。作为学习过程的一部分,学生编写的程序是真实的,甚至可能是复杂的。Hedy 可以促进学生的学习和创造力,而不会让学生在学习过程中过早地被过多的信息所迷惑。就像数学课一样,在进入微积分之前很久要从学习计数、相加等开始(这个过程需要数年时间),编程也不必一开始就对编程语言的语法问题“我稍后再解释”、精确地遵循这些语法问题,才能产生哪怕是最基本的语言程序。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/hedy-teach-code + +作者:[Joshua Allen Holm][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/holmja +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/5538035618_4e19c9787c_o.png?itok=naiD1z1S (Teacher or learner?) +[2]: https://www.hedycode.com/ +[3]: https://www.hedycode.com/hedy?lang=en +[4]: https://github.com/felienne/hedy diff --git a/published/202104/20210407 Show CPU Details Beautifully in Linux Terminal With CPUFetch.md b/published/202104/20210407 Show CPU Details Beautifully in Linux Terminal With CPUFetch.md new file mode 100644 index 0000000000..e366481a6f --- /dev/null +++ b/published/202104/20210407 Show CPU Details Beautifully in Linux Terminal With CPUFetch.md @@ -0,0 +1,107 @@ +[#]: subject: (Show CPU Details Beautifully in Linux Terminal With CPUFetch) +[#]: via: (https://itsfoss.com/cpufetch/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13289-1.html) + +使用 CPUFetch 在 Linux 终端中漂亮地显示 CPU 细节 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/12/093818iie270mi8am6ttk7.jpg) + +Linux 上有 [检查 CPU 信息的方法][1]。最常见的可能是 `lscpu` 命令,它可以提供大量的系统上所有 CPU 核心的信息。 + +![lscpu command output][2] + +你可以在那里找到 CPU 信息,而无需安装任何额外的包。当然这是可行的。然而,我最近偶然发现了一个新的工具,它以一种漂亮的方式显示 Linux 中的 CPU 细节。 + +处理器制造商的 ASCII 艺术使它看起来很酷。 + +![][3] + +这看起来很美,不是吗?这类似于 [Neoftech 或者 Screenfetch,在 Linux 中用漂亮的 ASCII 艺术来展示系统信息][4]。与这些工具类似,如果你要展示你的桌面截图,可以使用 CPUFetch。 + +该工具可以输出处理器制造商的 ASCII 艺术,它的名称、微架构、频率、核心、线程、峰值性能、缓存大小、[高级向量扩展][5] 等等。 + +除了它提供的一些主题外,你还可以使用自定义颜色。当你在整理桌面,并希望对 Linux 环境中的所有元素进行颜色匹配时,这给了你更多的自由度。 + +### 在 Linux 上安装 CPUFetch + +不幸的是,CPUFetch 是一个相当新的软件,而且它并不包含在你的发行版的软件库中,甚至没有提供现成的 DEB/RPM 二进制文件、PPA、Snap 或 Flatpak 包。 + +Arch Linux 用户可以在 [AUR][7] 中 [找到][6] 它,但对于其他人来说,唯一的出路是 [从源代码构建][8]。 + +不要担心。安装以及删除并不是那么复杂。让我来告诉你步骤。 + +我使用的是 Ubuntu,你会 [需要先在 Ubuntu 上安装 Git][9]。一些发行版会预装 Git,如果没有,请使用你的发行版的包管理器来安装。 + +现在,把 Git 仓库克隆到你想要的地方。家目录也可以。 + +``` +git clone https://github.com/Dr-Noob/cpufetch +``` + +切换到你刚才克隆的目录: + +``` +cd cpufetch +``` + +你会在这里看到一个 Makefile 文件。用它来编译代码。 + +``` +make +``` + +![CPUFetch Installation][10] + +现在你会看到一个新的可执行文件,名为 `cpufetch`。你运行这个可执行文件来显示终端的 CPU 信息。 + +``` +./cpufetch +``` + +这是我系统的显示。AMD 的徽标用 ASCII 码看起来更酷,你不觉得吗? + +![][11] + +如何删除 CPUFetch?这很简单。当你编译代码时,它只产生了一个文件,而且也和其他代码在同一个目录下。 + +所以,要想从系统中删除 CPUFetch,只需删除它的整个文件夹即可。你知道 [在 Linux 终端中删除一个目录][12] 的方法吧?从 `cpufetch` 目录中出来,然后使用 `rm` 命令。 + +``` +rm -rf cpufetch +``` + +这很简单,值得庆幸的是,因为从源代码中删除安装的软件有时真的很棘手。 + +说回 CPUFetch。我想这是一个实用工具,适合那些喜欢在各种 Linux 群里炫耀自己桌面截图的人。既然发行版有了 Neofetch,CPU 有了 CPUFetch,不知道能不能也来个 Nvidia ASCII 艺术的 GPUfetch? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/cpufetch/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://linuxhandbook.com/check-cpu-info-linux/ +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/lscpu-command-output.png?resize=800%2C415&ssl=1 +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/cpufetch-1.png?resize=800%2C307&ssl=1 +[4]: https://itsfoss.com/display-linux-logo-in-ascii/ +[5]: https://software.intel.com/content/www/us/en/develop/articles/introduction-to-intel-advanced-vector-extensions.html +[6]: https://aur.archlinux.org/packages/cpufetch-git +[7]: https://itsfoss.com/aur-arch-linux/ +[8]: https://itsfoss.com/install-software-from-source-code/ +[9]: https://itsfoss.com/install-git-ubuntu/ +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/cpufetch-installation.png?resize=800%2C410&ssl=1 +[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/cpufetch-for-itsfoss.png?resize=800%2C335&ssl=1 +[12]: https://linuxhandbook.com/remove-files-directories/ diff --git a/published/202104/20210407 Using network bound disk encryption with Stratis.md b/published/202104/20210407 Using network bound disk encryption with Stratis.md new file mode 100644 index 0000000000..4c1440fd56 --- /dev/null +++ b/published/202104/20210407 Using network bound disk encryption with Stratis.md @@ -0,0 +1,284 @@ +[#]: subject: (Using network bound disk encryption with Stratis) +[#]: via: (https://fedoramagazine.org/network-bound-disk-encryption-with-stratis/) +[#]: author: (briansmith https://fedoramagazine.org/author/briansmith/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13340-1.html) + +使用 Stratis 的网络绑定磁盘加密 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/27/221704gyzyvyroyyrybany.jpg) + +在一个有许多加密磁盘的环境中,解锁所有的磁盘是一项困难的任务。网络绑定磁盘加密Network bound disk encryption(NBDE)有助于自动解锁 Stratis 卷的过程。这是在大型环境中的一个关键要求。Stratis 2.1 版本增加了对加密的支持,这在《[Stratis 加密入门][4]》一文中介绍过。Stratis 2.3 版本最近在使用加密的 Stratis 池时引入了对网络绑定磁盘加密(NBDE)的支持,这是本文的主题。 + +[Stratis 网站][5] 将 Stratis 描述为一个“_易于使用的 Linux 本地存储管理_”。短视频《[使用 Stratis 管理存储][6]》对基础知识进行了快速演示。该视频是在 Red Hat Enterprise Linux 8 系统上录制的,然而,视频中显示的概念也适用于 Fedora Linux 中的 Stratis。 + +### 先决条件 + +本文假设你熟悉 Stratis,也熟悉 Stratis 池加密。如果你不熟悉这些主题,请参考这篇 [文章][4] 和前面提到的 [Stratis 概述视频][6]。 + +NBDE 需要 Stratis 2.3 或更高版本。本文中的例子使用的是 Fedora Linux 34 的预发布版本。Fedora Linux 34 的最终版本将包含 Stratis 2.3。 + +### 网络绑定磁盘加密(NBDE)概述 + +加密存储的主要挑战之一是有一个安全的方法在系统重启后再次解锁存储。在大型环境中,手动输入加密口令并不能很好地扩展。NBDE 解决了这一问题,允许以自动方式解锁加密存储。 + +在更高层次上,NBDE 需要环境中的 Tang 服务器。客户端系统(使用 Clevis Pin)只要能与 Tang 服务器建立网络连接,就可以自动解密存储。如果网络没有连接到 Tang 服务器,则必须手动解密存储。 + +这背后的想法是,Tang 服务器只能在内部网络上使用,因此,如果加密设备丢失或被盗,它将不再能够访问内部网络连接到 Tang 服务器,因此不会被自动解密。 + +关于 Tang 和 Clevis 的更多信息,请参见手册页(`man tang`、`man clevis`)、[Tang 的 GitHub 页面][7] 和 [Clevis 的 GitHub 页面][8]。 + +### 设置 Tang 服务器 + +本例使用另一个 Fedora Linux 系统作为 Tang 服务器,主机名为 `tang-server`。首先安装 `tang` 包。 + +``` +dnf install tang +``` + +然后用 `systemctl` 启用并启动 `tangd.socket`。 + +``` +systemctl enable tangd.socket --now +``` + +Tang 使用的是 TCP 80 端口,所以你也需要在防火墙中打开该端口。 + +``` +firewall-cmd --add-port=80/tcp --permanent +firewall-cmd --add-port=80/tcp +``` + +最后,运行 `tang-show-keys` 来显示输出签名密钥指纹。你以后会需要这个。 + +``` +# tang-show-keys +l3fZGUCmnvKQF_OA6VZF9jf8z2s +``` + +### 创建加密的 Stratis 池 + +上一篇关于 Stratis 加密的文章详细介绍了如何设置加密的 Stratis 池,所以本文不会深入介绍。 + +第一步是捕获一个将用于解密 Stratis 池的密钥。即使使用 NBDE,也需要设置这个,因为在 NBDE 服务器无法到达的情况下,可以用它来手动解锁池。使用以下命令捕获 `pool1` 密钥。 + +``` +# stratis key set --capture-key pool1key +Enter key data followed by the return key: +``` + +然后我将使用 `/dev/vdb` 设备创建一个加密的 Stratis 池(使用刚才创建的 `pool1key`),命名为 `pool1`。 + +``` +# stratis pool create --key-desc pool1key pool1 /dev/vdb。 +``` + +接下来,在这个 Stratis 池中创建一个名为 `filesystem1` 的文件系统,创建一个挂载点,挂载文件系统,并在其中创建一个测试文件: + +``` +# stratis filesystem create pool1 filesystem1 +# mkdir /filesystem1 +# mount /dev/stratis/pool1/filesystem1 /filesystem1 +# cd /filesystem1 +# echo "this is a test file" > testfile +``` + +### 将 Stratis 池绑定到 Tang 服务器上 + +此时,我们已经创建了加密的 Stratis 池,并在池中创建了一个文件系统。下一步是将你的 Stratis 池绑定到刚刚设置的 Tang 服务器上。使用 `stratis pool bind nbde` 命令进行。 + +当你进行 Tang 绑定时,需要向该命令传递几个参数: + + * 池名(在本例中,`pool1`) + * 钥匙描述符名称(本例中为 `pool1key`) + * Tang 服务器名称(在本例中,`http://tang-server`) + +记得之前在 Tang 服务器上,运行了 `tang-show-keys`,显示 Tang 输出的签名密钥指纹是 `l3fZGUCmnvKQF_OA6VZF9jf8z2s`。除了前面的参数外,还需要用参数 `-thumbprint l3fZGUCmnvKQF_OA6VZF9jf8z2s` 传递这个指纹,或者用 `-trust-url` 参数跳过对指纹的验证。 + +使用 `-thumbprint` 参数更安全。例如: + +``` +# stratis pool bind nbde pool1 pool1key http://tang-server --thumbprint l3fZGUCmnvKQF_OA6VZF9jf8z2s +``` + +### 用 NBDE 解锁 Stratis 池 + +接下来重启主机,并验证你可以用 NBDE 解锁 Stratis 池,而不需要使用密钥口令。重启主机后,该池不再可用: + +``` +# stratis pool list +Name Total Physical Properties +``` + +要使用 NBDE 解锁池,请运行以下命令: + +``` +# stratis pool unlock clevis +``` + +注意,你不需要使用密钥口令。这个命令可以在系统启动时自动运行。 + +此时,Stratis 池已经可以使用了: + +``` +# stratis pool list +Name Total Physical Properties +pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr +``` + +你可以挂载文件系统,访问之前创建的文件: + +``` +# mount /dev/stratis/pool1/filesystem1 /filesystem1/ +# cat /filesystem1/testfile +this is a test file +``` + +### 轮换 Tang 服务器密钥 + +最好定期轮换 Tang 服务器密钥,并更新 Stratis 客户服务器以使用新的 Tang 密钥。 + +要生成新的 Tang 密钥,首先登录到 Tang 服务器,查看 `/var/db/tang` 目录的当前状态。然后,运行 `tang-show-keys` 命令: + +``` +# ls -al /var/db/tang +total 8 +drwx------. 1 tang tang 124 Mar 15 15:51 . +drwxr-xr-x. 1 root root 16 Mar 15 15:48 .. +-rw-r--r--. 1 tang tang 361 Mar 15 15:51 hbjJEDXy8G8wynMPqiq8F47nJwo.jwk +-rw-r--r--. 1 tang tang 367 Mar 15 15:51 l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk +# tang-show-keys +l3fZGUCmnvKQF_OA6VZF9jf8z2s +``` + +要生成新的密钥,运行 `tangd-keygen` 并将其指向 `/var/db/tang` 目录: + +``` +# /usr/libexec/tangd-keygen /var/db/tang +``` + +如果你再看看 `/var/db/tang` 目录,你会看到两个新文件: + +``` +# ls -al /var/db/tang +total 16 +drwx------. 1 tang tang 248 Mar 22 10:41 . +drwxr-xr-x. 1 root root 16 Mar 15 15:48 .. +-rw-r--r--. 1 tang tang 361 Mar 15 15:51 hbjJEDXy8G8wynMPqiq8F47nJwo.jwk +-rw-r--r--. 1 root root 354 Mar 22 10:41 iyG5HcF01zaPjaGY6L_3WaslJ_E.jwk +-rw-r--r--. 1 root root 349 Mar 22 10:41 jHxerkqARY1Ww_H_8YjQVZ5OHao.jwk +-rw-r--r--. 1 tang tang 367 Mar 15 15:51 l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk +``` + +如果你运行 `tang-show-keys`,就会显示出 Tang 所公布的密钥: + +``` +# tang-show-keys +l3fZGUCmnvKQF_OA6VZF9jf8z2s +iyG5HcF01zaPjaGY6L_3WaslJ_E +``` + +你可以通过将两个原始文件改名为以句号开头的隐藏文件,来防止旧的密钥(以 `l3fZ` 开头)被公布。通过这种方法,旧的密钥将不再被公布,但是它仍然可以被任何没有更新为使用新密钥的现有客户端使用。一旦所有的客户端都更新使用了新密钥,这些旧密钥文件就可以删除了。 + +``` +# cd /var/db/tang +# mv hbjJEDXy8G8wynMPqiq8F47nJwo.jwk .hbjJEDXy8G8wynMPqiq8F47nJwo.jwk +# mv l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk .l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk +``` + +此时,如果再运行 `tang-show-keys`,Tang 只公布新钥匙: + +``` +# tang-show-keys +iyG5HcF01zaPjaGY6L_3WaslJ_E +``` + +下一步,切换到你的 Stratis 系统并更新它以使用新的 Tang 密钥。当文件系统在线时, Stratis 支持这样做。 + +首先,解除对池的绑定: + +``` +# stratis pool unbind pool1 +``` + +接下来,用创建加密池时使用的原始口令设置密钥: + +``` +# stratis key set --capture-key pool1key +Enter key data followed by the return key: +``` + +最后,用更新后的密钥指纹将 Stratis 池绑定到 Tang 服务器上: + +``` +# stratis pool bind nbde pool1 pool1key http://tang-server --thumbprint iyG5HcF01zaPjaGY6L_3WaslJ_E +``` + +Stratis 系统现在配置为使用更新的 Tang 密钥。一旦使用旧的 Tang 密钥的任何其他客户系统被更新,在 Tang 服务器上的 `/var/db/tang` 目录中被重命名为隐藏文件的两个原始密钥文件就可以被备份和删除了。 + +### 如果 Tang 服务器不可用怎么办? + +接下来,关闭 Tang 服务器,模拟它不可用,然后重启 Stratis 系统。 + +重启后,Stratis 池又不可用了: + +``` +# stratis pool list +Name Total Physical Properties +``` + +如果你试图用 NBDE 解锁,会因为 Tang 服务器不可用而失败: + +``` +# stratis pool unlock clevis +Execution failed: +An iterative command generated one or more errors: The operation 'unlock' on a resource of type pool failed. The following errors occurred: +Partial action "unlock" failed for pool with UUID 4d62f840f2bb4ec9ab53a44b49da3f48: Cryptsetup error: Failed with error: Error: Command failed: cmd: "clevis" "luks" "unlock" "-d" "/dev/vdb" "-n" "stratis-1-private-42142fedcb4c47cea2e2b873c08fcf63-crypt", exit reason: 1 stdout: stderr: /dev/vdb could not be opened. +``` + +此时,在 Tang 服务器无法到达的情况下,解锁池的唯一选择就是使用原密钥口令: + +``` +# stratis key set --capture-key pool1key +Enter key data followed by the return key: +``` + +然后你可以使用钥匙解锁池: + +``` +# stratis pool unlock keyring +``` + +接下来,验证池是否成功解锁: + +``` +# stratis pool list +Name Total Physical Properties +pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr +``` + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/network-bound-disk-encryption-with-stratis/ + +作者:[briansmith][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/briansmith/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/03/stratis-nbde-816x345.jpg +[2]: https://unsplash.com/@imattsmart?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[3]: https://unsplash.com/s/photos/lock?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[4]: https://linux.cn/article-13311-1.html +[5]: https://stratis-storage.github.io/ +[6]: https://www.youtube.com/watch?v=CJu3kmY-f5o +[7]: https://github.com/latchset/tang +[8]: https://github.com/latchset/clevis diff --git a/published/202104/20210407 What is Git cherry-picking.md b/published/202104/20210407 What is Git cherry-picking.md new file mode 100644 index 0000000000..ba25e9572c --- /dev/null +++ b/published/202104/20210407 What is Git cherry-picking.md @@ -0,0 +1,187 @@ +[#]: subject: (What is Git cherry-picking?) +[#]: via: (https://opensource.com/article/21/4/cherry-picking-git) +[#]: author: (Rajeev Bera https://opensource.com/users/acompiler) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13295-1.html) + +什么是 Git 遴选(cherry-pick)? +====== + +> 了解 `git cherry-pick` 命令是什么,为什么用以及如何使用。 + +![](https://img.linux.net.cn/data/attachment/album/202104/14/131735o63v3ow6y2wc281o.jpg) + +当你和一群程序员一起工作时,无论项目大小,处理多个 Git 分支之间的变更都会变得很困难。有时,你不想将整个 Git 分支合并到另一个分支,而是想选择并移动几个特定的提交。这个过程被称为 “遴选cherry-pick”。 + +本文将介绍“遴选”是什么、为何使用以及如何使用。 + +那么让我们开始吧。 + +### 什么是遴选? + +使用遴选(`cherry-pick`)命令,Git 可以让你将任何分支中的个别提交合并到你当前的 [Git HEAD][2] 分支中。 + +当执行 `git merge` 或者 `git rebase` 时,一个分支的所有提交都会被合并。`cherry-pick` 命令允许你选择单个提交进行整合。 + +### 遴选的好处 + +下面的情况可能会让你更容易理解遴选功能。 + +想象一下,你正在为即将到来的每周冲刺实现新功能。当你的代码准备好了,你会把它推送到远程分支,准备进行测试。 + +然而,客户并不是对所有修改都满意,要求你只呈现某些修改。因为客户还没有批准下次发布的所有修改,所以 `git rebase` 不会有预期的结果。为什么会这样?因为 `git rebase` 或者 `git merge` 会把上一个冲刺的每一个调整都纳入其中。 + +遴选就是答案!因为它只关注在提交中添加的变更,所以遴选只会带入批准的变更,而不添加其他的提交。 + +还有其他几个原因可以使用遴选: + + * 这对于 bug 修复是必不可少的,因为 bug 是出现在开发分支中对应的提交的。 + * 你可以通过使用 `git cherry-pick` 来避免不必要的工作,而不用使用其他选项例如 `git diff` 来应用特定变更。 + * 如果因为不同 Git 分支的版本不兼容而无法将整个分支联合起来,那么它是一个很有用的工具。 + +### 使用 cherry-pick 命令 + +在 `cherry-pick` 命令的最简单形式中,你只需使用 [SHA][3] 标识符来表示你想整合到当前 HEAD 分支的提交。 + +要获得提交的哈希值,可以使用 `git log` 命令: + +``` +$ git log --oneline +``` + +当你知道了提交的哈希值后,你就可以使用 `cherry-pick` 命令。 + +语法是: + +``` +$ git cherry-pick +``` + +例如: + +``` +$ git cherry-pick 65be1e5 +``` + +这将会把指定的修改合并到当前已签出的分支上。 + +如果你想做进一步的修改,也可以让 Git 将提交的变更内容添加到你的工作副本中。 + +语法是: + +``` +$ git cherry-pick --no-commit +``` + +例如: + +``` +$ git cherry-pick 65be1e5 --no-commit +``` + +如果你想同时选择多个提交,请将它们的提交哈希值用空格隔开: + +``` +$ git cherry-pick hash1 hash3 +``` + +当遴选提交时,你不能使用 `git pull` 命令,因为它能获取一个仓库的提交**并**自动合并到另一个仓库。`cherry-pick` 是一个专门不这么做的工具;另一方面,你可以使用 `git fetch`,它可以获取提交,但不应用它们。毫无疑问,`git pull` 很方便,但它不精确。 + +### 自己尝试 + +要尝试这个过程,启动终端并生成一个示例项目: + +``` +$ mkdir fruit.git +$ cd fruit.git +$ git init . +``` + +创建一些数据并提交: + +``` +$ echo "Kiwifruit" > fruit.txt +$ git add fruit.txt +$ git commit -m 'First commit' +``` + +现在,通过创建一个项目的复刻来代表一个远程开发者: + +``` +$ mkdir ~/fruit.fork +$ cd !$ +$ echo "Strawberry" >> fruit.txt +$ git add fruit.txt +$ git commit -m 'Added a fruit" +``` + +这是一个有效的提交。现在,创建一个不好的提交,代表你不想合并到你的项目中的东西: + +``` +$ echo "Rhubarb" >> fruit.txt +$ git add fruit.txt +$ git commit -m 'Added a vegetable that tastes like a fruit" +``` + +返回你的仓库,从你的假想的开发者那里获取提交的内容: + +``` +$ cd ~/fruit.git +$ git remote add dev ~/fruit.fork +$ git fetch dev +remote: Counting objects: 6, done. +remote: Compressing objects: 100% (2/2), done. +remote: Total 6 (delta 0), reused 0 (delta 0) +Unpacking objects: 100% (6/6), done... +``` + +``` +$ git log –oneline dev/master +e858ab2 Added a vegetable that tastes like a fruit +0664292 Added a fruit +b56e0f8 First commit +``` + +你已经从你想象中的开发者那里获取了提交的内容,但你还没有将它们合并到你的版本库中。你想接受第二个提交,但不想接受第三个提交,所以使用 `cherry-pick`。 + +``` +$ git cherry-pick 0664292 +``` + +第二次提交现在在你的仓库里了: + +``` +$ cat fruit.txt +Kiwifruit +Strawberry +``` + +将你的更改推送到远程服务器上,这就完成了! + +### 避免使用遴选的原因 + +在开发者社区中,通常不鼓励所以遴选。主要原因是它会造成重复提交,而你也失去了跟踪你的提交历史的能力。 + +如果你不按顺序地遴选了大量的提交,这些提交会被记录在你的分支中,这可能会在 Git 分支中导致不理想的结果。 + +遴选是一个强大的命令,如果没有正确理解可能发生的情况,它可能会导致问题。不过,当你搞砸了,提交到错误的分支时,它可能会救你一命(至少是你当天的工作)。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/cherry-picking-git + +作者:[Rajeev Bera][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/acompiler +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/pictures/cherry-picking-recipe-baking-cooking.jpg?itok=XVwse6hw (Measuring and baking a cherry pie recipe) +[2]: https://acompiler.com/git-head/ +[3]: https://en.wikipedia.org/wiki/Secure_Hash_Algorithms diff --git a/published/202104/20210407 Why I love using bspwm for my Linux window manager.md b/published/202104/20210407 Why I love using bspwm for my Linux window manager.md new file mode 100644 index 0000000000..8050039891 --- /dev/null +++ b/published/202104/20210407 Why I love using bspwm for my Linux window manager.md @@ -0,0 +1,107 @@ +[#]: subject: (Why I love using bspwm for my Linux window manager) +[#]: via: (https://opensource.com/article/21/4/bspwm-linux) +[#]: author: (Stephen Adams https://opensource.com/users/stevehnh) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13308-1.html) + +为什么我喜欢用 bspwm 来做我的 Linux 窗口管理器 +====== + +> 在 Fedora Linux 上安装、配置并开始使用 bspwm 窗口管理器。 + +![](https://img.linux.net.cn/data/attachment/album/202104/18/114637hxvqp4hfvbbhihb4.jpg) + +有些人喜欢重新布置家具。还有的人喜欢尝试新鞋或定期重新装修他们的卧室。我呢,则是尝试 Linux 桌面。 + +在对网上看到的一些不可思议的桌面环境流口水之后,我对一个窗口管理器特别好奇:[bspwm][2]。 + +![bspwm desktop][3] + +我喜欢 [i3][5] 窗口管理器已经有一段时间了,我很喜欢它的布局方式和上手的便捷性。但 bspwm 的某些特性吸引了我。有几个原因让我决定尝试一下: + + * 它_只是_一个窗口管理器(WM)。 + * 它由几个易于配置的脚本管理。 + * 它默认支持窗口之间的间隙。 + +可能是最需要指出的第一个原因是它只是一个窗口管理器。和 i3 一样,默认情况下没有任何图形化的那些花哨东西。你当然可以随心所欲地定制它,但_你_需要付出努力来使它看起来像你想要的。这也是它吸引我的部分原因。 + +虽然它可以在许多发行版上使用,但在我这个例子中使用的是 Fedora Linux。 + +### 安装 bspwm + +bspwm 在大多数常见的发行版中都有打包,所以你可以用系统的包管理器安装它。下面这个命令还会安装 [sxkhd][6],这是一个 X 窗口系统的守护程序,它“通过执行命令对输入事件做出反应”;还有 [dmenu][7],这是一个通用的 X 窗口菜单: + +``` +dnf install bspwm sxkhd dmenu +``` + +因为 bspwm 只是一个窗口管理器,所以没有任何内置的快捷键或键盘命令。这也是它与 i3 等软件的不同之处。所以,在你第一次启动窗口管理器之前,请先配置一下 `sxkhd`: + +``` +systemctl start sxkhd +systemctl enable sxkhd +``` + +这样就可以在登录时启用 `sxkhd`,但你还需要一些基本功能的配置: + +``` +curl https://raw.githubusercontent.com/baskerville/bspwm/master/examples/sxhkdrc --output ~/.config/sxkhd/sxkhdrc +``` + +在你深入了解之前,不妨先看看这个文件,因为有些脚本调用的命令可能在你的系统中并不存在。一个很好的例子是调用 `urxvt` 的 `super + Return` 快捷键。把它改成你喜欢的终端,尤其是当你没有安装 `urxvt` 的时候: + +``` +# +# wm independent hotkeys +# +    +# terminal emulator +super + Return +        urxvt +    +# program launcher +super + @space +        dmenu_run +``` + +如果你使用的是 GDM、LightDM 或其他显示管理器(DM),只要在登录前选择 `bspwm` 即可。 + +### 配置 bspwm + +当你登录后,你会看到屏幕上什么都没有。这不是你感觉到的空虚感。而是无限可能性!你现在可以开始摆弄桌面环境的所有部分了。你现在可以开始摆弄这些年你认为理所当然的桌面环境的所有部分了。从头开始构建并不容易,但一旦你掌握了诀窍,就会非常有收获。 + +任何窗口管理器最困难的是掌握快捷键。你开始会很慢,但在很短的时间内,你就可以只使用键盘在系统中到处操作,在你的朋友和家人面前看起来像一个终极黑客。 + +你可以通过编辑 `~/.config/bspwm/bspwmrc`,在启动时添加应用,设置桌面和显示器,并为你的窗口应该如何表现设置规则,随心所欲地定制系统。有一些默认设置的例子可以让你开始使用。键盘快捷键都是由 `sxkhdrc` 文件管理的。 + +还有更多的开源项目可以安装,让你的电脑看起来更漂亮,比如用于桌面背景的 [Feh][8]、状态栏的 [Polybar][9]、应用启动器的 [Rofi][10],还有 [Compton][11] 可以给你提供阴影和透明度,可以让你的电脑看起来焕然一新。 + +玩得愉快! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/bspwm-linux + +作者:[Stephen Adams][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/stevehnh +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/windows_building_sky_scale.jpg?itok=mH6CAX29 (Tall building with windows) +[2]: https://github.com/baskerville/bspwm +[3]: https://opensource.com/sites/default/files/uploads/bspwm-desktop.png (bspwm desktop) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://i3wm.org/ +[6]: https://github.com/baskerville/sxhkd +[7]: https://linux.die.net/man/1/dmenu +[8]: https://github.com/derf/feh +[9]: https://github.com/polybar/polybar +[10]: https://github.com/davatorium/rofi +[11]: https://github.com/chjj/compton diff --git a/published/202104/20210409 4 ways open source gives you a competitive edge.md b/published/202104/20210409 4 ways open source gives you a competitive edge.md new file mode 100644 index 0000000000..4a9603b1ba --- /dev/null +++ b/published/202104/20210409 4 ways open source gives you a competitive edge.md @@ -0,0 +1,84 @@ +[#]: subject: (4 ways open source gives you a competitive edge) +[#]: via: (https://opensource.com/article/21/4/open-source-competitive-advantage) +[#]: author: (Jason Blais https://opensource.com/users/jasonblais) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13299-1.html) + +开源为你带来竞争优势的 4 种方式 +====== + +> 使用开源技术可以帮助组织获得更好的业务结果。 + +![](https://img.linux.net.cn/data/attachment/album/202104/15/085345a2aani3axxj7wcis.jpg) + +构建技术栈是每个组织的主要决策。选择合适的工具将让团队获得成功,选择错误的解决方案或平台会对生产率和利润率产生毁灭性影响。为了在当今快节奏的世界中脱颖而出,组织必须明智地选择数字解决方案,好的数字解决方案可以提升团队行动力与运营敏捷性。 + +这就是为什么越来越多的组织都采用开源解决方案的原因,这些组织来自各行各业,规模有大有小。根据 [麦肯锡][2] 最近的报告,高绩效组织的最大区别是采用不同的开源方案。 + +采用开源技术可以帮助组织提高竞争优势、获得更好业务成果的原因有以下四点。 + +### 1、可拓展性和灵活性 + +可以说,技术世界发展很快。例如,在 2014 年之前,Kubernetes 并不存在,但今天,它却令人印象深刻,无处不在。根据 CNCF [2020 云原生调查][3],91% 的团队正在以某种形式使用 Kubernetes。 + +组织投资开源的一个主要原因是因为开源赋予组织行动敏捷性,组织可以迅速地将新技术集成到技术栈中。这与传统方法不同,在传统方法中,团队需要几个季度甚至几年来审查、实施、采用软件,这导致团队不可能实现火速转变。 + +开源解决方案完整地提供源代码,团队可以轻松将软件与他们每天使用的工具连接起来。 + +简而言之,开源让开发团队能够为手头的东西构建完美的工具,而不是被迫改变工作方式来适应不灵活的专有工具。 + +### 2、安全性和高可信的协作 + +在数据泄露备受瞩目的时代,组织需要高度安全的工具来保护敏感数据的安全。 + +专有解决方案中的漏洞不易被发现,被发现时为时已晚。不幸的是,使用这些平台的团队无法看到源代码,本质上是他们将安全性外包给特定供应商,并希望得到最好的结果。 + +采用开源的另一个主要原因是开源工具使组织能够自己把控安全。例如,开源项目——尤其是拥有大型开源社区的项目——往往会收到更负责任的漏洞披露,因为每个人在使用过程中都可以彻底检查源代码。 + +由于源代码是免费提供的,因此披露通常伴随着修复缺陷的详细建议解决方案。这些方案使得开发团队能够快速解决问题,不断增强软件。 + +在远程办公时代,对于分布式团队来说,在知道敏感数据受到保护的情况下进行协作比以往任何时候都更重要。开源解决方案允许组织审核安全性、完全掌控自己数据,因此开源方案可以促进远程环境下高可信协作方式的成长。 + +### 3、不受供应商限制 + +根据 [最近的一项研究][4],68% 的 CIO 担心受供应商限制。当你受限于一项技术中,你会被迫接受别人的结论,而不是自己做结论。 + +当组织更换供应商时,专有解决方案通常会 [给你带走数据带来挑战][5]。另一方面,开源工具提供了组织需要的自由度和灵活性,以避免受供应商限制,开源工具可以让组织把数据带去任意地方。 + +### 4、顶尖人才和社区 + +随着越来越多的公司 [接受远程办公][6],人才争夺战变得愈发激烈。 + +在软件开发领域,获得顶尖人才始于赋予工程师先进工具,让工程师在工作中充分发挥潜力。开发人员 [越来越喜欢开源解决方案][7] 而不是专有解决方案,组织应该强烈考虑用开源替代商业解决方案,以吸引市场上最好的开发人员。 + +除了雇佣、留住顶尖人才更容易,公司能够通过开源平台利用贡献者社区,得到解决问题的建议,从平台中得到最大收益。此外,社区成员还可以 [直接为开源项目做贡献][8]。 + +### 开源带来自由 + +开源软件在企业团队中越来越受到欢迎——[这是有原因的][8]。它帮助团队灵活地构建完美的工作工具,同时使团队可以维护高度安全的环境。同时,开源允许团队掌控未来方向,而不是局限于供应商的路线图。开源还帮助公司接触才华横溢的工程师和开源社区成员。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/open-source-competitive-advantage + +作者:[Jason Blais][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jasonblais +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/openwires_fromRHT_520_0612LL.png?itok=PqZi55Ab (Open ethernet cords.) +[2]: https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/developer-velocity-how-software-excellence-fuels-business-performance# +[3]: https://www.cncf.io/blog/2020/11/17/cloud-native-survey-2020-containers-in-production-jump-300-from-our-first-survey/ +[4]: https://solutionsreview.com/cloud-platforms/flexera-68-percent-of-cios-worry-about-vendor-lock-in-with-public-cloud/ +[5]: https://www.computerworld.com/article/3428679/mattermost-makes-case-for-open-source-as-team-messaging-market-booms.html +[6]: https://mattermost.com/blog/tips-for-working-remotely/ +[7]: https://opensource.com/article/20/6/open-source-developers-survey +[8]: https://mattermost.com/blog/100-most-popular-mattermost-features-invented-and-contributed-by-our-amazing-open-source-community/ +[9]: https://mattermost.com/open-source-advantage/ diff --git a/published/202104/20210410 5 signs you-re a groff programmer.md b/published/202104/20210410 5 signs you-re a groff programmer.md new file mode 100644 index 0000000000..53e41c98fd --- /dev/null +++ b/published/202104/20210410 5 signs you-re a groff programmer.md @@ -0,0 +1,80 @@ +[#]: subject: (5 signs you're a groff programmer) +[#]: via: (https://opensource.com/article/21/4/groff-programmer) +[#]: author: (Jim Hall https://opensource.com/users/jim-hall) +[#]: collector: (lujun9972) +[#]: translator: (liweitianux) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13316-1.html) + +groff 程序员的 5 个标志 +====== + +> 学习一款老派的文本处理软件 groff,就像是学习骑自行车。 + +![](https://img.linux.net.cn/data/attachment/album/202104/20/221218y34lew4gewqw2xg2.jpg) + +我第一次发现 Unix 系统是在 20 世纪 90 年代早期,当时我还在大学读本科。我太喜欢这个系统了,所以我将家里电脑上的 MS-DOS 也换成了 Linux 系统。 + +在 90 年代早期至中期,Linux 所缺失的一个东西是字处理软件word processor。作为其他桌面操作系统的标准办公程序,字处理软件能让你轻松地编辑文本。我经常在 DOS 上使用字处理软件来撰写课程论文。直到 90 年代末,我都没能找到一款 Linux 原生的字处理软件。直到那时,文字处理是我在第一台电脑上保留双启动的少有的原因之一,那样我可以偶尔切换到 DOS 系统写论文。 + +后来,我发现 Linux 提供了一款文字处理软件:GNU troff,它一般称为 [groff][2],是经典的文本处理系统 troff 的一个现代实现。troff 是 “排版工快印typesetter roff” 的简称,是 nroff 系统的改进版本,而 nroff 又是最初的 roff 系统的新实现。roff 表示快速印出run off,比如“快速印出”一份文档。 + +利用文本处理系统,你在纯文本编辑器里编辑内容,通过macro或其他处理命令来添加格式。然后将文件输入文本处理系统,比如 groff,来生成适合打印的格式化输出。另一个知名的文本处理系统是 LaTeX,但是 groff 已经满足我的需求,而且足够简单。 + +经过一点实践,我发现在 Linux 上使用 groff 来撰写课程论文与使用字处理软件一样容易。尽管我现在不再使用 groff 来写文档了,我依然记得它的那些宏和命令。如果你也是这样并且在那么多年之前学会了使用 groff 写作,你可能会认出这 5 个 groff 程序员的标志。 + +### 1、你有一个喜欢的宏集 + +输入由宏点缀的纯文本,你便能在 groff 里对文档进行格式化。groff 里的宏是行首为单个句点(`.`)的短命令。例如:如果你想在输出里插入几行,宏命令 `.sp 2` 会添加两个空行。groff 还具有其他一些基本的宏,支持各种各样的格式化。 + +为了能让作者更容易地格式化文档,groff 还提供了不同的 宏集macro set,即一组能够让你以自己的方式格式化文档的宏的集合。我学会的第一个宏集是 `-me` 宏集。这个宏集的名称其实是 `e`,你在处理文件时使用 `-me` 选项来指定这个 `e` 宏集。 + +groff 还包含其他宏集。例如,`-man` 宏集以前是用于格式化 Unix 系统内置的 手册页manual page 的标准宏集,`-ms` 宏集经常用于格式化其他一些技术文档。如果你学会了使用 groff 写作,你可能有一个喜欢的宏集。 + +### 2、你想专注于内容而非格式 + +使用 groff 写作的一个很好的特点是,你能专注于你的 _内容_,而不用太担心它看起来会怎么样。对于技术作者而言这是一个很实用的特点。对专业作家来说,groff 是一个很好的、“不会分心”的写作环境。至少,使用 groff `-T` 选项所支持的任何格式来交付内容时你不用担心,这包括 PDF、PostScript、HTML、以及纯文本。不过,你无法直接从 groff 生成 LibreOffice ODT 文件或者 Word DOC 文件。 + +一旦你使用 groff 写作变得有信心之后,宏便开始 _消失_。用于格式化的宏变成了背景的一部分,而你纯粹地专注于眼前的文本内容。我已经使用 groff 写了足够多内容,以至于我甚至不再看见那些宏。也许,这就像写代码,而你的大脑随意换档,于是你就像计算机一样思考,看到的代码就是一组指令。对我而言,使用 groff 写作就像那样:我仅仅看到文本,而我的大脑将宏自动地翻译成格式。 + +### 3、你喜欢怀旧复古的感觉 + +当然,使用一个更典型的字处理软件来写你的文档可能更 _简单_,比如 LibreOffice Writer、甚至 Google Docs 或 Microsoft Word。而且对于某些种类的文档,桌面型字处理软件才是正确的选择。但是,如果你想要这种怀旧复古的感觉,使用 groff 写作很难被打败。 + +我承认,我的大部分写作是用 LibreOffice Writer 完成的,它的表现很出色。但是当我渴望以一种怀旧复古的方式去做时,我会打开编辑器用 groff 来写文档。 + +### 4、你希望能到处使用它 + +groff 及其同类软件在几乎所有的 Unix 系统上都是标准软件包。此外,groff 宏不会随系统而变化。比如,`-me` 宏集在不同系统上都应该相同。因此,一旦你在一个系统上学会使用宏,你能在下一个系统上同样地使用它们。 + +另外,因为 groff 文档就是纯文本文档,所以你能使用任何你喜欢的编辑器来编辑文档。我喜欢使用 GNU Emacs 来编辑我的 groff 文档,但是你可能使用 GNOME Gedit、Vim、其他你 [最喜欢的文本编辑器][3]。大部分编辑器会支持这样一种模式,其中 groff 宏会以不同的颜色高亮显示,帮助你在处理文件之前便能发现错误。 + +### 5、你使用 -me 写了这篇文章 + +当我决定要写这篇文章时,我认为最佳的方式便是直接使用 groff。我想要演示 groff 在编写文档方面是多么的灵活。所以,虽然你正在网上读这篇文章,但是它最初是用 groff 写的。 + +我希望这激发了你学习如何使用 groff 撰写文档的兴趣。如果你想学习 `-me` 宏集里更高级的函数,参考 Eric Allman 的《Writing papers with groff using -me》,你应该能在系统的 groff 文档找到这本书,文件名为 `meintro.me`。这是一份很好的参考资料,还解释了使用 `-me` 宏集格式化论文的其他方式。 + +我还提供了这篇文章的原始草稿,其中使用了 `-me` 宏集。下载这个文件并保存为 `five-signs-groff.me`,然后运行 groff 处理来查看它。`-T` 选项设置输出类型,比如 `-Tps` 用于生成 PostScript 输出,`-Thtml` 用于生成 HTML 文件。比如: + +``` +groff -me -Thtml five-signs-groff.me > five-signs-groff.html +``` + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/groff-programmer + +作者:[Jim Hall][a] +选题:[lujun9972][b] +译者:[liweitianux](https://github.com/liweitianux) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jim-hall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/doc-dish-lead.png?itok=h3fCkVmU (Typewriter in the grass) +[2]: https://en.wikipedia.org/wiki/Groff_(software) +[3]: https://opensource.com/article/21/2/open-source-text-editors diff --git a/published/202104/20210410 How to Install Steam on Fedora -Beginner-s Tip.md b/published/202104/20210410 How to Install Steam on Fedora -Beginner-s Tip.md new file mode 100644 index 0000000000..9aa71925fa --- /dev/null +++ b/published/202104/20210410 How to Install Steam on Fedora -Beginner-s Tip.md @@ -0,0 +1,119 @@ +[#]: subject: (How to Install Steam on Fedora [Beginner’s Tip]) +[#]: via: (https://itsfoss.com/install-steam-fedora/) +[#]: author: (John Paul https://itsfoss.com/author/john/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13302-1.html) + +如何在 Fedora 上安装 Steam +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/16/090703cg4t5npnseskhxhv.jpg) + +Steam 对 Linux 游戏玩家来说是最好的东西了。由于 Steam,你可以在 Linux 上玩成百上千的游戏。 + +如果你还不知道,Steam 是最流行的 PC 游戏平台。2013 年,它开始可以在 Linux 使用。[Steam 最新的 Proton 项目][1] 允许你在 Linux 上玩为 Windows 平台创建的游戏。这让 Linux 游戏库增强了许多倍。 + +![][2] + +Steam 提供了一个桌面客户端,你可以用它从 Steam 商店下载或购买游戏,然后安装并玩它。 + +过去我们曾讨论过 [在 Ubuntu 上安装 Steam][3]。在这个初学者教程中,我将向你展示在 Fedora Linux 上安装 Steam 的步骤。 + +### 在 Fedora 上安装 Steam + +要在 Fedora 上使用 Steam,你必须使用 RMPFusion 软件库。[RPMFusion][4] 是一套第三方软件库,其中包含了 Fedora 选择不与它们的操作系统一起发布的软件。它们提供自由(开源)和非自由(闭源)的软件库。由于 Steam 在非自由软件库中,你将只安装那一个。 + +我将同时介绍终端和图形安装方法。 + +#### 方法 1:通过终端安装 Steam + +这是最简单的方法,因为它需要的步骤最少。只需输入以下命令即可启用仓库: + +``` +sudo dnf install https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm +``` + +你会被要求输入密码。然后你会被要求验证是否要安装这些仓库。你同意后,仓库安装就会完成。 + +要安装 Steam,只需输入以下命令: + +``` +sudo dnf install steam +``` + +![Install Steam via command line][5] + +输入密码后按 `Y` 接受。安装完毕后,打开 Steam,玩一些游戏。 + +#### 方法 2:通过 GUI 安装 Steam + +你可以从软件中心 [启用 Fedora 上的第三方仓库][6]。打开软件中心并点击菜单。 + +![][7] + +在 “软件仓库” 窗口中,你会看到顶部有一个 “第三方软件仓库”。点击 “安装” 按钮。当提示你输入密码时,就完成了。 + +![][8] + +安装了 Steam 的 RPM Fusion 仓库后,更新你系统的软件缓存(如果需要),并在软件中心搜索 Steam。 + +![Steam in GNOME Software Center][9] + +安装完成后,打开 GNOME 软件中心,搜索 Steam。找到 Steam 页面后,点击安装。当被问及密码时,输入你的密码就可以了。 + +安装完 Steam 后,启动应用,输入你的 Steam 帐户详情或注册它,然后享受你的游戏。 + +### 将 Steam 作为 Flatpak 使用 + +Steam 也可以作为 Flatpak 使用。Fedora 上默认安装 Flatpak。在使用该方法安装 Steam 之前,我们必须安装 Flathub 仓库。 + +![Install Flathub][10] + +首先,在浏览器中打开 [Flatpak 网站][11]。现在,点击标有 “Flathub repository file” 的蓝色按钮。浏览器会询问你是否要在 GNOME 软件中心打开该文件。点击确定。在 GNOME 软件中心打开后,点击安装按钮。系统会提示你输入密码。 + +如果你在尝试安装 Flathub 仓库时出现错误,请在终端运行以下命令: + +``` +flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo +``` + +安装好 Flathub 仓库后,你需要做的就是在 GNOME 软件中心搜索 Steam。找到后,安装它,你就可以开始玩了。 + +![Fedora Repo Select][12] + +Flathub 版本的 Steam 也有几个附加组件可以安装。其中包括一个 DOS 兼容工具和几个 [Vulkan][13] 和 Proton 工具。 + +![][14] + +我想这应该可以帮助你在 Fedora 上使用 Steam。享受你的游戏 :) + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-steam-fedora/ + +作者:[John Paul][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/john/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/steam-play-proton/ +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2017/05/Steam-Store.jpg?resize=800%2C382&ssl=1 +[3]: https://itsfoss.com/install-steam-ubuntu-linux/ +[4]: https://rpmfusion.org/ +[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/install-steam-fedora.png?resize=800%2C588&ssl=1 +[6]: https://itsfoss.com/fedora-third-party-repos/ +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/11/software-meni.png?resize=800%2C672&ssl=1 +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/11/fedora-third-party-repo-gui.png?resize=746%2C800&ssl=1 +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/gnome-store-steam.jpg?resize=800%2C434&ssl=1 +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/03/flatpak-install-button.jpg?resize=800%2C434&ssl=1 +[11]: https://www.flatpak.org/setup/Fedora/ +[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/fedora-repo-select.jpg?resize=800%2C434&ssl=1 +[13]: https://developer.nvidia.com/vulkan +[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/03/steam-flatpak-addons.jpg?resize=800%2C434&ssl=1 diff --git a/published/202104/20210411 GNOME-s Very Own -GNOME OS- is Not a Linux Distro for Everyone -Review.md b/published/202104/20210411 GNOME-s Very Own -GNOME OS- is Not a Linux Distro for Everyone -Review.md new file mode 100644 index 0000000000..0e251d8829 --- /dev/null +++ b/published/202104/20210411 GNOME-s Very Own -GNOME OS- is Not a Linux Distro for Everyone -Review.md @@ -0,0 +1,135 @@ +[#]: subject: (GNOME’s Very Own “GNOME OS” is Not a Linux Distro for Everyone [Review]) +[#]: via: (https://itsfoss.com/gnome-os/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13287-1.html) + +GNOME OS:一个并不是适合所有人的 Linux 发行版 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/11/103205t34lcaa3t0a3xjjw.jpg) + +每当 GNOME 的一个重要版本到来时,总是很想尽快试用它。但是,要想第一时间进行测试,主要还是得依靠 [Fedora Rawhide][1] 开发分支。 + +然而,开发分支并不总是让人放心的,所以,用来尝试最新的 GNOME 并不是最方便的解决方案。这里,我所说的测试,并不仅仅是指用户的测试,同时也能够用于开发者对设计变更进行测试。 + +所以,最近来了个大救星 GNOME OS,让测试的过程变得轻松起来。但是,它到底是什么,怎么安装呢?让我们一起来看看吧。 + +### 什么是 GNOME OS? + +GNOME OS 并不是一个独立完整的 Linux 发行版。事实上,它根本不基于任何东西。它是一个不完整的参考系统,只是为了让 GNOME 桌面工作。它仅仅是一个可启动的虚拟机镜像,在 GNOME 进入任何发行版的仓库之前,为调试和测试功能而量身定做的。 + +在 GNOME 的博客中,有一篇提到了它: + +> GNOME OS 旨在通过提供一个用于开发、设计和用户测试的工作系统,来更好地促进 GNOME 的开发。 + +如果你好奇的话,你可以看看 GNOME 星球上的一篇 [博客文章][2] 来了解关于 GNOME OS 的更多信息。 + +### 如果它不是一个成熟的 Linux 发行版,那么它是用来干什么的? + +![][3] + +值得注意的是,每一次新的提交都可以创建一个新的 GNOME OS 镜像,所以它应该会使测试过程变得高效,并帮助你在开发周期的早期测试并发现问题。 + +不要忘了,设计者不再需要自己构建软件来测试 GNOME Shell 或任何其他核心模块。这为他们节省了时间和整个 GNOME 开发周期。 + +当然,不仅限于开发者和技术测试人员,它还可以让记者们拿到最新的和最棒的东西,来报道 GNOME 下一个版本或它是如何成型的。 + +媒体和 GNOME 团队也得到了一个很好的机会,借助于 GNOME OS,他们可以准备视频、图片两种形式的视觉资料来宣传此次发布。 + +### 如何安装 GNOME OS? + +要轻松安装 GNOME OS,你需要先安装 GNOME Boxes 应用程序。 + +#### 安装 GNOME Boxes + +Boxes 是一款简单的虚拟化软件,它不提供任何高级选项,但可以让你轻松安装操作系统镜像来快速测试。它是专门针对桌面终端用户的,所以使用起来也很方便。 + +要在任何 Linux 发行版上安装它,你可以利用 [Flathub][5] 的 [Flatpak][4] 包。如果你不知道 Flatpak,你可能需要阅读我们的《[在 Linux 中安装和使用 Flatpak][6]》指南。 + +你也可以在任何基于 Ubuntu 的发行版上直接在终端上输入以下内容进行安装: + +``` +sudo apt install gnome-boxes +``` + +一旦你安装了 Boxes,从这里安装 GNOME OS 就相当容易了。 + +#### 安装 GNOME OS + +安装好 Boxes 后,你需要启动程序。接下来,点击窗口左上角的 “+” 标志,然后点击 “操作系统下载”,如下图所示。 + +![][7] + +这个选项可以让你直接下载镜像文件,然后就可以继续安装它。 + +你所需要做的就是搜索 “GNOME”,然后你应该会找到可用的每夜构建版。这可以确保你正在尝试最新和最优秀的 GNOME 开发版本。 + +另外,你也可以前往 [GNOME OS 每夜构建网站][8] 下载系统镜像,然后在 Boxes 应用中选择 “运行系统镜像文件” 选择该 ISO,如上图截图所示,继续安装。 + +![][9] + +考虑到你没有单独下载镜像。当你点击后,应该会开始下载,并且会出现一个进度条。 + +![][10] + +完成后,如果需要,它会要求你自定义配置,让你创建虚拟机,如下图所示。 + +![][11] + +你可以根据你可用的系统资源来定制资源分配,但应该可以使用默认设置。 + +点击 “创建”,就会直接开始 GNOME OS 的安装。 + +![][12] + +选择“使用现有的版本”,然后继续。接下来,你必须选择磁盘(保持原样),然后同意擦除你所有的文件和应用程序(它不会删除本地计算机上的任何东西)。 + +![][13] + +现在,它将简单地重新格式化并安装它。然后就完成了。它会提示你重启,重启后,你会发现 GNOME OS 已经安装好了。 + +它会像其他 Linux 发行版一样简单地启动,并要求你设置一些东西,包括用户名和密码。然后,你就可以开始探索了。 + +如果你想知道它的样子,它基本上就是最新的 GNOME 桌面环境。在 GNOME 40 正式发布之前,我用 GNOME OS 做了一个 GNOME 40 的概述视频。 + +### 结束语 + +GNOME OS 绝对是对开发者、设计师和媒体有用的东西。它可以让你轻松地测试最新的 GNOME 开发版本,而无需投入大量的时间。 + +我可以很快地测试 [GNOME 40][14],就是因为这个。当然,你要记住,这并不是一个可以在物理设备上安装的完整功能的操作系统。他们有计划让它可以在物理机器上运行,但就目前而言,它只是为虚拟机量身定做的,尤其是使用 GNOME Boxes。 + +GNOME Boxes 并没有提供任何高级选项,所以设置和使用它变得相当容易。如果体验太慢的话,你可能要调整一下资源,但在我的情况下,总体来说是一个不错的体验。 + +你试过 GNOME OS 了吗?欢迎在下面的评论中告诉我你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/gnome-os/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://fedoraproject.org/wiki/Releases/Rawhide +[2]: https://blogs.gnome.org/alatiera/2020/10/07/what-is-gnome-os/ +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/GNOME-OS-distro-review.png?resize=800%2C450&ssl=1 +[4]: https://itsfoss.com/what-is-flatpak/ +[5]: https://flathub.org/apps/details/org.gnome.Boxes +[6]: https://itsfoss.com/flatpak-guide/ +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/gnome-os-search.jpg?resize=800%2C729&ssl=1 +[8]: https://os.gnome.org/ +[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/gnome-os-boxes.jpg?resize=800%2C694&ssl=1 +[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/gnome-os-download.jpg?resize=798%2C360&ssl=1 +[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/gnome-boxes-vm-setup.png?resize=800%2C301&ssl=1 +[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/gnome-nightly-install.jpg?resize=800%2C636&ssl=1 +[13]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/gnome-os-installation.jpg?resize=800%2C619&ssl=1 +[14]: https://news.itsfoss.com/gnome-40-release/ diff --git a/published/202104/20210412 6 open source tools and tips to securing a Linux server for beginners.md b/published/202104/20210412 6 open source tools and tips to securing a Linux server for beginners.md new file mode 100644 index 0000000000..ebc367d9ff --- /dev/null +++ b/published/202104/20210412 6 open source tools and tips to securing a Linux server for beginners.md @@ -0,0 +1,191 @@ +[#]: subject: (6 open source tools and tips to securing a Linux server for beginners) +[#]: via: (https://opensource.com/article/21/4/securing-linux-servers) +[#]: author: (Sahana Sreeram https://opensource.com/users/sahanasreeram01gmailcom) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13298-1.html) + +6 个提升 Linux 服务器安全的开源工具和技巧 +====== + +> 使用开源工具来保护你的 Linux 环境不被入侵。 + +![](https://img.linux.net.cn/data/attachment/album/202104/15/082334ltqtgg40tu7l80rd.jpg) + +如今我们的许多个人和专业数据都可以在网上获得,因此无论是专业人士还是普通互联网用户,学习安全和隐私的基本知识是非常重要的。作为一名学生,我通过学校的 CyberPatriot 活动获得了这方面的经验,在那里我有机会与行业专家交流,了解网络漏洞和建立系统安全的基本步骤。 + +本文基于我作为初学者迄今所学的知识,详细介绍了六个简单的步骤,以提高个人使用的 Linux 环境的安全性。在我的整个旅程中,我利用开源工具来加速我的学习过程,并熟悉了与提升 Linux 服务器安全有关的更高层次的概念。 + +我使用我最熟悉的 Ubuntu 18.04 版本测试了这些步骤,但这些步骤也适用于其他 Linux 发行版。 + +### 1、运行更新 + +开发者们不断地寻找方法,通过修补已知的漏洞,使服务器更加稳定、快速、安全。定期运行更新是一个好习惯,可以最大限度地提高安全性。运行它们: + +``` +sudo apt-get update && apt-get upgrade +``` + +### 2、启用防火墙保护 + +[启用防火墙][2] 可以更容易地控制服务器上的进站和出站流量。在 Linux 上有许多防火墙应用程序可以使用,包括 [firewall-cmd][3] 和 简单防火墙Uncomplicated Firewall([UFW][4])。我使用 UFW,所以我的例子是专门针对它的,但这些原则适用于你选择的任何防火墙。 + +安装 UFW: + +``` +sudo apt-get install ufw +``` + +如果你想进一步保护你的服务器,你可以拒绝传入和传出的连接。请注意,这将切断你的服务器与世界的联系,所以一旦你封锁了所有的流量,你必须指定哪些出站连接是允许从你的系统中发出的: + +``` +sudo ufw default deny incoming +sudo ufw default allow outgoing +``` + +你也可以编写规则来允许你个人使用所需要的传入连接: + +``` +ufw allow +``` + +例如,允许 SSH 连接: + +``` +ufw allow ssh +``` + +最后,启用你的防火墙: + +``` +sudo ufw enable +``` + +### 3、加强密码保护 + +实施强有力的密码政策是保持服务器安全、防止网络攻击和数据泄露的一个重要方面。密码策略的一些最佳实践包括强制要求最小长度和指定密码年龄。我使用 libpam-cracklib 软件包来完成这些任务。 + +安装 libpam-cracklib 软件包: + +``` +sudo apt-get install libpam-cracklib +``` + +强制要求密码的长度: + + * 打开 `/etc/pam.d/common-password` 文件。 + * 将 `minlen=12` 行改为你需要的任意字符数,从而改变所有密码的最小字符长度要求。 + +为防止密码重复使用: + + * 在同一个文件(`/etc/pam.d/common-password`)中,添加 `remember=x` 行。 + * 例如,如果你想防止用户重复使用他们最后 5 个密码中的一个,使用 `remember=5`。 + +要强制要求密码年龄: + + * 在 `/etc/login.defs` 文件中找到以下几行,并用你喜欢的时间(天数)替换。例如: + +``` +PASS_MIN_AGE: 3 +PASS_MAX_AGE: 90 +PASS_WARN_AGE: 14 +``` + +强制要求字符规格: + + * 在密码中强制要求字符规格的四个参数是 `lcredit`(小写)、`ucredit`(大写)、`dcredit`(数字)和 `ocredit`(其他字符)。 + * 在同一个文件(`/etc/pam.d/common-password`)中,找到包含 `pam_cracklib.so` 的行。 + * 在该行末尾添加以下内容:`lcredit=-a ucredit=-b dcredit=-c ocredit=-d`。 + * 例如,下面这行要求密码必须至少包含一个每种字符。你可以根据你喜欢的密码安全级别来改变数字。`lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1`。 + +### 4、停用容易被利用的非必要服务。 + +停用不必要的服务是一种最好的做法。这样可以减少开放的端口,以便被利用。 + +安装 systemd 软件包: + +``` +sudo apt-get install systemd +``` + +查看哪些服务正在运行: + +``` +systemctl list-units +``` + +[识别][5] 哪些服务可能会导致你的系统出现潜在的漏洞。对于每个服务可以: + + * 停止当前正在运行的服务:`systemctl stop `。 + * 禁止服务在系统启动时启动:`systemctl disable `。 + * 运行这些命令后,检查服务的状态:`systemctl status `。 + +### 5、检查监听端口 + +开放的端口可能会带来安全风险,所以检查服务器上的监听端口很重要。我使用 [netstat][6] 命令来显示所有的网络连接: + +``` +netstat -tulpn +``` + +查看 “address” 列,确定 [端口号][7]。一旦你找到了开放的端口,检查它们是否都是必要的。如果不是,[调整你正在运行的服务][8],或者调整你的防火墙设置。 + +### 6、扫描恶意软件 + +杀毒扫描软件可以有用的防止病毒进入你的系统。使用它们是一种简单的方法,可以让你的服务器免受恶意软件的侵害。我首选的工具是开源软件 [ClamAV][9]。 + +安装 ClamAV: + +``` +sudo apt-get install clamav +``` + +更新病毒签名: + +``` +sudo freshclam +``` + +扫描所有文件,并打印出被感染的文件,发现一个就会响铃: + +``` +sudo clamscan -r --bell -i / +``` + +你可以而且应该设置为自动扫描,这样你就不必记住或花时间手动进行扫描。对于这样简单的自动化,你可以使用 [systemd 定时器][10] 或者你的 [喜欢的 cron][11] 来做到。 + +### 保证你的服务器安全 + +我们不能把保护服务器安全的责任只交给一个人或一个组织。随着威胁环境的不断迅速扩大,我们每个人都应该意识到服务器安全的重要性,并采用一些简单、有效的安全最佳实践。 + +这些只是你提升 Linux 服务器的安全可以采取的众多步骤中的一部分。当然,预防只是解决方案的一部分。这些策略应该与严格监控拒绝服务攻击、用 [Lynis][12] 做系统分析以及创建频繁的备份相结合。 + +你使用哪些开源工具来保证服务器的安全?在评论中告诉我们它们的情况。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/securing-linux-servers + +作者:[Sahana Sreeram][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/sahanasreeram01gmailcom +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003499_01_linux11x_cc.png?itok=XMDOouJR (People work on a computer server with devices) +[2]: https://www.redhat.com/sysadmin/secure-linux-network-firewall-cmd +[3]: https://opensource.com/article/20/2/firewall-cheat-sheet +[4]: https://wiki.ubuntu.com/UncomplicatedFirewall +[5]: http://www.yorku.ca/infosec/Administrators/UNIX_disable.html +[6]: https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/netstat +[7]: https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers +[8]: https://opensource.com/article/20/5/systemd-units +[9]: https://www.clamav.net/ +[10]: https://opensource.com/article/20/7/systemd-timers +[11]: https://opensource.com/article/21/2/linux-automation +[12]: https://opensource.com/article/20/5/linux-security-lynis diff --git a/published/202104/20210412 Encrypt your files with this open source software.md b/published/202104/20210412 Encrypt your files with this open source software.md new file mode 100644 index 0000000000..bf2e9d9fd2 --- /dev/null +++ b/published/202104/20210412 Encrypt your files with this open source software.md @@ -0,0 +1,87 @@ +[#]: subject: (Encrypt your files with this open source software) +[#]: via: (https://opensource.com/article/21/4/open-source-encryption) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13304-1.html) + +用开源的 VeraCrypt 加密你的文件 +====== + +> VeraCrypt 提供跨平台的开源文件加密功能。 + +![](https://img.linux.net.cn/data/attachment/album/202104/17/110244p1g4tbpnw00tqwq3.jpg) + +许多年前,有一个名为 [TrueCrypt][2] 的加密软件。它的源码是可以得到的,尽管没有任何人声称曾对它进行过审计或贡献过。它的作者是(至今仍是)匿名的。不过,它是跨平台的,易于使用,而且真的非常有用。 + +TrueCrypt 允许你创建一个加密的文件“保险库”,在那里你可以存储任何类型的敏感信息(文本、音频、视频、图像、PDF 等)。只要你有正确的口令,TrueCrypt 就可以解密保险库,并在任何运行 TrueCrypt 的电脑上提供读写权限。这是一项有用的技术,它基本上提供了一个虚拟的、可移动的、完全加密的驱动器(除了文件以外),你可以在其中安全地存储你的数据。 + +TrueCrypt 最终关闭了,但一个名为 VeraCrypt 的替代项目迅速兴起,填补了这一空白。[VeraCrypt][3] 基于 TrueCrypt 7.1a,比原来的版本有许多改进(包括标准加密卷和引导卷的算法的重大变化)。在 VeraCrypt 1.12 及以后的版本中,你可以使用自定义迭代来提高加密安全性。更好的是,VeraCrypt 可以加载旧的 TrueCrypt 卷,所以如果你是 TrueCrypt 用户,可以很容易地将它们转移到 VeraCrypt 上。 + +### 安装 VeraCrypt + +你可以从 [VeraCrypt 下载页面][4] 下载相应的安装文件,之后在所有主流平台上安装 VeraCrypt。 + +另外,你也可以自己从源码构建它。在 Linux 上,它需要 wxGTK3、makeself 和通常的开发栈(Binutils、GCC 等)。 + +当你安装后,从你的应用菜单中启动 VeraCrypt。 + +### 创建一个 VeraCrypt 卷 + +如果你刚接触 VeraCrypt,你必须先创建一个 VeraCrypt 加密卷(否则,你没有任何东西可以解密)。在 VeraCrypt 窗口中,点击左侧的 “Create Volume” 按钮。 + +![Creating a volume with VeraCrypt][5] + +在出现的 VeraCrypt 的卷创建向导窗口中,选择要创建一个加密文件容器还是要加密整个驱动器或分区。向导将为你的数据创建一个保险库,所以请按照提示进行操作。 + +在本文中,我创建了一个文件容器。VeraCrypt 容器和其他文件很像:它保存在硬盘、外置硬盘、云存储或其他任何你能想到的存储数据的地方。与其他文件一样,它可以被移动、复制和删除。与大多数其他文件不同的是,它可以_容纳_更多的文件,这就是为什么我认为它是一个“保险库”,而 VeraCrypt 开发者将其称为“容器”。它的开发者将 VeraCrypt 文件称为“容器”,是因为它可以包含其他数据对象;它与 LXC、Kubernetes 和其他现代 IT 机制所流行的容器技术无关。 + +#### 选择一个文件系统 + +在创建卷的过程中,你会被要求选择一个文件系统来决定你放在保险库中的文件的存储方式。微软 FAT 格式是过时的、非日志型,并且限制了卷和文件的大小,但它是所有平台都能读写的一种格式。如果你打算让你的 VeraCrypt 保险库跨平台,FAT 是你最好的选择。 + +除此之外,NTFS 适用于 Windows 和 Linux。开源的 EXT 系列适用于 Linux。 + +### 挂载 VeraCrypt 加密卷 + +当你创建了 VeraCrypt 卷,你就可以在 VeraCrypt 窗口中加载它。要挂载一个加密库,点击右侧的 “Select File” 按钮。选择你的加密文件,选择 VeraCrypt 窗口上半部分的一个编号栏,然后点击位于 VeraCrypt 窗口左下角的 “Mount” 按钮。 + +你挂载的卷在 VeraCrypt 窗口的可用卷列表中,你可以通过文件管理器访问该卷,就像访问一个外部驱动器一样。例如,在 KDE 上,我打开 [Dolphin][7],进入 `/media/veracrypt1`,然后我就可以把文件复制到我的保险库里。 + +只要你的设备上有 VeraCrypt,你就可以随时访问你的保险库。在你手动在 VeraCrypt 中挂载之前,文件都是加密的,在那里,文件会保持解密,直到你再次关闭卷。 + +### 关闭 VeraCrypt 卷 + +为了保证你的数据安全,当你不需要打开 VeraCrypt 卷时,关闭它是很重要的。这样可以保证数据的安全,不被人窥视,且不被人趁机犯罪。 + +![Mounting a VeraCrypt volume][8] + +关闭 VeraCrypt 容器和打开容器一样简单。在 VeraCrypt 窗口中选择列出的卷,然后点击 “Dismount”。你就不能访问保险库中的文件了,其他人也不会再有访问权。 + +### VeraCrypt 轻松实现跨平台加密 + +有很多方法可以保证你的数据安全,VeraCrypt 试图为你提供方便,而无论你需要在什么平台上使用这些数据。如果你想体验简单、开源的文件加密,请尝试 VeraCrypt。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/open-source-encryption + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/security-lock-password.jpg?itok=KJMdkKum (Lock) +[2]: https://en.wikipedia.org/wiki/TrueCrypt +[3]: https://www.veracrypt.fr/en/Home.html +[4]: https://www.veracrypt.fr/en/Downloads.html +[5]: https://opensource.com/sites/default/files/uploads/veracrypt-create.jpg (Creating a volume with VeraCrypt) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://en.wikipedia.org/wiki/Dolphin_%28file_manager%29 +[8]: https://opensource.com/sites/default/files/uploads/veracrypt-volume.jpg (Mounting a VeraCrypt volume) diff --git a/published/202104/20210413 Create an encrypted file vault on Linux.md b/published/202104/20210413 Create an encrypted file vault on Linux.md new file mode 100644 index 0000000000..94dde76530 --- /dev/null +++ b/published/202104/20210413 Create an encrypted file vault on Linux.md @@ -0,0 +1,113 @@ +[#]: subject: (Create an encrypted file vault on Linux) +[#]: via: (https://opensource.com/article/21/4/linux-encryption) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13296-1.html) + +在 Linux 上创建一个加密文件保险库 +====== + +> 使用 Linux 统一密钥设置(LUKS)为物理驱动器或云存储上的敏感文件创建一个加密保险库。 + +![](https://img.linux.net.cn/data/attachment/album/202104/14/151220l5zkkxiukgzix54k.jpg) + +最近,我演示了如何在 Linux 上使用统一密钥设置Linux Unified Key Setup([LUKS][3])和 `cryptsetup` 命令 [实现全盘加密][2]。虽然加密整个硬盘在很多情况下是有用的,但也有一些原因让你不想对整个硬盘进行加密。例如,你可能需要让一个硬盘在多个平台上工作,其中一些平台可能没有集成 [LUKS][3]。此外,现在是 21 世纪,由于云的存在,你可能不会使用物理硬盘来处理所有的数据。 + +几年前,有一个名为 [TrueCrypt][4] 的系统,允许用户创建加密的文件保险库,可以通过 TrueCrypt 解密来提供读/写访问。这是一项有用的技术,基本上提供了一个虚拟的便携式、完全加密的驱动器,你可以在那里存储重要数据。TrueCrypt 项目关闭了,但它可以作为一个有趣的模型。 + +幸运的是,LUKS 是一个灵活的系统,你可以使用它和 `cryptsetup` 在一个独立的文件中创建一个加密保险库,你可以将其保存在物理驱动器或云存储中。 + +下面就来介绍一下怎么做。 + +### 1、建立一个空文件 + +首先,你必须创建一个预定大小的空文件。就像是一种保险库或保险箱,你可以在其中存储其他文件。你使用的命令是 `util-linux` 软件包中的 `fallocate`: + +``` +$ fallocate --length 512M vaultfile.img +``` + +这个例子创建了一个 512MB 的文件,但你可以把你的文件做成任何你想要的大小。 + +### 2、创建一个 LUKS 卷 + +接下来,在空文件中创建一个 LUKS 卷: + +``` +$ cryptsetup --verify-passphrase \ + luksFormat vaultfile.img +``` + +### 3、打开 LUKS 卷 + +要想创建一个可以存储文件的文件系统,必须先打开 LUKS 卷,并将其挂载到电脑上: + +``` +$ sudo cryptsetup open \ + --type luks vaultfile.img myvault +$ ls /dev/mapper +myvault +``` + +### 4、建立一个文件系统 + +在你打开的保险库中建立一个文件系统: + +``` +$ sudo mkfs.ext4 -L myvault /dev/mapper/myvault +``` + +如果你现在不需要它做什么,你可以关闭它: + +``` +$ sudo cryptsetup close myvault +``` + +### 5、开始使用你的加密保险库 + +现在一切都设置好了,你可以在任何需要存储或访问私人数据的时候使用你的加密文件库。要访问你的保险库,必须将其挂载为一个可用的文件系统: + +``` +$ sudo cryptsetup open \ + --type luks vaultfile.img myvault +$ ls /dev/mapper +myvault +$ sudo mkdir /myvault +$ sudo mount /dev/mapper/myvault /myvault +``` + +这个例子用 `cryptsetup` 打开保险库,然后把保险库从 `/dev/mapper` 下挂载到一个叫 `/myvault` 的新目录。和 Linux 上的任何卷一样,你可以把 LUKS 卷挂载到任何你想挂载的地方,所以除了 `/myvault`,你可以用 `/mnt` 或 `~/myvault` 或任何你喜欢的位置。 + +当它被挂载后,你的 LUKS 卷就会被解密。你可以像读取和写入文件一样读取和写入它,就像它是一个物理驱动器一样。 + +当使用完你的加密保险库时,请卸载并关闭它: + +``` +$ sudo umount /myvault +$ sudo cryptsetup close myvault +``` + +### 加密的文件保险库 + +你用 LUKS 加密的镜像文件和其他文件一样,都是可移动的,因此你可以将你的保险库存储在硬盘、外置硬盘,甚至是互联网上。只要你可以使用 LUKS,就可以解密、挂载和使用它来保证你的数据安全。轻松加密,提高数据安全性,不妨一试。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/linux-encryption + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/life_bank_vault_secure_safe.png?itok=YoW93h7C (Secure safe) +[2]: https://opensource.com/article/21/3/encryption-luks +[3]: https://gitlab.com/cryptsetup/cryptsetup/blob/master/README.md +[4]: https://en.wikipedia.org/wiki/TrueCrypt diff --git a/published/202104/20210413 Create and Edit EPUB Files on Linux With Sigil.md b/published/202104/20210413 Create and Edit EPUB Files on Linux With Sigil.md new file mode 100644 index 0000000000..9a1a3e0397 --- /dev/null +++ b/published/202104/20210413 Create and Edit EPUB Files on Linux With Sigil.md @@ -0,0 +1,101 @@ +[#]: subject: (Create and Edit EPUB Files on Linux With Sigil) +[#]: via: (https://itsfoss.com/sigile-epub-editor/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13325-1.html) + +用 Sigil 在 Linux 上创建和编辑 EPUB 文件 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/23/184455qn6u6oozmf6gmnec.jpg) + +Sigil 是一个开源的 Linux、Windows 和 MacOS 上的 EPUB 编辑器。你可以使用 Sigil 创建一个新的 EPUB 格式的电子书,或编辑现有的 EPUB 电子书(以 `.epub` 扩展结尾的文件)。 + +如果你感到好奇,EPUB 是一个标准的电子书格式,并被几个数字出版集团认可。它被许多设备和电子阅读器支持,除了亚马逊的 Kindle。 + +### Sigil 让你创建或编辑 EPUB 文件 + +[Sigil][1] 是一个允许你编辑 EPUB 文件的开源软件。当然,你可以从头开始创建一个新的 EPUB 文件。 + +![][2] + +很多人在 [创建或编辑电子书时非常相信 Calibre][3]。它确实是一个完整的工具,它有很多的功能,支持的格式不只是 EPUB 格式。然而,Calibre 有时可能需要过多的资源。 + +Sigil 只专注于 EPUB 书籍,它有以下功能: + + * 支持 EPUB 2 和 EPUB 3(有一定的限制) + * 提供代码视图预览 + * 编辑 EPUB 语法 + * 带有多级标题的目录生成器 + * 编辑元数据 + * 拼写检查 + * 支持正则查找和替换 + * 支持导入 EPUB、HTML 文件、图像和样式表 + * 额外插件 + * 多语言支持的接口 + * 支持 Linux、Windows 和 MacOS + +Sigil 不是你可以直接输入新书章节的 [所见即所得][4] 类型的编辑器。由于 EPUB 依赖于 XML,因此它专注于代码。可以将其视为用于 EPUB 文件的 [类似于 VS Code 的代码编辑器][5]。出于这个原因,你应该使用一些其他 [开源写作工具][6],以 epub 格式导出你的文件(如果可能的话),然后在 Sigil 中编辑它。 + +![][7] + +Sigil 有一个 [Wiki][8] 来提供一些安装和使用 Sigil 的文档。 + +### 在 Linux 上安装 Sigil + +Sigil 是一款跨平台应用,支持 Windows 和 macOS 以及 Linux。它是一个流行的软件,有超过十年的历史。这就是为什么你应该会在你的 Linux 发行版仓库中找到它。只要在你的发行版的软件中心应用中寻找它就可以了。 + +![Sigil in Ubuntu Software Center][9] + +你可能需要事先启用 universe 仓库。你也可以在 Ubuntu发行版中使用 `apt` 命令: + +``` +sudo apt install sigil +``` + +Sigil 有很多对 Python 库和模块的依赖,因此它下载和安装了大量的包。 + +![][10] + +我不会列出 Fedora、SUSE、Arch 和其他发行版的命令。你可能已经知道如何使用你的发行版的软件包管理器,对吧? + +你的发行版提供的版本不一定是最新的。如果你想要 Sigil 的最新版本,你可以查看它的 GitHub 仓库。 + +- [Sigil 的 GitHub 仓库][11] + +### 并不适合所有人,当然也不适合用于阅读 ePUB 电子书 + +我不建议使用 Sigil 阅读电子书。Linux 上有 [其他专门的应用来阅读 .epub 文件][12]。 + +如果你是一个必须处理 EPUB 书籍的作家,或者如果你在数字化旧书,并在各种格式间转换,Sigil 可能是值得一试。 + +我还没有大量使用 过 Sigil,所以我不提供对它的评论。我让你去探索它,并在这里与我们分享你的经验。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/sigile-epub-editor/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://sigil-ebook.com/ +[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/open-epub-sigil.png?resize=800%2C621&ssl=1 +[3]: https://itsfoss.com/create-ebook-calibre-linux/ +[4]: https://www.computerhope.com/jargon/w/wysiwyg.htm +[5]: https://itsfoss.com/best-modern-open-source-code-editors-for-linux/ +[6]: https://itsfoss.com/open-source-tools-writers/ +[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/sigil-epub-editor-800x621.png?resize=800%2C621&ssl=1 +[8]: https://github.com/Sigil-Ebook/Sigil/wiki +[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/sigil-software-center-ubuntu.png?resize=800%2C424&ssl=1 +[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/installing-sigil-ubuntu.png?resize=800%2C547&ssl=1 +[11]: https://github.com/Sigil-Ebook/Sigil +[12]: https://itsfoss.com/open-epub-books-ubuntu-linux/ diff --git a/published/202104/20210414 Make your data boss-friendly with this open source tool.md b/published/202104/20210414 Make your data boss-friendly with this open source tool.md new file mode 100644 index 0000000000..5104978e55 --- /dev/null +++ b/published/202104/20210414 Make your data boss-friendly with this open source tool.md @@ -0,0 +1,108 @@ +[#]: subject: (Make your data boss-friendly with this open source tool) +[#]: via: (https://opensource.com/article/21/4/visualize-data-eda) +[#]: author: (Juanjo Ortilles https://opensource.com/users/jortilles) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13310-1.html) + +用这个开源工具让你的数据对老板友好起来 +====== + +> 企业数据分析旨在将数据可视化带给日常商务用户。 + +![](https://img.linux.net.cn/data/attachment/album/202104/19/092617elri0ff4r6lr06rr.jpg) + +企业数据分析Enterprise Data Analytics([EDA][2]) 是一个网页应用,它可以通过一个简单、清晰的界面来获取信息。 + +在巴塞罗那开源分析公司 [Jortilles][3] 工作几年后,我们意识到,现代世界强制性地收集数据,但普通人没有简单的方法来查看或解释这些数据。有一些强大的开源工具可用于此目的,但它们非常复杂。我们找不到一个工具设计成能让没有什么技术能力的普通人轻松使用。 + +我们之所以开发 EDA,是因为我们认为获取信息是现代组织的要求和义务,并希望为每个人提供获取信息的机会。 + +![EDA interface][4] + +### 可视化你的数据 + +EDA 使用人们已经理解的商业术语提供了一个数据模型。你可以选择你想要的信息,并可以以你想要的方式查看它。它的目标是对用户友好,同时又功能强大。 + +EDA 通过元数据模型将数据库中的信息可视化和丰富化。它可以从 BigQuery、Postgres、[MariaDB、MySQL][6] 和其他一些数据库中读取数据。这就把技术性的数据库模型转化为熟悉的商业概念。 + +它还设计为加快信息传播的速度,因为它可以利用已经存储在数据库中的数据。EDA 可以发现数据库的拓扑结构,并提出业务模型。如果你设计了一个好的数据库模型,你就有了一个好的业务模型。EDA 还可以连接到生产服务器,提供实时分析。 + +这种数据和数据模型的结合意味着你和你组织中的任何人都可以分析其数据。然而,为了保护数据,你可以定义数据安全,可以精确到行,以授予正当的人访问正当的数据。 + +EDA 的一些功能包括: + + * 自动生成数据模型 + * 一致的数据模型,防止出现不一致的查询 + * 高级用户的 SQL 模式 + * 数据可视化: + * 标准图表(如柱状图、饼状图、线状图、树状图) + * 地图整合(如 geoJSON shapefile、纬度、经度) + * 电子邮件提醒,可通过关键绩效指标 (KPI) 来定义 + * 私人和公共信息控制,以启用私人和公共仪表板,你可以通过链接分享它。 + * 数据缓存和程序刷新。 + +### 如何使用 EDA + +用 EDA 实现数据可视化的第一步是创建数据模型。 + +#### 创建数据模型 + +首先,在左侧菜单中选择 “New Datasource”。 + +接下来,选择你的数据存储的数据库系统(如 Postgres、MariaDB、MySQL、Vertica、SqlServer、Oracle、Big Query),并提供连接参数。 + +EDA 将自动为你生成数据模型。它读取表和列,并为它们定义名称以及表之间的关系。你还可以通过添加虚拟视图或 geoJSON 图来丰富你的数据模型。 + +#### 制作仪表板 + +现在你已经准备好制作第一个仪表板了。在 EDA 界面的主页面上,你应该会看到一个 “New dashboard” 按钮。点击它,命名你的仪表板,并选择你创建的数据模型。新的仪表板将出现一个面板供你配置。 + +要配置面板,请单击右上角的 “Configuration” 按钮,并选择你要做的事情。在 “Edit query” 中,选择你要显示的数据。这将出现一个新的窗口,你的数据模型由实体和实体的属性表示。选择你要查看的实体和你要使用的属性。例如,对于名为 “Customers” 的实体,你可能会显示 “Customer Name”,对于 “Sales” 实体,你可能希望显示 “Total Sales”。 + +接下来,运行一个查询,并选择你想要的可视化。 + +![EDA interface][7] + +你可以添加任意数量的面板、过滤器和文本字段,所有这些都有说明。当你保存仪表板后,你可以查看它,与同事分享,甚至发布到互联网上。 + +### 获取 EDA + +最快的方法是用 [公开演示][8] 来查看 EDA。但如果你想自己试一试,可以用 Docker 获取最新的 EDA 版本: + +``` +$ docker run -p 80:80 jortilles / eda: latest +``` + +我们还有一个 SaaS 选项,适用于任何想要使用 EDA 而无需进行安装、配置和持续更新的用户。你可以在我们的网站上查看 [云选项][9]。 + +如果你想看看它的实际运行情况,你可以在 YouTube 上观看一些 [演示][10]。 + +EDA 正在持续开发中,你可以在 GitHub 上找到它的 [源代码][11]。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/visualize-data-eda + +作者:[Juanjo Ortilles][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jortilles +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/metrics_data_dashboard_system_computer_analytics.png?itok=oxAeIEI- (metrics and data shown on a computer screen) +[2]: https://eda.jortilles.com/en/jortilles-english/ +[3]: https://www.jortilles.com/ +[4]: https://opensource.com/sites/default/files/uploads/eda-display.jpeg (EDA interface) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/article/20/10/mariadb-mysql-cheat-sheet +[7]: https://opensource.com/sites/default/files/uploads/eda-chart.jpeg (EDA interface) +[8]: https://demoeda.jortilles.com/ +[9]: https://eda.jortilles.com +[10]: https://youtu.be/cBAAJbohHXQ +[11]: https://github.com/jortilles/EDA diff --git a/published/202104/20210419 4 steps to customizing your Mac terminal theme with open source tools.md b/published/202104/20210419 4 steps to customizing your Mac terminal theme with open source tools.md new file mode 100644 index 0000000000..19237b5d7c --- /dev/null +++ b/published/202104/20210419 4 steps to customizing your Mac terminal theme with open source tools.md @@ -0,0 +1,88 @@ +[#]: subject: (4 steps to customizing your Mac terminal theme with open source tools) +[#]: via: (https://opensource.com/article/21/4/zsh-mac) +[#]: author: (Bryant Son https://opensource.com/users/brson) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13323-1.html) + +用开源工具定制 Mac 终端主题的 4 个步骤 +====== + +> 用开源工具让你的终端窗口在 Mac 上漂亮起来。 + +![](https://img.linux.net.cn/data/attachment/album/202104/22/234534t3t7ntpvdde3v892.jpg) + +你是否曾经厌倦了在你的 macOS 电脑上看到同样老式的终端窗口?如果是这样,使用开源的 Oh My Zsh 框架和 Powerlevel10k 主题为你的视图添加一些点缀。 + +这个基本的逐步教程将让你开始定制你的 macOS 终端。如果你是一个 Linux 用户,请查看 Seth Kenlon 的指南 [为 Zsh 添加主题和插件][2] 以获得深入指导。 + +### 步骤 1:安装 Oh My Zsh + +[Oh My Zsh][3] 是一个开源的、社区驱动的框架,用于管理你的 Z shell (Zsh) 配置。 + +![Oh My Zsh][4] + +Oh My Zsh 是在 MIT 许可下发布的。使用以下命令安装: + +``` +$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" +``` + +### 步骤 2:安装 Powerlevel10k 字体 + +![Powerlevel10k][6] + +Powerlevel10k 是一个 MIT 许可的 Zsh 主题。在安装 Powerlevel10k 之前,你需要为你的终端安装自定义字体。 + +到 [Powerlevel10 GitHub][7] 页面,在 `README` 中 搜索 “fonts”。安装自定义字体的步骤会根据你的操作系统而有所不同。这只需要简单地点击-下载-安装的系列操作。 + +![Powerlevel10k fonts][8] + +### 步骤 3:安装 Powerlevel10k 主题 + +接下来,运行以下命令安装 Powerlevel10k: + +``` +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k +``` + +完成后,用文本编辑器,比如 [Vim][9],打开 `~/.zshrc` 配置文件,设置行 `ZSH_THEME="powerlevel10k/powerlevel10k`,然后保存文件。 + +### 步骤 4:完成 Powerlevel10 的设置 + +打开一个新的终端,你应该看到 Powerlevel10k 配置向导。如果没有,运行 `p10k configure` 来调出配置向导。如果你在步骤 2 中安装了自定义字体,那么图标和符号应该正确显示。将默认字体更改为 `MeslowLG NF`。 + +![Powerlevel10k configuration][10] + +当你完成配置后,你应该会看到一个漂亮的终端。 + +![Oh My Zsh/Powerlevel10k theme][11] + +就是这些了!你应该可以享受你美丽的新终端了。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/zsh-mac + +作者:[Bryant Son][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/brson +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/freedos.png?itok=aOBLy7Ky (4 different color terminal windows with code) +[2]: https://opensource.com/article/19/9/adding-plugins-zsh +[3]: https://ohmyz.sh/ +[4]: https://opensource.com/sites/default/files/uploads/1_ohmyzsh.jpg (Oh My Zsh) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/sites/default/files/uploads/2_powerlevel10k.jpg (Powerlevel10k) +[7]: https://github.com/romkatv/powerlevel10k +[8]: https://opensource.com/sites/default/files/uploads/3_downloadfonts.jpg (Powerlevel10k fonts) +[9]: https://opensource.com/resources/what-vim +[10]: https://opensource.com/sites/default/files/uploads/4_p10kconfiguration.jpg (Powerlevel10k configuration) +[11]: https://opensource.com/sites/default/files/uploads/5_finalresult.jpg (Oh My Zsh/Powerlevel10k theme) diff --git a/published/202104/20210419 Something bugging you in Fedora Linux- Let-s get it fixed.md b/published/202104/20210419 Something bugging you in Fedora Linux- Let-s get it fixed.md new file mode 100644 index 0000000000..c379370092 --- /dev/null +++ b/published/202104/20210419 Something bugging you in Fedora Linux- Let-s get it fixed.md @@ -0,0 +1,70 @@ +[#]: subject: (Something bugging you in Fedora Linux? Let’s get it fixed!) +[#]: via: (https://fedoramagazine.org/something-bugging-you-in-fedora-linux-lets-get-it-fixed/) +[#]: author: (Matthew Miller https://fedoramagazine.org/author/mattdm/) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13333-1.html) + +Fedora Linux 中有 Bug 吗?一起来修复它! +====== + +![][1] + +软件有 bug。任何复杂系统都无法保证每个部分都能按计划工作。Fedora Linux 是一个 _非常_ 复杂的系统,包含几千个包,这些包由全球无数个独立的上游项目创建。每周还有数百个更新。因此,问题是不可避免的。本文介绍了 bug 修复过程以及如何确定 bug 优先级。 + +### 发布开发过程 + +作为一个 Linux 发行项目,我们希望为用户提供完善的、一切正常的体验。我们的发布起始于 “Rawhide”。我们在 Rawhide 中集成了所有更新的自由及开源软件的新版本。我们一直在不断改进正在进行的测试和持续集成Continuous Integration过程,为了让即使是 Rawhide 也能被冒险者安全使用。可是,从本质来讲,Rawhide 始终有点粗糙。 + +每年两次,我们把这个粗糙的操作系统先后分支到测试版本、最终版本。当我们这么做时,我们齐心协力地寻找问题。我们在测试日Test Days检查特定的区域和功能。制作“候选版本Candidate builds”,并根据我们的 [发布验证测试计划][2] 进行检测。然后我们进入冻结状态freeze state,只有批准的更改可以并入候选版本。这就把候选版本从持续的开发隔离开来,持续的开发不断并入 Rawhide 中。所以,不会引入新的问题。 + +在发布过程中许多 bug 被粉碎去除,这些 bug 有大有小。当一切按计划进行时,我们为所有用户提供了按计划发布的崭新的 Fedora Linux 版本。(在过去几年里,我们已经可靠地重复这一动作——感谢每一个为之努力工作的人!)如果确实有问题,我们可以将其标记为发布阻碍release blocker。这就意味着我们要等到修复后才能发布。发布阻碍通常代表重大问题,该表达一定会引发对 bug 的关注。 + +有时,我们遇到的一些问题是持续存在的。可能一些问题已经持续了一两个版本,或者我们还没有达成共识的解决方案。有些问题确实困扰着许多用户,但个别问题并没有达到阻碍发布的程度。我们可以将这些东西标记为阻碍blocker。但这会像锤子一样砸下来。阻碍可能导致最终粉碎该 bug,但也可能导致破坏了周围。如果进度落后,所有其它的 bug 修复、改进以及人们一直在努力的功能,都不能到达用户手中。 + +### 按优先顺序排列 bug 流程 + +所以,我们有另一种方法来解决烦人的 bug。[按优先顺序排列 bug 流程][3],与其他方式不同,可以标出导致大量用户不满意的问题。这里没有锤子,更像是聚光灯。与发布阻碍不同,按优先顺序排列 bug 流程没有一套严格定义的标准。每个 bug 都是根据影响范围和严重性来评估的。 + +一个由感兴趣的贡献者组成的团队帮助策划一个简短列表,上面罗列着需要注意的问题。然后,我们的工作是将问题匹配到能够解决它们的人。这有助于减轻发布过程中的压力,因为它没有给问题指定任何特定的截止时间。理想情况下,我们能在进入测试阶段之前就发现并解决问题。我们尽量保持列表简短,不会超过几个,这样才会真正有重点。这种做法有助于团队和个人解决问题,因为他们知道我们尊重他们捉襟见肘的时间与精力。 + +通过这个过程,Fedora 解决了几十个严重而恼人的问题,包括从键盘输入故障到 SELinux 错误,再到数千兆字节大小的旧包更新会逐渐填满你的磁盘。但是我们可以做得更多——我们实际上收到的提案没有达到我们的处理能力上限。因此,如果你知道有什么事情导致了长期挫折或影响了很多人,至今没有达成解决方案,请遵循 [按优先顺序排列 bug 流程][3],提交给我们。 + +### 你可以帮助我们 + +邀请所有 Fedora 贡献者参与按优化顺序排列 bug 的流程。评估会议每两周在 IRC 上举办一次。欢迎任何人加入并帮助我们评估提名的 bug。会议时间和地点参见 [日历][4]。Fedora 项目经理在会议开始的前一天将议程发送到 [triage][5] 和 [devel][6] 邮件列表。 + +### 欢迎报告 bug + +当你发现 bug 时,无论大小,我们很感激你能报告 bug。在很多情况下,解决 bug 最好的方式是交给创建该软件的项目。例如,假设渲染数据相机照片的 Darktable 摄影软件出了问题,最好把它带给 Darktable 摄影软件的开发人员。再举个例子,假设 GNOME 或 KDE 桌面环境或组成部分软件出了问题,将这些问题交给这些项目中通常会得到最好的结果。 + +然而, 如果这是一个特定的 Fedora 问题,比如我们的软件构建或配置或者它的集成方式的问题,请毫不犹豫地 [向我们提交 bug][7]。当你知道有一个问题是我们还没有解决的,也要提交给我们。 + +我知道这很复杂……最好有一个一站式的地方来处理所有 bug。但是请记住,Fedora 打包者大部分是志愿者,他们负责获取上游软件并将其配置到我们系统中。他们并不总是对他们正在使用的软件的代码有深入研究的专家。有疑问的时候,你可以随时提交一个 [Fedora bug][7]。Fedora 中负责相应软件包的人可以通过他们与上游软件项目的联系提供帮助。 + +请记住,当你发现一个已通过诊断但尚未得到良好修复的 bug 时,当你看到影响很多人的问题时,或者当有一个长期存在的问题没有得到关注时,请将其提名为高优先级 bug。我们会看以看能做些什么。 + +_附言:标题中的著名图片当然是来自哈佛大学马克 2 号计算机的日志,这里曾是格蕾丝·赫柏少将工作的地方。但是与这个故事的普遍看法相背,这并不是 “bug” 一词第一次用于表示系统问题——它在工程中已经很常见了,这就是为什么发现一个字面上的 “bug” 作为问题的原因是很有趣的。 #nowyouknow #jokeexplainer_ + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/something-bugging-you-in-fedora-linux-lets-get-it-fixed/ + +作者:[Matthew Miller][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/mattdm/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/04/bugging_you-816x345.jpg +[2]: https://fedoraproject.org/wiki/QA:Release_validation_test_plan +[3]: https://docs.fedoraproject.org/en-US/program_management/prioritized_bugs/ +[4]: https://calendar.fedoraproject.org/base/ +[5]: https://lists.fedoraproject.org/archives/list/triage%40lists.fedoraproject.org/ +[6]: https://lists.fedoraproject.org/archives/list/devel%40lists.fedoraproject.org/ +[7]: https://docs.fedoraproject.org/en-US/quick-docs/howto-file-a-bug/ diff --git a/published/202104/20210420 Blanket- Ambient Noise App With Variety of Sounds to Stay Focused.md b/published/202104/20210420 Blanket- Ambient Noise App With Variety of Sounds to Stay Focused.md new file mode 100644 index 0000000000..5c9c76d025 --- /dev/null +++ b/published/202104/20210420 Blanket- Ambient Noise App With Variety of Sounds to Stay Focused.md @@ -0,0 +1,80 @@ +[#]: subject: (Blanket: Ambient Noise App With Variety of Sounds to Stay Focused) +[#]: via: (https://itsfoss.com/blanket-ambient-noise-app/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13343-1.html) + +Blanket:拥有各种环境噪音的应用,帮助保持注意力集中 +====== + +> 一个开源的环境噪音播放器,提供各种声音,帮助你集中注意力或入睡。 + +![](https://img.linux.net.cn/data/attachment/album/202104/29/094813oxcitipetajxjiex.jpg) + +随着你周围活动的增加,要保持冷静和专注往往是很困难的。 + +有时,音乐会有所帮助,但在某些情况下也会分散注意力。但是,环境噪音如何?这总是让人听起来很舒心。谁不想在餐厅里听到鸟叫声、雨滴声和人群的交谈声?好吧,可能不是最后一个,但听自然的声音可以帮助放松和集中注意力。这间接地提高了你的工作效率。 + +最近,我发现了一个专门的播放器,其中包含了不同的声音,可以帮助任何人集中注意力。 + +### 使用 Blanket 播放不同的环境声音 + +Blanket 是一个令人印象深刻的环境噪音播放器,它具有不同的声音,可以帮助你入睡或只是通过帮助你忘记周围的干扰来重获注意力。 + +它包括自然界的声音,像雨声、海浪声、鸟鸣声、风暴声、风声、水流声、夏夜声。 + +![][1] + +此外,如果你是一个通勤者或在轻微繁忙的环境中感到舒适的人,你可以找到火车、船、城市、咖啡馆或壁炉的声音。 + +如果你喜欢白噪声或粉红噪声,它结合了人类能听到的所有声音频率,这里也可以找到。 + +它还可以让你在每次开机时自动启动,如果你喜欢这样的话。 + +![][2] + +### 在 Linux 上安装 Blanket + +安装 Blanket 的最好方法是来自 [Flathub][3]。考虑到你已经启用了 [Flatpak][4],你只需在终端键入以下命令就可以安装它: + +``` +flatpak install flathub com.rafaelmardojai.Blanket +``` + +如果你是 Flatpak 的新手,你可能想通过我们的 [Flatpak 指南][5]了解。 + +如果你不喜欢使用 Flatpak,你可以使用该项目中的贡献者维护的 PPA 来安装它。对于 Arch Linux 用户,你可以在 [AUR][6] 中找到它,以方便安装。 + +此外,你还可以找到 Fedora 和 openSUSE 的软件包。要探索所有现成的软件包,你可以前往其 [GitHub 页面][7]。 + +### 结束语 + +对于一个简单的环境噪音播放器来说,用户体验是相当好的。我有一副 HyperX Alpha S 耳机,我必须要说,声音的质量很好。 + +换句话说,它听起来很舒缓,如果你想体验环境声音来集中注意力,摆脱焦虑或只是睡着,我建议你试试。 + +你试过它了吗?欢迎在下面分享你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/blanket-ambient-noise-app/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/blanket-screenshot.png?resize=614%2C726&ssl=1 +[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/blanket-autostart-1.png?resize=514%2C214&ssl=1 +[3]: https://flathub.org/apps/details/com.rafaelmardojai.Blanket +[4]: https://itsfoss.com/what-is-flatpak/ +[5]: https://itsfoss.com/flatpak-guide/ +[6]: https://itsfoss.com/aur-arch-linux/ +[7]: https://github.com/rafaelmardojai/blanket diff --git a/published/202104/20210420 The Guided Installer in Arch is a Step in the Right Direction.md b/published/202104/20210420 The Guided Installer in Arch is a Step in the Right Direction.md new file mode 100644 index 0000000000..3a6cc82345 --- /dev/null +++ b/published/202104/20210420 The Guided Installer in Arch is a Step in the Right Direction.md @@ -0,0 +1,78 @@ +[#]: subject: (The Guided Installer in Arch is a Step in the Right Direction) +[#]: via: (https://news.itsfoss.com/arch-new-guided-installer/) +[#]: author: (Jacob Crume https://news.itsfoss.com/author/jacob/) +[#]: collector: (lujun9972) +[#]: translator: (Kevin3599) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13328-1.html) + +Arch Linux 中的引导式安装程序是迈向正确的一步 +====== + +> 在 Arch ISO 中加入一个可选的引导式安装程序,对新手和高级用户都有好处。 + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/arch-linux-opinion.png?w=1200&ssl=1) + +20 年来,Arch Linux 为用户提供了一个完全定制、独特的系统。这些年来,它以牺牲用户友好性为代价,赢得了在定制方面独有的声誉。 + +作为滚动发行版本,Arch Linux 不提供任何固定发行版本,而是每月更新一次。但是,如果你在最近几周下载了 Arch Linux,那么你很可能已经注意到了一个新的附加功能:archinstall。它使 Arch Linux 更加易于安装。 + +![][3] + +今天,我将探讨 archinstall 的发布对未来的 Arch Linux 项目和发行版意味着什么。 + +### Arch Linux 新的发展方向? + +![][4] + +尽管很多人对此感到惊讶,但默认情况下包含官方安装程序实际上是非常明智的举动。这意味着 Arch Linux 的发展方向发生变化,即在保留使其知名的定制性同时更加侧重用户的易用性。 + +在该安装程序的 GitHub 页面上有这样的描述: + +> “引导性安装程序会给用户提供一个友好的逐步安装方式,但是关键在于这个安装程序是个选项,它是可选的,绝不会强迫用户使用其进行安装。” + +这意味着新的安装程序不会影响高级用户,同时也使得其可以向更广泛的受众开放,在这一改动所带来的许多优点之中,一个显著的优点即是:更广泛的用户。 + +更多的用户意味着对项目的更多支持,不管其是通过网络捐赠或参与 Arch Linux 的开发,随着这些项目贡献的增加,不管是新用户还是有经验的用户的使用体验都会得到提升。 + +### 这必然要发生 + +回顾过去,我们可以看到安装介质增加了许多对新用户有所帮助的功能。这些示例包括 pacstrap(一个安装基本系统的工具)和 reflector(查找最佳 pacman 镜像的工具)。 + +另外,多年来,用户一直在追求使用脚本安装的方法,新安装程序允许了用户使用安装脚本。它能够使用 Python 编写脚本,这使得管理员的部署更加容易,成为一个非常有吸引力的选择。 + +### 更多可定制性(以某种方式?) + +尽管这看上去可能有些反直觉,但是这个安装程序实际上能够增进 Arch Linux 的可定制性。当前,Arch Linux 定制性的最大瓶颈是用户的技术水平,而这一问题能够通过 archinstall 解决。 + +有了新的安装程序,用户不需要掌握创建完美开发环境的技巧,安装程序可以帮助用户完成这些工作,这提供了广泛的自定义选项,是普通用户难以实现的。 + +### 总结 + +有了这一新功能,Arch Linux 似乎正在向着“用户友好”这一软件设计哲学靠近,新安装程序为新手和高级用户提供了广泛的好处。其中包括更广泛的定制性和更大的用户社区。 + +总而言之,这个新变动对整个 Arch Linux 社区都会产生积极的影响。 + +你对这个 Arch Linux 安装程序怎么看?是否已经尝试过它了呢? + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/arch-new-guided-installer/ + +作者:[Jacob Crume][a] +选题:[lujun9972][b] +译者:[Kevin3599](https://github.com/Kevin3599) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/jacob/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/rolling-release/ +[2]: https://news.itsfoss.com/arch-linux-easy-install/ +[3]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/arch-install-tool.png?resize=780%2C411&ssl=1 +[4]: https://i0.wp.com/github.com/archlinux/archinstall/raw/master/docs/logo.png?resize=371%2C371&ssl=1 +[5]: https://man.archlinux.org/man/pacstrap.8 +[6]: https://wiki.archlinux.org/index.php/Reflector + diff --git a/published/202104/20210421 How to Delete Partitions in Linux -Beginner-s Guide.md b/published/202104/20210421 How to Delete Partitions in Linux -Beginner-s Guide.md new file mode 100644 index 0000000000..e04bca1d9d --- /dev/null +++ b/published/202104/20210421 How to Delete Partitions in Linux -Beginner-s Guide.md @@ -0,0 +1,131 @@ +[#]: subject: (How to Delete Partitions in Linux [Beginner’s Guide]) +[#]: via: (https://itsfoss.com/delete-partition-linux/) +[#]: author: (Chris Patrick Carias Stas https://itsfoss.com/author/chris/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13346-1.html) + +如何在 Linux 中删除分区 +====== + +![](https://img.linux.net.cn/data/attachment/album/202104/30/095353uhtbhm2fqx44aqfo.jpg) + +管理分区是一件严肃的事情,尤其是当你不得不删除它们时。我发现自己经常这样做,特别是在使用 U 盘作为实时磁盘和 Linux 安装程序之后,因为它们创建了几个我以后不需要的分区。 + +在本教程中,我将告诉你如何使用命令行和 GUI 工具在 Linux 中删除分区。 + +> 警告! +> +> 删除了分区,就会失去你的数据。无论何时,当你在操作分区时,一定要备份你的数据。一个轻微的打字错误或手滑都可能是昂贵的。不要说我们没有警告你! + +### 使用 GParted 删除磁盘分区 (GUI 方法) + +作为一个桌面 Linux 用户,你可能会对基于 GUI 的工具感到更舒服,也许更安全。 + +有 [几个让你在 Linux 上管理分区的工具][3]。根据你的发行版,你的系统上已经安装了一个甚至多个这样的工具。 + +在本教程中,我将使用 [GParted][4]。它是一个流行的开源工具,使用起来非常简单和直观。 + +第一步是 [安装 GParted][5],如果它还没有在你的系统中。你应该能够在你的发行版的软件中心找到它。 + +![][6] + +或者,你也可以使用你的发行版的软件包管理器来安装它。在基于 Debian 和 Ubuntu 的 Linux 发行版中,你可以 [使用 apt install 命令][7]: + +``` +sudo apt install gparted +``` + +安装完毕后,让我们打开 **GParted**。由于你正在处理磁盘分区,你需要有 root 权限。它将要求进行认证,打开后,你应该看到一个类似这样的窗口: + +![][8] + +在右上角,你可以选择磁盘,在下面选择你想删除的分区。 + +接下来,从分区菜单中选择 “删除” 选项: + +![][9] + +这个过程是没有完整完成的,直到你重写分区表。这是一项安全措施,它让你在确认之前可以选择审查更改。 + +要完成它,只需点击位于工具栏中的 “应用所有操作” 按钮,然后在要求确认时点击 “应用”。 + +![][10] + +点击 “应用” 后,你会看到一个进度条和一个结果消息说所有的操作都成功了。你可以关闭该信息和主窗口,并认为你的分区已从磁盘中完全删除。 + +现在你已经知道了 GUI 的方法,让我们继续使用命令行。 + +### 使用 fdisk 命令删除分区(CLI 方法) + +几乎每个 Linux 发行版都默认带有 [fdisk][11],我们今天就来使用这个工具。你需要知道的第一件事是,你想删除的分区被分配到哪个设备上了。为此,在终端输入以下内容: + +``` +sudo fdisk --list +``` + +这将打印出我们系统中所有的驱动器和分区,以及分配的设备。你 [需要有 root 权限][12],以便让它发挥作用。 + +在本例中,我将使用一个包含两个分区的 USB 驱动器,如下图所示: + +![][13] + +系统中分配的设备是 `/sdb`,它有两个分区:`sdb1` 和 `sdb2`。现在你已经确定了哪个设备包含这些分区,你可以通过使用 `fdisk` 和设备的路径开始操作: + +``` +sudo fdisk /dev/sdb +``` + +这将在命令模式下启动 `fdisk`。你可以随时按 `m` 来查看选项列表。 + +接下来,输入 `p`,然后按回车查看分区信息,并确认你正在使用正确的设备。如果使用了错误的设备,你可以使用 `q` 命令退出 `fdisk` 并重新开始。 + +现在输入 `d` 来删除一个分区,它将立即询问分区编号,这与 “Device” 列中列出的编号相对应,在这个例子中是 1 和 2(在下面的截图中可以看到),但是可以也会根据当前的分区表而有所不同。 + +![][14] + +让我们通过输入 `2` 并按下回车来删除第二个分区。你应该看到一条信息:**“Partition 2 has been deleted”**,但实际上,它还没有被删除。`fdisk` 还需要一个步骤来重写分区表并应用这些变化。你看,这就是完全网。 + +你需要输入 `w`,然后按回车来使这些改变成为永久性的。没有再要求确认。 + +在这之后,你应该看到下面这样的反馈: + +![][15] + +现在,使用 `sudo fdisk --list /dev/sdb` 查看该设备的当前分区表,你可以看到第二个分区已经完全消失。你已经完成了使用终端和 `fdisk` 命令来删除你的分区。成功了! + +#### 总结 + +这样,这个关于如何使用终端和 GUI 工具在 Linux 中删除分区的教程就结束了。记住,要始终保持安全,在操作分区之前备份你的文件,并仔细检查你是否使用了正确的设备。删除一个分区将删除其中的所有内容,而几乎没有 [恢复][16] 的机会。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/delete-partition-linux/ + +作者:[Chris Patrick Carias Stas][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/chris/ +[b]: https://github.com/lujun9972 +[1]: tmp.Q615QYIwTl#gparted +[2]: tmp.Q615QYIwTl#fdisk +[3]: https://itsfoss.com/partition-managers-linux/ +[4]: https://gparted.org/index.php +[5]: https://itsfoss.com/gparted/ +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/gparted-ubuntu-software-center.png?resize=800%2C348&ssl=1 +[7]: https://itsfoss.com/apt-command-guide/ +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/removing-partitions-linux-004.png?resize=800%2C542&ssl=1 +[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/removing-partitions-linux-005.png?resize=800%2C540&ssl=1 +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/removing-partitions-linux-006.png?resize=800%2C543&ssl=1 +[11]: https://man7.org/linux/man-pages/man8/fdisk.8.html +[12]: https://itsfoss.com/root-user-ubuntu/ +[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/removing-partitions-linux-001.png?resize=800%2C255&ssl=1 +[14]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/removing-partitions-linux-002.png?resize=800%2C362&ssl=1 +[15]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/removing-partitions-linux-003.png?resize=800%2C153&ssl=1 +[16]: https://itsfoss.com/recover-deleted-files-linux/ diff --git a/published/202104/20210421 Optimize your Python code with C.md b/published/202104/20210421 Optimize your Python code with C.md new file mode 100644 index 0000000000..0384f49be6 --- /dev/null +++ b/published/202104/20210421 Optimize your Python code with C.md @@ -0,0 +1,196 @@ +[#]: subject: (Optimize your Python code with C) +[#]: via: (https://opensource.com/article/21/4/cython) +[#]: author: (Alan Smithee https://opensource.com/users/alansmithee) +[#]: collector: (lujun9972) +[#]: translator: (ShuyRoy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13338-1.html) + +使用 C 优化你的 Python 代码 +====== + +> Cython 创建的 C 模块可以加速 Python 代码的执行,这对使用效率不高的解释型语言编写的复杂应用是很重要的。 + +![](https://img.linux.net.cn/data/attachment/album/202104/26/230709qz64z4af3t9b9jab.jpg) + +Cython 是 Python 编程语言的编译器,旨在优化性能并形成一个扩展的 Cython 编程语言。作为 Python 的扩展,[Cython][2] 也是 Python 语言的超集,它支持调用 C 函数和在变量和类属性上声明 C 类型。这使得包装外部 C 库、将 C 嵌入现有应用程序或者为 Python 编写像 Python 一样简单的 C 语言扩展语法变得容易。 + +Cython 一般用于创建 C 模块来加速 Python 代码的执行。这在使用解释型语言编写的效率不高的复杂应用中非常重要。 + +### 安装 Cython + +你可以在 Linux、BSD、Windows 或 macOS 上安装 Cython 来使用 Python: + +``` +$ python -m pip install Cython +``` + +安装好后,就可以使用它了。 + +### 将 Python 转换成 C + +使用 Cython 的一个好的方式是从一个简单的 “hello world” 开始。这虽然不是展示 Cython 优点的最好方式,但是它展示了使用 Cython 时发生的情况。 + +首先,创建一个简单的 Python 脚本,文件命名为 `hello.pyx`(`.pyx` 扩展名并不神奇,从技术上它可以是任何东西,但它是 Cython 的默认扩展名): + +``` +print("hello world") +``` + +接下来,创建一个 Python 设置脚本。一个像 Python 的 makefile 一样的 `setup.py`,Cython 可以使用它来处理你的 Python 代码: + +``` +from setuptools import setup +from Cython.Build import cythonize + +setup( +    ext_modules = cythonize("hello.pyx") +) +``` + +最后,使用 Cython 将你的 Python 脚本转换为 C 代码: + +``` +$ python setup.py build_ext --inplace +``` + +你可以在你的工程目录中看到结果。Cython 的 `cythonize` 模块将 `hello.pyx` 转换成一个 `hello.c` 文件和一个 `.so` 库。这些 C 代码有 2648 行,所以它比一个一行的 `hello.pyx` 源码的文本要多很多。`.so` 库也比它的源码大 2000 倍(即 54000 字节和 20 字节相比)。然后,Python 需要运行单个 Python 脚本,所以有很多代码支持这个只有一行的 `hello.pyx` 文件。 + +要使用 Python 的 “hello world” 脚本的 C 代码版本,请打开一个 Python 提示符并导入你创建的新 `hello` 模块: + + +``` +>>> import hello +hello world +``` + +### 将 C 代码集成到 Python 中 + +测试计算能力的一个很好的通用测试是计算质数。质数是一个比 1 大的正数,且它只有被 1 或它自己除后才会产生正整数。虽然理论很简单,但是随着数的变大,计算需求也会增加。在纯 Python 中,可以用 10 行以内的代码完成质数的计算。 + +``` +import sys + +number = int(sys.argv[1]) +if not number <= 1: + for i in range(2, number): + if (number % i) == 0: + print("Not prime") + break +else: + print("Integer must be greater than 1") +``` + +这个脚本在成功的时候是不会提醒的,如果这个数不是质数,则返回一条信息: + +``` +$ ./prime.py 3 +$ ./prime.py 4 +Not prime. +``` + +将这些转换为 Cython 需要一些工作,一部分是为了使代码适合用作库,另一部分是为了提高性能。 + +#### 脚本和库 + +许多用户将 Python 当作一种脚本语言来学习:你告诉 Python 想让它执行的步骤,然后它来做。随着你对 Python(以及一般的开源编程)的了解越多,你可以了解到许多强大的代码都存在于其他应用程序可以利用的库中。你的代码越 _不具有针对性_,程序员(包括你)就越可能将其重用于其他的应用程序。将计算和工作流解耦可能需要更多的工作,但最终这通常是值得的。 + +在这个简单的质数计算的例子中,将其转换成 Cython,首先是一个设置脚本: + +``` +from setuptools import setup +from Cython.Build import cythonize + +setup( +    ext_modules = cythonize("prime.py") +) +``` + +将你的脚本转换成 C: + +``` +$ python setup.py build_ext --inplace +``` + +到目前为止,一切似乎都工作的很好,但是当你试图导入并使用新模块时,你会看到一个错误: + +``` +>>> import prime +Traceback (most recent call last): + File "", line 1, in + File "prime.py", line 2, in init prime + number = sys.argv[1] +IndexError: list index out of range +``` + +这个问题是 Python 脚本希望从一个终端运行,其中参数(在这个例子中是要测试是否为质数的整数)是一样的。你需要修改你的脚本,使它可以作为一个库来使用。 + +#### 写一个库 + +库不使用系统参数,而是接受其他代码的参数。对于用户输入,与其使用 `sys.argv`,不如将你的代码封装成一个函数来接收一个叫 `number`(或者 `num`,或者任何你喜欢的变量名)的参数: + +``` +def calculate(number): + if not number <= 1: + for i in range(2, number): + if (number % i) == 0: + print("Not prime") + break + else: + print("Integer must be greater than 1") +``` + +这确实使你的脚本有些难以测试,因为当你在 Python 中运行代码时,`calculate` 函数永远不会被执行。但是,Python 编程人员已经为这个问题设计了一个通用、还算直观的解决方案。当 Python 解释器执行一个 Python 脚本时,有一个叫 `__name__` 的特殊变量,这个变量被设置为 `__main__`,但是当它被作为模块导入的时候,`__name__` 被设置为模块的名字。利用这点,你可以写一个既是 Python 模块又是有效 Python 脚本的库: + +``` +import sys + +def calculate(number): + if not number <= 1: + for i in range(2, number): + if (number % i) == 0: + print("Not prime") + break + else: + print("Integer must be greater than 1") + +if __name__ == "__main__": + number = sys.argv[1] + calculate( int(number) ) +``` + +现在你可以用一个命令来运行代码了: + +``` +$ python ./prime.py 4 +Not a prime +``` + +你可以将它转换为 Cython 来用作一个模块: + +``` +>>> import prime +>>> prime.calculate(4) +Not prime +``` + +### C Python + +用 Cython 将纯 Python 的代码转换为 C 代码是有用的。这篇文章描述了如何做,然而,Cython 还有功能可以帮助你在转换之前优化你的代码,分析你的代码来找到 Cython 什么时候与 C 进行交互,以及更多。如果你正在用 Python,但是你希望用 C 代码改进你的代码,或者进一步理解库是如何提供比脚本更好的扩展性的,或者你只是好奇 Python 和 C 是如何协作的,那么就开始使用 Cython 吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/cython + +作者:[Alan Smithee][a] +选题:[lujun9972][b] +译者:[ShuyRoy](https://github.com/ShuyRoy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/alansmithee +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/python-programming-code-keyboard.png?itok=fxiSpmnd (Hands on a keyboard with a Python book ) +[2]: https://cython.org/ diff --git a/published/202104/20210422 Restore an old MacBook with Linux.md b/published/202104/20210422 Restore an old MacBook with Linux.md new file mode 100644 index 0000000000..6e28e972f5 --- /dev/null +++ b/published/202104/20210422 Restore an old MacBook with Linux.md @@ -0,0 +1,94 @@ +[#]: subject: (Restore an old MacBook with Linux) +[#]: via: (https://opensource.com/article/21/4/restore-macbook-linux) +[#]: author: (Don Watkins https://opensource.com/users/don-watkins) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13341-1.html) + +用 Linux 翻新旧的 MacBook +====== + +> 不要把你又旧又慢的 MacBook 扔进垃圾桶。用 Linux Mint 延长它的寿命。 + +![](https://img.linux.net.cn/data/attachment/album/202104/27/225241mdbp59t67699r9de.jpg) + +去年,我写了篇关于如何用 Linux 赋予[旧 MacBook 的新生命][2]的文章,在例子中提到了 Elementary OS。最近,我用回那台 2015 年左右的 MacBook Air,发现遗失了我的登录密码。我下载了最新的 Elementary OS 5.1.7 Hera,但无法让实时启动识别我的 Broadcom 4360 无线芯片组。 + +最近,我一直在使用 [Linux Mint][3] 来翻新旧的笔记本电脑,我想在这台 MacBook Air 上试一下。我下载了 Linux Mint 20.1 ISO,并在我的 Linux 台式电脑上使用 [Popsicle][4] 创建了一个 USB 启动器。 + +![Popsicle ISO burner][5] + +接下来,我将 Thunderbolt 以太网适配器连接到 MacBook,并插入 USB 启动器。我打开系统电源,按下 MacBook 上的 Option 键,指示它从 USB 驱动器启动系统。 + +Linux Mint 在实时启动模式下启动没问题,但操作系统没有识别出无线连接。 + +### 我的无线网络在哪里? + +这是因为为苹果设备制造 WiFi 卡的公司 Broadcom 没有发布开源驱动程序。这与英特尔、Atheros 和许多其他芯片制造商形成鲜明对比,但它是苹果公司使用的芯片组,所以这是 MacBook 上的一个常见问题。 + +我通过我的 Thunderbolt 适配器有线连接到以太网,因此我 _是_ 在线的。通过之前的研究,我知道要让无线适配器在这台 MacBook 上工作,我需要在 Bash 终端执行三条独立的命令。然而,在安装过程中,我了解到 Linux Mint 有一个很好的内置驱动管理器,它提供了一个简单的图形用户界面来协助安装软件。 + +![Linux Mint Driver Manager][7] + +该操作完成后,我重启了安装了 Linux Mint 20.1 的新近翻新的 MacBook Air。Broadcom 无线适配器工作正常,使我能够轻松地连接到我的无线网络。 + +### 手动安装无线 + +你可以从终端完成同样的任务。首先,清除 Broadcom 内核源码的残余。 + +``` +$ sudo apt-get purge bcmwl-kernel-source +``` + +然后添加一个固件安装程序: + +``` +$ sudo apt install firmware-b43-installer +``` + +最后,为系统安装新固件: + +``` +$ sudo apt install linux-firmware +``` + +### 将 Linux 作为你的 Mac 使用 + +我安装了 [Phoronix 测试套件][8] 以获得 MacBook Air 的系统信息。 + +![MacBook Phoronix Test Suite output][9] + +系统工作良好。对内核 5.4.0-64-generic 的最新更新显示,无线连接仍然存在,并且我与家庭网络之间的连接为 866Mbps。Broadcom 的 FaceTime 摄像头不能工作,但其他东西都能正常工作。 + +我非常喜欢这台 MacBook 上的 [Linux Mint Cinnamon 20.1][10] 桌面。 + +![Linux Mint Cinnamon][11] + +如果你有一台因 macOS 更新而变得缓慢且无法使用的旧 MacBook,我建议你试一下 Linux Mint。我对这个发行版印象非常深刻,尤其是它在我的 MacBook Air 上的工作情况。它无疑延长了这个强大的小笔记本电脑的寿命。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/restore-macbook-linux + +作者:[Don Watkins][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/write-hand_0.jpg?itok=Uw5RJD03 (Writing Hand) +[2]: https://opensource.com/article/20/2/macbook-linux-elementary +[3]: https://linuxmint.com/ +[4]: https://github.com/pop-os/popsicle +[5]: https://opensource.com/sites/default/files/uploads/popsicle.png (Popsicle ISO burner) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://opensource.com/sites/default/files/uploads/mint_drivermanager.png (Linux Mint Driver Manager) +[8]: https://www.phoronix-test-suite.com/ +[9]: https://opensource.com/sites/default/files/uploads/macbook_specs.png (MacBook Phoronix Test Suite output) +[10]: https://www.linuxmint.com/edition.php?id=284 +[11]: https://opensource.com/sites/default/files/uploads/mintcinnamon.png (Linux Mint Cinnamon) diff --git a/published/202105/20200316 OpenStreetMap- A Community-Driven Google Maps Alternative.md b/published/202105/20200316 OpenStreetMap- A Community-Driven Google Maps Alternative.md new file mode 100644 index 0000000000..c2f2d0dc45 --- /dev/null +++ b/published/202105/20200316 OpenStreetMap- A Community-Driven Google Maps Alternative.md @@ -0,0 +1,91 @@ +[#]: collector: "lujun9972" +[#]: translator: "rakino" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13399-1.html" +[#]: subject: "OpenStreetMap: A Community-Driven Google Maps Alternative" +[#]: via: "https://itsfoss.com/openstreetmap/" +[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" + +OpenStreetMap:社区驱动的谷歌地图替代品 +====== + +> 作为谷歌地图的潜在替代品,OpenStreetMap 是一个由社区驱动的地图项目,在本文中我们将了解更多关于这个开源项目的信息。 + +[OpenStreetMap][1](OSM)是一个可自由编辑的世界地图,任何人都可以对 OpenStreetMap 贡献、编辑和修改,以对其进行改进。 + +![][2] + +查看地图并不需要帐号,但如果你想要编辑或增加地图信息,就得先注册一个帐号了。 + +尽管 OpenStreetMap 以 [开放数据库许可证][3] 授权,可以自由使用,但也有所限制 —— 你不能使用地图 API 在 OpenStreetMap 之上建立另一个服务来达到商业目的。 + +因此,你可以下载地图数据来使用,以及在标示版权信息的前提下自己托管这些数据。可以在 OpenStreetMap 的官方网站上了解更多关于其 [API 使用政策][4] 和 [版权][5] 的信息。 + +在这篇文章中,我们将简单看看 OpenStreetMap 是如何工作的,以及什么样的项目使用 OpenStreetMaps 作为其地图数据的来源。 + +### OpenStreetMap:概述 + +![][6] + +OpenStreetMap 是很好的谷歌地图替代品,虽然你无法得到和谷歌地图一样的信息水平,但对于基本的导航和旅行来说,OpenStreetMap 已经足够了。 + +就像其他地图一样,你能够在地图的多个图层间切换,了解自己的位置,并轻松地查找地点。 + +你可能找不到关于附近企业、商店和餐馆的所有最新信息。但对于基本的导航来说,OpenStreetMap 已经足够了。 + +通常可以通过网页浏览器在桌面和手机上访问 [OpenStreetMap 的网站][7] 来使用 OpenStreetMap,它还没有一个官方的安卓/iOS 应用程序。 + +然而,也有各种各样的应用程序在其核心中使用了 OpenStreetMap。因此,如果你想在智能手机上使用 OpenStreetMap,你可以看看一些流行的谷歌地图开源替代: + + * [OsmAnd][8] + * [MAPS.ME][9] + +**MAPS.ME** 和 **OsmAnd** 是两个适用于安卓和 iOS 的开源应用程序,它们利用 OpenStreetMap 的数据提供丰富的用户体验,并在应用中添加了一堆有用的信息和功能。 + +如果你愿意,也可以选择其他专有选项,比如 [Magic Earth][10]。 + +无论是哪种情况,你都可以在 OpenStreetMap 的官方维基页面上看一下适用于 [安卓][11] 和 [iOS][12] 的大量应用程序列表。 + +### 在 Linux 上使用 OpenStreetMap + +![][13] + +在 Linux 上使用 OpenStreetMap 最简单的方法就是在网页浏览器中使用它。如果你使用 GNOME 桌面环境,可以安装 GNOME 地图,它是建立在 OpenStreetMap 之上的。 + +还有几个软件(大多已经过时了)在 Linux 上使用 OpenStreetMap 来达到特定目的,你可以在 OpenStreetMap 的 [官方维基列表][14] 中查看可用软件包的列表。 + +### 总结 + +对于最终用户来说,OpenStreetMap 可能不是最好的导航源,但是它的开源模式允许它被自由使用,这意味着可以用 OpenStreetMap 来构建许多服务。例如,[ÖPNVKarte][15] 使用 OpenStreetMap 在一张统一的地图上显示全世界的公共交通设施,这样你就不必再浏览各个运营商的网站了。 + +你对 OpenStreetMap 有什么看法?你能用它作为谷歌地图的替代品吗?欢迎在下面的评论中分享你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/openstreetmap/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[rakino](https://github.com/rakino) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://www.openstreetmap.org/ +[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/openstreetmap.jpg?ssl=1 +[3]: https://opendatacommons.org/licenses/odbl/ +[4]: https://operations.osmfoundation.org/policies/api/ +[5]: https://www.openstreetmap.org/copyright +[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/open-street-map-2.jpg?ssl=1 +[7]: https://www.openstreetmap.org +[8]: https://play.google.com/store/apps/details?id=net.osmand +[9]: https://play.google.com/store/apps/details?id=com.mapswithme.maps.pro +[10]: https://www.magicearth.com/ +[11]: https://wiki.openstreetmap.org/wiki/Android#OpenStreetMap_applications +[12]: https://wiki.openstreetmap.org/wiki/Apple_iOS +[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/open-street-map-1.jpg?ssl=1 +[14]: https://wiki.openstreetmap.org/wiki/Linux +[15]: http://xn--pnvkarte-m4a.de/ \ No newline at end of file diff --git a/published/202105/20200527 Manage startup using systemd.md b/published/202105/20200527 Manage startup using systemd.md new file mode 100644 index 0000000000..e5a5d31013 --- /dev/null +++ b/published/202105/20200527 Manage startup using systemd.md @@ -0,0 +1,545 @@ +[#]: collector: (lujun9972) +[#]: translator: (tt67wq) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13402-1.html) +[#]: subject: (Manage startup using systemd) +[#]: via: (https://opensource.com/article/20/5/manage-startup-systemd) +[#]: author: (David Both https://opensource.com/users/dboth) + +使用 systemd 来管理启动项 +====== + +> 了解 systemd 是怎样决定服务启动顺序,即使它本质上是个并行系统。 + +![](https://img.linux.net.cn/data/attachment/album/202105/18/105928u3r3593k3z38ly5k.jpg) + +最近在设置 Linux 系统时,我想知道如何确保服务和其他单元的依赖关系在这些依赖于它们的服务和单元启动之前就已经启动并运行了。我需要更多 systemd 如何管理启动程序的相关知识,特别是在本质上是一个并行的系统中如何是决定服务启动顺序的。 + +你可能知道 SystemV(systemd 的前身,我在这个系列的 [第一篇文章][2] 中解释过)通过 Sxx 前缀命名启动脚本来决定启动顺序,xx 是一个 00-99 的数字。然后 SystemV 利用文件名来排序,然后按照所需的运行级别执行队列中每个启动脚本。 + +但是 systemd 使用单元文件来定义子程序,单元文件可由系统管理员创建或编辑,这些文件不仅可以用于初始化时也可以用于常规操作。在这个系列的 [第三篇文章][3] 中,我解释了如何创建一个挂载单元文件。在第五篇文章中,我解释了如何创建一种不同的单元文件 —— 在启动时执行一个程序的服务单元文件。你也可以修改单元文件中某些配置,然后通过 systemd 日志去查看你的修改在启动序列中的位置。 + +### 准备工作 + +先确认你已经在 `/etc/default/grub` 文件中的 `GRUB_CMDLINE_LINUX=` 这行移除了 `rhgb` 和 `quiet`,如同我在这个系列的 [第二篇文章][4] 中展示的那样。这让你能够查看 Linux 启动信息流,你在这篇文章中部分实验中需要用到。 + +### 程序 + +在本教程中,你会创建一个简单的程序让你能够在主控台和后续的 systemd 日志中查看启动时的信息。 + +创建一个 shell 程序 `/usr/local/bin/hello.sh` 然后添加下述内容。你要确保执行结果在启动时是可见的,可以轻松的在 systemd 日志中找到它。你会使用一版携带一些方格的 “Hello world” 程序,这样它会非常显眼。为了确保这个文件是可执行的,且为了安全起见,它需要 root 的用户和组所有权和 [700 权限][5]。 + + +``` +#!/usr/bin/bash +# Simple program to use for testing startup configurations +# with systemd. +# By David Both +# Licensed under GPL V2 +# +echo "###############################" +echo "######### Hello World! ########" +echo "###############################" +``` + +在命令行中执行这个程序来检查它能否正常运行。 + +``` +[root@testvm1 ~]# hello.sh +############################### +######### Hello World! ######## +############################### +[root@testvm1 ~]# +``` + +这个程序可以用任意脚本或编译语言实现。`hello.sh` 程序可以被放在 [Linux 文件系统层级结构][6](FHS)上的任意位置。我把它放在 `/usr/local/bin` 目录下,这样它可以直接在命令行中执行而不必在打命令的时候前面带上路径。我发现我创建的很多 shell 程序需要从命令行和其他工具(如 systemd)运行。 + +### 服务单元文件 + +创建服务单元文件 `/etc/systemd/system/hello.service`,写入下述内容。这个文件不一定是要可执行的,但是为了安全起见,它需要 root 的用户和组所有权和 [644][7] 或 [640][8] 权限。 + +``` +# Simple service unit file to use for testing +# startup configurations with systemd. +# By David Both +# Licensed under GPL V2 +# + +[Unit] +Description=My hello shell script + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/hello.sh + +[Install] +WantedBy=multi-user.target +``` + +通过查看服务状态来确认服务单元文件能如期运行。如有任何语法问题,这里会显示错误。 + +``` +[root@testvm1 ~]# systemctl status hello.service +● hello.service - My hello shell script +     Loaded: loaded (/etc/systemd/system/hello.service; disabled; vendor preset: disabled) +     Active: inactive (dead) +[root@testvm1 ~]# +``` + +你可以运行这类 “oneshot”(单发)类型的服务多次而不会有问题。此类服务适用于服务单元文件启动的程序是主进程,必须在 systemd 启动任何依赖进程之前完成的服务。 + +共有 7 种服务类型,你可以在 [systemd.service(5)][9] 的手册页上找到每一种(以及服务单元文件的其他部分)的详细解释。(你也可以在文章末尾的 [资料][10] 中找到更多信息。) + +出于好奇,我想看看错误是什么样子的。所以我从 `Type=oneshot` 这行删了字母 “o”,现在它看起来是这样 `Type=neshot`,现在再次执行命令: + +``` +[root@testvm1 ~]# systemctl status hello.service +● hello.service - My hello shell script +     Loaded: loaded (/etc/systemd/system/hello.service; disabled; vendor preset: disabled) +     Active: inactive (dead) + +May 06 08:50:09 testvm1.both.org systemd[1]: /etc/systemd/system/hello.service:12: Failed to parse service type, ignoring: neshot +[root@testvm1 ~]# +``` + +执行结果明确地告诉我错误在哪,这样解决错误变得十分容易。 + +需要注意的是即使在你将 `hello.service` 文件保存为它原来的形式之后,错误依然存在。虽然重启机器能消除这个错误,但你不必这么做,所以我去找了一个清理这类持久性错误的方法。我曾遇到有些错误需要 `systemctl daemon-reload` 命令来重置错误状态,但是在这个例子里不起作用。可以用这个命令修复的错误似乎总是有一个这样的声明,所以你知道要运行它。 + +然而,每次修改或新建一个单元文件之后执行 `systemctl daemon-reload` 确实是值得推荐的做法。它提醒 systemd 有修改发生,而且它可以防止某些与管理服务或单元相关的问题。所以继续去执行这条命令吧。 + +在修改完服务单元文件中的拼写错误后,一个简单的 `systemctl restart hello.service` 命令就可以清除错误。实验一下,通过添加一些其他的错误至 `hello.service` 文件来看看会得到怎样的结果。 + +### 启动服务 + +现在你已经准备好启动这个新服务,通过检查状态来查看结果。尽管你可能之前已经重启过,你仍然可以启动或重启这个单发服务任意次,因为它只运行一次就退出了。 + +继续启动这个服务(如下所示),然后检查状态。你的结果可能和我的有区别,取决于你做了多少试错实验。 + +``` +[root@testvm1 ~]# systemctl start hello.service +[root@testvm1 ~]# systemctl status hello.service +● hello.service - My hello shell script +     Loaded: loaded (/etc/systemd/system/hello.service; disabled; vendor preset: disabled) +     Active: inactive (dead) + +May 10 10:37:49 testvm1.both.org hello.sh[842]: ######### Hello World! ######## +May 10 10:37:49 testvm1.both.org hello.sh[842]: ############################### +May 10 10:37:49 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:37:49 testvm1.both.org systemd[1]: Finished My hello shell script. +May 10 10:54:45 testvm1.both.org systemd[1]: Starting My hello shell script... +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ######### Hello World! ######## +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:54:45 testvm1.both.org systemd[1]: Finished My hello shell script. +[root@testvm1 ~]# +``` + +从状态检查命令的输出中我们可以看到,systemd 日志表明 `hello.sh` 启动然后服务结束了。你也可以看到脚本的输出。该输出是根据服务的最近调用的日志记录生成的,试试看多启动几次这个服务,然后再看状态命令的输出就能理解我所说的。 + +你也应该直接查看日志内容,有很多种方法可以实现。一种办法是指定记录类型标识符,在这个例子中就是 shell 脚本的名字。它会展示前几次重启和当前会话的日志记录。如你所见,我已经为这篇文章做了挺长一段时间的研究测试了。 + +``` +[root@testvm1 ~]# journalctl -t hello.sh +<剪去> +-- Reboot -- +May 08 15:55:47 testvm1.both.org hello.sh[840]: ############################### +May 08 15:55:47 testvm1.both.org hello.sh[840]: ######### Hello World! ######## +May 08 15:55:47 testvm1.both.org hello.sh[840]: ############################### +-- Reboot -- +May 08 16:01:51 testvm1.both.org hello.sh[840]: ############################### +May 08 16:01:51 testvm1.both.org hello.sh[840]: ######### Hello World! ######## +May 08 16:01:51 testvm1.both.org hello.sh[840]: ############################### +-- Reboot -- +May 10 10:37:49 testvm1.both.org hello.sh[842]: ############################### +May 10 10:37:49 testvm1.both.org hello.sh[842]: ######### Hello World! ######## +May 10 10:37:49 testvm1.both.org hello.sh[842]: ############################### +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ######### Hello World! ######## +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +[root@testvm1 ~]# +``` + +为了定位 `hello.service` 单元的 systemd 记录,你可以在 systemd 中搜索。你可以使用 `G+Enter` 来翻页到日志记录 +记录的末尾,然后用回滚来找到你感兴趣的日志。使用 `-b` 选项仅展示最近启动的记录。 + +``` +[root@testvm1 ~]# journalctl -b -t systemd +<剪去> +May 10 10:37:49 testvm1.both.org systemd[1]: Starting SYSV: Late init script for live image.... +May 10 10:37:49 testvm1.both.org systemd[1]: Started SYSV: Late init script for live image.. +May 10 10:37:49 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:37:49 testvm1.both.org systemd[1]: Finished My hello shell script. +May 10 10:37:50 testvm1.both.org systemd[1]: Starting D-Bus System Message Bus... +May 10 10:37:50 testvm1.both.org systemd[1]: Started D-Bus System Message Bus. +``` + +我拷贝了一些其他的日志记录,让你对你可能找到的东西有所了解。这条命令喷出了所有属于 systemd 的日志内容 —— 当我写这篇时是 109183 行。这是一个需要整理的大量数据。你可以使用页面的搜索功能,通常是 `less` 或者你可以使用内置的 `grep` 特性。`-g`( 或 `--grep=`)选项可以使用兼容 Perl 的正则表达式。 +``` +[root@testvm1 ~]# journalctl -b -t systemd -g "hello" +[root@testvm1 ~]# journalctl -b -t systemd -g "hello" +-- Logs begin at Tue 2020-05-05 18:11:49 EDT, end at Sun 2020-05-10 11:01:01 EDT. -- +May 10 10:37:49 testvm1.both.org systemd[1]: Starting My hello shell script... +May 10 10:37:49 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:37:49 testvm1.both.org systemd[1]: Finished My hello shell script. +May 10 10:54:45 testvm1.both.org systemd[1]: Starting My hello shell script... +May 10 10:54:45 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:54:45 testvm1.both.org systemd[1]: Finished My hello shell script. +[root@testvm1 ~]# +``` + +你可以使用标准的 GNU `grep` 命令,但是这不会展示日志首行的元数据。 + +如果你只想看包含你的 `hello` 服务的日志记录,你可以指定时间来缩小范围。举个例子,我将在我的测试虚拟机上以 `10:54:00` 为开始时间,这是上述的日志记录开始的分钟数。注意 `--since=` 的选项必须加引号,这个选项也可以写成 `-S "某个时间"`。 + +日期和时间可能在你的机器上有所不同,所以确保使用能匹配你日志中的时间的时间戳。 + +``` +[root@testvm1 ~]# journalctl --since="2020-05-10 10:54:00" +May 10 10:54:35 testvm1.both.org audit: BPF prog-id=54 op=LOAD +May 10 10:54:35 testvm1.both.org audit: BPF prog-id=55 op=LOAD +May 10 10:54:45 testvm1.both.org systemd[1]: Starting My hello shell script... +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ######### Hello World! ######## +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:54:45 testvm1.both.org systemd[1]: Finished My hello shell script. +May 10 10:54:45 testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd"' +May 10 10:54:45 testvm1.both.org audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/"' +May 10 10:56:00 testvm1.both.org NetworkManager[840]: [1589122560.0633] dhcp4 (enp0s3): error -113 dispatching events +May 10 10:56:00 testvm1.both.org NetworkManager[840]:  [1589122560.0634] dhcp4 (enp0s3): state changed bound -> fail +<剪去> +``` + +`since` 选项跳过了指定时间点的所有记录,但在此时间点之后仍有大量你不需要的记录。你也可以使用 `until` 选项来裁剪掉你感兴趣的时间之后的记录。我想要事件发生时附近的一分钟,其他的都不用: + +``` +[root@testvm1 ~]# journalctl --since="2020-05-10 10:54:35" --until="2020-05-10 10:55:00" +-- Logs begin at Tue 2020-05-05 18:11:49 EDT, end at Sun 2020-05-10 11:04:59 EDT. -- +May 10 10:54:35 testvm1.both.org systemd[1]: Reloading. +May 10 10:54:35 testvm1.both.org audit: BPF prog-id=27 op=UNLOAD +May 10 10:54:35 testvm1.both.org audit: BPF prog-id=26 op=UNLOAD +<剪去> +ay 10 10:54:35 testvm1.both.org audit: BPF prog-id=55 op=LOAD +May 10 10:54:45 testvm1.both.org systemd[1]: Starting My hello shell script... +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ######### Hello World! ######## +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:54:45 testvm1.both.org systemd[1]: Finished My hello shell script. +May 10 10:54:45 testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd> +May 10 10:54:45 testvm1.both.org audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/> +lines 1-46/46 (END) +``` + +如果在这个时间段中仍然有大量的活动的话,你可以使用这些选项组合来进一步缩小结果数据流: + +``` +[root@testvm1 ~]# journalctl --since="2020-05-10 10:54:35" --until="2020-05-10 10:55:00" -t "hello.sh" +-- Logs begin at Tue 2020-05-05 18:11:49 EDT, end at Sun 2020-05-10 11:10:41 EDT. -- +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ######### Hello World! ######## +May 10 10:54:45 testvm1.both.org hello.sh[1380]: ############################### +[root@testvm1 ~]# +``` + +你的结果应该与我的相似。你可以从这一系列的实验中看出,这个服务运行的很正常。 + +### 重启 —— 还是走到这一步 + +到目前为止,你还没有重启过安装了服务的机器。所以现在重启吧,因为毕竟这个教程是关于启动阶段程序运行的情况。首先,你需要在启动序列中启用这个服务。 + +``` +[root@testvm1 ~]# systemctl enable hello.service +Created symlink /etc/systemd/system/multi-user.target.wants/hello.service → /etc/systemd/system/hello.service. +[root@testvm1 ~]# +``` + +注意到这个软链接是被创建在 `/etc/systemd/system/multi-user.target.wants` 目录下的。这是因为服务单元文件指定了服务是被 `multi-user.target` 所“需要”的。 + +重启机器,确保能在启动阶段观察数据流,这样你能看到 “Hello world” 信息。等等……你看见了么?嗯,我看见了。尽管它很快被刷过去了,但是我确实看到 systemd 的信息显示它启动了 `hello.service` 服务。 + +看看上次系统启动后的日志。你可以使用页面搜索工具 `less` 来找到 “Hello” 或 “hello”。我裁剪了很多数据,但是留下了附近的日志记录,这样你就能感受到和你服务有关的日志记录在本地是什么样子的: + +``` +[root@testvm1 ~]# journalctl -b +<剪去> +May 10 10:37:49 testvm1.both.org systemd[1]: Listening on SSSD Kerberos Cache Manager responder socket. +May 10 10:37:49 testvm1.both.org systemd[1]: Reached target Sockets. +May 10 10:37:49 testvm1.both.org systemd[1]: Reached target Basic System. +May 10 10:37:49 testvm1.both.org systemd[1]: Starting Modem Manager... +May 10 10:37:49 testvm1.both.org systemd[1]: Starting Network Manager... +May 10 10:37:49 testvm1.both.org systemd[1]: Starting Avahi mDNS/DNS-SD Stack... +May 10 10:37:49 testvm1.both.org systemd[1]: Condition check resulted in Secure Boot DBX (blacklist) updater being skipped. +May 10 10:37:49 testvm1.both.org systemd[1]: Starting My hello shell script... +May 10 10:37:49 testvm1.both.org systemd[1]: Starting IPv4 firewall with iptables... +May 10 10:37:49 testvm1.both.org systemd[1]: Started irqbalance daemon. +May 10 10:37:49 testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=irqbalance comm="systemd" exe="/usr/lib/sy>"' +May 10 10:37:49 testvm1.both.org systemd[1]: Starting LSB: Init script for live image.... +May 10 10:37:49 testvm1.both.org systemd[1]: Starting Hardware Monitoring Sensors... +<剪去> +May 10 10:37:49 testvm1.both.org systemd[1]: Starting NTP client/server... +May 10 10:37:49 testvm1.both.org systemd[1]: Starting SYSV: Late init script for live image.... +May 10 10:37:49 testvm1.both.org systemd[1]: Started SYSV: Late init script for live image.. +May 10 10:37:49 testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=livesys-late comm="systemd" exe="/usr/lib/>"' +May 10 10:37:49 testvm1.both.org hello.sh[842]: ############################### +May 10 10:37:49 testvm1.both.org hello.sh[842]: ######### Hello World! ######## +May 10 10:37:49 testvm1.both.org hello.sh[842]: ############################### +May 10 10:37:49 testvm1.both.org systemd[1]: hello.service: Succeeded. +May 10 10:37:49 testvm1.both.org systemd[1]: Finished My hello shell script. +May 10 10:37:49 testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd>"' +May 10 10:37:49 testvm1.both.org audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/> +May 10 10:37:50 testvm1.both.org audit: BPF prog-id=28 op=LOAD +<剪去> +``` + +你可以看到 systemd 启动了 `hello.service` 单元,它执行了 `hello.sh` 脚本并将输出记录在日志中。如果你能在启动阶段抓到它,你也应该能看见,systemd 信息表明了它正在启动这个脚本,另外一条信息表明了服务成功。通过观察上面数据流中第一条 systemd 消息,你会发现 systemd 在到达基本的系统目标后很快就启动了你的服务。 + +但是我想看见信息在启动阶段也被打印出来。有一种方法可以做到:在 `hello.service` 文件的 `[Service]` 段中加入下述行: + +``` +StandardOutput=journal+console +``` + +现在 `hello.service` 文件看起来像这样: + +``` +# Simple service unit file to use for testing +# startup configurations with systemd. +# By David Both +# Licensed under GPL V2 +# + +[Unit] +Description=My hello shell script + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/hello.sh +StandardOutput=journal+console + +[Install] +WantedBy=multi-user.target +``` + +加上这一行后,重启系统,并在启动过程中观察显示屏上滚动的数据流。你应该在它的小方框中看到信息。在启动序列完成后,你可以查看最近的启动日志,然后定位到你新服务的日志记录。 + +### 修改次序 + +现在你的服务已经可用了,你可以看看它在启动序列中哪个位置启动的,尝试下修改它。需要牢记的是 systemd 倾向于在每个主要目标(`basic.target`、`multi-user.target` 和 `graphical.**target`)中并行启动尽可能多的服务和其他的单元类型。你应该刚刚看过最近一次开机的日志记录,它应该和上面我的日志看上去类似。 + +注意,systemd 在它到达到基本系统目标(`basic.target`)后不久就启动了你的测试服务。这正是你在在服务单元文件的 `WantedBy` 行中指定的,所以它是对的。在你做出修改之前,列出 `/etc/systemd/system/multi-user.target.wants` 目录下的内容,你会看到一个指向服务单元文件的软链接。服务单元文件的 `[Install]` 段指定了哪一个目标会启动这个服务,执行 `systemctl enable hello.service` 命令会在适当的 `targets.wants` 路径下创建软链接。 + +``` +hello.service -> /etc/systemd/system/hello.service +``` + +某些服务需要在 `basic.target` 阶段启动,其他则没这个必要,除非系统正在启动 `graphical.target`。这个实验中的服务不会在 `basic.target` 期间启动 —— 假设你直到 `graphical.target` 阶段才需要它启动。那么修改 `WantedBy` 这一行: + +``` +WantedBy=graphical.target +``` + +一定要先禁用 `hello.service` 再重新启用它,这样可以删除旧链接并且在 `graphical.targets.wants` 目录下创建一个新的链接。我注意到如果我在修改服务需要的目标之前忘记禁用该服务,我可以运行 `systemctl disable` 命令,链接将从两个 `targets.wants` 目录中删除。之后我只需要重新启用这个服务然后重启电脑。 + +启动 `graphical.target` 下的服务有个需要注意的地方,如果电脑启动到 `multi-user.target` 阶段,这个服务不会自动启动。如果这个服务需要 GUI 桌面接口,这或许是你想要的,但是它同样可能不是你想要的。 + +用 `-o short-monotonic` 选项来查看 `graphical.target` 和 `multi-user.target` 的日志,展示内核启动几秒后的日志,精度为微秒级别: + +``` +[root@testvm1 ~]# journalctl -b -o short-monotonic +``` + +`multi-user.target` 的部分日志: + +``` +[   17.264730] testvm1.both.org systemd[1]: Starting My hello shell script... +[   17.265561] testvm1.both.org systemd[1]: Starting IPv4 firewall with iptables... +<剪去> +[   19.478468] testvm1.both.org systemd[1]: Starting LSB: Init script for live image.... +[   19.507359] testvm1.both.org iptables.init[844]: iptables: Applying firewall rules: [  OK  ] +[   19.507835] testvm1.both.org hello.sh[843]: ############################### +[   19.507835] testvm1.both.org hello.sh[843]: ######### Hello World! ######## +[   19.507835] testvm1.both.org hello.sh[843]: ############################### +<剪去> +[   21.482481] testvm1.both.org systemd[1]: hello.service: Succeeded. +[   21.482550] testvm1.both.org smartd[856]: Opened configuration file /etc/smartmontools/smartd.conf +[   21.482605] testvm1.both.org systemd[1]: Finished My hello shell script. +``` + +还有部分 `graphical.target` 的日志: + +``` +[   19.436815] testvm1.both.org systemd[1]: Starting My hello shell script... +[   19.437070] testvm1.both.org systemd[1]: Starting IPv4 firewall with iptables... +<剪去> +[   19.612614] testvm1.both.org hello.sh[841]: ############################### +[   19.612614] testvm1.both.org hello.sh[841]: ######### Hello World! ######## +[   19.612614] testvm1.both.org hello.sh[841]: ############################### +[   19.629455] testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' +[   19.629569] testvm1.both.org audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' +[   19.629682] testvm1.both.org systemd[1]: hello.service: Succeeded. +[   19.629782] testvm1.both.org systemd[1]: Finished My hello shell script. +``` + +尽管单元文件的 `WantedBy` 部分包含了 `graphical.target`,`hello.service` 单元在启动后大约 19.5 或 19.6 秒后运行。但是 `hello.service` 在 `multi-user.target` 中开始于 17.24 秒,在 `graphical target` 中开始于 19.43 秒。 + +这意味着什么呢?看看 `/etc/systemd/system/default.target` 这个链接。文件内容显示 systemd 先启动了默认目标 `graphical.target`,然后 `graphical.target` 触发了 `multi-user.target`。 + +``` +[root@testvm1 system]# cat default.target +#  SPDX-License-Identifier: LGPL-2.1+ +# +#  This file is part of systemd. +# +#  systemd is free software; you can redistribute it and/or modify it +#  under the terms of the GNU Lesser General Public License as published by +#  the Free Software Foundation; either version 2.1 of the License, or +#  (at your option) any later version. + +[Unit] +Description=Graphical Interface +Documentation=man:systemd.special(7) +Requires=multi-user.target +Wants=display-manager.service +Conflicts=rescue.service rescue.target +After=multi-user.target rescue.service rescue.target display-manager.service +AllowIsolate=yes +[root@testvm1 system]# +``` + +不管是用 `graphical.target` 还是 `multi-user.target` 启动服务,`hello.service` 单元都在启动后的 19.5 或 19.6 秒后启动。基于这个事实和日志结果(特别是使用单调输出的日志),你就知道这些目标是在并行启动。再看看日志中另外一件事: + + +``` +[   28.397330] testvm1.both.org systemd[1]: Reached target Multi-User System. +[   28.397431] testvm1.both.org systemd[1]: Reached target Graphical Interface. +``` + +两个目标几乎是同时完成的。这是和理论一致的,因为 `graphical.target` 触发了 `multi-user.target`,在 `multi-user.target` 到达(即完成)之前它是不会完成的。但是 `hello.service` 比这个完成的早的多。 + +这一切表明,这两个目标几乎是并行启动的。如果你查看日志,你会发现各种目标和来自这类主要目标的服务大多是平行启动的。很明显,`multi-user.target` 没有必要在 `graphical.target` 启动前完成。所以,简单的使用这些主要目标来并不能很好地排序启动序列,尽管它在保证单元只在它们被 `graphical.target` 需要时启动这方面很有用。 + +在继续之前,把 `hello.service` 单元文件回滚至 `WantedBy=multi-user.target`(如果还没做的话)。 + +### 确保一个服务在网络运行后启动 + +一个常见的启动问题是保证一个单元在网络启动运行后再启动。Freedesktop.org 的文章《[在网络启动后运行服务][11]》中提到,目前没有一个真正的关于网络何时算作“启动”的共识。然而,这篇文章提供了三个选项,满足完全可用网络需求的是 `network-online.target`。需要注意的是 `network.target` 是在关机阶段使用的而不是启动阶段,所以它对你做有序启动方面没什么帮助。 + +在做出任何改变之前,一定要检查下日志,确认 `hello.service` 单元在网络可用之前可以正确启动。你可以在日志中查找 `network-online.target` 来确认。 + +你的服务并不真的需要网络服务,但是你可以把它当作是需要网络的。 + +因为设置 `WantedBy=graphical.target` 并不能保证服务会在网络启动可用后启动,所以你需要其他的方法来做到这一点。幸运的是,有个简单的方法可以做到。将下面两行代码加入 `hello.service` 单元文件的 `[Unit]` 段: + +``` +After=network-online.target                                                                             +Wants=network-online.target +``` + +两个字段都需要才能生效。重启机器,在日志中找到服务的记录: + +``` +[   26.083121] testvm1.both.org NetworkManager[842]:  [1589227764.0293] device (enp0s3): Activation: successful, device activated. +[   26.083349] testvm1.both.org NetworkManager[842]:  [1589227764.0301] manager: NetworkManager state is now CONNECTED_GLOBAL +[   26.085818] testvm1.both.org NetworkManager[842]:  [1589227764.0331] manager: startup complete +[   26.089911] testvm1.both.org systemd[1]: Finished Network Manager Wait Online. +[   26.090254] testvm1.both.org systemd[1]: Reached target Network is Online. +[   26.090399] testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=NetworkManager-wait-online comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? termina>"' +[   26.091991] testvm1.both.org systemd[1]: Starting My hello shell script... +[   26.095864] testvm1.both.org sssd[be[implicit_files]][1007]: Starting up +[   26.290539] testvm1.both.org systemd[1]: Condition check resulted in Login and scanning of iSCSI devices being skipped. +[   26.291075] testvm1.both.org systemd[1]: Reached target Remote File Systems (Pre). +[   26.291154] testvm1.both.org systemd[1]: Reached target Remote File Systems. +[   26.292671] testvm1.both.org systemd[1]: Starting Notify NFS peers of a restart... +[   26.294897] testvm1.both.org systemd[1]: iscsi.service: Unit cannot be reloaded because it is inactive. +[   26.304682] testvm1.both.org hello.sh[1010]: ############################### +[   26.304682] testvm1.both.org hello.sh[1010]: ######### Hello World! ######## +[   26.304682] testvm1.both.org hello.sh[1010]: ############################### +[   26.306569] testvm1.both.org audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' +[   26.306669] testvm1.both.org audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=hello comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success' +[   26.306772] testvm1.both.org systemd[1]: hello.service: Succeeded. +[   26.306862] testvm1.both.org systemd[1]: Finished My hello shell script. +[   26.584966] testvm1.both.org sm-notify[1011]: Version 2.4.3 starting +``` + +这样证实了 `hello.service` 单元会在 `network-online.target` 之后启动。这正是你想要的。你可能也看见了 “Hello World” 消息在启动阶段出现。还需要注意的是,在启动时记录出现的时间戳比之前要晚了大约 6 秒。 + +### 定义启动序列的最好方法 + +本文章详细地探讨了 Linux 启动时 systemd 和单元文件以及日志的细节,并且发现了当错误被引入单元文件时候会发生什么。作为系统管理员,我发现这类实验有助于我理解程序或者服务出故障时的行为,并且在安全环境中有意破坏是一种学习的好方法。 + +文章中实验结果证明,仅将服务单元添加至 `multi-user.target` 或者 `graphical.target` 并不能确定它在启动序列中的位置。它仅仅决定了一个单元是否作为图形环境一部分启动。事实上,启动目标 `multi-user.target` 和 `graphical.target` 和所有它们的 `Wants` 以及 `Required` 几乎是并行启动的。确保单元在特定位置启动的最好方法是确定它所依赖的单元,并将新单元配置成 `Want` 和 `After` 它的依赖。 + + +### 资源 + +网上有大量的关于 systemd 的参考资料,但是大部分都有点简略、晦涩甚至有误导性。除了本文中提到的资料,下列的网页提供了跟多可靠且详细的 systemd 入门信息。 + +Fedora 项目有一篇切实好用的 systemd 入门,它囊括了几乎所有你需要知道的关于如何使用 systemd 配置、管理和维护 Fedora 计算机的信息。 + +Fedora 项目也有一个不错的 备忘录,交叉引用了过去 SystemV 命令和 systemd 命令做对比。 + +关于 systemd 的技术细节和创建这个项目的原因,请查看 Freedesktop.org 上的 systemd 描述。 + +Linux.com 的“更多 systemd 的乐趣”栏目提供了更多高级的 systemd 信息和技巧。 + +此外,还有一系列深度的技术文章,是由 systemd 的设计者和主要开发者 Lennart Poettering 为 Linux 系统管理员撰写的。这些文章写于 2010 年 4 月至 2011 年 9 月间,但它们现在和当时一样具有现实意义。关于 systemd 及其生态的许多其他好文章都是基于这些文章: + + * [Rethinking PID 1][18] + * [systemd for Administrators,Part I][19] + * [systemd for Administrators,Part II][20] + * [systemd for Administrators,Part III][21] + * [systemd for Administrators,Part IV][22] + * [systemd for Administrators,Part V][23] + * [systemd for Administrators,Part VI][24] + * [systemd for Administrators,Part VII][25] + * [systemd for Administrators,Part VIII][26] + * [systemd for Administrators,Part IX][27] + * [systemd for Administrators,Part X][28] + * [systemd for Administrators,Part XI][29] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/5/manage-startup-systemd + +作者:[David Both][a] +选题:[lujun9972][b] +译者:[tt67wq](https://github.com/tt67wq) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dboth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux_penguin_green.png?itok=ENdVzW22 (Penguin with green background) +[2]: https://linux.cn/article-12214-1.html +[3]: https://opensource.com/article/20/5/systemd-units +[4]: https://opensource.com/article/20/5/systemd-startup +[5]: https://chmodcommand.com/chmod-700/ +[6]: https://opensource.com/life/16/10/introduction-linux-filesystems +[7]: https://chmodcommand.com/chmod-644/ +[8]: https://chmodcommand.com/chmod-640/ +[9]: http://man7.org/linux/man-pages/man5/systemd.service.5.html +[10]: tmp.bYMHU00BHs#resources +[11]: https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ +[12]: https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html +[13]: https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet +[14]: http://Freedesktop.org +[15]: http://www.freedesktop.org/wiki/Software/systemd +[16]: http://Linux.com +[17]: https://www.linux.com/training-tutorials/more-systemd-fun-blame-game-and-stopping-services-prejudice/ +[18]: http://0pointer.de/blog/projects/systemd.html +[19]: http://0pointer.de/blog/projects/systemd-for-admins-1.html +[20]: http://0pointer.de/blog/projects/systemd-for-admins-2.html +[21]: http://0pointer.de/blog/projects/systemd-for-admins-3.html +[22]: http://0pointer.de/blog/projects/systemd-for-admins-4.html +[23]: http://0pointer.de/blog/projects/three-levels-of-off.html +[24]: http://0pointer.de/blog/projects/changing-roots +[25]: http://0pointer.de/blog/projects/blame-game.html +[26]: http://0pointer.de/blog/projects/the-new-configuration-files.html +[27]: http://0pointer.de/blog/projects/on-etc-sysinit.html +[28]: http://0pointer.de/blog/projects/instances.html +[29]: http://0pointer.de/blog/projects/inetd.html diff --git a/published/202105/20201103 Create a list in a Flutter mobile app.md b/published/202105/20201103 Create a list in a Flutter mobile app.md new file mode 100644 index 0000000000..a27893ee35 --- /dev/null +++ b/published/202105/20201103 Create a list in a Flutter mobile app.md @@ -0,0 +1,346 @@ +[#]: collector: (lujun9972) +[#]: translator: (ywxgod) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13446-1.html) +[#]: subject: (Create a list in a Flutter mobile app) +[#]: via: (https://opensource.com/article/20/11/flutter-lists-mobile-app) +[#]: author: (Vitaly Kuprenko https://opensource.com/users/kooper) + +在 Flutter 移动应用程序中创建一个列表 +====== + +> 了解如何创建 Flutter 应用的界面以及如何在它们之间进行数据传递。 + +![](https://img.linux.net.cn/data/attachment/album/202105/31/201442luk1u6vqz3h3k8jn.jpg) + +Flutter 是一个流行的开源工具包,它可用于构建跨平台的应用。在文章《[用 Flutter 创建移动应用][2]》中,我已经向大家展示了如何在 Linux 中安装 [Flutter][3] 并创建你的第一个应用。而这篇文章,我将向你展示如何在你的应用中添加一个列表,点击每一个列表项可以打开一个新的界面。这是移动应用的一种常见设计方法,你可能以前见过的,下面有一个截图,能帮助你对它有一个更直观的了解: + +![测试 Flutter 应用][4] + +Flutter 使用 [Dart][6] 语言。在下面的一些代码片段中,你会看到以斜杠开头的语句。两个斜杠(`//`)是指代码注释,用于解释某些代码片段。三个斜杠(`///`)则表示的是 Dart 的文档注释,用于解释 Dart 类和类的属性,以及其他的一些有用的信息。 + +### 查看Flutter应用的主要部分 + +Flutter 应用的典型入口点是 `main()` 函数,我们通常可以在文件 `lib/main.dart` 中找到它: + +``` +void main() { + runApp(MyApp()); +} +``` + +应用启动时,`main()` 会被调用,然后执行 `MyApp()`。 `MyApp` 是一个无状态微件(`StatelessWidget`),它包含了`MaterialApp()` 微件中所有必要的应用设置(应用的主题、要打开的初始页面等): + +``` +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { +   return MaterialApp( +     title: 'Flutter Demo', +     theme: ThemeData( +       primarySwatch: Colors.blue, +       visualDensity: VisualDensity.adaptivePlatformDensity, +     ), +     home: MyHomePage(title: 'Flutter Demo Home Page'), +   ); + } +} +``` + +生成的 `MyHomePage()` 是应用的初始页面,是一个有状态的微件,它包含包含可以传递给微件构造函数参数的变量(从上面的代码看,我们传了一个 `title` 变量给初始页面的构造函数): + +``` +class MyHomePage extends StatefulWidget { + MyHomePage({Key key, this.title}) : super(key: key); + + final String title; + + @override + _MyHomePageState createState() => _MyHomePageState(); +} +``` + +有状态微件(`StatefulWidget`)表示这个微件可以拥有自己的状态:`_MyHomePageState`。调用 `_MyHomePageState` 中的 `setState()` 方法,可以重新构建用户界面: + +``` +class _MyHomePageState extends State { + int _counter = 0; // Number of taps on + button. + + void _incrementCounter() { // Increase number of taps and update UI by calling setState(). + setState(() { + _counter++; + }); + } + ... +} +``` + +不管是有状态的,还是无状态的微件,它们都有一个 `build()` 方法,该方法负责微件的 UI 外观。 + +``` +@override +Widget build(BuildContext context) { + return Scaffold( // Page widget. + appBar: AppBar( // Page app bar with title and back button if user can return to previous screen. + title: Text(widget.title), // Text to display page title. + ), + body: Center( // Widget to center child widget. + child: Column( // Display children widgets in column. + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( // Static text. + 'You have pushed the button this many times:', + ), + Text( // Text with our taps number. + '$_counter', // $ sign allows us to use variables inside a string. + style: Theme.of(context).textTheme.headline4,// Style of the text, “Theme.of(context)” takes our context and allows us to access our global app theme. + ), + ], + ), + ), + // Floating action button to increment _counter number. + floatingActionButton: FloatingActionButton( + onPressed: _incrementCounter, + tooltip: 'Increment', + child: Icon(Icons.add), + ), + ); +} +``` + +### 修改你的应用 + +一个好的做法是,把 `main()` 方法和其他页面的代码分开放到不同的文件中。要想将它们分开,你需要右击 `lib` 目录,然后选择 “New > Dart File” 来创建一个 .dart 文件: + +![创建一个新的 Dart 文件][10] + +将新建的文件命名为 `items_list_page`。 + +切换回到 `main.dart` 文件,将 `MyHomePage` 和 `_MyHomePageState` 中的代码,剪切并粘贴到我们新建的文件。然后将光标放到 `StatefulWidget` 上(下面红色的下划线处), 按 `Alt+Enter` 后出现下拉列表,然后选择 `package:flutter/material.dart`: + +![导入 Flutter 包][11] + +经过上面的操作我们将 `flutter/material.dart` 包添加到了 `main.dart` 文件中,这样我们就可以使用 Flutter 提供的默认的 material 主题微件。 + +然后, 在类名 `MyHomePage` 右击,“Refactor > Rename...”将其重命名为 `ItemsListPage`: + +![重命名 StatefulWidget 类][12] + +Flutter 识别到你重命名了 `StatefulWidget` 类,它会自动将它的 `State` 类也跟着重命名: + +![State 类被自动重命名][13] + +回到 `main.dart` 文件,将文件名 `MyHomePage` 改为 `ItemsListPage`。 一旦你开始输入, 你的 Flutter 集成开发环境(可能是 IntelliJ IDEA 社区版、Android Studio 和 VS Code 或 [VSCodium][14]),会给出自动代码补完的建议。 + +![IDE 建议自动补完的代码][15] + +按回车键即可完成输入,缺失的导入语句会被自动添加到文件的顶部。 + +![添加缺失的导入语句][16] + +到此,你已经完成了初始设置。现在你需要在 `lib` 目录创建一个新的 .dart 文件,命名为 `item_model`。(注意,类命是大写驼峰命名,一般的文件名是下划线分割的命名。)然后粘贴下面的代码到新的文件中: + +``` +/// Class that stores list item info: +/// [id] - unique identifier, number. +/// [icon] - icon to display in UI. +/// [title] - text title of the item. +/// [description] - text description of the item. +class ItemModel { + // class constructor + ItemModel(this.id, this.icon, this.title, this.description); + + // class fields + final int id; + final IconData icon; + final String title; + final String description; +} +``` + +回到 `items_list_page.dart` 文件,将已有的 `_ItemsListPageState` 代码替换为下面的代码: + +``` +class _ItemsListPageState extends State { + +// Hard-coded list of [ItemModel] to be displayed on our page. + final List _items = [ + ItemModel(0, Icons.account_balance, 'Balance', 'Some info'), + ItemModel(1, Icons.account_balance_wallet, 'Balance wallet', 'Some info'), + ItemModel(2, Icons.alarm, 'Alarm', 'Some info'), + ItemModel(3, Icons.my_location, 'My location', 'Some info'), + ItemModel(4, Icons.laptop, 'Laptop', 'Some info'), + ItemModel(5, Icons.backup, 'Backup', 'Some info'), + ItemModel(6, Icons.settings, 'Settings', 'Some info'), + ItemModel(7, Icons.call, 'Call', 'Some info'), + ItemModel(8, Icons.restore, 'Restore', 'Some info'), + ItemModel(9, Icons.camera_alt, 'Camera', 'Some info'), + ]; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.title), + ), + body: ListView.builder( // Widget which creates [ItemWidget] in scrollable list. + itemCount: _items.length, // Number of widget to be created. + itemBuilder: (context, itemIndex) => // Builder function for every item with index. + ItemWidget(_items[itemIndex], () { + _onItemTap(context, itemIndex); + }), + )); + } + + // Method which uses BuildContext to push (open) new MaterialPageRoute (representation of the screen in Flutter navigation model) with ItemDetailsPage (StateFullWidget with UI for page) in builder. + _onItemTap(BuildContext context, int itemIndex) { + Navigator.of(context).push(MaterialPageRoute( + builder: (context) => ItemDetailsPage(_items[itemIndex]))); + } +} + + +// StatelessWidget with UI for our ItemModel-s in ListView. +class ItemWidget extends StatelessWidget { + const ItemWidget(this.model, this.onItemTap, {Key key}) : super(key: key); + + final ItemModel model; + final Function onItemTap; + + @override + Widget build(BuildContext context) { + return InkWell( // Enables taps for child and add ripple effect when child widget is long pressed. + onTap: onItemTap, + child: ListTile( // Useful standard widget for displaying something in ListView. + leading: Icon(model.icon), + title: Text(model.title), + ), + ); + } +} +``` + +为了提高代码的可读性,可以考虑将 `ItemWidget` 作为一个单独的文件放到 `lib` 目录中。 + +现在唯一缺少的是 `ItemDetailsPage` 类。在 `lib` 目录中我们创建一个新文件并命名为 `item_details_page`。然后将下面的代码拷贝进去: + +``` +import 'package:flutter/material.dart'; + +import 'item_model.dart'; + +/// Widget for displaying detailed info of [ItemModel] +class ItemDetailsPage extends StatefulWidget { + final ItemModel model; + + const ItemDetailsPage(this.model, {Key key}) : super(key: key); + + @override + _ItemDetailsPageState createState() => _ItemDetailsPageState(); +} + +class _ItemDetailsPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(widget.model.title), + ), + body: Center( + child: Column( + children: [ + const SizedBox(height: 16), + Icon( + widget.model.icon, + size: 100, + ), + const SizedBox(height: 16), + Text( + 'Item description: ${widget.model.description}', + style: TextStyle(fontSize: 18), + ) + ], + ), + ), + ); + } +} +``` + +上面的代码几乎没什么新东西,不过要注意的是 `_ItemDetailsPageState` 里使用了 `widget.item.title` 这样的语句,它让我们可以从有状态类中引用到其对应的微件(`StatefulWidget`)。 + +### 添加一些动画 + +现在让我们来添加一些基础的动画: + + 1. 找到 `ItemWidget` 代码块(或者文件) + 2. 将光标放到 `build()` 方法中的 `Icon()` 微件上 + 3. 按 `Alt+Enter`,然后选择“Wrap with widget...” + +![查看微件选项][18] + +输入 `Hero`,然后从建议的下拉列表中选择 `Hero((Key key, @required this, tag, this.create))`: + +![查找 Hero 微件][19] + +下一步, 给 Hero 微件添加 `tag` 属性 `tag: model.id`: + +![在 Hero 微件上添加 tag 属性为 model.id][20] + +最后我们在 `item_details_page.dart` 文件中做相同的修改: + +![修改item_details_page.dart文件][21] + +前面的步骤,其实我们是用 `Hero()` 微件对 `Icon()` 微件进行了封装。还记得吗?前面我们定义 `ItemModel` 类时,定义了一个 `id field`,但没有在任何地方使用到。因为 Hero 微件会为其每个子微件添加一个唯一的标签。当 Hero 检测到不同页面(`MaterialPageRoute`)中存在相同标签的 Hero 时,它会自动在这些不同的页面中应用过渡动画。 + +可以在安卓模拟器或物理设备上运行我们的应用来测试这个动画。当你打开或者关闭列表项的详情页时,你会看到一个漂亮的图标动画: + +![测试 Flutter 应用][4] + +### 收尾 + +这篇教程,让你学到了: + + * 一些符合标准的,且能用于自动创建应用的组件。 + * 如何添加多个页面以及在页面间传递数据。 + * 如何给多个页面添加简单的动画。 + +如果你想了解更多,查看 Flutter 的 [文档][22](有一些视频和样例项目的链接,还有一些创建 Flutter 应用的“秘方”)与 [源码][23],源码的开源许可证是 BSD 3。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/11/flutter-lists-mobile-app + +作者:[Vitaly Kuprenko][a] +选题:[lujun9972][b] +译者:[ywxgod](https://github.com/ywxgod) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/kooper +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/team-phone-collaboration-mobile-device.png?itok=v3EjbRK6 (Mobile devices and collaboration leads to staring at our phones) +[2]: https://linux.cn/article-12693-1.html +[3]: https://flutter.dev/ +[4]: https://opensource.com/sites/default/files/uploads/flutter_test.gif (Testing the Flutter app) +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://dart.dev/ +[7]: http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+key +[8]: http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string +[9]: http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+icon +[10]: https://opensource.com/sites/default/files/uploads/flutter_new-dart-file_0.png (Create a new Dart file) +[11]: https://opensource.com/sites/default/files/uploads/flutter_import-package.png (Importing Flutter package) +[12]: https://opensource.com/sites/default/files/uploads/flutter_rename-class.png (Renaming StatefulWidget class) +[13]: https://opensource.com/sites/default/files/uploads/flutter_stateclassrenamed.png (State class renamed automatically) +[14]: https://opensource.com/article/20/6/open-source-alternatives-vs-code +[15]: https://opensource.com/sites/default/files/uploads/flutter_autocomplete.png (IDE suggests autocompleting code) +[16]: https://opensource.com/sites/default/files/uploads/flutter_import-input.png (Adding missing import ) +[17]: http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+listview +[18]: https://opensource.com/sites/default/files/uploads/flutter_wrapwithwidget.png (Wrap with widget option) +[19]: https://opensource.com/sites/default/files/uploads/flutter_hero.png (Finding the Hero widget) +[20]: https://opensource.com/sites/default/files/uploads/flutter_hero-tag.png (Adding the tag property model.id to the Hero widget) +[21]: https://opensource.com/sites/default/files/uploads/flutter_details-tag.png (Changing item_details_page.dart file) +[22]: https://flutter.dev/docs +[23]: https://github.com/flutter diff --git a/published/202105/20201117 Getting started with btrfs for Linux.md b/published/202105/20201117 Getting started with btrfs for Linux.md new file mode 100644 index 0000000000..a47f573e08 --- /dev/null +++ b/published/202105/20201117 Getting started with btrfs for Linux.md @@ -0,0 +1,232 @@ +[#]: collector: (lujun9972) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13440-1.html) +[#]: subject: (Getting started with btrfs for Linux) +[#]: via: (https://opensource.com/article/20/11/btrfs-linux) +[#]: author: (Alan Formy-Duval https://opensource.com/users/alanfdoss) + +Btrfs 文件系统入门 +====== + +> B-tree 文件系统(Btrfs)融合了文件系统和卷管理器。它为 Linux 操作系统提供了高级文件系统应当拥有的诸多不错的功能特性。 + +![](https://img.linux.net.cn/data/attachment/album/202105/30/070203wkxsufbx1zlccyl9.jpg) + +好几年前 Btrfs 就已经可以在 Linux 中使用了,所以你可能已经熟悉它了。如果没有,你可能对它尚有疑虑,尤其是如果你使用的是 Fedora 工作站 (Btrfs 现在是它的默认文件系统)。本文旨在帮助你熟悉它及其高级功能,例如 [写时复制][2] 和 [校验和][3]。 + +Btrfs 是 “B-Tree Filesystem” 的缩写,实际上是文件系统和卷管理器的结合体。它通常被视为对 ZFS 的回应,ZFS 早在 2005 年就被引入 Sun 微系统的 Solaris 操作系统中,现在基本上被一个名为 OpenZFS 的开源实现所取代。Ubuntu 和 FreeBSD 常常使用 OpenZFS。其他具有类似特性的示例有红帽的 Stratis 和 Linux 逻辑卷管理器Logical Volume Manager(LVM)。 + +### 安装 + +为了尝试 Btrfs,我下载了 Fedora 33 工作站 [ISO 文件][4] 并将其安装到一个新的虚拟机(VM)中。安装过程与以前的版本没有变化。我没有自定义任何设置,包括驱动器分区和格式化,以保持本教程的准确“开箱即用”设置。当虚拟机启动并运行后,我安装并运行了 GNOME 分区编辑器([GParted][5]),以获得一个良好的、工厂级的驱动器布局视图。 + +![GParted's view of Btrfs on Fedora 33 Workstation using GParted][6] + +从安装这一点来说,与你以前所习惯的情况没什么不同;事实上,你可以正常使用该系统,甚至可能没有注意到文件系统是 Btrfs。然而,拥有这个新的默认文件系统使你能够利用几个很酷的特性。 + +### 检查 Btrfs 文件系统 + +我暂时没有找到特定于 Btrfs 的图形工具,尽管它的一些功能已经被合并到现有的磁盘管理工具中。 + +在命令行中,你可以更仔细地查看 Btrfs 格式: + +``` +# btrfs filesystem show +Label: 'fedora_localhost-live'  uuid: f2bb02f9-5c41-4c91-8eae-827a801ee58a +        Total devices 1 FS bytes used 6.36GiB +        devid    1 size 10.41GiB used 8.02GiB path /dev/vda3 +``` + +### 修改 Btrfs 标签 + +我首先注意到的是安装程序设置的文件系统标签:`fedora_localhost-live`。这是不准确的,因为它现在是一个已安装的系统,不再是 [livecd][8]。所以我使用 `btrfs filesystem label` 命令对其进行了更改。 + +修改 Btrfs 标签非常的简单: + +``` +# btrfs filesystem label / +fedora_localhost-live +# btrfs filesystem label / fedora33workstation +# btrfs filesystem label / +fedora33workstation +``` + +### 管理 Btrfs 子卷 + +子卷看起来像是可以由 Btrfs 管理的标准目录。我的新 Fedora 33 工作站上有几个子卷: + +``` +# btrfs subvolume list / +ID 256 gen 2458 top level 5 path home +ID 258 gen 2461 top level 5 path root +ID 265 gen 1593 top level 258 path var/lib/machines +``` + +使用 `btrfs subvolume Create` 命令创建新的子卷,或使用 `btrfs subvolume delete` 删除子卷: + +``` +# btrfs subvolume create /opt/foo +Create subvolume '/opt/foo' +# btrfs subvolume list / +ID 256 gen 2884 top level 5 path home +ID 258 gen 2888 top level 5 path root +ID 265 gen 1593 top level 258 path var/lib/machines +ID 276 gen 2888 top level 258 path opt/foo +# btrfs subvolume delete /opt/foo +Delete subvolume (no-commit): '/opt/foo' +``` + +子卷允许设置配额、拍摄快照以及复制到其他位置和其他主机等操作。那么系统管理员如何利用这些功能?用户主目录又是如何操作的呢? + +#### 添加用户 + +就像从前一样,添加一个新的用户帐户会创建一个主目录供该帐户使用: + +``` +# useradd student1 +# getent passwd student1 +student1:x:1006:1006::/home/student1:/bin/bash +# ls -l /home +drwx------. 1 student1 student1 80 Oct 29 00:21 student1 +``` + +传统上,用户的主目录是 `/home` 的子目录。所有权和操作权是为所有者量身定制的,但是特殊功能来没有管理它们。而企业服务器环境是另外一种情况。通常,目录是为特定的应用程序及其用户保留的。你可以利用 Btrfs 来管理和应用对这些目录的约束。 + +为了将 Btrfs 子卷作为用户主页,在 `useradd` 命令中有一个新选项:`--Btrfs-subvolume-home`。尽管手册页尚未更新(截至本文撰写之时),但你可以通过运行 `useradd --help` 来查看该选项。通过在添加新用户时传递此选项,将创建一个新的 Btrfs 子卷。它的功能与创建常规目录时的 `-d` 选项类似: + +``` +# useradd --btrfs-subvolume-home student2 +Create subvolume '/home/student2' +``` + +使用 `getent passwd student2` 验证用户,它将显示为正常。但是,运行 `btrfs subvolume` 命令列出子卷,你将看到一些有趣的内容:新用户的主目录! + +``` +# btrfs subvolume list / +ID 256 gen 2458 top level 5 path home +ID 258 gen 2461 top level 5 path root +ID 265 gen 1593 top level 258 path var/lib/machines +ID 272 gen 2459 top level 256 path home/student2 +``` + +探索企业服务器环境的第二个场景。假设你需要在 `/opt` 中安装一个 [WildFly][9] 服务器并部署一个 Java web 应用程序。通常,你的第一步是创建一个 `wildfly` 用户。使用新的 `--btrfs-subvolume-home` 选项和 `-b` 选项来指定 `/opt` 作为基本目录: + +``` +# useradd -b /opt --btrfs-subvolume-home wildfly +Create subvolume '/opt/wildfly' +``` + +于是,`wildfly` 用户可以使用了,并且主目录设置在了 `/opt/wildfly`。 + +#### 删除用户 + +删除用户时,有时需要同时删除该用户的文件和主目录。`userdel` 命令有 `-r` 选项,它可以同时删除 Btrfs 子卷: + +``` +# userdel -r student2 +Delete subvolume (commit): '/home/student2' +``` + +#### 设置磁盘使用配额 + +在我的一节计算机科学课上,一个学生运行了一个失控的 C 程序,然后写进了磁盘,将我们院的 Unix 系统上整个 `/home` 目录都填满了!在管理员终止失控进程并清除一些空间之前,服务器将无法使用。上述情况也是如此;那个 Wildfly 企业应用程序将为其用户提供越来越多的日志文件和内容存储。如何防止服务器因磁盘已满而死机?设置磁盘使用限制是个好主意。幸运的是,Btrfs 通过设置配额的方式支持这一点。 + +配置配额需要几个步骤。第一步是在 Btrfs 文件系统上启用配额: + +``` +# btrfs quota enable / +``` + +确保你知道每个子卷的配额组(qgroup)ID 号,该编号由 `btrfs subvolume list` 命令显示。每个子卷都需要基于 ID 号码来关联配额组。这可以通过 `btrfs qgroup create` 单独完成,但是,btrfs 维基提供了以下命令来加快为文件系统上的子卷创建配额组: + +``` +> btrfs subvolume list \ | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup destroy 0/{} \ +``` + +在新安装的 Fedora 33 工作站系统中,你在根文件系统路径上操作,`/`。用根路径替换 `\`: + +``` +# btrfs subvolume list / | cut -d' ' -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} / +``` + +然后运行 `btrfs quota rescan`,查看新的配额组: + +``` +# btrfs quota rescan / +quota rescan started +# btrfs qgroup show / +qgroupid         rfer         excl +--------         ----         ---- +0/5          16.00KiB     16.00KiB +0/256       272.04MiB    272.04MiB +0/258         6.08GiB      6.08GiB +0/265        16.00KiB     16.00KiB +0/271        16.00KiB     16.00KiB +0/273        16.00KiB     16.00KiB +``` + +于是现在,你可以将配额分配给其中一个配额组,然后将配额应用于其关联的子卷。因此,如果要将 `student3` 的主目录使用限制为 1 GB,请使用 `btrfs qgroup limit` 命令: + +``` +# btrfs qgroup limit 1G /home/student3 +``` + +查看特定子卷的配额: + +``` +# btrfs qgroup show -reF /home/student3 +qgroupid         rfer         excl     max_rfer     max_excl +--------         ----         ----     --------     -------- +0/271        16.00KiB     16.00KiB      1.00GiB         none +``` + +稍有不同的选项参数将显示所有配额组和设置的所有配额: + +``` +# btrfs qgroup show -re / +qgroupid         rfer         excl     max_rfer     max_excl +--------         ----         ----     --------     -------- +0/5          16.00KiB     16.00KiB         none         none +0/256       272.04MiB    272.04MiB         none         none +0/258         6.08GiB      6.08GiB         none         none +0/265        16.00KiB     16.00KiB         none         none +0/271        16.00KiB     16.00KiB      1.00GiB         none +0/273        16.00KiB     16.00KiB         none         none +``` + +### 其他特性 + +这些例子提供了 Btrfs 特性的一些思考。运行 `btrfs --help` 查看命令的完整列表。还有许多其他值得注意的功能;例如,快照和发送/接收是两个值得学习的功能。 + +### 总结讨论 + +Btrfs 为向 Linux 提供高级文件系统特性集贡献了很多特性。这不是第一次;我知道 ZFS 在大约 15 年前引入了这种类型的文件系统,但是 Btrfs 是完全开源的,不受专利的限制。 + +如果你想探索这个文件系统,我建议从虚拟机或备用系统开始。 + +我想能够出现一些图形化的管理工具,为那些喜欢用图形工具的系统管理员提供便利。幸运的是,Btrfs 具有强大的开发活动,Fedora 33 项目决定将其设置为工作站上的默认值就证明了这一点。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/11/btrfs-linux + +作者:[Alan Formy-Duval][a] +选题:[lujun9972][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/alanfdoss +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/files_documents_organize_letter.png?itok=GTtiiabr (Filing cabinet for organization) +[2]: https://en.wikipedia.org/wiki/Copy-on-write +[3]: https://en.wikipedia.org/wiki/Checksum +[4]: https://getfedora.org/en/workstation/download/ +[5]: https://gparted.org/ +[6]: https://opensource.com/sites/default/files/uploads/gparted_btrfs.png (GParted's view of Btrfs on Fedora 33 Workstation using GParted) +[7]: https://creativecommons.org/licenses/by-sa/4.0/ +[8]: https://en.wikipedia.org/wiki/Live_CD +[9]: https://www.wildfly.org/ diff --git a/published/202105/20201123 6 predictions for JavaScript build tools.md b/published/202105/20201123 6 predictions for JavaScript build tools.md new file mode 100644 index 0000000000..fcb3f0f83e --- /dev/null +++ b/published/202105/20201123 6 predictions for JavaScript build tools.md @@ -0,0 +1,145 @@ +[#]: collector: (lujun9972) +[#]: translator: (ywxgod) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13423-1.html) +[#]: subject: (6 predictions for JavaScript build tools) +[#]: via: (https://opensource.com/article/20/11/javascript-build-tools) +[#]: author: (Shedrack Akintayo https://opensource.com/users/shedrack-akintayo) + +对 JavaScript 构建工具的 6 个预测 +====== + +> JavaScript 前端工具的生态系统充满着变数和竞争,且只有最好的工具才会存活下来。 + +![](https://img.linux.net.cn/data/attachment/album/202105/25/112116d5z1lrywl6k25mur.jpg) + +生产中使用的代码与开发中的有所不同. 在生产中,我们需要构建一些能运行得够快、能管理各种依赖关系、能自动执行任务、能加载外部模块等功能的包。而那些将开发中的代码转为生产代码的 [JavaScript][2] 工具我们就称之为 _构建工具。_ + +我们可以通过各个构建步骤以及其重要性来解释前端代码需要被“构建”的原因。 + +### 前端代码构建步骤 + +前端代码的构建涉及下面的四个步骤: + +#### 1、转译 + +通过转译Transpiling,开发者可以使用到语言最新、最热门的更新和扩展,并保持浏览器的兼容性等。下面是使用 [Babel][3] 的一个例子: + +``` +// 数组映射中的箭头函数语法 +const double = [1, 2, 3].map((num) => num * 2); +// 转译后 +const double = [1, 2, 3].map(function(num) { + return num * 2; +}); +``` + +#### 2、分包 + +分包Bundling是处理所有 `import` 与`require` 语句的过程;找到相匹配的 JavaScript 代码片段、包和库;将它们添加到适当的域中;然后将它们打包到一个大的 JavaScript 文件中。常用的分包器包括 Browserify、Webpack 与 Parcel。 + +#### 3、压缩 + +压缩Minifing是通过删除空白和代码注释来减少最终的文件大小。在压缩过程中,我们还可以更进一步添加代码混淆步骤,混淆会更改变量名和方法名,使代码变得晦涩难懂,因此一旦代码交付到客户端,它就不是那么容易能让人读懂。下面是一个使用 Grunt 的例子: + +``` +// 压缩前 +const double = [1, 2, 3].map(function(num) { +  return num * 2; +}); +// 压缩后 +const double=[1,2,3].map(function(num){return num*2;}); +``` + +#### 4、打包 + +完成上面的所有步骤之后, 我们需要将这些具有兼容性、且经过分包、压缩/混淆过的文件放置到某个地方。打包Packaging正是这样一个过程,它将上述步骤所产生的结果放置到开发者指定的某个位置上,这通常是通过打包器完成的。 + +### 前端构建工具 + +前端工具及构建工具可以分为以下几类: + + * 包管理: NPM、Yarn + * 转译器: Babel 等 + * 打包器: Webpack、Parcel、Browserify + * 压缩混淆: UglifyJS、Packer、Minify 等 + +JavaScript 生态系统中有各种各样的构建工具可以使用,包括下面的这些: + +#### Grunt 和 Bower + +[Grunt][4] 是作为命令行工具引入的,它仅提供一个脚本来指定和配置相关构建任务。[Bower][5] 作为包管理器,提供了一种客户端包的管理方法而紧追其后。这两者,再加上 NPM,它们经常在一起使用,它们看上去似乎可以满足大多数的自动化需求,但 Grunt 的问题在于它无法提供给开发者配置更复杂任务的自由,而 Bower 使开发者管理的程序包是平常的两倍,因为它将前端包、后台包分开了(例如,Bower 组件与 Node 模块)。 + +**Grunt 与 Bower 的未来:** Grunt 与 Bower 正在退出 JavaScript 工具生态,但是还有一些替代品。 + +#### Gulp 和 Browserify + +[Gulp][6] 是在 Grunt 发布一年半之后才发布的。但 Gulp 却让大家感到很自然、舒服。用 JavaScript 来写构建脚本与用 JSON 来写相比更自由。你可以在 Gulp 的构建脚本中编写函数、即时创建变量、在任何地方使用条件语句 —— 但就这些,并不能说让我们的感觉变得特别自然和舒适,只能说这只是其中的一个可能的原因。[Browserify][7] 和 Gulp 可以配合使用,Browserify 允许 NPM 包(用于后端 Node 服务器)被直接带入到前端,就这一点已经直接让 Bower 废了。而正是这种用一个包管理器来处理前后端包的方式让人感到更自然和更好。 + +**Gulp 的未来:** Gulp 可能会被改进,以便匹配当前流行的构建工具,但这完全取决于创造者的意愿。Gulp 仍在使用中,只是不再像以前那么流行了。 + +#### Webpack 和 NPM/Yarn 脚本 + +[Webpack][8] 是现代前端开发工具中最热门的宠儿,它是一个开源的 JavaScript 模块打包器。Webpack 主要是为处理 JavaScript 而创造的,但如果包含相应的加载器,它也可以转换 HTML、CSS 和图片等前端资源。通过 Webpack,你也可以像 Gulp 一样编写构建脚本,并通过 [NPM/Yarn][9] 来执行它们。 + +**Webpack 的未来:** Webpack 是目前 JavaScript 工具生态系统中最热门的工具,最近几乎所有的 JavaScript 库都在使用 React 和 Webpack。Webpack 目前处于第四个版本,不会很快消失。(LCTT 译注:Webpack 目前已经发布了第五个版本了,且还在火热更新中) + +#### Parcel + +[Parcel][10] 是一个 Web 应用打包器,于 2018 年推出,因其开发者体验而与众不同。Parcel 能利用处理器多核功能提供极快的打包性能,且还零配置。但 Parcel 还是一个新星,对于一些大型应用,其采用率并不高。相比之下,开发人员更喜欢使用 Webpack,因为 Webpack 有更广泛的支持和可定制性。 + +**Parcel 的未来:** Parcel 非常容易使用,如果你统计打包和构建时间,它会比 Webpack 更快,而且它还提供了更好的开发者体验。Parcel 没有被大量采用的原因可能是它仍然比较新。在前端构建工具的生态系统中,Parcel 的前景会非常光明,它将会存在一段时间。 + +#### Rollup + +[Rollup][11] 是 JavaScript 的一个模块分包器,它可将一小段代码编译为更大更复杂的库或应用。Rollup 一般建议用来构建 JavaScript 库,特别是那种导入和依赖的第三方库较少的那种库。 + +**Rollup 的未来:** Rollup 很酷,且正在被迅速采用。它有很多强大的功能,将在很长一段时间内作为前端工具生态系统的一个组成部分而存在。 + +### 了解更多 + +JavaScript 前端工具的生态系统充满着变数和竞争,且只有最好的工具才能存活下来。在不久的将来,我们的构建工具将具有更少(或没有)的配置,更方便的定制化,更好的扩展性的和更好的构建速度。 + +该用什么样的构建工具用于你的前端项目,你需要根据具体的项目需求来做出决定。至于选择什么样的工具,才是最合适自己的,大多数时候,需要我们自己作出取舍。 + +更多信息, 请看: + + * [JavaScript tooling: The evolution and future of JS/frontend build tools][12] + * [Tools and modern workflow for frontend developers][13] + * [Modern frontend: The tools and build process explained][14] + * [Best build tools in frontend development][15] + +* * * + +_这篇文章最初发表在 [Shedrack Akintayo 的博客][16] 上,经许可后重新发表。_ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/20/11/javascript-build-tools + +作者:[Shedrack Akintayo][a] +选题:[lujun9972][b] +译者:[ywxgod](https://github.com/ywxgod) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/shedrack-akintayo +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/find-file-linux-code_magnifying_glass_zero.png?itok=E2HoPDg0 (Magnifying glass on code) +[2]: https://www.javascript.com/ +[3]: https://babeljs.io/ +[4]: https://gruntjs.com/ +[5]: https://bower.io/ +[6]: https://gulpjs.com/ +[7]: http://browserify.org/ +[8]: https://webpack.js.org/ +[9]: https://github.com/yarnpkg/yarn +[10]: https://parceljs.org/ +[11]: https://rollupjs.org/guide/en/ +[12]: https://qmo.io/blog/javascript-tooling-the-evolution-and-future-of-js-front-end-build-tools/ +[13]: https://blog.logrocket.com/tools-and-modern-workflow-for-front-end-developers-505c7227e917/ +[14]: https://medium.com/@trevorpoppen/modern-front-end-the-tools-and-build-process-explained-36641b5c1a53 +[15]: https://www.developerdrive.com/best-build-tools-frontend-development/ +[16]: https://www.sheddy.xyz/posts/javascript-build-tools-past-and-beyond diff --git a/published/202105/20210104 Network address translation part 1 - packet tracing.md b/published/202105/20210104 Network address translation part 1 - packet tracing.md new file mode 100644 index 0000000000..b1b8c31243 --- /dev/null +++ b/published/202105/20210104 Network address translation part 1 - packet tracing.md @@ -0,0 +1,226 @@ +[#]: collector: (lujun9972) +[#]: translator: (cooljelly) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13364-1.html) +[#]: subject: (Network address translation part 1 – packet tracing) +[#]: via: (https://fedoramagazine.org/network-address-translation-part-1-packet-tracing/) +[#]: author: (Florian Westphal https://fedoramagazine.org/author/strlen/) + +网络地址转换(NAT)之报文跟踪 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/06/112410xhdkvvdajis3jhlj.jpg) + +这是有关网络地址转换network address translation(NAT)的系列文章中的第一篇。这一部分将展示如何使用 iptables/nftables 报文跟踪功能来定位 NAT 相关的连接问题。 + +### 引言 + +网络地址转换(NAT)是一种将容器或虚拟机暴露在互联网中的一种方式。传入的连接请求将其目标地址改写为另一个地址,随后被路由到容器或虚拟机。相同的技术也可用于负载均衡,即传入的连接被分散到不同的服务器上去。 + +当网络地址转换没有按预期工作时,连接请求将失败,会暴露错误的服务,连接最终出现在错误的容器中,或者请求超时,等等。调试此类问题的一种方法是检查传入请求是否与预期或已配置的转换相匹配。 + +### 连接跟踪 + +NAT 不仅仅是修改 IP 地址或端口号。例如,在将地址 X 映射到 Y 时,无需添加新规则来执行反向转换。一个被称为 “conntrack” 的 netfilter 系统可以识别已有连接的回复报文。每个连接都在 conntrack 系统中有自己的 NAT 状态。反向转换是自动完成的。 + +### 规则匹配跟踪 + +nftables 工具(以及在较小的程度上,iptables)允许针对某个报文检查其处理方式以及该报文匹配规则集合中的哪条规则。为了使用这项特殊的功能,可在合适的位置插入“跟踪规则”。这些规则会选择被跟踪的报文。假设一个来自 IP 地址 C 的主机正在访问一个 IP 地址是 S 以及端口是 P 的服务。我们想知道报文匹配了哪条 NAT 转换规则,系统检查了哪些规则,以及报文是否在哪里被丢弃了。 + +由于我们要处理的是传入连接,所以我们将规则添加到 prerouting 钩子上。prerouting 意味着内核尚未决定将报文发往何处。修改目标地址通常会使报文被系统转发,而不是由主机自身处理。 + +### 初始配置 + +``` +# nft 'add table inet trace_debug' +# nft 'add chain inet trace_debug trace_pre { type filter hook prerouting priority -200000; }' +# nft "insert rule inet trace_debug trace_pre ip saddr $C ip daddr $S tcp dport $P tcp flags syn limit rate 1/second meta nftrace set 1" +``` + +第一条规则添加了一张新的规则表,这使得将来删除和调试规则可以更轻松。一句 `nft delete table inet trace_debug` 命令就可以删除调试期间临时加入表中的所有规则和链。 + +第二条规则在系统进行路由选择之前(`prerouting` 钩子)创建了一个基本钩子,并将其优先级设置为负数,以保证它在连接跟踪流程和 NAT 规则匹配之前被执行。 + +然而,唯一最重要的部分是第三条规则的最后一段:`meta nftrace set 1`。这条规则会使系统记录所有匹配这条规则的报文所关联的事件。为了尽可能高效地查看跟踪信息(提高信噪比),考虑对跟踪的事件增加一个速率限制,以保证其数量处于可管理的范围。一个好的选择是限制每秒钟最多一个报文或一分钟最多一个报文。上述案例记录了所有来自终端 `$C` 且去往终端 `$S` 的端口 `$P` 的所有 SYN 报文和 SYN/ACK 报文。限制速率的配置语句可以防范事件过多导致的洪泛风险。事实上,大多数情况下只记录一个报文就足够了。 + +对于 iptables 用户来讲,配置流程是类似的。等价的配置规则类似于: + +``` +# iptables -t raw -I PREROUTING -s $C -d $S -p tcp --tcp-flags SYN SYN  --dport $P  -m limit --limit 1/s -j TRACE +``` + +### 获取跟踪事件 + +原生 nft 工具的用户可以直接运行 `nft` 进入 nft 跟踪模式: + +``` +# nft monitor trace +``` + +这条命令会将收到的报文以及所有匹配该报文的规则打印出来(用 `CTRL-C` 来停止输出): + +``` +trace id f0f627 ip raw prerouting  packet: iif "veth0" ether saddr .. +``` + +我们将在下一章详细分析该结果。如果你用的是 iptables,首先通过 `iptables –version` 命令检查一下已安装的版本。例如: + +``` + +# iptables --version +iptables v1.8.5 (legacy) +``` + +`(legacy)` 意味着被跟踪的事件会被记录到内核的环形缓冲区中。你可以用 `dmesg` 或 `journalctl` 命令来查看这些事件。这些调试输出缺少一些信息,但和新工具提供的输出从概念上来讲很类似。你将需要首先查看规则被记录下来的行号,并与活跃的 iptables 规则集合手动关联。如果输出显示 `(nf_tables)`,你可以使用 `xtables-monitor` 工具: + +``` +# xtables-monitor --trace +``` + +如果上述命令仅显示版本号,你仍然需要查看 `dmesg`/`journalctl` 的输出。`xtables-monitor` 工具和 `nft` 监控跟踪工具使用相同的内核接口。它们之间唯一的不同点就是,`xtables-monitor` 工具会用 `iptables` 的语法打印事件,且如果你同时使用了 `iptables-nft` 和 `nft`,它将不能打印那些使用了 maps/sets 或其他只有 nftables 才支持的功能的规则。 + +### 示例 + +我们假设需要调试一个到虚拟机/容器的端口不通的问题。`ssh -p 1222 10.1.2.3` 命令应该可以远程连接那台服务器上的某个容器,但连接请求超时了。 + +你拥有运行那台容器的主机的登录权限。现在登录该机器并增加一条跟踪规则。可通过前述案例查看如何增加一个临时的调试规则表。跟踪规则类似于这样: + +``` +nft "insert rule inet trace_debug trace_pre ip daddr 10.1.2.3 tcp dport 1222 tcp flags syn limit rate 6/minute meta nftrace set 1" +``` + +在添加完上述规则后,运行 `nft monitor trace`,在跟踪模式下启动 nft,然后重试刚才失败的 `ssh` 命令。如果规则集较大,会出现大量的输出。不用担心这些输出,下一节我们会做逐行分析。 + +``` +trace id 9c01f8 inet trace_debug trace_pre packet: iif "enp0" ether saddr .. ip saddr 10.2.1.2 ip daddr 10.1.2.3 ip protocol tcp tcp dport 1222 tcp flags == syn +trace id 9c01f8 inet trace_debug trace_pre rule ip daddr 10.2.1.2 tcp dport 1222 tcp flags syn limit rate 6/minute meta nftrace set 1 (verdict continue) +trace id 9c01f8 inet trace_debug trace_pre verdict continue +trace id 9c01f8 inet trace_debug trace_pre policy accept +trace id 9c01f8 inet nat prerouting packet: iif "enp0" ether saddr .. ip saddr 10.2.1.2 ip daddr 10.1.2.3 ip protocol tcp  tcp dport 1222 tcp flags == syn +trace id 9c01f8 inet nat prerouting rule ip daddr 10.1.2.3  tcp dport 1222 dnat ip to 192.168.70.10:22 (verdict accept) +trace id 9c01f8 inet filter forward packet: iif "enp0" oif "veth21" ether saddr .. ip daddr 192.168.70.10 .. tcp dport 22 tcp flags == syn tcp window 29200 +trace id 9c01f8 inet filter forward rule ct status dnat jump allowed_dnats (verdict jump allowed_dnats) +trace id 9c01f8 inet filter allowed_dnats rule drop (verdict drop) +trace id 20a4ef inet trace_debug trace_pre packet: iif "enp0" ether saddr .. ip saddr 10.2.1.2 ip daddr 10.1.2.3 ip protocol tcp tcp dport 1222 tcp flags == syn +``` + +### 对跟踪结果作逐行分析 + +输出结果的第一行是触发后续输出的报文编号。这一行的语法与 nft 规则语法相同,同时还包括了接收报文的首部字段信息。你也可以在这一行找到接收报文的接口名称(此处为 `enp0`)、报文的源和目的 MAC 地址、报文的源 IP 地址(可能很重要 - 报告问题的人可能选择了一个错误的或非预期的主机),以及 TCP 的源和目的端口。同时你也可以在这一行的开头看到一个“跟踪编号”。该编号标识了匹配跟踪规则的特定报文。第二行包括了该报文匹配的第一条跟踪规则: + +``` +trace id 9c01f8 inet trace_debug trace_pre rule ip daddr 10.2.1.2 tcp dport 1222 tcp flags syn limit rate 6/minute meta nftrace set 1 (verdict continue) +``` + +这就是刚添加的跟踪规则。这里显示的第一条规则总是激活报文跟踪的规则。如果在这之前还有其他规则,它们将不会在这里显示。如果没有任何跟踪输出结果,说明没有抵达这条跟踪规则,或者没有匹配成功。下面的两行表明没有后续的匹配规则,且 `trace_pre` 钩子允许报文继续传输(判定为接受)。 + +下一条匹配规则是: + +``` +trace id 9c01f8 inet nat prerouting rule ip daddr 10.1.2.3  tcp dport 1222 dnat ip to 192.168.70.10:22 (verdict accept) +``` + +这条 DNAT 规则设置了一个到其他地址和端口的映射。规则中的参数 `192.168.70.10` 是需要收包的虚拟机的地址,目前为止没有问题。如果它不是正确的虚拟机地址,说明地址输入错误,或者匹配了错误的 NAT 规则。 + +### IP 转发 + +通过下面的输出我们可以看到,IP 路由引擎告诉 IP 协议栈,该报文需要被转发到另一个主机: + +``` +trace id 9c01f8 inet filter forward packet: iif "enp0" oif "veth21" ether saddr .. ip daddr 192.168.70.10 .. tcp dport 22 tcp flags == syn tcp window 29200 +``` + +这是接收到的报文的另一种呈现形式,但和之前相比有一些有趣的不同。现在的结果有了一个输出接口集合。这在之前不存在的,因为之前的规则是在路由决策之前(`prerouting` 钩子)。跟踪编号和之前一样,因此仍然是相同的报文,但目标地址和端口已经被修改。假设现在还有匹配 `tcp dport 1222` 的规则,它们将不会对现阶段的报文产生任何影响了。 + +如果该行不包含输出接口(`oif`),说明路由决策将报文路由到了本机。对路由过程的调试属于另外一个主题,本文不再涉及。 + +``` +trace id 9c01f8 inet filter forward rule ct status dnat jump allowed_dnats (verdict jump allowed_dnats) +``` + +这条输出表明,报文匹配到了一个跳转到 `allowed_dnats` 链的规则。下一行则说明了连接失败的根本原因: + +``` +trace id 9c01f8 inet filter allowed_dnats rule drop (verdict drop) +``` + +这条规则无条件地将报文丢弃,因此后续没有关于该报文的日志输出。下一行则是另一个报文的输出结果了: + +``` +trace id 20a4ef inet trace_debug trace_pre packet: iif "enp0" ether saddr .. ip saddr 10.2.1.2 ip daddr 10.1.2.3 ip protocol tcp tcp dport 1222 tcp flags == syn +``` + +跟踪编号已经和之前不一样,然后报文的内容却和之前是一样的。这是一个重传尝试:第一个报文被丢弃了,因此 TCP 尝试了重传。可以忽略掉剩余的输出结果了,因为它并没有提供新的信息。现在是时候检查那条链了。 + +### 规则集合分析 + +上一节我们发现报文在 inet filter 表中的一个名叫 `allowed_dnats` 的链中被丢弃。现在我们来查看它: + +``` +# nft list chain inet filter allowed_dnats +table inet filter { + chain allowed_dnats { +  meta nfproto ipv4 ip daddr . tcp dport @allow_in accept +  drop +   } +} +``` + +接受 `@allow_in` 集的数据包的规则没有显示在跟踪日志中。我们通过列出元素的方式,再次检查上述报文的目标地址是否在 `@allow_in` 集中: + +``` +# nft "get element inet filter allow_in { 192.168.70.10 . 22 }" +Error: Could not process rule: No such file or directory +``` + +不出所料,地址-服务对并没有出现在集合中。我们将其添加到集合中。 + +``` +# nft "add element inet filter allow_in { 192.168.70.10 . 22 }" +``` + +现在运行查询命令,它将返回新添加的元素。 + +``` +# nft "get element inet filter allow_in { 192.168.70.10 . 22 }" +table inet filter { + set allow_in { + type ipv4_addr . inet_service + elements = { 192.168.70.10 . 22 } + } +} +``` + +`ssh` 命令现在应该可以工作,且跟踪结果可以反映出该变化: + +``` +trace id 497abf58 inet filter forward rule ct status dnat jump allowed_dnats (verdict jump allowed_dnats) + +trace id 497abf58 inet filter allowed_dnats rule meta nfproto ipv4 ip daddr . tcp dport @allow_in accept (verdict accept) + +trace id 497abf58 ip postrouting packet: iif "enp0" oif "veth21" ether .. trace id 497abf58 ip postrouting policy accept +``` + +这表明报文通过了转发路径中的最后一个钩子 - `postrouting`。 + +如果现在仍然无法连接,问题可能处在报文流程的后续阶段,有可能并不在 nftables 的规则集合范围之内。 + +### 总结 + +本文介绍了如何通过 nftables 的跟踪机制检查丢包或其他类型的连接问题。本系列的下一篇文章将展示如何检查连接跟踪系统和可能与连接跟踪流相关的 NAT 信息。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/network-address-translation-part-1-packet-tracing/ + +作者:[Florian Westphal][a] +选题:[lujun9972][b] +译者:[cooljelly](https://github.com/cooljelly) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/strlen/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2020/12/network-address-translation-part-1-816x346.png diff --git a/published/202105/20210114 Cross-compiling made easy with Golang.md b/published/202105/20210114 Cross-compiling made easy with Golang.md new file mode 100644 index 0000000000..72a662d890 --- /dev/null +++ b/published/202105/20210114 Cross-compiling made easy with Golang.md @@ -0,0 +1,217 @@ +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13385-1.html" +[#]: subject: "Cross-compiling made easy with Golang" +[#]: via: "https://opensource.com/article/21/1/go-cross-compiling" +[#]: author: "Gaurav Kamathe https://opensource.com/users/gkamathe" + +使用 Golang 的交叉编译 +====== + +> 走出舒适区,我了解了 Go 的交叉编译功能。 + +![](https://img.linux.net.cn/data/attachment/album/202105/13/092632nrg2z17i8vea4cf8.jpg) + +在 Linux 上测试软件时,我使用各种架构的服务器,例如 Intel、AMD、Arm 等。当我 [分配了一台满足我的测试需求的 Linux 机器][2],我仍然需要执行许多步骤: + + 1. 下载并安装必备软件 + 2. 验证构建服务器上是否有新的测试软件包 + 3. 获取并设置依赖软件包所需的 yum 仓库 + 4. 下载并安装新的测试软件包(基于步骤 2) + 5. 获取并设置必需的 SSL 证书 + 6. 设置测试环境,获取所需的 Git 仓库,更改配置,重新启动守护进程等 + 7. 做其他需要做的事情 + +### 用脚本自动化 + +这些步骤非常常规,以至于有必要对其进行自动化并将脚本保存到中央位置(例如文件服务器),在需要时可以在此处下载脚本。为此,我编写了 100-120 行的 Bash shell 脚本,它为我完成了所有配置(包括错误检查)。这个脚本通过以下方式简化了我的工作流程: + + 1. 配置新的 Linux 系统(支持测试的架构) + 2. 登录系统并从中央位置下载自动化 shell 脚本 + 3. 运行它来配置系统 + 4. 开始测试 + +### 学习 Go 语言 + +我想学习 [Go 语言][3] 有一段时间了,将我心爱的 Shell 脚本转换为 Go 程序似乎是一个很好的项目,可以帮助我入门。它的语法看起来很简单,在尝试了一些测试程序后,我开始着手提高自己的知识并熟悉 Go 标准库。 + +我花了一个星期的时间在笔记本电脑上编写 Go 程序。我经常在我的 x86 服务器上测试程序,清除错误并使程序健壮起来,一切都很顺利。 + +直到完全转换到 Go 程序前,我继续依赖自己的 shell 脚本。然后,我将二进制文件推送到中央文件服务器上,以便每次配置新服务器时,我要做的就是获取二进制文件,将可执行标志打开,然后运行二进制文件。我对早期的结果很满意: + +``` +$ wget http://file.example.com//bins/prepnode +$ chmod +x ./prepnode +$ ./prepnode +``` + +### 然后,出现了一个问题 + +第二周,我从资源池中分配了一台新的服务器,像往常一样,我下载了二进制文件,设置了可执行标志,然后运行二进制文件。但这次它出错了,是一个奇怪的错误: + +``` +$ ./prepnode +bash: ./prepnode: cannot execute binary file: Exec format error +$ +``` + +起初,我以为可能没有成功设置可执行标志。但是,它已按预期设置: + +``` +$ ls -l prepnode +-rwxr-xr-x. 1 root root 2640529 Dec 16 05:43 prepnode +``` + +发生了什么事?我没有对源代码进行任何更改,编译没有引发任何错误或警告,而且上次运行时效果很好,因此我仔细查看了错误消息 `format error`。 + +我检查了二进制文件的格式,一切看起来都没问题: + +``` +$ file prepnode +prepnode: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped +``` + +我迅速运行了以下命令,识别所配置的测试服务器的架构以及二进制试图运行的平台。它是 Arm64 架构,但是我编译的二进制文件(在我的 x86 笔记本电脑上)生成的是 x86-64 格式的二进制文件: + +``` +$ uname -m +aarch64 +``` + +### 脚本编写人员的编译第一课 + +在那之前,我从未考虑过这种情况(尽管我知道这一点)。我主要研究脚本语言(通常是 Python)以及 Shell 脚本。在任何架构的大多数 Linux 服务器上都可以使用 Bash Shell 和 Python 解释器。总之,之前一切都很顺利。 + +但是,现在我正在处理 Go 这种编译语言,它生成可执行的二进制文件。编译后的二进制文件由特定架构的 [指令码][4] 或汇编指令组成,这就是为什么我收到格式错误的原因。由于 Arm64 CPU(运行二进制文件的地方)无法解释二进制文件的 x86-64 指令,因此它抛出错误。以前,shell 和 Python 解释器为我处理了底层指令码或特定架构的指令。 + +### Go 的交叉编译 + +我检查了 Golang 的文档,发现要生成 Arm64 二进制文件,我要做的就是在运行 `go build` 命令编译 Go 程序之前设置两个环境变量。 + +`GOOS` 指的是操作系统,例如 Linux、Windows、BSD 等,而 `GOARCH` 指的是要在哪种架构上构建程序。 + +``` +$ env GOOS=linux GOARCH=arm64 go build -o prepnode_arm64 +``` + +构建程序后,我重新运行 `file` 命令,这一次它显示的是 ARM AArch64,而不是之前显示的 x86。因此,我在我的笔记本上能为不同的架构构建二进制文件。 + +``` +$ file prepnode_arm64 +prepnode_arm64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, not stripped +``` + +我将二进制文件从笔记本电脑复制到 ARM 服务器上。现在运行二进制文件(将可执行标志打开)不会产生任何错误: + +``` +$ ./prepnode_arm64  -h +Usage of ./prepnode_arm64: +  -c    Clean existing installation +  -n    Do not start test run (default true) +  -s    Use stage environment, default is qa +  -v    Enable verbose output +``` + +### 其他架构呢? + +x86 和 Arm 是我测试软件所支持的 5 种架构中的两种,我担心 Go 可能不会支持其它架构,但事实并非如此。你可以查看 Go 支持的架构: + +``` +$ go tool dist list +``` + +Go 支持多种平台和操作系统,包括: + + * AIX + * Android + * Darwin + * Dragonfly + * FreeBSD + * Illumos + * JavaScript + * Linux + * NetBSD + * OpenBSD + * Plan 9 + * Solaris + * Windows + +要查找其支持的特定 Linux 架构,运行: + +``` +$ go tool dist list | grep linux +``` + +如下面的输出所示,Go 支持我使用的所有体系结构。尽管 x86_64 不在列表中,但 AMD64 兼容 x86-64,所以你可以生成 AMD64 二进制文件,它可以在 x86 架构上正常运行: + +``` +$ go tool dist list | grep linux +linux/386 +linux/amd64 +linux/arm +linux/arm64 +linux/mips +linux/mips64 +linux/mips64le +linux/mipsle +linux/ppc64 +linux/ppc64le +linux/riscv64 +linux/s390x +``` + +### 处理所有架构 + +为我测试的所有体系结构生成二进制文件,就像从我的 x86 笔记本电脑编写一个微小的 shell 脚本一样简单: + +``` +#!/usr/bin/bash +archs=(amd64 arm64 ppc64le ppc64 s390x) + +for arch in ${archs[@]} +do + env GOOS=linux GOARCH=${arch} go build -o prepnode_${arch} +done + +``` + +``` +$ file prepnode_* +prepnode_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=y03MzCXoZERH-0EwAAYI/p909FDnk7xEUo2LdHIyo/V2ABa7X_rLkPNHaFqUQ6/5p_q8MZiR2WYkA5CzJiF, not stripped +prepnode_arm64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), statically linked, Go BuildID=q-H-CCtLv__jVOcdcOpA/CywRwDz9LN2Wk_fWeJHt/K4-3P5tU2mzlWJa0noGN/SEev9TJFyvHdKZnPaZgb, not stripped +prepnode_ppc64: ELF 64-bit MSB executable, 64-bit PowerPC or cisco 7500, version 1 (SYSV), statically linked, Go BuildID=DMWfc1QwOGIq2hxEzL_u/UE-9CIvkIMeNC_ocW4ry/r-7NcMATXatoXJQz3yUO/xzfiDIBuUxbuiyaw5Goq, not stripped +prepnode_ppc64le: ELF 64-bit LSB executable, 64-bit PowerPC or cisco 7500, version 1 (SYSV), statically linked, Go BuildID=C6qCjxwO9s63FJKDrv3f/xCJa4E6LPVpEZqmbF6B4/Mu6T_OR-dx-vLavn1Gyq/AWR1pK1cLz9YzLSFt5eU, not stripped +prepnode_s390x: ELF 64-bit MSB executable, IBM S/390, version 1 (SYSV), statically linked, Go BuildID=faC_HDe1_iVq2XhpPD3d/7TIv0rulE4RZybgJVmPz/o_SZW_0iS0EkJJZHANxx/zuZgo79Je7zAs3v6Lxuz, not stripped +``` + +现在,每当配置一台新机器时,我就运行以下 `wget` 命令下载特定体系结构的二进制文件,将可执行标志打开,然后运行: + +``` +$ wget http://file.domain.com//bins/prepnode_ +$ chmod +x ./prepnode_ +$ ./prepnode_ +``` + +### 为什么? + +你可能想知道,为什么我没有坚持使用 shell 脚本或将程序移植到 Python 而不是编译语言上来避免这些麻烦。所以有舍有得,那样的话我不会了解 Go 的交叉编译功能,以及程序在 CPU 上执行时的底层工作原理。在计算机中,总要考虑取舍,但绝不要让它们阻碍你的学习。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/1/go-cross-compiling + +作者:[Gaurav Kamathe][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gkamathe +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/laptop_screen_desk_work_chat_text.png?itok=UXqIDRDD "Person using a laptop" +[2]: https://opensource.com/article/20/12/linux-server +[3]: https://golang.org/ +[4]: https://en.wikipedia.org/wiki/Opcode \ No newline at end of file diff --git a/published/202105/20210204 A guide to understanding Linux software libraries in C.md b/published/202105/20210204 A guide to understanding Linux software libraries in C.md new file mode 100644 index 0000000000..66d2e89b71 --- /dev/null +++ b/published/202105/20210204 A guide to understanding Linux software libraries in C.md @@ -0,0 +1,481 @@ +[#]: collector: (lujun9972) +[#]: translator: (mengxinayan) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13413-1.html) +[#]: subject: (A guide to understanding Linux software libraries in C) +[#]: via: (https://opensource.com/article/21/2/linux-software-libraries) +[#]: author: (Marty Kalin https://opensource.com/users/mkalindepauledu) + +用 C 语言理解 Linux 软件库 +====== + +> 软件库是重复使用代码的一种简单而合理的方式。 + +![](https://img.linux.net.cn/data/attachment/album/202105/22/165307u0n970uivji7kiim.jpg) + +软件库是一种是一直以来长期存在的、简单合理的复用代码的方式。这篇文章解释了如何从头开始构建库并使得其可用。尽管这两个示例库都以 Linux 为例,但创建、发布和使用这些库的步骤也可以应用于其它类 Unix 系统。 + +这些示例库使用 C 语言编写,非常适合该任务。Linux 内核大部分由 C 语言和少量汇编语言编写(Windows 和 Linux 的表亲如 macOS 也是如此)。用于输入/输出、网络、字符串处理、数学、安全、数据编码等的标准系统库等主要由 C 语言编写。所以使用 C 语言编写库就是使用 Linux 的原生语言来编写。除此之外,C 语言的性能也在一众高级语言中鹤立鸡群。 + +还有两个来访问这些库的示例客户程序client(一个使用 C,另一个使用 Python)。毫无疑问可以使用 C 语言客户程序来访问 C 语言编写的库,但是 Python 客户程序示例说明了一个由 C 语言编写的库也可以服务于其他编程语言。 + +### 静态库和动态库对比 + +Linux 系统存在两种类型库: + + * **静态库(也被称为归档库)**:在编译过程中的链接阶段,静态库会被编译进程序(例如 C 或 Rust)中。每个客户程序都有属于自己的一份库的拷贝。静态库有一个显而易见的缺点 —— 当库需要进行一定改动时(例如修复一个 bug),静态库必须重新链接一次。接下来要介绍的动态库避免了这一缺点。 + * **动态库(也被称为共享库)**:动态库首先会在程序编译中的链接阶段被标记,但是客户程序和库代码在运行之前仍然没有联系,且库代码不会进入到客户程序中。系统的动态加载器会把一个共享库和正在运行的客户程序进行连接,无论该客户程序是由静态编译语言(如 C)编写,还是由动态解释语言(如 Python)编写。因此,动态库不需要麻烦客户程序便可以进行更新。最后,多个客户程序可以共享同一个动态库的单一副本。 + +通常来说,动态库优于静态库,尽管其复杂性较高而性能较低。下面是两种类型的库如何创建和发布: + + 1. 库的源代码会被编译成一个或多个目标模块,目标模块是二进制文件,可以被包含在库中并且链接到可执行的二进制中。 + 2. 目标模块会会被打包成一个文件。对于静态库,标准的文件拓展名是 `.a` 意为“归档archive”;对于动态库,标准的文件拓展名是 `.so` 意为“共享目标shared object”。对于这两个相同功能的示例库,分别发布为 `libprimes.a` (静态库)和 `libshprimes.so` (动态库)。两种库的文件名都使用前缀 `lib` 进行标识。 + 3. 库文件被复制到标准目录下,使得客户程序可以轻松地访问到库。无论是静态库还是动态库,典型的位置是 `/usr/lib` 或者 `/usr/local/lib`,当然其他位置也是可以的。 + +构建和发布每种库的具体步骤会在下面详细介绍。首先我将介绍两种库里涉及到的 C 函数。 + +### 示例库函数 + +这两个示例库都是由五个相同的 C 函数构建而成的,其中四个函数可供客户程序使用。第五个函数是其他四个函数的一个工具函数,它显示了 C 语言怎么隐藏信息。每个函数的源代码都很短,可以将这些函数放在单个源文件中,尽管也可以放在多个源文件中(如四个公布的函数都有一个文件)。 + +这些库函数是基本的处理函数,以多种方式来处理质数。所有的函数接收无符号(即非负)整数值作为参数: + +- `is_prime` 函数测试其单个参数是否为质数。 +- `are_coprimes` 函数检查了其两个参数的最大公约数greatest common divisor(gcd)是否为 1,即是否为互质数。 +- `prime_factors`:函数列出其参数的质因数。 +- `glodbach`:函数接收一个大于等于 4 的偶数,列出其可以分解为两个质数的和。它也许存在多个符合条件的数对。该函数是以 18 世纪数学家 [克里斯蒂安·哥德巴赫][2]Christian Goldbach 命名的,他的猜想是任意一个大于 2 的偶数可以分解为两个质数之和,这依旧是数论里最古老的未被解决的问题。 + +工具函数 `gcd` 留在已部署的库文件中,但是在没有包含这个函数的文件无法访问此函数。因此,一个使用库的客户程序无法调用 `gcd` 函数。仔细观察 C 函数可以明白这一点。 + +### 更多关于 C 函数的内容 + +每个在 C 语言中的函数都有一个存储类,它决定了函数的范围。对于函数,有两种选择。 + +- 函数默认的存储类是 `extern`,它给了函数一个全局域。一个客户程序可以调用在示例库中用 `extern` 修饰的任意函数。下面是一个带有显式 `extern` 声明的 `are_coprimes` 函数定义: + + ``` + extern unsigned are_coprimes(unsigned n1, unsigned n2) { + ... + } + ``` +- 存储类 `static` 将一个函数的的范围限制到函数被定义的文件中。在示例库中,工具函数 `gcd` 是静态的(`static`): + + ``` + static unsigned gcd(unsigned n1, unsigned n2) { + ... + } + ``` + +只有在 `primes.c` 文件中的函数可以调用 `gcd`,而只有 `are_coprimes` 函数会调用它。当静态库和动态库被构建和发布后,其他的程序可以调用外部的(`extern`)函数,如 `are_coprimes` ,但是不可以调用静态(`static`)函数 `gcd`。静态(`static`)存储类通过将函数范围限制在其他库函数内,进而实现了对库的客户程序隐藏 `gcd` 函数。 + +在 `primes.c` 文件中除了 `gcd` 函数外,其他函数并没有指明存储类,默认将会设置为外部的(`extern`)。然而,在库中显式注明 `extern` 更加常见。 + +C 语言区分了函数的定义definition声明declaration,这对库来说很重要。接下来让我们开始了解定义。C 语言仅允许命名函数不允许匿名函数,并且每个函数需要定义以下内容: + +- 一个唯一的名字。一个程序不允许存在两个同名的函数。 +- 一个可以为空的参数列表。参数需要指明类型。 +- 一个返回值类型(例如:`int` 代表 32 位有符号整数),当没有返回值时设置为空类型(`void`)。 +- 用一对花括号包围起来的函数主体部分。在一个特制的示例中,函数主体部分可以为空。 + +程序中的每个函数必须要被定义一次。 + +下面是库函数 `are_coprimes` 的完整定义: + +``` +extern unsigned are_coprimes(unsigned n1, unsigned n2) { /* 定义 */ + return 1 == gcd(n1, n2); /* 最大公约数是否为 1? */ +} +``` + +函数返回一个布尔值(`0` 代表假,`1` 代表真),取决于两个整数参数值的最大公约数是否为 1。工具函数 `gcd` 计算两个整数参数 `n1` 和 `n2` 的最大公约数。 + +函数声明不同于定义,其不需要主体部分: + +``` +extern unsigned are_coprimes(unsigned n1, unsigned n2); /* 声明 */ +``` + +声明在参数列表后用一个分号代表结束,它没有被花括号包围起来的主体部分。程序中的函数可以被多次声明。 + +为什么需要声明?在 C 语言中,一个被调用的函数必须对其调用者可见。有多种方式可以提供这样的可见性,具体依赖于编译器如何实现。一个必然可行的方式就是当它们二者位于同一个文件中时,将被调用的函数定义在在它的调用者之前。 + +``` +void f() {...} /* f 定义在其被调用前 */ +void g() { f(); } /* ok */ +``` + +当函数 `f` 被在调用前声明,此时函数 `f` 的定义可以移动到函数 `g` 的下方。 + +``` +void f(); /* 声明使得函数 f 对调用者可见 */ +void g() { f(); } /* ok */ +void f() {...} /* 相较于前一种方式,此方式显得更简洁 */ +``` + +但是当如果一个被调用的函数和调用它的函数不在同一个文件中时呢?因为前文提到一个函数在一个程序中需要被定义一次,那么如何使得让一个文件中被定义的函数在另一个文件中可见? + +这个问题会影响库,无论是静态库还是动态库。例如在这两个质数库中函数被定义在源文件 `primes.c` 中,每个库中都有该函数的二进制副本,但是这些定义的函数必须要对使用库的 C 程序可见,该 C 程序有其自身的源文件。 + +函数声明可以帮助提供跨文件的可见性。对于上述的“质数”例子,它有一个名为 `primes.h` 的头文件,其声明了四个函数使得它们对使用库的 C 程序可见。 + +``` +/** 头文件 primes.h:函数声明 **/ +extern unsigned is_prime(unsigned); +extern void prime_factors(unsigned); +extern unsigned are_coprimes(unsigned, unsigned); +extern void goldbach(unsigned); +``` + +这些声明通过为每个函数指定其调用语法来作为接口。 + +为了客户程序的便利性,头文件 `primes.h` 应该存储在 C 编译器查找路径下的目录中。典型的位置有 `/usr/include` 和 `/usr/local/include`。一个 C 语言客户程序应使用 `#include` 包含这个头文件,并尽可能将这条语句其程序源代码的首部(头文件将会被导入另一个源文件的“头”部)。C 语言头文件可以被导入其他语言(如 Rust 语言)中的 `bindgen`,使其它语言的客户程序可以访问 C 语言的库。 + +总之,一个库函数只可以被定义一次,但可以在任何需要它的地方进行声明,任一使用 C 语言库的程序都需要该声明。头文件可以包含函数声明,但不能包含函数定义。如果头文件包含了函数定义,那么该文件可能会在一个 C 语言程序中被多次包含,从而破坏了一个函数在 C 语言程序中必须被精确定义一次的规则。 + +### 库的源代码 + +下面是两个库的源代码。这部分代码、头文件、以及两个示例客户程序都可以在 [我的网页][3] 上找到。 + +``` +#include +#include + +extern unsigned is_prime(unsigned n) { + if (n <= 3) return n > 1; /* 2 和 3 是质数 */ + if (0 == (n % 2) || 0 == (n % 3)) return 0; /* 2 和 3 的倍数不会是质数 */ + + /* 检查 n 是否是其他 < n 的值的倍数 */ + unsigned i; + for (i = 5; (i * i) <= n; i += 6) + if (0 == (n % i) || 0 == (n % (i + 2))) return 0; /* 不是质数 */ + + return 1; /* 一个不是 2 和 3 的质数 */ +} + +extern void prime_factors(unsigned n) { + /* 在数字 n 的质因数分解中列出所有 2 */ + while (0 == (n % 2)) { + printf("%i ", 2); + n /= 2; + } + + /* 数字 2 已经处理完成,下面处理奇数 */ + unsigned i; + for (i = 3; i <= sqrt(n); i += 2) { + while (0 == (n % i)) { + printf("%i ", i); + n /= i; + } + } + + /* 还有其他质因数?*/ + if (n > 2) printf("%i", n); +} + +/* 工具函数:计算最大公约数 */ +static unsigned gcd(unsigned n1, unsigned n2) { + while (n1 != 0) { + unsigned n3 = n1; + n1 = n2 % n1; + n2 = n3; + } + return n2; +} + +extern unsigned are_coprimes(unsigned n1, unsigned n2) { + return 1 == gcd(n1, n2); +} + +extern void goldbach(unsigned n) { + /* 输入错误 */ + if ((n <= 2) || ((n & 0x01) > 0)) { + printf("Number must be > 2 and even: %i is not.\n", n); + return; + } + + /* 两个简单的例子:4 和 6 */ + if ((4 == n) || (6 == n)) { + printf("%i = %i + %i\n", n, n / 2, n / 2); + return; + } + + /* 当 n > 8 时,存在多种可能性 */ + unsigned i; + for (i = 3; i < (n / 2); i++) { + if (is_prime(i) && is_prime(n - i)) { + printf("%i = %i + %i\n", n, i, n - i); + /* 如果只需要一对,那么用 break 语句替换这句 */ + } + } +} +``` + +*库函数* + +这些函数可以被库利用。两个库可以从相同的源代码中获得,同时头文件 `primes.h` 是两个库的 C 语言接口。 + +### 构建库 + +静态库和动态库在构建和发布的步骤上有一些细节的不同。静态库需要三个步骤,而动态库需要增加两个步骤即一共五个步骤。额外的步骤表明了动态库的动态方法具有更多的灵活性。让我们先从静态库开始。 + +库的源文件 `primes.c` 被编译成一个目标模块。下面是命令,百分号 `%` 代表系统提示符,两个井字符 `#` 是我的注释。 + +``` +% gcc -c primes.c ## 步骤1(静态) +``` + +这一步生成目标模块是二进制文件 `primes.o`。`-c` 标志意味着只编译。 + +下一步是使用 Linux 的 `ar` 命令将目标对象归档。 + +``` +% ar -cvq libprimes.a primes.o ## 步骤2(静态) +``` + +`-cvq` 三个标识分别是“创建”、“详细的”、“快速添加”(以防新文件没有添加到归档中)的简称。回忆一下,前文提到过前缀 `lib` 是必须的,而库名是任意的。当然,库的文件名必须是唯一的,以避免冲突。 + +归档已经准备好要被发布: + +``` +% sudo cp libprimes.a /usr/local/lib ## 步骤3(静态) +``` + +现在静态库对接下来的客户程序是可见的,示例在后面。(包含 `sudo` 可以确保有访问权限将文件复制进 `/usr/local/lib` 目录中) + +动态库还需要一个或多个对象模块进行打包: + +``` +% gcc primes.c -c -fpic ## 步骤1(动态) +``` + +增加的选项 `-fpic` 指示编译器生成与位置无关的代码,这意味着不需要将该二进制模块加载到一个固定的内存位置。在一个拥有多个动态库的系统中这种灵活性是至关重要的。生成的对象模块会略大于静态库生成的对象模块。 + +下面是从对象模块创建单个库文件的命令: + +``` +% gcc -shared -Wl,-soname,libshprimes.so -o libshprimes.so.1 primes.o ## 步骤2(动态) +``` + +选项 `-shared` 表明了该库是一个共享的(动态的)而不是静态的。`-Wl` 选项引入了一系列编译器选项,第一个便是设置动态库的 `-soname`,这是必须设置的。`soname` 首先指定了库的逻辑名字(`libshprimes.so`),接下来的 `-o` 选项指明了库的物理文件名字(`libshprimes.so.1`)。这样做的目的是为了保持逻辑名不变的同时允许物理名随着新版本而发生变化。在本例中,在物理文件名 `libshprimes.so.1` 中最后的 1 代表是第一个库的版本。尽管逻辑文件名和物理文件名可以是相同的,但是最佳做法是将它们命名为不同的名字。一个客户程序将会通过逻辑名(本例中为 `libshprimes.so`)来访问库,稍后我会进一步解释。 + +接下来的一步是通过复制共享库到合适的目录下使得客户程序容易访问,例如 `/usr/local/lib` 目录: + +``` +% sudo cp libshprimes.so.1 /usr/local/lib ## 步骤3(动态) +``` + +现在在共享库的逻辑名(`libshprimes.so`)和它的物理文件名(`/usr/local/lib/libshprimes.so.1`)之间设置一个符号链接。最简单的方式是将 `/usr/local/lib` 作为工作目录,在该目录下输入命令: + +``` +% sudo ln --symbolic libshprimes.so.1 libshprimes.so ## 步骤4(动态) +``` + +逻辑名 `libshprimes.so` 不应该改变,但是符号链接的目标(`libshrimes.so.1`)可以根据需要进行更新,新的库实现可以是修复了 bug,提高性能等。 + +最后一步(一个预防措施)是调用 `ldconfig` 工具来配置系统的动态加载器。这个配置保证了加载器能够找到新发布的库。 + +``` +% sudo ldconfig ## 步骤5(动态) +``` + +到现在,动态库已为包括下面的两个在内的示例客户程序准备就绪了。 + +### 一个使用库的 C 程序 + +这个示例 C 程序是一个测试程序,它的源代码以两条 `#include` 指令开始: + +``` +#include /* 标准输入/输出函数 */ +#include /* 我的库函数 */ +``` + +文件名两边的尖括号表示可以在编译器的搜索路径中找到这些头文件(对于 `primes.h` 文件来说在 `/usr/local/inlcude` 目录下)。如果不包含 `#include`,编译器会抱怨缺少 `is_prime` 和 `prime_factors` 等函数的声明,它们在两个库中都有发布。顺便提一句,测试程序的源代码不需要更改即可测试两个库中的每一个库。 + +相比之下,库的源文件(`primes.c`)使用 `#include` 指令打开以下头文件: + +``` +#include +#include +``` + +`math.h` 头文件是必须的,因为库函数 `prime_factors` 会调用数学函数 `sqrt`,其在标准库 `libm.so` 中。 + +作为参考,这是测试库程序的源代码: + +``` +#include +#include + +int main() { + /* 是质数 */ + printf("\nis_prime\n"); + unsigned i, count = 0, n = 1000; + for (i = 1; i <= n; i++) { + if (is_prime(i)) { + count++; + if (1 == (i % 100)) printf("Sample prime ending in 1: %i\n", i); + } + } + printf("%i primes in range of 1 to a thousand.\n", count); + + /* prime_factors */ + printf("\nprime_factors\n"); + printf("prime factors of 12: "); + prime_factors(12); + printf("\n"); + + printf("prime factors of 13: "); + prime_factors(13); + printf("\n"); + + printf("prime factors of 876,512,779: "); + prime_factors(876512779); + printf("\n"); + + /* 是合数 */ + printf("\nare_coprime\n"); + printf("Are %i and %i coprime? %s\n", + 21, 22, are_coprimes(21, 22) ? "yes" : "no"); + printf("Are %i and %i coprime? %s\n", + 21, 24, are_coprimes(21, 24) ? "yes" : "no"); + + /* 哥德巴赫 */ + printf("\ngoldbach\n"); + goldbach(11); /* error */ + goldbach(4); /* small one */ + goldbach(6); /* another */ + for (i = 100; i <= 150; i += 2) goldbach(i); + + return 0; +} +``` + +*测试程序* + +在编译 `tester.c` 文件到可执行文件时,难处理的部分时链接选项的顺序。回想前文中提到两个示例库都是用 `lib` 作为前缀开始,并且每一个都有一个常规的拓展后缀:`.a` 代表静态库 `libprimes.a`,`.so` 代表动态库 `libshprimes.so`。在链接规范中,前缀 `lib` 和拓展名被忽略了。链接标志以 `-l` (小写 L)开始,并且一条编译命令可能包含多个链接标志。下面是一个完整的测试程序的编译指令,使用动态库作为示例: + +``` +% gcc -o tester tester.c -lshprimes -lm +``` + +第一个链接标志指定了库 `libshprimes.so`,第二个链接标志指定了标准数学库 `libm.so`。 + +链接器是懒惰的,这意味着链接标志的顺序是需要考虑的。例如,调整上述实例中的链接顺序将会产生一个编译时错误: + +``` +% gcc -o tester tester.c -lm -lshprimes ## 危险! +``` + +链接 `libm.so` 库的标志先出现,但是这个库中没有函数被测试程序显式调用;因此,链接器不会链接到 `math.so` 库。调用 `sqrt` 库函数仅发生在 `libshprimes.so` 库中包含的 `prime_factors` 函数。编译测试程序返回的错误是: + +``` +primes.c: undefined reference to 'sqrt' +``` + +因此,链接标志的顺序应该是通知链接器需要 `sqrt` 函数: + +``` +% gcc -o tester tester.c -lshprimes -lm ## 首先链接 -lshprimes +``` + +链接器在 `libshprimes.so` 库中发现了对库函数 `sqrt` 的调用,所以接下来对数学库 `libm.so`做了合适的链接。链接还有一个更复杂的选项,它支持链接的标志顺序。然而在本例中,最简单的方式就是恰当地排列链接标志。 + +下面是运行测试程序的部分输出结果: + +``` +is_prime +Sample prime ending in 1: 101 +Sample prime ending in 1: 401 +... +168 primes in range of 1 to a thousand. + +prime_factors +prime factors of 12: 2 2 3 +prime factors of 13: 13 +prime factors of 876,512,779: 211 4154089 + +are_coprime +Are 21 and 22 coprime? yes +Are 21 and 24 coprime? no + +goldbach +Number must be > 2 and even: 11 is not. +4 = 2 + 2 +6 = 3 + 3 +... +32 = 3 + 29 +32 = 13 + 19 +... +100 = 3 + 97 +100 = 11 + 89 +... +``` + +对于 `goldbach` 函数,即使一个相当小的偶数值(例如 18)也许存在多个一对质数之和的组合(在这种情况下,5+13 和 7+11)。因此这种多个质数对是使得尝试证明哥德巴赫猜想变得复杂的因素之一。 + +### 封装使用库的 Python 程序 + +与 C 不同,Python 不是一个静态编译语言,这意味着 Python 客户示例程序必须访问动态版本而非静态版本的 `primes` 库。为了能这样做,Python 中有众多的支持外部语言接口foreign function interface(FFI)的模块(标准的或第三方的),它们允许用一种语言编写的程序来调用另一种语言编写的函数。Python 中的 `ctypes` 是一个标准的、相对简单的允许 Python 代码调用 C 函数的 FFI。 + +任何 FFI 都面临挑战,因为对接的语言不大可能会具有完全相同的数据类型。例如:`primes` 库使用 C 语言类型 `unsigned int`,而 Python 并不具有这种类型;因此 `ctypes` FFI 将 C 语言中的 `unsigned int` 类型映射为 Python 中的 `int` 类型。在 `primes` 库中发布的四个 `extern` C 函数中,有两个在具有显式 `ctypes` 配置的 Python 中会表现得更好。 + +C 函数 `prime_factors` 和 `goldbach` 返回 `void` 而不是返回一个具体类型,但是 `ctypes` 默认会将 C 语言中的 `void` 替换为 Python 语言中的 `int`。当从 Python 代码中调用时,这两个 C 函数会从栈中返回一个随机整数值(因此,该值无任何意义)。然而,可以对 `ctypes` 进行配置,让这些函数返回 `None` (Python 中为 `null` 类型)。下面是对 `prime_factors` 函数的配置: + +``` +primes.prime_factors.restype = None +``` + +可以用类似的语句处理 `goldbach` 函数。 + +下面的交互示例(在 Python3 中)展示了在 Python 客户程序和 `primes` 库之间的接口是简单明了的。 + +``` +>>> from ctypes import cdll + +>>> primes = cdll.LoadLibrary("libshprimes.so") ## 逻辑名 + +>>> primes.is_prime(13) +1 +>>> primes.is_prime(12) +0 + +>>> primes.are_coprimes(8, 24) +0 +>>> primes.are_coprimes(8, 25) +1 + +>>> primes.prime_factors.restype = None +>>> primes.goldbach.restype = None + +>>> primes.prime_factors(72) +2 2 2 3 3 + +>>> primes.goldbach(32) +32 = 3 + 29 +32 = 13 + 19 +``` + +在 `primes` 库中的函数只使用一个简单数据类型:`unsigned int`。如果这个 C 语言库使用复杂的类型如结构体,如果库函数传递和返回指向结构体的指针,那么比 `ctypes` 更强大的 FFI 更适合作为一个在 Python 语言和 C 语言之间的平滑接口。尽管如此,`ctypes` 示例展示了一个 Python 客户程序可以使用 C 语言编写的库。值得注意的是,用作科学计算的流行的 `Numpy` 库是用 C 语言编写的,然后在高级 Python API 中公开。 + +简单的 `primes` 库和高级的 `Numpy` 库强调了 C 语言仍然是编程语言中的通用语言。几乎每一个语言都可以与 C 语言交互,同时通过 C 语言也可以和任何其他语言交互。Python 很容易和 C 语言交互,作为另外一个例子,当 [Panama 项目](https://openjdk.java.net/projects/panama) 成为 Java Native Interface(JNI)一个替代品后,Java 语言和 C 语言交互也会变的很容易。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-software-libraries + +作者:[Marty Kalin][a] +选题:[lujun9972][b] +译者:[萌新阿岩](https://github.com/mengxinayan) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/mkalindepauledu +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003499_01_linux31x_cc.png?itok=Pvim4U-B (5 pengiuns floating on iceburg) +[2]: https://en.wikipedia.org/wiki/Christian_Goldbach +[3]: https://condor.depaul.edu/mkalin +[4]: http://www.opengroup.org/onlinepubs/009695399/functions/printf.html +[5]: http://www.opengroup.org/onlinepubs/009695399/functions/sqrt.html +[6]: https://openjdk.java.net/projects/panama diff --git a/published/202105/20210212 Network address translation part 2 - the conntrack tool.md b/published/202105/20210212 Network address translation part 2 - the conntrack tool.md new file mode 100644 index 0000000000..6a779f4a74 --- /dev/null +++ b/published/202105/20210212 Network address translation part 2 - the conntrack tool.md @@ -0,0 +1,133 @@ +[#]: collector: (lujun9972) +[#]: translator: (cooljelly) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13373-1.html) +[#]: subject: (Network address translation part 2 – the conntrack tool) +[#]: via: (https://fedoramagazine.org/network-address-translation-part-2-the-conntrack-tool/) +[#]: author: (Florian Westphal https://fedoramagazine.org/author/strlen/) + +网络地址转换(NAT)之连接跟踪工具 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/09/120958wwocez99o2nofw8s.jpg) + +这是有关网络地址转换network address translation(NAT)的系列文章中的第二篇。之前的第一篇文章介绍了 [如何使用 iptables/nftables 的报文跟踪功能][2] 来定位 NAT 相关的连接问题。作为第二部分,本文介绍 `conntrack` 命令,它允许你查看和修改被跟踪的连接。 + +### 引言 + +通过 iptables 或 nftables 配置的 NAT 建立在 netfilters 连接跟踪子系统之上。`conntrack` 命令作为 “conntrack-tools” 软件包的一部分,用于查看和更改连接状态表。 + +### 连接跟踪状态表 + +连接跟踪子系统会跟踪它看到的所有报文流。运行 `sudo conntrack -L` 可查看其内容: + +``` +tcp 6 43184 ESTABLISHED src=192.168.2.5 dst=10.25.39.80 sport=5646 dport=443 src=10.25.39.80 dst=192.168.2.5 sport=443 dport=5646 [ASSURED] mark=0 use=1 +tcp 6 26 SYN_SENT src=192.168.2.5 dst=192.168.2.10 sport=35684 dport=443 [UNREPLIED] src=192.168.2.10 dst=192.168.2.5 sport=443 dport=35684 mark=0 use=1 +udp 17 29 src=192.168.8.1 dst=239.255.255.250 sport=48169 dport=1900 [UNREPLIED] src=239.255.255.250 dst=192.168.8.1 sport=1900 dport=48169 mark=0 use=1 +``` + +上述显示结果中,每行表示一个连接跟踪项。你可能会注意到,每行相同的地址和端口号会出现两次,而且第二次出现的源地址/端口对和目标地址/端口对会与第一次正好相反!这是因为每个连接跟踪项会先后两次被插入连接状态表。第一个四元组(源地址、目标地址、源端口、目标端口)记录的是原始方向的连接信息,即发送者发送报文的方向。而第二个四元组则记录的是连接跟踪子系统期望收到的对端回复报文的连接信息。这解决了两个问题: + + 1. 如果报文匹配到一个 NAT 规则,例如 IP 地址伪装,相应的映射信息会记录在链接跟踪项的回复方向部分,并自动应用于同一条流的所有后续报文。 + 2. 即使一条流经过了地址或端口的转换,也可以成功在连接状态表中查找到回复报文的四元组信息。 + +原始方向的(第一个显示的)四元组信息永远不会改变:它就是发送者发送的连接信息。NAT 操作只会修改回复方向(第二个)四元组,因为这是接受者看到的连接信息。修改第一个四元组没有意义:netfilter 无法控制发起者的连接状态,它只能在收到/转发报文时对其施加影响。当一个报文未映射到现有连接表项时,连接跟踪可以为其新建一个表项。对于 UDP 报文,该操作会自动进行。对于 TCP 报文,连接跟踪可以配置为只有 TCP 报文设置了 [SYN 标志位][3] 才新建表项。默认情况下,连接跟踪会允许从流的中间报文开始创建,这是为了避免对启用连接跟踪之前就存在的流处理出现问题。 + +### 连接跟踪状态表和 NAT + +如上一节所述,回复方向的四元组包含 NAT 信息。你可以通过命令过滤输出经过源地址 NAT 或目标地址 NAT 的连接跟踪项。通过这种方式可以看到一个指定的流经过了哪种类型的 NAT 转换。例如,运行 `sudo conntrack -L -p tcp –src-nat` 可显示经过源 NAT 的连接跟踪项,输出结果类似于以下内容: + +``` +tcp 6 114 TIME_WAIT src=10.0.0.10 dst=10.8.2.12 sport=5536 dport=80 src=10.8.2.12 dst=192.168.1.2 sport=80 dport=5536 [ASSURED] +``` + +这个连接跟踪项表示一条从 10.0.0.10:5536 到 10.8.2.12:80 的连接。与前面示例不同的是,回复方向的四元组不是原始方向四元组的简单翻转:源地址已修改。目标主机(10.8.2.12)将回复数据包发送到 192.168.1.2,而不是 10.0.0.10。每当 10.0.0.10 发送新的报文时,具有此连接跟踪项的路由器会将源地址替换为 192.168.1.2。当 10.8.2.12 发送回复报文时,该路由器将目的地址修改回 10.0.0.10。上述源 NAT 行为源自一条 [NFT 伪装][4] 规则: + +``` +inet nat postrouting meta oifname "veth0" masquerade +``` + +其他类型的 NAT 规则,例如目标地址 DNAT 规则或重定向规则,其连接跟踪项也会以类似的方式显示,回复方向四元组的远端地址或端口与原始方向四元组的远端地址或端口不同。 + +### 连接跟踪扩展 + +连接跟踪的记帐功能和时间戳功能是两个有用的扩展功能。运行 `sudo sysctl net.netfilter.nf_conntrack_acct=1` 可以在运行 `sudo conntrack -L` 时显示每个流经过的字节数和报文数。运行 `sudo sysctl net.netfilter.nf_conntrack_timestamp=1` 为每个连接记录一个开始时间戳,之后每次运行 `sudo conntrack -L` 时都可以显示这个流从开始经过了多少秒。在上述命令中增加 `–output ktimestamp` 选项也可以看到流开始的绝对时间。 + +### 插入和更改连接跟踪项 + +你可以手动为状态表添加连接跟踪项,例如: + +``` +sudo conntrack -I -s 192.168.7.10 -d 10.1.1.1 --protonum 17 --timeout 120 --sport 12345 --dport 80 +``` + +这项命令通常被 conntrackd 用于状态复制,即将主防火墙的连接跟踪项复制到备用防火墙系统。于是当切换发生的时候,备用系统可以接管已经建立的连接且不会造成中断。连接跟踪还可以存储报文的带外元数据,例如连接跟踪标记和连接跟踪标签。可以用更新选项(`-U`)来修改它们: + +``` +sudo conntrack -U -m 42 -p tcp +``` + +这条命令将所有的 TCP 流的连接跟踪标记修改为 42。 + +### 删除连接跟踪项 + +在某些情况下,你可能想从状态表中删除条目。例如,对 NAT 规则的修改不会影响表中已存在流的经过报文。因此对 UDP 长连接(例如像 VXLAN 这样的隧道协议),删除表项可能很有意义,这样新的 NAT 转换规则才能生效。可以通过 `sudo conntrack -D` 命令附带可选的地址和端口列表选项,来删除相应的表项,如下例所示: + +``` +sudo conntrack -D -p udp --src 10.0.12.4 --dst 10.0.0.1 --sport 1234 --dport 53 +``` + +### 连接跟踪错误计数 + +`conntrack` 也可以输出统计数字: + +``` +# sudo conntrack -S +cpu=0 found=0 invalid=130 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=10 +cpu=1 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 +cpu=2 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=1 +cpu=3 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 +``` + +大多数计数器将为 0。`Found` 和 `insert` 数将始终为 0,它们只是为了后向兼容。其他错误计数包括: + + * `invalid`:报文既不匹配已有连接跟踪项,也未创建新连接。 + * `insert_failed`:报文新建了一个连接,但插入状态表时失败。这在 NAT 引擎在伪装时恰好选择了重复的源地址和端口时可能出现。 + * `drop`:报文新建了一个连接,但是没有可用的内存为其分配新的状态条目。 + * `early_drop`:连接跟踪表已满。为了接受新的连接,已有的未看到双向报文的连接被丢弃。 + * `error`:icmp(v6) 收到与已知连接不匹配的 icmp 错误数据包。 + * `search_restart`:查找过程由于另一个 CPU 的插入或删除操作而中断。 + * `clash_resolve`:多个 CPU 试图插入相同的连接跟踪条目。 + +除非经常发生,这些错误条件通常无害。一些错误可以通过针对预期工作负载调整连接跟踪子系统的参数来降低其发生概率,典型的配置包括 `net.netfilter.nf_conntrack_buckets` 和 `net.netfilter.nf_conntrack_max` 参数。可在 [nf_conntrack-sysctl 文档][5] 中查阅相应配置参数的完整列表。 + +当报文状态是 `invalid` 时,请使用 `sudo sysctl net.netfilter.nf_conntrack_log_invalid=255` 来获取更多信息。例如,当连接跟踪遇到一个所有 TCP 标志位均为 0 的报文时,将记录以下内容: + +``` +nf_ct_proto_6: invalid tcp flag combination SRC=10.0.2.1 DST=10.0.96.7 LEN=1040 TOS=0x00 PREC=0x00 TTL=255 ID=0 PROTO=TCP SPT=5723 DPT=443 SEQ=1 ACK=0 +``` + +### 总结 + +本文介绍了如何检查连接跟踪表和存储在跟踪流中的 NAT 信息。本系列的下一部分将延伸讨论连接跟踪工具和连接跟踪事件框架。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/network-address-translation-part-2-the-conntrack-tool/ + +作者:[Florian Westphal][a] +选题:[lujun9972][b] +译者:[cooljelly](https://github.com/cooljelly) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/strlen/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/02/network-address-translation-part-2-816x345.jpg +[2]: https://linux.cn/article-13364-1.html +[3]: https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure +[4]: https://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_(NAT)#Masquerading +[5]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/networking/nf_conntrack-sysctl.rst diff --git a/published/202105/20210218 Not an engineer- Find out where you belong.md b/published/202105/20210218 Not an engineer- Find out where you belong.md new file mode 100644 index 0000000000..a043bab7fc --- /dev/null +++ b/published/202105/20210218 Not an engineer- Find out where you belong.md @@ -0,0 +1,106 @@ +[#]: collector: (lujun9972) +[#]: translator: (max27149) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13445-1.html) +[#]: subject: (Not an engineer? Find out where you belong) +[#]: via: (https://opensource.com/article/21/2/advice-non-technical) +[#]: author: (Dawn Parzych https://opensource.com/users/dawnparzych) + +不是程序员?那就找到自己的定位 +=== + +> 无论你是已经工作了几十年的还是刚开始从业的非工程型技术人,此建议都可以帮助你确定你的位置归属。 + +![](https://img.linux.net.cn/data/attachment/album/202105/31/192647jl354n1jezx1ea1c.jpg) + +在 [本系列第一篇文章][2] 中 ,我解释了将人员和角色分为“技术”或“非技术”类别的问题。在 [第二篇文章][3] 中,我为不写代码的人分享了一些技术岗位角色。这一次,我将把这次探索总结为——“技术或非技术意味着什么”,并提供一些能够在职业发展上帮到你的建议。 + +无论你是已经从事技术工作数十年,或是刚刚起步,还是正在寻求职业变更,请考虑本文中来自非技术人员但在技术角色方面取得成功的人士的建议。 + +> “不要把你的工作和身份捆绑起来 —— 把它们分开。” +> +> —— Adam Gordon Bell,Earthly Technologies 开发者关系部 + +转换角色,并不意味着你的技能会消失且你不再具有价值。如果你担任了新角色,则需要专注于该角色的关键技能。培养技能是需要时间的。花点时间,找出新职位的重要技能。 + +如果你管理工程师们,请鼓励他们提升技术技能的同时发展非工程技能,这些技能往往能比编程能力和技术技能对职业发展和成功产生更显著的变化。 + +### 做你自己 + +> “不要让其他人定义你是技术人员还是非技术人员。什么是技术人员,什么不是技术人员,以及这是否重要,是人们必须自己搞清楚的事情。” +> +> —— Adam Gordon Bell + +> “永远不要用‘我不是技术人员’为开头进行对话。因为很可能让对方产生‘这点我需要提醒你’的想法,这在面试的时候可从来不会留下好印象,而且还有可能会让人觉得你对自己技能缺乏信心。” +> +> —— Mary Thengvall,Camunda 开发者关系总监 + +避免刻板成见;不是所有的工程师都喜欢《星球大战》或《星际迷航》。不是所有工程师都穿连帽卫衣。工程师也可以和别人交流。 + +> “单单就你的行为举止,旁人就有很多关于技术或非技术方面的看法。在办公室工作的时候,我会穿裙子,因为只有这样我才能舒服一点。” +> +> —— Shailvi Wakhlu,Strava 高级数据总监 + +### 了解你的价值 + +正如我在第一篇文章中讨论的那样,被打上“非技术”的标签会导致 [冒充者综合症][4]。承认自己的价值,不要在自己身上贴上“非技术”标签,因为它会限制你的收入潜力和职业发展。 + +> “人们之所以把我重新包装成其他东西,是因为他们认为我和工程师的刻板印象不一样。我很高兴我没有听这些人的话,因为他们本质上是在告诉我,在我拥有的技能之外,去找一份低薪的工作。” +> +> —— Shailvi Wakhlu + +> “年轻的或者女性技术人,特别是刚接触技术的女性,更容易患上冒名综合症,认为自己技术不够好。比如,‘哦,我只会前端。’,什​​么叫你*只会*前端?前端也很难的好吧。” +> +> —— Liz Harris + +### 寻找那些可以提升价值并帮到人们的地方 + +你不需要创建 PR 就可以参与开源。 + +> “当有人想为开源项目做点贡献时,我总是对他说,‘不要想着,得是一个提交才行、得提一个 PR 才可以。’这就好像,‘不行。怎么才能为那个项目贡献点价值呢?’ 如果你没时间提交 PR,那你是不是提个议题并把要点写下来?” +> +> —— Eddie Jaoude,Jaoude Studios 开源程序员 + +### 思维的多样性有助于事业成功 + +看看所有角色和人员的价值和贡献。不要根据头衔将人归到同能力的一组。 + +> “要认识到,所有人(包括自己在内),在任何时候,以及事情全貌的重要性。创造力这个事儿不应该由自我驱动。要知道,对于你所做的事情,你可以做的更好,也可以做的更糟。不要害怕寻求帮助,知道到我们在一起。” +> +> —— Therese Eberhard,电影/广告和视频场景画师 + +> “在我参加过的黑客马拉松中,我们都是技术人员,组建了一支四五个硬核程序员组成的强大团队,但我们输了。我不骗你,我们输了。在新冠疫情之前,我赢了前六次的黑客马拉松,而且当时团队中一半的人属于其他领域的专家。在我们赢过的比赛中,大多数人会认为团队一半人是非技术的,尽管我不喜欢这个术语,因为这像是给团队/项目贴金。我们之所以获胜,是因为我们对所构建的东西有很多不同的看法。” +> +> —— Eddie Jaoude + +> “我们越能摆脱‘技术/非技术’、‘开发人员/非开发人员’的标签,并理解到一个连续统一的整体存在,我们就越能全力以赴地雇用到合适的人来做这项工作,只要不被你需要‘技术团队’的假设所困扰。” +> +> —— Mary Thengvall + +我们的社区和团队越多样化,它们的包容性就越大。 + +> “老实说,无论是从社区角度还是从产品角度,我认为,总的来说,最重要的事情都是,我们应该确保我们建立的是一个包容性的社区,这不仅是为了我们的产品,也不仅是为了我们正在使用的技术,还为了整个人类社会,我想……我敢打赌,如果我们做到了这一点,那么作为人类,我们就比过去更进步了。” +> +> —— Leon Stigter,Lightbend 高级产品经理 + +如果你以非程序员的技术身份工作,你会给那些认为自己“非技术”的人(或被他人认为是“非技术”的人)提供什么建议? 在评论中分享你的见解。 + +--- + +via: https://opensource.com/article/21/2/advice-non-technical + +作者:[Dawn Parzych][a] +选题:[lujun9972][b] +译者:[max27149](https://github.com/max27149) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/dawnparzych +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/career_journey_road_gps_path_map_520.png?itok=PpL6jJgY (Looking at a map for career journey) +[2]: https://linux.cn/article-13168-1.html +[3]: https://linux.cn/article-13178-1.html +[4]: https://opensource.com/business/15/9/tips-avoiding-impostor-syndrome + diff --git a/published/202105/20210325 How to use the Linux sed command.md b/published/202105/20210325 How to use the Linux sed command.md new file mode 100644 index 0000000000..fa8818a8e2 --- /dev/null +++ b/published/202105/20210325 How to use the Linux sed command.md @@ -0,0 +1,184 @@ +[#]: subject: "How to use the Linux sed command" +[#]: via: "https://opensource.com/article/21/3/sed-cheat-sheet" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13417-1.html" + +使用 sed 命令进行复制、剪切和粘贴 +====== + +> 了解 sed 的基本用法,然后下载我们的备忘单,方便快速地参考 Linux 流编辑器。 + +![](https://img.linux.net.cn/data/attachment/album/202105/23/181625abgrg4dsbw4y4fue.jpg) + +很少有 Unix 命令像 `sed`、[grep][2] 和 [awk][3] 一样出名,它们经常组合在一起,可能是因为它们具有奇怪的名称和强大的文本解析能力。它们还在一些语法和逻辑上有相似之处。虽然它们都能用于文本解析,但都有其特殊性。本文研究 `sed` 命令,它是一个 流编辑器stream editor。 + +我之前写过关于 [sed][4] 以及它的远亲 [ed][5] 的文章。要熟悉 `sed`,对 `ed` 有一点了解是有帮助的,因为这有助于你熟悉缓冲区的概念。本文假定你熟悉 `sed` 的基本知识,这意味着你至少已经运行过经典的 `s/foo/bar` 风格的查找和替换命令。 + +- 下载我们的免费 [sed 备忘录][6] + +### 安装 sed + +如果你使用的是 Linux、BSD 或 macOS,那么它们已经安装了 GNU 的或 BSD 的 sed。这些是原始 `sed` 命令的独特重新实现。虽然它们很相似,但也有一些细微的差别。本文已经在 Linux 和 NetBSD 版本上进行了测试,所以你可以使用你的计算机上找到的任何 sed,但是对于 BSD sed,你必须使用短选项(例如 `-n` 而不是 `--quiet`)。 + +GNU sed 通常被认为是功能最丰富的 sed,因此无论你是否运行 Linux,你可能都想要尝试一下。如果在 Ports 树中找不到 GNU sed(在非 Linux 系统上通常称为 gsed),你可以从 GNU 网站 [下载源代码][7]。 安装 GNU sed 的好处是,你可以使用它的额外功能,但是如果需要可移植性,还可以限制它以遵守 sed 的 [POSIX][8] 规范。 + +MacOS 用户可以在 [MacPorts][9] 或 [Homebrew][10] 上找到 GNU sed。 + +在 Windows 上,你可以通过 [Chocolatey][12] 来 [安装 GNU sed][11]。 + +### 了解模式空间和保留空间 + +sed 一次只能处理一行。因为它没有可视化模式,所以会创建一个 模式空间pattern space,这是一个内存空间,其中包含来自输入流的当前行(删除了尾部的任何换行符)。填充模式空间后,sed 将执行你的指令。当命令执行完时,sed 将模式空间中的内容打印到输出流,默认是 **标准输出**,但是可以将输出重定向到文件,甚至使用 `--in-place=.bak` 选项重定向到同一文件。 + +然后,循环从下一个输入行再次开始。 + +为了在遍历文件时提供一点灵活性,sed 还提供了保留空间hold space(有时也称为 保留缓冲区hold buffer),即 sed 内存中为临时数据存储保留的空间。你可以将保留空间当作剪贴板,实际上,这正是本文所演示的内容:如何使用 sed 复制/剪切和粘贴。 + +首先,创建一个示例文本文件,其内容如下: + +``` +Line one +Line three +Line two +``` + +### 复制数据到保留空间 + +要将内容放置在 sed 的保留空间,使用 `h` 或 `H` 命令。小写的 `h` 告诉 sed 覆盖保留空间中的当前内容,而大写的 `H` 告诉 sed 将数据追加到保留空间中已经存在的内容之后。 + +单独使用,什么都看不到: + +``` +$ sed --quiet -e '/three/ h' example.txt +$ +``` + +`--quiet`(缩写为 `-n`)选项禁止显示所有输出,但 sed 执行了我的搜索需求。在这种情况下,sed 选择包含字符串 `three` 的任何行,并将其复制到保留空间。我没有告诉 sed 打印任何东西,所以没有输出。 + +### 从保留空间复制数据 + +要了解保留空间,你可以从保留空间复制内容,然后使用 `g` 命令将其放入模式空间,观察会发生什么: + +``` +$ sed -n -e '/three/h' -e 'g;p' example.txt + +Line three +Line three +``` + +第一个空白行是因为当 sed 第一次复制内容到模式空间时,保留空间为空。 + +接下来的两行包含 `Line three` 是因为这是从第二行开始的保留空间。 + +该命令使用两个唯一的脚本(`-e`)纯粹是为了帮助提高可读性和组织性。将步骤划分为单独的脚本可能会很有用,但是从技术上讲,以下命令与一个脚本语句一样有效: + +``` +$ sed -n -e '/three/h ; g ; p' example.txt + +Line three +Line three +``` + +### 将数据追加到模式空间 + +`G` 命令会将一个换行符和保留空间的内容添加到模式空间。 + +``` +$ sed -n -e '/three/h' -e 'G;p' example.txt +Line one + +Line three +Line three +Line two +Line three +``` + +此输出的前两行同时包含模式空间(`Line one`)的内容和空的保留空间。接下来的两行与搜索文本(`three`)匹配,因此它既包含模式空间又包含保留空间。第三行的保留空间没有变化,因此在模式空间(`Line two`)的末尾是保留空间(仍然是 `Line three`)。 + +### 用 sed 剪切和粘贴 + +现在你知道了如何将字符串从模式空间转到保留空间并再次返回,你可以设计一个 sed 脚本来复制、删除,然后在文档中粘贴一行。例如,将示例文件的 `Line three` 挪至第三行,sed 可以解决这个问题: + +``` +$ sed -n -e '/three/ h' -e '/three/ d' \ +-e '/two/ G;p' example.txt +Line one +Line two +Line three +``` + + * 第一个脚本找到包含字符串 `three` 的行,并将其从模式空间复制到保留空间,替换当前保留空间中的任何内容。 + * 第二个脚本删除包含字符串 `three` 的任何行。这样就完成了与文字处理器或文本编辑器中的 _剪切_ 动作等效的功能。 + * 最后一个脚本找到包含字符串 `two` 的行,并将保留空间的内容_追加_到模式空间,然后打印模式空间。 + +任务完成。 + +### 使用 sed 编写脚本 + +再说一次,使用单独的脚本语句纯粹是为了视觉和心理上的简单。剪切和粘贴命令作为一个脚本同样有效: + +``` +$ sed -n -e '/three/ h ; /three/ d ; /two/ G ; p' example.txt +Line one +Line two +Line three +``` + +它甚至可以写在一个专门的脚本文件中: + +``` +#!/usr/bin/sed -nf + +/three/h +/three/d +/two/ G +p +``` + +要运行该脚本,将其加入可执行权限,然后用示例文件尝试: + +``` +$ chmod +x myscript.sed +$ ./myscript.sed example.txt +Line one +Line two +Line three +``` + +当然,你需要解析的文本越可预测,则使用 sed 解决问题越容易。发明 sed 操作(例如复制和粘贴)的“配方”通常是不切实际的,因为触发操作的条件可能因文件而异。但是,你对 sed 命令的使用越熟练,就越容易根据需要解析的输入来设计复杂的动作。 + +重要的事情是识别不同的操作,了解 sed 何时移至下一行,并预测模式和保留空间包含的内容。 + +### 下载备忘单 + +sed 很复杂。虽然它只有十几个命令,但它灵活的语法和原生功能意味着它充满了无限的潜力。为了充分利用 sed,我曾经参考过一些巧妙的单行命令,但是直到我开始发明(有时是重新发明)自己的解决方案时,我才觉得自己真正开始学习 sed 了 。如果你正在寻找命令提示和语法方面的有用技巧,[下载我们的 sed 备忘单][6],然后开始一劳永逸地学习 sed! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/sed-cheat-sheet + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux_penguin_green.png?itok=ENdVzW22 "Penguin with green background" +[2]: https://opensource.com/article/21/3/grep-cheat-sheet +[3]: https://opensource.com/article/20/9/awk-ebook +[4]: https://opensource.com/article/20/12/sed +[5]: https://opensource.com/article/20/12/gnu-ed +[6]: https://opensource.com/downloads/sed-cheat-sheet +[7]: http://www.gnu.org/software/sed/ +[8]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains +[9]: https://opensource.com/article/20/11/macports +[10]: https://opensource.com/article/20/6/homebrew-mac +[11]: https://chocolatey.org/packages/sed +[12]: https://opensource.com/article/20/3/chocolatey \ No newline at end of file diff --git a/published/202105/20210330 Access Python package index JSON APIs with requests.md b/published/202105/20210330 Access Python package index JSON APIs with requests.md new file mode 100644 index 0000000000..437bd5c3ea --- /dev/null +++ b/published/202105/20210330 Access Python package index JSON APIs with requests.md @@ -0,0 +1,208 @@ +[#]: subject: "Access Python package index JSON APIs with requests" +[#]: via: "https://opensource.com/article/21/3/python-package-index-json-apis-requests" +[#]: author: "Ben Nuttall https://opensource.com/users/bennuttall" +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13356-1.html" + +使用 requests 访问 Python 包索引(PyPI)的 JSON API +====== + +> PyPI 的 JSON API 是一种机器可直接使用的数据源,你可以访问和你浏览网站时相同类型的数据。 + +![](https://img.linux.net.cn/data/attachment/album/202105/03/111943du0lgbjj6br6sruu.jpg) + +PyPI(Python 软件包索引)提供了有关其软件包信息的 JSON API。本质上,它是机器可以直接使用的数据源,与你在网站上直接访问是一样的的。例如,作为人类,我可以在浏览器中打开 [Numpy][2] 项目页面,点击左侧相关链接,查看有哪些版本,哪些文件可用以及发行日期和支持的 Python 版本等内容: + +![NumPy project page][3] + +但是,如果我想编写一个程序来访问此数据,则可以使用 JSON API,而不必在这些页面上抓取和解析 HTML。 + +顺便说一句:在旧的 PyPI 网站上,还托管在 `pypi.python.org` 时,NumPy 的项目页面位于 `pypi.python.org/pypi/numpy`,访问其 JSON API 也很简单,只需要在最后面添加一个 `/json` ,即 `https://pypi.org/pypi/numpy/json`。现在,PyPI 网站托管在 `pypi.org`,NumPy 的项目页面是 `pypi.org/project/numpy`。新站点不会有单独的 JSON API URL,但它仍像以前一样工作。因此,你不必在 URL 后添加 `/json`,只要记住 URL 就够了。 + +你可以在浏览器中打开 NumPy 的 JSON API URL,Firefox 很好地渲染了数据: + +![JSON rendered in Firefox][5] + +你可以查看 `info`,`release` 和 `urls` 其中的内容。或者,你可以将其加载到 Python Shell 中,以下是几行入门教程: + +``` +import requests +url = "https://pypi.org/pypi/numpy/json" +r = requests.get(url) +data = r.json() +``` + +获得数据后(调用 `.json()` 提供了该数据的 [字典][6]),你可以对其进行查看: + +![Inspecting data][7] + +查看 `release` 中的键: + +![Inspecting keys in releases][8] + +这表明 `release` 是一个以版本号为键的字典。选择一个并查看以下内容: + +![Inspecting version][9] + +每个版本都包含一个列表,`release` 包含 24 项。但是每个项目是什么?由于它是一个列表,因此你可以索引第一项并进行查看: + +![Indexing an item][10] + +这是一个字典,其中包含有关特定文件的详细信息。因此,列表中的 24 个项目中的每一个都与此特定版本号关联的文件相关,即在 列出的 24 个文件。 + +你可以编写一个脚本在可用数据中查找内容。例如,以下的循环查找带有 sdist(源代码包)的版本,它们指定了 `requires_python` 属性并进行打印: + +``` +for version, files in data['releases'].items(): +    for f in files: +        if f.get('packagetype') == 'sdist' and f.get('requires_python'): +            print(version, f['requires_python']) +``` + +![sdist files with requires_python attribute][11] + +### piwheels + +去年,我在 piwheels 网站上[实现了类似的 API][12]。[piwheels.org][13] 是一个 Python 软件包索引,为树莓派架构提供了 wheel(预编译的二进制软件包)。它本质上是 PyPI 软件包的镜像,但带有 Arm wheel,而不是软件包维护者上传到 PyPI 的文件。 + +由于 piwheels 模仿了 PyPI 的 URL 结构,因此你可以将项目页面 URL 的 `pypi.org` 部分更改为 `piwheels.org`。它将向你显示类似的项目页面,其中详细说明了构建的版本和可用的文件。由于我喜欢旧站点允许你在 URL 末尾添加 `/json` 的方式,所以我也支持这种方式。NumPy 在 PyPI 上的项目页面为 [pypi.org/project/numpy][14],在 piwheels 上,它是 [piwheels.org/project/numpy][15],而 JSON API 是 [piwheels.org/project/numpy/json][16] 页面。 + +没有必要重复 PyPI API 的内容,所以我们提供了 piwheels 上可用内容的信息,包括所有已知发行版的列表,一些基本信息以及我们拥有的文件列表: + +![JSON files available in piwheels][17] + +与之前的 PyPI 例子类似,你可以创建一个脚本来分析 API 内容。例如,对于每个 NumPy 版本,其中有多少 piwheels 文件: + +``` +import requests + +url = "https://www.piwheels.org/project/numpy/json" +package = requests.get(url).json() + +for version, info in package['releases'].items(): +    if info['files']: +        print('{}: {} files'.format(version, len(info['files']))) +    else: +        print('{}: No files'.format(version)) +``` + +此外,每个文件都包含一些元数据: + +![Metadata in JSON files in piwheels][18] + +方便的是 `apt_dependencies` 字段,它列出了使用该库所需的 Apt 软件包。本例中的 NumPy 文件,或者通过 `pip` 安装 Numpy,你还需要使用 Debian 的 `apt` 包管理器安装 `libatlas3-base` 和 `libgfortran`。 + +以下是一个示例脚本,显示了程序包的 Apt 依赖关系: + + +``` +import requests + +def get_install(package, abi): +    url = 'https://piwheels.org/project/{}/json'.format(package) +    r = requests.get(url) +    data = r.json() +    for version, release in sorted(data['releases'].items(), reverse=True): +        for filename, file in release['files'].items(): +            if abi in filename: +                deps = ' '.join(file['apt_dependencies']) +                print("sudo apt install {}".format(deps)) +                print("sudo pip3 install {}=={}".format(package, version)) +                return + +get_install('opencv-python', 'cp37m') +get_install('opencv-python', 'cp35m') +get_install('opencv-python-headless', 'cp37m') +get_install('opencv-python-headless', 'cp35m') +``` + +我们还为软件包列表提供了一个通用的 API 入口,其中包括每个软件包的下载统计: + +```python +import requests + +url = "https://www.piwheels.org/packages.json" +packages = requests.get(url).json() +packages = { +    pkg: (d_month, d_all) +    for pkg, d_month, d_all, *_ in packages +} + +package = 'numpy' +d_month, d_all = packages[package] + +print(package, "has had", d_month, "downloads in the last month") +print(package, "has had", d_all, "downloads in total") +``` + +### pip search + +`pip search` 因为其 XMLRPC 接口过载而被禁用,因此人们一直在寻找替代方法。你可以使用 piwheels 的 JSON API 来搜索软件包名称,因为软件包的集合是相同的: + +``` +#!/usr/bin/python3 +import sys + +import requests + +PIWHEELS_URL = 'https://www.piwheels.org/packages.json' + +r = requests.get(PIWHEELS_URL) +packages = {p[0] for p in r.json()} + +def search(term): +    for pkg in packages: +        if term in pkg: +            yield pkg + +if __name__ == '__main__': +    if len(sys.argv) == 2: +        results = search(sys.argv[1].lower()) +        for res in results: +            print(res) +    else: +        print("Usage: pip_search TERM") +``` + +有关更多信息,参考 piwheels 的 [JSON API 文档][19]. + +* * * + +_本文最初发表在 Ben Nuttall 的 [Tooling Tuesday 博客上][20],经许可转载使用。_ + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/3/python-package-index-json-apis-requests + +作者:[Ben Nuttall][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/bennuttall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/python_programming_question.png?itok=cOeJW-8r "Python programming language logo with question marks" +[2]: https://pypi.org/project/numpy/ +[3]: https://opensource.com/sites/default/files/uploads/numpy-project-page.png "NumPy project page" +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://opensource.com/sites/default/files/uploads/pypi-json-firefox.png "JSON rendered in Firefox" +[6]: https://docs.python.org/3/tutorial/datastructures.html#dictionaries +[7]: https://opensource.com/sites/default/files/uploads/pypi-json-notebook.png "Inspecting data" +[8]: https://opensource.com/sites/default/files/uploads/pypi-json-releases.png "Inspecting keys in releases" +[9]: https://opensource.com/sites/default/files/uploads/pypi-json-inspect.png "Inspecting version" +[10]: https://opensource.com/sites/default/files/uploads/pypi-json-release.png "Indexing an item" +[11]: https://opensource.com/sites/default/files/uploads/pypi-json-requires-python.png "sdist files with requires_python attribute " +[12]: https://blog.piwheels.org/requires-python-support-new-project-page-layout-and-a-new-json-api/ +[13]: https://www.piwheels.org/ +[14]: https://pypi.org/project/numpy +[15]: https://www.piwheels.org/project/numpy +[16]: https://www.piwheels.org/project/numpy/json +[17]: https://opensource.com/sites/default/files/uploads/piwheels-json.png "JSON files available in piwheels" +[18]: https://opensource.com/sites/default/files/uploads/piwheels-json-numpy.png "Metadata in JSON files in piwheels" +[19]: https://www.piwheels.org/json.html +[20]: https://tooling.bennuttall.com/accessing-python-package-index-json-apis-with-requests/ diff --git a/published/202105/20210331 A tool to spy on your DNS queries- dnspeep.md b/published/202105/20210331 A tool to spy on your DNS queries- dnspeep.md new file mode 100644 index 0000000000..c194b860c8 --- /dev/null +++ b/published/202105/20210331 A tool to spy on your DNS queries- dnspeep.md @@ -0,0 +1,154 @@ +[#]: subject: (A tool to spy on your DNS queries: dnspeep) +[#]: via: (https://jvns.ca/blog/2021/03/31/dnspeep-tool/) +[#]: author: (Julia Evans https://jvns.ca/) +[#]: collector: (lujun9972) +[#]: translator: (wyxplus) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13353-1.html) + +dnspeep:监控 DNS 查询的工具 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/02/191521i4ycjm7veln426vy.jpg) + +在过去的几天中,我编写了一个叫作 [dnspeep][1] 的小工具,它能让你看到你电脑中正进行的 DNS 查询,并且还能看得到其响应。它现在只有 [250 行 Rust 代码][2]。 + +我会讨论如何去尝试它、能做什么、为什么我要编写它,以及当我在开发时所遇到的问题。 + +### 如何尝试 + +我构建了一些二进制文件,因此你可以快速尝试一下。 + +对于 Linux(x86): + +``` +wget https://github.com/jvns/dnspeep/releases/download/v0.1.0/dnspeep-linux.tar.gz +tar -xf dnspeep-linux.tar.gz +sudo ./dnspeep +``` + +对于 Mac: + +``` +wget https://github.com/jvns/dnspeep/releases/download/v0.1.0/dnspeep-macos.tar.gz +tar -xf dnspeep-macos.tar.gz +sudo ./dnspeep +``` + +它需要以超级用户root身份运行,因为它需要访问计算机正在发送的所有 DNS 数据包。 这与 `tcpdump` 需要以超级身份运行的原因相同:它使用 `libpcap`,这与 tcpdump 使用的库相同。 + +如果你不想在超级用户下运行下载的二进制文件,你也能在 查看源码并且自行编译。 + +### 输出结果是什么样的 + +以下是输出结果。每行都是一次 DNS 查询和响应: + +``` +$ sudo dnspeep +query name server IP response +A firefox.com 192.168.1.1 A: 44.235.246.155, A: 44.236.72.93, A: 44.236.48.31 +AAAA firefox.com 192.168.1.1 NOERROR +A bolt.dropbox.com 192.168.1.1 CNAME: bolt.v.dropbox.com, A: 162.125.19.131 +``` + +这些查询是来自于我在浏览器中访问的 `neopets.com`,而 `bolt.dropbox.com` 查询是因为我正在运行 Dropbox 代理,并且我猜它不时会在后台运行,因为其需要同步。 + +### 为什么我要开发又一个 DNS 工具? + +之所以这样做,是因为我认为当你不太了解 DNS 时,DNS 似乎真的很神秘! + +你的浏览器(和你电脑上的其他软件)一直在进行 DNS 查询,我认为当你能真正看到请求和响应时,似乎会有更多的“真实感”。 + +我写这个也把它当做一个调试工具。我想“这是 DNS 的问题?”的时候,往往很难回答。我得到的印象是,当尝试检查问题是否由 DNS 引起时,人们经常使用试错法或猜测,而不是仅仅查看计算机所获得的 DNS 响应。 + +### 你可以看到哪些软件在“秘密”使用互联网 + +我喜欢该工具的一方面是,它让我可以感知到我电脑上有哪些程序正使用互联网!例如,我发现在我电脑上,某些软件出于某些理由不断地向 `ping.manjaro.org` 发送请求,可能是为了检查我是否已经连上互联网了。 + +实际上,我的一个朋友用这个工具发现,他的电脑上安装了一些以前工作时的企业监控软件,但他忘记了卸载,因此你甚至可能发现一些你想要删除的东西。 + +### 如果你不习惯的话, tcpdump 会令人感到困惑 + +当我试图向人们展示他们的计算机正在进行的 DNS 查询时,我的第一感是想“好吧,使用 tcpdump”!而 `tcpdump` 确实可以解析 DNS 数据包! + +例如,下方是一次对 `incoming.telemetry.mozilla.org.` 的 DNS 查询结果: + +``` +11:36:38.973512 wlp3s0 Out IP 192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48) +11:36:38.996060 wlp3s0 In IP 192.168.1.1.53 > 192.168.1.181.42281: 56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180) +``` + +绝对可以学着去阅读理解一下,例如,让我们分解一下查询: + +`192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)` + + * `A?` 意味着这是一次 A 类型的 DNS **查询** + * `incoming.telemetry.mozilla.org.` 是被查询的名称 + * `56271` 是 DNS 查询的 ID + * `192.168.1.181.42281` 是源 IP/端口 + * `192.168.1.1.53` 是目的 IP/端口 + * `(48)` 是 DNS 报文长度 + +在响应报文中,我们可以这样分解: + +`56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180)` + + * `3/0/0` 是在响应报文中的记录数:3 个回答,0 个权威记录,0 个附加记录。我认为 tcpdump 甚至只打印出回答响应报文。 + * `CNAME telemetry-incoming.r53-2.services.mozilla.com`、`CNAME prod.data-ingestion.prod.dataops.mozgcp.net.` 和 `A 35.244.247.133` 是三个响应记录。 + * `56271` 是响应报文 ID,和查询报文的 ID 相对应。这就是你如何知道它是对前一行请求的响应。 + +我认为,这种格式最难处理的是(作为一个只想查看一些 DNS 流量的人),你必须手动匹配请求和响应,而且它们并不总是相邻的行。这就是计算机擅长的事情! + +因此,我决定编写一个小程序(`dnspeep`)来进行匹配,并排除一些我认为多余的信息。 + +### 我在编写时所遇到的问题 + +在撰写本文时,我遇到了一些问题: + + * 我必须给 `pcap` 包打上补丁,使其能在 Mac 操作系统上和 Tokio 配合工作([这个更改][3])。这是其中的一个 bug,花了很多时间才搞清楚,用了 1 行代码才解决 :) + * 不同的 Linux 发行版似乎有不同的 `libpcap.so` 版本。所以我不能轻易地分发一个动态链接 libpcap 的二进制文件(你可以 [在这里][4] 看到其他人也有同样的问题)。因此,我决定在 Linux 上将 libpcap 静态编译到这个工具中。但我仍然不太了解如何在 Rust 中正确做到这一点作,但我通过将 `libpcap.a` 文件复制到 `target/release/deps` 目录下,然后直接运行 `cargo build`,使其得以工作。 + * 我使用的 `dns_parser` carte 并不支持所有 DNS 查询类型,只支持最常见的。我可能需要更换一个不同的工具包来解析 DNS 数据包,但目前为止还没有找到合适的。 + * 因为 `pcap` 接口只提供原始字节(包括以太网帧),所以我需要 [编写代码来计算从开头剥离多少字节才能获得数据包的 IP 报头][5]。我很肯定我还遗漏了一些情形。 + +我对于给它取名也有过一段艰难的时光,因为已经有许多 DNS 工具了(dnsspy!dnssnoop!dnssniff!dnswatch!)我基本上只是查了下有关“监听”的每个同义词,然后选择了一个看起来很有趣并且还没有被其他 DNS 工具所占用的名称。 + +该程序没有做的一件事就是告诉你哪个进程进行了 DNS 查询,我发现有一个名为 [dnssnoop][6] 的工具可以做到这一点。它使用 eBPF,看上去很酷,但我还没有尝试过。 + +### 可能会有许多 bug + +我只在 Linux 和 Mac 上简单测试了一下,并且我已知至少有一个 bug(不支持足够多的 DNS 查询类型),所以请在遇到问题时告知我! + +尽管这个 bug 没什么危害,因为这 libpcap 接口是只读的。所以可能发生的最糟糕的事情是它得到一些它无法解析的输入,最后打印出错误或是崩溃。 + +### 编写小型教育工具很有趣 + +最近,我对编写小型教育的 DNS 工具十分感兴趣。 + +到目前为止我所编写的工具: + + * (一种进行 DNS 查询的简单方法) + * (向你显示在进行 DNS 查询时内部发生的情况) + * 本工具(`dnspeep`) + +以前我尽力阐述已有的工具(如 `dig` 或 `tcpdump`)而不是编写自己的工具,但是经常我发现这些工具的输出结果让人费解,所以我非常关注以更加友好的方式来看这些相同的信息,以便每个人都能明白他们电脑正在进行的 DNS 查询,而不仅仅是依赖 tcmdump。 + +-------------------------------------------------------------------------------- + +via: https://jvns.ca/blog/2021/03/31/dnspeep-tool/ + +作者:[Julia Evans][a] +选题:[lujun9972][b] +译者:[wyxplus](https://github.com/wyxplus) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://jvns.ca/ +[b]: https://github.com/lujun9972 +[1]: https://github.com/jvns/dnspeep +[2]: https://github.com/jvns/dnspeep/blob/f5780dc822df5151f83703f05c767dad830bd3b2/src/main.rs +[3]: https://github.com/ebfull/pcap/pull/168 +[4]: https://github.com/google/gopacket/issues/734 +[5]: https://github.com/jvns/dnspeep/blob/f5780dc822df5151f83703f05c767dad830bd3b2/src/main.rs#L136 +[6]: https://github.com/lilydjwg/dnssnoop diff --git a/published/202105/20210412 Scheduling tasks with cron.md b/published/202105/20210412 Scheduling tasks with cron.md new file mode 100644 index 0000000000..c14e44cd5f --- /dev/null +++ b/published/202105/20210412 Scheduling tasks with cron.md @@ -0,0 +1,202 @@ +[#]: subject: "Scheduling tasks with cron" +[#]: via: "https://fedoramagazine.org/scheduling-tasks-with-cron/" +[#]: author: "Darshna Das https://fedoramagazine.org/author/climoiselle/" +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13383-1.html" + +使用 cron 调度任务 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/12/120220f7wwchadgwmsg1dw.jpg) + +cron 是一个调度守护进程,它以指定的时间间隔执行任务,这些任务称为 corn 作业,主要用于自动执行系统维护或管理任务。例如,你可以设置一个 cron 作业来自动执行重复的任务,比如备份数据库或数据,使用最新的安全补丁更新系统,检查磁盘空间使用情况,发送电子邮件等等。 cron 作业可以按分钟、小时、日、月、星期或它们的任意组合运行。 + +### cron 的一些优点 + +以下是使用 cron 作业的一些优点: + + * 你可以更好地控制作业的运行时间。例如,你可以精确到分钟、小时、天等。 + * 它消除了为循环任务逻辑而去写代码的需要,当你不再需要执行任务时,可以直接关闭它。 + * 作业在不执行时不会占用内存,因此你可以节省内存分配。 + * 如果一个作业执行失败并由于某种原因退出,它将在适当的时间再次运行。 + +### 安装 cron 守护进程 + +幸运的是,Fedora Linux 预先配置了运行重要的系统任务来保持系统更新,有几个实用程序可以运行任务例如 cron、`anacron`、`at` 和 `batch` 。本文只关注 cron 实用程序的安装。cron 和 cronie 包一起安装,cronie 包也提供 `cron` 服务。 + +要确定软件包是否已经存在,使用 `rpm` 命令: + +``` +$ rpm -q cronie + Cronie-1.5.2-4.el8.x86_64 +``` + +如果安装了 cronie ,它将返回 cronie 包的全名。如果你的系统中没有安装,则会显示未安装。 + +使用以下命令安装: + +``` +$ dnf install cronie +``` + +### 运行 cron 守护进程 + +cron 作业由 crond 服务来执行,它会读取配置文件中的信息。在将作业添加到配置文件之前,必须启动 crond 服务,或者安装它。什么是 crond 呢?crond 是 cron 守护程序的简称。要确定 crond 服务是否正在运行,输入以下命令: + +``` +$ systemctl status crond.service +● crond.service - Command Scheduler + Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor pre> + Active: active (running) since Sat 2021-03-20 14:12:35 PDT; 1 day 21h ago + Main PID: 1110 (crond) +``` + +如果你没有看到类似的内容 `Active: active (running) since…`,你需要启动 crond 守护进程。要在当前会话中运行 crond 服务,输入以下命令: + +``` +$ systemctl run crond.service +``` + +将其配置为开机自启动,输入以下命令: + +``` +$ systemctl enable crond.service +``` + +如果出于某种原因,你希望停止 crond 服务,按以下方式使用 `stop` 命令: + +``` +$ systemctl stop crond.service +``` + +要重新启动它,只需使用 `restart` 命令: + +``` +$ systemctl restart crond.service +``` + +### 定义一个 cron 作业 + +#### cron 配置 + +以下是一个 cron 作业的配置细节示例。它定义了一个简单的 cron 作业,将 `git` master 分支的最新更改拉取到克隆的仓库中: + +``` +*/59 * * * * username cd /home/username/project/design && git pull origin master +``` + +主要有两部分: + + * 第一部分是 `*/59 * * * *`。这表明计时器设置为第 59 分钟执行一次。(LCTT 译注:原文此处有误。) + * 该行的其余部分是命令,因为它将从命令行运行。 + 在此示例中,命令本身包含三个部分: + * 作业将以用户 `username` 的身份运行 + * 它将切换到目录 `/home/username/project/design` + * 运行 `git` 命令拉取 master 分支中的最新更改 + +#### 时间语法 + +如上所述,时间信息是 cron 作业字符串的第一部分,如上所属。它决定了 cron 作业运行的频率和时间。它按以下顺序包括 5 个部分: + + * 分钟 + * 小时 + * 一个月中的某天 + * 月份 + * 一周中的某天 + +下面是一种更图形化的方式来解释语法: + +``` + .--------------- 分钟 (0 - 59) + | .------------- 小时 (0 - 23) + | | .---------- 一月中的某天 (1 - 31) + | | | .------- 月份 (1 - 12) 或 jan、feb、mar、apr … + | | | | .---- 一周中的某天 (0-6) (周日=0 或 7) + | | | | | 或 sun、mon、tue、wed、thr、fri、sat + | | | | | + * * * * * user-name command-to-be-executed +``` + +#### 星号的使用 + +星号(`*`)可以用来替代数字,表示该位置的所有可能值。例如,分钟位置上的星号会使它每分钟运行一次。以下示例可能有助于更好地理解语法。 + +这个 cron 作业将每分钟运行一次: + +``` +* * * * [command] +``` + +斜杠表示分钟的间隔数。下面的示例将每小时运行 12 次,即每 5 分钟运行一次: + +``` +*/5 * * * * [command] +``` + +下一个示例将每月的第二天午夜(例如 1 月 2 日凌晨 12:00,2 月 2 日凌晨 12:00 等等): + +``` +0 0 2 * * [command] +``` + +(LCTT 译注:关于 cron 时间格式,还有更多格式符号,此处没有展开) + +#### 使用 crontab 创建一个 cron 作业 + +cron 作业会在后台运行,它会不断检查 `/etc/crontab` 文件和 `/etc/cron.*/` 以及 `/var/spool/cron/` 目录。每个用户在 `/var/spool/cron/` 中都有一个唯一的 crontab 文件。 + +不应该直接编辑这些 cron 文件。`crontab` 命令是用于创建、编辑、安装、卸载和列出 cron 作业的方法。 + +更酷的是,在创建新文件或编辑现有文件后,你无需重新启动 cron。 + +``` +$ crontab -e +``` + +这将打开你现有的 crontab 文件,或者创建一个。调用 `crontab -e` 时,默认情况下会使用 `vi` 编辑器。注意:要使用 Nano 编辑 crontab 文件,可以设置 `EDITOR=nano` 环境变量。 + +使用 `-l` 选项列出所有 cron 作业。如果需要,使用 `-u` 选项指定一个用户。 + +``` +$ crontab -l +$ crontab -u username -l +``` + +使用以下命令删除所有 cron 作业: + +``` +$ crontab -r +``` + +要删除特定用户的作业,你必须以 root 用户身份运行以下命令: + +``` +$ crontab -r -u username +``` + +感谢你的阅读。cron 作业看起来可能只是系统管理员的工具,但它实际上与许多 Web 应用程序和用户任务有关。 + +### 参考 + +Fedora Linux 文档的 [自动化任务][4] + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/scheduling-tasks-with-cron/ + +作者:[Darshna Das][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/climoiselle/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/03/schedule_with_cron-816x345.jpg +[2]: https://unsplash.com/@yomex4life?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[3]: https://unsplash.com/s/photos/clock?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[4]: https://docs.fedoraproject.org/en-US/Fedora/12/html/Deployment_Guide/ch-autotasks.html \ No newline at end of file diff --git a/published/202105/20210412 Send your scans to a Linux machine over your network.md b/published/202105/20210412 Send your scans to a Linux machine over your network.md new file mode 100644 index 0000000000..f4169f4076 --- /dev/null +++ b/published/202105/20210412 Send your scans to a Linux machine over your network.md @@ -0,0 +1,193 @@ +[#]: subject: (Send your scans to a Linux machine over your network) +[#]: via: (https://opensource.com/article/21/4/linux-scan-samba) +[#]: author: (Marc Skinner https://opensource.com/users/marc-skinner) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13395-1.html) + +通过网络将你的扫描结果发送到 Linux 机器上 +====== + +> 设置一个 Samba 共享,使扫描仪可以容易地被网络上的一台 Linux 计算机访问。 + +![](https://img.linux.net.cn/data/attachment/album/202105/16/111724ft11r181pc1bu21p.jpg) + +自由软件运动 [因为一台设计不良的打印机][2] 而开始。几十年后,打印机和扫描仪制造商继续重新发明轮子,无视既定的通用协议。因此,每隔一段时间,你就会偶然发现一台打印机或扫描仪似乎无法与你的操作系统配合使用。 + +最近,我在一台佳能三合一扫描仪(佳能 Maxify MB2720)上遇到了这种情况。我用开源方案解决这个扫描仪的问题。具体来说,我设置了一个 Samba 共享,使扫描仪在我的网络上可用。 + +[Samba 项目][3] 是一个用于 Linux/Unix 与 Windows 互操作的套件。尽管它是大多数用户从未与之交互的低级代码,但该软件使得在你的本地网络上共享文件变得很容易,而不管使用的是什么平台。 + +我使用的是 Fedora,所以这些说明应该适用于任何基于 RPM 的 Linux 发行版。对于其他发行版,可能需要做一些小的修改。下面是我的做法。 + +### 获取佳能工具 + +从佳能的网站上下载所需的用于 Windows 的 “佳能快速实用工具箱Canon Quick Utility Toolbox”。该软件是必需的,因为它是配置打印机目标文件夹位置和凭证的唯一方法。完成后,你就不需要再使用该工具了,除非你想做出改变。 + +在配置打印机之前,你必须在你的 Linux 电脑或服务器上设置一个 Samba 共享。用以下命令安装 Samba: + +``` +$ sudo dnf -y install samba +``` + +创建 `/etc/smb.conf` 文件,内容如下: + +``` +[global] +        workgroup = WORKGROUP +        netbios name = MYSERVER +        security = user +        #CORE needed for CANON PRINTER SCAN FOLDER +        min protocol = CORE +        #NTML AUTHV1 needed for CANON PRINTER SCAN FOLDER +        ntlm auth = yes +        passdb backend = tdbsam + +        printing = cups +        printcap name = cups +        load printers = no +        cups options = raw + +        hosts allow = 127. 192.168.33. +        max smbd processes = 1000 + +[homes] +        comment = Home Directories +        valid users = %S, %D%w%S +        browseable = No +        writable = yes +        read only = No +        inherit acls = Yes + +[SCANS] +        comment = MB2720 SCANS +        path = /mnt/SCANS +        public = yes +        writable = yes +        browseable = yes +        printable = no +        force user = tux +        create mask = 770 +``` + +在接近结尾的 `force user` 这行中,将用户名从 `tux` 改为你自己的用户名。 + +不幸的是,佳能打印机不能与高于 CORE 或 NTML v2 认证的服务器信息块([SMB][4])协议一起工作。由于这个原因,Samba 共享必须配置最古老的 SMB 协议和 NTML 认证版本。这无论如何都不理想,而且有安全问题,所以我创建了一个单独的 Samba 服务器,专门用于扫描仪。我的另一台共享所有家庭网络文件的 Samba 服务器仍然使用 SMB 3 和 NTML v2 认证版本。 + +启动 Samba 服务端服务,并启用它: + +``` +$ sudo systemctl start smb +$ sudo systemctl enable smb +``` + +### 创建一个 Samba 用户 + +创建你的 Samba 用户并为其设置密码: + +``` +$ sudo smbpasswd -a tux +``` + +在提示符下输入你的密码。 + +假设你想在 Linux 系统上挂载你的 Samba 扫描仪,你需要做几个步骤。 + +创建一个 Samba 客户端凭证文件。我的看起来像这样: + +``` +$ sudo cat /root/smb-credentials.txt +username=tux +password=mySTRONGpassword +``` + +改变权限,使其不能被其他人阅读: + +``` +$ sudo chmod 640 /root/smb-credentials.txt +``` + +创建一个挂载点并将其添加到 `/etc/fstab` 中: + +``` +$ sudo mkdir /mnt/MB2720-SCANS +``` + +在你的 `/etc/fstab` 中添加以下这行: + +``` +//192.168.33.50/SCANS  /mnt/MB2720-SCANS  cifs vers=3.0,credentials=/root/smb-credentials.txt,gid=1000,uid=1000,_netdev    0 0 +``` + +这将使用 [CIFS][5] 将 Samba 共享扫描挂载到新的挂载点,强制采用 SMBv3,并使用存储在 `/root/smb-credetials.txt` 中的用户名和密码。它还传递用户的组标识符(GID)和用户标识符(UID),让你拥有 Linux 挂载的全部所有权。`_netdev` 选项是必需的,以便在网络正常后(例如重启后)挂载该挂载点,因为该挂载点需要网络来访问。 + +### 配置佳能软件 + +现在你已经创建了 Samba 共享,在服务器上进行了配置,并将该共享配置到 Linux 客户端上,你需要启动“佳能快速实用工具箱”来配置打印机。因为佳能没有为 Linux 发布工具箱,所以这一步需要 Windows。你可以尝试 [在 WINE 上运行它][6],但如果失败了,你就必须向别人借一台 Windows 电脑,或者在 [GNOME Boxes][8] 或 [VirtualBox][9] 中运行一个 [Windows 开发者虚拟机][7]。 + +打开打印机,然后启动佳能快速实用工具箱。它应该能找到你的打印机。如果不能看到你的打印机,你必须先将打印机配置为 LAN 或无线网络。 + +在工具箱中,点击“目标文件夹设置Destination Folder Settings”。 + +![Canon Quick Utility Toolbox][10] + +输入打印机管理密码。我的默认密码是 “canon”。 + +单击“添加Add”按钮。 + +![Add destination folder][12] + +在表格中填写“显示名Displayed Name”、“目标位置共享文件夹名称Shared Folder Name in Destination”,以及你的 Samba “域名/用户名Domain Name/User Name”和“密码Password”。 + +我把 “PIN 码PIN Code”留空,但如果你想要求每次从打印机扫描时都要输入 PIN 码,你可以设置一个。这在办公室里很有用,每个用户都有自己的 Samba 共享和 PIN 码来保护他们的扫描。 + +点击“连接测试Connection Test”来验证表格数据。 + +点击 “OK” 按钮。 + +点击 “注册到打印机Register to Printer”,将你的配置保存到打印机上。 + +![Register to Printer ][13] + +一切都设置好了。点击“退出Exit”。你现在已经完成了 Windows 的操作,可能还有工具箱,除非你需要改变什么。 + +### 开始扫描 + +你现在可以从打印机扫描,并从其 LCD 菜单中选择你的“目标文件夹”。扫描结果将直接保存到 Samba 共享中,你可以从你的 Linux 电脑上访问该共享。 + +为方便起见,用以下命令在你的 Linux 桌面或家目录上创建一个符号链接: + +``` +$ sudo ln -sd /mnt/MB2720-SCANS /home/tux/Desktop/MB2720-SCANS +``` + +这就是全部内容了! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/linux-scan-samba + +作者:[Marc Skinner][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/marc-skinner +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/files_documents_paper_folder.png?itok=eIJWac15 (Files in a folder) +[2]: https://opensource.com/article/18/2/pivotal-moments-history-open-source +[3]: http://samba.org/ +[4]: https://en.wikipedia.org/wiki/Server_Message_Block +[5]: https://searchstorage.techtarget.com/definition/Common-Internet-File-System-CIFS +[6]: https://opensource.com/article/21/2/linux-wine +[7]: https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/ +[8]: https://opensource.com/article/19/5/getting-started-gnome-boxes-virtualization +[9]: https://www.virtualbox.org/ +[10]: https://opensource.com/sites/default/files/uploads/canontoolbox.png (Canon Quick Utility Toolbox) +[11]: https://creativecommons.org/licenses/by-sa/4.0/ +[12]: https://opensource.com/sites/default/files/add_destination_folder.png (Add destination folder) +[13]: https://opensource.com/sites/default/files/uploads/canonregistertoprinter.png (Register to Printer ) diff --git a/published/202105/20210414 4 tips for context switching in Git.md b/published/202105/20210414 4 tips for context switching in Git.md new file mode 100644 index 0000000000..a557074975 --- /dev/null +++ b/published/202105/20210414 4 tips for context switching in Git.md @@ -0,0 +1,178 @@ +[#]: subject: (4 tips for context switching in Git) +[#]: via: (https://opensource.com/article/21/4/context-switching-git) +[#]: author: (Olaf Alders https://opensource.com/users/oalders) +[#]: collector: (lujun9972) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13422-1.html) + +Git 中上下文切换的 4 种方式 +====== + +> 比较 Git 中四种切换分支的方法的优缺点。 + +![](https://img.linux.net.cn/data/attachment/album/202105/25/091803a6ww3r7yo32oxdzx.jpg) + +所有大量使用 Git 的人都会用到某种形式的上下文切换。有时这只会给你的工作流程增加少量的开销,但有时,这可能是一段痛苦的经历。 + +让我们用以下这个例子来讨论一些常见的上下文切换策略的优缺点: + +> 假设你在一个名为 `feature-X` 的分支中工作。你刚刚发现你需要解决一个无关的问题。这不能在 `feature-X` 分支中完成。你需要在一个新的分支 `feature-Y` 中完成这项工作。 + +### 方案 1:暂存 + 分支 + +解决此问题最常见的工作流程可能如下所示: + + 1. 停止分支 `feature-X` 上的工作 + 2. `git stash` + 3. `git checkout -b feature-Y origin/main` + 4. 一顿鼓捣,解决 `feature-Y` 的问题 + 5. `git checkout feature-X` 或 `git switch -` + 6. `git stash pop` + 7. 继续在 `feature-X` 中工作 + +**优点:** 这种方法的优点在于,对于简单的更改,这是一个相当简单的工作流程。它可以很好地工作,特别是对于小型仓库。 + +**缺点:** 使用此工作流程时,一次只能有一个工作区。另外,根据你的仓库的状态,使用暂存是一个麻烦的环节。 + +### 方案 2:WIP 提交 + 分支 + +这个解决方案和前一个非常相似,但是它使用 WIP(正在进行的工作Work in Progress)提交而不是暂存。当你准备好切换回来,而不是弹出暂存时,`git reset HEAD~1` 会展开 WIP 提交,你可以自由地继续,就像之前的方案一样,但不会触及暂存。 + + 1. 停止分支 `feature-X` 上的工作 + 2. `git add -u`(仅仅添加修改和删除的文件) + 3. `git commit -m "WIP"` + 4. `git checkout -b feature-Y origin/master` + 5. 一顿鼓捣,解决 `feature-Y` 的问题 + 6. `git checkout feature-X` 或 `git switch -` + 7. `git reset HEAD~1` + +**优点:** 对于简单的更改,这是一个简单的工作流,也适合于小型仓库。你不需要使用暂存。 + +**缺点:** 任何时候都只能有一个工作区。此外,如果你或你的代码审阅者不够谨慎,WIP 提交可能会合并到最终产品。 + +使用此工作流时,你**永远**不要想着将 `--hard` 添加到 `git reset`。如果你不小心这样做了,你应该能够使用 `git reflog` 恢复提交,但是你最好完全避免这种情况发生,否则你会听到心碎的声音。 + +### 方案 3:克隆一个新仓库 + +在这个解决方案中,不是创建新的分支,而是为每个新的功能分支创建存储库的新克隆。 + +**优点:** 你可以同时在多个工作区中工作。你不需要 `git stash` 或者是 WIP 提交。 + +**缺点:** 需要考虑仓库的大小,因为这可能会占用大量磁盘空间(浅层克隆可以帮助解决这种情况,但它们可能并不总是很合适。)此外,你的仓库克隆将互不可知。因为他们不能互相追踪,所以你必须手动追踪你的克隆的源仓库。如果需要 git 钩子,则需要为每个新克隆设置它们。 + +### 方案 4:git 工作树 + +要使用此解决方案,你可能需要了解 `git add worktree`。如果你不熟悉 Git 中的工作树,请不要难过。许多人多年来都对这个概念一无所知。 + +#### 什么是工作树? + +将工作树视为仓库中属于项目的文件。本质上,这是一种工作区。你可能没有意识到你已经在使用工作树了。开始使用 Git 时,你将自动获得第一个工作树。 + +``` +$ mkdir /tmp/foo && cd /tmp/foo +$ git init +$ git worktree list +/tmp  0000000 [master] +``` + +你可以在以上代码看到,甚至在第一次提交前你就有了一个工作树。接下来去尝试再添加一个工作树到你的项目中吧。 + +#### 添加一个工作树 + +想要添加一个新的工作树你需要提供: + + 1. 硬盘上的一个位置 + 2. 一个分支名 + 3. 添加哪些分支 + +``` +$ git clone https://github.com/oalders/http-browserdetect.git +$ cd http-browserdetect/ +$ git worktree list +/Users/olaf/http-browserdetect 90772ae [master] + +$ git worktree add ~/trees/oalders/feature-X -b oalders/feature-X origin/master +$ git worktree add ~/trees/oalders/feature-Y -b oalders/feature-Y e9df3c555e96b3f1 + +$ git worktree list +/Users/olaf/http-browserdetect 90772ae [master] +/Users/olaf/trees/oalders/feature-X 90772ae [oalders/feature-X] +/Users/olaf/trees/oalders/feature-Y e9df3c5 [oalders/feature-Y] +``` + +与大多数其他 Git 命令一样,你需要在仓库路径下使用此命令。一旦创建了工作树,就有了隔离的工作环境。Git 仓库会跟踪工作树在磁盘上的位置。如果 Git 钩子已经在父仓库中设置好了,那么它们也可以在工作树中使用。 + +请注意到,每个工作树只使用父仓库磁盘空间的一小部分。在这种情况下,工作树需要只大约三分之一的原始磁盘空间。这这非常适合进行扩展。如果你的仓库达到了千兆字节的级别,你就会真正体会到工作树对硬盘空间的节省。 + +``` +$ du -sh /Users/olaf/http-browserdetect +2.9M + +$ du -sh /Users/olaf/trees/oalders/feature-X +1.0M +``` + +**优点:** 你可以同时在多个工作区中工作。你不需要使用暂存。Git 会跟踪所有的工作树。你不需要设置 Git 钩子。这也比 `git clone` 更快,并且可以节省网络流量,因为你可以在飞行模式下执行此操作。你还可以更高效地使用磁盘空间,而无需借助于浅层克隆。 + +**缺点:** 这是个需要你额外学习和记忆的新东西,但是如果你能养成使用这个功能的习惯,它会给你丰厚的回报。 + +#### 额外的小技巧 + +有很多方式可以清除工作树,最受欢迎的方式是使用 Git 来移除工作树: + +``` +git worktree remove /Users/olaf/trees/oalders/feature-X +``` + +如果你喜欢 RM 大法,你也可以用 `rm -rf` 来删除工作树。 + +``` +rm -rf /Users/olaf/trees/oalders/feature-X +``` + +但是,如果执行此操作,则可能需要使用 `git worktree prune` 清理所有剩余的文件。或者你现在可以跳过清理,这将在将来的某个时候通过 `git gc` 自行完成。 + +#### 注意事项 + +如果你准备尝试 `git worktree`,请记住以下几点: + +* 删除工作树并不会删除该分支。 +* 可以在工作树中切换分支。 +* 你不能在多个工作树中同时签出同一个分支。 +* 像其他命令一样,`git worktree` 需要从仓库内运行。 +* 你可以同时拥有许多工作树。 +* 要从同一个本地仓库签出创建工作树,否则它们将互不可知。 + +#### git rev-parse + +最后一点注意:在使用 `git worktree` 时,仓库根所在的位置可能取决于上下文。幸运的是,`git rev parse` 可以让你区分这两者。 + +* 要查找父仓库的根目录,请执行以下操作: + ``` + git rev-parse --git-common-dir + ``` +* 要查找你当前所在仓库的根目录,请执行: + ``` + git rev-parse --show-toplevel + ``` + +### 根据你的需要选择最好的方法 + +就像很多事情一样,TIMTOWDI(条条大道通罗马there's more than one way to do it)。重要的是你要找到一个适合你需要的工作流程。你的需求可能因手头的问题而异。也许你偶尔会发现自己将 `git worktree` 作为版本控制工具箱中的一个方便工具。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/context-switching-git + +作者:[Olaf Alders][a] +选题:[lujun9972][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/oalders +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_screen_windows_files.png?itok=kLTeQUbY (Computer screen with files or windows open) diff --git a/published/202105/20210416 Metro Exodus is Finally Here on Steam for Linux.md b/published/202105/20210416 Metro Exodus is Finally Here on Steam for Linux.md new file mode 100644 index 0000000000..6a70a602d6 --- /dev/null +++ b/published/202105/20210416 Metro Exodus is Finally Here on Steam for Linux.md @@ -0,0 +1,61 @@ +[#]: subject: (Metro Exodus is Finally Here on Steam for Linux) +[#]: via: (https://news.itsfoss.com/metro-exodus-steam/) +[#]: author: (Asesh Basu https://news.itsfoss.com/author/asesh/) +[#]: collector: (lujun9972) +[#]: translator: (alim0x) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13370-1.html) + +《地铁:离去》终于来到了 Steam for Linux +====== + +> 在其他平台上推出后,《地铁:离去》正式登陆 Linux/GNU 平台。准备好体验最好的射击游戏之一了吗? + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/metro-exodus-linux.png?w=1200&ssl=1) + +《地铁:离去Metro Exodus》是一款长久以来深受粉丝喜爱的游戏,现在终于来到了 Linux 平台。在超过两年的漫长等待之后,Linux 用户终于可以上手《地铁》三部曲的第三部作品。虽然先前已经有一些非官方移植的版本,但这个版本是 4A Games 发布的官方版本。 + +《地铁:离去》是一款第一人称射击游戏,拥有华丽的光线跟踪画面,故事背景设置在横跨俄罗斯广阔土地的荒野之上。这条精彩的故事线横跨了从春、夏、秋到核冬天的整整一年。游戏结合了快节奏的战斗和隐身以及探索和生存,可以轻而易举地成为 Linux 中最具沉浸感的游戏之一。 + +### 我的 PC 可以运行它吗? + +作为一款图形计算密集型游戏,你得有像样的硬件来运行以获得不错的帧率。这款游戏重度依赖光线追踪来让画面看起来更棒。 + +运行游戏的最低要求需要 **Intel Core i5 4400**、**8 GB** 内存,以及最低 **NVIDIA GTX670** 或 **AMD Radeon R9 380** 的显卡。推荐配置是 **Intel Core i7 4770K** 搭配 **GTX1070** 或 **RX 5500XT**。 + +这是开发者提及的官方配置清单: + +![][1] + +《地铁:离去》是付费游戏,你需要花费 39.99 美元来获取这个最新最棒的版本。 + +如果你在游玩的时候遇到持续崩溃的情况,检查一下你的显卡驱动以及 Linux 内核版本。有人反馈了一些相关的问题,但不是普遍性的问题。 + +### 从哪获取游戏? + +Linux 版本的游戏可以从 [Steam][2] for Linux 获取。如果你已经购买了游戏,它会自动出现在你的 Steam for Linux 游戏库内。 + +- [Metro Exodus (Steam)][2] + +如果你还没有安装 Steam,你可以参考我们的教程:[在 Ubuntu 上安装 Steam][3] 和 [在 Fedora 上安装 Steam][4]。 + +你的 Steam 游戏库中已经有《地铁:离去》了吗?准备购买一份吗?可以在评论区写下你的想法。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/metro-exodus-steam/ + +作者:[Asesh Basu][a] +选题:[lujun9972][b] +译者:[alim0x](https://github.com/alim0x) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/asesh/ +[b]: https://github.com/lujun9972 +[1]: https://i1.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/METRO-EXODUS-LINUX-System-Requirements.jpg?w=1454&ssl=1 +[2]: https://store.steampowered.com/app/412020/Metro_Exodus/ +[3]: https://itsfoss.com/install-steam-ubuntu-linux/ +[4]: https://itsfoss.com/install-steam-fedora/ diff --git a/published/202105/20210416 Play a fun math game with Linux commands.md b/published/202105/20210416 Play a fun math game with Linux commands.md new file mode 100644 index 0000000000..64cdaf210d --- /dev/null +++ b/published/202105/20210416 Play a fun math game with Linux commands.md @@ -0,0 +1,199 @@ +[#]: subject: (Play a fun math game with Linux commands) +[#]: via: (https://opensource.com/article/21/4/math-game-linux-commands) +[#]: author: (Jim Hall https://opensource.com/users/jim-hall) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13358-1.html) + +用 Linux 命令玩一个有趣的数学游戏 +====== + +> 在家玩流行的英国游戏节目 “Countdown” 中的数字游戏。 + +![](https://img.linux.net.cn/data/attachment/album/202105/03/221459uchb0f8xcxfrhc86.jpg) + +像许多人一样,我在大流行期间看了不少新的电视节目。我最近发现了一个英国的游戏节目,叫做 [Countdown][2],参赛者在其中玩两种游戏:一种是 _单词_ 游戏,他们试图从杂乱的字母中找出最长的单词;另一种是 _数字_ 游戏,他们从随机选择的数字中计算出一个目标数字。因为我喜欢数学,我发现自己被数字游戏所吸引。 + +数字游戏可以为你的下一个家庭游戏之夜增添乐趣,所以我想分享我自己的一个游戏变体。你以一组随机数字开始,分为 1 到 10 的“小”数字和 15、20、25,以此类推,直到 100 的“大”数字。你从大数字和小数字中挑选六个数字的任何组合。 + +接下来,你生成一个 200 到 999 之间的随机“目标”数字。然后用你的六个数字进行简单的算术运算,尝试用每个“小”和“大”数字计算出目标数字,但使用不能超过一次。如果你能准确地计算出目标数字,你就能得到最高分,如果距离目标数字 10 以内就得到较低的分数。 + +例如,如果你的随机数是 75、100、2、3、4 和 1,而你的目标数是 505,你可以说 `2+3=5`,`5×100=500`,`4+1=5`,以及 `5+500=505`。或者更直接地:`(2+3)×100 + 4 + 1 = 505`。 + +### 在命令行中随机化列表 + +我发现在家里玩这个游戏的最好方法是从 1 到 10 的池子里抽出四个“小”数字,从 15 到 100 的 5 的倍数中抽出两个“大”数字。你可以使用 Linux 命令行来为你创建这些随机数。 + +让我们从“小”数字开始。我希望这些数字在 1 到 10 的范围内。你可以使用 Linux 的 `seq` 命令生成一个数字序列。你可以用几种不同的方式运行 `seq`,但最简单的形式是提供序列的起始和结束数字。要生成一个从 1 到 10 的列表,你可以运行这个命令: + +``` +$ seq 1 10 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +``` + +为了随机化这个列表,你可以使用 Linux 的 `shuf`(“shuffle”,打乱)命令。`shuf` 将随机化你给它的东西的顺序,通常是一个文件。例如,如果你把 `seq` 命令的输出发送到 `shuf` 命令,你会收到一个 1 到 10 之间的随机数字列表: + +``` +$ seq 1 10 | shuf +3 +6 +8 +10 +7 +4 +5 +2 +1 +9 +``` + +要从 1 到 10 的列表中只选择四个随机数,你可以将输出发送到 `head` 命令,它将打印出输入的前几行。使用 `-4` 选项来指定 `head` 只打印前四行: + +``` +$ seq 1 10 | shuf | head -4 +6 +1 +8 +4 +``` + +注意,这个列表与前面的例子不同,因为 `shuf` 每次都会生成一个随机顺序。 + +现在你可以采取下一步措施来生成“大”数字的随机列表。第一步是生成一个可能的数字列表,从 15 开始,以 5 为单位递增,直到达到 100。你可以用 Linux 的 `seq` 命令生成这个列表。为了使每个数字以 5 为单位递增,在 `seq` 命令中插入另一个选项来表示 _步进_: + +``` +$ seq 15 5 100 +15 +20 +25 +30 +35 +40 +45 +50 +55 +60 +65 +70 +75 +80 +85 +90 +95 +100 +``` + +就像以前一样,你可以随机化这个列表,选择两个“大”数字: + +``` +$ seq 15 5 100 | shuf | head -2 +75 +40 +``` + +### 用 Bash 生成一个随机数 + +我想你可以用类似的方法从 200 到 999 的范围内选择游戏的目标数字。但是生成单个随机数的最简单的方案是直接在 Bash 中使用 `RANDOM` 变量。当你引用这个内置变量时,Bash 会生成一个大的随机数。要把它放到 200 到 999 的范围内,你需要先把随机数放到 0 到 799 的范围内,然后加上 200。 + +要把随机数放到从 0 开始的特定范围内,你可以使用**模数**算术运算符。模数计算的是两个数字相除后的 _余数_。如果我用 801 除以 800,结果是 1,余数是 1(模数是 1)。800 除以 800 的结果是 1,余数是 0(模数是 0)。而用 799 除以 800 的结果是 0,余数是 799(模数是 799)。 + +Bash 通过 `$(())` 结构支持算术展开。在双括号之间,Bash 将对你提供的数值进行算术运算。要计算 801 除以 800 的模数,然后加上 200,你可以输入: + +``` +$ echo $(( 801 % 800 + 200 )) +201 +``` + +通过这个操作,你可以计算出一个 200 到 999 之间的随机目标数: + +``` +$ echo $(( RANDOM % 800 + 200 )) +673 +``` + +你可能想知道为什么我在 Bash 语句中使用 `RANDOM` 而不是 `$RANDOM`。在算术扩展中, Bash 会自动扩展双括号内的任何变量. 你不需要在 `$RANDOM` 变量上的 `$` 来引用该变量的值, 因为 Bash 会帮你做这件事。 + +### 玩数字游戏 + +让我们把所有这些放在一起,玩玩数字游戏。产生两个随机的“大”数字, 四个随机的“小”数值,以及目标值: + +``` +$ seq 15 5 100 | shuf | head -2 +75 +100 +$ seq 1 10 | shuf | head -4 +4 +3 +10 +2 +$ echo $(( RANDOM % 800 + 200 )) +868 +``` + +我的数字是 **75**、**100**、**4**、**3**、**10** 和 **2**,而我的目标数字是 **868**。 + +如果我用每个“小”和“大”数字做这些算术运算,并不超过一次,我就能接近目标数字了: + +``` +10×75 = 750 +750+100 = 850 + +然后: + +4×3 = 12 +850+12 = 862 +862+2 = 864 +``` + +只相差 4 了,不错!但我发现这样可以用每个随机数不超过一次来计算出准确的数字: + +``` +4×2 = 8 +8×100 = 800 + +然后: + +75-10+3 = 68 +800+68 = 868 +``` + +或者我可以做 _这些_ 计算来准确地得到目标数字。这只用了六个随机数中的五个: + +``` +4×3 = 12 +75+12 = 87 + +然后: + +87×10 = 870 +870-2 = 868 +``` + +试一试 _Countdown_ 数字游戏,并在评论中告诉我们你做得如何。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/math-game-linux-commands + +作者:[Jim Hall][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jim-hall +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/edu_math_formulas.png?itok=B59mYTG3 (Math formulas in green writing) +[2]: https://en.wikipedia.org/wiki/Countdown_%28game_show%29 diff --git a/published/202105/20210417 How to Download Ubuntu via Torrent -Absolute Beginner-s Tip.md b/published/202105/20210417 How to Download Ubuntu via Torrent -Absolute Beginner-s Tip.md new file mode 100644 index 0000000000..d4228a0c9d --- /dev/null +++ b/published/202105/20210417 How to Download Ubuntu via Torrent -Absolute Beginner-s Tip.md @@ -0,0 +1,81 @@ +[#]: subject: (How to Download Ubuntu via Torrent [Absolute Beginner’s Tip]) +[#]: via: (https://itsfoss.com/download-ubuntu-via-torrent/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13386-1.html) + +初级:如何通过 Torrent 下载 Ubuntu +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/13/094313jdukww0zkli78hpg.jpg) + +下载 Ubuntu 是非常直接简单的。你可以去它的 [官方网站][1],点击 [桌面下载部分][2],选择合适的 Ubuntu 版本并点击下载按钮。 + +![][3] + +Ubuntu 是以一个超过 2.5GB 大小的单一镜像形式提供的。直接下载对于拥有高速网络连接的人来说效果很好。 + +然而,如果你的网络连接很慢或不稳定,你将很难下载这样一个大文件。在这个过程中,下载可能会中断几次,或者可能需要几个小时。 + +![Direct download may take several hours for slow internet connections][4] + +### 通过 Torrent 下载 Ubuntu + +如果你也困扰于受限数据或网络连接过慢,使用下载管理器或 torrent 将是一个更好的选择。我不打算在这个快速教程中讨论什么是 torrent。你只需要知道,通过 torrent,你可以在多个会话内下载一个大文件。 + +好的是,Ubuntu 实际上提供了通过 torrent 的下载。不好的是,它隐藏在网站上,如果你不熟悉它,很难猜到在哪。 + +如果你想通过 torrent 下载 Ubuntu,请到你所选择的 Ubuntu 版本中寻找**其他下载方式**。 + +![][5] + +点击这个“**alternative downloads and torrents**” 链接,它将打开一个新的网页。**在这个页面向下滚动**,看到 BitTorrent 部分。你会看到下载所有可用版本的 torrent 文件的选项。如果你要在你的个人电脑或笔记本电脑上使用 Ubuntu,你应该选择桌面版本。 + +![][6] + +阅读 [这篇文章以获得一些关于你应该使用哪个 Ubuntu 版本的指导][7]。考虑到你要使用这个发行版,了解 [Ubuntu LTS 和非 LTS 版本会有所帮助][8]。 + +#### 你是如何使用下载的 torrent 文件来获取 Ubuntu 的? + +我推测你知道如何使用 torrent。如果没有,让我为你快速总结一下。 + +你已经下载了一个几 KB 大小的 .torrent 文件。你需要下载并安装一个 Torrent 应用,比如 uTorrent 或 Deluge 或 BitTorrent。 + +我建议在 Windows 上使用 [uTorrent][9]。如果你使用的是某个 Linux 发行版,你应该已经有一个 [像 Transmission 这样的 torrent 客户端][10]。如果没有,你可以从你的发行版的软件管理器中安装它。 + +当你安装了 Torrent 应用,运行它。现在拖放你从 Ubuntu 网站下载的 .torrent 文件。你也可以使用菜单中的打开选项。 + +当 torrent 文件被添加到 Torrent 应用中,它就开始下载该文件。如果你关闭了系统,下载就会暂停。再次启动 Torrent 应用,下载就会从同一个地方恢复。 + +当下载 100% 完成后,你可以用它来 [全新安装 Ubuntu][11] 或 [与 Windows 双启动][12]。 + +享受 Ubuntu :) + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/download-ubuntu-via-torrent/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://ubuntu.com +[2]: https://ubuntu.com/download/desktop +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/download-ubuntu.png?resize=800%2C325&ssl=1 +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/slow-direct-download-ubuntu.png?resize=800%2C365&ssl=1 +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/ubuntu-torrent-download.png?resize=800%2C505&ssl=1 +[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/ubuntu-torrent-download-option.png?resize=800%2C338&ssl=1 +[7]: https://itsfoss.com/which-ubuntu-install/ +[8]: https://itsfoss.com/long-term-support-lts/ +[9]: https://www.utorrent.com/ +[10]: https://itsfoss.com/best-torrent-ubuntu/ +[11]: https://itsfoss.com/install-ubuntu/ +[12]: https://itsfoss.com/install-ubuntu-1404-dual-boot-mode-windows-8-81-uefi/ diff --git a/published/202105/20210419 21 reasons why I think everyone should try Linux.md b/published/202105/20210419 21 reasons why I think everyone should try Linux.md new file mode 100644 index 0000000000..d21535f086 --- /dev/null +++ b/published/202105/20210419 21 reasons why I think everyone should try Linux.md @@ -0,0 +1,167 @@ +[#]: subject: (21 reasons why I think everyone should try Linux) +[#]: via: (https://opensource.com/article/21/4/linux-reasons) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (ShuyRoy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13404-1.html) + +每个人都应该尝试 Linux 的 21 个理由 +====== + +> 游戏、交易、预算、艺术、编程等等,这些都只是任何人都可以使用 Linux 的众多方式中的一种。 + +![](https://img.linux.net.cn/data/attachment/album/202105/19/111929by99711lq1iuz7y1.jpg) + +当我在度假时,我经常会去一家或者多家的二手书店。我经常能够找到我想读的一本好书,而且我总是以 “我在度假;我应该用这本书来犒劳自己” 来为不可避免的购买行为辩护。这很有效,我用这种方式获得了一些我最喜欢的书。但是,买一本好书在生活中很常见,这个理由经不起推敲。事实上,我不需要为买一本好书来找理由。事情都是这样的,我可以在任何时候做我想做的事。但不知何故,有一个理由似乎确实能让这个过程更有趣。 + +在我的日常生活中,我会收到很多关于 Linux 的问题。有时候我会不自觉地滔滔不绝地讲述开源软件的历史,或者共享资源的知识和利益。有时候,我会设法提到一些我喜欢的 Linux 上的特性,然后对这些好处进行逆向工程以便它们可以在其它的操作系统上享用。这些讨论经常是有趣且有益的,但只有一个问题:这些讨论都没有回答大家真正要问的问题。 + +当一个人问你关于 Linux 的问题时,他们经常希望你能够给他们一些使用 Linux 的理由。当然,也有例外。从来没有听过“Linux”的人们可能会问一些字面定义。但是当你的朋友或者同事吐露出他们对当前的操作系统有些不满意的时候,解释一下你为什么喜欢 Linux 可能更好,而不是告诉他们为什么 Linux 是一个比专有系统更好的选择。换句话说,你不需要销售演示,你需要的是度假照片(如果你是个书虫的话,也可以是度假时买的一本书)。 + +为了达到这个目的,下面是我喜欢 Linux 的 21 个原因,分别在 21 个不同的场合讲给 21 个不同的人。 + +### 游戏 + +![Gaming on Linux][2] + +说到玩电脑,最明显的活动之一就是玩游戏,说到玩游戏,我很喜欢。我很高兴花一个晚上玩一个 8 位的益智游戏或者 epic 工作室的一个 AAA 级游戏。其它时候,我还会沉浸在棋盘游戏或者角色扮演游戏(RPG)中。 + +这些我都是 [在 Linux 系统的电脑上做的][4]。 + +### 办公 + +![LibreOffice][5] + +一种方法并不适合所有人。这对帽子和办公室工作来说都是如此。看到同事们被困在一个不适合他们的单一工作流程中,我感到很痛苦,我喜欢 Linux 鼓励用户找到他们喜欢的工具。我曾使用过的应用大到套件(例如 LibreOffice 和 OpenOffice),小到轻量级文字处理器(如 Abiword),再到最小的文本编辑器(利用 Pandoc 进行转换)。 + +不管我周围的用户被限制在什么范围内,我都可以 [自由地使用可以在我的电脑上工作的最好的工具][6],并且以我希望的方式工作。 + +### 选择 + +![Linux login screen][7] + +开源最有价值的特性之一是用户在使用这些软件的时候是可以信任它的。这种信任来自于好友网络,他们可以阅读他们所使用的应用程序和操作系统的源代码。也就是说,即使你不知道源代码的好坏,你也可以在 [开源社区][8] 中结交一些知道的朋友。这些都是 Linux 用户在探索他们运行的发行版时建立的重要联系。如果你不信任构建和维护的发行版的社区,你可以去找其它的发行版。我们都是这样做的,这是有许多发行版可供选择的优势之一。 + +[Linux 提供了可选择的特性][9]。一个强大的社区,充满了真实的人际关系,结合 Linux 提供的选择自由,所有这些都让用户对他们运行的软件有信心。因为我读过一些源码,也因为我信任哪些维护我没读过的代码的人,[所以我信任 Linux][10]。 + +### 预算 + +![Skrooge][11] + +做预算并不有趣,但是很重要。我很早就认识到,在业余时间做一些不起眼的工作,就像我学会了一种 _免费_ 的操作系统(Linux!)一样。预算不是为了追踪你的钱,而是为了追踪你的习惯。这意味着无论你是靠薪水生活,还是正在计划退休,你都应该 [保持预算][12]。 + +如果你在美国,你甚至可以 [用 Linux 来交税][13]。 + +### 艺术 + +![MyPaint][14] + +不管你是画画还是做像素艺术、[编辑视频][15] 还是随性记录,你都可以在 Linux 上创建出色的内容。我所见过的一些最优秀的艺术作品都是使用一些非“行业标准”的工具随意创作出来的,并且你可能会惊讶于你所看到的许多内容都是基于同样的方式创造出来的。Linux 是一个不会被宣扬的引擎,但它是具有强大功能的引擎,驱动着独立艺术家和大型制作人。 + +尝试使用 Linux 来 [创作一些艺术作品][16]。 + +### 编程 + +![NetBeans][17] + +听着,用 Linux 来编程几乎是定论。仅次于服务器管理,开源和 Linux 是一个明显的组合。这其中有 [许多原因][18],但我这里给出了一个有趣的原因。我在发明新东西时遇到了很多障碍,所以我最不希望的就是操作系统或者软件工具开发包(SDK)成为失败的原因。在 Linux 上,我可以访问一切,字面意义上的一切。 + +### 封包 + +![Packaging GNOME software][19] + +当他们在谈编程的时候,没有人谈封包。作为一个开发者,你必须将你的代码提供给您的用户,否则你将没有任何用户。Linux 使得开发人员可以轻松地 [发布应用程序][20],用户也可以轻松地 [安装这些应用程序][21]。 + +令很多人感到惊讶的是 [Linux 可以像运行本地程序一样运行许多 Windows 应用程序][22]。你不应该期望一个 Windows 应用可以在 Linux 上执行。不过,许多主要的通用应用要么已经在 Linux 上原生存在,要么可以通过名为 Wine 的兼容层运行。 + + +### 技术 + +![Data center][23] + +如果你正在找一份 IT 工作,Linux 是很好的第一步。作为一个曾经为了更快地渲染视频而误入 Linux 的前艺术系学生,我说的是经验之谈。 + +尖端技术发生在 Linux 上。Linux 驱动着大部分的互联网、世界上最快的超级计算机以及云本身。现在,Linux 驱动着 [边缘计算][26],将云数据中心的能力与分散的节点相结合,以实现快速响应。 + +不过,你不需要从最顶层开始。你可以学习在笔记本电脑或者台式机上[自动][27]完成任务,并通过一个 [好的终端][28] 远程控制系统。 + +Linux 对你的新想法是开放的,并且 [可以进行定制][29]。 + +### 分享文件 + +![Beach with cloudy sky][30] + +无论你是一个新手系统管理员,还是仅仅是要将一个将文件分发给室友,Linux 都可以使 [文件共享变得轻而易举][31]。 + +### 多媒体 + +![Waterfall][32] + +在所有关于编程和服务器的讨论中,人们有时把 Linux 想象成一个充满绿色的 1 和 0 的黑屏。对于我们这些使用它的人来说,Linux 也能 [播放你所有的媒体][33],这并不令人惊讶。 + +### 易于安装 + +![CentOS installation][34] + +以前从来没有安装过操作系统吗?Linux 非常简单。一步一步来,Linux 安装程序会手把手带你完成操作系统的安装,让你在一个小时内感觉到自己是个电脑专家。 + +[来安装 Linux 吧][35]! + +### 试一试 Linux + +![Porteus][36] + +如果你还没有准备好安装 Linux,你可以 _试一试_ Linux。不知道如何开始?它没有你想象的那么吓人。这里给了一些你 [一开始需要考虑的事情][37]。然后选择下载一个发行版,并想出你自己使用 Linux 的 21 个理由。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/linux-reasons + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[ShuyRoy](https://github.com/ShuyRoy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux_keyboard_desktop.png?itok=I2nGw78_ (Linux keys on the keyboard for a desktop computer) +[2]: https://opensource.com/sites/default/files/uploads/game_0ad-egyptianpyramids.jpg (Gaming on Linux) +[3]: https://creativecommons.org/licenses/by-sa/4.0/ +[4]: https://opensource.com/article/21/2/linux-gaming +[5]: https://opensource.com/sites/default/files/uploads/office_libreoffice.jpg (LibreOffice) +[6]: https://linux.cn/article-13133-1.html +[7]: https://opensource.com/sites/default/files/uploads/trust_sddm.jpg (Linux login screen) +[8]: https://opensource.com/article/21/2/linux-community +[9]: https://linux.cn/article-13284-1.html +[10]: https://opensource.com/article/21/2/open-source-security +[11]: https://opensource.com/sites/default/files/uploads/skrooge_1.jpg (Skrooge) +[12]: https://opensource.com/article/21/2/linux-skrooge +[13]: https://opensource.com/article/21/2/linux-tax-software +[14]: https://opensource.com/sites/default/files/uploads/art_mypaint.jpg (MyPaint) +[15]: https://opensource.com/article/21/2/linux-python-video +[16]: https://linux.cn/article-13157-1.html +[17]: https://opensource.com/sites/default/files/uploads/programming_java-netbeans.jpg (NetBeans) +[18]: https://opensource.com/article/21/2/linux-programming +[19]: https://opensource.com/sites/default/files/uploads/packaging_gnome-software.png (Packaging GNOME software) +[20]: https://opensource.com/article/21/2/linux-packaging +[21]: https://linux.cn/article-13160-1.html +[22]: https://opensource.com/article/21/2/linux-wine +[23]: https://opensource.com/sites/default/files/uploads/edge_taylorvick-unsplash.jpg (Data center) +[24]: https://unsplash.com/@tvick +[25]: https://unsplash.com/license +[26]: https://opensource.com/article/21/2/linux-edge-computing +[27]: https://opensource.com/article/21/2/linux-automation +[28]: https://linux.cn/article-13186-1.html +[29]: https://opensource.com/article/21/2/linux-technology +[30]: https://opensource.com/sites/default/files/uploads/cloud_beach-sethkenlon.jpg (Beach with cloudy sky) +[31]: https://linux.cn/article-13192-1.html +[32]: https://opensource.com/sites/default/files/uploads/media_waterfall.jpg (Waterfall) +[33]: https://opensource.com/article/21/2/linux-media-players +[34]: https://opensource.com/sites/default/files/uploads/install_centos8.jpg (CentOS installation) +[35]: https://linux.cn/article-13164-1.html +[36]: https://opensource.com/sites/default/files/uploads/porteus_0.jpg (Porteus) +[37]: https://opensource.com/article/21/2/try-linux diff --git a/published/202105/20210420 5 ways to protect your documents with open source software.md b/published/202105/20210420 5 ways to protect your documents with open source software.md new file mode 100644 index 0000000000..ec773ff7b5 --- /dev/null +++ b/published/202105/20210420 5 ways to protect your documents with open source software.md @@ -0,0 +1,145 @@ +[#]: subject: (5 ways to protect your documents with open source software) +[#]: via: (https://opensource.com/article/21/4/secure-documents-open-source) +[#]: author: (Ksenia Fedoruk https://opensource.com/users/ksenia-fedoruk) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13428-1.html) + +用开源软件保护你的文件的 5 种方法 +====== + +> 控制你自己的数据,使未经授权的用户无法访问它。 + +![](https://img.linux.net.cn/data/attachment/album/202105/27/000829h3fcdd9b6p9v9xx9.jpg) + +用户完全有权利关心他们数据的安全和保障。当你在计算机上创建数据时,希望对其进行独家控制是合理的。 + +有许多方法保护你的文件。在文件系统层面,你可以 [加密你的硬盘][2] 或 [只是加密一个文件][3]。不过,一个好的办公套件为你提供了更多的选择,我收集了五种我用开源软件保护文件的方法。 + +### 5 种保护你的文件的方法 + +#### 1、将文件保存在安全的云存储服务中 + +自托管一个开源的内容管理系统(CMS)平台可以让你完全控制你的数据。你的所有数据都留在你的服务器上,你可以控制谁可以访问它。 + +**选项:** [Nextcloud][4]、[ownCloud][5]、[Pydio][6] 和 [Seafile][7] + +所有这些都提供了存储、同步和共享文件和文件夹、管理内容、文件版本等功能。它们可以很容易地取代 Dropbox、Google Drive 和其他专有的云存储,不用将你的数据放在你不拥有、不维护、不管理的服务器上。 + +上面列出的开源的自托管方式符合 GDPR 和其他保护用户数据的国际法规。它们提供备份和数据恢复选项、审计和监控工具、权限管理和数据加密。 + +![Pydio 审计控制][8] + +*Pydio 细胞中的审计控制。(来源:[Pydio.com][9])* + +#### 2、启用静态、传输和端到端的加密功能 + +我们经常笼统地谈论数据加密,但在加密文件时有几个方面需要考虑: + + * 通过**静态加密**(或磁盘加密),你可以保护存储在你的基础设施内或硬盘上的数据。 + * 在使用 HTTPS 等协议时,**传输加密**会保护流量形式的数据。它可以保护你的数据在从一个地方移动到另一个地方时不被拦截和转换。当你把文件上传到你的云端时,这很重要。 + * **端到端加密**(E2EE)通过在一端加密,在另一端解密来保护数据。除非有解密密钥,否则任何第三方都无法读取你的文件,即使他们干扰了这个过程并获得了这个文件的权限。 + +**选项:** CryptPad、ownCloud、ONLYOFFICE 工作区、Nextcloud 和 Seafile + +ownCloud、ONLYOFFICE 工作区、Nextcloud 和 Seafile 支持所有三层的加密。但它们在实现端到端加密的方式上有所不同。 + + * 在 ownCloud 中,有一个 E2EE 插件,允许你对文件夹共享进行加密。 + * 在 Nextcloud 中,桌面客户端有一个文件夹级别的选项。 + * Seafile 通过创建加密库来提供客户端的 E2EE。 + * [ONLYOFFICE 工作区][10] 不仅允许你在存储和共享文件时对其进行加密,而且还允许你在“私人房间”中实时安全地共同编辑文件。加密数据是自动生成和传输的,并且是自己加密的 —— 你不需要保留或记住任何密码。 + * 正如其名称所示,[CryptPad][11] 是完全私有的。所有的内容都是由你的浏览器进行加密和解密的。这意味着文件、聊天记录和文件在你登录的会话之外是无法阅读的。即使是服务管理员也无法得到你的信息。 + +![加密的 CryptPad 存储][12] + +*加密的 CryptPad 存储。(来源:[Cryptpad.fr][13])* + +#### 3、使用数字签名 + +数字签名可以让你验证你是文件内容的原作者,并且没有对其进行过修改。 + +**选项:** LibreOffice Writer、ONLYOFFICE 桌面编辑器、OpenESignForms 和 SignServer + +[LibreOffice][14] 和 [ONLYOFFICE][15] 套件提供了一个对文件数字签名的集成工具。你可以添加一个在文档文本中可见的签名行,并允许你向其他用户请求签名。 + +一旦你应用了数字签名,任何人都不能编辑该文件。如果有人修改文档,签名就会失效,这样你就会知道内容被修改了。 + +在 ONLYOFFICE 中,你可以在 LibreOffice 中签名 OOXML 文件(例如,DOCX、XLSX、PPTX)作为 ODF 和 PDF。如果你试图在 LibreOffice 中签名一个 OOXML 文件,该签名将被标记为“只有部分文件被签署”。 + +![ONLYOFFICE 中的数字签名][16] + +*ONLYOFFICE 中的数字签名。 (来源:[ONLYOFFICE帮助中心][17])* + +[SignServer][18] 和 [Open eSignForms][19] 是免费的电子签名服务,如果你不需要在编辑器中直接签名文件,你可以使用它们。这两个工具都可以让你处理文档,SignServer 还可以让你签名包括 Java 在内的代码,并应用时间戳。 + +#### 4、添加水印 + +水印可避免你的内容在未经授权的情况下被重新分发,并保护你的文件可能包含的任何机密信息。 + +**选项:**Nextcloud 中的 Collabora Online 或 ONLYOFFICE Docs + +当与 Nextcloud 集成时,[ONLYOFFICE Docs][20] 和 [Collabora][21] 允许你在文件、电子表格和演示文稿中嵌入水印。要激活水印功能,必须以管理员身份登录你的 Nextcloud 实例,并在解决方案的设置页面上进入**安全视图设置**。 + +你可以使用占位符将默认的水印替换成你自己的文本。在打开文件时,水印将针对每个用户单独显示。你也可以定义组来区分将看到水印的用户,并选择必须显示水印的共享类型。 + +![水印][22] + +*水印 (Ksenia Fedoruk, [CC BY-SA 4.0][23])* + +你也可以在 LibreOffice 和 ONLYOFFICE 桌面应用程序中的文档中插入水印。然而,在这种情况下,它只是一个放置在主文本层下的文本或图像,任何人都可以轻易地删除它。 + +#### 5、用密码保护文件 + +密码保护允许你安全地存储和交换本地文件。如果有人访问你的桌面或通过电子邮件或其他方法得到受保护的文件,他们不知道密码就无法打开它。 + +**选项:** Apache OpenOffice、LibreOffice 和 ONLYOFFICE 桌面编辑器 + +所有这三种解决方案都提供了为你的敏感文件设置密码的能力。 + +如果一个受保护的文档对你很重要,强烈建议你使用密码管理器保存密码或记住它,因为 LibreOffice、ONLYOFFICE 和 [OpenOffice][24] 不提供密码恢复选项。因此,如果你忘记或丢失了密码,就没有办法恢复或重置密码并打开文件。 + +### 你的数据属于你 + +使用这些方法中的一种或多种来保护你的文件,以保持更安全的在线活动。现在是 21 世纪,计算机太先进了,不能冒险把你的数据交给你无法控制的服务。使用开源,掌握你的数字生活的所有权。 + +你最喜欢的安全使用文档的工具是什么?请在评论中分享它们。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/secure-documents-open-source + +作者:[Ksenia Fedoruk][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ksenia-fedoruk +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/documents_papers_file_storage_work.png?itok=YlXpAqAJ (Filing papers and documents) +[2]: https://opensource.com/article/21/3/encryption-luks +[3]: https://opensource.com/article/21/3/luks-truecrypt +[4]: https://nextcloud.com/ +[5]: https://owncloud.com/ +[6]: https://pydio.com/ +[7]: https://www.seafile.com/en/home/ +[8]: https://opensource.com/sites/default/files/uploads/pydiocells.png (Pydio audit control) +[9]: http://pydio.com +[10]: https://www.onlyoffice.com/workspace.aspx +[11]: https://cryptpad.fr/ +[12]: https://opensource.com/sites/default/files/uploads/cryptdrive.png (Encrypted CryptPad storage) +[13]: http://cryptpad.fr +[14]: https://www.libreoffice.org/ +[15]: https://www.onlyoffice.com/desktop.aspx +[16]: https://opensource.com/sites/default/files/uploads/onlyoffice_digitalsig.png (Digital signature in ONLYOFFICE) +[17]: http://helpcenter.onlyoffice.com +[18]: https://www.signserver.org/ +[19]: https://github.com/OpenESignForms +[20]: https://www.onlyoffice.com/office-for-nextcloud.aspx +[21]: https://www.collaboraoffice.com/ +[22]: https://opensource.com/sites/default/files/uploads/onlyoffice_watermark.png (Watermark) +[23]: https://creativecommons.org/licenses/by-sa/4.0/ +[24]: https://www.openoffice.org/ diff --git a/published/202105/20210420 A beginner-s guide to network management.md b/published/202105/20210420 A beginner-s guide to network management.md new file mode 100644 index 0000000000..7d5e004bbf --- /dev/null +++ b/published/202105/20210420 A beginner-s guide to network management.md @@ -0,0 +1,203 @@ +[#]: subject: "A beginner's guide to network management" +[#]: via: "https://opensource.com/article/21/4/network-management" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "ddl-hust" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13374-1.html" + +网络管理初学者指南 +====== + +> 了解网络是如何工作的,以及使用开源工具进行网络性能调优的一些窍门。 + +![](https://img.linux.net.cn/data/attachment/album/202105/09/164127umsevtfspssppmsp.jpg) + +大多数人每一天至少会接触到两种类型的网络。当你打开计算机或者移动设备,设备连接到本地 WiFi,本地 WiFi 然后连接到所谓“互联网”的互联网络。 + +但是网络实际上是如何工作的?你的设备如何能够找到互联网、共享打印机或文件共享?这些东西如何知道响应你的设备?系统管理员用什么措施来优化网络的性能? + +开源思想在网络技术领域根深蒂固,因此任何想更多了解网络的人,可以免费获得网络相关的资源。本文介绍了使用开源技术的网络管理相关的基础知识。 + +### 网络是什么? + +计算机网络是由两台或者多台计算机组成的、互相通信的集合。为了使得网络能够工作,网络上一台计算机必须能够找到其他计算机,且通信必须能够从一台计算机到达另外一台。为了解决这一需求,开发和定义了两种不同的通信协议:TCP 和 IP。 + +#### 用于传输的 TCP 协议 + +为了使得计算机之间能够通信,它们之间必须有一种传输信息的手段。人说话产生的声音是通过声波来传递的,计算机是通过以太网电缆、无线电波或微波传输的数字信号进行通信的。这方面的规范被正式定义为 [TCP 协议][2]。 + +#### 用于寻址的 IP 协议 + +计算机必须有一些识别手段才能相互寻址。当人类相互称呼时,我们使用名字和代名词。当计算机相互寻址时,它们使用 IP 地址,如 `192.168.0.1`,IP 地址可以被映射到名称上,如“Laptop”、“Desktop”、“Tux” 或 “Penguin”。这方面的规范被定义为 [IP 协议][3]。 + +### 最小配置设置 + +最简单的网络是一个两台计算机的网络,使用称为“交叉电缆”的特殊布线方式的以太网电缆。交叉电缆将来自一台计算机的信号连接并传输到另一台计算机上的适当受体。还有一些交叉适配器可以将标准的以太网转换为交叉电缆。 + +![Crossover cable][4] + +由于在这两台计算机之间没有路由器,所有的网络管理都必须在每台机器上手动完成,因此这是一个很好的网络基础知识的入门练习。 + +用一根交叉电缆,你可以把两台计算机连接在一起。因为这两台计算机是直接连接的,没有网络控制器提供指导,所以这两台计算机都不用做什么创建网络或加入网络的事情。通常情况下,这项任务会由交换机和 DHCP 服务器或路由器来提示,但在这个简单的网络设置中,这一切都由你负责。 + +要创建一个网络,你必须先为每台计算机分配一个 IP 地址,为自行分配而保留的地址从 169.254 开始,这是一个约定俗成的方式,提醒你本 IP 段是一个闭环系统。 + +#### 找寻网络接口 + +首先,你必须知道你正在使用什么网络接口。以太网端口通常用 “eth” 加上一个从 0 开始的数字来指定,但有些设备用不同的术语来表示接口。你可以用 `ip` 命令来查询计算机上的接口: + +``` +$ ip address show +1: lo: mtu 65536 ... + link/loopback 00:00:00:00:00:00 brd ... + inet 127.0.0.1/8 scope host lo + valid_lft forever preferred_lft forever + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever +2: eth0: ... + link/ether dc:a6:32:be:a3:e1 brd ... +3: wlan0: ... + link/ether dc:a6:32:be:a3:e2 brd ... +``` + +在这个例子中,`eth0` 是正确的接口名称。然而,在某些情况下,你会看到 `en0` 或 `enp0s1` 或类似的东西,所以在使用设备名称之前,一定要先检查它。 + +#### 分配 IP 地址 + +通常情况下,IP 地址是从路由器获得的,路由器在网络上广播提供地址。当一台计算机连接到一个网络时,它请求一个地址。路由器通过介质访问控制(MAC)地址识别设备(注意这个 MAC 与苹果 Mac 电脑无关),并被分配 IP 地址。这就是计算机在网络上找到彼此的方式。 + +在本文的简单网络中,没有路由器来分配 IP 地址及注册设备,因此我们需要手动分配 IP 地址,使用 `ip` 命令来给计算机分配 IP 地址: + +``` +$ sudo ip address add 169.254.0.1 dev eth0 +``` + +给另外一台计算机分配 IP 地址,将 IP 地址增 1: + +``` +$ sudo ip address add 169.254.0.2 dev eth0 +``` + +现在计算机有了交叉电缆作为通信介质,有了独一无二的 IP 地址用来识别身份。但是这个网络还缺少一个重要成分:计算机不知道自己是网络的一部分。 + +#### 设置路由 + +路由器另外的一个功能是设置从一个地方到另一个地方的网络路径,称作路由表,路由表可以简单的看作网络的城市地图。 + +虽然现在我们还没有设置路由表,但是我们可以通过 `route` 命令来查看路由表: + +``` +$ route +Kernel IP routing table +Destination | Gateway | Genmask | Flags|Metric|Ref | Use | Iface +$ +``` + +同样,你可以通过 `ip` 命令来查看路由表: + +``` +$ ip route +$ +``` + +通过 `ip` 命令添加一条路由信息: + +``` +$ sudo ip route \ + add 169.254.0.0/24 \ + dev eth0 \ + proto static +``` + +这条命令为 `eth0` 接口添加一个地址范围(从 `169.254.0.0` 开始到 `169.254.0.255` 结束)的路由。它将路由协议设置为“静态”,表示作为管理员的你创建了这个路由,作为对该范围内的任何动态路由进行覆盖。 + +通过 `route` 命令来查询路由表: + +``` +$ route +Kernel IP routing table +Destination | Gateway | Genmask       | ... | Iface +link-local  | 0.0.0.0 | 255.255.255.0 | ... | eth0 +``` + +或者使用`ip`命令从不同角度来查询路由表: + +``` +$ ip route +169.254.0.0/24 dev eth0 proto static scope link +``` + +#### 探测相邻网络 + +现在,你的网络有了传输方式、寻址方法以及网络路由。你可以联系到你的计算机以外的主机。向另一台计算机发送的最简单的信息是一个 “呯”,这也是产生该信息的命令的名称(`ping`)。 + +``` +$ ping -c1 169.254.0.2 +64 bytes from 169.254.0.2: icmp_seq=1 ttl=64 time=0.233 ms + +--- 169.254.0.2 ping statistics --- +1 packets transmitted, 1 received, 0% packet loss, time 0ms +rtt min/avg/max/mdev = 0.244/0.244/0.244/0.000 ms +``` + +你可以通过下面的命令看到与你交互的邻居: + +``` +$ ip neighbour +169.254.0.2 dev eth0 lladdr e8:6a:64:ac:ef:7c STALE +``` + +### 通过交换机扩展你的网络 + +只需要双节点的网络并不多。为了解决这个问题,人们开发了特殊的硬件,称为网络“交换机”。网络交换机允许你将几条以太网电缆连接到它上面,它将消息不加区分地从发送消息的计算机分发到交换机上所有监听的计算机。除了拥有与预期接收者相匹配的 IP 地址的计算机外,其他所有计算机都会忽略该信息。这使得网络变得相对嘈杂,但这是物理上,将一组计算机连接在一起的简单方法。 + +在大多数现代家庭网络中,用于物理电缆的物理交换机并不实用。所以 WiFi 接入点代替了物理交换机。WiFi 接入点的功能与交换机相同:它允许许多计算机连接到它并在它们之间传递信息。 + +接入互联网不仅仅是一种期望,它通常是家庭网络存在的原因。没有接入互联网的交换机或 WiFi 接入点不是很有用,但要将你的网络连接到另一个网络,你需要一个路由器。 + +#### 添加路由器 + +实际上,本地网络连接了许多设备,并且越来越多的设备具备联网能力,使得网络的规模呈数量级级别增长。 + +手动配置网络是不切实际的,因此这些任务分配给网络中特定的节点来处理,网络中每台计算机运行一个后台守护进程,以填充从网络上的权威服务器收到的网络设置。家庭网络中,这些工作通常被整合到一个小型嵌入式设备中,通常由你的互联网服务提供商(ISP)提供,称为**路由器**(人们有时错误地将其称为调制解调器)。在一个大型网络中,每项工作通常被分配到一个单独的专用服务器上,以确保专用服务器能够专注于自己的工作以及保证工作弹性。这些任务包括: + +- DHCP 服务器,为加入网络的设备分配和跟踪 IP 地址 +- DNS 服务器将诸如域名 [redhat.com][7] 转换成 IP 地址 `209.132.183.105` +- [防火墙][8] 保护你的网络免受不需要的传入流量或被禁止的传出流量 +- 路由器有效传输网络流量,作为其他网络(如互联网)的网关,并进行网络地址转换(NAT) + +你现在的网络上可能有一个路由器,它可能管理着所有这些任务,甚至可能更多。感谢像 VyOS 这样的项目,现在你可以运行 [自己的开源路由器][9]。对于这样一个项目,你应该使用一台专门的计算机,至少有两个网络接口控制器(NIC):一个连接到你的 ISP,另一个连接到交换机,或者更有可能是一个 WiFi 接入点。 + +### 扩大你的知识规模 + +无论你的网络上有多少设备,或你的网络连接到多少其他网络,其原则仍然与你的双节点网络相同。你需要一种传输方式,一种寻址方案,以及如何路由到网络的知识。 + +### 网络知识速查表 + +了解网络是如何运作的,对管理网络至关重要。除非你了解你的测试结果,否则你无法排除问题,除非你知道哪些命令能够与你的网络设备交互,否则你无法运行测试。对于重要的网络命令的基本用法以及你可以用它们提取什么样的信息,[请下载我们最新的网络速查表][10]。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/network-management + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[ddl-hust](https://github.com/ddl-hust) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/gears_devops_learn_troubleshooting_lightbulb_tips_520.png?itok=HcN38NOk "Tips and gears turning" +[2]: https://tools.ietf.org/html/rfc793 +[3]: https://tools.ietf.org/html/rfc791 +[4]: https://opensource.com/sites/default/files/uploads/crossover.jpg "Crossover cable" +[5]: https://creativecommons.org/licenses/by-sa/4.0/ +[6]: https://opensource.com/article/17/4/build-your-own-name-server +[7]: http://redhat.com +[8]: https://www.redhat.com/sysadmin/secure-linux-network-firewall-cmd +[9]: https://opensource.com/article/20/1/open-source-networking +[10]: https://opensource.com/downloads/cheat-sheet-networking \ No newline at end of file diff --git a/published/202105/20210420 Application observability with Apache Kafka and SigNoz.md b/published/202105/20210420 Application observability with Apache Kafka and SigNoz.md new file mode 100644 index 0000000000..e61e766e37 --- /dev/null +++ b/published/202105/20210420 Application observability with Apache Kafka and SigNoz.md @@ -0,0 +1,135 @@ +[#]: subject: (Application observability with Apache Kafka and SigNoz) +[#]: via: (https://opensource.com/article/21/4/observability-apache-kafka-signoz) +[#]: author: (Nitish Tiwari https://opensource.com/users/tiwarinitish86) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13352-1.html) + +使用 Apache Kafka 和 SigNoz 实现应用可观测性 +====== + +> SigNoz 帮助开发者使用最小的精力快速实现他们的可观测性目标。 + +![](https://img.linux.net.cn/data/attachment/album/202105/01/231703oy5ln5nnqkuhxt1t.jpg) + +SigNoz 是一个开源的应用可观察性平台。SigNoz 是用 React 和 Go 编写的,它从头到尾都是为了让开发者能够以最小的精力尽快实现他们的可观察性目标。 + +本文将详细介绍该软件,包括架构、基于 Kubernetes 的部署以及一些常见的 SigNoz 用途。 + +### SigNoz 架构 + +SigNoz 将几个组件捆绑在一起,创建了一个可扩展的、耦合松散的系统,很容易上手使用。其中一些最重要的组件有: + + * OpenTelemetry Collector + * Apache Kafka + * Apache Druid + +[OpenTelemetry Collector][2] 是跟踪或度量数据收集引擎。这使得 SigNoz 能够以行业标准格式获取数据,包括 Jaeger、Zipkin 和 OpenConsensus。之后,收集的数据被转发到 Apache Kafka。 + +SigNoz 使用 Kafka 和流处理器来实时获取大量的可观测数据。然后,这些数据被传递到 Apache Druid,它擅长于存储这些数据,用于短期和长期的 SQL 分析。 + +当数据被扁平化并存储在 Druid 中,SigNoz 的查询服务可以查询并将数据传递给 SigNoz React 前端。然后,前端为用户创建漂亮的图表,使可观察性数据可视化。 + +![SigNoz architecture][3] + +### 安装 SigNoz + +SigNoz 的组件包括 Apache Kafka 和 Druid。这些组件是松散耦合的,并协同工作,以确保终端用户的无缝体验。鉴于这些组件,最好将 SigNoz 作为 Kubernetes 或 Docker Compose(用于本地测试)上的微服务组合来运行。 + +这个例子使用基于 Kubernetes Helm Chart 的部署在 Kubernetes 上安装 SigNoz。作为先决条件,你需要一个 Kubernetes 集群。如果你没有可用的 Kubernetes 集群,你可以使用 [MiniKube][5] 或 [Kind][6] 等工具,在你的本地机器上创建一个测试集群。注意,这台机器至少要有 4GB 的可用空间才能工作。 + +当你有了可用的集群,并配置了 kubectl 来与集群通信,运行: + +``` +$ git clone https://github.com/SigNoz/signoz.git && cd signoz +$ helm dependency update deploy/kubernetes/platform +$ kubectl create ns platform +$ helm -n platform install signoz deploy/kubernetes/platform +$ kubectl -n platform apply -Rf deploy/kubernetes/jobs +$ kubectl -n platform apply -f deploy/kubernetes/otel-collector +``` + +这将在集群上安装 SigNoz 和相关容器。要访问用户界面 (UI),运行 `kubectl port-forward` 命令。例如: + +``` +$ kubectl -n platform port-forward svc/signoz-frontend 3000:3000 +``` + +现在你应该能够使用本地浏览器访问你的 SigNoz 仪表板,地址为 `http://localhost:3000`。 + +现在你的可观察性平台已经建立起来了,你需要一个能产生可观察性数据的应用来进行可视化和追踪。对于这个例子,你可以使用 [HotROD][7],一个由 Jaegar 团队开发的示例应用。 + +要安装它,请运行: + +``` +$ kubectl create ns sample-application +$ kubectl -n sample-application apply -Rf sample-apps/hotrod/ +``` + +### 探索功能 + +现在你应该有一个已经安装合适仪表的应用,并可在演示设置中运行。看看 SigNoz 仪表盘上的指标和跟踪数据。当你登录到仪表盘的主页时,你会看到一个所有已配置的应用列表,这些应用正在向 SigNoz 发送仪表数据。 + +![SigNoz dashboard][8] + +#### 指标 + +当你点击一个特定的应用时,你会登录到该应用的主页上。指标页面显示最近 15 分钟的信息(这个数字是可配置的),如应用的延迟、平均吞吐量、错误率和应用目前访问最高的接口。这让你对应用的状态有一个大概了解。任何错误、延迟或负载的峰值都可以立即看到。 + +![Metrics in SigNoz][9] + +#### 追踪 + +追踪页面按时间顺序列出了每个请求的高层细节。当你发现一个感兴趣的请求(例如,比预期时间长的东西),你可以点击追踪,查看该请求中发生的每个行为的单独时间跨度。下探模式提供了对每个请求的彻底检查。 + +![Tracing in SigNoz][10] + +![Tracing in SigNoz][11] + +#### 用量资源管理器 + +大多数指标和跟踪数据都非常有用,但只在一定时期内有用。随着时间的推移,数据在大多数情况下不再有用。这意味着为数据计划一个适当的保留时间是很重要的。否则,你将为存储支付更多的费用。用量资源管理器提供了每小时、每一天和每一周获取数据的概况。 + +![SigNoz Usage Explorer][12] + +### 添加仪表 + +到目前为止,你一直在看 HotROD 应用的指标和追踪。理想情况下,你会希望对你的应用进行检测,以便它向 SigNoz 发送可观察数据。参考 SigNoz 网站上的[仪表概览][13]。 + +SigNoz 支持一个与供应商无关的仪表库,OpenTelemetry,作为配置仪表的主要方式。OpenTelemetry 提供了各种语言的仪表库,支持自动和手动仪表。 + +### 了解更多 + +SigNoz 帮助开发者快速开始度量和跟踪应用。要了解更多,你可以查阅 [文档][14],加入[社区][15],并访问 [GitHub][16] 上的源代码。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/observability-apache-kafka-signoz + +作者:[Nitish Tiwari][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/tiwarinitish86 +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/ship_captain_devops_kubernetes_steer.png?itok=LAHfIpek (Ship captain sailing the Kubernetes seas) +[2]: https://github.com/open-telemetry/opentelemetry-collector +[3]: https://opensource.com/sites/default/files/uploads/signoz_architecture.png (SigNoz architecture) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://minikube.sigs.k8s.io/docs/start/ +[6]: https://kind.sigs.k8s.io/docs/user/quick-start/ +[7]: https://github.com/jaegertracing/jaeger/tree/master/examples/hotrod +[8]: https://opensource.com/sites/default/files/uploads/signoz_dashboard.png (SigNoz dashboard) +[9]: https://opensource.com/sites/default/files/uploads/signoz_applicationmetrics.png (Metrics in SigNoz) +[10]: https://opensource.com/sites/default/files/uploads/signoz_tracing.png (Tracing in SigNoz) +[11]: https://opensource.com/sites/default/files/uploads/signoz_tracing2.png (Tracing in SigNoz) +[12]: https://opensource.com/sites/default/files/uploads/signoz_usageexplorer.png (SigNoz Usage Explorer) +[13]: https://signoz.io/docs/instrumentation/overview/ +[14]: https://signoz.io/docs/ +[15]: https://github.com/SigNoz/signoz#community +[16]: https://github.com/SigNoz/signoz diff --git a/published/202105/20210421 Build smaller containers.md b/published/202105/20210421 Build smaller containers.md new file mode 100644 index 0000000000..5d54b9d024 --- /dev/null +++ b/published/202105/20210421 Build smaller containers.md @@ -0,0 +1,345 @@ +[#]: subject: (Build smaller containers) +[#]: via: (https://fedoramagazine.org/build-smaller-containers/) +[#]: author: (Daniel Schier https://fedoramagazine.org/author/danielwtd/) +[#]: collector: (lujun9972) +[#]: translator: (ShuyRoy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13382-1.html) + +如何构建更小的容器 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/12/112108han4e111a6v16act.jpg) + +使用容器工作是很多用户和开发者的日常任务。容器开发者经常需要频繁地(重新)构建容器镜像。如果你开发容器,你有想过减小镜像的大小吗?较小的镜像有一些好处。在下载的时候所需要的带宽更少,而且在云环境中运行的时候也可以节省开销。而且在 Fedora [CoreOS][4]、[IoT][5] 以及[Silverblue][6] 上使用较小的容器镜像可以提升整体系统性能,因为这些操作系统严重依赖于容器工作流。这篇文章将会提供一些减小容器镜像大小的技巧。 + +### 工具 + +以下例子所用到的主机操作系统是 Fedora Linux 33。例子使用 [Podman][7] 3.1.0 和[Buildah][8] 1.2.0。Podman 和 Buildah 已经预装在大多数 Fedora Linux 变种中。如果你没有安装 Podman 和 Buildah,可以用下边的命令安装: + +``` +$ sudo dnf install -y podman buildah +``` + +### 任务 + +从一个基础的例子开始。构建一个满足以下需求的 web 容器: + + * 容器必须基于 Fedora Linux + * 使用 Apache httpd web 服务器 + * 包含一个定制的网站 + * 容器应该比较小 + +下边的步骤也适用于比较复杂的镜像。 + +### 设置 + +首先,创建一个工程目录。这个目录将会包含你的网站和容器文件: + +``` +$ mkdir smallerContainer +$ cd smallerContainer +$ mkdir files +$ touch files/index.html +``` + +制作一个简单的登录页面。对于这个演示,你可以将下面的 HTML 复制到 `index.html` 文件中。 + +``` + + + + + Container Page + + + +
+

Container Page

+
+
+

Fedora

+ +

Podman

+ +

Buildah

+ +

Skopeo

+ +

CRI-O

+ +
+ + + +``` + +此时你可以选择在浏览器中测试上面的 `index.html` 文件: + +``` +$ firefox files/index.html +``` + +最后,创建一个容器文件。这个文件可以命名为 `Dockerfile` 或者 `Containerfile`: + +``` +$ touch Containerfile +``` + +现在你应该有了一个工程目录,并且该目录中的文件系统布局如下: + +``` +smallerContainer/ +|- files/ +| |- index.html +| +|- Containerfile +``` + +### 构建 + +现在构建镜像。下边的每个阶段都会添加一层改进来帮助减小镜像的大小。你最终会得到一系列镜像,但只有一个 `Containerfile`。 + +#### 阶段 0:一个基本的容器镜像 + +你的新镜像将会非常简单,它只包含强制性步骤。在 `Containerfile` 中添加以下内容: + +``` +# 使用 Fedora 33 作为基镜像 +FROM registry.fedoraproject.org/fedora:33 + +# 安装 httpd +RUN dnf install -y httpd + +# 复制这个网站 +COPY files/* /var/www/html/ + +# 设置端口为 80/tcp +EXPOSE 80 + +# 启动 httpd +CMD ["httpd", "-DFOREGROUND"] +``` + +在上边的文件中有一些注释来解释每一行内容都是在做什么。更详细的步骤: + + 1. 在 `FROM registry.fedoraproject.org/fedora:33` 的基础上创建一个构建容器 + 2. 运行命令: `dnf install -y httpd` + 3. 将与 `Containerfile` 有关的文件拷贝到容器中 + 4. 设置 `EXPOSE 80` 来说明哪个端口是可以自动设置的 + 5. 设置一个 `CMD` 指令来说明如果从这个镜像创建一个容器应该运行什么 + +运行下边的命令从工程目录创建一个新的镜像: + +``` +$ podman image build -f Containerfile -t localhost/web-base +``` + +使用一下命令来查看你的镜像的属性。注意你的镜像的大小(467 MB)。 + +``` +$ podman image ls +REPOSITORY TAG IMAGE ID CREATED SIZE +localhost/web-base latest ac8c5ed73bb5 5 minutes ago 467 MB +registry.fedoraproject.org/fedora 33 9f2a56037643 3 months ago 182 MB +``` + +以上这个例子中展示的镜像在现在占用了467 MB的空间。剩下的阶段将会显著地减小镜像的大小。但是首先要验证镜像是否能够按照预期工作。 + +输入以下命令来启动容器: + +``` +$ podman container run -d --name web-base -P localhost/web-base +``` + +输入以下命令可以列出你的容器: + +``` +$ podman container ls +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +d24063487f9f localhost/web-base httpd -DFOREGROUN... 2 seconds ago Up 3 seconds ago 0.0.0.0:46191->80/tcp web-base +``` + +以上展示的容器正在运行,它正在监听的端口是 `46191` 。从运行在主机操作系统上的 web 浏览器转到 `localhost:46191` 应该呈现你的 web 页面: + +``` +$ firefox localhost:46191 +``` + +#### 阶段 1:清除缓存并将残余的内容从容器中删除 + +为了优化容器镜像的大小,第一步应该总是执行“清理”。这将保证安装和打包所残余的内容都被删掉。这个过程到底需要什么取决于你的容器。对于以上的例子,只需要编辑 `Containerfile` 让它包含以下几行。 + +``` +[...] +# Install httpd +RUN dnf install -y httpd && \ + dnf clean all -y +[...] +``` + +构建修改后的 `Containerfile` 来显著地减小镜像(这个例子中是 237 MB)。 + +``` +$ podman image build -f Containerfile -t localhost/web-clean +$ podman image ls +REPOSITORY TAG IMAGE ID CREATED SIZE +localhost/web-clean latest f0f62aece028 6 seconds ago 237 MB +``` + +#### 阶段 2:删除文档和不需要的依赖包 + +许多包在安装时会被建议拉下来,包含一些弱依赖和文档。这些在容器中通常是不需要的,可以删除。 `dnf` 命令有选项可以表明它不需要包含弱依赖或文档。 + +再次编辑 `Containerfile` ,并在 `dnf install` 行中添加删除文档和弱依赖的选项: + +``` +[...] +# Install httpd +RUN dnf install -y httpd --nodocs --setopt install_weak_deps=False && \ + dnf clean all -y +[...] +``` + +构建经过以上修改后的 `Containerfile` 可以得到一个更小的镜像(231 MB)。 + +``` +$ podman image build -f Containerfile -t localhost/web-docs +$ podman image ls +REPOSITORY TAG IMAGE ID CREATED SIZE +localhost/web-docs latest 8a76820cec2f 8 seconds ago 231 MB +``` + +#### 阶段 3:使用更小的容器基镜像 + +前面的阶段结合起来,使得示例镜像的大小减少了一半。但是仍然还有一些途径来进一步减小镜像的大小。这个基镜像 `registry.fedoraproject.org/fedora:33` 是通用的。它提供了一组软件包,许多人希望这些软件包预先安装在他们的 Fedora Linux 容器中。但是,通用的 Fedora Linux 基镜像中提供的包通常必须要的更多。Fedora 项目也为那些希望只从基本包开始,然后只添加所需内容来实现较小总镜像大小的用户提供了一个 `fedora-minimal` 镜像。 + +使用 `podman image search` 来查找 `fedora-minimal` 镜像,如下所示: + +``` +$ podman image search fedora-minimal +INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED +fedoraproject.org registry.fedoraproject.org/fedora-minimal 0 +``` + +`fedora-minimal` 基镜像不包含 [DNF][9],而是倾向于使用不需要 Python 的较小的 [microDNF][10]。当 `registry.fedoraproject.org/fedora:33` 被 `registry.fedoraproject.org/fedora-minimal:33` 替换后,需要用 `microdnf` 命令来替换 `dnf`。 + +``` +# 使用 Fedora minimal 33 作为基镜像 +FROM registry.fedoraproject.org/fedora-minimal:33 + +# 安装 httpd +RUN microdnf install -y httpd --nodocs --setopt install_weak_deps=0 && \ + microdnf clean all -y +[...] +``` +使用 `fedora-minimal` 重新构建后的镜像大小如下所示 (169 MB): + +``` +$ podman image build -f Containerfile -t localhost/web-docs +$ podman image ls +REPOSITORY TAG IMAGE ID CREATED SIZE +localhost/web-minimal latest e1603bbb1097 7 minutes ago 169 MB +``` + +最开始的镜像大小是 **467 MB**。结合以上每个阶段所提到的方法,进行重新构建之后可以得到最终大小为 **169 MB** 的镜像。最终的 _总_ 镜像大小比最开始的 _基_ 镜像小了 182 MB! + +### 从零开始构建容器 + +前边的内容使用一个容器文件和 Podman 来构建一个新的镜像。还有最后一个方法要展示——使用 Buildah 来从头构建一个容器。Podman 使用与 Buildah 相同的库来构建容器。但是 Buildah 被认为是一个纯构建工具。Podman 被设计来是为了代替 Docker 的。 + +使用 Buildah 从头构建的容器是空的——它里边什么都 _没有_ 。所有的东西都需要安装或者从容器外复制。幸运地是,使用 Buildah 相当简单。下边是一个从头开始构建镜像的小的 Bash 脚本。除了运行这个脚本,你也可以在终端逐条地运行脚本中的命令,来更好的理解每一步都是做什么的。 + +``` +#!/usr/bin/env bash +set -o errexit + +# 创建一个容器 +CONTAINER=$(buildah from scratch) + +# 挂载容器文件系统 +MOUNTPOINT=$(buildah mount $CONTAINER) + +# 安装一个基本的文件系统和最小的包以及 nginx +dnf install -y --installroot $MOUNTPOINT --releasever 33 glibc-minimal-langpack httpd --nodocs --setopt install_weak_deps=False + +dnf clean all -y --installroot $MOUNTPOINT --releasever 33 + +# 清除 +buildah unmount $CONTAINER + +# 复制网站 +buildah copy $CONTAINER 'files/*' '/var/www/html/' + +# 设置端口为 80/tcp +buildah config --port 80 $CONTAINER + +# 启动 httpd +buildah config --cmd "httpd -DFOREGROUND" $CONTAINER + +# 将容器保存为一个镜像 +buildah commit --squash $CONTAINER web-scratch +``` + +或者,可以通过将上面的脚本传递给 Buildah 来构建镜像。注意不需要 root 权限。 + +``` +$ buildah unshare bash web-scratch.sh +$ podman image ls +REPOSITORY TAG IMAGE ID CREATED SIZE +localhost/web-scratch latest acca45fc9118 9 seconds ago 155 MB +``` + +最后的镜像只有 **155 MB**!而且 [攻击面][11] 也减少了。甚至在最后的镜像中都没有安装 DNF(或者 microDNF)。 + +### 结论 + +构建一个比较小的容器镜像有许多优点。减少所需要的带宽、磁盘占用以及攻击面,都会得到更好的镜像。只用很少的更改来减小镜像的大小很简单。许多更改都可以在不改变结果镜像的功能下完成。 + +只保存所需的二进制文件和配置文件来构建非常小的镜像也是可能的。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/build-smaller-containers/ + +作者:[Daniel Schier][a] +选题:[lujun9972][b] +译者:[ShuyRoy](https://github.com/Shuyroy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/danielwtd/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/04/podman-smaller-1-816x345.jpg +[2]: https://unsplash.com/@errbodysaycheese?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[3]: https://unsplash.com/s/photos/otter?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[4]: https://fedoramagazine.org/getting-started-with-fedora-coreos/ +[5]: https://getfedora.org/en/iot/ +[6]: https://fedoramagazine.org/what-is-silverblue/ +[7]: https://podman.io/ +[8]: https://buildah.io/ +[9]: https://github.com/rpm-software-management/dnf +[10]: https://github.com/rpm-software-management/microdnf +[11]: https://en.wikipedia.org/wiki/Attack_surface diff --git a/published/202105/20210422 Running Linux Apps In Windows Is Now A Reality.md b/published/202105/20210422 Running Linux Apps In Windows Is Now A Reality.md new file mode 100644 index 0000000000..b28e1eb194 --- /dev/null +++ b/published/202105/20210422 Running Linux Apps In Windows Is Now A Reality.md @@ -0,0 +1,117 @@ +[#]: subject: (Running Linux Apps In Windows Is Now A Reality) +[#]: via: (https://news.itsfoss.com/linux-gui-apps-wsl/) +[#]: author: (Jacob Crume https://news.itsfoss.com/author/jacob/) +[#]: collector: (lujun9972) +[#]: translator: (Kevin3599) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13376-1.html) + +在 Windows 中运行基于 Linux 的应用程序已经成为现实 +====== + +> 微软宣布对其 WSL 进行重大改进,使你能够轻松地运行 Linux 图形化应用程序。 + +![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/linux-apps-windows.png?w=1200&ssl=1) + +当微软在 2016 年发布 “Windows subsystem for Linux”(也就是 WSL)的时候显然有夸大宣传的嫌疑,当时人们梦想着无需重启就可以同时运行基于 Windows 和 Linux 的应用程序,令人可惜的是,WSL 只能运行 Linux 终端程序。 + +去年,微软再次尝试去颠覆 Windows 的应用生态,这一次,他们替换了老旧的模拟核心,转而使用了真正的 Linux 核心,这一变化使你可以 [在 Windows 中运行 Linux 应用程序][2]。 + +### WSL 图形化应用的初步预览 + +![https://youtu.be/f8_nvJzuaSU](https://img.linux.net.cn//static/video/Introducing%20Linux%20GUI%20apps%20running%20on%20Windows%20using%20the%20Windows%20Subsystem%20for%20Linux%20%28WSL%29-f8_nvJzuaSU.mp4) + +从技术上讲,用户最初确实在 WSL 上获得了对 Linux 图形化应用程序的支持,但仅限于使用第三方 X 服务器时。这通常是不稳定的、缓慢、难以设置,并且使人们有隐私方面的顾虑。 + +结果是小部分 Linux 爱好者(碰巧运行 Windows),他们具有设置 X 服务器的能力。但是,这些爱好者对没有硬件加速支持感到失望。 + +所以,较为明智的方法是在 WSL 上只运行基于命令行的程序。 + +**但是现在这个问题得到了改善**。现在,微软 [正式支持][4] 了 Linux 图形化应用程序,我们很快就能够享受硬件加速了, + +### 面向大众的 Linux 图形化应用程序:WSLg + +![图片来源:Microsoft Devblogs][5] + +随着微软发布新的 WSL,有了一系列巨大的改进,它们包括: + + * GPU 硬件加速 + * 开箱即用的音频和麦克风支持 + * 自动启用 X 服务器和 Pulse 音频服务 + +有趣的是,开发者们给这个功能起了一个有趣的外号 “WSLg”。 + +这些功能将使在 WSL 上运行 Linux 应用程序几乎与运行原生应用程序一样容易,同时无需占用过多性能资源。 + +因此,你可以尝试运行 [自己喜欢的 IDE][6]、特定于 Linux 的测试用例以及诸如 [CAD][7] 之类的各种软件。 + +#### Linux 应用的 GPU 硬件加速 + +![图片鸣谢:Microsoft Devblogs][8] + +以前在 Windows 上运行图形化 Linux 程序的最大问题之一是它们无法使用硬件加速。当用户尝试移动窗口和执行任何需要对 GPU 性能有要求的任务时候,它常常陷入缓慢卡顿的局面。 + +根据微软发布的公告: + +> “作为此次更新的一部分,我们也启用了对 3D 图形的 GPU 加速支持,多亏了 Mesa 21.0 中完成的工作,所有的复杂 3D 渲染的应用程序都可以利用 OpenGL 在 Windows 10 上使用 GPU 为这些应用程序提供硬件加速。” + +这是一个相当实用的改进,这对用户在 WSL 下运行需求强大 GPU 性能的应用程序提供了莫大帮助。 + +#### 开箱即用的音频和麦克风支持! + +如果想要良好的并行 Windows 和 Linux 程序,好的音频支持是必不可少的,随着新的 WSL 发布,音频得到开箱即用的支持,这都要归功于随着 X 服务器一同启动的 Pulse 音频服务。 + +微软解释说: + +> “WSL 上的 Linux 图形化应用程序还将包括开箱即用的音频和麦克风支持。这一令人兴奋的改进将使你的应用程序可以播放音频提示并调用麦克风,适合构建、测试或使用电影播放器、电信应用程序等。” + +如果我们希望 Linux 变得更加普及,这是一项关键功能。这也将允许 Windows 应用的开发人员更好地将其应用移植到 Linux。 + +#### 自动启动所有必需的服务器 + +![图片鸣谢:Microsoft Devblogs][9] + +以前,你必须先手动启动 [PulseAudio][10] 和 [X 服务器][11],然后才能运行应用程序。现在,微软已经实现了一项服务,可以检查 Linux 应用程序是否正在运行,然后自动启动所需的服务器。 + +这使得用户更容易在 Windows 上运行 Linux 应用程序。 + +微软声称这些改动会显著提升用户体验。 + +> “借助此功能,我们将启动一个配套的系统分发包,其中包含 Wayland、X 服务器、Pulse 音频服务以及使 Linux 图形化应用程序与 Windows 通信所需的所有功能。使用完图形化应用程序并终止 WSL 发行版后,系统分发包也会自动结束其会话。” + +这些组件的结合使 Linux 图形化应用程序与常规 Windows 程序并行运行更为简单。 + +### 总结 + +有了这些新功能,微软似乎正在竭尽全力使 Linux 应用程序在 Windows 上运行。随着越来越多的用户在 Windows 上运行 Linux 应用程序,我们可能会看到更多的用户转向 Linux。特别是因为他们习惯的应用程序能够运行。 + +如果这种做法取得了成功(并且微软几年后仍未将其雪藏),它将结束 5 年来对将 Linux 应用引入 Windows 的探索。如果你想了解更多信息,可以查看 [发行公告][12]。 + +你对在 Windows 上运行 Linux 图形化应用程序怎么看?请在下面留下你的评论。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/linux-gui-apps-wsl/ + +作者:[Jacob Crume][a] +选题:[lujun9972][b] +译者:[Kevin3599](https://github.com/Kevin3599) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/jacob/ +[b]: https://github.com/lujun9972 +[1]: https://docs.microsoft.com/en-us/windows/wsl/ +[2]: https://itsfoss.com/run-linux-apps-windows-wsl/ +[3]: https://i0.wp.com/i.ytimg.com/vi/f8_nvJzuaSU/hqdefault.jpg?w=780&ssl=1 +[4]: https://devblogs.microsoft.com/commandline/the-initial-preview-of-gui-app-support-is-now-available-for-the-windows-subsystem-for-linux-2/ +[5]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/gedit-wsl-gui.png?w=800&ssl=1 +[6]: https://itsfoss.com/best-modern-open-source-code-editors-for-linux/ +[7]: https://itsfoss.com/cad-software-linux/ +[8]: https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/gpu-acceleration-wsl.png?w=800&ssl=1 +[9]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/wslg-architecture.png?w=800&ssl=1 +[10]: https://www.freedesktop.org/wiki/Software/PulseAudio/ +[11]: https://x.org/wiki/ +[12]: https://blogs.windows.com/windows-insider/2021/04/21/announcing-windows-10-insider-preview-build-21364/ diff --git a/published/202105/20210423 What-s New in Ubuntu MATE 21.04.md b/published/202105/20210423 What-s New in Ubuntu MATE 21.04.md new file mode 100644 index 0000000000..870b8c13fc --- /dev/null +++ b/published/202105/20210423 What-s New in Ubuntu MATE 21.04.md @@ -0,0 +1,107 @@ +[#]: subject: (What’s New in Ubuntu MATE 21.04) +[#]: via: (https://news.itsfoss.com/ubuntu-mate-21-04-release/) +[#]: author: (Asesh Basu https://news.itsfoss.com/author/asesh/) +[#]: collector: (lujun9972) +[#]: translator: (Kevin3599) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13349-1.html) + +Ubuntu MATE 21.04 更新,多项新功能来袭 +====== + +> 与 Yaru 团队合作,Ubuntu MATE 带来了一个主题大修、一系列有趣的功能和性能改进。 + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/ubuntu-21-04-mate-release.png?w=1200&ssl=1) + +自从 18.10 发行版以来,Yaru 一直都是 Ubuntu 的默认用户桌面,今年,Yaru 团队与Canonical Design 和 Ubuntu 桌面团队携手合作,为 Ubuntu MATE 21.04 创建了新的外观界面。 + +### Ubuntu MATE 21.04 有什么新变化? + +以下就是 Ubuntu MATE 21.04 此次发布中的关键变化: + +#### MATE 桌面 + +此次更新的 MATE 桌面相比以往并没有较大改动,此次只是修复了错误 BUG 同时更新了语言翻译,Debian 中的 MATE 软件包已经更新,用户可以下载所有的 BUG 修复和更新。 + +#### Avatana 指示器 + +![][1] + +这是一个控制面板指示器(也称为系统托盘)的动作、布局和行为的系统。现在,你可以从控制中心更改 Ayatana 指示器的设置。 + +添加了一个新的打印机标识,并删除了 RedShift 以保持稳定。 + +#### Yaru MATE 主题 + +Yaru MATE 现在是 Yaru 主题的派生产品。Yaru MATE 将提供浅色和深色主题,浅色作为默认主题。来确保更好的应用程序兼容性。 + +从现在开始,用户可以使用 GTK 2.x、3.x、4.x 浅色和深色主题,也可以使用 Suru 图标以及一些新的图标。 + +LibreOffice 在 MATE 上会有新的默认桌面图标,字体对比度也得到了改善。你会发现阅读小字体文本或远距离阅读更加容易。 + +如果在系统层面选择了深色模式,网站将维持深色。要让网站和系统的其它部分一起使用深色主题,只需启用 Yaru MATE 深色主题即可。 + +现在,Macro、Metacity 和 Compiz 的管理器主题使用了矢量图标。这意味着,如果你的屏幕较大,图标不会看起来像是像素画,又是一个小细节! + +#### Yaru MATE Snap 包 + +尽管你现在无法安装 MATE 主题,但是不要着急,它很快就可以了。gtk-theme-yaru-mate 和 icon-theme-yaru-mate Snap 包是预安装的,可以在需要将主题连接到兼容的 Snap 软件包时使用。 + +根据官方发布的公告,Snapd 很快就会自动将你的主题连接到兼容的 Snap 包: + +> Snapd 很快就能自动安装与你当前活动主题相匹配的主题的 snap 包。我们创建的 snap 包已经准备好在该功能可用时与之整合。 + +#### Mutiny 布局的新变化 + +![应用了深色主题的 Mutiny 布局][2] + +Mutiny 布局模仿了 Unity 的桌面布局。删除了 MATE 软件坞小应用,并且对 Mutiny 布局进行了优化以使用 Plank。Plank 会被系统自动应用主题。这是通过 Mate Tweak 切换到 Mutiny 布局完成的。Plank 的深色和浅色 Yaru 主题都包含在内。 + +其他调整和更新使得 Mutiny 在不改变整体风格的前提下具备了更高的可靠性 + +#### 主要应用升级 + + * Firefox 87(火狐浏览器) + * LibreOffice 7.1.2.2(办公软件) + * Evolution 3.40(邮件) + * Celluloid 0.20(视频播放器) + +#### 其他更改 + + * Linux 命令的忠实用户会喜欢在 Ubuntu MATE 中默认安装的 `neofetch`、`htop` 和 `inxi` 之类的命令。 + * 树莓派的 21.04 版本很快将会发布。 + * Ubuntu MATE 上没有离线升级选项。 + * 针对侧边和底部软件坞引入了新的 Plank 主题,使其与 Yaru MATE 的配色方案相匹配。 + * Yaru MATE 的窗口管理器为侧边平铺的窗口应用了简洁的边缘风格。 + * Ubuntu MATE 欢迎窗口有多种色彩可供选择。 + * Yaru MATE 主题和图标主题的快照包已在 Snap Store 中发布。 + * 为 Ubuntu MATE 20.04 LTS 的用户发布了 Yaru MATE PPA。 + +### 下载 Ubuntu MATE 21.04 + +你可以从官网上下载镜像: + +- [Ubuntu MATE 21.04][3] + +如果你对此感兴趣,[请查看发行说明][4]。 + +你对尝试新的 Yaru MATE 感到兴奋吗?你觉得怎么样?请在下面的评论中告诉我们。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/ubuntu-mate-21-04-release/ + +作者:[Asesh Basu][a] +选题:[lujun9972][b] +译者:[Kevin3599](https://github.com/Kevin3599) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/asesh/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/yaru-mate-mutiny-dark.jpg?resize=1568%2C882&ssl=1 +[2]: https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/04/yaru-mate-mutiny-dark.jpg?resize=1568%2C882&ssl=1 +[3]: https://ubuntu-mate.org/download/ +[4]: https://discourse.ubuntu.com/t/hirsute-hippo-release-notes/19221 \ No newline at end of file diff --git a/published/202105/20210424 Making computers more accessible and sustainable with Linux.md b/published/202105/20210424 Making computers more accessible and sustainable with Linux.md new file mode 100644 index 0000000000..b405dcb76d --- /dev/null +++ b/published/202105/20210424 Making computers more accessible and sustainable with Linux.md @@ -0,0 +1,74 @@ +[#]: subject: (Making computers more accessible and sustainable with Linux) +[#]: via: (https://opensource.com/article/21/4/linux-free-geek) +[#]: author: (Don Watkins https://opensource.com/users/don-watkins) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13362-1.html) + +用 Linux 使计算机更容易使用和可持续 +====== + +> Free Geek 是一个非营利组织,通过向有需要的人和团体提供 Linux 电脑,帮助减少数字鸿沟。 + +![](https://img.linux.net.cn/data/attachment/album/202105/05/135048extplppp7miznpdp.jpg) + +有很多理由选择 Linux 作为你的桌面操作系统。在 [为什么每个人都应该选择 Linux][2] 中,Seth Kenlon 强调了许多选择 Linux 的最佳理由,并为人们提供了许多开始使用该操作系统的方法。 + +这也让我想到了我通常向人们介绍 Linux 的方式。这场大流行增加了人们上网购物、远程教育以及与家人和朋友 [通过视频会议][3] 联系的需求。 + +我和很多有固定收入的退休人员一起工作,他们并不特别精通技术。对于这些人中的大多数人来说,购买电脑是一项充满担忧的大投资。我的一些朋友和客户对在大流行期间去零售店感到不舒服,而且他们完全不熟悉如何买电脑,无论是台式机还是笔记本电脑,即使在非大流行时期。他们来找我,询问在哪里买,要注意些什么。 + +我总是想看到他们得到一台 Linux 电脑。他们中的许多人买不起名牌供应商出售的 Linux 设备。直到最近,我一直在为他们购买翻新的设备,然后用 Linux 改装它们。 + +但是,当我发现 [Free Geek][4] 时,这一切都改变了,这是一个位于俄勒冈州波特兰的非营利组织,它的使命是“可持续地重复使用技术,实现数字访问,并提供教育,以创建一个使人们能够实现其潜力的社区。” + +Free Geek 有一个 eBay 商店,我在那里以可承受的价格购买了几台翻新的笔记本电脑。他们的电脑都安装了 [Linux Mint][5]。 事实上,电脑可以立即使用,这使得向 [新用户介绍 Linux][6] 很容易,并帮助他们快速体验操作系统的力量。 + +### 让电脑继续使用,远离垃圾填埋场 + +Oso Martin 在 2000 年地球日发起了 Free Geek。该组织为其志愿者提供课程和工作计划,对他们进行翻新和重建捐赠电脑的培训。志愿者们在服务 24 小时后还会收到一台捐赠的电脑。 + +这些电脑在波特兰的 Free Geek 实体店和 [网上][7] 出售。该组织还通过其项目 [Plug Into Portland][8]、[Gift a Geekbox][9] 以及[组织][10]和[社区资助][11]向有需要的人和实体提供电脑。 + +该组织表示,它已经“从垃圾填埋场翻新了 200 多万件物品,向非营利组织、学校、社区变革组织和个人提供了 75000 多件技术设备,并从 Free Geek 学习者那里提供了 5000 多课时”。 + +### 参与其中 + +自成立以来,Free Geek 已经从 3 名员工发展到近 50 名员工,并得到了世界各地的认可。它是波特兰市的 [数字包容网络][12] 的成员。 + +你可以在 [Twitter][13]、[Facebook][14]、[LinkedIn][15]、[YouTube][16] 和 [Instagram][17] 上与 Free Geek 联系。你也可以订阅它的[通讯][18]。从 Free Geek 的 [商店][19] 购买物品,可以直接支持其工作,减少数字鸿沟。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/linux-free-geek + +作者:[Don Watkins][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/wfh_work_home_laptop_work.png?itok=VFwToeMy (Working from home at a laptop) +[2]: https://opensource.com/article/21/2/try-linux +[3]: https://opensource.com/article/20/8/linux-laptop-video-conferencing +[4]: https://www.freegeek.org/ +[5]: https://opensource.com/article/21/4/restore-macbook-linux +[6]: https://opensource.com/article/18/12/help-non-techies +[7]: https://www.ebay.com/str/freegeekbasicsstore +[8]: https://www.freegeek.org/our-programs/plug-portland +[9]: https://www.freegeek.org/our-programs/gift-geekbox +[10]: https://www.freegeek.org/our-programs-grants/organizational-hardware-grants +[11]: https://www.freegeek.org/our-programs-grants/community-hardware-grants +[12]: https://www.portlandoregon.gov/oct/73860 +[13]: https://twitter.com/freegeekpdx +[14]: https://www.facebook.com/freegeekmothership +[15]: https://www.linkedin.com/company/free-geek/ +[16]: https://www.youtube.com/user/FreeGeekMothership +[17]: https://www.instagram.com/freegeekmothership/ +[18]: https://app.e2ma.net/app2/audience/signup/1766417/1738557/?v=a +[19]: https://www.freegeek.org/shop diff --git a/published/202105/20210425 Play retro video games on Linux with this open source project.md b/published/202105/20210425 Play retro video games on Linux with this open source project.md new file mode 100644 index 0000000000..4117da3f5c --- /dev/null +++ b/published/202105/20210425 Play retro video games on Linux with this open source project.md @@ -0,0 +1,119 @@ +[#]: subject: (Play retro video games on Linux with this open source project) +[#]: via: (https://opensource.com/article/21/4/scummvm-retro-gaming) +[#]: author: (Joshua Allen Holm https://opensource.com/users/holmja) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13433-1.html) + +用这个开源项目在 Linux 上玩复古视频游戏 +====== + +> ScummVM 是在现代硬件上玩老式视频游戏的最直接的方法之一。 + +![](https://img.linux.net.cn/data/attachment/album/202105/28/061555r14mbzb1g1n545rr.jpg) + +玩冒险游戏一直是我使用计算机经验的一个重要部分。从最早的基于文本的冒险游戏到 2D 像素艺术、全动态视频和 3D 游戏,冒险游戏类型为我提供了很多美好的回忆。 + +有时我想重温那些老游戏,但它们很多都是在 Linux 出现之前发布的,那么我如何去重玩这些游戏呢?我使用 [ScummVM][2],说实话,这是我最喜欢的开源项目之一。 + +### 什么是 ScummVM + +![ScummVM][3] + +ScummVM 是一个设计用来在现代硬件上玩老式冒险游戏的程序。ScummVM 最初是为了运行使用卢卡斯艺术LucasArt疯狂豪宅脚本创作工具Script Creation Utility for Maniac Mansion(SCUMM)开发的游戏,现在支持许多不同的游戏引擎。它可以支持几乎所有经典的雪乐山娱乐Sierra On-Line和卢卡斯艺术的冒险游戏,以及其他发行商的大量冒险游戏。ScummVM 并不支持所有的冒险游戏(目前),但它可以用来玩数百种冒险游戏。ScummVM 可用于多个平台,包括 Windows、macOS、Linux、Android、iOS 和一些游戏机。 + +### 为什么使用 ScummVM + +有很多方法可以在现代硬件上玩老游戏,但它们往往比使用 ScummVM 更复杂。[DOSBox][5] 可以用来玩 DOS 游戏,但它需要调整设置,使其以正确的速度进行游戏。Windows 游戏可以用 [WINE][6] 来玩,但这需要游戏及其安装程序都与 WINE 兼容。 + +即使游戏可以在 WINE 下运行,一些游戏仍然不能在现代硬件上很好地运行,因为硬件的速度太快了。这方面的一个例子是《国王密使 6King's Quest VI》中的一个谜题,它涉及将点燃的鞭炮带到某个地方。在现代硬件上,鞭炮爆炸的速度太快了,这使得在角色不死很多次的情况下不可能到达正确的位置。 + +ScummVM 消除了其他玩复古冒险游戏的方法中存在的许多问题。如果是 ScummVM 支持的游戏,那么它的配置和玩都很简单。在大多数情况下,将游戏文件从原始游戏光盘复制到一个目录,并在 ScummVM 中添加该目录,就可以玩该游戏了。对于多张光盘上的游戏,可能需要重命名一些文件以避免文件名冲突。需要哪些数据文件的说明以及任何重命名的说明都记录在 [每个支持的游戏][7] 的 ScummVM 维基页面上。 + +ScummVM 的一个奇妙之处在于,每一个新版本都会增加对更多游戏的支持。ScummVM 2.2.0 增加了对十几种互动小说解释器的支持,这意味着 ScummVM 现在可以玩数百种基于文本的冒险游戏。ScummVM 的开发分支应该很快就会变成 2.3.0 版本,它整合了 [ResidualVM][8] 对 3D 冒险游戏的支持,所以现在 ScummVM 可以用来玩《冥界狂想曲Grim Fandango》、《神秘岛 3:放逐者Myst III: Exile
》和《最长的旅程The Longest Journey》。其开发分支最近还增加了对使用 [Adventure Game Studio][9] 创建的游戏的支持,这为 ScummVM 增加了成百上千的游戏。 + +### 如何安装 ScummVM + +如果你想从你的 Linux 发行版的仓库中安装 ScummVM,过程非常简单。你只需要运行一个命令。然而,你的发行版可能会提供一个旧版本的 ScummVM,它不像最新版本那样支持许多游戏,所以要记住这一点。 + +在 Debian/Ubuntu 上安装 ScummVM: + +``` +sudo apt install scummvm +``` + +在 Fedora 上安装 ScummVM: + +``` +sudo dnf install scummvm +``` + +#### 使用 Flatpak 或 Snap 安装 ScummVM + +ScummVM 也可以以 Flatpak 和 Snap 的形式提供。如果你使用这些方式之一,你可以使用以下命令来安装相关的版本,它应该总是 ScummVM 的最新版本。 + +``` +flatpak install flathub org.scummvm.ScummVM +``` + +或 + +``` +snap install scummvm +``` + +#### 编译 ScummVM 的开发分支 + +如果你想尝试 ScummVM 尚未稳定的开发分支中的最新和主要的功能,你可以通过编译 ScummVM 的源代码来实现。请注意,开发分支是不断变化的,所以事情可能不总是正确的。如果你仍有兴趣尝试开发分支,请按照下面的说明进行。 + +首先,你需要为你的发行版准备必要的开发工具和库,这些工具和库在 ScummVM 维基上的 [编译 ScummVM/GCC][10] 页面列出。 + +一旦你安装了先决条件,运行以下命令: + +``` +git clone +cd scummvm +./configure +make +sudo make install +``` + +### 向 ScummVM 添加游戏 + +将游戏添加到 ScummVM 是你在游戏前需要做的最后一件事。如果你的收藏集中没有任何支持的冒险游戏,你可以从 [ScummVM 游戏][11] 页面下载 11 个精彩的游戏。你还可以从 [GOG.com][12] 购买许多 ScummVM 支持的游戏。如果你从 GOG.com 购买了游戏,并需要从 GOG 下载中提取游戏文件,你可以使用 [innoextract][13] 工具。 + +大多数游戏需要放在自己的目录中(唯一的例外是由单个数据文件组成的游戏),所以最好先创建一个目录来存储你的 ScummVM 游戏。你可以使用命令行或图形化文件管理器来完成这个工作。在哪里存储游戏并不重要(除了 ScummVM Flatpak,它是一个沙盒,要求游戏存储在 `~/Documents` 目录中)。创建这个目录后,将每个游戏的数据文件放在各自的子目录中。 + +一旦文件被复制到你想要的地方,运行 ScummVM,并通过点击“Add Game…”将游戏添加到收藏集中,在打开的文件选择器对话框中选择适当的目录,并点击“Choose”。如果 ScummVM 正确检测到游戏,它将打开其设置选项。如果你想的话,你可以从各个标签中选择高级配置选项(也可以在以后通过使用“Edit Game…”按钮进行更改),或者你可以直接点击“OK”,以默认选项添加游戏。如果没有检测到游戏,请查看 ScummVM 维基上的 [支持的游戏][14] 页面,以了解特定游戏的数据文件可能需要的特殊说明的细节。 + +现在唯一要做的就是在 ScummVM 的游戏列表中选择游戏,点击“Start”,享受重温旧爱或首次体验经典冒险游戏的乐趣。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/scummvm-retro-gaming + +作者:[Joshua Allen Holm][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/holmja +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/open_gaming_games_roundup_news.png?itok=KM0ViL0f (Gaming artifacts with joystick, GameBoy, paddle) +[2]: https://www.scummvm.org/ +[3]: https://opensource.com/sites/default/files/uploads/scummvm.png (ScummVM) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://www.dosbox.com/ +[6]: https://www.winehq.org/ +[7]: https://wiki.scummvm.org/index.php?title=Category:Supported_Games +[8]: https://www.residualvm.org/ +[9]: https://www.adventuregamestudio.co.uk/ +[10]: https://wiki.scummvm.org/index.php/Compiling_ScummVM/GCC +[11]: https://www.scummvm.org/games/ +[12]: https://www.gog.com/ +[13]: https://constexpr.org/innoextract/ +[14]: https://wiki.scummvm.org/index.php/Category:Supported_Games diff --git a/published/202105/20210426 3 beloved USB drive Linux distros.md b/published/202105/20210426 3 beloved USB drive Linux distros.md new file mode 100644 index 0000000000..505b90a5e2 --- /dev/null +++ b/published/202105/20210426 3 beloved USB drive Linux distros.md @@ -0,0 +1,87 @@ +[#]: subject: (3 beloved USB drive Linux distros) +[#]: via: (https://opensource.com/article/21/4/usb-drive-linux-distro) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13355-1.html) + +爱了!3 个受欢迎的 U 盘 Linux 发行版 +====== + +> 开源技术人员对此深有体会。 + +![](https://img.linux.net.cn/data/attachment/album/202105/03/104610np5piwaavaa5qu2u.jpg) + +Linux 用户几乎都会记得他们第一次发现无需实际安装,就可以用 Linux 引导计算机并在上面运行。当然,许多用户都知道可以引导计算机进入操作系统安装程序,但是 Linux 不同:它根本就不需要安装!你的计算机甚至不需要有一个硬盘。你可以通过一个 U 盘运行 Linux 几个月甚至几 _年_。 + +自然,有几种不同的 “临场live” Linux 发行版可供选择。我们向我们的作者们询问了他们的最爱,他们的回答如下。 + +### 1、Puppy Linux + +“作为一名前 **Puppy Linux** 开发者,我对此的看法自然有些偏见,但 Puppy 最初吸引我的地方是: + + * 它专注于第三世界国家容易获得的低端和老旧硬件。这为买不起最新的现代系统的贫困地区开放了计算能力 + * 它能够在内存中运行,可以利用该能力提供一些有趣的安全优势 + * 它在一个单一的 SFS 文件中处理用户文件和会话,使得备份、恢复或移动你现有的桌面/应用/文件到另一个安装中只需一个拷贝命令” + +—— [JT Pennington][2] + +“对我来说,一直就是 **Puppy Linux**。它启动迅速,支持旧硬件。它的 GUI 很容易就可以说服别人第一次尝试 Linux。” —— [Sachin Patil][3] + +“Puppy 是真正能在任何机器上运行的临场发行版。我有一台废弃的 microATX 塔式电脑,它的光驱坏了,也没有硬盘(为了数据安全,它已经被拆掉了),而且几乎没有多少内存。我把 Puppy 插入它的 SD 卡插槽,运行了好几年。” —— [Seth Kenlon][4] + +“我在使用 U 盘上的 Linux 发行版没有太多经验,但我把票投给 **Puppy Linux**。它很轻巧,非常适用于旧机器。”  —— [Sergey Zarubin][5] + +### 2、Fedora 和 Red Hat + +“我最喜欢的 USB 发行版其实是 **Fedora Live USB**。它有浏览器、磁盘工具和终端仿真器,所以我可以用它来拯救机器上的数据,或者我可以浏览网页或在需要时用 ssh 进入其他机器做一些工作。所有这些都不需要在 U 盘或在使用中的机器上存储任何数据,不会在受到入侵时被泄露。” —— [Steve Morris][6] + +“我曾经用过 Puppy 和 DSL。如今,我有两个 U 盘:**RHEL7** 和 **RHEL8**。 这两个都被配置为完整的工作环境,能够在 UEFI 和 BIOS 上启动。当我有问题要解决而又面对随机的硬件时,在现实生活中这就是时间的救星。” —— [Steven Ellis][7] + +### 3、Porteus + +“不久前,我安装了 Porteus 系统每个版本的虚拟机。很有趣,所以有机会我会再试试它们。每当提到微型发行版的话题时,我总是想起我记得的第一个使用的发行版:**tomsrtbt**。它总是安装适合放在软盘上来设计。我不知道它现在有多大用处,但我想我应该把它也算上。”  —— [Alan Formy-Duval][8] + +“作为一个 Slackware 的长期用户,我很欣赏 **Porteus** 提供的 Slack 的最新版本和灵活的环境。你可以用运行在内存中的 Porteus 进行引导,这样就不需要把 U 盘连接到你的电脑上,或者你可以从驱动器上运行,这样你就可以保留你的修改。打包应用很容易,而且 Slacker 社区有很多现有的软件包。这是我唯一需要的实时发行版。” —— [Seth Kenlon][4] + +### 其它:Knoppix + +“我已经有一段时间没有使用过 **Knoppix** 了,但我曾一度经常使用它来拯救那些被恶意软件破坏的 Windows 电脑。它最初于 2000 年 9 月发布,此后一直在持续开发。它最初是由 Linux 顾问 Klaus Knopper 开发并以他的名字命名的,被设计为临场 CD。我们用它来拯救由于恶意软件和病毒而变得无法访问的 Windows 系统上的用户文件。” —— [Don Watkins][9] + +“Knoppix 对临场 Linux 影响很大,但它也是对盲人用户使用最方便的发行版之一。它的 [ADRIANE 界面][10] 被设计成可以在没有视觉显示器的情况下使用,并且可以处理任何用户可能需要从计算机上获得的所有最常见的任务。” —— [Seth Kenlon][11] + +### 选择你的临场 Linux + +有很多没有提到的,比如 [Slax][12](一个基于 Debian 的实时发行版)、[Tiny Core][13]、[Slitaz][14]、[Kali][15](一个以安全为重点的实用程序发行版)、[E-live][16],等等。如果你有一个空闲的 U 盘,请把 Linux 放在上面,在任何时候都可以在任何电脑上使用 Linux! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/usb-drive-linux-distro + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux_keyboard_desktop.png?itok=I2nGw78_ (Linux keys on the keyboard for a desktop computer) +[2]: https://opensource.com/users/jtpennington +[3]: https://opensource.com/users/psachin +[4]: http://opensource.com/users/seth +[5]: https://opensource.com/users/sergey-zarubin +[6]: https://opensource.com/users/smorris12 +[7]: https://opensource.com/users/steven-ellis +[8]: https://opensource.com/users/alanfdoss +[9]: https://opensource.com/users/don-watkins +[10]: https://opensource.com/life/16/7/knoppix-adriane-interface +[11]: https://opensource.com/article/21/4/opensource.com/users/seth +[12]: http://slax.org +[13]: http://www.tinycorelinux.net/ +[14]: http://www.slitaz.org/en/ +[15]: http://kali.org +[16]: https://www.elivecd.org/ diff --git a/published/202105/20210427 An Open-Source App to Control All Your RGB Lighting Settings.md b/published/202105/20210427 An Open-Source App to Control All Your RGB Lighting Settings.md new file mode 100644 index 0000000000..b9a5ec566e --- /dev/null +++ b/published/202105/20210427 An Open-Source App to Control All Your RGB Lighting Settings.md @@ -0,0 +1,92 @@ +[#]: subject: (An Open-Source App to Control All Your RGB Lighting Settings) +[#]: via: (https://itsfoss.com/openrgb/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13377-1.html) + +OpenRGB:一个控制所有 RGB 灯光设置的开源应用 +====== + +> OpenRGB 是一个有用的开源工具,可以一个工具管理所有的 RGB 灯光。让我们来了解一下它。 + +![](https://img.linux.net.cn/data/attachment/album/202105/10/113851zqod756ft373tz36.jpg) + +无论是你的键盘、鼠标、CPU 风扇、AIO,还是其他连接的外围设备或组件,Linux 都没有官方软件支持来控制 RGB 灯光。 + +而 OpenRGB 似乎是一个适用于 Linux 的多合一 RGB 灯光控制工具。 + +### OpenRGB:多合一的 RGB 灯光控制中心 + +![][1] + +是的,你可能会找到不同的工具来调整设置,如 **Piper** 专门 [在 Linux 上配置游戏鼠标][2]。但是,如果你有各种组件或外设,要把它们都设置成你喜欢的 RGB 颜色,那将是一件很麻烦的事情。 + +OpenRGB 是一个令人印象深刻的工具,它不仅专注于 Linux,也可用于 Windows 和 MacOS。 + +它不仅仅是一个将所有 RGB 灯光设置放在一个工具下的想法,而是旨在摆脱所有需要安装来调整灯光设置的臃肿软件。 + +即使你使用的是 Windows 系统的机器,你可能也知道像 Razer Synapse 这样的软件工具是占用资源的,并伴随着它们的问题。因此,OpenRGB 不仅仅局限于 Linux 用户,还适用于每一个希望调整 RGB 设置的用户。 + +它支持大量设备,但你不应该期待对所有设备的支持。 + +### OpenRGB 的特点 + +![][3] + +它在提供简单的用户体验的同时,赋予了你许多有用的功能。其中的一些特点是: + + * 轻便的用户界面 + * 跨平台支持 + * 能够使用插件扩展功能 + * 设置颜色和效果 + * 能够保存和加载配置文件 + * 查看设备信息 + * 连接 OpenRGB 的多个实例,在多台电脑上同步灯光 + +![][4] + +除了上述所有的特点外,你还可以很好地控制照明区域、色彩模式、颜色等。 + +### 在 Linux 中安装 OpenRGB + +你可以在其官方网站上找到 AppImage 文件和 DEB 包。对于 Arch Linux 用户,你也可以在 [AUR][5] 中找到它。 + +如需更多帮助,你可以参考我们的 [AppImage 指南][6]和[安装 DEB 文件的方法][7]来设置。 + +官方网站应该也可以让你下载其他平台的软件包。但是,如果你想探索更多关于它的信息或自己编译它,请前往它的 [GitLab 页面][8]。 + +- [OpenRGB][9] + +### 总结 + +尽管我没有很多支持 RGB 的设备/组件,但我可以成功地调整我的罗技 G502 鼠标。 + +如果你想摆脱多个应用,用一个轻量级的界面来管理你所有的 RGB 灯光,我肯定会推荐你试一试。 + +你已经试过它了吗?欢迎在评论中分享你对它的看法! + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/openrgb/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/openrgb.jpg?resize=800%2C406&ssl=1 +[2]: https://itsfoss.com/piper-configure-gaming-mouse-linux/ +[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/openrgb-supported-devices.jpg?resize=800%2C404&ssl=1 +[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/openrgb-logi.jpg?resize=800%2C398&ssl=1 +[5]: https://itsfoss.com/aur-arch-linux/ +[6]: https://itsfoss.com/use-appimage-linux/ +[7]: https://itsfoss.com/install-deb-files-ubuntu/ +[8]: https://gitlab.com/CalcProgrammer1/OpenRGB +[9]: https://openrgb.org/ diff --git a/published/202105/20210427 Fedora Linux 34 is officially here.md b/published/202105/20210427 Fedora Linux 34 is officially here.md new file mode 100644 index 0000000000..ac0df71962 --- /dev/null +++ b/published/202105/20210427 Fedora Linux 34 is officially here.md @@ -0,0 +1,75 @@ +[#]: subject: (Fedora Linux 34 is officially here!) +[#]: via: (https://fedoramagazine.org/announcing-fedora-34/) +[#]: author: (Matthew Miller https://fedoramagazine.org/author/mattdm/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13365-1.html) + +Fedora Linux 34 各版本介绍 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/06/121307el07t08iiw01j7q8.jpg) + +今天(4/27),我很高兴地与大家分享成千上万的 Fedora 项目贡献者的辛勤工作成果:我们的最新版本,Fedora Linux 34 来了!我知道你们中的很多人一直在等待。我在社交媒体和论坛上看到的“它出来了吗?”的期待比我记忆中的任何一个版本都多。所以,如果你想的话,不要再等了,[现在升级][2] 或者去 [获取 Fedora][3] 下载一个安装镜像。或者,如果你想先了解更多,请继续阅读。  + +你可能注意到的第一件事是我们漂亮的新标志。这个新标志是由 Fedora 设计团队根据广大社区的意见开发的,它在保持 Fedoraness 的同时解决了我们旧标志的很多技术问题。请继续关注以新设计为特色的 Fedora 宣传品。 + +### 适合各种使用场景的 Fedora Linux + +Fedora Editions 面向桌面、服务器、云环境和物联网等各种特定场景。 + +Fedora Workstation 专注于台式机,尤其是面向那些希望获得“正常使用”的 Linux 操作系统体验的软件开发者。这个版本的带来了 [GNOME 40][4],这是专注、无干扰计算的下一步。无论你使用触控板、键盘还是鼠标,GNOME 40 都带来了导航方面的改进。应用网格和设置已经被重新设计,以使交互更加直观。你可以从 3 月份的 [Fedora Magazine][5] 文章中阅读更多的变化和原因。 + +Fedora CoreOS 是一个新兴的 Fedora 版本。它是一个自动更新的最小化操作系统,用于安全和大规模地运行容器化工作负载。它提供了几个更新流,跟随它之后大约每两周自动更新一次,当前,next 流基于 Fedora Linux 34,随后是 testing 流和 stable 流。你可以从 [下载页面][6] 中找到关于跟随 next 流的已发布工件的信息,以及在 [Fedora CoreOS 文档][7] 中找到如何使用这些工件的信息。 + +Fedora IoT 为物联网生态系统和边缘计算场景提供了一个强大的基础。在这个版本中,我们改善了对流行的 ARM 设备的支持,如 Pine64、RockPro64 和 Jetson Xavier NX。一些 i.MX8 片上系统设备,如 96boards Thor96 和 Solid Run HummingBoard-M 的硬件支持也有所改善。此外,Fedora IoT 34 改进了对用于自动系统恢复的硬件看门狗的支持。 + +当然,我们不仅仅提供 Editions。[Fedora Spins][8] 和 [Labs][9] 针对不同的受众和使用情况,例如 [Fedora Jam][10],它允许你释放你内心的音乐家,以及像新的 Fedora i3 Spin 这样的桌面环境,它提供了一个平铺的窗口管理器。还有,别忘了我们的备用架构。[ARM AArch64 Power 和 S390x][11]。 + +### 一般性改进 + +无论你使用的是 Fedora 的哪个变种,你都会得到开源世界所能提供的最新成果。秉承我们的 “[First][12]” 原则,我们已经更新了关键的编程语言和系统库包,包括 Ruby 3.0 和 Golang 1.16。在 Fedora KDE Plasma 中,我们已经从 X11 切换到 Wayland 作为默认。 + +在 Fedora Linux 33 中 BTRFS 作为桌面变体中的默认文件系统引入之后,我们又引入了 [BTRFS 文件系统的透明压缩][13]。 + +我们很高兴你能试用这个新发布版本!现在就去 下载它。或者如果你已经在运行 Fedora Linux,请按照 [简易升级说明][2]。关于 Fedora Linux 34 的新功能的更多信息,请看 [发行说明][14]。 + +### 万一出现问题…… + +如果你遇到了问题,请查看 [Fedora 34 常见问题页面][15],如果你有问题,请访问我们的 Ask Fedora 用户支持平台。 + +### 谢谢各位 + +感谢在这个发布周期中为 Fedora 项目做出贡献的成千上万的人,特别是那些在大流行期间为使这个版本按时发布而付出额外努力的人。Fedora 是一个社区,很高兴看到我们如此互相支持! + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/announcing-fedora-34/ + +作者:[Matthew Miller][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/mattdm/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/04/f34-final-816x345.jpg +[2]: https://docs.fedoraproject.org/en-US/quick-docs/upgrading/ +[3]: https://getfedora.org +[4]: https://forty.gnome.org/ +[5]: https://fedoramagazine.org/fedora-34-feature-focus-updated-activities-overview/ +[6]: https://getfedora.org/en/coreos +[7]: https://docs.fedoraproject.org/en-US/fedora-coreos/ +[8]: https://spins.fedoraproject.org/ +[9]: https://labs.fedoraproject.org/ +[10]: https://labs.fedoraproject.org/en/jam/ +[11]: https://alt.fedoraproject.org/alt/ +[12]: https://docs.fedoraproject.org/en-US/project/#_first +[13]: https://fedoramagazine.org/fedora-workstation-34-feature-focus-btrfs-transparent-compression/ +[14]: https://docs.fedoraproject.org/en-US/fedora/f34/release-notes/ +[15]: https://fedoraproject.org/wiki/Common_F34_bugs +[16]: https://hopin.com/events/fedora-linux-34-release-party diff --git a/published/202105/20210427 Perform Linux memory forensics with this open source tool.md b/published/202105/20210427 Perform Linux memory forensics with this open source tool.md new file mode 100644 index 0000000000..85fd06058b --- /dev/null +++ b/published/202105/20210427 Perform Linux memory forensics with this open source tool.md @@ -0,0 +1,485 @@ +[#]: subject: (Perform Linux memory forensics with this open source tool) +[#]: via: (https://opensource.com/article/21/4/linux-memory-forensics) +[#]: author: (Gaurav Kamathe https://opensource.com/users/gkamathe) +[#]: collector: (lujun9972) +[#]: translator: (ShuyRoy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13425-1.html) + +使用开源工具进行 Linux 内存取证 +====== + +> 利用 Volatility 找出应用程序、网络连接、内核模块、文件等方面的情况。 + +![](https://img.linux.net.cn/data/attachment/album/202105/26/111959fzkhzf7q3qwmhh7z.jpg) + +计算机的操作系统和应用使用主内存(RAM)来执行不同的任务。这种易失性内存包含大量关于运行应用、网络连接、内核模块、打开的文件以及几乎所有其他的内容信息,但这些信息每次计算机重启的时候都会被清除。 + +内存取证Memory forensics是一种从内存中找到和抽取这些有价值的信息的方式。[Volatility][2] 是一种使用插件来处理这类信息的开源工具。但是,存在一个问题:在你处理这些信息前,必须将物理内存转储到一个文件中,而 Volatility 没有这种能力。 + +因此,这篇文章分为两部分: + + * 第一部分是处理获取物理内存并将其转储到一个文件中。 + * 第二部分使用 Volatility 从这个内存转储中读取并处理这些信息。 + +我在本教程中使用了以下测试系统,不过它可以在任何 Linux 发行版上工作: + +``` +$ cat /etc/redhat-release +Red Hat Enterprise Linux release 8.3 (Ootpa) +$ +$ uname -r +4.18.0-240.el8.x86_64 +$ +``` + +> **注意事项:** 部分 1 涉及到编译和加载一个内核模块。不要担心:它并不像听起来那么困难。 +> +> 一些指南: +> +> * 按照以下的步骤。 +> * 不要在生产系统或你的主要计算机上尝试任何这些步骤。 +> * 始终使用测试的虚拟机(VM)来尝试,直到你熟悉使用这些工具并理解它们的工作原理为止。 + +### 安装需要的包 + +在开始之前安装必要的工具。如果你经常使用基于 Debian 的发行版,可以使用 `apt-get` 命令。这些包大多数提供了需要的内核信息和工具来编译代码: + +``` +$ yum install kernel-headers kernel-devel gcc elfutils-libelf-devel make git libdwarf-tools python2-devel.x86_64-y +``` + +### 部分 1:使用 LiME 获取内存并将其转储到一个文件中 + +在开始分析内存之前,你需要一个内存转储供你使用。在实际的取证活动中,这可能来自一个被破坏或者被入侵的系统。这些信息通常会被收集和存储来分析入侵是如何发生的及其影响。由于你可能没有可用的内存转储,你可以获取你的测试 VM 的内存转储,并使用它来执行内存取证。 + +Linux 内存提取器Linux Memory Extractor([LiME][3])是一个在 Linux 系统上获取内存很常用的工具。使用以下命令获得 LiME: + +``` +$ git clone https://github.com/504ensicsLabs/LiME.git +$ +$ cd LiME/src/ +$ +$ ls +deflate.c  disk.c  hash.c  lime.h  main.c  Makefile  Makefile.sample  tcp.c +$ +``` + +#### 构建 LiME 内核模块 + +在 `src` 文件夹下运行 `make` 命令。这会创建一个以 .ko 为扩展名的内核模块。理想情况下,在 `make` 结束时,`lime.ko` 文件会使用格式 `lime-.ko` 被重命名。 + +``` +$ make +make -C /lib/modules/4.18.0-240.el8.x86_64/build M="/root/LiME/src" modules +make[1]: Entering directory '/usr/src/kernels/4.18.0-240.el8.x86_64' + +<< 删节 >> + +make[1]: Leaving directory '/usr/src/kernels/4.18.0-240.el8.x86_64' +strip --strip-unneeded lime.ko +mv lime.ko lime-4.18.0-240.el8.x86_64.ko +$ +$ +$ ls -l lime-4.18.0-240.el8.x86_64.ko +-rw-r--r--. 1 root root 25696 Apr 17 14:45 lime-4.18.0-240.el8.x86_64.ko +$ +$ file lime-4.18.0-240.el8.x86_64.ko +lime-4.18.0-240.el8.x86_64.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), BuildID[sha1]=1d0b5cf932389000d960a7e6b57c428b8e46c9cf, not stripped +$ +``` + +#### 加载LiME 内核模块 + +现在是时候加载内核模块来获取系统内存了。`insmod` 命令会帮助加载内核模块;模块一旦被加载,会在你的系统上读取主内存(RAM)并且将内存的内容转储到命令行所提供的 `path` 目录下的文件中。另一个重要的参数是 `format`;保持 `lime` 的格式,如下所示。在插入内核模块之后,使用 `lsmod` 命令验证它是否真的被加载。 + +``` +$ lsmod  | grep lime +$ +$ insmod ./lime-4.18.0-240.el8.x86_64.ko "path=../RHEL8.3_64bit.mem format=lime" +$ +$ lsmod  | grep lime +lime                   16384  0 +$ +``` + +你应该看到给 `path` 命令的文件已经创建好了,而且文件大小与你系统的物理内存(RAM)大小相同(并不奇怪)。一旦你有了内存转储,你就可以使用 `rmmod` 命令删除该内核模块: + +``` +$ +$ ls -l ~/LiME/RHEL8.3_64bit.mem +-r--r--r--. 1 root root 4294544480 Apr 17 14:47 /root/LiME/RHEL8.3_64bit.mem +$ +$ du -sh ~/LiME/RHEL8.3_64bit.mem +4.0G    /root/LiME/RHEL8.3_64bit.mem +$ +$ free -m +              total        used        free      shared  buff/cache   available +Mem:           3736         220         366           8        3149        3259 +Swap:          4059           8        4051 +$ +$ rmmod lime +$ +$ lsmod  | grep lime +$ +``` + +#### 内存转储中是什么? + +这个内存转储文件只是原始数据,就像使用 `file` 命令可以看到的一样。你不可能通过手动去理解它;是的,在这里边有一些 ASCII 字符,但是你无法用编辑器打开这个文件并把它读出来。`hexdump` 的输出显示,最初的几个字节是 `EmiL`;这是因为你的请求格式在上面的命令行中是 `lime`: + +``` +$ file ~/LiME/RHEL8.3_64bit.mem +/root/LiME/RHEL8.3_64bit.mem: data +$ + +$ hexdump -C ~/LiME/RHEL8.3_64bit.mem | head +00000000  45 4d 69 4c 01 00 00 00  00 10 00 00 00 00 00 00  |EMiL............| +00000010  ff fb 09 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| +00000020  b8 fe 4c cd 21 44 00 32  20 00 00 2a 2a 2a 2a 2a  |..L.!D.2 ..*****| +00000030  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************| +00000040  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 20 00 20  |************* . | +00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| +* +00000080  00 00 00 00 00 00 00 00  00 00 00 00 70 78 65 6c  |............pxel| +00000090  69 6e 75 78 2e 30 00 00  00 00 00 00 00 00 00 00  |inux.0..........| +000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| +$ +``` + +### 部分 2:获得 Volatility 并使用它来分析你的内存转储 + +现在你有了要分析的示例内存转储,使用下面的命令获取 Volatility 软件。Volatility 已经用 Python 3 重写了,但是本教程使用的是用 Python 2 写的原始的 Volatility 包。如果你想用 Volatility 3 进行实验,可以从合适的 Git 仓库下载它,并在以下命令中使用 Python 3 而不是 Python 2: + +``` +$ git clone https://github.com/volatilityfoundation/volatility.git +$ +$ cd volatility/ +$ +$ ls +AUTHORS.txt    contrib      LEGAL.txt    Makefile     PKG-INFO     pyinstaller.spec  resources  tools       vol.py +CHANGELOG.txt  CREDITS.txt  LICENSE.txt  MANIFEST.in  pyinstaller  README.txt        setup.py   volatility +$ +``` + +Volatility 使用两个 Python 库来实现某些功能,所以使用以下命令来安装它们。否则,在你运行 Volatility 工具时,你可能看到一些导入错误;你可以忽略它们,除非你正在运行的插件需要这些库;这种情况下,工具将会报错: + +``` +$ pip2 install pycrypto +$ pip2 install distorm3 +``` + +#### 列出 Volatility 的 Linux 配置文件 + +你将要运行的第一个 Volatility 命令列出了可用的 Linux 配置文件,运行 Volatility 命令的主要入口点是 `vol.py` 脚本。使用 Python 2 解释器调用它并提供 `--info` 选项。为了缩小输出,查找以 Linux 开头的字符串。正如你所看到的,并没有很多 Linux 配置文件被列出: + +``` +$ python2 vol.py --info  | grep ^Linux +Volatility Foundation Volatility Framework 2.6.1 +LinuxAMD64PagedMemory          - Linux-specific AMD 64-bit address space. +$ +``` + +#### 构建你自己的 Linux 配置文件 + +Linux 发行版是多种多样的,并且是为不同架构而构建的。这就是为什么配置文件是必要的 —— Volatility 在提取信息前必须知道内存转储是从哪个系统和架构获得的。有一些 Volatility 命令可以找到这些信息;但是这个方法很费时。为了加快速度,可以使用以下命令构建一个自定义的 Linux 配置文件: + +移动到 Volatility 仓库的 `tools/linux`目录下,运行 `make` 命令: + +``` +$ cd tools/linux/ +$ +$ pwd +/root/volatility/tools/linux +$ +$ ls +kcore  Makefile  Makefile.enterprise  module.c +$ +$ make +make -C //lib/modules/4.18.0-240.el8.x86_64/build CONFIG_DEBUG_INFO=y M="/root/volatility/tools/linux" modules +make[1]: Entering directory '/usr/src/kernels/4.18.0-240.el8.x86_64' +<< 删节 >> +make[1]: Leaving directory '/usr/src/kernels/4.18.0-240.el8.x86_64' +$ +``` + +你应该看到一个新的 `module.dwarf` 文件。你也需要 `/boot` 目录下的 `System.map` 文件,因为它包含了所有与当前运行的内核相关的符号: + +``` +$ ls +kcore  Makefile  Makefile.enterprise  module.c  module.dwarf +$ +$ ls -l module.dwarf +-rw-r--r--. 1 root root 3987904 Apr 17 15:17 module.dwarf +$ +$ ls -l /boot/System.map-4.18.0-240.el8.x86_64 +-rw-------. 1 root root 4032815 Sep 23  2020 /boot/System.map-4.18.0-240.el8.x86_64 +$ +$ +``` + +要创建一个自定义配置文件,移动回到 Volatility 目录并且运行下面的命令。第一个参数提供了一个自定义 .zip 文件,文件名是你自己命名的。我经常使用操作系统和内核版本来命名。下一个参数是前边创建的 `module.dwarf` 文件,最后一个参数是 `/boot` 目录下的 `System.map` 文件: + +``` +$ +$ cd volatility/ +$ +$ zip volatility/plugins/overlays/linux/Redhat8.3_4.18.0-240.zip tools/linux/module.dwarf /boot/System.map-4.18.0-240.el8.x86_64 +  adding: tools/linux/module.dwarf (deflated 91%) +  adding: boot/System.map-4.18.0-240.el8.x86_64 (deflated 79%) +$ +``` + +现在自定义配置文件就准备好了,所以在前边给出的位置检查一下 .zip 文件是否被创建好。如果你想知道 Volatility 是否检测到这个自定义配置文件,再一次运行 `--info` 命令。现在,你应该可以在下边的列出的内容中看到新的配置文件: + +``` +$ +$ ls -l volatility/plugins/overlays/linux/Redhat8.3_4.18.0-240.zip +-rw-r--r--. 1 root root 1190360 Apr 17 15:20 volatility/plugins/overlays/linux/Redhat8.3_4.18.0-240.zip +$ +$ +$ python2 vol.py --info  | grep Redhat +Volatility Foundation Volatility Framework 2.6.1 +LinuxRedhat8_3_4_18_0-240x64 - A Profile for Linux Redhat8.3_4.18.0-240 x64 +$ +$ +``` + +#### 开始使用 Volatility + +现在你已经准备好去做一些真正的内存取证了。记住,Volatility 是由自定义的插件组成的,你可以针对内存转储来获得信息。命令的通用格式是: + +``` +python2 vol.py -f --profile= +``` + +有了这些信息,运行 `linux_banner` 插件来看看你是否可从内存转储中识别正确的发行版信息: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_banner --profile=LinuxRedhat8_3_4_18_0-240x64 +Volatility Foundation Volatility Framework 2.6.1 +Linux version 4.18.0-240.el8.x86_64 ([mockbuild@vm09.test.com][4]) (gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC)) #1 SMP Wed Sep 23 05:13:10 EDT 2020 +$ +``` + +#### 找到 Linux 插件 + +到现在都很顺利,所以现在你可能对如何找到所有 Linux 插件的名字比较好奇。有一个简单的技巧:运行 `--info` 命令并抓取 `linux_` 字符串。有各种各样的插件可用于不同的用途。这里列出一部分: + +``` +$ python2 vol.py --info  | grep linux_ +Volatility Foundation Volatility Framework 2.6.1 +linux_apihooks             - Checks for userland apihooks +linux_arp                  - Print the ARP table +linux_aslr_shift           - Automatically detect the Linux ASLR shift + +<< 删节 >> + +linux_banner               - Prints the Linux banner information +linux_vma_cache            - Gather VMAs from the vm_area_struct cache +linux_volshell             - Shell in the memory image +linux_yarascan             - A shell in the Linux memory image +$ +``` + +使用 `linux_psaux` 插件检查内存转储时系统上正在运行哪些进程。注意列表中的最后一个命令:它是你在转储之前运行的 `insmod` 命令。 + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_psaux --profile=LinuxRedhat8_3_4_18_0-240x64 +Volatility Foundation Volatility Framework 2.6.1 +Pid    Uid    Gid    Arguments                                                       +1      0      0      /usr/lib/systemd/systemd --switched-root --system --deserialize 18 +2      0      0      [kthreadd]                                                       +3      0      0      [rcu_gp]                                                         +4      0      0      [rcu_par_gp]                                                     +861    0      0      /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P           +869    0      0      /usr/bin/rhsmcertd                                               +875    0      0      /usr/libexec/sssd/sssd_be --domain implicit_files --uid 0 --gid 0 --logger=files +878    0      0      /usr/libexec/sssd/sssd_nss --uid 0 --gid 0 --logger=files       + +<< 删节 >> + +11064  89     89     qmgr -l -t unix -u                                               +227148 0      0      [kworker/0:0]                                                   +227298 0      0      -bash                                                           +227374 0      0      [kworker/u2:1]                                                   +227375 0      0      [kworker/0:2]                                                   +227884 0      0      [kworker/0:3]                                                   +228573 0      0      insmod ./lime-4.18.0-240.el8.x86_64.ko path=../RHEL8.3_64bit.mem format=lime +228576 0      0                                                                       +$ +``` + +想要知道系统的网络状态吗?运行 `linux_netstat` 插件来找到在内存转储期间网络连接的状态: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_netstat --profile=LinuxRedhat8_3_4_18_0-240x64 +Volatility Foundation Volatility Framework 2.6.1 +UNIX 18113              systemd/1     /run/systemd/private +UNIX 11411              systemd/1     /run/systemd/notify +UNIX 11413              systemd/1     /run/systemd/cgroups-agent +UNIX 11415              systemd/1     +UNIX 11416              systemd/1     + +<< 删节 >> +$ +``` + +接下来,使用 `linux_mount` 插件来看在内存转储期间哪些文件系统被挂载: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_mount --profile=LinuxRedhat8_3_4_18_0-240x64 +Volatility Foundation Volatility Framework 2.6.1 +tmpfs                     /sys/fs/cgroup                      tmpfs        ro,nosuid,nodev,noexec                   +cgroup                    /sys/fs/cgroup/pids                 cgroup       rw,relatime,nosuid,nodev,noexec         +systemd-1                 /proc/sys/fs/binfmt_misc            autofs       rw,relatime                             +sunrpc                    /var/lib/nfs/rpc_pipefs             rpc_pipefs   rw,relatime                             +/dev/mapper/rhel_kvm--03--guest11-root /                                   xfs          rw,relatime                 +tmpfs                     /dev/shm                            tmpfs        rw,nosuid,nodev                         +selinuxfs                 /sys/fs/selinux                     selinuxfs    rw,relatime +                                                       +<< 删节 >> + +cgroup                    /sys/fs/cgroup/net_cls,net_prio     cgroup       rw,relatime,nosuid,nodev,noexec         +cgroup                    /sys/fs/cgroup/cpu,cpuacct          cgroup       rw,relatime,nosuid,nodev,noexec         +bpf                       /sys/fs/bpf                         bpf          rw,relatime,nosuid,nodev,noexec         +cgroup                    /sys/fs/cgroup/memory               cgroup       ro,relatime,nosuid,nodev,noexec         +cgroup                    /sys/fs/cgroup/cpuset               cgroup       rw,relatime,nosuid,nodev,noexec         +mqueue                    /dev/mqueue                         mqueue       rw,relatime                             +$ +``` + +好奇哪些内核模块被加载了吗?Volatility 也为这个提供了一个插件 `linux_lsmod`: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_lsmod --profile=LinuxRedhat8_3_4_18_0-240x64 +Volatility Foundation Volatility Framework 2.6.1 +ffffffffc0535040 lime 20480 +ffffffffc0530540 binfmt_misc 20480 +ffffffffc05e8040 sunrpc 479232 +<< 删节 >> +ffffffffc04f9540 nfit 65536 +ffffffffc0266280 dm_mirror 28672 +ffffffffc025e040 dm_region_hash 20480 +ffffffffc0258180 dm_log 20480 +ffffffffc024bbc0 dm_mod 151552 +$ +``` + +想知道哪些文件被哪些进程打开了吗?使用 `linux_bash` 插件可以列出这些信息: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_bash --profile=LinuxRedhat8_3_4_18_0-240x64 -v +Volatility Foundation Volatility Framework 2.6.1 +Pid      Name                 Command Time                   Command +-------- -------------------- ------------------------------ ------- +  227221 bash                 2021-04-17 18:38:24 UTC+0000   lsmod +  227221 bash                 2021-04-17 18:38:24 UTC+0000   rm -f .log +  227221 bash                 2021-04-17 18:38:24 UTC+0000   ls -l /etc/zzz +  227221 bash                 2021-04-17 18:38:24 UTC+0000   cat ~/.vimrc +  227221 bash                 2021-04-17 18:38:24 UTC+0000   ls +  227221 bash                 2021-04-17 18:38:24 UTC+0000   cat /proc/817/cwd +  227221 bash                 2021-04-17 18:38:24 UTC+0000   ls -l /proc/817/cwd +  227221 bash                 2021-04-17 18:38:24 UTC+0000   ls /proc/817/ +<< 删节 >> +  227298 bash                 2021-04-17 18:40:30 UTC+0000   gcc prt.c +  227298 bash                 2021-04-17 18:40:30 UTC+0000   ls +  227298 bash                 2021-04-17 18:40:30 UTC+0000   ./a.out +  227298 bash                 2021-04-17 18:40:30 UTC+0000   vim prt.c +  227298 bash                 2021-04-17 18:40:30 UTC+0000   gcc prt.c +  227298 bash                 2021-04-17 18:40:30 UTC+0000   ./a.out +  227298 bash                 2021-04-17 18:40:30 UTC+0000   ls +$ +``` + +想知道哪些文件被哪些进程打开了吗?使用 `linux_lsof` 插件可以列出这些信息: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_lsof --profile=LinuxRedhat8_3_4_18_0-240x64 +Volatility Foundation Volatility Framework 2.6.1 +Offset             Name                           Pid      FD       Path +------------------ ------------------------------ -------- -------- ---- +0xffff9c83fb1e9f40 rsyslogd                          71194        0 /dev/null +0xffff9c83fb1e9f40 rsyslogd                          71194        1 /dev/null +0xffff9c83fb1e9f40 rsyslogd                          71194        2 /dev/null +0xffff9c83fb1e9f40 rsyslogd                          71194        3 /dev/urandom +0xffff9c83fb1e9f40 rsyslogd                          71194        4 socket:[83565] +0xffff9c83fb1e9f40 rsyslogd                          71194        5 /var/log/messages +0xffff9c83fb1e9f40 rsyslogd                          71194        6 anon_inode:[9063] +0xffff9c83fb1e9f40 rsyslogd                          71194        7 /var/log/secure + +<< 删节 >> + +0xffff9c8365761f40 insmod                           228573        0 /dev/pts/0 +0xffff9c8365761f40 insmod                           228573        1 /dev/pts/0 +0xffff9c8365761f40 insmod                           228573        2 /dev/pts/0 +0xffff9c8365761f40 insmod                           228573        3 /root/LiME/src/lime-4.18.0-240.el8.x86_64.ko +$ +``` + +#### 访问 Linux 插件脚本位置 + +通过读取内存转储和处理这些信息,你可以获得更多的信息。如果你会 Python,并且好奇这些信息是如何被处理的,可以到存储所有插件的目录,选择一个你感兴趣的,并看看 Volatility 是如何获得这些信息的: + +``` +$ ls volatility/plugins/linux/ +apihooks.py              common.py            kernel_opened_files.py   malfind.py          psaux.py +apihooks.pyc             common.pyc           kernel_opened_files.pyc  malfind.pyc         psaux.pyc +arp.py                   cpuinfo.py           keyboard_notifiers.py    mount_cache.py      psenv.py +arp.pyc                  cpuinfo.pyc          keyboard_notifiers.pyc   mount_cache.pyc     psenv.pyc +aslr_shift.py            dentry_cache.py      ld_env.py                mount.py            pslist_cache.py +aslr_shift.pyc           dentry_cache.pyc     ld_env.pyc               mount.pyc           pslist_cache.pyc +<< 删节 >> +check_syscall_arm.py     __init__.py          lsmod.py                 proc_maps.py        tty_check.py +check_syscall_arm.pyc    __init__.pyc         lsmod.pyc                proc_maps.pyc       tty_check.pyc +check_syscall.py         iomem.py             lsof.py                  proc_maps_rb.py     vma_cache.py +check_syscall.pyc        iomem.pyc            lsof.pyc                 proc_maps_rb.pyc    vma_cache.pyc +$ +$ +``` + +我喜欢 Volatility 的理由是他提供了许多安全插件。这些信息很难手动获取: + +``` +linux_hidden_modules       - Carves memory to find hidden kernel modules +linux_malfind              - Looks for suspicious process mappings +linux_truecrypt_passphrase - Recovers cached Truecrypt passphrases +``` + +Volatility 也允许你在内存转储中打开一个 shell,所以你可以运行 shell 命令来代替上面所有命令,并获得相同的信息: + +``` +$ python2 vol.py -f ~/LiME/RHEL8.3_64bit.mem linux_volshell --profile=LinuxRedhat8_3_4_18_0-240x64 -v +Volatility Foundation Volatility Framework 2.6.1 +Current context: process systemd, pid=1 DTB=0x1042dc000 +Welcome to volshell! Current memory image is: +file:///root/LiME/RHEL8.3_64bit.mem +To get help, type 'hh()' +>>> +>>> sc() +Current context: process systemd, pid=1 DTB=0x1042dc000 +>>> +``` + +### 接下来的步骤 + +内存转储是了解 Linux 内部情况的好方法。试一试 Volatility 的所有插件,并详细研究它们的输出。然后思考这些信息如何能够帮助你识别入侵或安全问题。深入了解这些插件的工作原理,甚至尝试改进它们。如果你没有找到你想做的事情的插件,那就写一个并提交给 Volatility,这样其他人也可以使用它。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/linux-memory-forensics + +作者:[Gaurav Kamathe][a] +选题:[lujun9972][b] +译者:[RiaXu](https://github.com/ShuyRoy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gkamathe +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brain_computer_solve_fix_tool.png?itok=okq8joti (Brain on a computer screen) +[2]: https://github.com/volatilityfoundation/volatility +[3]: https://github.com/504ensicsLabs/LiME +[4]: mailto:mockbuild@vm09.test.com diff --git a/published/202105/20210427 What-s new in Fedora Workstation 34.md b/published/202105/20210427 What-s new in Fedora Workstation 34.md new file mode 100644 index 0000000000..88369c6f6a --- /dev/null +++ b/published/202105/20210427 What-s new in Fedora Workstation 34.md @@ -0,0 +1,106 @@ +[#]: subject: (What’s new in Fedora Workstation 34) +[#]: via: (https://fedoramagazine.org/whats-new-fedora-34-workstation/) +[#]: author: (Christian Fredrik Schaller https://fedoramagazine.org/author/uraeus/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13359-1.html) + +Fedora Workstation 34 中的新变化 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/03/233735glmkkimcz8ilmcmr.jpg) + +Fedora Workstation 34 是我们领先的操作系统的最新版本,这次你将获得重大改进。最重要的是,你可以从 [官方网站][2] 下载它。我听到你在问,有什么新的东西?好吧,让我们来介绍一下。 + +### GNOME 40 + +[GNOME 40][3] 是对 GNOME 桌面的一次重大更新,Fedora 社区成员在其设计和实现过程中发挥了关键作用,因此你可以确信 Fedora 用户的需求被考虑在内。 + +当你登录到 GNOME 40 桌面时,首先注意到的就是你现在会被直接带到一个重新设计的概览屏幕。你会注意到仪表盘已经移到了屏幕的底部。GNOME 40 的另一个主要变化是虚拟工作空间现在是水平摆放的,这使 GNOME 与其他大多数桌面更加一致,因此应该使新用户更容易适应 GNOME 和 Fedora。 + +我们还做了一些工作来改善桌面中的手势支持,用三根手指水平滑动来切换工作空间,用三根手指垂直滑动来调出概览。 + +![][4] + +更新后的概览设计带来了一系列其他改进,包括: + + * 仪表盘现在将收藏的和未收藏的运行中的应用程序分开。这使得可以清楚了解哪些应用已经被收藏,哪些未收藏。 + * 窗口缩略图得到了改进,现在每个窗口上都有一个应用程序图标,以帮助识别。 + * 当工作区被设置为在所有显示器上显示时,工作区切换器现在会显示在所有显示器上,而不仅仅是主显示器。 + * 应用启动器的拖放功能得到了改进,可以更轻松地自定义应用程序网格的排列方式。 + +GNOME 40 中的变化经历了大量的用户测试,到目前为止反应非常正面,所以我们很高兴能将它们介绍给 Fedora 社区。更多信息请见 [forty.gnome.org][3] 或 [GNOME 40 发行说明][5]。 + +### 应用程序的改进 + +GNOME “天气”为这个版本进行了重新设计,具有两个视图,一个是未来 48 小时的小时预报,另一个是未来 10 天的每日预报。 + +新版本现在显示了更多的信息,并且更适合移动设备,因为它支持更窄的尺寸。 + +![][6] + +其他被改进的应用程序包括“文件”、“地图”、“软件”和“设置”。更多细节请参见 [GNOME 40 发行说明][5]。 + +### PipeWire + +PipeWire 是新的音频和视频服务器,由 Wim Taymans 创建,他也共同创建了 GStreamer 多媒体框架。到目前为止,它只被用于视频捕获,但在 Fedora Workstation 34 中,我们也开始将其用于音频,取代 PulseAudio。 + +PipeWire 旨在与 PulseAudio 和 Jack 兼容,因此应用程序通常应该像以前一样可以工作。我们还与 Firefox 和 Chrome 合作,确保它们能与 PipeWire 很好地配合。OBS Studio 也即将支持 PipeWire,所以如果你是一个播客,我们已经帮你搞定了这些。 + +PipeWire 在专业音频界获得了非常积极的回应。谨慎地说,从一开始就可能有一些专业音频应用不能完全工作,但我们会源源不断收到测试报告和补丁,我们将在 Fedora Workstation 34 的生命周期内使用这些报告和补丁来延续专业音频 PipeWire 的体验。 + +### 改进的 Wayland 支持 + +我们预计将在 Fedora Workstation 34 的生命周期内解决在专有的 NVIDIA 驱动之上运行 Wayland 的支持。已经支持在 NVIDIA 驱动上运行纯 Wayland 客户端。然而,当前还缺少对许多应用程序使用的 Xwayland 兼容层的支持。这就是为什么当你安装 NVIDIA 驱动时,Fedora 仍然默认为 X.Org。 + +我们正在 [与 NVIDIA 上游合作][7],以确保 Xwayland 能在 Fedora 中使用 NVIDIA 硬件加速。 + +### QtGNOME 平台和 Adwaita-Qt + +Jan Grulich 继续他在 QtGNOME 平台和 Adawaita-qt 主题上的出色工作,确保 Qt 应用程序与 Fedora 工作站的良好整合。多年来,我们在 Fedora 中使用的 Adwaita 主题已经发生了演变,但随着 QtGNOME 平台和 Adwaita-Qt 在 Fedora 34 中的更新,Qt 应用程序将更接近于 Fedora Workstation 34 中当前的 GTK 风格。 + +作为这项工作的一部分,Fedora Media Writer 的外观和风格也得到了改进。 + +![][8] + +### Toolbox + +Toolbox 是我们用于创建与主机系统隔离的开发环境的出色工具,它在 Fedora 34 上有了很多改进。例如,我们在改进 Toolbox 的 CI 系统集成方面做了大量的工作,以避免在我们的环境中出现故障时导致 Toolbox 停止工作。 + +我们在 Toolbox 的 RHEL 集成方面投入了大量的工作,这意味着你可以很容易地在 Fedora 系统上建立一个容器化的 RHEL 环境,从而方便地为 RHEL 服务器和云实例做开发。现在在 Fedora 上创建一个 RHEL 环境就像运行:`toolbox create -distro rhel -release 8.4` 一样简单。  + +这给你提供了一个最新桌面的优势:支持最新硬件,同时能够以一种完全原生的方式进行针对 RHEL 的开发。 + +![][9] + +### Btrfs + +自 Fedora 33 以来,Fedora Workstation 一直使用 Btrfs 作为其默认文件系统。Btrfs 是一个现代文件系统,由许多公司和项目开发。Workstation 采用 Btrfs 是通过 Facebook 和 Fedora 社区之间的奇妙合作实现的。根据到目前为止的用户反馈,人们觉得与旧的 ext4 文件系统相比,Btrfs 提供了更快捷、更灵敏的体验。 + +在 Fedora 34 中,新安装的 Workstation 系统现在默认使用 Btrfs 透明压缩。与未压缩的 Btrfs 相比,这可以节省 20-40% 的大量磁盘空间。它也增加了 SSD 和其他闪存介质的寿命。 + + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/whats-new-fedora-34-workstation/ + +作者:[Christian Fredrik Schaller][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/uraeus/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/04/f34-workstation-816x345.jpg +[2]: https://getfedora.org/workstation +[3]: https://forty.gnome.org/ +[4]: https://lh3.googleusercontent.com/xDklMWAGBWvRGRp2kby-XKr6b0Jvan8Obmn11sfmkKnsnXizKePYV9aWdEgyxmJetcvwMifYRUm6TcPRCH9szZfZOE9pCpv2bkjQhnq2II05Yu6o_DjEBmqTlRUGvvUyMN_VRtq8zkk2J7GUmA +[5]: https://help.gnome.org/misc/release-notes/40.0/ +[6]: https://lh6.googleusercontent.com/pQ3IIAvJDYrdfXoTUnrOcCQBjtpXqd_5Rmbo4xwxIj2qMCXt7ZxJEQ12OoV7yUSF8zpVR0VFXkMP0M8UK1nLbU7jhgQPJAHPayzjAscQmTtqqGsohyzth6-xFDjUXogmeFmcP-yR9GWXfXv-yw +[7]: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/587 +[8]: https://lh6.googleusercontent.com/PDXxFS7SBFGI-3jRtR-TmqupvJRxy_CbWTfjB4sc1CKyO1myXkqfpg4jGHQJRK2e1vUh1KD_jyBsy8TURwCIkgAJcETCOlSPFBabqB5yDeWj3cvygOOQVe3X0tLFjuOz3e-ZX6owNZJSqIEHOQ +[9]: https://lh6.googleusercontent.com/dVRCL14LGE9WpmdiH3nI97OW2C1TkiZqREvBlHClNKdVcYvR1nZpZgWfup_GP5SN17iQtSJf59FxX2GYqoajXbdXLRfOwAREn7gVJ1fa_bspmcTZ81zkUQC4tNUx3f7D7uD7Peeg2Zc9Kldpww diff --git a/published/202105/20210429 Encrypting and decrypting files with OpenSSL.md b/published/202105/20210429 Encrypting and decrypting files with OpenSSL.md new file mode 100644 index 0000000000..a3cbe64aec --- /dev/null +++ b/published/202105/20210429 Encrypting and decrypting files with OpenSSL.md @@ -0,0 +1,440 @@ +[#]: subject: "Encrypting and decrypting files with OpenSSL" +[#]: via: "https://opensource.com/article/21/4/encryption-decryption-openssl" +[#]: author: "Gaurav Kamathe https://opensource.com/users/gkamathe" +[#]: collector: "lujun9972" +[#]: translator: "MjSeven" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13368-1.html" + +使用 OpenSSL 加密和解密文件 +====== + +> OpenSSL 是一个实用工具,它可以确保其他人员无法打开你的敏感和机密消息。 + +![](https://img.linux.net.cn/data/attachment/album/202105/07/163825a9yh74h9yh4h77y2.jpg) + +加密是对消息进行编码的一种方法,这样可以保护消息的内容免遭他人窥视。一般有两种类型: + + 1. 密钥加密或对称加密 + 2. 公钥加密或非对称加密 + +密钥加密secret-key encryption使用相同的密钥进行加密和解密,而公钥加密public-key encryption使用不同的密钥进行加密和解密。每种方法各有利弊。密钥加密速度更快,而公钥加密更安全,因为它解决了安全共享密钥的问题,将它们结合在一起可以最大限度地利用每种类型的优势。 + +### 公钥加密 + +公钥加密使用两组密钥,称为密钥对。一个是公钥,可以与你想要秘密通信的任何人自由共享。另一个是私钥,应该是一个秘密,永远不会共享。 + +公钥用于加密。如果某人想与你交流敏感信息,你可以将你的公钥发送给他们,他们可以使用公钥加密消息或文件,然后再将其发送给你。私钥用于解密。解密发件人加密的消息的唯一方法是使用私钥。因此,它们被称为“密钥对”,它们是相互关联的。 + +### 如何使用 OpenSSL 加密文件 + +[OpenSSL][2] 是一个了不起的工具,可以执行各种任务,例如加密文件。本文使用安装了 OpenSSL 的 Fedora 计算机。如果你的机器上没有,则可以使用软件包管理器进行安装: + +``` +alice $ cat /etc/fedora-release +Fedora release 33 (Thirty Three) +alice $ +alice $ openssl version +OpenSSL 1.1.1i FIPS  8 Dec 2020 +alice $ +``` + +要探索文件加密和解密,假如有两个用户 Alice 和 Bob,他们想通过使用 OpenSSL 交换加密文件来相互通信。 + +#### 步骤 1:生成密钥对 + +在加密文件之前,你需要生成密钥对。你还需要一个密码短语passphrase,每当你使用 OpenSSL 时都必须使用该密码短语,因此务必记住它。 + +Alice 使用以下命令生成她的一组密钥对: + +``` +alice $ openssl genrsa -aes128 -out alice_private.pem 1024 +``` + +此命令使用 OpenSSL 的 [genrsa][3] 命令生成一个 1024 位的公钥/私钥对。这是可以的,因为 RSA 算法是不对称的。它还使用了 aes128 对称密钥算法来加密 Alice 生成的私钥。 + +输入命令后,OpenSSL 会提示 Alice 输入密码,每次使用密钥时,她都必须输入该密码: + +``` +alice $ openssl genrsa -aes128 -out alice_private.pem 1024 +Generating RSA private key, 1024 bit long modulus (2 primes) +..........+++++ +..................................+++++ +e is 65537 (0x010001) +Enter pass phrase for alice_private.pem: +Verifying - Enter pass phrase for alice_private.pem: +alice $ +alice $ +alice $ ls -l alice_private.pem +-rw-------. 1 alice alice 966 Mar 22 17:44 alice_private.pem +alice $ +alice $ file alice_private.pem +alice_private.pem: PEM RSA private key +alice $ +``` + +Bob 使用相同的步骤来创建他的密钥对: + +``` +bob $ openssl genrsa -aes128 -out bob_private.pem 1024 +Generating RSA private key, 1024 bit long modulus (2 primes) +..................+++++ +............................+++++ +e is 65537 (0x010001) +Enter pass phrase for bob_private.pem: +Verifying - Enter pass phrase for bob_private.pem: +bob $ +bob $ ls -l bob_private.pem +-rw-------. 1 bob bob 986 Mar 22 13:48 bob_private.pem +bob $ +bob $ file bob_private.pem +bob_private.pem: PEM RSA private key +bob $ +``` + +如果你对密钥文件感到好奇,可以打开命令生成的 .pem 文件,但是你会看到屏幕上的一堆文本: + + +``` +alice $ head alice_private.pem +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,E26FAC1F143A30632203F09C259200B9 + +pdKj8Gm5eeAOF0RHzBx8l1tjmA1HSSvy0RF42bOeb7sEVZtJ6pMnrJ26ouwTQnkL +JJjUVPPHoKZ7j4QpwzbPGrz/hVeMXVT/y33ZEEA+3nrobwisLKz+Q+C9TVJU3m7M +/veiBO9xHMGV01YBNeic7MqXBkhIrNZW6pPRfrbjsBMBGSsL8nwJbb3wvHhzPkeM +e+wtt9S5PWhcnGMj3T+2mtFfW6HWpd8Kdp60z7Nh5mhA9+5aDWREfJhJYzl1zfcv +Bmxjf2wZ3sFJNty+sQVajYfk6UXMyJIuWgAjnqjw6c3vxQi0KE3NUNZYO93GQgEF +pyAnN9uGUTBCDYeTwdw8TEzkyaL08FkzLfFbS2N9BDksA3rpI1cxpxRVFr9+jDBz +alice $ +``` + +要查看密钥的详细信息,可以使用以下 OpenSSL 命令打开 .pem 文件并显示内容。你可能想知道在哪里可以找到另一个配对的密钥,因为这是单个文件。你观察的很细致,获取公钥的方法如下: + +``` +alice $ openssl rsa -in alice_private.pem -noout -text +Enter pass phrase for alice_private.pem: +RSA Private-Key: (1024 bit, 2 primes) +modulus: + 00:bd:e8:61:72:f8:f6:c8:f2:cc:05:fa:07:aa:99: + 47:a6:d8:06:cf:09:bf:d1:66:b7:f9:37:29:5d:dc: + c7:11:56:59:d7:83:b4:81:f6:cf:e2:5f:16:0d:47: + 81:fe:62:9a:63:c5:20:df:ee:d3:95:73:dc:0a:3f: + 65:d3:36:1d:c1:7d:8b:7d:0f:79:de:80:fc:d2:c0: + e4:27:fc:e9:66:2d:e2:7e:fc:e6:73:d1:c9:28:6b: + 6a:8a:e8:96:9d:65:a0:8a:46:e0:b8:1f:b0:48:d4: + db:d4:a3:7f:0d:53:36:9a:7d:2e:e7:d8:f2:16:d3: + ff:1b:12:af:53:22:c0:41:51 +publicExponent: 65537 (0x10001) + +<< 截断 >> + +exponent2: + 6e:aa:8c:6e:37:d0:57:37:13:c0:08:7e:75:43:96: + 33:01:99:25:24:75:9c:0b:45:3c:a2:39:44:69:84: + a4:64:48:f4:5c:bc:40:40:bf:84:b8:f8:0f:1d:7b: + 96:7e:16:00:eb:49:da:6b:20:65:fc:a9:20:d9:98: + 76:ca:59:e1 +coefficient: + 68:9e:2e:fa:a3:a4:72:1d:2b:60:61:11:b1:8b:30: + 6e:7e:2d:f9:79:79:f2:27:ab:a0:a0:b6:45:08:df: + 12:f7:a4:3b:d9:df:c5:6e:c7:e8:81:29:07:cd:7e: + 47:99:5d:33:8c:b7:fb:3b:a9:bb:52:c0:47:7a:1c: + e3:64:90:26 +alice $ +``` + +#### 步骤 2:提取公钥 + +注意,公钥是你可以与他人自由共享的密钥,而你必须将私钥保密。因此,Alice 必须提取她的公钥,并将其保存到文件中: + +``` +alice $ openssl rsa -in alice_private.pem -pubout > alice_public.pem +Enter pass phrase for alice_private.pem: +writing RSA key +alice $ +alice $ ls -l *.pem +-rw-------. 1 alice alice 966 Mar 22 17:44 alice_private.pem +-rw-rw-r--. 1 alice alice 272 Mar 22 17:47 alice_public.pem +alice $ +``` + +你可以使用与之前相同的方式查看公钥详细信息,但是这次,输入公钥 .pem 文件: + +``` +alice $ +alice $ openssl rsa -in alice_public.pem -pubin -text -noout +RSA Public-Key: (1024 bit) +Modulus: +    00:bd:e8:61:72:f8:f6:c8:f2:cc:05:fa:07:aa:99: +    47:a6:d8:06:cf:09:bf:d1:66:b7:f9:37:29:5d:dc: +    c7:11:56:59:d7:83:b4:81:f6:cf:e2:5f:16:0d:47: +    81:fe:62:9a:63:c5:20:df:ee:d3:95:73:dc:0a:3f: +$ +``` + +Bob 可以按照相同的过程来提取他的公钥并将其保存到文件中: + +``` +bob $ openssl rsa -in bob_private.pem -pubout > bob_public.pem +Enter pass phrase for bob_private.pem: +writing RSA key +bob $ +bob $ ls -l *.pem +-rw-------. 1 bob bob 986 Mar 22 13:48 bob_private.pem +-rw-r--r--. 1 bob bob 272 Mar 22 13:51 bob_public.pem +bob $ +``` + +#### 步骤 3:交换公钥 + +这些公钥在 Alice 和 Bob 彼此交换之前没有太大用处。有几种共享公钥的方法,例如使用 `scp` 命令将密钥复制到彼此的工作站。 + +将 Alice 的公钥发送到 Bob 的工作站: + +``` +alice $ scp alice_public.pem bob@bob-machine-or-ip:/path/ +``` + +将 Bob 的公钥发送到 Alice 的工作站: + +``` +bob $ scp bob_public.pem alice@alice-machine-or-ip:/path/ +``` + +现在,Alice 有了 Bob 的公钥,反之亦然: + +``` +alice $ ls -l bob_public.pem +-rw-r--r--. 1 alice alice 272 Mar 22 17:51 bob_public.pem +alice $ +``` + +``` +bob $ ls -l alice_public.pem +-rw-r--r--. 1 bob bob 272 Mar 22 13:54 alice_public.pem +bob $ +``` + +#### 步骤 4:使用公钥交换加密的消息 + +假设 Alice 需要与 Bob 秘密交流。她将秘密信息写入文件中,并将其保存到 `top_secret.txt` 中。由于这是一个普通文件,因此任何人都可以打开它并查看其内容,这里并没有太多保护: + + +``` +alice $ +alice $ echo "vim or emacs ?" > top_secret.txt +alice $ +alice $ cat top_secret.txt +vim or emacs ? +alice $ +``` + +要加密此秘密消息,Alice 需要使用 `openssls -encrypt` 命令。她需要为该工具提供三个输入: + + 1. 秘密消息文件的名称 + 2. Bob 的公钥(文件) + 3. 加密后新文件的名称 + +``` +alice $ openssl rsautl -encrypt -inkey bob_public.pem -pubin -in top_secret.txt -out top_secret.enc +alice $ +alice $ ls -l top_secret.* +-rw-rw-r--. 1 alice alice 128 Mar 22 17:54 top_secret.enc +-rw-rw-r--. 1 alice alice  15 Mar 22 17:53 top_secret.txt +alice $ +alice $ +``` + +加密后,原始文件仍然是可见的,而新创建的加密文件在屏幕上看起来像乱码。这样,你可以确定秘密消息已被加密: + +``` +alice $ cat top_secret.txt +vim or emacs ? +alice $ +alice $ cat top_secret.enc +�s��uM)M&>��N��}dmCy92#1X�q󺕦��v���M��@��E�~��1�k~&PU�VhHL�@^P��(��zi�M�4p�e��g+R�1�Ԁ���s�������q_8�lr����C�I-��alice $ +alice $ +alice $ +alice $ hexdump -C ./top_secret.enc +00000000 9e 73 12 8f e3 75 4d 29 4d 26 3e bf 80 4e a0 c5 |.s...uM)M&>..N..| +00000010 7d 64 6d 43 79 39 32 23 31 58 ce 71 f3 ba 95 a6 |}dmCy92#1X.q....| +00000020 c0 c0 76 17 fb f7 bf 4d ce fc 40 e6 f4 45 7f db |..v....M..@..E..| +00000030 7e ae c0 31 f8 6b 10 06 7e 26 50 55 b5 05 56 68 |~..1.k..~&PU..Vh| +00000040 48 4c eb 40 5e 50 fe 19 ea 28 a8 b8 7a 13 69 d7 |HL.@^P...(..z.i.| +00000050 4d b0 34 70 d8 65 d5 07 95 67 2b 52 ea 31 aa d4 |M.4p.e...g+R.1..| +00000060 80 b3 a8 ec a1 73 ed a7 f9 17 c3 13 d4 fa c1 71 |.....s.........q| +00000070 5f 38 b9 6c 07 72 81 a6 fe af 43 a6 49 2d c4 ee |_8.l.r....C.I-..| +00000080 +alice $ +alice $ file top_secret.enc +top_secret.enc: data +alice $ +``` + +删除秘密消息的原始文件是安全的,这样确保任何痕迹都没有: + +``` +alice $ rm -f top_secret.txt +``` + +现在,Alice 需要再次使用 `scp` 命令将此加密文件通过网络发送给 Bob 的工作站。注意,即使文件被截获,其内容也会是加密的,因此内容不会被泄露: + +``` +alice $  scp top_secret.enc bob@bob-machine-or-ip:/path/ +``` + +如果 Bob 使用常规方法尝试打开并查看加密的消息,他将无法看懂该消息: + +``` +bob $ ls -l top_secret.enc +-rw-r--r--. 1 bob bob 128 Mar 22 13:59 top_secret.enc +bob $ +bob $ cat top_secret.enc +�s��uM)M&>��N��}dmCy92#1X�q󺕦��v���M��@��E�~��1�k~&PU�VhHL�@^P��(��zi�M�4p�e��g+R�1�Ԁ���s�������q_8�lr����C�I-��bob $ +bob $ +bob $ hexdump -C top_secret.enc +00000000 9e 73 12 8f e3 75 4d 29 4d 26 3e bf 80 4e a0 c5 |.s...uM)M&>..N..| +00000010 7d 64 6d 43 79 39 32 23 31 58 ce 71 f3 ba 95 a6 |}dmCy92#1X.q....| +00000020 c0 c0 76 17 fb f7 bf 4d ce fc 40 e6 f4 45 7f db |..v....M..@..E..| +00000030 7e ae c0 31 f8 6b 10 06 7e 26 50 55 b5 05 56 68 |~..1.k..~&PU..Vh| +00000040 48 4c eb 40 5e 50 fe 19 ea 28 a8 b8 7a 13 69 d7 |HL.@^P...(..z.i.| +00000050 4d b0 34 70 d8 65 d5 07 95 67 2b 52 ea 31 aa d4 |M.4p.e...g+R.1..| +00000060 80 b3 a8 ec a1 73 ed a7 f9 17 c3 13 d4 fa c1 71 |.....s.........q| +00000070 5f 38 b9 6c 07 72 81 a6 fe af 43 a6 49 2d c4 ee |_8.l.r....C.I-..| +00000080 +bob $ +``` + +#### 步骤 5:使用私钥解密文件 + +Bob 需要使用 OpenSSL 来解密消息,但是这次使用的是 `-decrypt` 命令行参数。他需要向工具程序提供以下信息: + + 1. 加密的文件(从 Alice 那里得到) + 2. Bob 的私钥(用于解密,因为文件是用 Bob 的公钥加密的) + 3. 通过重定向保存解密输出的文件名 + +``` +bob $ openssl rsautl -decrypt -inkey bob_private.pem -in top_secret.enc > top_secret.txt +Enter pass phrase for bob_private.pem: +bob $ +``` + +现在,Bob 可以阅读 Alice 发送给他的秘密消息: + +``` +bob $ ls -l top_secret.txt +-rw-r--r--. 1 bob bob 15 Mar 22 14:02 top_secret.txt +bob $ +bob $ cat top_secret.txt +vim or emacs ? +bob $ +``` + +Bob 需要回复 Alice,因此他将秘密回复写在一个文件中: + +``` +bob $ echo "nano for life" > reply_secret.txt +bob $ +bob $ cat reply_secret.txt +nano for life +bob $ +``` + +#### 步骤 6:使用其他密钥重复该过程 + +为了发送消息,Bob 采用和 Alice 相同的步骤,但是由于该消息是发送给 Alice 的,因此他需要使用 Alice 的公钥来加密文件: + +``` +bob $ openssl rsautl -encrypt -inkey alice_public.pem -pubin -in reply_secret.txt -out reply_secret.enc +bob $ +bob $ ls -l reply_secret.enc +-rw-r--r--. 1 bob bob 128 Mar 22 14:03 reply_secret.enc +bob $ +bob $ cat reply_secret.enc +�F݇��.4"f�1��\��{o԰$�M��I{5�|�\�l͂�e��Y�V��{�|!$c^a + �*Ԫ\vQ�Ϡ9����'��ٮsP��'��Z�1W�n��k���J�0�I;P8������&:bob $ +bob $ +bob $ hexdump -C ./reply_secret.enc +00000000 92 46 dd 87 04 bc a7 2e 34 22 01 66 1a 13 31 db |.F......4".f..1.| +00000010 c4 5c b4 8e 7b 6f d4 b0 24 d2 4d 92 9b 49 7b 35 |.\..{o..$.M..I{5| +00000020 da 7c ee 5c bb 6c cd 82 f1 1b 92 65 f1 8d f2 59 |.|.\.l.....e...Y| +00000030 82 56 81 80 7b 89 07 7c 21 24 63 5e 61 0c ae 2a |.V..{..|!$c^a..*| +00000040 d4 aa 5c 76 51 8d cf a0 39 04 c1 d7 dc f0 ad 99 |..\vQ...9.......| +00000050 27 ed 8e de d9 ae 02 73 50 e0 dd 27 13 ae 8e 5a |'......sP..'...Z| +00000060 12 e4 9a 31 57 b3 03 6e dd e1 16 7f 6b c0 b3 8b |...1W..n....k...| +00000070 4a cf 30 b8 49 3b 50 38 e0 9f 84 f6 83 da 26 3a |J.0.I;P8......&:| +00000080 +bob $ +bob $ # remove clear text secret message file +bob $ rm -f reply_secret.txt +``` + +Bob 通过 `scp` 将加密的文件发送至 Alice 的工作站: + +``` +$ scp reply_secret.enc alice@alice-machine-or-ip:/path/ +``` + +如果 Alice 尝试使用常规工具去阅读加密的文本,她将无法理解加密的文本: + +``` +alice $ +alice $ ls -l reply_secret.enc +-rw-r--r--. 1 alice alice 128 Mar 22 18:01 reply_secret.enc +alice $ +alice $ cat reply_secret.enc +�F݇��.4"f�1��\��{o԰$�M��I{5�|�\�l͂�e��Y�V��{�|!$c^a + �*Ԫ\vQ�Ϡ9����'��ٮsP��'��Z�1W�n��k���J�0�I;P8������&:alice $ +alice $ +alice $ +alice $ hexdump -C ./reply_secret.enc +00000000 92 46 dd 87 04 bc a7 2e 34 22 01 66 1a 13 31 db |.F......4".f..1.| +00000010 c4 5c b4 8e 7b 6f d4 b0 24 d2 4d 92 9b 49 7b 35 |.\..{o..$.M..I{5| +00000020 da 7c ee 5c bb 6c cd 82 f1 1b 92 65 f1 8d f2 59 |.|.\.l.....e...Y| +00000030 82 56 81 80 7b 89 07 7c 21 24 63 5e 61 0c ae 2a |.V..{..|!$c^a..*| +00000040 d4 aa 5c 76 51 8d cf a0 39 04 c1 d7 dc f0 ad 99 |..\vQ...9.......| +00000050 27 ed 8e de d9 ae 02 73 50 e0 dd 27 13 ae 8e 5a |'......sP..'...Z| +00000060 12 e4 9a 31 57 b3 03 6e dd e1 16 7f 6b c0 b3 8b |...1W..n....k...| +00000070 4a cf 30 b8 49 3b 50 38 e0 9f 84 f6 83 da 26 3a |J.0.I;P8......&:| +00000080 +alice $ +``` + +所以,她使用 OpenSSL 解密消息,只不过这次她提供了自己的私钥并将输出保存到文件中: + +``` +alice $ openssl rsautl -decrypt -inkey alice_private.pem -in reply_secret.enc > reply_secret.txt +Enter pass phrase for alice_private.pem: +alice $ +alice $ ls -l reply_secret.txt +-rw-rw-r--. 1 alice alice 14 Mar 22 18:02 reply_secret.txt +alice $ +alice $ cat reply_secret.txt +nano for life +alice $ +``` + +### 了解 OpenSSL 的更多信息 + +OpenSSL 在加密界是真正的瑞士军刀。除了加密文件外,它还可以执行许多任务,你可以通过访问 OpenSSL [文档页面][4]来找到使用它的所有方式,包括手册的链接、 《OpenSSL Cookbook》、常见问题解答等。要了解更多信息,尝试使用其自带的各种加密算法,看看它是如何工作的。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/encryption-decryption-openssl + +作者:[Gaurav Kamathe][a] +选题:[lujun9972][b] +译者:[MjSeven](https://github.com/MjSeven) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/gkamathe +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003601_05_mech_osyearbook2016_security_cc.png?itok=3V07Lpko "A secure lock." +[2]: https://www.openssl.org/ +[3]: https://www.openssl.org/docs/man1.0.2/man1/genrsa.html +[4]: https://www.openssl.org/docs/ \ No newline at end of file diff --git a/published/202105/20210429 Experiencing the -e- OS- The Open Source De-Googled Android Version.md b/published/202105/20210429 Experiencing the -e- OS- The Open Source De-Googled Android Version.md new file mode 100644 index 0000000000..6a957af93e --- /dev/null +++ b/published/202105/20210429 Experiencing the -e- OS- The Open Source De-Googled Android Version.md @@ -0,0 +1,132 @@ +[#]: subject: (Experiencing the /e/ OS: The Open Source De-Googled Android Version) +[#]: via: (https://itsfoss.com/e-os-review/) +[#]: author: (Dimitrios https://itsfoss.com/author/dimitrios/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13442-1.html) + +体验 /e/ OS:开源的去谷歌化的安卓 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/30/222621vsgf8q1et5oyysgs.jpg) + +/e/ 安卓操作系统是一个以隐私为导向的去谷歌化的移动操作系统,是 Lineage OS 的复刻,由 Mandrake Linux(现在的 [Mandriva Linux][2])的创建者 [Gaël Duval][1] 于 2018 年中期创立。 + +尽管安卓在 2007 年成为了一个开源项目,但当安卓得到普及时,谷歌使用专有软件取代了一些操作系统元素。/e/ 基金会用 [MicroG][3] 取代了其中的专有的应用程序和服务,这是一个开源的替代框架,可以最大限度地减少跟踪和设备活动。 + +我们收到的 [Fairphone 3][4] 预装了 /e/ OS,这是一个来自 /e/ 基金会的 [以道德的方式创造的智能手机][5]。我使用了一个月这个设备,然后把它返还给了他们,我将分享我对这个隐私设备的体验。我忘了截图,所以我将分享来自官方网站的通用图片。 + +### 在道德的 Fairphone 设备上体验 /e/ 移动操作系统 + +在我进一步说明之前,让我澄清一下,Fairphone 3 并不是使用 /e/ 的唯一选择。如果你要从他们那里购买设备,/e/ 基金会会给你 [一些智能手机的选择][6]。 + +你不需要购买设备来使用 /e/ OS。按照 /e/ 基金会的说法,你可以 [在 100 多个支持的设备上使用它][7]。 + +尽管我很喜欢使用 Fairphone 3,而且我的个人信仰与 Fairphone 的宣言一致,但我不会把注意力放在设备上,而只是放在 /e/ OS 上。 + +#### 有评级隐私的应用程序 + +![][8] + +我把 Fairphone 3 作为我的日常使用设备用了几天时间,以比较与我的“普通”安卓手机在现实中的使用情况。 + +首先,我想看看我使用的所有应用程序是否都可以在 /e/ 基金会创建的“[应用商店][9]”上找到。/e/ 应用商店包含有隐私评级的应用程序。 + +![/e/ OS 应用商店有应用程序的隐私评级][10] + +我可以找到许多应用程序,包括来自谷歌的应用程序。这意味着,如果有人真的想使用一些谷歌的服务,它仍然可以作为一个选项来下载。尽管与其他安卓设备不同,没有强行将谷歌服务塞进你的嘴里。 + +虽然有很多应用程序,但我无法找到我在英国使用的手机银行应用程序。我不得不承认,手机银行应用程序可以在一定程度上促进便利。作为替代方案,我不得不在需要时进入电脑使用网上银行平台。 + +从可用性的角度来看,/e/ OS 可以取代我的“标准”安卓操作系统,但会有一些小插曲,比如银行应用程序。 + +#### 如果不是谷歌的,那是什么? + +想知道 /e/ OS 使用哪些基本的应用程序,而不是谷歌的那些?这里有一个快速列表: + + * [魔法地球][11] —— 逐向道路导航 + * 浏览器 —— Chromium 的一个非谷歌复刻版本 + * 邮件 —— [K9-mail][12] 的一个复刻 + * 短信 —— QKSMS 的一个复刻 + * 照相机 —— OpenCamera 的一个复刻 + * 天气 —— GoodWeather 的一个复刻 + * OpenTasks —— 任务组织者 + * 日历:[Etar calendar][13] 的一个复刻 + +#### Bliss Launcher 和整体设计 + +![][14] + +/e/ OS 的默认启动程序被称为 “Bliss Launcher”,其目的是为了获得有吸引力的外观和感觉。对我来说,这个设计感觉与 iOS 相似。 + +通过向左滑动面板,你可以访问 /e/ 选择的一些有用的小工具。 + +![][15] + + * 搜索:快速搜索预装的应用程序或搜索 Web + * APP 建议:前 4 个最常用的应用程序将出现在这个小部件上 + * 天气:天气小部件显示的是当地的天气。它不会自动检测位置,需要进行配置。 + * 编辑:如果你想在屏幕上有更多的小部件,你可以通过点击“编辑”按钮添加它们。 + +总而言之,用户界面是干净整洁的简单明了,增强了愉快的用户体验。 * 天气。天气小部件显示的是当地的天气。它不会自动检测位置,需要进行配置。 + * 编辑:如果你想在屏幕上有更多的小部件,你可以通过点击编辑按钮添加它们。 + +总而言之,用户界面干净整洁、简单明了,增强了愉快的用户体验。 + +#### 去谷歌化和面向隐私的操作系统 + +如前所述,/e/ 操作系统是一个去谷歌化的操作系统,它基于 [Lineage OS][16] 的开源核心。所有的谷歌应用程序已经被删除,谷歌服务已经被 MicroG 框架所取代。/e/ OS 仍然与所有的安卓应用兼容。 + +主要的隐私功能: + + * 谷歌搜索引擎已被 DuckDuckGo 等替代品取代 + * 谷歌服务已被 microG 框架所取代 + * 使用替代的默认应用程序,而不是谷歌应用程序 + * 取消了对谷歌服务器的连接检查 + * NTP 服务器已被替换为标准的 NTP 服务:pool.ntp.org + * DNS 默认服务器由 9.9.9.9 取代,可以根据用户的选择进行编辑 + * 地理定位是在 GPS 的基础上使用 Mozilla 定位服务 + +> 隐私声明 +> +> 请注意,使用由 /e/ 基金会提供的智能手机并不自动意味着无论你做什么都能保证你的隐私。分享你的个人信息的社交媒体应用程序应在你的意识下使用。 + +### 结论 + +我成为安卓用户已经超过十年了。/e/ OS 给我带来了积极的惊喜。关注隐私的用户可以发现这个解决方案非常吸引人,而且根据所选择的应用程序和设置,可以再次感觉到使用智能手机的安全。 + +如果你是一个有隐私意识的技术专家,并且能够自己找到解决问题的方法,我向你推荐它。对于那些习惯于谷歌主流服务的人来说,/e/ 生态系统可能会让他们不知所措。 + +你使用过 /e/ OS 吗?你的使用经验如何?你怎么看这些关注隐私的项目? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/e-os-review/ + +作者:[Dimitrios][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/dimitrios/ +[b]: https://github.com/lujun9972 +[1]: https://en.wikipedia.org/wiki/Ga%C3%ABl_Duval +[2]: https://en.wikipedia.org/wiki/Mandriva_Linux +[3]: https://en.wikipedia.org/wiki/MicroG +[4]: https://esolutions.shop/shop/e-os-fairphone-3-fr/ +[5]: https://www.fairphone.com/en/story/?ref=header +[6]: https://esolutions.shop/shop/ +[7]: https://doc.e.foundation/devices/ +[8]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/e-ecosystem.png?resize=768%2C510&ssl=1 +[9]: https://e.foundation/e-os-available-applications/ +[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/04/e-os-apps-privacy-ratings.png?resize=300%2C539&ssl=1 +[11]: https://www.magicearth.com/ +[12]: https://k9mail.app/ +[13]: https://github.com/Etar-Group/Etar-Calendar +[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/fairphone.jpg?resize=600%2C367&ssl=1 +[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/e-bliss-launcher.jpg?resize=300%2C533&ssl=1 +[16]: https://lineageos.org/ diff --git a/published/202105/20210429 Linux tips for using GNU Screen.md b/published/202105/20210429 Linux tips for using GNU Screen.md new file mode 100644 index 0000000000..969c31dcfb --- /dev/null +++ b/published/202105/20210429 Linux tips for using GNU Screen.md @@ -0,0 +1,96 @@ +[#]: subject: (Linux tips for using GNU Screen) +[#]: via: (https://opensource.com/article/21/4/gnu-screen-cheat-sheet) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (ddl-hust) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13387-1.html) + +使用 GNU Screen 的小技巧 +====== + +> 学习基本的 GNU Screen 终端复用技术,然后下载我们的终端命令备忘录,以便你能够熟悉常用的快捷方式。 + +![](https://img.linux.net.cn/data/attachment/album/202105/13/105050halpppp0pop96ap7.jpg) + +对于一般用户而言,命令行终端窗口可能是令人困惑和神秘的。但随着你对 Linux 终端的进一步了解,你很快就会意识到它的高效和强大。不过,也不需要很长时间,你就会想让终端变得更加高效,除了将更多的终端放到你的终端,还有什么高好的方法能够提升你的终端效率呢? + +### 终端复用 + +终端的许多优点之一是它是一个集中控制的界面。它是一个能让你访问数百个应用程序的窗口,而你与每一个应用程序进行交互所需要的只是一个键盘。但是,现代计算机几乎总是有多余的处理能力,而且现代计算机专家喜欢多任务处理,导致一个窗口处理数百个应用程序的能力是相当有限的。 + +解决这一问题的常见答案是终端复用:即将虚拟终端叠放在一起,然后在它们之间移动的能力。通过终端复用器,你保持了集中控制,但是当你进行多任务时,你能够进行终端切换。更好的是,你能够在终端中拆分屏幕,使得在同一时间显示多个屏幕窗口。 + +### 选择合适的复用器 + +一些终端提供类似的功能,有标签式界面和分割式视图,但也有细微的差别。首先,这些终端的功能依赖于图形化的桌面环境。其次,许多图形化的终端功能需要鼠标交互或使用不方便的键盘快捷键。终端复用器的功能在文本控制台上和在图形桌面上一样好用,而且键位绑定是针对常见的终端序列设计的,很方便。 + +现有两种流行的复用器:[tmux][2] 和 [GNU Screen][3]。尽管你与它们互动的方式略有不同,但它们做同样的事情,而且大多具有相同的功能。这篇文章是 GNU Screen 的入门指南。关于 tmux 的相关介绍,请阅读 Kevin Sonney 的 [tmux 介绍][4]。 + +### 使用 GNU Screen + +GNU Screen 的基本用法很简单,通过 `screen` 命令启动,你将进入 Screen 会话的第 0 个窗口。在你决定需要一个新的终端提示符前,你可能很难注意到有什么变化。 + +当一个终端窗口被某项活动占用(比如,你启动了文本编辑器 [Vim][5] 或 [Jove][6] 或者你在处理音视频,或运行批处理任务),你可以新建一个窗口。要打开一个新的窗口,按 `Ctrl+A`,释放,然后按 `c`。这将在你现有窗口的基础上创建一个新的窗口。 + +你会知道当前你是在一个新的窗口中,因为你的终端除了默认的提示符外,似乎没有任何东西。当然,你的另一个终端仍然存在,它只是躲在新窗口的后面。要遍历打开的窗口,按 `Ctrl+A`,释放,然后按 `n`(表示下一个)或按 `p`(表示上一个)。在只打开两个窗口的情况下, `n` 和 `p` 的功能是一样的,但你可以随时打开更多的窗口(`Ctrl+A`,然后 `c` ),并在它们之间切换。 + +### 分屏 + +GNU Screen 的默认行为更像移动设备的屏幕,而不是桌面:你一次只能看到一个窗口。如果你因为喜欢多任务而使用 GNU Screen ,那么只关注一个窗口可能看起来是一种退步。幸运的是,GNU Screen 可以让你把终端分成窗口中的窗口。 + +要创建一个水平分割窗口,按 `Ctrl+A`,然后按 `s` 。这将把一个窗口置于另一个窗口之上,就像窗格一样。然而,在你告诉它要显示什么之前,分割的空间是没有用途的。因此,在创建一个分割窗后,你可以用 `Ctrl+A` ,然后用 `Tab` 移动到分割窗中。一旦进入,使用 `Ctrl+A` 然后 `n` 浏览所有可用的窗口,直到你想显示的内容出现在分割窗格中。 + +你也可以按 `Ctrl+A` 然后按 `|` (这是一个管道字符,在大多数键盘上通过按下 `shift` 键加上 `\`)创建垂直分割窗口。 + +### 自定义 GNU Screen + + GNU Screen 使用基于 `Ctrl+A` 的快捷键。根据你的习惯,这可能会让你感觉非常自然,也可能非常不方便,因为你可能会用 `Ctrl+A` 来移动到一行的开头。无论怎样,GNU Screen 允许通过 `.screenrc` 配置文件进行各种定制。你可以用这个来改变触发键的绑定(称为 “转义” 键绑定)。 + +``` +escape ^jJ +``` + +你还可以添加一个状态行,以帮助你在 Screen 会话中保持自己不迷失。 + +``` +# status bar, with current window highlighted +hardstatus alwayslastline +hardstatus string '%{= kG}[%{G}%H%? %1`%?%{g}][%= %{= kw}%-w%{+b yk} %n*%t%?(%u)%? %{-}%+w %=%{g}][%{B}%m/%d %{W}%C%A%{g}]' + +# enable 256 colors +attrcolor b ".I" +termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' +defbce on +``` + +在有多个窗口打开的会话中,有一个时刻提醒哪些窗口具有焦点活动,哪些窗口有后台活动的提醒器特别有用。它类似一种终端的任务管理器。 + +### 下载备忘单 + +当你学习 GNU Screen 的使用方法时,需要记住很多新的键盘命令。有些命令你马上就能记住,但那些你不常使用的命令可能就很难记住了。你可以按 `Ctrl+A` 然后再按 `?` 来访问 GNU Screen 的帮助界面,但如果你更喜欢一些可以打印出来并放在键盘边的东西,请 [下载我们的 GNU Screen 备忘单][7]。 + +学习 GNU Screen 是提高你使用你最喜欢的 [终端模拟器][8] 的效率和敏捷性的一个好方法。请试一试吧! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/gnu-screen-cheat-sheet + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[ddl-hust](https://github.com/ddl-hust) +校对:[wxy](https://github.com/wxy) + +本文由[LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux 中国](https://linux.cn/)荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/terminal_command_linux_desktop_code.jpg?itok=p5sQ6ODE (Terminal command prompt on orange background) +[2]: https://github.com/tmux/tmux/wiki +[3]: https://www.gnu.org/software/screen/ +[4]: https://opensource.com/article/20/1/tmux-console +[5]: https://opensource.com/tags/vim +[6]: https://opensource.com/article/17/1/jove-lightweight-alternative-vim +[7]: https://opensource.com/downloads/gnu-screen-cheat-sheet +[8]: https://opensource.com/article/21/2/linux-terminals diff --git a/published/202105/20210430 Access an alternate internet with OpenNIC.md b/published/202105/20210430 Access an alternate internet with OpenNIC.md new file mode 100644 index 0000000000..5381d44ab5 --- /dev/null +++ b/published/202105/20210430 Access an alternate internet with OpenNIC.md @@ -0,0 +1,139 @@ +[#]: subject: (Access an alternate internet with OpenNIC) +[#]: via: (https://opensource.com/article/21/4/opennic-internet) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13393-1.html) + +用 OpenNIC 访问另一个互联网 +====== + +> 在超级信息高速公路上绕行。 + +![](https://img.linux.net.cn/data/attachment/album/202105/15/181625le76l758lel653b5.jpg) + +用传奇的 DNS 黑客 Dan Kaminsky 的话说,“事实证明,互联网对全球社会而言意义重大”。为了使互联网发挥作用,计算机必须能够在最复杂的网络万维网(WWW)中找到彼此。这是几十年前给政府工作人员和学术界 IT 人员提出的问题,而今天我们使用的正是他们的解决方案。然而,他们实际上并不是在寻求建立 互联网the Internet,他们是在为 互联网络(实际上是 级联网catenets,即“级联的网络concatenated networks
”,但这个术语最终不再流行)定义规范,它是一个互连的网络interconnected networks的通用术语。 + +根据这些规范,网络使用数字组合,作为每台在线计算机的一种家地址,并为每个网站分配一个人性化但高度结构化的“主机名”(如 `example.com`)。由于用户主要是通过网站 _名称_ 与互联网互动,可以说互联网的运作只是因为我们都同意一个标准化的命名方案。如果有足够多的人决定使用不同的命名方案,互联网的工作方式 _可能_ 会有所不同。一群用户可以形成一个平行的互联网,它使用相同的物理基础设施(电缆、卫星和其他传输方式,将数据从一个地方传送到另一个地方),但使用不同的方法将主机名与编号地址联系起来。 + +事实上,这已经存在了,这篇文章展示了你如何访问它。 + +### 了解名称服务器 + +术语“互联网internet”实际上是 互联interconnected网络networks 这两个术语的组合,因为这正是它的本质。就像一个城市里的邻里、一个国家里的城市、或一个大陆里的国家,或一个星球里的大陆一样,互联网通过将数据从一个家庭或办公室网络传输到数据中心和服务器房或其他家庭或办公室网络而跨越了全球。这是一项艰巨的任务,但它并非没有先例。毕竟,电话公司很久以前就把世界连接起来了,在那之前,电报和邮政服务也是这样做的。 + +在电话或邮件系统中,有一份名单,无论是正式的还是非正式的,都将人名与实际地址联系起来。它过去以电话簿的形式传递到家里,该电话簿是社区内每个电话所有者的目录。邮局的运作方式不同:他们通常依靠寄信人知道预定收信人的姓名和地址,但邮政编码和城市名称被用来把信送到正确的邮局。无论哪种方式,都需要有一个标准的组织方案。 + +对于计算机来说,[IP 协议][2] 描述了必须如何设置互联网上的地址格式。域名服务器 [(DNS) 协议][3] 描述了如何将人性化名称分配给 IP 以及从 IP 解析。无论你使用的是 IPv4 还是 IPv6,其想法都是一样的:当一个节点(可能是一台计算机或通往另一个网络的网关)加入一个网络时,它被分配一个 IP 地址。 + +如果你愿意,你可以在 [ICANN][4](一个帮助协调互联网上的网站名称的非营利组织)注册一个域名,并将该名称指向该 IP。没有要求你“拥有”该 IP 地址。任何人都可以将任何域名指向任何 IP 地址。唯一的限制是,一次只能有一个人拥有一个特定的域名,而且域名必须遵循公认的 DNS 命名方案。 + +域名及其相关 IP 地址的记录被输入到 DNS 中。当你在浏览器中导航到一个网站时,它会迅速查询 DNS 网络,以找到与你所输入(或从搜索引擎点击)的任何 URL 相关的 IP 地址。 + +### 一个不同的 DNS + +为了避免在谁拥有哪个域名的问题上发生争论,大多数域名注册商对域名注册收取一定的费用。该费用通常是象征性的,有时甚至是 0 美元(例如,`freenom.com` 提供免费的 `.tk`、`.ml`、`.gq` 和 `.cf` 域名,先到先得)。 + +在很长一段时间里,只有几个“顶级”域名,包括 `.org`、`.edu` 和 `.com`。现在有很多,包括 `.club`、`.biz`、`.name`、`.international` 等等。本质上它们就是字母组合,但是,有很多潜在的顶级域名是无效的,如 `.null`。如果你试图导航到一个以 `.null` 结尾的网站,那么你不会成功。它不能注册,也不是域名服务器的有效条目,而且它根本就不存在。 + +[OpenNIC项目][5] 已经建立了一个备用的 DNS 网络,将域名解析为 IP 地址,但它包括目前互联网不使用的名字。可用的顶级域名包括: + + * .geek + * .indy + * .bbs + * .gopher + * .o + * .libre + * .oss + * .dyn + * .null + +你可以在这些(以及更多的)顶级域名中注册一个域名,并在 OpenNIC 的 DNS 系统上注册,使它们映射到你选择的 IP 地址。 + +换句话说,一个网站可能存在于 OpenNIC 网络中,但对于不使用 OpenNIC 名称服务器的人来说,仍然无法访问。这绝不是一种安全措施,甚至不是一种混淆手段。这只是一种有意识的选择,在 _超级信息高速公路上绕行_ 。 + +### 如何使用 OpenNIC 的 DNS 服务器 + +要访问 OpenNIC 网站,你必须配置你的计算机使用 OpenNIC 的 DNS 服务器。幸运的是,这并不是一个非此即彼的选择。通过使用一个 OpenNIC 的 DNS 服务器,你可以同时访问 OpenNIC 和标准网络。 + +要配置你的 Linux 电脑使用 OpenNIC 的 DNS 服务器,你可以使用 [nmcli][6] 命令,这是 Network Manager 的一个终端界面。在开始配置之前,请访问 [opennic.org][5],寻找离你最近的 OpenNIC DNS 服务器。与标准 DNS 和 [边缘计算][7] 一样,服务器在地理上离你越近,你的浏览器查询时的延迟就越少。 + +下面是如何使用 OpenNIC: + +1、首先,获得一个连接列表: + +``` +$ sudo nmcli connection +NAME                TYPE             DEVICE +Wired connection 1  802-3-ethernet   eth0 +MyPersonalWifi      802-11-wireless  wlan0 +ovpn-phx2-tcp       vpn              -- +``` + +你的连接肯定与这个例子不同,但要关注第一栏。这提供了你的连接的可读名称。在这个例子中,我将配置我的以太网连接,但这个过程对无线连接是一样的。 + +2、现在你知道了需要修改的连接的名称,使用 `nmcli` 更新其 `ipv4.dns` 属性: + +``` +$ sudo nmcli con modify "Wired connection 1" ipv4.dns "134.195.4.2" +``` + +在这个例子中,`134.195.4.2` 是离我最近的服务器。 + +3、防止 Network Manager 使用你路由器设置的内容自动更新 `/etc/resolv.conf`: + +``` +$ sudo nmcli con modify "Wired connection 1" ipv4.ignore-auto-dns yes +``` + +4、将你的网络连接关闭,然后再次启动,以实例化新的设置: + +``` +$ sudo nmcli con down "Wired connection 1" +$ sudo nmcli con up "Wired connection 1" +``` + +完成了。你现在正在使用 OpenNIC 的 DNS 服务器。 + +#### 路由器上的 DNS + +你可以通过对你的路由器做这样的修改,将你的整个网络设置为使用 OpenNIC。你将不必配置你的计算机的连接,因为路由器将自动提供正确的 DNS 服务器。我无法演示这个,因为路由器的接口因制造商而异。此外,一些互联网服务提供商 (ISP) 不允许你修改名称服务器的设置,所以这并不总是一种选择。 + +### 测试 OpenNIC + +为了探索你所解锁的“其他”互联网,尝试在你的浏览器中导航到 `grep.geek`。如果你输入 `http://grep.geek`,那么你的浏览器就会带你到 OpenNIC 的搜索引擎。如果你只输入 `grep.geek`,那么你的浏览器会干扰你,把你带到你的默认搜索引擎(如 [Searx][8] 或 [YaCy][9]),并在窗口的顶部提供一个导航到你首先请求的页面。 + +![OpenNIC][10] + +不管怎么说,你最终还是来到了 `grep.geek`,现在可以在网上搜索 OpenNIC 的版本了。 + +### 广阔天地 + +互联网旨在成为一个探索、发现和平等访问的地方。OpenNIC 利用现有的基础设施和技术帮助确保这些东西。它是一个可选择的互联网替代方案。如果这些想法吸引了你,那就试一试吧! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/4/opennic-internet + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/LAW-Internet_construction_9401467_520x292_0512_dc.png?itok=RPkPPtDe (An intersection of pipes.) +[2]: https://tools.ietf.org/html/rfc791 +[3]: https://tools.ietf.org/html/rfc1035 +[4]: https://www.icann.org/resources/pages/register-domain-name-2017-06-20-en +[5]: http://opennic.org +[6]: https://opensource.com/article/20/7/nmcli +[7]: https://opensource.com/article/17/9/what-edge-computing +[8]: http://searx.me +[9]: https://opensource.com/article/20/2/open-source-search-engine +[10]: https://opensource.com/sites/default/files/uploads/did-you-mean.jpg (OpenNIC) +[11]: https://creativecommons.org/licenses/by-sa/4.0/ diff --git a/published/202105/20210501 Chrome Browser Keeps Detecting Network Change in Linux- Here-s How to Fix it.md b/published/202105/20210501 Chrome Browser Keeps Detecting Network Change in Linux- Here-s How to Fix it.md new file mode 100644 index 0000000000..d111cd3755 --- /dev/null +++ b/published/202105/20210501 Chrome Browser Keeps Detecting Network Change in Linux- Here-s How to Fix it.md @@ -0,0 +1,96 @@ +[#]: subject: "Chrome Browser Keeps Detecting Network Change in Linux? Here’s How to Fix it" +[#]: via: "https://itsfoss.com/network-change-detected/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lujun9972" +[#]: translator: "HuengchI" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13389-1.html" + +Linux 下 Chrome 浏览器一直报“检测到网络变化”,修复方法来了 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/14/140644y6xx6e8100wzxrr5.jpg) + +过去几天,我在 Ubuntu Linux系统上遇到了一个奇怪的问题。我用的是 Firefox 浏览器和 [Brave 浏览器][1]。Brave 浏览器一直报“network change detection”错误,几乎每次刷新都报错,但是在 Firefox 浏览器中一切正常。 + +![][2] + +这个问题严重到了几乎不能使用浏览器的地步。我不能用 [Feedly][3] 来从我最喜欢的网站浏览信息流,每一个搜索结果都要多次刷新,网站也需要多次刷新。 + +作为替代,我尝试 [在 Ubuntu 上安装 Chrome 浏览器][4]。但是问题依然存在。我还 [在 Linux 上安装了微软 Edge][5],但是问题依旧。基本上,任何 Chromium 内核的浏览器都会持续报“ERR_NETWORK_CHANGED”错误。 + +幸运地是,我找到了一个方法来修复这个问题。我将会把解决步骤分享给你,如果你也遇到了同样的问题,这将能够帮到你。 + +### 解决基于 Chromium 内核的浏览器频繁报“network change detection”错的问题 + +对我而言,关闭网络设置中的 IPv6 是一个有效的诀窍。虽然现在我还不确定是什么导致了这个故障,但是 IPv6 会在很多系统中导致错误并不是什么鲜为人知的事。如果你的系统,路由器和其他设备用了 IPv6 而不是古老却好用的 IPv4,那么你就可能遭遇和我相同的网络连接故障。 + +幸亏,[关闭 Ubuntu 的 IPv6][6] 并不算难。有好几种方法都能够达到目的,我将会分享一个大概是最容易的方法。这个方法就是用 GRUB 来关闭 IPv6。 + +> 新手注意! +> +> 如果你不习惯于用命令行和终端,请额外注意这些步骤。仔细的阅读这些操作说明。 + +#### 第 1 步:打开 GRUB 配置文件以编辑 + +打开终端。用下面的命令来在 Nano 编辑器中打开 GRUB 配置文件。这里你需要输入你的账户密码。 + +``` +sudo nano /etc/default/grub +``` + +我希望你懂得一点 [使用 Nano 编辑器][7] 的方法。使用方向键移动光标,找到以`GRUB_CMDLINE_LINUX` 开头的这行。把它的值修改成这样: + +``` +GRUB_CMDLINE_LINUX="ipv6.disable=1" +``` + +注意引号和空格。不要动其他行。 + +![][8] + +使用 `Ctrl+x` 快捷键保存更改。按 `Y` 或者回车确认。 + +#### 第 2 步:更新 GRUB + +你已经修改了 GRUB 引导器的配置,但是在你更新 GRUB 之前这些更改都不会生效。使用下面的命令来更新: + +``` +sudo update-grub +``` + +![][9] + +现在当你重启系统之后,IPv6 将会被关闭了。你不应该再遇到网络中断的故障了。 + +你可能会想为什么我没提从网络设置中关掉 IPv6。这是因为目前 Ubuntu 用了 [Netplan][10] 来管理网络配置,似乎在网络设置中做出的更改并没有被完全应用到 Netplan 中。我试过虽然在网络设置中关掉了 IPv6,但是这个问题并没有被解决,直到我用了上述命令行的方法。 + +即使过了这么多年,IPv6 的支持还是没有成熟,并且持续引发了很多故障。比如关闭 IPv6 有时候能 [提高 Linux 下的 Wi-Fi 速度][11]。够扯吧? + +不管怎样,我希望上述小方法也能够帮助你解决系统中的“network change detection”故障。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/network-change-detected/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[HuengchI](https://github.com/HuengchI) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/brave-web-browser/ +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/network-change-detected.png?resize=800%2C418&ssl=1 +[3]: https://feedly.com/ +[4]: https://itsfoss.com/install-chrome-ubuntu/ +[5]: https://itsfoss.com/microsoft-edge-linux/ +[6]: https://itsfoss.com/disable-ipv6-ubuntu-linux/ +[7]: https://itsfoss.com/nano-editor-guide/ +[8]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/disabling-ipv6-via-grub.png?resize=800%2C453&ssl=1 +[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/04/updating-grub-ubuntu.png?resize=800%2C434&ssl=1 +[10]: https://netplan.io/ +[11]: https://itsfoss.com/speed-up-slow-wifi-connection-ubuntu/ diff --git a/published/202105/20210502 Fedora Vs Red Hat- Which Linux Distro Should You Use and Why.md b/published/202105/20210502 Fedora Vs Red Hat- Which Linux Distro Should You Use and Why.md new file mode 100644 index 0000000000..c721782052 --- /dev/null +++ b/published/202105/20210502 Fedora Vs Red Hat- Which Linux Distro Should You Use and Why.md @@ -0,0 +1,183 @@ +[#]: subject: (Fedora Vs Red Hat: Which Linux Distro Should You Use and Why?) +[#]: via: (https://itsfoss.com/fedora-vs-red-hat/) +[#]: author: (Sarvottam Kumar https://itsfoss.com/author/sarvottam/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13372-1.html) + +Fedora 和红帽 Linux:你应该使用哪个,为什么? +====== + +Fedora 和红帽 Linux。这两个 Linux 发行版都属于同一个组织,都使用 RPM 包管理器,都提供桌面版和服务器版。这两个 Linux 发行版对操作系统世界都有较大的影响。 + +这就是为什么在这两个类似的发行版之间比较容易混淆的原因。在这篇文章中,我将讨论红帽 Linux 和 Fedora 的相似之处和区别。 + +如果你想在两者之间做出选择,或者只是想了解来自同一组织的两个发行版的概念,这将对你有所帮助。 + +### Fedora 和红帽 Linux 的区别 + +![][1] + +我们先来谈谈这两个发行版的区别。 + +#### 社区版与企业版 + +早在 1995 年,红帽 Linux 就有了它的第一个正式版本,它是作为盒装产品出售的。它也被称为红帽商业 LinuxRed Hat Commercial Linux。 + +后来在 2003 年,红帽把红帽 Linux 变成了完全以企业客户为中心的红帽企业 LinuxRed Hat Enterprise Linux(RHEL)。从那时起,红帽 Linux 就是一个企业版的 Linux 发行版。 + +它的意思是,你必须订阅并付费才能使用红帽 Linux,因为它不是作为一个免费的操作系统。甚至所有的软件、错误修复和安全支持都只对那些拥有红帽订阅的人开放。 + +当红帽 Linux 变成 RHEL 时,它也导致了 Fedora 项目的成立,该项目负责 Fedora Linux的开发。 + +与红帽不同,Fedora 是一个社区版的 Linux 发行版,每个人都可以免费使用,包括错误修复和其他服务。 + +尽管红帽公司赞助了 Fedora 项目,但 Fedora Linux 主要由一个独立的开源社区维护。 + +#### 免费与付费 + +好吧,你会发现大多数的 Linux 发行版都可以免费下载。Fedora Linux 也是这样一个发行版,它的桌面版、服务器版、所有其他版本和 Spin 版都是免费 [可下载][2] 的。 + +还有一些 Linux 发行版,你必须付费购买。红帽企业 Linux 就是这样一个流行的基于 Linux 的操作系统,它是需要付费的。 + +除了价格为 99 美元的 RHEL [开发者版本][3],你必须支付超过 100 美元才能购买 [其他 RHEL 版本][4],用于服务器、虚拟数据中心和台式机。 + +然而,如果你碰巧是一个个人开发者,而不是一个组织或团队,你可以加入 [红帽开发者计划][5]。根据该计划,你可以在 12 个月内免费获得红帽企业 Linux 包括其他产品的使用权。 + +#### 上游还是下游 + +Fedora 是 RHEL 的上游,RHEL 是 Fedora 的下游。这意味着当 Fedora 的新版本发布时,红帽公司会利用 Fedora 的源代码,在其下一个版本中加入所需的功能。 + +当然,红帽公司也会在合并到自己的 RHEL 代码库之前测试这些拉来的代码。 + +换句话说,Fedora Linux 作为红帽公司的一个试验场,首先检查功能,然后将其纳入 RHEL 系统中。 + +#### 发布周期 + +为了给操作系统的所有组件提供定期更新,RHEL 和 Fedora 都遵循一个标准的定点发布模式。 + +Fedora 大约每六个月发布一个新版本(主要在四月和十月),并提供长达 13 个月的维护支持。 + +红帽 Linux 每年发布一个特定系列的新的定点版本,大约 5 年后发布一个主要版本。红帽 Linux 的每个主要版本都要经过四个生命周期阶段,从 5 年的支持到使用附加订阅的 10 年的延长寿命阶段。 + +#### 尝鲜 Linux 发行版 + +当涉及到创新和新技术时,Fedora 比 RHEL 更积极。即使 Fedora 不遵循 [滚动发布模式][6],它也是以早期提供尝鲜技术而闻名的发行版。 + +这是因为 Fedora 定期将软件包更新到最新版本,以便在每六个月后提供一个最新的操作系统。 + +如果你知道,[GNOME 40][7] 是 GNOME 桌面环境的最新版本,上个月才发布。而 Fedora 的最新稳定版 [版本 34][8] 确实包含了它,而 RHEL 的最新稳定版 8.3 仍然带有 GNOME 3.32。 + +#### 文件系统 + +在选择操作系统时,你是否把系统中数据的组织和检索放在了很重要的位置?如果是的话,在决定选择 Red Hat 和 Fedora 之前,你应该了解一下 XFS 和 Btrfs 文件系统。 + +那是在 2014 年,RHEL 7.0 用 XFS 取代 Ext4 作为其默认文件系统。从那时起,红帽在每个版本中都默认有一个 XFS 64 位日志文件系统。 + +虽然 Fedora 是红帽 Linux 的上游,但 Fedora 继续使用 Ext4,直到去年 [Fedora 33][9] 引入 [Btrfs 作为默认文件系统][10]。 + +有趣的是,红帽在最初发布的 RHEL 6 中包含了 Btrfs 作为“技术预览”。后来,红帽放弃了使用 Btrfs 的计划,因此在 2019 年从 RHEL 8 和后来发布的主要版本中完全 [删除][11] 了它。 + +#### 可用的变体 + +与 Fedora 相比,红帽 Linux 的版本数量非常有限。它主要适用于台式机、服务器、学术界、开发者、虚拟服务器和 IBM Power LE。 + +而 Fedora 除了桌面、服务器和物联网的官方版本外,还提供不可变的桌面 Silverblue 和专注于容器的 Fedora CoreOS。 + +不仅如此,Fedora 也有特定目的的定制变体,称为 [Fedora Labs][12]。每个 ISO 都为专业人士、神经科学、设计师、游戏玩家、音乐家、学生和科学家打包了一套软件。 + +想要 Fedora 中不同的桌面环境吗?你也可以查看官方的 [Fedora Spins][13],它预先配置了几种桌面环境,如 KDE、Xfce、LXQT、LXDE、Cinnamon 和 i3 平铺窗口管理器。 + +![Fedora Cinnamon Spin][14] + +此外,如果你想在新软件登陆稳定版 Fedora 之前就得到它,Fedora Rawhide 是另一个基于滚动发布模式的版本。 + +### Fedora 和红帽 Linux 的相似之处 + +除了不同之处,Fedora 和红帽 Linux 也有几个共同点。 + +#### 母公司 + +红帽公司是支持 Fedora 项目和 RHEL 的共同公司,在开发和财务方面都有支持。 + +即使红帽公司在财务上赞助 Fedora 项目,Fedora 也有自己的理事会,在没有红帽公司干预的情况下监督其发展。 + +#### 开源产品 + +在你认为红帽 Linux 要收钱,那么它怎么能成为一个开源产品之前,我建议阅读我们的 [文章][15],它分析了关于 FOSS 和开源的一切。 + +作为一个开源软件,并不意味着你可以免费得到它,有时它可能要花钱。红帽公司是一个已经在开源中建立了业务的开源公司。 + +Fedora 和红帽 Linux 都是开源的操作系统。所有的 Fedora 软件包都可以在 [这里][16] 得到源代码和在 [这里][2] 得到已经打包好的软件。 + +然而,就红帽 Linux 而言,源代码也 [免费提供][17] 给任何人。但与 Fedora 不同的是,你需要为使用可运行的代码付费,要么你可以自由地自行构建。 + +你支付给红帽的订阅费实际上是用于系统维护和技术支持。 + +#### 桌面环境和初始系统 + +Fedora 和红帽 Linux 的旗舰桌面版采用了 GNOME 图形界面。所以,如果你已经熟悉了 GNOME,从任何一个发行版开始都不会有太大的问题。 + +![GNOME 桌面][18] + +你是少数讨厌 SystemD 初始化系统的人吗?如果是这样,那么 Fedora 和红帽 Linux 都不适合你,因为它们都默认支持并使用 SystemD。 + +总之,如果你想用 Runit 或 OpenRC 等其他初始化系统代替它,也不是不可能,但我认为这不是一个好主意。 + +#### 基于 RPM 的发行版 + +如果你已经精通使用 YUM、RPM 或 DNF 命令行工具来处理 RPM 软件包,赞一个!你可以在这两个基于 RPM 的发行版中选一个。 + +默认情况下,红帽 Linux 使用 RPM(红帽包管理器Red Hat Package Manager)来安装、更新、删除和管理 RPM 软件包。 + +Fedora 在 2015 年的 Fedora 21 之前使用 YUM(黄狗更新器修改版Yellowdog Updater Modified)。从 Fedora 22 开始,它现在使用 DNF(时髦版 YumDandified Yum)代替 YUM 作为默认的 [软件包管理器][19]。 + +### Fedora 或红帽 Linux:你应该选择哪一个? + +坦率地说,这真的取决于你是谁以及你为什么要使用它。如果你是一个初学者、开发者,或者是一个想用它来提高生产力或学习 Linux 的普通用户,Fedora 可以是一个不错的选择。 + +它可以帮助你轻松地设置系统,进行实验,节省资金,还可以成为 Fedora 项目的一员。让我提醒你,Linux 的创造者 [Linus Torvalds][20] 在他的主要工作站上使用 Fedora Linux。 + +然而,这绝对不意味着你也应该使用 Fedora。如果你碰巧是一个企业,考虑到 Fedora 的支持生命周期在一年内就会结束,你可能会重新考虑选择它。 + +而且,如果你不喜欢每个新版本的快速变化,你可能不喜欢尝鲜的 Fedora 来满足你的服务器和业务需求。 + +使用企业版红帽,你可以得到高稳定性、安全性和红帽专家工程师为你的大型企业提供的支持品质。 + +那么,你是愿意每年升级你的服务器并获得免费的社区支持,还是购买订阅以获得超过 5 年的生命周期和专家技术支持?决定权在你。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/fedora-vs-red-hat/ + +作者:[Sarvottam Kumar][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/sarvottam/ +[b]: https://github.com/lujun9972 +[1]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/fedora-vs-red-hat.jpg?resize=800%2C450&ssl=1 +[2]: https://getfedora.org/ +[3]: https://www.redhat.com/en/store/red-hat-enterprise-linux-developer-suite +[4]: https://www.redhat.com/en/store/linux-platforms +[5]: https://developers.redhat.com/register/ +[6]: https://itsfoss.com/rolling-release/ +[7]: https://news.itsfoss.com/gnome-40-release/ +[8]: https://news.itsfoss.com/fedora-34-release/ +[9]: https://itsfoss.com/fedora-33/ +[10]: https://itsfoss.com/btrfs-default-fedora/ +[11]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/considerations_in_adopting_rhel_8/file-systems-and-storage_considerations-in-adopting-rhel-8#btrfs-has-been-removed_file-systems-and-storage +[12]: https://labs.fedoraproject.org/ +[13]: https://spins.fedoraproject.org/ +[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/Fedora-Cinnamon-Spin.jpg?resize=800%2C450&ssl=1 +[15]: https://itsfoss.com/what-is-foss/ +[16]: https://src.fedoraproject.org/ +[17]: http://ftp.redhat.com/pub/redhat/linux/enterprise/ +[18]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/04/GNOME-desktop.jpg?resize=800%2C450&ssl=1 +[19]: https://itsfoss.com/package-manager/ +[20]: https://itsfoss.com/linus-torvalds-facts/ diff --git a/published/202105/20210503 Configure WireGuard VPNs with NetworkManager.md b/published/202105/20210503 Configure WireGuard VPNs with NetworkManager.md new file mode 100644 index 0000000000..2c46177c34 --- /dev/null +++ b/published/202105/20210503 Configure WireGuard VPNs with NetworkManager.md @@ -0,0 +1,238 @@ +[#]: subject: (Configure WireGuard VPNs with NetworkManager) +[#]: via: (https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/) +[#]: author: (Maurizio Garcia https://fedoramagazine.org/author/malgnuz/) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13379-1.html) + +用 NetworkManager 配置 WireGuard 虚拟私有网络 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/10/235609bmbzbr4bikupbjjr.jpg) + +虚拟私有网络Virtual Private Networks应用广泛。如今有各种方案可供使用,用户可通过这些方案访问任意类型的资源,同时保持其机密性与隐私性。 + +最近,WireGuard 因为其简单性、速度与安全性成为最广泛使用的虚拟私有网络协议之一。WireGuard 最早应用于 Linux 内核,但目前可以用在其他平台,例如 iOS、Android 等。 + +WireGuard 使用 UDP 作为其传输协议,并在 Critokey Routing(CKR)的基础上建立对等节点之间的通信。每个对等节点(无论是服务器或客户端)都有一对密钥key(公钥与私钥),公钥与许可 IP 间建立通信连接。有关 WireGuard 更多信息请访问其 [主页][4]。 + +本文描述了如何在两个对等节点(PeerA 与 PeerB)间设置 WireGuard。两个节点均运行 Fedora Linux 系统,使用 NetworkManager 进行持久性配置。 + +### WireGuard 设置与网络配置 + +在 PeerA 与 PeerB 之间建立持久性虚拟私有网络连接只需三步: + + 1. 安装所需软件包。 + 2. 生成密钥对key pair。 + 3. 配置 WireGuard 接口。 + +### 安装 + +在两个对等节点(PeerA 与 PeerB)上安装 `wireguard-tools` 软件包: + +``` +$ sudo -i +# dnf -y install wireguard-tools +``` + +这个包可以从 Fedora Linux 更新库中找到。它在 `/etc/wireguard/` 中创建一个配置目录。在这里你将创建密钥和接口配置文件。 + +### 生成密钥对 + +现在,使用 `wg` 工具在每个节点上生成公钥与私钥: + +``` +# cd /etc/wireguard +# wg genkey | tee privatekey | wg pubkey > publickey +``` + +### 在 PeerA 上配置 WireGuard 接口 + +WireGuard 接口命名规则为 `wg0`、`wg1` 等等。完成下述步骤为 WireGuard 接口创建配置: + + * PeerA 节点上配置想要的 IP 地址与掩码。 + * 该节点监听的 UDP 端口。 + * PeerA 的私钥。 + +``` +# cat << EOF > /etc/wireguard/wg0.conf +[Interface] +Address = 172.16.1.254/24 +SaveConfig = true +ListenPort = 60001 +PrivateKey = mAoO2RxlqRvCZZoHhUDiW3+zAazcZoELrYbgl+TpPEc= + +[Peer] +PublicKey = IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw= +AllowedIPs = 172.16.1.2/32 +EOF +``` + +允许 UDP 流量通过节点监听的端口: + +``` +# firewall-cmd --add-port=60001/udp --permanent --zone=public +# firewall-cmd --reload +success +``` + +最后,将接口配置文件导入 NetworkManager。这样,WireGuard 接口在重启后将持续存在。 + +``` +# nmcli con import type wireguard file /etc/wireguard/wg0.conf +Connection 'wg0' (21d939af-9e55-4df2-bacf-a13a4a488377) successfully added. +``` + +验证 `wg0`的状态: + +``` +# wg +interface: wg0 + public key: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8= + private key: (hidden) + listening port: 60001 + +peer: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw= + allowed ips: 172.16.1.2/32 + +# nmcli -p device show wg0 + +=============================================================================== + Device details (wg0) +=============================================================================== +GENERAL.DEVICE: wg0 +------------------------------------------------------------------------------- +GENERAL.TYPE: wireguard +------------------------------------------------------------------------------- +GENERAL.HWADDR: (unknown) +------------------------------------------------------------------------------- +GENERAL.MTU: 1420 +------------------------------------------------------------------------------- +GENERAL.STATE: 100 (connected) +------------------------------------------------------------------------------- +GENERAL.CONNECTION: wg0 +------------------------------------------------------------------------------- +GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveC> +------------------------------------------------------------------------------- +IP4.ADDRESS[1]: 172.16.1.254/24 +IP4.GATEWAY: -- +IP4.ROUTE[1]: dst = 172.16.1.0/24, nh = 0.0.0.0, mt => +------------------------------------------------------------------------------- +IP6.GATEWAY: -- +------------------------------------------------------------------------------- +``` + +上述输出显示接口 `wg0` 已连接。现在,它可以和虚拟私有网络 IP 地址为 172.16.1.2 的对等节点通信。 + +### 在 PeerB 上配置 WireGuard 接口 + +现在可以在第二个对等节点上创建 `wg0` 接口的配置文件了。确保你已经完成以下步骤: + + * PeerB 节点上设置 IP 地址与掩码。 + * PeerB 的私钥。 + * PeerA 的公钥。 + * PeerA 的 IP 地址或主机名、监听 WireGuard 流量的 UDP 端口。 + +``` +# cat << EOF > /etc/wireguard/wg0.conf +[Interface] +Address = 172.16.1.2 +SaveConfig = true +PrivateKey = UBiF85o7937fBK84c2qLFQwEr6eDhLSJsb5SAq1lF3c= + +[Peer] +PublicKey = FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8= +AllowedIPs = 172.16.1.254/32 +Endpoint = peera.example.com:60001 +EOF +``` + +最后一步是将接口配置文件导入 NetworkManager。如上所述,这一步是重启后保持 WireGuard 接口持续存在的关键。 + +``` +# nmcli con import type wireguard file /etc/wireguard/wg0.conf +Connection 'wg0' (39bdaba7-8d91-4334-bc8f-85fa978777d8) successfully added. +``` + +验证 `wg0` 的状态: + +``` +# wg +interface: wg0 + public key: IOePXA9igeRqzCSzw4dhpl4+6l/NiQvkDSAnj5LtShw= + private key: (hidden) + listening port: 47749 + +peer: FEPcisOjLaZsJbYSxb0CI5pvbXwIB3BCjMUPxuaLrH8= + endpoint: 192.168.124.230:60001 + allowed ips: 172.16.1.254/32 + +# nmcli -p device show wg0 + +=============================================================================== + Device details (wg0) +=============================================================================== +GENERAL.DEVICE: wg0 +------------------------------------------------------------------------------- +GENERAL.TYPE: wireguard +------------------------------------------------------------------------------- +GENERAL.HWADDR: (unknown) +------------------------------------------------------------------------------- +GENERAL.MTU: 1420 +------------------------------------------------------------------------------- +GENERAL.STATE: 100 (connected) +------------------------------------------------------------------------------- +GENERAL.CONNECTION: wg0 +------------------------------------------------------------------------------- +GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveC> +------------------------------------------------------------------------------- +IP4.ADDRESS[1]: 172.16.1.2/32 +IP4.GATEWAY: -- +------------------------------------------------------------------------------- +IP6.GATEWAY: -- +------------------------------------------------------------------------------- +``` + +上述输出显示接口 `wg0` 已连接。现在,它可以和虚拟私有网络 IP 地址为 172.16.1.254 的对等节点通信。 + +### 验证节点间通信 + +完成上述步骤后,两个对等节点可以通过虚拟私有网络连接相互通信,以下是 ICMP 测试结果: + +``` +[root@peerb ~]# ping 172.16.1.254 -c 4 +PING 172.16.1.254 (172.16.1.254) 56(84) bytes of data. +64 bytes from 172.16.1.254: icmp_seq=1 ttl=64 time=0.566 ms +64 bytes from 172.16.1.254: icmp_seq=2 ttl=64 time=1.33 ms +64 bytes from 172.16.1.254: icmp_seq=3 ttl=64 time=1.67 ms +64 bytes from 172.16.1.254: icmp_seq=4 ttl=64 time=1.47 ms +``` + +在这种情况下,如果你在 PeerA 端口 60001 上捕获 UDP 通信,则将看到依赖 WireGuard 协议的通信过程和加密的数据: + +![捕获依赖 WireGuard 协议的节点间 UDP 流量][5] + +## 总结 + +虚拟私有网络很常见。在用于部署虚拟私有网络的各种协议和工具中,WireGuard 是一种简单、轻巧和安全的选择。它可以在对等节点之间基于 CryptoKey 路由建立安全的点对点连接,过程非常简单。此外,NetworkManager 支持 WireGuard 接口,允许重启后进行持久配置。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/configure-wireguard-vpns-with-networkmanager/ + +作者:[Maurizio Garcia][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/malgnuz/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/05/wireguard-nm-816x345.jpg +[2]: https://youtu.be/0eiXMGfZc60?t=633 +[3]: https://www.youtube.com/c/HighTreason610/featured +[4]: https://www.wireguard.com/ +[5]: https://fedoramagazine.org/wp-content/uploads/2021/04/capture-1024x601.png diff --git a/published/202105/20210504 5 ways the Star Wars universe embraces open source.md b/published/202105/20210504 5 ways the Star Wars universe embraces open source.md new file mode 100644 index 0000000000..100fff6490 --- /dev/null +++ b/published/202105/20210504 5 ways the Star Wars universe embraces open source.md @@ -0,0 +1,102 @@ +[#]: subject: (5 ways the Star Wars universe embraces open source) +[#]: via: (https://opensource.com/article/21/5/open-source-star-wars) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13367-1.html) + +《星球大战》的世界拥抱开源的 5 种方式 +====== + +> 与《星球大战》一起成长的过程中,我学到了很多关于开源的知识。 + +![](https://img.linux.net.cn/data/attachment/album/202105/07/160338h1l01l8077wwd1j1.jpg) + +让我们先说清楚一件事:在现实生活中,《星球大战Star Wars》特许经营权没有任何开放性(尽管其所有者确实发布了 [一些开源代码][2])。《星球大战》是一个严格控制的资产,没有任何东西是在自由文化许可证下出版的。抛开任何关于 [文化形象应该成为伴随它们成长的人们的财产][3] 的争论,本文邀请你走进《星球大战》的世界,想象你是很久以前的一个电脑用户,在一个遥远的星系里…… + +### 机器人 + +> “但我还要去托西站Tosche Station弄些电力转换器呢。” +> —— 卢克•天行者 + +在乔治•卢卡斯George Lucas拍摄他的第一部《星球大战》电影之前,他导演了一部名为《美国涂鸦American Graffiti》的电影,这是一部以上世纪 60 年代为背景的成长电影。这部电影的部分背景是改装车hot-rod和街头赛车文化,一群机械修理工在车库里花了好几个小时,无休止地改装他们的汽车。今天仍然可以这样做,但大多数汽车爱好者会告诉你,“经典”汽车改装起来容易得多,因为它们主要使用机械部件而不是技术部件,而且它们以一种可预测的方式使用普通部件。 + +我一直把卢克和他的朋友们看作是对同样怀旧的科幻小说诠释。当然,花哨的新战斗堡垒是高科技,可以摧毁整个星球,但当 [防爆门不能正确打开][4] 或监禁层的垃圾压实机开始压扁人时,你会怎么做?如果你没有一个备用的 R2 机器人与主机对接,你就没辙了。卢克对修理和维护“机器人”的热情以及他在修理蒸发器和 X 翼飞机方面的天赋从第一部电影中就可以看出。 + +看到塔图因星球对待技术的态度,我不禁相信,大多数常用设备都是大众的技术。卢克并没有为 C-3PO 或 R2-D2 签订最终用户许可协议。当他让 C-3PO 在热油浴中放松时,或者当楚巴卡在兰多的云城重新组装他时,并没有使他的保修失效。同样,汉•索罗和楚巴卡从来没有把千年隼带到经销商那里去购买经批准的零件。 + +我无法证明这都是开源技术。鉴于电影中大量的终端用户维修和定制,我相信在星战世界中,技术是开放的,[用户是有拥有和维修的常识的][5]。 + +### 加密和隐写术 + +> “帮助我,欧比旺•克诺比。你是我唯一的希望。” +> —— 莱亚公主 + +诚然,《星球大战》世界中的数字身份认证很难理解,但如果有一点是明确的,加密和隐写术对叛军的成功至关重要。而当你身处叛军时,你就不能依靠公司的标准,怀疑它们是由你正在斗争的邪恶帝国批准的。当 R2-D2 隐瞒莱娅公主绝望的求救时,它的记忆库中没有任何后门,而叛军在潜入敌方领土时努力获得认证凭证(这是一个旧的口令,但它通过检查了)。 + +加密不仅仅是一个技术问题。它是一种通信形式,在历史上有这样的例子。当政府试图取缔加密时,就是在努力取缔社区。我想这也是“叛乱”本应抵制的一部分。 + +### 光剑 + +> “我看到你已经打造了新的光剑,你的技能现在已经完成了。” +> —— 达斯•维德 + +在《帝国反击战》中,天行者卢克失去了他标志性的蓝色光剑,同时他的手也被邪恶霸主达斯•维德砍断。在下一部电影《绝地归来》中,卢克展示了他自己打造的绿色光剑 —— 每一个粉丝都为之着迷。 + +虽然没有明确说明绝地武士的激光剑的技术规格是开源的,但有一定的暗指。例如,没有迹象表明卢克在制造他的武器之前必须从拥有版权的公司获得设计许可。他没有与一家高科技工厂签订合同来生产他的剑。 + +他自己打造了它,作为一种成年仪式。也许制造如此强大的武器的方法是绝地武士团所守护的秘密;再者,也许这只是描述开源的另一种方式。我所知道的所有编码知识都是从值得信赖的导师、某些互联网 UP 主、精心撰写的博客文章和技术讲座中学到的。 + +严密保护的秘密?还是对任何寻求知识的人开放的信息? + +根据我在原三部曲中看到的绝地武士秩序,我选择相信后者。 + +### 伊沃克文化 + +> “Yub nub!” +> —— 伊沃克人 + +恩多的伊沃克人与帝国其他地区的文化形成了鲜明的对比。他们热衷于集体生活、分享饮食和故事到深夜。他们自己制作武器、陷阱和安全防火墙,还有他们自己的树顶村庄。作为象征意义上的弱者,他们不可能摆脱帝国的占领。他们通过咨询礼仪机器人做了研究,汇集了他们的资源,并在关键时刻发挥了作用。当陌生人进入他们的家时,他们并没有拒绝他们。相反,他们帮助他们(在确定他们毕竟不是食物之后)。当他们面对令人恐惧的技术时,他们就参与其中并从中学习。 + +伊沃克人是《星球大战》世界中开放文化和开源的庆典。他们是我们应该努力的社区:分享信息、分享知识、接受陌生人和进步的技术,以及维护捍卫正义的决心。 + +### 原力 + +> “原力将与你同在,永远。” +> —— 欧比旺•克诺比 + +在最初的电影中,甚至在新生的衍生宇宙中(最初的衍生宇宙小说,也是我个人的最爱,是《心灵之眼的碎片》,其中卢克从一个叫哈拉的女人那里学到了更多关于原力的知识),原力只是:一种任何人都可以学习使用的力量。它不是一种与生俱来的天赋,而是一门需要掌握的强大学科。 + +![衍生宇宙的最开始][6] + +相比之下,邪恶的西斯人对他们的知识是保护性的,只邀请少数人加入他们的行列。他们可能认为自己有一个群体,但这正是看似随意的排他性的模式。 + +我不知道对开源和开放文化还有什么更好的比喻。永远存在被认为是排他的危险,因为爱好者似乎总是在“人群中”。但现实是,每个人都可以加入这些邀请,而且任何人都可以回到源头(字面意思是源代码或资产)。 + +### 愿源与你同在 + +作为一个社区,我们的任务是要问,我们如何能让人明白,无论我们拥有什么知识,都不是为了成为特权信息,而是一种任何人都可以学习使用的力量,以改善他们的世界。 + +套用欧比旺•克诺比的不朽名言:“使用源”。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/open-source-star-wars + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tobias-cornille-light-sabres-unsplash.jpg?itok=rYwXA2CX (Man with lasers in night sky) +[2]: https://disney.github.io/ +[3]: https://opensource.com/article/18/1/creative-commons-real-world +[4]: https://www.hollywoodreporter.com/heat-vision/star-wars-40th-anniversary-head-banging-stormtrooper-explains-classic-blunder-1003769 +[5]: https://www.eff.org/issues/right-to-repair +[6]: https://opensource.com/sites/default/files/20210501_100930.jpg (The very beginning of the expanded universe) diff --git a/published/202105/20210504 Keep multiple Linux distros on a USB with this open source tool.md b/published/202105/20210504 Keep multiple Linux distros on a USB with this open source tool.md new file mode 100644 index 0000000000..dc17b8fd95 --- /dev/null +++ b/published/202105/20210504 Keep multiple Linux distros on a USB with this open source tool.md @@ -0,0 +1,92 @@ +[#]: subject: (Keep multiple Linux distros on a USB with this open source tool) +[#]: via: (https://opensource.com/article/21/5/linux-ventoy) +[#]: author: (Don Watkins https://opensource.com/users/don-watkins) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13361-1.html) + +神器:在一个 U 盘上放入多个 Linux 发行版 +====== + +> 用 Ventoy 创建多启动 U 盘,你将永远不会缺少自己喜欢的 Linux 发行版。 + +![](https://img.linux.net.cn/data/attachment/album/202105/05/131432p5q7hh5cm7a8ffsd.jpg) + +给朋友和邻居一个可启动 U 盘,里面包含你最喜欢的 Linux 发行版,是向 Linux 新手介绍我们都喜欢的 Linux 体验的好方法。仍然有许多人从未听说过 Linux,把你喜欢的发行版放在一个可启动的 U 盘上是让他们进入 Linux 世界的好办法。 + +几年前,我在给一群中学生教授计算机入门课。我们使用旧笔记本电脑,我向学生们介绍了 Fedora、Ubuntu 和 Pop!_OS。下课后,我给每个学生一份他们喜欢的发行版的副本,让他们带回家安装在自己选择的电脑上。他们渴望在家里尝试他们的新技能。 + +### 把多个发行版放在一个驱动器上 + +最近,一个朋友向我介绍了 Ventoy,它(根据其 [GitHub 仓库][2])是 “一个开源工具,可以为 ISO/WIM/IMG/VHD(x)/EFI 文件创建可启动的 USB 驱动器”。与其为每个我想分享的 Linux 发行版创建单独的驱动器,我可以在一个 U 盘上放入我喜欢的 _所有_ Linux 发行版! + +![USB 空间][3] + +正如你所能想到的那样,U 盘的大小决定了你能在上面容纳多少个发行版。在一个 16GB 的 U 盘上,我放置了 Elementary 5.1、Linux Mint Cinnamon 5.1 和 Linux Mint XFCE 5.1......但仍然有 9.9GB 的空间。 + +### 获取 Ventoy + +Ventoy 是开源的,采用 [GPLv3][5] 许可证,可用于 Windows 和 Linux。有很好的文档介绍了如何在 Windows 上下载和安装 Ventoy。Linux 的安装是通过命令行进行的,所以如果你不熟悉这个过程,可能会有点混乱。然而,其实很容易。 + +首先,[下载 Ventoy][6]。我把存档文件下载到我的桌面上。 + +接下来,使用 `tar` 命令解压 `ventoy-x.y.z-linux.tar.gz` 档案(但要用你下载的版本号替换 `x.y.z`)(为了保持简单,我在命令中使用 `*` 字符作为任意通配符): + +``` +$ tar -xvf ventoy*z +``` + +这个命令将所有必要的文件提取到我桌面上一个名为 `ventoy-x.y.z` 的文件夹中。 + +你也可以使用你的 Linux 发行版的存档管理器来完成同样的任务。下载和提取完成后,你就可以把 Ventoy 安装到你的 U 盘上了。 + +### 在 U 盘上安装 Ventoy 和 Linux + +把你的 U 盘插入你的电脑。改变目录进入 Ventoy 的文件夹,并寻找一个名为 `Ventoy2Disk.sh` 的 shell 脚本。你需要确定你的 U 盘的正确挂载点,以便这个脚本能够正常工作。你可以通过在命令行上发出 `mount` 命令或者使用 [GNOME 磁盘][7] 来找到它,后者提供了一个图形界面。后者显示我的 U 盘被挂载在 `/dev/sda`。在你的电脑上,这个位置可能是 `/dev/sdb` 或 `/dev/sdc` 或类似的位置。 + +![GNOME 磁盘中的 USB 挂载点][8] + +下一步是执行 Ventoy shell 脚本。因为它被设计成不加选择地复制数据到一个驱动器上,我使用了一个假的位置(`/dev/sdX`)来防止你复制/粘贴错误,所以用你想覆盖的实际驱动器的字母替换后面的 `X`。 + +**让我重申**:这个 shell 脚本的目的是把数据复制到一个驱动器上, _破坏该驱动器上的所有数据。_ 如果该驱动器上有你关心的数据,在尝试这个方法之前,先把它备份! 如果你不确定你的驱动器的位置,在你继续进行之前,请验证它,直到你完全确定为止。 + +一旦你确定了你的驱动器的位置,就运行这个脚本: + +``` +$ sudo sh Ventoy2Disk.sh -i /dev/sdX +``` + +这样就可以格式化它并将 Ventoy 安装到你的 U 盘上。现在你可以复制和粘贴所有适合放在 U 盘上的 Linux 发行版文件。如果你在电脑上用新创建的 U 盘引导,你会看到一个菜单,上面有你复制到 U 盘上的发行版。 + +![Ventoy 中的 Linux 发行版][9] + +### 构建一个便携式的动力源 + +Ventoy 是你在钥匙串上携带多启动 U 盘的关键(钥匙),这样你就永远不会缺少你所依赖的发行版。你可以拥有一个全功能的桌面、一个轻量级的发行版、一个纯控制台的维护工具,以及其他你想要的东西。 + +我从来没有在没有 Linux 发行版的情况下离开家,你也不应该。拿上 Ventoy、一个 U 盘,和一串 ISO。你不会后悔的。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/linux-ventoy + +作者:[Don Watkins][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/markus-winkler-usb-unsplash.jpg?itok=5ZXDp0V4 (USB drive) +[2]: https://github.com/ventoy/Ventoy +[3]: https://opensource.com/sites/default/files/uploads/ventoy1.png (USB space) +[4]: https://creativecommons.org/licenses/by-sa/4.0/ +[5]: https://www.ventoy.net/en/doc_license.html +[6]: https://github.com/ventoy/Ventoy/releases +[7]: https://wiki.gnome.org/Apps/Disks +[8]: https://opensource.com/sites/default/files/uploads/usb-mountpoint.png (USB mount point in GNOME Disks) +[9]: https://opensource.com/sites/default/files/uploads/ventoy_distros.jpg (Linux distros in Ventoy) diff --git a/published/202105/20210505 Drop telnet for OpenSSL.md b/published/202105/20210505 Drop telnet for OpenSSL.md new file mode 100644 index 0000000000..5258c011e0 --- /dev/null +++ b/published/202105/20210505 Drop telnet for OpenSSL.md @@ -0,0 +1,187 @@ +[#]: subject: (Drop telnet for OpenSSL) +[#]: via: (https://opensource.com/article/21/5/drop-telnet-openssl) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13381-1.html) + +用 OpenSSL 替代 telnet +====== + +> Telnet 缺乏加密,这使得 OpenSSL 成为连接远程系统的更安全的选择。 + +![](https://img.linux.net.cn/data/attachment/album/202105/11/115934cggzmq8rm8suaqlq.png) + +[telnet][2] 命令是最受欢迎的网络故障排除工具之一,从系统管理员到网络爱好者都可以使用。在网络计算的早期,`telnet` 被用来连接到一个远程系统。你可以用 `telnet` 访问一个远程系统的端口,登录并在该主机上运行命令。 + +由于 `telnet` 缺乏加密功能,它在很大程度上已经被 OpenSSL 取代了这项工作。然而,作为一种智能的 `ping`,`telnet` 的作用仍然存在(甚至在某些情况下至今仍然存在)。虽然 `ping` 命令是一个探测主机响应的好方法,但这是它能做的 _全部_。另一方面,`telnet` 不仅可以确认一个活动端口,而且还可以与该端口的服务进行交互。即便如此,由于大多数现代网络服务都是加密的,`telnet` 的作用可能要小得多,这取决于你想实现什么。 + +### OpenSSL s_client + +对于大多数曾经需要 `telnet` 的任务,我现在使用 OpenSSL 的 `s_client` 命令。(我在一些任务中使用 [curl][3],但那些情况下我可能无论如何也不会使用 `telnet`)。大多数人都知道 [OpenSSL][4] 是一个加密的库和框架,但不是所有人都意识到它也是一个命令。`openssl` 命令的 `s_client` 组件实现了一个通用的 SSL 或 TLS 客户端,帮助你使用 SSL 或 TLS 连接到远程主机。它是用来测试的,至少在内部使用与该库相同的功能。 + +### 安装 OpenSSL + +OpenSSL 可能已经安装在你的 Linux 系统上了。如果没有,你可以用你的发行版的软件包管理器安装它: + +``` +$ sudo dnf install openssl +``` + +在 Debian 或类似的系统上: + +``` +$ sudo apt install openssl +``` + +安装后,验证它的响应是否符合预期: + +``` +$ openssl version +OpenSSL x.y.z FIPS +``` + +### 验证端口访问 + +最基本的 `telnet` 用法是一个看起来像这样的任务: + +``` +$ telnet mail.example.com 25 +Trying 98.76.54.32... +Connected to example.com. +Escape character is '^]'. +``` + +在此示例中,这将与正在端口 25(可能是邮件服务器)监听的任意服务打开一个交互式会话。只要你获得访问权限,就可以与该服务进行通信。 + +如果端口 25 无法访问,连接就会被拒绝。 + +OpenSSL 也是类似的,尽管通常较少互动。要验证对一个端口的访问: + +``` +$ openssl s_client -connect example.com:80 +CONNECTED(00000003) +140306897352512:error:1408F10B:SSL [...] + +no peer certificate available + +No client certificate CA names sent + +SSL handshake has read 5 bytes and written 309 bytes +Verification: OK + +New, (NONE), Cipher is (NONE) +Secure Renegotiation IS NOT supported +Compression: NONE +Expansion: NONE +No ALPN negotiated +Early data was not sent +Verify return code: 0 (ok) +``` + +但是,这仅是目标性 `ping`。从输出中可以看出,没有交换 SSL 证书,所以连接立即终止。为了充分利用 `openssl s_client`,你必须连接加密的端口。 + +### 交互式 OpenSSL + +Web 浏览器和 Web 服务器进行交互,可以使指向 80 端口的流量实际上被转发到 443,这是保留给加密 HTTP 流量的端口。知道了这一点,你就可以用 `openssl` 命令连接到加密的端口,并与在其上运行的任何网络服务进行交互。 + +首先,使用 SSL 连接到一个端口。使用 `-showcerts` 选项会使 SSL 证书打印到你的终端上,一开始的输出要比 telnet 要冗长得多: + +``` +$ openssl s_client -connect example.com:443 -showcerts +[...] +    0080 - 52 cd bd 95 3d 8a 1e 2d-3f 84 a0 e3 7a c0 8d 87   R...=..-?...z... +    0090 - 62 d0 ae d5 95 8d 82 11-01 bc 97 97 cd 8a 30 c1   b.............0. +    00a0 - 54 78 5c ad 62 5b 77 b9-a6 35 97 67 65 f5 9b 22   Tx\\.b[w..5.ge.." +    00b0 - 18 8a 6a 94 a4 d9 7e 2f-f5 33 e8 8a b7 82 bd 94   ..j...~/.3...... + +    Start Time: 1619661100 +    Timeout   : 7200 (sec) +    Verify return code: 0 (ok) +    Extended master secret: no +    Max Early Data: 0 +- +read R BLOCK +``` + +你被留在一个交互式会话中。最终,这个会话将关闭,但如果你及时行动,你可以向服务器发送 HTTP 信号: + +``` +[...] +GET / HTTP/1.1 +HOST: example.com +``` + +按**回车键**两次,你会收到 `example.com/index.html` 的数据: + +``` +[...] + +
+

Example Domain

+

This domain is for use in illustrative examples in documents. You may use this + domain in literature without prior coordination or asking for permission.

+

More information...

+
+ + +``` + +#### Email 服务器 + +你也可以使用 OpenSSL 的 `s_client` 来测试一个加密的 Email 服务器。要做到这点,你必须把你的测试用户的用户名和密码用 Base64 编码。 + +这里有一个简单的方法来做到: + +``` +$ perl -MMIME::Base64 -e 'print encode_base64("username");' +$ perl -MMIME::Base64 -e 'print encode_base64("password");' +``` + +当你记录了这些值,你就可以通过 SSL 连接到邮件服务器,它通常在 587 端口: + +``` +$ openssl s_client -starttls smtp \ +-connect email.example.com:587 +> ehlo example.com +> auth login +##paste your user base64 string here## +##paste your password base64 string here## + +> mail from: noreply@example.com +> rcpt to: admin@example.com +> data +> Subject: Test 001 +This is a test email. +. +> quit +``` + +检查你的邮件(在这个示例代码中,是 `admin@example.com`),查看来自 `noreply@example.com` 的测试邮件。 + +### OpenSSL 还是 Telnet? + +`telnet` 仍然有用途,但它已经不是以前那种不可缺少的工具了。该命令在许多发行版上被归入 “遗留” 网络软件包,而且还没有 `telnet-ng` 之类的明显的继任者,管理员有时会对它被排除在默认安装之外感到疑惑。答案是,它不再是必不可少的,它的作用越来越小,这 _很好_。网络安全很重要,所以要适应与加密接口互动的工具,这样你就不必在排除故障时禁用你的保护措施。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/drop-telnet-openssl + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/security-lock-password.jpg?itok=KJMdkKum (Lock) +[2]: https://www.redhat.com/sysadmin/telnet-netcat-troubleshooting +[3]: https://opensource.com/downloads/curl-command-cheat-sheet +[4]: https://www.openssl.org/ +[5]: https://www.iana.org/domains/example"\>More +[6]: mailto:noreply@example.com +[7]: mailto:admin@example.com diff --git a/published/202105/20210506 Learn essential Kubernetes commands with a new cheat sheet.md b/published/202105/20210506 Learn essential Kubernetes commands with a new cheat sheet.md new file mode 100644 index 0000000000..f7a6a9f8a9 --- /dev/null +++ b/published/202105/20210506 Learn essential Kubernetes commands with a new cheat sheet.md @@ -0,0 +1,131 @@ +[#]: subject: (Learn essential Kubernetes commands with a new cheat sheet) +[#]: via: (https://opensource.com/article/21/5/kubernetes-cheat-sheet) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13390-1.html) + +速查表:学习 Kubernetes 的基本命令 +====== + +> 开始探索 kubectl、容器、吊舱等,接着下载我们的免费的速查表,这样你就可以随时掌握关键的命令了。 + +![](https://img.linux.net.cn/data/attachment/album/202105/14/144523ynjr88nm4oaa7nzn.jpg) + +云计算主要是在 Kubernetes 上运行,Kubernetes 主要是在 Linux 上运行,而 Linux 在有熟练的系统管理员控制时运行得最好。无论你认为自己是云计算架构师还是只是一个保守的系统管理员,现代互联网都需要了解如何在容器中创建应用和服务,按需扩展,按需扩展以及如何明智地进行监视和管理。 + +进入勇敢的容器世界的第一步是学习 Kubernetes 和它的基本命令:`kubectl`。 + +### 安装 kubectl + +`kubectl` 命令允许你在 Kubernetes 集群上运行命令。你使用 `kubectl` 来部署应用、查看日志、检查和管理集群资源,并在出现问题时进行故障排除。`kubectl`(以及整个 Kubernetes)的典型“问题”是,要对集群运行命令,你首先需要一个集群。然而,有一些简单的解决方案。 + +首先,你可以创建自己的 Kubernetes 集群,只需买三块树莓派板和相关外围设备(主要是电源)。当你获得了硬件,阅读 Chris Collins 的 [使用树莓派构建 Kubernetes 集群][2],你就会拥有自己的安装有 `kubectl` 的集群。 + +另一种获得集群的方法是使用 [Minikube][3],这是一个 Kubernetes 的实践环境。在所有建立和运行集群的方法中,这是最简单的。 + +还有更多的选择;例如,你可以参加一个关于 Kubernetes 的课程,以获得一个运行集群的实验室,或者你可以在云上购买时间。只要你有一个 Kubernetes 环境来练习,如何获得集群并不重要。 + +当你你能访问一个集群,你就可以开始探索 `kubectl` 命令。 + +### 了解吊舱和容器 + +容器是一个轻量级的、部分的 Linux 系统,专门用于运行一个应用或服务。容器受到 [内核命名空间][4] 的限制,这使它能够访问其主机(运行容器的计算机)上的重要系统组件,同时防止它向其主机发送数据。容器以容器镜像(或简称 _镜像_)的形式保存,并由称为 `Containerfile` 或 `Dockerfile` 的文本文件定义。 + +吊舱Pod是容器的正式集合,也是管理员扩展、监控和维护任何数量的容器的一种简单方法。 + +这些一起就像 Kubernetes 的“应用程序”。创建或获取容器镜像是你在云上运行服务的方式。 + +### 运行一个吊舱 + +容器镜像的两个可靠的仓库是 Docker Hub 和 Quay。你可以在仓库中搜索可用的镜像列表。通常有由项目提供的大型项目的官方镜像,也有专门的、定制的或特殊项目的社区镜像。最简单和最小的镜像之一是 [BusyBox][5] 容器,它提供了一个最小的 shell 环境和一些常用命令。 + +无论你是从仓库中拉取镜像,还是自己编写镜像定义并从 Git 仓库中拉取到集群中,其工作流程都是一样的。当你想在 Kubernetes 中启动一个吊舱时: + + 1. 在 [Docker Hub][6] 或 [Quay][7] 上找到一个你想使用的镜像 + 2. 拉取镜像 + 3. 创建一个吊舱 + 4. 部署吊舱 + +以 BusyBox 容器为例子,你可以用一条命令完成最后三个步骤: + +``` +$ kubectl create deployment my-busybox --image=busybox +``` + +等待 `kubectl` 完成这个过程,最后你就有了一个正在运行的 BusyBox 实例。这个吊舱并没有暴露给其他人。它只是在后台安静地在你的集群上运行。 + +要看你的集群上有哪些吊舱在运行: + +``` +$ kubectl get pods --all-namespaces +``` + +你也可以获得关于吊舱部署的信息: + +``` +$ kubectl describe deployment my-busybox +``` + +### 与吊舱互动 + +容器通常包含使其自动化的配置文件。例如,将 Nginx httpd 服务器作为容器安装,应该不需要你的互动。你开始运行容器,它就会工作。对于你添加到吊舱中的第一个容器和之后的每个容器都是如此。 + +Kubernetes 模型的优点之一是,你可以根据需要扩展你的服务。如果你的网络服务被意外的流量淹没,你可以在你的云中启动一个相同的容器(使用 `scale` 或 `autoscale` 子命令),使你的服务处理传入请求的能力增加一倍。 + +即便如此,有时还是很高兴看到一些证明吊舱正在按预期运行的证据,或者能够对似乎无法正常运行的某些问题进行故障排除。为此,你可以在一个容器中运行任意的命令: + +``` +$ kubectl exec my-busybox -- echo "hello cloud" +``` + +另外,你可以在你的容器中打开一个 shell,用管道将你的标准输入输入到其中,并将其输出到终端的标准输出: + +``` +$ kubectl exec --stdin --tty my-busybox -- /bin/sh +``` + +### 暴露服务 + +默认情况下,吊舱在创建时不会暴露给外界,这样你就有时间在上线前进行测试和验证。假设你想把 Nginx Web 服务器作为一个吊舱安装和部署在你的集群上,并使其可以访问。与任何服务一样,你必须将你的吊舱指向服务器上的一个端口。`kubectl` 子命令 `expose` 可以为你做到这点: + +``` +$ kubectl create deployment \ + my-nginx --image=nginx +$ kubectl expose deployment \ + my-nginx --type=LoadBalancer --port=8080 +``` + +只要你的集群可以从互联网上访问,你就可以通过打开浏览器并导航到你的公共 IP 地址来测试你的新 Web 服务器的可访问性。 + +### 不仅仅是吊舱 + +Kubernetes 提供了很多东西,而不仅仅是存储普通服务的镜像。除了作为一个 [容器编排][8] 系统,它还是一个云开发的平台。你可以编写和部署应用,管理和监控性能和流量,实施智能负载平衡策略等。 + +Kubernetes 是一个强大的系统,它已经迅速成为各种云的基础,最主要的是 [开放混合云][9]。今天就开始学习 Kubernetes 吧。随着你对 Kubernetes 的进一步了解,你会需要一些关于其主要概念和一般语法的快速提醒,所以 [下载我们的 Kubernetes 速查表][10] 并将它放在身边。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/kubernetes-cheat-sheet + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/coverimage_cheat_sheet.png?itok=lYkNKieP (Cheat Sheet cover image) +[2]: https://opensource.com/article/20/6/kubernetes-raspberry-pi +[3]: https://opensource.com/article/18/10/getting-started-minikube +[4]: https://opensource.com/article/19/10/namespaces-and-containers-linux +[5]: https://www.busybox.net/ +[6]: http://hub.docker.com +[7]: http://quay.io +[8]: https://opensource.com/article/20/11/orchestration-vs-automation +[9]: https://opensource.com/article/20/10/keep-cloud-open +[10]: https://opensource.com/downloads/kubernetes-cheat-sheet diff --git a/published/202105/20210510 Make Jenkins logs pretty.md b/published/202105/20210510 Make Jenkins logs pretty.md new file mode 100644 index 0000000000..82859c31e2 --- /dev/null +++ b/published/202105/20210510 Make Jenkins logs pretty.md @@ -0,0 +1,176 @@ +[#]: subject: (Make Jenkins logs pretty) +[#]: via: (https://opensource.com/article/21/5/jenkins-logs) +[#]: author: (Evan "Hippy" Slatis https://opensource.com/users/hippyod) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13392-1.html) + +如何使 Jenkins 日志更可读 +====== + +> Jenkins 的默认日志难以阅读,但日志本不必如此。 + +![](https://img.linux.net.cn/data/attachment/album/202105/15/093017vd34foo00wpy2yot.jpg) + +Jenkins 是一个自由开源的自动化服务器,用于构建、测试和部署代码。它是持续集成Continuous Integration(CI)、持续交付Continuous Delivery(CD)的基础,可以为开发人员每天节约几小时,并保护他们免受失败的代码上线的影响。一旦代码失效或开发人员需要查看测试输出时,[Jenkins][2] 提供了日志文件以供检查。 + +默认的 Jenkins 管道Pipeline日志可能难以阅读。这篇关于 Jenkins 日志的基础知识的总结文章提供了一些技巧(和代码),说明了如何提升它们的可读性。 + +### 你获得什么 + +Jenkins 管道分为 [几个阶段][3]。Jenkins 自动记录每个阶段的开始,记录内容如下: + +``` +[Pipeline] // stage +[Pipeline] stage (hide) +[Pipeline] { (Apply all openshift resources) +[Pipeline] dir +``` + +上文显示的内容没有太大区分度,重要的内容(如阶段的开始)未突出显示。在多达数百行的管道日志中,要找到一个阶段的起始和另外一个阶段的终止位置可能会很艰巨。当随意浏览日志寻找一个特定的阶段的时候,这种艰巨尤其明显。 + +Jenkins 管道是由 [Groovy][4] 和 Shell 脚本混合编写的。在 Groovy 代码中,日志记录很少。很多时候,日志是由命令中的不起眼的文本组成,没有详细信息。在 Shell 脚本中,打开了调试模式(`set -x`),所以每条命令都会被完全具现化realized(变量被解除引用并打印出数值)并详细记录,输出也是如此。 + +鉴于日志可能有很多内容,通读日志获取相关信息可能很繁琐。由于在管道中被处理,并跟着一个 Shell 脚本的 Groovy 日志可读性差,它们很多时候缺少上下文: + +``` +[Pipeline] dir +Running in /home/jenkins/agent/workspace/devop-master/devops-server-pipeline/my-repo-dir/src +[Pipeline] { (hide) +[Pipeline] findFiles +[Pipeline] findFiles +[Pipeline] readYaml +[Pipeline] } +``` + +我可以知道我正在使用的目录,并且知道我正在使用 Jenkins 的步骤搜索文件、读取 YAML 文件。但是我在寻找什么?我找到并读取的内容是什么? + +### 能做什么? + +我很高兴你这么问,因为这里有一些简单的做法和一些小的代码片段可以提供帮助。首先,代码如下: + +``` +def echoBanner(def ... msgs) { + echo createBanner(msgs) +} + +def errorBanner(def ... msgs) { + error(createBanner(msgs)) +} + +def createBanner(def ... msgs) { + return """ + =========================================== + + ${msgFlatten(null, msgs).join("\n ")} + + =========================================== + """ +} + +// flatten function hack included in case Jenkins security +// is set to preclude calling Groovy flatten() static method +// NOTE: works well on all nested collections except a Map +def msgFlatten(def list, def msgs) { + list = list ?: [] + if (!(msgs instanceof String) && !(msgs instanceof GString)) { + msgs.each { msg -> + list = msgFlatten(list, msg) + } + } + else { + list += msgs + } + + return list +} +``` + +将这段代码添加到每个管道的末尾,也可以 [加载一个 Groovy 文件][5] 或者使其成为 [Jenkins 共享库][6] 的一部分,这样更有效。 + +在每个阶段起始处(或者在阶段中的特定位置),只需调用 `echoBanner`: + +``` +echoBanner("MY STAGE", ["DOING SOMETHING 1", "DOING SOMETHING 2"]) +``` + +你的 Jenkins 日志会展示如下: + +``` +    =========================================== + +    MY STAGE +    DOING SOMETHING 1 +    DOING SOMETHING 2 + +    =========================================== +``` + +这个横幅很容易从日志中分辨出来。当正确使用它们时,它们还有助于界定管道流,并且可以很好的将日志分解开来进行阅读。 + +我已经在某些地方专业地使用这些代码一些时间了。在帮助管道日志更易读和流程更易理解方面,反馈是非常积极的。 + +上述的 `errorBanner` 方法以相同的方式工作,但是它会立即使脚本失效。这有助于突显失败的位置与原因。 + +### 最佳实践 + + 1. 在你的 Groovy 代码中大量使用 `echo` Jenkins 步骤来通知用户你在做什么。这些也可以帮助记录你的代码。 + 2. 使用空的日志语句(Groovy 中空的 echo 步骤、`echo ''` 或 Shell 中的 `echo`)来分割输出,提高可读性。你可能在你的代码中为同样的目的使用空行。 + 3. 避免在脚本中使用 `set +x` 的陷阱,因为它隐藏了日志记录已执行的 Shell 语句。它并没有清理你的日志,而是使你的管道成为一个黑盒子,隐藏了管道正在做的行为以及出现的任何错误。确保管道功能尽可能透明。 + 4. 如果你的管道创建了中间工件Intermediate Artifacts,开发人员和 DevOps 人员可以使用这些工件来帮助调试问题,那么也要记录它的内容。是的,它会加长日志,但这只是文本。在某些时候,这会是有用的信息,而(利用得当的)日志不就是关于发生了什么和为什么发生的大量信息吗? + +### Kubernetes 机密信息:无法完全透明的地方 + +有些事情你不希望出现在日志里暴露出来。如果你在使用 Kubernetes 并引用保存在 Kubernetes 机密信息Secrets中的数据,那么你绝对不希望在日志中公开该数据,因为这些数据只是被混淆了,而没有被加密。 + +假如你想获取一些保存在机密信息中的数据,然后将其注入模板化 JSON 文件中。(机密信息和 JSON 模板的完整内容与此例无关。)按照最佳实践,你希望保持透明并记录你的操作,但你不想公开机密信息数据。 + +将脚本模式从调试(`set -x`)更改为命令记录(`set -v`)。在脚本敏感部分的结尾,将 Shell 重置为调试模式: + +``` +sh """ +   # change script mode from debugging to command logging +   set +x -v + +   # capture data from secret in shell variable +   MY_SECRET=\$(kubectl get secret my-secret --no-headers -o 'custom-column=:.data.my-secret-data') + +   # replace template placeholder inline +   sed s/%TEMPLATE_PARAM%/${MY_SECRET_DATA}/ my-template-file.json + +   # do something with modified template-file.json... + +   # reset the shell to debugging mode +   set -x +v +""" +``` + +这将输出此行到日志: + +``` +sed s/%TEMPLATE_PARAM%/${MY_SECRET_DATA}/ my-template-file.json +``` + +与 Shell 调试模式中不同,这不会具现化 Shell 变量 `MY_SECRET_DATA`。显然,如果管道中在这一点出现问题,而你试图找出问题出在哪里,那么这不如调试模式有用。但这是在保持管道执行对开发人员和 DevOps 透明的同时,也保持你的秘密的最佳平衡。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/jenkins-logs + +作者:[Evan "Hippy" Slatis][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hippyod +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/laptop_screen_desk_work_chat_text.png?itok=UXqIDRDD (Person using a laptop) +[2]: https://www.jenkins.io/ +[3]: https://www.jenkins.io/doc/book/pipeline/syntax/#stage +[4]: https://opensource.com/article/20/12/groovy +[5]: https://www.jenkins.io/doc/pipeline/steps/workflow-cps/#load-evaluate-a-groovy-source-file-into-the-pipeline-script +[6]: https://www.jenkins.io/doc/book/pipeline/shared-libraries/ diff --git a/published/202105/20210511 SonoBus- An Open Source Peer-to-Peer Audio Streaming App with Cross-Platform Support.md b/published/202105/20210511 SonoBus- An Open Source Peer-to-Peer Audio Streaming App with Cross-Platform Support.md new file mode 100644 index 0000000000..7616cb6433 --- /dev/null +++ b/published/202105/20210511 SonoBus- An Open Source Peer-to-Peer Audio Streaming App with Cross-Platform Support.md @@ -0,0 +1,104 @@ +[#]: subject: (SonoBus: An Open Source Peer-to-Peer Audio Streaming App with Cross-Platform Support) +[#]: via: (https://itsfoss.com/sonobus/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13405-1.html) + +SonoBus:支持跨平台的开源点对点音频流应用 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/19/122610n5qgu4443jf4nf4k.jpg) + +> 一个有趣的开源点对点音频流应用,它提供了一个简单的用户界面和强大的功能。 + +### SonoBus: 跨平台音频流应用 + +如今,音频流服务在听音乐时非常受欢迎。然而,本地音乐集仍然是一种有用的方式,这不需要一直连接到互联网。 + +尽管流媒体音乐服务很方便,但你并不真正拥有这些音乐。因此,如果出现许可问题,该平台可能会删除你最喜欢的音乐,而你对此无能为力。 + +而有了本地音乐音乐集,你就不会遇到这个问题了。但是,你如何通过设备网络串流你本地的音乐,或者与一个小组分享? + +![][1] + +SonoBus 可以成为解决这个问题的办法。不仅仅限于音乐,还包括任何音频,如与一群朋友远程练习音乐或合作制作音乐,为什么不呢? + +让我们来看看它提供了什么。 + +### SonoBus 的功能 + +![][2] + +SonoBus 使用起来比较简单,但提供的功能可能会让人震惊。因此,在继续使用之前,你可能想先知道它能让你做什么: + + * 能够连接到多个用户 + * 创建一个有可选密码的小组 + * 分享来自你的麦克风的音频输入 + * 分享来自文件的音频流 + * 支持单声道/立体声 + * 组内播放 + * 录制所有人的音频 + * 能够使个别用户或所有人都静音 + * 可以通过互联网或本地网络连接 + * 支持节拍器,用于协作制作音乐或远程练习课程 + * 支持高质量的音频,最高可达 256Kbps + * 输入混音器 + * 支持声相 + * 支持有用的效果器(噪声门、压缩器和均衡器) + * 可在 JACK 和 ALSA 下工作 + * 跨平台支持(Windows、macOS、Android、iOS 和 Linux) + +虽然我试图提到所有的基本功能,但你可以在效果器的帮助下得到非常多的控制,来调整音量、质量、延迟,以及音频效果。 + +![][3] + +它最好的一点是**跨平台支持**,这使它成为任何用户群的有趣选择,而无论你出于什么原因要串流音频。 + +### 在 Linux 中安装 SonoBus + +无论你使用什么 Linux 发行版,你都可以轻松地安装 [Snap 包][4]或 [Flatpak 包][5]。如果你不想使用它们,你可以手动添加官方仓库来安装: + +``` +echo "deb http://pkg.sonobus.net/apt stable main" | sudo tee /etc/apt/sources.list.d/sonobus.list + +sudo wget -O /etc/apt/trusted.gpg.d/sonobus.gpg https://pkg.sonobus.net/apt/keyring.gpg + +sudo apt update && sudo apt install sonobus +``` + +你也可以通过其官方网站为你喜欢的平台下载它。 + +- [SonoBus][6] + +### 总结 + +SonoBus 是一个令人印象深刻的音频流应用,有很多潜在的用途,但它也有一些问题,可能不是每个人的完美解决方案。 + +例如,我注意到桌面应用占用大量的系统资源,所以这对较旧的系统来说可能是个问题。 + +另外,Play Store 上的安卓应用仍处于早期访问阶段(测试版)。在我的快速测试中,它工作符合预期,但我已经很久没有使用它了。因此,当依靠它进行跨平台会话时,可能会出现预期的小问题。 + +在任何情况下,它都适用于每种用例的大量功能。如果你还没有使用过,请试一试。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/sonobus/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/sonobus-screenshot.png?resize=800%2C605&ssl=1 +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/sonus-screenshot-1.png?resize=800%2C619&ssl=1 +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/sonobus-official.png?resize=800%2C545&ssl=1 +[4]: https://snapcraft.io/sonobus +[5]: https://flathub.org/apps/details/net.sonobus.SonoBus +[6]: https://sonobus.net/ diff --git a/published/202105/20210512 3 features that debuted in Python 3.0 you should use now.md b/published/202105/20210512 3 features that debuted in Python 3.0 you should use now.md new file mode 100644 index 0000000000..4134f0dbc3 --- /dev/null +++ b/published/202105/20210512 3 features that debuted in Python 3.0 you should use now.md @@ -0,0 +1,191 @@ +[#]: subject: (3 features that debuted in Python 3.0 you should use now) +[#]: via: (https://opensource.com/article/21/5/python-30-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13407-1.html) + +3 个值得使用的首次亮相在 Python 3.0 中的特性 +====== + +> 探索一些未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202105/20/103117me72dllr6lebk1fv.jpg) + +这是 Python 3.x 首发特性系列文章的第一篇。Python 3.0 于 2008 年首次发布,尽管它已经发布了一段时间,但它引入的许多特性都没有被充分利用,而且相当酷。这里有三个你应该知道的。 + +### 仅限关键字参数 + +Python 3.0 首次引入了**仅限关键字参数**参数的概念。在这之前,不可能指定一个只通过关键字传递某些参数的 API。这在有许多参数,其中一些参数可能是可选的函数中很有用。 + +请看一个特意设计的例子: + +``` +def show_arguments(base, extended=None, improved=None, augmented=None): + print("base is", base) + if extended is not None: + print("extended is", extended) + if improved is not None: + print("improved is", improved) + if augmented is not None: + print("augmented is", augmented) +``` + +当阅读调用该函数的代码时,有时很难理解发生了什么: + +``` +show_arguments("hello", "extra") + + base is hello + extended is extra + +show_arguments("hello", None, "extra") + + base is hello + improved is extra +``` + +虽然可以用关键字参数来调用这个函数,但这明显不是最好的方法。相反,你可以将这些参数标记为仅限关键字: + +``` +def show_arguments(base, *, extended=None, improved=None, augmented=None): + print("base is", base) + if extended is not None: + print("extended is", extended) + if improved is not None: + print("improved is", improved) + if augmented is not None: + print("augmented is", augmented) +``` + +现在,你不能用位置参数传入额外的参数: + +``` +show_arguments("hello", "extra") + --------------------------------------------------------------------------- + + TypeError Traceback (most recent call last) + + in + ----> 1 show_arguments("hello", "extra") + + + TypeError: show_arguments() takes 1 positional argument but 2 were given +``` + +对该函数的有效调用更容易预测: + +``` +show_arguments("hello", improved="extra") + base is hello + improved is extra +``` + +### nonlocal + +有时,函数式编程的人根据编写累加器的难易程度来判断一种语言。累加器是一个函数,当它被调用时,返回目前为止发给它的所有参数的总和。 + +在 3.0 之前,Python 的标准答案是: + +``` +class _Accumulator: + def __init__(self): + self._so_far = 0 + def __call__(self, arg): + self._so_far += arg + return self._so_far + +def make_accumulator(): + return _Accumulator() +``` + +虽然我承认有些啰嗦,但这确实有效: + +``` +acc = make_accumulator() +print("1", acc(1)) +print("5", acc(5)) +print("3", acc(3)) +``` + +这样做的输出结果将是: + +``` +1 1 +5 6 +3 9 +``` + +在 Python 3.x 中,`nonlocal` 关键字可以用少得多的代码实现同样的行为。 + + +``` +def make_accumulator(): + so_far = 0 + def accumulate(arg): + nonlocal so_far + so_far += arg + return so_far + return accumulate +``` + +虽然累加器是人为的例子,但使用 `nonlocal` 关键字使内部函数拥有具有状态的的能力是一个强大的工具。 + +### 扩展析构 + +想象一下,你有一个 CSV 文件,每一行由几个元素组成: + + * 第一个元素是年份 + * 第二个元素是月 + * 其他元素是该月发表的全部文章数,每天一个条目 + +请注意,最后一个元素是 _文章总数_,而不是 _每天发表的文章_。例如,一行的开头可以是: + +``` +2021,1,5,8,10 +``` + +这意味着在 2021 年 1 月,第一天发表了 5 篇文章。第二天,又发表了三篇文章,使总数达到 8 篇。第三天,又发表了两篇文章。 + +一个月可以有 28 天、30 天或 31 天。提取月份、日期和文章总数有多难? + +在 3.0 之前的 Python 版本中,你可能会这样写: + +``` +year, month, total = row[0], row[1], row[-1] +``` + +这是正确的,但它掩盖了格式。使用**扩展析构**,同样可以这样表达: + +``` +year, month, *rest, total = row +``` + +这意味着如果该格式改为前缀了一个描述,你可以把代码改成: + +``` +_, year, month, *rest, total = row +``` + +而不需要在每个索引中添加 `1`。 + +### 接下来是什么? + +Python 3.0 和它的后期版本已经推出了 12 年多,但是它的一些功能还没有被充分利用。在本系列的下一篇文章中,我将会写另外三个。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-30-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/python-programming-code-keyboard.png?itok=fxiSpmnd (Hands on a keyboard with a Python book ) \ No newline at end of file diff --git a/published/202105/20210512 4 Linux terminal multiplexers to try.md b/published/202105/20210512 4 Linux terminal multiplexers to try.md new file mode 100644 index 0000000000..107077cb74 --- /dev/null +++ b/published/202105/20210512 4 Linux terminal multiplexers to try.md @@ -0,0 +1,143 @@ +[#]: subject: (4 Linux terminal multiplexers to try) +[#]: via: (https://opensource.com/article/21/5/linux-terminal-multiplexer) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13420-1.html) + +4 款值得一试的 Linux 终端多路复用器 +====== + +> 比较 tmux、GNU Screen、Konsole 和 Terminator,看看哪个最适合你。 + +![](https://img.linux.net.cn/data/attachment/album/202105/24/205044ez55fdw99alhhgn8.jpg) + +Linux 用户通常需要大量的虚拟视觉空间。一个终端窗口是永远不够的,所以终端有了标签。一个桌面太受限制了,所以有了虚拟桌面。当然,应用程序窗口可以堆叠,但当它们堆叠起来时,又有多大的好处呢?哎呀,即使是后台文本控制台也有 `F1` 到 `F7`,可以在任务之间来回翻转。 + +有了这么多的多任务处理方式,有人发明了终端 *多路复用器* 的概念就不奇怪了。诚然,这是一个令人困惑的术语。在传统的电子学中,“多路复用器multiplexer”是一个接收多个输入信号并将选定的信号转发到单一输出的部件。终端多路复用器的作用正好相反。它从一个输入(人类在键盘上向一个终端窗口打字)接收指令,并将该输入转发给任意数量的输出(例如,一组服务器)。 + +然后,“多路复用器”一词在美国也是一个流行的术语,指的是有许多屏幕的电影院(与“影城cineplex”一词一个意思)。在某种程度上,这很好地描述了终端复用器的作用。它可以在一个框内提供许多屏幕。 + +不管这个词是什么意思,任何尝试过它的人都有自己的喜好的某一种多路复用器。因此,我决定考察一些流行的终端多路复用器,看看每一个都怎么样。就我的评估标准而言,最低限度,我需要每个多路复用器能够分割*和*堆叠终端窗口。 + +### tmux + +![tmux][2] + +据我所知,是从 tmux 开始使用“多路复用器”这个术语的。它工作的很出色。 + +它作为一个守护程序运行,这样即使你关闭了正在查看的终端模拟器,你的终端会话仍然处于活动状态。它将你的终端屏幕分割成多个面板,这样你就可以在每个面板上打开独特的终端提示符。 + +推而广之,这意味着你也可以远程连接到任何数量的系统,并在你的终端中打开它们。利用 tmux 的能力,将输入镜像(或者以电子学术语说是“反向多路复用”)到其他打开的窗格,就能从一个中央命令窗格同时控制几台计算机。 + +tmux 在 GNU Screen 还只能水平分割的时候就有了垂直分割能力,这吸引了追求最大灵活性的粉丝。而灵活性正是用户在 tmux 中得到的。它可以分割、堆叠、选择和提供服务;几乎没有什么是它做不到的。 + +#### 📦 软件包大小 + +从软件包中安装 tmux 大约需要 700K,这还不算它所依赖的十几个共享库。 + +#### 🎛️ 控制键 + +tmux 的默认触发键是 `Ctrl+B`,尽管很容易在其配置文件中重新定义。 + +#### ⌨️ 黑客因子 + +即使你只是在学习如何使用终端,你也一定会觉得使用 tmux 的人很像黑客。它看起来很复杂,但一旦你了解了正确的键绑定,就很容易使用。它为你提供了很多有用的技巧,让你玩的飞起,而且它是一种快速构建 HUD(抬头显示器)的超简单方法,可以把你需要的所有信息摆在你面前。 + +### GNU Screen + +![GNU Screen][4] + +像 tmux 一样,GNU Screen 也运行一个守护程序,所以即使你关闭了用来启动它的终端,你的 shell 仍然可用。你可以从不同的计算机上连接并共享屏幕。它可以将你的终端屏幕分割成水平或垂直的窗格。 + +与 tmux 不同的是,GNU Screen 可以通过串行连接进行连接(`screen 9600 /dev/ttyUSB0` 就可以了),通过按键绑定可以方便地发出 `XON` 和 `XOFF` 信号。 + +与 SSH 会话相比,在串行连接中需要多路复用器的情况可能并不常见,所以大多数用户并不了解 Screen 这个真正特殊的功能。不过,GNU Screen 是一个很棒的多路复用器,有很多有用的选项。而如果你真的需要同时向多个服务器发送信号,还有专门的工具,比如 ClusterSSH 和 [Ansible][5]。 + +#### 📦 软件包大小 + +从软件包中安装 GNU Screen 大约需要 970K,这还不算它所依赖的十几个共享库。 + +#### 🎛️ 控制键 + +GNU Screen 的默认触发键是 `Ctrl+A`,这对于熟悉 Bash 快捷键的人来说可能特别烦人。幸运的是,你可以在配置文件中轻松地重新定义这个触发键。 + +#### ⌨️ 黑客因子 + +当使用 Screen 通过串行连接到你的路由器或你的原型电路板时,你会成为你所有硬件黑客朋友羡慕的对象。 + +### Konsole + +![Konsole][6] + +对于没有标榜自己是多路复用器的 Konsole 来说,令人惊讶的是它也是其中一个。它可以使用 Qt 窗格和标签进行必要的窗口分割和堆叠,但它也可以通过“编辑(将输入复制到)”菜单中的一个选项将输入从一个窗格传到另一个(或全部)。 + +然而,它所最明显缺乏的功能是作为一个守护程序运行以进行远程重新连接的能力。与 tmux 和 GNU Screen 不同,你不能远程连接到运行 Konsole 的机器并加入会话。对于一些管理员来说,这可能不是一个问题。许多管理员用 [VNC][7] 连接到机器的次数比用 [SSH][8] 还要多,所以“重新加入”一个会话就像在 VNC 客户端上点击 Konsole 窗口一样简单。 + +使用 Konsole 作为多路复用器是 KDE 极客们的大招。Konsole 是我使用的第一个 Linux 终端(直到今天,我有时也会按 `Ctrl+N` 来切换新标签),所以有能力使用这个熟悉的终端作为多路复用器是一个很大的便利。这绝不是必要的,因为无论如何 tmux 和 Screen 都可以在 Konsole 里面运行,但是通过让 Konsole 处理窗格,我就不必调整肌肉记忆。这种微妙的功能包容正是 [KDE 的伟大之处][9]。 + +#### 📦 软件包大小 + +Konsole 本身大约是 11KB,但它依赖于 105 个 KDE 和 Qt 库,所以实际上,它至少有 50MB。 + +#### 🎛️ 控制键 + +大多数重要的 Konsole 快捷键以 `Shift+Ctrl` 开始,分割屏幕、打开新标签、复制输入到其他窗格等都是如此。这是 KDE 里的主控台,所以如果你对 Plasma 桌面很熟悉,会感觉快捷键很熟悉。 + +#### ⌨️ 黑客因子 + +使用 Konsole 作为你的多路复用器让你有资格称自己为 KDE 高级用户。 + +### Terminator + +![Terminator][10] + +对于 GNOME 用户来说,Terminator 多路复用器是为他们原本极简的 GNOME 终端增加功能的一个简单方法。除了必要的多路复用功能外,Terminator 还可以向所有打开的窗格广播输入,但和 Konsole 一样,它不会在后台运行以便你可以通过 SSH 重新连接到它。话说回来,由于 GNOME 和 Wayland 让 VNC 变得如此简单,你有可能会觉得没有必要通过 SSH 来恢复终端会话。 + +如果你愿意,Terminator 可以完全由鼠标驱动。Konsole 通过其主菜单也有同样的能力。有了 Terminator,你可以在 Shell 的任何地方点击右键,弹出相关选项,以水平或垂直分割窗口,将窗格分组作为广播目标,广播输入,关闭窗格,等等。你还可以为所有这些动作配置键盘快捷键,所以在许多方面,你可以形成自己的体验。 + +我认为自己主要是一个 KDE 用户,所以当我说 Terminator 感觉像一个 KDE 应用时,我其实是一种极大的赞美。Terminator 是一个令人惊讶的可配置的和灵活的应用程序。在许多方面,它体现了开源的力量,把简陋的 GNOME 终端变成了一个强大的多路复用器。 + +#### 📦 软件包大小 + +Terminator 的安装容量为 2.2MB,其中大部分是 Python 模块。但它依赖于 GTK3 和 GNOME,所以如果你没有运行完整的 GNOME 桌面,可以预料你需要一个更大的安装来拉入这些依赖。 + +#### 🎛️ 控制键 + +Terminator 的默认控制键没有什么一致性。你可以用 `Alt` 键来执行一些命令,用 `Ctrl` 来执行其他命令,还可以用 `Shift+Ctrl`、`Ctrl+Alt`、`Shift+Super` 等等,还有鼠标。话说回来,这是我试过的最可配置的多路复用器之一,所以只要有想法,稍加努力,你就能设计出适合你的模式。 + +#### ⌨️ 黑客因子 + +当你使用 Terminator 时,你会觉得自己是最现代、最务实的黑客。由于它的各种极客选项,它是多路复用的最佳选择,而且由于它非常灵活,无论你的手是在键盘上,还是键盘和鼠标并用,你都可以同样轻松地使用它。 + +### 我全要 + +还有更多的多路复用器和一些具有类似多路复用能力的应用。你不必非要找到*一个*完全按照你想要的方式完成你需要的所有工作的多路复用器。你可以使用不止一个。事实上,你甚至可以同时使用多个,因为 tmux 和 Screen 实际上是 shell,而 Konsole 和 Terminator 是显示 shell 的终端。对唾手可得的工具感到舒适,而且它们能帮助你管理你的工作空间,使你能有效地工作,才是最重要的。 + +去尝试一下多路复用器,或者在你喜欢的应用程序中发现类似多路复用器的功能。它可能会改变你看待计算的方式。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/linux-terminal-multiplexer + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/freedos.png?itok=aOBLy7Ky (4 different color terminal windows with code) +[2]: https://opensource.com/sites/default/files/uploads/multiplex-tmux.png (tmux) +[3]: https://creativecommons.org/licenses/by-sa/4.0/ +[4]: https://opensource.com/sites/default/files/uploads/multiplex-screen.png (GNU Screen) +[5]: https://opensource.com/article/19/2/quickstart-guide-ansible +[6]: https://opensource.com/sites/default/files/uploads/multiplex-konsole.png (Konsole) +[7]: https://en.wikipedia.org/wiki/Virtual_Network_Computing +[8]: https://en.wikipedia.org/wiki/Secure_Shell_Protocol +[9]: https://opensource.com/article/19/12/linux-kde-plasma +[10]: https://opensource.com/sites/default/files/uploads/multiplex-terminator.png (Terminator) diff --git a/published/202105/20210512 Test Your Typing Speed in Linux Terminal With Ttyper.md b/published/202105/20210512 Test Your Typing Speed in Linux Terminal With Ttyper.md new file mode 100644 index 0000000000..54e0c22dca --- /dev/null +++ b/published/202105/20210512 Test Your Typing Speed in Linux Terminal With Ttyper.md @@ -0,0 +1,140 @@ +[#]: subject: (Test Your Typing Speed in Linux Terminal With Ttyper) +[#]: via: (https://itsfoss.com/ttyper/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13401-1.html) + +用 Ttyper 测试你在 Linux 终端的打字速度 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/18/092309xnzs2qgey3ss8cmq.jpg) + +有几种方法可以测试和提高你的打字速度。你可以使用在线工具,在桌面上安装专门的应用,或者在 Linux 终端测试。 + +Linux 终端?是的。从 [浏览互联网][1] 到 [玩游戏][2],你可以在强大的 Linux 终端中做 [许多有趣的事情][3]。测试你的打字速度就是其中之一。 + +### Ttyper:基于终端的打字测试工具 + +[Ttyper][4] 是一个用 [Rust][5] 编写的工具,允许你练习打字。 + +它给出了一些最常见的英语单词的随机选择。打出的正确单词用绿色突出显示,错误的用红色突出显示,而且这是实时发生的。你可以按退格键纠正单词,但这将导致分数下降。 + +![][6] + +当你打完所有显示的单词后,你会得到你的打字速度(每分钟字数)、准确率和正确按键数的结果。如果你没有心情打完全部,你可以使用 `Ctrl+C` 退出 Ttyper。 + +![][7] + +你可以在这个由开发者录制的 GIF 中看到 Ttyper 的操作。 + +![][8] + +默认情况下,你有 50 个单词可以练习,但你可以用命令选项来扩大。你还可以使用一个自定义的文本文件,用它的内容来练习打字。 + +命令 | 内容 +---|--- +`ttyper` | 200 个最常见的英语单词中的 50 个 +`ttyper -w 100` | 200 个最常见的英语单词中的 100 个 +`ttyper -w 100 -l english1000` | 1000 个最常见的英语单词中的 100 个 +`ttyper text.txt` | 内容来自用空格分隔的 `test.txt` + +Ttyper 也专注于开发者。它支持几种编程语言,如果你是一个程序员,你可以用它来测试和改进你在编码时的打字速度。 + +![][9] + +截至目前,支持 C、Csharp、Go、HTML、Java、JavaScript、Python、Ruby 和 Rust 语言。 + +你可以通过以下方式改变语言: + +``` +ttyper -l html +``` + +顺便说一下,“Ttyper” 中的双 “T” 不是一个打字错误。它是故意的,因为TTY(**T**ele**TY**pewriter)代表 [终端模拟器][10],表明它是一个终端工具。 + +### 在 Linux 上安装 Ttyper + +Ttyper 是用 Rust 构建的,你可以把它安装在任何支持 Rust 编程语言及其 [Cargo 软件包管理器][13]的 Linux 发行版上。 + +Cargo 相当于 Python 中的 PIP。它有一个[中央仓库][14],你可以用 Cargo 轻松地下载和安装 Rust 包和它的依赖项。 + +我将添加在基于 Ubuntu 的 Linux 发行版上安装 Cargo 的说明。你应该可以用你的[发行版的包管理器][15]来安装它。 + +请确保你在 Ubuntu 上启用了 universe 仓库。你可以用这个命令来安装 Cargo: + +``` +sudo apt install cargo +``` + +它将安装 Cargo 包管理器和 Rust 语言的 `rustc` 包。 + +当你的系统安装了 Cargo,就可以用这个命令来安装 Ttyper: + +``` +cargo install ttyper +``` + +这将在你的主目录下的 `.cargo/bin` 目录中添加一个可执行 Rust 文件。它将在软件包安装输出的最后显示。 + +![][16] + +你可以切换到这个目录: + +``` +cd ~/.cargo/bin +``` + +并运行 `ttyper` 可执行文件: + +``` +./ttyper +``` + +当然,这不是很方便。这就是为什么你应该 [把这个目录添加到 PATH 变量中][17]。如果你熟悉 Linux 的命令行,你可以很容易做到这一点。 + +不幸的是,我不能在这里给你确切的命令,因为你需要提供这个目录的绝对路径,而这个路径名称会根据你的用户名而不同。例如,对我来说,它是 `/home/abhishek/.cargo/bin`。这个绝对路径对你来说会有所不同。 + +我建议阅读 [绝对路径和相对路径][18] 以了解更多关于这个问题的信息。 + +你可以通过删除二进制文件来卸载 Ttyper,或者用 Cargo 命令来卸载: + +``` +cargo uninstall ttyper +``` + +如果你喜欢这个灵巧的终端工具,[在 GitHub 上给它加星][4] 以感谢开发者的努力。 + +正如我在本文开头提到的,你可以在终端做很多很酷的事情。如果你想给你的同事一个惊喜,也许你可以试试 [完全在 Linux 终端中制作幻灯片][12]。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/ttyper/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/terminal-web-browsers/ +[2]: https://itsfoss.com/best-command-line-games-linux/ +[3]: https://itsfoss.com/funny-linux-commands/ +[4]: https://github.com/max-niederman/ttyper +[5]: https://www.rust-lang.org/ +[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/ttyper-typing-speed-test-linux.png?resize=800%2C441&ssl=1 +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/ttyper-typing-test-result.png?resize=800%2C547&ssl=1 +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/ttyper.gif?resize=800%2C498&ssl=1 +[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/ttyper-typing-test-html.png?resize=800%2C441&ssl=1 +[10]: https://itsfoss.com/linux-terminal-emulators/ +[13]: https://doc.rust-lang.org/cargo/index.html +[14]: https://crates.io/ +[15]: https://itsfoss.com/package-manager/ +[16]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/installing-ttyper-linux.png?resize=800%2C399&ssl=1 +[17]: https://itsfoss.com/add-directory-to-path-linux/ +[18]: https://linuxhandbook.com/absolute-vs-relative-path/ diff --git a/published/202105/20210512 Using Ansible to configure Podman containers.md b/published/202105/20210512 Using Ansible to configure Podman containers.md new file mode 100644 index 0000000000..97d71793f7 --- /dev/null +++ b/published/202105/20210512 Using Ansible to configure Podman containers.md @@ -0,0 +1,235 @@ +[#]: subject: (Using Ansible to configure Podman containers) +[#]: via: (https://fedoramagazine.org/using-ansible-to-configure-podman-containers/) +[#]: author: (mahesh1b https://fedoramagazine.org/author/mahesh1b/) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13396-1.html) + +使用 Ansible 配置 Podman 容器 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/16/121225oyf5q2sn4fyyeu6z.jpg) + +在复杂的 IT 基础设施中,有许多重复性任务。成功运行这些任务并不容易。运行失败大多数是人为错误引发。在 Ansible 帮助下,你可以通过远程主机来执行所有任务,这些远程主机按照行动手册playbook执行,行动手册可以根据需要重复使用多次。在本文中,你将学习如何在 Fedora Linux 上安装、配置 Ansible,以及如何使用它来管理、配置 Podman 容器。 + +### Ansible + +[Ansible][4] 是一个由红帽赞助的开源基础设施自动化工具。它可以处理大型基础设施带来的所有问题,例如安装和更新软件包、备份、确保特定服务持续运行等等。你用 YAML 写的行动手册来做这些事。Ansible 行动手册可以反复使用,使系统管理员的工作不那么复杂。行动手册减少了重复任务,并且可以轻松修改。但是我们有很多像 Ansible 一样的自动化工具,为什么要用它呢?与其他一些配置管理工具不同,Ansible 是无代理的:你不必在受管节点上安装任何东西。 + +### Podman + +[Podman][6] 是一个开源的容器引擎,用于开发、管理和运行容器镜像。但什么是容器呢?每当你创建任何新应用程序并将其部署在物理服务器、云服务器或虚拟机上时,你面临的最常见问题是可移植性和兼容性。这就是容器出现的原因。容器在操作系统级别上进行虚拟化,因此它们只包含所需的库和应用程序服务。容器的好处包括: + + * 便携性 + * 隔离性 + * 扩展性 + * 轻量级 + * 快速启动 + * 更小的磁盘和内存需求 + +简而言之:当你为任何应用程序构建容器镜像时,所有必需的依赖项都被打包到容器中。你现在可以在任何主机操作系统上运行该容器,没有任何可移植性和兼容性问题。 + +Podman 的关键亮点在于它没有守护程序,因此不需要 root 权限来运行容器。你可以借助 Dockerfile 构建容器镜像,或者从 Docker Hub、[fedoraproject.org][7] 或 [Quay][8] 上拉取镜像。 + +### 为什么用 Ansible 配置 Podman? + +Ansible 提供了一种轻松多次运行重复任务的方法。它还为云提供商(如 AWS、GCP 和 Azure)、容器管理工具(如 Docker 和 Podman)与数据库管理提供了大量模块。Ansible 还有一个社区([Ansible Galaxy][10]),在这里你可以找到大量 Ansible 角色Roles,它们由来自世界各地的贡献者创建。因为这些,Ansible 成为了 DevOps 工程师和系统管理员手中的好工具。 + +借助 DevOps,应用程序的开发步伐很快。开发的应用不局限于任意操作系统,这点至关重要。这就是 Podman 出现的地方。 + +### 安装 Ansible + +首先,安装 Ansible: + +``` +$ sudo dnf install ansible -y +``` + +### 配置 Ansible + +Ansible 需要在受管节点上运行 ssh,所以首先生成一个密钥对Key Pair。 + +``` +$ ssh-keygen +``` + +生成密钥后,将密钥复制到受管节点。 + +输入 `yes`,然后输入受管节点的密码。现在可以远程访问受管主机。 + +为了能够访问受管节点,你需要将所有主机名或 IP 地址存储在清单文件中。默认情况下,这是在 `~/etc/ansible/hosts`。 + +这是库存inventory文件的样子。方括号用于将组分配给某些特定的节点。 + +``` +[group1] +green.example.com +blue.example.com +[group2] +192.168.100.11 +192.168.100.10 +``` + +检查所有受管节点是否可以到达。 + +``` +$ ansible all -m ping +``` + +你可以看到如下输出: + +``` +[mahesh@fedora new] $ ansible all -m ping +fedora.example.com I SUCCESS { + "ansibe_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "ping": "pong" +} +[mahesh@fedora new] $ +``` + +现在创建你的第一个行动手册playbook,它将在受管节点上安装 Podman。首先用 .yml 拓展名创建一个任意名称的文件。 + +``` +$ vim name_of_playbook.yml +``` + +行动手册应该如下所示。第一个字段是行动手册的名称。主机字段(`hosts`)用于提及清单中提到的主机名或组名。`become: yes` 表示升级权限,以及任务(`tasks`)包含所要执行的任务,这里的名称(`name`)指定任务(`tasks`)名称,`yum` 是安装软件包的模块,下面在名称字段(`name`)指定软件包名称,在状态字段(`state`)指定安装或删除软件包。 + +``` +--- + - name: First playbook +   hosts: fedora.example.com +   become: yes +   tasks: +    - name: Installing podman. +       yum: +         name: podman +         state: present +``` + +检查文件中是否有语法错误: + +``` +$ ansible-playbook filename --syntax-check +``` + +现在运行行动手册: + +``` +$ ansible-playbook filename +``` + +你可以看到如下输出: + +``` +[mahesh@fedora new] $ ansible-playbook podman_installation.yml +PLAY [First playbook] ************************************************************************************************* + +TASK [Gathering Facts] ************************************************************************************************* +0k: [fedora.example.com] + +TASK [Installing podman] ************************************************************************************************ +changed: [fedora.example.com] + +PLAY RECAP ************************************************************************************************* +fedora.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +[mahesh@fedora new] $ +``` + +现在创建一个新的行动手册,从 Docker Hub 中拉取一个镜像。你将使用 `podman_image` 模块从 Docker Hub 中提取版本号为 2-alpine 的 httpd 镜像。 + +``` +--- + - name: Playbook for podman. + hosts: fedora.example.com + tasks: + - name: Pull httpd:2-alpine image from dockerhub. + podman_image: + name: docker.io/httpd + tag: 2-alpine +``` + +现在检查已拉取的镜像: + +``` +[mahesh@fedora new] $ podman images +REPOSITORY TAG IMAGE ID CREATED SIZE +docker.io/library/httpd 2-alpine fa848876521a 11 days ago 57 MB + +[mahesh@fedora new] $ +``` + +创建一个新的行动手册来运行 httpd 镜像。更多信息请查看 [podman_container][11] 模块文档。 + +``` +--- + - name: Playbook for podman. + hosts: fedora.example.com + tasks: + - name: Running httpd image. + containers.podman.podman_container: + name: my-first-container + image: docker.io/httpd:2-alpine + state: started +``` + +检查容器运行状态。 + +``` +[mahesh@fedora new] $ podman ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +45d966eOe207 docker.io/library/httpd:2-alpine httpd-foreground 13 seconds ago Up 13 seconds ago my-first-container + +[mahesh@fedora new] $ +``` + +现在停止已运行的容器,改变状态,由 `started` 变为 `absent`。 + +``` +- name: Stopping httpd container. + containers.podman.podman_container: + name: my-first-container + image: docker.io/httpd:2-alpine + state: absent +``` + +当你执行 `podman ps` 命令时,你看不到任何运行的容器。 + +``` +[mahesh@fedora new] $ podman ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + +[mahesh@fedora new] $ +``` + +`podman_container` 可以做很多事情,例如重新创建容器、重新启动容器、检查容器是否正在运行等等。有关执行这些操作的信息,请参考 [文档][11]。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/using-ansible-to-configure-podman-containers/ + +作者:[mahesh1b][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/mahesh1b/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/04/ansible-podman-1-816x345.jpg +[2]: https://unsplash.com/@vnevremeni?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[3]: https://unsplash.com/s/photos/container?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[4]: https://www.ansible.com/ +[5]: https://fedoramagazine.org/tag/ansible/ +[6]: https://podman.io/ +[7]: https://registry.fedoraproject.org/ +[8]: https://www.projectquay.io/ +[9]: https://fedoramagazine.org/tag/podman/ +[10]: https://galaxy.ansible.com/ +[11]: https://docs.ansible.com/ansible/latest/collections/containers/podman/podman_container_module.html diff --git a/published/202105/20210513 3 features released in Python 3.1 you should use in 2021.md b/published/202105/20210513 3 features released in Python 3.1 you should use in 2021.md new file mode 100644 index 0000000000..87a5508583 --- /dev/null +++ b/published/202105/20210513 3 features released in Python 3.1 you should use in 2021.md @@ -0,0 +1,87 @@ +[#]: subject: (3 features released in Python 3.1 you should use in 2021) +[#]: via: (https://opensource.com/article/21/5/python-31-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13432-1.html) + +3 个值得使用的在 Python 3.1 中发布的特性 +====== + +> 探索一些未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202105/27/225101wkeoeqd7bb8ckr8d.jpg) + +这是 Python 3.x 首发特性系列文章的第二篇。Python 3.1 于 2009 年首次发布,尽管它已经发布了很长时间,但它引入的许多特性都没有被充分利用,而且相当酷。下面是其中的三个。 + +### 千位数格式化 + +在格式化大数时,通常是每三位数放置逗号,使数字更易读(例如,1,048,576 比 1048576 更容易读)。从 Python 3.1 开始,可以在使用字符串格式化函数时直接完成: + +``` +"2 to the 20th power is {:,d}".format(2**20) +``` + +``` +'2 to the 20th power is 1,048,576' +``` + +`,d` 格式符表示数字必须用逗号格式化。 + +### Counter 类 + +`collections.Counter` 类是标准库模块 `collections` 的一部分,是 Python 中的一个秘密超级武器。它经常在 Python 的面试题的简单解答中首次遇到,但它的价值并不限于此。 + +例如,在 [Humpty Dumpty 的歌][2] 的前八行中找出五个最常见的字母: + +``` +hd_song = """ +In winter, when the fields are white, +I sing this song for your delight. + +In Spring, when woods are getting green, +I'll try and tell you what I mean. + +In Summer, when the days are long, +Perhaps you'll understand the song. + +In Autumn, when the leaves are brown, +Take pen and ink, and write it down. +""" +``` + +``` +import collections + +collections.Counter(hd_song.lower().replace(' ', '')).most_common(5) +``` + +``` +[('e', 29), ('n', 27), ('i', 18), ('t', 18), ('r', 15)] +``` + +### 执行软件包 + +Python 允许使用 `-m` 标志来从命令行执行模块。甚至一些标准库模块在被执行时也会做一些有用的事情;例如,`python -m cgi` 是一个 CGI 脚本,用来调试网络服务器的 CGI 配置。 + +然而,直到 Python 3.1,都不可能像这样执行 _软件包_。从 Python 3.1 开始,`python -m package` 将执行软件包中的 `__main__` 模块。这是一个放调试脚本或命令的好地方,这些脚本主要是用工具执行的,不需要很短。 + +Python 3.0 在 11 年前就已经发布了,但是在这个版本中首次出现的一些功能是很酷的,而且没有得到充分利用。如果你还没使用,那么将它们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-31-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/python_programming_question.png?itok=cOeJW-8r (Python programming language logo with question marks) +[2]: http://www2.open.ac.uk/openlearn/poetryprescription/humpty-dumptys-recitation.html diff --git a/published/202105/20210513 5 reasons to host your container registry with Pulp.md b/published/202105/20210513 5 reasons to host your container registry with Pulp.md new file mode 100644 index 0000000000..47f0158018 --- /dev/null +++ b/published/202105/20210513 5 reasons to host your container registry with Pulp.md @@ -0,0 +1,84 @@ +[#]: subject: (5 reasons to host your container registry with Pulp) +[#]: via: (https://opensource.com/article/21/5/container-management-pulp) +[#]: author: (Melanie Corr https://opensource.com/users/melanie-corr) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13410-1.html) + +用 Pulp 托管你的容器注册中心的 5 个理由 +====== + +> 有很多令人信服的理由来用 Pulp 来托管你自己的容器注册中心。下面是其中的一些。 + +![](https://img.linux.net.cn/data/attachment/album/202105/21/091220vpckb2yywo2eq12y.jpg) + +Linux 容器极大地简化了软件发布。将一个应用程序与它运行所需的一切打包的能力有助于提高环境的稳定性和可重复性。 + +虽然有许多公共注册中心可以上传、管理和分发容器镜像,但有许多令人信服的论据支持托管自己的容器注册中心。让我们来看看为什么自我托管是有意义的,以及 [Pulp][2],一个自由开源项目,如何帮助你在企业内部环境中管理和分发容器。 + +### 为什么要托管你自己的容器注册中心 + +你可以考虑托管自己的容器注册中心,原因有很多: + + * **体积**:一些容器镜像是相当大的。如果你有多个团队下载同一个镜像,这可能需要大量的时间,并给你的网络和预算带来压力。 + * **带宽**:如果你在一个带宽有限的地区工作,或在一个出于安全原因限制访问互联网的组织中工作,你需要一个可靠的方法来管理你工作的容器。 + * **金钱**:服务条款可以改变。外部容器注册中心能引入或增加速率限制阈值,这可能会对你的操作造成极大的限制。 + * **稳定性**:托管在外部资源上的容器镜像可能会因为一些原因消失几天。小到你所依赖的更新容器镜像,可能会导致你想要避免的重大更改。 + * **隐私**:你可能也想开发和分发容器,但你不想在公共的第三方注册中心托管。 + +### 使用 Pulp 进行自我托管 + +使用 Pulp,你可以避免这些问题并完全控制你的容器。 + +#### 1、避免速率限制 + +在 Pulp 中创建容器镜像的本地缓存,可以让你组织中的每个人都能拉取到 Pulp 上托管的容器镜像,而不是从外部注册中心拉取。这意味着你可以避免速率限制,只有当你需要新的东西时才从外部注册中心进行同步。当你确实需要从外部注册中心同步容器时,Pulp 首先检查内容是否已经存在,然后再从远程注册中心启动同步。如果你受到注册中心的速率限制,你就只镜像你需要的内容,然后用 Pulp 在整个组织中分发它。 + +#### 2、整理你的容器 + +使用 Pulp,你可以创建一个仓库,然后从任何与 Docker Registry HTTP API V2 兼容的注册中心镜像和同步容器。这包括 Docker、Google Container registry、Quay.io 等,也包括另一个 Pulp 服务器。对于你结合来自不同注册中心的镜像容器的方式,没有任何限制或约束。你可以自由地混合来自不同来源的容器。这允许你整理一套公共和私人容器,以满足你的确切要求。 + +#### 3、无风险的实验 + +在 Pulp 中,每当你对仓库进行修改时,就会创建一个新的不可变的版本。你可以创建多个版本的仓库,例如,development、test、stage 和 production,并在它们之间推送容器。你可以自由地将容器镜像的最新更新从外部注册中心同步到 Pulp,然后让最新的变化在开发或其他环境中可用。你可以对你认为必要的仓库进行任何修改,并促进容器内容被测试团队或其他环境使用。如果出了问题,你可以回滚到早期版本。 + +#### 4、只同步你需要的内容 + +如果你想使用 Pulp 来创建一个容器子集的本地缓存,而不是一个完整的容器注册中心,你可以从一个远程源过滤选择容器。使用 Pulp,有多种内容同步选项,以便你只存储你需要的内容,或配置你的部署,按需缓存内容。 + +#### 5、在断线和空气隔离的环境中工作 + +如果你在一个断线或受限制的环境中工作,你可以从一个连接的 Pulp 实例中同步更新到你断连的 Pulp。目前,有计划为 Pulp 实现一个原生的空气隔离功能,以促进完全断线的工作流程。同时,作为一种变通方法,你可以使用 [Skopeo][3] 等工具来下载你需要的容器镜像,然后将它们推送到你断线的 Pulp 容器注册中心。 + +#### 还有更多! + +通过 Pulp,你还可以从容器文件中构建容器,将私有容器推送到仓库,并在整个组织中分发这些容器。我们将在未来的文章中对这个工作流程进行介绍。 + +### 如何开始 + +如果你对自我托管你的容器注册中心感兴趣,你现在就可以 [安装 Pulp][4]。随着 Pulp Ansible 安装程序的加入,安装过程已经被大量自动化和简化了。 + +Pulp 有一个基于插件的架构。当你安装 Pulp 时,选择容器插件和其他任何你想管理的内容插件类型。如果你想测试一下 Pulp,你今天就可以评估 Pulp 的容器化版本。 + +如果你有任何问题或意见,请随时在 Freenode IRC 的 #pulp 频道与我们联系,我们也很乐意在我们的邮件列表 [pulp-list@redhat.com][5] 中接受问题。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/container-management-pulp + +作者:[Melanie Corr][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/melanie-corr +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/containers_2015-2-osdc-lead.png?itok=kAfHrBoy (Containers for shipping overseas) +[2]: https://pulpproject.org/ +[3]: https://github.com/containers/skopeo +[4]: https://pulpproject.org/installation-introduction/ +[5]: mailto:pulp-list@redhat.com diff --git a/published/202105/20210514 3 Python 3.2 features that are still relevant today.md b/published/202105/20210514 3 Python 3.2 features that are still relevant today.md new file mode 100644 index 0000000000..1d986bb788 --- /dev/null +++ b/published/202105/20210514 3 Python 3.2 features that are still relevant today.md @@ -0,0 +1,188 @@ +[#]: subject: (3 Python 3.2 features that are still relevant today) +[#]: via: (https://opensource.com/article/21/5/python-32) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13435-1.html) + +3 个到今天仍然有用的 Python 3.2 特性 +====== + +> 探索一些未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202105/28/202023pz86mg88r18o6e22.jpg) + +这是Python 3.x 首发特性系列文章中的第三篇。其中一些 Python 版本已经推出了一段时间。例如,Python 3.2 是在 2011 年首次发布的,但其中引入的一些很酷、很有用的特性仍然没有被使用。下面是其中的三个。 + +### argparse 子命令 + +`argparse` 模块首次出现在 Python 3.2 中。有许多用于命令行解析的第三方模块。但是内置的 `argparse` 模块比许多人认为的要强大。 + +要记录所有的 `argparse` 的特性,那需要专门写系列文章。下面是一个例子,说明如何用 `argparse` 做子命令。 + +想象一下,一个命令有两个子命令:`negate`,需要一个参数,`multiply`,需要两个参数: + +``` +$ computebot negate 5 +-5 +$ computebot multiply 2 3 +6 +``` + +``` +import argparse + +parser = argparse.ArgumentParser() +subparsers = parser.add_subparsers() +``` + +`add_subparsers()` 方法创建一个对象,你可以向其添加子命令。唯一需要记住的技巧是,你需要添加通过 `set_defaults()` 调用的子命令: + +``` +negate = subparsers.add_parser("negate") +negate.set_defaults(subcommand="negate") +negate.add_argument("number", type=float) +``` + +``` +multiply = subparsers.add_parser("multiply") +multiply.set_defaults(subcommand="multiply") +multiply.add_argument("number1", type=float) +multiply.add_argument("number2", type=float) +``` + +我最喜欢的一个 `argparse` 功能是,因为它把解析和运行分开,测试解析逻辑特别令人愉快。 + +``` +parser.parse_args(["negate", "5"]) +``` + +``` + Namespace(number=5.0, subcommand='negate') +``` + +``` +parser.parse_args(["multiply", "2", "3"]) +``` + +``` + Namespace(number1=2.0, number2=3.0, subcommand='multiply') +``` + +### contextlib.contextmanager + +上下文是 Python 中一个强大的工具。虽然很多人 _使用_ 它们,但编写一个新的上下文常常看起来像一门黑暗艺术。有了 `contextmanager` 装饰器,你所需要的只是一个一次性的生成器。 + +编写一个打印出做某事所需时间的上下文,就像这样简单: + +``` +import contextlib, timeit + +@contextlib.contextmanager +def timer(): + before = timeit.default_timer() + try: + yield + finally: + after = timeit.default_timer() + print("took", after - before) +``` +你可以这样使用: + + +``` +import time + +with timer(): + time.sleep(10.5) +``` + +``` + took 10.511025413870811` +``` + +### functools.lru_cache + +有时,在内存中缓存一个函数的结果是有意义的。例如,想象一下经典的问题:“有多少种方法可以用 25 美分、1 美分、2 美分和 3 美分可以来换取 1 美元?” + +这个问题的代码可以说是非常简单: + +``` +def change_for_a_dollar(): + def change_for(amount, coins): + if amount == 0: + return 1 + if amount < 0 or len(coins) == 0: + return 0 + some_coin = next(iter(coins)) + return ( + change_for(amount, coins - set([some_coin])) + + + change_for(amount - some_coin, coins) + ) + return change_for(100, frozenset([25, 10, 5, 1])) +``` + +在我的电脑上,这需要 13ms 左右: + +``` +with timer(): + change_for_a_dollar() +``` + +``` + took 0.013737603090703487` +``` + +事实证明,当你计算有多少种方法可以做一些事情,比如用 50 美分找钱,你会重复使用相同的硬币。你可以使用 `lru_cache` 来避免重复计算。 + +``` +import functools + +def change_for_a_dollar(): + @functools.lru_cache + def change_for(amount, coins): + if amount == 0: + return 1 + if amount < 0 or len(coins) == 0: + return 0 + some_coin = next(iter(coins)) + return ( + change_for(amount, coins - set([some_coin])) + + + change_for(amount - some_coin, coins) + ) + return change_for(100, frozenset([25, 10, 5, 1])) +``` + +``` +with timer(): + change_for_a_dollar() +``` + +``` + took 0.004180959425866604` +``` + +一行的代价是三倍的改进。不错。 + +### 欢迎来到 2011 年 + +尽管 Python 3.2 是在 10 年前发布的,但它的许多特性仍然很酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-32 + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-concentration-focus-windows-office.png?itok=-8E2ihcF (Woman using laptop concentrating) \ No newline at end of file diff --git a/published/202105/20210514 Drop Autotools for CMake.md b/published/202105/20210514 Drop Autotools for CMake.md new file mode 100644 index 0000000000..992ec57659 --- /dev/null +++ b/published/202105/20210514 Drop Autotools for CMake.md @@ -0,0 +1,288 @@ +[#]: subject: "Drop Autotools for CMake" +[#]: via: "https://opensource.com/article/21/5/cmake" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "amwps290" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13419-1.html" + +抛弃 Autotools 向 CMake 迈进吧 +====== + +> CMake 是一个跨平台的编译、测试和打包软件,即使你以前从来没有使用过构建系统,也可以轻松上手。 + +![](https://img.linux.net.cn/data/attachment/album/202105/24/183520grnp3821rmmpg1ug.jpg) + +在我以前的文章 [Autotools 入门][2] 一文中,我说明了如何使用 Autotools 来管理和打包代码。这是一个强大且通用的平台,可轻松集成到许多打包系统中,包括 RPM、APT、[pkgsrc][3] 等等。它的语法和结构可能会令人困惑,但幸运的是,我们还有其他选择,开源的 [CMake][4] 就是其中一个。 + +CMake 是一个用于构建、测试和打包软件的跨平台套件。它使用简单而清晰的语法,因此即使你以前从未使用过构建系统,也很容易开始使用。 + +### 安装 CMake + +CMake 可能已经安装在你的 Linux 系统上。如果没有,你可以使用发行版的程序包管理器进行安装: + +``` +$ sudo dnf install cmake +``` + +在 Debian 或者其他相似的系统上: + +``` +$ sudo apt install cmake +``` + +在 Mac 上,你可以使用 [MacPorts][5] 或者 [Homebrew][6] 来安装: + +``` +$ sudo port install cmake +``` + +在 Windows 上,你可以使用 [Chocolatey][7] 或者直接从 [CMake 网站][8] 下载二进制来安装。 + +### 使用 CMake + +对于想要从源代码构建软件的开发人员或用户来说,CMake 是一种快速简便的编译和安装方法。 CMake 分阶段工作: + +1. 首先,在 `cmake` 步骤中,CMake 扫描计算机查看一些默认设置。默认设置包括库的位置以及在系统上安装软件的位置。 +2. 接下来,使用系统上的 `make` 命令(在 Linux 上是 GUN Make,在 [NetBSD][9] 上是 NetBSD Make)来编译程序。这个过程通常是将人类可读的源代码转换成机器语言。 +3. 最后,在 `make install` 一步中,那些编译过的文件将被拷贝到(在 `cmake` 步骤中扫描出来的)计算机上合适的位置。 + +这看起来很简单,当你使用 CMake 时就是这样。 + +### CMake 的可移植性 + +CMake 在设计时就考虑了可移植性。虽然它不能使你的项目在所有 POSIX 平台上都能正常工作(这取决于作为开发者的你),但它可以确保将标记为要安装的文件安装到已知平台上最合适的位置。而且由于有了 CMake 之类的工具,对于高级用户而言,根据其系统需求自定义和覆盖任何不合适的选项都很容易。 + +使用 CMake,你只需要知道将哪些文件安装到哪个常规位置即可。它会照顾其他一切。不再需要自定义安装脚本,它们有可能在任何未经测试的操作系统上失败。 + +### 打包 + +像 Autotools 一样,CMake 也得到了很好的打包支持。无论它们是打包成 RPM 还是 DEB 或 TGZ(或其他任何东西),将带有 CMake 的项目交给打包者,他们的工作既简单又直接。打包工具支持 CMake,因此可能不需要进行任何修补或者调整。在许多情况下,可以自动将 CMake 项目整合到工作流中。 + +### 如何使用 CMake + +要在项目中使用 CMake,只需在项目目录中创建 `CMakeLists.txt` 文件。首先,声明最低要求的 CMake 版本以及项目名称和版本。CMake 会努力在尽可能长时间内保持兼容性,但是随着你使用的时间越长,并且关注它最新的开发动态,你就会知道哪些特性是你所依赖的。 + +``` +cmake_minimum_required(VERSION 3.10) + +project(Hello VERSION 1.0) +``` + +如你可能已经看到的那样,CMake 的语法是一个带有括号和参数的命令。大写的 `VERSION` 字符串不是任意的,也不只是格式。它们是 `project` 命令中的有效参数。 + +在继续之前,先写一个简单的 C 或者 C++ 的 `hello world` 程序。为了简单,我就写了六行 C 代码,并把它保存在 `hello.c` 中(为了匹配我在 `CMakeLists.txt` 中可执行文件的名字)。 + +``` +#include + +int main() { +   printf("Hello open source\n"); +   return 0; +} +``` + +不过,不要搞错了,CMake 不仅适用于 C 和 C++。它可以处理任意文件,并且有许多可用的命令,因此它可以帮助你维护许多不同形式的项目。 + +CMake 网站中记录了所有有效的内置命令及其可用参数,因此无论你要做什么,都可以轻松发现所需的功能。不过,这是一个简单的示例,因此,你需要的下一个命令是必不可少的 —— 你必须为 CMake 定义要构建的代码: + +``` +add_executable(Hello hello.c) +``` + +这个命令指定了你编译后的二进制文件的名字为 `Hello`。因此,它与你在终端中执行带有 `-o Hello` 的 `gcc` 命令是一样的。 + +在一些比较复杂的项目中,你可能还需要使用库文件,你可以使用 `add library` 命令来链接库文件。 + +在你设置了你想要构建和标记为安装的文件之后,你必须要告诉 CMake 一旦用户安装了程序,最终的应用程序应该在哪个位置。 + +在这个简单的例子里,你仅需要做的一件事就是在你的 `CMakeLists.txt` 文件里添加 `install` 命令。`install` 命令接受几个参数。但是在这个例子中,你仅需要使用 `TARGET` 命令来指定你要安装文件的名字。 + +``` +install(TARGETS Hello) +``` + +### 向 CMake 工程添加一些文件 + +一个软件项目向用户交付的往往不仅仅只有代码,还有一些其他的文件数据,例如手册或者是信息页、示例项目,或者是配置文件。你可以使用与包含编译文件时类似的工作流程,将任意数据包含在 CMake 项目中:在 `CMakelists.txt` 文件中使用 `file` 命令,然后说明一下这些文件要安装在哪里。 + +例如,你可以在这个项目中包含一个 `assets` 目录,你可以使用 `file` 命令,后面跟上 `COPY` 和 `DESTINATION` 参数来告诉 CMake 将这些额外的文件复制到你的分发包中。 + +``` +file(COPY assets DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") +``` + +这个 `${CMAKE_CURRENT_BINARY_DIR}` 变量是一个特殊的 CMake 内置变量,表示 CMake 正在处理的目录。换句话说,你的任何文件都会被复制到编译目录(在你运行 `cmake` 命令后,这个过程会更加清晰,到时候回过头来看一下)。 + +因为这些额外的数据文件有些杂乱不堪(如果你不信的话,可以看一下 `/usr/share` 这个目录)。对于你自己的项目创建一个子文件夹对谁都有好处。最好也带上版本名字。你可以通过在 `CMAKE_CURRENT_BINARY_DIR` 中指定一个新的目录,使用你选择的项目名称,后面跟一个为你的项目命名的特殊变量和你在项目声明中为它设置的 `VERSION`。 + +``` +file(COPY assets DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/Hello-${Hello_VERSION}") +``` + +### 定义安装位置 + +你已经定义你要编译的文件,因此现在你要告诉 CMake 你的程序要安装在哪个位置。比如你的主程序,这个要程使用 `install` 命令: + +``` +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/Hello-${Hello_VERSION}" TYPE DATA) +``` + +这里有一些新的参数。`DIRECTORY` 参数指定了数据文件是一个目录,而不是一个文件(`FILE`)或者脚本(`SCRIPT`)。你使用的参数和复制一些额外文件到编译目录时是一样。另外,在 `install` 命令中 `TYPE` 或者 `DESTINATION` 必须要指定其一。`TYPE` 参数指定了通用的文件类型,这些文件通常将会被放到合适的位置。在 Linux 系统上,`TYPE DATA` 一般是 `/usr/local/share` 或者 `/usr/share`,除非用户定义了其他的位置。 + +这是诸如 CMake 之类的良好构建系统的强大功能之一。你不必担心文件的确切位置,因为你知道用户可以更改 CMake 的首选默认设置,并且 CMake 将构建代码以使其正常工作。 + +### 运行 CMake + +CMake 有多种方式来让你执行命令,你可以在终端或者在一个可交互的程序上执行命令,或者你也可以使用它的图形界面(GUI)。我比较偏向于使用终端命令,但是我也喜欢使用一些其他的方式(相比与在 `Makefile` 中查找那些晦涩的变量然后去修改它们更胜一筹)。 + +对于编译过开源 C++ 项目的任何人,都熟悉的第一步是创建一个 `build` 目录,进入到该目录,然后运行 `cmake ..` 命令。 我是一个懒惰的打字员,所以我将构建目录命名为 `b`,但是你可以使用最合适的方式: + +``` +$ mkdir b +$ cd b +$ cmake .. +-- The C compiler identification is GNU 11.1.1 +-- The CXX compiler identification is GNU 11.1.1 +-- Detecting C compiler ABI info +-- Detecting C compiler ABI info - done +-- Check for working C compiler: /usr/bin/cc - skipped +-- Detecting C compile features +-- Detecting C compile features - done +-- Detecting CXX compiler ABI info +-- Detecting CXX compiler ABI info - done +-- Check for working CXX compiler: /usr/bin/c++ - skipped +-- Detecting CXX compile features +-- Detecting CXX compile features - done +-- Configuring done +-- Generating done +-- Build files have been written to: /var/home/seth/demo-hello/b +$ +``` + +这或多或少相当于经典的 `./configure; make; make install` 中的 `./configure`。看一下你的构建目录,CMake 已经帮你生成了几个新的文件,来让你的项目更完整。这里生成了 CMake 的数据文件、一个常规的 `Makefile` 文件(这是一个免费提供的 247 行的文件,但对于越复杂的项目,行数要多得多),还有一个包含这个示例程序的任意非编译数据的 `Hello-1.0` 目录。 + +``` +$ ls +CMakeCache.txt +CMakeFiles +Makefile +Hello-1.0 +cmake_install.cmake +``` + +接下来,你可以进行构建。你可以使用 CMake 的 `--build` 选项来做这件事,使用当前的构建目录作为源目录。 + +``` +$ cmake --build . +Scanning dependencies of target Hello +[ 50%] Building C object CMakeFiles/Hello.dir/hello.c.o +[100%] Linking C executable Hello +[100%] Built target Hello +``` + +或者你可以运行 `make` 命令。这将读取由 CMake 生成的 `Makefile` 文件。在这个例子中,`make` 默认的行为就是由源程序 `hello.c` 生成目标文件。 + +``` +$ make +Scanning dependencies of target Hello +[ 50%] Building C object CMakeFiles/Hello.dir/hello.c.o +[100%] Linking C executable Hello +[100%] Built target Hello +$ +``` + +如你所料,`Hello` 二进制可执行文件现在存在于当前的构建目录中。因为它是一个简单的自包含应用程序,所以你可以运行它进行测试: + +``` +$ ./Hello +Hello open source +$ +``` + +最后,你可以用 `--install` 选项进行安装。因为我不希望我的简单的 “hello world” 应用程序真的被安装到我的系统上,我设置了 `--prefix` 选项,将 CMake 的目标从根目录(`/`)重定向到 `/tmp` 的一个子目录。 + +``` +$ cmake --install . --prefix /tmp/hello/ +-- Install configuration: "" +-- Installing: /tmp/dist-hello/usr/local/bin/Hello +-- Installing: /tmp/dist-hello/usr/local/share/Hello-1.0 +-- Installing: /tmp/dist-hello/usr/local/share/Hello-1.0/assets/file0 +-- Installing: /tmp/dist-hello/usr/local/share/Hello-1.0/assets/file1 +``` + +另外,你也可以运行 `make install` 来调用 `Makefile` 的安装动作。同样,为了避免在我的系统上安装一个演示程序,我在这个例子中设置了 `DESTDIR` 变量,将安装目标重定向到 `/tmp` 的一个子目录: + +``` +$ mkdir /tmp/dist-hello +$ make install DESTDIR=/tmp/dist-hello +[100%] Built target Hello +Install the project... +-- Install configuration: "" +-- Installing: /tmp/dist-hello/usr/local/bin/Hello +-- Installing: /tmp/dist-hello/usr/local/share/Hello-1.0 +-- Installing: /tmp/dist-hello/usr/local/share/Hello-1.0/assets/file0 +-- Installing: /tmp/dist-hello/usr/local/share/Hello-1.0/assets/file1 +``` + +看一下输出的内容,来确定它具体的安装位置,这个程序已经安装好了。 + +### 快速自定义 + +CMake 的安装前缀(由 `CMAKE_INSTALL_PREFIX` 变量指定)默认是在 `/usr/local` 这个位置,但是所有的 CMake 变量都可以在你运行 `cmake` 命令的时候,加一个 `-D` 选项来改变它。 + +``` +$ cmake -DCMAKE_INSTALL_PREFIX=/usr .. +$ make install DESTDIR=/tmp/dist-hello +$ make install DESTDIR=/tmp/dist-hello +[100%] Built target Hello +Install the project... +-- Install configuration: "" +-- Installing: /tmp/dist-hello/usr/bin/Hello +-- Installing: /tmp/dist-hello/usr/share/Hello-1.0 +-- Installing: /tmp/dist-hello/usr/share/Hello-1.0/assets/file0 +-- Installing: /tmp/dist-hello/usr/share/Hello-1.0/assets/file1 +``` + +所有由 CMake 使用的变量都可以通过这种方式来修改。 + +### 交互式的 CMake + +CMake 的交互模式是一种用于配置安装环境的友好而有用的方法。要让用户知道该项目使用的所有可能的 CMake 变量是一件工作量很大的事,因此 CMake 交互式界面是他们无需查看 `Makefile` 和 `CMakeLists` 即可发现自定义选项的简便方法。 + +为了调用这个交互式的 CMake,使用 `ccmake` 命令,在这个简单的项目里没有太多的东西。但是对于像 [Rosegarden][11] 这样的大型项目,这将非常有用。 + +![Rosegarden][12] + +### CMake 的更多知识 + +还有很多很多的 CMake 知识需要去了解。作为一个开发者,我非常喜欢它简洁的语法、详尽的文档、可扩展性以及便捷性。作为一个用户我非常喜欢 CMake 友好且实用的错误提示信息还有它的用户界面,如果你的项目还未开始使用构建系统,请了解一下 CMake 吧。你以及以后尝试打包你应用程序的任何人都不会后悔。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/cmake + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[amwps290](https://github.com/amwps290) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/build_structure_tech_program_code_construction.png?itok=nVsiLuag "Someone wearing a hardhat and carrying code " +[2]: https://opensource.com/article/19/7/introduction-gnu-autotools +[3]: https://opensource.com/article/19/11/pkgsrc-netbsd-linux +[4]: http://cmake.org +[5]: https://opensource.com/article/20/11/macports +[6]: https://opensource.com/article/20/6/homebrew-linux +[7]: https://opensource.com/article/20/3/chocolatey +[8]: https://cmake.org/download +[9]: https://opensource.com/article/19/3/netbsd-raspberry-pi +[10]: http://www.opengroup.org/onlinepubs/009695399/functions/printf.html +[11]: https://opensource.com/article/18/3/make-sweet-music-digital-audio-workstation-rosegarden +[12]: https://opensource.com/sites/default/files/uploads/rosegarden-ccmake.jpg "Rosegarden" +[13]: https://creativecommons.org/licenses/by-sa/4.0/ +[14]: https://cmake.org/cmake/help/latest/ diff --git a/published/202105/20210515 What Python 3.3 did to improve exception handling in your code.md b/published/202105/20210515 What Python 3.3 did to improve exception handling in your code.md new file mode 100644 index 0000000000..0e22667170 --- /dev/null +++ b/published/202105/20210515 What Python 3.3 did to improve exception handling in your code.md @@ -0,0 +1,191 @@ +[#]: subject: (What Python 3.3 did to improve exception handling in your code) +[#]: via: (https://opensource.com/article/21/5/python-33) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13439-1.html) + +Python 3.3 为改进代码中的异常处理所做的工作 +====== + +> 探索异常处理和其他未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202105/29/221357mxpj2kitltdez6zj.jpg) + +这是 Python 3.x 首发特性系列文章的第四篇。Python 3.3 于 2012 年首次发布,尽管它已经发布了很长时间,但它引入的许多特性都没有得到充分利用,而且相当酷。下面是其中的三个。 + +### yield from + +`yield` 关键字使 Python 更加强大。可以预见的是,人们都开始使用它来创建整个迭代器的生态系统。[itertools][2] 模块和 [more-itertools][3] PyPI 包就是其中两个例子。 + +有时,一个新的生成器会想要使用一个现有的生成器。作为一个简单的(尽管有点故意设计)的例子,设想你想枚举所有的自然数对。 + +一种方法是按照“自然数对的和,自然数对的第一项”的顺序生成所有的自然数对。用 `yield from` 来实现这个方法是很自然的。 + +`yield from ` 关键字是以下的简称: + +``` +for item in x: +    yield item +``` + +``` +import itertools + +def pairs(): + for n in itertools.count(): + yield from ((i, n-i) for i in range(n+1)) +``` + +``` +list(itertools.islice(pairs(), 6)) +``` + +``` + [(0, 0), (0, 1), (1, 0), (0, 2), (1, 1), (2, 0)] +``` + +### 隐式命名空间包 + +假设有一个叫 Parasol 的虚构公司,它制造了一堆东西。它的大部分内部软件都是用 Python 编写的。虽然 Parasol 已经开源了它的一些代码,但其中一些代码对于开源来说过于专有或专业。 + +该公司使用内部 [DevPI][4] 服务器来管理内部软件包。对于 Parasol 的每个 Python 程序员来说,在 PyPI 上找一个未使用的名字是没有意义的,所以所有的内部包都被称为 `parasol..`。遵守最佳实践,开发人员希望包的名字能反映出这个命名系统。 + +这一点很重要!如果 `parasol.accounting.numeric_tricks` 包安装了一个名为 `numeric_tricks` 的顶层模块,这意味着依赖这个包的人将无法使用名为 `numeric_tricks` 的 PyPI 包,不管它写的有多好。 + +然而,这给开发者留下了一个两难的选择:哪个包拥有 `parasol/__init__.py` 文件?从 Python 3.3 开始,最好的解决办法是把 `parasol`,可能还有 `parasol.accounting`,变成没有 `__init__.py` 文件的 [命名空间包][5]。 + +### 抑制异常的上下文 + +有时,在从异常中恢复的过程中出现的异常是一个问题,有上下文来跟踪它是很有用的。然而,有时却不是这样:异常已经被处理了,而新的情况是一个不同的错误状况。 + +例如,想象一下,在字典中查找一个键失败后,如果不能分析它,则希望失败并返回 `ValueError()`。 + +``` +import time + +def expensive_analysis(data): +    time.sleep(10) +    if data[0:1] == ">": +        return data[1:] +    return None +``` + +这个函数需要很长的时间,所以当你使用它时,想要对结果进行缓存: + +``` +cache = {} + +def last_letter_analyzed(data): +    try: +        analyzed = cache[data] +    except KeyError: +        analyzed = expensive_analysis(data) +        if analyzed is None: +            raise ValueError("invalid data", data) +        cached[data] = analyzed +    return analyzed[-1] +``` + +不幸的是,当出现缓存没有命中时,回溯看起来很难看: + +``` +last_letter_analyzed("stuff") +``` + +``` + --------------------------------------------------------------------------- + + KeyError Traceback (most recent call last) + + in last_letter_analyzed(data) + 4 try: + ----> 5 analyzed = cache[data] + 6 except KeyError: + + + KeyError: 'stuff' +``` + +在处理上述异常的过程中,发生了另一个异常: + +``` + ValueError Traceback (most recent call last) + + in + ----> 1 last_letter_analyzed("stuff") + + + in last_letter_analyzed(data) + 7 analyzed = expensive_analysis(data) + 8 if analyzed is None: + ----> 9 raise ValueError("invalid data", data) + 10 cached[data] = analyzed + 11 return analyzed[-1] + + + ValueError: ('invalid data', 'stuff') +``` + +如果你使用 `raise ... from None`,你可以得到更多可读的回溯: + +``` +def last_letter_analyzed(data): + try: + analyzed = cache[data] + except KeyError: + analyzed = expensive_analysis(data) + if analyzed is None: + raise ValueError("invalid data", data) from None + cached[data] = analyzed + return analyzed[-1] +``` + +``` +last_letter_analyzed("stuff") +``` + +``` + --------------------------------------------------------------------------- + + ValueError Traceback (most recent call last) + + in + ----> 1 last_letter_analyzed("stuff") + + + in last_letter_analyzed(data) + 5 analyzed = expensive_analysis(data) + 6 if analyzed is None: + ----> 7 raise ValueError("invalid data", data) from None + 8 cached[data] = analyzed + 9 return analyzed[-1] + + + ValueError: ('invalid data', 'stuff') +``` + +### 欢迎来到 2012 年 + +尽管 Python 3.3 在十年前就已经发布了,但它的许多功能仍然很酷,而且没有得到充分利用。如果你还没有,就把它们添加到你的工具箱中吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-33 + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/code_computer_laptop_hack_work.png?itok=aSpcWkcl (Coding on a computer) +[2]: https://docs.python.org/3/library/itertools.html +[3]: https://more-itertools.readthedocs.io/en/stable/ +[4]: https://opensource.com/article/18/7/setting-devpi +[5]: https://www.python.org/dev/peps/pep-0420/ diff --git a/published/202105/20210516 How to install a Desktop Environment (GUI) on Ubuntu Server.md b/published/202105/20210516 How to install a Desktop Environment (GUI) on Ubuntu Server.md new file mode 100644 index 0000000000..a03a8f6d54 --- /dev/null +++ b/published/202105/20210516 How to install a Desktop Environment (GUI) on Ubuntu Server.md @@ -0,0 +1,263 @@ +[#]: subject: "How to install a Desktop Environment (GUI) on Ubuntu Server" +[#]: via: "https://itsfoss.com/install-gui-ubuntu-server/" +[#]: author: "Chris Patrick Carias Stas https://itsfoss.com/author/chris/" +[#]: collector: "lujun9972" +[#]: translator: "lxbwolf" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-13408-1.html" + +如何在 Ubuntu 服务器上安装桌面环境(GUI) +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/20/110026zm3mmam0iztaaczz.jpg) + +你想在你的 Ubuntu 服务器上安装 GUI 吗?大部分情况下你是可以安装的,在本教程中我会详细介绍安装的步骤。 + +在正式开始之前,我来告诉你为什么服务器版的 Ubuntu 不带 GUI,以及在什么情况下你可以在服务器上安装 GUI。 + +### 为什么 Ubuntu 服务器没有 GUI? + +你对比过 Ubuntu 的桌面版和服务器版会发现,两者的主要区别是服务器版缺少 GUI(比如 [桌面环境][1])。Ubuntu 服务器基本上就是桌面版去掉图形模块后的降级版本。 + +这是刻意为之的。Linux 服务器需要占用系统资源来运行服务。图形化桌面环境会消耗大量的系统资源,因此服务器操作系统默认不包含桌面环境。 + +你可以在只有 512 MB RAM 的机器上使用 Ubuntu 服务器,但是 Ubuntu 桌面需要至少 2 GB 的 RAM 才能提供正常的功能。在服务器运行桌面环境被认为是浪费资源。 + +作为一个服务器使用者(或系统管理员),你应该通过命令行来使用和管理你的系统。为了达到这个水平,你需要掌握丰富的 Linux 命令相关的知识。 + +![Typically, you have to manage a server from the command line][2] + +### 你是否真正需要在你的服务器上安装 GUI? + +有些用户可能不太习惯在终端下使用命令行来完成工作。毕竟大部分用户是有条件通过图形界面操作计算机的。 + +你可能会在你的服务器上安装桌面环境并使用图形界面。大部分人不会这么干,但这是可行的。 + +但是这只有在你可以直接操作服务器时才行得通。假设你是在物理机器上运行它,比如服务器、台式机或笔记本电脑,抑或类似树莓派的设备。如果你可以直接操作宿主机系统,那么你还可以在运行在虚拟机上的服务器上安装。 + +如果你是通过 [云服务器提供商如 Linode、DigitalOcean 或 AWS][3] 部署的服务器,那么安装 GUI 就行不通了。如果你想通过图形界面来管理你的远程服务器,你可以使用 Webmin 或 [Cockpit][4] 等工具。你可以在 Web 浏览器中通过这些工具使用和管理你的服务器。相比于成熟的桌面环境,它能大大降低资源消耗。 + +![Tools like Cockpit allow managing Linux servers graphically][5] + +### 如何在 Ubuntu 服务器上安装 GUI? + +当你了解了基础知识后,我们一起来看看在 Ubuntu 服务器上安装桌面环境的步骤。 + +你需要做以下准备: + + * 已经配置好 Ubuntu 服务器,且 RAM 至少 2 GB + * 管理员权限(你需要用 `sudo` 执行命令) + * 网络连接正常(你需要下载和安装新包) + +我是在虚拟机上安装的 Ubuntu 服务器,并且我可以直接操作宿主机器。我使用同样的方法[在树莓派上安装了 Ubuntu 服务器][6]。 + +> 注意! +> +> 如果你是出于学习和调研等实验性的目的,那么你可以进行这些操作。请不要在生产环境的服务器上添加 GUI。后续删除 GUI 时可能会导致依赖问题,有些情况会破坏系统。 + +#### 准备系统 + +首先,因为你将要做一些系统级的修改,因此先进行更新和升级以确保我们系统的包是最新的: + +``` +sudo apt update && sudo apt upgrade +``` + +#### 安装桌面环境 + +更新结束后,你就可以安装桌面环境了。 + +有两种方法: + + * 使用 [apt][7] 来安装包 + * 使用一个名为 [tasksel][8] 的 Debian 工具,这个工具可以通过一条龙处理(任务)方式来安装多个包 + +任何一种方法都可以用完整包的方式来安装完整的桌面环境,就跟你从头安装桌面版本一样。我的意思是你可以得到跟桌面版本一样的所有的默认应用程序和工具。 + +如果你想使用 `tasksel`,需要先用下面的命令安装它: + +``` +sudo apt install tasksel +``` + +执行结束后,你就可以用 `tasksel` 来安装桌面环境(也叫 DE)了。 + +你可能知道有 [很多可用的桌面环境][9]。你可以选择自己喜欢的一个。有些桌面环境对系统资源占用得多(像 GNOME),有些占用得少(像 Xfce、MATE 等等)。 + +你可以自己决定使用哪个 DE。我会安装 [GNOME 桌面][10],因为它是 Ubuntu 默认的桌面。之后我也会介绍其他桌面的安装。 + +如果你使用的是 `tasksel`,执行下面这条命令: + +``` +sudo tasksel install ubuntu-desktop +``` + +如果你使用 `apt`,执行下面这条命令: + +``` +sudo apt install ubuntu-desktop +``` + +这个过程可能会持续几分钟到一个小时,执行速度取决于你的网速和硬件。 + +我想提醒下,上面两个命令执行后都会安装完整的 GNOME 桌面环境。在本文中我两个命令都会执行,两个命令的结果是一样的。 + +#### 安装和配置显示管理器 + +安装完成后,你需要一个名为 [显示管理器][11] 或“登录管理器”的组件。这个工具的功能是在管理用户对话和鉴权时启动 [显示服务器][12] 并加载桌面。 + +GNOME 桌面默认使用 GDM3 作为显示管理器,但从资源角度考虑它有点重。你可以使用更轻量级和资源友好的管理器。这里我们使用一个平台无关的显示管理器 [lightdm][13]。使用 `apt` 安装它: + +``` +sudo apt install lightdm +``` + +安装 lightdm 时系统会让我们选择默认的显示管理器,因为即使你可以安装多个管理器,也只能运行一个。 + +![Use the arrow key to select an option and then use the tab key to select and press enter][14] + +选择列表中的 “lightdm” 并点击 “\”。这应该用不了几分钟。完成后你可以用下面的命令启动显示管理器并加载 GUI: + +``` +sudo service lightdm start +``` + +你可以使用下面的命令来检查当前的显示管理器: + +``` +cat /etc/X11/default-display-manager +``` + +运行后得到的结果类似这样: + +![Checking the default Display Manager][15] + +如果一切顺利,你现在会来到欢迎界面。 + +![Greetings screen of GNOME Desktop with LightDM on an Ubuntu server][16] + +输入你的凭证,你的桌面就运行起来了。 + +![GNOME Desktop fully loaded on Ubutnu server][17] + +如果你想关闭 GUI,那么打开一个终端并输入: + +``` +sudo service lightdm stop +``` + +#### 安装其他的桌面环境(可选) + +前面我说过我们可以选择不同的桌面。我们一起来看看一些其他的选项: + +##### MATE + +[MATE][18] 是基于 GNOME2 源码的轻量级桌面,它完全开源,是一个不错的选项。 + +用下面的命令来安装 MATE: + +``` +sudo tasksel install ubuntu-mate-core +``` + +或 + +``` +sudo apt install ubuntu-mate-core +``` + +##### Lubuntu / LXDE/LXQT + +如果你的系统资源有限或者电脑很旧,那么我推荐另一个轻量级的 [Lubuntu][19]。使用下面的命令安装它: + +``` +sudo tasksel install lubuntu-core +``` + +或 + +``` +sudo apt install lubuntu-core +``` + +##### Xubuntu / Xfce + +[Xubuntu][20] 是基于 [Xfce][21] 的 Ubuntu 衍生版,轻量、简单、稳定但可高度定制。如果你想使用它,执行下面的命令: + +``` +sudo tasksel install xubuntu-core +``` + +或 + +``` +sudo apt install xubuntu-core +``` + +还有一些桌面没有列出来,像 [KDE][22],[Cinnamon][23] 和 [Budgie][24],不代表它们不好,它们也都是非常卓越的,你可以自己尝试安装它们。 + +### 如何从 Ubuntu 服务器上删除 GUI? + +如果你觉得桌面环境占用了太多的计算资源,你可以把之前安装的包删除掉。 + +请注意在某些情况下删除 GUI 可能会带来依赖问题,因此请备份好重要数据或创建一个系统快照。 + +- [如何从 Ubuntu 上删除包][25] + +``` +sudo apt remove ubuntu-desktop +sudo apt remove lightdm +sudo apt autoremove +sudo service lightdm stop +``` + +现在重启你的系统。你应该回到了正常的命令行登录。 + +### 结语 + +在大多数场景下是可以安装桌面 GUI 的。如果你不适应命令行,那么请使用类似 [YunoHost][26] 的发行版的服务器,YunoHost 基于 Debian 系统,你可以通过 GUI 来管理服务器。 + +上面说了,如果你是从头安装系统,那么我建议你使用桌面版本以避免后续的步骤。 + +如果你有任何问题,请在评论区留言。你会在服务器上使用 GUI 吗?参照本文后你遇到了什么问题吗? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-gui-ubuntu-server/ + +作者:[Chris Patrick Carias Stas][a] +选题:[lujun9972][b] +译者:[lxbwolf](https://github.com/lxbwolf) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/chris/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/what-is-desktop-environment/ +[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/system-restart-required.png?resize=800%2C469&ssl=1 +[3]: https://linuxhandbook.com/free-linux-cloud-servers/ +[4]: https://linuxhandbook.com/cockpit/ +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/cockpit-2-2.png?resize=800%2C450&ssl=1 +[6]: https://itsfoss.com/install-ubuntu-server-raspberry-pi/ +[7]: https://itsfoss.com/apt-command-guide/ +[8]: https://manpages.ubuntu.com/manpages/bionic/man8/tasksel.8.html +[9]: https://itsfoss.com/best-linux-desktop-environments/ +[10]: https://www.gnome.org/ +[11]: https://itsfoss.com/display-manager/ +[12]: https://itsfoss.com/display-server/ +[13]: https://wiki.debian.org/LightDM +[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/installing-gui-ubuntu-server-select-dm.png?resize=799%2C354&ssl=1 +[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/installing-gui-ubuntu-server-default.png?resize=800%2C68&ssl=1 +[16]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/installing-gui-ubuntu-server-gnome-desktop-greet.png?resize=798%2C600&ssl=1 +[17]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/installing-gui-ubuntu-server-gnome-desktop.png?resize=792%2C597&ssl=1 +[18]: https://mate-desktop.org/ +[19]: https://lubuntu.net/ +[20]: https://xubuntu.org/ +[21]: https://www.xfce.org/ +[22]: https://itsfoss.com/install-kde-on-ubuntu/ +[23]: https://itsfoss.com/install-cinnamon-on-ubuntu/ +[24]: https://itsfoss.com/install-budgie-ubuntu/ +[25]: https://itsfoss.com/uninstall-programs-ubuntu/ +[26]: https://yunohost.org/ \ No newline at end of file diff --git a/published/202105/20210516 Looking back at what Python 3.4 did for enum.md b/published/202105/20210516 Looking back at what Python 3.4 did for enum.md new file mode 100644 index 0000000000..3c83459607 --- /dev/null +++ b/published/202105/20210516 Looking back at what Python 3.4 did for enum.md @@ -0,0 +1,204 @@ +[#]: subject: (Looking back at what Python 3.4 did for enum) +[#]: via: (https://opensource.com/article/21/5/python-34-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13443-1.html) + +回顾一下 Python 3.4 中的枚举 +====== + +> 另外探索一些未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202105/30/230947j19r2772m12tccrh.jpg) + +这是 Python 3.x 首发特性系列文章的第五篇。Python 3.4 在 2014 年首次发布,尽管它已经发布了很长时间,但它引入的许多特性都没有被充分利用,而且相当酷。下面是其中的三个。 + +### 枚举 + +我最喜欢的逻辑谜题之一是自我描述的 [史上最难的逻辑谜题][2]。在其中,它谈到了三个“神”,他们被称为 A、B 和 C,他们的身份是真、假和随机,按一定顺序排列。你可以问他们问题,但他们只用神的语言回答,其中 “da” 和 “ja” 表示 “是” 和 “不是”,但你不知道哪个是哪个。 + +如果你决定使用 Python 来解决这个问题,你将如何表示神的名字和身份以及神的语言中的词语?传统的答案是使用字符串。然而,字符串的拼写错误可能会带来灾难性的后果。 + +如果在解题的关键部分,你用字符串 “jaa” 而不是 “ja” 进行比较,你就会得到一个错误的答案。虽然谜题没有说明风险是什么,但这可能是最好的避免方式。 + +`enum` 模块让你能够以一种可调试但安全的方式来定义这些东西: + +``` +import enum + +@enum.unique +class Name(enum.Enum): + A = enum.auto() + B = enum.auto() + C = enum.auto() + +@enum.unique +class Identity(enum.Enum): + RANDOM = enum.auto() + TRUE = enum.auto() + FALSE = enum.auto() + + +@enum.unique +class Language(enum.Enum): + ja = enum.auto() + da = enum.auto() +``` + +枚举的一个好处是,在调试日志或异常中,枚举的呈现方式是有帮助的: + +``` +name = Name.A +identity = Identity.RANDOM +answer = Language.da +print("I suspect", name, "is", identity, "because they answered", answer) +``` + +``` + I suspect Name.A is Identity.RANDOM because they answered Language.da +``` + +### functools.singledispatch + +在开发游戏的“基础设施”层时,你想通用地处理各种游戏对象,但仍然允许这些对象自定义动作。为了使这个例子更容易解释,假设这是一个基于文本的游戏。当你使用一个对象时,大多数情况下,它只会打印 `You are using `。但是使用一把特殊的剑可能需要随机滚动,否则会失败。 + +当你获得一个物品时,它通常会被添加到库存中。然而,一块特别重的石头会砸碎一个随机物品。如果发生这种情况,库存中会失去该物体。 + +处理这个问题的一个方法是在物品上设置 `use` 和 `acquire` 方法。随着游戏复杂性的增加,这些方法会越来越多,使游戏对象变得难以编写。 + +相反,`functools.singledispatch` 允许你以安全和尊重命名空间的方式追溯性地添加方法。 + +你可以定义没有行为的类: + +``` +class Torch: + name="torch" + +class Sword: + name="sword" + +class Rock: + name="rock" +``` + +``` +import functools + +@functools.singledispatch +def use(x): + print("You use", x.name) + +@functools.singledispatch +def acquire(x, inventory): + inventory.add(x) +``` + +对于火炬来说,这些通用的实现已经足够了: + +``` +inventory = set() + +def deploy(thing): + acquire(thing, inventory) + use(thing) + print("You have", [item.name for item in inventory]) + +deploy(Torch()) +``` + +``` + You use torch + You have ['torch'] +``` + +然而,剑和石头需要一些专门的功能: + +``` +import random + +@use.register(Sword) +def use_sword(sword): + print("You try to use", sword.name) + if random.random() < 0.9: + print("You succeed") + else: + print("You fail") + +deploy(sword) +``` + +``` + You try to use sword + You succeed + You have ['sword', 'torch'] +``` + +``` +import random + +@acquire.register(Rock) +def acquire_rock(rock, inventory): + to_remove = random.choice(list(inventory)) + inventory.remove(to_remove) + inventory.add(rock) + +deploy(Rock()) +``` + +``` + You use rock + You have ['sword', 'rock'] +``` + +岩石可能压碎了火炬,但你的代码更容易阅读。 + +### pathlib + +从一开始,Python 中文件路径的接口就是“智能字符串操作”。现在,通过 `pathlib`,Python 有了一种面向对象的方法来操作路径。 + +``` +import pathlib +``` + +``` +gitconfig = pathlib.Path.home() / ".gitconfig" +text = gitconfig.read_text().splitlines() +``` + +诚然,用 `/` 作为操作符来生成路径名有点俗气,但在实践中却不错。像 `.read_text()` 这样的方法允许你从小文件中获取文本,而不需要手动打开和关闭文件句柄。 + +这使你可以集中精力处理重要的事情: + +``` +for line in text: + if not line.strip().startswith("name"): + continue + print(line.split("=")[1]) +``` + +``` + Moshe Zadka +``` + +### 欢迎来到 2014 年 + +Python 3.4 大约在七年前就发布了,但是在这个版本中首次出现的一些功能非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-34-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/math_money_financial_calculator_colors.jpg?itok=_yEVTST1 (old school calculator) +[2]: https://en.wikipedia.org/wiki/The_Hardest_Logic_Puzzle_Ever diff --git a/published/202105/20210519 1Password for Linux Is Officially Here With Brand New Features.md b/published/202105/20210519 1Password for Linux Is Officially Here With Brand New Features.md new file mode 100644 index 0000000000..f56c1c4ea5 --- /dev/null +++ b/published/202105/20210519 1Password for Linux Is Officially Here With Brand New Features.md @@ -0,0 +1,80 @@ +[#]: subject: (1Password for Linux Is Officially Here With Brand New Features) +[#]: via: (https://news.itsfoss.com/1password-linux-released/) +[#]: author: (Ankush Das https://news.itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13416-1.html) + +全新 1Password for Linux 正式推出 +====== + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/05/1password-linux-feat.png?w=1200&ssl=1) + +1Password 是一个相当不错的密码管理器(尽管不是开源的),在开源社区也有很好的口碑。他们甚至 [为从事开源项目的用户提供免费的团队成员资格][1]。 + +它的 Linux 桌面客户端已经处于测试阶段,但现在它已经准备好进入黄金时间。 + +他们已经正式 [宣布][2] 推出 1Password Linux 版,具有完整的桌面体验,可以与你的网络浏览器集成。 + +它还亮相了一些很快会进入 Android、iOS、Mac 和 Windows **的新功能**。 + +在这里,我要安利一下,Linux 上的 1Password 值得期待。 + +### 1Password Linux 桌面客户端 + +虽然它可以作为浏览器扩展而无需考虑平台,但桌面客户端的出现使体验更好。 + +![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/05/1pass-account-dark.png?w=1280&ssl=1) + +桌面客户端内置了基于 GTK 主题的**黑暗模式支持**。它还能与 **GNOME、KDE 和你选择的任何其他窗口管理器**很好地整合。 + +看起来他们也在更多的细节上花费了心思,因此桌面客户端也支持**系统托盘图标**,即使你关闭了它也能保持活跃。 + +你可以用它直接在你的默认浏览器上自动填入密码。不过,虽然它提到了 **X11 剪贴板集成和支持**,但没有提到 Wayland。 + +![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/05/1pass-screenshot.png?w=1280&ssl=1) + +它还包括了对 GNOME 钥匙环和 KDE 钱包的支持、内核钥匙环的集成、与系统锁定和闲置服务的集成。 + +除了这些,1Password for Linux 还首次推出了新的功能,这些功能将很快用于其他平台。 + + * 安全文件附件 + * 项目归档和删除功能,以便更好地组织文件 + * Watchtower 仪表板,检查和评估你的密码安全状况 + * 新的共享细节,查看谁可以访问什么 + * 快速查找和智能搜索建议 + * 翻新的外观和感觉 + +如果你想了解该版本以及他们对开源和 Linux 社区的计划,请浏览 [官方公告][2]。 + +### 在 Linux 中安装 1Password + +其官方称,该桌面客户端支持几个 Linux 发行版,包括 Ubuntu、 Debian、 Arch Linux、 Fedora、 CentOS 和 RHEL。你可以得到用来安装的 **.deb** 和 **.rpm** 软件包,或者使用软件包管理器找到它们。 + +- [下载 1Password for Linux][4] + +它也有一个可用的 [snap 包][5],你可以参考我们的 [在 Linux 中使用 snap][6] 的指南。 + +关于安装的更多信息,你也可以参考 [官方说明][7]。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/1password-linux-released/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://news.itsfoss.com/1password-free-subscriptions/ +[2]: https://blog.1password.com/welcoming-linux-to-the-1password-family/ +[4]: https://1password.com/downloads/linux/ +[5]: https://snapcraft.io/1password +[6]: https://itsfoss.com/use-snap-packages-ubuntu-16-04/ +[7]: https://support.1password.com/install-linux/ diff --git a/published/202105/20210519 What is serverless with Java.md b/published/202105/20210519 What is serverless with Java.md new file mode 100644 index 0000000000..48b28c8514 --- /dev/null +++ b/published/202105/20210519 What is serverless with Java.md @@ -0,0 +1,80 @@ +[#]: subject: (What is serverless with Java?) +[#]: via: (https://opensource.com/article/21/5/what-serverless-java) +[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh) +[#]: collector: (lujun9972) +[#]: translator: (DCOLIVERSUN) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13429-1.html) + +什么是 Java 的无服务器化? +====== + +> Java 仍是开发企业应用程序最流行的语言之一。那么,为什么无服务器serverless开发人员对它望而却步? + +![](https://img.linux.net.cn/data/attachment/album/202105/27/090038pd7ff7x0yohh38nd.jpg) + +几十年来,企业已经在各类平台上开发了关键业务应用程序,包括物理服务器、虚拟机和云环境。这些应用程序在各行各业都有一个共同点,那就是无论需求如何,它们都需要持续可用(24x7x365),保证稳定性、可靠性和性能。因此,即使实际资源利用率低于 50%,每个企业都必须付出高额成本维护基础架构(如 CPU、内存、磁盘、网络等)。 + +无服务器架构是为了帮助解决这些问题而产生的。无服务器允许开发人员按需构建和运行应用程序,保证高可用性,不必在多云和混合云环境中管理服务器。在幕后,无服务器拓扑中仍有很多服务器,但它们是从应用程序开发中抽象出来的。相反,云提供商使用无服务器进行资源管理,例如配置、维护、联网和扩展服务器实例。 + +由于其高效性,无服务器开发模式现在是一些企业的需求,这些企业希望按需启动服务,而不是一直运行服务。 + +许多新建的开源项目用来在 [Kubernetes][2] 集群上通过 Linux 容器包来管理无服务器应用程序。CNCF 的《[交互式无服务器全景][3]》 是一份关于开源项目、工具、框架和公共云平台的指南,帮助 DevOps 团队处理无服务器应用程序。 + +![CNCF Serverless Landscape][4] + +开发人员可以编写代码,然后将其快速部署到各种无服务器环境中。然后,无服务器应用程序响应需求,并根据需要自动伸缩扩展。 + +你可能想知道什么编程语言和运行环境最适合无服务器应用程序开发,以便与上图中的技术集成。这个问题不只一个答案,但是让我们退一步来讨论在企业生产环境中开发业务应用程序最流行的应用程序运行环境:Java。 + +据 [Developer Economics][6] 称,截至 2020 年第三季度,仍有 800 多万家企业开发人员在使用 Java 来实现其业务需求。然而,根据 2020 年的一项调查,Java(占比 6%)显然不是有前瞻意识的开发人员的首选,他们使用当前云服务做开发。 + +![NewRelic data on serverless runtimes and languages][8] + +*来自 NewRelic 无服务器基准报告的数据(Daniel Oh, [CC BY-SA 4.0][9])* + +资源使用、响应时间和延迟在无服务器开发中至关重要。公有云提供商提供的无服务器产品通常是按需计量的,只有在无服务器应用程序启动时,才会通过事件驱动的执行模式收费。因此,当无服务器应用程序闲置或缩减为零时,企业无需支付任何费用。 + +### 带有容器的 Java 状态 + +在这种背景下,你可能会问:“_既然现有业务应用程序很可能是在 Java 技术上开发的,那么开发人员为什么不尝试使用 Java 栈进行无服务器应用程序开发呢?_” + +隐藏的真相是:很难在新的不可变更的基础设施(例如 Kubernetes 这样的容器平台)中优化 Java 应用程序。 + +![Differences in memory resource usage][10] + +该图描述了 Java 进程与竞争的语言、框架(如 [Node.js][11] 和 [Go][12])之间内存资源使用的差异。Java HotSpot 占用资源最大,其中包括每个Java 虚拟机Java Virtual Machine(JVM)实例分配的堆内存。中间显示了 Node.js 每个进程要比 Java 小得多。最后,Go 是一种流行的云服务编程语言,因为它的内存消耗最低。 + +如你所见,当你在这张图从左到右走,你会看到更密的节点。这就是开发人员在云、容器和 Kubernetes 上编写无服务器应用程序时回避 Java(包括 [Spring Boot][13],一种顽固的微服务 Java 框架)的原因。 + +### 下一步是什么? + +企业可以通过实现无服务器应用程序获得明显的好处,但是资源密度问题导致他们避免使用 Java 堆栈在 Kubernetes 上开发无服务器应用程序开发。但是选择其他语言会给全球数百万 Java 开发人员带来学习负担。因此,在本系列的下一篇文章中,我将指导你如何开始使用 Java 无服务器函数,而不是使用其他语言。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/what-serverless-java + +作者:[Daniel Oh][a] +选题:[lujun9972][b] +译者:[DCOLIVERSUN](https://github.com/DCOLIVERSUN) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/daniel-oh +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/java-coffee-mug.jpg?itok=Bj6rQo8r (Coffee beans and a cup of coffee) +[2]: https://opensource.com/article/19/6/reasons-kubernetes +[3]: https://landscape.cncf.io/serverless?zoom=150 +[4]: https://opensource.com/sites/default/files/uploads/cncf-serverless-landscape.png (CNCF Serverless Landscape) +[5]: https://github.com/cncf/landscape/blob/master/LICENSE +[6]: https://developereconomics.com/ +[7]: https://newrelic.com/resources/ebooks/serverless-benchmark-report-aws-lambda-2020 +[8]: https://opensource.com/sites/default/files/uploads/newrelic_serverlessbenchmarkreport.png (NewRelic data on serverless runtimes and languages) +[9]: https://creativecommons.org/licenses/by-sa/4.0/ +[10]: https://opensource.com/sites/default/files/uploads/java-containers.png (Differences in memory resource usage) +[11]: https://nodejs.org/ +[12]: https://golang.org/ +[13]: https://spring.io/projects/spring-boot diff --git a/published/202105/20210520 Remap your Caps Lock key on Linux.md b/published/202105/20210520 Remap your Caps Lock key on Linux.md new file mode 100644 index 0000000000..2695eb3d9d --- /dev/null +++ b/published/202105/20210520 Remap your Caps Lock key on Linux.md @@ -0,0 +1,136 @@ +[#]: subject: (Remap your Caps Lock key on Linux) +[#]: via: (https://opensource.com/article/21/5/remap-caps-lock-key-linux) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13414-1.html) + +在 Linux 上重新映射你的大写锁定键 +====== + +> 通过在 GNOME 3 和 Wayland 上重新映射你的键盘,提高你的打字和导航速度,避免重复性压力伤害。 + +![](https://img.linux.net.cn/data/attachment/album/202105/22/174755hs0dbmm4idl5rbrr.jpg) + +对我来说,有许多改变生活的 Linux 时刻,但大多数都在成为现状后淡忘了。有一个 Linux 教给我的键盘小技巧,每次我使用它的时候(也许每天有 1000 次),我都会想起这件事,那就是把大写锁定键转换为 `Ctrl` 键。 + +我从不使用大写锁定键,但我整天使用 `Ctrl` 键进行复制、粘贴、在 [Emacs][2] 内导航,以及 [调用 Bash][3]、[GNU Screen][4] 或 [tmux][5] 等操作。大写锁定键在我的键盘上占据了宝贵的空间,而将实际上有用的 `Ctrl` 键挤到了难以触及的底部角落。 + +![手指放在键盘上][6] + +*这看起来就痛苦* + +重新映射 `Ctrl` 提高了我的打字和导航速度,并可能使我免受重复性压力伤害。 + +### 消失的控制 + +系好安全带,这是个过山车式的历史课。 + +对于像我这样的大写锁定键交换者来说,不幸的是,当 GNOME 3 问世时,它几乎删除了改变 `Ctrl` 键位置的功能。 + +幸运的是,优秀的 GNOME Tweaks 应用程序带回了这些 “失踪” 的控制面板。 + +不幸的是,[GNOME 40][8] 没有 GNOME Tweaks 应用程序(还没有?) + +另外,不幸的是,过去在 X11 上可以工作的老的 `xmodmap` 技巧在新的 [Wayland 显示服务器][9] 上没有用。 + +有一小段时间(最多一个下午),我觉得对于那些讨厌大写锁定键的人来说人生都灰暗了。然后我想起我是一个开源的用户,总有一种方法可以解决诸如被忽略的 GUI 控制面板之类的简单问题。 + +### dconf + +GNOME 桌面使用 dconf,这是一个存储重要配置选项的数据库。它是 GSettings 的后端,GSettings 是 GNOME 系统应用程序需要发现系统偏好时的接口。你可以使用 `gsetting` 命令查询 dconf 数据库,也可以使用 `dconf` 命令直接设置 dconf 的键值。 + +### GSettings + +dconf 数据库不一定是你可能称为可发现的数据库。它是一个不起眼的数据库,你通常不需要去考虑它,它包含了许多通常无需直接交互的数据。然而,如果你想更好地了解 GNOME 所要管理的所有偏好选项,那么浏览它是很有趣的。 + +你可以用 `list-schemas` 子命令列出所有 dconf 的模式。在浏览了数百个模式之后,你可以使用 [grep][10] 将你的注意力缩小到一些看起来特别相关的东西上,比如 `org.gnome.desktop`。 + +``` +$ gsettings list-schemas | grep ^org.gnome.desktop +[...] +org.gnome.desktop.background +org.gnome.desktop.privacy +org.gnome.desktop.remote-desktop.vnc +org.gnome.desktop.interface +org.gnome.desktop.default-applications.terminal +org.gnome.desktop.session +org.gnome.desktop.thumbnailers +org.gnome.desktop.app-folders +org.gnome.desktop.notifications +org.gnome.desktop.sound +org.gnome.desktop.lockdown +org.gnome.desktop.default-applications.office +``` + +无论是通过手动搜索还是通过 [阅读 GSetting 文档][11],你可能会注意到 `org.gnome.desktop.input-sources` 模式,它有助于定义键盘布局。从设计上来说,GSetting 模式包含了键和值。 + +### 用 dconf 重新映射大写字母锁 + +`xkb-options` 键包含了可选的键盘覆写。要设置这个键值,请使用`dconf`,将上面模式中的点(`.`)转换为斜线(`/`),因为 dconf 数据库需要使用 `/`。 + +``` +$ dconf write /org/gnome/desktop/input-sources/xkb-options "['caps:ctrl_modifier']" +``` + +我把 `caps` 设置为 `ctrl_modifier`,因为我使用 `Ctrl` 修饰键的次数多于其他修饰键,但 Vim 用户可能喜欢把它设置为 `escape`。 + +### 查看你的设置 + +这个改变会立即生效,并在重启后仍然生效。这是你在 GNOME 中定义的首选项,在你改变它之前一直有效。 + +你可以通过 `gsettings` 查看 dconf 中的新值。首先,查看可用的键: + +``` +$ gsettings list-keys \ + org.gnome.desktop.input-sources +xkb-options +mru-sources +show-all-sources +current +per-window +sources +``` + +然后用 `xkb-options` 键名查看设置: + +``` +$ gsettings get \ + org.gnome.desktop.input-sources \ + xkb-options +['caps:ctrl_modifier'] +``` + +### 选项丰富 + +我在我的 GNOME 3.4 系统上使用这个小技巧来设置大写锁定键以及 [Compose][12] 键(`compose:ralt`)。虽然我相信正在开发中的 GUI 控件可以控制这些选项,但我也不得不承认,能以编程方式设置这些选项的能力是我的荣幸。作为以前没有可靠方法来调整桌面设置的系统的管理员,能够用命令修改我的首选项使得设置新桌面变得快速而容易。 + +GSettings 提供了很多有用的选项,而且文档也很详尽。如果你有想要改变的东西,可以看看有什么可用的。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/remap-caps-lock-key-linux + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/emoji-keyboard.jpg?itok=JplrSZ9c (Emoji keyboard) +[2]: https://opensource.com/article/20/12/emacs +[3]: https://opensource.com/article/18/5/bash-tricks#key +[4]: https://opensource.com/article/17/3/introduction-gnu-screen +[5]: https://opensource.com/article/19/6/tmux-terminal-joy +[6]: https://opensource.com/sites/default/files/uploads/bendy-fingers.jpg (Fingers on a keyboard) +[7]: https://creativecommons.org/licenses/by-sa/4.0/ +[8]: https://discourse.gnome.org/t/new-gnome-versioning-scheme/4235 +[9]: https://wayland.freedesktop.org +[10]: https://opensource.com/downloads/grep-cheat-sheet +[11]: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/using_the_desktop_environment_in_rhel_8/configuring-gnome-at-low-level_using-the-desktop-environment-in-rhel-8 +[12]: https://opensource.com/article/17/5/7-cool-kde-tweaks-will-improve-your-life diff --git a/published/202105/20210521 Joining Fedora Linux to an enterprise domain.md b/published/202105/20210521 Joining Fedora Linux to an enterprise domain.md new file mode 100644 index 0000000000..25ad7ac46b --- /dev/null +++ b/published/202105/20210521 Joining Fedora Linux to an enterprise domain.md @@ -0,0 +1,101 @@ +[#]: subject: (Joining Fedora Linux to an enterprise domain) +[#]: via: (https://fedoramagazine.org/join-fedora-linux-enterprise-domain/) +[#]: author: (ogutierrez https://fedoramagazine.org/author/ogutierrez/) +[#]: collector: (lujun9972) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13426-1.html) + +将 Fedora Linux 系统添加到企业域中 +====== + +![](https://img.linux.net.cn/data/attachment/album/202105/26/120149o01pzllgw119w66l.jpg) + +在企业互联网场景中,一般情况下最广泛使用的基于 Linux 的操作系统是 Red Hat Enterprise Linux(RHEL),它主要用于服务器,但也可以用作工作站。Fedora linux 其实也是工作站系统的一个很好的选择,它提供了许多在企业环境中工作的特性,使管理成为一项简单的任务。 + +当你的工作网络中有许多机器时,你需要一种以集中方式管理用户和机器的方法。[FreeIPA][4] 和 [活动目录][5]Active Directory 就是用于这个任务的技术。它们允许系统管理员使用网络中所有实体的目录来管理大量的机器。 + +### Fedora 中的活动目录 + +活动目录在公司环境中非常常见。Fedora 和 RHEL 通过使用 SSSD ( 系统安全服务守护进程 System Security Services Daemon)与 FreeIPA 或活动目录等服务很好地集成。SSSD 是一种访问远程目录和身份验证机制的系统服务。使用此软件的计算机能够使用远程凭据进行身份验证,并访问该目录网络中可用的其他服务。 + +要加入域网络,你需要域管理员的权限才能添加计算机。可以通过在域凭据上设置特殊权限或代表你对该计算机进行预配置。Fedora Linux 有一个在安装时配置机器的选项,叫做企业登录Enterprise Login。如果你的计算机网络自动配置为企业域网络,那么你可以直接使用域凭据登录。 + +![][6] + +如果你的配置不是自动的,或者你已经安装了 Fedora Linux,你可以通过以下几个配置步骤加入一个活动目录域: + + 1. 设置此计算机的 DNS。要连接到目录服务,首先需要能够解析目录域名。如果你的网络使用 DHCP 设置正确的 DNS,则可以跳过此步骤。 + 2. 更改你的计算机名称,以反映它将是新域的一部分。编辑文件 `/etc/hostname`,并将机器名更改为 `machinename.my_domain`。 + 3. 通过执行以下命令加入域:`sudo realm join my_domain -v`( 用域名称替换 `my_domain`)。 + +运行此命令后,系统将请求允许加入该域中新计算机的用户的凭据。如果进程中没有错误,则机器将成为域的一部分。 + +![][7] + +现在,此计算机已成为你的域的一部分,你可以: + + * 使用域用户名登录到计算机 + * 获取 kerberos 票据以访问域网络中的不同服务 + * 访问其他服务,具体取决于域的配置方式 + +### 使用 Fleet Commander 管理 Fedora Linux + +现在这台计算机已经是你的域的一部分了,你可以使用活动目录的域管理员工具来管理它。由于你的计算机没有运行 Windows,因此你只能进行身份验证以及访问网络和目录服务。无法在此计算机上设置与桌面相关的配置。 + +幸运的是,Fedora 有个工具叫 [Fleet Commander][8]。 + +#### 创建配置 + +Fleet Commander 是一个管理工具,允许你为网络中的所有 Fedora Linux 机器设置桌面配置文件。 + +这意味着,你可以简单地为 GNOME 桌面、Firefox、Chrome、LibreOffice 和其他支持的软件设置任何配置,然后在登录到选定的用户/组/计算机时以细粒度的方式应用该配置。 + +![][9] + +要使用这个工具首先安装 `fleet-commander-admin` 软件包: + +``` +sudo dnf install fleet-commander-admin +``` + +然后,用浏览器访问 [http://localhost:9090][10] 来登录。在左边的菜单中,点击 “Fleet Commander”。 + +Fleet Commander 有一个工具,可以使用“实时会话”机制直观地设置配置概要文件。它运行一个虚拟机,作为基本机器的模板。你需要手动进行所需的配置更改。然后检查所有配置更改,选择要添加到配置文件中的更改,然后部署它。 + +#### 管理客户端 + +在每个 Fedora Linux 或 RHEL 机器中,你都需要安装 Fleet Commander 客户端服务。此服务在用户登录时激活。它在域中搜索应用于当前用户/计算机的配置文件,并应用这个配置。 + +安装 `fleet-commander-client`: + +``` +sudo dnf install fleet-commander-client +``` + +软件将自动检测机器是否是域的一部分。当用户登录时,它将使用应用于该用户的配置文件来设置会话。 + +-------------------------------------------------------------------------------- + +via: https://fedoramagazine.org/join-fedora-linux-enterprise-domain/ + +作者:[ogutierrez][a] +选题:[lujun9972][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://fedoramagazine.org/author/ogutierrez/ +[b]: https://github.com/lujun9972 +[1]: https://fedoramagazine.org/wp-content/uploads/2021/05/enterprise-816x345.jpg +[2]: https://unsplash.com/@genefoto?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[3]: https://unsplash.com/s/photos/fleet?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText +[4]: https://www.freeipa.org/page/Main_Page +[5]: https://en.wikipedia.org/wiki/Active_Directory +[6]: https://lh5.googleusercontent.com/aIRYn2TDgaaUrErzBV_KPVgpm94OrVgySlwqlI3VsotslWKN5UnLQ0VYjESSFB12aZWf_UnbmOOwa_rcxvRoI-MB6gFaw8p-RgBP9Lswnb2YV3iIlQ8YeXgpwJC_-B5tPrFTfUe_ +[7]: https://lh6.googleusercontent.com/DVvr7cHuZxvgqhAHk9v7jAYSER7VSP1G7CJ1xHx1kT5ZS-v1yt3rKMmwk9JhsLnYGfwAjOPPpSC2BGTpZtAdKrnx7XLUWgOZBhFFwB6SL7vR_q_2N1c_OGYp7YmNLRk7oRW8IEVB +[8]: https://fleet-commander.org/ +[9]: https://lh6.googleusercontent.com/ATeNp5niX37MW7ARiMVSkqe9Vr5Fv4IN6eUW5xf1UPO0AMO1DxXLypw0CbqTNOfzLJYDM18ggc7Mrh3LZK8Foh80K1WjSW9LHQD081BbJg0owQJj_ZQdICLr0tGILmBRco-xbq92 +[10]: http://localhost:9090/ diff --git a/published/202105/20210527 Port operating systems to new chip architectures.md b/published/202105/20210527 Port operating systems to new chip architectures.md new file mode 100644 index 0000000000..5de254f018 --- /dev/null +++ b/published/202105/20210527 Port operating systems to new chip architectures.md @@ -0,0 +1,115 @@ +[#]: subject: (Port operating systems to new chip architectures) +[#]: via: (https://opensource.com/article/21/5/port-chip-architectures) +[#]: author: (Alan Smithee https://opensource.com/users/alansmithee) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13436-1.html) + +将操作系统移植到新的芯片架构的经验 +====== + +> 在将嵌入式系统操作系统移植到不同的芯片架构时,RT-Thread 的维护者们从中学到了什么。 + +![](https://img.linux.net.cn/data/attachment/album/202105/28/221925tuv6j9lsg6xovog2.jpg) + +曾经有人问我,为什么计算机被称为“计算机”,它们做的事情可远不止计算数字。一台现代的个人电脑可以浏览互联网、播放音频和视频、为视频游戏和电影生成漂亮的图形、模拟和预测复杂的天气模式和流行病风险、将建筑和工程蓝图变为现实等等。 + +计算机之所以能做到这些,是因为所有这些问题都可以归结为数字方程,而计算机的 CPU —— 其中央处理单元 —— 实际上不过是一个简单的计算器。 + +为了让 CPU 向硬盘驱动器发送信号以写入数据,或向显示器发送信号以显示图像,它必须接收指令。这些指令是以 “代码” 的形式出现的,这是一种简明的说法,即必须有人写一个 _程序_ ,与CPU “说” 同样的语言。CPU 理解的是 _机器语言_,这是一个大多数人都无法理解的比特阵列,大多数人都不可能手动写出来。相反,我们使用像 C、C++、Java、Python 等编程语言。这些语言被解析并编译成机器语言,然后交付给 CPU。 + +如果你试图用一种它不理解的语言来指示 CPU,它不知道该怎么做。你可以通过尝试用 [x86_64 RHEL][3] 镜像启动 [树莓派][2] 来体验这种误传尝试的尴尬结果。如果它能工作就好了,但是不能。 + +### 将一个操作系统移植到一个新的架构上 + +[RT-Thread 项目][4] 为嵌入式系统程序员提供了一个开源的操作系统(OS)。嵌入式领域是非常多样化的,有很多物联网(IoT)、定制工业和业余设备。RT-Thread 的目标是使嵌入式编程对每个人来说都很容易,无论你使用什么设备。有时,这意味着要将一个操作系统移植到一个新的架构上,不管是用于相同架构但指令集略有不同的的芯片,还是用于全新的架构。 + +一开始处理这个问题可能会有点吓人 —— 你可能不知道从哪里开始或如何开始。这篇文章收集了 RT-Thread 维护者在将 [RTOS][5] 移植到新的芯片架构时学到的经验。 + +### 你在开始之前需要知道什么 + +这里是一个看似难以逾越的过程的高屋建瓴的观点。这对你的项目来说可能有所不同,但从概念上来说,这是相对普遍的,即使一些具体的细节是不同的: + + 1. 准备好一个 C 语言的执行环境 + 2. 确认可以通过串行端口发送和接收字符 + 3. 确认上下文切换代码可以工作 + 4. 获取支持的硬件定时器 + 5. 确认中断程序可以通过串口接收和解析数据 + +### 执行模式 + +对于大多数先进的体系结构,操作系统和用户应用程序运行在不同的权限级别上。这可以防止有功能故障的代码影响操作系统的集成和安全。例如,在 ARMv7-A 架构中,操作系统通常在系统模式下运行,而在 ARMv8-A 中,操作系统可以在 EL2 或 EL3 权限级别上运行。 + +通常情况下,芯片在通电时以最高权限级别执行启动代码。但在此之后,操作系统会将特权级别切换到其目标模式。 + +#### 1、执行 C 代码 + +这一步的关键动作是将 [块起始符号][6]block starting symbol(.bss)部分设置为零,并设置堆栈指针。 + +在 C 语言的实现中,未初始化的全局变量和静态变量通常存储在 .bss 部分,它不占用存储设备的任何空间。当程序被加载时,相应的空间被分配到内存中,并被初始化为零。当操作系统启动时,它必须自己做这项工作。 + +另一方面,操作系统必须初始化堆栈空间并设置堆栈指针。由于 C 语言程序在进入和退出函数时在堆栈上保存和恢复局部变量,所以在调用任何 C 函数之前必须设置堆栈指针。RT-Thread 必须为每个新创建的线程做这个步骤。 + +#### 2、至少使用一个串行驱动器 + +RT-Thread 通过串口输出信息和日志,这也有助于在移植过程中对代码进行调试。在这个阶段,通过串口 _接收_ 数据是不必要的。当我们第一次在串口上看到我们友好的、熟悉的 RT-Thread 的标志时,我们就知道我们走对了路! + +#### 3、确认上下文切换逻辑 + +一个任务的上下文是它的整个执行环境,它包含通用寄存器、程序计数器、堆栈帧的位置等等。当一个新的线程被创建时,RT-Thread 必须手动分配和设置它的上下文,这样调度器就可以切换到新的线程,就像它对其他线程一样。 + +有三件事需要注意: + + * 首先,当 RT-Thread 启动时,默认情况下中断是禁用的。当任务调度器第一次被启用时,它们就会被启用;这个过程是在上下文切换期间用汇编语言实现的。 + * 第二,当一个线程退出时,下一个调度将开始,这时拥有的资源会被空闲的线程回收。 + * 第三,数据被推入堆栈的顺序必须与从堆栈中弹出数据的顺序一致。 + +一般来说,你希望正常进入主函数和 msh 控制台。然而,在这个阶段无法实现输入控制,因为串行输入中断还没有实现。当串行中断实现后,就可以进行 msh 输入了。 + +#### 4、设置定时器 + +RT-Thread 需要一个定时器来定期产生中断;它被用来计算自系统启动以来所经过的“滴答”。计数器的编号用于提供软件中断功能,并指示内核何时开始调度一个任务。 + +设置时间片的值可能是一件棘手的事情。它通常是 10ms 到 1ms。如果你在一个慢速的 CPU 上选择一个小的时间片,大部分时间就会花在任务切换上 —— 不利于完成其他事情。 + +#### 5、确认串口工作正常 + +在这一步,我们通过串口与 RT-Thread msh 进行交互。我们发送命令,按回车键,然后看着 msh 执行命令并显示结果。 + +这个过程通常不难实现。不过,有一点要提醒大家。在某些平台上,在处理完串口中断后,别忘了清除中断标志。 + +一旦串口工作正常,移植过程基本上就完成了。 + +### 实践 + +为了将你的项目移植到不同的芯片架构上,你需要非常清楚地了解你所针对的芯片的架构。熟悉你的项目中最关键的部分的底层代码。通过对照芯片的手册结合大量的实际工作经验,你会了解芯片的特权模式、寄存器和编译方法。 + +如果你没有需要移植到新芯片的项目,请加入我们;RT-Thread 项目总是需要帮助将 RTOS 移植到新的芯片上!作为一个开源项目,RT-Thread 正在改变开源嵌入式编程的面貌。请在 [RT-Thread 俱乐部][7]介绍你自己并寻求帮助! + +* * * + +本文基于 DEV 社区上的 [如何将操作系统移植到不同的芯片架构上?][8],并经许可转载。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/port-chip-architectures + +作者:[Alan Smithee][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/alansmithee +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/BIZ_darwincloud_520x292_0311LL.png?itok=74DLgd8Q (diagram of planning a cloud) +[2]: https://opensource.com/resources/raspberry-pi +[3]: https://www.redhat.com/en/store/red-hat-enterprise-linux-developer-suite +[4]: https://opensource.com/article/20/6/open-source-rtos +[5]: https://www.rt-thread.io/ +[6]: https://en.wikipedia.org/wiki/.bss +[7]: https://club.rt-thread.io/ +[8]: https://dev.to/abby06/how-to-port-operating-system-to-different-chip-architecture-3od9 diff --git a/published/20210517 Convenient matrices and other improvements Python 3.5 brought us.md b/published/20210517 Convenient matrices and other improvements Python 3.5 brought us.md new file mode 100644 index 0000000000..10ee2c88b7 --- /dev/null +++ b/published/20210517 Convenient matrices and other improvements Python 3.5 brought us.md @@ -0,0 +1,165 @@ +[#]: subject: (Convenient matrices and other improvements Python 3.5 brought us) +[#]: via: (https://opensource.com/article/21/5/python-35-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13448-1.html) + +Python 3.5 带给我们的方便的矩阵以及其他改进 +====== + +> 探索一些未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202106/01/201953lua9t9f3vvwqbqet.jpg) + +这是 Python 3.x 首发特性系列文章的第六篇。Python 3.5 在 2015 年首次发布,尽管它已经发布了很长时间,但它引入的许多特性都没有被充分利用,而且相当酷。下面是其中的三个。 + +### @ 操作符 + +`@` 操作符在 Python 中是独一无二的,因为在标准库中没有任何对象可以实现它!它是为了在有矩阵的数学包中使用而添加的。 + +矩阵有两个乘法的概念。元素积是用 `*` 运算符完成的。但是矩阵组合(也被认为是乘法)需要自己的符号。它是用 `@` 完成的。 + +例如,将一个“八转”矩阵(将轴旋转 45 度)与自身合成,就会产生一个四转矩阵。 + +``` +import numpy + +hrt2 = 2**0.5 / 2 +eighth_turn = numpy.array([ + [hrt2, hrt2], + [-hrt2, hrt2] +]) +eighth_turn @ eighth_turn +``` + +``` + array([[ 4.26642159e-17, 1.00000000e+00], + [-1.00000000e+00, -4.26642159e-17]]) +``` + +浮点数是不精确的,这比较难以看出。从结果中减去四转矩阵,将其平方相加,然后取其平方根,这样就比较容易检查。 + +这是新运算符的一个优点:特别是在复杂的公式中,代码看起来更像基础数学: + +``` +almost_zero = ((eighth_turn @ eighth_turn) - numpy.array([[0, 1], [-1, 0]]))**2 +round(numpy.sum(almost_zero) ** 0.5, 10) +``` + +``` + 0.0 +``` + +### 参数中的多个关键词字典 + +Python 3.5 使得调用具有多个关键字-参数字典的函数成为可能。这意味着多个默认值的源可以与更清晰的代码”互操作“。 + +例如,这里有个可笑的关键字参数的函数: + +``` +def show_status( + *, + the_good=None, + the_bad=None, + the_ugly=None, + fistful=None, + dollars=None, + more=None +): + if the_good: + print("Good", the_good) + if the_bad: + print("Bad", the_bad) + if the_ugly: + print("Ugly", the_ugly) + if fistful: + print("Fist", fistful) + if dollars: + print("Dollars", dollars) + if more: + print("More", more) +``` + +当你在应用中调用这个函数时,有些参数是硬编码的: + +``` +defaults = dict( + the_good="You dig", + the_bad="I have to have respect", + the_ugly="Shoot, don't talk", +) +``` + +从配置文件中读取更多参数: + +``` +import json + +others = json.loads(""" +{ +"fistful": "Get three coffins ready", +"dollars": "Remember me?", +"more": "It's a small world" +} +""") +``` + +你可以从两个源一起调用这个函数,而不必构建一个中间字典: + +``` +show_status(**defaults, **others) +``` + +``` + Good You dig + Bad I have to have respect + Ugly Shoot, don't talk + Fist Get three coffins ready + Dollars Remember me? + More It's a small world +``` + +### os.scandir + +`os.scandir` 函数是一种新的方法来遍历目录内容。它返回一个生成器,产生关于每个对象的丰富数据。例如,这里有一种打印目录清单的方法,在目录的末尾跟着 `/`: + +``` +for entry in os.scandir(".git"): + print(entry.name + ("/" if entry.is_dir() else "")) +``` + +``` + refs/ + HEAD + logs/ + index + branches/ + config + objects/ + description + COMMIT_EDITMSG + info/ + hooks/ +``` + +### 欢迎来到 2015 年 + +Python 3.5 在六年前就已经发布了,但是在这个版本中首次出现的一些特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-35-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/markus-spiske-iar-matrix-unsplash.jpg?itok=78u_4veR (Hacker code matrix) \ No newline at end of file diff --git a/published/20210518 Are you using this magic method for filesystems from Python 3.6.md b/published/20210518 Are you using this magic method for filesystems from Python 3.6.md new file mode 100644 index 0000000000..1f8cef3c27 --- /dev/null +++ b/published/20210518 Are you using this magic method for filesystems from Python 3.6.md @@ -0,0 +1,131 @@ +[#]: subject: (Are you using this magic method for filesystems from Python 3.6?) +[#]: via: (https://opensource.com/article/21/5/python-36-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13454-1.html) + +你使用过 Python 3.6 中针对文件系统的这个神奇方法吗? +====== + +> 探索 os.fspath 和其他两个未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202106/03/164403a6m2c989hh963lm6.jpg) + +这是 Python 3.x 首发特性系列文章中的第七篇。Python 3.6 首次发布于 2016 年,尽管它已经发布了一段时间,但它引入的许多特性都没有得到充分利用,而且相当酷。下面是其中的三个。 + +### 分隔数字常数 + +快回答哪个更大,`10000000` 还是 `200000`?你在看代码时能正确回答吗?根据当地的习惯,在写作中,你会用 10,000,000 或 10.000.000 来表示第一个数字。问题是,Python 使用逗号和句号是用于其他地方。 + +幸运的是,从 Python 3.6 开始,你可以使用下划线来分隔数字。这在代码中和使用字符串的 `int()` 转换器时都可以使用: + +``` +import math +math.log(10_000_000) / math.log(10) +``` + +``` + 7.0 +``` + +``` +math.log(int("10_000_000")) / math.log(10) +``` + +``` + 7.0 +``` + +### Tau 是对的 + +45 度角用弧度表示是多少?一个正确的答案是 `π/4`,但这有点难记。记住 45 度角是一个八分之一的转角要容易得多。正如 [Tau Manifesto][2] 所解释的,`2π`,称为 `Τ`,是一个更自然的常数。 + +在 Python 3.6 及以后的版本中,你的数学代码可以使用更直观的常数: + +``` +print("Tan of an eighth turn should be 1, got", round(math.tan(math.tau/8), 2)) +print("Cos of an sixth turn should be 1/2, got", round(math.cos(math.tau/6), 2)) +print("Sin of a quarter turn should be 1, go", round(math.sin(math.tau/4), 2)) +``` + +``` + Tan of an eighth turn should be 1, got 1.0 + Cos of an sixth turn should be 1/2, got 0.5 + Sin of a quarter turn should be 1, go 1.0 +``` + +### os.fspath + +从 Python 3.6 开始,有一个神奇的方法表示“转换为文件系统路径”。当给定一个 `str` 或 `bytes` 时,它返回输入。 + +对于所有类型的对象,它寻找 `__fspath__` 方法并调用它。这允许传递的对象是“带有元数据的文件名”。 + +像 `open()` 或 `stat` 这样的普通函数仍然能够使用它们,只要 `__fspath__` 返回正确的东西。 + +例如,这里有一个函数将一些数据写入一个文件,然后检查其大小。它还将文件名记录到标准输出,以便追踪: + +``` +def write_and_test(filename): +    print("writing into", filename) +    with open(filename, "w") as fpout: +        fpout.write("hello") +    print("size of", filename, "is", os.path.getsize(filename)) +``` + +你可以用你期望的方式来调用它,用一个字符串作为文件名: + +``` +write_and_test("plain.txt") +``` + +``` +    writing into plain.txt +    size of plain.txt is 5 +``` + +然而,可以定义一个新的类,为文件名的字符串表示法添加信息。这样可以使日志记录更加详细,而不改变原来的功能: + +``` +class DocumentedFileName: +    def __init__(self, fname, why): +        self.fname = fname +        self.why = why +    def __fspath__(self): +        return self.fname +    def __repr__(self): +        return f"DocumentedFileName(fname={self.fname!r}, why={self.why!r})" +``` + +用 `DocumentedFileName` 实例作为输入运行该函数,允许 `open` 和 `os.getsize` 函数继续工作,同时增强日志: + +``` +write_and_test(DocumentedFileName("documented.txt", "because it's fun")) +``` + +``` +    writing into DocumentedFileName(fname='documented.txt', why="because it's fun") +    size of DocumentedFileName(fname='documented.txt', why="because it's fun") is 5 +``` + +### 欢迎来到 2016 年 + +Python 3.6 是在五年前发布的,但是在这个版本中首次出现的一些特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-36-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/browser_screen_windows_files.png?itok=kLTeQUbY (Computer screen with files or windows open) +[2]: https://tauday.com/tau-manifesto diff --git a/published/20210519 Slice infinite generators with this Python 3.7 feature.md b/published/20210519 Slice infinite generators with this Python 3.7 feature.md new file mode 100644 index 0000000000..82480a7e1c --- /dev/null +++ b/published/20210519 Slice infinite generators with this Python 3.7 feature.md @@ -0,0 +1,137 @@ +[#]: subject: (Slice infinite generators with this Python 3.7 feature) +[#]: via: (https://opensource.com/article/21/5/python-37-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13459-1.html) + +用这个 Python 3.7 的特性来切片无限生成器 +====== + +> 了解更多关于这个和其他两个未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202106/05/230956bgcjacwcyujlndez.jpg) + +这是关于 Python 3.x 首发特性系列文章的第八篇。[Python 3.7][2] 于 2018 年首次发布,尽管它已经发布了几年,但它引入的许多特性都未被充分利用,而且相当酷。下面是其中的三个。 + +### 注解推迟评估 + +在 Python 3.7 中,只要激活了正确的 `__future__` 标志,注解在运行时就不会被评估: + +``` +from __future__ import annotations + +def another_brick(wall: List[Brick], brick: Brick) -> Education: + pass +``` + +``` +another_brick.__annotations__ +``` + +``` + {'wall': 'List[Brick]', 'brick': 'Brick', 'return': 'Education'} +``` + +它使递归类型(指向自己的类)和其他有趣的事情成为了可能。然而,这意味着如果你想做自己的类型分析,你需要明确地使用 `ast`。 + +``` +import ast +raw_type = another_brick.__annotations__['wall'] +[parsed_type] = ast.parse(raw_type).body +``` + +``` +subscript = parsed_type.value +f"{subscript.value.id}[{subscript.slice.id}]" +``` + +``` +    'List[Brick]' +``` + +### itertools.islice 支持 __index__ + +Python 中的序列切片长期以来一直接受各种 _类 int 对象_(具有 `__index__()` 的对象)作为有效的切片部分。然而,直到 Python 3.7,`itertools.islice`,即核心 Python 中对无限生成器进行切片的唯一方法,才获得了这种支持。 + +例如,现在可以用 `numpy.short` 大小的整数来切片无限生成器: + +``` +import numpy +short_1 = numpy.short(1) +short_3 = numpy.short(3) +short_1, type(short_1) +``` + +``` +    (1, numpy.int16) +``` + +``` +import itertools +list(itertools.islice(itertools.count(), short_1, short_3)) +``` + +``` +    [1, 2] +``` + +### functools.singledispatch() 注解注册 + +如果你认为 [singledispatch][3] 已经很酷了,你错了。现在可以根据注解来注册了: + +``` +import attr +import math +from functools import singledispatch + +@attr.s(auto_attribs=True, frozen=True) +class Circle: +    radius: float +        +@attr.s(auto_attribs=True, frozen=True) +class Square: +    side: float + +@singledispatch +def get_area(shape): +    raise NotImplementedError("cannot calculate area for unknown shape", +                              shape) + +@get_area.register +def _get_area_square(shape: Square): +    return shape.side ** 2 + +@get_area.register +def _get_area_circle(shape: Circle): +    return math.pi * (shape.radius ** 2) + +get_area(Circle(1)), get_area(Square(1)) +``` + +``` +    (3.141592653589793, 1) +``` + +### 欢迎来到 2017 年 + +Python 3.7 大约是四年前发布的,但是在这个版本中首次出现的一些特性非常酷,而且没有得到充分利用。如果你还没使用,那么将它们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-37-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/python-programming-code-keyboard.png?itok=fxiSpmnd (Hands on a keyboard with a Python book ) +[2]: https://opensource.com/downloads/cheat-sheet-python-37-beginners +[3]: https://opensource.com/article/19/5/python-singledispatch diff --git a/published/20210520 Make your API better with this positional trick from Python 3.8.md b/published/20210520 Make your API better with this positional trick from Python 3.8.md new file mode 100644 index 0000000000..3cc383ade7 --- /dev/null +++ b/published/20210520 Make your API better with this positional trick from Python 3.8.md @@ -0,0 +1,126 @@ +[#]: subject: (Make your API better with this positional trick from Python 3.8) +[#]: via: (https://opensource.com/article/21/5/python-38-features) +[#]: author: (Moshe Zadka https://opensource.com/users/moshez) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13466-1.html) + +用 Python 3.8 中的这个位置技巧让你的 API 变得更好 +====== + +> 探索只接受位置参数和其他两个未被充分利用但仍然有用的 Python 特性。 + +![](https://img.linux.net.cn/data/attachment/album/202106/07/164929k51eccocxkx4xf11.jpg) + +这是 Python 3.x 首发特性系列文章的第九篇。Python 3.8 于 2019 年首次发布,两年后,它的许多很酷的新特性仍然没有被使用。下面是其中的三个。 + +### importlib.metadata + +[入口点][2] 在 Python 包中被用来做各种事情。大多数人熟悉的是 [console_scripts][3] 入口点,不过 Python 中的许多插件系统都使用它们。 + +在 Python 3.8 之前,从 Python 中读取入口点的最好方法是使用 `pkg_resources`,这是一个有点笨重的模块,它是 `setuptools` 的一部分。 + +新的 `importlib.metadata` 是一个内置模块,它允许访问同样的东西: + +``` +from importlib import metadata as importlib_metadata + +distribution = importlib_metadata.distribution("numpy") +distribution.entry_points +``` + +``` +    [EntryPoint(name='f2py', value='numpy.f2py.f2py2e:main', group='console_scripts'), +     EntryPoint(name='f2py3', value='numpy.f2py.f2py2e:main', group='console_scripts'), +     EntryPoint(name='f2py3.9', value='numpy.f2py.f2py2e:main', group='console_scripts')] +``` + +入口点并不是 `importlib.metadata` 允许访问的唯一东西。可以调试、报告,或者(在极端情况下)触发兼容模式,你也可以在运行时检查依赖的版本! + + +``` +f"{distribution.metadata['name']}=={distribution.version}"`[/code] [code]`    'numpy==1.20.1' +``` + +### 只接受位置参数 + +强制关键字的参数在传达 API 作者的意图方面取得巨大成功之后,另一个空白被填补了:只接受位置参数。 + +特别是对于那些允许使用任意关键字的函数(例如,生成数据结构),这意味着对允许的参数名称的限制更少: + +``` +def some_func(prefix, /, **kwargs): +    print(prefix, kwargs) +``` + +``` +some_func("a_prefix", prefix="prefix keyword value") +``` + +``` +   a_prefix {'prefix': 'prefix keyword value'}` +``` + +注意,令人困惑的是,_变量_ `prefix` 的值与 `kwargs["prefix"]` 的值不同。就像在很多地方一样,要注意小心使用这个功能。 + +### 自我调试表达式 + +50 多年来,`print()` 语句(及其在其他语言中的对应语句)一直是快速调试输出的最爱。 + +但是我们在打印语句方面取得了很大的进展,比如: + +``` +special_number = 5 +print("special_number = %s" % special_number) +``` + +``` +    special_number = 5 +``` + +然而,自我记录的 f-strings 使它更容易明确: + + +``` +print(f"{special_number=}") +``` + +``` +    special_number=5` +``` + +在 f-string 插值部分的末尾添加一个 `=`,可以保留字面部分,同时添加数值。 + +当更复杂的表达式在该部分内时,这就更有用了: + +``` +values = {} +print(f"{values.get('something', 'default')=}") +``` + +``` +    values.get('something', 'default')='default' +``` + +### 欢迎来到 2019 年 + +Python 3.8 大约在两年前发布,它的一些新特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/python-38-features + +作者:[Moshe Zadka][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_women_computing_5.png?itok=YHpNs_ss (Women in computing and open source v5) +[2]: https://packaging.python.org/specifications/entry-points/ +[3]: https://python-packaging.readthedocs.io/en/latest/command-line-scripts.html diff --git a/published/20210524 How to Install and Use XRDP on Ubuntu for Remote Desktop Connection.md b/published/20210524 How to Install and Use XRDP on Ubuntu for Remote Desktop Connection.md new file mode 100644 index 0000000000..ccd33e8e01 --- /dev/null +++ b/published/20210524 How to Install and Use XRDP on Ubuntu for Remote Desktop Connection.md @@ -0,0 +1,180 @@ +[#]: subject: (How to Install and Use XRDP on Ubuntu for Remote Desktop Connection) +[#]: via: (https://itsfoss.com/xrdp-ubuntu/) +[#]: author: (Hunter Wittenborn https://itsfoss.com/author/hunter/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13463-1.html) + +如何在 Ubuntu 上安装和使用 XRDP 进行远程桌面连接 +====== + +![](https://img.linux.net.cn/data/attachment/album/202106/07/093752qs3feworsvyoflvl.jpg) + +> 这是一份初学者指南,展示了在基于 Ubuntu 的 Linux 发行版上设置 XRDP 所需要遵循的步骤。有了它,你就可以从不同的电脑上访问你的 Ubuntu 系统,并以图形方式使用它。 + +微软的 [远程桌面协议][1](RDP) 是一个允许从一台计算机到另一台计算机进行图形化远程桌面连接的协议。RDP 的工作原理是让一台主机运行软件,允许其他几台计算机连接到它。 + +[XRDP][2] 是 RDP 的一个开源实现,不需要运行任何专有程序。XRDP 不仅试图遵循 RDP,而且还与常规的 RDP 客户端兼容,如 [Remmina][3] 和 [GNOME Boxes][4]。 + +下面是 XRDP 连接屏幕的样子。 + +![][5] + +### 使用 XRDP 需要注意的事项 + +虽然 XRDP 对于机器的远程访问非常好用,但重要的是要知道 XRDP **不** 适合什么。 + +#### 如果你需要一个安全的连接,请不要使用 XRDP + +通过 XRDP 建立的连接可以被攻击者查看和修改,因此应避免任何敏感信息。这一点可以通过使用 SSH 连接或证书来缓解,但这两者都需要更复杂的设置,这里就不一一介绍了。 + +#### XRDP 在默认情况下不能很好地应用主题 + +在我的测试中,XRDP 默认似乎从未应用过 [Ubuntu][6] 主题。在文章的结尾处有关于解决这个问题的说明。 + +#### 如果你只想/需要一个 CLI 环境,就不要使用 XRDP + +XRDP 是为在 GUI 环境中使用而设计和制造的。如果你打算在 CLI 环境中使用它,比如在服务器上,你应该看看其他工具,比如 SSH。 + +### 在 Ubuntu 上安装和使用 XRDP + +下面是这个远程连接设置正常工作所需的设置: + +* 一个安装了 XRDP 服务器的 Linux 系统。这是一个将被远程访问的系统。 +* 远程系统应该和你的系统在同一个网络上,或者它应该有一个 [公共 IP 地址][15]。 +* 远程 Linux 系统的用户名和密码。 +* 安装有 RDP 客户端的另一个系统(无论是 Linux、macOS 还是 Windows)。 + +![][8] + +#### 第 1 步:在远程计算机上安装 XRDP + +安装 XRDP 只需几个步骤,而且是相当直接的操作。 + +> 备注:在访问任何地方之前,请注意,这里说的 “远程机器” 是其他人连接到的机器。 + +XRDP 包含在大多数发行版的软件库中。在 Ubuntu 上,你可以在 universe 库中找到它。 + +你可以用下面的命令来安装它: + +``` +sudo apt install xrdp +``` + +#### 第 2 步:连接到远程机器 + +好消息是,XRDP 开箱就能使用! + +要连接到你安装了 XRDP 的机器上,你首先需要在本地机器上安装一个 RDP 客户端。 + +我将使用 GNOME Boxes,它可以通过以下方式安装: + +``` +sudo apt install gnome-boxes +``` + +GNOME Boxes 更多的是以虚拟机使用而闻名,但它也支持其他各种协议,包括 XRDP。 + +如果由于某种原因你不想使用 Boxes,你也可以使用一个叫做 Remmina 的客户端。 + +``` +sudo apt install remmina +``` + +不过,请注意,在本教程的其余部分,我将使用 Boxes。 + +首先,启动 GNOME Boxes,并点击 “+” 号,选择 “连接到远程计算机…”。 + +![][10] + +接下来,输入你要连接的机器的 IP 地址,前缀为 `rdp://`,然后按下图连接: + +> **不确定你的 IP 地址是什么?** +> +> 你可以用 `ip address` 命令找到你的 IP 地址。你需要寻找一个看起来像分成四组的数字的东西: +> ``` +> abhishek@its-foss:~$ ip address +> 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 +> link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 +> inet 127.0.0.1/8 scope host lo +> valid_lft forever preferred_lft forever +> 2: wlp0s20f3: mtu 1500 qdisc noqueue state UP group default qlen 1000 +> link/ether dc:46:b9:fb:7a:c5 brd ff:ff:ff:ff:ff:ff +> inet 192.168.0.107/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp0s20f3 +> valid_lft 6183sec preferred_lft 6183sec +> ``` + +避免任何名为 `127.0.0.1` 的 IP 地址,因为那个地址指向你运行命令的机器。输出中应该有更多的 IP 地址,如上图所示。 + +![][11] + +然后,你应该会看到一个登录页面。将“会话”设置为 “Xorg”,只需输入你的用户名和密码,然后点击 “OK”。 + +![][5] + +之后,你应该看到远程主机的桌面: + +![][12] + +至此,一切都会像机器在你面前时一样表现。 + +### 故障排除:修复 XRDP 连接的主题问题 + +在我对 Ubuntu 20.04 的测试中,默认的 Yaru 主题似乎在连接时没有应用。这可以通过一些努力来解决。 + +首先,在远程计算机上运行这个命令: + +``` +sudo apt install gnome-tweaks gnome-shell-extensions dconf-editor -y +``` + +接下来,打开 “扩展” 应用,并打开如下开关: + +![][13] + +接下来,关闭你的远程桌面会话并重新登录。现在,打开 Tweaks,按照下面的截图配置: + +![][14] + +最后,打开 dconf 编辑器,并进入 `/org/gnome/shell/extensions/dash-toock/`。设置如下所示的值: + +* `custom-theme-shrink`:`On` +* `dock-fixed`:`On` +* `transparency-mode`:`FIXED` + +### 总结 + +至此,一切都准备好了,可以做你需要做的事了。 + +如果有什么地方做得不太对,或者你有什么问题或意见,请在下面留言。我会尽力帮助你的。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/xrdp-ubuntu/ + +作者:[Hunter Wittenborn][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/hunter/ +[b]: https://github.com/lujun9972 +[1]: https://en.wikipedia.org/wiki/Remote_Desktop_Protocol +[2]: https://en.wikipedia.org/wiki/Xrdp +[3]: https://remmina.org/ +[4]: https://wiki.gnome.org/Apps/Boxes +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp_connected_login.png?resize=716%2C582&ssl=1 +[6]: https://ubuntu.com/ +[7]: https://itsfoss.com/install-gui-ubuntu-server/ +[8]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp-ubuntu.png?resize=800%2C450&ssl=1 +[9]: https://itsfoss.com/check-ip-address-ubuntu/ +[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp_gnome-boxes_connect-begin.png?resize=744%2C580&ssl=1 +[11]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp_gnome-boxes_rdp-connect.png?resize=757%2C514&ssl=1 +[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp_connected_homescreen.png?resize=711%2C595&ssl=1 +[13]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp_extensions.png?resize=800%2C557&ssl=1 +[14]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/xrdp_tweaks.png?resize=800%2C550&ssl=1 +[15]: https://itsfoss.com/check-ip-address-ubuntu/ \ No newline at end of file diff --git a/published/20210526 Make Command Not Found- Here-s How to Fix it.md b/published/20210526 Make Command Not Found- Here-s How to Fix it.md new file mode 100644 index 0000000000..2840dc18ad --- /dev/null +++ b/published/20210526 Make Command Not Found- Here-s How to Fix it.md @@ -0,0 +1,82 @@ +[#]: subject: (Make Command Not Found? Here’s How to Fix it) +[#]: via: (https://itsfoss.com/make-command-not-found-ubuntu/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13451-1.html) + +Make 命令未找到?这是修复它的方法 +====== + +![](https://img.linux.net.cn/data/attachment/album/202106/02/203049l51rbr5v55kivg11.jpg) + +有一天,我试图在一个新的 Ubuntu 系统上编译一个程序,当我试图使用 `make` 命令时,它向我抛出一个错误: + +``` +The program 'make' is currently not installed. You can install it by typing: +sudo apt install make +``` + +这表明 `make` 命令还没有安装。你可以用这些命令在 Ubuntu 上逐步安装 `make`: + +``` +sudo apt update +sudo apt install make +``` + +第一个命令是更新本地的软件包缓存。如果是一个新安装的 Ubuntu 系统,这是很有必要的。有了刷新的软件包缓存,你的系统就会知道应该从哪个仓库下载 `make` 包。 + +并验证 `make` 是否已经正确安装: + +``` +make --version +``` + +![Checking make version][1] + +### 在 Ubuntu 上安装 make 的更好方法 + +安装 `make` 命令的一个更好的方法是使用 `build-essential` 包。这个包包含 `make`、`gcc`、`g++` 和其他一些编译器和开发工具。 + +``` +sudo apt install build-essential +``` + +![Installing Build Essential package][2] + +安装了这个 `build-essential` 包后,你就可以[在 Linux 中轻松地运行 C/C++ 程序][3]。 + +### 如果 make 已经安装了,但它没有工作怎么办? + +在一些罕见的情况下,可能会发生 `make` 已经安装了,但却无法工作的情况。 + +其原因是 `make` 命令不在 `$PATH` 变量中。你可以用这个命令重新安装 `make`: + +``` +sudo apt install --reinstall make +``` + +如果这不起作用,你可以尝试 [手动添加二进制文件到你的 PATH 中][4],但这应该不需要手动。 + +我希望这个快速提示能帮助你。仍然有问题或对相关主题有疑问?请随时在评论区留言。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/make-command-not-found-ubuntu/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/check-make-version-linux.png?resize=800%2C293&ssl=1 +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/install-build-essentials-800x410.png?resize=800%2C410&ssl=1 +[3]: https://itsfoss.com/c-plus-plus-ubuntu/ +[4]: https://itsfoss.com/add-directory-to-path-linux/ +[5]: https://itsfoss.community/ diff --git a/published/20210528 What you need to know about Quarkus in 2021.md b/published/20210528 What you need to know about Quarkus in 2021.md new file mode 100644 index 0000000000..1f3d85a35e --- /dev/null +++ b/published/20210528 What you need to know about Quarkus in 2021.md @@ -0,0 +1,67 @@ +[#]: subject: (What you need to know about Quarkus in 2021) +[#]: via: (https://opensource.com/article/21/5/quarkus) +[#]: author: (Alan Smithee https://opensource.com/users/alansmithee) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13456-1.html) + +在 2021 年你需要知道 Quarkus 些什么? +====== + +> Quarkus 受益于 20 多年的 Java 开发历史,使开发应用变得更快、更容易。 + +![](https://img.linux.net.cn/data/attachment/album/202106/04/221812ja1b5btxpgwapsap.jpg) + +在云上发布服务部分是为了通过简单可靠的方式为用户和开发者提供对这些服务的便捷访问。与在线应用对接的最流行的方法之一是通过应用编程接口(API),这是一个花哨的术语,意味着你允许用户通过代码与你的应用进行互动。 + +API 的概念很重要,因为它可以帮助其他人在你的应用基础上进行开发。假设你设计了一个网站,当用户点击一个按钮时返回一个随机数字。通常情况下,这需要用户打开你的网站并点击一个按钮。网站可能是有用的,但只是在一定程度上。如果你包含一个 API,用户可以直接向你的服务器发送一个信号,要求一个随机数,或者他们可以自己编程,“调用”你的服务器来获取一个数字,而不需要点击或手动交互。开发者可以使用你的随机数作为游戏的数值,或作为密码生成器的一部分,或其他任何开发者需要随机数的地方(总是有的)。一个好的 API 可以解锁你的应用,让其他人使用你的代码结果,本质上,将你在网络上的工作转变为一个软件库。 + +### 什么是 Quarkus? + +[Quarkus][2] 是一个原生 Kubernetes Java 栈,为无服务器应用交付而设计。与有 20 年历史的 Java 相比,[Quarkus][3] 相对年轻,但受益于这 20 年的发展,用该项目的话说,是 “超音速的亚原子 Java”。可能没有人知道这句话的确切含义,但你肯定可以通过一下午使用 Quarkus 来感受到它对你的开发生活的意义。 + +Quarkus 让你用一个有用的 API 开发应用,几乎不需要配置,也不用担心启动一个复杂的环境。你不需要学习关于云计算或边缘计算的所有知识,就可以学习并擅长使用 Quarkus。了解 Quarkus 可以使你的开发更快,它可以帮助你为现代计算机网络制作灵活的应用。 + +下面是我们最近的一些涉及 Quarkus 的文章。 + +### 开始使用 Quarkus + +在 Saumya Singh 的《[如何创建你的第一个 Quarkus 应用][4]》中,你可以了解 Quarkus 和无服务器交付的好处,并在大约 10 分钟内创建了一个简单的演示应用。事实上,_10_ 分钟以内更准确,因为在 Maven 和 Quarkus 之间,几乎没有你想象中的那么多设置。它几乎感觉不到像 Java 一样的坏处,而感觉像 Java 一样好。 + +### 边缘开发 + +Linux 是创建物联网 (IoT) [边缘应用][5] 的一个流行平台。这有很多原因,包括安全性、编程语言和开发模型的广泛选择以及协议支持。不出所料,Quarkus 对物联网的处理非常好。Quarkus 的内存效率高,启动快,并且有快速的运行时,所以它不仅是物联网的可行解决方案,而且是理想的解决方案。你可以通过 Daniel Oh 的《[在 Linux 上使用开源的边缘开发入门][6]》来开始使用 Quarkus 和物联网。 + +### Quarkus 和 VS Code + +当你处理代码时,一个集成开发环境(IDE)会有很大的不同。微软的开源 [VS Code][7](或无品牌标志的 [VSCodium][8])是一个伪装成 IDE 的流行文本编辑器(或者说是伪装成文本编辑器的 IDE?),它有很多扩展,可以使它成为几乎任何编程语言的专门环境。如果你正在使用或考虑使用 VS Code,那么请阅读 Daniel Oh 的《[Quarkus in VS Code][9]》使用指南,了解一些关于 Maven、Quarkus 和 VS Code 如何协同工作的专业技巧。 + +### 获得 Quarkus + +使用 Quarkus 开发,可以像 Python 一样简单地设置环境,但它为你提供了强大的 Java 语言及其众多的库。它是进入云计算、[Knative][10] 和边缘计算的一个重要入口。获取 Quarkus 并开始编码。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/5/quarkus + +作者:[Alan Smithee][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/alansmithee +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cloud_tools_hardware.png?itok=PGjJenqT (Tools in a cloud) +[2]: https://quarkus.io +[3]: https://developers.redhat.com/blog/2019/03/07/quarkus-next-generation-kubernetes-native-java-framework/ +[4]: https://opensource.com/article/21/4/quarkus-tutorial +[5]: https://opensource.com/article/17/9/what-edge-computing +[6]: https://opensource.com/article/21/5/edge-quarkus-linux +[7]: https://github.com/microsoft/vscode +[8]: https://opensource.com/article/20/6/open-source-alternatives-vs-code +[9]: https://opensource.com/article/20/4/java-quarkus-vs-code +[10]: https://www.openshift.com/learn/topics/quarkus \ No newline at end of file diff --git a/published/20210601 Nyxt Browser is a Keyboard-oriented Web Browser Inspired by Emacs and Vim.md b/published/20210601 Nyxt Browser is a Keyboard-oriented Web Browser Inspired by Emacs and Vim.md new file mode 100644 index 0000000000..41208fd921 --- /dev/null +++ b/published/20210601 Nyxt Browser is a Keyboard-oriented Web Browser Inspired by Emacs and Vim.md @@ -0,0 +1,104 @@ +[#]: subject: (Nyxt Browser is a Keyboard-oriented Web Browser Inspired by Emacs and Vim) +[#]: via: (https://itsfoss.com/nyxt-browser/) +[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13449-1.html) + +Nyxt 浏览器:一个受 Emacs 和 Vim 启发的面向键盘的网页浏览器 +====== + +你可以得到很多适用于 Linux 的开源网页浏览器,不只是基于 Chrome 的浏览器,而且还有 [其它的替代品][1]。 + +它们大多数都侧重于提供漂亮的用户体验,并同时兼顾隐私功能。 + +然而,Nyxt 浏览器可能不是为最好的用户体验而建立的,而是为资深用户喜欢的某些东西而打造的。 + +### Nyxt 浏览器:专注于键盘快捷键和命令的开源浏览器 + +![][2] + +[Nyxt][3] 是一个面向键盘的开源网页浏览器,可在 Linux 和 macOS 上使用。 + +当然,不是每个资深用户都会去使用键盘快捷键,但这旨在满足那些喜欢通过键盘导航的用户的需求。 + +它的灵感来自于 Vim 和 Emacs 中的键盘快捷键的工作方式 —— 所以如果你对这些编辑器很熟悉,那么你也会对这些快捷键感到熟悉。 + +与主流的网页浏览器不同,你不必在多个设置和菜单中导航,只需一个快速快捷键或一个命令,你就会获得所有你需要访问的功能。 + +如果你想知道的话,它不特定于某种网页引擎,它目前支持 WebEngine 和 WebKit。 + +因此,如果你是一个喜欢使用键盘导航的人,它可以节省时间并改善你的浏览体验。 + +它提供了相当多的有用功能,我将在下面指出。 + +### Nyxt 浏览器的特点 + +![][4] + +你会发现这里提供了许多非常规的功能。在探索这里提到的每一个关键亮点之前,你可能想先浏览一下官方文档(按 `F1` 找到它),你可以在欢迎屏幕中可以找到链接。 + + * 无损的树形的历史记录(跟踪你的浏览历史的确切层次,并轻松回忆你导航到的内容) + * 剪贴板历史,帮助你快速找到你之前复制的内容 + * 开始输入命令的键盘快捷方式(`CTRL+Space`) + * 使用键盘快捷键在冗长的文件中导航,可以跳到一个特定的标题 + * 缓冲区替代了标签,它将每个标签的行为和设置相互隔离 + * 通过将多个标签映射到一个共同的元素来一同关闭 + * 无鼠标导航 + * 使用搜索快速找到一个缓冲区,而不是在许多标签中寻找它 + * 能够根据你的工作流程运行简短的脚本 + * 可定制的自动填写功能,你也可以在表单中自动填写当前日期 + * 内置的广告拦截器 + +除了上面提到的功能外,你还可以切换**黑暗模式**、**HTTPS 模式**,以及在命令菜单中有大量的选项。 + +此外,它是完全可定制和可编程的。因此,你可以选择为自己量身定做。 + +### 在 Linux 中安装 Nyxt 浏览器 + +![][7] + +对于基于 Ubuntu 的发行版,你可以从 [官方下载页面][8] 找到一个 deb 包。 + +如果你还不会,你可能想读一下 [安装 deb 文件的方法][9]。 + +它也为 Arch Linux 用户提供了 [AUR][10],并为 Alpine Linux、Nix 和 Guix 提供了包。 + +如果你需要编译它,你也可以在 [GitHub 页面][11] 中找到源代码。 + +- [下载 Nyxt 浏览器][8] + +### 总结 + +虽然 Nyxt 浏览器可能不是最友好的浏览体验,但对于能够充分利用键盘快捷键和命令的用户来说,它肯定是一个特殊的选择。 + +如果你想要一个无鼠标的导航体验,这是一个值得尝试的浏览器。我建议你尝试一下 —— 但如果你一般不使用键盘快捷键来导航,这对你来说将是一个复杂的体验。 + +你尝试过 Nyxt 浏览器吗?请在下面的评论中告诉我你的想法。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/nyxt-browser/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/open-source-browsers-linux/ +[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/nyxt-browser-screenshot.png?resize=1079%2C823&ssl=1 +[3]: https://nyxt.atlas.engineer/ +[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/nyxt-browser.png?resize=1057%2C812&ssl=1 +[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/linux-terminal-based-browsers.png?fit=800%2C450&ssl=1 +[6]: https://itsfoss.com/terminal-web-browsers/ +[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/nyxt-browser-settings.png?resize=800%2C617&ssl=1 +[8]: https://nyxt.atlas.engineer/download +[9]: https://itsfoss.com/install-deb-files-ubuntu/ +[10]: https://itsfoss.com/aur-arch-linux/ +[11]: https://github.com/atlas-engineer/nyxt diff --git a/published/20210602 Convert Images to ASCII Art in Linux Terminal With This Nifty Little Tool.md b/published/20210602 Convert Images to ASCII Art in Linux Terminal With This Nifty Little Tool.md new file mode 100644 index 0000000000..e4f3b70567 --- /dev/null +++ b/published/20210602 Convert Images to ASCII Art in Linux Terminal With This Nifty Little Tool.md @@ -0,0 +1,115 @@ +[#]: subject: (Convert Images to ASCII Art in Linux Terminal With This Nifty Little Tool) +[#]: via: (https://itsfoss.com/ascii-image-converter/) +[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/) +[#]: collector: (lujun9972) +[#]: translator: (geekpi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13461-1.html) + +在 Linux 终端将图像转换成 ASCII 艺术 +====== + +![](https://img.linux.net.cn/data/attachment/album/202106/06/210732m5oo91ao9ws33757.png) + +想在 Linux 终端中做一些有趣的事情吗?把一张普通的图片转换成 ASCII 艺术怎么样? + +你知道 [什么是 ASCII][1] 么?它是一个标准,在 8 位码中的 256 个空位上分配字母、数字和其他字符。ASCII 艺术是一个由可打印的 ASCII 字符组成的图形。基本上,它是由一堆字母、数字和特殊字符组成的。 + +你可能见过有人 [以 ASCII 格式显示他们发行版的标志][2],像这样: + +![][3] + +这很酷,对吗?把一张普通的图片转换成 ASCII 艺术怎么样?这就是在这篇文章中要探讨的问题。 + +### Ascii Image Converter + +顾名思义,[Ascii Image Converter][4] 是一个将图片转换为 ASCII 艺术的工具。它是一个用 Go 语言编写的基于命令行的工具,它打印出提供给它的图片的ASCII版本。 + +你可能认不出我,但下面的图片中的 ASCII 版就是我。那是我的 8 位头像。 + +![][5] + +该工具支持以下格式的输入图像: + +* JPEG/JPG +* PNG +* BMP +* WEBP +* TIFF/TIF + +让我们看看如何安装和使用它。 + +### 在 Linux 上安装 Ascii Image Converter + +这个有趣的工具也可以在 Windows 上使用,但我不打算这么做。在本教程中,让我们坚持使用 Linux。 + +如果你的发行版中启用了 [Snap][6],你可以用下面的命令轻松地安装它的 snap 包: + +``` +sudo snap install ascii-image-converter +``` + +你也可以从它的发布页面下载 Linux 的可执行文件,并把可执行文件放在 `/usr/local/bin/` 目录下。这样,你就能像普通的 Linux 命令一样运行它。如果你想知道为什么会这样,请了解一下 [Linux 目录层次结构][7]。 + +### 使用 Ascii Image Converter + +使用很简单。安装后,你只需要提供你想转换的图像的路径。 + +``` +ascii-image-converter path_to_image +``` + +你也可以提供图片的 URL,直接从网上把图片转换成 ASCII。 + +这是我的个人资料照片转换成 ASCII 格式。我把我的原始照片放在这里供大家参考。 + +![][8] + +你也可以转换成彩色的 ASCII。 + +``` +ascii-image-converter -C path_to_image +``` + +![][9] + +你可以通过提供它们的路径将多个图像转换为 ASCII。它将在终端显示器上一个接一个地打印 ASCII 版本。 + +也有一个选项可以保存生成的 ASCII 艺术。在旧版本中,它只会被保存为文本文件,而不是图像。开发者 Zoraiz Hassan 发布了一个新版本,现在该工具默认将生成的 ASCII 图像保存为 PNG 格式。 + +``` +ascii-image-converter path_to_image -s . +``` + +还有一些可用的选项,比如给输出一个特定的尺寸,使用更多的 ASCII 字符,或者使用你自己的字符集来打印 ASCII 艺术。你可以在 [项目的仓库][4] 上阅读相关内容。 + +### 喜欢它吗? + +你喜欢更多的 ASCII 相关的东西吗?那么 [在 Linux 上玩 ASCII 游戏][10] 怎么样?是的,你完全可以这么做。 + +如果你喜欢在终端做实验,你可能会喜欢这个工具。虽然我不知道 ASCII 转换后的图像能有什么好的实际用途。有什么想法吗? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/ascii-image-converter/ + +作者:[Abhishek Prakash][a] +选题:[lujun9972][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lujun9972 +[1]: https://www.computerhope.com/jargon/a/ascii.htm +[2]: https://itsfoss.com/display-linux-logo-in-ascii/ +[3]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/04/ubuntu-mate-focal-neofetch.png?resize=800%2C543&ssl=1 +[4]: https://github.com/TheZoraiz/ascii-image-converter +[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/abhishek-prakash-in-ascii.png?resize=800%2C445&ssl=1 +[6]: https://itsfoss.com/enable-snap-support-linux-mint/ +[7]: https://linuxhandbook.com/linux-directory-structure/ +[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/abhishek-prakash-ascii-converted.png?resize=800%2C437&ssl=1 +[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/abhishek-colored-ascii.png?resize=800%2C429&ssl=1 +[10]: https://itsfoss.com/best-ascii-games/ diff --git a/published/20210602 openSUSE Leap 15.3 Release Finally Closes the Gap With SUSE Linux Enterprise.md b/published/20210602 openSUSE Leap 15.3 Release Finally Closes the Gap With SUSE Linux Enterprise.md new file mode 100644 index 0000000000..001bc83dbd --- /dev/null +++ b/published/20210602 openSUSE Leap 15.3 Release Finally Closes the Gap With SUSE Linux Enterprise.md @@ -0,0 +1,78 @@ +[#]: subject: (openSUSE Leap 15.3 Release Finally Closes the Gap With SUSE Linux Enterprise) +[#]: via: (https://news.itsfoss.com/opensuse-leap-15-3-release/) +[#]: author: (Ankush Das https://news.itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: (Chao-zhi) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-13469-1.html) + +openSUSE Leap 15.3 版本缩小了与 SUSE Linux 企业版的差距 +====== + +![](https://img.linux.net.cn/data/attachment/album/202106/08/184921thd7vc8qvxbhzt53.jpg) + +> 随着 openSUSE 15.3 的发布,与 SUSE Linux 企业版的差距终于缩小了。对于开发团队来说,这应该是一个令人兴奋的用于测试的更新。 + +去年,在 [openSUSE Leap 15.2 发行版][1] 中他们希望通过使用与企业版相同二进制软件包来构建 openSUSE Leap,从而缩小 openSUSE Leap 与 SUSE Linux 企业版之间的差距。 + +这样一来的话,如果有人在使用 openSUSE 测试后切换到 SUSE Linux 企业版,部署的迁移过程都将大大简化。此外,openSUSE Leap 将是开发团队进行测试的一个轻松选择。 + +随着 openSUSE Leap 15.3 的发布,这个构想成为了现实。本文我将重点介绍这次发布的主要变化。 + +### openSUSE Leap 15.3: 最新变化 + +最重要的变化是,它使用与 SUSE Linux 企业版相同的二进制软件包构建。 + +并且,[发布公告][2] 中提到了这一巨大变化的好处: + +> 此版本对于迁移项目和用户验收测试非常有益,使用 openSUSE leap 15.3 进行运行调优和测试工作负载的大型开发团队将会获得最大的好处,因为这些工作负载可以轻松提升并转移到 SUSE Linux 企业版 15 SP3 上进行长期维护。 + +除了这个巨大的变化,还有其他几个重要的变化使它成为一个令人激动的版本。 + +![](https://i2.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/Leap_15.3_xfce.png?w=1529&ssl=1) + +对于 Xfce 4.16 桌面,有一些视觉变化,包括新的图标和调色板。设置管理器还增加了一个视觉刷新功能,提供了更清晰的外观。 + +如果有需要,KDE Plasma 5.18 也可以作为 LTS 选项与此版本一起提供。而且,GNOME 3.34 在某些应用程序的外观和感觉上有一些细微的变化。虽然 Cinnamon 没有大的变化,但是你会发现它有了一个新的模式。 + +在这个版本中,你将发现 gnu health 3.8 添加了一些新特性供你探索。 + +DNF 包管理器有一个更新计划,但是当前没有释放出来,你可以通过后续的维护更新获得它。 + +![](https://i0.wp.com/news.itsfoss.com/wp-content/uploads/2021/06/Leap_15.3_xfce4-terminal.png?w=1529&ssl=1) + +IBM Z 和 LinuxONE(s390x)是 Leap 15.3 中新支持的两种架构。 + +所包含的容器技术仍然保持不变,但是它们在本版本中收到了安全更新。当然,你需要去找 Linode 等托管解决方案提供的最新云镜像。 + +几个应用程序升级包括 Ononishare 2.2、Chromium 89 等。你可以在 [官方特性列表][4] 中找到更多详细信息。 + +### 下载 openSUSE Leap 15.3 + +需要注意的是,从今天起,Leap 15.2 将有六个月的寿命(EOL)。 + +在尝试升级到 Leap 15.3 之前,你必须确保运行的是 Leap 15.2。你可以在他们的 [官方发行说明][5] 中找到有关升级过程的更多信息。 + +从下面的按钮链接的官方下载页面获取最新的 ISO。 + +- [下载 openSUSE Leap 15.3][6] + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/opensuse-leap-15-3-release/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[Chao-zhi](https://github.com/Chao-zhi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://itsfoss.com/opensuse-leap-15-2-release/ +[2]: https://news.opensuse.org/2021/06/02/opensuse-leap-bridges-path-to-enterprise/ +[4]: https://en.opensuse.org/Features_15.3 +[5]: https://en.opensuse.org/Release_announcement_15.3 +[6]: https://get.opensuse.org/leap/ diff --git a/sources/news/20200820 Rejoice KDE Lovers- MX Linux Joins the KDE Bandwagon and Now You Can Download MX Linux KDE Edition.md b/sources/news/20200820 Rejoice KDE Lovers- MX Linux Joins the KDE Bandwagon and Now You Can Download MX Linux KDE Edition.md deleted file mode 100644 index d5fcf0d379..0000000000 --- a/sources/news/20200820 Rejoice KDE Lovers- MX Linux Joins the KDE Bandwagon and Now You Can Download MX Linux KDE Edition.md +++ /dev/null @@ -1,91 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Rejoice KDE Lovers! MX Linux Joins the KDE Bandwagon and Now You Can Download MX Linux KDE Edition) -[#]: via: (https://itsfoss.com/mx-linux-kde-edition/) -[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) - -Rejoice KDE Lovers! MX Linux Joins the KDE Bandwagon and Now You Can Download MX Linux KDE Edition -====== - -Debian-based [MX Linux][1] is already an impressive Linux distribution with [Xfce desktop environment][2] as the default. Even though it works good and is suitable to run with minimal hardware configuration, it still isn’t the best Linux distribution in terms of eye candy. - -That’s where KDE comes to the rescue. Of late, KDE Plasma has reduced a lot of weight and it uses fewer system resources without compromising on the modern looks. No wonder KDE Plasma is one of [the best desktop environments][3] out there. - -![][4] - -With [MX Linux 19.2][5], they began testing a KDE edition and have finally released their first KDE version. - -Also, the KDE edition comes with Advanced Hardware Support (AHS) enabled. Here’s what they have mentioned in their release notes: - -> MX-19.2 KDE is an **Advanced Hardware Support (AHS) **enabled **64-bit only** version of MX featuring the KDE/plasma desktop. Applications utilizing Qt library frameworks are given a preference for inclusion on the iso. - -As I mentioned it earlier, this is MX Linux’s first KDE edition ever, and they’ve also shed some light on it with the announcement as well: - -> This will be first officially supported MX/antiX family iso utilizing the KDE/plasma desktop since the halting of the predecessor MEPIS project in 2013. - -Personally, I enjoyed the experience of using MX Linux until I started using [Pop OS 20.04][6]. So, I’ll give you some key highlights of MX Linux 19.2 KDE edition along with my impressions of testing it. - -### MX Linux 19.2 KDE: Overview - -![][7] - -Out of the box, MX Linux looks cleaner and more attractive with KDE desktop on board. Unlike KDE Neon, it doesn’t feature the latest and greatest KDE stuff, but it looks to be doing the job intended. - -Of course, you will get the same options that you expect from a KDE-powered distro to customize the look and feel of your desktop. In addition to the obvious KDE perks, you will also get the usual MX tools, antiX-live-usb-system, and snapshot feature that comes baked in the Xfce edition. - -It’s a great thing to have the best of both worlds here, as stated in their announcement: - -> MX-19.2 KDE includes the usual MX tools, antiX-live-usb-system, and snapshot technology that our users have come to expect from our standard flagship Xfce releases. Adding KDE/plasma to the existing Xfce/MX-fluxbox desktops will provide for a wider range user needs and wants. - -I haven’t performed a great deal of tests but I did have some issues with extracting archives (it didn’t work the first try) and copy-pasting a file to a new location. Not sure if those are some known bugs — but I thought I should let you know here. - -![][8] - -Other than that, it features every useful tool you’d want to have and works great. With KDE on board, it actually feels more polished and smooth in my case. - -Along with KDE Plasma 5.14.5 on top of Debian 10 “buster”, it also comes with GIMP 2.10.12, MESA, Debian (AHS) 5.6 Kernel, Firefox browser, and few other goodies like VLC, Thunderbird, LibreOffice, and Clementine music player. - -You can also look for more stuff in the MX repositories. - -![][9] - -There are some known issues with the release like the System clock settings not being able adjustable via KDE settings. You can check their [announcement post][10] for more information or their [bug list][11] to make sure everything’s fine before trying it out on your production system. - -### Wrapping Up - -MX Linux 19.2 KDE edition is definitely more impressive than its Xfce offering in my opinion. It would take a while to iron out the bugs for this first KDE release — but it’s not a bad start. - -Speaking of KDE, I recently tested out KDE Neon, the official KDE distribution. I shared my experience in this video. I’ll try to do a video on MX Linux KDE flavor as well. - -[Subscribe to our YouTube channel for more Linux videos][12] - -Have you tried it yet? Let me know your thoughts in the comments below! - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/mx-linux-kde-edition/ - -作者:[Ankush Das][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/ankush/ -[b]: https://github.com/lujun9972 -[1]: https://mxlinux.org/ -[2]: https://www.xfce.org/ -[3]: https://itsfoss.com/best-linux-desktop-environments/ -[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/08/mx-linux-kde-edition.jpg?resize=800%2C450&ssl=1 -[5]: https://mxlinux.org/blog/mx-19-2-now-available/ -[6]: https://itsfoss.com/pop-os-20-04-review/ -[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/08/mx-linux-19-2-kde.jpg?resize=800%2C452&ssl=1 -[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/08/mx-linux-19-2-kde-filemanager.jpg?resize=800%2C452&ssl=1 -[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/08/mx-linux-19-2-kde-info.jpg?resize=800%2C452&ssl=1 -[10]: https://mxlinux.org/blog/mx-19-2-kde-now-available/ -[11]: https://bugs.mxlinux.org/ -[12]: https://www.youtube.com/c/itsfoss?sub_confirmation=1 diff --git a/sources/news/20200822 Cisco open-source code boosts performance of Kubernetes apps over SD-WAN.md b/sources/news/20200822 Cisco open-source code boosts performance of Kubernetes apps over SD-WAN.md deleted file mode 100644 index 72ce014ff4..0000000000 --- a/sources/news/20200822 Cisco open-source code boosts performance of Kubernetes apps over SD-WAN.md +++ /dev/null @@ -1,66 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Cisco open-source code boosts performance of Kubernetes apps over SD-WAN) -[#]: via: (https://www.networkworld.com/article/3572310/cisco-open-source-code-boosts-performance-of-kubernetes-apps-over-sd-wan.html) -[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/) - -Cisco open-source code boosts performance of Kubernetes apps over SD-WAN -====== -Cisco's Cloud-Native SD-WAN project marries SD-WANs to Kubernetes applications to cut down on the manual work needed to optimize latency and packet loss. -Thinkstock - -Cisco has introduced an open-source project that it says could go a long way toward reducing the manual work involved in optimizing performance of Kubernetes-applications across [SD-WANs][1]. - -Cisco said it launched the Cloud-Native SD-WAN (CN-WAN) project to show how Kubernetes applications can be automatically mapped to SD-WAN with the result that the applications perform better over the WAN. - -**More about SD-WAN**: [How to buy SD-WAN technology: Key questions to consider when selecting a supplier][2] • [How to pick an off-site data-backup method][3] •  [SD-Branch: What it is and why you’ll need it][4] • [What are the options for security SD-WAN?][5] - -“In many cases, enterprises deploy an SD-WAN to connect a Kubernetes cluster with users or workloads that consume cloud-native applications. In a typical enterprise, NetOps teams leverage their network expertise to program SD-WAN policies to optimize general connectivity to the Kubernetes hosted applications, with the goal to reduce latency, reduce packet loss, etc.” wrote John Apostolopoulos, vice president and CTO of Cisco’s intent-based networking group in a group [blog][6]. - -“The enterprise usually also has DevOps teams that maintain and optimize the Kubernetes infrastructure. However, despite the efforts of NetOps and DevOps teams, today Kubernetes and SD-WAN operate mostly like ships in the night, often unaware of each other. Integration between SD-WAN and Kubernetes typically involves time-consuming manual coordination between the two teams.” - -Current SD-WAN offering often have APIs that let customers programmatically influence how their traffic is handled over the WAN. This enables interesting and valuable opportunities for automation and application optimization, Apostolopoulos stated.  “We believe there is an opportunity to pair the declarative nature of Kubernetes with the programmable nature of modern SD-WAN solutions,”  he stated. - -Enter CN-WAN, which defines a set of components that can be used to integrate an SD-WAN package, such as Cisco Viptela SD-WAN, with Kubernetes to enable DevOps teams to express the WAN needs of the microservices they deploy in a Kubernetes cluster, while simultaneously letting NetOps automatically render the microservices needs to optimize the application performance over the WAN, Apostolopoulos stated. - -Apostolopoulos wrote that CN-WAN is composed of a Kubernetes Operator, a Reader, and an Adaptor. It works like this: The CN-WAN Operator runs in the Kubernetes cluster, actively monitoring the deployed services. DevOps teams can use standard Kubernetes annotations on the services to define WAN-specific metadata, such as the traffic profile of the application. The CN-WAN Operator then automatically registers the service along with the metadata in a service registry. In a demo at KubeCon EU this week Cisco used Google Service Directory as the service registry. - -Earlier this year [Cisco and Google][7] deepened their relationship with a turnkey package that lets customers mesh SD-WAN connectivity with applications running in a private [data center][8], Google Cloud or another cloud or SaaS application. That jointly developed platform, called Cisco SD-WAN Cloud Hub with Google Cloud, combines Cisco’s SD-WAN policy-, telemetry- and security-setting capabilities with Google's software-defined backbone to ensure that application service-level agreement, security and compliance policies are extended across the network. - -Meanwhile, on the SD-WAN side, the CN-WAN Reader connects to the service registry to learn about how Kubernetes is exposing the services and the associated WAN metadata extracted by the CN-WAN operator, Cisco stated. When new or updated services or metadata are detected, the CN-WAN Reader sends a message towards the CN-WAN Adaptor so SD-WAN policies can be updated. - -Finally, the CN-WAN Adaptor, maps the service-associated metadata into the detailed SD-WAN policies programmed by NetOps in the SD-WAN controller. The SD-WAN controller automatically renders the SD-WAN policies, specified by the NetOps for each metadata type, into specific SD-WAN data-plane optimizations for the service, Cisco stated.   - -“The SD-WAN may support multiple types of access at both sender and receiver (e.g., wired Internet, MPLS, wireless 4G or 5G), as well as multiple service options and prioritizations per access network, and of course multiple paths between source and destination,” Apostolopoulos stated. - -The code for the CN-WAN project is available as open-source in [GitHub][9]. - -Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3572310/cisco-open-source-code-boosts-performance-of-kubernetes-apps-over-sd-wan.html - -作者:[Michael Cooney][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Michael-Cooney/ -[b]: https://github.com/lujun9972 -[1]: https://www.networkworld.com/article/3031279/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html -[2]: https://www.networkworld.com/article/3323407/sd-wan/how-to-buy-sd-wan-technology-key-questions-to-consider-when-selecting-a-supplier.html -[3]: https://www.networkworld.com/article/3328488/backup-systems-and-services/how-to-pick-an-off-site-data-backup-method.html -[4]: https://www.networkworld.com/article/3250664/lan-wan/sd-branch-what-it-is-and-why-youll-need-it.html -[5]: https://www.networkworld.com/article/3285728/sd-wan/what-are-the-options-for-securing-sd-wan.html -[6]: https://blogs.cisco.com/networking/introducing-the-cloud-native-sd-wan-project -[7]: https://www.networkworld.com/article/3539252/cisco-integrates-sd-wan-connectivity-with-google-cloud.html -[8]: https://www.networkworld.com/article/3223692/what-is-a-data-centerhow-its-changed-and-what-you-need-to-know.html -[9]: https://github.com/CloudNativeSDWAN/cnwan-docs -[10]: https://www.facebook.com/NetworkWorld/ -[11]: https://www.linkedin.com/company/network-world diff --git a/sources/news/20201014 KDE Plasma 5.20 is Here With Exciting Improvements.md b/sources/news/20201014 KDE Plasma 5.20 is Here With Exciting Improvements.md deleted file mode 100644 index 2572d75bba..0000000000 --- a/sources/news/20201014 KDE Plasma 5.20 is Here With Exciting Improvements.md +++ /dev/null @@ -1,122 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (KDE Plasma 5.20 is Here With Exciting Improvements) -[#]: via: (https://itsfoss.com/kde-plasma-5-20/) -[#]: author: (Ankush Das https://itsfoss.com/author/ankush/) - -KDE Plasma 5.20 is Here With Exciting Improvements -====== - -KDE Plasma 5.20 is finally here and there’s a lot of things to be excited about, including the new wallpaper ‘**Shell’** by Lucas Andrade. - -It is worth noting that is not an LTS release unlike [KDE Plasma 5.18][1] and will be maintained for the next 4 months or so. So, if you want the latest and greatest, you can surely go ahead and give it a try. - -In this article, I shall mention the key highlights of KDE Plasma 5.20 from [my experience with it on KDE Neon][2] (Testing Edition). - -![][3] - -### Plasma 5.20 Features - -If you like to see things in action, we made a feature overview video for you. - -[Subscribe to our YouTube channel for more Linux videos][4] - -#### Icon-only Taskbar - -![][5] - -You must be already comfortable with a taskbar that mentions the title of the window along the icon. However, that takes a lot of space in the taskbar, which looks bad when you want to have a clean look with multiple applications/windows opened. - -Not just limited to that, if you launch several windows of the same application, it will group them together and let you cycle through it from a single icon on the task bar. - -So, with this update, you get an icon-only taskbar by default which makes it look a lot cleaner and you can have more things in the taskbar at a glance. - -#### Digital Clock Applet with Date - -![][6] - -If you’ve used any KDE-powered distro, you must have noticed that the digital clock applet (in the bottom-right corner) displays the time but not the date by default. - -It’s always a good choice to have the date and time as well (at least I prefer that). So, with KDE Plasma 5.20, the applet will have both time and date. - -#### Get Notified When your System almost Runs out of Space - -I know this is not a big addition, but a necessary one. No matter whether your home directory is on a different partition, you will be notified when you’re about to run out of space. - -#### Set the Charge Limit Below 100% - -You are in for a treat if you are a laptop user. To help you preserve the battery health, you can now set a charge limit below 100%. I couldn’t show it to you because I use a desktop. - -#### Workspace Improvements - -Working with the workspaces on KDE desktop was already an impressive experience, now with the latest update, several tweaks have been made to take the user experience up a notch. - -To start with, the system tray has been overhauled with a grid-like layout replacing the list view. - -The default shortcut has been re-assigned with Meta+drag instead of Alt+drag to move/re-size windows to avoid conflicts with some other productivity apps with Alt+drag keybind support. You can also use the key binds like Meta + up/left/down arrow to corner-tile windows. - -![][7] - -It is also easier to list all the disks using the old “**Device Notifier**” applet, which has been renamed to “**Disks & Devices**“. - -If that wasn’t enough, you will also find improvements to [KRunner][8], which is the essential application launcher or search utility for users. It will now remember the search text history and you can also have it centered on the screen instead of having it on top of the screen. - -#### System Settings Improvements - -The look and feel of the system setting is the same but it is more useful now. You will notice a new “**Highlight changed settings**” option which will show you the recent/modified changes when compared to the default values. - -So, in that way, you can monitor any changes that you did accidentally or if someone else did it. - -![][9] - -In addition to that, you also get to utilize S.M.A.R.T monitoring and disk failure notifications. - -#### Wayland Support Improvements - -If you prefer to use a Wayland session, you will be happy to know that it now supports [Klipper][10] and you can also middle-click to paste (on KDE apps only for the time being). - -The much-needed screencasting support has also been added. - -#### Other Improvements - -Of course, you will notice some subtle visual improvements or adjustments for the look and feel. You may notice a smooth transition effect when changing the brightness. Similarly, when changing the brightness or volume, the on-screen display that pops up is now less obtrusive - -Options like controlling the scroll speed of mouse/touchpad have been added to give you finer controls. - -You can find the detailed list of changes in its [official changelog][11], if you’re curious. - -### Wrapping Up - -The changes are definitely impressive and should make the KDE experience better than ever before. - -If you’re running KDE Neon, you should get the update soon. But, if you are on Kubuntu, you will have to try the 20.10 ISO to get your hands on Plasma 5.20. - -What do you like the most among the list of changes? Have you tried it yet? Let me know your thoughts in the comments below. - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/kde-plasma-5-20/ - -作者:[Ankush Das][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/ankush/ -[b]: https://github.com/lujun9972 -[1]: https://itsfoss.com/kde-plasma-5-18-release/ -[2]: https://itsfoss.com/kde-neon-review/ -[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/kde-plasma-5-20-feat.png?resize=800%2C394&ssl=1 -[4]: https://www.youtube.com/c/itsfoss?sub_confirmation=1 -[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/kde-plasma-5-20-taskbar.jpg?resize=472%2C290&ssl=1 -[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/kde-plasma-5-20-clock.jpg?resize=372%2C224&ssl=1 -[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/kde-plasma-5-20-notify.jpg?resize=800%2C692&ssl=1 -[8]: https://docs.kde.org/trunk5/en/kde-workspace/plasma-desktop/krunner.html -[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/10/plasma-disks-smart.png?resize=800%2C539&ssl=1 -[10]: https://userbase.kde.org/Klipper -[11]: https://kde.org/announcements/plasma-5.20.0 diff --git a/sources/news/20210601 Firefox 89 is Here with a Revamped Design and Improved Features.md b/sources/news/20210601 Firefox 89 is Here with a Revamped Design and Improved Features.md new file mode 100644 index 0000000000..ce4020a1cf --- /dev/null +++ b/sources/news/20210601 Firefox 89 is Here with a Revamped Design and Improved Features.md @@ -0,0 +1,112 @@ +[#]: subject: (Firefox 89 is Here with a Revamped Design and Improved Features) +[#]: via: (https://news.itsfoss.com/firefox-89-release/) +[#]: author: (Jacob Crume https://news.itsfoss.com/author/jacob/) +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) + +Firefox 89 is Here with a Revamped Design and Improved Features +====== + +Firefox has long been the default web browser for many popular distributions such as Ubuntu and Manjaro. It is well known for its privacy features, as well as being completely open source. + +It has had many notable UI redesigns over the years, of which the latest was the Photon design. Although this design did improve the UI, Google Chrome has remained the browser king. + +In this release, Mozilla seems to be targeting Chrome with their new UI and new privacy features. + +### What’s New? + +Although the feature list is not particularly long, it will make a significant impact on the future of Firefox, I believe. The main new features are as follows: + + * Brand-new Proton UI + * Streamlined menu + * Calmer visuals + * Total Cookie Protection in private browsing mode + + + +In this article, we will be diving into what these are, and what impact they will have on Firefox’s future. + +#### New Proton UI + +![][1] + +By far the biggest change, this UI redesign is a huge step in the right direction. + +We already have a separate article dedicated to [the new Proton user interface][2], if you are curious to know what exactly are the changes involved in the redesign. + +![][3] + +As key highlights, the redesign involves: + + * A redesigned toolbar + * A new hamburger menu + * A redesigned address bar + * New animations while moving tabs + + + +The result is a much more modern-looking browsing experience. While some people may not like the larger UI elements and rounded corners, my experience with the beta has been incredibly positive. + +![][3] + +Overall, the interface is clean, with calmer visuals, and aims to provide you fewer distractions. + +This is the key highlight of Firefox 89 release – so you should give it a spin before you start to love it or hate it! + +#### Privacy Improvements + +First introduced in Firefox 86, Total Cookie Protection is Firefox’s way of dealing with the many security concerns associated with cookies. + +It works by putting each website’s cookies into a separate virtual cookie jar. These cookie jars are only able to be opened by the website that created them, making cross-website tracking much harder. + +Previously, this awesome feature was only available in Firefox’s ETP Strict mode. With Firefox 89, this awesome feature becomes more prominent, now becoming part of Firefox’s private browsing mode. + +This, along with the presence of [SmartBlock feature][4] (introduced in Firefox 87) should be an exciting combination. + +For more information on Total Cookie Protection, have a look at the initial release in our [coverage of Firefox 86][5]. + +### Other Improvements + +The release also includes some bug fixes and security updates. You can explore more about what has changed for other platforms like macOS in their [official release note][6]. + +### Wrapping Up + +It is praiseworthy to see Mozilla’s continued support for Firefox to protect user privacy, and this really shines through with this release. + +Between the hugely improved UI, and the new privacy features, Firefox 89 is a great release. As a privacy-oriented individual, I am really excited about Total Cookie Prevention by default in private browsing mode. + +[Download Mozilla Firefox 89][7] + +On the other hand, I also think Mozilla should stop making constant design overhauls and make refinements to a particular design over the time. While it is important to improve user experience, UI overhauls often break the workflow, which is not a good thing. + +I hope this is the last re-design Firefox implements and shifts its focus on performance, convenience, and gaining back the lost market share to Google Chrome and other chrome-based web browsers. + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/firefox-89-release/ + +作者:[Jacob Crume][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/jacob/ +[b]: https://github.com/lujun9972 +[1]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ5NyIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[2]: https://news.itsfoss.com/firefox-proton-redesign/ +[3]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzOSIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[4]: https://blog.mozilla.org/security/2021/03/23/introducing-smartblock/ +[5]: https://news.itsfoss.com/firefox-86-release/ +[6]: https://www.mozilla.org/en-US/firefox/89.0/releasenotes/ +[7]: https://www.mozilla.org/firefox/download/ diff --git a/sources/news/20210602 OBS Studio 27 Adds Wayland Support, Undo-Redo, and Browser Docks.md b/sources/news/20210602 OBS Studio 27 Adds Wayland Support, Undo-Redo, and Browser Docks.md new file mode 100644 index 0000000000..b42e71cb8b --- /dev/null +++ b/sources/news/20210602 OBS Studio 27 Adds Wayland Support, Undo-Redo, and Browser Docks.md @@ -0,0 +1,99 @@ +[#]: subject: (OBS Studio 27 Adds Wayland Support, Undo/Redo, and Browser Docks) +[#]: via: (https://news.itsfoss.com/obs-studio-27-release/) +[#]: author: (Ankush Das https://news.itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) + +OBS Studio 27 Adds Wayland Support, Undo/Redo, and Browser Docks +====== + +Open Broadcaster Software is a free and open-source streaming/recording solution available for multiple platforms. + +Not long ago, we [spotted native Wayland support coming to OBS Studio][1]. + +Now, with the release of OBS Studio 27, it is finally a reality. Not just limited to wayland support, but there are some significant feature additions. + +Here, I shall highlight the key changes introduced with OBS Studio 27. + +### OBS Studio 27: What’s New? + +![][2] + +The key new feature addition with this release is **Undo/Redo**. + +While it sounds like a basic feature that should have existed from the start — but they needed to have a proper implementation, for which they waited. + +The [release announcement][3] mentions a note about it back in 2018: + +> _This is on the agenda. Fortunately, it’s not a “difficult” feature to write, it’s actually pretty simple, but the implementation is what’s delicate, and requires a fair amount of experience to get right._ + +Now that it is here, you can work stress-free without needing to constantly tweak when you accidentally modify something. + +Of course, there’s a limit to what the Undo function can do, and it looks like it should be able to revert **5000 actions** in a particular session. It is worth noting that if you restart the app, you can no longer undo the last actions. + +![][4] + +More about it in the announcement post: + +> Undo is built to track actions that affect the preview. This means every potential modification to scenes, sources, groups, filters, stingers, and scripts. These have the potential to affect the feed in real-time, without a chance to “Apply” changes, and can sometimes result in complex changes that are harder to quickly revert or recreate. The Undo stack is capable of tracking the last 5,000 actions of the session, and is cleared when switching scene collections or restarting the app. + +The next important addition is the **browser dock**, which was already present for Windows users but introduced for macOS and Linux with this release. + +The dock will let you quickly access other sites or services while using the OBS app such as chats, Twitch account linking, and more. + +### Other Improvements + +The release also addresses the display capture support on Laptops with different GPUs, which should provide a good experience for Laptop users. + +There’s also a new missing files dialogue which will clearly list what’s missing to spot the sources that you need to add. + +For more information on the changes, you may refer to the [official announcement post][3]. + +### Download OBS Studio 27 + +You can directly install OBS Studio using the Ubuntu PPA but the Wayland support is available only for Ubuntu 21.04 and above through this method. + +In case you want to do that, here’s what you need to type in the terminal (ensure you have [ffmpeg][5] installed): + +``` +sudo add-apt-repository ppa:obsproject/obs-studio +sudo apt install obs-studio +``` + +So, it is best to use the [Flatpak package][6] to get started. You can also take the help of our [Flatpak guide][7] if you’re using it for the first time. + +You can find other download options in the official download page or its [GitHub page][8]. + +[Download OBS Studio 27][9] + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/obs-studio-27-release/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://news.itsfoss.com/obs-studio-wayland/ +[2]: https://i0.wp.com/i.ytimg.com/vi/LUkMxYNIyj0/hqdefault.jpg?w=780&ssl=1 +[3]: https://obsproject.com/blog/obs-studio-27-released +[4]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQyMyIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[5]: https://itsfoss.com/ffmpeg/ +[6]: https://flathub.org/apps/details/com.obsproject.Studio +[7]: https://itsfoss.com/flatpak-guide/ +[8]: https://github.com/obsproject/obs-studio +[9]: https://obsproject.com/download diff --git a/sources/news/20210603 You Can Now Try the New COSMIC Desktop Environment with Pop-_OS 21.04 Beta.md b/sources/news/20210603 You Can Now Try the New COSMIC Desktop Environment with Pop-_OS 21.04 Beta.md new file mode 100644 index 0000000000..6a08460085 --- /dev/null +++ b/sources/news/20210603 You Can Now Try the New COSMIC Desktop Environment with Pop-_OS 21.04 Beta.md @@ -0,0 +1,94 @@ +[#]: subject: (You Can Now Try the New COSMIC Desktop Environment with Pop!_OS 21.04 Beta) +[#]: via: (https://news.itsfoss.com/pop-os-21-04-beta-release/) +[#]: author: (Ankush Das https://news.itsfoss.com/author/ankush/) +[#]: collector: (lujun9972) +[#]: translator: ( ) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) + +You Can Now Try the New COSMIC Desktop Environment with Pop!_OS 21.04 Beta +====== + +Pop!_OS 21.04 is one of the [most anticipated distros][1] of this year and the public beta has finally arrived. + +While we do not have an official list of changes that follows with this release, but it comes packed with its brand new COSMIC Desktop Environment. + +Let me highlight a few things about the desktop, how you can download it, and my initial thoughts on it. + +### COSMIC Desktop Environment on Pop!_OS 21.04 + +![][2] + +With Pop!_OS 21.04 beta, we have more information on it than we had when [System76 first revealed the COSMIC Desktop Environment][3]. + +The horizontal dock sure looks pretty. By default, the dock extends to the edges of the screen, but you can change that as well. Here’s how it looks without the dock extending (macOS-like layout?) + +![][4] + +The icons look colorful and attractive. You will find options to tweak the dock as well (to hide it, change the position, etc.) + +There are some options like adding a launcher icon or workspace icon in the dock itself that are in the to-do list and should be added with the updates to beta version. In addition to that, you can also expect the hot corner feature to arrive soon enough. + +![][5] + +### Other Improvements + +The overall color theme looks to be the same — so there are subtle visual changes, no big makeovers. + +Coming from Pop!_OS 20.04, it will surely feel quite unfamiliar, and you will need to take some time to adjust the workflow. + +However, thanks to the extension manager, you can get back the old workspace layout by disabling the Pop COSMIC extension. Also, you get a nice multi-monitor add-on that offers many options for users with multi-monitors. + +![][6] + +The desktop environment seems to be using GNOME 3.38 based applications. So, it is safe to assume that the COSMIC Desktop Environment is based on the same as well. + +It is important to note that the LTS release (i.e. Pop!_OS 20.04) will not be getting an update to include COMIC Desktop Environment. + +So, you will have to opt for Pop!_OS 21.04 stable version when it releases or just wait for the next LTS release that follows. + +### Pop!_OS 21.04 Without GNOME 40 Is Exciting + +As I expected, even without the direct implementation of GNOME 40, Pop!_OS 21.04 is an exciting release to look out for. + +The COSMIC Desktop Environment may not be a unique or breathtaking experience – but it manages to add essential options out of the box for a great desktop experience. + +Also, considering that multi-monitor users do not usually get an outstanding set of options on other Linux distributions by default, including an add-on for that with COSMIC desktop is a good idea. + +### Try Pop!_OS 21.04 Beta + +You can download the Pop!_OS 21.04 beta ISO from their [GitHub page][7]. You can find both the images for NVIDIA, and AMD/Intel as per your system configuration. + +Do note that this is a beta release and should be only installed for testing purposes. It is prone to bugs, and you may have to re-install it. + +The stable release should come out later this month, I will make sure to review it and also possibly make a video, if that helps. + +[Download Pop!_OS 21.04 Beta][7] + +#### Big Tech Websites Get Millions in Revenue, It's FOSS Got You! + +If you like what we do here at It's FOSS, please consider making a donation to support our independent publication. Your support will help us keep publishing content focusing on desktop Linux and open source software. + +I'm not interested + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/pop-os-21-04-beta-release/ + +作者:[Ankush Das][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lujun9972 +[1]: https://news.itsfoss.com/linux-distros-for-2021/ +[2]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQzOCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[3]: https://news.itsfoss.com/cosmic-desktop-pop-os/ +[4]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjQ0MCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[5]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjUwMyIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[6]: data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjMzNCIgd2lkdGg9Ijc4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiLz4= +[7]: https://github.com/pop-os/beta diff --git a/sources/talk/20181218 The Rise and Demise of RSS.md b/sources/talk/20181218 The Rise and Demise of RSS.md index 2dfea2074c..e260070c5c 100644 --- a/sources/talk/20181218 The Rise and Demise of RSS.md +++ b/sources/talk/20181218 The Rise and Demise of RSS.md @@ -1,5 +1,5 @@ [#]: collector: (lujun9972) -[#]: translator: (beamrolling) +[#]: translator: ( ) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) diff --git a/sources/talk/20190111 What metrics matter- A guide for open source projects.md b/sources/talk/20190111 What metrics matter- A guide for open source projects.md deleted file mode 100644 index 1438450a99..0000000000 --- a/sources/talk/20190111 What metrics matter- A guide for open source projects.md +++ /dev/null @@ -1,95 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (What metrics matter: A guide for open source projects) -[#]: via: (https://opensource.com/article/19/1/metrics-guide-open-source-projects) -[#]: author: (Gordon Haff https://opensource.com/users/ghaff) - -What metrics matter: A guide for open source projects -====== -5 principles for deciding what to measure. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/metrics_data_dashboard_system_computer_analytics.png?itok=oxAeIEI-) - -"Without data, you're just a person with an opinion." - -Those are the words of W. Edwards Deming, the champion of statistical process control, who was credited as one of the inspirations for what became known as the Japanese post-war economic miracle of 1950 to 1960. Ironically, Japanese manufacturers like Toyota were far more receptive to Deming’s ideas than General Motors and Ford were. - -Community management is certainly an art. It’s about mentoring. It’s about having difficult conversations with people who are hurting the community. It’s about negotiation and compromise. It’s about interacting with other communities. It’s about making connections. In the words of Red Hat’s Diane Mueller, it’s about "nurturing conversations." - -However, it’s also about metrics and data. - -Some have much in common with software development projects more broadly. Others are more specific to the management of the community itself. I think of deciding what to measure and how as adhering to five principles. - -### 1. Recognize that behaviors aren't independent of the measurements you choose to highlight. - -In 2008, Daniel Ariely published Predictably Irrational, one of a number of books written around that time that introduced behavioral psychology and behavioral economics to the general public. One memorable quote from that book is the following: “Human beings adjust behavior based on the metrics they’re held against. Anything you measure will impel a person to optimize his score on that metric. What you measure is what you’ll get. Period.” - -This shouldn’t be surprising. It’s a finding that’s been repeatedly confirmed by research. It should also be familiar to just about anyone with business experience. It’s certainly not news to anyone in sales management, for example. Base sales reps’ (or their managers’) bonuses solely on revenue, and they’ll try to discount whatever it takes to maximize revenue, even if it puts margin in the toilet. Conversely, want the sales force to push a new product line—which will probably take extra effort—but skip the spiffs? Probably not happening. - -And lest you think I’m unfairly picking on sales, this behavior is pervasive, all the way up to the CEO, as Ariely describes in a 2010 Harvard Business Review article: “CEOs care about stock value because that’s how we measure them. If we want to change what they care about, we should change what we measure.” - -Developers and other community members are not immune. - -### 2. You need to choose relevant metrics. - -There’s a lot of folk wisdom floating around about what’s relevant and important that’s not necessarily true. My colleague [Dave Neary offers an example from baseball][1]: “In the late '90s, the key measurements that were used to measure batter skill were RBI (runs batted in) and batting average (how often a player got on base with a hit, divided by the number of at-bats). The Oakland A’s were the first major league team to recruit based on a different measurement of player performance: on-base percentage. This measures how often they get to first base, regardless of how it happens.” - -Indeed, the whole revolution of sabermetrics in baseball and elsewhere, which was popularized in Michael Lewis’ Moneyball, often gets talked about in terms of introducing data in a field that historically was more about gut feel and personal experience. But it was also about taking a game that had actually always been fairly numbers-obsessed and coming up with new metrics based on mostly existing data to better measure player value. (The data revolution going on in sports today is more about collecting much more data through video and other means than was previously available.) - -### 3. Quantity may not lead to quality. - -As a corollary, collecting lots of tangential but easy-to-capture data isn’t better than just selecting a few measurements you’ve determined are genuinely useful. In a world where online behavior can be tracked with great granularity and displayed in colorful dashboards, it’s tempting to be distracted by sheer data volume, even when it doesn’t deliver any great insight into community health and trajectory. - -This may seem like an obvious point: Why measure something that isn’t relevant? In practice, metrics often get chosen because they’re easy to measure, not because they’re particularly useful. They tend to be more about inputs than outputs: The number of developers. The number of forum posts. The number of commits. Collectively, measures like this often get called vanity metrics. They’re ubiquitous, but most people involved with community management don’t think much of them. - -Number of downloads may be the worst of the bunch. It’s true that, at some level, they’re an indication of interest in a project. That’s something. But it’s sufficiently distant from actively using the project, much less engaging with the project deeply, that it’s hard to view downloads as a very useful number. - -Is there any harm in these vanity metrics? Yes, to the degree that you start thinking that they’re something to base action on. Probably more seriously, stakeholders like company management or industry observers can come to see them as meaningful indicators of project health. - -### 4. Understand what measurements really mean and how they relate to each other. - -Neary makes this point to caution against myopia. “In one project I worked on,” he says, ”some people were concerned about a recent spike in the number of bug reports coming in because it seemed like the project must have serious quality issues to resolve. However, when we looked at the numbers, it turned out that many of the bugs were coming in because a large company had recently started using the project. The increase in bug reports was actually a proxy for a big influx of new users, which was a good thing.” - -In practice, you often have to measure through proxies. This isn’t an inherent problem, but the further you get between what you want to measure and what you’re actually measuring, the harder it is to connect the dots. It’s fine to track progress in closing bugs, writing code, and adding new features. However, those don’t necessarily correlate with how happy users are or whether the project is doing a good job of working towards its long-term objectives, whatever those may be. - -### 5. Different measurements serve different purposes. - -Some measurements may be non-obvious but useful for tracking the success of a project and community relative to internal goals. Others may be better suited for a press release or other external consumption. For example, as a community manager, you may really care about the number of meetups, mentoring sessions, and virtual briefings your community has held over the past three months. But it’s the number of contributions and contributors that are more likely to grab the headlines. You probably care about those too. But maybe not as much, depending upon your current priorities. - -Still, other measurements may relate to the goals of any sponsoring organizations. The measurements most relevant for projects tied to commercial products are likely to be different from pure community efforts. - -Because communities differ and goals differ, it’s not possible to simply compile a metrics checklist, but here are some ideas to think about: - -Consider qualitative metrics in addition to quantitative ones. Conducting surveys and other studies can be time-consuming, especially if they’re rigorous enough to yield better-than-anecdotal data. It also requires rigor to construct studies so that they can be used to track changes over time. In other words, it’s a lot easier to measure quantitative contributor activity than it is to suss out if the community members are happier about their participation today than they were a year ago. However, given the importance of culture to the health of a community, measuring it in a systematic way can be a worthwhile exercise. - -Breadth of community, including how many are unaffiliated with commercial entities, is important for many projects. The greater the breadth, the greater the potential leverage of the open source development process. It can also be instructive to see how companies and individuals are contributing. Projects can be explicitly designed to better accommodate casual contributors. - -Are new contributors able to have an impact, or are they ignored? How long does it take for code contributions to get committed? How long does it take for a reported bug to be fixed or otherwise responded to? If they asked a question in a forum, did anyone answer them? In other words, are you letting contributors contribute? - -Advancement within the project is also an important metric. [Mikeal Rogers of the Node.js community][2] explains: “The shift that we made was to create a support system and an education system to take a user and turn them into a contributor, first at a very low level, and educate them to bring them into the committer pool and eventually into the maintainer pool. The end result of this is that we have a wide range of skill sets. Rather than trying to attract phenomenal developers, we’re creating new phenomenal developers.” - -Whatever metrics you choose, don’t forget why you made them metrics in the first place. I find a helpful question to ask is: “What am I going to do with this number?” If the answer is to just put it in a report or in a press release, that’s not a great answer. Metrics should be measurements that tell you either that you’re on the right path or that you need to take specific actions to course-correct. - -For this reason, Stormy Peters, who handles community leads at Red Hat, [argues for keeping it simple][3]. She writes, “It’s much better to have one or two key metrics than to worry about all the possible metrics. You can capture all the possible metrics, but as a project, you should focus on moving one. It’s also better to have a simple metric that correlates directly to something in the real world than a metric that is a complicated formula or ration between multiple things. As project members make decisions, you want them to be able to intuitively feel whether or not it will affect the project’s key metric in the right direction.” - -The article is adapted from [How Open Source Ate Software][4] by Gordon Haff (Apress 2018). - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/1/metrics-guide-open-source-projects - -作者:[Gordon Haff][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ghaff -[b]: https://github.com/lujun9972 -[1]: https://community.redhat.com/blog/2014/07/when-metrics-go-wrong/ -[2]: https://opensource.com/article/17/3/nodejs-community-casual-contributors -[3]: https://medium.com/open-source-communities/3-important-things-to-consider-when-measuring-your-success-50e21ad82858 -[4]: https://www.apress.com/us/book/9781484238936 diff --git a/sources/talk/20190115 What happens when a veteran teacher goes to an open source conference.md b/sources/talk/20190115 What happens when a veteran teacher goes to an open source conference.md deleted file mode 100644 index e16505c36c..0000000000 --- a/sources/talk/20190115 What happens when a veteran teacher goes to an open source conference.md +++ /dev/null @@ -1,68 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (What happens when a veteran teacher goes to an open source conference) -[#]: via: (https://opensource.com/open-organization/19/1/educator-at-open-source-conference) -[#]: author: (Ben Owens https://opensource.com/users/engineerteacher) - -What happens when a veteran teacher goes to an open source conference -====== -Sometimes feeling like a fish out of water is precisely what educators need. - -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolseriesgen_rh_032x_0.png?itok=cApG9aB4) - -"Change is going to be continual, and today is the slowest day society will ever move."—[Tony Fadell][1] - -If ever there was an experience that brought the above quotation home for me, it was my experience at the [All Things Open conference][2] in Raleigh, NC last October. Thousands of people from all over the world attended the conference, and many (if not most), worked as open source coders and developers. As one of the relatively few educators in attendance, I saw and heard things that were completely foreign to me—terms like as Istio, Stack Overflow, Ubuntu, Sidecar, HyperLedger, and Kubernetes tossed around for days. - -I felt like a fish out of water. But in the end, that was the perfect dose of reality I needed to truly understand how open principles can reshape our approach to education. - -### Not-so-strange attractors - -All Things Open attracted me to Raleigh for two reasons, both of which have to do with how our schools must do a better job of creating environments that truly prepare students for a rapidly changing world. - -The first is my belief that schools should embrace the ideals of the [open source way][3]. The second is that educators have to periodically force themselves out of their relatively isolated worlds of "doing school" in order to get a glimpse of what the world is actually doing. - -When I was an engineer for 20 years, I developed a deep sense of the power of an open exchange of ideas, of collaboration, and of the need for rapid prototyping of innovations. Although we didn't call these ideas "open source" at the time, my colleagues and I constantly worked together to identify and solve problems using tools such as [Design Thinking][4] so that our businesses remained competitive and met market demands. When I became a science and math teacher at a small [public school][5] in rural Appalachia, my goal was to adapt these ideas to my classrooms and to the school at large as a way to blur the lines between a traditional school environment and what routinely happens in the "real world." - -Through several years of hard work and many iterations, my fellow teachers and I were eventually able to develop a comprehensive, school-wide project-based learning model, where students worked in collaborative teams on projects that [made real connections][6] between required curriculum and community-based applications. Doing so gave these students the ability to develop skills they can use for a lifetime, rather than just on the next test—skills such as problem solving, critical thinking, oral and written communication, perseverance through setbacks, and adapting to changing conditions, as well as how to have routine conversations with adult mentors form the community. Only after reading [The Open Organization][7] did I realize that what we had been doing essentially embodied what Jim Whitehurst had described. In our case, of course, we applied open principles to an educational context (that model, called Open Way Learning, is the subject of a [book][8] published in December). - -I felt like a fish out of water. But in the end, that was the perfect dose of reality I needed to truly understand how open principles can reshape our approach to education. - -As good as this model is in terms of pushing students into a relevant, engaging, and often unpredictable learning environments, it can only go so far if we, as educators who facilitate this type of project-based learning, do not constantly stay abreast of changing technologies and their respective lexicon. Even this unconventional but proven approach will still leave students ill-prepared for a global, innovation economy if we aren't constantly pushing ourselves into areas outside our own comfort zones. My experience at the All Things Open conference was a perfect example. While humbling, it also forced me to confront what I didn't know so that I can learn from it to help the work I do with other teachers and schools. - -### A critical decision - -I made this point to others when I shared a picture of the All Things Open job board with dozens of colleagues all over the country. I shared it with the caption: "What did you do in your school today to prepare your students for this reality tomorrow?" The honest answer from many was, unfortunately, "not much." That has to change. - -![](https://opensource.com/sites/default/files/images/open-org/owens_1.jpg) -![](https://opensource.com/sites/default/files/images/open-org/owens_2.jpg) -(Images courtesy of Ben Owens, CC BY-SA) - -People in organizations everywhere have to make a critical decision: either embrace the rapid pace of change that is a fact of life in our world or face the hard reality of irrelevance. Our systems in education are at this same crossroads—even ones who think of themselves as being innovative. It involves admitting to students, "I don't know, but I'm willing to learn." That's the kind of teaching and learning experience our students deserve. - -It can happen, but it will take pioneering educators who are willing to move away from comfortable, back-of-the-book answers to help students as they work on difficult and messy challenges. You may very well be a veritable fish out of water. - --------------------------------------------------------------------------------- - -via: https://opensource.com/open-organization/19/1/educator-at-open-source-conference - -作者:[Ben Owens][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/engineerteacher -[b]: https://github.com/lujun9972 -[1]: https://en.wikipedia.org/wiki/Tony_Fadell -[2]: https://allthingsopen.org/ -[3]: https://opensource.com/open-source-way -[4]: https://dschool.stanford.edu/resources-collections/a-virtual-crash-course-in-design-thinking -[5]: https://www.tricountyearlycollege.org/ -[6]: https://www.bie.org/about/what_pbl -[7]: https://www.redhat.com/en/explore/the-open-organization-book -[8]: https://www.amazon.com/Open-Up-Education-Learning-Transform/dp/1475842007/ref=tmm_pap_swatch_0?_encoding=UTF8&qid=&sr= diff --git a/sources/talk/20190131 4 confusing open source license scenarios and how to navigate them.md b/sources/talk/20190131 4 confusing open source license scenarios and how to navigate them.md deleted file mode 100644 index fd93cdd9a6..0000000000 --- a/sources/talk/20190131 4 confusing open source license scenarios and how to navigate them.md +++ /dev/null @@ -1,59 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (4 confusing open source license scenarios and how to navigate them) -[#]: via: (https://opensource.com/article/19/1/open-source-license-scenarios) -[#]: author: (P.Kevin Nelson https://opensource.com/users/pkn4645) - -4 confusing open source license scenarios and how to navigate them -====== - -Before you begin using a piece of software, make sure you fully understand the terms of its license. - -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/LAW_openisopen.png?itok=FjmDxIaL) - -As an attorney running an open source program office for a Fortune 500 corporation, I am often asked to look into a product or component where there seems to be confusion as to the licensing model. Under what terms can the code be used, and what obligations run with such use? This often happens when the code or the associated project community does not clearly indicate availability under a [commonly accepted open source license][1]. The confusion is understandable as copyright owners often evolve their products and services in different directions in response to market demands. Here are some of the scenarios I commonly discover and how you can approach each situation. - -### Multiple licenses - -The product is truly open source with an [Open Source Initiative][2] (OSI) open source-approved license, but has changed licensing models at least once if not multiple times throughout its lifespan. This scenario is fairly easy to address; the user simply has to decide if the latest version with its attendant features and bug fixes is worth the conditions to be compliant with the current license. If so, great. If not, then the user can move back in time to a version released under a more palatable license and start from that fork, understanding that there may not be an active community for support and continued development. - -### Old open source - -This is a variation on the multiple licenses model with the twist that current licensing is proprietary only. You have to use an older version to take advantage of open source terms and conditions. Most often, the product was released under a valid open source license up to a certain point in its development, but then the copyright holder chose to evolve the code in a proprietary fashion and offer new releases only under proprietary commercial licensing terms. So, if you want the newest capabilities, you have to purchase a proprietary license, and you most likely will not get a copy of the underlying source code. Most often the open source community that grew up around the original code line falls away once the members understand there will be no further commitment from the copyright holder to the open source branch. While this scenario is understandable from the copyright holder's perspective, it can be seen as "burning a bridge" to the open source community. It would be very difficult to again leverage the benefits of the open source contribution models once a project owner follows this path. - -### Open core - -By far the most common discovery is that a product has both an open source-licensed "community edition" and a proprietary-licensed commercial offering, commonly referred to as open core. This is often encouraging to potential consumers, as it gives them a "try before you buy" option or even a chance to influence both versions of the product by becoming an active member of the community. I usually encourage clients to begin with the community version, get involved, and see what they can achieve. Then, if the product becomes a crucial part of their business plan, they have the option to upgrade to the proprietary level at any time. - -### Freemium - -The component is not open source at all, but instead it is released under some version of the "freemium" model. A version with restricted or time-limited functionality can be downloaded with no immediate purchase required. However, since the source code is usually not provided and its accompanying license does not allow perpetual use, the creation of derivative works, nor further distribution, it is definitely not open source. In this scenario, it is usually best to pass unless you are prepared to purchase a proprietary license and accept all attendant terms and conditions of use. Users are often the most disappointed in this outcome as it has somewhat of a deceptive feel. - -### OSI compliant - -Of course, the happy path I haven't mentioned is to discover the project has a single, clear, OSI-compliant license. In those situations, open source software is as easy as downloading and going forward within appropriate use. - -Each of the more complex scenarios described above can present problems to potential development projects, but consultation with skilled procurement or intellectual property professionals with regard to licensing lineage can reveal excellent opportunities. - -An earlier version of this article was published on [OSS Law][3] and is republished with the author's permission. - - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/1/open-source-license-scenarios - -作者:[P.Kevin Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/pkn4645 -[b]: https://github.com/lujun9972 -[1]: https://opensource.org/licenses -[2]: https://opensource.org/licenses/category -[3]: http://www.pknlaw.com/2017/06/i-thought-that-was-open-source.html diff --git a/sources/talk/20190131 OOP Before OOP with Simula.md b/sources/talk/20190131 OOP Before OOP with Simula.md deleted file mode 100644 index cae9d9bd3a..0000000000 --- a/sources/talk/20190131 OOP Before OOP with Simula.md +++ /dev/null @@ -1,203 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (OOP Before OOP with Simula) -[#]: via: (https://twobithistory.org/2019/01/31/simula.html) -[#]: author: (Sinclair Target https://twobithistory.org) - -OOP Before OOP with Simula -====== - -Imagine that you are sitting on the grassy bank of a river. Ahead of you, the water flows past swiftly. The afternoon sun has put you in an idle, philosophical mood, and you begin to wonder whether the river in front of you really exists at all. Sure, large volumes of water are going by only a few feet away. But what is this thing that you are calling a “river”? After all, the water you see is here and then gone, to be replaced only by more and different water. It doesn’t seem like the word “river” refers to any fixed thing in front of you at all. - -In 2009, Rich Hickey, the creator of Clojure, gave [an excellent talk][1] about why this philosophical quandary poses a problem for the object-oriented programming paradigm. He argues that we think of an object in a computer program the same way we think of a river—we imagine that the object has a fixed identity, even though many or all of the object’s properties will change over time. Doing this is a mistake, because we have no way of distinguishing between an object instance in one state and the same object instance in another state. We have no explicit notion of time in our programs. We just breezily use the same name everywhere and hope that the object is in the state we expect it to be in when we reference it. Inevitably, we write bugs. - -The solution, Hickey concludes, is that we ought to model the world not as a collection of mutable objects but a collection of processes acting on immutable data. We should think of each object as a “river” of causally related states. In sum, you should use a functional language like Clojure. - -![][2] -The author, on a hike, pondering the ontological commitments -of object-oriented programming. - -Since Hickey gave his talk in 2009, interest in functional programming languages has grown, and functional programming idioms have found their way into the most popular object-oriented languages. Even so, most programmers continue to instantiate objects and mutate them in place every day. And they have been doing it for so long that it is hard to imagine that programming could ever look different. - -I wanted to write an article about Simula and imagined that it would mostly be about when and how object-oriented constructs we are familiar with today were added to the language. But I think the more interesting story is about how Simula was originally so unlike modern object-oriented programming languages. This shouldn’t be a surprise, because the object-oriented paradigm we know now did not spring into existence fully formed. There were two major versions of Simula: Simula I and Simula 67. Simula 67 brought the world classes, class hierarchies, and virtual methods. But Simula I was a first draft that experimented with other ideas about how data and procedures could be bundled together. The Simula I model is not a functional model like the one Hickey proposes, but it does focus on processes that unfold over time rather than objects with hidden state that interact with each other. Had Simula 67 stuck with more of Simula I’s ideas, the object-oriented paradigm we know today might have looked very different indeed—and that contingency should teach us to be wary of assuming that the current paradigm will dominate forever. - -### Simula 0 Through 67 - -Simula was created by two Norwegians, Kristen Nygaard and Ole-Johan Dahl. - -In the late 1950s, Nygaard was employed by the Norwegian Defense Research Establishment (NDRE), a research institute affiliated with the Norwegian military. While there, he developed Monte Carlo simulations used for nuclear reactor design and operations research. These simulations were at first done by hand and then eventually programmed and run on a Ferranti Mercury. Nygaard soon found that he wanted a higher-level way to describe these simulations to a computer. - -The kind of simulation that Nygaard commonly developed is known as a “discrete event model.” The simulation captures how a sequence of events change the state of a system over time—but the important property here is that the simulation can jump from one event to the next, since the events are discrete and nothing changes in the system between events. This kind of modeling, according to a paper that Nygaard and Dahl presented about Simula in 1966, was increasingly being used to analyze “nerve networks, communication systems, traffic flow, production systems, administrative systems, social systems, etc.” So Nygaard thought that other people might want a higher-level way to describe these simulations too. He began looking for someone that could help him implement what he called his “Simulation Language” or “Monte Carlo Compiler.” - -Dahl, who had also been employed by NDRE, where he had worked on language design, came aboard at this point to play Wozniak to Nygaard’s Jobs. Over the next year or so, Nygaard and Dahl worked to develop what has been called “Simula 0.” This early version of the language was going to be merely a modest extension to ALGOL 60, and the plan was to implement it as a preprocessor. The language was then much less abstract than what came later. The primary language constructs were “stations” and “customers.” These could be used to model certain discrete event networks; Nygaard and Dahl give an example simulating airport departures. But Nygaard and Dahl eventually came up with a more general language construct that could represent both “stations” and “customers” and also model a wider range of simulations. This was the first of two major generalizations that took Simula from being an application-specific ALGOL package to a general-purpose programming language. - -In Simula I, there were no “stations” or “customers,” but these could be recreated using “processes.” A process was a bundle of data attributes associated with a single action known as the process’ operating rule. You might think of a process as an object with only a single method, called something like `run()`. This analogy is imperfect though, because each process’ operating rule could be suspended or resumed at any time—the operating rules were a kind of coroutine. A Simula I program would model a system as a set of processes that conceptually all ran in parallel. Only one process could actually be “current” at any time, but once a process suspended itself the next queued process would automatically take over. As the simulation ran, behind the scenes, Simula would keep a timeline of “event notices” that tracked when each process should be resumed. In order to resume a suspended process, Simula needed to keep track of multiple call stacks. This meant that Simula could no longer be an ALGOL preprocessor, because ALGOL had only once call stack. Nygaard and Dahl were committed to writing their own compiler. - -In their paper introducing this system, Nygaard and Dahl illustrate its use by implementing a simulation of a factory with a limited number of machines that can serve orders. The process here is the order, which starts by looking for an available machine, suspends itself to wait for one if none are available, and then runs to completion once a free machine is found. There is a definition of the order process that is then used to instantiate several different order instances, but no methods are ever called on these instances. The main part of the program just creates the processes and sets them running. - -The first Simula I compiler was finished in 1965. The language grew popular at the Norwegian Computer Center, where Nygaard and Dahl had gone to work after leaving NDRE. Implementations of Simula I were made available to UNIVAC users and to Burroughs B5500 users. Nygaard and Dahl did a consulting deal with a Swedish company called ASEA that involved using Simula to run job shop simulations. But Nygaard and Dahl soon realized that Simula could be used to write programs that had nothing to do with simulation at all. - -Stein Krogdahl, a professor at the University of Oslo that has written about the history of Simula, claims that “the spark that really made the development of a new general-purpose language take off” was [a paper called “Record Handling”][3] by the British computer scientist C.A.R. Hoare. If you read Hoare’s paper now, this is easy to believe. I’m surprised that you don’t hear Hoare’s name more often when people talk about the history of object-oriented languages. Consider this excerpt from his paper: - -> The proposal envisages the existence inside the computer during the execution of the program, of an arbitrary number of records, each of which represents some object which is of past, present or future interest to the programmer. The program keeps dynamic control of the number of records in existence, and can create new records or destroy existing ones in accordance with the requirements of the task in hand. - -> Each record in the computer must belong to one of a limited number of disjoint record classes; the programmer may declare as many record classes as he requires, and he associates with each class an identifier to name it. A record class name may be thought of as a common generic term like “cow,” “table,” or “house” and the records which belong to these classes represent the individual cows, tables, and houses. - -Hoare does not mention subclasses in this particular paper, but Dahl credits him with introducing Nygaard and himself to the concept. Nygaard and Dahl had noticed that processes in Simula I often had common elements. Using a superclass to implement those common elements would be convenient. This also raised the possibility that the “process” idea itself could be implemented as a superclass, meaning that not every class had to be a process with a single operating rule. This then was the second great generalization that would make Simula 67 a truly general-purpose programming language. It was such a shift of focus that Nygaard and Dahl briefly considered changing the name of the language so that people would know it was not just for simulations. But “Simula” was too much of an established name for them to risk it. - -In 1967, Nygaard and Dahl signed a contract with Control Data to implement this new version of Simula, to be known as Simula 67. A conference was held in June, where people from Control Data, the University of Oslo, and the Norwegian Computing Center met with Nygaard and Dahl to establish a specification for this new language. This conference eventually led to a document called the [“Simula 67 Common Base Language,”][4] which defined the language going forward. - -Several different vendors would make Simula 67 compilers. The Association of Simula Users (ASU) was founded and began holding annual conferences. Simula 67 soon had users in more than 23 different countries. - -### 21st Century Simula - -Simula is remembered now because of its influence on the languages that have supplanted it. You would be hard-pressed to find anyone still using Simula to write application programs. But that doesn’t mean that Simula is an entirely dead language. You can still compile and run Simula programs on your computer today, thanks to [GNU cim][5]. - -The cim compiler implements the Simula standard as it was after a revision in 1986. But this is mostly the Simula 67 version of the language. You can write classes, subclass, and virtual methods just as you would have with Simula 67. So you could create a small object-oriented program that looks a lot like something you could easily write in Python or Ruby: - -``` -! dogs.sim ; -Begin - Class Dog; - ! The cim compiler requires virtual procedures to be fully specified ; - Virtual: Procedure bark Is Procedure bark;; - Begin - Procedure bark; - Begin - OutText("Woof!"); - OutImage; ! Outputs a newline ; - End; - End; - - Dog Class Chihuahua; ! Chihuahua is "prefixed" by Dog ; - Begin - Procedure bark; - Begin - OutText("Yap yap yap yap yap yap"); - OutImage; - End; - End; - - Ref (Dog) d; - d :- new Chihuahua; ! :- is the reference assignment operator ; - d.bark; -End; -``` - -You would compile and run it as follows: - -``` -$ cim dogs.sim -Compiling dogs.sim: -gcc -g -O2 -c dogs.c -gcc -g -O2 -o dogs dogs.o -L/usr/local/lib -lcim -$ ./dogs -Yap yap yap yap yap yap -``` - -(You might notice that cim compiles Simula to C, then hands off to a C compiler.) - -This was what object-oriented programming looked like in 1967, and I hope you agree that aside from syntactic differences this is also what object-oriented programming looks like in 2019. So you can see why Simula is considered a historically important language. - -But I’m more interested in showing you the process model that was central to Simula I. That process model is still available in Simula 67, but only when you use the `Process` class and a special `Simulation` block. - -In order to show you how processes work, I’ve decided to simulate the following scenario. Imagine that there is a village full of villagers next to a river. The river has lots of fish, but between them the villagers only have one fishing rod. The villagers, who have voracious appetites, get hungry every 60 minutes or so. When they get hungry, they have to use the fishing rod to catch a fish. If a villager cannot use the fishing rod because another villager is waiting for it, then the villager queues up to use the fishing rod. If a villager has to wait more than five minutes to catch a fish, then the villager loses health. If a villager loses too much health, then that villager has starved to death. - -This is a somewhat strange example and I’m not sure why this is what first came to mind. But there you go. We will represent our villagers as Simula processes and see what happens over a day’s worth of simulated time in a village with four villagers. - -The full program is [available here as a Gist][6]. - -The last lines of my output look like the following. Here we are seeing what happens in the last few hours of the day: - -``` -1299.45: John is hungry and requests the fishing rod. -1299.45: John is now fishing. -1311.39: John has caught a fish. -1328.96: Betty is hungry and requests the fishing rod. -1328.96: Betty is now fishing. -1331.25: Jane is hungry and requests the fishing rod. -1340.44: Betty has caught a fish. -1340.44: Jane went hungry waiting for the rod. -1340.44: Jane starved to death waiting for the rod. -1369.21: John is hungry and requests the fishing rod. -1369.21: John is now fishing. -1379.33: John has caught a fish. -1409.59: Betty is hungry and requests the fishing rod. -1409.59: Betty is now fishing. -1419.98: Betty has caught a fish. -1427.53: John is hungry and requests the fishing rod. -1427.53: John is now fishing. -1437.52: John has caught a fish. -``` - -Poor Jane starved to death. But she lasted longer than Sam, who didn’t even make it to 7am. Betty and John sure have it good now that only two of them need the fishing rod. - -What I want you to see here is that the main, top-level part of the program does nothing but create the four villager processes and get them going. The processes manipulate the fishing rod object in the same way that we would manipulate an object today. But the main part of the program does not call any methods or modify and properties on the processes. The processes have internal state, but this internal state only gets modified by the process itself. - -There are still fields that get mutated in place here, so this style of programming does not directly address the problems that pure functional programming would solve. But as Krogdahl observes, “this mechanism invites the programmer of a simulation to model the underlying system as a set of processes, each describing some natural sequence of events in that system.” Rather than thinking primarily in terms of nouns or actors—objects that do things to other objects—here we are thinking of ongoing processes. The benefit is that we can hand overall control of our program off to Simula’s event notice system, which Krogdahl calls a “time manager.” So even though we are still mutating processes in place, no process makes any assumptions about the state of another process. Each process interacts with other processes only indirectly. - -It’s not obvious how this pattern could be used to build, say, a compiler or an HTTP server. (On the other hand, if you’ve ever programmed games in the Unity game engine, this should look familiar.) I also admit that even though we have a “time manager” now, this may not have been exactly what Hickey meant when he said that we need an explicit notion of time in our programs. (I think he’d want something like the superscript notation [that Ada Lovelace used][7] to distinguish between the different values a variable assumes through time.) All the same, I think it’s really interesting that right there at the beginning of object-oriented programming we can find a style of programming that is not all like the object-oriented programming we are used to. We might take it for granted that object-oriented programming simply works one way—that a program is just a long list of the things that certain objects do to other objects in the exact order that they do them. Simula I’s process system shows that there are other approaches. Functional languages are probably a better thought-out alternative, but Simula I reminds us that the very notion of alternatives to modern object-oriented programming should come as no surprise. - -If you enjoyed this post, more like it come out every four weeks! Follow [@TwoBitHistory][8] on Twitter or subscribe to the [RSS feed][9] to make sure you know when a new post is out. - -Previously on TwoBitHistory… - -> Hey everyone! I sadly haven't had time to do any new writing but I've just put up an updated version of my history of RSS. This version incorporates interviews I've since done with some of the key people behind RSS like Ramanathan Guha and Dan Libby. -> -> — TwoBitHistory (@TwoBitHistory) [December 18, 2018][10] - - - --------------------------------------------------------------------------------- - -1. Jan Rune Holmevik, “The History of Simula,” accessed January 31, 2019, http://campus.hesge.ch/daehne/2004-2005/langages/simula.htm. ↩ - -2. Ole-Johan Dahl and Kristen Nygaard, “SIMULA—An ALGOL-Based Simulation Langauge,” Communications of the ACM 9, no. 9 (September 1966): 671, accessed January 31, 2019, http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.95.384&rep=rep1&type=pdf. ↩ - -3. Stein Krogdahl, “The Birth of Simula,” 2, accessed January 31, 2019, http://heim.ifi.uio.no/~steinkr/papers/HiNC1-webversion-simula.pdf. ↩ - -4. ibid. ↩ - -5. Ole-Johan Dahl and Kristen Nygaard, “The Development of the Simula Languages,” ACM SIGPLAN Notices 13, no. 8 (August 1978): 248, accessed January 31, 2019, https://hannemyr.com/cache/knojd_acm78.pdf. ↩ - -6. Dahl and Nygaard (1966), 676. ↩ - -7. Dahl and Nygaard (1978), 257. ↩ - -8. Krogdahl, 3. ↩ - -9. Ole-Johan Dahl, “The Birth of Object-Orientation: The Simula Languages,” 3, accessed January 31, 2019, http://www.olejohandahl.info/old/birth-of-oo.pdf. ↩ - -10. Dahl and Nygaard (1978), 265. ↩ - -11. Holmevik. ↩ - -12. Krogdahl, 4. ↩ - - --------------------------------------------------------------------------------- - -via: https://twobithistory.org/2019/01/31/simula.html - -作者:[Sinclair Target][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://twobithistory.org -[b]: https://github.com/lujun9972 -[1]: https://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey -[2]: /images/river.jpg -[3]: https://archive.computerhistory.org/resources/text/algol/ACM_Algol_bulletin/1061032/p39-hoare.pdf -[4]: http://web.eah-jena.de/~kleine/history/languages/Simula-CommonBaseLanguage.pdf -[5]: https://www.gnu.org/software/cim/ -[6]: https://gist.github.com/sinclairtarget/6364cd521010d28ee24dd41ab3d61a96 -[7]: https://twobithistory.org/2018/08/18/ada-lovelace-note-g.html -[8]: https://twitter.com/TwoBitHistory -[9]: https://twobithistory.org/feed.xml -[10]: https://twitter.com/TwoBitHistory/status/1075075139543449600?ref_src=twsrc%5Etfw diff --git a/sources/talk/20190204 Config management is dead- Long live Config Management Camp.md b/sources/talk/20190204 Config management is dead- Long live Config Management Camp.md deleted file mode 100644 index 679ac9033b..0000000000 --- a/sources/talk/20190204 Config management is dead- Long live Config Management Camp.md +++ /dev/null @@ -1,118 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Config management is dead: Long live Config Management Camp) -[#]: via: (https://opensource.com/article/19/2/configuration-management-camp) -[#]: author: (Matthew Broberg https://opensource.com/users/mbbroberg) - -Config management is dead: Long live Config Management Camp -====== - -CfgMgmtCamp '19 co-organizers share their take on ops, DevOps, observability, and the rise of YoloOps and YAML engineers. - -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cicd_continuous_delivery_deployment_gears.png?itok=kVlhiEkc) - -Everyone goes to [FOSDEM][1] in Brussels to learn from its massive collection of talk tracks, colloquially known as developer rooms, that run the gauntlet of curiosities, covering programming languages like Rust, Go, and Python, to special topics ranging from community, to legal, to privacy. After two days of nonstop activity, many FOSDEM attendees move on to Ghent, Belgium, to join hundreds for Configuration Management Camp ([CfgMgmtCamp][2]). - -Kris Buytaert and Toshaan Bharvani run the popular post-FOSDEM show centered around infrastructure management, featuring hackerspaces, training, workshops, and keynotes. It's a deeply technical exploration of the who, what, and how of building resilient infrastructure. It started in 2013 as a PuppetCamp but expanded to include more communities and tools in 2014. - -I spoke with Kris and Toshaan, who both have a healthy sense of humor, about CfgMgmtCamp's past, present, and future. Our interview has been edited for length and clarity. - -**Matthew: Your opening[keynote][3] is called "CfgMgmtCamp is dead." Is config management dead? Will it live on, or will something take its place?** - -**Kris:** We've noticed people are jumping on the hype of containers, trying to solve the same problems in a different way. But they are still managing config, only in different ways and with other tools. Over the past couple of years, we've evolved from a conference with a focus on infrastructure-as-code tooling, such as Puppet, Chef, CFEngine, Ansible, Juju, and Salt, to a more open source infrastructure automation conference in general. So, config management is definitely not dead. Infrastructure-as-code is also not dead, but it all is evolving. - -**Toshaan:** We see people changing tools, jumping on hype, and communities changing; however, the basic ideas and concepts remain the same. - -**Matthew: It's great to see[observability as the topic][4] of one of your keynotes. Why should those who care about configuration management also care about monitoring and observability?** - -**Kris:** While the name of the conference hasn't changed, the tools have evolved and we have expanded our horizon. Ten years ago, [Devopsdays][5] was just #devopsdays, but it evolved to focus on culture—the C of [CAMS][6] in the DevOps' core principles of Culture, Automation, Measurement, and Sharing. - -![](https://opensource.com/sites/default/files/uploads/cams.png) - -[Monitorama][7] filled the gap on monitoring and metrics (tackling the M in CAMS). Config Management Camp is about open source Automation, the A. Since they are all open source conferences, they fulfill the Sharing part, completing the CAMS concept. - -Observability sits on the line between Automation and Measurement. To go one step further, in some of my talks about open source monitoring, I describe the evolution of monitoring tools from #monitoringsucks to #monitoringlove; for lots of people (including me), the love for monitoring returned because we tied it to automation. We started to provision a service and automatically adapted the monitoring of that service to its state. Gone were the days where the monitoring tool was out of sync with reality. - -Looking at it from the other side, when you have an infrastructure or application so complex that you need observability in it, you'd better not be deploying manually; you will need some form of automation at that level of complexity. So, observability and infrastructure automation are tied together. - -**Toshaan:** Yes, while in the past we focused on configuration management, we will be looking to expand that into all types of infrastructure management. Last year, we played with this idea, and we were able to have a lot of cross-tool presentations. This year, we've taken this a step further by having more differentiated content. - -**Matthew: Some of my virtualization and Linux admin friends push back, saying observability is a developer's responsibility. How would you respond without just saying "DevOps?"** - -**Kris:** What you describe is what I call "Ooops Devs." This is a trend where the people who run the platform don't really care what they run; as long as port 80 is listening and the node pings, they are happy. It's equally bad as "Dev Ooops." "Ooops Devs" is where the devs rant about the ops folks because they are slow, not agile, and not responsive. But, to me, your job as an ops person or as a Linux admin is to keep a service running, and the only way to do that is to take on that task is as a team—with your colleagues who have different roles and insights, people who write code, people who design, etc. It is a shared responsibility. And hiding behind "that is someone else's responsibility," doesn't smell like collaboration going on. - -**Toshaan:** Even in the dark ages of silos, I believe a true sysadmin should have cared about observability, monitoring, and automation. I believe that the DevOps movement has made this much more widespread, and that it has become easier to get this information and expose it. On the other hand, I believe that pure operators or sysadmins have learned to be team players (or, they may have died out). I like the analogy of an army unit composed of different specialty soldiers who work together to complete a mission; we have engineers who work to deliver products or services. - -**Matthew: In a[Devopsdays Zurich talk][8], Kris offered an opinion that Americans build software for acquisition and Europeans build for resilience. In that light, what are the best skills for someone who wants to build meaningful infrastructure?** - -**Toshaan:** I believe still some people don't understand the complexity of code sprawl, and they believe that some new hype will solve this magically. - -**Kris:** This year, we invited [Steve Traugott][9], co-author of the 1998 USENIX paper "[Bootstrapping an Infrastructure][10]" that helped kickstart our community. So many people never read [Infrastructures.org][11], never experienced the pain of building images and image sprawl, and don't understand the evolution we went through that led us to build things the way we build them from source code. - -People should study topics such as idempotence, resilience, reproducibility, and surviving the tenth floor test. (As explained in "Bootstrapping an Infrastructure": "The test we used when designing infrastructures was 'Can I grab a random machine and throw it out the tenth-floor window without adversely impacting users for more than 10 minutes?' If the answer to this was 'yes,' then we knew we were doing things right.") But only after they understand the service they are building—the service is the absolute priority—can they begin working on things like: how can we run this, how can we make sure it keeps running, how can it fail and how can we prevent that, and if it disappears, how can we spin it up again fast, unnoticed by the end user. - -**Toshaan:** 100% uptime. - -**Kris:** The challenge we have is that lots of people don't have that experience yet. We've seen the rise of [YoloOps][12]—just spin it up once, fire, and forget—which results in security problems, stability problems, data loss, etc., and they often grasp onto the solutions in YoloOps, the easy way to do something quickly and move on. But understanding how things will eventually fail takes time, it's called experience. - -**Toshaan:** Well, when I was a student and manned the CentOS stand at FOSDEM, I remember a guy coming up to the stand and complaining that he couldn't do consulting because of the "fire once and forgot" policy of CentOS, and that it just worked too well. I like to call this ZombieOps, but YoloOps works also. - -**Matthew: I see you're leading the second year of YamlCamp as well. Why does a markup language need its own camp?** - -**Kris:** [YamlCamp][13] is a parody, it's a joke. Last year, Bob Walker ([@rjw1][14]) gave a talk titled "Are we all YAML engineers now?" that led to more jokes. We've had a discussion for years about rebranding CfgMgmtCamp; the problem is that people know our name, we have a large enough audience to keep going, and changing the name would mean effort spent on logos, website, DNS, etc. We won't change the name, but we joked that we could rebrand to YamlCamp, because for some weird reason, a lot of the talks are about YAML. :) - -**Matthew: Do you think systems engineers should list YAML as a skill or a language on their CV? Should companies be hiring YAML engineers, or do you have "Long live all YAML engineers" on the website in jest?** - -**Toshaan:** Well, the real question is whether people are willing to call themselves YAML engineers proudly, because we already have enough DevOps engineers. - -**Matthew: What FOSS software helps you manage the event?** - -**Toshaan:** I re-did the website in Hugo CMS because we were spending too much time maintaining the website manually. I chose Hugo, because I was learning Golang, and because it has been successfully used for other conferences and my own website. I also wanted a static website and iCalendar output, so we could use calendar tooling such as Giggity to have a good scheduling tool. - -The website now builds quite nicely, and while I still have some ideas on improvements, maintenance is now much easier. - -For the call for proposals (CFP), we now use [OpenCFP][15]. We want to optimize the submission, voting, selection, and extraction to be as automated as possible, while being easy and comfortable for potential speakers, reviewers, and ourselves to use. OpenCFP seems to be the tool that works; while we still have some feature requirements, I believe that, once we have some time to contribute back to OpenCFP, we'll have a fully functional and easy tool to run CFPs with. - -Last, we switched from EventBrite to Pretix because I wanted to be GDPR compliant and have the ability to run our questions, vouchers, and extra features. Pretix allows us to control registration of attendees, speakers, sponsors, and organizers and have a single overview of all the people coming to the event. - -### Wrapping up - -The beauty of Configuration Management Camp to me is that it continues to evolve with its audience. Configuration management is certainly at the heart of the work, but it's in service to resilient infrastructure. Keep your eyes open for the talk recordings to learn from the [line up of incredible speakers][16], and thank you to the team for running this (free) show! - -You can follow Kris [@KrisBuytaert][17] and Toshaan [@toshywoshy][18]. You can also see Kris' past articles [on his blog][19]. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/2/configuration-management-camp - -作者:[Matthew Broberg][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/mbbroberg -[b]: https://github.com/lujun9972 -[1]: https://fosdem.org/2019/ -[2]: https://cfgmgmtcamp.eu/ -[3]: https://cfgmgmtcamp.eu/schedule/monday/intro00/ -[4]: https://cfgmgmtcamp.eu/schedule/monday/keynote0/ -[5]: https://www.devopsdays.org/ -[6]: http://devopsdictionary.com/wiki/CAMS -[7]: http://monitorama.com/ -[8]: https://vimeo.com/272519813 -[9]: https://cfgmgmtcamp.eu/schedule/tuesday/keynote1/ -[10]: http://www.infrastructures.org/papers/bootstrap/bootstrap.html -[11]: http://www.infrastructures.org/ -[12]: https://gist.githubusercontent.com/mariozig/5025613/raw/yolo -[13]: https://twitter.com/yamlcamp -[14]: https://twitter.com/rjw1 -[15]: https://github.com/opencfp/opencfp -[16]: https://cfgmgmtcamp.eu/speaker/ -[17]: https://twitter.com/KrisBuytaert -[18]: https://twitter.com/toshywoshy -[19]: https://krisbuytaert.be/index.shtml diff --git a/sources/talk/20190206 4 steps to becoming an awesome agile developer.md b/sources/talk/20190206 4 steps to becoming an awesome agile developer.md deleted file mode 100644 index bad4025aef..0000000000 --- a/sources/talk/20190206 4 steps to becoming an awesome agile developer.md +++ /dev/null @@ -1,82 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (4 steps to becoming an awesome agile developer) -[#]: via: (https://opensource.com/article/19/2/steps-agile-developer) -[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh) - -4 steps to becoming an awesome agile developer -====== -There's no magical way to do it, but these practices will put you well on your way to embracing agile in application development, testing, and debugging. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/metrics_lead-steps-measure.png?itok=DG7rFZPk) - -Enterprises are rushing into their DevOps journey through [agile][1] software development with cloud-native technologies such as [Linux containers][2], [Kubernetes][3], and [serverless][4]. Continuous integration helps enterprise developers reduce bugs, unexpected errors, and improve the quality of their code deployed in production. - -However, this doesn't mean all developers in DevOps automatically embrace agile for their daily work in application development, testing, and debugging. There is no magical way to do it, but the following four practical steps and best practices will put you well on your way to becoming an awesome agile developer. - -### Start with design thinking agile practices - -There are many opportunities to learn about using agile software development practices in your DevOps initiatives. Agile practices inspire people with new ideas and experiences for improving their daily work in application development with team collaboration. More importantly, those practices will help you discover the answers to questions such as: Why am I doing this? What kind of problems am I trying to solve? How do I measure the outcomes? - -A [domain-driven design][5] approach will help you start discovery sooner and easier. For example, the [Start At The End][6] practice helps you redesign your application and explore potential business outcomes—such as, what would happen if your application fails in production? You might also be interested in [Event Storming][7] for interactive and rapid discovery or [Impact Mapping][8] for graphical and strategic design as part of domain-driven design practices. - -### Use a predictive approach first - -In agile software development projects, enterprise developers are mainly focused on adapting to rapidly changing app development environments such as reactive runtimes, cloud-native frameworks, Linux container packaging, and the Kubernetes platform. They believe this is the best way to become an agile developer in their organization. However, this type of adaptive approach typically makes it harder for developers to understand and report what they will do in the next sprint. Developers might know the ultimate goal and, at best, the app features for a release about four months from the current sprint. - -In contrast, the predictive approach places more emphasis on analyzing known risks and planning future sprints in detail. For example, predictive developers can accurately report the functions and tasks planned for the entire development process. But it's not a magical way to make your agile projects succeed all the time because the predictive team depends totally on effective early-stage analysis. If the analysis does not work very well, it may be difficult for the project to change direction once it gets started. - -To mitigate this risk, I recommend that senior agile developers increase the predictive capabilities with a plan-driven method, and junior agile developers start with the adaptive methods for value-driven development. - -### Continuously improve code quality - -Don't hesitate to engage in [continuous integration][9] (CI) practices for improving your application before deploying code into production. To adopt modern application frameworks, such as cloud-native architecture, Linux container packaging, and hybrid cloud workloads, you have to learn about automated tools to address complex CI procedures. - -[Jenkins][10] is the standard CI tool for many organizations; it allows developers to build and test applications in many projects in an automated fashion. Its most important function is detecting unexpected errors during CI to prevent them from happening in production. This should increase business outcomes through better customer satisfaction. - -Automated CI enables agile developers to not only improve the quality of their code but their also application development agility through learning and using open source tools and patterns such as [behavior-driven development][11], [test-driven development][12], [automated unit testing][13], [pair programming][14], [code review][15], and [design pattern][16]. - -### Never stop exploring communities - -Never settle, even if you already have a great reputation as an agile developer. You have to continuously take on bigger challenges to make great software in an agile way. - -By participating in the very active and growing open source community, you will not only improve your skills as an agile developer, but your actions can also inspire other developers who want to learn agile practices. - -How do you get involved in specific communities? It depends on your interests and what you want to learn. It might mean presenting specific topics at conferences or local meetups, writing technical blog posts, publishing practical guidebooks, committing code, or creating pull requests to open source projects' Git repositories. It's worth exploring open source communities for agile software development, as I've found it is a great way to share your expertise, knowledge, and practices with other brilliant developers and, along the way, help each other. - -### Get started - -These practical steps can give you a shorter path to becoming an awesome agile developer. Then you can lead junior developers in your team and organization to become more flexible, valuable, and predictive using agile principles. - - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/2/steps-agile-developer - -作者:[Daniel Oh][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/daniel-oh -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/article/18/10/what-agile -[2]: https://opensource.com/resources/what-are-linux-containers -[3]: https://opensource.com/resources/what-is-kubernetes -[4]: https://opensource.com/article/18/11/open-source-serverless-platforms -[5]: https://en.wikipedia.org/wiki/Domain-driven_design -[6]: https://openpracticelibrary.com/practice/start-at-the-end/ -[7]: https://openpracticelibrary.com/practice/event-storming/ -[8]: https://openpracticelibrary.com/practice/impact-mapping/ -[9]: https://en.wikipedia.org/wiki/Continuous_integration -[10]: https://jenkins.io/ -[11]: https://en.wikipedia.org/wiki/Behavior-driven_development -[12]: https://en.wikipedia.org/wiki/Test-driven_development -[13]: https://en.wikipedia.org/wiki/Unit_testing -[14]: https://en.wikipedia.org/wiki/Pair_programming -[15]: https://en.wikipedia.org/wiki/Code_review -[16]: https://en.wikipedia.org/wiki/Design_pattern diff --git a/sources/talk/20190206 What blockchain and open source communities have in common.md b/sources/talk/20190206 What blockchain and open source communities have in common.md deleted file mode 100644 index bc4f9464d0..0000000000 --- a/sources/talk/20190206 What blockchain and open source communities have in common.md +++ /dev/null @@ -1,64 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (What blockchain and open source communities have in common) -[#]: via: (https://opensource.com/article/19/2/blockchain-open-source-communities) -[#]: author: (Gordon Haff https://opensource.com/users/ghaff) - -What blockchain and open source communities have in common -====== -Blockchain initiatives can look to open source governance for lessons on establishing trust. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/diversity_flowers_chain.jpg?itok=ns01UPOp) - -One of the characteristics of blockchains that gets a lot of attention is how they enable distributed trust. The topic of trust is a surprisingly complicated one. In fact, there's now an [entire book][1] devoted to the topic by Kevin Werbach. - -But here's what it means in a nutshell. Organizations that wish to work together, but do not fully trust one another, can establish a permissioned blockchain and invite business partners to record their transactions on a shared distributed ledger. Permissioned blockchains can trace assets when transactions are added to the blockchain. A permissioned blockchain implies a degree of trust (again, trust is complicated) among members of a consortium, but no single entity controls the storage and validation of transactions. - -The basic model is that a group of financial institutions or participants in a logistics system can jointly set up a permissioned blockchain that will validate and immutably record transactions. There's no dependence on a single entity, whether it's one of the direct participants or a third-party intermediary who set up the blockchain, to safeguard the integrity of the system. The blockchain itself does so through a variety of cryptographic mechanisms. - -Here's the rub though. It requires that competitors work together cooperatively—a relationship often called [coopetition][2]. The term dates back to the early 20th century, but it grew into widespread use when former Novell CEO Ray Noorda started using the term to describe the company's business strategy in the 1990s. Novell was then planning to get into the internet portal business, which required it to seek partnerships with some of the search engine providers and other companies it would also be competing against. In 1996, coopetition became the subject of a bestselling [book][3]. - -Coopetition can be especially difficult when a blockchain network initiative appears to be driven by a dominant company. And it's hard for the dominant company not to exert outsize influence over the initiative, just as a natural consequence of how big it is. For example, the IBM-Maersk joint venture has [struggled to sign up rival shipping companies][4], in part because Maersk is the world's largest carrier by capacity, a position that makes rivals wary. - -We see this same dynamic in open source communities. The original creators of a project need to not only let go; they need to put governance structures in place that give competing companies confidence that there's a level playing field. - -For example, Sarah Novotny, now head of open source strategy at Google Cloud Platform, [told me in a 2017 interview][5] about the [Kubernetes][6] project that it isn't always easy to give up control, even when people buy into doing what is best for a project. - -> Google turned Kubernetes over to the Cloud Native Computing Foundation (CNCF), which sits under the Linux Foundation umbrella. As [CNCF executive director Dan Kohn puts it][7]: "One of the things they realized very early on is that a project with a neutral home is always going to achieve a higher level of collaboration. They really wanted to find a home for it where a number of different companies could participate." -> -> Defaulting to public may not be either natural or comfortable. "Early on, my first six, eight, or 12 weeks at Google, I think half my electrons in email were spent on: 'Why is this discussion not happening on a public mailing list? Is there a reason that this is specific to GKE [Google Container Engine]? No, there's not a reason,'" said Novotny. - -To be sure, some grumble that open source foundations have become too common and that many are too dominated by paying corporate members. Simon Phipps, currently the president of the Open Source Initiative, gave a talk at OSCON way back in 2015 titled ["Enough Foundations Already!"][8] in which he argued that "before we start another open source foundation, let's agree that what we need protected is software freedom and not corporate politics." - -Nonetheless, while not appropriate for every project, foundations with business, legal, and technical governance are increasingly the model for open source projects that require extensive cooperation among competing companies. A [2017 analysis of GitHub data by the Linux Foundation][9] found a number of different governance models in use by the highest-velocity open source projects. Unsurprisingly, quite a few remained under the control of the company that created or acquired them. However, about a third were under the auspices of a foundation. - -Is there a lesson here for blockchain? Quite possibly. Open source projects can be sponsored by a company while still putting systems and governance in place that are welcoming to outside contributors. However, there's a great deal of history to suggest that doing so is hard because it's hard not to exert control and leverage when you can. Furthermore, even if you make a successful case for being truly open to equal participation to outsiders today, it will be hard to allay suspicions that you might not be as welcoming tomorrow. - -To the degree that we can equate blockchain consortiums with open source communities, this suggests that business blockchain initiatives should look to open source governance for lessons. Dominant players in the ecosystem need to forgo control, and they need to have conversations with partners and potential partners about what types of structures would make participating easier. - -Many blockchain infrastructure software projects are already under foundations such as Hyperledger. But perhaps some specific production deployments of blockchain aimed at specific industries and ecosystems will benefit from formal governance structures as well. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/2/blockchain-open-source-communities - -作者:[Gordon Haff][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ghaff -[b]: https://github.com/lujun9972 -[1]: https://mitpress.mit.edu/books/blockchain-and-new-architecture-trust -[2]: https://en.wikipedia.org/wiki/Coopetition -[3]: https://en.wikipedia.org/wiki/Co-opetition_(book) -[4]: https://www.theregister.co.uk/2018/10/30/ibm_struggles_to_sign_up_shipping_carriers_to_blockchain_supply_chain_platform_reports/ -[5]: https://opensource.com/article/17/4/podcast-kubernetes-sarah-novotny -[6]: https://kubernetes.io/ -[7]: http://bitmason.blogspot.com/2017/02/podcast-cloud-native-computing.html -[8]: https://www.oreilly.com/ideas/enough-foundations-already -[9]: https://www.linuxfoundation.org/blog/2017/08/successful-open-source-projects-common/ diff --git a/sources/talk/20190214 Top 5 podcasts for Linux news and tips.md b/sources/talk/20190214 Top 5 podcasts for Linux news and tips.md deleted file mode 100644 index fb827bb39b..0000000000 --- a/sources/talk/20190214 Top 5 podcasts for Linux news and tips.md +++ /dev/null @@ -1,80 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Top 5 podcasts for Linux news and tips) -[#]: via: (https://opensource.com/article/19/2/top-linux-podcasts) -[#]: author: (Stephen Bancroft https://opensource.com/users/stevereaver) - -Top 5 podcasts for Linux news and tips -====== -A tried and tested podcast listener, shares his favorite Linux podcasts over the years, plus a couple of bonus picks. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/linux-penguin-penguins.png?itok=5hlVDue7) - -Like many Linux enthusiasts, I listen to a lot of podcasts. I find my daily commute is the best time to get some time to myself and catch up on the latest tech news. Over the years, I have subscribed and unsubscribed to more show feeds than I care to think about and have distilled them down to the best of the best. - -Here are my top five Linux podcasts I think you should be listening to in 2019, plus a couple of bonus picks. - - 5. [**Late Night Linux**][1]—This podcast, hosted by Joe, [Félim][2], [Graham][3], and [Will][4] from the UK, is rough, ready, and pulls no punches. [Joe Ressington][5] is always ready to tell it how it is, and Félim is always quick with his opinions. It's presented in a casual conversation format—but not one to have one with the kids around, especially with subjects they are all passionate about! - - - 4. [**Ask Noah Show**][6]—This show was forked from the Linux Action Show after it ended. Hosted by [Noah Chelliah][7], it's presented in a radio talkback style and takes live calls from listeners—it's syndicated from a local radio station in Grand Forks, North Dakota. The podcast isn't purely about Linux, but Noah takes on technical challenges and solves them with Linux and answers listeners' questions about how to achieve good technical solutions using Linux. - - - 3. [**The Ubuntu Podcast**][8]—If you want the latest about Ubuntu, you can't go past this show. In another podcast with a UK twist, hosts [Alan Pope][9] (Popey), [Mark Johnson][10], and [Martin Wimpress][11] (Wimpy) present a funny and insightful view of the open source community with news directly from Ubuntu. - - - 2. [**Linux Action News**][12]—The title says it all: it's a news show for Linux. This show was spawned from the popular Linux Action Show and is broadcast by the [Jupiter Broadcasting Network][13], which has many other tech-related podcasts. Hosts Chris Fisher and [Joe Ressington][5] present the show in a more formal "evening news" style, which runs around 30 minutes long. If you want to get a quick weekly update on Linux and Linux-related news, this is the show for you. - - - 1. [**Linux Unplugged**][14]—Finally, coming in at the number one spot is the granddaddy of them all, Linux Unplugged. This show gets to the core of what being in the Linux community is all about. Presented as a casual panel-style discussion by [Chris Fisher][15] and [Wes Payne][16], the podcast includes an interactive voice chatroom where listeners can connect and be heard live on the show as it broadcasts. - - - -Well, there you have it, my current shortlist of Linux podcasts. It's likely to change in the near future, but for now, I am enjoying every minute these guys put together. - -### Bonus podcasts - -Here are two bonus podcasts you might want to check out. - -**[Choose Linux][17]** is a brand-new podcast that is tantalizing because of its hosts: Joe Ressington of Linux Action News, who is a long-time Linux veteran, and [Jason Evangelho][18], a Forbes writer who recently shot to fame in the open source community with his articles showcasing his introduction to Linux and open source. Living vicariously through Jason's introduction to Linux has been and will continue to be fun. - -[**Command Line Heroes**][19] is a podcast produced by Red Hat. It has a very high production standard and has a slightly different format to the shows I have previously mentioned, anchored by a single presenter, developer, and [CodeNewbie][20] founder [Saron Yitbarek][21], who presents the latest innovations in open source. Now in its second season and released fortnightly, I highly recommend that you start from the first episode of this podcast. It starts with a great intro to the O/S wars of the '90s and sets the foundations for the start of Linux. - -Do you have a favorite Linux podcast that isn't on this list? Please share it in the comments. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/2/top-linux-podcasts - -作者:[Stephen Bancroft][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/stevereaver -[b]: https://github.com/lujun9972 -[1]: https://latenightlinux.com/ -[2]: https://twitter.com/felimwhiteley -[3]: https://twitter.com/degville -[4]: https://twitter.com/8none1 -[5]: https://twitter.com/JoeRessington -[6]: http://www.asknoahshow.com/ -[7]: https://twitter.com/kernellinux?lang=en -[8]: http://ubuntupodcast.org/ -[9]: https://twitter.com/popey -[10]: https://twitter.com/marxjohnson -[11]: https://twitter.com/m_wimpress -[12]: https://linuxactionnews.com/ -[13]: https://www.jupiterbroadcasting.com/ -[14]: https://linuxunplugged.com/ -[15]: https://twitter.com/ChrisLAS -[16]: https://twitter.com/wespayne -[17]: https://chooselinux.show -[18]: https://twitter.com/killyourfm -[19]: https://www.redhat.com/en/command-line-heroes -[20]: https://www.codenewbie.org/ -[21]: https://twitter.com/saronyitbarek diff --git a/sources/talk/20190219 How Linux testing has changed and what matters today.md b/sources/talk/20190219 How Linux testing has changed and what matters today.md deleted file mode 100644 index ad26d6dbec..0000000000 --- a/sources/talk/20190219 How Linux testing has changed and what matters today.md +++ /dev/null @@ -1,99 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How Linux testing has changed and what matters today) -[#]: via: (https://opensource.com/article/19/2/phoronix-michael-larabel) -[#]: author: (Don Watkins https://opensource.com/users/don-watkins) - -How Linux testing has changed and what matters today -====== -Michael Larabel, the founder of Phoronix, shares his insights on the evolution of Linux and open hardware. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/mistake_bug_fix_find_error.png?itok=PZaz3dga) - -If you've ever wondered how your Linux computer stacks up against other Linux, Windows, and MacOS machines or searched for reviews of Linux-compatible hardware, you're probably familiar with [Phoronix][1]. Along with its website, which attracts more than 250 million visitors a year to its Linux reviews and news, the company also offers the [Phoronix Test Suite][2], an open source hardware benchmarking tool, and [OpenBenchmarking.org][3], where test result data is stored. - -According to [Michael Larabel][4], who started Phoronix in 2004, the site "is frequently cited as being the leading source for those interested in computer hardware and Linux. It offers insights regarding the development of the Linux kernel, product reviews, interviews, and news regarding free and open source software." - -I recently had the opportunity to interview Michael about Phoronix and his work. - -The questions and answers have been edited for length and clarity. - -**Don Watkins:** What inspired you to start Phoronix? - -**Michael Larabel:** When I started [Phoronix.com][5] in June 2004, it was still challenging to get a mouse or other USB peripherals working on the popular distributions of the time, like Mandrake, Yoper, MEPIS, and others. So, I set out to work on reviewing different hardware components and their compatibility with Linux. Over time, that shifted more from "does the basic device work?" to how well they perform and what features are supported or unsupported under Linux. - -It's been interesting to see the evolution and the importance of Linux on hardware rise. Linux was very common to LAMP/web servers, but Linux has also become synonymous with high-performance computing (HPC), Android smartphones, cloud software, autonomous vehicles, edge computing, digital signage, and related areas. While Linux hasn't quite dominated the desktop, it's doing great practically everywhere else. - -I also developed the Phoronix Test Suite, with its initial 1.0 public release in 2008, to increase the viability of testing on Linux, engage with more hardware and software vendors on best practices for testing, and just get more test cases running on Linux. At the time, there weren't any really shiny benchmarks on Linux like there were on Windows. - -**DW:** Who are your website's readers? - -**ML:** Phoronix's audience is as diverse as the content. Initially, it was quite desktop/gamer/enthusiast oriented, but as Linux's dominance has grown in HPC, cloud, embedded, etc., my testing has expanded in those areas and thus so has the readership. Readers tend to be interested in open source/Linux ecosystem advancements, performance, and a slight bent towards graphics processor and hardware driver interests. - -**DW:** How important is testing in the Linux world and how has it changed from when you started? - -**ML:** Testing has changed radically since 2004. Back then, many open source projects weren't carrying out any continuous integration (CI) or testing for regressions—both functional issues and performance problems. The hardware vendors supporting Linux were mostly trying to get things working and maintained while being less concerned about performance or scratching away at catching up to Mac, Solaris, and Windows. With time, we've seen the desktop reach close parity with (or exceed, depending upon your views) alternative operating systems. Most PC hardware now works out-of-the-box on Linux, most open source projects engage in some form of CI or testing, and more time and resources are afforded to advancing Linux performance. With high-frequency trading and cloud platforms relying on Linux, performance has become of utmost importance. - -Most of my testing at Phoronix.com is focused on benchmarking processors, graphics cards, storage devices, and other areas of interest to gamers and enthusiasts, but also interesting server platforms. Readers are also quite interested in testing of software components like the Linux kernel, code compilers, and filesystems. But in terms of the Phoronix Test Suite, its scope is rather limitless, with a framework in which new tests can be easily added and automated. There are currently more than 1,000 different profiles/suites, and new ones are routinely added—from machine learning tests to traditional benchmarks. - -**DW:** How important is open source hardware? Where do you see it going? - -**ML:** Open hardware is of increasing importance, especially in light of all the security vulnerabilities and disclosures in recent years. Facebook's work on the [Open Compute Project][6] can be commended, as can Google leveraging [Coreboot][7] in its Chromebook devices, and [Raptor Computing Systems][8]' successful, high-performance, open source POWER9 desktops/workstations/servers. [Intel][9] potentially open sourcing its firmware support package this year is also incredibly tantalizing and will hopefully spur more efforts in this space. - -Outside of that, open source hardware has had a really tough time cracking the consumer space due to the sheer amount of capital necessary and the complexities of designing a modern chip, etc., not to mention competing with the established hardware vendors' marketing budgets and other resources. So, while I would love for 100% open source hardware to dominate—or even compete in features and performance with proprietary hardware—in most segments, that is sadly unlikely to happen, especially with open hardware generally being much more expensive due to economies of scale. - -Software efforts like [OpenBMC][10], Coreboot/[Libreboot][11], and [LinuxBoot][12] are opening up hardware much more. Those efforts at liberating hardware have proven successful and will hopefully continue to be endorsed by more organizations. - -As for [OSHWA][13], I certainly applaud their efforts and the enthusiasm they bring to open source hardware. Certainly, for niche and smaller-scale devices, open source hardware can be a great fit. It will certainly be interesting to see what comes about with OSHWA and some of its partners like Lulzbot, Adafruit, and System76. - -**DW:** Can people install Phoronix Test Suite on their own computers? - -ML: The Phoronix Test Suite benchmarking software is open source under the GPL and can be downloaded from [Phoronix-Test-Suite.com][2] and [GitHub][14]. The benchmarking software works on not only Linux systems but also MacOS, Solaris, BSD, and Windows 10/Windows Server. The Phoronix Test Suite works on x86/x86_64, ARM/AArch64, POWER, RISC-V, and other architectures. - -**DW:** How does [OpenBenchmarking.org][15] work with the Phoronix Test Suite? - -**ML:** OpenBenchmarking.org is, in essence, the "cloud" component to the Phoronix Test Suite. It stores test profiles/test suites in a package manager-like fashion, allows users to upload their own benchmarking results, and offers related functionality around our benchmarking software. - -OpenBenchmarking.org is seamlessly integrated into the Phoronix Test Suite, but from the web interface, it is also where anyone can see the public benchmark results, inspect the open source test profiles to understand their methodology, research hardware and software data, and use similar functionality. - -Another component developed as part of the Phoronix Test Suite is [Phoromatic][16], which effectively allows anyone to deploy their own OpenBenchmarking-like environment within their own private intranet/LAN. This allows organizations to archive their benchmark results locally (and privately), orchestrate benchmarks automatically against groups of systems, manage the benchmark systems, and develop new test cases. - -**DW:** How can people stay up to date on Phoronix? - -**ML:** You can follow [me][17], [Phoronix][18], [Phoronix Test Suite][19], and [OpenBenchMarking.org][20] on Twitter. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/2/phoronix-michael-larabel - -作者:[Don Watkins][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/don-watkins -[b]: https://github.com/lujun9972 -[1]: https://www.phoronix.com/ -[2]: https://www.phoronix-test-suite.com/ -[3]: https://openbenchmarking.org/ -[4]: https://www.michaellarabel.com/ -[5]: http://Phoronix.com -[6]: https://www.opencompute.org/ -[7]: https://www.coreboot.org/ -[8]: https://www.raptorcs.com/ -[9]: https://www.phoronix.com/scan.php?page=news_item&px=Intel-Open-Source-FSP-Likely -[10]: https://en.wikipedia.org/wiki/OpenBMC -[11]: https://libreboot.org/ -[12]: https://linuxboot.org/ -[13]: https://www.oshwa.org/ -[14]: https://github.com/phoronix-test-suite/ -[15]: http://OpenBenchmarking.org -[16]: http://www.phoronix-test-suite.com/index.php?k=phoromatic -[17]: https://twitter.com/michaellarabel -[18]: https://twitter.com/phoronix -[19]: https://twitter.com/Phoromatic -[20]: https://twitter.com/OpenBenchmark diff --git a/sources/talk/20190219 How our non-profit works openly to make education accessible.md b/sources/talk/20190219 How our non-profit works openly to make education accessible.md deleted file mode 100644 index eee670610c..0000000000 --- a/sources/talk/20190219 How our non-profit works openly to make education accessible.md +++ /dev/null @@ -1,136 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How our non-profit works openly to make education accessible) -[#]: via: (https://opensource.com/open-organization/19/2/building-curriculahub) -[#]: author: (Tanner Johnson https://opensource.com/users/johnsontanner3) - -How our non-profit works openly to make education accessible -====== -To build an open access education hub, our team practiced the same open methods we teach our students. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_Education_2_OpenAccess_1040x584_12268077_0614MM.png?itok=xb96iaHe) - -I'm lucky to work with a team of impressive students at Duke University who are leaders in their classrooms and beyond. As members of [CSbyUs][1], a non-profit and student-run organization based at Duke, we connect university students to middle school students, mostly from [title I schools][2] across North Carolina's Research Triangle Park. Our mission is to fuel future change agents from under-resourced learning environments by fostering critical technology skills for thriving in the digital age. - -The CSbyUs Tech R&D team (TRD for short) recently set an ambitious goal to build and deploy a powerful web application over the course of one fall semester. Our team of six knew we had to do something about our workflow to ship a product by winter break. In our middle school classrooms, we teach our learners to use agile methodologies and design thinking to create mobile applications. On the TRD team, we realized we needed to practice what we preach in those classrooms to ship a quality product by semester's end. - -This is the story of how and why we utilized the principles we teach our students in order to deploy technology that will scale our mission and make our teaching resources open and accessible. - -### Setting the scene - -For the past two years, CSbyUs has operated "on the ground," connecting Duke undergraduates to Durham middle schools via after-school programming. After teaching and evaluating several iterations of our unique, student-centered mobile app development curriculum, we saw promising results. Our middle schoolers were creating functional mobile apps, connecting to their mentors, and leaving the class more confident in their computer science skills. Naturally, we wondered how to expand our programming. - -We knew we should take our own advice and lean into web-based technologies to share our work, but we weren't immediately sure what problem we needed to solve. Ultimately, we decided to create a web app that serves as a centralized hub for open source and open access digital education curricula. "CurriculaHub" (name inspired by GitHub) would be the defining pillar of CSbyUs's new website, where educators could share and adapt resources. - -But the vision and implementation didn't happen overnight. - -Given our sense of urgency and the potential of "CurriculaHub," we wanted to start this project with a well defined plan. The stakes were (and are) high, so planning, albeit occasionally tedious, was critical to our success. Like the curriculum we teach, we scaffolded our workflow process with design thinking and agile methodology, two critical 21st century frameworks we often fail to practice in higher ed. - -What follows is a step-wise explanation of our design thinking process, starting from inspiration and ending in a shipped prototype. - -``` -This is the story of how and why we utilized the principles we teach our students in order to deploy technology that will scale our mission and make our teaching resources open and accessible. -``` - -### Our Process - -#### **Step 1: Pre-Work** - -In order to understand the why to our what, you have to know who our team is. - -The members of this team are busy. All of us contribute to CSbyUs beyond our TRD-related responsibilities. As an organization with lofty goals beyond creating a web-based platform, we have to reconcile our "on the ground" commitments (i.e., curriculum curation, research and evaluation, mentorship training and practice, presentations at conferences, etc.) with our "in the cloud" technological goals. - -In addition to balancing time across our organization, we have to be flexible in the ways we communicate. As a remote member of the team, I'm writing this post from Spain, but the rest of our team is based in North Carolina, adding collaboration challenges. - -Before diving into development (or even problem identification), we knew we had to set some clear expectations for how we'd operate as a team. We took a note from our curriculum team's book and started with some [rules of engagement][3]. This is actually [a well-documented approach][4] to setting up a team's [social contract][5] used by teams across the tech space. During a summer internship at IBM, I remember pre-project meetings where my manager and team spent more than an hour clarifying principles of interaction. Whenever we faced uncertainty in our team operations, we'd pull out the rules of engagement and clear things up almost immediately. (An aside: I've found this strategy to be wildly effective not only in my teams, but in all relationships). - -Considering the remote nature of our team, one of our favorite tools is Slack. We use it for almost everything. We can't have sticky-note brainstorms, so we create Slack brainstorm threads. In fact, that's exactly what we did to generate our rules of engagement. One [open source principle we take to heart is transparency][6]; Slack allows us to archive and openly share our thought processes and decision-making steps with the rest of our team. - -#### **Step 2: Empathy Research** - -We're all here for unique reasons, but we find a common intersection: the desire to broaden equity in access to quality digital era education. - -Each member of our team has been lucky enough to study at Duke. We know how it feels to have limitless opportunities and the support of talented peers and renowned professors. But we're mindful that this isn't normal. Across the country and beyond, these opportunities are few and far between. Where they do exist, they're confined within the guarded walls of higher institutes of learning or come with a lofty price tag. - -While our team members' common desire to broaden access is clear, we work hard to root our decisions in research. So our team begins each semester [reviewing][7] [research][8] that justifies our existence. TRD works with CRD (curriculum research and development) and TT (teaching team), our two other CSbyUs sub-teams, to discuss current trends in digital education access, their systemic roots, and novel approaches to broaden access and make materials relevant to learners. We not only perform research collaboratively at the beginning of the semester but also implement weekly stand-up research meetings with the sub-teams. During these, CRD often presents new findings we've gleaned from interviewing current teachers and digging into the current state of access in our local community. They are our constant source of data-driven, empathy-fueling research. - -Through this type of empathy-based research, we have found that educators interested in student-centered teaching and digital era education lack a centralized space for proven and adaptable curricula and lesson plans. The bureaucracy and rigid structures that shape classroom learning in the United States makes reshaping curricula around the personal needs of students daunting and seemingly impossible. As students, educators, and technologists, we wondered how we might unleash the creativity and agency of others by sharing our own resources and creating an online ecosystem of support. - -#### **Step 3: Defining the Problem** - -We wanted to avoid [scope creep][9] caused by a poorly defined mission and vision (something that happens too often in some organizations). We needed structures to define our goals and maintain clarity in scope. Before imagining our application features, we knew we'd have to start with defining our north star. We would generate a clear problem statement to which we could refer throughout development. - -Before imagining our application features, we knew we'd have to start with defining our north star. - -This is common practice for us. Before committing to new programming, new partnerships, or new changes, the CSbyUs team always refers back to our mission and vision and asks, "Does this make sense?" (in fact, we post our mission and vision to the top of every meeting minutes document). If it fits and we have capacity to pursue it, we go for it. And if we don't, then we don't. In the case of a "no," we are always sure to document what and why because, as engineers know, [detailed logs are almost always a good decision][10]. TRD gleaned that big-picture wisdom and implemented a group-defined problem statement to guide our sub-team mission and future development decisions. - -To formulate a single, succinct problem statement, we each began by posting our own takes on the problem. Then, during one of our weekly [30-minute-no-more-no-less stand-up meetings][11], we identified commonalities and differences, ultimately [merging all our ideas into one][12]. Boiled down, we identified that there exist massive barriers for educators, parents, and students to share, modify, and discuss open source and accessible curricula. And of course, our mission would be to break down those barriers with user-centered technology. This "north star" lives as a highly visible document in our Google Drive, which has influenced our feature prioritization and future directions. - -#### **Step 4: Ideating a Solution** - -With our problem defined and our rules of engagement established, we were ready to imagine a solution. - -We believe that effective structures can ensure meritocracy and community. Sometimes, certain personalities dominate team decision-making and leave little space for collaborative input. To avoid that pitfall and maximize our equality of voice, we tend to use "offline" individual brainstorms and merge collective ideas online. It's the same process we used to create our rules of engagement and problem statement. In the case of ideating a solution, we started with "offline" brainstorms of three [S.M.A.R.T. goals][13]. Those goals would be ones we could achieve as a software development team (specifically because the CRD and TT teams offer different skill sets) and address our problem statement. Finally, we wrote these goals in a meeting minutes document, clustering common goals and ultimately identifying themes that describe our application features. In the end, we identified three: support, feedback, and open source curricula. - -From here, we divided ourselves into sub-teams, repeating the goal-setting process with those teams—but in a way that was specific to our features. And if it's not obvious by now, we realized a web-based platform would be the most optimal and scalable solution for supporting students, educators, and parents by providing a hub for sharing and adapting proven curricula. - -To work efficiently, we needed to be adaptive, reinforcing structures that worked and eliminating those that didn't. For example, we put a lot of effort in crafting meeting agendas. We strive to include only those subjects we must discuss in-person and table everything else for offline discussions on Slack or individually organized calls. We practice this in real time, too. During our regular meetings on Google Hangouts, if someone brings up a topic that isn't highly relevant or urgent, the current stand-up lead (a role that rotates weekly) "parking lots" it until the end of the meeting. If we have space at the end, we pull from the parking lot, and if not, we reserve that discussion for a Slack thread. - -This prioritization structure has led to massive gains in meeting efficiency and a focus on progress updates, shared technical hurdle discussions, collective decision-making, and assigning actionable tasks (the next-steps a person has committed to taking, documented with their name attached for everyone to view). - -#### **Step 5: Prototyping** - -This is where the fun starts. - -Our team was only able to unite new people with highly varied experience through the power of open principles and methodologies. - -Given our requirements—like an interactive user experience, the ability to collaborate on blogs and curricula, and the ability to receive feedback from our users—we began identifying the best technologies. Ultimately, we decided to build our web app with a ReactJS frontend and a Ruby on Rails backend. We chose these due to the extensive documentation and active community for both, and the well-maintained libraries that bridge the relationship between the two (e.g., react-on-rails). Since we chose Rails for our backend, it was obvious from the start that we'd work within a Model-View-Controller framework. - -Most of us didn't have previous experience with web development, neither on the frontend nor the backend. So, getting up and running with either technology independently presented a steep learning curve, and gluing the two together only steepened it. To centralize our work, we use an open-access GitHub repository. Given our relatively novice experience in web development, our success hinged on extremely efficient and open collaborations. - -And to explain that, we need to revisit the idea of structures. Some of ours include peer code reviews—where we can exchange best-practices and reusable solutions, maintaining up-to-date tech and user documentation so we can look back and understand design decisions—and (my personal favorite) our questions bot on Slack, which gently reminds us to post and answer questions in a separate Slack #questions channel. - -We've also dabbled with other strategies, like instructional videos for generating basic React components and rendering them in Rails Views. I tried this and in my first video, [I covered a basic introduction to our repository structure][14] and best practices for generating React components. While this proved useful, our team has since realized the wealth of online resources that document various implementations of these technologies robustly. Also, we simply haven't had enough time (but we might revisit them in the future—stay tuned). - -We're also excited about our cloud-based implementation. We use Heroku to host our application and manage data storage. In next iterations, we plan to both expand upon our current features and configure a continuous iteration/continuous development pipeline using services like Jenkins integrated with GitHub. - -#### **Step 6: Testing** - -Since we've [just deployed][1], we are now in a testing stage. Our goals are to collect user feedback across our feature domains and our application experience as a whole, especially as they interact with our specific audiences. Given our original constraints (namely, time and people power), this iteration is the first of many to come. For example, future iterations will allow for individual users to register accounts and post external curricula directly on our site without going through the extra steps of email. We want to scale and maximize our efficiency, and that's part of the recipe we'll deploy in future iterations. As for user testing: We collect user feedback via our contact form, via informal testing within our team, and via structured focus groups. [We welcome your constructive feedback and collaboration][15]. - -Our team was only able to unite new people with highly varied experience through the power of open principles and methodologies. Luckily enough, each one I described in this post is adaptable to virtually every team. - -Regardless of whether you work—on a software development team, in a classroom, or, heck, [even in your family][16]—principles like transparency and community are almost always the best foundation for a successful organization. - - --------------------------------------------------------------------------------- - -via: https://opensource.com/open-organization/19/2/building-curriculahub - -作者:[Tanner Johnson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/johnsontanner3 -[b]: https://github.com/lujun9972 -[1]: http://csbyus.org -[2]: https://www2.ed.gov/programs/titleiparta/index.html -[3]: https://docs.google.com/document/d/1tqV6B6Uk-QB7Psj1rX9tfCyW3E64_v6xDlhRZ-L2rq0/edit -[4]: https://www.atlassian.com/team-playbook/plays/rules-of-engagement -[5]: https://openpracticelibrary.com/practice/social-contract/ -[6]: https://opensource.com/open-organization/resources/open-org-definition -[7]: https://services.google.com/fh/files/misc/images-of-computer-science-report.pdf -[8]: https://drive.google.com/file/d/1_iK0ZRAXVwGX9owtjUUjNz3_2kbyYZ79/view?usp=sharing -[9]: https://www.pmi.org/learning/library/top-five-causes-scope-creep-6675 -[10]: https://www.codeproject.com/Articles/42354/The-Art-of-Logging#what -[11]: https://opensource.com/open-organization/16/2/6-steps-running-perfect-30-minute-meeting -[12]: https://docs.google.com/document/d/1wdPRvFhMKPCrwOG2CGp7kP4rKOXrJKI77CgjMfaaXnk/edit?usp=sharing -[13]: https://www.projectmanager.com/blog/how-to-create-smart-goals -[14]: https://www.youtube.com/watch?v=52kvV0plW1E -[15]: http://csbyus.org/ -[16]: https://opensource.com/open-organization/15/11/what-our-families-teach-us-about-organizational-life diff --git a/sources/talk/20190225 Teaching scientists how to share code.md b/sources/talk/20190225 Teaching scientists how to share code.md deleted file mode 100644 index 541cce2719..0000000000 --- a/sources/talk/20190225 Teaching scientists how to share code.md +++ /dev/null @@ -1,72 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( jiangyaomin) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Teaching scientists how to share code) -[#]: via: (https://opensource.com/article/19/2/open-science-git) -[#]: author: (Jon Tennant https://opensource.com/users/jon-tennant) - -Teaching scientists how to share code -====== -This course teaches them how to set up a GitHub project, index their project in Zenodo, and integrate Git into an RStudio workflow. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_051x_0.png?itok=gIzbmxuI) - -Would it surprise you to learn that most of the world's scholarly research is not owned by the people who funded it or who created it? Rather it's owned by private corporations and locked up in proprietary systems, leading to [problems][1] around sharing, reuse, and reproducibility. - -The open science movement is challenging this system, aiming to give researchers control, ownership, and freedom over their work. The [Open Science MOOC][2] (massively open online community) is a mission-driven project launched in 2018 to kick-start an open scientific revolution and foster more partnerships between open source software and open science. - -The Open Science MOOC is a peer-to-peer community of practice, based around sharing knowledge and ideas, learning new skills, and using these things to develop as individuals so research communities can grow as part of a wider cultural shift towards openness. - -### The curriculum - -The Open Science MOOC is divided into 10 core modules, from the principles of open science to becoming an open science advocate. - -The first module, [Open Research Software and Open Source][3], was released in late 2018. It includes three main tasks, all designed to help make research workflows more efficient and more open for collaboration: - -#### 1\. Setting up your first GitHub project - -GitHub is a powerful project management tool, both for coders and non-coders. This task teaches how to create a community around the platform, select an appropriate license, and write good documentation (including README files, contributing guidelines, and codes of conduct) to foster open collaboration and a welcoming community. - -#### 2\. Indexing your project in Zenodo - -[Zenodo][4] is an open science platform that seamlessly integrates with GitHub to help make projects more permanent, reusable, and citable. This task explains how webhooks between Zenodo and GitHub allow new versions of projects to become permanently archived as they progress. This is critical for helping researchers get a [DOI][5] for their work so they can receive full credit for all aspects of a project. As citations are still a primary form of "academic capital," this is essential for researchers. - -#### 3\. Integrating Git into an RStudio workflow - -This task is about giving research a mega-boost through greater collaborative efficiency and reproducibility. Git enables version control in all forms of text-based content, including data analysis and writing papers. Each time you save your work during the development process, Git saves time-stamped copies. This saves the hassle of trying to "roll back" projects if you delete a file or text by mistake, and eliminates horrific file-naming conventions. (For example, does FINAL_Revised_2.2_supervisor_edits_ver1.7_scream.txt look familiar?) Getting Git to interface with RStudio is the painful part, but this task goes through it, step by step, to ease the stress. - -The third task also gives students the ability to interact directly with the MOOC by submitting pull requests to demonstrate their skills. This also adds their name to an online list of open source champions (aka "open sourcerers"). - -The MOOC's inherently interactive style is much more valuable than listening to someone talk at you, either on or off screen, like with many traditional online courses or educational programs. Each task is backed up by expert-gathered knowledge, so students get a rigorous, dual-learning experience. - -### Empowering researchers - -The Open Science MOOC strives to be as open as possible—this means we walk the walk and talk the talk. We are built upon a solid values-based foundation of freedom and equitable access to research. We see this route towards widespread adoption of best scientific practices as an essential part of the research process. - -Everything we produce is openly developed and openly licensed for maximum engagement, sharing, and reuse. An open source workflow underpins our development. All of this happens openly around channels such as [Slack][6] and [GitHub][7] and helps to make the community much more coherent. - -If we can instill the value of open source into modern research, this would empower current and future generations of researchers to think more about fundamental freedoms around knowledge production. We think that is something worth working towards as a community. - -The Open Science MOOC combines the best elements of the open education, open science, and open source worlds. If you're ready to join, [sign up for the full course][3], which is, of course, free. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/2/open-science-git - -作者:[Jon Tennant][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/jiangyaomin) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/jon-tennant -[b]: https://github.com/lujun9972 -[1]: https://www.theguardian.com/science/political-science/2018/jun/29/elsevier-are-corrupting-open-science-in-europe -[2]: https://opensciencemooc.eu/ -[3]: https://eliademy.com/catalog/oer/module-5-open-research-software-and-open-source.html -[4]: https://zenodo.org/ -[5]: https://en.wikipedia.org/wiki/Digital_object_identifier -[6]: https://osmooc.herokuapp.com/ -[7]: https://open-science-mooc-invite.herokuapp.com/ diff --git a/sources/talk/20190301 What-s happening in the OpenStack community.md b/sources/talk/20190301 What-s happening in the OpenStack community.md deleted file mode 100644 index 28e3bf2fd3..0000000000 --- a/sources/talk/20190301 What-s happening in the OpenStack community.md +++ /dev/null @@ -1,73 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (What's happening in the OpenStack community?) -[#]: via: (https://opensource.com/article/19/3/whats-happening-openstack) -[#]: author: (Jonathan Bryce https://opensource.com/users/jonathan-bryce) - -What's happening in the OpenStack community? -====== - -In many ways, 2018 was a transformative year for the OpenStack Foundation. - -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/travel-mountain-cloud.png?itok=ZKsJD_vb) - -Since 2010, the OpenStack community has been building open source software to run cloud computing infrastructure. Initially, the focus was public and private clouds, but open infrastructure has been pulled into many new important use cases like telecoms, 5G, and manufacturing IoT. - -As OpenStack software matured and grew in scope to support new technologies like bare metal provisioning and container infrastructure, the community widened its thinking to embrace users who deploy and run the software in addition to the developers who build the software. Questions like, "What problems are users trying to solve?" "Which technologies are users trying to integrate?" and "What are the gaps?" began to drive the community's thinking and decision making. - -In response to those questions, the OSF reorganized its approach and created a new "open infrastructure" framework focused on use cases, including edge, container infrastructure, CI/CD, and private and hybrid cloud. And, for the first time, the OSF is hosting open source projects outside of the OpenStack project. - -Following are three highlights from the [OSF 2018 Annual Report][1]; I encourage you to read the entire report for more detailed information about what's new. - -### Pilot projects - -On the heels of launching [Kata Containers][2] in December 2017, the OSF launched three pilot projects in 2018—[Zuul][3], [StarlingX][4], and [Airship][5]—that help further our goals of taking our technology into additional relevant markets. Each project follows the tenets we consider key to the success of true open source, [the Four Opens][6]: open design, open collaboration, open development, and open source. While these efforts are still new, they have been extremely valuable in helping us learn how we should expand the scope of the OSF, as well as showing others the kind of approach we will take. - -While the OpenStack project remained at the core of the team's focus, pilot projects are helping expand usage of open infrastructure across markets and already benefiting the OpenStack community. This has attracted dozens of new developers to the open infrastructure community, which will ultimately benefit the OpenStack community and users. - -There is direct benefit from these contributors working upstream in OpenStack, such as through StarlingX, as well as indirect benefit from the relationships we've built with the Kubernetes community through the Kata Containers project. Airship is similarly bridging the gaps between the Kubernetes and OpenStack ecosystems. This shows users how the technologies work together. A rise in contributions to Zuul has provided the engine for OpenStack CI and keeps our development running smoothly. - -### Containers collaboration - -In addition to investing in new pilot projects, we continued efforts to work with key adjacent projects in 2018, and we made particularly good progress with Kubernetes. OSF staffer Chris Hoge helps lead the cloud provider special interest group, where he has helped standardize how Kubernetes deployments expect to run on top of various infrastructure. This has clarified OpenStack's place in the Kubernetes ecosystem and led to valuable integration points, like having OpenStack as part of the Kubernetes release testing process. - -Additionally, OpenStack Magnum was certified as a Kubernetes installer by the CNCF. Through the Kata Containers community, we have deepened these relationships into additional areas within the container ecosystem resulting in a number of companies getting involved for the first time. - -### Evolving events - -We knew heading into 2018 that the environment around our events was changing and we needed to respond. During the year, we held two successful project team gatherings (PTGs) in Dublin and Denver, reaching capacity for both events while also including new projects and OpenStack operators. We held OpenStack Summits in Vancouver and Berlin, both experiencing increases in attendance and project diversity since Sydney in 2017, with each Summit including more than 30 open source projects. Recognizing this broader audience and the OSF's evolving strategy, the OpenStack Summit was renamed the [Open Infrastructure Summit][7], beginning with the Denver event coming up in April. - -In 2018, we boosted investment in China, onboarding a China Community Manager based in Shanghai and hosting a strategy day in Beijing with 30+ attendees from Gold and Platinum Members in China. This effort will continue in 2019 as we host our first Summit in China: the [Open Infrastructure Summit Shanghai][8] in November. - -We also worked with the community in 2018 to define a new model for events to maximize participation while saving on travel and expenses for the individuals and companies who are increasingly stretched across multiple open source communities. We arrived at a plan that we will implement and iterate on in 2019 where we will collocate PTGs as standalone events adjacent to our Open Infrastructure Summits. - -### Looking ahead - -We've seen impressive progress, but the biggest accomplishment might be in establishing a framework for the future of the foundation itself. In 2018, we advanced the open infrastructure mission by establishing OSF as an effective place to collaborate for CI/CD, container infrastructure, and edge computing, in addition to the traditional public and private cloud use cases. The open infrastructure approach opened a lot of doors in 2018, from the initial release of software from each pilot project, to live 5G demos, to engagement with hyperscale public cloud providers. - -Ultimately, our value comes from the effectiveness of our communities and the software they produce. As 2019 unfolds, our community is excited to apply learnings from 2018 to the benefit of developers, users, and the commercial ecosystem across all our projects. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/whats-happening-openstack - -作者:[Jonathan Bryce][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/jonathan-bryce -[b]: https://github.com/lujun9972 -[1]: https://www.openstack.org/foundation/2018-openstack-foundation-annual-report -[2]: https://katacontainers.io/ -[3]: https://zuul-ci.org/ -[4]: https://www.starlingx.io/ -[5]: https://www.airshipit.org/ -[6]: https://www.openstack.org/four-opens/ -[7]: https://www.openstack.org/summit/denver-2019/ -[8]: https://www.openstack.org/summit/shanghai-2019 diff --git a/sources/talk/20190306 How to pack an IT travel kit.md b/sources/talk/20190306 How to pack an IT travel kit.md deleted file mode 100644 index b05ee460b7..0000000000 --- a/sources/talk/20190306 How to pack an IT travel kit.md +++ /dev/null @@ -1,100 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How to pack an IT travel kit) -[#]: via: (https://opensource.com/article/19/3/it-toolkit-remote) -[#]: author: (Peter Cheer https://opensource.com/users/petercheer) - -How to pack an IT travel kit -====== -Before you travel, make sure you're ready for challenges in hardware, infrastructure, and software. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tools_sysadmin_cloud.png?itok=sUciG0Cn) - -I've had several opportunities to do IT work in less-developed and remote areas, where internet coverage and technology access aren't at the high level we have in our first-world cities. Many people heading off to undeveloped areas ask me for advice on preparing for the local technology landscape. Since conditions vary greatly around this big world, it's impossible to give specific advice for most areas, but I do have some general suggestions based on my experience that may help you. - -Also, before you leave home, do as much research as you can about the general IT and telecom environment where you are traveling so you're a little better prepared for what you may encounter there. - -### Planning for the local hardware and infrastructure - - * Even in many cities, internet connections tend to be expensive, slow, and not reliable for large downloads. Don't forget that internet coverage, speeds, and cost in cities are unlikely to be matched in more remote areas. - - - * The electricity supply may be unreliable with inconsistent voltage. If you are taking your computer, bring some surge protection—although in my experience, the electricity voltage is more likely to drop than to spike. - - - * It is always useful to have a small selection of hand tools, such as screwdrivers and needle-nose pliers, for repairing computer hardware. A lack of spare parts can limit opportunities for much beyond basic troubleshooting, although stripping usable components from dead computers can be worthwhile. - - - -### Planning for the software you'll find - - * You can assume that most of the computer systems you'll find will be some incarnation of Microsoft Windows. You can expect that many will not be officially licensed, not be getting updates nor security patches, and are infected by multiple viruses and other malware. - - - * You can also expect that most application software will be proprietary and much of it will be unlicensed and lag behind the latest release versions. These conditions are depressing for open source enthusiasts, but this is the world as it is, rather than the world we would like it to be. - - - * It is wise to view any Windows system you do not control as potentially infected with viruses and malware. It's good practice to reserve a USB thumb drive for files you'll use with these Windows systems; this means that if (or more likely when) that thumb drive becomes infected, you can just reformat it at no cost. - - - * Bring copies of free antivirus software such as [AVG][1] and [Avast][2], including recent virus definition files for them, as well as virus removal and repair tools such as [Sophos][3] and [Hirens Boot CD][4]. - - - * Trying to keep software current on machines that have no or infrequent access to the internet is a challenge. This is particularly true with web browsers, which tend to go through rapid release cycles. My preferred web browser is Mozilla Firefox and having a copy of the latest release is useful. - - - * Bring repair discs for a selection of recent Microsoft operating systems, and make sure that includes service packs for Windows and Microsoft Office. - - - -### Planning for the software you'll bring - -There's no better way to convey the advantages of open source software than by showing it to people. Here are some recommendations along that line. - - * When gathering software to take with you, make sure you get the full offline installation option. Often, the most prominently displayed download links on websites are stubs that require internet access to download the components. They won't work if you're in an area with poor (or no) internet service. - - - * Also, make sure to get the 32-bit and 64-bit versions of the software. While 32-bit machines are becoming less common, you may encounter them and it's best to be prepared. - - - * Having a [bootable version of Linux][5] is vital for two reasons. First, it can be used to rescue data from a seriously damaged Windows machine. Second, it's an easy way to show off Linux without installing it on someone's machine. [Linux Mint][6] is my favorite distro for this purpose, because the graphical interface (GUI) is similar enough to Windows to appear non-threatening and it includes a good range of application software. - - - * Bring the widest selection of open source applications you can—you can't count on being able to download something from the internet. - - - * When possible, bring your open source software library as portable applications that will run without installing them. One of the many ways to mess up those Windows machines is to install and uninstall a lot of software, and using portable apps gets around this problem. Many open source applications, including Libre Office, GIMP, Blender, and Inkscape, have portable app versions for Windows. - - - * It's smart to bring a supply of blank disks so you can give away copies of your open source software stash on media that is a bit more secure than a USB thumb drive. - - - * Don't forget to bring programs and resources related to projects you will be working on. (For example, most of my overseas work involves tuition, mentoring, and skills transfer, so I usually add a selection of open source software tools for creating learning resources.) - - - -### Your turn - -There are many variables and surprises when doing IT work in undeveloped areas. If you have suggestions—for programs I've missed or tips that I didn't cover—please share them in the comments. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/it-toolkit-remote - -作者:[Peter Cheer][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/petercheer -[b]: https://github.com/lujun9972 -[1]: https://www.avg.com/en-gb/free-antivirus-download -[2]: https://www.avast.com/en-gb/free-antivirus-download -[3]: https://www.sophos.com/en-us/products/free-tools/virus-removal-tool.aspx -[4]: https://www.hiren.info/ -[5]: https://opensource.com/article/18/7/getting-started-etcherio -[6]: https://linuxmint.com/ diff --git a/sources/talk/20190307 Small Scale Scrum vs. Large Scale Scrum.md b/sources/talk/20190307 Small Scale Scrum vs. Large Scale Scrum.md deleted file mode 100644 index 7da83306a5..0000000000 --- a/sources/talk/20190307 Small Scale Scrum vs. Large Scale Scrum.md +++ /dev/null @@ -1,106 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Small Scale Scrum vs. Large Scale Scrum) -[#]: via: (https://opensource.com/article/19/3/small-scale-scrum-vs-large-scale-scrum) -[#]: author: (Agnieszka Gancarczyk https://opensource.com/users/agagancarczyk) - -Small Scale Scrum vs. Large Scale Scrum -====== -We surveyed individual members of small and large scrum teams. Here are some key findings. -![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/BUSINESS_crowdvsopen.png?itok=AFjno_8v) - -Following the publication of the [Small Scale Scrum framework][1], we wanted to collect feedback on how teams in our target demographic (consultants, open source developers, and students) work and what they value. With this first opportunity to inspect, adapt, and help shape the next stage of Small Scale Scrum, we decided to create a survey to capture some data points and begin to validate some of our assumptions and hypotheses. - -**[[Download the Introduction to Small Scale Scrum guide]][2]** - -Our reasons for using the survey were multifold, but chief among them were the global distribution of teams, the small local data sample available in our office, access to customers, and the industry’s utilization of surveys (e.g., the [Stack Overflow Developer Survey 2018][3], [HackerRank 2018 Developer Skills Report][4], and [GitLab 2018 Global Developer Report][5]). - -The scrum’s iterative process was used to facilitate the creation of the survey shown below: - -![](https://opensource.com/sites/default/files/uploads/survey_process.png) - -[The survey][6], which we invite you to complete, consisted of 59 questions and was distributed at a local college ([Waterford Institute of Technology][7]) and to Red Hat's consultancy and engineering teams. Our initial data was gathered from the responses of 54 individuals spread across small and large scrum teams, who were asked about their experiences with agile within their teams. - -Here are the main results and initial findings of the survey: - - * A full 96% of survey participants practice a form of agile, work in distributed teams, think scrum principles help them reduce development complexity, and believe agile contributes to the success of their projects. - - * Only 8% of survey participants belong to small (one- to three-person) teams, and 10 out of 51 describe their typical project as short-lived (three months or less). - - * The majority of survey participants were software engineers, but quality engineers (QE), project managers (PM), product owners (PO), and scrum masters were also represented. - - * Scrum master, PO, and team member are typical roles in projects. - - * Nearly half of survey respondents work on, or are assigned to, more than one project at the same time. - - * Almost half of projects are customer/value-generating vs. improvement/not directly value-generating or unclassified. - - * Almost half of survey participants said that their work is clarified sometimes or most of the time and estimated before development with extensions available sometimes or most of the time. They said asking for clarification of work items is the team’s responsibility. - - * Almost half of survey respondents said they write tests for their code, and they adhere to best coding practices, document their code, and get their code reviewed before merging. - - * Almost all survey participants introduce bugs to the codebase, which are prioritized by them, the team, PM, PO, team lead, or the scrum master. - - * Participants ask for help and mentoring when a task is complex. They also take on additional roles on their projects when needed, including business analyst, PM, QE, and architect, and they sometimes find changing roles difficult. - - * When changing roles on a daily basis, individuals feel they lose one to two hours on average, but they still complete their work on time most of the time. - - * Most survey participants use scrum (65%), followed by hybrid (18%) and Kanban (12%). This is consistent with results of [VersionOne’s State of Agile Report][8]. - - * The daily standup, sprint, sprint planning and estimating, backlog grooming, and sprint retrospective are among the top scrum ceremonies and principles followed, and team members do preparation work before meetings. - - * The majority of sprints (62%) are three weeks long, followed by two-week sprints (26%), one-week sprints (6%), and four-week sprints (4%). Two percent of participants are not using sprints due to strict release and update timings, with all activities organized and planned around those dates. - - * Teams use [planning poker][9] to estimate (storypoint) user stories. User stories contain acceptance criteria. - - * Teams create and use a [Definition of Done][10] mainly in respect to features and determining completion of user stories. - - * The majority of teams don’t have or use a [Definition of Ready][11] to ensure that user stories are actionable, testable, and clear. - - * Unit, integration, functional, automated, performance/load, and acceptance tests are commonly used. - - * Overall collaboration between team members is considered high, and team members use various communication channels. - - * The majority of survey participants spend more than four hours weekly in meetings, including face-to-face meetings, web conferences, and email communication. - - * The majority of customers are considered large, and half of them understand and follow scrum principles. - - * Customers respect “no deadlines” most of the time and sometimes help create user stories and participate in sprint planning, sprint review and demonstration, sprint retrospective, and backlog review and refinement. - - * Only 27% of survey participants know their customers have a high level of satisfaction with the adoption of agile, while the majority (58%) don’t know this information at all. - - - - -These survey results will inform the next stage of our data-gathering exercise. We will apply Small Scale Scrum to real-world projects, and the guidance obtained from the survey will help us gather key data points as we move toward version 2.0 of Small Scale Scrum. If you want to help, take our [survey][6]. If you have a project to which you'd like to apply Small Scale Scrum, please get in touch. - -[Download the Introduction to Small Scale Scrum guide][2] - - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/small-scale-scrum-vs-large-scale-scrum - -作者:[Agnieszka Gancarczyk][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/agagancarczyk -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/article/19/2/small-scale-scrum-framework -[2]: https://opensource.com/downloads/small-scale-scrum -[3]: https://insights.stackoverflow.com/survey/2018/ -[4]: https://research.hackerrank.com/developer-skills/2018/ -[5]: https://about.gitlab.com/developer-survey/2018/ -[6]: https://docs.google.com/forms/d/e/1FAIpQLScAXf52KMEiEzS68OOIsjLtwZJto_XT7A3b9aB0RhasnE_dEw/viewform?c=0&w=1 -[7]: https://www.wit.ie/ -[8]: https://explore.versionone.com/state-of-agile/versionone-12th-annual-state-of-agile-report -[9]: https://en.wikipedia.org/wiki/Planning_poker -[10]: https://www.scruminc.com/definition-of-done/ -[11]: https://www.scruminc.com/definition-of-ready/ diff --git a/sources/talk/20190313 Why is no one signing their emails.md b/sources/talk/20190313 Why is no one signing their emails.md deleted file mode 100644 index b2b862951a..0000000000 --- a/sources/talk/20190313 Why is no one signing their emails.md +++ /dev/null @@ -1,104 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Why is no one signing their emails?) -[#]: via: (https://arp242.net/weblog/signing-emails.html) -[#]: author: (Martin Tournoij https://arp242.net/) - -Why is no one signing their emails? -====== - - -I received this email a while ago: - -> Queensland University of Technology sent you an Amazon.com Gift Card! -> -> You’ve received an Amazon.com gift card! You’ll need the claim code below to place your order. -> -> Happy shopping! - -Queensland University of Technology? Why would they send me anything? Where is that even? Australia right? That’s the other side of the world! Looks like spam! - -It did look pretty good for spam, so I took a second look. And a very close third look, and then I decided it wasn’t spam. - -I was still confused why they sent me this. A week later I remembered: half a year prior I had done an interview regarding my participation on Stack Overflow for someone’s paper; she was studying somewhere in Australia – presumably the university of Queensland. No one had ever mentioned anything about a reward or Amazon gift card so I wasn’t expecting it. It’s a nice bonus though. - -Here’s the thing: I’ve spent several years professionally developing email systems; I administered email servers; I read all the relevant RFCs. While there are certainly people who are more knowledgable, I know more about email than the vast majority of the population. And I still had to take a careful look to verify the email wasn’t a phishing attempt. - -And I’m not even a target; I’m just this guy, you know? [Ask John Podesta what it is to be targeted][1]: - -> SecureWorks concluded Fancy Bear had sent Podesta an email on March 19, 2016, that had the appearance of a Google security alert, but actually contained a misleading link—a strategy known as spear-phishing. [..] The email was initially sent to the IT department as it was suspected of being a fake but was described as “legitimate” in an e-mail sent by a department employee, who later said he meant to write “illegitimate”. - -Yikes! If I was even remotely high-profile I’d be crazy paranoid about all emails I get. - -It seems to me that there is a fairly easy solution to verify the author of an email: sign it with a digital signature; PGP is probably the best existing solution right now. I don’t even care about encryption here, just signing to prevent phishing. - -PGP has a well-deserved reputation for being hard, but that’s only for certain scenarios. A lot of the problems/difficulties stem from trying to accommodate the “random person A emails random person B” use case, but this isn’t really what I care about here. “Large company with millions of users sends thousands of emails daily” is a very different use case. - -Much of the key exchange/web-of-trust dilemma can be bypassed by shipping email clients with keys for large organisations (PayPal, Google, etc.) baked in, like browsers do with some certificates. Even just publishing your key on your website (or, if you’re a bank, in local branches etc.) is already a lot better than not signing anything at all. Right now there seems to be a catch-22 scenario: clients don’t implement better support as very few people are using PGP, while very few companies bother signing their emails with PGP because so few people can benefit from it. - -On the end-user side, things are also not very hard; we’re just conceded with validating signatures, nothing more. For this purpose PGP isn’t hard. It’s like verifying your Linux distro’s package system: all of them sign their packages (usually with PGP) and they get verified on installation, but as an end-user I never see it unless something goes wrong. - -There are many aspects of PGP that are hard to set up and manage, but verifying signatures isn’t one of them. The user-visible part of this is very limited. Remember, no one is expected to sign their own emails: just verify that the signature is correct (which the software will do). Conceptually, it’s not that different from verifying a handwritten signature. - -DKIM and SPF already exist and are useful, but limited. All both do is verify that an email which claims to be from `amazon.com` is really from `amazon.com`. If I send an email from `mail.amazon-account-security.com` or `amazonn.com` then it just verifies that it was sent from that domain, not that it was sent from the organisation Amazon. - -What I am proposing is subtly different. In my (utopian) future every serious organisation will sign their email with PGP (just like every serious organisation uses https). Then every time I get an email which claims to be from Amazon I can see it’s either not signed, or not signed by a key I know. If adoption is broad enough we can start showing warnings such as “this email wasn’t signed, do you want to trust it?” and “this signature isn’t recognized, yikes!” - -There’s also S/MIME, which has better client support and which works more or less the same as HTTPS: you get a certificate from the Certificate Authority Mafia, sign your email with it, and presto. The downside of this is that anyone can sign their emails with a valid key, which isn’t necessarily telling you much (just because haxx0r.ru has a certificate doesn’t mean it’s trustworthy). - -Is it perfect? No. I understand stuff like key exchange is hard and that baking in keys isn’t perfect. Is it better? Hell yes. Would probably have avoided Podesta and the entire Democratic Party a lot of trouble. Here’s a “[sophisticated new phishing campaign][2]” targeted at PayPal users. How “sophisticated”? Well, by not having glaring stupid spelling errors, duplicating the PayPal layout in emails, duplicating the PayPal login screen, a few forms, and getting an SSL certificate. Truly, the pinnacle of Computer Science. - -Okay sure, they spent some effort on it; but any nincompoop can do it; if this passes for “sophisticated phishing” where “it’s easy to see how users could be fooled” then the bar is pretty low. - -I can’t recall receiving a single email from any organisation that is signed (much less encrypted). Banks, financial services, utilities, immigration services, governments, tax services, voting registration, Facebook, Twitter, a zillion websites … all happily sent me emails hoping I wouldn’t consider them spam and hoping I wouldn’t confuse a phishing email for one of theirs. - -Interesting experiment: send invoices for, say, a utility bill for a local provider. Just copy the layout from the last utility bill you received. I’ll bet you’ll make more money than freelancing on UpWork if you do it right. - -I’ve been intending to write this post for years, but never quite did because “surely not everyone is stupid?” I’m not a crypto expert, so perhaps I’m missing something here, but I wouldn’t know what. Let me know if I am. - -In the meanwhile PayPal is attempting to solve the problem by publishing [articles which advise you to check for spelling errors][3]. Okay, it’s good advice, but do we really want this to be the barrier between an attacker and your money? Or Russian hacking groups and your emails? Anyone can sign any email with any key, but “unknown signature” warnings strike me as a lot better UX than “carefully look for spelling errors or misleading domain names”. - -The way forward is to make it straight-forward to implement signing in apps and then just do it as a developer, whether asked or not; just as you set up https whether you’re asked or not. I’ll write a follow-up with more technical details later, assuming no one pokes holes in this article :-) - -#### Response to some feedback - -Some response to some feedback that I couldn’t be bothered to integrate in the article’s prose: - - * “You can’t trust webmail with crypto!” -If you use webmail then you’re already trusting the email provider with everything. What’s so bad with trusting them to verify a signature, too? - -We’re not communicating state secrets over encrypted email here; we’re just verifying the signature on “PayPal sent you a message, click here to view it”-kind of emails. - - * “Isn’t this ignoring the massive problem that is key management?” -Yes, it’s hard problem; but that doesn’t mean it can’t be done. I already mentioned some possible solutions in the article. - - - - -**Footnotes** - - 1. We could make something better; PGP contians a lot of cruft. But for now PGP is “good enough”. - - - - - --------------------------------------------------------------------------------- - -via: https://arp242.net/weblog/signing-emails.html - -作者:[Martin Tournoij][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://arp242.net/ -[b]: https://github.com/lujun9972 -[1]: https://en.wikipedia.org/wiki/Podesta_emails#Data_theft -[2]: https://www.eset.com/us/about/newsroom/corporate-blog/paypal-users-targeted-in-sophisticated-new-phishing-campaign/ -[3]: https://www.paypal.com/cs/smarthelp/article/how-to-spot-fake,-spoof,-or-phishing-emails-faq2340 diff --git a/sources/talk/20190314 Why feedback, not metrics, is critical to DevOps.md b/sources/talk/20190314 Why feedback, not metrics, is critical to DevOps.md deleted file mode 100644 index b2a79226ed..0000000000 --- a/sources/talk/20190314 Why feedback, not metrics, is critical to DevOps.md +++ /dev/null @@ -1,84 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Why feedback, not metrics, is critical to DevOps) -[#]: via: (https://opensource.com/article/19/3/devops-feedback-not-metrics) -[#]: author: (Ranjith Varakantam (Red Hat) https://opensource.com/users/ranjith) - -Why feedback, not metrics, is critical to DevOps -====== - -Metrics can tell you some things, but not the most important things about how your products and teams are doing. - -![CICD with gears][1] - -Most managers and agile coaches depend on metrics over feedback from their teams, users, and even customers. In fact, quite a few use feedback and metrics synonymously, where they present feedback from teams or customers as a bunch of numbers or a graphical representation of those numbers. This is not only unfortunate, but it can be misleading as it presents only part of the story and not the entire truth. - -When it comes to two critical factors—how we manage or guide our teams and how we operate and influence the product that our teams are developing—few exceptional leaders and teams get it right. For one thing, it has become very easy to get your hands on data and metrics. Furthermore, it's still hard to get real feedback from teams and users. It requires significant investments and energy, and unless everyone understands the critical need for it, getting and giving feedback tends to be a low priority and keeps getting pushed to the back burner. - -### How to manage and guide teams - -With the acceptance of agile, a lot of teams have put a ridiculously high value on metrics, such as velocity, burndown charts, cumulative flow diagram (CFD), etc., instead of the value delivered by the team in each iteration or deployment. The focus is on the delivery or output produced without a clear understanding of how this relates to personal performance or implications for the project, product, or service. - -A few managers and agile coaches even abuse the true spirit of agile by misusing metrics to chastise or even penalize their teams. Instead of creating an environment of empowerment, they are slipping back into the command-and-control method where metrics are used to bully teams into submission. - -In our group, the best managers have weekly one-on-one meetings with every team member. These meetings not only give them a real pulse on team morale but also a profound understanding of the project and the decisions being made to move it forward. This weekly feedback loop also helps the team members communicate technical, functional, and even personal issues better. As a result, the team is much more cohesive in understanding the overall project needs and able to make decisions promptly. - -These leaders also skip levels—reaching out to team members two or three levels below them—and have frequent conversations with other group members who interact with their teams on a regular basis. These actions give the managers a holistic picture, which they couldn't get if they relied on feedback from one manager or lead, and help them identify any blind spots the leads and managers may have. - -These one-on-one meetings effectively transform a manager into a coach who has a close understanding of every team member. Like a good coach, these managers both give and receive feedback from the team members regarding the product, decision-making transparency, places where the team feels management is lagging, and areas that are being ignored. This empowers the teams by giving them a voice, not once in a while in an annual meeting or an annual survey, but every week. This is the level where DevOps teams should be in order to deliver their commitments successfully. - -This demands significant investments of time and energy, but the results more than justify it. The alternative is to rely on metrics and annual reviews and surveys, which has failed miserably. Unless we begin valuing feedback over metrics, we will keep seeing the metrics we want to see but failed projects and miserable team morale. - -### Influencing projects and product development - -We see similar behavior on the project or product side, with too few conversations with the users and developers and too much focus on metrics. Let's take the example of a piece of software that was released to the community or market, and the primary success metric is the number of downloads or installs. This can be deceiving for several reasons: - - 1. This product was packaged into another piece of software that users installed; even though the users are not even aware of your product's existence or purpose, it is still counted as a win and something the user needs. - - 2. The marketing team spent a huge budget promoting the product—and even offered an incentive to developers to download it. The _incentive_ drives the downloads, not user need or desire, but the metric is still considered a measure of success. - - 3. Software updates are counted as downloads, even when they are involuntary updates pushed rather than initiated by the user. This keeps bumping up the number, even though the user might have used it once, a year ago, for a specific task. - - - - -In these cases, the user automatically becomes a metric that's used to report how well the product is doing, just based on the fact it was downloaded and it's accepting updates, regardless of whether the user likes or uses the software. Instead, we should be focusing on actual usage of the product and the feedback these users have to offer us, rather than stopping short at the download numbers. - -The same holds true for SaaS products—instead of counting the number of signups, we should look at how often users use the product or service. Signups by themselves have little meaning, especially to the DevOps team where the focus is on getting constant feedback and striving for continuous improvements. - -### Gathering feedback - -So, why do we rely on metrics so much? My guess is they are easy to collect, and the marketing team is more interested in getting the product into the users' hands than evaluating how it is fairing. Unless the engineering team invests quite a bit of time in collecting feedback with tracing, which captures how often the program is executed and which components are used most often, it can be difficult to collect feedback. - -A big advantage of working in an open source community is that we first release the piece of software into a community where we can get feedback. Most open source enthusiasts take the time to log issues and bugs based on their experience with the product. If we can supplement this data with tracing, the team has an accurate record of how the product is used. - -Open as many channels of communication as possible–chat, email, Twitter, etc.—and allow users to choose their feedback channel. - -A few DevOps teams have integrated blue-green deployments, A/B testing, and canary releases to shorten the feedback loop. Setting up these frameworks it is not a trivial matter and calls for a huge upfront investment and constant updates to make them seamlessly work. But once everything is set up and data begins to flow, the team can act upon real feedback based on real user interactions with every new bit of software released. - -Most agile practitioners and lean movement activists push for a build-deploy-measure-learn cycle, and for this to happen, we need to collect feedback in addition to metrics. It might seem expensive and time consuming in the short term, but in the long run, it is a foolproof way of learning. - -### Proof that feedback pays off - -Whether it pertains to people or projects, it pays to rely on first-hand feedback rather than metrics, which are seldom interpreted in impartial ways. We have ample proof of this in other industries, where companies such as Zappos and the Virgin Group have done wonders for their business simply by listening to their customers. There is no reason we cannot follow suit, especially those of us working in open source communities. - -Feedback is the only effective way we can uncover our blind spots. Metrics are not of much help in this regard, as we can't find out what's wrong when we are dealing with unknowns. Blind spots can create serious gaps between reality and what we think we know. Feedback not only encourages continuous improvement, whether it's on a personal or a product level, but the simple act of listening and acting on it increases trust and loyalty. - - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/devops-feedback-not-metrics - -作者:[Ranjith Varakantam (Red Hat)][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ranjith -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cicd_continuous_delivery_deployment_gears.png?itok=kVlhiEkc (CICD with gears) diff --git a/sources/talk/20190319 6 steps to stop ethical debt in AI product development.md b/sources/talk/20190319 6 steps to stop ethical debt in AI product development.md deleted file mode 100644 index 9bfe810a15..0000000000 --- a/sources/talk/20190319 6 steps to stop ethical debt in AI product development.md +++ /dev/null @@ -1,148 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (6 steps to stop ethical debt in AI product development) -[#]: via: (https://opensource.com/article/19/3/ethical-debt-ai-product-development) -[#]: author: (Lauren Maffeo https://opensource.com/users/lmaffeo) - -6 steps to stop ethical debt in AI product development -====== - -Machine bias in artificial intelligence is a known and unavoidable problem—but it is not unmanageable. - -![old school calculator][1] - -It's official: artificial intelligence (AI) isn't the unbiased genius we want it to be. - -Alphabet (Google's parent company) used its latest annual report [to warn][2] that ethical concerns about its products might hurt future revenue. Entrepreneur Joy Buolamwini established the [Safe Face Pledge][3] to prevent abuse of facial analysis technology. - -And years after St. George's Hospital Medical School in London was found to have used AI that inadvertently [screened out qualified female candidates][4], Amazon scrapped a recruiting tool last fall after machine learning (ML) specialists found it [doing the same thing][5]. - -We've learned the hard way that technologies built with AI are biased like people. Left unchecked, the datasets used to train such products can pose [life-or-death consequences][6] for their end users. - -For example, imagine a self-driving car that can't recognize commands from people with certain accents. If the dataset used to train the technology powering that car isn't exposed to enough voice variations and inflections, it risks not recognizing all its users as fully human. - -Here's the good news: Machine bias in AI is unavoidable—but it is _not_ unmanageable. Just like product and development teams work to reduce technical debt, you can [reduce the risk of ethical debt][7] as well. - -Here are six steps that your technical team can start taking today: - -### 1\. Document your priorities upfront - -Reducing ethical debt within your product will require you to answer two key questions in the product specification phase: - - * Which methods of fairness will you use? - * How will you prioritize them? - - - -If your team is building a product based on ML, it's not enough to reactively fix bugs or pull products from shelves. Instead, answer these questions [in your tech spec][8] so that they're included from the start of your product lifecycle. - -### 2\. Train your data under fairness constraints - -This step is tough because when you try to control or eliminate both direct and indirect bias, you'll find yourself in a Catch-22. - -If you train exclusively on non-sensitive attributes, you eliminate direct discrimination but introduce or reinforce indirect bias. - -However, if you train separate classifiers for each sensitive feature, you reintroduce direct discrimination. - -Another challenge is that detection can occur only after you've trained your model. When this occurs, the only recourse is to scrap the model and retrain it from scratch. - -To reduce these risks, don't just measure average strengths of acceptance and rejection across sensitive groups. Instead, use limits to determine what is or isn't included in the model you're training. When you do this, discrimination tests are expressed as restrictions and limitations on the learning process. - -### 3\. Monitor your datasets throughout the product lifecycle - -Developers build training sets based on data they hope the model will encounter. But many don't monitor the data their creations receive from the real world. - -ML products are unique in that they're continuously taking in data. New data allows the algorithms powering these products to keep refining their results. - -But such products often encounter data in deployment that differs from what they were trained on in production. It's also not uncommon for the algorithm to be updated without the model itself being revalidated. - -This risk will decrease if you appoint someone to monitor the source, history, and context of the data in your algorithm. This person should conduct continuous audits to find unacceptable behavior. - -Bias should be reduced as much as possible while maintaining an acceptable level of accuracy, as defined in the product specification. If unacceptable biases or behaviors are detected, the model should be rolled back to an earlier state prior to the first time you saw bias. - -### 4\. Use tagged training data - -We live in a world with trillions of images and videos at our fingertips, but most neural networks can't use this data for one reason: Most of it isn't tagged. - -Tagging refers to which classes are present in an image and their locations. When you tag an image, you share which classes are present and where they're located. - -This sounds simple—until you realize how much work it would take to draw shapes around every single person in a photo of a crowd or a box around every single person on a highway. - -Even if you succeeded, you might rush your tagging and draw your shapes sloppily, leading to a poorly trained neural network. - -The good news is that more products are coming to market so they can decrease the time and cost of tagging. - -As one example, [Brain Builder][9] is a data annotation product from Neurala that uses open source frameworks like TensorFlow and Caffe. Its goal is to help users [manage and annotate their training data][10]. It also aims to bring diverse class examples to datasets—another key step in data training. - -### 5\. Use diverse class examples - -Training data needs positive and negative examples of classes. If you want specific classes of objects, you need negative examples as well. This (hopefully) mimics the data that the algorithm will encounter in the wild. - -Consider the example of “homes” within a dataset. If the algorithm contains only images of homes in North America, it won't know to recognize homes in Japan, Morocco, or other international locations. Its concept of a “home” is thus limited. - -Neurala warns, "Most AI applications require thousands of images to be tagged, and since data tagging cost is proportional to the time spent tagging, this step alone often costs tens to hundreds of thousands of dollars per project." - -Luckily, 2018 saw a strong increase in the number of open source AI datasets. Synced has a helpful [roundup of 10 datasets][11]—from multi-label images to semantic parsing—that were open sourced last year. If you're looking for datasets by industry, GitHub [has a longer list][12]. - -### 6\. Focus on the subject, not the context - -Tech leaders in monitoring ML datasets should aim to understand how the algorithm classifies data. That's because AI sometimes focuses on irrelevant attributes that are shared by several targets in the training set. - -Let's start by looking at the biased training set below. Wolves were tagged standing in snow, but the model wasn't shown images of dogs. So, when dogs were introduced, the model started tagging them as wolves because both animals were standing in snow. In this case, the AI put too much emphasis on the context (a snowy backdrop). - -![Wolves in snow][13] - -Source: [Gartner][14] (full research available for clients) - -By contrast, here is a training set from Brain Builder that is focused on the subject dogs. When monitoring your own training set, make sure the AI is giving more weight to the subject of each image. If you saw an image classifier state that one of the dogs below is a wolf, you would need to know which aspects of the input led to this misclassification. This is a sign to check your training set and confirm that the data is accurate. - -![Dogs training set][15] - -Source: [Brain Builder][16] - -Reducing ethical debt isn't just the “right thing to do”—it also reduces _technical_ debt. Since programmatic bias is so tough to detect, working to reduce it, from the start of your lifecycle, will save you the need to retrain models from scratch. - -This isn't an easy or perfect job; tech teams will have to make tradeoffs between fairness and accuracy. But this is the essence of product management: compromises based on what's best for the product and its end users. - -Strategy is the soul of all strong products. If your team includes measures of fairness and algorithmic priorities from the start, you'll sail ahead of your competition. - -* * * - -_Lauren Maffeo will present_ [_Erase Unconscious Bias From Your AI Datasets_][17] _at[DrupalCon][18] in Seattle, April 8-12, 2019._ - -* * * - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/ethical-debt-ai-product-development - -作者:[Lauren Maffeo][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/lmaffeo -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/math_money_financial_calculator_colors.jpg?itok=_yEVTST1 (old school calculator) -[2]: https://www.yahoo.com/news/google-warns-rise-ai-may-181710642.html?soc_src=mail&soc_trk=ma -[3]: https://www.safefacepledge.org/ -[4]: https://futurism.com/ai-bias-black-box -[5]: https://uk.reuters.com/article/us-amazon-com-jobs-automation-insight/amazon-scraps-secret-ai-recruiting-tool-that-showed-bias-against-women-idUKKCN1MK08G -[6]: https://opensource.com/article/18/10/open-source-classifiers-ai-algorithms -[7]: https://thenewstack.io/tech-ethics-new-years-resolution-dont-build-software-you-will-regret/ -[8]: https://eng.lyft.com/awesome-tech-specs-86eea8e45bb9 -[9]: https://www.neurala.com/tech -[10]: https://www.roboticsbusinessreview.com/ai/brain-builder-neurala-video-annotation/ -[11]: https://medium.com/syncedreview/2018-in-review-10-open-sourced-ai-datasets-696b3b49801f -[12]: https://github.com/awesomedata/awesome-public-datasets -[13]: https://opensource.com/sites/default/files/uploads/wolves_in_snow.png (Wolves in snow) -[14]: https://www.gartner.com/doc/3889586/control-bias-eliminate-blind-spots -[15]: https://opensource.com/sites/default/files/uploads/ai_ml_canine_recognition.png (Dogs training set) -[16]: https://www.neurala.com/ -[17]: https://events.drupal.org/seattle2019/sessions/erase-unconscious-bias-your-ai-datasets -[18]: https://events.drupal.org/seattle2019 diff --git a/sources/talk/20190319 Hello World Marketing (or, How I Find Good, Boring Software).md b/sources/talk/20190319 Hello World Marketing (or, How I Find Good, Boring Software).md deleted file mode 100644 index 02f7e3fcac..0000000000 --- a/sources/talk/20190319 Hello World Marketing (or, How I Find Good, Boring Software).md +++ /dev/null @@ -1,100 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Hello World Marketing (or, How I Find Good, Boring Software)) -[#]: via: (https://theartofmachinery.com/2019/03/19/hello_world_marketing.html) -[#]: author: (Simon Arneaud https://theartofmachinery.com) - -Hello World Marketing (or, How I Find Good, Boring Software) -====== - -Back in 2001 Joel Spolsky wrote his classic essay [“Good Software Takes Ten Years. Get Used To it”][1]. Nothing much has changed since then: software is still taking around a decade of development to get good, and the industry is still getting used to that fact. Unfortunately, the industry has investors who want to see hockey stick growth rates on software that’s a year old or less. The result is an antipattern I like to call “Hello World Marketing”. Once you start to notice it, you see it everywhere, and it’s a huge red flag when choosing software tools. - - -Of course, by “Hello World”, I’m referring to the programmer’s traditional first program: the one that just displays the message “Hello World”. The aim isn’t to make a useful program; it’s to make a minimal starting point. - -Hello World Marketing is about doing the same thing, but pretending that it’s useful. You’re supposed to be distracted into admiring how neatly a tool solves trivial problems, and forget about features you’ll need in real applications. HWM emphasises what can be done in the first five minutes, and downplays what you might need after several months. HWMed software is optimised for looking good in demos, and sounding exciting in blog posts and presentations. - -For a good example, see Nemil Dalal’s [great series of articles about the early marketing for MongoDB][2]. Notice the heavy use of hackathons, and that a lot of the marketing was about how “SQL looks like COBOL”. Now, I can criticise SQL, too, but if `SELECT` and `WHERE` are serious problems for an application, there are already hundreds of solutions like [SQLAlchemy][3] and [LINQ][4] — solutions that don’t compromise on more advanced features of traditional databases. On the other hand, if you were wondering about those advanced features, you could read vomity-worthy, hand-wavey pieces like “[Living in the post-transactional database future][5]”. - -### How I Find Good, Boring Software - -Obviously, one way to avoid HWM is to stick to software that’s much more than ten years old, and has a good reputation. But sometimes that’s not possible because the tools for a problem only came out during the last decade. Also, sometimes newer tools really do bring new benefits. - -However, it’s much harder to rely on reputation for newer software because “good reputation” often just means “popular”, which often just means “current fad”. Thankfully, there’s a simple and effective trick to avoid being dazzled by hype: just look elsewhere. Instead of looking at the marketing for the core features, look at the things that are usually forgotten. Here are the kinds of things I look at: - -#### Backups and Disaster Recovery - -Backup support is both super important and regularly an afterthought. - -The minimum viable product is full data dump/import functionality, but longer term it’s nice to have things like incremental backups. Some vendors will try to tell you to just copy the data files from disk, but this isn’t guaranteed to give you a consistent snapshot if the software is running live. - -There’s no point backing up data if you can’t restore it, and restoration is the difficult part. Yet many people never test the restoration (until they actually need it). About five years ago I was working with a team that had started using a new, cutting-edge, big-data database. The database looked pretty good, but I suggested we do an end-to-end test of the backup support. We loaded a cluster with one of the multi-terabyte datasets we had, did a backup, wiped the data in the cluster and then tried to restore it. Turns out we were the first people to actually try to restore a dataset of that size — the backup “worked”, but the restoration caused the cluster to crash and burn. We filed a bug report with the original database developers and they fixed it. - -Backup processes that work on small test datasets but fail on large production datasets is a recurring theme. I always recommend testing on production-sized datasets, and testing again as production data grows. - -For batch jobs, a related concept is restartability. If you’re copying large amounts of data from one place to another, and the job gets interrupted in the middle, what happens? Can you keep going from the middle? Alternatively, can you safely retry by starting from the beginning? - -#### Configuration - -A lot of HWMed software can only be configured using a GUI or web UI because that’s what’s obvious and looks good in demos and docs. For one thing, this usually means there’s no good way to back up or restore the configuration. So if a team of people use a shared instance over a year or so, forget about trying to restore it if (or when) it breaks. It’s also much more work to keep multiple deployments consistent (e.g., for dev, testing and prod environments) using separate GUIs. In practice, it just doesn’t happen. - -I prefer a well-commented config file for software I deploy, if nothing else because it can be checked into source control, and I know I can reproduce the deployment using nothing but what’s checked into source control. If something is configured using a UI, I look for a config export/import function. Even then, that feature is often an afterthought, and often imcomplete, so it’s worth testing if it’s possible to deploy the software without ever needing to manually tweak something in the UI. - -There seems to be a recent trend for software to be configured using a REST API instead. Honestly, this is the worst of both config files and GUI-based config, and most of the time people end up using [hacky ways to put the config into a file instead][6]. - -#### Upgrades - -Life would be much easier if everything were static; software upgrade support makes everything more complicated. It’s also not usually shown in demos, so the first upgrade often ends the honeymoon with shiny, new software. - -For HA distributed systems, you’ll need support for graceful shutdown and a certain amount of forward _and_ backwards compatibility (because you’ll have multiple versions running during upgrades). It’s a common mistake to forget about downgrade support. - -Distributed systems are simpler when components have independent replicas that don’t communicate with each other. Anything with clustering (or, worse, consensus algorithms) is often extra tricky to upgrade, and worth testing. - -Things that support horizontal scaling don’t necessarily support rescaling without downtime. This is especially true whenever sharding is involved because live resharding isn’t trivial. - -Here’s a story from a certain popular container app platform. Demos showed how easy it was to launch an app on the platform, and then showed how easy it was to scale it to multiple replicas. What they didn’t show was the upgrade process: When you pushed a new version of your app, the first thing the platform did was _shut down all running instances of it_. Then it would upload the code to a build server and start building it — meaning downtime for however long the build took, plus the time needed to roll out the new version (if it worked). This problem has been fixed in newer releases of the platform. - -#### Security - -Even if software has no built-in access control, all-or-nothing access control is easy to implement (e.g., using a reverse proxy with HTTP basic auth). The harder problem is fine-grained access control. Sometimes you don’t care, but in some environments it makes a big difference to what features you can even use. - -Some immature software has a quick-and-dirty implementation of user-based access control, typically with a GUI for user management. For everything except the core business tool, this isn’t very useful. For human users, every project I’ve worked on has either been with a small team that just shared a single username/password, or with a large team that wanted integration with OpenID Connect, or LDAP, or whatever centralised single-sign-on (SSO) system was used by the organisation. No one wants to manually manage credentials for every tool, every time someone joins or leaves. Similarly, credentials for applications or other non-human users are better generated using an automatable approach — like a config file or API. - -Immature implementations of access control are often missing anything like user groups, but managing permissions at the user level is a time waster. Some SSO integrations only integrate users, not groups, which is a “so close yet so far” when it comes to avoiding permissions busywork. - -#### Others - -I talked about ignoring the hype, but there’s one good signal you can get from the marketing: whether the software is branded as “enterprise” software. Enterprise software is normally bought by someone other than the end user, so it’s usually pleasant to buy but horrible to use. The only exceptions I know of are enterprise versions of normal consumer software, and enterprise software that the buyer will also have to use. Be warned: even if a company sells enterprise software alongside consumer software, there’s no guarantee that they’re just different versions of the same product. Often they’ll be developed by separate teams with different priorities. - -A lot of the stuff in this post can be checked just by skimming through the documentation. If a tool stores data, but the documentation doesn’t mention backups, there probably isn’t any backup suppport. Even if there is and it’s just not documented, that’s not exactly a good sign either. So, sure, documentation quality is worth evaluating by itself. On the other hand, sometimes the documentation is better than the product, so I never trust a tool until I’ve actually tried it out. - -When I first saw Python, I knew that it was a terrible programming language because of the way it used whitespace indentation. Yeah, that was stupid. Later on I learned that 1) the syntax wasn’t a big deal, especially when I’m already indenting C-like languages in the same way, and 2) a lot of practical problems can be solved just by gluing libraries together with a few dozen lines of Python, and that was really useful. We often have strong opinions about syntax that are just prejudice. Syntax can matter, but it’s less important than how the tool integrates with the rest of the system. - -### Weighing Pros and Cons - -You never need to do deep analysis to detect the most overhyped products. Just check a few of these things and they’ll fail spectacularly. - -Even with software that looks solid, I still like to do more tests before entrusting a serious project with it. That’s not because I’m looking for excuses to nitpick and use my favourite tool instead. New tools often really do bring new benefits. But it’s much better to understand the pros and cons of new software, and to use it because the pros outweigh the cons, not because of how slick the Hello World demo is. - --------------------------------------------------------------------------------- - -via: https://theartofmachinery.com/2019/03/19/hello_world_marketing.html - -作者:[Simon Arneaud][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://theartofmachinery.com -[b]: https://github.com/lujun9972 -[1]: https://www.joelonsoftware.com/2001/07/21/good-software-takes-ten-years-get-used-to-it/ -[2]: https://www.nemil.com/mongo/ -[3]: https://www.sqlalchemy.org/ -[4]: https://msdn.microsoft.com/en-us/library/bb308959.aspx -[5]: https://www.mongodb.com/post/36151042528/post-transactional-future -[6]: /2017/07/15/use_terraform_with_vault.html diff --git a/sources/talk/20190320 Managing changes in open source projects.md b/sources/talk/20190320 Managing changes in open source projects.md deleted file mode 100644 index efcd5257b5..0000000000 --- a/sources/talk/20190320 Managing changes in open source projects.md +++ /dev/null @@ -1,97 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Managing changes in open source projects) -[#]: via: (https://opensource.com/article/19/3/managing-changes-open-source-projects) -[#]: author: (Ben Cotton (Red Hat, Community Moderator) https://opensource.com/users/bcotton) - -Managing changes in open source projects -====== - -Here's how to create a visible change process to support the community around an open source project. - -![scrabble letters: "time for change"][1] - -Why bother having a process for proposing changes to your open source project? Why not just let people do what they're doing and merge the features when they're ready? Well, you can certainly do that if you're the only person on the project. Or maybe if it's just you and a few friends. - -But if the project is large, you might need to coordinate how some of the changes land. Or, at the very least, let people know a change is coming so they can adjust if it affects the parts they work on. A visible change process is also helpful to the community. It allows them to give feedback that can improve your idea. And if nothing else, it lets people know what's coming so that they can get excited, and maybe get you a little bit of coverage on Opensource.com or the like. Basically, it's "here's what I'm going to do" instead of "here's what I did," and it might save you some headaches as you scramble to QA right before your release. - -So let's say I've convinced you that having a change process is a good idea. How do you build one? - -**[Watch my talk on this topic]** - - -### Right-size your change process - -Before we start talking about what a change process looks like, I want to make it very clear that this is not a one-size-fits-all situation. The smaller your project is—mainly in the number of contributors—the less process you'll probably need. As [Richard Hackman says][2], the number of communication channels in a team goes up exponentially with the number of people on the team. In community-driven projects, this becomes even more complicated as people come and go, and even your long-time contributors might not be checking in every day. So the change process consolidates those communication channels into a single area where people can quickly check to see if they care and then get back to whatever it is they do. - -At one end of the scale, there's the command-line Twitter client I maintain. The change process there is, "I pick something I want to work on, probably make a Git branch for it but I might forget that, merge it, and tag a release when I'm out of stuff that I can/want to do." At the other end is Fedora. Fedora isn't really a single project; it's a program of related projects that mostly move in the same direction. More than 200 people a week touch Fedora in a technical sense: spec file maintenance, build submission, etc. This doesn't even include the untold number of people who are working on the upstreams. And these upstreams all have their own release schedules and their own processes for how features land and when. Nobody can keep up with everything on their own, so the change process brings important changes to light. - -### Decide who needs to review changes - -One of the first things you need to consider when putting together a change process for your community is: "who needs to review changes?" This isn't necessarily approving the changes; we'll come to that shortly. But are there people who should take a look early in the process? Maybe your release engineering or infrastructure teams need to review them to make sure they don't require changes to build infrastructure. Maybe you have a legal review process to make sure licenses are in order. Or maybe you just have a change wrangler who looks to make sure all the required information is included. Or you may choose to do none of these and have change proposals go directly to the community. - -But this brings up the next step. Do you want full community feedback or only a select group to provide feedback? My preference, and what we do in Fedora, is to publish changes to the community before they're approved. But the structure of your community may fit a model where some approval body signs off on the change before it is sent to the community as an announcement. - -### Determine who approves changes - -Even if you lack any sort of organizational structure, someone ends up approving changes. This should reflect the norms and values of your community. The simplest form of approval is the person who proposed the change implements it. Easy peasy! In loosely organized communities, that might work. Fully democratic communities might put it to a community-wide vote. If a certain number or proportion of members votes in favor, the change is approved. Other communities may give that power to an individual or group. They could be responsible for the entire project or certain subsections. - -In Fedora, change approval is the role of the Fedora Engineering Steering Committee (FESCo). This is a nine-person body elected by community members. This gives the community the ability to remove members who are not acting in the best interests of the project but also enables relatively quick decisions without large overhead. - -In much of this article, I am simply presenting information, but I'm going to take a moment to be opinionated. For any project with a significant contributor base, a model where a small body makes approval decisions is the right approach. A pure democracy can be pretty messy. People who may have no familiarity with the technical ramifications of a change will be able to cast a binding vote. And that process is subject to "brigading," where someone brings along a large group of otherwise-uninterested people to support their position. Think about what it might look like if someone proposed changing the default text editor. Would the decision process be rational? - -### Plan how to enforce changes - -The other advantage of having a defined approval body is it can mediate conflicts between changes. What happens if two proposed changes conflict? Or if a change turns out to have a negative impact? Someone needs to have the authority to say "this isn't going in after all" or make sure conflicting changes are brought into agreement. Your QA team and processes will be a part of this, and maybe they're the ones who will make the final call. - -It's relatively straightforward to come up with a plan if a change doesn't work as expected or is incomplete by the deadline. If you require a contingency plan as part of the change process, then you implement that plan. The harder part is: what happens if someone makes a change that doesn't go through your change process? Here's a secret your friendly project manager doesn't want you to know: you can't force people to go through your process, particularly in community projects. - -So if something sneaks in and you don't discover it until you have a release candidate, you have a couple of options: you can let it in, or you can get someone to forcibly remove it. In either case, you'll have someone who is very unhappy. Either the person who made the change, because you kicked their work out, or the people who had to deal with the breakage it caused. (If it snuck in without anyone noticing, then it's probably not that big of a deal.) - -The answer, in either case, is going to be social pressure to follow the process. Processes are sometimes painful to follow, but a well-designed and well-maintained process will give more benefit than it costs. In this case, the benefit may be identifying breakages sooner or giving other developers a chance to take advantage of new features that are offered. And it can help prevent slips in the release schedule or hero effort from your QA team. - -### Implement your change process - -So we've thought about the life of a change proposal in your project. Throw in some deadlines that make sense for your release cadence, and you can now come up with the policy—but how do you implement it? - -First, you'll want to identify the required information for a change proposal. At a minimum, I'd suggest the following. You may have more requirements depending on the specifics of what your community is making and how it operates. - - * Name and summary - * Benefit to the project - * Scope - * Owner - * Test plan - * Dependencies and impacts - * Contingency plan - - - -You'll also want one or several change wranglers. These aren't gatekeepers so much as shepherds. They may not have the ability to approve or reject change proposals, but they are responsible for moving the proposals through the process. They check the proposal for completeness, submit it to the appropriate bodies, make appropriate announcements, etc. You can have people wrangle their own changes, but this can be a specialized task and will generally benefit from a dedicated person who does this regularly, instead of making community members do it less frequently. - -And you'll need some tooling to manage these changes. This could be a wiki page, a kanban board, a ticket tracker, something else, or a combination of these. But basically, you want to be able to track their state and provide some easy reporting on the status of changes. This makes it easier to know what is complete, what is at risk, and what needs to be deferred to a later release. You can use whatever works best for you, but in general, you'll want to minimize copy-and-pasting and maximize scriptability. - -### Remember to iterate - -Your change process may seem perfect. Then people will start using it. You'll discover edge cases you didn't consider. You'll find that the community hates a certain part of it. Decisions that were once valid will become invalid over time as technology and society change. In Fedora, our Features process revealed itself to be ambiguous and burdensome, so it was refined into the [Changes][3] process we use today. Even though the Changes process is much better than its predecessor, we still adjust it here and there to make sure it's best meeting the needs of the community. - -When designing your process, make sure it fits the size and values of your community. Consider who gets a voice and who gets a vote in approving changes. Come up with a plan for how you'll handle incomplete changes and other exceptions. Decide who will guide the changes through the process and how they'll be tracked. And once you design your change policy, write it down in a place that's easy for your community to find so that they can follow it. But most of all, remember that the process is here to serve the community; the community is not here to serve the process. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/managing-changes-open-source-projects - -作者:[Ben Cotton (Red Hat, Community Moderator)][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/bcotton -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/change_words_scrabble_letters.jpg?itok=mbRFmPJ1 (scrabble letters: "time for change") -[2]: https://hbr.org/2009/05/why-teams-dont-work -[3]: https://fedoraproject.org/wiki/Changes/Policy diff --git a/sources/talk/20190323 How to transition into a Developer Relations career.md b/sources/talk/20190323 How to transition into a Developer Relations career.md deleted file mode 100644 index 40de0edf21..0000000000 --- a/sources/talk/20190323 How to transition into a Developer Relations career.md +++ /dev/null @@ -1,74 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How to transition into a Developer Relations career) -[#]: via: (https://opensource.com/article/19/3/developer-relations-career) -[#]: author: (Mary Thengvall https://opensource.com/users/marygrace-0) - -How to transition into a Developer Relations career -====== - -Combine your love for open source software with your love for the community in a way that allows you to invest your time in both. - -![][1] - -Let's say you've found an open source project you really love and you want to do more than just contribute. Or you love coding, but you don't want to spend the rest of your life interacting more with your computer than you do with people. How do you combine your love for open source software with your love for the community in a way that allows you to invest your time in both? - -### Developer Relations: A symbiotic relationship - -Enter community management, or as it's more commonly called in the tech industry, Developer Relations (DevRel for short). The goal of DevRel is, at its core, to empower developers. From writing content and creating documentation to supporting local meetups and bubbling up developer feedback internally, everything that a Developer Relations professional does on a day-to-day basis is for the benefit of the community. That's not to say that it doesn't benefit the company as well! After all, as Developer Relations professionals understand, if the community succeeds, so will the company. It's the best kind of symbiotic relationship! - -These hybrid roles have been around since shortly after the open source and free software movements started, but the Developer Relations industry—and the Developer Advocate role, in particular—have exploded over the past few years. So what is Developer Relations exactly? Let's start by defining "community" so that we're all on the same page: - -> **Community:** A group of people who not only share common principles, but also develop and share practices that help individuals in the group thrive. - -This could be a group of people who have gathered around an open source project, a particular topic such as email, or who are all in a similar job function—the DevOps community, for instance. - -As I mentioned, the role of a DevRel team is to empower the community by building up, encouraging, and amplifying the voice of the community members. While this will look slightly different at every company, depending on its goals, priorities, and direction, there are a few themes that are consistent throughout the industry. - - 1. **Listen:** Before making any plans or goals, take the time to listen. - * _Listen to your company stakeholders:_ What do they expect of your team? What do they think you should be responsible for? What metrics are they accustomed to? And what business needs do they care most about? - * _Listen to your customer community:_ What are customers' biggest pain points with your product? Where do they struggle with onboarding? Where does the documentation fail them? - * _Listen to your product's technical audience:_ What problems are they trying to solve? What could be done to make their work life easier? Where do they get their content? What technological advances are they most excited about? - - - 2. **Gather information** -Based on these answers, you can start making your plan. Find the overlapping areas where you can make your product a better fit for the larger technical audience and also make it easier for your customers to use. Figure out what content you can provide that not only answers your community's questions but also solves problems for your company's stakeholders. Learn about the areas where your co-workers struggle and see where your strengths can supplement those needs. - - - 3. **Make connections** -Above all, community managers are responsible for making connections within the community as well as between community members and coworkers. These connections, or "DevRel qualified leads," are what ultimately shows the business value of a community manager's work. By making connections between community members Marie and Bob, who are both interested in the latest developments in Python, or between Marie and your coworker Phil, who's responsible for developer-focused content on your website, you're making your community a valuable source of information for everyone around you. - - - -By getting to know your technical community, you become an expert on what customer needs your product can meet. With great power comes great responsibility. As the expert, you are now responsible for advocating internally for those needs, and you have the potential to make a big difference for your community. - -### Getting started - -So now what? If you're still with me, congratulations! You might just be a good fit for a Community Manager or Developer Advocate role. I'd encourage you to take community work for a test drive and see if you like the pace and the work. There's a lot of context switching and moving around between tasks, which can be a bit of an adjustment for some folks. - -Volunteer to write a blog post for your marketing team (or for [Opensource.com][2]) or help out at an upcoming conference. Apply to speak at a local meetup or offer to advise on a few technical support cases. Get to know your community members on a deeper level. - -Above all, Community Managers are 100% driven by a passion for building technical communities and bringing people together. If that resonates with you, it may be time for a career change! - -I love talking to professionals that help others grow through community and Developer Relations practices. Don't hesitate to [reach out to me][3] if you have any questions or send me a [DM on Twitter][4]. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/developer-relations-career - -作者:[Mary Thengvall][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/marygrace-0 -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/resume_career_document_general.png?itok=JEaFL2XI -[2]: https://opensource.com/how-submit-article -[3]: https://www.marythengvall.com/about -[4]: http://twitter.com/mary_grace diff --git a/sources/talk/20190328 Continuous response- The essential process we-re ignoring in DevOps.md b/sources/talk/20190328 Continuous response- The essential process we-re ignoring in DevOps.md deleted file mode 100644 index f0f0190742..0000000000 --- a/sources/talk/20190328 Continuous response- The essential process we-re ignoring in DevOps.md +++ /dev/null @@ -1,115 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Continuous response: The essential process we're ignoring in DevOps) -[#]: via: (https://opensource.com/article/19/3/continuous-response-devops) -[#]: author: (Randy Bias https://opensource.com/users/randybias) - -Continuous response: The essential process we're ignoring in DevOps -====== -You probably practice CI and CD, but if you aren't thinking about -continuous response, you aren't really doing DevOps. -![CICD with gears][1] - -Continuous response (CR) is an overlooked link in the DevOps process chain. The two other major links—[continuous integration (CI) and continuous delivery (CD)][2]—are well understood, but CR is not. Yet, CR is the essential element of follow-through required to make customers happy and fulfill the promise of greater speed and agility. At the heart of the DevOps movement is the need for greater velocity and agility to bring businesses into our new digital age. CR plays a pivotal role in enabling this. - -### Defining CR - -We need a crisp definition of CR to move forward with breaking it down. To put it into context, let's revisit the definitions of continuous integration (CI) and continuous delivery (CD). Here are Gartner's definitions when I wrote this them down in 2017: - -> [Continuous integration][3] is the practice of integrating, building, testing, and delivering functional software on a scheduled, repeatable, and automated basis. -> -> Continuous delivery is a software engineering approach where teams keep producing valuable software in short cycles while ensuring that the software can be reliably released at any time. - -I propose the following definition for CR: - -> Continuous response is a practice where developers and operators instrument, measure, observe, and manage their deployed software looking for changes in performance, resiliency, end-user behavior, and security posture and take corrective actions as necessary. - -We can argue about whether these definitions are 100% correct. They are good enough for our purposes, which is framing the definition of CR in rough context so we can understand it is really just the last link in the chain of a holistic cycle. - -![The holistic DevOps cycle][4] - -What is this multi-colored ring, you ask? It's the famous [OODA Loop][5]. Before continuing, let's touch on what the OODA Loop is and why it's relevant to DevOps. We'll keep it brief though, as there is already a long history between the OODA Loop and DevOps. - -#### A brief aside: The OODA Loop - -At the heart of core DevOps thinking is using the OODA Loop to create a proactive process for evolving and responding to changing environments. A quick [web search][6] makes it easy to learn the long history between the OODA Loop and DevOps, but if you want the deep dive, I highly recommend [The Tao of Boyd: How to Master the OODA Loop][7]. - -Here is the "evolved OODA Loop" presented by John Boyd: - -![OODA Loop][8] - -The most important thing to understand about the OODA Loop is that it's a cognitive process for adapting to and handling changing circumstances. - -The second most important thing to understand about the OODA Loop is, since it is a thought process that is meant to evolve, it depends on driving feedback back into the earlier parts of the cycle as you iterate. - -As you can see in the diagram above, CI, CD, and CR are all their own isolated OODA Loops within the overall DevOps OODA Loop. The key here is that each OODA Loop is an evolving thought process for how test, release, and success are measured. Simply put, those who can execute on the OODA Loop fastest will win. - -Put differently, DevOps wants to drive speed (executing the OODA Loop faster) combined with agility (taking feedback and using it to constantly adjust the OODA Loop). This is why CR is a vital piece of the DevOps process. We must drive production feedback into the DevOps maturation process. The DevOps notion of Culture, Automation, Measurement, and Sharing ([CAMS][9]) partially but inadequately captures this, whereas CR provides a much cleaner continuation of CI/CD in my mind. - -### Breaking CR down - -CR has more depth and breadth than CI or CD. This is natural, given that what we're categorizing is the post-deployment process by which our software is taking a variety of actions from autonomic responses to analytics of customer experience. I think, when it's broken down, there are three key buckets that CR components fall into. Each of these three areas forms a complete OODA Loop; however, the level of automation throughout the OODA Loop varies significantly. - -The following table will help clarify the three areas of CR: - -CR Type | Purpose | Examples ----|---|--- -Real-time | Autonomics for availability and resiliency | Auto-scaling, auto-healing, developer-in-the-loop automated responses to real-time failures, automated root-cause analysis -Analytic | Feature/fix pipeline | A/B testing, service response times, customer interaction models -Predictive | History-based planning | Capacity planning, hardware failure prediction models, cost-basis analysis - -_Real-time CR_ is probably the best understood of the three. This kind of CR is where our software has been instrumented for known issues and can take an immediate, automated response (autonomics). Examples of known issues include responding to high or low demand (e.g., elastic auto-scaling), responding to expected infrastructure resource failures (e.g., auto-healing), and responding to expected distributed application failures (e.g., circuit breaker pattern). In the future, we will see machine learning (ML) and similar technologies applied to automated root-cause analysis and event correlation, which will then provide a path towards "no ops" or "zero ops" operational models. - -_Analytic CR_ is still the most manual of the CR processes. This kind of CR is focused primarily on observing end-user experience and providing feedback to the product development cycle to add features or fix existing functionality. Examples of this include traditional A/B website testing, measuring page-load times or service-response times, post-mortems of service failures, and so on. - -_Predictive CR_ , due to the resurgence of AI and ML, is one of the innovation areas in CR. It uses historical data to predict future needs. ML techniques are allowing this area to become more fully automated. Examples include automated and predictive capacity planning (primarily for the infrastructure layer), automated cost-basis analysis of service delivery, and real-time reallocation of infrastructure resources to resolve capacity and hardware failure issues before they impact the end-user experience. - -### Diving deeper on CR - -CR, like CI or CD, is a DevOps process supported by a set of underlying tools. CI and CD are not Jenkins, unit tests, or automated deployments alone. They are a process flow. Similarly, CR is a process flow that begins with the delivery of new code via CD, which open source tools like [Spinnaker][10] give us. CR is not monitoring, machine learning, or auto-scaling, but a diverse set of processes that occur after code deployment, supported by a variety of tools. CR is also different in two specific ways. - -First, it is different because, by its nature, it is broader. The general software development lifecycle (SDLC) process means that most [CI/CD processes][11] are similar. However, code running in production differs from app to app or service to service. This means that CR differs as well. - -Second, CR is different because it is nascent. Like CI and CD before it, the process and tools existed before they had a name. Over time, CI/CD became more normalized and easier to scope. CR is new, hence there is lots of room to discuss what's in or out. I welcome your comments in this regard and hope you will run with these ideas. - -### CR: Closing the loop on DevOps - -DevOps arose because of the need for greater service delivery velocity and agility. Essentially, DevOps is an extension of agile software development practices to an operational mindset. It's a direct response to the flexibility and automation possibilities that cloud computing affords. However, much of the thinking on DevOps to date has focused on deploying the code to production and ends there. But our jobs don't end there. As professionals, we must also make certain our code is behaving as expected, we are learning as it runs in production, and we are taking that learning back into the product development process. - -This is where CR lives and breathes. DevOps without CR is the same as saying there is no OODA Loop around the DevOps process itself. It's like saying that operators' and developers' jobs end with the code being deployed. We all know this isn't true. Customer experience is the ultimate measurement of our success. Can people use the software or service without hiccups or undue friction? If not, we need to fix it. CR is the final link in the DevOps chain that enables delivering the truest customer experience. - -If you aren't thinking about continuous response, you aren't doing DevOps. Share your thoughts on CR, and tell me what you think about the concept and the definition. - -* * * - -_This article is based on[The Essential DevOps Process We're Ignoring: Continuous Response][12], which originally appeared on the Cloudscaling blog under a [CC BY 4.0][13] license and is republished with permission._ - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/3/continuous-response-devops - -作者:[Randy Bias][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/randybias -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/cicd_continuous_delivery_deployment_gears.png?itok=kVlhiEkc (CICD with gears) -[2]: https://opensource.com/article/18/8/what-cicd -[3]: https://www.gartner.com/doc/3187420/guidance-framework-continuous-integration-continuous -[4]: https://opensource.com/sites/default/files/uploads/holistic-devops-cycle-smaller.jpeg (The holistic DevOps cycle) -[5]: https://en.wikipedia.org/wiki/OODA_loop -[6]: https://www.google.com/search?q=site%3Ablog.b3k.us+ooda+loop&rlz=1C5CHFA_enUS730US730&oq=site%3Ablog.b3k.us+ooda+loop&aqs=chrome..69i57j69i58.8660j0j4&sourceid=chrome&ie=UTF-8#q=devops+ooda+loop&* -[7]: http://www.artofmanliness.com/2014/09/15/ooda-loop/ -[8]: https://opensource.com/sites/default/files/uploads/ooda-loop-2-1.jpg (OODA Loop) -[9]: https://itrevolution.com/devops-culture-part-1/ -[10]: https://www.spinnaker.io -[11]: https://opensource.com/article/18/12/cicd-tools-sysadmins -[12]: http://cloudscaling.com/blog/devops/the-essential-devops-process-were-ignoring-continuous-response/ -[13]: https://creativecommons.org/licenses/by/4.0/ diff --git a/sources/talk/20190328 Why do organizations have open secrets.md b/sources/talk/20190328 Why do organizations have open secrets.md deleted file mode 100644 index 8a4c8c0017..0000000000 --- a/sources/talk/20190328 Why do organizations have open secrets.md +++ /dev/null @@ -1,77 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Why do organizations have open secrets?) -[#]: via: (https://opensource.com/open-organization/19/3/open-secrets-bystander-effect) -[#]: author: (Laura Hilliger https://opensource.com/users/laurahilliger/users/maryjo) - -Why do organizations have open secrets? -====== -Everyone sees something, but no one says anything—that's the bystander -effect. And it's damaging your organizational culture. -![][1] - -[The five characteristics of an open organization][2] must work together to ensure healthy and happy communities inside our organizations. Even the most transparent teams, departments, and organizations require equal doses of additional open principles—like inclusivity and collaboration—to avoid dysfunction. - -The "open secrets" phenomenon illustrates the limitations of transparency when unaccompanied by additional open values. [A recent article in Harvard Business Review][3] explored the way certain organizational issues—widely apparent but seemingly impossible to solve—lead to discomfort in the workforce. Authors Insiya Hussain and Subra Tangirala performed a number of studies, and found that the more people in an organization who knew about a particular "secret," be it a software bug or a personnel issue, the less likely any one person would be to report the issue or otherwise _do_ something about it. - -Hussain and Tangirala explain that so-called "open secrets" are the result of a [bystander effect][4], which comes into play when people think, "Well, if _everyone_ knows, surely _I_ don't need to be the one to point it out." The authors mention several causes of this behavior, but let's take a closer look at why open secrets might be circulating in your organization—with an eye on what an open leader might do to [create a safe space for whistleblowing][5]. - -### 1\. Fear - -People don't want to complain about a known problem only to have their complaint be the one that initiates the quality assurance, integrity, or redress process. What if new information emerges that makes their report irrelevant? What if they are simply _wrong_? - -At the root of all bystander behavior is fear—fear of repercussions, fear of losing reputation or face, or fear that the very thing you've stood up against turns out to be a non-issue for everyone else. Going on record as "the one who reported" carries with it a reputational risk that is very intimidating. - -The first step to ensuring that your colleagues report malicious behavior, code, or _whatever_ needs reporting is to create a fear-free workplace. We're inundated with the idea that making a mistake is bad or wrong. We're taught that we have to "protect" our reputations. However, the qualities of a good and moral character are _always_ subjective. - -_Tip for leaders_ : Reward courage and strength every time you see it, regardless of whether you deem it "necessary." For example, if in a meeting where everyone except one person agrees on something, spend time on that person's concerns. Be patient and kind in helping that person change their mind, and be open minded about that person being able to change yours. Brains work in different ways; never forget that one person might have a perspective that changes the lay of the land. - -### 2\. Policies - -Usually, complaint procedures and policies are designed to ensure fairness towards all parties involved in the complaint. Discouraging false reporting and ensuring such fairness in situations like these is certainly a good idea. But policies might actually deter people from standing up—because a victim might be discouraged from reporting an experience if the formal policy for reporting doesn't make them feel protected. Standing up to someone in a position of power and saying "Your behavior is horrid, and I'm not going to take it" isn't easy for anyone, but it's particularly difficult for marginalized groups. - -The "open secrets" phenomenon illustrates the limitations of transparency when unaccompanied by additional open values. - -To ensure fairness to all parties, we need to adjust for victims. As part of making the decision to file a report, a victim will be dealing with a variety of internal fears. They'll wonder what might happen to their self-worth if they're put in a situation where they have to talk to someone about their experience. They'll wonder if they'll be treated differently if they're the one who stands up, and how that will affect their future working environments and relationships. Especially in a situation involving an open secret, asking a victim to be strong is asking them to have to trust that numerous other people will back them up. This fear shouldn't be part of their workplace experience; it's just not fair. - -Remember that if one feels responsible for a problem (e.g., "Crap, that's _my code_ that's bringing down the whole server!"), then that person might feel fear at pointing out the mistake. _The important thing is dealing with the situation, not finding someone to blame._ Policies that make people feel personally protected—no matter what the situation—are absolutely integral to ensuring the organization deals with open secrets. - -_Tip for leaders_ : Make sure your team's or organization's policy regarding complaints makes anonymous reporting possible. Asking a victim to "go on record" puts them in the position of having to defend their perspective. If they feel they're the victim of harassment, they're feeling as if they are harassed _and_ being asked to defend their experience. This means they're doing double the work of the perpetrator, who only has to defend themselves. - -### 3\. Marginalization - -Women, LGBTQ people, racial minorities, people with physical disabilities, people who are neuro-atypical, and other marginalized groups often find themselves in positions that them feel routinely dismissed, disempowered, disrespected—and generally dissed. These feelings are valid (and shouldn't be too surprising to anyone who has spent some time looking at issues of diversity and inclusion). Our emotional safety matters, and we tend to be quite protective of it—even if it means letting open secrets go unaddressed. - -Marginalized groups have enough worries weighing on them, even when they're _not_ running the risk of damaging their relationships with others at work. Being seen and respected in both an organization and society more broadly is difficult enough _without_ drawing potentially negative attention. - -Policies that make people feel personally protected—no matter what the situation—are absolutely integral to ensuring the organization deals with open secrets. - -Luckily, in recent years attitudes towards marginalized groups have become visible, and we as a society have begun to talk about our experiences as "outliers." We've also come to realize that marginalized groups aren't actually "outliers" at all; we can thank the colorful, beautiful internet for that. - -_Tip for leaders_ : Diversity and inclusion plays a role in dispelling open secrets. Make sure your diversity and inclusion practices and policies truly encourage a diverse workplace. - -### Model the behavior - -The best way to create a safe workplace and give people the ability to call attention to pervasive problems found within it is to _model the behaviors that you want other people to display_. Dysfunction occurs in cultures that don't pay attention to and value the principles upon which they are built. In order to discourage bystander behavior, transparent, inclusive, adaptable and collaborative communities must create policies that support calling attention to open secrets and then empathetically dealing with whatever the issue may be. - --------------------------------------------------------------------------------- - -via: https://opensource.com/open-organization/19/3/open-secrets-bystander-effect - -作者:[Laura Hilliger][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/laurahilliger/users/maryjo -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_secret_ingredient_520x292.png?itok=QbKzJq-N -[2]: https://opensource.com/open-organization/resources/open-org-definition -[3]: https://hbr.org/2019/01/why-open-secrets-exist-in-organizations -[4]: https://www.psychologytoday.com/us/basics/bystander-effect -[5]: https://opensource.com/open-organization/19/2/open-leaders-whistleblowers diff --git a/sources/talk/20190331 Codecademy vs. The BBC Micro.md b/sources/talk/20190331 Codecademy vs. The BBC Micro.md deleted file mode 100644 index a85aadad46..0000000000 --- a/sources/talk/20190331 Codecademy vs. The BBC Micro.md +++ /dev/null @@ -1,145 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Codecademy vs. The BBC Micro) -[#]: via: (https://twobithistory.org/2019/03/31/bbc-micro.html) -[#]: author: (Two-Bit History https://twobithistory.org) - -Codecademy vs. The BBC Micro -====== - -In the late 1970s, the computer, which for decades had been a mysterious, hulking machine that only did the bidding of corporate overlords, suddenly became something the average person could buy and take home. An enthusiastic minority saw how great this was and rushed to get a computer of their own. For many more people, the arrival of the microcomputer triggered helpless anxiety about the future. An ad from a magazine at the time promised that a home computer would “give your child an unfair advantage in school.” It showed a boy in a smart blazer and tie eagerly raising his hand to answer a question, while behind him his dim-witted classmates look on sullenly. The ad and others like it implied that the world was changing quickly and, if you did not immediately learn how to use one of these intimidating new devices, you and your family would be left behind. - -In the UK, this anxiety metastasized into concern at the highest levels of government about the competitiveness of the nation. The 1970s had been, on the whole, an underwhelming decade for Great Britain. Both inflation and unemployment had been high. Meanwhile, a series of strikes put London through blackout after blackout. A government report from 1979 fretted that a failure to keep up with trends in computing technology would “add another factor to our poor industrial performance.”[1][1] The country already seemed to be behind in the computing arena—all the great computer companies were American, while integrated circuits were being assembled in Japan and Taiwan. - -In an audacious move, the BBC, a public service broadcaster funded by the government, decided that it would solve Britain’s national competitiveness problems by helping Britons everywhere overcome their aversion to computers. It launched the _Computer Literacy Project_, a multi-pronged educational effort that involved several TV series, a few books, a network of support groups, and a specially built microcomputer known as the BBC Micro. The project was so successful that, by 1983, an editor for BYTE Magazine wrote, “compared to the US, proportionally more of Britain’s population is interested in microcomputers.”[2][2] The editor marveled that there were more people at the Fifth Personal Computer World Show in the UK than had been to that year’s West Coast Computer Faire. Over a sixth of Great Britain watched an episode in the first series produced for the _Computer Literacy Project_ and 1.5 million BBC Micros were ultimately sold.[3][3] - -[An archive][4] containing every TV series produced and all the materials published for the _Computer Literacy Project_ was put on the web last year. I’ve had a huge amount of fun watching the TV series and trying to imagine what it would have been like to learn about computing in the early 1980s. But what’s turned out to be more interesting is how computing was _taught_. Today, we still worry about technology leaving people behind. Wealthy tech entrepreneurs and governments spend lots of money trying to teach kids “to code.” We have websites like Codecademy that make use of new technologies to teach coding interactively. One would assume that this approach is more effective than a goofy ’80s TV series. But is it? - -### The Computer Literacy Project - -The microcomputer revolution began in 1975 with the release of [the Altair 8800][5]. Only two years later, the Apple II, TRS-80, and Commodore PET had all been released. Sales of the new computers exploded. In 1978, the BBC explored the dramatic societal changes these new machines were sure to bring in a documentary called “Now the Chips Are Down.” - -The documentary was alarming. Within the first five minutes, the narrator explains that microelectronics will “totally revolutionize our way of life.” As eerie synthesizer music plays, and green pulses of electricity dance around a magnified microprocessor on screen, the narrator argues that the new chips are why “Japan is abandoning its ship building, and why our children will grow up without jobs to go to.” The documentary goes on to explore how robots are being used to automate car assembly and how the European watch industry has lost out to digital watch manufacturers in the United States. It castigates the British government for not doing more to prepare the country for a future of mass unemployment. - -The documentary was supposedly shown to the British Cabinet.[4][6] Several government agencies, including the Department of Industry and the Manpower Services Commission, became interested in trying to raise awareness about computers among the British public. The Manpower Services Commission provided funds for a team from the BBC’s education division to travel to Japan, the United States, and other countries on a fact-finding trip. This research team produced a report that cataloged the ways in which microelectronics would indeed mean major changes for industrial manufacturing, labor relations, and office work. In late 1979, it was decided that the BBC should make a ten-part TV series that would help regular Britons “learn how to use and control computers and not feel dominated by them.”[5][7] The project eventually became a multimedia endeavor similar to the _Adult Literacy Project_, an earlier BBC undertaking involving both a TV series and supplemental courses that helped two million people improve their reading. - -The producers behind the _Computer Literacy Project_ were keen for the TV series to feature “hands-on” examples that viewers could try on their own if they had a microcomputer at home. These examples would have to be in BASIC, since that was the language (really the entire shell) used on almost all microcomputers. But the producers faced a thorny problem: Microcomputer manufacturers all had their own dialects of BASIC, so no matter which dialect they picked, they would inevitably alienate some large fraction of their audience. The only real solution was to create a new BASIC—BBC BASIC—and a microcomputer to go along with it. Members of the British public would be able to buy the new microcomputer and follow along without worrying about differences in software or hardware. - -The TV producers and presenters at the BBC were not capable of building a microcomputer on their own. So they put together a specification for the computer they had in mind and invited British microcomputer companies to propose a new machine that met the requirements. The specification called for a relatively powerful computer because the BBC producers felt that the machine should be able to run real, useful applications. Technical consultants for the _Computer Literacy Project_ also suggested that, if it had to be a BASIC dialect that was going to be taught to the entire nation, then it had better be a good one. (They may not have phrased it exactly that way, but I bet that’s what they were thinking.) BBC BASIC would make up for some of BASIC’s usual shortcomings by allowing for recursion and local variables.[6][8] - -The BBC eventually decided that a Cambridge-based company called Acorn Computers would make the BBC Micro. In choosing Acorn, the BBC passed over a proposal from Clive Sinclair, who ran a company called Sinclair Research. Sinclair Research had brought mass-market microcomputing to the UK in 1980 with the Sinclair ZX80. Sinclair’s new computer, the ZX81, was cheap but not powerful enough for the BBC’s purposes. Acorn’s new prototype computer, known internally as the Proton, would be more expensive but more powerful and expandable. The BBC was impressed. The Proton was never marketed or sold as the Proton because it was instead released in December 1981 as the BBC Micro, also affectionately called “The Beeb.” You could get a 16k version for £235 and a 32k version for £335. - -In 1980, Acorn was an underdog in the British computing industry. But the BBC Micro helped establish the company’s legacy. Today, the world’s most popular microprocessor instruction set is the ARM architecture. “ARM” now stands for “Advanced RISC Machine,” but originally it stood for “Acorn RISC Machine.” ARM Holdings, the company behind the architecture, was spun out from Acorn in 1990. - -![Picture of the BBC Micro.][9] _A bad picture of a BBC Micro, taken by me at the Computer History Museum -in Mountain View, California._ - -### The Computer Programme - -A dozen different TV series were eventually produced as part of the _Computer Literacy Project_, but the first of them was a ten-part series known as _The Computer Programme_. The series was broadcast over ten weeks at the beginning of 1982. A million people watched each week-night broadcast of the show; a quarter million watched the reruns on Sunday and Monday afternoon. - -The show was hosted by two presenters, Chris Serle and Ian McNaught-Davis. Serle plays the neophyte while McNaught-Davis, who had professional experience programming mainframe computers, plays the expert. This was an inspired setup. It made for [awkward transitions][10]—Serle often goes directly from a conversation with McNaught-Davis to a bit of walk-and-talk narration delivered to the camera, and you can’t help but wonder whether McNaught-Davis is still standing there out of frame or what. But it meant that Serle could voice the concerns that the audience would surely have. He can look intimidated by a screenful of BASIC and can ask questions like, “What do all these dollar signs mean?” At several points during the show, Serle and McNaught-Davis sit down in front of a computer and essentially pair program, with McNaught-Davis providing hints here and there while Serle tries to figure it out. It would have been much less relatable if the show had been presented by a single, all-knowing narrator. - -The show also made an effort to demonstrate the many practical applications of computing in the lives of regular people. By the early 1980s, the home computer had already begun to be associated with young boys and video games. The producers behind _The Computer Programme_ sought to avoid interviewing “impressively competent youngsters,” as that was likely “to increase the anxieties of older viewers,” a demographic that the show was trying to attract to computing.[7][11] In the first episode of the series, Gill Nevill, the show’s “on location” reporter, interviews a woman that has bought a Commodore PET to help manage her sweet shop. The woman (her name is Phyllis) looks to be 60-something years old, yet she has no trouble using the computer to do her accounting and has even started using her PET to do computer work for other businesses, which sounds like the beginning of a promising freelance career. Phyllis says that she wouldn’t mind if the computer work grew to replace her sweet shop business since she enjoys the computer work more. This interview could instead have been an interview with a teenager about how he had modified _Breakout_ to be faster and more challenging. But that would have been encouraging to almost nobody. On the other hand, if Phyllis, of all people, can use a computer, then surely you can too. - -While the show features lots of BASIC programming, what it really wants to teach its audience is how computing works in general. The show explains these general principles with analogies. In the second episode, there is an extended discussion of the Jacquard loom, which accomplishes two things. First, it illustrates that computers are not based only on magical technology invented yesterday—some of the foundational principles of computing go back two hundred years and are about as simple as the idea that you can punch holes in card to control a weaving machine. Second, the interlacing of warp and weft threads is used to demonstrate how a binary choice (does the weft thread go above or below the warp thread?) is enough, when repeated over and over, to produce enormous variation. This segues, of course, into a discussion of how information can be stored using binary digits. - -Later in the show there is a section about a steam organ that plays music encoded in a long, segmented roll of punched card. This time the analogy is used to explain subroutines in BASIC. Serle and McNaught-Davis lay out the whole roll of punched card on the floor in the studio, then point out the segments where it looks like a refrain is being repeated. McNaught-Davis explains that a subroutine is what you would get if you cut out those repeated segments of card and somehow added an instruction to go back to the original segment that played the refrain for the first time. This is a brilliant explanation and probably one that stuck around in people’s minds for a long time afterward. - -I’ve picked out only a few examples, but I think in general the show excels at demystifying computers by explaining the principles that computers rely on to function. The show could instead have focused on teaching BASIC, but it did not. This, it turns out, was very much a conscious choice. In a retrospective written in 1983, John Radcliffe, the executive producer of the _Computer Literacy Project_, wrote the following: - -> If computers were going to be as important as we believed, some genuine understanding of this new subject would be important for everyone, almost as important perhaps as the capacity to read and write. Early ideas, both here and in America, had concentrated on programming as the main route to computer literacy. However, as our thinking progressed, although we recognized the value of “hands-on” experience on personal micros, we began to place less emphasis on programming and more on wider understanding, on relating micros to larger machines, encouraging people to gain experience with a range of applications programs and high-level languages, and relating these to experience in the real world of industry and commerce…. Our belief was that once people had grasped these principles, at their simplest, they would be able to move further forward into the subject. - -Later, Radcliffe writes, in a similar vein: - -> There had been much debate about the main explanatory thrust of the series. One school of thought had argued that it was particularly important for the programmes to give advice on the practical details of learning to use a micro. But we had concluded that if the series was to have any sustained educational value, it had to be a way into the real world of computing, through an explanation of computing principles. This would need to be achieved by a combination of studio demonstration on micros, explanation of principles by analogy, and illustration on film of real-life examples of practical applications. Not only micros, but mini computers and mainframes would be shown. - -I love this, particularly the part about mini-computers and mainframes. The producers behind _The Computer Programme_ aimed to help Britons get situated: Where had computing been, and where was it going? What can computers do now, and what might they do in the future? Learning some BASIC was part of answering those questions, but knowing BASIC alone was not seen as enough to make someone computer literate. - -### Computer Literacy Today - -If you google “learn to code,” the first result you see is a link to Codecademy’s website. If there is a modern equivalent to the _Computer Literacy Project_, something with the same reach and similar aims, then it is Codecademy. - -“Learn to code” is Codecademy’s tagline. I don’t think I’m the first person to point this out—in fact, I probably read this somewhere and I’m now ripping it off—but there’s something revealing about using the word “code” instead of “program.” It suggests that the important thing you are learning is how to decode the code, how to look at a screen’s worth of Python and not have your eyes glaze over. I can understand why to the average person this seems like the main hurdle to becoming a professional programmer. Professional programmers spend all day looking at computer monitors covered in gobbledygook, so, if I want to become a professional programmer, I better make sure I can decipher the gobbledygook. But dealing with syntax is not the most challenging part of being a programmer, and it quickly becomes almost irrelevant in the face of much bigger obstacles. Also, armed only with knowledge of a programming language’s syntax, you may be able to _read_ code but you won’t be able to _write_ code to solve a novel problem. - -I recently went through Codecademy’s “Code Foundations” course, which is the course that the site recommends you take if you are interested in programming (as opposed to web development or data science) and have never done any programming before. There are a few lessons in there about the history of computer science, but they are perfunctory and poorly researched. (Thank heavens for [this noble internet vigilante][12], who pointed out a particularly egregious error.) The main focus of the course is teaching you about the common structural elements of programming languages: variables, functions, control flow, loops. In other words, the course focuses on what you would need to know to start seeing patterns in the gobbledygook. - -To be fair to Codecademy, they offer other courses that look meatier. But even courses such as their “Computer Science Path” course focus almost exclusively on programming and concepts that can be represented in programs. One might argue that this is the whole point—Codecademy’s main feature is that it gives you little interactive programming lessons with automated feedback. There also just isn’t enough room to cover more because there is only so much you can stuff into somebody’s brain in a little automated lesson. But the producers at the BBC tasked with kicking off the _Computer Literacy Project_ also had this problem; they recognized that they were limited by their medium and that “the amount of learning that would take place as a result of the television programmes themselves would be limited.”[8][13] With similar constraints on the volume of information they could convey, they chose to emphasize general principles over learning BASIC. Couldn’t Codecademy replace a lesson or two with an interactive visualization of a Jacquard loom weaving together warp and weft threads? - -I’m banging the drum for “general principles” loudly now, so let me just explain what I think they are and why they are important. There’s a book by J. Clark Scott about computers called _But How Do It Know?_ The title comes from the anecdote that opens the book. A salesman is explaining to a group of people that a thermos can keep hot food hot and cold food cold. A member of the audience, astounded by this new invention, asks, “But how do it know?” The joke of course is that the thermos is not perceiving the temperature of the food and then making a decision—the thermos is just constructed so that cold food inevitably stays cold and hot food inevitably stays hot. People anthropomorphize computers in the same way, believing that computers are digital brains that somehow “choose” to do one thing or another based on the code they are fed. But learning a few things about how computers work, even at a rudimentary level, takes the homunculus out of the machine. That’s why the Jacquard loom is such a good go-to illustration. It may at first seem like an incredible device. It reads punch cards and somehow “knows” to weave the right pattern! The reality is mundane: Each row of holes corresponds to a thread, and where there is a hole in that row the corresponding thread gets lifted. Understanding this may not help you do anything new with computers, but it will give you the confidence that you are not dealing with something magical. We should impart this sense of confidence to beginners as soon as we can. - -Alas, it’s possible that the real problem is that nobody wants to learn about the Jacquard loom. Judging by how Codecademy emphasizes the professional applications of what it teaches, many people probably start using Codecademy because they believe it will help them “level up” their careers. They believe, not unreasonably, that the primary challenge will be understanding the gobbledygook, so they want to “learn to code.” And they want to do it as quickly as possible, in the hour or two they have each night between dinner and collapsing into bed. Codecademy, which after all is a business, gives these people what they are looking for—not some roundabout explanation involving a machine invented in the 18th century. - -The _Computer Literacy Project_, on the other hand, is what a bunch of producers and civil servants at the BBC thought would be the best way to educate the nation about computing. I admit that it is a bit elitist to suggest we should laud this group of people for teaching the masses what they were incapable of seeking out on their own. But I can’t help but think they got it right. Lots of people first learned about computing using a BBC Micro, and many of these people went on to become successful software developers or game designers. [As I’ve written before][14], I suspect learning about computing at a time when computers were relatively simple was a huge advantage. But perhaps another advantage these people had is shows like _The Computer Programme_, which strove to teach not just programming but also how and why computers can run programs at all. After watching _The Computer Programme_, you may not understand all the gobbledygook on a computer screen, but you don’t really need to because you know that, whatever the “code” looks like, the computer is always doing the same basic thing. After a course or two on Codecademy, you understand some flavors of gobbledygook, but to you a computer is just a magical machine that somehow turns gobbledygook into running software. That isn’t computer literacy. - -_If you enjoyed this post, more like it come out every four weeks! Follow [@TwoBitHistory][15] on Twitter or subscribe to the [RSS feed][16] to make sure you know when a new post is out._ - -_Previously on TwoBitHistory…_ - -> FINALLY some new damn content, amirite? -> -> Wanted to write an article about how Simula bought us object-oriented programming. It did that, but early Simula also flirted with a different vision for how OOP would work. Wrote about that instead! -> -> — TwoBitHistory (@TwoBitHistory) [February 1, 2019][17] - - 1. Robert Albury and David Allen, Microelectronics, report (1979). [↩︎][18] - - 2. Gregg Williams, “Microcomputing, British Style”, Byte Magazine, 40, January 1983, accessed on March 31, 2019, . [↩︎][19] - - 3. John Radcliffe, “Toward Computer Literacy,” Computer Literacy Project Achive, 42, accessed March 31, 2019, [https://computer-literacy-project.pilots.bbcconnectedstudio.co.uk/media/Towards Computer Literacy.pdf][20]. [↩︎][21] - - 4. David Allen, “About the Computer Literacy Project,” Computer Literacy Project Archive, accessed March 31, 2019, . [↩︎][22] - - 5. ibid. [↩︎][23] - - 6. Williams, 51. [↩︎][24] - - 7. Radcliffe, 11. [↩︎][25] - - 8. Radcliffe, 5. [↩︎][26] - - - - --------------------------------------------------------------------------------- - -via: https://twobithistory.org/2019/03/31/bbc-micro.html - -作者:[Two-Bit History][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://twobithistory.org -[b]: https://github.com/lujun9972 -[1]: tmp.05mfBL4kP8#fn:1 -[2]: tmp.05mfBL4kP8#fn:2 -[3]: tmp.05mfBL4kP8#fn:3 -[4]: https://computer-literacy-project.pilots.bbcconnectedstudio.co.uk/ -[5]: https://twobithistory.org/2018/07/22/dawn-of-the-microcomputer.html -[6]: tmp.05mfBL4kP8#fn:4 -[7]: tmp.05mfBL4kP8#fn:5 -[8]: tmp.05mfBL4kP8#fn:6 -[9]: https://twobithistory.org/images/beeb.jpg -[10]: https://twitter.com/TwoBitHistory/status/1112372000742404098 -[11]: tmp.05mfBL4kP8#fn:7 -[12]: https://twitter.com/TwoBitHistory/status/1111305774939234304 -[13]: tmp.05mfBL4kP8#fn:8 -[14]: https://twobithistory.org/2018/09/02/learning-basic.html -[15]: https://twitter.com/TwoBitHistory -[16]: https://twobithistory.org/feed.xml -[17]: https://twitter.com/TwoBitHistory/status/1091148050221944832?ref_src=twsrc%5Etfw -[18]: tmp.05mfBL4kP8#fnref:1 -[19]: tmp.05mfBL4kP8#fnref:2 -[20]: https://computer-literacy-project.pilots.bbcconnectedstudio.co.uk/media/Towards%20Computer%20Literacy.pdf -[21]: tmp.05mfBL4kP8#fnref:3 -[22]: tmp.05mfBL4kP8#fnref:4 -[23]: tmp.05mfBL4kP8#fnref:5 -[24]: tmp.05mfBL4kP8#fnref:6 -[25]: tmp.05mfBL4kP8#fnref:7 -[26]: tmp.05mfBL4kP8#fnref:8 diff --git a/sources/talk/20190401 How Kubeflow is evolving without ksonnet.md b/sources/talk/20190401 How Kubeflow is evolving without ksonnet.md deleted file mode 100644 index bad5611f3d..0000000000 --- a/sources/talk/20190401 How Kubeflow is evolving without ksonnet.md +++ /dev/null @@ -1,62 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How Kubeflow is evolving without ksonnet) -[#]: via: (https://opensource.com/article/19/4/kubeflow-evolution) -[#]: author: (Jonathan Gershater (Red Hat) https://opensource.com/users/jgershat/users/jgershat) - -How Kubeflow is evolving without ksonnet -====== -There are big differences in how open source communities handle change compared to closed source vendors. -![Chat bubbles][1] - -Many software projects depend on modules that are run as separate open source projects. When one of those modules loses support (as is inevitable), the community around the main project must determine how to proceed. - -This situation is happening right now in the [Kubeflow][2] community. Kubeflow is an evolving open source platform for developing, orchestrating, deploying, and running scalable and portable machine learning workloads on [Kubernetes][3]. Recently, the primary supporter of the Kubeflow component [ksonnet][4] announced that it would [no longer support][5] the software. - -When a piece of software loses support, the decision-making process (and the outcome) differs greatly depending on whether the software is open source or closed source. - -### A cellphone analogy - -To illustrate the differences in how an open source community and a closed source/single software vendor proceed when a component loses support, let's use an example from hardware design. - -Suppose you buy cellphone Model A and it stops working. When you try to get it repaired, you discover the manufacturer is out of business and no longer offering support. Since the cellphone's design is proprietary and closed, no other manufacturers can support it. - -Now, suppose you buy cellphone Model B, it stops working, and its manufacturer is also out of business and no longer offering support. However, Model B's design is open, and another company is in business manufacturing, repairing and upgrading Model B cellphones. - -This illustrates one difference between software written using closed and open source principles. If the vendor of a closed source software solution goes out of business, support disappears with the vendor, unless the vendor sells the software's design and intellectual property. But, if the vendor of an open source solution goes out of business, there is no intellectual property to sell. By the principles of open source, the source code is available for anyone to use and modify, under license, so another vendor can continue to maintain the software. - -### How Kubeflow is evolving without ksonnet - -The ramification of ksonnet's backers' decision to cease development illustrates Kubeflow's open and collaborative design process. Kubeflow's designers have several options, such as replacing ksonnet, adopting and developing ksonnet, etc. Because Kubeflow is an open source project, all options are discussed in the open on the Kubeflow mailing list. Some of the community's suggestions include: - -> * Should we look at projects that are CNCF/Apache projects e.g. [helm][6] -> * I would opt for back to the basics. KISS. How about plain old jsonnet + kubectl + makefile/scripts ? Thats how e.g. the coreos [prometheus operator][7] does it. It would also lower the entry barrier (no new tooling) and let vendors of k8s (gke, openshift, etc) easily build on top of that. -> * I vote for using a simple, _programmatic_ context, be it manual jsonnet + kubectl, or simple Python scripts + Python K8s client, or any tool be can build on top of these. -> - - -The members of the mailing list are discussing and debating alternatives to ksonnet and will arrive at a decision to continue development. What I love about the open source way of adapting is that it's done communally. Unlike closed source software, which is often designed by one vendor, the organizations that are members of an open source project can collaboratively steer the project in the direction they best see fit. As Kubeflow evolves, it will benefit from an open, collaborative decision-making framework. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/4/kubeflow-evolution - -作者:[Jonathan Gershater (Red Hat)][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/jgershat/users/jgershat -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/talk_chat_communication_team.png?itok=CYfZ_gE7 (Chat bubbles) -[2]: https://www.kubeflow.org/ -[3]: https://github.com/kubernetes -[4]: https://ksonnet.io/ -[5]: https://blogs.vmware.com/cloudnative/2019/02/05/welcoming-heptio-open-source-projects-to-vmware/ -[6]: https://landscape.cncf.io -[7]: https://github.com/coreos/prometheus-operator/tree/master/contrib/kube-prometheus diff --git a/sources/talk/20190402 Making computer science curricula as adaptable as our code.md b/sources/talk/20190402 Making computer science curricula as adaptable as our code.md deleted file mode 100644 index 150034a20b..0000000000 --- a/sources/talk/20190402 Making computer science curricula as adaptable as our code.md +++ /dev/null @@ -1,72 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Making computer science curricula as adaptable as our code) -[#]: via: (https://opensource.com/open-organization/19/4/adaptable-curricula-computer-science) -[#]: author: (Amarachi Achonu https://opensource.com/users/amarach1/users/johnsontanner3) - -Making computer science curricula as adaptable as our code -====== -No two computer science students are alike—so teachers need curricula -that are open and adaptable. -![][1] - -Educators in elementary computer science face a lack of adaptable curricula. Calls for more modifiable, non-rigid curricula are therefore enticing—assuming that such curricula could benefit teachers by increasing their ability to mold resources for individual classrooms and, ultimately, produce better teaching experiences and learning outcomes. - -Our team at [CSbyUs][2] noticed this scarcity, and we've created an open source web platform to facilitate more flexible, adaptable, and tested curricula for computer science educators. The mission of the CSbyUs team has always been utilizing open source technology to improve pedagogy in computer science, which includes increasing support for teachers. Therefore, this project primarily seeks to use open source principles—and the benefits inherent in them—to expand the possibilities of modern curriculum-making and support teachers by increasing access to more adaptable curricula. - -### Rigid, monotonous, mundane - -Why is the lack of adaptable curricula a problem for computer science education? Rigid curricula dominates most classrooms today, primarily through monotonous and routinely distributed lesson plans. Many of these plans are developed without the capacity for dynamic use and application to different classroom atmospheres. In contrast, an _adaptable_ curriculum is one that would _account_ for dynamic and changing classroom environments. - -An adaptable curriculum means freedom and more options for educators. This is especially important in elementary-level classrooms, where instructors are introducing students to computer science for the first time, and in classrooms with higher populations of groups typically underrepresented in the field of computer science. Here especially, it's advantageous for instructors to have access to curricula that explicitly consider diverse classroom landscapes and grants the freedom necessary to adapt to specific student populations. - -### Making it adaptable - -This kind of adaptability is certainly at work at CSbyUs. Hayley Barton—a member of both the organization's curriculum-making team and its teaching team, and a senior at Duke University majoring in Economics and minoring in Computer Science and Spanish—recently demonstrated the benefits of adaptable curricula during an engagement in the field. Reflecting on her teaching experiences, Barton describes a major reason why curriculum adaptation is necessary in computer science classrooms. "We are seeing the range of students that we work with," she says, "and trying to make the curriculum something that can be tailored to different students." - -An adaptable curriculum means freedom and more options for educators. - -A more adaptable curriculum is necessary for truly challenging students, Barton continues. - -The need for change became most evident to Barton when working students to make their own preliminary apps. Barton collaborated with students who appeared to be at different levels of focus and attention. On the one hand, a group of more advanced students took well to the style of a demonstrative curriculum and remained attentive and engaged to the task. On the other hand, another group of students seemed to have more trouble focusing in the classroom or even being motivated to engage with topics of computer science skills. Witnessing this difference among students, it became important that curriculum would need to be adaptable in multiple ways to be able to engage more students at their level. - -"We want to challenge every student without making it too challenging for any individual student," Barton says. "Thinking about those things definitely feeds into how I'm thinking about the curriculum in terms of making it accessible for all the students." - -As a curriculum-maker, she subsequently uses experiences like this to make changes to the original curriculum. - -"If those other students have one-on-one time themselves, they could be doing even more amazing things with their apps," says Barton. - -Taking this advice, Barton would potentially incorporate into the curriculum more emphasis on cultivating students' sense of ownership in computer science, since this is important to their focus and productivity. For this, students may be afforded that sense of one-on-one time. The result will affect the next round of teachers who use the curriculum. - -For these changes to be effective, the onus is on teachers to notice the dynamics of the classroom. In the future, curriculum adaptation may depend on paying particular attention to and identifying these subtle differences of style of curriculum. Identifying and commenting about these subtleties allows the possibility of applying a different strategy, and these are the changes that are applied to the curriculum. - -Curriculum adaptation should be iterative, as it involves learning from experience, returning to the drawing board, making changes, and finally, utilizing the curriculum again. - -"We've gone through a lot of stages of development," Barton says. "The goal is to have this kind of back and forth, where the curriculum is something that's been tested, where we've used our feedback, and also used other research that we've done, to make it something that's actually impactful." - -Hayley's "back and forth" process is an iterative process of curriculum-making. Between utilizing curricula and modifying curricula, instructors like Hayley can take a once-rigid curriculum and mold it to any degree that the user sees fit—again and again. This iterative process depends on tests performed first in the classroom, and it depends on the teacher's rationale and reflection on how curricula uniquely pans out for them. - -Adaptability of curriculum is the most important principle on which the CSbyUs platform is built. Much like Hayley's process of curriculum-making, curriculum adaptation should be _iterative_ , as it involves learning from experience, returning to the drawing board, making changes, and finally, utilizing the curriculum again. Once launched, the CSbyUS website will document this iterative process. - -The open-focused pedagogy behind the CSByUs platform, then, brings to life the flexibility inherent in the process of curriculum adaptation. First, it invites and collects the valuable first-hand perspectives of real educators working with real curricula to produce real learning. Next, it capitalizes on an iterative processes of development—one familiar to open source programmers—to enable modifications to curriculum (and the documentation of those modifications). Finally, it transforms the way teachers encounter curricula by helping them make selections from different versions of both modified curriculum and "the original." Our platform's open source strategy is crucial to cultivating a hub of flexible curricula for educators. - -Open source practices can be a key difference in making rigid curricula more moldable for educators. Furthermore, since this approach effectively melds open source technologies with open-focused pedagogy, open pedagogy can potentially provide flexibility for educators teaching various curriculum across disciplines. - --------------------------------------------------------------------------------- - -via: https://opensource.com/open-organization/19/4/adaptable-curricula-computer-science - -作者:[Amarachi Achonu][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/amarach1/users/johnsontanner3 -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/rh_003588_01_rd3os.combacktoschoolserieshe_rh_051x_0.png?itok=gIzbmxuI -[2]: https://csbyus.herokuapp.com/ diff --git a/sources/talk/20190405 D as a C Replacement.md b/sources/talk/20190405 D as a C Replacement.md deleted file mode 100644 index 36b60bb278..0000000000 --- a/sources/talk/20190405 D as a C Replacement.md +++ /dev/null @@ -1,247 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (D as a C Replacement) -[#]: via: (https://theartofmachinery.com/2019/04/05/d_as_c_replacement.html) -[#]: author: (Simon Arneaud https://theartofmachinery.com) - -D as a C Replacement -====== - -Sircmpwn (the main developer behind the [Sway Wayland compositor][1]) recently wrote a blog post about how he thinks [Rust is not a good C replacement][2]. I don’t know if he’d like the [D programming language][3] either, but it’s become a C replacement for me. - -### My C to D Story - -My story is like a lot of systems programmers’ stories. At one time, C was my go-to language for most programming. One day I realised that most of my C programs kept reimplementing things from C++: dynamic arrays, better strings, polymorphic classes, etc. So I tried using C++ instead, and at first I loved it. RAII and classes and generics made programming fun again. Even better was the promise that if I read all these books on C++, and learned to master things like template metaprogramming, I’d become an almighty god of systems programming and my code would be amazing. But learning more eventually had the opposite effect: (in hindsight) my code actually got worse, and I fell out of love. I remember reading Scott Meyer’s Effective C++ and realising it was really more about _ineffective_ C++ — and that most of my C++ code until then was broken. Let’s face it: C might be fiddly to use, but it has a kind of elegance, and “elegant” is rarely a word you hear when C++ is involved. - -Apparently, a lot of ex-C C++ programmers end up going back to C. In my case, I discovered D. It’s also not perfect, but I use it because it feels to me a lot more like the `C += 1` that C++ was meant to be. Here’s an example that’s very superficial, but I think is representative. Take this simple C program: - -``` -#include - -int main() -{ - printf("1 + 1 = %d!\n", 1 + 1); - return 0; -} -``` - -Here’s a version using the C++ standard library: - -``` -#include - -int main() -{ - std::cout << "1 + 1 = " << 1 + 1 << "!" << std::endl; - return 0; -} -``` - -Here’s an idiomatic D version: - -``` -import std.stdio; - -void main() -{ - writef("1 + 1 = %d!\n", 1 + 1); -} -``` - -As I said, it’s a superficial example, but I think it shows a general difference in philosophy between C++ and D. (If I wanted to make the difference even clearer, I’d use an example that needed `iomanip` in C++.) - -Update: Unlike in C, [D’s format strings can work with custom types][4]. Stefan Rohe has also pointed out that [D supports compile-time checking of format strings][5] using its metaprogramming features — unlike C which does it through built-in compiler special casing that can’t be used with custom code. - -This [article about C++ member function pointers][6] happens to also be a good explanation of the origins of D. It’s a good read if you’re a programming language nerd like me, but here’s my TL;DR for everyone else: C++ member function pointers are supposed to feel like a low-level feature (like normal function pointers are), but the complexity and diversity of implementations means they’re really high level. The complexity of the implementations is because of the subtleties of the rules about what you can do with them. The author explains the implementations from several C++ compilers, including what’s “easily [his] favorite implementation”: the elegantly simple Digital Mars C++ implementation. (“Why doesn’t everyone else do it this way?”) The DMC compiler was written by Walter Bright, who invented D. - -D has classes and templates and other core features of C++, but designed by someone who has spent a heck of a lot of time thinking about the C++ spec and how things could be simpler. Walter once said that his experiences implementing C++ templates made him consider not including them in D at all, until he realised they didn’t need to be so complex. - -Here’s a quick tour of D from the point of view of incrementally improving C. - -### `-betterC` - -D compilers support a `-betterC` switch that disables [the D runtime][7] and all high-level features that depend on it. The example C code above can be translated directly into betterC: - -``` -import core.stdc.stdio; - -extern(C): - -int main() -{ - printf("1 + 1 = %d!\n", 1 + 1); - return 0; -} - -$ dmd -betterC example.d -$ ./example -1 + 1 = 2! -``` - -The resulting binary looks a lot like the equivalent C binary. In fact, if you rewrote a C library in betterC, it could still link to code that had been compiled against the C version, and work without changes. Walter Bright wrote a good article walking through all [the changes needed to convert a real C program to betterC][8]. - -You don’t actually need the `-betterC` switch just to write C-like code in D. It’s only needed in special cases where you simply can’t have the D runtime. But let me point out some of my favourite D features that still work with `-betterC`. - -#### `static assert()` - -This allows verifying some assumption at compile time. - -``` -static assert(kNumInducers < 16); -``` - -Systems code often makes assumptions about alignment or structure size or other things. With `static assert`, it’s possible to not only document these assumptions, but trigger a compilation error if someone breaks them by adding a struct member or something. - -#### Slices - -Typical C code is full of pointer/length pairs, and it’s a common bug for them to go out of sync. Slices are a simple and super-useful abstraction for a range of memory defined by a pointer and length. Instead of code like this: - -``` -buffer_p += offset; -buffer_len -= offset; // Got to update both -``` - -You can use this much-less-bug-prone alternative: - -``` -buffer = buffer[offset..$]; -``` - -A slice is nothing but a pointer/length pair with first-class syntactic support. - -Update: [Walter Bright has written more about pointer/length pair problem in C][9]. - -#### Compile Time Function Evaluation (CTFE) - -[Many functions can be evaluated at compile time.][10] - -``` -long factorial(int n) pure -{ - assert (n >= 0 && n <= 20); - long ret = 1; - foreach (j; 2..n+1) ret *= j; - return ret; -} - -// Statically allocated array -// Size is calculated at compile time -Permutation[factorial(kNumThings)] permutation_table; -``` - -#### `scope` Guards - -Code in one part of a function is often coupled to cleanup code in a later part. Failing to match this code up correctly is another common source of bugs (especially when multiple control flow paths are involved). D’s scope guards make it simple to get this stuff right: - -``` -p = malloc(128); -// free() will be called when the current scope exits -scope (exit) free(p); -// Put whatever if statements, or loops, or early returns you like here -``` - -You can even have multiple scope guards in a scope, or have nested scopes. The cleanup routines will be called when needed, in the right order. - -D also supports RAII using struct destructors. - -#### `const` and `immutable` - -It’s a popular myth that `const` in C and C++ is useful for compiler optimisations. Walter Bright has complained that every time he thought of a new `const`-based optimisation for C++, he eventually discovered it didn’t work in real code. So he made some changes to `const` semantics for D, and added `immutable`. You can read more in the [D `const` FAQ][11]. - -#### `pure` - -Functional purity can be enforced. I’ve written about [some of the benefits of the `pure` keyword before][12]. - -#### `@safe` - -SafeD is a subset of D that forbids risky language features like pointer typecasts and inline assembly. Code marked `@safe` is enforced by the compiler to not use these features, so that risky code can be limited to the small percentage of the application that needs it. You can [read more about SafeD in this article][13]. - -#### Metaprogramming - -Like I hinted earlier, metaprogramming has got a bad reputation among some C++ programmers. But [D has the advantage of making metaprogramming less interesting][14], so D programmers tend to just do it when it’s useful, and not as a fun puzzle. - -D has great support for [compile-time reflection][15]. In most cases, compile-time reflection can solve the same problems as run-time reflection, but with compile-time guarantees. Compile-time reflection can also be used to implement run-time reflection where it’s truly needed. - -Need the names of an enumerated type as an array? - -``` -enum State -{ - stopped, - starting, - running, - stopping, -} - -string[] state_names = [__traits(allMembers, State)]; -``` - -Thanks to D’s metaprogramming, the standard library has many nice, type-safe tools, like this [compile-time checked bit flag enum][16]. - -I’ve written more about [using metaprogramming in `-betterC` code][17]. - -#### No Preprocessor - -Okay, this a non-feature as a feature, but D has no equivalent to C’s preprocessor. All its sane use-cases are replaced with native language features, like [manifest constants][18] and [templates][19]. That includes proper [modules][20] support, which means D can break free of the limitations of that old `#include` hack. - -### Normal D - -C-like D code can be written and compiled as normal D code without the `-betterC` switch. The difference is that normal D code is linked to the D runtime, which supports higher-level features, the most obvious ones being garbage collection and object-oriented classes. Some people have confused the D runtime with something like the Java virtual machine, so I once wrote [an article explaining exactly what it is][7] (spoiler: it’s like the C and C++ runtimes, but with more features). - -Even with the runtime, compiled D is not much different from compiled C++. Sometimes I like to write throwaway code to, say, experiment with a new Linux system call or something. I used to think the best language for that is plain old C, but now I always use D. - -D doesn’t natively support `#include`ing C code, but for nice APIs that don’t have a lot of preprocessor craziness (like most of Linux) I usually just write [ad-hoc bindings][21]. Many popular C libraries have maintained D bindings, which can be found in the [Dub registry][22], or in [the Derelict project][23], or in the newer [BindBC project][24]. There are also tools for automated bindings, including the awesome [dpp tool][25] that brings `#include` support directly to D code. - -Update: This post has got a lot of attention from people who’ve never heard of D before. If you’re interested in learning D, I recommend - - * [The DLang Tour][26] for a quick dive into the language - * [Ali Çehreli’s Programming in D book][27] if you prefer something in-depth - * [The D forum Learn group][28] or [IRC channel][29] to get answers to your questions - - - --------------------------------------------------------------------------------- - -via: https://theartofmachinery.com/2019/04/05/d_as_c_replacement.html - -作者:[Simon Arneaud][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://theartofmachinery.com -[b]: https://github.com/lujun9972 -[1]: https://swaywm.org/ -[2]: https://drewdevault.com/2019/03/25/Rust-is-not-a-good-C-replacement.html -[3]: https://dlang.org -[4]: https://wiki.dlang.org/Defining_custom_print_format_specifiers -[5]: https://dlang.org/phobos/std_format.html#format -[6]: https://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible -[7]: /2017/06/04/what_is_the_d_runtime.html -[8]: https://dlang.org/blog/2018/06/11/dasbetterc-converting-make-c-to-d/ -[9]: https://www.digitalmars.com/articles/b44.html -[10]: https://dlang.org/spec/function.html#interpretation -[11]: https://dlang.org/articles/const-faq.html -[12]: /2016/03/28/dirtying_pure_functions_can_be_useful.html -[13]: https://dlang.org/blog/2016/09/28/how-to-write-trusted-code-in-d/ -[14]: https://epi.github.io/2017/03/18/less_fun.html -[15]: https://dlang.org/spec/traits.html -[16]: https://dlang.org/phobos/std_typecons.html#BitFlags -[17]: /2018/08/13/inheritance_and_polymorphism_2.html -[18]: https://dlang.org/spec/enum.html#manifest_constants -[19]: https://tour.dlang.org/tour/en/basics/templates -[20]: https://ddili.org/ders/d.en/modules.html -[21]: https://wiki.dlang.org/Bind_D_to_C -[22]: https://code.dlang.org/ -[23]: https://github.com/DerelictOrg -[24]: https://github.com/BindBC -[25]: https://github.com/atilaneves/dpp -[26]: https://tour.dlang.org/ -[27]: https://ddili.org/ders/d.en/index.html -[28]: https://forum.dlang.org/group/learn -[29]: irc://irc.freenode.net/d diff --git a/sources/talk/20190410 Anti-lasers could give us perfect antennas, greater data capacity.md b/sources/talk/20190410 Anti-lasers could give us perfect antennas, greater data capacity.md deleted file mode 100644 index 2d2f4d5c05..0000000000 --- a/sources/talk/20190410 Anti-lasers could give us perfect antennas, greater data capacity.md +++ /dev/null @@ -1,69 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Anti-lasers could give us perfect antennas, greater data capacity) -[#]: via: (https://www.networkworld.com/article/3386879/anti-lasers-could-give-us-perfect-antennas-greater-data-capacity.html#tk.rss_all) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Anti-lasers could give us perfect antennas, greater data capacity -====== -Anti-lasers get close to providing a 100% efficient signal channel for data, say engineers. -![Guirong Hao / Valery Brozhinsky / Getty Images][1] - -Playing laser light backwards could adjust data transmission signals so that they perfectly match receiving antennas. The fine-tuning of signals like this, not achieved with such detail before, could create more capacity for ever-increasing data demand. - -"Imagine, for example, that you could adjust a cell phone signal exactly the right way, so that it is perfectly absorbed by the antenna in your phone," says Stefan Rotter of the Institute for Theoretical Physics of Technische Universität Wien (TU Wien) in a [press release][2]. - -Rotter is talking about “Random Anti-Laser,” a project he has been a part of. The idea behind it is that if one could time-reverse a laser, then the laser (right now considered the best light source ever built) becomes the best available light absorber. Perfect absorption of a signal wave would mean that all of the data-carrying energy is absorbed by the receiving device, thus it becomes 100% efficient. - -**[ Related:[What is 5G wireless? How it will change networking as we know it?][3] ]** - -“The easiest way to think about this process is in terms of a movie showing a conventional laser sending out laser light, which is played backwards,” the TU Wein article says. The anti-laser is the exact opposite of the laser — instead of sending specific colors perfectly when energy is applied, it receives specific colors perfectly. - -Perfect absorption of a signal wave would mean that all of the data-carrying energy is absorbed by the receiving device, thus it becomes 100% efficient. - -Counter-intuitively, it’s the random scattering of light in all directions that’s behind the engineering. However, the Vienna, Austria, university group performs precise calculations on those scattering, splitting signals. That lets the researchers harness the light. - -### How the anti-laser technology works - -The microwave-based, experimental device the researchers have built in the lab to prove the idea doesn’t just potentially apply to cell phones; wireless internet of things (IoT) devices would also get more data throughput. How it works: The device consists of an antenna-containing chamber encompassed by cylinders, all arranged haphazardly, the researchers explain. The cylinders distribute an elaborate, arbitrary wave pattern “similar to [throwing] stones in a puddle of water, at which water waves are deflected.” - -Measurements then take place to identify exactly how the signals return. The team involved, which also includes collaborators from the University of Nice, France, then “characterize the random structure and calculate the wave front that is completely swallowed by the central antenna at the right absorption strength.” Ninety-nine point eight percent is absorbed, making it remarkably and virtually perfect. Data throughput, range, and other variables thus improve. - -**[[Take this mobile device management course from PluralSight and learn how to secure devices in your company without degrading the user experience.][4] ]** - -Achieving perfect antennas has been pretty much only theoretically possible for engineers to date. Reflected energy (RF back into the transmitter from antenna inefficiencies) has always been an issue in general. Reflections from surfaces, too, have been always been a problem. - -“Think about a mobile phone signal that is reflected several times before it reaches your cell phone,” Rotter says. It’s not easy to get the tuning right — as the antennas’ physical locations move, reflected surfaces become different. - -### Scattering lasers - -Scattering, similar to that used in this project, is becoming more important in communications overall. “Waves that are being scattered in a complex way are really all around us,” the group says. - -An example is random-lasers (which the group’s anti-laser is based on) that unlike traditional lasers, do not use reflective surfaces but trap scattered light and then “emit a very complicated, system-specific laser field when supplied with energy.” The anti-random-laser developed by Rotter and his group simply reverses that in time: - -“Instead of a light source that emits a specific wave depending on its random inner structure, it is also possible to build the perfect absorber.” The anti-random-laser. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3386879/anti-lasers-could-give-us-perfect-antennas-greater-data-capacity.html#tk.rss_all - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/03/data_cubes_transformation_conversion_by_guirong_hao_gettyimages-1062387214_plus_abstract_binary_by_valerybrozhinsky_gettyimages-865457032_3x2_2400x1600-100790211-large.jpg -[2]: https://www.tuwien.ac.at/en/news/news_detail/article/126574/ -[3]: https://www.networkworld.com/article/3203489/lan-wan/what-is-5g-wireless-networking-benefits-standards-availability-versus-lte.html -[4]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fmobile-device-management-big-picture -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190415 Nyansa-s Voyance expands to the IoT.md b/sources/talk/20190415 Nyansa-s Voyance expands to the IoT.md deleted file mode 100644 index e893c86d53..0000000000 --- a/sources/talk/20190415 Nyansa-s Voyance expands to the IoT.md +++ /dev/null @@ -1,75 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Nyansa’s Voyance expands to the IoT) -[#]: via: (https://www.networkworld.com/article/3388301/nyansa-s-voyance-expands-to-the-iot.html#tk.rss_all) -[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/) - -Nyansa’s Voyance expands to the IoT -====== - -![Brandon Mowinkel \(CC0\)][1] - -Nyansa announced today that their flagship Voyance product can now apply its AI-based secret sauce to [IoT][2] devices, over and above the networking equipment and IT endpoints it could already manage. - -Voyance – a network management product that leverages AI to automate the discovery of devices on the network and identify unusual behavior – has been around for two years now, and Nyansa says that it’s being used to observe a total of 25 million client devices operating across roughly 200 customer networks. - -**More on IoT:** - - * [Most powerful Internet of Things companies][3] - * [10 Hot IoT startups to watch][4] - * [The 6 ways to make money in IoT][5] - * [][6] [Blockchain, service-centric networking key to IoT success][7] - * [Getting grounded in IoT networking and security][8] - * [Building IoT-ready networks must become a priority][9] - * [What is the Industrial IoT? [And why the stakes are so high]][10] - - - -It’s a software-only product (available either via public SaaS or private cloud) that works by scanning a customer’s network and identifying every device attached to it, then establishing a behavioral baseline that will let it flag suspicious actions (e.g., sending a lot more data than other devices of its kind, connecting to unusual servers) and even perform automated root-cause analysis of network issues. - -The process doesn’t happen instantaneously, particularly the creation of the baseline, but it’s designed to be minimally invasive to existing network management frameworks and easy to implement. - -Nyansa said that the medical field has been one of the key targets for the newly IoT-enabled iteration of Voyance, and one early customer – Baptist Health, a Florida-based healthcare company that runs four hospitals and several other clinics and practices – said that Voyance IoT has offered a new level of visibility into the business’ complex array of connected diagnostic and treatment machines. - -“In the past we didn’t have the ability to identify security concerns in this way, related to rogue devices on the enterprise network, and now we’re able to do that,” said CISO Thad Phillips. - -While spiraling network complexity isn’t an issue confined to the IoT, there’s a strong argument that the number and variety of devices connected to an IoT-enabled network represent a new challenge to network management, particularly in light of the fact that many such devices aren’t particularly secure. - -“They’re not manufactured by networking vendors or security vendors, so for a performance standpoint, they have a lot of quirks … and on the security side, that’s sort of a big problem there as well,” said Anand Srinivas, Nyansa’s co-founder and CTO. - -Enabling the Voyance platform to identify and manage IoT devices along with traditional endpoints seems to be mostly a matter of adding new device signatures to the system, but Enterprise Management Associates research director Shamus McGillicuddy said that, while the system’s designed for automation and ease of use, AIOps products like Voyance do need to be managed to make sure that they’re functioning correctly. - -“Anything based on machine learning is going to take a while to make sure it understands your environment and you might have to retrain it,” he said. “There’s always going to be more and more things connecting to IP networks, and it’s just going to be a question of building up a database.” - -Voyance IoT is available now. Pricing starts at $16,000 per year, and goes up with the number of total devices managed. (Current Voyance users can manage up to 100 IoT devices at no additional cost.) - -Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3388301/nyansa-s-voyance-expands-to-the-iot.html#tk.rss_all - -作者:[Jon Gold][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Jon-Gold/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/geometric_architecture_ceiling_structure_lines_connections_networks_perspective_by_brandon_mowinkel_cc0_via_unsplash_2400x1600-100788530-large.jpg -[2]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[3]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[4]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[5]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[6]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[7]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[8]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[9]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[10]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[11]: https://www.facebook.com/NetworkWorld/ -[12]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190416 Two tools to help visualize and simplify your data-driven operations.md b/sources/talk/20190416 Two tools to help visualize and simplify your data-driven operations.md deleted file mode 100644 index 8a44c56ca7..0000000000 --- a/sources/talk/20190416 Two tools to help visualize and simplify your data-driven operations.md +++ /dev/null @@ -1,59 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Two tools to help visualize and simplify your data-driven operations) -[#]: via: (https://www.networkworld.com/article/3389756/two-tools-to-help-visualize-and-simplify-your-data-driven-operations.html#tk.rss_all) -[#]: author: (Kent McNeil, Vice President of Software, Ciena Blue Planet ) - -Two tools to help visualize and simplify your data-driven operations -====== -Amidst the rising complexity of networks, and influx of data, service providers are striving to keep operational complexity under control. Blue Planet’s Kent McNeil explains how they can turn this challenge into a huge opportunity, and in fact reduce operational effort by exploiting state-of-the-art graph database visualization and delta-based federation technologies. -![danleap][1] - -**Build the picture: Visualize your data** - -The Internet of Things (IoT), 5G, smart technology, virtual reality – all these applications guarantee one thing for communications service providers (CSPs): more data. As networks become increasingly overwhelmed by mounds of data, CSPs are on the hunt for ways to make the most of the intelligence collected and are looking for ways to monetize their services, provide more customizable offerings, and enhance their network performance. - -Customer analytics has gone some way towards fulfilling this need for greater insights, but with the rise in the volume and variety of consumer and IoT applications, the influx of data will increase at a phenomenal rate. The data includes not only customer-related data, but also device and network data, adding complexity to the picture. CSPs must harness this information to understand the relationships between any two things, to understand the connections within their data and to ultimately, leverage it for a better customer experience. - -**See the upward graphical trend with graph databases** - -Traditional relational databases certainly have their use, but graph databases offer a novel perspective. The visual representation between the component parts enables CSPs to understand and analyze the characteristics, as well as to act in a timely manner when confronted with any discrepancies. - -Graph databases can help CSPs tackle this new challenge, ensuring the data is not just stored, but also processed and analyzed. It enables complex network questions to be asked and answered, ensuring that CSPs are not sidelined as “dumb pipes” in the IoT movement. - -The use of graph databases has started to become more mainstream, as businesses see the benefits. IBM conducted a generic industry study, entitled “The State of Graph Databases Worldwide”, which found that people are moving to graph databases for speed, performance enhancement of applications, and streamlined operations. Ways in which businesses are using, or are planning to use, graph technology is highest for network and IT operations, followed by master data management. Performance is a key factor for CSPs, as is personalization, which enables support for more tailored service offerings. - -Another advantage of graph databases for CSPs is that of unravelling the complexity of network inventory in a clear, visualized picture – this capability gives CSPs a competitive advantage as speed and performance become increasingly paramount. This need for speed and reliability will increase tenfold as IoT continues its impressive global ramp-up. Operational complexity also grows as the influx of generated data produced by IoT will further challenge the scalability of existing operational environments. Graph databases can help CSPs tackle this new challenge, ensuring the data is not just stored, but also processed and analyzed. It enables complex network questions to be asked and answered, ensuring that CSPs are not sidelined as “dumb pipes” in the IoT movement. - -**Change the tide of data with delta-based federation** - -New data, updated data, corrected data, deleted data – all needs to be managed, in line with regulations, and instantaneously. But this capability does not exist in the reality of many CSP’s Operational Support Systems (OSS). Many still battle with updating data and relying on full uploads of network inventory in order to perform key service fulfillment and assurance tasks. This method is time-intensive and risky due to potential conflicts and inaccuracies. With data being accessed from a variety of systems, CSPs must have a way to effectively hone in on only what is required. - -Integrating network data into one simplified system limits the impact on the legacy OSS systems. This allows each OSS to continue its specific role, yet to feed data into a single interface, hence enabling teams to see the complete picture and gain efficiencies while launching new services or pinpointing and resolving service and network issues. - -A delta-based federation model ensures that an accurate picture is presented, and only essential changes are conducted reliably and quickly. This simplified method filters the delta changes, reducing the time involved in updating, and minimizing the system load and risks. A validation process takes place to catch any errors or issues with the data, so CSPs can apply checks and retain control over modifications. Integrating network data into one simplified system limits the impact on the legacy OSS systems. This allows each OSS to continue its specific role, yet to feed data into a single interface, hence enabling teams to see the complete picture and gain efficiencies while launching new services or pinpointing and resolving service and network issues. - -**Ride the wave** - -25 billion connected things are predicted by Gartner on a global scale by 2021 and CSPs are already struggling with the current levels of data, which Gartner estimates at 14.2 billion in 2019. Over the last decade, CSPs have faced significant rises in the levels of data consumed as demand for new services and higher bandwidth applications has taken off. This data wave is set to continue and CSPs have two important tools at their disposal helping them ride the wave. Firstly, CSPs have specialist, legacy OSS already in place which they can leverage as a basis for integrating data and implementing optimized systems. Secondly, they can utilize new technologies in database inventory management: graph databases and delta-based federation. The advantages of effectively integrating network data, visualizing it, and creating a clear map of the inter-connections, enable CSPs to make critical decisions more quickly and accurately, resulting in most optimized and informed service operations. - -[Watch this video to learn more about Blue Planet][2] - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3389756/two-tools-to-help-visualize-and-simplify-your-data-driven-operations.html#tk.rss_all - -作者:[Kent McNeil, Vice President of Software, Ciena Blue Planet][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/04/istock-165721901-100793858-large.jpg -[2]: https://www.blueplanet.com/resources/IT-plus-network-now-a-powerhouse-combination.html?utm_campaign=X1058319&utm_source=NWW&utm_term=BPVideo&utm_medium=sponsoredpost4 diff --git a/sources/talk/20190416 What SDN is and where it-s going.md b/sources/talk/20190416 What SDN is and where it-s going.md deleted file mode 100644 index 381c227b65..0000000000 --- a/sources/talk/20190416 What SDN is and where it-s going.md +++ /dev/null @@ -1,146 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (What SDN is and where it’s going) -[#]: via: (https://www.networkworld.com/article/3209131/what-sdn-is-and-where-its-going.html#tk.rss_all) -[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/) - -What SDN is and where it’s going -====== -Software-defined networking (SDN) established a foothold in cloud computing, intent-based networking, and network security, with Cisco, VMware, Juniper and others leading the charge. -![seedkin / Getty Images][1] - -Hardware reigned supreme in the networking world until the emergence of software-defined networking (SDN), a category of technologies that separate the network control plane from the forwarding plane to enable more automated provisioning and policy-based management of network resources. - -SDN's origins can be traced to a research collaboration between Stanford University and the University of California at Berkeley that ultimately yielded the [OpenFlow][2] protocol in the 2008 timeframe. - -**[Learn more about the[difference between SDN and NFV][3]. Get regularly scheduled insights by [signing up for Network World newsletters][4]]** - -OpenFlow is only one of the first SDN canons, but it's a key component because it started the networking software revolution. OpenFlow defined a programmable network protocol that could help manage and direct traffic among routers and switches no matter which vendor made the underlying router or switch. - -In the years since its inception, SDN has evolved into a reputable networking technology offered by key vendors including Cisco, VMware, Juniper, Pluribus and Big Switch. The Open Networking Foundation develops myriad open-source SDN technologies as well. - -"Datacenter SDN no longer attracts breathless hype and fevered expectations, but the market is growing healthily, and its prospects remain robust," wrote Brad Casemore, IDC research vice president, data center networks, in a recent report, [_Worldwide Datacenter Software-Defined Networking Forecast, 2018–2022_][5]*. "*Datacenter modernization, driven by the relentless pursuit of digital transformation and characterized by the adoption of cloudlike infrastructure, will help to maintain growth, as will opportunities to extend datacenter SDN overlays and fabrics to multicloud application environments." - -SDN will be increasingly perceived as a form of established, conventional networking, Casemore said. - -IDC estimates that the worldwide data center SDN market will be worth more than $12 billion in 2022, recording a CAGR of 18.5% during the 2017–2022 period. The market generated revenue of nearly $5.15 billion in 2017, up more than 32.2% from 2016. - -In 2017, the physical network represented the largest segment of the worldwide datacenter SDN market, accounting for revenue of nearly $2.2 billion, or about 42% of the overall total revenue. In 2022, however, the physical network is expected to claim about $3.65 billion in revenue, slightly less than the $3.68 billion attributable to network virtualization overlays/SDN controller software but more than the $3.18 billion for SDN applications. - -“We're now at a point where SDN is better understood, where its use cases and value propositions are familiar to most datacenter network buyers and where a growing number of enterprises are finding that SDN offerings offer practical benefits,” Casemore said. “With SDN growth and the shift toward software-based network automation, the network is regaining lost ground and moving into better alignment with a wave of new application workloads that are driving meaningful business outcomes.” - -### **What is SDN? ** - -The idea of programmability is the basis for the most precise definition of what SDN is: technology that separates the control plane management of network devices from the underlying data plane that forwards network traffic. - -IDC broadens that definition of SDN by stating: “Datacenter SDN architectures feature software-defined overlays or controllers that are abstracted from the underlying network hardware, offering intent-or policy-based management of the network as a whole. This results in a datacenter network that is better aligned with the needs of application workloads through automated (thereby faster) provisioning, programmatic network management, pervasive application-oriented visibility, and where needed, direct integration with cloud orchestration platforms.” - -The driving ideas behind the development of SDN are myriad. For example, it promises to reduce the complexity of statically defined networks; make automating network functions much easier; and allow for simpler provisioning and management of networked resources, everywhere from the data center to the campus or wide area network. - -Separating the control and data planes is the most common way to think of what SDN is, but it is much more than that, said Mike Capuano, chief marketing officer for [Pluribus][6]. - -“At its heart SDN has a centralized or distributed intelligent entity that has an entire view of the network, that can make routing and switching decisions based on that view,” Capuano said. “Typically, network routers and switches only know about their neighboring network gear. But with a properly configured SDN environment, that central entity can control everything, from easily changing policies to simplifying configuration and automation across the enterprise.” - -### How does SDN support edge computing, IoT and remote access? - -A variety of networking trends have played into the central idea of SDN. Distributing computing power to remote sites, moving data center functions to the [edge][7], adopting cloud computing, and supporting [Internet of Things][8] environments – each of these efforts can be made easier and more cost efficient via a properly configured SDN environment. - -Typically in an SDN environment, customers can see all of their devices and TCP flows, which means they can slice up the network from the data or management plane to support a variety of applications and configurations, Capuano said. So users can more easily segment an IoT application from the production world if they want, for example. - -Some SDN controllers have the smarts to see that the network is getting congested and, in response, pump up bandwidth or processing to make sure remote and edge components don’t suffer latency. - -SDN technologies also help in distributed locations that have few IT personnel on site, such as an enterprise branch office or service provider central office, said Michael Bushong, vice president of enterprise and cloud marketing at Juniper Networks. - -“Naturally these places require remote and centralized delivery of connectivity, visibility and security. SDN solutions that centralize and abstract control and automate workflows across many places in the network, and their devices, improve operational reliability, speed and experience,” Bushong said. - -### **How does SDN support intent-based networking?** - -Intent-based networking ([IBN][9]) has a variety of components, but basically is about giving network administrators the ability to define what they want the network to do, and having an automated network management platform create the desired state and enforce policies to ensure what the business wants happens. - -“If a key tenet of SDN is abstracted control over a fleet of infrastructure, then the provisioning paradigm and dynamic control to regulate infrastructure state is necessarily higher level,” Bushong said. “Policy is closer to declarative intent, moving away from the minutia of individual device details and imperative and reactive commands.” - -IDC says that intent-based networking “represents an evolution of SDN to achieve even greater degrees of operational simplicity, automated intelligence, and closed-loop functionality.” - -For that reason, IBN represents a notable milestone on the journey toward autonomous infrastructure that includes a self-driving network, which will function much like the self-driving car, producing desired outcomes based on what network operators and their organizations wish to accomplish, Casemore stated. - -“While the self-driving car has been designed to deliver passengers safely to their destination with minimal human intervention, the self-driving network, as part of autonomous datacenter infrastructure, eventually will achieve similar outcomes in areas such as network provisioning, management, and troubleshooting — delivering applications and data, dynamically creating and altering network paths, and providing security enforcement with minimal need for operator intervention,” Casemore stated. - -While IBN technologies are relatively young, Gartner says by 2020, more than 1,000 large enterprises will use intent-based networking systems in production, up from less than 15 in the second quarter of 2018. - -### **How does SDN help customers with security?** - -SDN enables a variety of security benefits. A customer can split up a network connection between an end user and the data center and have different security settings for the various types of network traffic. A network could have one public-facing, low security network that does not touch any sensitive information. Another segment could have much more fine-grained remote access control with software-based [firewall][10] and encryption policies on it, which allow sensitive data to traverse over it. - -“For example, if a customer has an IoT group it doesn’t feel is all that mature with regards to security, via the SDN controller you can segment that group off away from the critical high-value corporate traffic,” Capuano stated. “SDN users can roll out security policies across the network from the data center to the edge and if you do all of this on top of white boxes, deployments can be 30 – 60 percent cheaper than traditional gear.” - -The ability to look at a set of workloads and see if they match a given security policy is a key benefit of SDN, especially as data is distributed, said Thomas Scheibe, vice president of product management for Cisco’s Nexus and ACI product lines. - -"The ability to deploy a whitelist security model like we do with ACI [Application Centric Infrastructure] that lets only specific entities access explicit resources across your network fabric is another key security element SDN enables," Scheibe said. - -A growing number of SDN platforms now support [microsegmentation][11], according to Casemore. - -“In fact, micro-segmentation has developed as a notable use case for SDN. As SDN platforms are extended to support multicloud environments, they will be used to mitigate the inherent complexity of establishing and maintaining consistent network and security policies across hybrid IT landscapes,” Casemore said. - -### **What is SDN’s role in cloud computing?** - -SDN’s role in the move toward [private cloud][12] and [hybrid cloud][13] adoption seems a natural. In fact, big SDN players such as Cisco, Juniper and VMware have all made moves to tie together enterprise data center and cloud worlds. - -Cisco's ACI Anywhere package would, for example, let policies configured through Cisco's SDN APIC (Application Policy Infrastructure Controller) use native APIs offered by a public-cloud provider to orchestrate changes within both the private and public cloud environments, Cisco said. - -“As organizations look to scale their hybrid cloud environments, it will be critical to leverage solutions that help improve productivity and processes,” said [Bob Laliberte][14], a senior analyst with Enterprise Strategy Group, in a recent [Network World article][15]. “The ability to leverage the same solution, like Cisco’s ACI, in your own private-cloud environment as well as across multiple public clouds will enable organizations to successfully scale their cloud environments.” - -Growth of public and private clouds and enterprises' embrace of distributed multicloud application environments will have an ongoing and significant impact on data center SDN, representing both a challenge and an opportunity for vendors, said IDC’s Casemore. - -“Agility is a key attribute of digital transformation, and enterprises will adopt architectures, infrastructures, and technologies that provide for agile deployment, provisioning, and ongoing operational management. In a datacenter networking context, the imperative of digital transformation drives adoption of extensive network automation, including SDN,” Casemore said. - -### Where does SD-WAN fit in? - -The software-defined wide area network ([SD-WAN][16]) is a natural application of SDN that extends the technology over a WAN. While the SDN architecture is typically the underpinning in a data center or campus, SD-WAN takes it a step further. - -At its most basic, SD-WAN lets companies aggregate a variety of network connections – including MPLS, 4G LTE and DSL – into a branch or network edge location and have a software management platform that can turn up new sites, prioritize traffic and set security policies. - -SD-WAN's driving principle is to simplify the way big companies turn up new links to branch offices, better manage the way those links are utilized – for data, voice or video – and potentially save money in the process. - -[SD-WAN][17] lets networks route traffic based on centrally managed roles and rules, no matter what the entry and exit points of the traffic are, and with full security. For example, if a user in a branch office is working in Office365, SD-WAN can route their traffic directly to the closest cloud data center for that app, improving network responsiveness for the user and lowering bandwidth costs for the business. - -"SD-WAN has been a promised technology for years, but in 2019 it will be a major driver in how networks are built and re-built," Anand Oswal, senior vice president of engineering in Cisco’s Enterprise Networking Business, said a Network World [article][18] earlier this year. - -It's a profoundly hot market with tons of players including [Cisco][19], VMware, Silver Peak, Riverbed, Aryaka, Fortinet, Nokia and Versa. - -IDC says the SD-WAN infrastructure market will hit $4.5 billion by 2022, growing at a more than 40% yearly clip between now and then. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3209131/what-sdn-is-and-where-its-going.html#tk.rss_all - -作者:[Michael Cooney][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Michael-Cooney/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/04/what-is-sdn_2_where-is-it-going_arrows_fork-in-the-road-100793314-large.jpg -[2]: https://www.networkworld.com/article/2202144/data-center-faq-what-is-openflow-and-why-is-it-needed.html -[3]: https://www.networkworld.com/article/3206709/lan-wan/what-s-the-difference-between-sdn-and-nfv.html -[4]: https://www.networkworld.com/newsletters/signup.html -[5]: https://www.idc.com/getdoc.jsp?containerId=US43862418 -[6]: https://www.networkworld.com/article/3192318/pluribus-recharges-expands-software-defined-network-platform.html -[7]: https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-it-s-changing-the-network.html -[8]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[9]: https://www.networkworld.com/article/3202699/what-is-intent-based-networking.html -[10]: https://www.networkworld.com/article/3230457/what-is-a-firewall-perimeter-stateful-inspection-next-generation.html -[11]: https://www.networkworld.com/article/3247672/what-is-microsegmentation-how-getting-granular-improves-network-security.html -[12]: https://www.networkworld.com/article/2159885/cloud-computing-gartner-5-things-a-private-cloud-is-not.html -[13]: https://www.networkworld.com/article/3233132/what-is-hybrid-cloud-computing.html -[14]: https://www.linkedin.com/in/boblaliberte90/ -[15]: https://www.networkworld.com/article/3336075/cisco-serves-up-flexible-data-center-options.html -[16]: https://www.networkworld.com/article/3031279/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html -[17]: https://www.networkworld.com/article/3031279/sd-wan/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html -[18]: https://www.networkworld.com/article/3332027/cisco-touts-5-technologies-that-will-change-networking-in-2019.html -[19]: https://www.networkworld.com/article/3322937/what-will-be-hot-for-cisco-in-2019.html diff --git a/sources/talk/20190417 Clearing up confusion between edge and cloud.md b/sources/talk/20190417 Clearing up confusion between edge and cloud.md deleted file mode 100644 index 722051e8a7..0000000000 --- a/sources/talk/20190417 Clearing up confusion between edge and cloud.md +++ /dev/null @@ -1,69 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Clearing up confusion between edge and cloud) -[#]: via: (https://www.networkworld.com/article/3389364/clearing-up-confusion-between-edge-and-cloud.html#tk.rss_all) -[#]: author: (Anne Taylor https://www.networkworld.com/author/Anne-Taylor/) - -Clearing up confusion between edge and cloud -====== -The benefits of edge computing are not just hype; however, that doesn’t mean you should throw cloud computing initiatives to the wind. -![iStock][1] - -Edge computing and cloud computing are sometimes discussed as if they’re mutually exclusive approaches to network infrastructure. While they may function in different ways, utilizing one does not preclude the use of the other. - -Indeed, [Futurum Research][2] found that, among companies that have deployed edge projects, only 15% intend to separate these efforts from their cloud computing initiatives — largely for security or compartmentalization reasons. - -So then, what’s the difference, and how do edge and cloud work together? - -**Location, location, location** - -Moving data and processing to the cloud, as opposed to on-premises data centers, has enabled the business to move faster, more efficiently, less expensively — and in many cases, more securely. - -Yet cloud computing is not without challenges, particularly: - - * Users will abandon a graphics-heavy website if it doesn’t load quickly. So, imagine the lag for compute-heavy processing associated artificial intelligence or machine learning functions. - - * The strength of network connectivity is crucial for large data sets. As enterprises increasingly generate data, particularly with the adoption of Internet of Things (IoT), traditional cloud connections will be insufficient. - - - - -To make up for the lack of speed and connectivity with cloud, processing for mission-critical applications will need to occur closer to the data source. Maybe that’s a robot on the factory floor, digital signage at a retail store, or an MRI machine in a hospital. That’s edge computing, which reduces the distance the data must travel and thereby boosts the performance and reliability of applications and services. - -**One doesn’t supersede the other** - -That said, the benefits gained by edge computing don’t negate the need for cloud. In many cases, IT will now become a decision-maker in terms of best usage for each. For example, edge might make sense for devices running processing-power-hungry apps such as IoT, artificial intelligence, and machine learning. And cloud will work for apps where time isn’t necessarily of the essence, like inventory or big-data projects. - -> “By being able to triage the types of data processing on the edge versus that heading to the cloud, we can keep both systems running smoothly – keeping our customers and employees safe and happy,” [writes Daniel Newman][3], principal analyst for Futurum Research. - -And in reality, edge will require cloud. “To enable digital transformation, you have to build out the edge computing side and connect it with the cloud,” [Tony Antoun][4], senior vice president of edge and digital at GE Digital, told _Automation World_. “It’s a journey from the edge to the cloud and back, and the cycle keeps continuing. You need both to enrich and boost the business and take advantage of different points within this virtual lifecycle.” - -**Ensuring resiliency of cloud and edge** - -Both edge and cloud computing require careful consideration to the underlying processing power. Connectivity and availability, no matter the application, are always critical measures. - -But especially for the edge, it will be important to have a resilient architecture. Companies should focus on ensuring security, redundancy, connectivity, and remote management capabilities. - -Discover how your edge and cloud computing environments can coexist at [APC.com][5]. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3389364/clearing-up-confusion-between-edge-and-cloud.html#tk.rss_all - -作者:[Anne Taylor][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Anne-Taylor/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/04/istock-612507606-100793995-large.jpg -[2]: https://futurumresearch.com/edge-computing-from-edge-to-enterprise/ -[3]: https://futurumresearch.com/edge-computing-data-centers/ -[4]: https://www.automationworld.com/article/technologies/cloud-computing/its-not-edge-vs-cloud-its-both -[5]: https://www.apc.com/us/en/solutions/business-solutions/edge-computing.jsp diff --git a/sources/talk/20190417 Startup MemVerge combines DRAM and Optane into massive memory pool.md b/sources/talk/20190417 Startup MemVerge combines DRAM and Optane into massive memory pool.md deleted file mode 100644 index 71ddf70826..0000000000 --- a/sources/talk/20190417 Startup MemVerge combines DRAM and Optane into massive memory pool.md +++ /dev/null @@ -1,58 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Startup MemVerge combines DRAM and Optane into massive memory pool) -[#]: via: (https://www.networkworld.com/article/3389358/startup-memverge-combines-dram-and-optane-into-massive-memory-pool.html#tk.rss_all) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Startup MemVerge combines DRAM and Optane into massive memory pool -====== -MemVerge bridges two technologies that are already a bridge. -![monsitj / Getty Images][1] - -A startup called MemVerge has announced software to combine regular DRAM with Intel’s Optane DIMM persistent memory into a single clustered storage pool and without requiring any changes to applications. - -MemVerge has been working with Intel in developing this new hardware platform for close to two years. It offers what it calls a Memory-Converged Infrastructure (MCI) to allow existing apps to use Optane DC persistent memory. It's architected to integrate seamlessly with existing applications. - -**[ Read also:[Mass data fragmentation requires a storage rethink][2] ]** - -Optane memory is designed to sit between high-speed memory and [solid-state drives][3] (SSDs) and acts as a cache for the SSD, since it has speed comparable to DRAM but SSD persistence. With Intel’s new Xeon Scalable processors, this can make up to 4.5TB of memory available to a processor. - -Optane runs in one of two modes: Memory Mode and App Direct Mode. In Memory Mode, the Optane memory functions like regular memory and is not persistent. In App Direct Mode, it functions as the SSD cache but apps don’t natively support it. They need to be tweaked to function properly in Optane memory. - -As it was explained to me, apps aren’t designed for persistent storage because the data is already in memory on powerup rather than having to load it from storage. So, the app has to know memory doesn’t go away and that it does not need to shuffle data back and forth between storage and memory. Therefore, apps natively don’t work in persistent memory. - -### Why didn't Intel think of this? - -All of which really begs a question I can’t get answered, at least not immediately: Why didn’t Intel think of this when it created Optane in the first place? - -MemVerge has what it calls Distributed Memory Objects (DMO) hypervisor technology to provide a logical convergence layer to run data-intensive workloads at memory speed with guaranteed data consistency across multiple systems. This allows Optane memory to process and derive insights from the enormous amounts of data in real time. - -That’s because MemVerge’s technology makes random access as fast as sequential access. Normally, random access is slower than sequential because of all the jumping around with random access vs. reading one sequential file. But MemVerge can handle many small files as fast as it handles one large file. - -MemVerge itself is actually software, with a single API for both DRAM and Optane. It’s also available via a hyperconverged server appliance that comes with 2 Cascade Lake processors, up to 512 GB DRAM, 6TB of Optane memory, and 360TB of NVMe physical storage capacity. - -However, all of this is still vapor. MemVerge doesn’t expect to ship a beta product until at least June. - -Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3389358/startup-memverge-combines-dram-and-optane-into-massive-memory-pool.html#tk.rss_all - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/big_data_center_server_racks_storage_binary_analytics_by_monsitj_gettyimages-951389152_3x2-100787358-large.jpg -[2]: https://www.networkworld.com/article/3323580/mass-data-fragmentation-requires-a-storage-rethink.html -[3]: https://www.networkworld.com/article/3326058/what-is-an-ssd.html -[4]: https://www.facebook.com/NetworkWorld/ -[5]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190417 Want to the know future of IoT- Ask the developers.md b/sources/talk/20190417 Want to the know future of IoT- Ask the developers.md deleted file mode 100644 index 4f96f34b2b..0000000000 --- a/sources/talk/20190417 Want to the know future of IoT- Ask the developers.md +++ /dev/null @@ -1,119 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Want to the know future of IoT? Ask the developers!) -[#]: via: (https://www.networkworld.com/article/3389877/want-to-the-know-future-of-iot-ask-the-developers.html#tk.rss_all) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -Want to the know future of IoT? Ask the developers! -====== -A new survey of IoT developers reveals that connectivity, performance, and standards are growing areas of concern as IoT projects hit production. -![Avgust01 / Getty Images][1] - -It may be a cliché that software developers rule the world, but if you want to know the future of an important technology, it pays to look at what the developers are doing. With that in mind, there are some real, on-the-ground insights for the entire internet of things (IoT) community to be gained in a new [survey of more than 1,700 IoT developers][2] (pdf) conducted by the [Eclipse Foundation][3]. - -### IoT connectivity concerns - -Perhaps not surprisingly, security topped the list of concerns, easily outpacing other IoT worries. But that's where things begin to get interesting. More than a fifth (21%) of IoT developers cited connectivity as a challenge, followed by data collection and analysis (19%), performance (18%), privacy (18%), and standards (16%). - -Connectivity rose to second place after being the number three IoT concern for developers last year. Worries over security and data collection and analysis, meanwhile, actually declined slightly year over year. (Concerns over performance, privacy, and standards also increased significantly from last year.) - -**[ Learn more:[Download a PDF bundle of five essential articles about IoT in the enterprise][4] ]** - -“If you look at the list of developers’ top concerns with IoT in the survey,” said [Mike Milinkovich][5], executive director of the Eclipse Foundation via email, “I think connectivity, performance, and standards stand out — those are speaking to the fact that the IoT projects are getting real, that they’re getting out of sandboxes and into production.” - -“With connectivity in IoT,” Milinkovich continued, “everything seems straightforward until you have a sensor in a corner somewhere — narrowband or broadband — and physical constraints make it hard to connect." - -He also cited a proliferation of incompatible technologies that is driving developer concerns over connectivity. - -![][6] - -### IoT standards and interoperability - -Milinkovich also addressed one of [my personal IoT bugaboos: interoperability][7]. “Standards is a proxy for interoperability” among products from different vendors, he explained, which is an “elusive goal” in industrial IoT (IIoT). - -**[[Learn Java from beginning concepts to advanced design patterns in this comprehensive 12-part course!][8] ]** - -“IIoT is about breaking down the proprietary silos and re-tooling the infrastructure that’s been in our factories and logistics for many years using OSS standards and implementations — standard sets of protocols as opposed to vendor-specific protocols,” he said. - -That becomes a big issue when you’re deploying applications in the field and different manufacturers are using different protocols or non-standard extensions to existing protocols and the machines can’t talk to each other. - -**[ Also read:[Interoperability is the key to IoT success][7] ]** - -“This ties back to the requirement of not just having open standards, but more robust implementations of those standards in open source stacks,” Milinkovich said. “To keep maturing, the market needs not just standards, but out-of-the-box interoperability between devices.” - -“Performance is another production-grade concern,” he said. “When you’re in development, you think you know the bottlenecks, but then you discover the real-world issues when you push to production.” - -### Cloudy developments for IoT - -The survey also revealed that in some ways, IoT is very much aligned with the larger technology community. For example, IoT use of public and hybrid cloud architectures continues to grow. Amazon Web Services (AWS) (34%), Microsoft Azure (23%), and Google Cloud Platform (20%) are the leading IoT cloud providers, just as they are throughout the industry. If anything, AWS’ lead may be smaller in the IoT space than it is in other areas, though reliable cloud-provider market share figures are notoriously hard to come by. - -But Milinkovich sees industrial IoT as “a massive opportunity for hybrid cloud” because many industrial IoT users are very concerned about minimizing latency with their factory data, what he calls “their gold.” He sees factories moving towards hybrid cloud environments, leveraging “modern infrastructure technology like Kubernetes, and building around open protocols like HTTP and MQTT while getting rid of the older proprietary protocols.” - -### How IoT development is different - -In some ways, the IoT development world doesn’t seem much different than wider software development. For example, the top IoT programming languages mirror [the popularity of those languages][9] over all, with C and Java ruling the roost. (C led the way on constrained devices, while Java was the top choice for gateway and edge nodes, as well as the IoT cloud.) - -![][10] - -But Milinkovich noted that when developing for embedded or constrained devices, the programmer’s interface to a device could be through any number of esoteric hardware connectors. - -“You’re doing development using emulators and simulators, and it’s an inherently different and more complex interaction between your dev environment and the target for your application,” he said. “Sometimes hardware and software are developed in tandem, which makes it even more complicated.” - -For example, he explained, building an IoT solution may bring in web developers working on front ends using JavaScript and Angular, while backend cloud developers control cloud infrastructure and embedded developers focus on building software to run on constrained devices. - -No wonder IoT developers have so many things to worry about. - -**More about IoT:** - - * [What is the IoT? How the internet of things works][11] - * [What is edge computing and how it’s changing the network][12] - * [Most powerful Internet of Things companies][13] - * [10 Hot IoT startups to watch][14] - * [The 6 ways to make money in IoT][15] - * [What is digital twin technology? [and why it matters]][16] - * [Blockchain, service-centric networking key to IoT success][17] - * [Getting grounded in IoT networking and security][4] - * [Building IoT-ready networks must become a priority][18] - * [What is the Industrial IoT? [And why the stakes are so high]][19] - - - -Join the Network World communities on [Facebook][20] and [LinkedIn][21] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3389877/want-to-the-know-future-of-iot-ask-the-developers.html#tk.rss_all - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/iot_internet_of_things_mobile_connections_by_avgust01_gettyimages-1055659210_2400x1600-100788447-large.jpg -[2]: https://drive.google.com/file/d/17WEobD5Etfw5JnoKC1g4IME_XCtPNGGc/view -[3]: https://www.eclipse.org/ -[4]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[5]: https://blogs.eclipse.org/post/mike-milinkovich/measuring-industrial-iot%E2%80%99s-evolution -[6]: https://images.idgesg.net/images/article/2019/04/top-developer-concerns-2019-eclipse-foundation-100793974-large.jpg -[7]: https://www.networkworld.com/article/3204529/interoperability-is-the-key-to-iot-success.html -[8]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fjava -[9]: https://blog.newrelic.com/technology/popular-programming-languages-2018/ -[10]: https://images.idgesg.net/images/article/2019/04/top-iot-programming-languages-eclipse-foundation-100793973-large.jpg -[11]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[12]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[13]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[14]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[15]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[16]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[17]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[18]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[19]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[20]: https://www.facebook.com/NetworkWorld/ -[21]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190418 -Fiber-in-air- 5G network research gets funding.md b/sources/talk/20190418 -Fiber-in-air- 5G network research gets funding.md deleted file mode 100644 index 4a82248cde..0000000000 --- a/sources/talk/20190418 -Fiber-in-air- 5G network research gets funding.md +++ /dev/null @@ -1,64 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: ('Fiber-in-air' 5G network research gets funding) -[#]: via: (https://www.networkworld.com/article/3389881/extreme-5g-network-research-gets-funding.html#tk.rss_all) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -'Fiber-in-air' 5G network research gets funding -====== -A consortium of tech companies and universities plan to aggressively investigate the exploitation of D-Band to develop a new variant of 5G infrastructure. -![Peshkova / Getty Images][1] - -Wireless transmission at data rates of around 45gbps could one day be commonplace, some engineers say. “Fiber-in-air” is how the latest variant of 5G infrastructure is being described. To get there, a Britain-funded consortium of chip makers, universities, and others intend to aggressively investigate the exploitation of D-Band. That part of the radio spectrum is at 151-174.8 GHz in millimeter wavelengths (mm-wave) and hasn’t been used before. - -The researchers intend to do it by riffing on a now roughly 70-year-old gun-like electron-sending device that can trace its roots back through the annals of radio history: The Traveling Wave Tube, or TWT, an electron gun-magnet-combo that was used in the development of television and still brings space images back to Earth. - -**[ Also read:[The time of 5G is almost here][2] ]** - -D-Band, the spectrum the researchers want to use, has the advantage that it’s wide, so theoretically it should be good for fast, copious data rates. The problem with it though, and the reason it hasn’t thus far been used, is that it’s subject to monkey-wrenching from atmospheric conditions such as rain, explains IQE, a semiconductor wafer and materials producer involved in the project, in a [press release][3]. The team says attenuation is fixable, though. Their solution is the now-aging TWTs. - -The group, which includes BT, Filtronic, Glasgow University, Intel, Nokia Bell Labs, Optocap, and Teledyne e2v, has secured funding of the equivalent of $1.12 million USD from the U.K.’s [Engineering and Physical Sciences Research Council (EPSRC)][4]. That’s the principal public funding body for engineering science research there. - -### Tapping the power of TWTs - -The DLINK system, as the team calls it, will use a high-power vacuum TWT with a special, newly developed tunneling diode and a modulator. Two bands of 10 GHz, each will deliver the throughput, [explains Lancaster University on its website][5]. The tubes are, in fact, special amplifiers that produce 10 Watts. That’s 10 times what an equivalent solid-state solution would likely produce at the same spot in the band, they say. Energy is basically sent from the electron beam to an electric field generated by the input signal. - -Despite TWTs being around for eons, “no D-band TWTs are available in the market.” The development of one is key to these fiber-in-air speeds, the researchers say. - -They will include “unprecedented data rate and transmission distance,” IQE writes. - -The TWT device, although used extensively in space wireless communications since its invention in the 1950s, is overlooked as a significant contributor to global communications systems, say a group of French researchers working separately from this project, who recently argue that TWTs should be given more recognition. - -TWT’s are “the unsung heroes of space exploration,” the Aix-Marseille Université researchers say in [an article on publisher Springer’s website][6]. Springer is promoting the group's 2019-published [paper][7] in the European Physical Journal H in which they delve into the history of the simple electron gun and magnet device. - -“Its role in the history of wireless communications and in the space conquest is significant, but largely ignored,” they write in their paper. - -They will be pleased to hear it maybe isn’t going away anytime soon. - -Join the Network World communities on [Facebook][8] and [LinkedIn][9] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3389881/extreme-5g-network-research-gets-funding.html#tk.rss_all - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/abstract_data_coding_matrix_structure_network_connections_by_peshkova_gettyimages-897683944_2400x1600-100788487-large.jpg -[2]: https://www.networkworld.com/article/3354477/mobile-world-congress-the-time-of-5g-is-almost-here.html -[3]: https://www.iqep.com/media/2019/03/iqe-partners-in-key-wireless-communications-project-for-5g-infrastructure-(1)/ -[4]: https://epsrc.ukri.org/ -[5]: http://wp.lancs.ac.uk/dlink/ -[6]: https://www.springer.com/gp/about-springer/media/research-news/all-english-research-news/traveling-wave-tubes--the-unsung-heroes-of-space-exploration/16578434 -[7]: https://link.springer.com/article/10.1140%2Fepjh%2Fe2018-90023-1 -[8]: https://www.facebook.com/NetworkWorld/ -[9]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190423 Open architecture and open source - The new wave for SD-WAN.md b/sources/talk/20190423 Open architecture and open source - The new wave for SD-WAN.md deleted file mode 100644 index 8be9e14ada..0000000000 --- a/sources/talk/20190423 Open architecture and open source - The new wave for SD-WAN.md +++ /dev/null @@ -1,186 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Open architecture and open source – The new wave for SD-WAN?) -[#]: via: (https://www.networkworld.com/article/3390151/open-architecture-and-open-source-the-new-wave-for-sd-wan.html#tk.rss_all) -[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/) - -Open architecture and open source – The new wave for SD-WAN? -====== -As networking continues to evolve, you certainly don't want to break out a forklift every time new technologies are introduced. Open architecture would allow you to replace the components of a system, and give you more flexibility to control your own networking destiny. -![opensource.com \(CC BY-SA 2.0\)][1] - -I recently shared my thoughts about the [role of open source in networking][2]. I discussed two significant technological changes that we have witnessed. I call them waves, and these waves will redefine how we think about networking and security. - -The first wave signifies that networking is moving to the software so that it can run on commodity off-the-shelf hardware. The second wave is the use of open source technologies, thereby removing the barriers to entry for new product innovation and rapid market access. This is especially supported in the SD-WAN market rush. - -Seemingly, we are beginning to see less investment in hardware unless there is a specific segment that needs to be resolved. But generally, software-based platforms are preferred as they bring many advantages. It is evident that there has been a technology shift. We have moved networking from hardware to software and this shift has positive effects for users, enterprises and service providers. - -**[ Don’t miss[customer reviews of top remote access tools][3] and see [the most powerful IoT companies][4] . | Get daily insights by [signing up for Network World newsletters][5]. ]** - -### Performance (hardware vs software) - -There has always been a misconception that the hardware-based platforms are faster due to the hardware acceleration that exists in the network interface controller (NIC). However, this is a mistaken belief. Nowadays, software platforms can reach similar performance levels as compared to hardware-based platforms. - -Initially, people viewed hardware as a performance-based vehicle but today this does not hold true anymore. Even the bigger vendors are switching to software-based platforms. We are beginning to see this almost everywhere in networking. - -### SD-WAN and open source - -SD-WAN really took off quite rapidly due to the availability of open source. It enabled the vendors to leverage all the available open source components and then create their solution on top. By and large, SD-WAN vendors used the open source as the foundation of their solution and then added additional proprietary code over the baseline. - -However, even when using various open source components, there is still a lot of work left for these vendors to make it to a complete SD-WAN solution, even for reaching a baseline of centrally managed routers with flexible network architecture control, not to talk about complete feature set of SD-WAN. - -The result of the work done by these vendors is still closed products so the fact they are using open source components in their products is merely a time-to-market advantage but not a big benefit to the end users (enterprises) or service providers launching hosted services with these products. They are still limited in flexibility and vendor diversity is only achieved through a multi-vendor strategy which in practice means launching multiple silo services each based on a different SD-WAN vendor without real selection of the technologies that make each of the SD-WAN services they launch. - -I recently came across a company called [Flexiwan][6], their goal is to fundamentally change this limitation of SD-WAN by offering a full open source solution that, as they say, “includes integration points in the core of the system that allow for 3rd party logic to be integrated in an efficient way.” They call this an open architecture, which, in practical terms, means a service provider or enterprise can integrate his own application logic into the core of the SD-WAN router…or select best of breed sub-technologies or applications instead of having these dictated by the vendor himself. I believe there is the possibility of another wave of SD-WAN with a fully open source and open architecture to SD-WAN. - -This type of architecture brings many benefits to users, enterprises and service providers, especially when compared to the typical lock-in of bigger vendors, such as Cisco and VMware. - -With an open source open architecture, it’s easier to control the versions and extend more flexibility by using the software offered by different providers. It offers the ability to switch providers, not to mention being easier to install and upgrade the versions. - -### SD-WAN, open source and open architecture - -An SD-WAN solution that is an open source with open architecture provides a modular and decomposed type of SD-WAN. This enables the selection of elements to provide a solution. - -For example, enterprises and service providers can select the best-of-breed technologies from independent vendors, such as deep packet inspection (DPI), security, wide area network (WAN) optimization, session border controller (SBC), VoIP and other traffic specific optimization logic. - -Some SD-WAN vendors define an open architecture in such a way that they just have a set of APIs, for example, northbound APIs, to enable one to build management or do service chaining. This is one approach to an open architecture but in fact, it’s pretty limited since it does not bring the full benefits that an open architecture should offer. - -### Open source and the fear of hacking - -However, when I think about an open source and open architecture for SD-WAN, the first thing that comes to mind is bad actors. What about the code? If it’s an open source, the bad actor can find vulnerabilities, right? - -The community is a powerful force and will fix any vulnerability. Also with open source, the vendor, who is the one responsible for the open source component will fix the vulnerability much faster than a closed solution, where you are unaware of the vulnerability until a fix is released. - -### The SD-WAN evolution - -Before we go any further, let’s examine the history of SD-WAN and its origins, how we used to connect from the wide area network (WAN) to other branches via private or public links. - -SD-WAN offers the ability to connect your organization to a WAN. This could be connecting to the Internet or other branches, to optimally deliver applications with a good user-experience. Essentially, SD-WAN allows the organizations to design the architecture of their network dynamically by means of software. - -### In the beginning, there was IPSec - -It started with IPSec. Around two decades back, in 1995, the popular design was that of mesh architecture. As a result, we had a lot of point-to-point connections. Firstly, mesh architectures with IPSec VPNs are tiresome to manage as there is a potential for 100s of virtual private network (VPN) configurations. - -Authentically, IPSec started with two fundamental goals. The first was the tunneling protocol that would allow organizations to connect the users or other networks to their private network. This enabled the enterprises to connect to networks that they did not have a direct route to. - -The second goal of IPSec was to encrypt packets at the network layer and therefore securing the data in motion. Let’s face it: at that time, IPSec was terrible for complicated multi-site interconnectivity and high availability designs. If left to its defaults, IPSec is best suited for static designs. - -This was the reason why we had to step in the next era where additional functionality was added to IPSec. For example, IPSec had issues in supporting routing protocols using multicast. To overcome this, IPSec over generic routing encapsulation (GRE) was introduced. - -### The next era of SD-WAN - -During the journey to 2008, one could argue that the next era of WAN connectivity was when additional features were added to IPSec. At this time IPSec became known as a “Swiss army knife.” It could do many things but not anything really well. - -Back then, you could create multiple links, but it failed to select the traffic over these links other than by using simple routing. You needed to add a routing protocol. For advanced agile architectures, IPSec had to be incorporated with other higher-level protocols. - -Features were then added based on measuring the quality. Link quality features were added to analyze any delay, drops and to select alternative links for your applications. We began to add tunnels, multi-links and to select the traffic based on the priority, not just based on the routing. - -The most common way to the tunnel was to have IPSec over GRE. You have the GRE tunnel that enables you to send any protocol end-to-end by using IPSec for the encryption. All this functionality was added to achieve and create dynamic tunnels over IPSec and to optimize the IPSec tunnels. - -This was a move in the right direction, but it was still complex. It was not centrally managed and was error-prone with complex configurations that were unable to manage large deployments. IPSec had far too many limitations, so in the mid-2000s early SD-WAN vendors started cropping up. Some of these vendors enabled the enterprises to aggregate many separate digital subscriber lines (DSL) links into one faster logical link. At the same time, others added time stamps and/or sequence numbers to packets to improve the network performance and security when running over best effort (internet) links. - -International WAN connectivity was a popular focus since the cost delta between the Internet and private multiprotocol label switching (MPLS) was 10x+ different. Primarily, enterprises wanted the network performance and security of MPLS without having to pay a premium for it. - -Most of these solutions sat in-front or behind a traditional router from companies like Cisco. Evidently, just like WAN Optimization vendors, these were additional boxes/solutions that enterprises added to their networks. - -### The next era of SD-WAN, circa 2012 - -It was somewhere in 2012 that we started to see the big rush to the SD-WAN market. Vendors such as Velocloud, Viptela and a lot of the other big players in the SD-WAN market kicked off with the objective of claiming some of the early SD-WAN success and going after the edge router market with a full feature router replacement and management simplicity. - -Open source networking software and other open source components for managing the traffic enabled these early SD-WAN vendors to lay a foundation where a lot of the code base was open source. They would then “glue” it together and add their own additional features. - -Around this time, Intel was driving data plane development kit (DPDK) and advanced encryption standard (AES) instruction set, which enabled that software to run on commodity hardware. The SD-WAN solutions were delivered as closed solutions where each solution used its own set of features. The features and technologies chosen for each vendor were different and not compatible with each other. - -### The recent era of SD-WAN, circa 2017 - -A tipping point in 2017 was the gold rush for SD-WAN deployments. Everyone wanted to have SD-WAN as fast as possible. - -The SD-WAN market has taken off, as seen by 50 vendors with competing, proprietary solutions and market growth curves with a CAGR of 100%. There is a trend of big vendors like Cisco, Vmware and Oracle acquiring startups to compete in this new market. - -As a result, Cisco, which is the traditional enterprise market leader in WAN routing solutions felt threatened since its IWAN solution, which had been around since 2008, was too complex (a 900-page configuration and operations manual). Besides, its simple solution based on the Meraki acquisition was not feature-rich enough for the large enterprises. - -With their acquisition of Viptela, Cisco currently has a 13% of the market share, and for the first time in decades, it is not the market leader. The large cloud vendors, such as Google and Facebook are utilizing their own technology for routing within their very large private networks. - -At some point between 2012 and 2017, we witnessed the service providers adopting SD-WAN. This introduced the onset and movement of managed SD-WAN services. As a result, the service providers wanted to have SD-WAN on the menu for their customers. But there were many limitations in the SD-WAN market, as it was offered as a closed-box solution, giving the service providers limited control. - -At this point surfaced an expectation of change, as service providers and enterprises looked for more control. Customers can get better functionality from a multi-vendor approach than from a single vendor. - -### Don’t forget DIY SD-WAN - -Up to 60% of service providers and enterprises within the USA are now looking at DIY SD-WAN. A DIY SD-WAN solution is not where the many pieces of open source are taken and caste into something. The utmost focus is on the solution that can be self-managed but buy from a vendor. - -Today, the majority of the market is looking for managed solutions and the upper section that has the expertise wants to be equipped with more control options. - -### SD-WAN vendors attempting everything - -There is a trend that some vendors try to do everything with SD-WAN. As a result, whether you are an enterprise or a service provider, you are locked into a solution that is dictated by the SD-WAN vendor. - -The SD-WAN vendors have made the supplier choice or developed what they think is relevant. Evidently, some vendors are using stacks and software development kits (SDKs) that they purchased, for example, for deep packet inspection (DPI). - -Ultimately, you are locked into a specific solution that the vendor has chosen for you. If you are a service provider, you might disapprove of this limitation and if you are an enterprise with specific expertise, you might want to zoom in for more control. - -### All-in-one security vendors - -Many SD-WAN vendors promote themselves as security companies. But would you prefer to buy a security solution from an SD-WAN vendor or from an experienced vendor, such as Checkpoint? - -Both: enterprise and service providers want to have a choice, but with an integrated black box security solution, you don't have a choice. The more you integrate and throw into the same box, the stronger the vendor lock-in is and the weaker the flexibility. - -Essentially, with this approach, you are going for the lowest common denominator instead of the highest. Ideally, the technology of the services that you deploy on your network requires expertise. One vendor cannot be an expert in everything. - -An open architecture lies in a place for experts in different areas to join together and add their own specialist functionality. - -### Encrypted traffic - -As a matter of fact, what is not encrypted today will be encrypted tomorrow. The vendor of the application can perform intelligent things that the SD-WAN vendor cannot because they control both sides. Hence, if you can put something inside the SD-WAN edge device, they can make smart decisions even if the traffic is encrypted. - -But in the case of traditional SD-WANs, there needs to be a corporation with a content provider. However, with an open architecture, you can integrate anything, and nothing prevents the integration. A lot of traffic is encrypted and it's harder to manage encrypted traffic. However, an open architecture would allow the content providers to manage the traffic more effectively. - -### 2019 and beyond: what is an open architecture? - -Cloud providers and enterprises have discovered that 90% of the user experience and security problems arise due to the network: between where the cloud provider resides and where the end-user consumes the application. - -Therefore, both cloud providers and large enterprise with digital strategies are focusing on building their solutions based on open source stacks. Having a viable open source SD-WAN solution is the next step in the SD-WAN evolution, where it moves to involve the community in the solution. This is similar to what happens with containers and tools. - -Now, since we’re in 2019, are we going to witness a new era of SD-WAN? Are we moving to the open architecture with an open source SD-WAN solution? An open architecture should be the core of the SD-WAN infrastructure, where additional technologies are integrated inside the SD-WAN solution and not only complementary VNFs. There is an interface and native APIs that allow you to integrate logic into the router. This way, the router will be able to intercept and act according to the traffic. - -So, if I’m a service provider and have my own application, I would want to write logic that would be able to communicate with my application. Without an open architecture, the service providers can’t really offer differentiation and change the way SD-WAN makes decisions and interacts with the traffic of their applications. - -There is a list of various technologies that you need to be an expert in to be able to integrate. And each one of these technologies can be a company, for example, DPI, VoIP optimization, and network monitoring to name a few. An open architecture will allow you to pick and choose these various elements as per your requirements. - -Networking is going through a lot of changes and it will continue to evolve with the passage of time. As a result, you wouldn’t want something that forces you to break out a forklift each time new technologies are introduced. Primarily, open architecture allows you to replace the components of the system and add code or elements that handle specific traffic and applications. - -### Open source - -Open source gives you more flexibility to control your own destiny. It offers the ability to select your own services that you want to be applied to your system. It provides security in the sense that if something happens to the vendor or there is a vulnerability in the system, you know that you are backed by the community that can fix such misadventures. - -From the perspective of the business model, it makes a more flexible and cost-effective system. Besides, with open source, the total cost of ownership will also be lower. - -**This article is published as part of the IDG Contributor Network.[Want to Join?][7]** - -Join the Network World communities on [Facebook][8] and [LinkedIn][9] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3390151/open-architecture-and-open-source-the-new-wave-for-sd-wan.html#tk.rss_all - -作者:[Matt Conran][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Matt-Conran/ -[b]: https://github.com/lujun9972 -[1]: https://images.techhive.com/images/article/2017/03/6554314981_7f95641814_o-100714680-large.jpg -[2]: https://www.networkworld.com/article/3338143/the-role-of-open-source-in-networking.html -[3]: https://www.networkworld.com/article/3262145/lan-wan/customer-reviews-top-remote-access-tools.html#nww-fsb -[4]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html#nww-fsb -[5]: https://www.networkworld.com/newsletters/signup.html#nww-fsb -[6]: https://flexiwan.com/sd-wan-open-source/ -[7]: /contributor-network/signup.html -[8]: https://www.facebook.com/NetworkWorld/ -[9]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190424 How data storage will shift to blockchain.md b/sources/talk/20190424 How data storage will shift to blockchain.md deleted file mode 100644 index b31653e0f7..0000000000 --- a/sources/talk/20190424 How data storage will shift to blockchain.md +++ /dev/null @@ -1,70 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How data storage will shift to blockchain) -[#]: via: (https://www.networkworld.com/article/3390722/how-data-storage-will-shift-to-blockchain.html#tk.rss_all) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -How data storage will shift to blockchain -====== -Move over cloud and traditional in-house enterprise data center storage, distributed storage based on blockchain may be arriving imminently. -![Cybrain / Getty Images][1] - -If you thought cloud storage was digging in its heels to become the go-to method for storing data, and at the same time grabbing share from own-server, in-house storage, you may be interested to hear that some think both are on the way out. Instead organizations will use blockchain-based storage. - -Decentralized blockchain-based file storage will be more secure, will make it harder to lose data, and will be cheaper than anything seen before, say organizations actively promoting the slant on encrypted, distributed technology. - -**[ Read also:[Why blockchain (might be) coming to an IoT implementation near you][2] ]** - -### Storing transactional data in a blockchain - -China company [FileStorm][3], which describes itself in marketing materials as the first [Interplanetary File Storage][4] (IPFS) platform on blockchain, says the key to making it all work is to only store the transactional data in blockchain. The actual data files, such as large video files, are distributed in IPFS. - -IPFS is a distributed, peer-to-peer file storage protocol. File parts come from multiple computers all at the same time, supposedly making the storage hardy. FileStorm adds blockchain on top of it for a form of transactional indexing. - -“Blockchain is designed to store transactions forever, and the data can never be altered, thus a trustworthy system is created,” says Raymond Fu, founder of FileStorm and chief product officer of MOAC, the underlying blockchain system used, in a video on the FileStorm website. - -“The blocks are used to store only small transactional data,” he says. You can’t store the large files on it. Those are distributed. Decentralized data storage platforms are needed for added decentralized blockchain, he says. - -YottaChain, another blockchain storage start-up project is coming at the whole thing from a slightly different angle. It claims its non-IPFS system is more secure partly because it performs deduplication after encryption. - -“Data is 10,000 times more secure than [traditional] centralized storage,” it says on its [website][5]. Deduplication eliminates duplicated or redundant data. - -### Disrupting data storage - -“Blockchain will disrupt data storage,” [says BlockApps separately][6]. The blockchain backend platform provider says advantages to this new generation of storage include that decentralizing data provides more security and privacy. That's due in part because it's harder to hack than traditional centralized storage. That the files are spread piecemeal among nodes, conceivably all over the world, makes it impossible for even the participating node to view the contents of the complete file, it says. - -Sharding, which is the term for the breaking apart and node-spreading of the actual data, is secured through keys. Markets can award token coins for mining, and coins can be spent to gain storage. Excess storage can even be sold. And cryptocurrencies have been started to “incentivize usage and to create a market for buying and selling decentralized storage,” BlockApps explains. - -The final parts of this new storage mix are that lost files are minimized because data can be duplicated simply — the data sets, for example, can be stored multiple times for error correction — and costs are reduced due to efficiencies. - -Square Tech (Shenzhen) Co., which makes blockchain file storage nodes, says in its marketing materials that it intends to build service centers globally to monitor its nodes in real time. Interestingly, another area the company has gotten involved in is the internet of things (IoT), and [it says][7] it wants “to unite the technical resources, capital, and human resources of the IoT industry and blockchain.” Perhaps we end up with a form of the internet of storage things? - -“The entire cloud computing industry will be disrupted by blockchain technology in just a few short years,” says BlockApps. Dropbox and Amazon “may even become overpriced and obsolete if they do not find ways to integrate with the advances.” - -Join the Network World communities on [Facebook][8] and [LinkedIn][9] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3390722/how-data-storage-will-shift-to-blockchain.html#tk.rss_all - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/chains_binary_data_blockchain_security_by_cybrain_gettyimages-926677890_2400x1600-100788435-large.jpg -[2]: https://www.networkworld.com/article/3386881/why-blockchain-might-be-coming-to-an-iot-implementation-near-you.html -[3]: http://filestorm.net/ -[4]: https://ipfs.io/ -[5]: https://www.yottachain.io/ -[6]: https://blockapps.net/blockchain-disrupt-data-storage/ -[7]: http://www.sikuaikeji.com/ -[8]: https://www.facebook.com/NetworkWorld/ -[9]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190424 No, drone delivery still isn-t ready for prime time.md b/sources/talk/20190424 No, drone delivery still isn-t ready for prime time.md deleted file mode 100644 index c948f458ce..0000000000 --- a/sources/talk/20190424 No, drone delivery still isn-t ready for prime time.md +++ /dev/null @@ -1,91 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (No, drone delivery still isn’t ready for prime time) -[#]: via: (https://www.networkworld.com/article/3390677/drone-delivery-not-ready-for-prime-time.html#tk.rss_all) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -No, drone delivery still isn’t ready for prime time -====== -Despite incremental progress and limited regulatory approval in the U.S. and Australia, drone delivery still isn’t a viable option in the vast majority of use cases. -![Sorry imKirk \(CC0\)][1] - -April has a been a big month for drone delivery. First, [Alphabet’s Wing Aviation drones got approval from Australia’s Civil Aviation Safety Authority (CASA)][2], for public deliveries in the country, and this week [Wing earned Air Carrier Certification from the U.S. Federal Aviation Administration][3]. These two regulatory wins got lot of people got very excited. Finally, the conventional wisdom exulted, drone delivery is actually becoming a reality. - -Not so fast. - -### Drone delivery still in pilot/testing mode - -Despite some small-scale successes and the first signs of regulatory acceptance, drone delivery remains firmly in the carefully controlled pilot/test phase (and yes, I know drones don’t carry pilots). - -**[ Also read:[Coffee drone delivery: Ideas this bad could kill the internet of things][4] ]** - -For example, despite getting FAA approval to begin commercial deliveries, Wing is still working up beginning delivery trials to test the technology and gather information in Virginia later this year. - -But what about that public approval from CASA for deliveries outside Canberra? That’s [a real business][5] now, right? - -Well, yes and no. - -On the “yes” side, the Aussie approval reportedly came after 18 months of tests, 70,000 flights, and more than 3,000 actual deliveries of products from local coffee shops and pharmacies. So, at least some people somewhere in the world are actually getting stuff dropped at their doors by drones. - -In the “no” column, however, goes the fact that the approval covers only about 100 suburban homes, though more are planned to be added “in the coming weeks and months.” More importantly, the approval includes strict limits on when and where the drones can go. No crossing main roads, no nighttime deliveries, and prohibitions to stay away from people. And drone-eligible customers need a safety briefing! - -### Safety briefings required for customers - -That still sounds like a small-scale test, not a full-scale commercial roll-out. And while I think drone-safety classes are probably a good idea – and the testing period apparently passed without any injuries – even the perceived _need_ for them is not be a great advertisement for rapid expansion of drone deliveries. - -Ironically, though, a bigger issue than protecting people from the drones, perhaps, is protecting the drones from people. Instructions to stay 2 to 5 meters away from folks will help, but as I’ve previously addressed, these things are already seen as attractive nuisances and vandalism targets. Further raising the stakes, many local residents were said to be annoyed at the noise created by the drones. Now imagine those contraptions buzzing right by you all loaded down with steaming hot coffee or delicious ice cream. - -And even with all those caveats, no one is talking about the key factors in making drone deliveries a viable business: How much will those deliveries cost and who will pay? For a while, the desire to explore the opportunity will drive investment, but that won’t last forever. If drone deliveries aren’t cost effective for businesses, they won’t spread very far. - -From the customer perspective, most drone delivery tests are not yet charging for the service. If and when they start carrying fees as well as purchases, the novelty factor will likely entice many shoppers to pony up to get their items airlifted directly to their homes. But that also won’t last. Drone delivery will have to demonstrate that it’s better — faster, cheaper, or more reliable — than the existing alternatives to find its niche. - -### Drone deliveries are fast, commercial roll-out will be slow - -Long term, I have no doubt that drone delivery will eventually become an accepted part of the transportation infrastructure. I don’t necessarily buy into Wing’s prediction of an AU $40 million drone delivery market in Australia coming to pass anytime soon, but real commercial operations seem inevitable. - -It’s just going to be more limited than many proponents claim, and it’s likely to take a lot longer than expected to become mainstream. For example, despite ongoing testing, [Amazon has already missed Jeff Bezos’ 2018 deadline to begin commercial drone deliveries][6], and we haven’t heard much about [Walmart’s drone delivery plans][7] lately. And while tests by a number of companies continue in locations ranging from Iceland and Finland to the U.K. and the U.S. have created a lot of interest, they have not yet translated into widespread availability. - -Apart from the issue of how much consumers really want their stuff delivered by an armada of drones (a [2016 U.S. Post Office study][8] found that 44% of respondents liked the idea, while 34% didn’t — and 37% worried that drone deliveries might not be safe), a lot has to happen before that vision becomes reality. - -At a minimum, successful implementations of full-scale commercial drone delivery will require better planning, better-thought-out business cases, more rugged and efficient drone technology, and significant advances in flight control and autonomous flight. Like drone deliveries themselves, all that stuff is coming; it just hasn’t arrived yet. - -**More about drones and the internet of things:** - - * [Drone defense -- powered by IoT -- is now a thing][9] - * [Ideas this bad could kill the Internet of Things][4] - * [10 reasons Amazon's drone delivery plan still won't fly][10] - * [Amazon’s successful drone delivery test doesn’t really prove anything][11] - - - -Join the Network World communities on [Facebook][12] and [LinkedIn][13] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3390677/drone-delivery-not-ready-for-prime-time.html#tk.rss_all - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/07/drone_mountains_by_sorry_imkirk_cc0_via_unsplash_1200x800-100763763-large.jpg -[2]: https://medium.com/wing-aviation/wing-launches-commercial-air-delivery-service-in-canberra-5da134312474 -[3]: https://medium.com/wing-aviation/wing-becomes-first-certified-air-carrier-for-drones-in-the-us-43401883f20b -[4]: https://www.networkworld.com/article/3301277/ideas-this-bad-could-kill-the-internet-of-things.html -[5]: https://wing.com/australia/canberra -[6]: https://www.businessinsider.com/jeff-bezos-predicted-amazon-would-be-making-drone-deliveries-by-2018-2018-12?r=US&IR=T -[7]: https://www.networkworld.com/article/2999828/walmart-delivery-drone-plans.html -[8]: https://www.uspsoig.gov/sites/default/files/document-library-files/2016/RARC_WP-17-001.pdf -[9]: https://www.networkworld.com/article/3309413/drone-defense-powered-by-iot-is-now-a-thing.html -[10]: https://www.networkworld.com/article/2900317/10-reasons-amazons-drone-delivery-plan-still-wont-fly.html -[11]: https://www.networkworld.com/article/3185478/amazons-successful-drone-delivery-test-doesnt-really-prove-anything.html -[12]: https://www.facebook.com/NetworkWorld/ -[13]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190426 Profiling D-s Garbage Collection with Bpftrace.md b/sources/talk/20190426 Profiling D-s Garbage Collection with Bpftrace.md deleted file mode 100644 index ce0a408ae6..0000000000 --- a/sources/talk/20190426 Profiling D-s Garbage Collection with Bpftrace.md +++ /dev/null @@ -1,412 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Profiling D's Garbage Collection with Bpftrace) -[#]: via: (https://theartofmachinery.com/2019/04/26/bpftrace_d_gc.html) -[#]: author: (Simon Arneaud https://theartofmachinery.com) - -Profiling D's Garbage Collection with Bpftrace -====== - -Recently I’ve been playing around with using [`bpftrace`][1] to trace and profile D’s garbage collector. Here are some examples of the cool stuff that’s possible. - -### What is `bpftrace`? - -It’s a high-level debugging tool based on Linux’s eBPF. “eBPF” stands for “extended Berkely packet filter”, but that’s just a historical name and doesn’t mean much today. It’s really a virtual machine (like the [JVM][2]) that sits inside the Linux kernel and runs code in a special eBPF instruction set similar to normal machine code. Users are expected to write short programs in high-level languages (including C and others) that get compiled to eBPF and loaded into the kernel on the fly to do interesting things. - -As you might guess, eBPF is powerful for instrumenting a running kernel, but it also supports instrumenting user-space programs. - -### What you need - -First you need a Linux kernel. Sorry BSD, Mac OS and Windows users. (But some of you can use [DTrace][3].) - -Also, not just any Linux kernel will work. This stuff is relatively new, so you’ll need a modern kernel with BPF-related features enabled. You might need to use the newest (or even testing) version of a distro. Here’s how to check if your kernel meets the requirements: - -``` -$ uname -r -4.19.27-gentoo-r1sub -$ # 4.9+ recommended by bpftrace -$ zgrep CONFIG_UPROBES /proc/config.gz -CONFIG_UPROBES=y -$ # Also need -$ # CONFIG_BPF=y -$ # CONFIG_BPF_SYSCALL=y -$ # CONFIG_BPF_JIT=y -$ # CONFIG_HAVE_EBPF_JIT=y -$ # CONFIG_BPF_EVENTS=y -``` - -Of course, [you also need to install the `bpftrace` tool itself][4]. - -### `bpftrace` D “Hello World” - -Here’s a quick test you can do to make sure you’ve got everything working. First, let’s make a Hello World D binary: - -``` -$ pwd -/tmp/ -$ cat hello.d -import std.stdio; - -void main() -{ - writeln("Hello World"); -} -$ dmd hello.d -$ ./hello -Hello World -$ -``` - -Now let’s `bpftrace` it. `bpftrace` uses a high-level language that’s obviously inspired by AWK. I’ll explain enough to understand the post, but you can also check out the [`bpftrace` reference guide][5] and [one-liner tutorial][6]. The minimum you need to know is that a bpftrace program is a list of `event:name /filter predicate/ { program(); code(); }` blocks that define code snippets to be run on events. - -This time I’m only using Linux uprobes, which trigger on functions in user-space programs. The syntax is `uprobe:/path/to/binary:functionName`. One gotcha is that D “[mangles][7]” (encodes) function names before inserting them into the binary. If we want to trigger on the D code’s `main()` function, we need to use the mangled name: `_Dmain`. (By the way, `nm program | grep ' _D.*functionName'` is one quick trick for finding mangled names.) - -Run this `bpftrace` invocation in a terminal as root user: - -``` -# bpftrace -e 'uprobe:/tmp/hello:_Dmain { printf("D Hello World run with process ID %d\n", pid); }' -Attaching 1 probe... -``` - -While this is running, it’ll print a message every time the D Hello World program is executed by any user in any terminal. Press `Ctrl+C` to quit. - -All `bpftrace` code can be run directly from the command line like in the example above. But to make things easier to read from now on, I’ll make neatly formatted scripts. - -### Tracing some real code - -I’m using [D-Scanner][8], the D code analyser, as an example of a simple but non-trivial D workload. One nice thing about `bpftrace` and uprobes is that no modification of the program is needed. I’m just using a normal build of the `dscanner` tool, and using the [D runtime source code][9] as a codebase to analyse. - -Before using `bpftrace`, let’s try using [the profiling that’s built into the D GC implementation itself][10]: - -``` -$ dscanner --DRT-gcopt=profile:1 --etags -... - Number of collections: 85 - Total GC prep time: 0 milliseconds - Total mark time: 17 milliseconds - Total sweep time: 6 milliseconds - Total page recovery time: 3 milliseconds - Max Pause Time: 1 milliseconds - Grand total GC time: 28 milliseconds -GC summary: 35 MB, 85 GC 28 ms, Pauses 17 ms < 1 ms -``` - -(If you can make a custom build, you can also use [the D runtime GC API to get stats][11].) - -There’s one more gotcha when using `bpftrace` on `dscanner` to trace GC functions: the binary file we specify for the uprobe needs to be the binary file that actually contains the GC functions. That could be the D binary itself, or it could be a shared D runtime library. Try running `ldd /path/to/d_program` to list any linked shared libraries, and if the output contains `druntime`, use that full path when specifying uprobes. My `dscanner` binary doesn’t link to a shared D runtime, so I just use the full path to `dscanner`. (Running `which dscanner` gives `/usr/local/bin/dscanner` for me.) - -Anyway, all the GC functions live in a `gc` module, so their mangled names start with `_D2gc`. Here’s a `bpftrace` invocation that tallies GC function calls. For convenience, it also includes a uretprobe to automatically exit when `main()` returns. The output is sorted to make it a little easier to read. - -``` -# cat dumpgcfuncs.bt -uprobe:/usr/local/bin/dscanner:_D2gc* -{ - @[probe] = count(); -} - -uretprobe:/usr/local/bin/dscanner:_Dmain -{ - exit(); -} -# bpftrace dumpgcfuncs.bt | sort - -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC10freeNoSyncMFNbNiPvZv]: 31 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC10initializeFKCQCd11gcinterface2GCZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC11queryNoSyncMFNbPvZS4core6memory8BlkInfo_]: 44041 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC11removeRangeMFNbNiPvZv]: 2 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC12extendNoSyncMFNbPvmmxC8TypeInfoZm]: 251946 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC14collectNoStackMFNbZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC18fullCollectNoStackMFNbZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC4freeMFNbNiPvZv]: 31 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC5queryMFNbPvZS4core6memory8BlkInfo_]: 47704 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6__ctorMFZCQBzQBzQBxQCiQBn]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6callocMFNbmkxC8TypeInfoZPv]: 80 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6extendMFNbPvmmxC8TypeInfoZm]: 251946 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6mallocMFNbmkxC8TypeInfoZPv]: 12423 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_]: 948995 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC7getAttrMFNbPvZ2goFNbPSQClQClQCjQCu3GcxQBbZk]: 5615 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC7getAttrMFNbPvZk]: 5615 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC8addRangeMFNbNiPvmxC8TypeInfoZv]: 2 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs10freeNoSyncMFNbNiPvZvS_DQDsQDsQDqQEb8freeTimelS_DQErQErQEpQFa8numFreeslTQCdZQEbMFNbNiKQCrZv]: 31 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs11queryNoSyncMFNbPvZS4core6memory8BlkInfo_S_DQEmQEmQEkQEv9otherTimelS_DQFmQFmQFkQFv9numOtherslTQDaZQExMFNbKQDmZQDn]: 44041 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs12extendNoSyncMFNbPvmmxC8TypeInfoZmS_DQEfQEfQEdQEo10extendTimelS_DQFhQFhQFfQFq10numExtendslTQCwTmTmTxQDaZQFdMFNbKQDrKmKmKxQDvZm]: 251946 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs12mallocNoSyncMFNbmkKmxC8TypeInfoZPvS_DQEgQEgQEeQEp10mallocTimelS_DQFiQFiQFgQFr10numMallocslTmTkTmTxQCzZQFcMFNbKmKkKmKxQDsZQDl]: 961498 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs18fullCollectNoStackMFNbZ2goFNbPSQEaQEaQDyQEj3GcxZmTQvZQDfMFNbKQBgZm]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC__T9runLockedS_DQCeQCeQCcQCnQBs7getAttrMFNbPvZ2goFNbPSQDqQDqQDoQDz3GcxQBbZkS_DQEoQEoQEmQEx9otherTimelS_DQFoQFoQFmQFx9numOtherslTQCyTQDlZQFdMFNbKQDoKQEbZk]: 5615 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw15LargeObjectPool10allocPagesMFNbmZm]: 5597 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw15LargeObjectPool13updateOffsetsMFNbmZv]: 10745 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw15LargeObjectPool7getInfoMFNbPvZS4core6memory8BlkInfo_]: 3844 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw15SmallObjectPool7getInfoMFNbPvZS4core6memory8BlkInfo_]: 40197 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw15SmallObjectPool9allocPageMFNbhZPSQChQChQCfQCq4List]: 15022 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx10smallAllocMFNbhKmkZ8tryAllocMFNbZb]: 955967 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx10smallAllocMFNbhKmkZPv]: 955912 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx11ToScanStack4growMFNbZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx11fullcollectMFNbbZm]: 85 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx11removeRangeMFNbNiPvZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx23updateCollectThresholdsMFNbZv]: 84 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx4markMFNbNlPvQcZv]: 253 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx5sweepMFNbZm]: 84 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx7markAllMFNbbZ14__foreachbody3MFNbKSQCm11gcinterface5RangeZi]: 85 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx7markAllMFNbbZv]: 85 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx7newPoolMFNbmbZPSQBtQBtQBrQCc4Pool]: 6 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx7recoverMFNbZm]: 84 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx8addRangeMFNbNiPvQcxC8TypeInfoZv]: 2 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx8bigAllocMFNbmKmkxC8TypeInfoZ15tryAllocNewPoolMFNbZb]: 5 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx8bigAllocMFNbmKmkxC8TypeInfoZ8tryAllocMFNbZb]: 5616 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx8bigAllocMFNbmKmkxC8TypeInfoZPv]: 5586 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx8isMarkedMFNbNlPvZi]: 635 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx9allocPageMFNbhZPSQBuQBuQBsQCd4List]: 15024 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw4Pool10initializeMFNbmbZv]: 6 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw4Pool12freePageBitsMFNbmKxG4mZv]: 16439 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl5protoQo7ProtoGC4termMFZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl5protoQo7ProtoGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl5protoQo7ProtoGC8addRangeMFNbNiPvmxC8TypeInfoZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc4impl6manualQp8ManualGC10initializeFKCQBp11gcinterface2GCZv]: 1 -@[uprobe:/usr/local/bin/dscanner:_D2gc9pooltable__T9PoolTableTSQBc4impl12conservativeQBy4PoolZQBr6insertMFNbNiPQBxZb]: 6 -@[uprobe:/usr/local/bin/dscanner:_D2gc9pooltable__T9PoolTableTSQBc4impl12conservativeQBy4PoolZQBr8findPoolMFNaNbNiPvZPQCe]: 302268 -@[uprobe:/usr/local/bin/dscanner:_D2gc9pooltable__T9PoolTableTSQBc4impl12conservativeQBy4PoolZQBr8minimizeMFNaNbNjZAPQCd]: 30 -Attaching 231 probes... -``` - -All these functions are in [`src/gc/`][12], and most of the interesting ones here are in [`src/gc/impl/conservative/`][13]. There are 85 calls to `_D2gc4impl12conservativeQw3Gcx11fullcollectMFNbbZm`, which [`ddemangle`][14] translates to `nothrow ulong gc.impl.conservative.gc.Gcx.fullcollect(bool)`. That matches up with the report from `--DRT-gcopt=profile:1`. - -The heart of the `bpftrace` program is `@[probe] = count();`. `@` prefixes a global variable, in this case a variable with an empty name (allowed by `bpftrace`). We’re using the variable as a map (like an associative array in D), and indexing it with `probe`, a built-in variable containing the name of the uprobe that was triggered. The tally is kept using the magic `count()` function. - -### Garbage collection timings - -How about something more interesting, like generating a profile of collection timings? This time, to get more data, I won’t make `bpftrace` exit as soon as the `dscanner` exits. I’ll keep it running and run `dscanner` 100 times before quitting `bpftrace` with `Ctrl+C`: - -``` -# cat gcprofile.bt -uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx11fullcollectMFNbbZm -{ - @t = nsecs; -} - -uretprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw3Gcx11fullcollectMFNbbZm / @t / -{ - @gc_times = hist(nsecs - @t); -} -# bpftrace gcprofile.bt -Attaching 2 probes... -^C - -@gc_times: -[64K, 128K) 138 |@ | -[128K, 256K) 1367 |@@@@@@@@@@ | -[256K, 512K) 6687 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -[512K, 1M) 7 | | -[1M, 2M) 301 |@@ | -``` - -Et voila! A log-scale histogram of the `nsecs` timestamp difference between entering and exiting `fullcollect()`. The times are in nanoseconds, so we see that most collections are taking less than half a millisecond, but we have tail cases that take 1-2ms. - -### Function arguments - -`bpftrace` provides `arg0`, `arg1`, `arg2`, etc. built-in variables for accessing the arguments to a traced function. There are a couple of complications with using them with D code, however. - -The first is that (at the binary level) `dmd` makes `extern(D)` functions (i.e., normal D functions) take arguments in the reverse order of `extern(C)` functions (that `bpftrace` is expecting). Suppose you have a simple three-argument function. If it’s using the C calling convention, `bpftrace` will recognise the first argument as `arg0`. If it’s using the D calling convention, however, it’ll be picked up as `arg2`. - -``` -extern(C) void cfunc(int arg0, int arg1, int arg2) -{ - // ... -} - -// (extern(D) is the default) -extern(D) void dfunc(int arg2, int arg1, int arg0) -{ - // ... -} -``` - -If you look at [the D ABI spec][15], you’ll notice that (just like in C++) there can be a couple of hidden arguments if the function is more complex. If `dfunc` above returned a large struct, there can be an extra hidden argument for implementing [copy elision][16], which means the first argument would actually be `arg3`, and `arg0` would be the hidden argument. If `dfunc` were also a member function, it would have a hidden `this` argument, which would bump up the first argument to `arg4`. - -To get the hang of this, you might need to experiment with tracing function calls with known arguments. - -### Allocation sizes - -Let’s get a histogram of the memory allocation request sizes. Looking at the list of GC functions traced earlier, and comparing it with the GC source code, it looks like we need to trace these functions and grab the `size` argument: - -``` -class ConservativeGC : GC -{ - // ... - void *malloc(size_t size, uint bits, const TypeInfo ti) nothrow; - void *calloc(size_t size, uint bits, const TypeInfo ti) nothrow; - BlkInfo qalloc( size_t size, uint bits, const TypeInfo ti) nothrow; - // ... -} -``` - -As class member functions, they have a hidden `this` argument as well. The last one, `qalloc()`, returns a struct, so it also has a hidden argument for copy elision. So `size` is `arg3` for the first two functions, and `arg4` for `qalloc()`. Time to run a trace: - -``` -# cat allocsizeprofile.bt -uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6mallocMFNbmkxC8TypeInfoZPv, -uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6callocMFNbmkxC8TypeInfoZPv -{ - @ = hist(arg3); -} - -uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_ -{ - @ = hist(arg4); -} - -uretprobe:/usr/local/bin/dscanner:_Dmain -{ - exit(); -} -# bpftrace allocsizeprofile.bt -Attaching 4 probes... -@: -[2, 4) 2489 | | -[4, 8) 9324 |@ | -[8, 16) 46527 |@@@@@ | -[16, 32) 206324 |@@@@@@@@@@@@@@@@@@@@@@@ | -[32, 64) 448020 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@| -[64, 128) 147053 |@@@@@@@@@@@@@@@@@ | -[128, 256) 88072 |@@@@@@@@@@ | -[256, 512) 2519 | | -[512, 1K) 1830 | | -[1K, 2K) 3749 | | -[2K, 4K) 1668 | | -[4K, 8K) 256 | | -[8K, 16K) 2533 | | -[16K, 32K) 312 | | -[32K, 64K) 239 | | -[64K, 128K) 209 | | -[128K, 256K) 164 | | -[256K, 512K) 124 | | -[512K, 1M) 48 | | -[1M, 2M) 30 | | -[2M, 4M) 7 | | -[4M, 8M) 1 | | -[8M, 16M) 2 | | -``` - -So, we have a lot of small allocations, with a very long tail of larger allocations. Remember, size is on a log scale, so that long tail represents a very skewed distribution. - -### Small allocation hotspots - -Now for something more complex. Suppose we’re profiling our code and looking for low-hanging fruit for reducing the number of memory allocations. Code that makes a lot of small allocations tends to be a good candidate for this kind of refactoring. `bpftrace` lets us grab stack traces, which can be used to see what part of the main program caused an allocation. - -As of writing, there’s one little complication because of a limitation of `bpftrace`’s stack trace handling: it can only show meaningful function symbol names (as opposed to raw memory addresses) if `bpftrace` quits while the target program is still running. There’s [an open bug report for improving this behaviour][17], but in the meantime I just made sure `dscanner` took a long time, and that I shut down `bpftrace` first. - -Here’s how to grab the top three stack traces that lead to small (<16B) memory allocations with `qalloc()`: - -``` -# cat smallallocs.bt -uprobe:/usr/local/bin/dscanner:_D2gc4impl12conservativeQw14ConservativeGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_ -{ - if (arg4 < 16) - { - @[ustack] = count(); - } -} - -END -{ - print(@, 3); - clear(@); -} -# bpftrace smallallocs.bt -Attaching 2 probes... -^C@[ - _D2gc4impl12conservativeQw14ConservativeGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_+0 - _D2rt8lifetime12__arrayAllocFNaNbmxC8TypeInfoxQlZS4core6memory8BlkInfo_+236 - _d_arraysetlengthT+248 - _D8dscanner8analysis25label_var_same_name_check17LabelVarNameCheck9pushScopeMFZv+29 - _D8dscanner8analysis25label_var_same_name_check17LabelVarNameCheck9__mixin175visitMFxC6dparse3ast6ModuleZv+21 - _D8dscanner8analysis3run7analyzeFAyaxC6dparse3ast6ModulexSQCeQBy6config20StaticAnalysisConfigKS7dsymbol11modulecache11ModuleCacheAxS3std12experimental5lexer__T14TokenStructureThVQFpa305_0a20202020737472696e6720636f6d6d656e743b0a20202020737472696e6720747261696c696e67436f6d6d656e743b0a0a20202020696e74206f70436d702873697a655f7420692920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202069662028696e646578203c2069292072657475726e202d313b0a202020202020202069662028696e646578203e2069292072657475726e20313b0a202020202020202072657475726e20303b0a202020207d0a0a20202020696e74206f70436d702872656620636f6e737420747970656f66287468697329206f746865722920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202072657475726e206f70436d70286f746865722e696e646578293b0a202020207d0aZQYobZCQZv9container6rbtree__T12RedBlackTreeTSQBGiQBGd4base7MessageVQBFza62_20612e6c696e65203c20622e6c696e65207c7c2028612e6c696e65203d3d20622e6c696e6520262620612e636f6c756d6e203c20622e636f6c756d6e2920Vbi1ZQGt+11343 - _D8dscanner8analysis3run7analyzeFAAyaxSQBlQBf6config20StaticAnalysisConfigQBoKS6dparse5lexer11StringCacheKS7dsymbol11modulecache11ModuleCachebZb+337 - _Dmain+3618 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv+40 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+32 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv+139 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+32 - _d_run_main+463 - main+16 - __libc_start_main+235 - 0x41fd89415541f689 -]: 450 -@[ - _D2gc4impl12conservativeQw14ConservativeGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_+0 - _D2rt8lifetime12__arrayAllocFNaNbmxC8TypeInfoxQlZS4core6memory8BlkInfo_+236 - _d_arrayappendcTX+1944 - _D8dscanner8analysis10unmodified16UnmodifiedFinder9pushScopeMFZv+61 - _D8dscanner8analysis10unmodified16UnmodifiedFinder5visitMFxC6dparse3ast6ModuleZv+21 - _D8dscanner8analysis3run7analyzeFAyaxC6dparse3ast6ModulexSQCeQBy6config20StaticAnalysisConfigKS7dsymbol11modulecache11ModuleCacheAxS3std12experimental5lexer__T14TokenStructureThVQFpa305_0a20202020737472696e6720636f6d6d656e743b0a20202020737472696e6720747261696c696e67436f6d6d656e743b0a0a20202020696e74206f70436d702873697a655f7420692920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202069662028696e646578203c2069292072657475726e202d313b0a202020202020202069662028696e646578203e2069292072657475726e20313b0a202020202020202072657475726e20303b0a202020207d0a0a20202020696e74206f70436d702872656620636f6e737420747970656f66287468697329206f746865722920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202072657475726e206f70436d70286f746865722e696e646578293b0a202020207d0aZQYobZCQZv9container6rbtree__T12RedBlackTreeTSQBGiQBGd4base7MessageVQBFza62_20612e6c696e65203c20622e6c696e65207c7c2028612e6c696e65203d3d20622e6c696e6520262620612e636f6c756d6e203c20622e636f6c756d6e2920Vbi1ZQGt+11343 - _D8dscanner8analysis3run7analyzeFAAyaxSQBlQBf6config20StaticAnalysisConfigQBoKS6dparse5lexer11StringCacheKS7dsymbol11modulecache11ModuleCachebZb+337 - _Dmain+3618 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv+40 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+32 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv+139 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+32 - _d_run_main+463 - main+16 - __libc_start_main+235 - 0x41fd89415541f689 -]: 450 -@[ - _D2gc4impl12conservativeQw14ConservativeGC6qallocMFNbmkxC8TypeInfoZS4core6memory8BlkInfo_+0 - _D2rt8lifetime12__arrayAllocFNaNbmxC8TypeInfoxQlZS4core6memory8BlkInfo_+236 - _d_arrayappendcTX+1944 - _D8dscanner8analysis3run7analyzeFAyaxC6dparse3ast6ModulexSQCeQBy6config20StaticAnalysisConfigKS7dsymbol11modulecache11ModuleCacheAxS3std12experimental5lexer__T14TokenStructureThVQFpa305_0a20202020737472696e6720636f6d6d656e743b0a20202020737472696e6720747261696c696e67436f6d6d656e743b0a0a20202020696e74206f70436d702873697a655f7420692920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202069662028696e646578203c2069292072657475726e202d313b0a202020202020202069662028696e646578203e2069292072657475726e20313b0a202020202020202072657475726e20303b0a202020207d0a0a20202020696e74206f70436d702872656620636f6e737420747970656f66287468697329206f746865722920636f6e73742070757265206e6f7468726f77204073616665207b0a202020202020202072657475726e206f70436d70286f746865722e696e646578293b0a202020207d0aZQYobZCQZv9container6rbtree__T12RedBlackTreeTSQBGiQBGd4base7MessageVQBFza62_20612e6c696e65203c20622e6c696e65207c7c2028612e6c696e65203d3d20622e6c696e6520262620612e636f6c756d6e203c20622e636f6c756d6e2920Vbi1ZQGt+680 - _D8dscanner8analysis3run7analyzeFAAyaxSQBlQBf6config20StaticAnalysisConfigQBoKS6dparse5lexer11StringCacheKS7dsymbol11modulecache11ModuleCachebZb+337 - _Dmain+3618 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv+40 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+32 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv+139 - _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ7tryExecMFMDFZvZv+32 - _d_run_main+463 - main+16 - __libc_start_main+235 - 0x41fd89415541f689 -]: 450 -``` - -It looks like a lot of the small allocations are due to a red-black tree in `ModuleCache`. - -### What’s next? - -I think these examples already show that `bpftrace` is a pretty powerful tool. There’s a lot more that can done, and I highly recommended reading [Brendan Gregg’s eBPF tutorials][18]. - -I used uprobes to trace arbitrary functions in the D runtime. The pro of this is the freedom to do anything, but the cons are that I had to refer to the D runtime source code and manually deal with the D ABI. There’s also no guarantee that a script I write today will work with future versions of the runtime. Linux also supports making well-defined tracepoints in user code using a feature called [USDT][19]. That should let D code export stable tracepoints that can be used without worrying about the D ABI. I might do more experiments in future. - --------------------------------------------------------------------------------- - -via: https://theartofmachinery.com/2019/04/26/bpftrace_d_gc.html - -作者:[Simon Arneaud][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://theartofmachinery.com -[b]: https://github.com/lujun9972 -[1]: https://github.com/iovisor/bpftrace -[2]: https://en.wikipedia.org/wiki/Java_virtual_machine -[3]: http://dtrace.org/blogs/about/ -[4]: https://github.com/iovisor/bpftrace/blob/master/INSTALL.md -[5]: https://github.com/iovisor/bpftrace/blob/master/docs/reference_guide.md -[6]: https://github.com/iovisor/bpftrace/blob/master/docs/tutorial_one_liners.md -[7]: https://dlang.org/spec/abi.html#name_mangling -[8]: https://github.com/dlang-community/D-Scanner -[9]: https://github.com/dlang/druntime/ -[10]: https://dlang.org/spec/garbage.html#gc_config -[11]: https://dlang.org/phobos/core_memory.html#.GC.stats -[12]: https://github.com/dlang/druntime/tree/v2.081.1/src/gc -[13]: https://github.com/dlang/druntime/tree/v2.081.1/src/gc/impl/conservative -[14]: https://github.com/dlang/tools -[15]: https://dlang.org/spec/abi.html#parameters -[16]: https://en.wikipedia.org/wiki/Copy_elision -[17]: https://github.com/iovisor/bpftrace/issues/246 -[18]: http://www.brendangregg.com/blog/2019-01-01/learn-ebpf-tracing.html -[19]: https://lwn.net/Articles/753601/ diff --git a/sources/talk/20190430 Measuring the edge- Finding success with edge deployments.md b/sources/talk/20190430 Measuring the edge- Finding success with edge deployments.md deleted file mode 100644 index abc1d7dd0c..0000000000 --- a/sources/talk/20190430 Measuring the edge- Finding success with edge deployments.md +++ /dev/null @@ -1,73 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Measuring the edge: Finding success with edge deployments) -[#]: via: (https://www.networkworld.com/article/3391570/measuring-the-edge-finding-success-with-edge-deployments.html#tk.rss_all) -[#]: author: (Anne Taylor https://www.networkworld.com/author/Anne-Taylor/) - -Measuring the edge: Finding success with edge deployments -====== -To make the most of edge computing investments, it’s important to first understand objectives and expectations. -![iStock][1] - -Edge computing deployments are well underway as companies seek to better process the wealth of data being generated, for example, by Internet of Things (IoT) devices. - -So, what are the results? Plus, how can you ensure success with your own edge projects? - -**Measurements of success** - -The [use cases for edge computing deployments][2] vary widely, as do the business drivers and, ultimately, the benefits. - -Whether they’re seeking improved network or application performance, real-time data analytics, a better customer experience, or other efficiencies, enterprises are accomplishing their goals. Based on two surveys — one by [_Automation World_][3] and another by [Futurum Research][4] — respondents have reported: - - * Decreased network downtime - * Increased productivity - * Increased profitability/reduced costs - * Improved business processes - - - -Basically, success metrics can be bucketed into two categories: direct value propositions and cost reductions. In the former, companies are seeking results that measure revenue generation — such as improved digital experiences with customers and users. In the latter, metrics that prove the value of digitizing processes — like speed, quality, and efficacy — will demonstrate success with edge deployments. - -**Goalposts for success with edge** - -Edge computing deployments are underway. But before diving in, understand what’s driving these projects. - -According to the Futurum Research, 29% of respondents are currently investing in edge infrastructure, and 62% expect to adopt within the year. For these companies, the driving force has been the business, which expects operational efficiencies from these investments. Beyond that, there’s an expectation down the road to better align with IoT strategy. - -That being the case, it’s worth considering your business case before diving into edge. Ask: Are you seeking innovation and revenue generation amid digital transformation efforts? Or is your company looking for a low-risk, “test the waters” type of investment in edge? - -Next up, what type of edge project makes sense for your environment? Edge data centers fall into three categories: local devices for a specific purpose (e.g., an appliance for security systems or a gateway for cloud-to-premises storage); small local data centers (typically one to 10 racks for storage and processing); and regional data centers (10+ racks for large office spaces). - -Then, think about these best practices before talking with vendors: - - * Management: Especially for unmanned edge data centers, remote management is critical. You’ll need predictive alerts and a service contract that enables IT to be just as resilient as a regular data center. - * Security:Much of today’s conversation has been around data security. That starts with physical protection. Too many data breaches — including theft and employee error — are caused by physical access to IT assets. - * Standardization: There is no need to reinvent the wheel when it comes to edge data center deployments. Using standard components makes it easier for the internal IT team to deploy, manage, and maintain. - - - -Finally, consider the ecosystem. The end-to-end nature of edge requires not just technology integration, but also that all third parties work well together. A good ecosystem connects customers, partners, and vendors. - -Get further information to kickstart your edge computing environment at [APC.com][5]. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3391570/measuring-the-edge-finding-success-with-edge-deployments.html#tk.rss_all - -作者:[Anne Taylor][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Anne-Taylor/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/04/istock-912928582-100795093-large.jpg -[2]: https://www.networkworld.com/article/3391016/edge-computing-is-in-most-industries-future.html -[3]: https://www.automationworld.com/article/technologies/cloud-computing/its-not-edge-vs-cloud-its-both -[4]: https://futurumresearch.com/edge-computing-from-edge-to-enterprise/ -[5]: https://www.apc.com/us/en/solutions/business-solutions/edge-computing.jsp diff --git a/sources/talk/20190501 Yet another killer cloud quarter puts pressure on data centers.md b/sources/talk/20190501 Yet another killer cloud quarter puts pressure on data centers.md deleted file mode 100644 index d65fe448b4..0000000000 --- a/sources/talk/20190501 Yet another killer cloud quarter puts pressure on data centers.md +++ /dev/null @@ -1,92 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Yet another killer cloud quarter puts pressure on data centers) -[#]: via: (https://www.networkworld.com/article/3391465/another-strong-cloud-computing-quarter-puts-pressure-on-data-centers.html#tk.rss_all) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -Yet another killer cloud quarter puts pressure on data centers -====== -Continued strong growth from Amazon Web Services, Microsoft Azure, and Google Cloud Platform signals even more enterprises are moving to the cloud. -![Getty Images][1] - -You’d almost think I’d get tired of [writing this story over and over and over][2]… but the ongoing growth of cloud computing is too big a trend to ignore. - -Critically, the impressive growth numbers of the three leading cloud infrastructure providers—Amazon Web Services (AWS), Microsoft Azure, and Google Cloud Platform—doesn’t occur in a vacuum. It’s not just about new workloads being run in the cloud; it’s also about more and more enterprises moving existing workloads to the cloud from on-premises data centers. - -**[ Also read:[Is the cloud already killing the enterprise data center?][3] ]** - -To put these trends in perspective, let’s take a look at the results for all three vendors. - -### AWS keeps on trucking - -AWS remains by far the dominant player in the cloud infrastructure market, with a massive [$7.7 billion in quarterly sales][4] (an annual run rate of a whopping $30.8 billion). Even more remarkable, somehow AWS continues to grow revenue by almost 42% year over year. Oh, and that kind of growth is not just unique _this_ quarter; the unit has topped 40% revenue growth _every_ quarter since the beginning of 2017. (To be fair, the first quarter of 2018 saw an amazing 49% revenue growth.) - -And unlike many fast-growing tech companies, that incredible expansion isn’t being fueled by equally impressive losses. AWS earned a healthy $2.2 billion operating profit in the quarter, up 59% from the same period last year. One reason? [The company told analysts][5] it made big data center investments in 2016 and 2017, so it hasn’t had to do so more recently (it expects to boost spending on data centers later this year). The company [reportedly][6] described AWS revenue growth as “lumpy,” but it seems to me that the numbers merely vary between huge and even bigger. - -### Microsoft Azure grows even faster than AWS - -Sure, 41% growth is good, but [Microsoft’s quarterly Azure revenue][7] almost doubled that, jumping 73% year over year (fairly consistent with the previous—also stellar—quarter), helping the company exceed estimates for both sales and revenue and sparking a brief shining moment of a $1 billion valuation for the company. Microsoft doesn’t break out Azure’s sales and revenue, but [the commercial cloud business, which includes Azure as well as other cloud businesses, grew 41% in the quarter to $9.6 billion][8]. - -It’s impossible to tell exactly how big Azure is, but it appears to be growing faster than AWS, though off a much smaller base. While some analysts reportedly say Azure is growing faster than AWS was at a similar stage in its development, that may not bear much significance because the addressable cloud market is now far larger than it used be. - -According to [the New York Times][9], like AWS, Microsoft is also now reaping the benefits of heavy investments in new data centers around the world. And the Times credits Microsoft with “particular success” in [hybrid cloud installations][10], helping ease concerns among some slow-to-change enterprise about full-scale cloud adoption. - -**[ Also read:[Why hybrid cloud will turn out to be a transition strategy][11] ]** - -### Can Google Cloud Platform keep up? - -Even as the [overall quarterly numbers for Alphabet][12]—Google’s parent company—didn’t meet analysts’ revenue expectations (which sent the stock tumbling), Google Cloud Platform seems to have continued its strong growth. Alphabet doesn’t break out its cloud unit, but sales in Alphabet’s “Other Revenue” category—which includes cloud computing along with hardware—jumped 25% compared to the same period last year, hitting $5.4 billion. - -More telling, perhaps, Alphabet Chief Financial Officer Ruth Porat [reportedly][13] told analysts that "Google Cloud Platform remains one of the fastest growing businesses in Alphabet." [Porat also mentioned][14] that hiring in the cloud unit was so aggressive that it drove a 20% jump in Alphabet’s operating expenses! - -### Companies keep going cloud - -But the raw numbers tell only part of the story. All that growth means existing customers are spending more, but also that ever-increasing numbers of enterprises are abandoning their hassle and expense of running their data centers in favor of buying what they need from the cloud. - -**[ Also read:[Large enterprises abandon data centers for the cloud][15] ]** - -The New York Times quotes Amy Hood, Microsoft’s chief financial officer, explaining that, “You don’t really get revenue growth unless you have a usage growth, so this is customers deploying and using Azure.” And the Times notes that Microsoft has signed big deals with companies such as [Walgreens Boots Alliance][16] that combined Azure with other Microsoft cloud-based services. - -This growth is true in existing markets, and also includes new markets. For example, AWS just opened new regions in [Indonesia][17] and [Hong Kong][18]. - -**[ Now read:[After virtualization and cloud, what's left on premises?][19] ]** - -Join the Network World communities on [Facebook][20] and [LinkedIn][21] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3391465/another-strong-cloud-computing-quarter-puts-pressure-on-data-centers.html#tk.rss_all - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/cloud_comput_connect_blue-100787048-large.jpg -[2]: https://www.networkworld.com/article/3292935/cloud-computing-just-had-another-kick-ass-quarter.html -[3]: https://www.networkworld.com/article/3268384/is-the-cloud-already-killing-the-enterprise-data-center.html -[4]: https://www.latimes.com/business/la-fi-amazon-earnings-cloud-computing-aws-20190425-story.html -[5]: https://www.businessinsider.com/amazon-q1-2019-earnings-aws-advertising-retail-prime-2019-4 -[6]: https://www.computerweekly.com/news/252462310/Amazon-cautions-against-reading-too-much-into-slowdown-in-AWS-revenue-growth-rate -[7]: https://www.microsoft.com/en-us/Investor/earnings/FY-2019-Q3/press-release-webcast -[8]: https://www.cnbc.com/2019/04/24/microsoft-q3-2019-earnings.html -[9]: https://www.nytimes.com/2019/04/24/technology/microsoft-earnings.html -[10]: https://www.networkworld.com/article/3268448/what-is-hybrid-cloud-really-and-whats-the-best-strategy.html -[11]: https://www.networkworld.com/article/3238466/why-hybrid-cloud-will-turn-out-to-be-a-transition-strategy.html -[12]: https://abc.xyz/investor/static/pdf/2019Q1_alphabet_earnings_release.pdf?cache=8ac2b86 -[13]: https://www.forbes.com/sites/jilliandonfro/2019/04/29/google-alphabet-q1-earnings-2019/#52f5c8c733be -[14]: https://www.youtube.com/watch?v=31_KHdse_0Y -[15]: https://www.networkworld.com/article/3240587/large-enterprises-abandon-data-centers-for-the-cloud.html -[16]: https://www.walgreensbootsalliance.com -[17]: https://www.businesswire.com/news/home/20190403005931/en/AWS-Open-New-Region-Indonesia -[18]: https://www.apnews.com/Business%20Wire/57eaf4cb603e46e6b05b634d9751699b -[19]: https://https//www.networkworld.com/article/3232626/virtualization/extreme-virtualization-impact-on-enterprises.html -[20]: https://www.facebook.com/NetworkWorld/ -[21]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190502 Revolutionary data compression technique could slash compute costs.md b/sources/talk/20190502 Revolutionary data compression technique could slash compute costs.md deleted file mode 100644 index 00316946f6..0000000000 --- a/sources/talk/20190502 Revolutionary data compression technique could slash compute costs.md +++ /dev/null @@ -1,65 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Revolutionary data compression technique could slash compute costs) -[#]: via: (https://www.networkworld.com/article/3392716/revolutionary-data-compression-technique-could-slash-compute-costs.html#tk.rss_all) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Revolutionary data compression technique could slash compute costs -====== -A new form of data compression, called Zippads, will create faster computer programs that could drastically lower the costs of computing. -![Kevin Stanchfield \(CC BY 2.0\)][1] - -There’s a major problem with today’s money-saving memory compression used for storing more data in less space. The issue is that computers store and run memory in predetermined blocks, yet many modern programs function and play out in variable chunks. - -The way it’s currently done is actually, highly inefficient. That’s because the compressed programs, which use objects rather than evenly configured slabs of data, don’t match the space used to store and run them, explain scientists working on a revolutionary new compression system called Zippads. - -The answer, they say—and something that if it works would drastically reduce those inefficiencies, speed things up, and importantly, reduce compute costs—is to compress the varied objects and not the cache lines, as is the case now. Cache lines are fixed-size blocks of memory that are transferred to memory cache. - -**[ Read also:[How to deal with backup when you switch to hyperconverged infrastructure][2] ]** - -“Objects, not cache lines, are the natural unit of compression,” writes Po-An Tsai and Daniel Sanchez in their MIT Computer Science and Artificial Intelligence Laboratory (CSAIL) [paper][3] (pdf). - -They say object-based programs — of the kind used now everyday, such as Python — should be compressed based on their programmed object size, not on some fixed value created by traditional or even state-of-the art cached methods. - -The alternative, too, isn’t to recklessly abandon object-oriented programming just because it’s inefficient at using compression. One must adapt compression to that now common object-using code. - -The scientists claim their new system can increase the compression ratio 1.63 times and improve performance by 17%. It’s the “first compressed memory hierarchy designed for object-based applications,” they say. - -### The benefits of compression - -Compression is a favored technique for making computers more efficient. The main advantage over simply adding more memory is that costs are lowered significantly—you don’t need to add increasing physical main memory hardware because you’re cramming more data into existing. - -However, to date, hardware memory compression has been best suited to more old-school large blocks of data, not the “random, fine-grained memory accesses,” the team explains. It’s not great at accessing small pieces of data, such as words, for example. - -### How the Zippads compression system works - -In Zippads, as the new system is called, stored object hierarchical levels (called “pads”) are located on-chip and are directly accessed. The different levels (pads) have changing speed grades, with newly referenced objects being placed in the fastest pad. As a pad fills up, it begins the process of evicting older, not-so-active objects and ultimately recycles the unused code that is taking up desirable fast space and isn’t being used. Cleverly, at the fast level, the code parts aren’t even compressed, but as they prove their non-usefulness they get kicked down to compressed, slow-to-access, lower-importance pads—and are brought back up as necessary. - -Zippads would “see computers that can run much faster or can run many more apps at the same speeds,” an[ MIT News][4] article says. “Each application consumes less memory, it runs faster, so a device can support more applications within its allotted memory.” Bandwidth is freed up, in other words. - -“All computer systems would benefit from this,” Sanchez, a professor of computer science and electrical engineering, says in the article. “Programs become faster because they stop being bottlenecked by memory bandwidth.” - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3392716/revolutionary-data-compression-technique-could-slash-compute-costs.html#tk.rss_all - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/memory-100787327-large.jpg -[2]: https://www.networkworld.com/article/3389396/how-to-deal-with-backup-when-you-switch-to-hyperconverged-infrastructure.html -[3]: http://people.csail.mit.edu/poantsai/papers/2019.zippads.asplos.pdf -[4]: http://news.mit.edu/2019/hardware-data-compression-0416 -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190507 SD-WAN is Critical for IoT.md b/sources/talk/20190507 SD-WAN is Critical for IoT.md deleted file mode 100644 index a5867d5afd..0000000000 --- a/sources/talk/20190507 SD-WAN is Critical for IoT.md +++ /dev/null @@ -1,74 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (SD-WAN is Critical for IoT) -[#]: via: (https://www.networkworld.com/article/3393445/sd-wan-is-critical-for-iot.html#tk.rss_all) -[#]: author: (Rami Rammaha https://www.networkworld.com/author/Rami-Rammaha/) - -SD-WAN is Critical for IoT -====== - -![istock][1] - -The Internet of Things (IoT) is everywhere and its use is growing fast. IoT is used by local governments to build smart cities. It’s used to build smart businesses. And, consumers are benefitting as it’s built into smart homes and smart cars. Industry analyst first estimates that over 20 billion IoT devices will be connected by 2020. That’s a 2.5x increase from the more than 8 billion connected devices in 2017*. - -Manufacturing companies have the highest IoT spend to date of industries while the health care market is experiencing the highest IoT growth. By 2020, 50 percent of IoT spending will be driven by manufacturing, transportation and logistics, and utilities. - -IoT growth is being fueled by the promise of analytical data insights that will ultimately yield greater efficiencies and enhanced customer satisfaction. The top use cases driving IoT growth are self-optimizing production, predictive maintenance and automated inventory management. - -From a high-level view, the IoT architecture includes sensors that collect and transmit data (i.e. temperature, speed, humidity, video feed, pressure, IR, proximity, etc.) from “things” like cars, trucks, machines, etc. that are connected over the internet. Data collected is then analyzed, translating raw data into actionable information. Businesses can then act on this information. And at more advanced levels, machine learning and AI algorithms learn and adapt to this information and automatically respond at a system level. - -IDC estimates that by 2025, over 75 billion IoT devices* will be connected. By that time, nearly a quarter of the world’s projected 163 zettabytes* (163 trillion gigabytes) of data will have been created in real-time, and the vast majority of that data will have been created by IoT devices. This massive amount of data will drive an exponential increase in traffic on the network infrastructure requiring massive scalability. Also, this increasing amount of data will require tremendous processing power to mine it and transform it into actionable intelligence. In parallel, security risks will continue to increase as there will be many more potential entry points onto the network. Lastly, management of the overall infrastructure will require better orchestration of policies as well as the means to streamline on-going operations. - -### **How does SD-WAN enable IoT business initiatives?** - -There are three key elements that an [SD-WAN][2] platform must include: - - 1. **Visibility** : Real-time visibility into the network is key. It takes the guesswork out of rapid problem resolution, enabling organizations to run more efficiently by accelerating troubleshooting and applying preventive measures. Furthermore, a CIO is able to pull metrics and see bandwidth consumed by any IoT application. - 2. **Security** : IoT traffic must be isolated from other application traffic. IT must prevent – or at least reduce – the possible attack surface that may be exposed to IoT device traffic. Also, the network must continue delivering other application traffic in the event of a melt down on a WAN link caused by a DDoS attack. - 3. **Agility** : With the increased number of connected devices, applications and users, a comprehensive, intelligent and centralized orchestration approach that continuously adapts to deliver the best experience to the business and users is critical to success. - - - -### Key Silver Peak EdgeConnect SD-WAN capabilities for IoT - -1\. Silver Peak has an [embedded real-time visibility engine][3] allowing IT to gain complete observability into the performance attributes of the network and applications in real-time. The [EdgeConnect][4] SD-WAN appliances deployed in branch offices send information to the centralized [Unity Orchestrator™][5]. Orchestrator collects the data and presents it in a comprehensive management dashboard via customizable widgets. These widgets provide a wealth of operational data including a health heatmap for every SD-WAN appliance deployed, flow counts, active tunnels, logical topologies, top talkers, alarms, bandwidth consumed by each application and location, latency and jitter and much more. Furthermore, the platform maintains weeks’ worth of data with context allowing IT to playback and see what has transpired at a specific time and location, similar to a DVR. - -![Click to read Solution Brief][6] - -2\. The second set of key capabilities center around security and end-to-end zone-based segmentation. An IoT traffic zone may be created on the LAN or branch side. IoT traffic is then mapped all the way across the WAN to the data center or cloud where the data will be processed. Zone-based segmentation is accomplished in a simplified and automated way within the Orchestrator GUI. In cases where further traffic inspection is required, IT can simply service chain to another security service. There are several key benefits realized by this approach. IT can easily and quickly apply segmentation policies; segmentation mitigates the attack surface; and IT can save on additional security investments. - -![***Click to read Solution Brief ***][7] - -3\. EdgeConnect employs machine learning at the global level where with internet sensors and third-party sensors feed into the cloud portal software. The software tracks the geolocation of all IP addresses and IP reputation, distributing signals down to the Unity Orchestrator running in each individual customer’s enterprise. In turn, it is speaking to the edge devices sitting in the branch offices. There, distributed learning is done by looking at the first packet, making an inference based on the first packet what the application is. So, if seeing that 100 times now, every time packets come from that particular IP address and turns out to be an IoT, we can make an inference that IP belongs to IoT application. In parallel, we’re using a mix of traditional techniques to validate the identification of the application. All this combined other multi-level intelligence enables simple and automated policy orchestration across a large number of devices and applications. - -![***Click to read Solution Brief ***][8] - -SD-WAN plays a foundational role as businesses continue to embrace IoT, but choosing the right SD-WAN platform is even more critical to ensuring businesses are ultimately able to fully optimize their operations. - -* Source: [IDC][9] - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3393445/sd-wan-is-critical-for-iot.html#tk.rss_all - -作者:[Rami Rammaha][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Rami-Rammaha/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/istock-1019172426-100795551-large.jpg -[2]: https://www.silver-peak.com/sd-wan/sd-wan-explained -[3]: https://www.silver-peak.com/resource-center/simplify-sd-wan-operations-greater-visibility -[4]: https://www.silver-peak.com/products/unity-edge-connect -[5]: https://www.silver-peak.com/products/unity-orchestrator -[6]: https://images.idgesg.net/images/article/2019/05/1_simplify-100795554-large.jpg -[7]: https://images.idgesg.net/images/article/2019/05/2_centralize-100795555-large.jpg -[8]: https://images.idgesg.net/images/article/2019/05/3_increase-100795558-large.jpg -[9]: https://www.information-age.com/data-forecast-grow-10-fold-2025-123465538/ diff --git a/sources/talk/20190507 Some IT pros say they have too much data.md b/sources/talk/20190507 Some IT pros say they have too much data.md deleted file mode 100644 index a645ae52e9..0000000000 --- a/sources/talk/20190507 Some IT pros say they have too much data.md +++ /dev/null @@ -1,66 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Some IT pros say they have too much data) -[#]: via: (https://www.networkworld.com/article/3393205/some-it-pros-say-they-have-too-much-data.html#tk.rss_all) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Some IT pros say they have too much data -====== -IT professionals have too many data sources to count, and they spend a huge amount of time wrestling that data into usable condition, a survey from Ivanti finds. -![Getty Images][1] - -A new survey has found that a growing number of IT professionals have too many data sources to even count, and they are spending more and more time just wrestling that data into usable condition. - -Ivanti, an IT asset management firm, [surveyed 400 IT professionals on their data situation][2] and found IT faces numerous challenges when it comes to siloes, data, and implementation. The key takeaway is data overload is starting to overwhelm IT managers and data lakes are turning into data oceans. - -**[ Read also:[Understanding mass data fragmentation][3] | Get daily insights [Sign up for Network World newsletters][4] ]** - -Among the findings from Ivanti's survey: - - * Fifteen percent of IT professionals say they have too many data sources to count, and 37% of professionals said they have about 11-25 different sources for data. - * More than half of IT professionals (51%) report they have to work with their data for days, weeks or more before it's actionable. - * Only 10% of respondents said the data they receive is actionable within minutes. - * One in three respondents said they have the resources to act on their data, but more than half (52%) said they only sometimes have the resources. - - - -“It’s clear from the results of this survey that IT professionals are in need of a more unified approach when working across organizational departments and resulting silos,” said Duane Newman, vice president of product management at Ivanti, in a statement. - -### The problem with siloed data - -The survey found siloed data represents a number of problems and challenges. Three key priorities suffer the most: automation (46%), user productivity and troubleshooting (42%), and customer experience (41%). The survey also found onboarding/offboarding suffers the least (20%) due to siloes, so apparently HR and IT are getting things right. - -In terms of what they want from real-time insight, about 70% of IT professionals said their security status was the top priority over other issues. Respondents were least interested in real-time insights around warranty data. - -### Data lake method a recipe for disaster - -I’ve been immersed in this subject for other publications for some time now. Too many companies are hoovering up data for the sake of collecting it with little clue as to what they will do with it later. One thing you have to say about data warehouses, the schema on write at least forces you to think about what you are collecting and how you might use it because you have to store it away in a usable form. - -The new data lake method is schema on read, meaning you filter/clean it when you read it into an application, and that’s just a recipe for disaster. If you are looking at data collected a month or a year ago, do you even know what it all is? Now you have to apply schema to data and may not even remember collecting it. - -Too many people think more data is good when it isn’t. You just drown in it. When you reach a point of having too many data sources to count, you’ve gone too far and are not going to get insight. You’re going to get overwhelmed. Collect data you know you can use. Otherwise you are wasting petabytes of disk space. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3393205/some-it-pros-say-they-have-too-much-data.html#tk.rss_all - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/03/database_data-center_futuristic-technology-100752012-large.jpg -[2]: https://www.ivanti.com/blog/survey-it-professionals-data-sources -[3]: https://www.networkworld.com/article/3262145/lan-wan/customer-reviews-top-remote-access-tools.html#nww-fsb -[4]: https://www.networkworld.com/newsletters/signup.html#nww-fsb -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190509 When it comes to uptime, not all cloud providers are created equal.md b/sources/talk/20190509 When it comes to uptime, not all cloud providers are created equal.md deleted file mode 100644 index 8f9db8a94b..0000000000 --- a/sources/talk/20190509 When it comes to uptime, not all cloud providers are created equal.md +++ /dev/null @@ -1,83 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (When it comes to uptime, not all cloud providers are created equal) -[#]: via: (https://www.networkworld.com/article/3394341/when-it-comes-to-uptime-not-all-cloud-providers-are-created-equal.html#tk.rss_all) -[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/) - -When it comes to uptime, not all cloud providers are created equal -====== -Cloud uptime is critical today, but vendor-provided data can be confusing. Here's an analysis of how AWS, Google Cloud and Microsoft Azure compare. -![Getty Images][1] - -The cloud is not just important; it's mission-critical for many companies. More and more IT and business leaders I talk to look at public cloud as a core component of their digital transformation strategies — using it as part of their hybrid cloud or public cloud implementation. - -That raises the bar on cloud reliability, as a cloud outage means important services are not available to the business. If this is a business-critical service, the company may not be able to operate while that key service is offline. - -Because of the growing importance of the cloud, it’s critical that buyers have visibility into the reliability number for the cloud providers. The challenge is the cloud providers don't disclose the disruptions in a consistent manner. In fact, some are confusing to the point where it’s difficult to glean any kind of meaningful conclusion. - -**[ RELATED:[What IT pros need to know about Azure Stack][2] and [Which cloud performs better, AWS, Azure or Google?][3] | Get regularly scheduled insights: [Sign up for Network World newsletters][4] ]** - -### Reported cloud outage times don't always reflect actual downtime - -Microsoft Azure and Google Cloud Platform (GCP) both typically provide information on date and time, but only high-level data on the services affected and sparse information on regional impact. The problem with that is it’s difficult to get a sense of overall reliability. For instance, if Azure reports a one-hour outage that impacts five services in three regions, the website might show just a single hour. In actuality, that’s 15 hours of total downtime. - -Between Azure, GCP and Amazon Web Services (AWS), [Azure is the most obscure][5], as it provides the least amount of detail. [GCP does a better job of providing detail][6] at the service level but tends to be obscure with regional information. Sometimes it’s very clear as to what services are unavailable, and other times it’s not. - -[AWS has the most granular reporting][7], as it shows every service in every region. If an incident occurs that impacts three services, all three of those services would light up red. If those were unavailable for one hour, AWS would record three hours of downtime. - -Another inconsistency between the cloud providers is the amount of historical downtime data that is available. At one time, all three of the cloud vendors provided a one-year view into outages. GCP and AWS still do this, but Azure moved to only a [90-day view][5] sometime over the past year. - -### Azure has significantly higher downtime than GCP and AWS - -The next obvious question is who has the most downtime? To answer that, I worked with a third-party firm that has continually collected downtime information directly from the vendor websites. I have personally reviewed the information and can validate its accuracy. Based on the vendors own reported numbers, from the beginning of 2018 through May 3, 2019, AWS leads the pack with only 338 hours of downtime, followed by GCP closely at 361. Microsoft Azure has a whopping total of 1,934 hours of self-reported downtime. - -![][8] - -A few points on these numbers. First, this is an aggregation of the self-reported data from the vendors' websites, which isn’t the “true” number, as regional information or service granularity is sometimes obscured. If a service is unavailable for an hour and it’s reported for an hour on the website but it spanned five regions, correctly five hours should have been used. But for this calculation, we used only one hour because that is what was self-reported. - -Because of this, the numbers are most favorable to Microsoft because they provide the least amount of regional information. The numbers are least favorable to AWS because they provide the most granularity. Also, I believe AWS has the most services in most regions, so they have more opportunities for an outage. - -We had considered normalizing the data, but that would require a significant amount of work to destruct the downtime on a per service per region basis. I may choose to do that in the future, but for now, the vendor-reported view is a good indicator of relative performance. - -Another important point is that only infrastructure as a service (IaaS) services were used to calculate downtime. If Google Street View or Bing Maps went down, most businesses would not care, so it would have been unfair to roll those number in. - -### SLAs do not correlate to reliability - -Given the importance of cloud services today, I would like to see every cloud provider post a 12-month running total of downtime somewhere on their website so customers can do an “apples to apples” comparison. This obviously isn’t the only factor used in determining which cloud provider to use, but it is one of the more critical ones. - -Also, buyers should be aware that there is a big difference between service-level agreements (SLAs) and downtime. A cloud operator can promise anything they want, even provide a 100% SLA, but that just means they need to reimburse the business when a service isn’t available. Most IT leaders I have talked to say the few bucks they get back when a service is out is a mere fraction of what the outage actually cost them. - -### Measure twice and cut once to minimize business disruption - -If you’re reading this and you’re researching cloud services, it’s important to not just make the easy decision of buying for convenience. Many companies look at Azure because Microsoft gives away Azure credits as part of the Enterprise Agreement (EA). I’ve interviewed several companies that took the path of least resistance, but they wound up disappointed with availability and then switched to AWS or GCP later, which can have a disruptive effect. - -I’m certainly not saying to not buy Microsoft Azure, but it is important to do your homework to understand the historical performance of the services you’re considering in the regions you need them. The information on the vendor websites may not tell the full picture, so it’s important to do the necessary due diligence to ensure you understand what you’re buying before you buy it. - -Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3394341/when-it-comes-to-uptime-not-all-cloud-providers-are-created-equal.html#tk.rss_all - -作者:[Zeus Kerravala][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Zeus-Kerravala/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/cloud_comput_connect_blue-100787048-large.jpg -[2]: https://www.networkworld.com/article/3208029/azure-stack-microsoft-s-private-cloud-platform-and-what-it-pros-need-to-know-about-it -[3]: https://www.networkworld.com/article/3319776/the-network-matters-for-public-cloud-performance.html -[4]: https://www.networkworld.com/newsletters/signup.html -[5]: https://azure.microsoft.com/en-us/status/history/ -[6]: https://status.cloud.google.com/incident/appengine/19008 -[7]: https://status.aws.amazon.com/ -[8]: https://images.idgesg.net/images/article/2019/05/public-cloud-downtime-100795948-large.jpg -[9]: https://www.facebook.com/NetworkWorld/ -[10]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190513 Top auto makers rely on cloud providers for IoT.md b/sources/talk/20190513 Top auto makers rely on cloud providers for IoT.md deleted file mode 100644 index 5adf5f65a7..0000000000 --- a/sources/talk/20190513 Top auto makers rely on cloud providers for IoT.md +++ /dev/null @@ -1,53 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Top auto makers rely on cloud providers for IoT) -[#]: via: (https://www.networkworld.com/article/3395137/top-auto-makers-rely-on-cloud-providers-for-iot.html) -[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/) - -Top auto makers rely on cloud providers for IoT -====== - -For the companies looking to implement the biggest and most complex [IoT][1] setups in the world, the idea of pairing up with [AWS][2], [Google Cloud][3] or [Azure][4] seems to be one whose time has come. Within the last two months, BMW and Volkswagen have both announced large-scale deals with Microsoft and Amazon, respectively, to help operate their extensive network of operational technology. - -According to Alfonso Velosa, vice president and analyst at Gartner, part of the impetus behind those two deals is that the automotive sector fits in very well with the architecture of the public cloud. Public clouds are great at collecting and processing data from a diverse array of different sources, whether they’re in-vehicle sensors, dealerships, mechanics, production lines or anything else. - -**[ RELATED:[What hybrid cloud means in practice][5]. | Get regularly scheduled insights by [signing up for Network World newsletters][6]. ]** - -“What they’re trying to do is create a broader ecosystem. They think they can leverage the capabilities from these folks,” Velosa said. - -### Cloud providers as IoT partners - -The idea is automated analytics for service and reliability data, manufacturing and a host of other operational functions. And while the full realization of that type of service is still very much a work in progress, it has clear-cut advantages for big companies – a skilled partner handling tricky implementation work, built-in capability for sophisticated analytics and security, and, of course, the ability to scale up in a big way. - -Hence, the structure of the biggest public clouds has upside for many large-scale IoT deployments, not just the ones taking place in the auto industry. The cloud giants have vast infrastructures, with multiple points of presence all over the world. - -To continue reading this article register now - -[Get Free Access][7] - -[Learn More][8] Existing Users [Sign In][7] - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3395137/top-auto-makers-rely-on-cloud-providers-for-iot.html - -作者:[Jon Gold][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Jon-Gold/ -[b]: https://github.com/lujun9972 -[1]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[2]: https://www.networkworld.com/article/3324043/aws-does-hybrid-cloud-with-on-prem-hardware-vmware-help.html -[3]: https://www.networkworld.com/article/3388218/cisco-google-reenergize-multicloudhybrid-cloud-joint-development.html -[4]: https://www.networkworld.com/article/3385078/microsoft-introduces-azure-stack-for-hci.html -[5]: https://www.networkworld.com/article/3249495/what-hybrid-cloud-mean-practice -[6]: https://www.networkworld.com/newsletters/signup.html -[7]: javascript:// -[8]: /learn-about-insider/ diff --git a/sources/talk/20190514 Mobility and SD-WAN, Part 1- SD-WAN with 4G LTE is a Reality.md b/sources/talk/20190514 Mobility and SD-WAN, Part 1- SD-WAN with 4G LTE is a Reality.md deleted file mode 100644 index 1ecd68fa41..0000000000 --- a/sources/talk/20190514 Mobility and SD-WAN, Part 1- SD-WAN with 4G LTE is a Reality.md +++ /dev/null @@ -1,64 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Mobility and SD-WAN, Part 1: SD-WAN with 4G LTE is a Reality) -[#]: via: (https://www.networkworld.com/article/3394866/mobility-and-sd-wan-part-1-sd-wan-with-4g-lte-is-a-reality.html) -[#]: author: (Francisca Segovia ) - -Mobility and SD-WAN, Part 1: SD-WAN with 4G LTE is a Reality -====== - -![istock][1] - -Without a doubt, 5G — the fifth generation of mobile wireless technology — is the hottest topic in wireless circles today. You can’t throw a stone without hitting 5G news. While telecommunications providers are in a heated competition to roll out 5G, it’s important to reflect on current 4G LTE (Long Term Evolution) business solutions as a preview of what we have learned and what’s possible. - -This is part one of a two-part blog series that will explore the [SD-WAN][2] journey through the evolution of these wireless technologies. - -### **Mobile SD-WAN is a reality** - -4G LTE commercialization continues to expand. According to [the GSM (Groupe Spéciale Mobile) Association][3], 710 operators have rolled out 4G LTE in 217 countries, reaching 83 percent of the world’s population. The evolution of 4G is transforming the mobile industry and is setting the stage for the advent of 5G. - -Mobile connectivity is increasingly integrated with SD-WAN, along with MPLS and broadband WAN services today. 4G LTE represents a very attractive transport alternative, as a backup or even an active member of the WAN transport mix to connect users to critical business applications. And in some cases, 4G LTE might be the only choice in locations where fixed lines aren’t available or reachable. Furthermore, an SD-WAN can optimize 4G LTE connectivity and bring new levels of performance and availability to mobile-based business use cases by selecting the best path available across several 4G LTE connections. - -### **Increasing application performance and availability with 4G LTE** - -Silver Peak has partnered with [BEC Technologies][4] to create a joint solution that enables customers to incorporate one or more low-cost 4G LTE services into any [Unity EdgeConnect™][5] SD-WAN edge platform deployment. All the capabilities of the EdgeConnect platform are supported across LTE links including packet-based link bonding, dynamic path control, path conditioning along with the optional [Unity Boost™ WAN Optimization][6] performance pack. This ensures always-consistent, always-available application performance even in the event of an outage or degraded service. - -EdgeConnect also incorporates sophisticated NAT traversal technology that eliminates the requirement for provisioning the LTE service with extra-cost static IP addresses. The Silver Peak [Unity Orchestrator™][7] management software enables the prioritization of LTE bandwidth usage based on branch and application requirements – active-active or backup-only. This solution is ideal in retail point-of-sale and other deployment use cases where always-available WAN connectivity is critical for the business. - -### **Automated SD-WAN enables innovative services** - -An example of an innovative mobile SD-WAN service is [swyMed’s DOT Telemedicine Backpack][8] powered by the EdgeConnect [Ultra Small][9] hardware platform. This integrated telemedicine solution enables first responders to connect to doctors and communicate patient vital statistics and real-time video anywhere, any time, greatly improving and expediting care for emergency patients. Using a lifesaving backpack provisioned with two LTE services from different carriers, EdgeConnect continuously monitors the underlying 4G LTE services for packet loss, latency and jitter. In the case of transport failure or brownout, EdgeConnect automatically initiates a sub-second failover so that voice, video and data connections continue without interruption over the remaining active 4G service. By bonding the two LTE links together with the EdgeConnect SD-WAN, swyMed can achieve an aggregate signal quality in excess of 90 percent, bringing mobile telemedicine to areas that would have been impossible in the past due to poor signal strength. - -To learn more about SD-WAN and the unique advantages that SD-WAN provides to enterprises across all industries, visit the [SD-WAN Explained][2] page on our website. - -### **Prepare for the 5G future** - -In summary, the adoption of 4G LTE is a reality. Service providers are taking advantage of the distinct benefits of SD-WAN to offer managed SD-WAN services that leverage 4G LTE. - -As the race for the 5G gains momentum, service providers are sure to look for ways to drive new revenue streams to capitalize on their initial investments. Stay tuned for part 2 of this 2-blog series where I will discuss how SD-WAN is one of the technologies that can help service providers to transition from 4G to 5G and enable the monetization of a new wave of managed 5G services. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3394866/mobility-and-sd-wan-part-1-sd-wan-with-4g-lte-is-a-reality.html - -作者:[Francisca Segovia][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/istock-952414660-100796279-large.jpg -[2]: https://www.silver-peak.com/sd-wan/sd-wan-explained -[3]: https://www.gsma.com/futurenetworks/resources/all-ip-statistics/ -[4]: https://www.silver-peak.com/resource-center/edgeconnect-4glte-solution-bec-technologies -[5]: https://www.silver-peak.com/products/unity-edge-connect -[6]: https://www.silver-peak.com/products/unity-boost -[7]: https://www.silver-peak.com/products/unity-orchestrator -[8]: https://www.silver-peak.com/resource-center/mobile-telemedicine-helps-save-lives-streaming-real-time-clinical-data-and-patient -[9]: https://www.silver-peak.com/resource-center/edgeconnect-us-ec-us-specification-sheet diff --git a/sources/talk/20190515 Extreme addresses networked-IoT security.md b/sources/talk/20190515 Extreme addresses networked-IoT security.md deleted file mode 100644 index 1ad756eded..0000000000 --- a/sources/talk/20190515 Extreme addresses networked-IoT security.md +++ /dev/null @@ -1,71 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Extreme addresses networked-IoT security) -[#]: via: (https://www.networkworld.com/article/3395539/extreme-addresses-networked-iot-security.html) -[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/) - -Extreme addresses networked-IoT security -====== -The ExtremeAI security app features machine learning that can understand typical behavior of IoT devices and alert when it finds anomalies. -![Getty Images][1] - -[Extreme Networks][2] has taken the wraps off a new security application it says will use machine learning and artificial intelligence to help customers effectively monitor, detect and automatically remediate security issues with networked IoT devices. - -The application – ExtremeAI security—features machine-learning technology that can understand typical behavior of IoT devices and automatically trigger alerts when endpoints act in unusual or unexpected ways, Extreme said. - -**More about edge networking** - - * [How edge networking and IoT will reshape data centers][3] - * [Edge computing best practices][4] - * [How edge computing can help secure the IoT][5] - - - -Extreme said that the ExtremeAI Security application can tie into all leading threat intelligence feeds, and had close integration with its existing [Extreme Workflow Composer][6] to enable automatic threat mitigation and remediation. - -The application integrates the company’s ExtremeAnalytics application which lets customers view threats by severity, category, high-risk endpoints and geography. An automated ticketing feature integrates with variety of popular IT tools such as Slack, Jira, and ServiceNow, and the application interoperates with many popular security tools, including existing network taps, the vendor stated. - -There has been an explosion of new endpoints ranging from million-dollar smart MRI machines to five-dollar sensors, which creates a complex and difficult job for network and security administrators, said Abby Strong, vice president of product marketing for Extreme. “We need smarter, secure and more self-healing networks especially where IT cybersecurity resources are stretched to the limit.” - -Extreme is trying to address an issue that is important to enterprise-networking customers: how to get actionable, usable insights as close to real-time as possible, said Rohit Mehra, Vice President of Network Infrastructure at IDC. “Extreme is melding automation, analytics and security that can look at network traffic patterns and allow the system to take action when needed.” - -The ExtremeAI application, which will be available in October, is but one layer of IoT security Extreme offers. Already on the market, its [Defender for IoT][7] package, which includes a Defender application and adapter, lets customers monitor, set policies and isolate IoT devices across an enterprise. - -**[[Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][8] ]** - -The Extreme AI and Defender packages are now part of what the company calls Extreme Elements, which is a menu of its new and existing Smart OmniEdge, Automated Campus and Agile Data Center software, hardware and services that customers can order to build a manageable, secure system. - -Aside from the applications, the Elements include Extreme Management Center, the company’s network management software; the company’s x86-based intelligent appliances, including the ExtremeCloud Appliance; and [ExtremeSwitching X465 premium][9], a stackable multi-rate gigabit Ethernet switch. - -The switch and applications are just the beginning of a very busy time for Extreme. In its [3Q earnings cal][10]l this month company CEO Ed Meyercord noted Extreme was in the “early stages of refreshing 70 percent of our products” and seven different products will become generally available this quarter – a record for Extreme, he said. - -Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3395539/extreme-addresses-networked-iot-security.html - -作者:[Michael Cooney][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Michael-Cooney/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/iot_security_tablet_conference_digital-100787102-large.jpg -[2]: https://www.networkworld.com/article/3289508/extreme-facing-challenges-girds-for-future-networking-battles.html -[3]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html -[4]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html -[5]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html -[6]: https://www.extremenetworks.com/product/workflow-composer/ -[7]: https://www.extremenetworks.com/product/extreme-defender-for-iot/ -[8]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr -[9]: https://community.extremenetworks.com/extremeswitching-exos-223284/extremexos-30-2-and-smart-omniedge-premium-x465-switches-are-now-available-7823377 -[10]: https://seekingalpha.com/news/3457137-extreme-networks-minus-15-percent-quarterly-miss-light-guidance -[11]: https://www.facebook.com/NetworkWorld/ -[12]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190516 Will 5G be the first carbon-neutral network.md b/sources/talk/20190516 Will 5G be the first carbon-neutral network.md deleted file mode 100644 index decacfac5d..0000000000 --- a/sources/talk/20190516 Will 5G be the first carbon-neutral network.md +++ /dev/null @@ -1,88 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Will 5G be the first carbon-neutral network?) -[#]: via: (https://www.networkworld.com/article/3395465/will-5g-be-the-first-carbon-neutral-network.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Will 5G be the first carbon-neutral network? -====== -Increased energy consumption in new wireless networks could become ecologically unsustainable. Engineers think they have solutions that apply to 5G, but all is not certain. -![Dushesina/Getty Images][1] - -If wireless networks transfer 1,000 times more data, does that mean they will use 1,000 times more energy? It probably would with the old 4G LTE wireless technologies— LTE doesn’t have much of a sleep-standby. But with 5G, we might have a more energy-efficient option. - -More customers want Earth-friendly options, and engineers are now working on how to achieve it — meaning 5G might introduce the first zero-carbon networks. It’s not all certain, though. - -**[ Related:[What is 5G wireless? And how it will change networking as we know it][2] ]** - -“When the 4G technology for wireless communication was developed, not many people thought about how much energy is consumed in transmitting bits of information,” says Emil Björnson, associate professor of communication systems at Linkoping University, [in an article on the school’s website][3]. - -Standby was never built into 4G, Björnson explains. Reasons include overbuilding — the architects wanted to ensure connections didn’t fail, so they just kept the power up. The downside to that redundancy was that almost the same amount of energy is used whether the system is transmitting data or not. - -“We now know that this is not necessary,” Björnson says. 5G networks don’t use much power during periods of low traffic, and that reduces power consumption. - -Björnson says he knows how to make future-networks — those 5G networks that one day may become the enterprise broadband replacement — super efficient even when there is heavy use. Massive-MIMO (multiple-in, multiple-out) antennas are the answer, he says. That’s hundreds of connected antennas taking advantage of multipath. - -I’ve written before about some of Björnson's Massive-MIMO ideas. He thinks [Massive-MIMO will remove all capacity ceilings from wireless networks][4]. However, he now adds calculations to his research that he claims prove that the Massive-MIMO antenna technology will also reduce power use. He and his group are actively promoting their academic theories in a paper ([pdf][5]). - -**[[Take this mobile device management course from PluralSight and learn how to secure devices in your company without degrading the user experience.][6] ]** - -### Nokia's plan to reduce wireless networks' CO2 emissions - -Björnson's isn’t the only 5G-aimed eco-concept out there. Nokia points out that it isn't just radios transmitting that use electricity. Cooling is actually the main electricity hog, says the telcommunications company, which is one of the world’s principal manufacturers of mobile network equipment. - -Nokia says the global energy cost of Radio Access Networks (RANs) in 2016 (the last year numbers were available), which includes base transceiver stations (BTSs) needed by mobile networks, was around $80 billion. That figure increases with more users coming on stream, something that’s probable. Of the BTS’s electricity use, about 90% “converts to waste heat,” [Harry Kuosa, a marketing executive, writes on Nokia’s blog][7]. And base station sites account for about 80% of a mobile network’s entire energy use, Nokia expands on its website. - -“A thousand-times more traffic that creates a thousand-times higher energy costs is unsustainable,” Nokia says in its [ebook][8] on the subject, “Turning the zero carbon vision into business opportunity,” and it’s why Nokia plans liquid-cooled 5G base stations among other things, including chip improvements. It says the liquid-cooling can reduce CO2 emissions by up to 80%. - -### Will those ideas work? - -Not all agree power consumption can be reduced when implementing 5G, though. Gabriel Brown of Heavy Reading, quotes [in a tweet][9] a China Mobile executive as saying that 5G BTSs will use three times as much power as 4G LTE ones because the higher frequencies used in 5G mean one needs more BTS units to provide the same geographic coverage: For physics reasons, higher frequencies equals shorter range. - -If, as is projected, 5G develops into the new enterprise broadband for the internet of things (IoT), along with associated private networks covering everything else, then these eco- and cost-important questions are going to be salient — and they need answers quickly. 5G will soon be here, and [Gartner estimates that 60% of organizations will adopt it][10]. - -**More about 5G networks:** - - * [How enterprises can prep for 5G networks][11] - * [5G vs 4G: How speed, latency and apps support differ][12] - * [Private 5G networks are coming][13] - * [5G and 6G wireless have security issues][14] - * [How millimeter-wave wireless could help support 5G and IoT][15] - - - -Join the Network World communities on [Facebook][16] and [LinkedIn][17] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3395465/will-5g-be-the-first-carbon-neutral-network.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/01/4g-versus-5g_horizon_sunrise-100784230-large.jpg -[2]: https://www.networkworld.com/article/3203489/lan-wan/what-is-5g-wireless-networking-benefits-standards-availability-versus-lte.html -[3]: https://liu.se/en/news-item/okningen-av-mobildata-kraver-energieffektivare-nat -[4]: https://www.networkworld.com/article/3262991/future-wireless-networks-will-have-no-capacity-limits.html -[5]: https://arxiv.org/pdf/1812.01688.pdf -[6]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fmobile-device-management-big-picture -[7]: https://www.nokia.com/blog/nokia-has-ambitious-plans-reduce-network-power-consumption/ -[8]: https://pages.nokia.com/2364.Zero.Emissions.ebook.html?did=d000000001af&utm_campaign=5g_in_action_&utm_source=twitter&utm_medium=organic&utm_term=0dbf430c-1c94-47d7-8961-edc4f0ba3270 -[9]: https://twitter.com/Gabeuk/status/1099709788676636672?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1099709788676636672&ref_url=https%3A%2F%2Fwww.lightreading.com%2Fmobile%2F5g%2Fpower-consumption-5g-basestations-are-hungry-hungry-hippos%2Fd%2Fd-id%2F749979 -[10]: https://www.gartner.com/en/newsroom/press-releases/2018-12-18-gartner-survey-reveals-two-thirds-of-organizations-in -[11]: https://www.networkworld.com/article/3306720/mobile-wireless/how-enterprises-can-prep-for-5g.html -[12]: https://www.networkworld.com/article/3330603/mobile-wireless/5g-versus-4g-how-speed-latency-and-application-support-differ.html -[13]: https://www.networkworld.com/article/3319176/mobile-wireless/private-5g-networks-are-coming.html -[14]: https://www.networkworld.com/article/3315626/network-security/5g-and-6g-wireless-technologies-have-security-issues.html -[15]: https://www.networkworld.com/article/3291323/mobile-wireless/millimeter-wave-wireless-could-help-support-5g-and-iot.html -[16]: https://www.facebook.com/NetworkWorld/ -[17]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190517 The modern data center and the rise in open-source IP routing suites.md b/sources/talk/20190517 The modern data center and the rise in open-source IP routing suites.md deleted file mode 100644 index 02063687a0..0000000000 --- a/sources/talk/20190517 The modern data center and the rise in open-source IP routing suites.md +++ /dev/null @@ -1,140 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (The modern data center and the rise in open-source IP routing suites) -[#]: via: (https://www.networkworld.com/article/3396136/the-modern-data-center-and-the-rise-in-open-source-ip-routing-suites.html) -[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/) - -The modern data center and the rise in open-source IP routing suites -====== -Open source enables passionate people to come together and fabricate work of phenomenal quality. This is in contrast to a single vendor doing everything. -![fdecomite \(CC BY 2.0\)][1] - -As the cloud service providers and search engines started with the structuring process of their business, they quickly ran into the problems of managing the networking equipment. Ultimately, after a few rounds of getting the network vendors to understand their problems, these hyperscale network operators revolted. - -Primarily, what the operators were looking for was a level of control in managing their network which the network vendors couldn’t offer. The revolution burned the path that introduced open networking, and network disaggregation to the work of networking. Let us first learn about disaggregation followed by open networking. - -### Disaggregation - -The concept of network disaggregation involves breaking-up of the vertical networking landscape into individual pieces, where each piece can be used in the best way possible. The hardware can be separated from the software, along with open or closed IP routing suites. This enables the network operators to use the best of breed for the hardware, software and the applications. - -**[ Now see[7 free network tools you must have][2]. ]** - -Networking has always been built as an appliance and not as a platform. The mindset is that the network vendor builds an appliance and as a specialized appliance, they will completely control what you can and cannot do on that box. In plain words, they will not enable anything that is not theirs. As a result, they act as gatekeepers and not gate-enablers. - -Network disaggregation empowers the network operators with the ability to lay hands on the features they need when they need them. However, this is impossible in case of non-disaggregated hardware. - -### Disaggregation leads to using best-of-breed - -In the traditional vertically integrated networking market, you’re forced to live with the software because you like the hardware, or vice-versa. But network disaggregation drives different people to develop things that matter to them. This allows multiple groups of people to connect, with each one focused on doing what he or she does the best. Switching silicon manufacturers can provide the best merchant silicon. Routing suites can be provided by those who are the best at that. And the OS vendors can provide the glue that enables all of these to work well together. - -With disaggregation, people are driven to do what they are good at. One company does the hardware, whereas another does the software and other company does the IP routing suites. Hence, today the networking world looks like more of the server world. - -### Open source - -Within this rise of the modern data center, there is another element that is driving network disaggregation; the notion of open source. Open source is “denoting software for which the original source code is made freely available, it may be redistributed and modified.” It enables passionate people to come together and fabricate work of phenomenal quality. This is in contrast to a single vendor doing everything. - -As a matter of fact, the networking world has always been very vendor driven. However, the advent of open source gives the opportunity to like-minded people rather than the vendor controlling the features. This eliminates the element of vendor lock-in, thereby enabling interesting work. Open source allows more than one company to be involved. - -### Open source in the data center - -The traditional enterprise and data center networks were primarily designed by bridging and Spanning Tree Protocol (STP). However, the modern data center is driven by IP routing and the CLOS topology. As a result, you need a strong IP routing suite. - -That was the point where the need for an open-source routing suite surfaced, the suite that can help drive the modern data center. The primary open-source routing suites are [FRRouting (FRR)][3], BIRD, GoBGP and ExaBGP. - -Open-source IP routing protocol suites are slowly but steadily gaining acceptance and are used in data centers of various sizes. Why? It is because they allow a community of developers and users to work on finding solutions to common problems. Open-source IP routing protocol suites equip them to develop the specific features that they need. It also helps the network operators to create simple designs that make sense to them, as opposed to having everything controlled by the vendor. They also enable routing suites to run on compute nodes. Kubernetes among others uses this model of running a routing protocol on a compute node. - -Today many startups are using FRR. Out of all of the IP routing suites, FRR is preferred in the data center as the primary open-source IP routing protocol suite. Some traditional network vendors have even demonstrated the use of FRR on their networking gear. - -There are lots of new features currently being developed for FRR, not just by the developers but also by the network operators. - -### Use cases for open-source routing suites - -When it comes to use-cases, where do IP routing protocol suites sit? First and foremost, if you want to do any type of routing in the disaggregated network world, you need an IP routing suite. - -Some operators are using FRR at the edge of the network as well, thereby receiving full BGP feeds. Many solutions which use Intel’s DPDK for packet forwarding use FRR as the control plane, receiving full BGP feeds. In addition, there are other vendors using FRR as the core IP routing suite for a full leaf and spine data center architecture. You can even get a version of FRR on pfSense which is a free and open source firewall. - -We need to keep in mind that reference implementations are important. Open source allows you to test at scale. But vendors don’t allow you to do that. However, with FRR, we have the ability to spin up virtual machines (VMs) or even containers by using software like Vagrant to test your network. Some vendors do offer software versions, but they are not fully feature-compatible. - -Also, with open source you do not need to wait. This empowers you with flexibility and speed which drives the modern data center. - -### Deep dive on FRRouting (FRR) - -FRR is a Linux foundation project. In a technical Linux sense, FRR is a group of daemons that work together, providing a complete routing suite that includes BGP, IS-IS, LDP, OSPF, BFD, PIM, and RIP. - -Each one of these daemons communicate with the common routing information base (RIB) daemon called Zebra in order to interface with the OS and to resolve conflicts between the multiple routing protocols providing the same information. Interfacing with the OS is used to receive the link up/down events, to add and delete routes etc. - -### FRRouting (FRR) components: Zebra - -Zebra is the RIB of the routing systems. It knows everything about the state of the system relevant to routing and is able to pass and disseminate this information to all the interested parties. - -The RIB in FRR acts just like a traditional RIB. When a route wins, it goes into the Linux kernel data plane where the forwarding occurs. All of the routing protocols run as separate processes and each of them have their source code in FRR. - -For example, when BGP starts up, it needs to know, for instance, what kind of virtual routing and forwarding (VRF) and IP interfaces are available. Zebra collects and passes this information back to the interested daemons. It passes all the relevant information about state of the machine. - -Furthermore, you can also register information with Zebra. For example, if a particular route changes, the daemon can be informed. This can also be used for reverse path forwarding (RPF). FRR doesn't need to do a pull when changes happen on the network. - -There are a myriad of ways through which you can control Linux and the state. Sometimes you have to use options like the Netlink bus and sometimes you may need to read the state in proc file system of Linux. The goal of Zebra is to gather all this data for the upper level protocols. - -### FRR supports remote data planes - -FRR also has the ability to manage the remote data planes. So, what does this mean? Typically, the data forwarding plane and the routing protocols run on the same box. Another model, adopted by Openflow and SDN for example, is one in which the data forwarding plane can be on one box while FRR runs on a different box on behalf of the first box and pushes the computed routing state on the first box. In other words, the data plane and the control plane run on different boxes. - -If you examine the traditional world, it’s like having one large chassis with different line cards with the ability to install routes in those different line cards. FRR operates with the same model which has one control plane and the capability to offer 3 boxes, if needed. It does this via the forwarding plane manager. - -### Forwarding plane manager - -Zebra can either install routes directly into the data plane of the box it is running on or use a forwarding plane manager to install routes on a remote box. When it installs a route, the forwarding plane manager abstracts the data which displays the route and the next hops. It then pushes the data to a remote system where the remote machine processes it and programs the ASIC appropriately. - -After the data is abstracted, you can use whatever protocol you want in order to push the data to the remote machine. You can even include the data in an email. - -### What is holding people back from open source? - -Since last 30 years the networking world meant that you need to go to a vendor to solve a problem. But now with open-source routing suites, such as, FRR, there is a major drift in the mindset as to how you approach troubleshooting. - -This causes the fear of not being able to use it properly because with open source you are the one who has to fix it. This at first can be scary and daunting. But it doesn’t necessarily have to be. Also, to switch to FRR on a traditional network gear, you need the vendor to enable it, but they may be reluctant as they are on competing platforms which can be another road blocker. - -### The future of FRR - -If we examine FRR from the use case perspective of the data center, FRR is feature-complete. Anyone building an IP based data center FRR has everything available. The latest 7.0 release of FRR adds Yang/NetConf, BGP Enhancements and OpenFabric. - -FRR is not just about providing features, boosting the performance or being the same as or better than the traditional network vendor’s software, it is also about simplifying the process for the end user. - -Since the modern data center is focused on automation and ease of use, FRR has made such progress that the vendors have not caught up with. FRR is very automation friendly. For example, FRR takes BGP and makes it automation-friendly without having to change the protocol. It supports BGP unnumbered that is unmatched by any other vendor suite. This is where the vendors are trying to catch up. - -Also, while troubleshooting, FRR shows peer’s and host’s names and not just the IP addresses. This allows you to understand without having spent much time. However, vendors show the peer’s IP addresses which can be daunting when you need to troubleshoot. - -FRR provides the features that you need to run an efficient network and data center. It makes easier to configure and manage the IP routing suite. Vendors just add keep adding features over features whether they are significant or not. Then you need to travel the certification paths that teach you how to twiddle 20 million nobs. How many of those networks are robust and stable? - -FRR is about supporting features that matter and not every imaginable feature. FRR is an open source project that brings like-minded people together, good work that is offered isn’t turned away. As a case in point, FRR has an open source implementation of EIGRP. - -The problem surfaces when you see a bunch of things, you think you need them. But in reality, you should try to keep the network as simple as possible. FRR is laser-focused on the ease of use and simplifying the use rather than implementing features that are mostly not needed to drive the modern data center. - -For more information and to contribute, why not join the [FRR][4] [mailing list group][4]. - -**This article is published as part of the IDG Contributor Network.[Want to Join?][5]** - -Join the Network World communities on [Facebook][6] and [LinkedIn][7] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3396136/the-modern-data-center-and-the-rise-in-open-source-ip-routing-suites.html - -作者:[Matt Conran][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Matt-Conran/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/12/modular_humanoid_polyhedra_connections_structure_building_networking_by_fdecomite_cc_by_2-0_via_flickr_1200x800-100782334-large.jpg -[2]: https://www.networkworld.com/article/2825879/7-free-open-source-network-monitoring-tools.html -[3]: https://frrouting.org/community/7.0-launch.html -[4]: https://frrouting.org/#participate -[5]: /contributor-network/signup.html -[6]: https://www.facebook.com/NetworkWorld/ -[7]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190521 Enterprise IoT- Companies want solutions in these 4 areas.md b/sources/talk/20190521 Enterprise IoT- Companies want solutions in these 4 areas.md deleted file mode 100644 index 9df4495f05..0000000000 --- a/sources/talk/20190521 Enterprise IoT- Companies want solutions in these 4 areas.md +++ /dev/null @@ -1,119 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Enterprise IoT: Companies want solutions in these 4 areas) -[#]: via: (https://www.networkworld.com/article/3396128/the-state-of-enterprise-iot-companies-want-solutions-for-these-4-areas.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -Enterprise IoT: Companies want solutions in these 4 areas -====== -Based on customer pain points, PwC identified four areas companies are seeking enterprise solutions for, including energy use and sustainability. -![Jackie Niam / Getty Images][1] - -Internet of things (IoT) vendors and pundits like to crow about the billions and billions of connected devices that make the IoT so ubiquitous and powerful. But how much of that installed base is really relevant to the enterprise? - -To find out, I traded emails with Rob Mesirow, principal at [PwC’s Connected Solutions][2], the firm’s new one-stop-shop of IoT solutions, who suggests that consumer adoption may not paint a true picture of the enterprise opportunities. If you remove the health trackers and the smart thermostats from the market, he suggested, there are very few connected devices left. - -So, I wondered, what is actually happening on the enterprise side of IoT? What kinds of devices are we talking about, and in what kinds of numbers? - -**[ Read also:[Forget 'smart homes,' the new goal is 'autonomous buildings'][3] ]** - -“When people talk about the IoT,” Mesirow told me, “they usually focus on [consumer devices, which far outnumber business devices][4]. Yet [connected buildings currently represent only 12% of global IoT projects][5],” he noted, “and that’s without including wearables and smart home projects.” (Mesirow is talking about buildings that “use various IoT devices, including occupancy sensors that determine when people are present in a room in order to keep lighting and temperature controls at optimal levels, lowering energy costs and aiding sustainability goals. Sensors can also detect water and gas leaks and aid in predictive maintenance for HVAC systems.”) - -### 4 key enterprise IoT opportunities - -More specifically, based on customer pain points, PwC’s Connected Solutions is focusing on a few key opportunities, which Mesirow laid out in a [blog post][6] earlier this year. (Not surprisingly, the opportunities seem tied to [the group’s products][7].) - -“A lot of these solutions came directly from our customers’ request,” he noted. “We pre-qualify our solutions with customers before we build them.” - -Let’s take a look at the top four areas, along with a quick reality check on how important they are and whether the technology is ready for prime time. - -#### **1\. Energy use and sustainability** - -The IoT makes it possible to manage buildings and spaces more efficiently, with savings of 25% or more. Occupancy sensors can tell whether anyone is actually in a room, adjusting lighting and temperature to saving money and conserve energy. - -Connected buildings can also help determine when meeting spaces are available, which can boost occupancy at large businesses and universities by 40% while cutting infrastructure and maintenance costs. Other sensors, meanwhile, can detect water and gas leaks and aid in predictive maintenance for HVAC systems. - -**Reality check:** Obviously, much of this technology is not new, but there’s a real opportunity to make it work better by integrating disparate systems and adding better analytics to the data to make planning more effective. - -#### **2. Asset tracking - -** - -“Businesses can also use the IoT to track their assets,“ Mesirow told me, “which can range from trucks to hotel luggage carts to medical equipment. It can even assist with monitoring trash by alerting appropriate people when dumpsters need to be emptied.” - -Asset trackers can instantly identify the location of all kinds of equipment (saving employee time and productivity), and they can reduce the number of lost, stolen, and misplaced devices and machines as well as provide complete visibility into the location of your assets. - -Such trackers can also save employees from wasting time hunting down the devices and machines they need. For example, PwC noted that during an average hospital shift, more than one-third of nurses spend at least an hour looking for equipment such as blood pressure monitors and insulin pumps. Just as important, location tracking often improves asset optimization, reduced inventory needs, and improved customer experience. - -**Reality check:** Asset tracking offers clear value. The real question is whether a given use case is cost effective or not, as well as how the data gathered will actually be used. Too often, companies spend a lot of money and effort tracking their assets, but don’t do much with the information. - -#### **3\. Security and compliance** - -Connected solutions can create better working environments, Mesirow said. “In a hotel, for example, these smart devices can ensure that air and water quality is up to standards, provide automated pest traps, monitor dumpsters and recycling bins, detect trespassers, determine when someone needs assistance, or discover activity in an unauthorized area. Monitoring the water quality of hotel swimming pools can lower chemical and filtering costs,” he said. - -Mesirow cited an innovative use case where, in response to workers’ complaints about harassment, hotel operators—in conjunction with the [American Hotel and Lodging Association][8]—are giving their employees portable devices that alert security staff when workers request assistance. - -**Reality check:** This seems useful, but the ROI might be difficult to calculate. - -#### **4\. Customer experience** - -According to PwC, “Sensors, facial recognition, analytics, dashboards, and notifications can elevate and even transform the customer experience. … Using connected solutions, you can identify and reward your best customers by offering perks, reduced wait times, and/or shorter lines.” - -Those kinds of personalized customer experiences can potentially boost customer loyalty and increase revenue, Mesirow said, adding that the technology can also make staff deployments more efficient and “enhance safety by identifying trespassers and criminals who are tampering with company property.” - -**Reality check:** Creating a great customer experience is critical for businesses today, and this kind of personalized targeting promises to make it more efficient and effective. However, it has to be done in a way that makes customers comfortable and not creeped out. Privacy concerns are very real, especially when it comes to working with facial recognition and other kinds of surveillance technology. For example, [San Francisco recently banned city agencies from using facial recognition][9], and others may follow. - -**More on IoT:** - - * [What is the IoT? How the internet of things works][10] - * [What is edge computing and how it’s changing the network][11] - * [Most powerful Internet of Things companies][12] - * [10 Hot IoT startups to watch][13] - * [The 6 ways to make money in IoT][14] - * [What is digital twin technology? [and why it matters]][15] - * [Blockchain, service-centric networking key to IoT success][16] - * [Getting grounded in IoT networking and security][17] - * [Building IoT-ready networks must become a priority][18] - * [What is the Industrial IoT? [And why the stakes are so high]][19] - - - -Join the Network World communities on [Facebook][20] and [LinkedIn][21] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3396128/the-state-of-enterprise-iot-companies-want-solutions-for-these-4-areas.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/iot_internet_of_things_by_jackie_niam_gettyimages-996958260_2400x1600-100788446-large.jpg -[2]: https://digital.pwc.com/content/pwc-digital/en/products/connected-solutions.html#get-connected -[3]: https://www.networkworld.com/article/3309420/forget-smart-homes-the-new-goal-is-autonomous-buildings.html -[4]: https://www.statista.com/statistics/370350/internet-of-things-installed-base-by-category/) -[5]: https://iot-analytics.com/top-10-iot-segments-2018-real-iot-projects/ -[6]: https://www.digitalpulse.pwc.com.au/five-unexpected-ways-internet-of-things/ -[7]: https://digital.pwc.com/content/pwc-digital/en/products/connected-solutions.html -[8]: https://www.ahla.com/ -[9]: https://www.nytimes.com/2019/05/14/us/facial-recognition-ban-san-francisco.html -[10]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[11]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[12]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[13]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[14]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[15]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[16]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[17]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[18]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[19]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[20]: https://www.facebook.com/NetworkWorld/ -[21]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190522 Experts- Enterprise IoT enters the mass-adoption phase.md b/sources/talk/20190522 Experts- Enterprise IoT enters the mass-adoption phase.md deleted file mode 100644 index 86d7bf0efe..0000000000 --- a/sources/talk/20190522 Experts- Enterprise IoT enters the mass-adoption phase.md +++ /dev/null @@ -1,78 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Experts: Enterprise IoT enters the mass-adoption phase) -[#]: via: (https://www.networkworld.com/article/3397317/experts-enterprise-iot-enters-the-mass-adoption-phase.html) -[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/) - -Experts: Enterprise IoT enters the mass-adoption phase -====== -Dropping hardware prices, 5G boost business internet-of-things deployments; technical complexity encourages partnerships. -![Avgust01 / Getty Images][1] - -[IoT][2] in general has taken off quickly over the past few years, but experts at the recent IoT World highlighted that the enterprise part of the market has been particularly robust of late – it’s not just an explosion of connected home gadgets anymore. - -Donna Moore, chairwoman of the LoRa Alliance, an industry group that works to develop and scale low-power WAN technology for mass usage, said on a panel that she’s never seen growth this fast in the sector. “I’d say we’re now in the early mass adopters [stage],” she said. - -**More on IoT:** - - * [Most powerful Internet of Things companies][3] - * [10 Hot IoT startups to watch][4] - * [The 6 ways to make money in IoT][5] - * [What is digital twin technology? [and why it matters]][6] - * [Blockchain, service-centric networking key to IoT success][7] - * [Getting grounded in IoT networking and security][8] - * [Building IoT-ready networks must become a priority][9] - * [What is the Industrial IoT? [And why the stakes are so high]][10] - - - -The technology itself has pushed adoption to these heights, said Graham Trickey, head of IoT for the GSMA, a trade organization for mobile network operators. Along with price drops for wireless connectivity modules, the array of upcoming technologies nestling under the umbrella label of [5G][11] could simplify the process of connecting devices to [edge-computing][12] hardware – and the edge to the cloud or [data center][13]. - -“Mobile operators are not just providers of connectivity now, they’re farther up the stack,” he said. Technologies like narrow-band IoT and support for highly demanding applications like telehealth are all set to be part of the final 5G spec. - -### Partnerships needed to deal with IoT complexity** - -** - -That’s not to imply that there aren’t still huge tasks facing both companies trying to implement their own IoT frameworks and the creators of the technology underpinning them. For one thing, IoT tech requires a huge array of different sets of specialized knowledge. - -“That means partnerships, because you need an expert in your [vertical] area to know what you’re looking for, you need an expert in communications, and you might need a systems integrator,” said Trickey. - -Phil Beecher, the president and CEO of the Wi-SUN Alliance (the acronym stands for Smart Ubiquitous Networks, and the group is heavily focused on IoT for the utility sector), concurred with that, arguing that broad ecosystems of different technologies and different partners would be needed. “There’s no one technology that’s going to solve all these problems, no matter how much some parties might push it,” he said. - -One of the central problems – [IoT security][14] – is particularly dear to Beecher’s heart, given the consequences of successful hacks of the electrical grid or other utilities. More than one panelist praised the passage of the EU’s General Data Protection Regulation, saying that it offered concrete guidelines for entities developing IoT tech – a crucial consideration for some companies that may not have a lot of in-house expertise in that area. - -Join the Network World communities on [Facebook][15] and [LinkedIn][16] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3397317/experts-enterprise-iot-enters-the-mass-adoption-phase.html - -作者:[Jon Gold][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Jon-Gold/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/iot_internet_of_things_mobile_connections_by_avgust01_gettyimages-1055659210_2400x1600-100788447-large.jpg -[2]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[3]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[4]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[5]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[6]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[7]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[8]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[9]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[10]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[11]: https://www.networkworld.com/article/3203489/what-is-5g-how-is-it-better-than-4g.html -[12]: https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-it-s-changing-the-network.html?nsdr=true -[13]: https://www.networkworld.com/article/3223692/what-is-a-data-centerhow-its-changed-and-what-you-need-to-know.html -[14]: https://www.networkworld.com/article/3269736/getting-grounded-in-iot-networking-and-security.html -[15]: https://www.facebook.com/NetworkWorld/ -[16]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190522 The Traffic Jam Whopper project may be the coolest-dumbest IoT idea ever.md b/sources/talk/20190522 The Traffic Jam Whopper project may be the coolest-dumbest IoT idea ever.md deleted file mode 100644 index be8a4833cc..0000000000 --- a/sources/talk/20190522 The Traffic Jam Whopper project may be the coolest-dumbest IoT idea ever.md +++ /dev/null @@ -1,97 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (The Traffic Jam Whopper project may be the coolest/dumbest IoT idea ever) -[#]: via: (https://www.networkworld.com/article/3396188/the-traffic-jam-whopper-project-may-be-the-coolestdumbest-iot-idea-ever.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -The Traffic Jam Whopper project may be the coolest/dumbest IoT idea ever -====== -Burger King uses real-time IoT data to deliver burgers to drivers stuck in traffic — and it seems to be working. -![Mike Mozart \(CC BY 2.0\)][1] - -People love to eat in their cars. That’s why we invented the drive-in and the drive-thru. - -But despite a fast-food outlet on the corner of every major intersection, it turns out we were only scratching the surface of this idea. Burger King is taking this concept to the next logical step with its new IoT-powered Traffic Jam Whopper project. - -I have to admit, when I first heard about this, I thought it was a joke, but apparently the [Traffic Jam Whopper project is totally real][2] and has already passed a month-long test in Mexico City. While the company hasn’t specified a timeline, it plans to roll out the Traffic Jam Whopper project in Los Angeles (where else?) and other traffic-plagued megacities such as São Paulo and Shanghai. - -**[ Also read:[Is IoT in the enterprise about making money or saving money?][3] | Get regularly scheduled insights: [Sign up for Network World newsletters][4] ]** - -### How Burger King's Traffic Jam Whopper project works - -According to [Nations Restaurant News][5], this is how Burger King's Traffic Jam Whopper project works: - -The project uses real-time data to target hungry drivers along congested roads and highways for food delivery by couriers on motorcycles. - -The system leverages push notifications to the Burger King app and personalized messaging on digital billboards positioned along busy roads close to a Burger King restaurant. - -[According to the We Believers agency][6] that put it all together, “By leveraging traffic and drivers’ real-time data [location and speed], we adjusted our billboards’ location and content, displaying information about the remaining time in traffic to order, and personalized updates about deliveries in progress.” The menu is limited to Whopper Combos to speed preparation (though the company plans to offer a wider menu as it works out the kinks). - -**[[Become a Microsoft Office 365 administrator in record time with this quick start course from PluralSight.][7] ]** - -The company said orders in Mexico City were delivered in an average of 15 minutes. Fortunately (or unfortunately, depending on how you look at it) many traffic jams hold drivers captive for far longer than that. - -Once the order is ready, the motorcyclist uses Google maps and GPS technology embedded into the app to locate the car that made the order. The delivery person then weaves through traffic to hand over the Whopper. (Lane-splitting is legal in California, but I have no idea if there are other potential safety or law-enforcement issues involved here. For drivers ordering burgers, at least, the Burger King app supports voice ordering. I also don’t know what happens if traffic somehow clears up before the burger arrives.) - -Here’s a video of the pilot program in Mexico City: - -#### **New technology = > new opportunities** - -Even more amazing, this is not _just_ a publicity stunt. NRN quotes Bruno Cardinali, head of marketing for Burger King Latin America and Caribbean, claiming the project boosted sales during rush hour, when app orders are normally slow: - -“Thanks to The Traffic Jam Whopper campaign, we’ve increased deliveries by 63% in selected locations across the month of April, adding a significant amount of orders per restaurant per day, just during rush hours." - -If nothing else, this project shows that creative thinking really can leverage IoT technology into new businesses. In this case, it’s turning notoriously bad traffic—pretty much required for this process to work—from a problem into an opportunity to generate additional sales during slow periods. - -**More on IoT:** - - * [What is the IoT? How the internet of things works][8] - * [What is edge computing and how it’s changing the network][9] - * [Most powerful Internet of Things companies][10] - * [10 Hot IoT startups to watch][11] - * [The 6 ways to make money in IoT][12] - * [What is digital twin technology? [and why it matters]][13] - * [Blockchain, service-centric networking key to IoT success][14] - * [Getting grounded in IoT networking and security][15] - * [Building IoT-ready networks must become a priority][16] - * [What is the Industrial IoT? [And why the stakes are so high]][17] - - - -Join the Network World communities on [Facebook][18] and [LinkedIn][19] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3396188/the-traffic-jam-whopper-project-may-be-the-coolestdumbest-iot-idea-ever.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/burger-king-gift-card-100797164-large.jpg -[2]: https://abc7news.com/food/burger-king-to-deliver-to-drivers-stuck-in-traffic/5299073/ -[3]: https://www.networkworld.com/article/3343917/the-big-picture-is-iot-in-the-enterprise-about-making-money-or-saving-money.html -[4]: https://www.networkworld.com/newsletters/signup.html -[5]: https://www.nrn.com/technology/tech-tracker-burger-king-deliver-la-motorists-stuck-traffic?cid= -[6]: https://www.youtube.com/watch?v=LXNgEZV7lNg -[7]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fadministering-office-365-quick-start -[8]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[9]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[10]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[11]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[12]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[13]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[14]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[15]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[16]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[17]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[18]: https://www.facebook.com/NetworkWorld/ -[19]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190523 Benchmarks of forthcoming Epyc 2 processor leaked.md b/sources/talk/20190523 Benchmarks of forthcoming Epyc 2 processor leaked.md deleted file mode 100644 index 61ae9e656b..0000000000 --- a/sources/talk/20190523 Benchmarks of forthcoming Epyc 2 processor leaked.md +++ /dev/null @@ -1,55 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Benchmarks of forthcoming Epyc 2 processor leaked) -[#]: via: (https://www.networkworld.com/article/3397081/benchmarks-of-forthcoming-epyc-2-processor-leaked.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Benchmarks of forthcoming Epyc 2 processor leaked -====== -Benchmarks of AMD's second-generation Epyc server briefly found their way online and show the chip is larger but a little slower than the Epyc 7601 on the market now. -![Gordon Mah Ung][1] - -Benchmarks of engineering samples of AMD's second-generation Epyc server, code-named “Rome,” briefly found their way online and show a very beefy chip running a little slower than its predecessor. - -Rome is based on the Zen 2 architecture, believed to be more of an incremental improvement over the prior generation than a major leap. It’s already known that Rome would feature a 64-core, 128-thread design, but that was about all of the details. - -**[ Also read:[Who's developing quantum computers][2] ]** - -The details came courtesy of SiSoftware's Sandra PC analysis and benchmarking tool. It’s very popular and has been used by hobbyists and benchmarkers alike for more than 20 years. New benchmarks are uploaded to the Sandra database all the time, and what I suspect happened is someone running a Rome sample ran the benchmark, not realizing the results would be uploaded to the Sandra database. - -The benchmarks were from two different servers, a Dell PowerEdge R7515 and a Super Micro Super Server. The Dell product number is not on the market, so this would indicate a future server with Rome processors. The entry has since been deleted, but several sites, including the hobbyist site Tom’s Hardware Guide, managed to [take a screenshot][3]. - -According to the entry, the chip is a mid-range processor with a base clock speed of 1.4GHz, jumping up to 2.2GHz in turbo mode, with 16MB of Level 2 cache and 256MB of Level 3 cache, the latter of which is crazy. The first-generation Epyc had just 32MB of L3 cache. - -That’s a little slower than the Epyc 7601 on the market now, but when you double the number of cores in the same space, something’s gotta give, and in this case, it’s electricity. The thermal envelope was not revealed by the benchmark. Previous Epyc processors ranged from 120 watts to 180 watts. - -Sandra ranked the processor at #3 for arithmetic and #5 for multimedia processing, which makes me wonder what on Earth beat the Rome chip. Interestingly, the servers were running Windows 10, not Windows Server 2019. - -**[[Get certified as an Apple Technical Coordinator with this seven-part online course from PluralSight.][4] ]** - -Rome is expected to be officially launched at the massive Computex trade show in Taiwan on May 27 and will begin shipping in the third quarter of the year. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3397081/benchmarks-of-forthcoming-epyc-2-processor-leaked.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/11/rome_2-100779395-large.jpg -[2]: https://www.networkworld.com/article/3275385/who-s-developing-quantum-computers.html -[3]: https://www.tomshardware.co.uk/amd-epyc-rome-processor-data-center,news-60265.html -[4]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fapple-certified-technical-trainer-10-11 -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190523 Edge-based caching and blockchain-nodes speed up data transmission.md b/sources/talk/20190523 Edge-based caching and blockchain-nodes speed up data transmission.md deleted file mode 100644 index 54ddf76db3..0000000000 --- a/sources/talk/20190523 Edge-based caching and blockchain-nodes speed up data transmission.md +++ /dev/null @@ -1,74 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Edge-based caching and blockchain-nodes speed up data transmission) -[#]: via: (https://www.networkworld.com/article/3397105/edge-based-caching-and-blockchain-nodes-speed-up-data-transmission.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Edge-based caching and blockchain-nodes speed up data transmission -====== -Using a combination of edge-based data caches and blockchain-like distributed networks, Bluzelle claims it can significantly speed up the delivery of data across the globe. -![OlgaSalt / /getty][1] - -The combination of a blockchain-like distributed network, along with the ability to locate data at the edge will massively speed up future networks, such as those used by the internet of things (IoT), claims Bluzelle in announcing what is says is the first decentralized data delivery network (DDN). - -Distributed DDNs will be like content delivery networks (CDNs) that now cache content around the world to speed up the web, but in this case, it will be for data, the Singapore-based company explains. Distributed key-value (blockchain) networks and edge computing built into Bluzelle's system will provide significantly faster delivery than existing caching, the company claims in a press release announcing its product. - -“The future of data delivery can only ever be de-centrally distributed,” says Pavel Bains, CEO and co-founder of Bluzelle. It’s because the world requires instant access to data that’s being created at the edge, he argues. - -“But delivery is hampered by existing technology,” he says. - -**[ Also read:[What is edge computing?][2] and [How edge networking and IoT will reshape data centers][3]. ]** - -Bluzelle says decentralized caching is the logical next step to generalized data caching, used for reducing latency. “Decentralized caching expands the theory of caching,” the company writes in a [report][4] (Dropbox pdf) on its [website][5]. It says the cache must be expanded from simply being located at one unique location. - -“Using a combination of distributed networks, the edge and the cloud, [it’s] thereby increasing the transactional throughput of data,” the company says. - -This kind of thing is particularly important in consumer gaming now, where split-second responses from players around the world make or break a game experience, but it will likely be crucial for the IoT, higher-definition media, artificial intelligence, and virtual reality as they gain more of a role in digitization—including at critical enterprise applications. - -“Currently applications are limited to data caching technologies that require complex configuration and management of 10-plus-year-old technology constrained to a few data centers,” Bains says. “These were not designed to handle the ever-increasing volumes of data.” - -Bains says one of the key selling points of Bluzelle's network is that developers should be able to implement and run networks without having to also physically expand the networks manually. - -“Software developers don’t want to react to where their customers come from. Our architecture is designed to always have the data right where the customer is. This provides a superior consumer experience,” he says. - -Data caches are around now, but Bluzelle claims its system, written in C++ and available on Linux and Docker containers, among other platforms, is faster than others. It further says that if its system and a more traditional cache would connect to the same MySQL database in Virginia, say, their users will get the data three to 16 times faster than a traditional “non-edge-caching” network. Write updates to all Bluzelle nodes around the world takes 875 milliseconds (ms), it says. - -The company has been concentrating its efforts on gaming, and with a test setup in Virginia, it says it was able to deliver data 33 times faster—at 22ms to Singapore—than a normal, cloud-based data cache. That traditional cache (located near the database) took 727ms in the Bluzelle-published test. In a test to Ireland, it claims 16ms over 223ms using a traditional cache. - -An algorithm is partly the reason for the gains, the company explains. It “allows the nodes to make decisions and take actions without the need for masternodes,” the company says. Masternodes are the server-like parts of blockchain systems. - -**More about edge networking** - - * [How edge networking and IoT will reshape data centers][3] - * [Edge computing best practices][6] - * [How edge computing can help secure the IoT][7] - - - -Join the Network World communities on [Facebook][8] and [LinkedIn][9] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3397105/edge-based-caching-and-blockchain-nodes-speed-up-data-transmission.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/blockchain_crypotocurrency_bitcoin-by-olgasalt-getty-100787949-large.jpg -[2]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[3]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html -[4]: https://www.dropbox.com/sh/go5bnhdproy1sk5/AAC5MDoafopFS7lXUnmiLAEFa?dl=0&preview=Bluzelle+Report+-+The+Decentralized+Internet+Is+Here.pdf -[5]: https://bluzelle.com/ -[6]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html -[7]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html -[8]: https://www.facebook.com/NetworkWorld/ -[9]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190523 Online performance benchmarks all companies should try to achieve.md b/sources/talk/20190523 Online performance benchmarks all companies should try to achieve.md deleted file mode 100644 index 829fb127f8..0000000000 --- a/sources/talk/20190523 Online performance benchmarks all companies should try to achieve.md +++ /dev/null @@ -1,80 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Online performance benchmarks all companies should try to achieve) -[#]: via: (https://www.networkworld.com/article/3397322/online-performance-benchmarks-all-companies-should-try-to-achieve.html) -[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/) - -Online performance benchmarks all companies should try to achieve -====== -With digital performance more important than ever, companies must ensure their online performance meets customers’ needs. A new ThousandEyes report can help them determine that. -![Thinkstock][1] - -There's no doubt about it: We have entered the experience economy, and digital performance is more important than ever. - -Customer experience is the top brand differentiator, topping price and every other factor. And businesses that provide a poor digital experience will find customers will actively seek a competitor. In fact, recent ZK Research found that in 2018, about two-thirds of millennials changed loyalties to a brand because of a bad experience. (Note: I am an employee of ZK Research.) - -To help companies determine if their online performance is leading, lacking, or on par with some of the top companies, ThousandEyes this week released its [2019 Digital Experience Performance Benchmark Report][2]. This document provides a comparative analysis of web, infrastructure, and network performance from the top 20 U.S. digital retail, travel, and media websites. Although this is a small sampling of companies, those three industries are the most competitive when it comes to using their digital platforms for competitive advantage. The aggregated data from this report can be used as an industry-agnostic performance benchmark that all companies should strive to meet. - -**[ Read also:[IoT providers need to take responsibility for performance][3] ]** - -The methodology of the study was for ThousandEyes to use its own platform to provide an independent view of performance. It uses active monitoring and a global network of monitoring agents to measure application and network layer performance for websites, applications, and services. The company collected data from 36 major cities scattered across the U.S. Six of the locations (Ashburn, Chicago, Dallas, Los Angeles, San Jose, and Seattle) also included vantage points connected to six major broadband ISPs (AT&T, CenturyLink, Charter, Comcast, Cox, and Verizon). This acts as a good proxy for what a user would experience. - -The test involved page load tests against the websites of the major companies in retail, media, and travel and looked at several factors, including DNS response time, round-trip latency, network time (one-way latency), HTTP response time, and page load. The averages and median times can be seen in the table below. Those can be considered the average benchmarks that all companies should try to attain. - -![][4] - -### Choice of content delivery network matters by location - -ThousandEyes' report also looked at how the various services that companies use impacts web performance. For example, the study measured the performance of the content delivery network (CDN) providers in the 36 markets. It found that in Albuquerque, Akamai and Fastly had the most latency, whereas Edgecast had the least. It also found that in Boston, all of the CDN providers were close. Companies can use this type of data to help them select a CDN. Without it, decision makers are essentially guessing and hoping. - -### CDN performance is impacted by ISP - -Another useful set of data was cross-referencing CDN performance by ISP, which lead to some fascinating information. With Comcast, Akamai, Cloudfront, Google and Incapula all had high amounts of latency. Only Edgecast and Fastly offered average latency. On the other hand, all of the CDNs worked great with CenturyLink. This tells a buyer, "If my customer base is largely in Comcast’s footprint, I should look at Edgecast or Fastly or my customers will be impacted." - -### DNS and latency directly impact page load times - -The ThousandEyes study also confirmed some points that many people believe as true but until now had no quantifiable evidence to support it. For example, it's widely accepted that DNS response time and network latency to the CDN edge correlate to web performance; the data in the report now supports that belief. ThousandEyes did some regression analysis and fancy math and found that in general, companies that were in the top quartile of HTTP performance had above-average DNS response time and network performance. There were a few exceptions, but in most cases, this is true. - -Based on all the data, the below are the benchmarks for the three infrastructure metrics gathered and is what businesses, even ones outside the three verticals studied, should hope to achieve to support a high-quality digital experience. - - * DNS response time 25 ms - * Round trip network latency 15 ms - * HTTP response time 250 ms - - - -### Operations teams need to focus on digital performance - -Benchmarking certainly provides value, but the report also offers some recommendations on how operations teams can use the data to improve digital performance. Those include: - - * **Measure site from distributed user vantage points**. There is no single point that will provide a view of digital performance everywhere. Instead, measure from a range of ISPs in different regions and take a multi-layered approach to visibility (application, network and routing). - * **Use internet performance information as a baseline**. Compare your organization's data to the baselines, and if you’re not meeting it in some markets, focus on improvement there. - * **Compare performance to industry peers**. In highly competitive industries, it’s important to understand how you rank versus the competition. Don’t be satisfied with hitting the benchmarks if your key competitors exceed them. - * **Build a strong performance stack.** The data shows that solid DNS and HTTP response times and low latency are correlated to solid page load times. Focus on optimizing those factors and consider them foundational to digital performance. - - - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3397322/online-performance-benchmarks-all-companies-should-try-to-achieve.html - -作者:[Zeus Kerravala][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Zeus-Kerravala/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2017/07/racing_speed_runners_internet-speed-100728363-large.jpg -[2]: https://www.thousandeyes.com/research/digital-experience -[3]: https://www.networkworld.com/article/3340318/iot-providers-need-to-take-responsibility-for-performance.html -[4]: https://images.idgesg.net/images/article/2019/05/thousandeyes-100797290-large.jpg -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190523 Study- Most enterprise IoT transactions are unencrypted.md b/sources/talk/20190523 Study- Most enterprise IoT transactions are unencrypted.md deleted file mode 100644 index 51098dad33..0000000000 --- a/sources/talk/20190523 Study- Most enterprise IoT transactions are unencrypted.md +++ /dev/null @@ -1,93 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Study: Most enterprise IoT transactions are unencrypted) -[#]: via: (https://www.networkworld.com/article/3396647/study-most-enterprise-iot-transactions-are-unencrypted.html) -[#]: author: (Tim Greene https://www.networkworld.com/author/Tim-Greene/) - -Study: Most enterprise IoT transactions are unencrypted -====== -A Zscaler report finds 91.5% of IoT communications within enterprises are in plaintext and so susceptible to interference. -![HYWARDS / Getty Images][1] - -Of the millions of enterprise-[IoT][2] transactions examined in a recent study, the vast majority were sent without benefit of encryption, leaving the data vulnerable to theft and tampering. - -The research by cloud-based security provider Zscaler found that about 91.5 percent of transactions by internet of things devices took place over plaintext, while 8.5 percent were encrypted with [SSL][3]. That means if attackers could intercept the unencrypted traffic, they’d be able to read it and possibly alter it, then deliver it as if it had not been changed. - -**[ For more on IoT security, see[our corporate guide to addressing IoT security concerns][4]. | Get regularly scheduled insights by [signing up for Network World newsletters][5]. ]** - -Researchers looked through one month’s worth of enterprise traffic traversing Zscaler’s cloud seeking the digital footprints of IoT devices. It found and analyzed 56 million IoT-device transactions over that time, and identified the type of devices, protocols they used, the servers they communicated with, how often communication went in and out and general IoT traffic patterns. - -The team tried to find out which devices generate the most traffic and the threats they face. It discovered that 1,015 organizations had at least one IoT device. The most common devices were set-top boxes (52 percent), then smart TVs (17 percent), wearables (8 percent), data-collection terminals (8 percent), printers (7 percent), IP cameras and phones (5 percent) and medical devices (1 percent). - -While they represented only 8 percent of the devices, data-collection terminals generated 80 percent of the traffic. - -The breakdown is that 18 percent of the IoT devices use SSL to communicate all the time, and of the remaining 82 percent, half used it part of the time and half never used it. -The study also found cases of plaintext HTTP being used to authenticate devices and to update software and firmware, as well as use of outdated crypto libraries and weak default credentials. - -While IoT devices are common in enterprises, “many of the devices are employee owned, and this is just one of the reasons they are a security concern,” the report says. Without strict policies and enforcement, these devices represent potential vulnerabilities. - -**[[Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][6] ]** - -Another reason employee-owned IoT devices are a concern is that many businesses don’t consider them a threat because no data is stored on them. But if the data they gather is transmitted insecurely, it is at risk. - -### 5 tips to protect enterprise IoT - -Zscaler recommends these security precautions: - - * Change default credentials to something more secure. As employees bring in devices, encourage them to use strong passwords and to keep their firmware current. - * Isolate IoT devices on networks and restrict inbound and outbound network traffic. - * Restrict access to IoT devices from external networks and block unnecessary ports from external access. - * Apply regular security and firmware updates to IoT devices, and secure network traffic. - * Deploy tools to gain visibility of shadow-IoT devices already inside the network so they can be protected. - - - -**More on IoT:** - - * [What is edge computing and how it’s changing the network][7] - * [Most powerful Internet of Things companies][8] - * [10 Hot IoT startups to watch][9] - * [The 6 ways to make money in IoT][10] - * [What is digital twin technology? [and why it matters]][11] - * [Blockchain, service-centric networking key to IoT success][12] - * [Getting grounded in IoT networking and security][13] - * [Building IoT-ready networks must become a priority][14] - * [What is the Industrial IoT? [And why the stakes are so high]][15] - - - -Join the Network World communities on [Facebook][16] and [LinkedIn][17] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3396647/study-most-enterprise-iot-transactions-are-unencrypted.html - -作者:[Tim Greene][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Tim-Greene/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/network_security_network_traffic_scanning_by_hywards_gettyimages-673891964_2400x1600-100796830-large.jpg -[2]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[3]: https://www.networkworld.com/article/3045953/5-things-you-need-to-know-about-ssl.html -[4]: https://www.networkworld.com/article/3269165/internet-of-things/a-corporate-guide-to-addressing-iot-security-concerns.html -[5]: https://www.networkworld.com/newsletters/signup.html -[6]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr -[7]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[8]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[9]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[10]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[11]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[12]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[13]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[14]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[15]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[16]: https://www.facebook.com/NetworkWorld/ -[17]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190528 Analysing D Code with KLEE.md b/sources/talk/20190528 Analysing D Code with KLEE.md deleted file mode 100644 index c93f6e2b8d..0000000000 --- a/sources/talk/20190528 Analysing D Code with KLEE.md +++ /dev/null @@ -1,680 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Analysing D Code with KLEE) -[#]: via: (https://theartofmachinery.com/2019/05/28/d_and_klee.html) -[#]: author: (Simon Arneaud https://theartofmachinery.com) - -Analysing D Code with KLEE -====== - -[KLEE][1] is symbolic execution engine that can rigorously verify or find bugs in software. It’s designed for C and C++, but it’s just an interpreter for LLVM bitcode combined with theorem prover backends, so it can work with bitcode generated by `ldc2`. One catch is that it needs a compatible bitcode port of the D runtime to run normal D code. I’m still interested in getting KLEE to work with normal D code, but for now I’ve done some experiments with `-betterC` D. - -### How KLEE works - -What makes KLEE special is its support for two kinds of variables: concrete and symbolic. Concrete variables are just like the normal variables in normal code: they have a deterministic value at any given point in the program. On the other hand, symbolic variables contain a bundle of logical constraints instead of values. Take this code: - -``` -int x = klee_int("x"); -klee_assume(x >= 0); -if (x > 42) -{ - doA(x); -} -else -{ - doB(x); - assert (3 * x != 21); -} -``` - -`klee_int("x")` creates a symbolic integer that will be called “`x`” in output reports. Initially it has no contraints and can imply any value that a 32b signed integer can have. `klee_assume(x >= 0)` tells KLEE to add `x >= 0` as a constraint, so now we’re only analysing the code for non-negative 32b signed integers. On hitting the `if`, KLEE checks if both branches are possible. Sure enough, `x > 42` can be true or false even with the constraint `x >= 0`, so KLEE has to _fork_. We now have two processes being interpreted on the VM: one executing `doA()` while `x` holds the constraints `x >= 0, x > 42`, and another executing `doB()` while `x` holds the contraints `x >= 0, x <= 42`. The second process will hit the `assert` statement, and KLEE will try to prove or disprove `3 * x != 21` using the assumptions `x >= 0, x <= 42` — in this case it will disprove it and report a bug with `x = 7` as a crashing example. - -### First steps - -Here’s a toy example just to get things working. Suppose we have a function that makes an assumption for a performance optimisation. Thankfully the assumption is made explicit with `assert` and is documented with a comment. Is the assumption valid? - -``` -int foo(int x) -{ - // 17 is a prime number, so let's use it as a sentinel value for an awesome optimisation - assert (x * x != 17); - // ... - return x; -} -``` - -Here’s a KLEE test rig. The KLEE function declarations and the `main()` entry point need to have `extern(C)` linkage, but anything else can be normal D code as long as it compiles under `-betterC`: - -``` -extern(C): - -int klee_int(const(char*) name); - -int main() -{ - int x = klee_int("x"); - foo(x); - return 0; -} -``` - -It turns out there’s just one (frustrating) complication with running `-betterC` D under KLEE. In D, `assert` is handled specially by the compiler. By default, it throws an `Error`, but for compatibility with KLEE, I’m using the `-checkaction=C` flag. In C, `assert` is usually a macro that translates to code that calls some backend implementation. That implementation isn’t standardised, so of course various C libraries work differently. `ldc2` actually has built-in logic for implementing `-checkaction=C` correctly depending on the C library used. - -KLEE uses a port of [uClibc][2], which translates `assert()` to a four-parameter `__assert()` function, which conflicts with the three-parameter `__assert()` function in other implementations. `ldc2` uses LLVM’s (target) `Triple` type for choosing an `assert()` implementation configuration, but that doesn’t recognise uClibc. As a hacky workaround, I’m telling `ldc2` to compile for Musl, which “tricks” it into using an `__assert_fail()` implementation that KLEE happens to support as well. I’ve opened [an issue report][3]. - -Anyway, if we put all that code above into a file, we can compile it to KLEE-ready bitcode like this: - -``` -ldc2 -g -checkaction=C -mtriple=x86_64-linux-musl -output-bc -betterC -c first.d -``` - -`-g` is optional, but adds debug information that can be useful for later analysis. The KLEE developers recommend disabling compiler optimisations and letting KLEE do its own optimisations instead. - -Now to run KLEE: - -``` -$ klee first.bc -KLEE: output directory is "/tmp/klee-out-1" -KLEE: Using Z3 solver backend -warning: Linking two modules of different target triples: klee_int.bc' is 'x86_64-pc-linux-gnu' whereas 'first.bc' is 'x86_64--linux-musl' - -KLEE: ERROR: first.d:4: ASSERTION FAIL: x * x != 17 -KLEE: NOTE: now ignoring this error at this location - -KLEE: done: total instructions = 35 -KLEE: done: completed paths = 2 -KLEE: done: generated tests = 2 -``` - -Straight away, KLEE has found two execution paths through the program: a happy path, and a path that fails the assertion. Let’s see the results: - -``` -$ ls klee-last/ -assembly.ll -info -messages.txt -run.istats -run.stats -run.stats-journal -test000001.assert.err -test000001.kquery -test000001.ktest -test000002.ktest -warnings.txt -``` - -Here’s the example that triggers the happy path: - -``` -$ ktest-tool klee-last/test000002.ktest -ktest file : 'klee-last/test000002.ktest' -args : ['first.bc'] -num objects: 1 -object 0: name: 'x' -object 0: size: 4 -object 0: data: b'\x00\x00\x00\x00' -object 0: hex : 0x00000000 -object 0: int : 0 -object 0: uint: 0 -object 0: text: .... -``` - -Here’s the example that causes an assertion error: - -``` -$ cat klee-last/test000001.assert.err -Error: ASSERTION FAIL: x * x != 17 -File: first.d -Line: 4 -assembly.ll line: 32 -Stack: - #000000032 in _D5first3fooFiZi () at first.d:4 - #100000055 in main (=1, =94262044506880) at first.d:16 -$ ktest-tool klee-last/test000001.ktest -ktest file : 'klee-last/test000001.ktest' -args : ['first.bc'] -num objects: 1 -object 0: name: 'x' -object 0: size: 4 -object 0: data: b'\xe9&\xd33' -object 0: hex : 0xe926d333 -object 0: int : 869476073 -object 0: uint: 869476073 -object 0: text: .&.3 -``` - -So, KLEE has deduced that when `x` is 869476073, `x * x` does a 32b overflow to 17 and breaks the code. - -It’s overkill for this simple example, but `run.istats` can be opened with [KCachegrind][4] to view things like call graphs and source code coverage. (Unfortunately, coverage stats can be misleading because correct code won’t ever hit boundary check code inserted by the compiler.) - -### MurmurHash preimage - -Here’s a slightly more useful example. D currently uses 32b MurmurHash3 as its standard non-cryptographic hash function. What if we want to find strings that hash to a given special value? In general, we can solve problems like this by asserting that something doesn’t exist (i.e., a string that hashes to a given value) and then challenging the theorem prover to prove us wrong with a counterexample. - -Unfortunately, we can’t just use `hashOf()` directly without the runtime, but we can copy [the hash code from the runtime source][5] into its own module, and then import it into a test rig like this: - -``` -import dhash; - -extern(C): - -void klee_make_symbolic(void* addr, size_t nbytes, const(char*) name); -int klee_assume(ulong condition); - -int main() -{ - // Create a buffer for 8-letter strings and let KLEE manage it symbolically - char[8] s; - klee_make_symbolic(s.ptr, s.sizeof, "s"); - - // Constrain the string to be letters from a to z for convenience - foreach (j; 0..s.length) - { - klee_assume(s[j] > 'a' && s[j] <= 'z'); - } - - assert (dHash(cast(ubyte[])s) != 0xdeadbeef); - return 0; -} -``` - -Here’s how to compile and run it. Because we’re not checking correctness, we can use `-boundscheck=off` for a slight performance boost. It’s also worth enabling KLEE’s optimiser. - -``` -$ ldc2 -g -boundscheck=off -checkaction=C -mtriple=x86_64-linux-musl -output-bc -betterC -c dhash.d dhash_klee.d -$ llvm-link -o dhash_test.bc dhash.bc dhash_klee.bc -$ klee -optimize dhash_test.bc -``` - -It takes just over 4s: - -``` -$ klee-stats klee-last/ -------------------------------------------------------------------------- -| Path | Instrs| Time(s)| ICov(%)| BCov(%)| ICount| TSolver(%)| -------------------------------------------------------------------------- -|klee-last/| 168| 4.37| 87.50| 50.00| 160| 99.95| -------------------------------------------------------------------------- -``` - -And it actually works: - -``` -$ ktest-tool klee-last/test000001.ktest -ktest file : 'klee-last/test000001.ktest' -args : ['dhash_test.bc'] -num objects: 1 -object 0: name: 's' -object 0: size: 8 -object 0: data: b'psgmdxvq' -object 0: hex : 0x7073676d64787671 -object 0: int : 8175854546265273200 -object 0: uint: 8175854546265273200 -object 0: text: psgmdxvq -$ rdmd --eval 'writef("%x\n", hashOf("psgmdxvq"));' -deadbeef -``` - -For comparison, here’s a simple brute force version in plain D: - -``` -import std.stdio; - -void main() -{ - char[8] buffer; - - bool find(size_t idx) - { - if (idx == buffer.length) - { - auto hash = hashOf(buffer[]); - if (hash == 0xdeadbeef) - { - writeln(buffer[]); - return true; - } - return false; - } - - foreach (char c; 'a'..'z') - { - buffer[idx] = c; - auto is_found = find(idx + 1); - if (is_found) return true; - } - - return false; - } - - find(0); -} -``` - -This takes ~17s: - -``` -$ ldc2 -O3 -boundscheck=off hash_brute.d -$ time ./hash_brute -aexkaydh - -real 0m17.398s -user 0m17.397s -sys 0m0.001s -$ rdmd --eval 'writef("%x\n", hashOf("aexkaydh"));' -deadbeef -``` - -The constraint solver implementation is simpler to write, but is still faster because it can automatically do smarter things than calculating hashes of strings from scratch every iteration. - -### Binary search - -Now for an example of testing and debugging. Here’s an implementation of [binary search][6]: - -``` -bool bsearch(const(int)[] haystack, int needle) -{ - while (haystack.length) - { - auto mid_idx = haystack.length / 2; - if (haystack[mid_idx] == needle) return true; - if (haystack[mid_idx] < needle) - { - haystack = haystack[mid_idx..$]; - } - else - { - haystack = haystack[0..mid_idx]; - } - } - return false; -} -``` - -Does it work? Here’s a test rig: - -``` -extern(C): - -void klee_make_symbolic(void* addr, size_t nbytes, const(char*) name); -int klee_range(int begin, int end, const(char*) name); -int klee_assume(ulong condition); - -int main() -{ - // Making an array arr and an x to find in it. - // This time we'll also parameterise the array length. - // We have to apply klee_make_symbolic() to the whole buffer because of limitations in KLEE. - int[8] arr_buffer; - klee_make_symbolic(arr_buffer.ptr, arr_buffer.sizeof, "a"); - int len = klee_range(0, arr_buffer.length+1, "len"); - auto arr = arr_buffer[0..len]; - // Keeping the values in [0, 32) makes the output easier to read. - // (The binary-friendly limit 32 is slightly more efficient than 30.) - int x = klee_range(0, 32, "x"); - foreach (j; 0..arr.length) - { - klee_assume(arr[j] >= 0); - klee_assume(arr[j] < 32); - } - - // Make the array sorted. - // We don't have to actually sort the array. - // We can just tell KLEE to constrain it to be sorted. - foreach (j; 1..arr.length) - { - klee_assume(arr[j - 1] <= arr[j]); - } - - // Test against simple linear search - bool has_x = false; - foreach (a; arr[]) - { - has_x |= a == x; - } - - assert (bsearch(arr, x) == has_x); - - return 0; -} -``` - -When run in KLEE, it keeps running for a long, long time. How do we know it’s doing anything? By default KLEE writes stats every 1s, so we can watch the live progress in another terminal: - -``` -$ watch klee-stats --print-more klee-last/ -Every 2.0s: klee-stats --print-more klee-last/ - ---------------------------------------------------------------------------------------------------------------------- -| Path | Instrs| Time(s)| ICov(%)| BCov(%)| ICount| TSolver(%)| States| maxStates| Mem(MB)| maxMem(MB)| ---------------------------------------------------------------------------------------------------------------------- -|klee-last/| 5834| 637.27| 79.07| 68.75| 172| 100.00| 22| 22| 24.51| 24| ---------------------------------------------------------------------------------------------------------------------- -``` - -`bsearch()` should be pretty fast, so we should see KLEE discovering new states rapidly. But instead it seems to be stuck. [At least one fork of KLEE has heuristics for detecting infinite loops][7], but plain KLEE doesn’t. There are timeout and batching options for making KLEE work better with code that might have infinite loops, but let’s just take another look at the code. In particular, the loop condition: - -``` -while (haystack.length) -{ - // ... -} -``` - -Binary search is supposed to reduce the search space by about half each iteration. `haystack.length` is an unsigned integer, so the loop must terminate as long as it goes down every iteration. Let’s rewrite the code slightly so we can verify if that’s true: - -``` -bool bsearch(const(int)[] haystack, int needle) -{ - while (haystack.length) - { - auto mid_idx = haystack.length / 2; - if (haystack[mid_idx] == needle) return true; - const(int)[] next_haystack; - if (haystack[mid_idx] < needle) - { - next_haystack = haystack[mid_idx..$]; - } - else - { - next_haystack = haystack[0..mid_idx]; - } - // This lets us verify that the search terminates - assert (next_haystack.length < haystack.length); - haystack = next_haystack; - } - return false; -} -``` - -Now KLEE can find the bug! - -``` -$ klee -optimize bsearch.bc -KLEE: output directory is "/tmp/klee-out-2" -KLEE: Using Z3 solver backend -warning: Linking two modules of different target triples: klee_range.bc' is 'x86_64-pc-linux-gnu' whereas 'bsearch.bc' is 'x86_64--linux-musl' - -warning: Linking two modules of different target triples: memset.bc' is 'x86_64-pc-linux-gnu' whereas 'bsearch.bc' is 'x86_64--linux-musl' - -KLEE: ERROR: bsearch.d:18: ASSERTION FAIL: next_haystack.length < haystack.length -KLEE: NOTE: now ignoring this error at this location - -KLEE: done: total instructions = 2281 -KLEE: done: completed paths = 42 -KLEE: done: generated tests = 31 -``` - -Using the failing example as input and stepping through the code, it’s easy to find the problem: - -``` -/// ... -if (haystack[mid_idx] < needle) -{ - // If mid_idx == 0, next_haystack is the same as haystack - // Nothing changes, so the loop keeps repeating - next_haystack = haystack[mid_idx..$]; -} -/// ... -``` - -Thinking about it, the `if` statement already excludes `haystack[mid_idx]` from being `needle`, so there’s no reason to include it in `next_haystack`. Here’s the fix: - -``` -// The +1 matters -next_haystack = haystack[mid_idx+1..$]; -``` - -But is the code correct now? Terminating isn’t enough; it needs to get the right answer, of course. - -``` -$ klee -optimize bsearch.bc -KLEE: output directory is "/tmp/kee-out-3" -KLEE: Using Z3 solver backend -warning: Linking two modules of different target triples: klee_range.bc' is 'x86_64-pc-linux-gnu' whereas 'bsearch.bc' is 'x86_64--linux-musl' - -warning: Linking two modules of different target triples: memset.bc' is 'x86_64-pc-linux-gnu' whereas 'bsearch.bc' is 'x86_64--linux-musl' - -KLEE: done: total instructions = 3152 -KLEE: done: completed paths = 81 -KLEE: done: generated tests = 81 -``` - -In just under 7s, KLEE has verified every possible execution path reachable with arrays of length from 0 to 8. Note, that’s not just coverage of individual code lines, but coverage of full pathways through the code. KLEE hasn’t ruled out stack corruption or integer overflows with large arrays, but I’m pretty confident the code is correct now. - -KLEE has generated test cases that trigger each path, which we can keep and use as a faster-than-7s regression test suite. Trouble is, the output from KLEE loses all type information and isn’t in a convenient format: - -``` -$ ktest-tool klee-last/test000042.ktest -ktest file : 'klee-last/test000042.ktest' -args : ['bsearch.bc'] -num objects: 3 -object 0: name: 'a' -object 0: size: 32 -object 0: data: b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' -object 0: hex : 0x0000000000000000000000000000000001000000100000000000000000000000 -object 0: text: ................................ -object 1: name: 'x' -object 1: size: 4 -object 1: data: b'\x01\x00\x00\x00' -object 1: hex : 0x01000000 -object 1: int : 1 -object 1: uint: 1 -object 1: text: .... -object 2: name: 'len' -object 2: size: 4 -object 2: data: b'\x06\x00\x00\x00' -object 2: hex : 0x06000000 -object 2: int : 6 -object 2: uint: 6 -object 2: text: .... -``` - -But we can write our own pretty-printing code and put it at the end of the test rig: - -``` -char[256] buffer; -char* output = buffer.ptr; -output += sprintf(output, "TestCase(["); -foreach (a; arr[]) -{ - output += sprintf(output, "%d, ", klee_get_value_i32(a)); -} -sprintf(output, "], %d, %s),\n", klee_get_value_i32(x), klee_get_value_i32(has_x) ? "true".ptr : "false".ptr); -fputs(buffer.ptr, stdout); -``` - -Ugh, that would be just one format call with D’s `%(` array formatting specs. The output needs to be buffered up and printed all at once to stop output from different parallel executions getting mixed up. `klee_get_value_i32()` is needed to get a concrete example from a symbolic variable (remember that a symbolic variable is just a bundle of constraints). - -``` -$ klee -optimize bsearch.bc > tests.d -... -$ # Sure enough, 81 test cases -$ wc -l tests.d -81 tests.d -$ # Look at the first 10 -$ head tests.d -TestCase([], 0, false), -TestCase([0, ], 0, true), -TestCase([16, ], 1, false), -TestCase([0, ], 1, false), -TestCase([0, 0, ], 0, true), -TestCase([0, 0, ], 1, false), -TestCase([1, 16, ], 1, true), -TestCase([0, 0, 0, ], 0, true), -TestCase([16, 16, ], 1, false), -TestCase([1, 16, ], 3, false), -``` - -Nice! An autogenerated regression test suite that’s better than anything I would write by hand. This is my favourite use case for KLEE. - -### Change counting - -One last example: - -In Australia, coins come in 5c, 10c, 20c, 50c, $1 (100c) and $2 (200c) denominations. So you can make 70c using 14 5c coins, or using a 50c coin and a 20c coin. Obviously, fewer coins is usually more convenient. There’s a simple [greedy algorithm][8] to make a small pile of coins that adds up to a given value: just keep adding the biggest coin you can to the pile until you’ve reached the target value. It turns out this trick is optimal — at least for Australian coins. Is it always optimal for any set of coin denominations? - -The hard thing about testing optimality is that you don’t know what the correct optimal values are without a known-good algorithm. Without a constraints solver, I’d compare the output of the greedy algorithm with some obviously correct brute force optimiser, run over all possible cases within some small-enough limit. But with KLEE, we can use a different approach: comparing the greedy solution to a non-deterministic solution. - -The greedy algorithm takes the list of coin denominations and the target value as input, so (like in the previous examples) we make those symbolic. Then we make another symbolic array that represents an assignment of coin counts to each coin denomination. We don’t specify anything about how to generate this assignment, but we constrain it to be a valid assignment that adds up to the target value. It’s [non-deterministic][9]. Then we just assert that the total number of coins in the non-deterministic assignment is at least the number of coins needed by the greedy algorithm, which would be true if the greedy algorithm were universally optimal. Finally we ask KLEE to prove the program correct or incorrect. - -Here’s the code: - -``` -// Greedily break value into coins of values in denominations -// denominations must be in strictly decreasing order -int greedy(const(int[]) denominations, int value, int[] coins_used_output) -{ - int num_coins = 0; - foreach (j; 0..denominations.length) - { - int num_to_use = value / denominations[j]; - coins_used_output[j] = num_to_use; - num_coins += num_to_use; - value = value % denominations[j]; - } - return num_coins; -} - -extern(C): - -void klee_make_symbolic(void* addr, size_t nbytes, const(char*) name); -int klee_int(const(char*) name); -int klee_assume(ulong condition); -int klee_get_value_i32(int expr); - -int main(int argc, char** argv) -{ - enum kNumDenominations = 6; - int[kNumDenominations] denominations, coins_used; - klee_make_symbolic(denominations.ptr, denominations.sizeof, "denominations"); - - // We're testing the algorithm itself, not implementation issues like integer overflow - // Keep values small - foreach (d; denominations) - { - klee_assume(d >= 1); - klee_assume(d <= 1024); - } - // Make the smallest denomination 1 so that all values can be represented - // This is just for simplicity so we can focus on optimality - klee_assume(denominations[$-1] == 1); - - // Greedy algorithm expects values in descending order - foreach (j; 1..denominations.length) - { - klee_assume(denominations[j-1] > denominations[j]); - } - - // What we're going to represent - auto value = klee_int("value"); - - auto num_coins = greedy(denominations[], value, coins_used[]); - - // The non-deterministic assignment - int[kNumDenominations] nd_coins_used; - klee_make_symbolic(nd_coins_used.ptr, nd_coins_used.sizeof, "nd_coins_used"); - - int nd_num_coins = 0, nd_value = 0; - foreach (j; 0..kNumDenominations) - { - klee_assume(nd_coins_used[j] >= 0); - klee_assume(nd_coins_used[j] <= 1024); - nd_num_coins += nd_coins_used[j]; - nd_value += nd_coins_used[j] * denominations[j]; - } - - // Making the assignment valid is 100% up to KLEE - klee_assume(nd_value == value); - - // If we find a counterexample, dump it and fail - if (nd_num_coins < num_coins) - { - import core.stdc.stdio; - - puts("Counterexample found."); - - puts("Denominations:"); - foreach (ref d; denominations) - { - printf("%d ", klee_get_value_i32(d)); - } - printf("\nValue: %d\n", klee_get_value_i32(value)); - - void printAssignment(const ref int[kNumDenominations] coins) - { - foreach (j; 0..kNumDenominations) - { - printf("%d * %dc\n", klee_get_value_i32(coins[j]), klee_get_value_i32(denominations[j])); - } - } - - printf("Greedy \"optimum\": %d\n", klee_get_value_i32(num_coins)); - printAssignment(coins_used); - - printf("Better assignment for %d total coins:\n", klee_get_value_i32(nd_num_coins)); - printAssignment(nd_coins_used); - assert (false); - } - - return 0; -} -``` - -And here’s the counterexample it found after 14s: - -``` -Counterexample found. -Denominations: -129 12 10 3 2 1 -Value: 80 -Greedy "optimum": 9 -0 * 129c -6 * 12c -0 * 10c -2 * 3c -1 * 2c -0 * 1c -Better assignment for 8 total coins: -0 * 129c -0 * 12c -8 * 10c -0 * 3c -0 * 2c -0 * 1c -``` - -Note that this isn’t proven to be the new optimum; it’s just a witness that the greedy algorithm isn’t always optimal. There’s a well-known [dynamic programming][10] [solution][11] that always works. - -### What’s next? - -As I said, I’m interesting in getting this to work with full D code. I’m also interested in using [one of the floating point forks of KLEE][12] on some D because floating point is much harder to test thoroughly than integer and string code. - --------------------------------------------------------------------------------- - -via: https://theartofmachinery.com/2019/05/28/d_and_klee.html - -作者:[Simon Arneaud][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://theartofmachinery.com -[b]: https://github.com/lujun9972 -[1]: https://klee.github.io/ -[2]: https://www.uclibc.org/ -[3]: https://github.com/ldc-developers/ldc/issues/3078 -[4]: https://kcachegrind.github.io/html/Home.html -[5]: https://github.com/dlang/druntime/blob/4ad638f61a9b4a98d8ed6eb9f9429c0ef6afc8e3/src/core/internal/hash.d#L670 -[6]: https://www.calhoun.io/lets-learn-algorithms-an-intro-to-binary-search/ -[7]: https://github.com/COMSYS/SymbolicLivenessAnalysis -[8]: https://en.wikipedia.org/wiki/Greedy_algorithm -[9]: http://people.clarkson.edu/~alexis/PCMI/Notes/lectureB03.pdf -[10]: https://www.algorithmist.com/index.php/Dynamic_Programming -[11]: https://www.topcoder.com/community/competitive-programming/tutorials/dynamic-programming-from-novice-to-advanced/ -[12]: https://github.com/srg-imperial/klee-float diff --git a/sources/talk/20190528 Managed WAN and the cloud-native SD-WAN.md b/sources/talk/20190528 Managed WAN and the cloud-native SD-WAN.md deleted file mode 100644 index 026b5d8e81..0000000000 --- a/sources/talk/20190528 Managed WAN and the cloud-native SD-WAN.md +++ /dev/null @@ -1,121 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Managed WAN and the cloud-native SD-WAN) -[#]: via: (https://www.networkworld.com/article/3398476/managed-wan-and-the-cloud-native-sd-wan.html) -[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/) - -Managed WAN and the cloud-native SD-WAN -====== -The motivation for WAN transformation is clear, today organizations require: improved internet access and last mile connectivity, additional bandwidth and a reduction in the WAN costs. -![Gerd Altmann \(CC0\)][1] - -In recent years, a significant number of organizations have transformed their wide area network (WAN). Many of these organizations have some kind of cloud-presence across on-premise data centers and remote site locations. - -The vast majority of organizations that I have consulted with have over 10 locations. And it is common to have headquarters in both the US and Europe, along with remote site locations spanning North America, Europe, and Asia. - -A WAN transformation project requires this diversity to be taken into consideration when choosing the best SD-WAN vendor to satisfy both; networking and security requirements. Fundamentally, SD-WAN is not just about physical connectivity, there are many more related aspects. - -**[ Related:[MPLS explained – What you need to know about multi-protocol label switching][2]** - -### Motivations for transforming the WAN - -The motivation for WAN transformation is clear: Today organizations prefer improved internet access and last mile connectivity, additional bandwidth along with a reduction in the WAN costs. Replacing Multiprotocol Label Switching (MPLS) with SD-WAN has of course been the main driver for the SD-WAN evolution, but it is only a single piece of the jigsaw puzzle. - -Many SD-WAN vendors are quickly brought to their knees when they try to address security and gain direct internet access from remote site locations. The problem is how to ensure optimized cloud access that is secure, has improved visibility and predictable performance without the high costs associated with MPLS? SD-WAN is not just about connecting locations. Primarily, it needs to combine many other important network and security elements into one seamless worldwide experience. - -According to a recent report from [Cato Networks][3] into enterprise IT managers, a staggering 85% will confront use cases in 2019 that are poorly addressed or outright ignored by SD-WAN. Examples includes providing secure, Internet access from any location (50%) and improving visibility into and control over mobile access to cloud applications, such as Office 365 (46%). - -### Issues with traditional SD-WAN vendors - -First and foremost, SD-WAN unable to address the security challenges that arise during the WAN transformation. Such security challenges include protection against malware, ransomware and implementing the necessary security policies. Besides, there is a lack of visibility that is required to police the mobile users and remote site locations accessing resources in the public cloud. - -To combat this, organizations have to purchase additional equipment. There has always been and will always be a high cost associated with buying such security appliances. Furthermore, the additional tools that are needed to protect the remote site locations increase the network complexity and reduce visibility. Let’s us not forget that the variety of physical appliances require talented engineers for design, deployment and maintenance. - -There will often be a single network-cowboy. This means the network and security configuration along with the design essentials are stored in the mind of the engineer, not in a central database from where the knowledge can be accessed if the engineer leaves his or her employment. - -The physical appliance approach to SD-WAN makes it hard, if not impossible, to accommodate for the future. If the current SD-WAN vendors continue to focus just on connecting the devices with the physical appliances, they will have limited ability to accommodate for example, with the future of network IoT devices. With these factors in mind what are the available options to overcome the SD-WAN shortcomings? - -One can opt for a do it yourself (DIY) solution, or a managed service, which can fall into the category of telcos, with the improvements of either co-managed or self-managed service categories. - -### Option 1: The DIY solution - -Firstly DIY, from the experience of trying to stitch together a global network, this is not only costly but also complex and is a very constrained approach to the network transformation. We started with physical appliances decades ago and it was sufficient to an extent. The reason it worked was that it suited the requirements of the time, but our environment has changed since then. Hence, we need to accommodate these changes with the current requirements. - -Even back in those days, we always had a breachable perimeter. The perimeter-approach to networking and security never really worked and it was just a matter of time before the bad actor would penetrate the guarded walls. - -Securing a global network involves more than just firewalling the devices. A solid security perimeter requires URL filtering, anti-malware and IPS to secure the internet traffic. If you try to deploy all these functions in a single device, such as, unified threat management (UTM), you will hit scaling problems. As a result, you will be left with appliance sprawl. - -Back in my early days as an engineer, I recall stitching together a global network with a mixture of security and network appliances from a variety of vendors. It was me and just two others who used to get the job done on time and for a production network, our uptime levels were superior to most. - -However, it involved too many late nights, daily flights to our PoPs and of course the major changes required a forklift. A lot of work had to be done at that time, which made me want to push some or most of the work to a 3rd party. - -### Option 2: The managed service solution - -Today, there is a growing need for the managed service approach to SD-WAN. Notably, it simplifies the network design, deployment and maintenance activities while offloading the complexity, in line with what most CIOs are talking about today. - -Managed service provides a number of benefits, such as the elimination of backhauling to centralized cloud connectors or VPN concentrators. Evidently, backhauling is never favored for a network architect. More than often it will result in increased latency, congested links, internet chokepoints, and last-mile outages. - -Managed service can also authenticate mobile users at the local communication hub and not at a centralized point which would increase the latency. So what options are available when considering a managed service? - -### Telcos: An average service level - -Let’s be honest, telcos have a mixed track record and enterprises rely on them with caution. Essentially, you are building a network with 3rd party appliances and services that put the technical expertise outside of the organization. - -Secondly, the telco must orchestrate, monitor and manage numerous technical domains which are likely to introduce further complexity. As a result, troubleshooting requires close coordination with the suppliers which will have an impact on the customer experience. - -### Time equals money - -To resolve a query could easily take two or three attempts. It’s rare that you will get to the right person straight away. This eventually increases the time to resolve problems. Even for a minor feature change, you have to open tickets. Hence, with telcos, it increases the time required to solve a problem. - -In addition, it takes time to make major network changes such as opening new locations, which could take up to 45 days. In the same report mentioned above, 71% of the respondents are frustrated with the telco customer-service-time to resolve the problems, 73% indicated that deploying new locations requires at least 15 days and 47% claimed that “high bandwidth costs” is the biggest frustration while working with telcos. - -When it comes to lead times for projects, an engineer does not care. Does a project manager care if you have an optimum network design? No, many don’t, most just care about the timeframes. During my career, now spanning 18 years, I have never seen comments from any of my contacts saying “you must adhere to your project manager’s timelines”. - -However, out of the experience, the project managers have their ways and lead times do become a big part of your daily job. So as an engineer, 45-day lead time will certainly hit your brand hard, especially if you are an external consultant. - -There is also a problem with bandwidth costs. Telcos need to charge due to their complexity. There is always going to be a series of problems when working with them. Let’s face it, they offer an average service level. - -### Co-management and self-service management - -What is needed is a service that equips with the visibility and control of DIY to managed services. This, ultimately, opens the door to co-management and self-service management. - -Co-management allows both the telco and enterprise to make changes to the WAN. Then we have the self-service management of WAN that allows the enterprises to have sole access over the aspect of their network. - -However, these are just sticking plasters covering up the flaws. We need a managed service that not only connects locations but also synthesizes the site connectivity, along with security, mobile access, and cloud access. - -### Introducing the cloud-native approach to SD-WAN - -There should be a new style of managed services that combines the best of both worlds. It should offer the uptime, predictability and reach of the best telcos along with the cost structure and versatility of cloud providers. All such requirements can be met by what is known as the cloud-native carrier. - -Therefore, we should be looking for a platform that can connect and secure all the users and resources at scale, no matter where they are positioned. Eventually, such a platform will limit the costs and increase the velocity and agility. - -This is what a cloud-native carrier can offer you. You could say it’s a new kind of managed service, which is what enterprises are now looking for. A cloud-native carrier service brings the best of cloud services to the world of networking. This new style of managed service brings to SD-WAN the global reach, self-service, and agility of the cloud with the ability to easily migrate from MPLS. - -In summary, a cloud-native carrier service will improve global connectivity to on-premises and cloud applications, enable secure branch to internet access, and both securely and optimally integrate cloud datacenters. - -**This article is published as part of the IDG Contributor Network.[Want to Join?][4]** - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3398476/managed-wan-and-the-cloud-native-sd-wan.html - -作者:[Matt Conran][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Matt-Conran/ -[b]: https://github.com/lujun9972 -[1]: https://images.techhive.com/images/article/2017/03/network-wan-100713693-large.jpg -[2]: https://www.networkworld.com/article/2297171/sd-wan/network-security-mpls-explained.html -[3]: https://www.catonetworks.com/news/digital-transformation-survey -[4]: /contributor-network/signup.html -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190528 Moving to the Cloud- SD-WAN Matters.md b/sources/talk/20190528 Moving to the Cloud- SD-WAN Matters.md deleted file mode 100644 index 8f6f46b6f2..0000000000 --- a/sources/talk/20190528 Moving to the Cloud- SD-WAN Matters.md +++ /dev/null @@ -1,69 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Moving to the Cloud? SD-WAN Matters!) -[#]: via: (https://www.networkworld.com/article/3397921/moving-to-the-cloud-sd-wan-matters.html) -[#]: author: (Rami Rammaha https://www.networkworld.com/author/Rami-Rammaha/) - -Moving to the Cloud? SD-WAN Matters! -====== - -![istock][1] - -This is the first in a two-part blog series that will explore how enterprises can realize the full transformation promise of the cloud by shifting to a business first networking model powered by a business-driven [SD-WAN][2]. The focus for this installment will be on automating secure IPsec connectivity and intelligently steering traffic to cloud providers. - -Over the past several years we’ve seen a major shift in data center strategies where enterprise IT organizations are shifting applications and workloads to cloud, whether private or public. More and more, enterprises are leveraging software as-a-service (SaaS) applications and infrastructure as-a-service (IaaS) cloud services from leading providers like [Amazon AWS][3], [Google Cloud][4], [Microsoft Azure][5] and [Oracle Cloud Infrastructure][6]. This represents a dramatic shift in enterprise data traffic patterns as fewer and fewer applications are hosted within the walls of the traditional corporate data center. - -There are several drivers for the shift to IaaS cloud services and SaaS apps, but business agility tops the list for most enterprises. The traditional IT model for provisioning and deprovisioning applications is rigid and inflexible and is no longer able to keep pace with changing business needs. - -According to [LogicMonitor’s Cloud Vision 2020][7] study, more than 80 percent of enterprise workloads will run in the cloud by 2020 with more than 40 percent running on public cloud platforms. This major shift in the application consumption model is having a huge [impact on organizations and infrastructure][8]. A recent article entitled “[How Amazon Web Services is luring banks to the cloud][9],” published by CNBC, reported that some companies already have completely migrated all of their applications and IT workloads to public cloud infrastructures. An interesting fact is that while many enterprises must comply with stringent regulatory compliance mandates such as PCI-DSS or HIPAA, they still have made the move to the cloud. This tells us two things – the maturity of using public cloud services and the trust these organizations have in using them is at an all-time high. Again, it is all about speed and agility – without compromising performance, security and reliability. - -### **Is there a direct correlation between moving to the cloud and adopting SD-WAN?** - -As the cloud enables businesses to move faster, an SD-WAN architecture where top-down business intent is the driver is critical to ensuring success, especially when branch offices are geographically distributed across the globe. Traditional router-centric WAN architectures were never designed to support today’s cloud consumption model for applications in the most efficient way. With a conventional router-centric WAN approach, access to applications residing in the cloud means traversing unnecessary hops, resulting in wasted bandwidth, additional cost, added latency and potentially higher packet loss. In addition, under the existing, traditional WAN model where management tends to be rigid, complex network changes can be lengthy, whether setting up new branches or troubleshooting performance issues. This leads to inefficiencies and a costly operational model. Therefore, enterprises greatly benefit from taking a business-first WAN approach toward achieving greater agility in addition to realizing substantial CAPEX and OPEX savings. - -A business-driven SD-WAN platform is purpose-built to tackle the challenges inherent to the traditional router-centric model and more aptly support today’s cloud consumption model. This means application policies are defined based on business intent, connecting users securely and directly to applications where ever they reside without unnecessary extra hops or security compromises. For example, if the application is hosted in the cloud and is trusted, a business-driven SD-WAN can automatically connect users to it without backhauling traffic to a POP or HQ data center. Now, in general this traffic is usually going across an internet link which, on its own, may not be secure. However, the right SD-WAN platform will have a unified stateful firewall built-in for local internet breakout allowing only branch-initiated sessions to enter the branch and providing the ability to service chain traffic to a cloud-based security service if necessary, before forwarding it to its final destination. If the application is moved and becomes hosted by another provider or perhaps back to a company’s own data center, traffic must be intelligently redirected, wherever the application is being hosted. Without automation and embedded machine learning, dynamic and intelligent traffic steering is impossible. - -### **A closer look at how the Silver Peak EdgeConnect™ SD-WAN edge platform addresses these challenges: ** - -**Automate traffic steering and connectivity to cloud providers** - -An [EdgeConnect][10] virtual instance is easily spun up in any of the [leading cloud providers][11] through their respective marketplaces. For an SD-WAN to intelligently steer traffic to its destination, it requires insights into both HTTP and HTTPS traffic; it must be able to identify apps on the first packet received in order to steer traffic to the right destination in accordance with business intent. This is critical capability because once a TCP connection is NAT’d with a public IP address, it cannot be switched thus it can’t be re-routed once a connection is established. So, the ability of EdgeConnect to identify, classify and automatically steer traffic based on the first packet – and not the second or tenth packet – to the correct destination will assure application SLAs, minimize wasting expensive bandwidth and deliver the highest quality of experience. - -Another critical capability is automatic performance optimization. Irrespective of which link the traffic ends up traversing based on business intent and the unique requirements of the application, EdgeConnect automatically optimizes application performance without human intervention by correcting for out of order packets using Packet Order Correction (POC) or even under high latency conditions that can be related to distance or other issues. This is done using adaptive Forward Error Correction (FEC) and tunnel bonding where a virtual tunnel is created, resulting in a single logical overlay that traffic can be dynamically moved between the different paths as conditions change with each underlay WAN service. In this [lightboard video][12], Dinesh Fernando, a technical marketing engineer at Silver Peak, explains how EdgeConnect automates tunnel creation between sites and cloud providers, how it simplifies data transfers between multi-clouds, and how it improves application performance. - -If your business is global and increasingly dependent on the cloud, the business-driven EdgeConnect SD-WAN edge platform enables seamless multi-cloud connectivity, turning the network into a business accelerant. EdgeConnect delivers: - - 1. A consistent deployment from the branch to the cloud, extending the reach of the SD-WAN into virtual private cloud environments - 2. Multi-cloud flexibility, making it easier to initiate and distribute resources across multiple cloud providers - 3. Investment protection by confidently migrating on premise IT resources to any combination of the leading public cloud platforms, knowing their cloud-hosted instances will be fully supported by EdgeConnect - - - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3397921/moving-to-the-cloud-sd-wan-matters.html - -作者:[Rami Rammaha][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Rami-Rammaha/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/istock-899678028-100797709-large.jpg -[2]: https://www.silver-peak.com/sd-wan/sd-wan-explained -[3]: https://www.silver-peak.com/company/tech-partners/cloud/aws -[4]: https://www.silver-peak.com/company/tech-partners/cloud/google-cloud -[5]: https://www.silver-peak.com/company/tech-partners/cloud/microsoft-azure -[6]: https://www.silver-peak.com/company/tech-partners/cloud/oracle-cloud -[7]: https://www.logicmonitor.com/resource/the-future-of-the-cloud-a-cloud-influencers-survey/?utm_medium=pr&utm_source=businesswire&utm_campaign=cloudsurvey -[8]: http://www.networkworld.com/article/3152024/lan-wan/in-the-age-of-digital-transformation-why-sd-wan-plays-a-key-role-in-the-transition.html -[9]: http://www.cnbc.com/2016/11/30/how-amazon-web-services-is-luring-banks-to-the-cloud.html?__source=yahoo%257cfinance%257cheadline%257cheadline%257cstory&par=yahoo&doc=104135637 -[10]: https://www.silver-peak.com/products/unity-edge-connect -[11]: https://www.silver-peak.com/company/tech-partners?strategic_partner_type=69 -[12]: https://www.silver-peak.com/resource-center/automate-connectivity-to-cloud-networking-with-sd-wan diff --git a/sources/talk/20190529 Satellite-based internet possible by year-end, says SpaceX.md b/sources/talk/20190529 Satellite-based internet possible by year-end, says SpaceX.md deleted file mode 100644 index 383fac66ca..0000000000 --- a/sources/talk/20190529 Satellite-based internet possible by year-end, says SpaceX.md +++ /dev/null @@ -1,63 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Satellite-based internet possible by year-end, says SpaceX) -[#]: via: (https://www.networkworld.com/article/3398940/space-internet-maybe-end-of-year-says-spacex.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Satellite-based internet possible by year-end, says SpaceX -====== -Amazon, Tesla-associated SpaceX and OneWeb are emerging as just some of the potential suppliers of a new kind of data-friendly satellite internet service that could bring broadband IoT connectivity to most places on Earth. -![Getty Images][1] - -With SpaceX’s successful launch of an initial array of broadband-internet-carrying satellites last week, and Amazon’s surprising posting of numerous satellite engineering-related job openings on its [job board][2] this month, one might well be asking if the next-generation internet space race is finally getting going. (I first wrote about [OneWeb’s satellite internet plans][3] it was concocting with Airbus four years ago.) - -This new batch of satellite-driven internet systems, if they work and are eventually switched on, could provide broadband to most places, including previously internet-barren locations, such as rural areas. That would be good for high-bandwidth, low-latency remote-internet of things (IoT) and increasingly important edge-server connections for verticals like oil and gas and maritime. [Data could even end up getting stored in compliance-friendly outer space, too][4]. Leaky ground-based connections, also, perhaps a thing of the past. - -Of the principal new internet suppliers, SpaceX has gotten farthest along. That’s in part because it has commercial impetus. It needed to create payload for its numerous rocket projects. The Tesla electric-car-associated company (the two firms share materials science) has not only launched its first tranche of 60 satellites for its own internet constellation, called Starlink, but also successfully launched numerous batches (making up the full constellation of 75 satellites) for Iridium’s replacement, an upgraded constellation called Iridium NEXT. - -[The time of 5G is almost here][5] - -Potential competitor OneWeb launched its first six Airbus-built satellites in February. [It has plans for 900 more][6]. SpaceX has been approved for 4,365 more by the FCC, and Project Kuiper, as Amazon’s space internet project is known, wants to place 3,236 satellites in orbit, according to International Telecommunication Union filings [discovered by _GeekWire_][7] earlier this year. [Startup LeoSat, which I wrote about last year, aims to build an internet backbone constellation][8]. Facebook, too, is exploring [space-delivered internet][9]. - -### Why the move to space? - -Laser technical progress, where data is sent in open, free space, rather than via a restrictive, land-based cable or via traditional radio paths, is partly behind this space-internet rush. “Bits travel faster in free space than in glass-fiber cable,” LeoSat explained last year. Additionally, improving microprocessor tech is also part of the mix. - -One important difference from existing older-generation satellite constellations is that this new generation of internet satellites will be located in low Earth orbit (LEO). Initial Starlink satellites will be placed at about 350 miles above Earth, with later launches deployed at 710 miles. - -There’s an advantage to that. Traditional satellites in geostationary orbit, or GSO, have been deployed about 22,000 miles up. That extra distance versus LEO introduces latency and is one reason earlier generations of Internet satellites are plagued by slow round-trip times. Latency didn’t matter when GSO was introduced in 1964, and commercial satellites, traditionally, have been pitched as one-way video links, such as are used by sporting events for broadcast, and not for data. - -And when will we get to experience these new ISPs? “Starlink is targeted to offer service in the Northern U.S. and Canadian latitudes after six launches,” [SpaceX says on its website][10]. Each launch would deliver about 60 satellites. “SpaceX is targeting two to six launches by the end of this year.” - -Global penetration of the “populated world” could be obtained after 24 launches, it thinks. - -Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3398940/space-internet-maybe-end-of-year-says-spacex.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/10/network_iot_world-map_us_globe_nodes_global-100777483-large.jpg -[2]: https://www.amazon.jobs/en/teams/projectkuiper -[3]: https://www.itworld.com/article/2938652/space-based-internet-starts-to-get-serious.html -[4]: https://www.networkworld.com/article/3200242/data-should-be-stored-data-in-space-firm-says.html -[5]: https://www.networkworld.com/article/3354477/mobile-world-congress-the-time-of-5g-is-almost-here.html -[6]: https://www.airbus.com/space/telecommunications-satellites/oneweb-satellites-connection-for-people-all-over-the-globe.html -[7]: https://www.geekwire.com/2019/amazon-lists-scores-jobs-bellevue-project-kuiper-broadband-satellite-operation/ -[8]: https://www.networkworld.com/article/3328645/space-data-backbone-gets-us-approval.html -[9]: https://www.networkworld.com/article/3338081/light-based-computers-to-be-5000-times-faster.html -[10]: https://www.starlink.com/ -[11]: https://www.facebook.com/NetworkWorld/ -[12]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190529 Survey finds SD-WANs are hot, but satisfaction with telcos is not.md b/sources/talk/20190529 Survey finds SD-WANs are hot, but satisfaction with telcos is not.md deleted file mode 100644 index 9b65a6c8dd..0000000000 --- a/sources/talk/20190529 Survey finds SD-WANs are hot, but satisfaction with telcos is not.md +++ /dev/null @@ -1,69 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Survey finds SD-WANs are hot, but satisfaction with telcos is not) -[#]: via: (https://www.networkworld.com/article/3398478/survey-finds-sd-wans-are-hot-but-satisfaction-with-telcos-is-not.html) -[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/) - -Survey finds SD-WANs are hot, but satisfaction with telcos is not -====== -A recent survey of over 400 IT executives by Cato Networks found that legacy telcos might be on the outside looking in for SD-WANs. -![istock][1] - -This week SD-WAN vendor Cato Networks announced the results of its [Telcos and the Future of the WAN in 2019 survey][2]. The study was a mix of companies of all sizes, with 42% being enterprise-class (over 2,500 employees). More than 70% had a network with more than 10 locations, and almost a quarter (24%) had over 100 sites. All of the respondents have a cloud presence, and almost 80% have at least two data centers. The survey had good geographic diversity, with 57% of respondents coming from the U.S. and 24% from Europe. - -Highlights of the survey include the following key findings: - -## **SD-WANs are hot but not a panacea to all networking challenges** - -The survey found that 44% of respondents have already deployed or will deploy an SD-WAN within the next 12 months. This number is up sharply from 25% when Cato ran the survey a year ago. Another 33% are considering SD-WAN but have no immediate plans to deploy. The primary drivers for the evolution of the WAN are improved internet access (46%), increased bandwidth (39%), improved last-mile availability (38%) and reduced WAN costs (37%). It’s good to see cost savings drop to fourth in motivation, since there is so much more to SD-WAN. - -[The time of 5G is almost here][3] - -It’s interesting that the majority of respondents believe SD-WAN alone can’t address all challenges facing the WAN. A whopping 85% stated they would be confronting issues not addressed by SD-WAN alone. This includes secure, local internet breakout, improved visibility, and control over mobile access to cloud apps. This indicates that customers are looking for SD-WAN to be the foundation of the WAN but understand that other technologies need to be deployed as well. - -## **Telco dissatisfaction is high** - -The traditional telco has been a point of frustration for network professionals for years, and the survey spelled that out loud and clear. Prior to being an analyst, I held a number of corporate IT positions and found telcos to be the single most frustrating group of companies to deal with. The problem was, there was no choice. If you need MPLS services, you need a telco. The same can’t be said for SD-WANs, though; businesses have more choices. - -Respondents to the survey ranked telco service as “average.” It’s been well documented that we are now in the customer-experience era and “good enough” service is no longer good enough. Regarding pricing, 54% gave telcos a failing grade. Although price isn’t everything, this will certainly open the door to competitive SD-WAN vendors. Respondents gave the highest marks for overall experience to SaaS providers, followed by cloud computing suppliers. Global telcos scored the lowest of all vendor types. - -A look deeper explains the frustration level. The network is now mission-critical for companies, but 48% stated they are able to reach the support personnel with the right expertise to solve a problem only on a second attempt. No retailer, airline, hotel or other type of company could survive this, but telco customers had no other options for years. - -**[[Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][4] ]** - -Another interesting set of data points is the speed at which telcos address customer needs. Digital businesses compete on speed, but telco process is the antithesis of fast. Moves, adds and changes take at least one business day for half of the respondents. Also, 70% indicated that opening a new location takes 15 days, and 38% stated it requires 45 days or more. - -## **Security is now part of SD-WAN** - -The use of broadband, cloud access and other trends raise the bar on security for SD-WAN, and the survey confirmed that respondents are skeptical that SD-WANs could address these issues. Seventy percent believe SD-WANs can’t address malware/ransomware, and 49% don’t think SD-WAN helps with enforcing company policies on mobile users. Because of this, network professionals are forced to buy additional security tools from other vendors, but that can drive up complexity. SD-WAN vendors that have intrinsic security capabilities can use that as a point of differentiation. - -## **Managed services are critical to the growth of SD-WANs** - -The survey found that 75% of respondents are using some kind of managed service provider, versus only 25% using an appliance vendor. This latter number was 32% last year. I’m not surprised by this shift and expect it to continue. Legacy WANs were inefficient but straightforward to deploy. D-WANs are highly agile and more cost-effective, but complexity has gone through the roof. Network engineers need to factor in cloud connectivity, distributed security, application performance, broadband connectivity and other issues. Managed services can help businesses enjoy the benefits of SD-WAN while masking the complexity. - -Despite the desire to use an MSP, respondents don’t want to give up total control. Eighty percent stated they preferred self-service or co-managed models. This further explains the shift away from telcos, since they typically work with fully managed models. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3398478/survey-finds-sd-wans-are-hot-but-satisfaction-with-telcos-is-not.html - -作者:[Zeus Kerravala][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Zeus-Kerravala/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/02/istock-465661573-100750447-large.jpg -[2]: https://www.catonetworks.com/news/digital-transformation-survey/ -[3]: https://www.networkworld.com/article/3354477/mobile-world-congress-the-time-of-5g-is-almost-here.html -[4]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190601 True Hyperconvergence at Scale- HPE Simplivity With Composable Fabric.md b/sources/talk/20190601 True Hyperconvergence at Scale- HPE Simplivity With Composable Fabric.md deleted file mode 100644 index 97eb611ef8..0000000000 --- a/sources/talk/20190601 True Hyperconvergence at Scale- HPE Simplivity With Composable Fabric.md +++ /dev/null @@ -1,28 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (True Hyperconvergence at Scale: HPE Simplivity With Composable Fabric) -[#]: via: (https://www.networkworld.com/article/3399619/true-hyperconvergence-at-scale-hpe-simplivity-with-composable-fabric.html) -[#]: author: (HPE https://www.networkworld.com/author/Michael-Cooney/) - -True Hyperconvergence at Scale: HPE Simplivity With Composable Fabric -====== - -Many hyperconverged solutions only focus on software-defined storage. However, many networking functions and technologies can be consolidated for simplicity and scale in the data center. This video describes how HPE SimpliVity with Composable Fabric gives organizations the power to run any virtual machine anywhere, anytime. Read more about HPE SimpliVity [here][1]. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3399619/true-hyperconvergence-at-scale-hpe-simplivity-with-composable-fabric.html - -作者:[HPE][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Michael-Cooney/ -[b]: https://github.com/lujun9972 -[1]: https://hpe.com/info/simplivity diff --git a/sources/talk/20190602 IoT Roundup- New research on IoT security, Microsoft leans into IoT.md b/sources/talk/20190602 IoT Roundup- New research on IoT security, Microsoft leans into IoT.md deleted file mode 100644 index 6d955c6485..0000000000 --- a/sources/talk/20190602 IoT Roundup- New research on IoT security, Microsoft leans into IoT.md +++ /dev/null @@ -1,71 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (IoT Roundup: New research on IoT security, Microsoft leans into IoT) -[#]: via: (https://www.networkworld.com/article/3398607/iot-roundup-new-research-on-iot-security-microsoft-leans-into-iot.html) -[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/) - -IoT Roundup: New research on IoT security, Microsoft leans into IoT -====== -Verizon sets up widely available narrow-band IoT service, while most Americans think IoT manufacturers should ensure their products protect personal information. -As with any technology whose use is expanding at such speed, it can be tough to track exactly what’s going on in the [IoT][1] world – everything from basic usage numbers to customer attitudes to more in-depth slices of the market is constantly changing. Fortunately, the month of May brought several new pieces of research to light, which should help provide at least a partial outline of what’s really happening in IoT. - -### Internet of things polls - -Not all of the news is good. An IPSOS Mori poll performed on behalf of the Internet Society and Consumers International (respectively, an umbrella organization for open development and Internet use and a broad-based consumer advocacy group) found that, despite the skyrocketing numbers of smart devices in circulation around the world, more than half of users in large parts of the western world don’t trust those devices to safeguard their privacy. - -**More on IoT:** - - * [What is the IoT? How the internet of things works][2] - * [What is edge computing and how it’s changing the network][3] - * [Most powerful Internet of Things companies][4] - * [10 Hot IoT startups to watch][5] - * [The 6 ways to make money in IoT][6] - * [What is digital twin technology? [and why it matters]][7] - * [Blockchain, service-centric networking key to IoT success][8] - * [Getting grounded in IoT networking and security][9] - * [Building IoT-ready networks must become a priority][10] - * [What is the Industrial IoT? [And why the stakes are so high]][11] - - - -While almost 70 percent of respondents owned connected devices, 55 percent said they didn’t feel their personal information was adequately protected by manufacturers. A further 28 percent said they had avoided using connected devices – smart home, fitness tracking and similar consumer gadgetry – primarily because they were concerned over privacy issues, and a whopping 85 percent of Americans agreed with the argument that manufacturers had a responsibility to produce devices that protected personal information. - -Those concerns are understandable, according to data from the Ponemon Institute, a tech-research organization. Its survey of corporate risk and security personnel, released in early May, found that there have been few concerted efforts to limit exposure to IoT-based security threats, and that those threats are sharply on the rise when compared to past years, with the percentage of organizations that had experienced a data breach related to unsecured IoT devices rising from 15 percent in fiscal 2017 to 26 percent in fiscal 2019. - -Beyond a lack of organizational wherewithal to address those threats, part of the problem in some verticals is technical. Security vendor Forescout said earlier this month that its research showed 40 percent of all healthcare IT environments had more than 20 different operating systems, and more than 30 percent had more than 100 – hardly an ideal situation for smooth patching and updating. - -To continue reading this article register now - -[Get Free Access][12] - -[Learn More][13] Existing Users [Sign In][12] - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3398607/iot-roundup-new-research-on-iot-security-microsoft-leans-into-iot.html - -作者:[Jon Gold][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Jon-Gold/ -[b]: https://github.com/lujun9972 -[1]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[2]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[3]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[4]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[5]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[6]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[7]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[8]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[9]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[10]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[11]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[12]: javascript:// -[13]: /learn-about-insider/ diff --git a/sources/talk/20190603 It-s time for the IoT to -optimize for trust.md b/sources/talk/20190603 It-s time for the IoT to -optimize for trust.md deleted file mode 100644 index cc5aa9db7c..0000000000 --- a/sources/talk/20190603 It-s time for the IoT to -optimize for trust.md +++ /dev/null @@ -1,102 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (It’s time for the IoT to 'optimize for trust') -[#]: via: (https://www.networkworld.com/article/3399817/its-time-for-the-iot-to-optimize-for-trust.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -It’s time for the IoT to 'optimize for trust' -====== -If we can't trust the internet of things (IoT) to gather accurate data and use it appropriately, IoT adoption and innovation are likely to suffer. -![Bose][1] - -One of the strengths of internet of things (IoT) technology is that it can do so many things well. From smart toothbrushes to predictive maintenance on jetliners, the IoT has more use cases than you can count. The result is that various IoT uses cases require optimization for particular characteristics, from cost to speed to long life, as well as myriad others. - -But in a recent post, "[How the internet of things will change advertising][2]" (which you should definitely read), the always-insightful Stacy Higginbotham tossed in a line that I can’t stop thinking about: “It's crucial that the IoT optimizes for trust." - -**[ Read also: Network World's[corporate guide to addressing IoT security][3] ]** - -### Trust is the IoT's most important attribute - -Higginbotham was talking about optimizing for trust as opposed to clicks, but really, trust is more important than just about any other value in the IoT. It’s more important than bandwidth usage, more important than power usage, more important than cost, more important than reliability, and even more important than security and privacy (though they are obviously related). In fact, trust is the critical factor in almost every aspect of the IoT. - -Don’t believe me? Let’s take a quick look at some recent developments in the field: - -For one thing, IoT devices often don’t take good care of the data they collect from you. Over 90% of data transactions on IoT devices are not fully encrypted, according to a new [study from security company Zscaler][4]. The [problem][5], apparently, is that many companies have large numbers of consumer-grade IoT devices on their networks. In addition, many IoT devices are attached to the companies’ general networks, and if that network is breached, the IoT devices and data may also be compromised. - -In some cases, ownership of IoT data can raise surprisingly serious trust concerns. According to [Kaiser Health News][6], smartphone sleep apps, as well as smart beds and smart mattress pads, gather amazingly personal information: “It knows when you go to sleep. It knows when you toss and turn. It may even be able to tell when you’re having sex.” And while companies such as Sleep Number say they don’t share the data they gather, their written privacy policies clearly state that they _can_. - -### **Lack of trust may lead to new laws** - -In California, meanwhile, "lawmakers are pushing for new privacy rules affecting smart speakers” such as the Amazon Echo. According to the _[LA Times][7]_ , the idea is “to ensure that the devices don’t record private conversations without permission,” requiring a specific opt-in process. Why is this an issue? Because consumers—and their elected representatives—don’t trust that Amazon, or any IoT vendor, will do the right thing with the data it collects from the IoT devices it sells—perhaps because it turns out that thousands of [Amazon employees have been listening in on what Alexa users are][8] saying to their Echo devices. - -The trust issues get even trickier when you consider that Amazon reportedly considered letting Alexa listen to users even without a wake word like “Alexa” or “computer,” and is reportedly working on [wearable devices designed to read human emotions][9] from listening to your voice. - -“The trust has been breached,” said California Assemblyman Jordan Cunningham (R-Templeton) to the _LA Times_. - -As critics of the bill ([AB 1395][10]) point out, the restrictions matter because voice assistants require this data to improve their ability to correctly understand and respond to requests. - -### **Some first steps toward increasing trust** - -Perhaps recognizing that the IoT needs to be optimized for trust so that we are comfortable letting it do its job, Amazon recently introduced a new Alexa voice command: “[Delete what I said today][11].” - -Moves like that, while welcome, will likely not be enough. - -For example, a [new United Nations report][12] suggests that “voice assistants reinforce harmful gender stereotypes” when using female-sounding voices and names like Alexa and Siri. Put simply, “Siri’s ‘female’ obsequiousness—and the servility expressed by so many other digital assistants projected as young women—provides a powerful illustration of gender biases coded into technology products, pervasive in the technology sector and apparent in digital skills education.” I'm not sure IoT vendors are eager—or equipped—to tackle issues like that. - -**More on IoT:** - - * [What is the IoT? How the internet of things works][13] - * [What is edge computing and how it’s changing the network][14] - * [Most powerful Internet of Things companies][15] - * [10 Hot IoT startups to watch][16] - * [The 6 ways to make money in IoT][17] - * [What is digital twin technology? [and why it matters]][18] - * [Blockchain, service-centric networking key to IoT success][19] - * [Getting grounded in IoT networking and security][20] - * [Building IoT-ready networks must become a priority][21] - * [What is the Industrial IoT? [And why the stakes are so high]][22] - - - -Join the Network World communities on [Facebook][23] and [LinkedIn][24] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3399817/its-time-for-the-iot-to-optimize-for-trust.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/09/bose-sleepbuds-2-100771579-large.jpg -[2]: https://mailchi.mp/iotpodcast/stacey-on-iot-how-iot-changes-advertising?e=6bf9beb394 -[3]: https://www.networkworld.com/article/3269165/internet-of-things/a-corporate-guide-to-addressing-iot-security-concerns.html -[4]: https://www.zscaler.com/blogs/research/iot-traffic-enterprise-rising-so-are-threats -[5]: https://www.csoonline.com/article/3397044/over-90-of-data-transactions-on-iot-devices-are-unencrypted.html -[6]: https://khn.org/news/a-wake-up-call-on-data-collecting-smart-beds-and-sleep-apps/ -[7]: https://www.latimes.com/politics/la-pol-ca-alexa-google-home-privacy-rules-california-20190528-story.html -[8]: https://www.usatoday.com/story/tech/2019/04/11/amazon-employees-listening-alexa-customers/3434732002/ -[9]: https://www.bloomberg.com/news/articles/2019-05-23/amazon-is-working-on-a-wearable-device-that-reads-human-emotions -[10]: https://leginfo.legislature.ca.gov/faces/billTextClient.xhtml?bill_id=201920200AB1395 -[11]: https://venturebeat.com/2019/05/29/amazon-launches-alexa-delete-what-i-said-today-voice-command/ -[12]: https://unesdoc.unesco.org/ark:/48223/pf0000367416.page=1 -[13]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[14]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[15]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[16]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[17]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[18]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[19]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[20]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[21]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[22]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[23]: https://www.facebook.com/NetworkWorld/ -[24]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190604 Data center workloads become more complex despite promises to the contrary.md b/sources/talk/20190604 Data center workloads become more complex despite promises to the contrary.md deleted file mode 100644 index 31d127e77d..0000000000 --- a/sources/talk/20190604 Data center workloads become more complex despite promises to the contrary.md +++ /dev/null @@ -1,64 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Data center workloads become more complex despite promises to the contrary) -[#]: via: (https://www.networkworld.com/article/3400086/data-center-workloads-become-more-complex-despite-promises-to-the-contrary.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Data center workloads become more complex despite promises to the contrary -====== -The data center is shouldering a greater burden than ever, despite promises of ease and the cloud. -![gorodenkoff / Getty Images][1] - -Data centers are becoming more complex and still run the majority of workloads despite the promises of simplicity of deployment through automation and hyperconverged infrastructure (HCI), not to mention how the cloud was supposed to take over workloads. - -That’s the finding of the Uptime Institute's latest [annual global data center survey][2] (registration required). The majority of IT loads still run on enterprise data centers even in the face of cloud adoption, putting pressure on administrators to have to manage workloads across the hybrid infrastructure. - -**[ Learn[how server disaggregation can boost data center efficiency][3] | Get regularly scheduled insights: [Sign up for Network World newsletters][4] ]** - -With workloads like artificial intelligence (AI) and machine language coming to the forefront, that means facilities face greater power and cooling challenges, since AI is extremely processor-intensive. That puts strain on data center administrators and power and cooling vendors alike to keep up with the growth in demand. - -On top of it all, everyone is struggling to get enough staff with the right skills. - -### Outages, staffing problems, lack of public cloud visibility among top concerns - -Among the key findings of Uptime's report: - - * The large, privately owned enterprise data center facility still forms the bedrock of corporate IT and is expected to be running half of all workloads in 2021. - * The staffing problem affecting most of the data center sector has only worsened. Sixty-one percent of respondents said they had difficulty retaining or recruiting staff, up from 55% a year earlier. - * Outages continue to cause significant problems for operators. Just over a third (34%) of all respondents had an outage or severe IT service degradation in the past year, while half (50%) had an outage or severe IT service degradation in the past three years. - * Ten percent of all respondents said their most recent significant outage cost more than $1 million. - * A lack of visibility, transparency, and accountability of public cloud services is a major concern for enterprises that have mission-critical applications. A fifth of operators surveyed said they would be more likely to put workloads in a public cloud if there were more visibility. Half of those using public cloud for mission-critical applications also said they do not have adequate visibility. - * Improvements in data center facility energy efficiency have flattened out and even deteriorated slightly in the past two years. The average PUE for 2019 is 1.67. - * Rack power density is rising after a long period of flat or minor increases, causing many to rethink cooling strategies. - * Power loss was the single biggest cause of outages, accounting for one-third of outages. Sixty percent of respondents said their data center’s outage could have been prevented with better management/processes or configuration. - - - -Traditionally data centers are improving their reliability through "rigorous attention to power, infrastructure, connectivity and on-site IT replication," the Uptime report says. The solution, though, is pricy. Data center operators are getting distributed resiliency through active-active data centers where at least two active data centers replicate data to each other. Uptime found up to 40% of those surveyed were using this method. - -The Uptime survey was conducted in March and April of this year, surveying 1,100 end users in more than 50 countries and dividing them into two groups: the IT managers, owners, and operators of data centers and the suppliers, designers, and consultants that service the industry. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3400086/data-center-workloads-become-more-complex-despite-promises-to-the-contrary.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/cso_cloud_computing_backups_it_engineer_data_center_server_racks_connections_by_gorodenkoff_gettyimages-943065400_3x2_2400x1600-100796535-large.jpg -[2]: https://uptimeinstitute.com/2019-data-center-industry-survey-results -[3]: https://www.networkworld.com/article/3266624/how-server-disaggregation-could-make-cloud-datacenters-more-efficient.html -[4]: https://www.networkworld.com/newsletters/signup.html -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190604 Moving to the Cloud- SD-WAN Matters- Part 2.md b/sources/talk/20190604 Moving to the Cloud- SD-WAN Matters- Part 2.md deleted file mode 100644 index 2f68bd6f59..0000000000 --- a/sources/talk/20190604 Moving to the Cloud- SD-WAN Matters- Part 2.md +++ /dev/null @@ -1,66 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Moving to the Cloud? SD-WAN Matters! Part 2) -[#]: via: (https://www.networkworld.com/article/3398488/moving-to-the-cloud-sd-wan-matters-part-2.html) -[#]: author: (Rami Rammaha https://www.networkworld.com/author/Rami-Rammaha/) - -Moving to the Cloud? SD-WAN Matters! Part 2 -====== - -![istock][1] - -This is the second installment of the blog series exploring how enterprises can realize the full transformation promise of the cloud by shifting to a business first networking model powered by a business-driven [SD-WAN][2]. The first installment explored automating secure IPsec connectivity and intelligently steering traffic to cloud providers. We also framed the direct correlation between moving to the cloud and adopting an SD-WAN. In this blog, we will expand upon several additional challenges that can be addressed with a business-driven SD-WAN when embracing the cloud: - -### Simplifying and automating security zone-based segmentation - -Securing cloud-first branches requires a robust multi-level approach that addresses following considerations: - - * Restricting outside traffic coming into the branch to sessions exclusively initiated by internal users with a built-in stateful firewall, avoiding appliance sprawl and lowering operational costs; this is referred to as the app whitelist model - * Encrypting communications between end points within the SD-WAN fabric and between branch locations and public cloud instances - * Service chaining traffic to a cloud-hosted security service like [Zscaler][3] for Layer 7 inspection and analytics for internet-bound traffic - * Segmenting traffic spanning the branch, WAN and data center/cloud - * Centralizing policy orchestration and automation of zone-based firewall, VLAN and WAN overlays - - - -A traditional device-centric WAN approach for security segmentation requires the time-consuming manual configuration of routers and/or firewalls on a device-by-device and site-by-site basis. This is not only complex and cumbersome, but it simply can’t scale to 100s or 1000s of sites. Anusha Vaidyanathan, director of product management at Silver Peak, explains how to automate end-to-end zone-based segmentation, emphasizing the advantages of a business-driven approach in this [lightboard video][4]. - -### Delivering the Highest Quality of Experience to IT teams - -The goal for enterprise IT is enabling business agility and increasing operational efficiency. The traditional router-centric WAN approach doesn’t provide the best quality of experience for IT as management and on-going network operations are manual and time consuming, device-centric, cumbersome, error-prone and inefficient. - -A business-driven SD-WAN such as the Silver Peak [Unity EdgeConnect™][5] unified SD-WAN edge platform centralizes the orchestration of business-driven policies. EdgeConnect automation, machine learning and open APIs easily integrate with third-party management tools and real-time visibility tools to deliver the highest quality of experience for IT, enabling them to reclaim nights and weekends. Manav Mishra, vice president of product management at Silver Peak, explains the latest Silver Peak innovations in this [lightboard video][6]. - -As enterprises become increasingly dependent on the cloud and embrace a multi-cloud strategy, they must address a number of new challenges: - - * A centralized approach to securely embracing the cloud and the internet - * How to extend the on-premise data center to a public cloud and migrating workloads between private and public cloud, taking application portability into account - * Deliver consistent high application performance and availability to hosted applications whether they reside in the data center, private or public clouds or are delivered as SaaS services - * A proactive way to quickly resolve complex issues that span the data center and cloud as well as multiple WAN transport services by harnessing the power of advanced visibility and analytics tools - - - -The business-driven EdgeConnect SD-WAN edge platform enables enterprise IT organizations to easily and consistently embrace the public cloud. Unified security and performance capabilities with automation deliver the highest quality of experience for both users and IT while lowering overall WAN expenditures. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3398488/moving-to-the-cloud-sd-wan-matters-part-2.html - -作者:[Rami Rammaha][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Rami-Rammaha/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/istock-909772962-100797711-large.jpg -[2]: https://www.silver-peak.com/sd-wan/sd-wan-explained -[3]: https://www.silver-peak.com/company/tech-partners/zscaler -[4]: https://www.silver-peak.com/resource-center/how-to-create-sd-wan-security-zones-in-edgeconnect -[5]: https://www.silver-peak.com/products/unity-edge-connect -[6]: https://www.silver-peak.com/resource-center/how-to-optimize-quality-of-experience-for-it-using-sd-wan diff --git a/sources/talk/20190604 Why Emacs.md b/sources/talk/20190604 Why Emacs.md deleted file mode 100644 index 0d9b12ba1a..0000000000 --- a/sources/talk/20190604 Why Emacs.md +++ /dev/null @@ -1,94 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Why Emacs) -[#]: via: (https://saurabhkukade.github.io/Why-Emacs/) -[#]: author: (Saurabh Kukade http://saurabhkukade.github.io/) - -Why Emacs -====== -![Image of Emacs][1] - -> “Emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish.” - -> -Neal Stephenson, “In the Beginning was the Command Line” - -### Introduction - -This is my first blog post about Emacs. I want to discuss step by step customization of Emacs for beginner. If you’re new to Emacs then you are in the right place, if you’re already familiar with Emacs then that is even better, I assure you that we will get to know many new things in here. - -Before getting into how to customize Emacs and what are the exciting features of Emacs I want to write about “why Emacs”. - -### Why Emacs? - -This was first question crossed my mind when one wise man asked me to try Emacs instead of VIM. Well, I am not writing this article to discuss a battle between two editors VIM and Emacs. That is a another story for another day. But Why Emacs? Well here are some things that justifies that Emacs is powerful and highly customizable. - -### 41 Years! - -Initial release year of Emacs is 1976 that means Emacs is standing and adapting changes from last 41 years. - -41 years of time for a software is huge and that makes Emacs is one of the best Software Engineering product. - -### Lisp (Emacs Lisp) - -If you are lisp programmer (lisper) then I don’t need to explain you. But for those who don’t know Lisp and its dialects like Scheme, Clojure then Lisp (and all dialects of Lips) is powerful programming language and it stands different from other languages because of its unique property of “Homoiconicity”. - -As Emacs is implemented in C and Emacs Lisp (Emacs Lisp is a dialect of the Lisp programming language) it makes Emacs what is because, - - * The simple syntax of Lisp, together with the powerful editing features made possible by that simple syntax, add up to a more convenient programming system than is practical with other languages. Lisp and extensible editors are made for each other. - - * The simplicity of Lisp syntax makes intelligent editing operations easier to implement, while the complexity of other languages discourages their users from implementing similar operations for them. - - - - -### Highly Customizable - -To any programmer, tools gives power and convenience for reading, writing and managing a code. - -Hence, if a tool is programmatic-ally customizable then that makes it even more powerful. - -Emacs has above property and in fact is itself one of best tool known for its flexibility and easy customization. Emacs provides basic commands and key configuration for editing a text. This commands and key-configuration are editable and extensible. - -Beside basic configuration, Emacs is not biased towards any specific language for customization. One can customize Emacs for any programming language or extend easily existing customization. - -Emacs provides the consistent environment for multiple programming languages, email, organizer (via org-mode), a shell/interpreter, note taking, and document writing. - -For customizing you don’t need to learn Emacs-lisp from scratch. You can use existing packages available and that’s it. Installing and managing packages in Emacs is easy, Emacs has in-built package manager for it. - -Customization is very portable, one just need to place a file or directory containing personal customization file(s) in the right place and it’s done for getting personal customization to new place. ## Huge platform Support - -Emacs supports Lisp, Ruby, Python, PHP, Java, Erlang, JavaScript, C, C++, Prolog, Tcl, AWK, PostScript, Clojure, Scala, Perl, Haskell, Elixir all of these languages and more like mysql, pgsql etc. Because of the powerful Lisp core, Emacs is easy to extend to add support for new languages if need to. - -Also one can use the built-in IRC client ERC along with BitlBee to connect to your favorite chat services, or use the Jabber package to hop on any XMPP service. - -### Org-mode - -No matter if you are programmer or not. Org mode is for everyone. Org mode lets you to plan projects and organize schedule. It can be also use for publish notes and documents to different formats, like LaTeX->pdf, html, and markdown. - -In fact, Org-mode is so awesome enough that many non-Emacs users started learn Emacs. - -### Final note - -There are number of reason to argue that Emacs is cool and awesome to use. But I just wanted you to give glimpse of why to try Emacs. In the upcoming post I will be writing step by step information to customize Emacs from scratch to awesome IDE. - -Thank you! - -Please don’t forget to comment your thoughts and suggestions below. - --------------------------------------------------------------------------------- - -via: https://saurabhkukade.github.io/Why-Emacs/ - -作者:[Saurabh Kukade][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: http://saurabhkukade.github.io/ -[b]: https://github.com/lujun9972 -[1]: https://saurabhkukade.github.io/img/emacs.jpeg diff --git a/sources/talk/20190606 Cloud adoption drives the evolution of application delivery controllers.md b/sources/talk/20190606 Cloud adoption drives the evolution of application delivery controllers.md deleted file mode 100644 index d7b22353c4..0000000000 --- a/sources/talk/20190606 Cloud adoption drives the evolution of application delivery controllers.md +++ /dev/null @@ -1,67 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Cloud adoption drives the evolution of application delivery controllers) -[#]: via: (https://www.networkworld.com/article/3400897/cloud-adoption-drives-the-evolution-of-application-delivery-controllers.html) -[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/) - -Cloud adoption drives the evolution of application delivery controllers -====== -Application delivery controllers (ADCs) are on the precipice of shifting from traditional hardware appliances to software form factors. -![Aramyan / Getty Images / Microsoft][1] - -Migrating to a cloud computing model will obviously have an impact on the infrastructure that’s deployed. This shift has already been seen in the areas of servers, storage, and networking, as those technologies have evolved to a “software-defined” model. And it appears that application delivery controllers (ADCs) are on the precipice of a similar shift. - -In fact, a new ZK Research [study about cloud computing adoption and the impact on ADCs][2] found that, when looking at the deployment model, hardware appliances are the most widely deployed — with 55% having fully deployed or are currently testing and only 15% currently researching hardware. (Note: I am an employee of ZK Research.) - -Juxtapose this with containerized ADCs where only 34% have deployed or are testing but 24% are currently researching and it shows that software in containers will outpace hardware for growth. Not surprisingly, software on bare metal and in virtual machines showed similar although lower, “researching” numbers that support the thesis that the market is undergoing a shift from hardware to software. - -**[ Read also:[How to make hybrid cloud work][3] ]** - -The study, conducted in collaboration with Kemp Technologies, surveyed 203 respondents from the U.K. and U.S. The demographic split was done to understand regional differences. An equal number of mid and large size enterprises were looked at, with 44% being from over 5,000 employees and the other 56% from companies that have 300 to 5,000 people. - -### Incumbency helps but isn’t a fait accompli for future ADC purchases - -The primary tenet of my research has always been that incumbents are threatened when markets transition, and this is something I wanted to investigate in the study. The survey asked whether buyers would consider an alternative as they evolve their applications from legacy (mode 1) to cloud-native (mode 2). The results offer a bit of good news and bad news for the incumbent providers. Only 8% said they would definitely select a new vendor, but 35% said they would not change. That means the other 57% will look at alternatives. This is sensible, as the requirements for cloud ADCs are different than ones that support traditional applications. - -### IT pros want better automation capabilities - -This begs the question as to what features ADC buyers want for a cloud environment versus traditional ones. The survey asked specifically what features would be most appealing in future purchases, and the top response was automation, followed by central management, application analytics, on-demand scaling (which is a form of automation), and visibility. - -The desire to automate was a positive sign for the evolution of buyer mindset. Just a few years ago, the mere mention of automation would have sent IT pros into a panic. The reality is that IT can’t operate effectively without automation, and technology professionals are starting to understand that. - -The reason automation is needed is that manual changes are holding businesses back. The survey asked how the speed of ADC changes impacts the speed at which applications are rolled out, and a whopping 60% said it creates significant or minor delays. In an era of DevOps and continuous innovation, multiple minor delays create a drag on the business and can cause it to fall behind is more agile competitors. - -![][4] - -### ADC upgrades and service provisioning benefit most from automation - -The survey also drilled down on specific ADC tasks to see where automation would have the most impact. Respondents were asked how long certain tasks took, answering in minutes, days, weeks, or months. Shockingly, there wasn’t a single task where the majority said it could be done in minutes. The closest was adding DNS entries for new virtual IP addresses (VIPs) where 46% said they could do that in minutes. - -Upgrading, provisioning new load balancers, and provisioning new VIPs took the longest. Looking ahead, this foreshadows big problems. As the data center gets more disaggregated and distributed, IT will deploy more software-based ADCs in more places. Taking days or weeks or month to perform these functions will cause the organization to fall behind. - -The study clearly shows changes are in the air for the ADC market. For IT pros, I strongly recommend that as the environment shifts to the cloud, it’s prudent to evaluate new vendors. By all means, see what your incumbent vendor has, but look at least at two others that offer software-based solutions. Also, there should be a focus on automating as much as possible, so the primary evaluation criteria for ADCs should be how easy it is to implement automation. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3400897/cloud-adoption-drives-the-evolution-of-application-delivery-controllers.html - -作者:[Zeus Kerravala][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Zeus-Kerravala/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/cw_microsoft_sharepoint_vs_onedrive_clouds_and_hands_by_aramyan_gettyimages-909772962_2400x1600-100796932-large.jpg -[2]: https://kemptechnologies.com/research-papers/adc-market-research-study-zeus-kerravala/?utm_source=zkresearch&utm_medium=referral&utm_campaign=zkresearch&utm_term=zkresearch&utm_content=zkresearch -[3]: https://www.networkworld.com/article/3119362/hybrid-cloud/how-to-make-hybrid-cloud-work.html#tk.nww-fsb -[4]: https://images.idgesg.net/images/article/2019/06/adc-survey-zk-research-100798593-large.jpg -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190606 For enterprise storage, persistent memory is here to stay.md b/sources/talk/20190606 For enterprise storage, persistent memory is here to stay.md deleted file mode 100644 index 3da91bb311..0000000000 --- a/sources/talk/20190606 For enterprise storage, persistent memory is here to stay.md +++ /dev/null @@ -1,118 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (For enterprise storage, persistent memory is here to stay) -[#]: via: (https://www.networkworld.com/article/3398988/for-enterprise-storage-persistent-memory-is-here-to-stay.html) -[#]: author: (John Edwards ) - -For enterprise storage, persistent memory is here to stay -====== -Persistent memory – also known as storage class memory – has tantalized data center operators for many years. A new technology promises the key to success. -![Thinkstock][1] - -It's hard to remember a time when semiconductor vendors haven't promised a fast, cost-effective and reliable persistent memory technology to anxious [data center][2] operators. Now, after many years of waiting and disappointment, technology may have finally caught up with the hype to make persistent memory a practical proposition. - -High-capacity persistent memory, also known as storage class memory ([SCM][3]), is fast and directly addressable like dynamic random-access memory (DRAM), yet is able to retain stored data even after its power has been switched off—intentionally or unintentionally. The technology can be used in data centers to replace cheaper, yet far slower traditional persistent storage components, such as [hard disk drives][4] (HDD) and [solid-state drives][5] (SSD). - -**Learn more about enterprise storage** - - * [Why NVMe over Fabric matters][6] - * [What is hyperconvergence?][7] - * [How NVMe is changing enterprise storage][8] - * [Making the right hyperconvergence choice: HCI hardware or software?][9] - - - -Persistent memory can also be used to replace DRAM itself in some situations without imposing a significant speed penalty. In this role, persistent memory can deliver crucial operational benefits, such as lightning-fast database-server restarts during maintenance, power emergencies and other expected and unanticipated reboot situations. - -Many different types of strategic operational applications and databases, particularly those that require low-latency, high durability and strong data consistency, can benefit from persistent memory. The technology also has the potential to accelerate virtual machine (VM) storage and deliver higher performance to multi-node, distributed-cloud applications. - -In a sense, persistent memory marks a rebirth of core memory. "Computers in the ‘50s to ‘70s used magnetic core memory, which was direct access, non-volatile memory," says Doug Wong, a senior member of [Toshiba Memory America's][10] technical staff. "Magnetic core memory was displaced by SRAM and DRAM, which are both volatile semiconductor memories." - -One of the first persistent memory devices to come to market is [Intel’s Optane DC][11]. Other vendors that have released persistent memory products or are planning to do so include [Samsung][12], Toshiba America Memory and [SK Hynix][13]. - -### Persistent memory: performance + reliability - -With persistent memory, data centers have a unique opportunity to gain faster performance and lower latency without enduring massive technology disruption. "It's faster than regular solid-state NAND flash-type storage, but you're also getting the benefit that it’s persistent," says Greg Schulz, a senior advisory analyst at vendor-independent storage advisory firm [StorageIO.][14] "It's the best of both worlds." - -Yet persistent memory offers adopters much more than speedy, reliable storage. In an ideal IT world, all of the data associated with an application would reside within DRAM to achieve maximum performance. "This is currently not practical due to limited DRAM and the fact that DRAM is volatile—data is lost when power fails," observes Scott Nelson, senior vice president and general manager of Toshiba Memory America's memory business unit. - -Persistent memory transports compatible applications to an "always on" status, providing continuous access to large datasets through increased system memory capacity, says Kristie Mann, [Intel's][15] director of marketing for data center memory and storage. She notes that Optane DC can supply data centers with up to three-times more system memory capacity (as much as 36TBs), system restarts in seconds versus minutes, 36% more virtual machines per node, and up to 8-times better performance on [Apache Spark][16], a widely used open-source distributed general-purpose cluster-computing framework. - -System memory currently represents 60% of total platform costs, Mann says. She observes that Optane DC persistent memory provides significant customer value by delivering 1.2x performance/dollar on key customer workloads. "This value will dramatically change memory/storage economics and accelerate the data-centric era," she predicts. - -### Where will persistent memory infiltrate enterprise storage? - -Persistent memory is likely to first enter the IT mainstream with minimal fanfare, serving as a high-performance caching layer for high performance SSDs. "This could be adopted relatively-quickly," Nelson observes. Yet this intermediary role promises to be merely a stepping-stone to increasingly crucial applications. - -Over the next few years, persistent technology will impact data centers serving enterprises across an array of sectors. "Anywhere time is money," Schulz says. "It could be financial services, but it could also be consumer-facing or sales-facing operations." - -Persistent memory supercharges anything data-related that requires extreme speed at extreme scale, observes Andrew Gooding, vice president of engineering at [Aerospike][17], which delivered the first commercially available open database optimized for use with Intel Optane DC. - -Machine learning is just one of many applications that stand to benefit from persistent memory. Gooding notes that ad tech firms, which rely on machine learning to understand consumers' reactions to online advertising campaigns, should find their work made much easier and more effective by persistent memory. "They’re collecting information as users within an ad campaign browse the web," he says. "If they can read and write all that data quickly, they can then apply machine-learning algorithms and tailor specific ads for users in real time." - -Meanwhile, as automakers become increasingly reliant on data insights, persistent memory promises to help them crunch numbers and refine sophisticated new technologies at breakneck speeds. "In the auto industry, manufacturers face massive data challenges in autonomous vehicles, where 20 exabytes of data needs to be processed in real time, and they're using self-training machine-learning algorithms to help with that," Gooding explains. "There are so many fields where huge amounts of data need to be processed quickly with machine-learning techniques—fraud detection, astronomy... the list goes on." - -Intel, like other persistent memory vendors, expects cloud service providers to be eager adopters, targeting various types of in-memory database services. Google, for example, is applying persistent memory to big data workloads on non-relational databases from vendors such as Aerospike and [Redis Labs][18], Mann says. - -High-performance computing (HPC) is yet another area where persistent memory promises to make a tremendous impact. [CERN][19], the European Organization for Nuclear Research, is using Intel's Optane DC to significantly reduce wait times for scientific computing. "The efficiency of their algorithms depends on ... persistent memory, and CERN considers it a major breakthrough that is necessary to the work they are doing," Mann observes. - -### How to prepare storage infrastructure for persistent memory - -Before jumping onto the persistent memory bandwagon, organizations need to carefully scrutinize their IT infrastructure to determine the precise locations of any existing data bottlenecks. This task will be primary application-dependent, Wong notes. "If there is significant performance degradation due to delays associated with access to data stored in non-volatile storage—SSD or HDD—then an SCM tier will improve performance," he explains. Yet some applications will probably not benefit from persistent memory, such as compute-bound applications where CPU performance is the bottleneck. - -Developers may need to reevaluate fundamental parts of their storage and application architectures, Gooding says. "They will need to know how to program with persistent memory," he notes. "How, for example, to make sure writes are flushed to the actual persistent memory device when necessary, as opposed to just sitting in the CPU cache." - -To leverage all of persistent memory's potential benefits, significant changes may also be required in how code is designed. When moving applications from DRAM and flash to persistent memory, developers will need to consider, for instance, what happens when a program crashes and restarts. "Right now, if they write code that leaks memory, that leaked memory is recovered on restart," Gooding explains. With persistent memory, that isn't necessarily the case. "Developers need to make sure the code is designed to reconstruct a consistent state when a program restarts," he notes. "You may not realize how much your designs rely on the traditional combination of fast volatile DRAM and block storage, so it can be tricky to change your code designs for something completely new like persistent memory." - -Older versions of operating systems may also need to be updated to accommodate the new technology, although newer OSes are gradually becoming persistent memory aware, Schulz says. "In other words, if they detect that persistent memory is available, then they know how to utilize that either as a cache, or some other memory." - -Hypervisors, such as [Hyper-V][20] and [VMware][21], now know how to leverage persistent memory to support productivity, performance and rapid restarts. By utilizing persistent memory along with the latest versions of VMware, a whole system can see an uplift in speed and also maximize the number of VMs to fit on a single host, says Ian McClarty, CEO and president of data center operator [PhoenixNAP Global IT Services][22]. "This is a great use case for companies who want to own less hardware or service providers who want to maximize hardware to virtual machine deployments." - -Many key enterprise applications, particularly databases, are also becoming persistent memory aware. SQL Server and [SAP’s][23] flagship [HANA][24] database management platform have both embraced persistent memory. "The SAP HANA platform is commonly used across multiple industries to process data and transactions, and then run advanced analytics ... to deliver real-time insights," Mann observes. - -In terms of timing, enterprises and IT organizations should begin persistent memory planning immediately, Schulz recommends. "You should be talking with your vendors and understanding their roadmap, their plans, for not only supporting this technology, but also in what mode: as storage, as memory." - -Join the Network World communities on [Facebook][25] and [LinkedIn][26] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3398988/for-enterprise-storage-persistent-memory-is-here-to-stay.html - -作者:[John Edwards][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2017/08/file_folder_storage_sharing_thinkstock_477492571_3x2-100732889-large.jpg -[2]: https://www.networkworld.com/article/3353637/the-data-center-is-being-reimagined-not-disappearing.html -[3]: https://www.networkworld.com/article/3026720/the-next-generation-of-storage-disruption-storage-class-memory.html -[4]: https://www.networkworld.com/article/2159948/hard-disk-drives-vs--solid-state-drives--are-ssds-finally-worth-the-money-.html -[5]: https://www.networkworld.com/article/3326058/what-is-an-ssd.html -[6]: https://www.networkworld.com/article/3273583/why-nvme-over-fabric-matters.html -[7]: https://www.networkworld.com/article/3207567/what-is-hyperconvergence -[8]: https://www.networkworld.com/article/3280991/what-is-nvme-and-how-is-it-changing-enterprise-storage.html -[9]: https://www.networkworld.com/article/3318683/making-the-right-hyperconvergence-choice-hci-hardware-or-software -[10]: https://business.toshiba-memory.com/en-us/top.html -[11]: https://www.intel.com/content/www/us/en/architecture-and-technology/optane-dc-persistent-memory.html -[12]: https://www.samsung.com/semiconductor/ -[13]: https://www.skhynix.com/eng/index.jsp -[14]: https://storageio.com/ -[15]: https://www.intel.com/content/www/us/en/homepage.html -[16]: https://spark.apache.org/ -[17]: https://www.aerospike.com/ -[18]: https://redislabs.com/ -[19]: https://home.cern/ -[20]: https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/about/ -[21]: https://www.vmware.com/ -[22]: https://phoenixnap.com/ -[23]: https://www.sap.com/index.html -[24]: https://www.sap.com/products/hana.html -[25]: https://www.facebook.com/NetworkWorld/ -[26]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190606 Self-learning sensor chips won-t need networks.md b/sources/talk/20190606 Self-learning sensor chips won-t need networks.md deleted file mode 100644 index c5abec5426..0000000000 --- a/sources/talk/20190606 Self-learning sensor chips won-t need networks.md +++ /dev/null @@ -1,82 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Self-learning sensor chips won’t need networks) -[#]: via: (https://www.networkworld.com/article/3400659/self-learning-sensor-chips-wont-need-networks.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Self-learning sensor chips won’t need networks -====== -Scientists working on new, machine-learning networks aim to embed everything needed for artificial intelligence (AI) onto a processor, eliminating the need to transfer data to the cloud or computers. -![Jiraroj Praditcharoenkul / Getty Images][1] - -Tiny, intelligent microelectronics should be used to perform as much sensor processing as possible on-chip rather than wasting resources by sending often un-needed, duplicated raw data to the cloud or computers. So say scientists behind new, machine-learning networks that aim to embed everything needed for artificial intelligence (AI) onto a processor. - -“This opens the door for many new applications, starting from real-time evaluation of sensor data,” says [Fraunhofer Institute for Microelectronic Circuits and Systems][2] on its website. No delays sending unnecessary data onwards, along with speedy processing, means theoretically there is zero latency. - -Plus, on-microprocessor, self-learning means the embedded, or sensor, devices can self-calibrate. They can even be “completely reconfigured to perform a totally different task afterwards,” the institute says. “An embedded system with different tasks is possible.” - -**[ Also read:[What is edge computing?][3] and [How edge networking and IoT will reshape data centers][4] ]** - -Much internet of things (IoT) data sent through networks is redundant and wastes resources: a temperature reading taken every 10 minutes, say, when the ambient temperature hasn’t changed, is one example. In fact, one only needs to know when the temperature has changed, and maybe then only when thresholds have been met. - -### Neural network-on-sensor chip - -The commercial German research organization says it’s developing a specific RISC-V microprocessor with a special hardware accelerator designed for a [brain-copying, artificial neural network (ANN) it has developed][5]. The architecture could ultimately be suitable for the condition-monitoring or predictive sensors of the kind we will likely see more of in the industrial internet of things (IIoT). - -Key to Fraunhofer IMS’s [Artificial Intelligence for Embedded Systems (AIfES)][6] is that the self-learning takes place at chip level rather than in the cloud or on a computer, and that it is independent of “connectivity towards a cloud or a powerful and resource-hungry processing entity.” But it still offers a “full AI mechanism, like independent learning,” - -It’s “decentralized AI,” says Fraunhofer IMS. "It’s not focused towards big-data processing.” - -Indeed, with these kinds of systems, no connection is actually required for the raw data, just for the post-analytical results, if indeed needed. Swarming can even replace that. Swarming lets sensors talk to one another, sharing relevant information without even getting a host network involved. - -“It is possible to build a network from small and adaptive systems that share tasks among themselves,” Fraunhofer IMS says. - -Other benefits in decentralized neural networks include that they can be more secure than the cloud. Because all processing takes place on the microprocessor, “no sensitive data needs to be transferred,” Fraunhofer IMS explains. - -### Other edge computing research - -The Fraunhofer researchers aren’t the only academics who believe entire networks become redundant with neuristor, brain-like AI chips. Binghamton University and Georgia Tech are working together on similar edge-oriented tech. - -“The idea is we want to have these chips that can do all the functioning in the chip, rather than messages back and forth with some sort of large server,” Binghamton said on its website when [I wrote about the university's work last year][7]. - -One of the advantages of no major communications linking: Not only don't you have to worry about internet resilience, but also that energy is saved creating the link. Energy efficiency is an ambition in the sensor world — replacing batteries is time consuming, expensive, and sometimes, in the case of remote locations, extremely difficult. - -Memory or storage for swaths of raw data awaiting transfer to be processed at a data center, or similar, doesn’t have to be provided either — it’s been processed at the source, so it can be discarded. - -**More about edge networking:** - - * [How edge networking and IoT will reshape data centers][4] - * [Edge computing best practices][8] - * [How edge computing can help secure the IoT][9] - - - -Join the Network World communities on [Facebook][10] and [LinkedIn][11] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3400659/self-learning-sensor-chips-wont-need-networks.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/industry_4-0_industrial_iot_smart_factory_automation_by_jiraroj_praditcharoenkul_gettyimages-902668940_2400x1600-100788458-large.jpg -[2]: https://www.ims.fraunhofer.de/en.html -[3]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[4]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html -[5]: https://www.ims.fraunhofer.de/en/Business_Units_and_Core_Competencies/Electronic_Assistance_Systems/News/AIfES-Artificial_Intelligence_for_Embedded_Systems.html -[6]: https://www.ims.fraunhofer.de/en/Business_Units_and_Core_Competencies/Electronic_Assistance_Systems/technologies/Artificial-Intelligence-for-Embedded-Systems-AIfES.html -[7]: https://www.networkworld.com/article/3326557/edge-chips-could-render-some-networks-useless.html -[8]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html -[9]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html -[10]: https://www.facebook.com/NetworkWorld/ -[11]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190606 What to do when yesterday-s technology won-t meet today-s support needs.md b/sources/talk/20190606 What to do when yesterday-s technology won-t meet today-s support needs.md deleted file mode 100644 index 622537f2f9..0000000000 --- a/sources/talk/20190606 What to do when yesterday-s technology won-t meet today-s support needs.md +++ /dev/null @@ -1,53 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (What to do when yesterday’s technology won’t meet today’s support needs) -[#]: via: (https://www.networkworld.com/article/3399875/what-to-do-when-yesterday-s-technology-won-t-meet-today-s-support-needs.html) -[#]: author: (Anand Rajaram ) - -What to do when yesterday’s technology won’t meet today’s support needs -====== - -![iStock][1] - -You probably already know that end user technology is exploding and are feeling the effects of it in your support organization every day. Remember when IT sanctioned and standardized every hardware and software instance in the workplace? Those days are long gone. Today, it’s the driving force of productivity that dictates what will or won’t be used – and that can be hard on a support organization. - -Whatever users need to do their jobs better, faster, more efficiently is what you are seeing come into the workplace. So naturally, that’s what comes into your service desk too. Support organizations see all kinds of [devices, applications, systems, and equipment][2], and it’s adding a great deal of complexity and demand to keep up with. In fact, four of the top five factors causing support ticket volumes to rise are attributed to new and current technology. - -To keep up with the steady [rise of tickets][3] and stay out in front of this surge, support organizations need to take a good, hard look at the processes and technologies they use. Yesterday’s methods won’t cut it. The landscape is simply changing too fast. Supporting today’s users and getting them back to work fast requires an expanding set of skills and tools. - -So where do you start with a new technology project? Just because a technology is new or hyped doesn’t mean it’s right for your organization. It’s important to understand your project goals and the experience you really want to create and match your technology choices to those goals. But don’t go it alone. Talk to your teams. Get intimately familiar with how your support organization works today. Understand your customers’ needs at a deep level. And bring the right people to the table to cover: - - * Business problem analysis: What existing business issue are stakeholders unhappy with? - * The impact of that problem: How does that issue justify making a change? - * Process automation analysis: What area(s) can technology help automate? - * Other solutions: Have you considered any other options besides technology? - - - -With these questions answered, you’re ready to entertain your technology options. Put together your “must-haves” in a requirements document and reach out to potential suppliers. During the initial information-gathering stage, assess if the supplier understands your goals and how their technology helps you meet them. To narrow the field, compare solutions side by side against your goals. Select the top two or three for more in-depth product demos before moving into product evaluations. By the time you’re ready for implementation, you have empirical, practical knowledge of how the solution will perform against your business goals. - -The key takeaway is this: Technology for technology’s sake is just technology. But technology that drives business value is a solution. If you want a solution that drives results for your organization and your customers, it’s worth following a strategic selection process to match your goals with the best technology for the job. - -For more insight, check out the [LogMeIn Rescue][4] and HDI webinar “[Technology and the Service Desk: Expanding Mission, Expanding Skills”][5]. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3399875/what-to-do-when-yesterday-s-technology-won-t-meet-today-s-support-needs.html - -作者:[Anand Rajaram][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/06/istock-1019006240-100798168-large.jpg -[2]: https://www.logmeinrescue.com/resources/datasheets/infographic-mobile-support-are-your-employees-getting-what-they-need?utm_source=idg%20media&utm_medium=display&utm_campaign=native&sfdc= -[3]: https://www.logmeinrescue.com/resources/analyst-reports/the-importance-of-remote-support-in-a-shift-left-world?utm_source=idg%20media&utm_medium=display&utm_campaign=native&sfdc= -[4]: https://www.logmeinrescue.com/?utm_source=idg%20media&utm_medium=display&utm_campaign=native&sfdc= -[5]: https://www.brighttalk.com/webcast/8855/312289?utm_source=LogMeIn7&utm_medium=brighttalk&utm_campaign=312289 diff --git a/sources/talk/20190611 6 ways to make enterprise IoT cost effective.md b/sources/talk/20190611 6 ways to make enterprise IoT cost effective.md deleted file mode 100644 index 492262c617..0000000000 --- a/sources/talk/20190611 6 ways to make enterprise IoT cost effective.md +++ /dev/null @@ -1,89 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (6 ways to make enterprise IoT cost effective) -[#]: via: (https://www.networkworld.com/article/3401082/6-ways-to-make-enterprise-iot-cost-effective.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -6 ways to make enterprise IoT cost effective -====== -Rob Mesirow, a principal at PwC’s Connected Solutions unit, offers tips for successfully implementing internet of things (IoT) projects without breaking the bank. -![DavidLeshem / Getty][1] - -There’s little question that the internet of things (IoT) holds enormous potential for the enterprise, in everything from asset tracking to compliance. - -But enterprise uses of IoT technology are still evolving, and it’s not yet entirely clear which use cases and practices currently make economic and business sense. So, I was thrilled to trade emails recently with [Rob Mesirow][2], a principal at [PwC’s Connected Solutions][3] unit, about how to make enterprise IoT implementations as cost effective as possible. - -“The IoT isn’t just about technology (hardware, sensors, software, networks, communications, the cloud, analytics, APIs),” Mesirow said, “though tech is obviously essential. It also includes ensuring cybersecurity, managing data governance, upskilling the workforce and creating a receptive workplace culture, building trust in the IoT, developing interoperability, and creating business partnerships and ecosystems—all part of a foundation that’s vital to a successful IoT implementation.” - -**[ Also read:[Enterprise IoT: Companies want solutions in these 4 areas][4] ]** - -Yes, that sounds complicated—and a lot of work for a still-hard-to-quantify return. Fortunately, though, Mesirow offered up some tips on how companies can make their IoT implementations as cost effective as possible. - -### 1\. Don’t wait for better technology - -Mesirow advised against waiting to implement IoT projects until you can deploy emerging technology such as [5G networks][5]. That makes sense, as long as your implementation doesn’t specifically require capabilities available only in the new technology. - -### 2\. Start with the basics, and scale up as needed - -“Companies need to start with the basics—building one app/task at a time—instead of jumping ahead with enterprise-wide implementations and ecosystems,” Mesirow said. - -“There’s no need to start an IoT initiative by tackling a huge, expensive ecosystem. Instead, begin with one manageable use case, and build up and out from there. The IoT can inexpensively automate many everyday tasks to increase effectiveness, employee productivity, and revenue.” - -After you pick the low-hanging fruit, it’s time to become more ambitious. - -“After getting a few successful pilots established, businesses can then scale up as needed, building on the established foundation of business processes, people experience, and technology," Mesirow said, - -### 3\. Make dumb things smart - -Of course, identifying the ripest low-hanging fruit isn’t always easy. - -“Companies need to focus on making dumb things smart, deploying infrastructure that’s not going to break the bank, and providing enterprise customers the opportunity to experience what data intelligence can do for their business,” Mesirow said. “Once they do that, things will take off.” - -### 4\. Leverage lower-cost networks - -“One key to building an IoT inexpensively is to use low-power, low-cost networks (Low-Power Wide-Area Networks (LPWAN)) to provide IoT services, which reduces costs significantly,” Mesirow said. - -Naturally, he mentioned that PwC has three separate platforms with some 80 products that hang off those platforms, which he said cost “a fraction of traditional IoT offerings, with security and privacy built in.” - -Despite the product pitch, though, Mesirow is right to call out the efficiencies involved in using low-cost, low-power networks instead of more expensive existing cellular. - -### 5\. Balance security vs. cost - -Companies need to plan their IoT network with costs vs. security in mind, Mesirow said. “Open-source networks will be less expensive, but there may be security concerns,” he said. - -That’s true, of course, but there may be security concerns in _any_ network, not just open-source solutions. Still, Mesirow’s overall point remains valid: Enterprises need to carefully consider all the trade-offs they’re making in their IoT efforts. - -### 6\. Account for _all_ the value IoT provides - -Finally, Mesirow pointed out that “much of the cost-effectiveness comes from the _value_ the IoT provides,” and its important to consider the return, not just the investment. - -“For example,” Mesirow said, the IoT “increases productivity by enabling the remote monitoring and control of business operations. It saves on energy costs by automatically turning off lights and HVAC when spaces are vacant, and predictive maintenance alerts lead to fewer machine repairs. And geolocation can lead to personalized marketing to customer smartphones, which can increase sales to nearby stores.” - -**[ Now read this:[5 reasons the IoT needs its own networks][6] ]** - -Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3401082/6-ways-to-make-enterprise-iot-cost-effective.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/money_financial_salary_growth_currency_by-davidleshem-100787975-large.jpg -[2]: https://twitter.com/robmesirow -[3]: https://digital.pwc.com/content/pwc-digital/en/products/connected-solutions.html -[4]: https://www.networkworld.com/article/3396128/the-state-of-enterprise-iot-companies-want-solutions-for-these-4-areas.html -[5]: https://www.networkworld.com/article/3203489/what-is-5g-how-is-it-better-than-4g.html -[6]: https://www.networkworld.com/article/3284506/5-reasons-the-iot-needs-its-own-networks.html -[7]: https://www.facebook.com/NetworkWorld/ -[8]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190611 The carbon footprints of IT shops that train AI models are huge.md b/sources/talk/20190611 The carbon footprints of IT shops that train AI models are huge.md deleted file mode 100644 index b440b8d65b..0000000000 --- a/sources/talk/20190611 The carbon footprints of IT shops that train AI models are huge.md +++ /dev/null @@ -1,68 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (The carbon footprints of IT shops that train AI models are huge) -[#]: via: (https://www.networkworld.com/article/3401919/the-carbon-footprints-of-it-shops-that-train-ai-models-are-huge.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -The carbon footprints of IT shops that train AI models are huge -====== -Artificial intelligence (AI) model training can generate five times more carbon dioxide than a car does in a lifetime, researchers at the University of Massachusetts, Amherst find. -![ipopba / Getty Images][1] - -A new research paper from the University of Massachusetts, Amherst looked at the carbon dioxide (CO2) generated over the course of training several common large artificial intelligence (AI) models and found that the process can generate nearly five times the amount as an average American car over its lifetime plus the process of making the car itself. - -The [paper][2] specifically examined the model training process for natural-language processing (NLP), which is how AI handles natural language interactions. The study found that during the training process, more than 626,000 pounds of carbon dioxide is generated. - -This is significant, since AI training is one IT process that has remained firmly on-premises and not moved to the cloud. Very expensive equipment is needed, as is large volumes of data, so the cloud isn’t right work for most AI training, and the report notes this. Plus, IT shops want to keep that kind of IP in house. So, if you are experimenting with AI, that power bill is going to go up. - -**[ Read also:[How to plan a software-defined data-center network][3] ]** - -While the report used carbon dioxide as a measure, that’s still the product of electricity generation. Training involves the use of the most powerful processors, typically Nvidia GPUs, and they are not known for being low-power draws. And as the paper notes, “model training also incurs a substantial cost to the environment due to the energy required to power this hardware for weeks or months at a time.” - -Training is the most processor-intensive portion of AI. It can take days, weeks, or even months to “learn” what the model needs to know. That means power-hungry Nvidia GPUs running at full utilization for the entire time. In this case, how to handle and process natural language questions rather than broken sentences of keywords like your typical Google search. - -The report said training one model with a neural architecture generated 626,155 pounds of CO2. By contrast, one passenger flying round trip between New York and San Francisco would generate 1,984 pounds of CO2, an average American would generate 11,023 pounds in one year, and a car would generate 126,000 pounds over the course of its lifetime. - -### How the researchers calculated the CO2 amounts - -The researchers used four models in the NLP field that have been responsible for the biggest leaps in performance. They are Transformer, ELMo, BERT, and GPT-2. They trained all of the models on a single Nvidia Titan X GPU, with the exception of ELMo which was trained on three Nvidia GTX 1080 Ti GPUs. Each model was trained for a maximum of one day. - -**[[Learn Java from beginning concepts to advanced design patterns in this comprehensive 12-part course!][4] ]** - -They then used the number of training hours listed in the model’s original papers to calculate the total energy consumed over the complete training process. That number was converted into pounds of carbon dioxide equivalent based on the average energy mix in the U.S. - -The big takeaway is that computational costs start out relatively inexpensive, but they mushroom when additional tuning steps were used to increase the model’s final accuracy. A tuning process known as neural architecture search ([NAS][5]) is the worst offender because it does so much processing. NAS is an algorithm that searches for the best neural network architecture. It is seriously advanced AI and requires the most processing time and power. - -The researchers suggest it would be beneficial to directly compare different models to perform a cost-benefit (accuracy) analysis. - -“To address this, when proposing a model that is meant to be re-trained for downstream use, such as re-training on a new domain or fine-tuning on a new task, authors should report training time and computational resources required, as well as model sensitivity to hyperparameters. This will enable direct comparison across models, allowing subsequent consumers of these models to accurately assess whether the required computational resources,” the authors wrote. - -They also say researchers who are cost-constrained should pool resources and avoid the cloud, as cloud compute time is more expensive. In an example, it said a GPU server with eight Nvidia 1080 Ti GPUs and supporting hardware is available for approximately $20,000. To develop the sample models used in their study, that hardware would cost $145,000, plus electricity to run the models, about half the estimated cost to use on-demand cloud GPUs. - -“Unlike money spent on cloud compute, however, that invested in centralized resources would continue to pay off as resources are shared across many projects. A government-funded academic compute cloud would provide equitable access to all researchers,” they wrote. - -Join the Network World communities on [Facebook][6] and [LinkedIn][7] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3401919/the-carbon-footprints-of-it-shops-that-train-ai-models-are-huge.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/ai-vendor-relationship-management_artificial-intelligence_hand-on-virtual-screen-100795246-large.jpg -[2]: https://arxiv.org/abs/1906.02243 -[3]: https://www.networkworld.com/article/3284352/data-center/how-to-plan-a-software-defined-data-center-network.html -[4]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fjava -[5]: https://www.oreilly.com/ideas/what-is-neural-architecture-search -[6]: https://www.facebook.com/NetworkWorld/ -[7]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190612 IoT security vs. privacy- Which is a bigger issue.md b/sources/talk/20190612 IoT security vs. privacy- Which is a bigger issue.md deleted file mode 100644 index 2f06f6afc1..0000000000 --- a/sources/talk/20190612 IoT security vs. privacy- Which is a bigger issue.md +++ /dev/null @@ -1,95 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (IoT security vs. privacy: Which is a bigger issue?) -[#]: via: (https://www.networkworld.com/article/3401522/iot-security-vs-privacy-which-is-a-bigger-issue.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -IoT security vs. privacy: Which is a bigger issue? -====== -When it comes to the internet of things (IoT), security has long been a key concern. But privacy issues could be an even bigger threat. -![Ring][1] - -If you follow the news surrounding the internet of things (IoT), you know that security issues have long been a key concern for IoT consumers, enterprises, and vendors. Those issues are very real, but I’m becoming increasingly convinced that related but fundamentally different _privacy_ vulnerabilities may well be an even bigger threat to the success of the IoT. - -In June alone, we’ve seen a flood of IoT privacy issues inundate the news cycle, and observers are increasingly sounding the alarm that IoT users should be paying attention to what happens to the data collected by IoT devices. - -**[ Also read:[It’s time for the IoT to 'optimize for trust'][2] and [A corporate guide to addressing IoT security][2] ]** - -Predictably, most of the teeth-gnashing has come on the consumer side, but that doesn’t mean enterprises users are immune to the issue. One the one hand, just like consumers, companies are vulnerable to their proprietary information being improperly shared and misused. More immediately, companies may face backlash from their own customers if they are seen as not properly guarding the data they collect via the IoT. Too often, in fact, enterprises shoot themselves in the foot on privacy issues, with practices that range from tone-deaf to exploitative to downright illegal—leading almost [two-thirds (63%) of consumers to describe IoT data collection as “creepy,”][3] while more than half (53%) “distrust connected devices to protect their privacy and handle information in a responsible manner.” - -### Ring becoming the poster child for IoT privacy issues - -As a case in point, let’s look at the case of [Ring, the IoT doorbell company now owned by Amazon][4]. Ring is [reportedly working with police departments to build a video surveillance network in residential neighborhoods][5]. Police in more than 50 cities and towns across the country are apparently offering free or discounted Ring doorbells, and sometimes requiring the recipients to share footage for use in investigations. (While [Ring touts the security benefits][6] of working with law enforcement, it has asked police departments to end the practice of _requiring_ users to hand over footage, as it appears to violate the devices’ terms of service.) - -Many privacy advocates are troubled by this degree of cooperation between police and Ring, but that’s only part of the problem. Last year, for example, [Ring workers in Ukraine reportedly watched customer feeds][7]. Amazingly, though, even that only scratches the surface of the privacy flaps surrounding Ring. - -### Guilty by video? - -According to [Motherboard][8], “Ring is using video captured by its doorbell cameras in Facebook advertisements that ask users to identify and call the cops on a woman whom local police say is a suspected thief.” While the police are apparently appreciative of the “additional eyes that may see this woman and recognize her,” the ad calls the woman a thief even though she has not been charged with a crime, much less convicted! - -Ring may be today’s poster child for IoT privacy issues, but IoT privacy complaints are widespread. In many cases, it comes down to what IoT users—or others nearby—are getting in return for giving up their privacy. According to the [Guardian][9], for example, Google’s Sidewalk Labs smart city project is little more than “surveillance capitalism.” And while car owners may get a discount on auto insurance in return for sharing their driving data, that relationship is hardly set in stone. It may not be long before drivers have to give up their data just to get insurance at all. - -**[[Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][10] ]** - -And as the recent [data breach at the U.S. Customs and Border Protection][11] once again demonstrates, private data is “[a genie without a bottle][12].” No matter what legal or technical protections are put in place, the data may always be revealed or used in unforeseen ways. Heck, when you put it all together, it’s enough to make you wonder [whether doorbells really need to be smart][13] at all? - -**Read more about IoT:** - - * [Google’s biggest, craziest ‘moonshot’ yet][14] - * [What is the IoT? How the internet of things works][15] - * [What is edge computing and how it’s changing the network][16] - * [Most powerful internet of things companies][17] - * [10 Hot IoT startups to watch][18] - * [The 6 ways to make money in IoT][19] - * [What is digital twin technology? [and why it matters]][20] - * [Blockchain, service-centric networking key to IoT success][21] - * [Getting grounded in IoT networking and security][22] - * [Building IoT-ready networks must become a priority][23] - * [What is the Industrial IoT? [And why the stakes are so high]][24] - - - -Join the Network World communities on [Facebook][25] and [LinkedIn][26] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3401522/iot-security-vs-privacy-which-is-a-bigger-issue.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/04/ringvideodoorbellpro-100794084-large.jpg -[2]: https://www.networkworld.com/article/3269165/internet-of-things/a-corporate-guide-to-addressing-iot-security-concerns.html -[3]: https://www.cpomagazine.com/data-privacy/consumers-still-concerned-about-iot-security-and-privacy-issues/ -[4]: https://www.cnbc.com/2018/02/27/amazon-buys-ring-a-former-shark-tank-reject.html -[5]: https://www.cnet.com/features/amazons-helping-police-build-a-surveillance-network-with-ring-doorbells/ -[6]: https://blog.ring.com/2019/02/14/how-rings-neighbors-creates-safer-more-connected-communities/ -[7]: https://www.theinformation.com/go/b7668a689a -[8]: https://www.vice.com/en_us/article/pajm5z/amazon-home-surveillance-company-ring-law-enforcement-advertisements -[9]: https://www.theguardian.com/cities/2019/jun/06/toronto-smart-city-google-project-privacy-concerns -[10]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr -[11]: https://www.washingtonpost.com/technology/2019/06/10/us-customs-border-protection-says-photos-travelers-into-out-country-were-recently-taken-data-breach/?utm_term=.0f3a38aa40ca -[12]: https://smartbear.com/blog/test-and-monitor/data-scientists-are-sexy-and-7-more-surprises-from/ -[13]: https://slate.com/tag/should-this-thing-be-smart -[14]: https://www.networkworld.com/article/3058036/google-s-biggest-craziest-moonshot-yet.html -[15]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[16]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[17]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[18]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[19]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[20]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[21]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[22]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[23]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[24]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[25]: https://www.facebook.com/NetworkWorld/ -[26]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190612 Software Defined Perimeter (SDP)- Creating a new network perimeter.md b/sources/talk/20190612 Software Defined Perimeter (SDP)- Creating a new network perimeter.md deleted file mode 100644 index 88a540e875..0000000000 --- a/sources/talk/20190612 Software Defined Perimeter (SDP)- Creating a new network perimeter.md +++ /dev/null @@ -1,121 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Software Defined Perimeter (SDP): Creating a new network perimeter) -[#]: via: (https://www.networkworld.com/article/3402258/software-defined-perimeter-sdp-creating-a-new-network-perimeter.html) -[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/) - -Software Defined Perimeter (SDP): Creating a new network perimeter -====== -Considering the way networks work today and the change in traffic patterns; both internal and to the cloud, this limits the effect of the fixed perimeter. -![monsitj / Getty Images][1] - -Networks were initially designed to create internal segments that were separated from the external world by using a fixed perimeter. The internal network was deemed trustworthy, whereas the external was considered hostile. However, this is still the foundation for most networking professionals even though a lot has changed since the inception of the design. - -More often than not the fixed perimeter consists of a number of network and security appliances, thereby creating a service chained stack, resulting in appliance sprawl. Typically, the appliances that a user may need to pass to get to the internal LAN may vary. But generally, the stack would consist of global load balancers, external firewall, DDoS appliance, VPN concentrator, internal firewall and eventually LAN segments. - -The perimeter approach based its design on visibility and accessibility. If an entity external to the network can’t see an internal resource, then access cannot be gained. As a result, external entities were blocked from coming in, yet internal entities were permitted to passage out. However, it worked only to a certain degree. Realistically, the fixed network perimeter will always be breachable; it's just a matter of time. Someone with enough skill will eventually get through. - -**[ Related:[MPLS explained – What you need to know about multi-protocol label switching][2]** - -### Environmental changes – the cloud and mobile workforce - -Considering the way networks work today and the change in traffic patterns; both internal and to the cloud, this limits the effect of the fixed perimeter. Nowadays, we have a very fluid network perimeter with many points of entry. - -Imagine a castle with a portcullis that was used to gain access. To gain entry into the portcullis was easy as we just needed to pass one guard. There was only one way in and one way out. But today, in this digital world, we have so many small doors and ways to enter, all of which need to be individually protected. - -This boils down to the introduction of cloud-based application services and changing the location of the perimeter. Therefore, the existing networking equipment used for the perimeter is topologically ill-located. Nowadays, everything that is important is outside the perimeter, such as, remote access workers, SaaS, IaaS and PaaS-based applications. - -Users require access to the resources in various cloud services regardless of where the resources are located, resulting in complex-to-control multi-cloud environments. Objectively, the users do not and should not care where the applications are located. They just require access to the application. Also, the increased use of mobile workforce that demands anytime and anywhere access from a variety of devices has challenged the enterprises to support this dynamic workforce. - -There is also an increasing number of devices, such as, BYOD, on-site contractors, and partners that will continue to grow internal to the network. This ultimately leads to a world of over-connected networks. - -### Over-connected networks - -Over-connected networks result in complex configurations of network appliances. This results in large and complex policies without any context. - -They provide a level of coarse-grained access to a variety of services where the IP address does not correspond to the actual user. Traditional appliances that use static configurations to limit the incoming and outgoing traffic are commonly based on information in the IP packet and the port number. - -Essentially, there is no notion of policy and explanation of why a given source IP address is on the list. This approach fails to take into consideration any notion of trust and dynamically adjust access in relation to the device, users and application request events. - -### Problems with IP addresses - -Back in the early 1990s, RFC 1597 declared three IP ranges reserved for private use: 10.0.0.0/8, 172.16.0.0/12 and 192.168.0.0/16. If an end host was configured with one of these addresses, it was considered more secure. However, this assumption of trust was shattered with the passage of time and it still haunts us today. - -Network Address Translation (NAT) also changed things to a great extent. NAT allowed internal trusted hosts to communicate directly with the external untrusted hosts. However, since Transmission Control Protocol (TCP) is bidirectional, it allows the data to be injected by the external hosts while connecting back to the internal hosts. - -Also, there is no contextual information regarding the IP addresses as the sole purpose revolved around connectivity. If you have the IP address of someone, you can connect to them. The authentication was handled higher up in the stack. - -Not only do user’s IP addresses change regularly, but there’s also not a one-to-one correspondence between the users and IP addresses. Anyone can communicate from any IP address they please and also insert themselves between you and the trusted resource. - -Have you ever heard of the 20-year old computer that responds to an internet control message protocol (ICMP) request, yet no one knows where it is? But this would not exist on a zero trust network as the network is dark until the administrator turns the lights on with a whitelist policy rule set. This is contrary to the legacy black policy rule set. You can find more information on zero trust in my course: [Zero Trust Networking: The Big Picture][3]. - -Therefore, we can’t just rely on the IP addresses and expect them to do much more other than connect. As a result, we have to move away from the IP addresses and network location as the proxy for access trust. The network location can longer be the driver of network access levels. It is not fully equipped to decide the trust of a device, user or application. - -### Visibility – a major gap - -When we analyze networking and its flaws, visibility is a major gap in today’s hybrid environments. By and large, enterprise networks are complex beasts. More than often networking pros do not have accurate data or insights into who or what is accessing the network resource. - -I.T does not have the visibility in place to detect, for example, insecure devices, unauthorized users and potentially harmful connections that could propagate malware or perform data exfiltration. - -Also, once you know how network elements connect, how do you ensure that they don’t reconnect through a broader definition of connectivity? For this, you need contextual visibility. You need full visibility into the network to see who, what, when, and how they are connecting with the device. - -### What’s the workaround? - -A new approach is needed that enables the application owners to protect the infrastructure located in a public or private cloud and on-premise data center. This new network architecture is known as [software-defined perimeter][4] (SDP). Back in 2013, Cloud Security Alliance (CSA) launched the SDP initiative, a project designed to develop the architecture for creating more robust networks. - -The principles behind SDPs are not entirely new. Organizations within the DoD and Intelligence Communities (IC) have implemented a similar network architecture that is based on authentication and authorization prior to network access. - -Typically, every internal resource is hidden behind an appliance. And a user must authenticate before visibility of the authorized services is made available and access is granted. - -### Applying the zero trust framework - -SDP is an extension to [zero trust][5] which removes the implicit trust from the network. The concept of SDP started with Google’s BeyondCorp, which is the general direction that the industry is heading to right now. - -Google’s BeyondCorp puts forward the idea that the corporate network does not have any meaning. The trust regarding accessing an application is set by a static network perimeter containing a central appliance. This appliance permits the inbound and outbound access based on a very coarse policy. - -However, access to the application should be based on other parameters such as who the user is, the judgment of the security stance of the device, followed by some continuous assessment of the session. Rationally, only then should access be permitted. - -Let’s face it, the assumption that internal traffic can be trusted is flawed and zero trust assumes that all hosts internal to the network are internet facing, thereby hostile. - -### What is software-defined perimeter (SDP)? - -The SDP aims to deploy perimeter functionality for dynamically provisioned perimeters meant for clouds, hybrid environments, and on-premise data center infrastructures. There is often a dynamic tunnel that automatically gets created during the session. That is a one-to-one mapping between the requesting entity and the trusted resource. The important point to note here is that perimeters are formed not solely to obey a fixed location already design by the network team. - -SDP relies on two major pillars and these are the authentication and authorization stages. SDPs require endpoints to authenticate and be authorized first before obtaining network access to the protected entities. Then, encrypted connections are created in real-time between the requesting systems and application infrastructure. - -Authenticating and authorizing the users and their devices before even allowing a single packet to reach the target service, enforces what's known as least privilege at the network layer. Essentially, the concept of least privilege is for an entity to be granted only the minimum privileges that it needs to get its work done. Within a zero trust network, privilege is more dynamic than it would be in traditional networks since it uses many different attributes of activity to determine the trust score. - -### The dark network - -Connectivity is based on a need-to-know model. Under this model, no DNS information, internal IP addresses or visible ports of internal network infrastructure are transmitted. This is the reason why SDP assets are considered as “dark”. As a result, SDP isolates any concerns about the network and application. The applications and users are considered abstract, be it on-premise or in the cloud, which becomes irrelevant to the assigned policy. - -Access is granted directly between the users and their devices to the application and resource, regardless of the underlying network infrastructure. There simply is no concept of inside and outside of the network. This ultimately removes the network location point as a position of advantage and also eliminates the excessive implicit trust that IP addresses offer. - -**This article is published as part of the IDG Contributor Network.[Want to Join?][6]** - -Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3402258/software-defined-perimeter-sdp-creating-a-new-network-perimeter.html - -作者:[Matt Conran][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Matt-Conran/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/03/sdn_software-defined-network_architecture-100791938-large.jpg -[2]: https://www.networkworld.com/article/2297171/sd-wan/network-security-mpls-explained.html -[3]: http://pluralsight.com/courses/zero-trust-networking-big-picture -[4]: https://network-insight.net/2018/09/software-defined-perimeter-zero-trust/ -[5]: https://network-insight.net/2018/10/zero-trust-networking-ztn-want-ghosted/ -[6]: /contributor-network/signup.html -[7]: https://www.facebook.com/NetworkWorld/ -[8]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190613 Data centers should sell spare UPS capacity to the grid.md b/sources/talk/20190613 Data centers should sell spare UPS capacity to the grid.md deleted file mode 100644 index 69b4356661..0000000000 --- a/sources/talk/20190613 Data centers should sell spare UPS capacity to the grid.md +++ /dev/null @@ -1,59 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Data centers should sell spare UPS capacity to the grid) -[#]: via: (https://www.networkworld.com/article/3402039/data-centers-should-sell-spare-ups-capacity-to-the-grid.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Data centers should sell spare UPS capacity to the grid -====== -Distributed Energy is gaining traction, providing an opportunity for data centers to sell excess power in data center UPS batteries to the grid. -![Getty Images][1] - -The energy storage capacity in uninterruptable power supply (UPS) batteries, languishing often dormant in data centers, could provide new revenue streams for those data centers, says Eaton, a major electrical power management company. - -Excess, grid-generated power, created during times of low demand, should be stored on the now-proliferating lithium-backup power systems strewn worldwide in data centers, Eaton says. Then, using an algorithm tied to grid-demand, electricity should be withdrawn as necessary for grid use. It would then be slid back onto the backup batteries when not needed. - -**[ Read also:[How server disaggregation can boost data center efficiency][2] | Get regularly scheduled insights: [Sign up for Network World newsletters][3] ]** - -The concept is called Distributed Energy and has been gaining traction in part because electrical generation is changing—emerging green power, such as wind and solar, being used now at the grid-level have considerations that differ from the now-retiring, fossil-fuel power generation. You can generate solar only in daylight, yet much demand takes place on dark evenings, for example. - -Coal, gas, and oil deliveries have always been, to a great extent, pre-planned, just-in-time, and used for electrical generation in real time. Nowadays, though, fluctuations between supply, storage, and demand are kicking in. Electricity storage on the grid is required. - -Eaton says that by piggy-backing on existing power banks, electricity distribution could be evened out better. The utilities would deliver power more efficiently, despite the peaks and troughs in demand—with the data center UPS, in effect, acting like a quasi-grid-power storage battery bank, or virtual power plant. - -The objective of this UPS use case, called EnergyAware, is to regulate frequency in the grid. That’s related to the tolerances needed to make the grid work—the cycles per second, or hertz, inherent in electrical current can’t deviate too much. Abnormalities happen if there’s a suddent spike in demand but no power on hand to supply the surge. - -### How the Distributed Energy concept works - -The distributed energy resource (DER), which can be added to any existing lithium-ion battery bank, in any building, allows for the consumption of energy, or the distribution of it, based on a Frequency Regulation grid-demand algorithm. It charges or discharges the backup battery, connected to the grid, thus balancing the grid frequency. - -Often, not much power will need to be removed, just “micro-bursts of energy,” explains Sean James, director of Energy Research at Microsoft, in an Eaton-published promotional video. Microsoft Innovation Center in Virginia has been working with Eaton on the project. Those bursts are enough to get the frequency tolerances back on track, but the UPS still functions as designed. - -Eaton says data centers should start participating in energy markets. That could mean bidding, as a producer of power, to those who need to buy it—the electricity market, also known as the grid. Data centers could conceivably even switch on generators to operate the data halls if the price for its battery-stored power was particularly lucrative at certain times. - -“A data center in the future wouldn’t just be a huge load on the grid,” James says. “In the future, you don’t have a data center or a power plant. It’s something in the middle. A data plant,” he says on the Eaton [website][4]. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3402039/data-centers-should-sell-spare-ups-capacity-to-the-grid.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/10/business_continuity_server-100777720-large.jpg -[2]: https://www.networkworld.com/article/3266624/how-server-disaggregation-could-make-cloud-datacenters-more-efficient.html -[3]: https://www.networkworld.com/newsletters/signup.html -[4]: https://www.eaton.com/us/en-us/products/backup-power-ups-surge-it-power-distribution/backup-power-ups/dual-purpose-ups-technology.html -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190617 5 transferable higher-education skills.md b/sources/talk/20190617 5 transferable higher-education skills.md deleted file mode 100644 index db0f584aaf..0000000000 --- a/sources/talk/20190617 5 transferable higher-education skills.md +++ /dev/null @@ -1,64 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (5 transferable higher-education skills) -[#]: via: (https://opensource.com/article/19/6/5-transferable-higher-education-skills) -[#]: author: (Stephon Brown https://opensource.com/users/stephb) - -5 transferable higher-education skills -====== -If you're moving from the Ivory Tower to the Matrix, you already have -the foundation for success in the developer role. -![Two hands holding a resume with computer, clock, and desk chair ][1] - -My transition from a higher-education professional into the tech realm was comparable to moving from a pond into an ocean. There was so much to learn, and after learning, there was still so much more to learn! - -Rather than going down the rabbit hole and being overwhelmed by what I did not know, in the last two to three months, I have been able to take comfort in the realization that I was not entirely out of my element as a developer. The skills I acquired during my six years as a university professional gave me the foundation to be successful in the developer role. - -These skills are transferable in any direction you plan to go within or outside tech, and it's valuable to reflect on how they apply to your new position. - -### 1\. Composition and documentation - -Higher education is replete with opportunities to develop skills related to composition and communication. In most cases, clear writing and communication are mandatory requirements for university administrative and teaching positions. Although you may not yet be well-versed in deep technical concepts, learning documentation and writing your progress may be two of the strongest skills you bring as a former higher education administrator. All of those "In response to…" emails will finally come in handy when describing the inner workings of a class or leaving succinct comments for other developers to follow what you have implemented. - -### 2\. Problem-solving and critical thinking - -Whether you've been an adviser who sits with students and painstakingly develops class schedules for graduation or a finance buff who balances government funds, you will not leave critical thinking behind as you transition into a developer role. Although your critical thinking may have seemed specialized for your work, the skill of turning problems into opportunities is not lost when contributing to code. The experience gained while spending long days and nights revising recruitment strategies will be necessary when composing algorithms and creative ways of delivering data. Continue to foster a passion for solving problems, and you will not have any trouble becoming an efficient and skillful developer. - -### 3\. Communication - -Though it may seem to overlap with writing (above), communication spans verbal and written disciplines. When you're interacting with clients and leadership, you may have a leg up over your peers because of your higher-education experience. Being approachable and understanding how to manage interactions are skills that some software practitioners may not have fostered to an impactful level. Although you will experience days of staring at a screen and banging your head against the keyboard, you can rest well in knowing you can describe technical concepts and interact with a wide range of audiences, from clients to peers. - -### 4\. Leadership - -Sitting on that panel; planning that event; leading that workshop. All of those experiences provide you with the grounding to plan and lead smaller projects as a new developer. Leadership is not limited to heading up large and small teams; its essence lies in taking initiative. This can be volunteering to do research on a new feature or do more extensive unit tests for your code. However you use it, your foundation as an educator will allow you to go further in technology development and maintenance. - -### 5\. Research - -You can Google with the best of them. Being able to clearly truncate your query into the idea you are searching for is characteristic of a higher-education professional. Most administrator or educator jobs focus on solving problems in a defined process for qualitative, quantitative, or mixed results; therefore, cultivating your scientific mind is valuable when providing software solutions. Your research skills also open opportunities for branching into data science and machine learning. - -### Bonus: Collaboration - -Being able to reach across various offices and fields for event planning and program implementation fit well within team collaboration—both within your new team and across development teams. This may leak into the project management realm, but being able to plan and divide work between teams and establish accountability will allow you as a new developer to understand the software development lifecycle process a little more intimately because of your past related experience. - -### Summary - -As a developer jumping head-first into technology after years of walking students through the process of navigating higher education, [imposter syndrome][2] has been a constant fear since moving into technology. However, I have been able to take heart in knowing my experience as an educator and an administrator has not gone in vain. If you are like me, be encouraged in knowing that these transferable skills, some of which fall into the soft-skills and other categories, will continue to benefit you as a developer and a professional. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/6/5-transferable-higher-education-skills - -作者:[Stephon Brown][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/stephb -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/resume_career_document_general.png?itok=JEaFL2XI (Two hands holding a resume with computer, clock, and desk chair ) -[2]: https://en.wikipedia.org/wiki/Impostor_syndrome diff --git a/sources/talk/20190618 17 predictions about 5G networks and devices.md b/sources/talk/20190618 17 predictions about 5G networks and devices.md deleted file mode 100644 index d8833f9887..0000000000 --- a/sources/talk/20190618 17 predictions about 5G networks and devices.md +++ /dev/null @@ -1,82 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (17 predictions about 5G networks and devices) -[#]: via: (https://www.networkworld.com/article/3403358/17-predictions-about-5g-networks-and-devices.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -17 predictions about 5G networks and devices -====== -Not surprisingly, the new Ericsson Mobility Report is bullish on the potential of 5G technology. Here’s a quick look at the most important numbers. -![Vertigo3D / Getty Images][1] - -_“As market after market switches on 5G, we are at a truly momentous point in time. No previous generation of mobile technology has had the potential to drive economic growth to the extent that 5G promises. It goes beyond connecting people to fully realizing the Internet of Things (IoT) and the Fourth Industrial Revolution.”_ —The opening paragraph of the [June 2019 Ericsson Mobility Report][2] - -Almost every significant technology advancement now goes through what [Gartner calls the “hype cycle.”][3] These days, Everyone expects new technologies to be met with gushing optimism and dreamy visions of how it’s going to change the world in the blink of an eye. After a while, we all come to expect the vendors and the press to go overboard with excitement, at least until reality and disappointment set in when things don’t pan out exactly as expected. - -**[ Also read:[The time of 5G is almost here][4] ]** - -Even with all that in mind, though, Ericsson’s whole-hearted embrace of 5G in its Internet Mobility Report is impressive. The optimism is backed up by lots of numbers, but they can be hard to tease out of the 36-document. So, let’s recap some of the most important top-line predictions (with my comments at the end). - -### Worldwide 5G growth projections - - 1. “More than 10 million 5G subscriptions are projected worldwide by the end of 2019.” - 2. “[We] now expect there to be 1.9 billion 5G subscriptions for enhanced mobile broadband by the end of 2024. This will account for over 20 percent of all mobile subscriptions at that time. The peak of LTE subscriptions is projected for 2022, at around 5.3 billion subscriptions, with the number declining slowly thereafter.” - 3. “In 2024, 5G networks will carry 35 percent of mobile data traffic globally.” - 4. “5G can cover up to 65 percent of the world’s population in 2024.” - 5. ”NB-IoT and Cat-M technologies will account for close to 45 percent of cellular IoT connections in 2024.” - 6. “By the end of 2024, nearly 35 percent of cellular IoT connections will be Broadband IoT, with 4G connecting the majority.” But 5G connections will support more advanced use cases. - 7. “Despite challenging 5G timelines, device suppliers are expected to be ready with different band and architecture support in a range of devices during 2019.” - 8. “Spectrum sharing … chipsets are currently in development and are anticipated to be in 5G commercial devices in late 2019." - 9. “[VoLTE][5] is the foundation for enabling voice and communication services on 5G devices. Subscriptions are expected to reach 2.1 billion by the end of 2019. … The number of VoLTE subscriptions is projected to reach 5.9 billion by the end of 2024, accounting for more than 85 percent of combined LTE and 5G subscriptions.” - - - -![][6] - -### Regional 5G projections - - 1. “In North America, … service providers have already launched commercial 5G services, both for fixed wireless access and mobile. … By the end of 2024, we anticipate close to 270 million 5G subscriptions in the region, accounting for more than 60 percent of mobile subscriptions.” - 2. “In Western Europe … The momentum for 5G in the region was highlighted by the first commercial launch in April. By the end of 2024, 5G is expected to account for around 40 percent of mobile subscriptions. - 3. In Central and Eastern Europe, … The first 5G subscriptions are expected in 2019, and will make up 15 percent of subscriptions in 2024.” - 4. “In North East Asia, … the region’s 5G subscription penetration is projected to reach 47 percent [by the end of 2024]. - 5. “[In India,] 5G subscriptions are expected to become available in 2022 and will represent 6 percent of mobile subscriptions at the end of 2024.” - 6. “In the Middle East and North Africa, we anticipate commercial 5G deployments with leading communications service providers during 2019, and significant volumes in 2021. … Around 60 million 5G subscriptions are forecast for the end of 2024, representing 3 percent of total mobile subscriptions.” - 7. “Initial 5G commercial devices are expected in the [South East Asia and Oceania] region during the first half of 2019. By the end of 2024, it is anticipated that almost 12 percent of subscriptions in the region will be for 5G.]” - 8. “In Latin America … the first 5G deployments will be possible in the 3.5GHz band during 2019. Argentina, Brazil, Chile, Colombia, and Mexico are anticipated to be the first countries in the region to deploy 5G, with increased subscription uptake forecast from 2020. By the end of 2024, 5G is set to make up 7 percent of mobile subscriptions.” - - - -### Is 5G really so inevitable? - -Considered individually, these predictions all seem perfectly reasonable. Heck, 10 million 5G subscriptions is only a drop in the global bucket. And rumors are already flying that Apple’s next round of iPhones will include 5G capability. Also, 2024 is still five years in the future, so why wouldn’t the faster connections drive impressive traffic stats? Similarly, North America and North East Asia will experience the fastest 5G penetration. - -But when you look at them all together, these numbers project a sense of 5G inevitability that could well be premature. It will take a _lot_ of spending, by a lot of different parties—carriers, chip makers, equipment vendors, phone manufacturers, and consumers—to make this kind of growth a reality. - -I’m not saying 5G won’t take over the world. I’m just saying that when so many things have to happen in a relatively short time, there are a lot of opportunities for the train to jump the tracks. Don’t be surprised if it takes longer than expected for 5G to turn into the worldwide default standard Ericsson—and everyone else—seems to think it will inevitably become. - -Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3403358/17-predictions-about-5g-networks-and-devices.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/5g_wireless_technology_network_connections_by_credit-vertigo3d_gettyimages-1043302218_3x2-100787550-large.jpg -[2]: https://www.ericsson.com/assets/local/mobility-report/documents/2019/ericsson-mobility-report-june-2019.pdf -[3]: https://www.gartner.com/en/research/methodologies/gartner-hype-cycle -[4]: https://www.networkworld.com/article/3354477/mobile-world-congress-the-time-of-5g-is-almost-here.html -[5]: https://www.gsma.com/futurenetworks/technology/volte/ -[6]: https://images.idgesg.net/images/article/2019/06/ericsson-mobility-report-june-2019-graph-100799481-large.jpg -[7]: https://www.facebook.com/NetworkWorld/ -[8]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190618 Why your workplace arguments aren-t as effective as you-d like.md b/sources/talk/20190618 Why your workplace arguments aren-t as effective as you-d like.md deleted file mode 100644 index 54a0cca26f..0000000000 --- a/sources/talk/20190618 Why your workplace arguments aren-t as effective as you-d like.md +++ /dev/null @@ -1,144 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Why your workplace arguments aren't as effective as you'd like) -[#]: via: (https://opensource.com/open-organization/19/6/barriers-productive-arguments) -[#]: author: (Ron McFarland https://opensource.com/users/ron-mcfarland/users/ron-mcfarland) - -Why your workplace arguments aren't as effective as you'd like -====== -Open organizations rely on open conversations. These common barriers to -productive argument often get in the way. -![Arrows pointing different directions][1] - -Transparent, frank, and often contentious arguments are part of life in an open organization. But how can we be sure those conversations are _productive_ —not _destructive_? - -This is the second installment of a two-part series on how to argue and actually achieve something. In the [first article][2], I mentioned what arguments are (and are not), according to author Sinnott-Armstrong in his book _Think Again: How to Reason and Argue._ I also offered some suggestions for making arguments as productive as possible. - -In this article, I'll examine three barriers to productive arguments that Sinnott-Armstrong elaborates in his book: incivility, polarization, and language issues. Finally, I'll explain his suggestions for addressing those barriers. - -### Incivility - -"Incivility" has become a social concern in recent years. Consider this: As a tactic in arguments, incivility _can_ have an effect in certain situations—and that's why it's a common strategy. Sinnott-Armstrong notes that incivility: - - * **Attracts attention:** Incivility draws people's attention in one direction, sometimes to misdirect attention from or outright obscure other issues. It redirects people's attention to shocking statements. Incivility, exaggeration, and extremism can increase the size of an audience. - - * **Energizes:** Sinnott-Armstrong writes that seeing someone being uncivil on a topic of interest can generate energy from a state of powerlessness. - - * **Stimulates memory:** Forgetting shocking statements is difficult; they stick in our memory more easily than statements that are less surprising to us. - - * **Excites the powerless:** The groups most likely to believe and invest in someone being uncivil are those that feel they're powerless and being treated unfairly. - - - - -Unfortunately, incivility as a tactic in arguments has its costs. One such cost is polarization. - -### Polarization - -Sinnott-Armstrong writes about five forms of polarization: - - * **Distance:** If two people's or groups' views are far apart according to some relevant scale, have significant disagreements and little common ground, then they're polarized. - - * **Differences:** If two people or groups have fewer values and beliefs _in common_ than they _don't have in common_ , then they're polarized. - - * **Antagonism:** Groups are more polarized the more they feel hatred, disdain, fear, or other negative emotions toward other people or groups. - - * **Incivility:** Groups tend to be more polarized when they talk more negatively about people of the other groups. - - * **Rigidity:** Groups tend to be more polarized when they treat their values as indisputable and will not compromise. - - * **Gridlock:** Groups tend to be more polarized when they're unable to cooperate and work together toward common goals. - - - - -And I'll add one more form of polarization to Sinnott-Armstrong's list: - - * **Non-disclosure:** Groups tend to be more polarized when one or both of the groups refuses to share valid, verifiable information—or when they distract each other with useless or irrelevant information. One of the ways people polarize is by not talking to each other and withhold information. Similarly, they talk on subjects that distract us from the issue at hand. Some issues are difficult to talk about, but by doing so solutions can be explored. - - - -### Language issues - -Identifying discussion-stoppers like these can help you avoid shutting down a discussion that would otherwise achieve beneficial outcomes. - -Language issues can be argument-stoppers Sinnott-Armstrong says. In particular, he outlines some of the following language-related barriers to productive argument. - - * **Guarding:** Using words like "all" can make a statement unbelievable; words like "sometimes" can make a statement too vague. - - * **Assuring:** Simply stating "trust me, I know what I'm talking about," without offering evidence that this is the case, can impede arguments. - - * **Evaluating:** Offering an evaluation of something—like saying "It is good"―without any supporting reasoning. - - * **Discounting:** This involves anticipating what the another person will say and attempting to weaken it as much as possible by framing an argument in a negative way. (Contrast these two sentences, for example: "Ramona is smart but boring" and "Ramona is boring but smart." The difference is subtle, but you'd probably want to spend less time with Ramona if you heard the first statement about her than if you heard the second.) - - - - -Identifying discussion-stoppers like these can help you avoid shutting down a discussion that would otherwise achieve beneficial outcomes. In addition, Sinnott-Armstrong specifically draws readers' attention to two other language problems that can kill productive debates: vagueness and ambiguity. - - * **Vagueness:** This occurs when a word or sentence is not precise enough and having many ways to interpret its true meaning and intent, which leads to confusion. Consider the sentence "It is big." "It" must be defined if it's not already obvious to everyone in the conversation. And a word like "big" must be clarified through comparison to something that everyone has agreed upon. - - * **Ambiguity:** This occurs when a sentence could have two distinct meanings. For example: "Police killed man with axe." Who was holding the axe, the man or the police? "My neighbor had a friend for dinner." Did your neighbor invite a friend to share a meal—or did she eat her friend? - - - - -### Overcoming barriers - -To help readers avoid these common roadblocks to productive arguments, Sinnott-Armstrong recommends a simple, four-step process for evaluating another person's argument. - - 1. **Observation:** First, observe a stated opinion and its related evidence to determine the precise nature of the claim. This might require you to ask some questions for clarification (you'll remember I employed this technique when arguing with my belligerent uncle, which I described [in the first article of this series][2]). - - 2. **Hypothesis:** Develop some hypothesis about the argument. In this case, the hypothesis should be an inference based on generally acceptable standards (for more on the structure of arguments themselves, also see [the first part of this series][2]). - - 3. **Comparison:** Compare that hypothesis with others and evaluate which is more accurate. More important issues will require you to conduct more comparisons. In other cases, premises are so obvious that no further explanation is required. - - 4. **Conclusion:** From the comparison analysis, reach a conclusion about whether your hypothesis about a competing argument is correct. - - - - -In many cases, the question is not whether a particular claim is _correct_ or _incorrect_ , but whether it is _believable._ So Sinnott-Armstrong also offers a four-step "believability test" for evaluating claims of this type. - - 1. **Expertise:** Does the person presenting the argument have authority in an appropriate field? Being a specialist is one field doesn't necessarily make that person an expert in another. - - 2. **Motive:** Would self-interest or other personal motives compel a person to withhold information or make false statements? To confirm one's statements, it might be wise to seek a totally separate, independent authority for confirmation. - - 3. **Sources:** Are the sources the person offers as evidence of a claim recognized experts? Do those sources have the expertise on the specific issue addressed? - - 4. **Agreement:** Is there agreement among many experts within the same specialty? - - - - -### Let's argue - -If you really want to strengthen your ability to argue, find someone that totally disagrees with you but wants to learn and understand your beliefs. - -When I was a university student, I would usually sit toward the front of the classroom. When I didn't understand something, I would start asking questions for clarification. Everyone else in the class would just sit silently, saying nothing. After class, however, other students would come up to me and thank me for asking those questions—because everyone else in the room was confused, too. - -Clarification is a powerful act—not just in the classroom, but during arguments anywhere. Building an organizational culture in which people feel empowered to ask for clarification is critical for productive arguments (I've [given presentations on this topic][3] before). If members have the courage to clarify premises, and they can do so in an environment where others don't think they're being belligerent, then this might be the key to a successful and productive argument. - -If you really want to strengthen your ability to argue, find someone that totally disagrees with you but wants to learn and understand your beliefs. Then, practice some of Sinnott-Armstrong's suggestions. Arguing productively will enhance [transparency, inclusivity, and collaboration][4] in your organization—leading to a more open culture. - --------------------------------------------------------------------------------- - -via: https://opensource.com/open-organization/19/6/barriers-productive-arguments - -作者:[Ron McFarland][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ron-mcfarland/users/ron-mcfarland -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/directions-arrows.png?itok=EE3lFewZ (Arrows pointing different directions) -[2]: https://opensource.com/open-organization/19/5/productive-arguments -[3]: https://www.slideshare.net/RonMcFarland1/argue-successfully-achieve-something -[4]: https://opensource.com/open-organization/resources/open-org-definition diff --git a/sources/talk/20190619 With Tableau, SaaS king Salesforce becomes a hybrid cloud company.md b/sources/talk/20190619 With Tableau, SaaS king Salesforce becomes a hybrid cloud company.md deleted file mode 100644 index d0d1d24cb6..0000000000 --- a/sources/talk/20190619 With Tableau, SaaS king Salesforce becomes a hybrid cloud company.md +++ /dev/null @@ -1,67 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (With Tableau, SaaS king Salesforce becomes a hybrid cloud company) -[#]: via: (https://www.networkworld.com/article/3403442/with-tableau-saas-king-salesforce-becomes-a-hybrid-cloud-company.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -With Tableau, SaaS king Salesforce becomes a hybrid cloud company -====== -Once dismissive of software, Salesforce acknowledges the inevitability of the hybrid cloud. -![Martyn Williams/IDGNS][1] - -I remember a time when people at Salesforce events would hand out pins that read “Software” inside a red circle with a slash through it. The High Priest of SaaS (a.k.a. CEO Marc Benioff) was so adamant against installed, on-premises software that his keynotes were always comical. - -Now, Salesforce is prepared to [spend $15.7 billion to acquire Tableau Software][2], the leader in on-premises data analytics. - -On the hell-freezes-over scale, this is up there with Microsoft embracing Linux or Apple PR people returning a phone call. Well, we know at least one of those has happened. - -**[ Also read:[Hybrid Cloud: The time for adoption is upon us][3] | Stay in the know: [Subscribe and get daily newsletter updates][4] ]** - -So, why would a company that is so steeped in the cloud, so anti-on-premises software, make such a massive purchase? - -Partly it is because Benioff and company are finally coming to the same conclusion as most everyone else: The hybrid cloud, a mix of on-premises systems and public cloud, is the wave of the future, and pure cloud plays are in the minority. - -The reality is that data is hybrid and does not sit in a single location, and Salesforce is finally acknowledging this, said Tim Crawford, president of Avoa, a strategic CIO advisory firm. - -“I see the acquisition of Tableau by Salesforce as less about getting into the on-prem game as it is a reality of the world we live in. Salesforce needed a solid analytics tool that went well beyond their existing capability. Tableau was that tool,” he said. - -**[[Become a Microsoft Office 365 administrator in record time with this quick start course from PluralSight.][5] ]** - -Salesforce also understands that they need a better understanding of customers and those data insights that drive customer decisions. That data is both on-prem and in the cloud, Crawford noted. It is in Salesforce, other solutions, and the myriad of Excel spreadsheets spread across employee systems. Tableau crosses the hybrid boundaries and brings a straightforward way to visualize data. - -Salesforce had analytics features as part of its SaaS platform, but it was geared around their own platform, whereas everyone uses Tableau and Tableau supports all manner of analytics. - -“There’s a huge overlap between Tableau customers and Salesforce customers,” Crawford said. “The data is everywhere in the enterprise, not just in Salesforce. Salesforce does a great job with its own data, but Tableau does great with data in a lot of places because it’s not tied to one platform. So, it opens up where the data comes from and the insights you get from the data.” - -Crawford said that once the deal is done and Tableau is under some deeper pockets, the organization may be able to innovate faster or do things they were unable to do prior. That hardly indicates Tableau was struggling, though. It pulled in [$1.16 billion in revenue][6] in 2018. - -Crawford also expects Salesforce to push Tableau to open up new possibilities for customer insights by unlocking customer data inside and outside of Salesforce. One challenge for the two companies is to maintain that neutrality so that they don’t lose the ability to use Tableau for non-customer centric activities. - -“It’s a beautiful way to visualize large sets of data that have nothing to do with customer centricity,” he said. - -Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3403442/with-tableau-saas-king-salesforce-becomes-a-hybrid-cloud-company.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.techhive.com/images/article/2015/09/150914-salesforce-dreamforce-2-100614575-large.jpg -[2]: https://www.cio.com/article/3402026/how-salesforces-tableau-acquisition-will-impact-it.html -[3]: http://www.networkworld.com/article/2172875/cloud-computing/hybrid-cloud--the-year-of-adoption-is-upon-us.html -[4]: https://www.networkworld.com/newsletters/signup.html -[5]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fcourses%2Fadministering-office-365-quick-start -[6]: https://www.geekwire.com/2019/tableau-hits-841m-annual-recurring-revenue-41-transition-subscription-model-continues/ -[7]: https://www.facebook.com/NetworkWorld/ -[8]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190620 Carrier services help expand healthcare, with 5G in the offing.md b/sources/talk/20190620 Carrier services help expand healthcare, with 5G in the offing.md deleted file mode 100644 index 072b172fda..0000000000 --- a/sources/talk/20190620 Carrier services help expand healthcare, with 5G in the offing.md +++ /dev/null @@ -1,85 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Carrier services help expand healthcare, with 5G in the offing) -[#]: via: (https://www.networkworld.com/article/3403366/carrier-services-help-expand-healthcare-with-5g-in-the-offing.html) -[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/) - -Carrier services help expand healthcare, with 5G in the offing -====== -Many telehealth initiatives tap into wireless networking supplied by service providers that may start offering services such as Citizen's Band and 5G to support remote medical care. -![Thinkstock][1] - -There are connectivity options aplenty for most types of [IoT][2] deployment, but the idea of simply handing the networking part of the equation off to a national licensed wireless carrier could be the best one for certain kinds of deployments in the medical field. - -Telehealth systems, for example, are still a relatively new facet of modern medicine, but they’re already among the most important applications that use carrier networks to deliver care. One such system is operated by the University of Mississippi Medical Center, for the treatment and education of diabetes patients. - -**[More on wireless:[The time of 5G is almost here][3]]** - -**[ Now read[20 hot jobs ambitious IT pros should shoot for][4]. ]** - -Greg Hall is the director of IT at UMMC’s center for telehealth. He said that the remote patient monitoring system is relatively simple by design – diabetes patients receive a tablet computer that they can use to input and track their blood sugar levels, alert clinicians to symptoms like nerve pain or foot sores, and even videoconference with their doctors directly. The tablet connects via Verizon, AT&T or CSpire – depending on who’s got the best coverage in a given area – back to UMMC’s servers. - -According to Hall, there are multiple advantages to using carrier connectivity instead of unlicensed (i.e. purpose-built [Wi-Fi][5] or other technology) to connect patients – some of whom live in remote parts of the state – to their caregivers. - -“We weren’t expecting everyone who uses the service to have Wi-Fi,” he said, “and they can take their tablet with them if they’re traveling.” - -The system serves about 250 patients in Mississippi, up from roughly 175 in the 2015 pilot program that got the effort off the ground. Nor is it strictly limited to diabetes care – Hall said that it’s already been extended to patients suffering from chronic obstructive pulmonary disease, asthma and even used for prenatal care, with further expansion in the offing. - -“The goal of our program isn’t just the monitoring piece, but also the education piece, teaching a person to live with their [condition] and thrive,” he said. - -It hasn’t all been smooth sailing. One issue was caused by the natural foliage of the area, as dense areas of pine trees can cause transmission problems, thanks to their needles being a particularly troublesome length and interfering with 2.5GHz wireless signals. But Hall said that the team has been able to install signal boosters or repeaters to overcome that obstacle. - -Neurologist Dr. Allen Gee’s practice in Wyoming attempts to address a similar issue – far-flung patients with medical needs that might not be addressed by the sparse local-care options. From his main office in Cody, he said, he can cover half the state via telepresence, using a purpose-built system that is based on cellular-data connectivity from TCT, Spectrum and AT&T, as well as remote audiovisual equipment and a link to electronic health records stored in distant locations. That allows him to receive patient data, audio/visual information and even imaging diagnostics remotely. Some specialists in the state are able to fly to those remote locations, others are not. - -While Gee’s preference is to meet with patients in person, that’s just not always possible, he said. - -“Medical specialists don’t get paid for windshield time,” he noted. “Being able to transfer information from an EHR facilitates the process of learning about the patient.” - -### 5G is coming** - -** - -According to Alan Stewart-Brown, vice president at infrastructure management vendor Opengear, there’s a lot to like about current carrier networks for medical use – particularly wide coverage and a lack of interference – but there are bigger things to come. - -“We have customers that have equipment in ambulances for instance, where they’re livestreaming patients’ vital signs to consoles that doctors can monitor,” he said. “They’re using carrier 4G for that right now and it works well enough, but there are limitations, namely latency, which you don’t get on [5G][6].” - -Beyond the simple fact of increased throughput and lower latency, widespread 5G deployments could open a wide array of new possibilities for medical technology, mostly involving real-time, very-high-definition video streaming. These include medical VR, remote surgery and the like. - -“The process you use to do things like real-time video – right now on a 4G network, that may or may not have a delay,” said Stewart-Brown. “Once you can get rid of the delay, the possibilities are endless as to what you can use the technology for.” - -### Citizens band - -Ron Malenfant, chief architect for service provider IoT at Cisco, agreed that the future of 5G for medical IoT is bright, but said that the actual applications of the technology have to be carefully thought out. - -“The use cases need to be worked on,” he said. “The innovative [companies] are starting to say ‘OK, what does 5G mean to me’ and starting to plan use cases.” - -One area that the carriers themselves have been eyeing recently is the CBRS band of radio frequencies, which sits around 3.5GHz. It’s what’s referred to as “lightly licensed” spectrum, in that parts of it are used for things like CB radio and other parts are the domain of the U.S. armed forces, and it could be used to build private networks for institutional users like hospitals, instead of deploying small but expensive 4G cells. The idea is that the institutions would be able to lease those frequencies for their specific area from the carrier directly for private LTE/CBRS networks, and, eventually 5G, Malenfant said. - -There’s also the issue, of course, that there are still a huge amount of unknowns around 5G, which isn’t expected to supplant LTE in the U.S. for at least another year or so. The medical field’s stiff regulatory requirements could also prove a stumbling block for the adoption of newer wireless technology. - -Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3403366/carrier-services-help-expand-healthcare-with-5g-in-the-offing.html - -作者:[Jon Gold][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Jon-Gold/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/07/stethoscope_mobile_healthcare_ipad_tablet_doctor_patient-100765655-large.jpg -[2]: https://www.networkworld.com/article/3207535/what-is-iot-how-the-internet-of-things-works.html -[3]: https://www.networkworld.com/article/3354477/mobile-world-congress-the-time-of-5g-is-almost-here.html -[4]: https://www.networkworld.com/article/3276025/careers/20-hot-jobs-ambitious-it-pros-should-shoot-for.html -[5]: https://www.networkworld.com/article/3238664/80211-wi-fi-standards-and-speeds-explained.html -[6]: https://www.networkworld.com/article/3203489/what-is-5g-how-is-it-better-than-4g.html -[7]: https://www.facebook.com/NetworkWorld/ -[8]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190620 Cracks appear in Intel-s grip on supercomputing.md b/sources/talk/20190620 Cracks appear in Intel-s grip on supercomputing.md deleted file mode 100644 index 5ff550d3fc..0000000000 --- a/sources/talk/20190620 Cracks appear in Intel-s grip on supercomputing.md +++ /dev/null @@ -1,63 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Cracks appear in Intel’s grip on supercomputing) -[#]: via: (https://www.networkworld.com/article/3403443/cracks-appear-in-intels-grip-on-supercomputing.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Cracks appear in Intel’s grip on supercomputing -====== -New competitors threaten to take Intel’s dominance in the high-performance computing (HPC) world, and we’re not even talking about AMD (yet). -![Randy Wong/LLNL][1] - -It’s June, so it’s that time again for the twice-yearly Top 500 supercomputer list, where bragging rights are established or, in most cases, reaffirmed. The list constantly shifts as new trends appear, and one of them might be a break in Intel’s dominance. - -[Supercomputers in the top 10 list][2] include a lot of IBM Power-based systems, and almost all run Nvidia GPUs. But there’s more going on than that. - -For starters, an ARM supercomputer has shown up, at #156. [Astra][3] at Sandia National Laboratories is an HPE system running Cavium (now Marvell) ThunderX2 processors. It debuted on the list at #204 last November, but thanks to upgrades, it has moved up the list. It won’t be the last ARM server to show up, either. - -**[ Also see:[10 of the world's fastest supercomputers][2] | Get daily insights: [Sign up for Network World newsletters][4] ]** - -Second is the appearance of four Nvidia DGX servers, with the [DGX SuperPOD][5] ranking the highest at #22. [DGX systems][6] are basically compact GPU boxes with a Xeon just to boot the thing. The GPUs do all the heavy lifting. - -AMD hasn’t shown up yet with the Epyc processors, but it will, given Cray is building them for the government. - -This signals a breaking up of the hold Intel has had on the high-performance computing (HPC) market for a long time, said Ashish Nadkarni, group vice president in IDC's worldwide infrastructure practice. “The Intel hold has already been broken up by all the accelerators in the supercomputing space. The more accelerators they use, the less need they have for Xeons. They can go with other processors that do justice to those accelerators,” he told me. - -With so much work in HPC and artificial intelligence (AI) being done by GPUs, the x86 processor becomes just a boot processor in a way. I wasn’t kidding about the DGX box. It’s got one Xeon and eight Tesla GPUs. And the Xeon is an E5, a midrange part. - -**[[Get certified as an Apple Technical Coordinator with this seven-part online course from PluralSight.][7] ]** - -“They don’t need high-end Xeons in servers any more, although there’s a lot of supercomputers that just use CPUs. The fact is there are so many options now,” said Nadkarni. One example of an all-CPU system is [Frontera][8], a Dell-based system at the Texas Advanced Computing Center in Austin. - -The top two computers, Sierra and Summit, both run IBM Power9 RISC processors, as well as Nvidia GPUs. All told, Nvidia is in 125 of the 500 supercomputers, including five of the top 10, the fastest computer in the world, the fastest in Europe (Piz Daint) and the fastest in Japan (ABCI). - -Lenovo was the top hardware provider, beating out Dell, HPE, and IBM combined. That’s because of its large presence in its native China. Nadkari said Lenovo, which acquired the IBM x86 server business in 2014, has benefitted from the IBM installed base, which has continued wanting the same tech from Lenovo under new ownership. - -Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3403443/cracks-appear-in-intels-grip-on-supercomputing.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/10/sierra875x500-100778404-large.jpg -[2]: https://www.networkworld.com/article/3236875/embargo-10-of-the-worlds-fastest-supercomputers.html -[3]: https://www.top500.org/system/179565 -[4]: https://www.networkworld.com/newsletters/signup.html -[5]: https://www.top500.org/system/179691 -[6]: https://www.networkworld.com/article/3196088/nvidias-new-volta-based-dgx-1-supercomputer-puts-400-servers-in-a-box.html -[7]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fapple-certified-technical-trainer-10-11 -[8]: https://www.networkworld.com/article/3236875/embargo-10-of-the-worlds-fastest-supercomputers.html#slide7 -[9]: https://www.facebook.com/NetworkWorld/ -[10]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190620 Several deals solidify the hybrid cloud-s status as the cloud of choice.md b/sources/talk/20190620 Several deals solidify the hybrid cloud-s status as the cloud of choice.md deleted file mode 100644 index ade07dcb10..0000000000 --- a/sources/talk/20190620 Several deals solidify the hybrid cloud-s status as the cloud of choice.md +++ /dev/null @@ -1,77 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Several deals solidify the hybrid cloud’s status as the cloud of choice) -[#]: via: (https://www.networkworld.com/article/3403354/several-deals-solidify-the-hybrid-clouds-status-as-the-cloud-of-choice.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Several deals solidify the hybrid cloud’s status as the cloud of choice -====== -On-premises and cloud connections are being built by all the top vendors to bridge legacy and modern systems, creating hybrid cloud environments. -![Getty Images][1] - -The hybrid cloud market is expected to grow from $38.27 billion in 2017 to $97.64 billion by 2023, at a Compound Annual Growth Rate (CAGR) of 17.0% during the forecast period, according to Markets and Markets. - -The research firm said the hybrid cloud is rapidly becoming a leading cloud solution, as it provides various benefits, such as cost, efficiency, agility, mobility, and elasticity. One of the many reasons is the need for interoperability standards between cloud services and existing systems. - -Unless you are a startup company and can be born in the cloud, you have legacy data systems that need to be bridged, which is where the hybrid cloud comes in. - -So, in very short order we’ve seen a bunch of new alliances involving the old and new guard, reiterating that the need for hybrid solutions remains strong. - -**[ Read also:[What hybrid cloud means in practice][2] | Get regularly scheduled insights: [Sign up for Network World newsletters][3] ]** - -### HPE/Google - -In April, the Hewlett Packard Enterprise (HPE) and Google announced a deal where HPE introduced a variety of server solutions for Google Cloud’s Anthos, along with a consumption-based model for the validated HPE on-premises infrastructure that is integrated with Anthos. - -Following up with that, the two just announced a strategic partnership to create a hybrid cloud for containers by combining HPE’s on-premises infrastructure, Cloud Data Services, and GreenLake consumption model with Anthos. This allows for: - - * Bi-directional data mobility for data mobility and consistent data services between on-premises and cloud - * Application workload mobility to move containerized app workloads across on-premises and multi-cloud environments - * Multi-cloud flexibility, offering the choice of HPE Cloud Volumes and Anthos for what works best for the workload - * Unified hybrid management through Anthos, so customers can get a unified and consistent view of their applications and workloads regardless of where they reside - * Charged as a service via HPE GreenLake - - - -### IBM/Cisco - -This is a furthering of an already existing partnership between IBM and Cisco designed to deliver a common and secure developer experience across on-premises and public cloud environments for building modern applications. - -[Cisco said it will support IBM Cloud Private][4], an on-premises container application development platform, on Cisco HyperFlex and HyperFlex Edge hyperconverged infrastructure. This includes support for IBM Cloud Pak for Applications. IBM Cloud Paks deliver enterprise-ready containerized software solutions and developer tools for building apps and then easily moving to any cloud—public or private. - -This architecture delivers a common and secure Kubernetes experience across on-premises (including edge) and public cloud environments. IBM’s Multicloud Manager covers monitoring and management of clusters and container-based applications running from on-premises to the edge, while Cisco’s Virtual Application Centric Infrastructure (ACI) will allow customers to extend their network fabric from on-premises to the IBM Cloud. - -### IBM/Equinix - -Equinix expanded its collaboration with IBM Cloud to bring private and scalable connectivity to global enterprises via Equinix Cloud Exchange Fabric (ECX Fabric). This provides private connectivity to IBM Cloud, including Direct Link Exchange, Direct Link Dedicated and Direct Link Dedicated Hosting, that is secure and scalable. - -ECX Fabric is an on-demand, SDN-enabled interconnection service that allows any business to connect between its own distributed infrastructure and any other company’s distributed infrastructure, including cloud providers. Direct Link provides IBM customers with a connection between their network and IBM Cloud. So ECX Fabric provides IBM customers with a secured and scalable network connection to the IBM Cloud service. - -At the same time, ECX Fabric provides secure connections to other cloud providers, and most customers prefer a multi-vendor approach to avoid vendor lock-in. - -“Each of the partnerships focus on two things: 1) supporting a hybrid-cloud platform for their existing customers by reducing the friction to leveraging each solution and 2) leveraging the unique strength that each company brings. Each of the solutions are unique and would be unlikely to compete directly with other partnerships,” said Tim Crawford, president of Avoa, an IT consultancy. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3403354/several-deals-solidify-the-hybrid-clouds-status-as-the-cloud-of-choice.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/cloud_hand_plus_sign_private-100787051-large.jpg -[2]: https://www.networkworld.com/article/3249495/what-hybrid-cloud-mean-practice -[3]: https://www.networkworld.com/newsletters/signup.html -[4]: https://www.networkworld.com/article/3403363/cisco-connects-with-ibm-in-to-simplify-hybrid-cloud-deployment.html -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190630 Data Still Dominates.md b/sources/talk/20190630 Data Still Dominates.md deleted file mode 100644 index e9a86acf68..0000000000 --- a/sources/talk/20190630 Data Still Dominates.md +++ /dev/null @@ -1,100 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Data Still Dominates) -[#]: via: (https://theartofmachinery.com/2019/06/30/data_still_dominates.html) -[#]: author: (Simon Arneaud https://theartofmachinery.com) - -Data Still Dominates -====== - -Here’s [a quote from Linus Torvalds in 2006][1]: - -> I’m a huge proponent of designing your code around the data, rather than the other way around, and I think it’s one of the reasons git has been fairly successful… I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships. - -Which sounds a lot like [Eric Raymond’s “Rule of Representation” from 2003][2]: - -> Fold knowledge into data, so program logic can be stupid and robust. - -Which was just his summary of ideas like [this one from Rob Pike in 1989][3]: - -> Data dominates. If you’ve chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming. - -Which cites [Fred Brooks from 1975][4]: - -> ### Representation is the Essence of Programming -> -> Beyond craftmanship lies invention, and it is here that lean, spare, fast programs are born. Almost always these are the result of strategic breakthrough rather than tactical cleverness. Sometimes the strategic breakthrough will be a new algorithm, such as the Cooley-Tukey Fast Fourier Transform or the substitution of an n log n sort for an n2 set of comparisons. -> -> Much more often, strategic breakthrough will come from redoing the representation of the data or tables. This is where the heart of your program lies. Show me your flowcharts and conceal your tables, and I shall be continued to be mystified. Show me your tables, and I won’t usually need your flowcharts; they’ll be obvious. - -So, smart people have been saying this again and again for nearly half a century: focus on the data first. But sometimes it feels like the most famous piece of smart programming advice that everyone forgets. - -Let me give some real examples. - -### The Highly Scalable System that Couldn’t - -This system was designed from the start to handle CPU-intensive loads with incredible scalability. Nothing was synchronous. Everything was done with callbacks, task queues and worker pools. - -But there were two problems: The first was that the “CPU-intensive load” turned out not to be that CPU-intensive after all — a single task took a few milliseconds at worst. So most of the architecture was doing more harm than good. The second problem was that although it sounded like a highly scalable distributed system, it wasn’t one — it only ran on one machine. Why? Because all communication between asynchronous components was done using files on the local filesystem, which was now the bottleneck for any scaling. The original design didn’t say much about data at all, except to advocate local files in the name of “simplicity”. Most of the document was about all the extra architecture that was “obviously” needed to handle the “CPU-intensiveness” of the load. - -### The Service-Oriented Architecture that was Still Data-Oriented - -This system followed a microservices design, made up of single-purpose apps with REST-style APIs. One component was a database that stored documents (basically responses to standard forms, and other electronic paperwork). Naturally it exposed an API for basic storage and retrieval, but pretty quickly there was a need for more complex search functionality. The designers felt that adding this search functionality to the existing document API would have gone against the principles of microservices design. They could talk about “search” as being a different kind of service from “get/put”, so their architecture shouldn’t couple them together. Besides, the tool they were planning to use for search indexing was separate from the database itself, so creating a new service made sense for implementation, too. - -In the end, a search API was created containing a search index that was essentially a duplicate of the data in the main database. This data was being updated dynamically, so any component that mutated document data through the main database API had to also update the search API. It’s impossible to do this with REST APIs without race conditions, so the two sets of data kept going out of sync every now and then, anyway. - -Despite what the architecture diagram promised, the two APIs were tightly coupled through their data dependencies. Later on it was recognised that the search index should be an implementation detail of a unified document service, and this made the system much more maintainable. “Do one thing” works at the data level, not the verb level. - -### The Fantastically Modular and Configurable Ball of Mud - -This system was a kind of automated deployment pipeline. The original designers wanted to make a tool that was flexible enough to solve deployment problems across the company. It was written as a set of pluggable components, with a configuration file system that not only configured the components, but acted as a [DSL][5] for programming how the components fitted into the pipeline. - -Fast forward a few years and it’s turned into “that program”. There was a long list of known bugs that no one was ever fixing. No one wanted to touch the code out of fear of breaking things. No one used any of the flexibility of the DSL. Everyone who used the program copy-pasted the same known-working configuration that everyone else used. - -What had gone wrong? Although the original design document used words like “modular”, “decoupled”, “extensible” and “configurable” a lot, it never said anything about data. So, data dependencies between components ended up being handled in an ad-hoc way using a globally shared blob of JSON. Over time, components made more and more undocumented assumptions about what was in or not in the JSON blob. Sure, the DSL allowed rearranging components into any order, but most configurations didn’t work. - -### Lessons - -I chose these three examples because they’re easy to explain, not to pick on others. I once tried to build a website, and failed trying to instead build some cringe-worthy XML database that didn’t even solve the data problems I had. Then there’s the project that turned into a broken mockery of half the functionality of `make`, again because I didn’t think about what I really needed. I wrote a post before based on a time I wrote [a castle-in-the-sky OOP class hierarchy that should have been encoded in data instead][6]. - -Update: - -Apparently many people still thought I wrote this to make fun of others. People who’ve actually worked with me will know I’m much more interested in the things I’m fixing than in blaming the people who did most of the work building them, but, okay, here’s what I think of the engineers involved. - -Honestly, the first example obviously happened because the designer was more interested in bringing a science project to work than in solving the problem at hand. Most of us have done that (mea culpa), but it’s really annoying to our colleagues who’ll probably have to help maintain them when we’re bored of them. If this sounds like you, please don’t get offended; please just stop. (I’d still rather work on the single-node distributed system than anything built around my “XML database”.) - -There’s nothing personal in the second example. Sometimes it feels like everyone is talking about how wonderful it is to split up services, but no one is talking about exactly when not to. People are learning the hard way all the time. - -The third example was actually from some of the smartest people I’ve ever had the chance to work with. - -(End update.) - -“Does this talk about the problems created by data?” turns out to be a pretty useful litmus test for good systems design. It’s also pretty handy for detecting false expert advice. The hard, messy systems design problems are data problems, so false experts love to ignore them. They’ll show you a wonderfully beautiful architecture, but without talking about what kind of data it’s appropriate for, and (crucially) what kind of data it isn’t. - -For example, a false expert might tell you that you should use a pub/sub system because pub/sub systems are loosely coupled, and loosely coupled components are more maintainable. That sounds nice and results in pretty diagrams, but it’s backwards thinking. Pub/sub doesn’t _make_ your components loosely coupled; pub/sub _is_ loosely coupled, which may or may not match your data needs. - -On the flip side, a well-designed data-oriented architecture goes a long way. Functional programming, service meshes, RPCs, design patterns, event loops, whatever, all have their merits, but personally I’ve seen tools like [boring old databases][7] be responsible for a lot more successfully shipped software. - --------------------------------------------------------------------------------- - -via: https://theartofmachinery.com/2019/06/30/data_still_dominates.html - -作者:[Simon Arneaud][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://theartofmachinery.com -[b]: https://github.com/lujun9972 -[1]: https://lwn.net/Articles/193245/ -[2]: http://www.catb.org/~esr/writings/taoup/html/ch01s06.html -[3]: http://doc.cat-v.org/bell_labs/pikestyle -[4]: https://archive.org/stream/mythicalmanmonth00fred/mythicalmanmonth00fred_djvu.txt -[5]: https://martinfowler.com/books/dsl.html -[6]: https://theartofmachinery.com/2016/06/21/code_vs_data.html -[7]: https://theartofmachinery.com/2017/10/28/rdbs_considered_useful.html diff --git a/sources/talk/20190702 SD-WAN Buyers Should Think Application Performance as well as Resiliency.md b/sources/talk/20190702 SD-WAN Buyers Should Think Application Performance as well as Resiliency.md deleted file mode 100644 index 3bddd4cdc3..0000000000 --- a/sources/talk/20190702 SD-WAN Buyers Should Think Application Performance as well as Resiliency.md +++ /dev/null @@ -1,49 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (SD-WAN Buyers Should Think Application Performance as well as Resiliency) -[#]: via: (https://www.networkworld.com/article/3406456/sd-wan-buyers-should-think-application-performance-as-well-as-resiliency.html) -[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/) - -SD-WAN Buyers Should Think Application Performance as well as Resiliency -====== - -![istock][1] - -As an industry analyst, not since the days of WAN Optimization have I seen a technology gain as much interest as I am seeing with [SD-WANs][2] today. Although full deployments are still limited, nearly every network manager, and often many IT leaders I talk to, are interested in it. The reason for this is two-fold – the WAN has grown in importance for cloud-first enterprises and is badly in need of an overhaul. This hasn’t gone unnoticed by the vendor community as there has been an explosion of companies bringing a broad range of SD-WAN offerings to market. The great news for buyers is that there is no shortage of choices. The bad news is there are too many choices and making the right decision difficult. - -One area of differentiation for SD-WAN vendors is how they handle application performance.  I think of the SD-WAN market as being split into two categories – basic and advanced SD-WANs.  A good analogy is to think of the virtualization market.  There are many vendors that offer hypervisors – in fact there are a number of free ones.  So why do companies pay a premium for VMware? It’s because VMware offers many advanced features and capabilities that make its solution do more than just virtualize servers. - -Similarly, basic SD-WAN solutions do a great job of helping to lower costs and to increase application resiliency through path selection capabilities but do nothing to improve application performance. One myth that needs busting is that all SD-WANs make your applications perform better. That’s simply not true as application availability and performance are two different things. It’s possible to have great performance and poor availability or high availability with lackluster performance.  - -Consider the case where a business runs a hybrid WAN and voice and video traffic is sent over the MPLS connection and broadband is used for other traffic. If the MPLS link becomes congested, but doesn’t go down, most SD-WAN solutions will continue to send video and voice over it, which obviously degrades the performance. If multiple broadband connections are used, the chances of congestion related issues are even more likely.  - -This is an important point for IT professionals to understand. The business justification for SD-WAN was initially built around saving money but if application performance suffers, the entire return on investment (ROI) for the project might as well be tossed out the window.  For many companies, the network is the business, so a poor performing network means equally poor performing applications which results lost productivity, lower revenues and possibly brand damage from customer experience issues.  - -I’ve talked to many organizations that had digital initiatives fail because the network wasn’t transformed. For example, a luxury retailer implemented a tablet program for in store personnel to be able to show merchandise to customers. High end retail is almost wholly impulse purchases so the more inventory that can be shown to a customer, the larger the resulting sales. The WAN that was in place was causing the mobile application to perform poorly causing the digital initiative to have a negative effect. Instead of driving sales, the mobile initiative was chasing customers from the store.  The idea was right but the poor performing WAN caused the project to fail. - -SD-WAN decision makers need to look to suppliers that have specific technologies integrated into it that can act when congestion occurs.  A great example of this is the Silver Peak [Unity EdgeConnect™][3] SD-WAN edge platform with [path conditioning][4], [traffic shaping][5] and sub-second link failover. This ensures the best possible quality for all critical applications, even when an underlying link experiences congestion or an outage, even for [voice and video over broadband][6]. This is a foundational component of advanced SD-WAN providers as they offer the same resiliency and cost benefits as a basic SD-WAN but also ensure application performance remains high.  - -The SD-WAN era is here, and organizations should be aggressive with deployments as it will transform the WAN and make it a digital transformation enabler. Decision makers should choose their provider carefully and ensure the vendor also improves application performance.  Without it, the digital initiatives will likely fail and negate any ROI the company was hoping to realize. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3406456/sd-wan-buyers-should-think-application-performance-as-well-as-resiliency.html - -作者:[Zeus Kerravala][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Zeus-Kerravala/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/07/istock-157647179-100800860-large.jpg -[2]: https://www.silver-peak.com/sd-wan/sd-wan-explained -[3]: https://www.silver-peak.com/products/unity-edge-connect -[4]: https://www.silver-peak.com/products/unity-edge-connect/path-conditioning -[5]: https://www.silver-peak.com/products-solutions/unity/traffic-shaping -[6]: https://www.silver-peak.com/sd-wan/voice-video-over-broadband diff --git a/sources/talk/20190703 An eco-friendly internet of disposable things is coming.md b/sources/talk/20190703 An eco-friendly internet of disposable things is coming.md deleted file mode 100644 index 8d1e827aa8..0000000000 --- a/sources/talk/20190703 An eco-friendly internet of disposable things is coming.md +++ /dev/null @@ -1,92 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (An eco-friendly internet of disposable things is coming) -[#]: via: (https://www.networkworld.com/article/3406462/an-eco-friendly-internet-of-disposable-things-is-coming.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -An eco-friendly internet of disposable things is coming -====== -Researchers are creating a non-hazardous, bacteria-powered miniature battery that can be implanted into shipping labels and packaging to monitor temperature and track packages in real time. -![Thinkstock][1] - -Get ready for a future of disposable of internet of things (IoT) devices, one that will mean everything is connected to networks. It will be particularly useful in logistics, being used in single-use plastics in retail packaging and throw-away shippers’ carboard boxes. - -How it will happen? The answer is when non-hazardous, disposable bio-batteries make it possible. And that moment might be approaching. Researchers say they’re closer to commercializing a bacteria-powered miniature battery that they say will propel the IoDT. - -**[ Learn more: [Download a PDF bundle of five essential articles about IoT in the enterprise][2] ]** - -The “internet of disposable things is a new paradigm for the rapid evolution of wireless sensor networks,” says Seokheun Choi, an associate professor at Binghamton University, [in an article on the school’s website][3]. - -“Current IoDTs are mostly powered by expensive and environmentally hazardous batteries,” he says. Those costs can be significant in any kind of large-scale deployment, he says. And furthermore, with exponential growth, the environmental concerns would escalate rapidly. - -The miniaturized battery that Choi’s team has come up with is uniquely charged through power created by bacteria. It doesn’t have metals and acids in it. And it’s designed specifically to provide energy to sensors and radios in single-use IoT devices. Those could be the kinds of sensors ideal for supply-chain logistics where the container is ultimately going to end up in a landfill, creating a hazard. - -Another use case is real-time analysis of packaged food, with sensors monitoring temperature and location, preventing spoilage and providing safer food handling. For example, a farm product could be tracked for on-time delivery, as well as have its temperature measured, all within the packaging, as it moves from packaging facility to consumer. In the event of a food-borne illness outbreak, say, one can quickly find out where the product originated—which apparently is hard to do now. - -Other use cases could be battery-impregnated shipping labels that send real-time data to the internet. Importantly, in both use cases, packaging can be discarded without added environmental concerns. - -### How the bacteria-powered batteries work - -A slow release of nutrients provide the energy to the bacteria-powered batteries, which the researchers say can last up to eight days. “Slow and continuous reactions” convert the microbial nutrients into “long standing power,” they say in [their paper's abstract][4]. - -“Our biobattery is low-cost, disposable, and environmentally-friendly,” Choi says. - -Origami, the Japanese paper-folding skill used to create objects, was an inspiration for a similar microbial-based battery project the group wrote about last year in a paper. This one is liquid-based and not as long lasting. A bacteria-containing liquid was absorbed along the porous creases in folded paper, creating the paper-delivered power source, perhaps to be used in a shipping label. - -“Low-cost microbial fuel cells (MFCs) can be done efficiently by using a paper substrate and origami techniques,” [the group wrote then][5]. - -Scientists, too, envisage electronics now printed on circuit boards (PCBs) and can be toxic on disposal being printed entirely on eco-friendly paper. Product cycles, such as those found now in mobile devices and likely in future IoT devices, are continually getting tighter—thus PCBs are increasingly being disposed. Solutions are needed, experts say. - -Put the battery in the paper, too, is the argument here. And while you’re at it, get the biodegradation of the used-up biobattery to help break-down the organic-matter paper. - -Ultimately, Choi believes that the power-creating bacteria could even be introduced naturally by the environment—right now it’s added on by the scientists. - -**More on IoT:** - - * [What is the IoT? How the internet of things works][6] - * [What is edge computing and how it’s changing the network][7] - * [Most powerful Internet of Things companies][8] - * [10 Hot IoT startups to watch][9] - * [The 6 ways to make money in IoT][10] - * [What is digital twin technology? [and why it matters]][11] - * [Blockchain, service-centric networking key to IoT success][12] - * [Getting grounded in IoT networking and security][2] - * [Building IoT-ready networks must become a priority][13] - * [What is the Industrial IoT? [And why the stakes are so high]][14] - - - -Join the Network World communities on [Facebook][15] and [LinkedIn][16] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3406462/an-eco-friendly-internet-of-disposable-things-is-coming.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.techhive.com/images/article/2017/04/green-data-center-intro-100719502-large.jpg -[2]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[3]: https://www.binghamton.edu/news/story/1867/everything-will-connect-to-the-internet-someday-and-this-biobattery-could-h -[4]: https://www.sciencedirect.com/science/article/abs/pii/S0378775319305580 -[5]: https://www.sciencedirect.com/science/article/pii/S0960148117311606 -[6]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[7]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[8]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[9]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[10]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[11]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[12]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[13]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[14]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[15]: https://www.facebook.com/NetworkWorld/ -[16]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190705 Lessons in Vendor Lock-in- Google and Huawei.md b/sources/talk/20190705 Lessons in Vendor Lock-in- Google and Huawei.md deleted file mode 100644 index fe92b389a9..0000000000 --- a/sources/talk/20190705 Lessons in Vendor Lock-in- Google and Huawei.md +++ /dev/null @@ -1,58 +0,0 @@ -[#]: collector: "lujun9972" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " -[#]: subject: "Lessons in Vendor Lock-in: Google and Huawei" -[#]: via: "https://www.linuxjournal.com/content/lessons-vendor-lock-google-and-huawei" -[#]: author: "Kyle Rankin https://www.linuxjournal.com/users/kyle-rankin" - -Lessons in Vendor Lock-in: Google and Huawei -====== -![](https://www.linuxjournal.com/sites/default/files/styles/850x500/public/nodeimage/story/bigstock-Us--China-Trade-War-Boxing-F-252887971_1.jpg?itok=oZBwXDrP) - -What happens when you're locked in to a vendor that's too big to fail, but is on the opposite end of a trade war? - -The story of Google no longer giving Huawei access to Android updates is still developing, so by the time you read this, the situation may have changed. At the moment, Google has granted Huawei a 90-day window whereby it will have access to Android OS updates, the Google Play store and other Google-owned Android assets. After that point, due to trade negotiations between the US and China, Huawei no longer will have that access. - -Whether or not this new policy between Google and Huawei is still in place when this article is published, this article isn't about trade policy or politics. Instead, I'm going to examine this as a new lesson in vendor lock-in that I don't think many have considered before: what happens when the vendor you rely on is forced by its government to stop you from being a customer? - -### Too Big to Fail - -Vendor lock-in isn't new, but until the last decade or so, it generally was thought of by engineers as a bad thing. Companies would take advantage the fact that you used one of their products that was legitimately good to use the rest of their products that may or may not be as good as those from their competitors. People felt the pain of being stuck with inferior products and rebelled. - -These days, a lot of engineers have entered the industry in a world where the new giants of lock-in are still growing and have only flexed their lock-in powers a bit. Many engineers shrug off worries about choosing a solution that requires you to use only products from one vendor, in particular if that vendor is a large enough company. There is an assumption that those companies are too big ever to fail, so why would it matter that you rely on them (as many companies in the cloud do) for every aspect of their technology stack? - -Many people who justify lock-in with companies who are too big to fail point to all of the even more important companies who use that vendor who would have even bigger problems should that vendor have a major bug, outage or go out of business. It would take so much effort to use cross-platform technologies, the thinking goes, when the risk of going all-in with a single vendor seems so small. - -Huawei also probably figured (rightly) that Google and Android were too big to fail. Why worry about the risks of being beholden to a single vendor for your OS when that vendor was used by other large companies and would have even bigger problems if the vendor went away? - -### The Power of Updates - -Google held a particularly interesting and subtle bit of lock-in power over Huawei (and any phone manufacturer who uses Android)—the power of software updates. This form of lock-in isn't new. Microsoft famously used the fact that software updates in Microsoft Office cost money (naturally, as it was selling that software) along with the fact that new versions of Office had this tendency to break backward compatibility with older document formats to encourage everyone to upgrade. The common scenario was that the upper-level folks in the office would get brand-new, cutting-edge computers with the latest version of Office on them. They would start saving new documents and sharing them, and everyone else wouldn't be able to open them. It ended up being easier to upgrade everyone's version of Office than to have the bosses remember to save new documents in old formats every time. - -The main difference with Android is that updates are critical not because of compatibility, but for security. Without OS updates, your phone ultimately will become vulnerable to exploits that attackers continue to find in your software. The Android OS that ships on phones is proprietary and therefore requires permission from Google to get those updates. - -Many people still don't think of the Android OS as proprietary software. Although people talk about the FOSS underpinnings in Android, only people who go to the extra effort of getting a pure-FOSS version of Android, like LineageOS, on their phones actually experience it. The version of Android most people tend to use has a bit of FOSS in the center, surrounded by proprietary Google Apps code. - -It's this Google Apps code that gives Google the kind of powerful leverage over a company like Huawei. With traditional Android releases, Google controls access to OS updates including security updates. All of this software is signed with Google's signing keys. This system is built with security in mind—attackers can't easily build their own OS update to install on your phone—but it also has a convenient side effect of giving Google control over the updates. - -What's more, the Google Apps suite isn't just a convenient way to load Gmail or Google Docs, it also includes the tight integration with your Google account and the Google Play store. Without those hooks, you don't have access to the giant library of applications that everyone expects to use on their phones. As anyone with a LineageOS phone that uses F-Droid can attest, while a large number of applications are available in the F-Droid market, you can't expect to see those same apps as on Google Play. Although you can side-load some Google Play apps, many applications, such as Google Maps, behave differently without a Google account. Note that this control isn't unique to Google. Apple uses similar code-signing features with similar restrictions on its own phones and app updates. - -### Conclusion - -Without access to these OS updates, Huawei now will have to decide whether to create its own LineageOS-style Android fork or a whole new phone OS of its own. In either case, it will have to abandon the Google Play Store ecosystem and use F-Droid-style app repositories, or if it goes 100% alone, it will need to create a completely new app ecosystem. If its engineers planned for this situation, then they likely are working on this plan right now; otherwise, they are all presumably scrambling to address an event that "should never happen". Here's hoping that if you find yourself in a similar case of vendor lock-in with an overseas company that's too big to fail, you never get caught in the middle of a trade war. - --------------------------------------------------------------------------------- - -via: https://www.linuxjournal.com/content/lessons-vendor-lock-google-and-huawei - -作者:[Kyle Rankin][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.linuxjournal.com/users/kyle-rankin -[b]: https://github.com/lujun9972 diff --git a/sources/talk/20190708 Colocation facilities buck the cloud-data-center trend.md b/sources/talk/20190708 Colocation facilities buck the cloud-data-center trend.md deleted file mode 100644 index add6ef0093..0000000000 --- a/sources/talk/20190708 Colocation facilities buck the cloud-data-center trend.md +++ /dev/null @@ -1,96 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Colocation facilities buck the cloud-data-center trend) -[#]: via: (https://www.networkworld.com/article/3407756/colocation-facilities-buck-the-cloud-data-center-trend.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Colocation facilities buck the cloud-data-center trend -====== -Lower prices and latency plus easy access to multiple cloud providers make colocation facilities an attractive option compared to building on-site data centers. -![gorodenkoff / Getty Images][1] - -[Data center][2] workloads are moving but not only to the cloud. Increasingly, they are shifting to colocation facilities as an alternative to privately owned data centers. - -### What is colocation? - -A colocation facility or colo is a data center in which a business can rent space for servers and other computing hardware that they purchase but that the colo provider manages. - -[Read about IPv6 and cloud-access security brokers][3] - -The colo company provides the building, cooling, power, bandwidth and physical security. Space is leased by the rack, cabinet, cage or room. Many colos started out as managed services and continue  to offer those specialized services. - -Some prominent providers include Equinix, Digital Reality Trust, CenturyLink, and NTT Communications, and there are several Chinese providers that only serve the China market. Unlike the data centers of cloud vendors like Amazon and Microsoft, these colo facilities are generally in large metropolitan areas. - -“Colos have been around a long time, but their initial use case was Web servers,” said Rick Villars, vice president of data centers and cloud research at IDC. “What’s changed now is the ratio of what’s customer-facing is much greater than in 2000, [with the]  expansion of companies needing to have more assets that are network-facing.” - -### Advantages of colos: Cost, cloud interconnect - -Homegrown data centers are often sized correctly, with either too much capacity or too little, said Jim Poole, vice president of business development at Equinix. “Customers come to us all the time and say, ‘Would you buy my data center? Because I only use 25 percent of it,’” he said. - -Poole said the average capital expenditure for a stand-alone enterprise data center that is not a part of the corporate campus is $9 million. Companies are increasingly realizing that it makes sense to buy the racks of hardware but place it in someone else’s secure facility that handles the power and cooling. “It’s the same argument for doing cloud computing but at the physical-infrastructure level,” he said. - -Mike Satter, vice president for OceanTech, a data-center-decommissioning service provider, says enterprises should absolutely outsource data-center construction or go the colo route. Just as there are contractors who specialize in building houses, there are experts who specialize in data-center design, he said. - -He added that with many data-center closures there is subsequent consolidation. “For every decommissioning we do, that same company is adding to another environment somewhere else. With the new hardware out there now, the servers can do the same work in 20 racks as they did in 80 racks five years ago. That means a reduced footprint and energy cost,” he said. - -Often these closures mean moving to a colo. OceanTech recently decommissioned a private data center for a major media outlet he declined to identify that involved shutting down a data center in New Jersey that held 70 racks of gear. The firm was going to move its apps to the cloud but ended up expanding to a colo facility in New York City. - -### Cloud isn't cheaper than private data centers - -Satter said he’s had conversations with companies that planned to go to the cloud but changed their minds when they saw what it would cost if they later decided to move workloads out. Cloud providers can “kill you with guidelines and costs” because your data is in their infrastructure, and they can set fees that make it expensive to move it to another provider, he said. “The cloud not a money saver.” - -That can drive decisions to keep data in-house or in a colo in order to keep tighter possession of their data. “Early on, when people weren’t hip to the game for how much it cost to move to the cloud, you had decision makers with influence say the cloud sounded good. Now they are realizing it costs a lot more dollars to do that vs. doing something on-prem, on your own,” said Satter. - -Guy Churchward, CEO of Datera, developer of software designed storage platforms for enterprises, has noticed a new trend among CIOs making a cloud vs. private decision for apps based on the lifespan of the app. - -“Organizations don’t know how much resource they need to throw at a task. The cloud makes more sense for [short-term apps],” he said. For applications that will be used for five years or more, it makes more sense to place them in company-controlled facilities, he said. That's because with three-to-five-year hardware-refresh cycles, the hardware lasts the entire lifespan of the app, and the hardware and app can be retired at the same time. - -Another force driving the decision of private data center vs. the cloud is machine learning. Churchward said that’s because machine learning is often done using large amounts of highly sensitive data, so customers wanted data kept securely in house. They also wanted a low-latency loop between their ML apps and the data lake from which they draw. - -### Colos connect to mulitple cloud providers - -Another allure of colocation providers is that they can act as a pipeline between enterprises and multiple cloud providers. So rather than directly connecting to AWS, Azure, etc., businesses can connect to a colo, and that colo acts like a giant switch, connecting them to cloud providers through dedicated, high-speed networks. - -Villars notes the typical corporate data center is either inside corporate HQ or someplace remote, like South Dakota where land was cheap. But the trade-off is that network connectivity to remote locations is often slower and more expensive. - -That’s where a data-center colo providers with a large footprints come in, since they have points of presence in major cities. No one would fault a New York City-based firm for putting its data center in upstate New York or even further away. But when Equinix, DTR, and others all have data centers right in New York City, customers might get faster and sometimes cheaper connections plus lower latency. - -Steve Cretney, vice president and CIO for food distributor Colony Brands, is in the midst of migrating the company to the cloud and moving everything he can from his data center to AWS. Rather than connect directly to AWS, Colony’s Wisconsin headquarters is connected to an Equinix data center in Chicago. - -Going with Equinix provides more and cheaper bandwidth to the cloud than buying direct connectivity on his own. “I effectively moved my data center into Chicago. Now I can compete with a better price on data communication and networks,” he said. - -Cretney estimates that by moving Colony’s networking from a smaller, local provider to Chicago, the company is seeing an annual cost savings of 50 percent for network connectivity that includes telecommunications. - -Also, Colony wants to adopt a mult-cloud-provider strategy to avoid vendor lock-in, and he gets that by using Equinix as his network connection. As the company eventually uses Microsoft Azure and Google Cloud and other providers, Equinex can provide flexible and economic interconnections, he said. - -### **Colos reduce the need for enterprise data-center real estate** - -In 2014, 80 percent of data-centers were owned by enterprises, while colos and the early cloud accounted for 20 percent, said Villars. Today that’s a 50-50 split, and by 2022-2023, IDC projects service providers will own 70 percent of the large-data-center space. - -For the past five years, the amount of new data-center construction by enterprises has been falling steadily at  5 to 10 percent per year, said Villars. “They are not building new ones because they are coming to the realization that being an expert at data-center construction is not something a company has.” - -Enterprises across many sectors are looking at their data-center environment and leveraging things like virtual machines and SSD, thereby compressing the size of their data centers and getting more work done within smaller physical footprints. “So at some point they ask if they are spending appropriately for this space. That’s when they look at colo,” said Villars. - -Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3407756/colocation-facilities-buck-the-cloud-data-center-trend.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/05/cso_cloud_computing_backups_it_engineer_data_center_server_racks_connections_by_gorodenkoff_gettyimages-943065400_3x2_2400x1600-100796535-large.jpg -[2]: https://www.networkworld.com/article/3223692/what-is-a-data-centerhow-its-changed-and-what-you-need-to-know.html -[3]: https://www.networkworld.com/article/3391380/does-your-cloud-access-security-broker-support-ipv6-it-should.html -[4]: https://www.facebook.com/NetworkWorld/ -[5]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190709 Improving IT Operations - Key to Business Success in Digital Transformation.md b/sources/talk/20190709 Improving IT Operations - Key to Business Success in Digital Transformation.md deleted file mode 100644 index 5ce4f7edfe..0000000000 --- a/sources/talk/20190709 Improving IT Operations - Key to Business Success in Digital Transformation.md +++ /dev/null @@ -1,79 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Improving IT Operations – Key to Business Success in Digital Transformation) -[#]: via: (https://www.networkworld.com/article/3407698/improving-it-operations-key-to-business-success-in-digital-transformation.html) -[#]: author: (Rami Rammaha https://www.networkworld.com/author/Rami-Rammaha/) - -Improving IT Operations – Key to Business Success in Digital Transformation -====== - -![Artem Peretiatko][1] - -Forty seven percent of CEOs say they are being “challenged” by their board of directors to show progress in shifting toward a digital business model according to the [Gartner 2018 CIO][2] Agenda Industry Insights Report. By improving IT operations, organizations can progress and even accelerate their digital transformation initiatives efficiently and successfully. The biggest barrier to success is that IT currently spends around 78 percent of their budget and 80 percent of their time just maintaining IT operations, leaving little time and resource left for innovation according to ZK Research[*][3]. - -### **Do you cut the operations budget or invest more in transforming operations? ** - -The Cisco IT Operations Readiness Index 2018 predicted a dramatic change in IT operations as CIOs embrace analytics and automation. The study reported that 88 percent of respondents identify investing in IT operations as key to driving preemptive practices and enhancing customer experience. - -### What does this have to do with the wide area network? - -According to the IT Operations Readiness Index, 73 percent of respondents will collect WAN operational or performance data and 70 percent will analyze WAN data and leverage the results to further automate network operations. However, security is the most data-driven infrastructure today compared to other IT infrastructure functions (i.e. IoT, IP telephony, network infrastructure, data center infrastructure, WAN connectivity, etc.). The big questions are: - - * How do you collect operations data and what data should you collect? - * How do you analyze it? - * How do you then automate IT operations based on the results? - - - -By no means, is this a simple task. IT departments use a combination of data collected internally and by outside vendors to aggregate information used to transform operations and make better business decisions. - -In a recent [survey][4] by Frost & Sullivan, 94 percent of respondents indicated they will deploy a Software-defined Wide Area Network ([SD-WAN][5]) in the next 24 months. SD-WAN addresses the gap that router-centric WAN architectures were not designed to fill. A business-driven SD-WAN, designed from the ground up to support a cloud-first business model, provides significantly more network and application performance visibility, significantly assisting enterprises to realize the transformational promise of a digital business model. In fact, Gartner indicates that 90 percent of WAN edge decisions will be based on SD-WAN by 2023. - -### How an SD-WAN can improve IT operations leading to successful digital transformation - -All SD-WAN solutions are not created alike. One of the key components that organizations need to consider and evaluate is having complete observability across the network and applications through a single pane of glass. Without visibility, IT risks running inefficient operations that will stifle digital transformation initiatives. This real-time visibility must provide: - - * Operational metrics enabling IT/CIO’s to shift from a reactive toward a predictive practice - * A centralized dashboard that allows IT to monitor, in real-time, all aspects of network operations – a dashboard that has flexible knobs to adjust and collect metrics from all WAN edge appliances to accelerate problem resolution - - - -The Silver Peak Unity [EdgeConnect™][6] SD-WAN edge platform provides granular visibility into network and application performance. The EdgeConnect platform ensures the highest quality of experience for both end users and IT. End users enjoy always-consistent, always-available application performance including the highest quality of voice and video, even over broadband. Utilizing the [Unity Orchestrator™][7] comprehensive management dashboard as shown below, IT gains complete observability into the performance attributes of the network and applications in real-time. Customizable widgets provide a wealth of operational data including a health heatmap for every SD-WAN appliance deployed, flow counts, active tunnels, logical topologies, top talkers, alarms, bandwidth consumed by each application and location, application latency and jitter and much more. Furthermore, the platform maintains a week’s worth of data with context allowing IT to playback and see what has transpired at a specific time and location, analogous to a DVR. - -By providing complete observability of the entire WAN, IT spends less time troubleshooting network and application bottlenecks and fielding support/help desk calls day and night, and more time focused on strategic business initiatives. - -![][8] - -This solution brief, “[Simplify SD-WAN Operations with Greater Visibility][9]”, provides additional detail on the capabilities offered in the business-driven EdgeConnect SD-WAN edge platform that enables businesses to accelerate their shift toward a digital business model. - -![][10] - -* ZK Research quote from [Cisco IT Operations Readiness Index 2018][11] - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3407698/improving-it-operations-key-to-business-success-in-digital-transformation.html - -作者:[Rami Rammaha][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Rami-Rammaha/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/07/istock-1096811078_1200x800-100801264-large.jpg -[2]: https://www.gartner.com/smarterwithgartner/is-digital-a-priority-for-your-industry/ -[3]: https://blog.silver-peak.com/improving-it-operations-key-to-business-success-in-digital-transformation#footnote -[4]: https://www.silver-peak.com/sd-wan-edge-survey -[5]: https://www.silver-peak.com/sd-wan -[6]: https://www.silver-peak.com/products/unity-edge-connect -[7]: https://www.silver-peak.com/products/unity-orchestrator -[8]: https://images.idgesg.net/images/article/2019/07/silver-peak-unity-edgeconnect-sdwan-100801265-large.jpg -[9]: https://www.silver-peak.com/resource-center/simplify-sd-wan-operations-greater-visibility -[10]: https://images.idgesg.net/images/article/2019/07/simplify-sd-wan-operations-with-greater-visibility-100801266-large.jpg -[11]: https://s3-us-west-1.amazonaws.com/connectedfutures-prod/wp-content/uploads/2018/11/CF_transforming_IT_operations_report_3-2.pdf diff --git a/sources/talk/20190709 Linux a key player in the edge computing revolution.md b/sources/talk/20190709 Linux a key player in the edge computing revolution.md deleted file mode 100644 index df1dba9344..0000000000 --- a/sources/talk/20190709 Linux a key player in the edge computing revolution.md +++ /dev/null @@ -1,112 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Linux a key player in the edge computing revolution) -[#]: via: (https://www.networkworld.com/article/3407702/linux-a-key-player-in-the-edge-computing-revolution.html) -[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/) - -Linux a key player in the edge computing revolution -====== -Edge computing is augmenting the role that Linux plays in our day-to-day lives. A conversation with Jaromir Coufal from Red Hat helps to define what the edge has become. -![Dominic Smith \(CC BY 2.0\)][1] - -In the past few years, [edge computing][2] has been revolutionizing how some very familiar services are provided to individuals like you and me, as well as how services are managed within major industries. Try to get your arms around what edge computing is today, and you might just discover that your arms aren’t nearly as long or as flexible as you’d imagined. And Linux is playing a major role in this ever-expanding edge. - -One reason why edge computing defies easy definition is that it takes many different forms. As Jaromir Coufal, principal product manager at Red Hat, recently pointed out to me, there is no single edge. Instead, there are lots of edges – depending on what compute features are needed. He suggests that we can think of the edge as something of a continuum of capabilities with the problem being resolved determining where along that particular continuum any edge solution will rest. - -**[ Also read: [What is edge computing?][3] and [How edge networking and IoT will reshape data centers][4] ]** - -Some forms of edge computing include consumer electronics that are used and installed in millions of homes, others that serve tens of thousands of small businesses with operating their facilities, and still others that tie large companies to their remote sites. Key to this elusive definition is the idea that edge computing always involves distributing the workload in such a way that the bulk of the computing work is done remotely from the central core of the business and close to the business problem being addressed. - -Done properly, edge computing can provide services that are both faster and more reliable. Applications running on the edge can be more resilient and run considerably faster because their required data resources are local. In addition, data can be processed or analyzed locally, often requiring only periodic transfer of results to central sites. - -While physical security might be lower at the edge, edge devices often implement security features that allow them to detect 1) manipulation of the device, 2) malicious software, and 3) a physical breach and wipe data. - -### Benefits of edge computing - -Some of the benefits of edge computing include: - - * A quick response to intrusion detection, including the ability for a remote device to detach or self-destruct - * The ability to instantly stop communication when needed - * Constrained functionality and fewer generic entry points - * Rugged and reliable problem resistance - * Making the overall computing system harder to attack because computing is distributed - * Less data-in-transit exposure - - - -Some examples of edge computing devices include those that provide: - - * Video surveillance – watching for activity, reporting only if seen - * Controlling autonomous vehicles - * Production monitoring and control - - - -### Edge computing success story: Chick-fil-A - -One impressive example of highly successful edge computing caught me by surprise. It turns out Chick-fil-A uses edge computing devices to help manage its food preparation services. At Chick-fil-A, edge devices: - - 1. Analyze a fryer’s cleaning and cooking - 2. Aggregate data as a failsafe in case internet connectivity is lost - 3. Help with decision-making about cooking – how much and how long to cook - 4. Enhance business operations - 5. Help automate the complex food cooking and holding decisions so that even newbies get things right - 6. Function even when the connection with the central site is down - - - -As Coufal pointed out, Chick-fil-A runs [Kubernetes][5] at the edge in every one of its restaurants. Their key motivators are low-latency, scale of operations, and continuous business. And it seems to be working extremely well. - -[Chick-fil-A’s hypothesis][6] captures it all: By making smarter kitchen equipment, we can collect more data. By applying data to our restaurant, we can build more intelligent systems. By building more intelligent systems, we can better scale our business. - -### Are you edge-ready? - -There’s no quick answer as to whether your organization is “edge ready.” Many factors determine what kind of services can be deployed on the edge and whether and when those services need to communicate with more central devices. Some of these include: - - * Whether your workload can be functionally distributed - * If it’s OK for devices to have infrequent contact with the central services - * If devices can work properly when cut off from their connection back to central services - * Whether the devices can be secured (e.g., trusted not to provide an entry point) - - - -Implementing an edge computing network will likely take a long time from initial planning to implementation. Still, this kind of technology is taking hold and offers some strong advantages. While edge computing initially took hold 15 or more years ago, the last few years have seen renewed interest thanks to tech advances that have enabled new uses. - -Coufal noted that it's been 15 or more years since edge computing concepts and technologies were first introduced, but renewed interest has come about due to tech advances enabling new uses that require this technology. - -**More about edge computing:** - - * [How edge networking and IoT will reshape data centers][4] - * [Edge computing best practices][7] - * [How edge computing can help secure the IoT][8] - - - -Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3407702/linux-a-key-player-in-the-edge-computing-revolution.html - -作者:[Sandra Henry-Stocker][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/07/telecom-100801330-large.jpg -[2]: https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-it-s-changing-the-network.html -[3]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[4]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html -[5]: https://www.infoworld.com/article/3268073/what-is-kubernetes-container-orchestration-explained.html -[6]: https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2 -[7]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html -[8]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html -[9]: https://www.facebook.com/NetworkWorld/ -[10]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190711 Smarter IoT concepts reveal creaking networks.md b/sources/talk/20190711 Smarter IoT concepts reveal creaking networks.md deleted file mode 100644 index 86150bc580..0000000000 --- a/sources/talk/20190711 Smarter IoT concepts reveal creaking networks.md +++ /dev/null @@ -1,79 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Smarter IoT concepts reveal creaking networks) -[#]: via: (https://www.networkworld.com/article/3407852/smarter-iot-concepts-reveal-creaking-networks.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Smarter IoT concepts reveal creaking networks -====== -Today’s networks don’t meet the needs of emergent internet of things systems. IoT systems need their own modern infrastructure, researchers at the University of Magdeburg say. -![Thinkstock][1] - -The internet of things (IoT) needs its own infrastructure ecosystem — one that doesn't use external clouds at all, researchers at the University of Magdeburg say. - -The computer scientists recently obtained funding from the German government to study how to build a future-generation of revolutionary, emergent IoT systems. They say networks must be fault tolerant, secure, and traverse disparate protocols, which they aren't now. - -**[ Read also: [What is edge computing?][2] and [How edge networking and IoT will reshape data centers][3] ]** - -The researchers say a smarter, unique, and organic infrastructure needs to be developed for the IoT and that simply adapting the IoT to traditional networks won't work. They say services must self-organize and function autonomously and that people must accept the fact that we are using the internet in ways never originally intended.  - -"The internet, as we know it, is based on network architectures of the 70s and 80s, when it was designed for completely different applications,” the researchers say in their [media release][4]. The internet has centralized security, which causes choke points, and and an inherent lack of dynamic controls, which translates to inflexibility in access rights — all of which make it difficult to adapt the IoT to it. - -Device, data, and process management must be integrated into IoT systems, say the group behind the project, called [DoRIoT][5] (Dynamische Laufzeitumgebung für Organisch (dis-)Aggregierende IoT-Prozesse), translated as Dynamic Runtime Environment for Organic dis-Aggregating IoT Processes. - -“In order to close this gap, concepts [will be] developed in the project that transparently realize the access to the data,” says Professor Sebastian Zug of the University of Freiberg, a partner in DoRIoT. “For the application, it should make no difference whether the specific information requirement is answered by a server or an IoT node.” - -### Extreme edge computing - -In other words, servers and nodes, conceptually, should merge. One could argue it’s a form of extreme [edge computing][6], which is when processing and data storage is taken out of traditional, centralized data center environments and placed close to where the resources are required. It reduces latency, among other advantages. - -DoRIoT may take edge computing one step further. Detecting failures ahead of time and seamless migration of devices are wants, too — services can’t fail just because a new kind of device is introduced. - -“The systems [will] benefit from each other, for example, they can share computing power, data and so on,” says Mesut Güneş of Magdeburg’s [Faculty of Computer Science Institute for Intelligent Cooperating Systems][7]. - -“The result is an enormous data pool,” the researchers explain. “Which, in turn, makes it possible to make much more precise statements, for example when predicting climate models, observing traffic flows, or managing large factories in Industry 4.0.” - -[Industry 4.0][8] refers to smart factories that have connected machines autonomously self-managing their own supply chain, production output, and logistics without human intervention. - -Managing risks better than the current internet is one of DoRIoT's goals. The idea is to “guarantee full sovereignty over proprietary data.” To get there, though, one has to eliminate dependency on the cloud and access to data via third parties, they say. - -“This allows companies to be independent of the server infrastructures of external service providers such as Google, Microsoft or Amazon, which are subject to constant changes and even may not be accessible,” they say. - -**More about edge networking** - - * [How edge networking and IoT will reshape data centers][3] - * [Edge computing best practices][9] - * [How edge computing can help secure the IoT][10] - - - -Join the Network World communities on [Facebook][11] and [LinkedIn][12] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3407852/smarter-iot-concepts-reveal-creaking-networks.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/02/industry_4-0_industrial_iot_internet_of_things_network_thinkstock_613880008-100749946-large.jpg -[2]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[3]: https://www.networkworld.com/article/3291790/data-center/how-edge-networking-and-iot-will-reshape-data-centers.html -[4]: http://www.ovgu.de/en/University/In+Profile/Key+Profile+Areas/Research/Secure+data+protection+in+the+new+internet+of+things.html -[5]: http://www.doriot.net/ -[6]: https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-it-s-changing-the-network.html -[7]: http://iks.cs.ovgu.de/iks/en/ICS.html -[8]: https://www.networkworld.com/article/3199671/what-is-industry-4-0.html -[9]: https://www.networkworld.com/article/3331978/lan-wan/edge-computing-best-practices.html -[10]: https://www.networkworld.com/article/3331905/internet-of-things/how-edge-computing-can-help-secure-the-iot.html -[11]: https://www.facebook.com/NetworkWorld/ -[12]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190716 Server hardware makers shift production out of China.md b/sources/talk/20190716 Server hardware makers shift production out of China.md deleted file mode 100644 index be29283977..0000000000 --- a/sources/talk/20190716 Server hardware makers shift production out of China.md +++ /dev/null @@ -1,73 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Server hardware makers shift production out of China) -[#]: via: (https://www.networkworld.com/article/3409784/server-hardware-makers-shift-production-out-of-china.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Server hardware makers shift production out of China -====== -Tariffs on Chinese products and unstable U.S./China relations cause server makers to speed up their move out of China. -![Etereuti \(CC0\)][1] - -The supply chain of vendors that build servers and network communication devices is accelerating its shift of production out of China to Taiwan and North America, along with other nations not subject to the trade war between the U.S. and China. - -Last May, the Trump Administration levied tariffs on a number of imported Chinese goods, computer components among them. The tariffs ranged from 10-25%. Consumers were hit hardest, since they are more price sensitive than IT buyers. PC World said the [average laptop price could rise by $120][2] just for the tariffs. - -But since the tariff was based on the value of the product, that means server hardware prices could skyrocket, since servers cost much more than PCs. - -**[ Read also: [HPE’s CEO lays out his technology vision][3] ]** - -### Companies that are moving production out of China - -The Taiwanese tech publication DigiTimes reported (article now locked behind a paywall) that Mitac Computing Technology, a server ODM, reactivated an old production line at Hsinchu Science Park (HSP) in Taiwan at the end of 2018 and restarted another for motherboard SMT process in March 2019. The company plans to establish one more SMT production line prior to the end of 2019. - -It went on to say Mitac plans to produce all of its high-end U.S.-bound servers in Taiwan and is looking to move 30% of its overall server production lines back to Taiwan in the next three years. - -Wiwynn, a cloud computing server subsidiary of Wistron, is primarily assembling its U.S.-bound servers in Mexico and has also recently established a production site in southern Taiwan per clients' requests. - -Taiwan-based server chassis and assembly player AIC recently expanded the number of its factories in Taiwan to four and has been aggressively forming cooperation with its partners to expand its capacity. Many Taiwan-based component suppliers are also expanding their capacity in Taiwan. - -**[ [Get certified as an Apple Technical Coordinator with this seven-part online course from PluralSight.][4] ]** - -Several ODMs, such as Inventec, Wiwynn, Wistron, and Foxconn, all have plants in Mexico, while Quanta Computer has production lines in the U.S. Wiwynn also plans to open manufacturing facilities in eastern U.S. - -“This is not something that just happened overnight, it’s a process that started a few years ago. The tariffs just accelerated the desire of ODMs to do it,” said Ashish Nadkarni, group vice president for infrastructure systems, platforms and technologies at IDC. “Since [President] Trump has come into office there has been saber rattling about China and a trade war. There has also been a focus on margins.” - -He added that component makers are definitely moving out of China to other parts of Asia, like Korea, the Philippines, and Vietnam. - -### HPE, Dell and Lenovo should remain unaffected - -The big three branded server makers are all largely immunized against the tariffs. HP Enterprise, Dell, and Lenovo all have U.S.-based assemblies and their contract manufacturers are in Taiwan, said Nadkarni. So, their costs should remain unaffected by tariffs. - -The tariffs are not affecting sales as much as revenue for hyperscale whitebox vendors is being stressed. Hyperscale companies such as Amazon Web Services (AWS), Microsoft, Google, etc. have contracts with vendors such as Inspur and Super Micro, and if prices fluctuate, that’s not their problem. The hardware vendor is expected to deliver at the agreed cost. - -So margins, already paper thin, can’t be passed on to the customer, unlike the aforementioned laptop example. - -“It’s not the end customers who are affected by it, it’s the vendors who are affected by it. Certain things they can pass on, like component prices. But if the build value goes up, that’s not the customers problem, that’s the vendor’s problem,” said Nadkarni. - -So while it may cost you more to buy a laptop as this trade fracas goes on, it shouldn’t cost more to buy a server. - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3409784/server-hardware-makers-shift-production-out-of-china.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/07/asia_china_flag_grunge-stars_pixabay_etereuti-100763424-large.jpg -[2]: https://www.pcworld.com/article/3403405/trump-tariffs-on-chinese-goods-could-cost-you-120-more-for-notebook-pcs-say-dell-hp-and-cta.html -[3]: https://www.networkworld.com/article/3394879/hpe-s-ceo-lays-out-his-technology-vision.html -[4]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fapple-certified-technical-trainer-10-11 -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190717 How edge computing is driving a new era of CDN.md b/sources/talk/20190717 How edge computing is driving a new era of CDN.md deleted file mode 100644 index 643d3aa713..0000000000 --- a/sources/talk/20190717 How edge computing is driving a new era of CDN.md +++ /dev/null @@ -1,107 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (How edge computing is driving a new era of CDN) -[#]: via: (https://www.networkworld.com/article/3409027/how-edge-computing-is-driving-a-new-era-of-cdn.html) -[#]: author: (Matt Conran https://www.networkworld.com/author/Matt-Conran/) - -How edge computing is driving a new era of CDN -====== -A CDN is an edge application and an edge application is a superset of what your CDN is doing. -![geralt \(CC0\)][1] - -We are living in a hyperconnected world where anything can now be pushed to the cloud. The idea of having content located in one place, which could be useful from the management’s perspective, is now redundant. Today, the users and data are omnipresent. - -The customer’s expectations have up-surged because of this evolution. There is now an increased expectation of high-quality service and a decrease in customer’s patience. In the past, one could patiently wait 10 hours to download the content. But this is certainly not the scenario at the present time. Nowadays we have high expectations and high-performance requirements but on the other hand, there are concerns as well. The internet is a weird place, with unpredictable asymmetric patterns, buffer bloat and a list of other [performance-related problems][2] that I wrote about on Network Insight. _[Disclaimer: the author is employed by Network Insight.]_ - -Also, the internet is growing at an accelerated rate. By the year 2020, the internet is expected to reach 1.5 Gigabyte of traffic per day per person. In the coming times, the world of the Internet of Things (IoT) driven by objects will far supersede these data figures as well. For example, a connected airplane will generate around 5 Terabytes of data per day. This spiraling level of volume requires a new approach to data management and forces us to re-think how we delivery applications. - -[RELATED: How Notre Dame is going all in with Amazon’s cloud][3] - -Why? Because all this information cannot be processed by a single cloud or an on-premise location. Latency will always be a problem. For example, in virtual reality (VR) anything over 7 milliseconds will cause motion sickness. When decisions are required to be taken in real-time, you cannot send data to the cloud. You can, however, make use of edge computing and a multi-CDN design. - -### Introducing edge computing and multi-CDN - -The rate of cloud adoption, all-things-video, IoT and edge computing are bringing life back to CDNs and multi-CDN designs. Typically, a multi-CDN is an implementation pattern that includes more than one CDN vendor. The traffic direction is performed by using different metrics, whereby traffic can either be load balanced or failed across the different vendors. - -Edge computing moves actions as close as possible to the source. It is the point where the physical world interacts with the digital world. Logically, the decentralized approach of edge computing will not take over the centralized approach. They will be complementary to each other, so that the application can run at its peak level, depending on its position in the network. - -For example, in IoT, saving battery life is crucial. Let’s assume an IoT device can conduct the transaction in 10ms round trip time (RTT), instead of 100ms RTT. As a result, it can use 10 times less battery. - -### The internet, a performance bottleneck - -The internet is designed on the principle that everyone can talk to everyone, thereby providing universal connectivity whether required or not. There has been a number of design changes with network address translation (NAT) being the biggest. However, essentially the role of the internet has remained the same in terms of connectivity, regardless of location. - -With this type of connectivity model, distance is an important determinant for the application’s performance. Users on the other side of the planet will suffer regardless of buffer sizes or other device optimizations. Long RTT is experienced as packets go back and forth before the actual data transmission. Although caching and traffic redirection is being used but limited success has been achieved so far. - -### The principles of application delivery - -When transmission control protocol (TCP) starts, it thinks it is back in the late 1970s. It assumes that all services are on a local area network (LAN) and there is no packet loss. It then starts to work backward from there. Back when it was designed, we didn't have real-time traffic, such as voice and video that is latency and jitter sensitive. - -Ideally, TCP was designed for the ease of use and reliability, not to boost the performance. You actually need to optimize the TCP stack. And this is why CDNs are very good at performing such tasks. For example, if a connection is received from a mobile phone, a CDN will start with the assumption that there is going to be high jitter and packet loss. This allows them to size the TCP window correctly that accurately match network conditions. - -How do you magnify the performance, what options do you have? In a generic sense, many look to lowering the latency. However, with applications, such as video streaming, latency does not tell you if the video is going to buffer. One can only assume that lower latency will lead to less buffering. In such a scenario, measurement-based on throughput is a far better performance metric since will tell you how fast an object will load. - -We have also to consider the page load times. At the network level, it's the time to first byte (TTFB) and ping. However, these mechanisms don’t tell you much about the user experience as everything fits into one packet. Using ping will not inform you about the bandwidth problems. - -And if a web page goes slower by 25% once packet loss exceeds 5% and you are measuring time to the first byte which is the 4th packet - what exactly can you learn? TTFB is comparable to an internet control message protocol (ICMP) request just one layer up the stack. It's good if something is broken but not if there is underperformance issue. - -When you examine the history of TTFB measuring, you will find that it was deployed due to the lack of Real User Monitoring (RUM) measurements. Previously TTFB was as good in approximating how fast something was going to load, but we don't have to approximate anymore as we can measure it with RUM. RUM is measurements from the end-users. An example could be the metrics generated from a webpage that is being served to an actual user. - -Conclusively, TTFB, ping and page load times are not sophisticated measurements. We should prefer RUM time measurements as much as we can. This provides a more accurate picture of the user experience. This is something which has become critical over the last decade. - -Now we are living in a world of RUM which lets us build our network based on what matters to the business users. All CDNs should aim for RUM measurements. For this, they may need to integrate with traffic management systems that intelligently measure on what the end-user really sees. - -### The need for multi-CDN - -Primarily, the reasons one would opt for a multi-CDN environment are availability and performance. No single CDN can be the fastest to everyone and everywhere in the world. It is impossible due to the internet's connectivity model. However, combining the best of two or even more CDN providers will increase the performance. - -A multi-CDN will give a faster performance and higher availability than what can be achieved with a single CDN. A good design is what runs two availability zones. A better design is what runs two availability zones with a single CDN provider. However, superior design is what runs two availability zones in a multi-CDN environment. - -### Edge applications will be the new norm - -It’s not that long ago that there was a transition from the heavy physical monolithic architecture to the agile cloud. But all that really happened was the transition from the physical appliance to a virtual cloud-based appliance. Maybe now is the time that we should ask, is this the future that we really want? - -One of the main issues in introducing edge applications is the mindset. It is challenging to convince yourself or your peers that the infrastructure you have spent all your time working on and investing in is not the best way forward for your business.  - -Although the cloud has created a big buzz, just because you migrate to the cloud does not mean that your applications will run faster. In fact, all you are really doing is abstracting the physical pieces of the architecture and paying someone else to manage it. The cloud has, however, opened the door for the edge application conversation. We have already taken the first step to the cloud and now it's time to make the second move. - -Basically, when you think about edge applications: its simplicity is a programmable CDN. A CDN is an edge application and an edge application is a superset of what your CDN is doing. Edge applications denote cloud computing at the edge. It is a paradigm to distribute the application closer to the source for lower latency, additional resilience, and simplified infrastructure, where you still have control and privacy. - -From an architectural point of view, an edge application provides more resilience than deploying centralized applications. In today's world of high expectations, resilience is a necessity for the continuity of business. Edge applications allow you to collapse the infrastructure into an architecture that is cheaper, simpler and more attentive to the application. The less in the expanse of infrastructure, the more time you can focus on what really matters to your business - the customer. - -### An example of an edge architecture - -An example of edge architecture is within each PoP, every application has its own isolated JavaScript (JS) environment. JavaScript is great for security isolation and the performance guarantees scale. The JavaScript is a dedicated isolated instance that executes the code at the edge. - -Most likely, each JavaScript has its own virtual machine (VM). The sole operation that the VM is performing is the JavaScript runtime engine and the only thing it is running is the customer's code. One could use Google V8 open-source high-performance JavaScript and WebAssembly engine. - -Let’s face it, if you continue building more PoPs, you will hit the law of diminishing returns. When it comes to application such as mobile, you really are maxed out when throwing PoPs to form a solution. So we need to find another solution. - -In the coming times, we are going to witness a trend where most applications will become global, which means edge applications. It certainly makes little sense to place all the application in one location when your users are everywhere else. - -**This article is published as part of the IDG Contributor Network. [Want to Join?][4]** - -Join the Network World communities on [Facebook][5] and [LinkedIn][6] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3409027/how-edge-computing-is-driving-a-new-era-of-cdn.html - -作者:[Matt Conran][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Matt-Conran/ -[b]: https://github.com/lujun9972 -[1]: https://images.techhive.com/images/article/2017/02/network-traffic-100707086-large.jpg -[2]: https://network-insight.net/2016/12/buffers-packet-drops/ -[3]: https://www.networkworld.com/article/3014599/cloud-computing/how-notre-dame-is-going-all-in-with-amazon-s-cloud.html#tk.nww-fsb -[4]: https://www.networkworld.com/contributor-network/signup.html -[5]: https://www.facebook.com/NetworkWorld/ -[6]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190717 Public internet should be all software-defined.md b/sources/talk/20190717 Public internet should be all software-defined.md deleted file mode 100644 index 3b834bea66..0000000000 --- a/sources/talk/20190717 Public internet should be all software-defined.md +++ /dev/null @@ -1,73 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Public internet should be all software-defined) -[#]: via: (https://www.networkworld.com/article/3409783/public-internet-should-be-all-software-defined.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Public internet should be all software-defined -====== -Having a programmable public internet will correct inefficiencies in the current system, engineers at NOIA say. -![Thinkstock][1] - -The public internet should migrate to a programmable backbone-as-a-service architecture, says a team of network engineers behind NOIA, a startup promising to revolutionize global traffic. They say the internet will be more efficient if internet protocols and routing technologies are re-worked and then combined with a traffic-trading blockchain. - -It’s “impossible to use internet for modern applications,” the company says on its website. “Almost all global internet companies struggle to ensure uptime and reliable user experience.” - -That’s because modern techniques aren’t being introduced fully, NOIA says. The engineers say algorithms should be implemented to route traffic and that segment routing technology should be adopted. Plus, blockchain should be instigated to trade internet transit capacity. A “programmable internet solves the web’s inefficiencies,” a representative from NOIA told me. - -**[ Read also: [What is IPv6, and why aren’t we there yet?][2] ]** - -### Deprecate the public internet - -NOIA has started introducing a caching, distributed content delivery application to improve website loading times, but it wants to ultimately deprecate the existing internet completely. - -The company currently has 353 active cache nodes around the world, with a total 27 terabytes of storage for that caching system—NOIA clients contribute spare bandwidth and storage. It’s also testing a network backbone using four providers with European and American locations that it says will be the [development environment for its envisaged software-defined and radical internet replacement][3]. - -### The problem with today's internet - -The “internet is a mesh of tangled up cables,” [NOIA says][4]. “Thousands of physically connected networks” are involved. Any configuration alterations in any of the jumble of networks causes issues with the protocols, it explains. The company is referring to Border Gateway Protocol (BGP), which lets routers discover paths to IP addresses through the disparate network. Because BGP only forwards to a neighboring router, it doesn’t manage the entire route. That introduces “severe variability” or unreliability. - -“It is impossible to guarantee service reliability without using overlay networks. Low-latency, performance-critical applications, and games cannot operate on public Internet,” the company says. - -### How a software-defined internet works - -NOIA's idea is to use [IPv6][5], the latest internet protocol. IPv6 features an expanded packet size and allows custom headers. The company then adds segment routing to create Segment Routing over IPv6 (SRv6). That SRv6 combo adds routing information to each data packet sent—a packet-level programmable network, in other words. - -Segment routing, roughly, is an updated internet protocol that lets routers comprehend routing information in packet headers and then perform the routing. Cisco has been using it, too. - -NOIA’s network then adds the SRv6 amalgamation to distributed ledger technology (blockchain) in order to let ISPs and data centers buy and sell the routes—buyers can choose their routes in the exchange, too. - -In addition to trade, blockchain introduces security. It's worth noting that routings aren’t the only internet technologies that could be disrupted due to blockchain. In April I wrote about [organizations that propose moving data storage transactions over to distributed ledgers][6]. They say that will be more secure than anything seen before. [Ethernet’s lack of inherent security could be corrected by smart contract, trackable verifiable transactions][7], say some. And, of course, supply chain, the automotive vertical, and the selling of sensor data overall may emerge as [use-contenders for secure, blockchain in the internet of things][8]. - -In NOIA’s case, with SRv6 blended with distributed ledgers, the encrypted ledger holds the IP addresses, but it is architecturally decentralized—no one controls it. That’s one element of added security, along with the aforementioned trading, provided by the ledger. - -That trading could handle the question of who’s paying for all this. However, NOIA says current internet hardware will be able to understand the segment routings, so no new equipment investments are needed. - -Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3409783/public-internet-should-be-all-software-defined.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/05/dns_browser_http_web_internet_thinkstock-100758191-large.jpg -[2]: https://www.networkworld.com/article/3254575/lan-wan/what-is-ipv6-and-why-aren-t-we-there-yet.html -[3]: https://medium.com/noia/development-update-06-20-07-04-2879f9fce3cb -[4]: https://noia.network/ -[5]: https://www.networkworld.com/article/3254575/what-is-ipv6-and-why-aren-t-we-there-yet.html -[6]: https://www.networkworld.com/article/3390722/how-data-storage-will-shift-to-blockchain.html -[7]: https://www.networkworld.com/article/3356496/how-blockchain-will-manage-networks.html -[8]: https://www.networkworld.com/article/3330937/how-blockchain-will-transform-the-iot.html -[9]: https://www.facebook.com/NetworkWorld/ -[10]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190718 Worst DNS attacks and how to mitigate them.md b/sources/talk/20190718 Worst DNS attacks and how to mitigate them.md deleted file mode 100644 index b490eeeea1..0000000000 --- a/sources/talk/20190718 Worst DNS attacks and how to mitigate them.md +++ /dev/null @@ -1,151 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Worst DNS attacks and how to mitigate them) -[#]: via: (https://www.networkworld.com/article/3409719/worst-dns-attacks-and-how-to-mitigate-them.html) -[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/) - -Worst DNS attacks and how to mitigate them -====== -DNS threats, including DNS hijacking, tunneling, phishing, cache poisoning and DDoS attacks, are all on the rise. -![Max Bender \(CC0\)][1] - -The Domain Name System remains under constant attack, and there seems to be no end in sight as threats grow increasingly sophisticated. - -DNS, known as the internet’s phonebook, is part of the global internet infrastructure that translates between familiar names and the numbers computers need to access a website or send an email. While DNS has long been the target of assailants looking to steal all manner of corporate and private information, the threats in the [past year][2] or so indicate a worsening of the situation. - -**More about DNS:** - - * [DNS in the cloud: Why and why not][3] - * [DNS over HTTPS seeks to make internet use more private][4] - * [How to protect your infrastructure from DNS cache poisoning][5] - * [ICANN housecleaning revokes old DNS security key][6] - - - -IDC reports that 82% of companies worldwide have faced a DNS attack over the past year. The research firm recently published its fifth annual [Global DNS Threat Report][7], which is based on a survey IDC conducted on behalf of DNS security vendor EfficientIP of 904 organizations across the world during the first half of 2019. - -According to IDC's research, the average costs associated with a DNS attack rose by 49% compared to a year earlier. In the U.S., the average cost of a DNS attack tops out at more than $1.27 million. Almost half of respondents (48%) report losing more than $500,000 to a DNS attack, and nearly 10% say they lost more than $5 million on each breach. In addition, the majority of U.S. organizations say that it took more than one day to resolve a DNS attack. - -“Worryingly, both in-house and cloud applications were damaged, with growth of over 100% for in-house application downtime, making it now the most prevalent damage suffered,” IDC wrote. "DNS attacks are moving away from pure brute-force to more sophisticated attacks acting from the internal network. This will force organizations to use intelligent mitigation tools to cope with insider threats." - -### Sea Turtle DNS hijacking campaign - -An ongoing DNS hijacking campaign known as Sea Turtle is one example of what's occuring in today's DNS threat landscape. - -This month, [Cisco Talos][8] security researchers said the people behind the Sea Turtle campaign have been busy [revamping their attacks][9] with new infrastructure and going after new victims. - -**[ [Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][10] ]** - -In April, Talos released a [report detailing][11] Sea Turtle and calling it the “first known case of a domain name registry organization that was compromised for cyber espionage operations.” Talos says the ongoing DNS threat campaign is a state-sponsored attack that abuses DNS to harvest credentials to gain access to sensitive networks and systems in a way that victims are unable to detect, which displays unique knowledge on how to manipulate DNS. - -By obtaining control of victims’ DNS, the attackers can change or falsify any data on the Internet and illicitly modify DNS name records to point users to actor-controlled servers; users visiting those sites would never know, Talos reports.  - -The hackers behind Sea Turtle appear to have regrouped after the April report from Talos and are redoubling their efforts with new infrastructure – a move Talos researchers find to be unusual: “While many actors will slow down once they are discovered, this group appears to be unusually brazen, and will be unlikely to be deterred going forward,” Talos [wrote][9] in July. - -“Additionally, we discovered a new DNS hijacking technique that we assess with moderate confidence is connected to the actors behind Sea Turtle. This new technique is similar in that the threat actors compromise the name server records and respond to DNS requests with falsified A records,” Talos stated.  - -“This new technique has only been observed in a few highly targeted operations. We also identified a new wave of victims, including a country code top-level domain (ccTLD) registry, which manages the DNS records for every domain [that] uses that particular country code; that access was used to then compromise additional government entities. Unfortunately, unless there are significant changes made to better secure DNS, these sorts of attacks are going to remain prevalent,” Talos wrote. - -### DNSpionage attack upgrades its tools - -Another newer threat to DNS comes in the form of an attack campaign called [DNSpionage][12].  - -DNSpionage initially used two malicious websites containing job postings to compromise targets via crafted Microsoft Office documents with embedded macros. The malware supported HTTP and DNS communication with the attackers. And the attackers are continuing to develop new assault techniques. - -“The threat actor's ongoing development of DNSpionage malware shows that the attacker continues to find new ways to avoid detection. DNS tunneling is a popular method of exfiltration for some actors, and recent examples of DNSpionage show that we must ensure DNS is monitored as closely as an organization's normal proxy or weblogs,” [Talos wrote][13]. “DNS is essentially the phonebook of the internet, and when it is tampered with, it becomes difficult for anyone to discern whether what they are seeing online is legitimate.” - -The DNSpionage campaign targeted various businesses in the Middle East as well as United Arab Emirates government domains. - -“One of the biggest problems with DNS attacks or the lack of protection from them is complacency,” said Craig Williams, director of Talos outreach. Companies think DNS is stable and that they don’t need to worry about it. “But what we are seeing with attacks like DNSpionage and Sea Turtle are kind of the opposite, because attackers have figured out how to use it to their advantage – how to use it to do damage to credentials in a way, in the case of Sea Turtle, that the victim never even knows it happened. And that’s a real potential problem.” - -If you know, for example, your name server has been compromised, then you can force everyone to change their passwords. But if instead they go after the registrar and the registrar points to the bad guy’s name, you never knew it happened because nothing of yours was touched – that’s why these new threats are so nefarious, Williams said. - -“Once attackers start using it publicly, successfully, other bad guys are going to look at it and say, ‘Hey, why don't I use that to harvest a bunch of credentials from the sites I am interested in,’” Williams said. - -### **The DNS IoT risk** - -Another developing risk would be the proliferation of IoT devices.  The Internet Corporation for Assigned Names and Numbers (ICANN) recently wrote a [paper on the risk that IoT brings to DNS][14].  - -“The IoT is a risk to the DNS because various measurement studies suggest that IoT devices could stress the DNS infrastructure in ways that we have not seen before,” ICANN stated.   “For example, a software update for a popular IP-enabled IoT device that causes the device to use the DNS more frequently (e.g., regularly lookup random domain names to check for network availability) could stress the DNS in individual networks when millions of devices automatically install the update at the same time.” - -While this is a programming error from the perspective of individual devices, it could result in a significant attack vector from the perspective of DNS infrastructure operators. Incidents like this have already occurred on a small scale, but they may occur more frequently in the future due to the growth of heterogeneous IoT devices from manufacturers that equip their IoT devices with controllers that use the DNS, ICANN stated. - -ICANN also suggested that IoT botnets will represent an increased threat to DNS operators. “Larger DDoS attacks, partly because IoT bots are more difficult to eradicate. Current botnet sizes are on the order of hundreds of thousands. The most well-known example is the Mirai botnet, which involved 400K (steady-state) to 600K (peak) infected IoT devices.  The Hajime botnet hovers around 400K infected IoT devices, but has not launched any DDoS attacks yet. With the growth of the IoT, these attacks may grow to involve millions of bots and as a result larger DDoS attacks. - -### **DNS security warnings grow** - -The UK's [National Cyber Security Centre (NCSC)][15] issued a warning this month about ongoing DNS attacks, particularly focusing on DNS hijacking. It cited a number of risks associated with the uptick in DNS hijacking including: - -**Creating malicious DNS records.** A malicious DNS record could be used, for example, to create a phishing website that is present within an organization’s familiar domain. This may be used to phish employees or customers. - -**Obtaining SSL certificates.** Domain-validated SSL certificates are issued based on the creation of DNS records; thus an attacker may obtain valid SSL certificates for a domain name, which could be used to create a phishing website intended to look like an authentic website, for example. - -**Transparent proxying.** One serious risk employed recently involves transparently proxying traffic to intercept data. The attacker modifies an organization’s configured domain zone entries (such as “A” or “CNAME” records) to point traffic to their own IP address, which is infrastructure they manage. - -“An organization may lose total control of their domain and often the attackers will change the domain ownership details making it harder to recover,” the NCSC wrote. - -These new threats, as well as other dangers, led the U.S. government to issue a warning earlier this year about DNS attacks on federal agencies.  - -The Department of Homeland Security’s Cybersecurity and Infrastructure Security Agency (CISA) told all federal agencies to bolt down their DNS in the face of a series of global hacking campaigns. - -CISA said in its [Emergency Directive][16] that it was tracking a series of incidents targeting DNS infrastructure. CISA wrote that it “is aware of multiple executive branch agency domains that were impacted by the tampering campaign and has notified the agencies that maintain them.” - -CISA says that attackers have managed to intercept and redirect web and mail traffic and could target other networked services. The agency said the attacks start with compromising user credentials of an account that can make changes to DNS records.  Then the attacker alters DNS records, like Address, Mail Exchanger, or Name Server records, replacing the legitimate address of the services with an address the attacker controls. - -These actions let the attacker direct user traffic to their own infrastructure for manipulation or inspection before passing it on to the legitimate service, should they choose. This creates a risk that persists beyond the period of traffic redirection, CISA stated.  - -“Because the attacker can set DNS record values, they can also obtain valid encryption certificates for an organization’s domain names. This allows the redirected traffic to be decrypted, exposing any user-submitted data. Since the certificate is valid for the domain, end users receive no error warnings,” CISA stated. - -### **Get on the DNSSEC bandwagon** - -“Enterprises that are potential targets – in particular those that capture or expose user and enterprise data through their applications – should heed this advisory by the NSCS and should pressure their DNS and registrar vendors to make DNSSEC and other domain security best practices easy to implement and standardized,” said Kris Beevers, co-founder and CEO of DNS security vendor [NS1][17]. “They can easily implement DNSSEC signing and other domain security best practices with technologies in the market today. At the very least, they should work with their vendors and security teams to audit their implementations.” - -DNSSEC was in the news earlier this year when in response to increased DNS attacks, ICANN called for an intensified community effort to install stronger DNS security technology.  - -Specifically, ICANN wants full deployment of the Domain Name System Security Extensions ([DNSSEC][18]) across all unsecured domain names. DNSSEC adds a layer of security on top of DNS. Full deployment of DNSSEC ensures end users are connecting to the actual web site or other service corresponding to a particular domain name, ICANN said. “Although this will not solve all the security problems of the Internet, it does protect a critical piece of it – the directory lookup – complementing other technologies such as SSL (https:) that protect the ‘conversation’, and provide a platform for yet-to-be-developed security improvements,” ICANN stated. - -DNSSEC technologies have been around since about 2010 but are not widely deployed, with less than 20% of the world’s DNS registrars having deployed it, according to the regional internet address registry for the Asia-Pacific region ([APNIC][19]). - -DNSSEC adoption has been lagging because it was viewed as optional and can require a tradeoff between security and functionality, said NS1's Beevers. - -### **Traditional DNS threats** - -While DNS hijacking may be the front line attack method, other more traditional threats still exist.  - -The IDC/EfficientIP study found most popular DNS threats have changed compared with last year. Phishing (47%) is now more popular than last year’s favorite, DNS-based malware (39%), followed by DDoS attacks (30%), false positive triggering (26%), and lock-up domain attacks (26%). - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3409719/worst-dns-attacks-and-how-to-mitigate-them.html - -作者:[Michael Cooney][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Michael-Cooney/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/08/anonymous_faceless_hooded_mand_in_scary_halloween_mask_finger_to_lips_danger_threat_stealth_attack_hacker_hush_silence_warning_by_max_bender_cc0_via_unsplash_1200x800-100766358-large.jpg -[2]: https://www.fireeye.com/blog/threat-research/2019/01/global-dns-hijacking-campaign-dns-record-manipulation-at-scale.html -[3]: https://www.networkworld.com/article/3273891/hybrid-cloud/dns-in-the-cloud-why-and-why-not.html -[4]: https://www.networkworld.com/article/3322023/internet/dns-over-https-seeks-to-make-internet-use-more-private.html -[5]: https://www.networkworld.com/article/3298160/internet/how-to-protect-your-infrastructure-from-dns-cache-poisoning.html -[6]: https://www.networkworld.com/article/3331606/security/icann-housecleaning-revokes-old-dns-security-key.html -[7]: https://www.efficientip.com/resources/idc-dns-threat-report-2019/ -[8]: https://www.talosintelligence.com/ -[9]: https://blog.talosintelligence.com/2019/07/sea-turtle-keeps-on-swimming.html -[10]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr -[11]: https://blog.talosintelligence.com/2019/04/seaturtle.html -[12]: https://www.networkworld.com/article/3390666/cisco-dnspionage-attack-adds-new-tools-morphs-tactics.html -[13]: https://blog.talosintelligence.com/2019/04/dnspionage-brings-out-karkoff.html -[14]: https://www.icann.org/en/system/files/files/sac-105-en.pdf -[15]: https://www.ncsc.gov.uk/news/ongoing-dns-hijacking-and-mitigation-advice -[16]: https://cyber.dhs.gov/ed/19-01/ -[17]: https://ns1.com/ -[18]: https://www.icann.org/resources/pages/dnssec-qaa-2014-01-29-en -[19]: https://www.apnic.net/ diff --git a/sources/talk/20190724 Data centers may soon recycle heat into electricity.md b/sources/talk/20190724 Data centers may soon recycle heat into electricity.md deleted file mode 100644 index 92298e1a01..0000000000 --- a/sources/talk/20190724 Data centers may soon recycle heat into electricity.md +++ /dev/null @@ -1,67 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Data centers may soon recycle heat into electricity) -[#]: via: (https://www.networkworld.com/article/3410578/data-centers-may-soon-recycle-heat-into-electricity.html) -[#]: author: (Patrick Nelson https://www.networkworld.com/author/Patrick-Nelson/) - -Data centers may soon recycle heat into electricity -====== -Rice University researchers are developing a system that converts waste heat into light and then that light into electricity, which could help data centers reduce computing costs. -![Gordon Mah Ung / IDG][1] - -Waste heat is the scurge of computing. In fact, much of the cost of powering a computer is from creating unwanted heat. That’s because the inefficiencies in electronic circuits, caused by resistance in the materials, generates that heat. The processors, without computing anything, are essentially converting expensively produced electrical energy into waste energy. - -It’s a fundamental problem, and one that hasn’t been going away. But what if you could convert the unwanted heat back into electricity—recycle the heat back into its original energy form? The data center heat, instead of simply disgorging into the atmosphere to be gotten rid of with dubious eco-effects, could actually run more machines. Plus, your cooling costs would be taken care of—there’s nothing to cool because you’ve already grabbed the hot air. - -**[ Read also: [How server disaggregation can boost data center efficiency][2] | Get regularly scheduled insights: [Sign up for Network World newsletters][3] ]** - -Scientists at Rice Univeristy are trying to make that a reality by developing heat scavenging and conversion solutions. - -Currently, the most efficient way to convert heat into electricity is through the use of traditional turbines. - -Turbines “can give you nearly 50% conversion efficiency,” says Chloe Doiron, a graduate student at Rice University and co-lead on the project, in a [news article][4] on the school’s website. Turbines convert the kinetic energy of moving fluids, like steam or combustion gases, into mechanical energy. The moving steam then shifts blades mounted on a shaft, which turns a generator, thus creating the power. - -Not a bad solution. The problem, though, is “those systems are not easy to implement,” the researchers explain. The issue is that turbines are full of moving parts, and they’re big, noisy, and messy. - -### Thermal emitter better than turbines for converting heat to energy - -A better option would be a solid-state, thermal device that could absorb heat at the source and simply convert it, perhaps straight into attached batteries. - -The researchers say a thermal emitter could absorb heat, jam it into tight, easy-to-capture bandwidth and then emit it as light. Cunningly, they would then simply turn the light into electricity, as we see all the time now in solar systems. - -“Thermal photons are just photons emitted from a hot body,” says Rice University professor Junichiro Kono in the article. “If you look at something hot with an infrared camera, you see it glow. The camera is capturing these thermally excited photons.” Indeed, all heated surfaces, to some extent, send out light as thermal radiation. - -The Rice team wants to use a film of aligned carbon nanotubes to do the job. The test system will be structured as an actual solar panel. That’s because solar panels, too, lose energy through heat, so are a good environment in which to work. The concept applies to other inefficient technologies, too. “Anything else that loses energy through heat [would become] far more efficient,” the researchers say. - -Around 20% of industrial energy consumption is unwanted heat, Doiron says. That's a lot of wasted energy. - -### Other heat conversion solutions - -Other heat scavenging devices are making inroads, too. Now-commercially available thermoelectric technology can convert a temperature difference into power, also with no moving parts. They function by exposing a specially made material to heat. [Electrons flow when one part is cold and one is hot][5]. And the University of Utah is working on [silicon for chips that generates electricity][6] as one of two wafers heat up. - -Join the Network World communities on [Facebook][7] and [LinkedIn][8] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3410578/data-centers-may-soon-recycle-heat-into-electricity.html - -作者:[Patrick Nelson][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Patrick-Nelson/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/07/flir_20190711t191326-100801627-large.jpg -[2]: https://www.networkworld.com/article/3266624/how-server-disaggregation-could-make-cloud-datacenters-more-efficient.html -[3]: https://www.networkworld.com/newsletters/signup.html -[4]: https://news.rice.edu/2019/07/12/rice-device-channels-heat-into-light/ -[5]: https://www.networkworld.com/article/2861438/how-to-convert-waste-data-center-heat-into-electricity.html -[6]: https://unews.utah.edu/beat-the-heat/ -[7]: https://www.facebook.com/NetworkWorld/ -[8]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190724 Reports- As the IoT grows, so do its threats to DNS.md b/sources/talk/20190724 Reports- As the IoT grows, so do its threats to DNS.md deleted file mode 100644 index d9647304b9..0000000000 --- a/sources/talk/20190724 Reports- As the IoT grows, so do its threats to DNS.md +++ /dev/null @@ -1,78 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Reports: As the IoT grows, so do its threats to DNS) -[#]: via: (https://www.networkworld.com/article/3411437/reports-as-the-iot-grows-so-do-its-threats-to-dns.html) -[#]: author: (Michael Cooney https://www.networkworld.com/author/Michael-Cooney/) - -Reports: As the IoT grows, so do its threats to DNS -====== -ICANN and IBM's security researchers separately spell out how the growth of the internet of things will increase opportunities for malicious actors to attack the Domain Name System with hyperscale botnets and worm their malware into the cloud. -The internet of things is shaping up to be a more significant threat to the Domain Name System through larger IoT botnets, unintentional adverse effects of IoT-software updates and the continuing development of bot-herding software. - -The Internet Corporation for Assigned Names and Numbers (ICANN) and IBM’s X-Force security researchers have recently issued reports outlining the interplay between DNS and IoT that includes warnings about the pressure IoT botnets will put on the availability of DNS systems. - -**More about DNS:** - - * [DNS in the cloud: Why and why not][1] - * [DNS over HTTPS seeks to make internet use more private][2] - * [How to protect your infrastructure from DNS cache poisoning][3] - * [ICANN housecleaning revokes old DNS security key][4] - - - -ICANN’s Security and Stability Advisory Committee (SSAC) wrote in a [report][5] that “a significant number of IoT devices will likely be IP enabled and will use the DNS to locate the remote services they require to perform their functions. As a result, the DNS will continue to play the same crucial role for the IoT that it has for traditional applications that enable human users to interact with services and content,” ICANN stated. “The  role of  the  DNS  might  become  even  more  crucial  from  a  security  and  stability perspective with IoT devices interacting with people’s physical environment.” - -IoT represents both an opportunity and a risk to the DNS, ICANN stated. “It is an opportunity because the DNS provides functions and data that can help make the IoT more secure, stable, and transparent, which is critical given the IoT's interaction with the physical world. It is a risk because various measurement studies suggest that IoT devices may stress the DNS, for instance, because of complex DDoS attacks carried out by botnets that grow to hundreds of thousands or in the future millions of infected IoT devices within hours,” ICANN stated. - -Unintentional DDoS attacks - -One risk is that the IoT could place new burdens on the DNS. “For example, a software update for a popular IP-enabled IoT device that causes the device to use the DNS more frequently (e.g., regularly lookup random domain names to check for network availability) could stress the DNS in individual networks when millions of devices automatically install the update at the same time,” ICANN stated. - -While this is a programming error from the perspective of individual devices, it could result in a significant attack vector from the perspective of DNS infrastructure operators. Incidents like this have already occurred on a small scale, but they may occur more frequently in the future due to the growth of heterogeneous IoT devices from manufacturers that equip their IoT devices with controllers that use the DNS, ICANN stated. - -Massively larger botnets, threat to clouds - -The report also suggested that the scale of IoT botnets could grow from hundreds of thousands of devices to millions. The best known IoT botnet is Mirai, responsible for DDoS attacks involving 400,000 to 600,000 devices. The Hajime botnet hovers around 400K infected IoT devices but has not launched any DDoS attacks yet. But as the IoT grows, so will the botnets and as a result larger DDoS attacks. - -Cloud-connected IoT devices could endanger cloud resources. “IoT devices connected to cloud architecture could allow Mirai adversaries to gain access to cloud servers. They could infect a server with additional malware dropped by Mirai or expose all IoT devices connected to the server to further compromise,” wrote Charles DeBeck,  a senior cyber threat intelligence strategic analyst with [IBM X-Force Incident Response][6] in a recent report.  - - “As organizations increasingly adopt cloud architecture to scale efficiency and productivity, disruption to a cloud environment could be catastrophic.” - -For enterprises that are rapidly adopting both IoT technology and cloud architecture, insufficient security controls could expose the organization to elevated risk, calling for the security committee to conduct an up-to-date risk assessment, DeBeck stated. - -Attackers continue malware development - -“Since this activity is highly automated, there remains a strong possibility of large-scale infection of IoT devices in the future,” DeBeck stated. “Additionally, threat actors are continuing to expand their targets to include new types of IoT devices and may start looking at industrial IoT devices or connected wearables to increase their footprint and profits.” - -Botnet bad guys are also developing new Mirai variants and IoT botnet malware outside of the Mirai family to target IoT devices, DeBeck stated. - -To continue reading this article register now - -[Get Free Access][7] - -[Learn More][8]   Existing Users [Sign In][7] - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3411437/reports-as-the-iot-grows-so-do-its-threats-to-dns.html - -作者:[Michael Cooney][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Michael-Cooney/ -[b]: https://github.com/lujun9972 -[1]: https://www.networkworld.com/article/3273891/hybrid-cloud/dns-in-the-cloud-why-and-why-not.html -[2]: https://www.networkworld.com/article/3322023/internet/dns-over-https-seeks-to-make-internet-use-more-private.html -[3]: https://www.networkworld.com/article/3298160/internet/how-to-protect-your-infrastructure-from-dns-cache-poisoning.html -[4]: https://www.networkworld.com/article/3331606/security/icann-housecleaning-revokes-old-dns-security-key.html -[5]: https://www.icann.org/en/system/files/files/sac-105-en.pdf -[6]: https://securityintelligence.com/posts/i-cant-believe-mirais-tracking-the-infamous-iot-malware-2/?cm_mmc=OSocial_Twitter-_-Security_Security+Brand+and+Outcomes-_-WW_WW-_-SI+TW+blog&cm_mmca1=000034XK&cm_mmca2=10009814&linkId=70790642 -[7]: javascript:// -[8]: https://www.networkworld.com/learn-about-insider/ diff --git a/sources/talk/20190724 When it comes to the IoT, Wi-Fi has the best security.md b/sources/talk/20190724 When it comes to the IoT, Wi-Fi has the best security.md deleted file mode 100644 index 2b5014dfa8..0000000000 --- a/sources/talk/20190724 When it comes to the IoT, Wi-Fi has the best security.md +++ /dev/null @@ -1,88 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (When it comes to the IoT, Wi-Fi has the best security) -[#]: via: (https://www.networkworld.com/article/3410563/when-it-comes-to-the-iot-wi-fi-has-the-best-security.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -When it comes to the IoT, Wi-Fi has the best security -====== -It’s easy to dismiss good ol’ Wi-Fi’s role in internet of things networking. But Wi-Fi has more security advantages than other IoT networking choices. -![Ralph Gaithe / Soifer / Getty Images][1] - -When it comes to connecting internet of things (IoT) devices, there is a wide variety of networks to choose from, each with its own set of capabilities, advantages and disadvantages, and ideal use cases. Good ol’ Wi-Fi is often seen as a default networking choice, available in many places, but of limited range and not particularly suited for IoT implementations. - -According to [Aerohive Networks][2], however, Wi-Fi is “evolving to help IT address security complexities and challenges associated with IoT devices.” Aerohive sells cloud-managed networking solutions and was [acquired recently by software-defined networking company Extreme Networks for some $272 million][3]. And Aerohive's director of product marketing, Mathew Edwards, told me via email that Wi-Fi brings a number of security advantages compared to other IoT networking choices. - -It’s not a trivial problem. According to Gartner, in just the last three years, [approximately one in five organizations have been subject to an IoT-based attack][4]. And as more and more IoT devices come on line, the attack surface continues to grow quickly. - -**[ Also read: [Extreme targets cloud services, SD-WAN, Wi-Fi 6 with $210M Aerohive grab][3] and [Smart cities offer window into the evolution of enterprise IoT technology][5] ]** - -### What makes Wi-Fi more secure for IoT? - -What exactly are Wi-Fi’s IoT security benefits? Some of it is simply 20 years of technological maturity, Edwards said. - -“Extending beyond the physical boundaries of organizations, Wi-Fi has always had to be on the front foot when it comes to securely onboarding and monitoring a range of corporate, guest, and BYOD devices, and is now prepared with the next round of connectivity complexities with IoT,” he said. - -Specifically, Edwards said, “Wi-Fi has evolved … to increase the visibility, security, and troubleshooting of edge devices by combining edge security with centralized cloud intelligence.” - -Just as important, though, new Wi-Fi capabilities from a variety of vendors are designed to help identify and isolate IoT devices to integrate them into the wider network while limiting the potential risks. The goal is to incorporate IoT device awareness and protection mechanisms to prevent breaches and attacks through vulnerable headless devices. Edwards cited Aerohive’s work to “securely onboard IoT devices with its PPSK (private pre-shared key) technology, an authentication and encryption method providing 802.1X-equivalent role-based access, without the equivalent management complexities.” - -**[ [Prepare to become a Certified Information Security Systems Professional with this comprehensive online course from PluralSight. Now offering a 10-day free trial!][6] ]** - -### The IoT is already here—and so is Wi-Fi - -Unfortunately, enterprise IoT security is not always a carefully planned and monitored operation. - -“Much like BYOD,” Edwards said, “many organizations are dealing with IoT without them even knowing it.” On the plus side, even as “IoT devices have infiltrated many networks , ... administrators are already leveraging some of the tools to protect against IoT threats without them even realizing it.” - -He noted that customers who have already deployed PPSK to secure guest and BYOD networks can easily extend those capabilities to cover IoT devices such as “smart TVs, projectors, printers, security systems, sensors and more.” - -In addition, Edwards said, “vendors have introduced methods to assign performance and security limits through context-based profiling, which is easily extended to IoT devices once the vendor can utilize signatures to identify an IoT device.” - -Once an IoT device is identified and tagged, Wi-Fi networks can assign it to a particular VLAN, set minimum and maximum data rates, data limits, application access, firewall rules, and other protections. That way, Edwards said, “if the device is lost, stolen, or launches a DDoS attack, the Wi-Fi network can kick it off, restrict it, or quarantine it.” - -### Wi-Fi still isn’t for every IoT deployment - -All that hardly turns Wi-Fi into the perfect IoT network. Relatively high costs and limited range mean it won’t find a place in many large-scale IoT implementations. But Edwards says Wi-Fi’s mature identification and control systems can help enterprises incorporate new IoT-based systems and sensors into their networks with more confidence. - -**More about 802.11ax (Wi-Fi 6)** - - * [Why 802.11ax is the next big thing in wireless][7] - * [FAQ: 802.11ax Wi-Fi][8] - * [Wi-Fi 6 (802.11ax) is coming to a router near you][9] - * [Wi-Fi 6 with OFDMA opens a world of new wireless possibilities][10] - * [802.11ax preview: Access points and routers that support Wi-Fi 6 are on tap][11] - - - -Join the Network World communities on [Facebook][12] and [LinkedIn][13] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3410563/when-it-comes-to-the-iot-wi-fi-has-the-best-security.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/03/hack-your-own-wi-fi_neon-wi-fi_keyboard_hacker-100791531-large.jpg -[2]: http://www.aerohive.com/ -[3]: https://www.networkworld.com/article/3405440/extreme-targets-cloud-services-sd-wan-wifi-6-with-210m-aerohive-grab.html -[4]: https://www.gartner.com/en/newsroom/press-releases/2018-03-21-gartner-says-worldwide-iot-security-spending-will-reach-1-point-5-billion-in-2018. -[5]: https://www.networkworld.com/article/3409787/smart-cities-offer-window-into-the-evolution-of-enterprise-iot-technology.html -[6]: https://pluralsight.pxf.io/c/321564/424552/7490?u=https%3A%2F%2Fwww.pluralsight.com%2Fpaths%2Fcertified-information-systems-security-professional-cisspr -[7]: https://www.networkworld.com/article/3215907/mobile-wireless/why-80211ax-is-the-next-big-thing-in-wi-fi.html -[8]: https://%20https//www.networkworld.com/article/3048196/mobile-wireless/faq-802-11ax-wi-fi.html -[9]: https://www.networkworld.com/article/3311921/mobile-wireless/wi-fi-6-is-coming-to-a-router-near-you.html -[10]: https://www.networkworld.com/article/3332018/wi-fi/wi-fi-6-with-ofdma-opens-a-world-of-new-wireless-possibilities.html -[11]: https://www.networkworld.com/article/3309439/mobile-wireless/80211ax-preview-access-points-and-routers-that-support-the-wi-fi-6-protocol-on-tap.html -[12]: https://www.facebook.com/NetworkWorld/ -[13]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190725 IoT-s role in expanding drone use.md b/sources/talk/20190725 IoT-s role in expanding drone use.md deleted file mode 100644 index a9281dcf40..0000000000 --- a/sources/talk/20190725 IoT-s role in expanding drone use.md +++ /dev/null @@ -1,61 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (IoT’s role in expanding drone use) -[#]: via: (https://www.networkworld.com/article/3410564/iots-role-in-expanding-drone-use.html) -[#]: author: (Fredric Paul https://www.networkworld.com/author/Fredric-Paul/) - -IoT’s role in expanding drone use -====== -Collision avoidance technology that uses internet of things (IoT) connectivity, AI, machine learning, and computer vision could be the key to expanding drone applications. -![Thinkstock][1] - -As faithful readers of [TechWatch][2] (love you, Mom) may know, the rollout of many companies’ ambitious drone delivery services has not gone as quickly as promised. Despite recent signs of progress in Australia and the United States—not to mention [clever ideas for burger deliveries to cars stuck in traffic][3]—drone delivery remains a long way from becoming a viable option in the vast majority of use cases. And the problem affects many areas of drone usage, not just the heavily hyped drone delivery applications. - -According to [Grace McKenzie][4], director of operations and controller at [Iris Automation][5], one key restriction to economically viable drone deliveries is that the “skies are not safe enough for many drone use cases.” - -Speaking at a recent [SF New Tech “Internet of Everything” event in San Francisco][6], McKenzie said fear of collisions with manned aircraft is the big reason why the Federal Aviation Association (FAA) and international regulators typically prohibit drones from flying beyond the line of the sight of the remote pilot. Obviously, she added, that restriction greatly constrains where and how drones can make deliveries and is working to keep the market from growing test and pilot programs into full-scale commercial adoption. - -**[ Read also: [No, drone delivery still isn’t ready for prime time][7] | Get regularly scheduled insights: [Sign up for Network World newsletters][8] ]** - -### Detect and avoid technology is critical - -Iris Automation, not surprisingly, is in the business of creating workable collision avoidance systems for drones in an attempt to solve this issue. Variously called “detect and avoid” or “sense and avoid” technologies, these automated solutions are required for “beyond visual line of sight” (BVLOS) drone operations. There are multiple issues in play. - -As explained on Iris’ website, “Drone pilots are skilled aviators, but even they struggle to see and avoid obstacles and aircraft when operating drones at extended range [and] no pilot on board means low situational awareness. This risk is huge, and the potential conflicts can be extremely dangerous.” - -As “a software company with a hardware problem,” McKenzie said, Iris’ systems use artificial intelligence (AI), machine learning, computer vision, and IoT connectivity to identify and focus on the “small group of pixels that could be a risk.” Working together, those technologies are creating an “exponential curve” in detect-and-avoid technology improvements, she added. The result? Drones that “see better than a human pilot,” she claimed. - -### Bigger market and new use cases for drones - -It’s hardly an academic issue. “Not being able to show adequate mitigation of operational risk means regulators are forced to limit drone uses and applications to closed environments,” the company says. - -Solving this problem would open up a wide range of industrial and commercial applications for drones. Far beyond delivering burritos, McKenzie said that with confidence in drone “sense and avoid” capabilities, drones could be used for all kinds of aerial data gathering, from inspecting hydro-electric dams, power lines, and railways to surveying crops to fighting forest fires and conducting search-and-rescue operations. - -Join the Network World communities on [Facebook][9] and [LinkedIn][10] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3410564/iots-role-in-expanding-drone-use.html - -作者:[Fredric Paul][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Fredric-Paul/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2018/01/drone_delivery_package_future-100745961-large.jpg -[2]: https://www.networkworld.com/blog/techwatch/ -[3]: https://www.networkworld.com/article/3396188/the-traffic-jam-whopper-project-may-be-the-coolestdumbest-iot-idea-ever.html -[4]: https://www.linkedin.com/in/withgracetoo/ -[5]: https://www.irisonboard.com/ -[6]: https://sfnewtech.com/event/iot/ -[7]: https://www.networkworld.com/article/3390677/drone-delivery-not-ready-for-prime-time.html -[8]: https://www.networkworld.com/newsletters/signup.html -[9]: https://www.facebook.com/NetworkWorld/ -[10]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190725 Report- Smart-city IoT isn-t smart enough yet.md b/sources/talk/20190725 Report- Smart-city IoT isn-t smart enough yet.md deleted file mode 100644 index da6d4ee57a..0000000000 --- a/sources/talk/20190725 Report- Smart-city IoT isn-t smart enough yet.md +++ /dev/null @@ -1,73 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Report: Smart-city IoT isn’t smart enough yet) -[#]: via: (https://www.networkworld.com/article/3411561/report-smart-city-iot-isnt-smart-enough-yet.html) -[#]: author: (Jon Gold https://www.networkworld.com/author/Jon-Gold/) - -Report: Smart-city IoT isn’t smart enough yet -====== -A report from Forrester Research details vulnerabilities affecting smart-city internet of things (IoT) infrastructure and offers some methods of mitigation. -![Aleksandr Durnov / Getty Images][1] - -Security arrangements for smart-city IoT technology around the world are in an alarming state of disrepair, according to a report from Forrester Research that argues serious changes are needed in order to avoid widespread compromises. - -Much of what’s wrong has to do with a lack of understanding on the part of the people in charge of those systems and a failure to follow well-known security best practices, like centralized management, network visibility and limiting attack-surfaces. - -**More on IoT:** - - * [What is the IoT? How the internet of things works][2] - * [What is edge computing and how it’s changing the network][3] - * [Most powerful Internet of Things companies][4] - * [10 Hot IoT startups to watch][5] - * [The 6 ways to make money in IoT][6] - * [What is digital twin technology? [and why it matters]][7] - * [Blockchain, service-centric networking key to IoT success][8] - * [Getting grounded in IoT networking and security][9] - * [Building IoT-ready networks must become a priority][10] - * [What is the Industrial IoT? [And why the stakes are so high]][11] - - - -Those all pose stiff challenges, according to “Making Smart Cities Safe And Secure,” the Forrester report by Merritt Maxim and Salvatore Schiano. The attack surface for a smart city is, by default, enormous, given the volume of Internet-connected hardware involved. Some device, somewhere, is likely to be vulnerable, and with the devices geographically spread out it’s difficult to secure all types of access to them. - -Worse still, some legacy systems can be downright impossible to manage and update in a safe way. Older technology often contains no provision for live updates, and its vulnerabilities can be severe, according to the report. Physical access to some types of devices also remains a serious challenge. The report gives the example of wastewater treatment plants in remote locations in Australia, which were sabotaged by a contractor who accessed the SCADA systems directly. - -In addition to the risk of compromised control systems, the generalized insecurity of smart city IoT makes the vast amounts of data that it generates highly suspect. Improperly configured devices could collect more information than they’re supposed to, including personally identifiable information, which could violate privacy regulations. Also, the data collected is analyzed to glean useful information about such things as parking patterns, water flow and electricity use, and inaccurate or compromised information can badly undercut the value of smart city technology to a given user. - -“Security teams are just gaining maturity in the IT environment with the necessity for data inventory, classification, and flow mapping, together with thorough risk and privacy impact assessments, to drive appropriate protection,” the report says. “In OT environments, they’re even further behind.” - -Yet, despite the fact that IoT planning and implementation doubled between 2017 and 2018, according to Forrester’s data, comparatively little work has been done on the security front. The report lists 13 cyberattacks on smart-city technology between 2014 and 2019 that had serious consequences, including widespread electricity outages, ransomware infections on hospital computers and emergency-service interruptions. - -Still, there are ways forward, according to Forrester. Careful log monitoring can keep administrators abreast of what’s normal and what’s suspicious on their networks. Asset mapping and centralizing control-plane functionality should make it much more difficult for bad actors to insert malicious devices into a smart-city network or take control of less-secure items. And intelligent alerting – the kind that provides contextual information, differentiating between “this system just got rained on and has poor connectivity” and “someone is tampering with this system” – should help cities be more responsive to security threats when they arise. - -Join the Network World communities on [Facebook][12] and [LinkedIn][13] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3411561/report-smart-city-iot-isnt-smart-enough-yet.html - -作者:[Jon Gold][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Jon-Gold/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/smart_city_smart_cities_iot_internet_of_things_by_aleksandr_durnov_gettyimages-971455374_2400x1600-100788363-large.jpg -[2]: https://www.networkworld.com/article/3207535/internet-of-things/what-is-the-iot-how-the-internet-of-things-works.html -[3]: https://www.networkworld.com/article/3224893/internet-of-things/what-is-edge-computing-and-how-it-s-changing-the-network.html -[4]: https://www.networkworld.com/article/2287045/internet-of-things/wireless-153629-10-most-powerful-internet-of-things-companies.html -[5]: https://www.networkworld.com/article/3270961/internet-of-things/10-hot-iot-startups-to-watch.html -[6]: https://www.networkworld.com/article/3279346/internet-of-things/the-6-ways-to-make-money-in-iot.html -[7]: https://www.networkworld.com/article/3280225/internet-of-things/what-is-digital-twin-technology-and-why-it-matters.html -[8]: https://www.networkworld.com/article/3276313/internet-of-things/blockchain-service-centric-networking-key-to-iot-success.html -[9]: https://www.networkworld.com/article/3269736/internet-of-things/getting-grounded-in-iot-networking-and-security.html -[10]: https://www.networkworld.com/article/3276304/internet-of-things/building-iot-ready-networks-must-become-a-priority.html -[11]: https://www.networkworld.com/article/3243928/internet-of-things/what-is-the-industrial-iot-and-why-the-stakes-are-so-high.html -[12]: https://www.facebook.com/NetworkWorld/ -[13]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190725 Storage management a weak area for most enterprises.md b/sources/talk/20190725 Storage management a weak area for most enterprises.md deleted file mode 100644 index 859c1caa32..0000000000 --- a/sources/talk/20190725 Storage management a weak area for most enterprises.md +++ /dev/null @@ -1,82 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Storage management a weak area for most enterprises) -[#]: via: (https://www.networkworld.com/article/3411400/storage-management-a-weak-area-for-most-enterprises.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -Storage management a weak area for most enterprises -====== -Survey finds companies are adopting technology for such things as AI, machine learning, edge computing and IoT, but still use legacy storage that can't handle those workloads. -![Miakievy / Getty Images][1] - -Stop me if you’ve heard this before: Companies are racing to a new technological paradigm but are using yesterday’s tech to do it. - -I know. Shocking. - -A survey of more than 300 storage professionals by storage vendor NGD Systems found only 11% of the companies they talked to would give themselves an “A” grade for their compute and storage capabilities. - -Why? The chief reason given is that while enterprises are rapidly deploying technologies for edge networks, real-time analytics, machine learning, and internet of things (IoT) projects, they are still using legacy storage solutions that are not designed for such data-intensive workloads. More than half — 54% — said their processing of edge applications is a bottleneck, and they want faster and more intelligent storage solutions. - -**[ Read also: [What is NVMe, and how is it changing enterprise storage][2] ]** - -### NVMe SSD use increases, but doesn't solve all needs - -It’s not all bad news. The study, entitled ["The State of Storage and Edge Computing"][3] and conducted by Dimensional Research, found 60% of storage professionals are using NVMe SSDs to speed up the processing of large data sets being generated at the edge. - -However, this has not solved their needs. As artificial intelligence (AI) and other data-intensive deployments increase, data needs to be moved over increasingly longer distances, which causes network bottlenecks and delays analytic results. And edge computing systems tend to have a smaller footprint than a traditional data center, so they are performance constrained. - -The solution is to process the data where it is ingested, in this case, the edge device. Separate the wheat from the chafe and only send relevant data upstream to a data center to be processed. This is called computational storage, processing data where it is stored rather than moving it around. - -According to the survey, 89% of respondents said they expect real value from computational storage. Conveniently, NGD is a vendor of computational storage systems. So, yes, this is a self-serving finding. This happens a lot. That doesn’t mean they don’t have a valid point, though. Processing the data where it lies is the point of edge computing. - -Among the survey’s findings: - - * 55% use edge computing - * 71% use edge computing for real-time analytics - * 61% said the cost of traditional storage solutions continues to plague their applications - * 57% said faster access to storage would improve their compute abilities - - - -The study also found that [NVMe][2] is being adopted very quickly but is being hampered by price. - - * 86% expect storage’s future to rely on NVMe SSDs - * 60% use NVMe SSDs in their work environments - * 63% said NVMe SSDs helped with superior storage speed - * 67% reported budget and cost as issues preventing the use of NVMe SSDs - - - -That last finding is why so many enterprises are hampered in their work. For whatever reason they are using old storage systems rather than new NVMe systems, and it hurts them. - -### GPUs won't improve workload performance - -One interesting finding: 70% of respondents said they are using GPUs to help improve workload performance, but NGD said those are no good. - -“We were not surprised to find that while more than half of respondents are actively using edge computing, more than 70% are using legacy GPUs, which will not reduce the network bandwidth, power and footprint necessary to analyze mass data-sets in real time,” said Nader Salessi, CEO and founder of NGD Systems, in a statement. - -That’s because GPUs lend themselves well to repetitive tasks and parallel processing jobs, while computational storage is very much a serial processing job, with the task constantly changing. So while some processing jobs will benefit from a GPU, a good number will not and the GPU is essentially wasted. - -Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3411400/storage-management-a-weak-area-for-most-enterprises.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/edge_computing_by_miakievy_gettyimages-957694592_2400x1600-100788315-large.jpg -[2]: https://www.networkworld.com/article/3280991/what-is-nvme-and-how-is-it-changing-enterprise-storage.html -[3]: https://ngd.dnastaging.net/brief/NGD_Systems_Storage_Edge_Computing_Survey_Report -[4]: https://www.facebook.com/NetworkWorld/ -[5]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190726 NVMe over Fabrics enterprise storage spec enters final review process.md b/sources/talk/20190726 NVMe over Fabrics enterprise storage spec enters final review process.md deleted file mode 100644 index f14dcd7d67..0000000000 --- a/sources/talk/20190726 NVMe over Fabrics enterprise storage spec enters final review process.md +++ /dev/null @@ -1,71 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (NVMe over Fabrics enterprise storage spec enters final review process) -[#]: via: (https://www.networkworld.com/article/3411958/nvme-over-fabrics-enterprise-storage-spec-enters-final-review-process.html) -[#]: author: (Andy Patrizio https://www.networkworld.com/author/Andy-Patrizio/) - -NVMe over Fabrics enterprise storage spec enters final review process -====== -The NVMe over Fabric (NVMe-oF) architecture is closer to becoming a formal specification. It's expected improve storage network fabric communications and network performance. -![Gremlin / Getty Images][1] - -NVM Express Inc., the developer of the [NVMe][2] spec for enterprise SSDs, announced that its NVMe-oF architecture has entered a final 45-day review, an important step toward release of a formal specification for enterprise SSD makers. - -NVMe-oF stands for [NVMe over Fabrics][3], a mechanism to transfer data between a host computer and a target SSD or system over a network, such as Ethernet, Fibre Channel (FC), or InfiniBand. NVM Express first released the 1.0 spec of NVMe-oF in 2016, so this is long overdue. - -**[ Read also: [NVMe over Fabrics creates data-center storage disruption][3] ]** - -NVMe has become an important advance in enterprise storage because it allows for intra-network data sharing. Before, when PCI Express-based SSDs first started being used in servers, they could not easily share data with another physical server. The SSD was basically for the machine it was in, and moving data around was difficult. - -With NVMe over Fabrics, it’s possible for one machine to directly reach out to another for data and have it transmitted over a variety of high-speed fabrics rather than just Ethernet. - -### How NVMe-oF 1.1 improves storage network fabric communication - -The NVMe-oF 1.1 architecture is designed to improve storage network fabric communications in several ways: - - * Adds TCP transport supports NVMe-oF on current data center TCP/IP network infrastructure. - * Asynchronous discovery events inform hosts of addition or removal of target ports in a fabric-independent manner. - * Fabric I/O Queue Disconnect enables finer-grain I/O resource management. - * End-to-end (command to response) flow control improves concurrency. - - - -### New enterprise features for NVMe 1.4 - -The organization also announced the release of the NVMe 1.4 base specification with new “enterprise features” described as a further maturation of the protocol. The specification provides important benefits, such as improved quality of service (QoS), faster performance, improvements for high-availability deployments, and scalability optimizations for data centers. - -Among the new features: - - * Rebuild Assist simplifies data recovery and migration scenarios. - * Persistent Event Log enables robust drive history for issue triage and debug at scale. - * NVM Sets and IO Determinism allow for better performance, isolation, and QoS. - * Multipathing enhancements or Asymmetric Namespace Access (ANA) enable optimal and redundant paths to namespaces for high availability and full multi-controller scalability. - * Host Memory Buffer feature reduces latency and SSD design complexity, benefiting client SSDs. - - - -The upgraded NVMe 1.4 base specification and the pending over-fabric spec will be demonstrated at the Flash Memory Summit August 6-8, 2019 in Santa Clara, California. - -Join the Network World communities on [Facebook][4] and [LinkedIn][5] to comment on topics that are top of mind. - --------------------------------------------------------------------------------- - -via: https://www.networkworld.com/article/3411958/nvme-over-fabrics-enterprise-storage-spec-enters-final-review-process.html - -作者:[Andy Patrizio][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.networkworld.com/author/Andy-Patrizio/ -[b]: https://github.com/lujun9972 -[1]: https://images.idgesg.net/images/article/2019/02/big_data_storage_businessman_walks_through_futuristic_data_center_by_gremlin_gettyimages-1098116540_2400x1600-100788347-large.jpg -[2]: https://www.networkworld.com/article/3280991/what-is-nvme-and-how-is-it-changing-enterprise-storage.html -[3]: https://www.networkworld.com/article/3394296/nvme-over-fabrics-creates-data-center-storage-disruption.html -[4]: https://www.facebook.com/NetworkWorld/ -[5]: https://www.linkedin.com/company/network-world diff --git a/sources/talk/20190729 Do you prefer a live demo to be perfect or broken.md b/sources/talk/20190729 Do you prefer a live demo to be perfect or broken.md deleted file mode 100644 index b4b76aadd6..0000000000 --- a/sources/talk/20190729 Do you prefer a live demo to be perfect or broken.md +++ /dev/null @@ -1,82 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Do you prefer a live demo to be perfect or broken?) -[#]: via: (https://opensource.com/article/19/7/live-demo-perfect-or-broken) -[#]: author: (Lauren Maffeo https://opensource.com/users/lmaffeohttps://opensource.com/users/don-watkinshttps://opensource.com/users/jamesf) - -Do you prefer a live demo to be perfect or broken? -====== -Do you learn more from flawless demos or ones the presenter de-bugs in -real-time? Let us know by answering our poll. -![video editing dashboard][1] - -At [DevFest DC][2] in June, [Sara Robinson][3], developer advocate at Google Cloud, gave the most seamless live demo I've ever witnessed. - -Sara live-coded a machine model from scratch using TensorFlow and Keras. Then she trained the model live, deployed it to Google's Cloud AI platform, and used the deployed model to make predictions. - -With the exception of perhaps one small hiccup, the whole thing went smoothly, and I learned a lot as an audience member. - -At that evening's reception, I congratulated Sara on the live demo's success and told her I've never seen a live demo go so well. It turns out that this subject was already on her mind; Sara asked this question on Twitter less than two hours before her live demo: - -> Do you prefer watching a live demo where everything works perfectly or one that breaks and the presenter has to de-bug? -> -> — Sara Robinson (@SRobTweets) [June 14, 2019][4] - -Contrary to my preference for flawless demos, two-thirds of Sara's followers prefer to watch de-bugging. The replies to her poll were equally enlightening: - -> I prefer ones that break once or twice, just so you know it's real. "Break" can be something small like a typo or skipping a step. -> -> — Seth Vargo (@sethvargo) [June 14, 2019][5] - -> Broken demos which are fixed in real time seem to get a better reaction from the audience. This was our experience with the All-Demo Super Session at NEXT SF. Audible gasps followed by applause from the audience when the broken demo was fixed in real-time 🤓 -> -> — Jamie Kinney (@jamiekinney) [June 14, 2019][6] - -This made me reconsider my preference for perfection. When I attend live demos at events, I'm looking for tools that I'm unfamiliar with. I want to learn the basics of those tools, then see real-world applications. I don't expect magic, but I do want to see how the tools intend to work so I can gain and retain some knowledge. - -I've gone to several live demos that break. In my experience, this has caught most presenters off-guard; they seemed unfamiliar with the bugs at hand and, in one case, the error derailed the rest of the presentation. In short, it was like this: - -> Hmm, at least when the live demo fails you know it's not a video 😁 -> But I don't like when the presenter start to struggle, when everything becomes silent, it becomes so awkward (especially when I'm the one presenting) -> -> — Sylvain Nouts Ⓥ (@SylvainNouts) [June 14, 2019][7] - -Reading the replies to Sara's thread made me wonder what I'm really after when attending live demos. Is "perfection" what I seek? Or is it presenters who are more skilled at de-bugging in real-time? Upon reflection, I suspect that it's the latter. - -After all, "perfect" code is a lofty (if impossible) concept. Mistakes will happen, and I don't expect them not to. But I _do_ expect conference presenters to know their tools well enough that when things go sideways during live demos, they won't get so flustered that they can't keep going. - -Overall, this reply to Sara resonates with me the most. I attend live demos as a new coder with the goal to learn, and those that veer too far off-course aren't as effective for me: - -> I don’t necessarily prefer a broken demo, but I do think they show a more realistic view. -> That said, when you are newer to coding if the error takes things too far off the rails it can make it challenging to understand the original concept. -> -> — April Bowler (@A_Bowler2) [June 14, 2019][8] - -I don't expect everyone to attend live demos with the same goals and perspective as me. That's why we want to learn what the open source community thinks. - -_Do you prefer for live demos to be perfect? Or do you gain more from watching presenters de-bug in real-time? Do you attend live demos primarily to learn or for other reasons? Let us know by taking our poll or leaving a comment below._ - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/19/7/live-demo-perfect-or-broken - -作者:[Lauren Maffeo][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/lmaffeohttps://opensource.com/users/don-watkinshttps://opensource.com/users/jamesf -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/video_editing_folder_music_wave_play.png?itok=-J9rs-My (video editing dashboard) -[2]: https://www.devfestdc.org/ -[3]: https://twitter.com/SRobTweets -[4]: https://twitter.com/SRobTweets/status/1139619990687162368?ref_src=twsrc%5Etfw -[5]: https://twitter.com/sethvargo/status/1139620990546145281?ref_src=twsrc%5Etfw -[6]: https://twitter.com/jamiekinney/status/1139636109585989632?ref_src=twsrc%5Etfw -[7]: https://twitter.com/SylvainNouts/status/1139637154731237376?ref_src=twsrc%5Etfw -[8]: https://twitter.com/A_Bowler2/status/1139648492953976832?ref_src=twsrc%5Etfw diff --git a/sources/talk/20190729 I Used The Web For A Day On A 50 MB Budget - Smashing Magazine.md b/sources/talk/20190729 I Used The Web For A Day On A 50 MB Budget - Smashing Magazine.md deleted file mode 100644 index b0a7f4a7e0..0000000000 --- a/sources/talk/20190729 I Used The Web For A Day On A 50 MB Budget - Smashing Magazine.md +++ /dev/null @@ -1,538 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (I Used The Web For A Day On A 50 MB Budget — Smashing Magazine) -[#]: via: (https://www.smashingmagazine.com/2019/07/web-on-50mb-budget/) -[#]: author: (Chris Ashton https://www.smashingmagazine.com/author/chrisbashton) - -I Used The Web For A Day On A 50 MB Budget -====== - -Data can be prohibitively expensive, especially in developing countries. Chris Ashton puts himself in the shoes of someone on a tight data budget and offers practical tips for reducing our websites’ data footprint. - -This article is part of a series in which I attempt to use the web under various constraints, representing a given demographic of user. I hope to raise the profile of difficulties faced by real people, which are avoidable if we design and develop in a way that is sympathetic to their needs. - -Last time, I [navigated the web for a day using Internet Explorer 8][7]. This time, I browsed the web for a day on a 50 MB budget. - -### Why 50 MB? - -Many of us are lucky enough to be on mobile plans which allow several gigabytes of data transfer per month. Failing that, we are usually able to connect to home or public WiFi networks that are on fast broadband connections and have effectively unlimited data. - -But there are parts of the world where mobile data is prohibitively expensive, and where there is little or no broadband infrastructure. - -> People often buy data packages of just tens of megabytes at a time, making a gigabyte a relatively large and therefore expensive amount of data to buy. -> — Dan Howdle, consumer telecoms analyst at Cable.co.uk - -Just how expensive are we talking? - -#### The Cost Of Mobile Data - -A 2018 [study by cable.co.uk][8] found that Zimbabwe was the most expensive country in the world for mobile data, where 1 GB cost an average of $75.20, ranging from $12.50 to $138.46. The enormous range in price is due to smaller amounts of data being very expensive, getting proportionally cheaper the bigger the data plan you commit to. You can read the [study methodology][9] for more information. - -Zimbabwe is by no means a one-off. Equatorial Guinea, Saint Helena and the Falkland Islands are next in line, with 1 GB of data costing $65.83, $55.47 and $47.39 respectively. These countries generally have a combination of poor technical infrastructure and low adoption, meaning data is both costly to deliver and doesn’t have the economy of scale to drive costs down. - -Data is expensive in parts of Europe too. A gigabyte of data in Greece will set you back $32.71; in Switzerland, $20.22. For comparison, the same amount of data costs $6.66 in the UK, or $12.37 in the USA. On the other end of the scale, India is the cheapest place in the world for data, at an average cost of $0.26. Kyrgyzstan, Kazakhstan and Ukraine follow at $0.27, $0.49 and $0.51 per GB respectively. - -The speed of mobile networks, too, varies considerably between countries. Perhaps surprisingly, [users experience faster speeds over a mobile network than WiFi][10] in at least 30 countries worldwide, including Australia and France. South Korea has the [fastest mobile download speed][11], averaging 52.4 Mbps, but Iraq has the slowest, averaging 1.6 Mbps download and 0.7 Mbps upload. The USA ranks 40th in the world for mobile download speeds, at around 34 Mbps, and is [at risk of falling further behind][12] as the world moves towards 5G. - -As for mobile network connection type, 84.7% of user connections in the UK are on 4G, compared to 93% in the USA, and 97.5% in South Korea. This compares with less than 50% in Uzbekistan and less than 60% in Algeria, Ecuador, Nepal and Iraq. - -#### The Cost Of Broadband Data - -Meanwhile, a [study of the cost of broadband in 2018][13] shows that a broadband connection in Niger costs $263 ‘per megabit per month’. This metric is a little difficult to comprehend, so here’s an example: if the average cost of broadband packages in a country is $22, and the average download speed offered by the packages is 10 Mbps, then the cost ‘per megabit per month’ would be $2.20. - -It’s an interesting metric, and one that acknowledges that broadband speed is as important a factor as the data cap. A cost of $263 suggests a combination of extremely slow and extremely expensive broadband. For reference, the metric is $1.19 in the UK and $1.26 in the USA. - -What’s perhaps easier to comprehend is the average cost of a broadband package. Note that this study was looking for the cheapest broadband packages on offer, ignoring whether or not these packages had a data cap, so provides a useful ballpark figure rather than the cost of data per se. - -On package cost alone, Mauritania has the most expensive broadband in the world, at an average of $768.16 (a range of $307.26 to $1,368.72). This enormous cost includes building physical lines to the property, since few already exist in Mauritania. At 0.7 Mbps, Mauritania also has one of the slowest broadband networks in the world. - -[Taiwan has the fastest broadband in the world][14], at a mean speed of 85 Mbps. Yemen has the slowest, at 0.38 Mbps. But even countries with good established broadband infrastructure have so-called ‘not-spots’. The United Kingdom is ranked 34th out of 207 countries for broadband speed, but in July 2019 there was [still a school in the UK without broadband][15]. - -The average cost of a broadband package in the UK is $39.58, and in the USA is $67.69. The cheapest average in the world is Ukraine’s, at just $5, although the cheapest broadband deal of them all was found in Kyrgystan ($1.27 — against the country average of $108.22). - -Zimbabwe was the most costly country for mobile data, and the statistics aren’t much better for its broadband, with an average cost of $128.71 and a ‘per megabit per month’ cost of $6.89. - -#### Absolute Cost vs Cost In Real Terms - -All of the costs outlined so far are the absolute costs in USD, based on the exchange rates at the time of the study. These costs have [not been accounted for cost of living][16], meaning that for many countries the cost is actually far higher in real terms. - -I’m going to limit my browsing today to 50 MB, which in Zimbabwe would cost around $3.67 on a mobile data tariff. That may not sound like much, but teachers in Zimbabwe were striking this year because their [salaries had fallen to just $2.50 a day][17]. - -For comparison, $3.67 is around half the [$7.25 minimum wage in the USA][18]. As a Zimbabwean, I’d have to work for around a day and a half to earn the money to buy this 50MB data, compared to just half an hour in the USA. It’s not easy to compare cost of living between countries, but on wages alone the $3.67 cost of 50 MB of data in Zimbabwe would feel like $52 to an American on minimum wage. - -### Setting Up The Experiment - -I launched Chrome and opened the dev tools, where I throttled the network to a slow 3G connection. I wanted to simulate a slow connection like those experienced by users in Uzbekistan, to see what kind of experience websites would give me. I also throttled my CPU to simulate being on a lower end device. - -[![][19]][20]I opted to throttle my network to Slow 3G and my CPU to 6x slowdown. ([Large preview][20]) - -I installed [ModHeader][21] and set the [‘Save-Data’ header][22] to let websites know I want to minimise my data usage. This is also the header set by Chrome for Android’s ‘Lite mode’, which I’ll cover in more detail later. - -I downloaded [TripMode][23]; an application for Mac which gives you control over which apps on your Mac can access the internet. Any other application’s internet access is automatically blocked. - -You can enable/disable individual apps from connecting to the internet with TripMode. I enabled Chrome. ([Large preview][24]) - -How far do I predict my 50 MB budget will take me? With the [average weight of a web page being almost 1.7 MB][25], that suggests I’ve got around 29 pages in my budget, although probably a few more than that if I’m able to stay on the same sites and leverage browser caching. - -Throughout the experiment I will suggest performance tips to speed up the [first contentful paint][26] and perceived loading time of the page. Some of these tips may not affect the amount of data transferred directly, but do generally involve deferring the download of less important resources, which on slow connections may mean the resources are never downloaded and data is saved. - -### The Experiment - -Without any further ado, I loaded google.com, using 402 KB of my budget and spending $0.03 (around 1% of my Zimbabwe budget). - -[![402 KB transferred, 1.1 MB resources, 24 requests][27]][28]402 KB transferred, 1.1 MB resources, 24 requests. ([Large preview][28]) - -All in all, not a bad page size, but I wondered where those 24 network requests were coming from and whether or not the page could be made any lighter. - -#### Google Homepage — DOM - -[![][29]][30]Chrome devtools screenshot of the DOM, where I’ve expanded one inline `style` tag. ([Large preview][30]) - -Looking at the page markup, there are no external stylesheets — all of the CSS is inline. - -##### Performance Tip #1: Inline Critical CSS - -This is good for performance as it saves the browser having to make an additional network request in order to fetch an external stylesheet, so the styles can be parsed and applied immediately for the first contentful paint. There’s a trade-off to be made here, as external stylesheets can be cached but inline ones cannot (unless you [get clever with JavaScript][31]). - -The general advice is for your [critical styles][32] (anything [above-the-fold][33]) to be inline, and for the rest of your styling to be external and loaded asynchronously. Asynchronous loading of CSS can be achieved in [one remarkably clever line of HTML][34]: - -``` - -``` - -The devtools show a prettified version of the DOM. If you want to see what was actually downloaded to the browser, switch to the Sources tab and find the document. - -[![A wall of minified code.][35]][36]Switching to Sources and finding the index shows the ‘raw’ HTML that was delivered to the browser. What a mess! ([Large preview][36]) - -You can see there is a LOT of inline JavaScript here. It’s worth noting that it has been uglified rather than merely minified. - -##### Performance Tip #2: Minify And Uglify Your Assets - -Minification removes unnecessary spaces and characters, but uglification actually ‘mangles’ the code to be shorter. The tell-tale sign is that the code contains short, machine-generated variable names rather than untouched source code. This is good as it means the script is smaller and quicker to download. - -Even so, inline scripts look to be roughly 120 KB of the 210 KB page resource (about half the 60 KB gzipped size). In addition, there are five external JavaScript files amounting to 291 KB of the 402 KB downloaded: - -[![Network tab of DevTools showing the external javascript files][37]][38]Five external JavaScript files in the Network tab of the devtools. ([Large preview][38]) - -This means that JavaScript accounts for about 80 percent of the overall page weight. - -This isn’t useless JavaScript; Google has to have some in order to display suggestions as you type. But I suspect a lot of it is tracking code and advertising setup. - -For comparison, I disabled JavaScript and reloaded the page: - -[![DevTools showing only 5 network requests][39]][40]The disabled JS version of Google search was only 102 KB and had just 5 network requests. ([Large preview][40]) - -The JS-disabled version of Google search is just 102 KB, as opposed to 402 KB. Although Google can’t provide autosuggestions under these conditions, the site is still functional, and I’ve just cut my data usage down to a quarter of what it was. If I really did have to limit my data usage in the long term, one of the first things I’d do is disable JavaScript. [It’s not as bad as it sounds][41]. - -##### Performance Tip #3: Less Is More - -Inlining, uglifying and minifying assets is all well and good, but the best performance comes from not sending down the assets in the first place. - - * Before adding any new features, do you have a [performance budget][42] in place? - * Before adding JavaScript to your site, can your feature be accomplished using plain HTML? (For example, [HTML5 form validation][43]). - * Before pulling a large JavaScript or CSS library into your application, use something like [bundlephobia.com][44] to measure how big it is. Is the convenience worth the weight? Can you accomplish the same thing using vanilla code at a much smaller data size? - - - -#### Analysing The Resource Info - -There’s a lot to unpack here, so let’s get cracking. I’ve only got 50 MB to play with, so I’m going to milk every bit of this page load. Settle in for a short Chrome Devtools tutorial. - -402 KB transferred, but 1.1 MB of resources: what does that actually mean? - -It means 402 KB of content was actually downloaded, but in its compressed form (using a compression algorithm such as [gzip or brotli][45]). The browser then had to do some work to unpack it into something meaningful. The total size of the unpacked data is 1.1 MB. - -This unpacking isn’t free — [there are a few milliseconds of overhead in decompressing the resources][46]. But that’s a negligible overhead compared to sending 1.1MB down the wire. - -##### Performance Tip #4: Compress Text-based Assets - -As a general rule, always compress your assets, using something like gzip. But don’t use compression on your images and other binary files — you should optimize these in advance at source. Compression could actually end up [making them bigger][47]. - -And, if you can, [avoid compressing files that are 1500 bytes or smaller][47]. The smallest TCP packet size is 1500 bytes, so by compressing to, say, 800 bytes, you save nothing, as it’s still transmitted in the same byte packet. Again, the cost is negligible, but wastes some compression CPU time on the server and decompression CPU time on the client. - -Now back to the Network tab in Chrome: let’s dig into those priorities. Notice that resources have priority “Highest” to “Lowest” — these are the browser’s best guess as to what are the more important resources to download. The higher the priority, the sooner the browser will try to download the asset. - -##### Performance Tip #5: Give Resource Hints To The Browser - -The browser will guess at what the highest priority assets are, but you can [provide a resource hint][48] using the `` tag, instructing the browser to download the asset as soon as possible. It’s a good idea to preload fonts, logos and anything else that appears above the fold. - -Let’s talk about caching. I’m going to hold ALT and right-click to change my column headers to unlock some more juicy information. We’re going to check out Cache-Control. - -There are lots of interesting fields tucked away behind ALT. ([Large preview][49]) - -Cache-Control denotes whether or not a resource can be cached, how long it can be cached for, and what rules it should follow around [revalidating][50]. Setting proper cache values is crucial to keeping the data cost of repeat visits down. - -##### Performance Tip #6: Set cache-control Headers On All Cacheable Assets - -Note that the cache-control value begins with a directive of `public` or `private`, followed by an expiration value (e.g. `max-age=31536000`). What does the directive mean, and why the oddly specific `max-age` value? - -[![Screenshot of Google network tab with cache-control column visible][51]][52]A mixture of max-age values and public/private. ([Large preview][52]) - -The value `31536000` is the number of seconds there are in a year, and is the theoretical maximum value allowed by the cache-control specification. It is common to see this value applied to all static assets and effectively means “this resource isn’t going to change”. In practice, [no browser is going to cache for an entire year][53], but it will cache the asset for as long as makes sense. - -To explain the public/private directive, we must explain the two main caches that exist off the server. First, there is the traditional browser cache, where the resource is stored on the user’s machine (the ‘client’). And then there is the CDN cache, which sits between the client and the server; resources are cached at the CDN level to prevent the CDN from requesting the resource from the origin server over and over again. - -A `Cache-Control` directive of `public` allows the resource to be cached in both the client and the CDN. A value of `private` means only the client can cache it; the CDN is not supposed to. This latter value is typically used for pages or assets that exist behind authentication, where it is fine to be cached on the client but we wouldn’t want to leak private information by caching it in the CDN and delivering it to other users. - -[![Screenshot of Google logo cache-control setting: private, max-age=31536000][54]][55]A mixture of max-age values and public/private. ([Large preview][55]) - -One thing that got my attention was that the Google logo has a cache control of “private”. Other images on the page do have a public cache, and I don’t know why the logo would be treated any differently. If you have any ideas, let me know in the comments! - -I refreshed the page and most of the resources were served from cache, apart from the page itself, which as you’ve seen already is `private, max-age=0`, meaning it cannot be cached. This is normal for dynamic web pages where it is important that the user always gets the very latest page when they refresh. - -It was at this point I accidentally clicked on an ‘Explanation’ URL in the devtools, which took me to the [network analysis reference][56], costing me about 5 MB of my budget. Oops. - -### Google Dev Docs - -4.2 MB of this new 5 MB page was down to images; specifically SVGs. The weightiest of these was 186 KB, which isn’t particularly big — there were just so many of them, and they all downloaded at once. - -This is a loooong page. All the images downloaded on page load. ([Large preview][57]) - -That 5 MB page load was 10% of my budget for today. So far I’ve used 5.5 MB, including the no-JavaScript reload of the Google homepage, and spent $0.40. I didn’t even mean to open this page. - -What would have been a better user experience here? - -##### Performance Tip #7: Lazy-load Your Images - -Ordinarily, if I accidentally clicked on a link, I would hit the back button in my browser. I’d have received no benefit whatsoever from downloading those images — what a waste of 4.2 MB! - -Apart from video, where you generally know what you’re getting yourself into, images are by far the biggest culprit to data usage on the web. A [study of the world’s top 500 websites][58] found that images take up to 53% of the average page weight. “This means they have a big impact on page-loading times and subsequently overall performance”. - -Instead of downloading all of the images on page load, it is good practice to lazy-load the images so that only users who are engaged with the page pay the cost of downloading them. Users who choose not to scroll below the fold therefore don’t waste any unnecessary bandwidth downloading images they’ll never see. - -There’s a great [css-tricks.com guide to rolling out lazy-loading for images][59] which offers a good balance between those on good connections, those on poor connections, and those with JavaScript disabled. - -If this page had implemented lazy loading as per the guide above, each of the 38 SVGs would have been represented by a 1 KB placeholder image by default, and only loaded into view on scroll. - -##### Performance Tip #8: Use The Right Format For Your Images - -I thought that Google had missed a trick by not using [WebP][60], which is an image format that is 26% smaller in size compared to PNGs (with no loss in quality) and 25-34% smaller in size compared to JPEGs (and of a comparable quality). I thought I’d have a go at converting SVG to WebP. - -Converting to WebP did bring one of the SVGs down from 186 KB to just 65 KB, but actually, looking at the images side by side, the WebP came out grainy: - -[![Comparison of the two images][61]][62]The SVG (left) is noticeably crisper than the WebP (right). ([Large preview][62]) - -I then tried converting one of the PNGs to WebP, which is supposed to be lossless and should come out smaller. However, the WebP output was *heavier* (127 KB, from 109 KB)! - -[![Comparison of the two images][63]][64]The PNG (left) is a similar quality to the WebP (right) but is smaller at 109 KB compared to 127 KB. ([Large preview][64]) - -This surprised me. WebP isn’t necessarily the silver bullet we think it is, and even Google have neglected to use it on this page. - -So my advice would be: where possible, experiment with different image formats on a per-image basis. The format that keeps the best quality for the smallest size may not be the one you expect. - -Now back to the DOM. I came across this: - -Notice the `async` keyword on the Google analytics script? - -[![Screenshot of performance analysis output of devtools][65]][66]Google analytics has ‘low’ priority. ([Large preview][66]) - -Despite being one of the first things in the head of the document, this was given a low priority, as we’ve explicitly opted out of being a blocking request by using the `async` keyword. - -A blocking request is one that stops the rendering of the page. A `