| less
+```
+
+明白了吗?你想知道的有关主机硬件和 Linux 发行版的所有内容都在这里,它们都可以在剧本中使用。我还没有达到需要使用这些变量的地步,但是我相信在接下来的几天中会用到。
+
+### 模块
+
+上面的 `ansible` 命令使用 `-m` 选项来指定 `setup` 模块。Ansible 已经内置了许多模块,所以你对这些模块不需要使用 `-m`。也可以安装许多下载的模块,但是内置模块可以完成我目前项目所需的一切。
+
+### 剧本
+
+剧本几乎可以放在任何地方。因为我需要以 root 身份运行,所以我将它放在了 `/root/ansible` 下。当我运行 Ansible 时,只要这个目录是当前的工作目录(PWD),它就可以找到我的剧本。Ansible 还有一个选项,用于在运行时指定不同的剧本和位置。
+
+剧本可以包含注释,但是我看到的文章或书籍很少提及此。但作为一个相信记录一切的系统管理员,我发现使用注释很有帮助。这并不是说在注释中做和任务名称同样的事情,而是要确定任务组的目的,并确保我以某种方式或顺序记录我做这些事情的原因。当我可能忘记最初的想法时,这可以帮助以后解决调试问题。
+
+剧本只是定义主机所需状态的任务集合。在剧本的开头指定主机名或清单组,并定义 Ansible 将在其上运行剧本的主机。
+
+以下是我的一个剧本示例:
+
+```
+################################################################################
+# This Ansible playbook updates Midnight commander configuration files. #
+################################################################################
+- name: Update midnight commander configuration files
+ hosts: all
+
+ tasks:
+ - name: ensure midnight commander is the latest version
+ dnf:
+ name: mc
+ state: present
+
+ - name: create ~/.config/mc directory for root
+ file:
+ path: /root/.config/mc
+ state: directory
+ mode: 0755
+ owner: root
+ group: root
+
+ - name: create ~/.config/mc directory for dboth
+ file:
+ path: /home/dboth/.config/mc
+ state: directory
+ mode: 0755
+ owner: dboth
+ group: dboth
+
+ - name: copy latest personal skin
+ copy:
+ src: /root/ansible/UpdateMC/files/MidnightCommander/DavidsGoTar.ini
+ dest: /usr/share/mc/skins/DavidsGoTar.ini
+ mode: 0644
+ owner: root
+ group: root
+
+ - name: copy latest mc ini file
+ copy:
+ src: /root/ansible/UpdateMC/files/MidnightCommander/ini
+ dest: /root/.config/mc/ini
+ mode: 0644
+ owner: root
+ group: root
+
+ - name: copy latest mc panels.ini file
+ copy:
+ src: /root/ansible/UpdateMC/files/MidnightCommander/panels.ini
+ dest: /root/.config/mc/panels.ini
+ mode: 0644
+ owner: root
+ group: root
+<截断>
+```
+
+剧本从它自己的名字和它将要操作的主机开始,在本文中,所有主机都在我的 `hosts` 文件中。`tasks` 部分列出了使主机达到所需状态的特定任务。这个剧本从使用 DNF 更新 Midnight Commander 开始(如果它不是最新的版本的话)。下一个任务确保创建所需的目录(如果它们不存在),其余任务将文件复制到合适的位置,这些 `file` 和 `copy` 任务还可以为目录和文件设置所有权和文件模式。
+
+剧本细节超出了本文的范围,但是我对这个问题使用了一点蛮力。还有其它方法可以确定哪些用户需要更新文件,而不是对每个用户的每个文件使用一个任务。我的下一个目标是简化这个剧本,使用一些更先进的技术。
+
+运行剧本很容易,只需要使用 `ansible-playbook` 命令。`.yml` 扩展名代表 YAML,我看到过它的几种不同含义,但我认为它是“另一种标记语言”,尽管有些人声称 YAML 不是这种语言。
+
+这个命令将会运行剧本,它会更新 Midnight Commander 文件:
+
+```
+# ansible-playbook -f 10 UpdateMC.yml
+```
+
+`-f` 选项指定 Ansible 使用 10 个线程来执行操作。这可以大大加快整个任务的完成速度,特别是在多台主机上工作时。
+
+### 输出
+
+剧本运行时会列出每个任务和执行结果。`ok` 代表任务管理的机器状态已经完成,因为在任务中定义的状态已经为真,所以 Ansible 不需要执行任何操作。
+
+`changed` 表示 Ansible 已经执行了指定的任务。在这种情况下,任务中定义的机器状态不为真,所以执行指定的操作使其为真。在彩色终端上,`TASK` 行会以彩色显示。我的终端配色为“amber-on-black”,`TASK` 行显示为琥珀色,`changed` 是棕色,`ok` 为绿色,错误是红色。
+
+下面的输出是我最终用于在新主机执行安装后配置的剧本:
+
+```
+PLAY [Post-installation updates, package installation, and configuration]
+
+TASK [Gathering Facts]
+ok: [testvm2]
+
+TASK [Ensure we have connectivity]
+ok: [testvm2]
+
+TASK [Install all current updates]
+changed: [testvm2]
+
+TASK [Install a few command line tools]
+changed: [testvm2]
+
+TASK [copy latest personal Midnight Commander skin to /usr/share]
+changed: [testvm2]
+
+TASK [create ~/.config/mc directory for root]
+changed: [testvm2]
+
+TASK [Copy the most current Midnight Commander configuration files to /root/.config/mc]
+changed: [testvm2] => (item=/root/ansible/PostInstallMain/files/MidnightCommander/DavidsGoTar.ini)
+changed: [testvm2] => (item=/root/ansible/PostInstallMain/files/MidnightCommander/ini)
+changed: [testvm2] => (item=/root/ansible/PostInstallMain/files/MidnightCommander/panels.ini)
+
+TASK [create ~/.config/mc directory in /etc/skel]
+changed: [testvm2]
+
+<截断>
+```
+
+### cowsay
+
+如果你的计算机上安装了 [cowsay][7] 程序,你会发现 `TASK` 的名字出现在奶牛的语音泡泡中:
+
+```
+ ____________________________________
+< TASK [Ensure we have connectivity] >
+ ------------------------------------
+ \ ^__^
+ \ (oo)\\_______
+ (__)\ )\/\
+ ||----w |
+ || ||
+```
+
+如果你没有这个有趣的程序,你可以使用发行版的包管理器安装 Cowsay 程序。如果你有这个程序但不想要它,可以通过在 `/etc/ansible/ansible.cfg` 文件中设置 `nocows=1` 将其禁用。
+
+我喜欢这头奶牛,它很有趣,但是它会占用我的一部分屏幕。因此,在它开始妨碍我使用时,我就把它禁用了。
+
+### 目录
+
+与我的 Midnight Commander 任务一样,经常需要安装和维护各种类型的文件。创建用于存储剧本的目录树的“最佳实践”和系统管理员一样多,至少与编写有关 Ansible 书和文章的作者数量一样多。
+
+我选择了一个对我有意义的简单结构:
+
+```bash
+/root/ansible
+└── UpdateMC
+ ├── files
+ │ └── MidnightCommander
+ │ ├── DavidsGoTar.ini
+ │ ├── ini
+ │ └── panels.ini
+ └── UpdateMC.yml
+```
+
+你可以使用任何结构。但是请注意,其它系统管理员可能需要使用你设置的剧本来工作,所以目录应该具有一定程度的逻辑。当我使用 RPM 和 Bash 脚本执行安装任务后,我的文件仓库有点分散,绝对没有任何逻辑结构。当我为许多管理任务创建剧本时,我将介绍一个更有逻辑的结构来管理我的目录。
+
+### 多次运行剧本
+
+根据需要或期望多次运行剧本是安全的。只有当主机状态与任务中指定的状态不匹配时,才会执行每个任务。这使得很容易从先前的剧本运行中遇到的错误中恢复。因为当剧本遇到错误时,它将停止运行。
+
+在测试我的第一个剧本时,我犯了很多错误并改正了它们。假设我的修正正确,那么剧本每次运行,都会跳过那些状态已与指定状态匹配的任务,执行不匹配状态的任务。当我的修复程序起作用时,之前失败的任务就会成功完成,并且会执行此任务之后的任务 —— 直到遇到另一个错误。
+
+这使得测试变得容易。我可以添加新任务,并且在运行剧本时,只有新任务会被执行,因为它们是唯一与测试主机期望状态不匹配的任务。
+
+### 一些思考
+
+有些任务不适合用 Ansible,因为有更好的方法可以实现特定的计算机状态。我想到的场景是使 VM 返回到初始状态,以便可以多次使用它来执行从已知状态开始的测试。让 VM 进入特定状态,然后对此时的计算机状态进行快照要容易得多。还原到该快照与 Ansible 将主机返回到之前状态相比,通常还原到快照通常会更容易且更快。在研究文章或测试新代码时,我每天都会做几次这样的事情。
+
+在完成用于更新 Midnight Commander 的剧本之后,我创建了一个新的剧本,用于在新安装的 Fedora 主机上执行安装任务。我已经取得了不错的进步,剧本比我第一个的更加复杂,但没有那么粗暴。
+
+在使用 Ansible 的第一天,我创建了一个解决问题的剧本,我还开始编写第二个剧本,它将解决安装后配置的大问题,在这个过程中我学到了很多东西。
+
+尽管我真的很喜欢使用 [Bash][8] 脚本来管理任务,但是我发现 Ansible 可以完成我想要的一切,并且可以使系统保持在我所需的状态。只用了一天,我就成为了 Ansible 的粉丝。
+
+### 资源
+
+我找到的最完整、最有用的参考文档是 Ansible 网站上的[用户指南][9]。本文仅供参考,不作为入门文档。
+
+多年来,我们已经发布了许多[有关 Ansible 的文章][10],我发现其中大多数对我的需求很有帮助。Enable Sysadmin 网站上也有很多对我有帮助 [Ansible 文章][11]。你可以通过查看本周(2020 年 10 月 13 日至 14 日)的 [AnsibleFest][12] 了解更多信息。该活动完全是线上的,可以免费注册。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/20/10/first-day-ansible
+
+作者:[David Both][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/dboth
+[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.ansible.com/
+[3]: https://www.python.org/
+[4]: https://midnight-commander.org/
+[5]: https://en.wikipedia.org/wiki/List_of_DNS_record_types
+[6]: https://docs.ansible.com/ansible/latest/user_guide/playbooks_vars_facts.html#ansible-facts
+[7]: https://en.wikipedia.org/wiki/Cowsay
+[8]: https://opensource.com/downloads/bash-cheat-sheet
+[9]: https://docs.ansible.com/ansible/latest/user_guide/index.html
+[10]: https://opensource.com/tags/ansible
+[11]: https://www.redhat.com/sysadmin/topics/ansible
+[12]: https://www.ansible.com/ansiblefest
diff --git a/published/20160302 Go channels are bad and you should feel bad.md b/published/202101/20160302 Go channels are bad and you should feel bad.md
similarity index 100%
rename from published/20160302 Go channels are bad and you should feel bad.md
rename to published/202101/20160302 Go channels are bad and you should feel bad.md
diff --git a/published/20181009 GCC- Optimizing Linux, the Internet, and Everything.md b/published/202101/20181009 GCC- Optimizing Linux, the Internet, and Everything.md
similarity index 100%
rename from published/20181009 GCC- Optimizing Linux, the Internet, and Everything.md
rename to published/202101/20181009 GCC- Optimizing Linux, the Internet, and Everything.md
diff --git a/published/20181123 Three SSH GUI Tools for Linux.md b/published/202101/20181123 Three SSH GUI Tools for Linux.md
similarity index 100%
rename from published/20181123 Three SSH GUI Tools for Linux.md
rename to published/202101/20181123 Three SSH GUI Tools for Linux.md
diff --git a/published/20190104 Search, Study And Practice Linux Commands On The Fly.md b/published/202101/20190104 Search, Study And Practice Linux Commands On The Fly.md
similarity index 100%
rename from published/20190104 Search, Study And Practice Linux Commands On The Fly.md
rename to published/202101/20190104 Search, Study And Practice Linux Commands On The Fly.md
diff --git a/published/20190204 Getting started with Git- Terminology 101.md b/published/202101/20190204 Getting started with Git- Terminology 101.md
similarity index 100%
rename from published/20190204 Getting started with Git- Terminology 101.md
rename to published/202101/20190204 Getting started with Git- Terminology 101.md
diff --git a/published/20190205 5 Streaming Audio Players for Linux.md b/published/202101/20190205 5 Streaming Audio Players for Linux.md
similarity index 100%
rename from published/20190205 5 Streaming Audio Players for Linux.md
rename to published/202101/20190205 5 Streaming Audio Players for Linux.md
diff --git a/published/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md b/published/202101/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md
similarity index 100%
rename from published/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md
rename to published/202101/20190205 Install Apache, MySQL, PHP (LAMP) Stack On Ubuntu 18.04 LTS.md
diff --git a/published/20190215 Make websites more readable with a shell script.md b/published/202101/20190215 Make websites more readable with a shell script.md
similarity index 100%
rename from published/20190215 Make websites more readable with a shell script.md
rename to published/202101/20190215 Make websites more readable with a shell script.md
diff --git a/published/20190220 Do Linux distributions still matter with containers.md b/published/202101/20190220 Do Linux distributions still matter with containers.md
similarity index 100%
rename from published/20190220 Do Linux distributions still matter with containers.md
rename to published/202101/20190220 Do Linux distributions still matter with containers.md
diff --git a/published/20190322 Printing from the Linux command line.md b/published/202101/20190322 Printing from the Linux command line.md
similarity index 100%
rename from published/20190322 Printing from the Linux command line.md
rename to published/202101/20190322 Printing from the Linux command line.md
diff --git a/published/20190516 Monitor and Manage Docker Containers with Portainer.io (GUI tool) - Part-2.md b/published/202101/20190516 Monitor and Manage Docker Containers with Portainer.io (GUI tool) - Part-2.md
similarity index 100%
rename from published/20190516 Monitor and Manage Docker Containers with Portainer.io (GUI tool) - Part-2.md
rename to published/202101/20190516 Monitor and Manage Docker Containers with Portainer.io (GUI tool) - Part-2.md
diff --git a/published/20190924 Integrate online documents editors, into a Python web app using ONLYOFFICE.md b/published/202101/20190924 Integrate online documents editors, into a Python web app using ONLYOFFICE.md
similarity index 100%
rename from published/20190924 Integrate online documents editors, into a Python web app using ONLYOFFICE.md
rename to published/202101/20190924 Integrate online documents editors, into a Python web app using ONLYOFFICE.md
diff --git a/published/20191010 The biggest risk to uptime- Your staff.md b/published/202101/20191010 The biggest risk to uptime- Your staff.md
similarity index 100%
rename from published/20191010 The biggest risk to uptime- Your staff.md
rename to published/202101/20191010 The biggest risk to uptime- Your staff.md
diff --git a/published/20191224 Top articles for learning Python in 2020.md b/published/202101/20191224 Top articles for learning Python in 2020.md
similarity index 100%
rename from published/20191224 Top articles for learning Python in 2020.md
rename to published/202101/20191224 Top articles for learning Python in 2020.md
diff --git a/translated/tech/20191225 Making trade-offs when writing Python code.md b/published/202101/20191225 Making trade-offs when writing Python code.md
similarity index 62%
rename from translated/tech/20191225 Making trade-offs when writing Python code.md
rename to published/202101/20191225 Making trade-offs when writing Python code.md
index 46c283bcd6..1e7caf0b23 100644
--- a/translated/tech/20191225 Making trade-offs when writing Python code.md
+++ b/published/202101/20191225 Making trade-offs when writing Python code.md
@@ -1,8 +1,8 @@
[#]: collector: (lujun9972)
[#]: translator: (wxy)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13053-1.html)
[#]: subject: (Making trade-offs when writing Python code)
[#]: via: (https://opensource.com/article/19/12/zen-python-trade-offs)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
@@ -12,7 +12,7 @@
> 本文是 Python 之禅特别系列的一部分,重点此篇着眼于第七、八、九条原则:可读性、特殊情况和实用性。
-![开发人员和运营经理两个人之间的铜墙铁壁][1]
+![](https://img.linux.net.cn/data/attachment/album/202101/26/105645c1looxqxns12loen.jpg)
软件开发是一门充满了取舍的学科。每一个选择,都有一个同样合理但相反的选择。将一个方法私有化?你在鼓励复制粘贴。将一个方法公开?你在过早地对一个接口做出承诺。
@@ -20,27 +20,19 @@
### 可读性很重要
-从某种意义上说,这一中间原则确实是整个 Python 之禅的中心。这条原则与编写高效的程序无关。在大多数情况下,它甚至与编写健壮的程序无关。它讲的是编写出*别人能读懂的程序*。
+从某种意义上说,这一中间原则确实是整个 Python 之禅的中心。这条原则与编写高效的程序无关。在大多数情况下,它甚至与编写健壮的程序也无关。它讲的是编写出*别人能读懂的程序*。
阅读代码,就其本质而言,发生在代码被添加到系统中之后。通常,它会发生在很久很久以后。忽略可读性是最简单的选择,因为它对现在没有伤害。无论添加新代码的原因是什么,它都会对现在造成影响,无论是一个令人痛苦的 bug 还是一个被强烈要求的功能。
-面对巨大的压力,把可读性扔到一边,只管“解决问题”,Python 之禅提醒我们:可读性很重要。编写代码让它适合阅读,是对自己和他人的一种慈悲。
-
-###特殊情况还没有特殊到违反规则的地步。
-
-总有个借口。这个bug特别痛苦,我们不要担心简单。这个功能特别紧急,我们不要担心美观。这个案例所涉及的领域规则特别毛躁,我们不要担心嵌套程度。
-
-一旦我们允许特殊恳求,大坝墙就会破裂,没有原则了;事情就会演变成一个疯狂的麦克斯荒诞症,每个程序员都为自己,试图找到最好的借口。
-
-纪律需要承诺。只有在事情困难的时候,在强烈的诱惑下,才会考验一个软件开发人员。总有一个合理的借口来破坏规则,这就是为什么必须守规矩的原因。纪律是向例外说不的艺术。 任何解释都无法改变这一点。
+如果面对巨大的压力,把可读性扔到一边,只管“解决问题”,而 Python 之禅提醒我们:可读性很重要。编写代码让它适合阅读,无论是对自己还是他人,都是一种慈悲。
### 特殊情况不足以违反规则
-总是有各种借口。这个 bug 特别麻烦,先简单处理一下吧;这个功能特别紧急,别管美观了;这种情况下所涉及的领域规则特别复杂,嵌套深点也没事。
+总是有各种借口:这个 bug 特别麻烦,先简单处理一下吧;这个功能特别紧急,别管美观了;这种情况下所涉及的领域规则特别复杂,嵌套深点也没关系。
-一旦我们允许特例的借口,大坝就会破裂,就丧失原则了;事情就会演变成一个疯狂麦克斯的荒诞症,每个程序员都会为自己试图找到最好的借口。
+一旦我们对特例的借口妥协,大坝就会破裂,就丧失了原则;事情就会演变成一个疯狂麦克斯的荒诞症,每个程序员都会为自己试图找到最好的借口。
-纪律需要承诺。只有当事情艰辛、有强烈的诱惑时,才是对一个软件开发人员的考验。总是有合理的借口来破坏规则,这就是为什么必须守规矩的原因。纪律就是向例外说不的艺术。没有任何解释可以改变这一点。
+纪律需要承诺。只有当事情艰辛、有强烈的诱惑时,才是对一个软件开发人员的考验。总是有合理的借口来破坏规则,这就是为什么必须坚守规矩的原因。纪律就是向例外说不的艺术。没有任何解释可以改变这一点。
### 虽然,实用性胜过纯洁性
@@ -49,7 +41,7 @@
归根结底,软件开发是一门实用的学科。它的目标是解决真实的人所面临的实际问题。实用性比纯粹性更重要:首先,我们必须*解决问题*。如果我们只考虑可读性、简单性或美观性,我们将无法真正*解决问题*。
-正如宫本武藏所说的,每一次代码修改的首要目标应该是*解决问题°。这个问题需要我们心心念念去解决它。如果我们不以解决问题为目标,只想着 Python 之禅,我们就辜负了这些原则。这是 Python 之禅所固有的另一种矛盾。
+正如宫本武藏所说的,每一次代码修改的首要目标应该是*解决问题*。这个问题需要我们心心念念地去解决它。如果我们不以解决问题为目标,只想着 Python 之禅,我们就辜负了这些原则。这是 Python 之禅所固有的另一种矛盾。
--------------------------------------------------------------------------------
@@ -58,7 +50,7 @@ via: https://opensource.com/article/19/12/zen-python-trade-offs
作者:[Moshe Zadka][a]
选题:[lujun9972][b]
译者:[wxy](https://github.com/wxys)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxys)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/202101/20191226 How the Zen of Python handles errors.md b/published/202101/20191226 How the Zen of Python handles errors.md
new file mode 100644
index 0000000000..46ca0861c8
--- /dev/null
+++ b/published/202101/20191226 How the Zen of Python handles errors.md
@@ -0,0 +1,57 @@
+[#]: collector: (lujun9972)
+[#]: translator: (wxy)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13058-1.html)
+[#]: subject: (How the Zen of Python handles errors)
+[#]: via: (https://opensource.com/article/19/12/zen-python-errors)
+[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
+
+Python 处理错误的原则
+======
+
+> 这是 Python 之禅特别系列的一部分,重点是第十和第十一条原则:沉默的错误(或不沉默)。
+
+![](https://img.linux.net.cn/data/attachment/album/202101/27/223251q261j2ndoccajc16.jpg)
+
+处理“异常情况”是编程中争论最多的问题之一。这可能是因为风险很大:处理不当的错误值甚至可以使庞大的系统瘫痪。由于“异常情况”从本质上来说,是测试不足的,但发生的频率却令人不快,因此,是否正确处理它们往往可以将一个噩梦般的系统与一个“可以工作”的系统区分开来。
+
+从 Java 的 `checked` 异常,到 Erlang 的故障隔离,再到 Haskell 的 `Maybe`,不同的语言对错误处理的态度截然不同。
+
+这两条 [Python 之禅][2]是 Python 对这个话题的冥思。
+
+### 错误绝不应该悄悄传递...
+
+当 Python 之禅在 Tim Peters 眼里闪烁而出之前,在维基百科被俗称为“维基”之前,第一个维基网站 [C2][3] 就已经存在了,它是一个编程指南的宝库。这些原则大多来自于 [Smalltalk][4] 编程社区。Smalltalk 的思想影响了许多面向对象的语言,包括 Python。
+
+C2 维基定义了武士原则:“胜利归来,要么不归。”用 Python 人的术语来说,它鼓励摒弃哨兵值,比如用返回 `None` 或 `-1` 来表示无法完成任务,而是采用引发异常的方式。一个 `None` 是无声的:它看起来像一个值,可以放在一个变量中,然后到处传递。有时,它甚至是一个*有效*的返回值。
+
+这里的原则是,如果一个函数不能完成它的契约,它应该“高调失败”:引发一个异常。所引发的异常永远不会看起来像是一个可能的值。它将跳过 `returned_value = call_to_function(parameter)` 行,并上升到调用栈中,可能使程序崩溃。
+
+崩溃的调试是很直接的:有一个堆栈跟踪来指示问题以及调用堆栈。崩溃可能意味着程序的必要条件没有满足,需要人为干预。它可能意味着程序的逻辑有问题。无论是哪种情况,高调失败都比一个隐藏的、“缺失”的值要好。用 `None` 来感染程序的有效数据,直到它被用在某个地方,就如你可能已经知道的,错误信息会说 “**None 没有方法进行拆分**”。
+
+### 除非显式消除
+
+有时需要显式地捕获异常。我们可能会预见到文件中的某些行格式错误,并希望以特殊的方式来处理它们,也许可以把它们放在一个“需要人来看看的行”的文件中,而不是让整个程序崩溃。
+
+Python 允许我们用 `except` 来捕获异常。这意味着错误可以被*显式*消除。这种明确性意味着 `except` 行在代码审查中是可见的。质疑为什么应该在这里显式消除异常并从异常中恢复,是有意义的。自问一下我们是否捕获了太多或太少的异常也是有意义的。
+
+因为这些全都是明确的,所以有人可以阅读代码并了解哪些异常是可以恢复的。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/19/12/zen-python-errors
+
+作者:[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/checklist_hands_team_collaboration.png?itok=u82QepPk (a checklist for a team)
+[2]: https://www.python.org/dev/peps/pep-0020/
+[3]: https://wiki.c2.com/
+[4]: https://en.wikipedia.org/wiki/Smalltalk
diff --git a/published/202101/20200323 5 Python scripts for automating basic community management tasks.md b/published/202101/20200323 5 Python scripts for automating basic community management tasks.md
new file mode 100644
index 0000000000..6c785a9020
--- /dev/null
+++ b/published/202101/20200323 5 Python scripts for automating basic community management tasks.md
@@ -0,0 +1,115 @@
+[#]: collector: (lujun9972)
+[#]: translator: (stevenzdg988)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13055-1.html)
+[#]: subject: (5 Python scripts for automating basic community management tasks)
+[#]: via: (https://opensource.com/article/20/3/automating-community-management-python)
+[#]: author: (Rich Bowen https://opensource.com/users/rbowen)
+
+用于基本社区管理任务自动化的 5 个 Python 脚本
+======
+
+> 如果某些事情不得不重复做三遍,尝试使其自动化。
+
+![](https://img.linux.net.cn/data/attachment/album/202101/27/000544aakdc4mnmn6tzj8y.jpg)
+
+我 [之前写过关于社区管理员的工作][2],如果你问 10 位社区管理员,你会得到 12 个不同的答案。不过,大多数情况下,你做的是社区需要你在任何特定时刻做的事情。而且很多事情可能是重复的。
+
+当我还是系统管理员时,我遵循一个规则:如果某些事必须做三遍,我会尝试使其自动化。当然,如今,使用诸如 Ansible 这样的强大工具,就有了一整套科学的方法。
+
+我每天或每周要做的一些事情涉及在一些地方查找内容,然后生成信息的摘要或报告,然后发布到别处。这样的任务是自动化的理想选择。这些并不是什么 [难事][3],当我与同事共享其中一些脚本时,总是至少有一个能证明这是有用的。
+
+[在 GitHub][4] 上,我有几个每周都要使用的脚本。它们都不是很复杂,但每次都为我节省几分钟。其中一些是用 Perl 写的,因为我快 50 岁了(这些是我早些年写的)。有些是用 Python 写的,因为几年前,我决定要学习 Python。
+
+以下是概述:
+
+### tshirts.py
+
+这个简单的 [tshirts.py 脚本][5]会根据你要定制的活动 T 恤的数量,然后告诉你尺寸分布是什么。它将这些尺寸分布在一条正态曲线(也称为 “钟形曲线”)上,以我的经验,这和一个正常的会议观众的实际需求非常吻合。如果在美国使用,则可能需要将脚本中的值调整的稍大一些;如果在欧洲使用,则可能需要将脚本中的值稍稍缩小一些。你的情况也许不同。
+
+用法:
+
+```
+[rbowen@sasha:community-tools/scripts]$ ./tshirts.py
+How many shirts? 300
+For a total of 300 shirts, order:
+
+30.0 small
+72.0 medium
+96.0 large
+72.0 xl
+30.0 2xl
+```
+
+### followers.py
+
+[followers.py 脚本][6]为我提供了我关心的 Twitter 账号的关注者数量。
+
+该脚本只有 14 行,没什么复杂的,但是它可能节省我十分钟的加载网页和查找数字的时间。
+
+你需要编辑 `feed` 数组以添加你关心的帐户:
+
+```
+feeds = [
+ 'centosproject',
+ 'centos'
+ ];
+```
+
+注意:如果你在英语国家以外的地方运行它,则可能无法正常工作,因为它只是一个简单的屏幕抓取脚本,它读取 HTML 并查找其中包含的特定信息。因此,当输出使用其他语言时,正则表达式可能不匹配。
+
+用法:
+
+```
+[rbowen@sasha:community-tools/scripts]$ ./followers.py
+centosproject: 11,479 Followers
+centos: 18,155 Followers
+```
+
+### get_meetups
+
+[get_meetups 脚本][7]S 另一种类别的脚本 —— API脚本。这个特定的脚本使用 [meetup.com][8] 网站的 API 来寻找在特定区域和时间范围内特定主题的聚会,以便我可以将它报告给我的社区。你所依赖的许多服务都提供了 API,因此你的脚本可以查找信息,而无需手动查找网页。学习如何使用这些 API 既令人沮丧又耗时,但是最终将获得可以节省大量时间的技能。
+
+_免责声明:[meetup.com][8] 已于 2019 年 8 月更改了他们的 API,我还没有将这个脚本更新到新的API,所以它现在实际上并没有工作。在接下来的几周内请关注此版本的修复版本。_
+
+### centos-announcements.pl
+
+[centos-announcements.pl 脚本][9]要复杂得多,而且对我的用例来说非常特殊,但你可能有类似的情况。在本例中该脚本查看邮件列表存档(`centos-announce` 邮件列表),并查找具有特定格式的邮件,然后生成这些邮件的报告。报告有两种不同的格式:一种用于我的每月新闻通讯,另一种用于安排 Twitter 信息(借助于 Hootsuite)。
+
+我使用 Hootsuite 为 Twitter 安排内容,它们具有便捷的 CSV(逗号分隔值)格式,你可以一次批量安排整整一周的推文。从各种数据源(比如:邮件列表、博客、其他网页)自动生成 CSV 格式可以节省大量时间。但是请注意,这可能只应该用于初稿,然后你可以对其进行检查和编辑,以便最终不会自动发布你不想要内容的推文。
+
+### reporting.pl
+
+[reporting.pl 脚本][10]也是相当特定的,以满足我的特殊需求,但是这个概念本身是通用的。我每月向 [CentOS SIG][11](特殊兴趣小组)发送邮件,这些邮件计划在给定的月份报告。该脚本只是告诉我本月有哪些 SIG,并记录需要发送给他们的电子邮件。
+
+但是,因以下两个原因,实际上并未发送该电子邮件。第一,我希望在消息发送之前对其进行编辑。第二,虽然发送电子邮件的脚本在过去很有效,但如今,很可能被当做垃圾邮件而被过滤。
+
+### 总结
+
+在这个存储库中还有一些其他脚本,这些脚本或多或少是针对我的特定需求的,但是我希望其中至少有一个脚本对你有用,并且希望这些脚本的多样性能激励你去自动化一些你自己的东西。我也希望看到你的自动化脚本存储库;在评论中链接他们!
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/20/3/automating-community-management-python
+
+作者:[Rich Bowen][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/rbowen
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/Open%20Pharma.png?itok=GP7zqNZE (shapes of people symbols)
+[2]: http://drbacchus.com/what-does-a-community-manager-do/
+[3]: https://6dollarshirts.com/rocket-surgery
+[4]: https://github.com/rbowen/centos-community-tools/tree/master/scripts
+[5]: https://github.com/rbowen/centos-community-tools/blob/master/scripts/tshirts.py
+[6]: https://github.com/rbowen/centos-community-tools/blob/master/scripts/followers.py
+[7]: https://github.com/rbowen/centos-community-tools/blob/master/scripts/get_meetups
+[8]: http://meetup.com
+[9]: https://github.com/rbowen/centos-community-tools/blob/master/scripts/centos-announcements.pl
+[10]: https://github.com/rbowen/centos-community-tools/blob/master/scripts/sig_reporting/reporting.pl
+[11]: https://wiki.centos.org/SpecialInterestGroup
diff --git a/published/20200522 A beginner-s guide to web scraping with Python.md b/published/202101/20200522 A beginner-s guide to web scraping with Python.md
similarity index 100%
rename from published/20200522 A beginner-s guide to web scraping with Python.md
rename to published/202101/20200522 A beginner-s guide to web scraping with Python.md
diff --git a/published/20200629 A minimalist Mac terminal for Linux fans.md b/published/202101/20200629 A minimalist Mac terminal for Linux fans.md
similarity index 100%
rename from published/20200629 A minimalist Mac terminal for Linux fans.md
rename to published/202101/20200629 A minimalist Mac terminal for Linux fans.md
diff --git a/published/20200827 How to Check Dependencies of a Package in Ubuntu-Debian-based Linux Distributions.md b/published/202101/20200827 How to Check Dependencies of a Package in Ubuntu-Debian-based Linux Distributions.md
similarity index 100%
rename from published/20200827 How to Check Dependencies of a Package in Ubuntu-Debian-based Linux Distributions.md
rename to published/202101/20200827 How to Check Dependencies of a Package in Ubuntu-Debian-based Linux Distributions.md
diff --git a/published/20201001 Level up your shell history with Loki and fzf.md b/published/202101/20201001 Level up your shell history with Loki and fzf.md
similarity index 100%
rename from published/20201001 Level up your shell history with Loki and fzf.md
rename to published/202101/20201001 Level up your shell history with Loki and fzf.md
diff --git a/published/20201015 Learn Python by creating a video game.md b/published/202101/20201015 Learn Python by creating a video game.md
similarity index 100%
rename from published/20201015 Learn Python by creating a video game.md
rename to published/202101/20201015 Learn Python by creating a video game.md
diff --git a/published/20201216 How to use Kubernetes resource quotas.md b/published/202101/20201216 How to use Kubernetes resource quotas.md
similarity index 100%
rename from published/20201216 How to use Kubernetes resource quotas.md
rename to published/202101/20201216 How to use Kubernetes resource quotas.md
diff --git a/translated/tech/20201216 Understanding 52-bit virtual address support in the Arm64 kernel.md b/published/202101/20201216 Understanding 52-bit virtual address support in the Arm64 kernel.md
similarity index 57%
rename from translated/tech/20201216 Understanding 52-bit virtual address support in the Arm64 kernel.md
rename to published/202101/20201216 Understanding 52-bit virtual address support in the Arm64 kernel.md
index e2acf4c5cd..c38a6e261e 100644
--- a/translated/tech/20201216 Understanding 52-bit virtual address support in the Arm64 kernel.md
+++ b/published/202101/20201216 Understanding 52-bit virtual address support in the Arm64 kernel.md
@@ -1,43 +1,45 @@
[#]: collector: (lujun9972)
[#]: translator: (mengxinayan)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13069-1.html)
[#]: subject: (Understanding 52-bit virtual address support in the Arm64 kernel)
[#]: via: (https://opensource.com/article/20/12/52-bit-arm64-kernel)
[#]: author: (Bhupesh Sharma https://opensource.com/users/bhsharma)
-理解 ARM64 内核中对 52 比特虚拟地址的支持
+理解 ARM64 内核中对 52 位虚拟地址的支持
======
-随着 64 比特硬件的普及,增加了处理更大地址空间的需求。
-![拼图碎片聚在一起形成计算机屏幕][1]
-当 64 比特硬件变得可用之后,处理更大地址空间(大于232字节)的需求变得显而易见。现如今一些公司已经提供 64TiB 或更大内存的服务器,x86_64 架构和 arm64 架构现在允许寻址的地址空间大于 248 字节(可以使用默认的 48 比特地址支持)。
+> 随着 64 位硬件的引入,增加了处理更大地址空间的需求。
-x86_64 架构通过让硬件和软件支持五级页表以支持这些用例。它允许寻址的地址空间等于 257 字节(详情见 [x86:在 4.12 内核中启用 5 级页表][2])。它突破了过去虚拟地址空间 128PiB 和 物理地址空间 4PiB 的上限。
+![](https://img.linux.net.cn/data/attachment/album/202101/30/170448rynbm9b6nmb90403.jpg)
-arm64 架构通过引入两个新的体系结构拓展来实现相同的功能—ARMv8.2 LVA(更大的虚拟寻址) 和 ARMv8.2 LPA(更大的物理地址寻址)。这允许使用 4PiB 的虚拟地址空间和 4PiB 的物理地址空间(即分别为 252 比特)。
+当 64 位硬件变得可用之后,处理更大地址空间(大于 2^32 字节)的需求变得显而易见。现如今一些公司已经提供 64TiB 或更大内存的服务器,x86_64 架构和 arm64 架构现在允许寻址的地址空间大于 2^48 字节(可以使用默认的 48 位地址支持)。
-在新的 arm64 CPU 中已经支持了 ARMv8.2 体系结构拓展,同时现在开源软件也支持了这两种新的硬件拓展。
+x86_64 架构通过让硬件和软件启用五级页表以支持这些用例。它允许寻址的地址空间等于 2^57 字节(详情见 [x86:在 4.12 内核中启用 5 级页表][2])。它突破了过去虚拟地址空间 128PiB 和物理地址空间 4PiB 的上限。
-从 5.4 内核开始, arm64 架构中的52 比特(大)虚拟地址(VA)和物理地址(PA)得到支持。尽管[内核文档][3]描述了这些特性和新的内核运行时对旧的 CPU(硬件层面不支持 52 比特虚拟地址拓展)和新的 CPU(硬件层面支持 52 比特虚拟地址拓展)的影响,但对普通用户而言理解这些并且如何“选择使用”52比特的地址空间可能会很复杂。
+arm64 架构通过引入两个新的体系结构 —— ARMv8.2 LVA(更大的虚拟寻址) 和 ARMv8.2 LPA(更大的物理地址寻址) —— 拓展来实现相同的功能。这允许使用 4PiB 的虚拟地址空间和 4PiB 的物理地址空间(即分别为 2^52 位)。
+
+随着新的 arm64 CPU 中支持了 ARMv8.2 体系结构拓展,同时现在开源软件也支持了这两种新的硬件拓展。
+
+从 Linux 5.4 内核开始, arm64 架构中的 52 位(大)虚拟地址(VA)和物理地址(PA)得到支持。尽管[内核文档][3]描述了这些特性和新的内核运行时对旧的 CPU(硬件层面不支持 52 位虚拟地址拓展)和新的 CPU(硬件层面支持 52 位虚拟地址拓展)的影响,但对普通用户而言,理解这些并且如何 “选择使用” 52 位的地址空间可能会很复杂。
因此,我会在本文中介绍下面这些比较新的概念:
1. 在增加了对这些功能的支持后,内核的内存布局如何“翻转”到 Arm64 架构
- 2. 对用户态应用的影响,尤其是对提供调试支持的程序(例如:kexec-tools, makedumpfile 和 crash-utility)
- 3. 如何通过指定大于 48 比特的 mmap 参数,使用户态应用“选择”接收 52 比特地址?
+ 2. 对用户态应用的影响,尤其是对提供调试支持的程序(例如:kexec-tools、 makedumpfile 和 crash-utility)
+ 3. 如何通过指定大于 48 位的 mmap 参数,使用户态应用“选择”从 52 位地址空间接受 VA?
### ARMv8.2 架构的 LVA 和 LPA 拓展
-ARMv8.2 架构提供两种重要的拓展:更大的虚拟地址(LVA)和更大的物理地址(LPA)。
+ARMv8.2 架构提供两种重要的拓展:大虚拟寻址(LVA)和大物理寻址(LPA)。
-当使用 64 KB 转换粒度时,ARMv8.2-LVA 为每个基地址寄存器提供了一个更大的 52 比特虚拟地址空间。
+当使用 64 KB 转换粒度时,ARMv8.2-LVA 为每个翻译表基地址寄存器提供了一个更大的 52 位虚拟地址空间。
-在 ARMv8.2-LVA 中包含:
+在 ARMv8.2-LVA 中允许:
- * 当使用 64 KB 转换粒度时,中间物理地址(IPA)和物理地址空间拓展为 52 比特。
- * 如果使用 64 KB 转换粒度来实现对 52 比特物理地址的支持,那么一级块将会覆盖 4TB 的地址空间。
+ * 当使用 64 KB 转换粒度时,中间物理地址(IPA)和物理地址空间拓展为 52 位。
+ * 如果使用 64 KB 转换粒度来实现对 52 位物理地址的支持,那么一级块将会覆盖 4TB 的地址空间。
_需要注意的是这些特性仅在 AArch64 架构中支持。_
@@ -49,13 +51,13 @@ _需要注意的是这些特性仅在 AArch64 架构中支持。_
更多细节请参考 [Armv8 架构参考手册][4]。
-### Arm64 中的内核内存布局
+### Arm64 的内核内存布局
-伴随着 ARMv8.2 拓展增加了对 LVA 地址的支持(仅当页大小为 64 KB 是可用),在第一级翻译中,描述符的数量会增加。
+伴随着 ARMv8.2 拓展增加了对 LVA 地址的支持(仅当以页大小为 64 KB 运行时可用),在第一级转换中,描述符的数量会增加。
-用户地址将 63-48 比特位置为 0,然而内核地址将这些比特位置为 1。TTBRx 选择由虚拟地址的 63 比特位决定。`swapper_pg_dir` 仅包含内核全局映射,然而 `pgd` 仅包含用户(非全局)的映射。`swapper_pg_dir` 地址会写入 TTBR1 且永远不会写入 TTBR0。
+用户地址将 63-48 位位置为 0,然而内核地址将这些位设置为 1。TTBRx 的选择由虚拟地址的 63 位决定。`swapper_pg_dir` 仅包含内核(全局)映射,然而 `pgd` 仅包含用户(非全局)的映射。`swapper_pg_dir` 地址会写入 TTBR1,且永远不会写入 TTBR0。
-**页面大小为 64 KB 和三个级别的(具有 52 比特硬件支持)的 AArch64 架构下 Linux 内存布局如下:**
+**页面大小为 64 KB 和三个级别的(具有 52 位硬件支持)的 AArch64 架构下 Linux 内存布局如下:**
```
开始 结束 大小 用途
@@ -85,11 +87,11 @@ _需要注意的是这些特性仅在 AArch64 架构中支持。_
| | | | | |
| | | | | v
| | | | | [11:0] 页内偏移量
- | | | | +-> [20:12] L3 索引
- | | | +-----------> [29:21] L2 索引
- | | +---------------------> [38:30] L1 索引
- | +-------------------------------> [47:39] L0 索引
- +-------------------------------------------------> [63] TTBR0/1
+ | | | | +-> [20:12] L3 索引
+ | | | +-----------> [29:21] L2 索引
+ | | +---------------------> [38:30] L1 索引
+ | +-------------------------------> [47:39] L0 索引
+ +-------------------------------------------------> [63] TTBR0/1
```
**64 KB 页面的转换查询表如下:**
@@ -101,18 +103,18 @@ _需要注意的是这些特性仅在 AArch64 架构中支持。_
| | | | |
| | | | v
| | | | [15:0] 页内偏移量
- | | | +----------> [28:16] L3 索引
- | | +--------------------------> [41:29] L2 索引
- | +-------------------------------> [47:42] L1 索引 (48 比特)
- | [51:42] L1 索引 (52 比特)
- +-------------------------------------------------> [63] TTBR0/1
+ | | | +----------> [28:16] L3 索引
+ | | +--------------------------> [41:29] L2 索引
+ | +-------------------------------> [47:42] L1 索引 (48 位)
+ | [51:42] L1 索引 (52 位)
+ +-------------------------------------------------> [63] TTBR0/1
```
![][5]
-### 内核对 52 比特虚拟地址的支持
+### 内核对 52 位虚拟地址的支持
-因为支持 LVA 的较新的内核应在旧的CPU(硬件不支持 LVA 拓展)和新的CPU(硬件支持 LVA 拓展)上都可以正常运行,因此采用的设计方法是使用单个二进制文件来支持 52 比特(如果硬件不支持该特性,则必须在刚开始启动时能回到 48 比特)。也就是说,为了满足 52 比特的虚拟地址以及固定大小的 `PAGE_OFFSET`,VMEMMAP 必须设置得足够大。
+因为支持 LVA 的较新的内核应该可以在旧的 CPU(硬件不支持 LVA 拓展)和新的 CPU(硬件支持 LVA 拓展)上都正常运行,因此采用的设计方法是使用单个二进制文件来支持 52 位(如果硬件不支持该特性,则必须在刚开始启动时能回退到 48 位)。也就是说,为了满足 52 位的虚拟地址以及固定大小的 `PAGE_OFFSET`,`VMEMMAP` 必须设置得足够大。
这样的设计方式要求内核为了新的虚拟地址空间而支持下面的变量:
@@ -122,13 +124,13 @@ VA_BITS 常量 *最大的* 虚拟地址空间大小
vabits_actual 变量 *实际的* 虚拟地址空间大小
```
-因此,尽管 `VA_BITS` 设置了最大的虚拟地址空间大小,但实际上支持的虚拟地址空间大小由 `vabits_actual` 确定(具体取决于启动时的切换)
+因此,尽管 `VA_BITS` 设置了最大的虚拟地址空间大小,但实际上支持的虚拟地址空间大小由 `vabits_actual` 确定(具体取决于启动时的切换)。
#### 翻转内核内存布局
-保持一个单内核二进制文件的设计方法要求内核的 .text 文件位于高位地址中,因此它们对于 48/52 比特虚拟地址都不变。因为内核地址检测器(KASAN)区域仅占整个内核虚拟地址空间的一小部分,因此对于 48 比特或 52 比特的虚拟地址空间,KASAN 区域的末尾也必须在内核虚拟地址空间的上半部分。(从 48 比特切换到 52 比特,KASAN 区域的末尾是不变的且依赖于 `~0UL`,而起始地址将“增长”到低位地址)
+保持一个单一内核二进制文件的设计方法要求内核的 `.text` 位于高位地址中,因此它们对于 48/52 位虚拟地址是不变的。因为内核地址检测器(KASAN)区域仅占整个内核虚拟地址空间的一小部分,因此对于 48 位或 52 位的虚拟地址空间,KASAN 区域的末尾也必须在内核虚拟地址空间的上半部分。(从 48 位切换到 52 位,KASAN 区域的末尾是不变的,且依赖于 `~0UL`,而起始地址将“增长”到低位地址)
-为了优化 `phys_to_virt()` 和 `virt_to_phys()`,页偏移量将被保持在 `0xFFF0000000000000` (对应于 52 比特),这消除了读取额外变量的需求。在早期启动时将会计算 `physvirt` 和 `vmemmap` 偏移量以启用这个逻辑。
+为了优化 `phys_to_virt()` 和 `virt_to_phys()`,页偏移量将被保持在 `0xFFF0000000000000` (对应于 52 位),这消除了读取额外变量的需求。在早期启动时将会计算 `physvirt` 和 `vmemmap` 偏移量以启用这个逻辑。
考虑下面的物理和虚拟 RAM 地址空间的转换:
@@ -139,8 +141,8 @@ vabits_actual 变量 *实际的* 虚拟地址空间大小
*/
#define virt_to_phys(addr) ({ \
- if (!(((u64)addr) & BIT(vabits_actual - 1))) \
- (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET)
+ if (!(((u64)addr) & BIT(vabits_actual - 1))) \
+ (((addr) & ~PAGE_OFFSET) + PHYS_OFFSET)
})
#define phys_to_virt(addr) ((unsigned long)((addr) - PHYS_OFFSET) | PAGE_OFFSET)
@@ -152,11 +154,11 @@ vabits_actual 变量 *实际的* 虚拟地址空间大小
### 对用于调试内核的用户态程序的影响
-一些用户空间应用程序用于调试正在运行的/活动中的内核或者分析系统崩溃时的 vmcore 转储(例如确定内核奔溃的根本原因):kexec-tools, makedumpfile, 和 crash-utility。
+有几个用户空间应用程序可以用于调试正在运行的/活动中的内核或者分析系统崩溃时的 vmcore 转储(例如确定内核奔溃的根本原因):kexec-tools、makedumpfile 和 crash-utility。
当用它们来调试 Arm64 内核时,因为 Arm64 内核内存映射被“翻转”,因此也会对它们产生影响。这些应用程序还需要遍历转换表以确定与虚拟地址相应的物理地址(类似于内核中的完成方式)。
-相应地,在将“翻转”引入内核内存映射之后,由于上游中断了用户态应用程序,因此必须对其进行修改。
+相应地,在将“翻转”引入内核内存映射之后,由于上游破坏了用户态应用程序,因此必须对其进行修改。
我已经提议了对三个受影响的用户态应用程序的修复;有一些已经被上游接受,但其他仍在等待中:
@@ -166,25 +168,25 @@ vabits_actual 变量 *实际的* 虚拟地址空间大小
除非在用户空间应用程序进行了这些修改,否则它们将仍然无法调试运行/活动中的内核或分析系统崩溃时的 vmcore 转储。
-### 52 比特用户态虚拟地址
+### 52 位用户态虚拟地址
-为了保持与依赖 ARMv8.0 虚拟地址空间的最大为 48 比特的用户空间应用程序的兼容性,在默认情况下内核会将虚拟地址从 48 比特范围返回给用户空间。
+为了保持与依赖 ARMv8.0 虚拟地址空间的最大为 48 位的用户空间应用程序的兼容性,在默认情况下内核会将虚拟地址从 48 位范围返回给用户空间。
-通过指定大于48位的mmap提示参数,用户态程序可以“选择”从 52 比特空间接收虚拟地址。
+通过指定大于 48 位的 mmap 提示参数,用户态程序可以“选择”从 52 位空间接收虚拟地址。
例如:
```
.mmap_high_addr.c
-\----
+----
maybe_high_address = mmap(~0UL, size, prot, flags,...);
```
-通过启用以下的内核配置选项,还可以构建一个从 52 比特空间返回地址的调试内核:
+通过启用以下的内核配置选项,还可以构建一个从 52 位空间返回地址的调试内核:
```
-` CONFIG_EXPERT=y && CONFIG_ARM64_FORCE_52BIT=y`
+ CONFIG_EXPERT=y && CONFIG_ARM64_FORCE_52BIT=y
```
_请注意此选项仅用于调试应用程序,不应在实际生产中使用。_
@@ -193,9 +195,9 @@ _请注意此选项仅用于调试应用程序,不应在实际生产中使用
总结一下:
-1. 内核版本从 5.14 开始,新的 Armv8.2 硬件拓展 LVA 和 LPA 在内核中得到很好的拓展。
+1. 内核版本从 5.14 开始,新的 Armv8.2 硬件拓展 LVA 和 LPA 在内核中得到良好支持。
2. 像 kexec-tools 和 makedumpfile 被用来调试内核的用户态应用程序现在无法支持新拓展,仍在等待上游接受修补。
-3. 过去的用户态应用程序依赖于 Arm64 内核提供的 48 比特虚拟地址将继续原样工作,而较新的用户态应用程序通构指定超过 48 比特更大的 mmap 提示参数来 “选择加入”已接受来自 52 比特的虚拟地址。
+3. 过去的用户态应用程序依赖于 Arm64 内核提供的 48 位虚拟地址将继续原样工作,而较新的用户态应用程序通构指定超过 48 位更大的 mmap 提示参数来 “选择加入”已接受来自 52 位的虚拟地址。
* * *
@@ -208,7 +210,7 @@ via: https://opensource.com/article/20/12/52-bit-arm64-kernel
作者:[Bhupesh Sharma][a]
选题:[lujun9972][b]
译者:[萌新阿岩](https://github.com/mengxinayan)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/20201219 6 ways this fullscreen text editor improves focus.md b/published/202101/20201219 6 ways this fullscreen text editor improves focus.md
similarity index 100%
rename from published/20201219 6 ways this fullscreen text editor improves focus.md
rename to published/202101/20201219 6 ways this fullscreen text editor improves focus.md
diff --git a/published/20201222 Learn Rust by writing a simple game.md b/published/202101/20201222 Learn Rust by writing a simple game.md
similarity index 100%
rename from published/20201222 Learn Rust by writing a simple game.md
rename to published/202101/20201222 Learn Rust by writing a simple game.md
diff --git a/published/20201222 Learn to use the Sed text editor.md b/published/202101/20201222 Learn to use the Sed text editor.md
similarity index 100%
rename from published/20201222 Learn to use the Sed text editor.md
rename to published/202101/20201222 Learn to use the Sed text editor.md
diff --git a/published/20201224 5 reasons to use the Atom text editor.md b/published/202101/20201224 5 reasons to use the Atom text editor.md
similarity index 100%
rename from published/20201224 5 reasons to use the Atom text editor.md
rename to published/202101/20201224 5 reasons to use the Atom text editor.md
diff --git a/published/20201225 How to use heredoc as a text editor.md b/published/202101/20201225 How to use heredoc as a text editor.md
similarity index 100%
rename from published/20201225 How to use heredoc as a text editor.md
rename to published/202101/20201225 How to use heredoc as a text editor.md
diff --git a/published/20201226 Try GNU nano, a lightweight alternative to Vim.md b/published/202101/20201226 Try GNU nano, a lightweight alternative to Vim.md
similarity index 100%
rename from published/20201226 Try GNU nano, a lightweight alternative to Vim.md
rename to published/202101/20201226 Try GNU nano, a lightweight alternative to Vim.md
diff --git a/published/20201228 Learn Python by coding a simple game.md b/published/202101/20201228 Learn Python by coding a simple game.md
similarity index 100%
rename from published/20201228 Learn Python by coding a simple game.md
rename to published/202101/20201228 Learn Python by coding a simple game.md
diff --git a/published/20201228 Learn to use the JOE text editor on Linux.md b/published/202101/20201228 Learn to use the JOE text editor on Linux.md
similarity index 100%
rename from published/20201228 Learn to use the JOE text editor on Linux.md
rename to published/202101/20201228 Learn to use the JOE text editor on Linux.md
diff --git a/published/20201228 Practice programming in C-- by writing a simple game.md b/published/202101/20201228 Practice programming in C-- by writing a simple game.md
similarity index 100%
rename from published/20201228 Practice programming in C-- by writing a simple game.md
rename to published/202101/20201228 Practice programming in C-- by writing a simple game.md
diff --git a/published/20201229 Bring an old MacBook back to life with Linux.md b/published/202101/20201229 Bring an old MacBook back to life with Linux.md
similarity index 100%
rename from published/20201229 Bring an old MacBook back to life with Linux.md
rename to published/202101/20201229 Bring an old MacBook back to life with Linux.md
diff --git a/published/20201229 Show progress in your Python apps with tqdm.md b/published/202101/20201229 Show progress in your Python apps with tqdm.md
similarity index 100%
rename from published/20201229 Show progress in your Python apps with tqdm.md
rename to published/202101/20201229 Show progress in your Python apps with tqdm.md
diff --git a/published/20201230 Choose between Btrfs and LVM-ext4.md b/published/202101/20201230 Choose between Btrfs and LVM-ext4.md
similarity index 100%
rename from published/20201230 Choose between Btrfs and LVM-ext4.md
rename to published/202101/20201230 Choose between Btrfs and LVM-ext4.md
diff --git a/published/20201230 Learn Lua by writing a -guess the number- game.md b/published/202101/20201230 Learn Lua by writing a -guess the number- game.md
similarity index 100%
rename from published/20201230 Learn Lua by writing a -guess the number- game.md
rename to published/202101/20201230 Learn Lua by writing a -guess the number- game.md
diff --git a/published/20201230 Use the Markdown Editor app in Nextcloud.md b/published/202101/20201230 Use the Markdown Editor app in Nextcloud.md
similarity index 100%
rename from published/20201230 Use the Markdown Editor app in Nextcloud.md
rename to published/202101/20201230 Use the Markdown Editor app in Nextcloud.md
diff --git a/published/20201231 10 things to love about Git.md b/published/202101/20201231 10 things to love about Git.md
similarity index 100%
rename from published/20201231 10 things to love about Git.md
rename to published/202101/20201231 10 things to love about Git.md
diff --git a/published/20201231 Build your own text editor in Java.md b/published/202101/20201231 Build your own text editor in Java.md
similarity index 100%
rename from published/20201231 Build your own text editor in Java.md
rename to published/202101/20201231 Build your own text editor in Java.md
diff --git a/published/20210101 Resize images using Python.md b/published/202101/20210101 Resize images using Python.md
similarity index 100%
rename from published/20210101 Resize images using Python.md
rename to published/202101/20210101 Resize images using Python.md
diff --git a/published/20210105 4 lines of code to improve your Ansible play.md b/published/202101/20210105 4 lines of code to improve your Ansible play.md
similarity index 100%
rename from published/20210105 4 lines of code to improve your Ansible play.md
rename to published/202101/20210105 4 lines of code to improve your Ansible play.md
diff --git a/published/20210106 Learn C by writing a simple game.md b/published/202101/20210106 Learn C by writing a simple game.md
similarity index 100%
rename from published/20210106 Learn C by writing a simple game.md
rename to published/202101/20210106 Learn C by writing a simple game.md
diff --git a/published/20210106 My 3 favorite open source productivity apps.md b/published/202101/20210106 My 3 favorite open source productivity apps.md
similarity index 100%
rename from published/20210106 My 3 favorite open source productivity apps.md
rename to published/202101/20210106 My 3 favorite open source productivity apps.md
diff --git a/published/20210107 8 open source software cheat sheets you-ll need in 2021.md b/published/202101/20210107 8 open source software cheat sheets you-ll need in 2021.md
similarity index 100%
rename from published/20210107 8 open source software cheat sheets you-ll need in 2021.md
rename to published/202101/20210107 8 open source software cheat sheets you-ll need in 2021.md
diff --git a/published/20210108 Why I like the FED text editor.md b/published/202101/20210108 Why I like the FED text editor.md
similarity index 100%
rename from published/20210108 Why I like the FED text editor.md
rename to published/202101/20210108 Why I like the FED text editor.md
diff --git a/published/20210109 Homura- A WINE-based Game Launcher for BSD.md b/published/202101/20210109 Homura- A WINE-based Game Launcher for BSD.md
similarity index 100%
rename from published/20210109 Homura- A WINE-based Game Launcher for BSD.md
rename to published/202101/20210109 Homura- A WINE-based Game Launcher for BSD.md
diff --git a/published/20210111 Deploy Ceph in a Raspberry Pi cluster.md b/published/202101/20210111 Deploy Ceph in a Raspberry Pi cluster.md
similarity index 100%
rename from published/20210111 Deploy Ceph in a Raspberry Pi cluster.md
rename to published/202101/20210111 Deploy Ceph in a Raspberry Pi cluster.md
diff --git a/published/20210111 Improve your productivity with this lightweight Linux desktop.md b/published/202101/20210111 Improve your productivity with this lightweight Linux desktop.md
similarity index 100%
rename from published/20210111 Improve your productivity with this lightweight Linux desktop.md
rename to published/202101/20210111 Improve your productivity with this lightweight Linux desktop.md
diff --git a/published/20210112 3 email rules to live by in 2021.md b/published/202101/20210112 3 email rules to live by in 2021.md
similarity index 100%
rename from published/20210112 3 email rules to live by in 2021.md
rename to published/202101/20210112 3 email rules to live by in 2021.md
diff --git a/published/202101/20210112 Super Productivity- A Super Cool Open Source To-Do List App with GitHub Integration.md b/published/202101/20210112 Super Productivity- A Super Cool Open Source To-Do List App with GitHub Integration.md
new file mode 100644
index 0000000000..603476e224
--- /dev/null
+++ b/published/202101/20210112 Super Productivity- A Super Cool Open Source To-Do List App with GitHub Integration.md
@@ -0,0 +1,104 @@
+[#]: collector: (lujun9972)
+[#]: translator: (wxy)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13067-1.html)
+[#]: subject: (Super Productivity: A Super Cool Open Source To-Do List App with GitHub Integration)
+[#]: via: (https://itsfoss.com/super-productivity/)
+[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
+
+超级生产力:一款集成了 GitHub 的超酷开源待办事项列表应用
+======
+
+> “超级生产力”是一款很棒的开源待办事项应用,可以帮助你管理任务、跟踪事务和管理时间。
+
+无论你做什么,提高工作效率是大多数人的共同目标。通常,你总会尝试各种[待办事项列表应用][1]或者[记事应用][2]来帮助自己组织和提醒事情,从而高效地跟上工作进度。
+
+当然,你可以看看那些清单,根据自己的喜好去尝试其中的一些。在这里,我遇到了一些独特的东西,如果你想要一个具有可靠的用户界面、GitHub/GitLab 集成以及一系列基本功能的桌面待办事项应用,你也许可以尝试一下。
+
+超级生产力看起来是一个令人印象深刻的待办事项列表应用,并提供一些独特的功能。在本文中,我将让你简单了解它的一切。
+
+### 超级生产力:一个简单的而有吸引力的开源待办事项应用程序
+
+![][3]
+
+“超级生产力”是一款开源应用,它由 [Johannes Millan][4] 在 GitHub 上积极维护。
+
+对我来说,用户体验是最重要的,“超级生产力”提供的用户界面给我留下了十分深刻的印象。
+
+它还提供了一堆基本功能以及一些有趣的选项。让我们来看看它们。
+
+### “超级生产力”的功能
+
+![][5]
+
+ * 添加待办事项、说明
+ * 追踪花费在任务和休息上的时间
+ * 项目管理(与 JIRA、GitHub 和 GitLab 整合)
+ * 安排任务的能力
+ * 语言选择选项
+ * 同步到 Dropbox、Google Drive 或任何其他 WebDAV 存储位置
+ * 导入/导出功能
+ * 自动备份功能
+ * 能够调整定时器和计数器的行为
+ * 黑暗模式
+ * 在任务中添加附件
+ * 完全免费的重复任务
+ * 跨平台支持
+
+除了我提到的功能外,你还会发现更多详细的设置和调整配置。
+
+尤其是与 [JIRA][6]、[GitHub][7] 和 [GitLab][8] 的整合。你可以自动分配要进行的工作任务,而不需要检查你的电子邮件以了解问题跟踪器或议题的最近更新。
+
+与我目前使用过的许多收费版的待办事项 Web 服务相比,你会惊讶地发现许多有用的功能完全免费。
+
+### 在 Linux 上安装“超级生产力”
+
+![][9]
+
+它有各种安装方式。我下载了 AppImage 文件测试了一下。但是,你也可以得到基于 Debian 的发行版的 deb 包。
+
+它也可以作为一个 [snap][10] 来安装。你可以在 [GitHub 的发布部分][11]中找到所有的包。
+
+如果你感兴趣,可以查看它的 [GitHub 页面][12]来了解它的更多信息。
+
+- [下载超级生产力](https://github.com/johannesjo/super-productivity/releases)
+
+### 总结
+
+我发现“超级生产力”的用户体验非常棒。所提供的功能非常有用,考虑到你可以获得一些你通常从收费版的待办事项 Web 服务中才能获得的高级功能,它可以成为大多数用户的完美替代品。
+
+你可以简单地使用 Google Drive、Dropbox 或任何其他 WebDAV 存储位置同步数据。
+
+它也可以取代像 [ActivityWatch][13] 这样的服务,帮助你追踪你工作任务和保持闲置的时间。所以,它可以成为你提高生产力的一体化解决方案!
+
+听起来很不错,对吧?
+
+你对“超级生产力”有什么看法?请在下面的评论区告诉我你的想法。
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/super-productivity/
+
+作者:[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/to-do-list-apps-linux/
+[2]: https://itsfoss.com/note-taking-apps-linux/
+[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/super-productivity.jpg?resize=800%2C569&ssl=1
+[4]: https://github.com/johannesjo
+[5]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/super-productivity-2.jpg?resize=800%2C575&ssl=1
+[6]: https://www.atlassian.com/software/jira
+[7]: https://github.com/
+[8]: https://about.gitlab.com
+[9]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/super-productivity-1.jpg?resize=800%2C574&ssl=1
+[10]: https://snapcraft.io/superproductivity
+[11]: https://github.com/johannesjo/super-productivity/releases
+[12]: https://github.com/johannesjo/super-productivity
+[13]: https://itsfoss.com/activitywatch/
diff --git a/published/20210113 How to get Battery status notification when a battery is full or low.md b/published/202101/20210113 How to get Battery status notification when a battery is full or low.md
similarity index 100%
rename from published/20210113 How to get Battery status notification when a battery is full or low.md
rename to published/202101/20210113 How to get Battery status notification when a battery is full or low.md
diff --git a/translated/tech/20210115 3 plain text note-taking tools.md b/published/202101/20210115 3 plain text note-taking tools.md
similarity index 67%
rename from translated/tech/20210115 3 plain text note-taking tools.md
rename to published/202101/20210115 3 plain text note-taking tools.md
index 7295039f0e..c5b839a849 100644
--- a/translated/tech/20210115 3 plain text note-taking tools.md
+++ b/published/202101/20210115 3 plain text note-taking tools.md
@@ -1,32 +1,34 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13056-1.html)
[#]: subject: (3 plain text note-taking tools)
[#]: via: (https://opensource.com/article/21/1/plain-text)
[#]: author: (Kevin Sonney https://opensource.com/users/ksonney)
3 个纯文本记事工具
======
-记笔记很重要,而纯文本是一种简单、中性的方式。这里有三个工具,你可以在不失去纯文本的简易和便携性的前提下,给你的笔记加点东西。
-![Typewriter with hands][1]
+
+> 记笔记很重要,而纯文本是一种简单、中性的方式。这里有三个工具,你可以在不失去纯文本的简易和便携性的前提下,给你的笔记加点东西。
+
+![](https://img.linux.net.cn/data/attachment/album/202101/27/153329o0waw16448hq0avf.jpg)
在前几年,这个年度系列涵盖了单个的应用。今年,我们除了关注 2021 年的策略外,还将关注一体化解决方案。欢迎来到 2021 年 21 天生产力的第五天。
-纯文本是最具弹性的文档格式。纯文本文档体积小,可以在机器之间快速传输,并且可以在_任意_设备上阅读。因此,在纯文本文档中做笔记是很有意义的。
+纯文本是最具弹性的文档格式。纯文本文档体积小,可以在机器之间快速传输,并且可以在*任意*设备上阅读。因此,在纯文本文档中做笔记是很有意义的。
-然而,纯文本也仅是纯文本。我们生活在一个富文本世界中,我们仍然需要标题、列表以及区分一个部分和另一个部分的方法。幸运的是,我们有几种方法可以添加这些元素,而不需要在纯文本文档中添加复杂的标记。
+然而,纯文本也仅是纯文本。我们生活在一个富文本世界中,我们仍然需要标题、列表以及区分一个章节和另一个章节的方法。幸运的是,我们有几种方法可以添加这些元素,而不需要在纯文本文档中添加复杂的标记。
### Markdown
![Markdown][2]
-Markdown (Kevin Sonney, [CC BY-SA 4.0][3])
+*Markdown (Kevin Sonney, [CC BY-SA 4.0][3])*
由 Aaron Schwartz 和 John Gruber 创建的 [Markdown][4],是我如今每天使用最多的格式。从读写 README 文件、文档、记笔记,甚至源代码注释,Markdown 让我可以在不牺牲轻松阅读文档的能力的情况下添加格式。
-此外,Markdown 还有几个”扩展版本“,以允许那些不属于原始设计的项目。特别是,[GitHub 风格的 Markdown][5] 由于其在同名的源码控制网站中的使用而异常流行。
+此外,Markdown 还有几个“扩展版本”,以允许那些不属于原始设计的项目。特别是,[GitHub 风格的 Markdown][5] 由于其在同名的源码控制网站中的使用而异常流行。
许多文件编辑器都支持 Markdown 高亮显示,不需要额外的附加组件或工作。
@@ -34,21 +36,21 @@ Markdown (Kevin Sonney, [CC BY-SA 4.0][3])
![AsciiDoc][6]
-AsciiDoc (Kevin Sonney, [CC BY-SA 4.0][3])
+*AsciiDoc (Kevin Sonney, [CC BY-SA 4.0][3])*
-由 Stuart Rackham 创建的 [AsciiDoc][7] 是向纯文本文档添加富文本元素的另一种方式。AsciiDoc 有许多生成文档、书籍和论文的功能。然而,这并不意味着它不能被用来做笔记。有很多环境(特别是在教育和研究领域),能够快速将笔记转换为更”正式“的格式是很有帮助的。
+由 Stuart Rackham 创建的 [AsciiDoc][7] 是向纯文本文档添加富文本元素的另一种方式。AsciiDoc 有许多生成文档、书籍和论文的功能。然而,这并不意味着它不能被用来做笔记。有很多环境(特别是在教育和研究领域),能够快速将笔记转换为更“正式”的格式是很有帮助的。
AsciiDoc 也有很多工具可以将文本转换为其他格式进行协作。还有一些附加组件可以从不同的源导入数据,并将其放入最终的文档中,或者处理特殊的格式,如 MathML 或 LaTeX。
-### Org Mode
+### Org 模式
![ORG-Mode][8]
-ORG-Mode (Kevin Sonney, [CC BY-SA 4.0][3])
+*ORG-Mode (Kevin Sonney, [CC BY-SA 4.0][3])*
-说到文本格式,我不能不提 [Org][9]。Org Mode 最初是为 [GNU Emacs][10] 设计的,现在已经成为笔记、待办事项、文档等常用的纯文本格式之一。Org 可以在包括 [Vim][11] 在内的众多文本编辑器中编写和使用。Org 简单、易学,是我最喜欢的笔记文本格式之一。
+说到文本格式,我不能不提 [Org 模式][9]。它最初是为 [GNU Emacs][10] 设计的,现在已经成为笔记、待办事项、文档等常用的纯文本格式之一。Org 模式可以在包括 [Vim][11] 在内的众多文本编辑器中编写和使用。Org 模式简单、易学,是我最喜欢的笔记文本格式之一。
-最后,选择 Markdown、AsciiDoc 或 Org 作为纯文本笔记,是确保它们可以在任何地方被阅读和更新的一种方式。如果你和我一样,你会发现自己在做纸质笔记的时候,也会使用同样的语法!
+最后,选择 Markdown、AsciiDoc 或 Org 模式作为纯文本笔记,是确保它们可以在任何地方被阅读和更新的一种方式。如果你和我一样,你会发现自己在做纸质笔记的时候,也会使用同样的语法!
--------------------------------------------------------------------------------
@@ -57,7 +59,7 @@ via: https://opensource.com/article/21/1/plain-text
作者:[Kevin Sonney][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/202101/20210116 How to use KDE-s productivity suite, Kontact.md b/published/202101/20210116 How to use KDE-s productivity suite, Kontact.md
new file mode 100644
index 0000000000..617d48c640
--- /dev/null
+++ b/published/202101/20210116 How to use KDE-s productivity suite, Kontact.md
@@ -0,0 +1,76 @@
+[#]: collector: (lujun9972)
+[#]: translator: (geekpi)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13059-1.html)
+[#]: subject: (How to use KDE's productivity suite, Kontact)
+[#]: via: (https://opensource.com/article/21/1/kde-kontact)
+[#]: author: (Kevin Sonney https://opensource.com/users/ksonney)
+
+如何使用 KDE 的生产力套件 Kontact
+======
+
+> KDE 很棒,但当你使用这个统一个人信息管理器 Kontact 时,它才真正发挥了作用。
+
+![](https://img.linux.net.cn/data/attachment/album/202101/28/094146fyx79l7zwbwej7ym.jpg)
+
+在前几年,这个年度系列涵盖了单个的应用。今年,我们除了关注 2021 年的策略外,还将关注一体化解决方案。欢迎来到 2021 年 21 天生产力的第六天。
+
+在很久很久以前,当编译内核还是获取 WiFi 驱动的唯一途径时,图形环境主要是用来运行网页浏览器和打开大量终端窗口。其外观和感觉是由程序作者选择使用的各种工具箱组成的大杂烩。然后,在 1996 年 [Matthias Ettrich][2] 提出并随后发布了第一个版本的 [KDE][3]。它是基于当时专有的 [Qt][4] 工具箱(后来成为自由而开源的)。这个版本引发了 Linux 上的桌面革命,同一时期出现的还有使用当时的自由开源软件 GTK 工具包所创建的 [GNOME 桌面][5] 。不管是 KDE 还是 GNOME,Linux 从一个*只有电脑操作人员使用的 Linux 操作系统*变成了一个人人都能使用的强大桌面环境。
+
+![Fedora KDE Spin Default Desktop][6]
+
+*Fedora KDE 版的默认桌面 (Kevin Sonney, [CC BY-SA 4.0][7])*
+
+KDE Plasma 5 是最新的 KDE 版本,它的功能非常丰富,可以提高你的工作效率。它包括了 Konqueror 网页浏览器、Dolphin 文件管理器和 Konsole 终端模拟器,所有这些都为这个桌面环境提供了一个很好的坚实基础,但是 KDE 真正提高生产力的方法是这个统一个人信息管理器:[Kontact][8]。
+
+Kontact 为其他几个 KDE 程序提供了一个单一的界面,包括:KMail(电子邮件)、KOrganizer(日历、待办事项和日记)、KAddressBook(地址簿)、KNotes(笔记)、Akregator(RSS/ATOM 订阅阅读器)等。第一次启动时,Kontact 会引导你完成电子邮件提供商的设置,它支持本地和远程邮件配置。然后,Kontact 会进入一个仪表板,默认情况下,该仪表板会显示最近的电子邮件、日历事件、计划任务和最近的笔记。
+
+![Kontact Summary screen][9]
+
+*Kontact 概览页面 (Kevin Sonney, [CC BY-SA 4.0][7])*
+
+设置“流程”看起来有点奇怪,因为在内置的本地账户之外没有配置统一的单一账户。在 Kontact(通过 KMail)引导你完成邮件设置后,你就可以进入日历页面添加你的日历,这里也配置了待办事项和日记应用(对于某些提供商,还可以配置通讯录)。
+
+邮件和日历组件非常简单明了,可以如你期望地正常工作。待办事项页面和日记是与日历绑定的,这对于一些不完全支持所有日历类型的日历提供商来说可能是个问题(Google,我说的是你)。如果你使用的是这些提供商中的一个,你将需要为日记和待办事项创建一个特定的本地日历。
+
+![Kontact Calendar][10]
+
+*Kontact Calendar (Kevin Sonney, [CC BY-SA 4.0][7])*
+
+待办事项列表有很多功能。虽然它可以作为一个简单的任务清单与提醒,它也支持一些轻量级的项目管理功能。它有一个完成百分比的滑块,可以从主列表视图中更新,这样你就可以跟踪进度。它能够附加文件和分配 1-10 的优先级。最后,它可以像其他日历约会一样将用户添加到任务中。
+
+创建一个日记条目本质上是在日历上给自己创建一个笔记。它是一段形式自由的文本,就像写在实体笔记本和计划手册的某一天上那样。如果你要记录工作,写下每天的日记,或只是需要个地方记录会议记录,这个功能是非常*方便*的(本系列后面有更多关于这个的内容)。
+
+![Kontact Journal][11]
+
+*Kontact Journal (Kevin Sonney, [CC BY-SA 4.0][7])*
+
+构成 Kontact 的这些程序非常强大,如果你愿意的话,也可以作为单独的应用运行。Kontact 通过给你提供一个集中的地方,在一个应用内找到你所有的信息,从而提升了它们的实用性。
+
+大多数发行版都允许你在没有 KDE 的情况下安装 Kontact 和它所使用的组件,但当它作为 KDE 桌面的一部分使用时,它才会真正发挥其作用。KDE 在 Fedora KDE 版、KUbuntu、KDE Neon(基于 Ubuntu LTS)和其他几个发行版中都是默认桌面。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/1/kde-kontact
+
+作者:[Kevin Sonney][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/ksonney
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/team_dev_email_chat_video_work_wfm_desk_520.png?itok=6YtME4Hj (Working on a team, busy worklife)
+[2]: https://en.wikipedia.org/wiki/Matthias_Ettrich
+[3]: https://kde.org/
+[4]: https://en.wikipedia.org/wiki/Qt_(software)
+[5]: https://www.gnome.org/
+[6]: https://opensource.com/sites/default/files/pictures/fedora-kde-spin-default-desktop.png (Fedora KDE Spin Default Desktop)
+[7]: https://creativecommons.org/licenses/by-sa/4.0/
+[8]: https://kontact.kde.org/
+[9]: https://opensource.com/sites/default/files/pictures/kontact-summary-screen_0.png (Kontact Summary screen)
+[10]: https://opensource.com/sites/default/files/pictures/kontact-calendar.png (Kontact Calendar)
+[11]: https://opensource.com/sites/default/files/pictures/kontact-journal.png (Kontact Journal)
diff --git a/published/20210119 Haruna Video Player- An Open-Source Qt-based MPV GUI Front-end for Linux.md b/published/202101/20210119 Haruna Video Player- An Open-Source Qt-based MPV GUI Front-end for Linux.md
similarity index 100%
rename from published/20210119 Haruna Video Player- An Open-Source Qt-based MPV GUI Front-end for Linux.md
rename to published/202101/20210119 Haruna Video Player- An Open-Source Qt-based MPV GUI Front-end for Linux.md
diff --git a/translated/tech/20210119 Organize your task list using labels.md b/published/202101/20210119 Organize your task list using labels.md
similarity index 52%
rename from translated/tech/20210119 Organize your task list using labels.md
rename to published/202101/20210119 Organize your task list using labels.md
index 7808c542ef..9fc27d6cb7 100644
--- a/translated/tech/20210119 Organize your task list using labels.md
+++ b/published/202101/20210119 Organize your task list using labels.md
@@ -1,50 +1,50 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13062-1.html)
[#]: subject: (Organize your task list using labels)
[#]: via: (https://opensource.com/article/21/1/labels)
[#]: author: (Kevin Sonney https://opensource.com/users/ksonney)
使用标签组织你的任务列表
======
-文件夹的用途是存储信息和任务。使用标签来帮助你更好地组织这些文件夹中的内容。
-![Kanban-style organization action][1]
-在前几年,这个年度系列涵盖了单个的应用。今年,我们除了关注 2021 年的策略外,还将关注一体化解决方案。欢迎来到 2021 年 21 天生产力的第九天。
+> 文件夹的用途是存储信息和任务。使用标签来帮助你更好地组织这些文件夹中的内容。
-我用电子邮件、待办列表和笔记来做这件事,有一天我决定我要把这些“组织起来”,重新安排我保存东西的方式和位置。有时我发现了一个新的程序,我必须(再次)从头开始配置。有时,当前的方法已经花了很多时间,与我使用系统的时间相比,我花了更多的时间在保持存储顺序最新。我去年测试一些待办列表软件时,最后一个软件让我有了一个非常重要的认识。
+![](https://img.linux.net.cn/data/attachment/album/202101/29/150011k9sz3n0q99mmkems.jpg)
+
+在前几年,这个年度系列报道了诸如 Notmuch 和 Syncthing 之类的开源的组织应用程序。今年,我们除了关注 2021 年的策略外,还将关注一体化解决方案。欢迎来到 2021 年 21 天生产力的第九天。
+
+我用我的电子邮件、待办列表和笔记来做这件事,有一天我决定我要把这些“组织起来”,重新安排我保存东西的方式和位置。有时我发现了一个新的程序,我必须(再次)从头开始配置。有时,当前的方法已经花了很多时间,与我使用系统的时间相比,我花了更多的时间在保持存储顺序最新。我去年测试一些待办列表软件时,最后一个软件让我有了一个非常重要的认识。
![List of labels][4]
-所有事情都有存放的地方(Kevin Sonney, [CC BY-SA 4.0][5])
+*所有事情都有存放的地方(Kevin Sonney, [CC BY-SA 4.0][5])*
-让我先打个比方。一个任务(或电子邮件或笔记)就像你在一次活动中收到的那件很酷的 T 恤。它是黑色的,有一个很棒的图案,后面有一个标签,上面写着尺寸,领口有一个标签,上面写着洗涤说明。到了该收起来的时候,它该放在哪里呢?是和黑色的 T 恤放在一起吗?是和类似主题的衬衫放在一起吗?是按尺码放吗?是按需要洗涤的方式?还是按材质?
+让我打个比方。一个任务(或电子邮件或笔记)就像你在一次活动中收到的那件很酷的 T 恤。它是黑色的,有一个很棒的图案,后面有一个标签,上面写着尺寸,领口有一个标签,上面写着洗涤说明。到了该收起来的时候,它该放在哪里呢?是和黑色的 T 恤放在一起吗?是和类似主题的衬衫放在一起吗?是按尺码放吗?是按需要洗涤的方式?还是按材质?
-一件 T 恤只能放在_一_个地方,即使它可以有多种特质。我们需要以同样的方式对待任务、电子邮件和笔记。一个非常大的[电子邮件提供商][6]已经允许我们把一个标签当作一个文件夹。一封邮件(或一个文档或一个任务)可以同时在两个文件夹中!或者三个!甚至 11 个!
+一件 T 恤只能放在*一*个地方,即使它可以有多种特质。我们需要以同样的方式对待任务、电子邮件和笔记。大型[电子邮件提供商][6]已经允许我们把一个标签当作一个文件夹。一封邮件(或一个文档或一个任务)可以同时在两个文件夹中!或者三个!甚至 11 个!
![Guitar volume 11][7]
-它高达 11 个(Seth Kenlon, [CC BY-SA 4.0][5])
+*它高达 11 个(Seth Kenlon, [CC BY-SA 4.0][5])*
-我必须明智地决定不再这样做。文件夹不是标签,标签也不是文件夹。这让我找到了我目前整理待办事项清单(和笔记,以及电子邮件)的规则。
+我必须明智地决定不再这样做。文件夹不是标签,标签也不是文件夹。这让我找到了我目前整理待办事项清单(和笔记,以及电子邮件)的规则:
- 1. 一个任务只应该在一个文件夹里。文件夹是以“大的事情”命名的,比如一个地方或组织。我目前有三个文件夹来存放任务。“工作”、“家庭”和 “爱好”。当我专注于其中一个领域时,我知道我在看什么任务。
+ 1. 一个任务只应该在一个文件夹里。文件夹是以“大事”来命名的,比如一个地方或组织。我目前有三个文件夹来存放任务。“工作”、“家庭”和 “爱好”。当我专注于其中一个领域时,我知道我在看什么任务。
2. 一个任务可以有任意个我需要的标签。我尽量保持在三个左右或更少。
3. 一个任务应该有一个明确的意义。也许是你要写的程序的名字。也许是一些通用的东西,比如“要读的书”或“账单”。但如果你记不起 “4rg8sn5” 就是“要支付的账单”,这就对你没有帮助。
+利用这些规则,如果我有一个“写第 9 天文章”的任务,它就会进入”爱好“文件夹,我给它打上 “OSDC”、“文章”、“2021” 的标签。如果我想在我的 [Elementary Planner][8] 中看到我所有的 2021 年的任务,我可以搜索这个标签。任务最终会出现在 “OSDC” 的搜索中,其中可能还包括一个对文章发表评论的待办事项,一个开始规划 2022 年系列的待办事项,还有一个跟进我认为有好文章想法的人。
-
-利用这些规则,如果我有一个“写第 9 天文章”的任务,它就会进入”爱好“文件夹,我给它打上 ”OSDC“、”文章“、”2021“ 的标签。如果我想在我的 [Elementary Planner][8] 中看到我所有的 2021 年的任务,我可以搜索这个标签。任务最终会出现在 ”OSDC“ 的搜索中,其中可能还包括一个对文章发表评论的待办事项,一个开始规划 2022 年系列的待办事项,还有一个跟进我认为有好文章想法的人。
-
-我的”工作“文件夹里的东西通常是按项目标记的。”完成管理 CLI 文档“可能会被分为 “github”、“prod” 和 “admin”。“docs” 标签包含了“工作”和”爱好“文件夹中的项目,因为写文档是这两个文件夹都需要做的事情。
+我的“工作”文件夹里的东西通常是按项目标记的。“完成管理 CLI 文档”可能会被分为 “github”、“prod” 和 “admin”。“docs” 标签包含了“工作”和”爱好“文件夹中的项目,因为写文档是这两个文件夹都需要做的事情。
![Linux Elementary planner][9]
-文件夹和标签(Kevin Sonney, [CC BY-SA 4.0][5])
+*文件夹和标签(Kevin Sonney, [CC BY-SA 4.0][5])*
-将”标签“和”文件夹“进行心理分离,帮助我将任务进行分组和分类,而不至于过度。这也意味着我可以更快地找到事情,花更少的时间去维护我的待办事项清单,而花更多的时间去做清单上的事情。
+将“标签”和“文件夹”进行心理分离,帮助我将任务进行分组和分类,而不至于过度。这也意味着我可以更快地找到事情,花更少的时间去维护我的待办事项清单,而花更多的时间去做清单上的事情。
--------------------------------------------------------------------------------
@@ -53,7 +53,7 @@ via: https://opensource.com/article/21/1/labels
作者:[Kevin Sonney][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/20210120 Why keeping a journal improves productivity.md b/published/202101/20210120 Why keeping a journal improves productivity.md
similarity index 60%
rename from translated/tech/20210120 Why keeping a journal improves productivity.md
rename to published/202101/20210120 Why keeping a journal improves productivity.md
index 60f5d37bf6..f82892a054 100644
--- a/translated/tech/20210120 Why keeping a journal improves productivity.md
+++ b/published/202101/20210120 Why keeping a journal improves productivity.md
@@ -1,46 +1,48 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
-[#]: reviewer: ( )
-[#]: publisher: ( )
-[#]: url: ( )
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13070-1.html)
[#]: subject: (Why keeping a journal improves productivity)
[#]: via: (https://opensource.com/article/21/1/open-source-journal)
[#]: author: (Kevin Sonney https://opensource.com/users/ksonney)
-为什么写日志能提高效率
+为什么写日记能提高效率
======
-写日志有着悠久的历史。这里有三个开源工具,可以帮助你写日志变得更轻松。
-![Note taking hand writing][1]
+
+> 写日记有着悠久的历史。这里有三个开源工具,可以帮助你写日记变得更轻松。
+
+![](https://img.linux.net.cn/data/attachment/album/202101/31/082622p6wgh7szzuvevug4.jpg)
在前几年,这个年度系列涵盖了单个的应用。今年,我们除了关注 2021 年的策略外,还将关注一体化解决方案。欢迎来到 2021 年 21 天生产力的第十天。
-在商业互联网还没有出现的我的小学时代,老师经常会给我们班级布置一个让我们写日志的作业。有时会针对一些特定的内容,例如特定格式的虫子列表和说明,或者是公民课的每周新闻摘要。
+在我的小学时代,商业互联网还没有出现,老师经常会给我们班级布置一个让我们写日记的作业。有时会针对一些特定的内容,例如特定格式的虫子列表和说明,或者是公民课的每周新闻摘要。
-几个世纪以来,人们一直在写日志。它们是一种方便的信息保存方式。它们有很多形式,比如意大利的 [Zibaldone][2]、[备忘录][3],或者记录今天做了什么的事件日志。
+几个世纪以来,人们一直在写日记。它们是一种方便的信息保存方式。它们有很多形式,比如意大利的 [Zibaldone][2]、[备忘录][3],或者记录今天做了什么的事件日记。
![Notebook folders][4]
-(Kevin Sonney, [CC BY-SA 4.0][5])
+*(Kevin Sonney, [CC BY-SA 4.0][5])*
-为什么我们要写某种日志呢?第一个原因是为了让我们不至于把所有的事情都记在脑子里。我们中没有多少人有[遗觉记忆][6],维护运行日志或一组笔记可以让我们更容易地参考我们之前做的一些事情。日志也更容易分享,因为它们可以在聊天、邮件中复制/粘贴。正如 [Robert Boyce][7]的名言:”知识就是力量。知识共享就是力量倍增。“知识的共享是开源的一个内在组成部分。
+为什么我们要写某种日记呢?第一个原因是为了让我们不至于把所有的事情都记在脑子里。我们中没有多少人有[遗觉记忆][6],维护运行日记或一组笔记可以让我们更容易地参考我们之前做的一些事情。日记也更容易分享,因为它们可以在聊天、邮件中复制/粘贴。正如 [Robert Boyce][7] 的名言:“知识就是力量。知识共享使力量倍增。”知识的共享是开源的一个内在组成部分。
![Today's journal][8]
-今天的日志 (Kevin Sonney, [CC BY-SA 4.0][5])
+*今天的日记 (Kevin Sonney, [CC BY-SA 4.0][5])*
-在写事件日志的时候,有一个很关键的点就是要快速、简单、方便。最简单的方法是打开文档,添加一行当前日期和备注,然后保存。
+在写事件日记的时候,有一个很关键的点就是要快速、简单、方便。最简单的方法是打开文档,添加一行当前日期和备注,然后保存。
有几个程序或附加软件可以让这一切变得更简单。[GNote 的 Note of the Day 插件][9]会自动创建一个以日期为标题的笔记,可以用来保存当天的内容。
-Emacs Org 有一个热键组合,可以”捕捉“事物并将其放入文档中。结合 [org-journal][10] 附加组件,这将在文档中创建当天的条目。
+Emacs Org 模式有一个热键组合,可以“捕捉”事物并将其放入文档中。结合 [org-journal][10] 附加组件,这将在文档中创建当天的条目。
Kontact 的 KNotes 组件会自动将日期和时间添加到新笔记中。
![Finding a note][11]
-查找笔记 (Kevin Sonney, [CC BY-SA 4.0][5])
+*查找笔记 (Kevin Sonney, [CC BY-SA 4.0][5])*
-写日志或记录事情是一种方便的方法,可以记录做了什么和怎么做的。它的作用不仅仅是”我做了什么“,它还可以包括阅读的书籍、吃过的食物、去过的地方,以及一大堆对未来有用的信息。
+写日记或记录事情是一种方便的方法,可以记录做了什么和怎么做的。它的作用不仅仅是“我做了什么”,它还可以包括阅读的书籍、吃过的食物、去过的地方,以及一大堆对未来有用的信息。
--------------------------------------------------------------------------------
@@ -49,7 +51,7 @@ via: https://opensource.com/article/21/1/open-source-journal
作者:[Kevin Sonney][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/202101/20210122 How to implement a DevOps toolchain.md b/published/202101/20210122 How to implement a DevOps toolchain.md
new file mode 100644
index 0000000000..49af4bf425
--- /dev/null
+++ b/published/202101/20210122 How to implement a DevOps toolchain.md
@@ -0,0 +1,89 @@
+[#]: collector: (lujun9972)
+[#]: translator: (AnyISalIn)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13063-1.html)
+[#]: subject: (How to implement a DevOps toolchain)
+[#]: via: (https://opensource.com/article/21/1/devops-tool-chain)
+[#]: author: (Tereza Denkova https://opensource.com/users/tereza-denkova)
+
+如何实现 DevOps 工具链
+======
+
+> 一套完整启用的 DevOps 工具链可推动你的创新计划,实现快速部署并节约成本。
+
+![](https://img.linux.net.cn/data/attachment/album/202101/29/153905o35h8u9zy5k58bll.jpg)
+
+不同规模和不同行业组织都致力于为提高软件交付的速度和质量提供解决方案。这不仅保证了他们的生存,还令他们在全球市场取得了成功。DevOps 可以帮助他们规划出一条最佳路线。
+
+DevOps 是一个系统,通过引入不同的工具链连接不同工作流程,以便及时交付项目并降低所需的开销。
+
+在我工作的 IT 服务公司 [Accedia][2],我们会帮助客户落地一套完整的 DevOps 工具链,这套工具链能帮助他们达到甚至超越他们的业务目标。在这篇文章,我会分享目前为止从 DevOps 项目中汲取的经验。
+
+### DevOps 工具链是什么?
+
+一套完善的 DevOps 工具链可以在不同阶段中使用不同的 DevOps 工具来解决特定的业务带来的挑战。一条工具链能保证前端和后端开发者、质量测试人员、客户都能够从中获得收益。构建工具链的目的是为了自动化开发和部署过程,以确保快速、可靠、预算友好地交付与创新。
+
+我们发现成功构建一套 DevOps 工具链不是一个简单的事情。它需要实验和不断的完善,保证必要的流程是完全自动化的。
+
+### 为什么你需要 DevOps 工具链
+
+DevOps 工具链自动化了工作流中的所有技术元素。它能让不同团队在一个平台上进行工作,因此可以使你专注于业务战略以推动组织走向未来。
+
+我们总结了五个实现 DevOps 工具链所带来的好处。你可以让管理层相信,是值得为 DevOps 工具链的开发投入资源和时间的。
+
+ 1. **更快、更高效的生产部署**:DevOps 工具自动化了大部分软件开发进程。这会使产品开发专注于创新,交付更加敏捷,更领先于竞争对手。
+ 2. **预算和时间优化**:将手动的任务转变为自动化会使你的组织节省时间和资源。当没有人为的错误和时间管理不足带来的额外支出,预算自然会得到优化。
+ 3. **高效的开发**:DevOps 工具链会减少开发工作中不必要的延时,提高开发效率。前端、后端、质量测试人员的工作是一致的,所以没有人需要协调不同团队之间人员的交付。
+ 4. **更快的部署意味着更高的质量**:DevOps 工具链保证了缺陷能够很快被解决,并且迅速完成高质量的部署进程。怎么样?它可以生成有针对性的告警,并将重要的事件通知给你的团队。这会让你主动地发现并解决潜在的问题,从而规避故障的不断的升级从而导致的客户服务不可用。
+ 5. **及时事件管理**:DevOps 工具链有助于优化事件管理记录。它能够识别 IT 事件并且逐渐升级事件级别,通知给指定团队的成员,直到问题被解决。这意味着消息的接受和处理会更加的迅速,因为它们发送给了正确的目标。
+
+### DevOps 工具链的实践
+
+对我的团队来说,DevOps 并不新鲜。我们已经敏捷开发很长时间了,并且我们总是热衷于探索最优的工作流。在我们的实践中,往往都是应用复杂性增加从而带来了自动化的需求。
+
+这是我们为一个客户配置的工具链。这个项目包含了移动运营方案,连接了金融交易的所有参与者 (卖方、买方、银行)。这个客户需要动态响应用户反馈并且将故障时间缩短到最小,从而来提高用户体验。我的团队设计了一套工具链用于自动化应用的维护和部署新功能。
+
+![Accedia's DevOps toolchain][3]
+
+*(Accedia, [CC BY-NC-SA 4.0][4])*
+
+ 1. 首先,我们团队编写了自动化测试,可以立即识别应用程序的变更。
+ 2. 当新版本已经准备就绪的时候,代码将被提交到 Gitlab 中。
+ 3. 通过 Gitlab,提交会自动触发 Jenkins 构建。
+ 4. 在 **持续集成中**,新的代码版本通过 [Chai][5] 和 [Mocha][6] 进行了测试,以检测是否运行正常。
+ 5. 当测试通过,**持续部署阶段** 将会开始并创建一个可用的 Docker 镜像并上传到 Sonatype 的 [Nexus][7]。(这是 Sonatype 公司的的一个开源工具)
+ 6. 最后,新版本应用会通过 Nexus 下载并且部署到线上环境中,例如 [Docker][8] 容器 (**持续部署阶段**)
+
+简而言之,每当有人在仓库中创建一个新的提交,又或者团队上传新的代码版本、功能、升级、缺陷修复等,应用程序包都会自动更新并且交付给客户。
+
+这套系统拥有良好的事故控制能力以保证快速部署,但不以牺牲质量为代价。它对于用户的反馈是动态的,意味着新功能和旧功能的和更新只需要之前一半的时间,同时将故障时间降低到最低。
+
+### 把它封装起来
+
+一套完整并且正确实施的 DevOps 工具链可以从始至终推动你的创新计划并且加速部署。
+
+根据你的需求,你的工具链可能看起来和这些不一样,但是我希望我们的工作流能够让你了解如何将自动化作为一种解决方案。
+
+-------------------------------------------------- -----------------------------
+
+via: https://opensource.com/article/21/1/devops-tool-chain
+
+作者:[Tereza Denkova][a]
+选题:[lujun9972][b]
+译者:[AnyISalIn](https://github.com/AnyISalIn)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://opensource.com/users/tereza-denkova
+[b]: https://github.com/lujun9972
+[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/tools_osyearbook2016_sysadmin_cc.png?itok=Y1AHCKI4 (Wratchet set tools)
+[2]: https://accedia.com/services/operations/devops/
+[3]: https://opensource.com/sites/default/files/uploads/devopstoolchain.png (Accedia's DevOps toolchain)
+[4]: https://creativecommons.org/licenses/by-nc-sa/4.0/
+[5]: https://www.chaijs.com/
+[6]: https://mochajs.org/
+[7]: https://www.sonatype.com/nexus/repository-oss
+[8]: https://opensource.com/resources/what-docker
+[9]: https://accedia.com/blog/5-good-reasons-why-you-need-a-devops-toolchain/
diff --git a/published/20210111 7 Bash tutorials to enhance your command line skills in 2021.md b/published/20210111 7 Bash tutorials to enhance your command line skills in 2021.md
new file mode 100644
index 0000000000..ce0f61adc5
--- /dev/null
+++ b/published/20210111 7 Bash tutorials to enhance your command line skills in 2021.md
@@ -0,0 +1,69 @@
+[#]: collector: (lujun9972)
+[#]: translator: (Chao-zhi)
+[#]: reviewer: (wxy)
+[#]: publisher: (wxy)
+[#]: url: (https://linux.cn/article-13090-1.html)
+[#]: subject: (7 Bash tutorials to enhance your command line skills in 2021)
+[#]: via: (https://opensource.com/article/21/1/bash)
+[#]: author: (Jim Hall https://opensource.com/users/jim-hall)
+
+7 个 Bash 教程,提高你的命令行技能(2021 版)
+======
+
+> Bash 是大多数 Linux 系统上的默认命令行 shell。所以你为什么不试着学习如何最大限度地利用它呢?
+
+![](https://img.linux.net.cn/data/attachment/album/202102/06/001837cujo0ql3utfobrrj.jpg)
+
+Bash 是大多数 Linux 系统上的默认命令行 shell。所以你为什么不试着学习如何最大限度地利用它呢?今年,我们推荐了许多很棒的文章来帮助你充分利用 Bash shell 的强大功能。以下是一些关于 Bash 阅读次数最多的文章:
+
+### 《通过重定向在 Linux 终端任意读写数据》
+
+输入和输出重定向是任何编程或脚本语言的基础功能。从技术上讲,只要你与电脑互动,它就会自然而然地发生。输入从 stdin(标准输入,通常是你的键盘或鼠标)读取,输出到 stdout(标准输出,一般是文本或数据流),而错误被发送到 stderr(标准错误,一般和标准输出是一个位置)。了解这些数据流的存在,使你能够在使用 Bash 等 shell 时控制信息的去向。Seth Kenlon [分享][2]了这些很棒的技巧,可以让你在不需要大量鼠标移动和按键的情况下从一个地方获取数据。你可能不经常使用重定向,但学习使用它可以为你节省大量不必要的打开文件和复制粘贴数据的时间。
+
+### 《系统管理员 Bash 脚本入门》
+
+Bash 是自由开源软件,所以任何人都可以安装它,不管他们运行的是 Linux、BSD、OpenIndiana、Windows 还是 macOS。Seth Kenlon [帮助][3]你学习如何使用 Bash 的命令和特性,使其成为最强大的 shell 之一。
+
+### 《针对大型文件系统可以试试此 Bash 脚本》
+
+你是否曾经想列出一个目录中的所有文件,只显示其中的文件,不包括其他内容?或者只显示目录?如果你有,那么 Nick Clifton 的[文章][4]可能正是你正在寻找的。Nick 分享了一个漂亮的 Bash 脚本,它可以列出目录、文件、链接或可执行文件。该脚本使用 `find` 命令进行搜索,然后运行 `ls` 显示详细信息。对于管理大型 Linux 系统的人来说,这是一个漂亮的解决方案。
+
+### 《用 Bash 工具对你的 Linux 系统配置进行快照》
+
+你可能想与他人分享你的 Linux 配置,原因有很多。你可能需要帮助排除系统上的一个问题,或者你对自己创建的环境非常自豪,想向其他开源爱好者展示它。Don Watkins 向我们[展示][5]了 screenFetch 和 Neofetch 来捕获和分享你的系统配置。
+
+### 《6 个方便的 Git 脚本》
+
+Git 已经成为一个无处不在的代码管理系统。了解如何管理 Git 存储库可以简化你的开发体验。Bob Peterson [分享][6]了 6 个 Bash 脚本,它们将使你在使用 Git 存储库时更加轻松。`gitlog` 打印当前补丁的简略列表,并与主版本相对照。这个脚本的不同版本可以显示补丁的 SHA1 id 或在一组补丁中搜索字符串。
+
+### 《改进你 Bash 脚本的 5 种方法》
+
+系统管理员通常编写各种或长或短的 Bash 脚本,以完成各种任务。Alan Formy-Duval [解释][7]了如何使 Bash 脚本更简单、更健壮、更易于阅读和调试。我们可能会考虑到我们需要使用诸如 Python、C 或 Java 之类的语言来实现更高的功能,但其实也不一定需要。因为 Bash 脚本语言就已经非常强大。要最大限度地发挥它的效用,还有很多东西要学。
+
+### 《我珍藏的 Bash 秘籍》
+
+Katie McLaughlin 帮助你提高你的工作效率,用别名和其他快捷方式解决你经常忘记的事情。当你整天与计算机打交道时,找到可重复的命令并标记它们以方便以后使用是非常美妙的。Katie [总结][8]了一些有用的 Bash 特性和帮助命令,可以节省你的时间。
+
+这些 Bash 小技巧将一个已经很强大的 shell 提升到一个全新的级别。也欢迎分享你自己的建议。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/21/1/bash
+
+作者:[Jim Hall][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/jim-hall
+[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://linux.cn/article-12385-1.html
+[3]: https://opensource.com/article/20/4/bash-sysadmins-ebook
+[4]: https://linux.cn/article-12025-1.html
+[5]: https://opensource.com/article/20/1/screenfetch-neofetch
+[6]: https://linux.cn/article-11797-1.html
+[7]: https://opensource.com/article/20/1/improve-bash-scripts
+[8]: https://linux.cn/article-11841-1.html
diff --git a/published/20210120 Learn JavaScript by writing a guessing game.md b/published/20210120 Learn JavaScript by writing a guessing game.md
new file mode 100644
index 0000000000..e457842c51
--- /dev/null
+++ b/published/20210120 Learn JavaScript by writing a guessing game.md
@@ -0,0 +1,286 @@
+[#]: collector: "lujun9972"
+[#]: translator: "amwps290"
+[#]: reviewer: "wxy"
+[#]: publisher: "wxy"
+[#]: url: "https://linux.cn/article-13087-1.html"
+[#]: subject: "Learn JavaScript by writing a guessing game"
+[#]: via: "https://opensource.com/article/21/1/learn-javascript"
+[#]: author: "Mandy Kendall https://opensource.com/users/mkendall"
+
+通过编写一个简单的游戏学习 JavaScript
+======
+
+> 通过使用一个简单的游戏来练习一些基本的 JavaScript 概念,迈出创建交互性动态 Web 内容的第一步。
+
+![](https://img.linux.net.cn/data/attachment/album/202102/05/151531z6fzqx8vk8tdan81.jpg)
+
+可以肯定地说,没有 [JavaScript][2],大多数现代 Web 都将不存在。它是三种标准 Web 技术(以及 HTML 和 CSS )之一,它使任何人都可以创建我们在万维网体验中所期待的交互式、动态内容。从 [React][3] 这样的框架到 [D3][4] 这样的数据可视化库,很难想象没有它的 Web。
+
+现在有很多东西要学习,开始学习这种流行语言的好方法是编写一个简单的应用程序以熟悉某些概念。 最近,一些人写了关于如何通过编写简单的猜谜游戏来学习自己喜欢的语言的文章,因此这是一个很好的起点!
+
+### 现在开始吧
+
+JavaScript 有许多种风格,但我将从最基本的开始,通常称为 “普通 JavaScript”。 JavaScript 主要是一种客户端脚本语言,因此它可以在任何标准浏览器中运行,而无需安装任何程序。你只需要一个代码编辑器([Brackets][5] 就是一个不错的选择)和一个 Web 浏览器。
+
+### HTML 用户界面
+
+JavaScript 在 Web 浏览器中运行,并与其他标准 Web 技术 HTML 和 CSS 交互。要创建此游戏,你首先需要使用 HTML(超文本标记语言)来创建供玩家使用的简单界面。如果你不清楚,HTML 是一种标记语言,用于为 Web 内容提供结构。
+
+首先,先创建一个 HTML 文件。该文件应具有 `.html` 扩展名,以使浏览器知道它是 HTML 文档。你可以将文件命名为 `guessingGame.html`。
+
+在此文件中使用一些基本的 HTML 标签来显示游戏的标题、玩法说明,供玩家用来输入和提交其猜测的交互式元素以及用于向玩家提供反馈的占位符:
+
+```
+
+
+
+
+ JavaScript Guessing Game
+
+
+ Guess the Number!
+ I am thinking of a number between 1 and 100. Can you guess what it is?
+
+
+
+
+
+
+
+
+```
+
+`` 和 `
` 元素使浏览器知道在页面上显示什么类型的文本。标签对 `
` 表示标签之间的文本(`Guess the Number!`)是标题。后面的一组 `` 标签表示带有说明的短文本是一个段落。此代码块末尾的空 `
` 标签用作占位符,用于根据用户的输入提供一些反馈。
+
+### `
+
+