Merge remote-tracking branch 'origin/master'

This commit is contained in:
hkurjch 2020-03-14 00:27:24 -07:00
commit 80c18135c3
26 changed files with 2459 additions and 555 deletions

View File

@ -1,35 +1,32 @@
[#]: collector: (lujun9972)
[#]: translator: (cycoe)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11994-1.html)
[#]: subject: (Debugging in Emacs: The Grand Unified Debugger)
[#]: via: (https://opensourceforu.com/2019/09/debugging-in-emacs-the-grand-unified-debugger/)
[#]: author: (Vineeth Kartha https://opensourceforu.com/author/vineeth-kartha/)
Emacs 调试秘籍之——GUD 调试器
Emacs 调试秘籍之 GUD 调试器
======
[![][1]][2]
![][2]
_本文简短地对 Emacs 的调试工具 GUD译注全称 Grand Unified Debugger鉴于其缩写形式更为人熟知以下全文将使用缩写替代此全称的特性进行了探索。_
> 本文简短地对 Emacs 的调试工具 GUD 的特性进行了探索。
如果你是一个 C 或 C++ 开发者,你很可能已经使用过 GDBGNU 调试器),毫无疑问,它是现今最强大、最无可匹敌的调试器之一。它唯一的缺点就是它基于命令行,虽然仍能提供许多强大的功能,但有时也会具有一些局限性。这也就是为什么聪明的人们开始追求整合了编辑器和调试器的<ruby>图形化<rt>GUI</rt>集成<rt>Integrated</rt>开发<rt>Development</rt>环境<rt>Environment</rt></ruby>。仍有些开发者坚信使用鼠标会降低工作效率,在 GUI 上用鼠标点~点~点~是来自恶魔的诱惑。
如果你是一个 C 或 C++ 开发者,你很可能已经使用过 GDBGNU 调试器),毫无疑问,它是现今最强大、最无可匹敌的调试器之一。它唯一的缺点就是它基于命令行,虽然仍能提供许多强大的功能,但有时也会具有一些局限性。这也就是为什么聪明的人们开始追求整合了编辑器和调试器的<ruby>图形化<rt> GUI </rt></ruby><ruby>集成开发环境<rt>Integrated Development Environment</rt></ruby>。仍有些开发者坚信使用鼠标会降低工作效率,在 GUI 上用鼠标点~点~点~是来自恶魔的诱惑。
因为 Emacs 是现今最酷的文本编辑器之一,我将为你展示如何在不碰鼠标且不离开 Emacs 的情况下,实现写代码、编译代码、调试代码的过程。
![图 1: Emacs 迷你缓冲区中的编译命令][3]
GUDLCTT 译注:全称<ruby>大统一调试器<rt>Grand Unified Debugger</rt></ruby>,鉴于其缩写形式更为人熟知,以下全文将使用缩写替代此全称)是 Emacs 下的一个<ruby>模式<rt>mode</rt></ruby>,用于在 Emacs 中运行 GDB。它向 GDB 提供了 Emacs 的所有特性,使用户无需离开编辑器就可以对代码进行调试。
![图 2: 编译状态][4]
### 使用 GUD 的前期准备
GUD 是 Emacs 下的一个<ruby>模式<rt>mode</rt></ruby>,用于在 Emacs 中运行 GDB。它向 GDB 提供了 Emacs 的所有特性,使用户无需离开编辑器就可以对代码进行调试。
**使用 GUD 的前期准备**
如果你正在使用一个 Linux 机器,很可能你已经安装了 GDB 和 gcc接下来就是要确保已经安装了 Emacs。以下的内容我将假设读者熟悉 GDB 并且至少用它做过基本的调试。如果你未曾接触过 GDB你可以做个快速入门这些资料在网上随处可得。
对于那些 Emacs 新手,我将向你介绍一些基本术语。纵览整篇文章,你将看到诸如 _C-c M-x_ 等快捷键。此处 _C_ 代表 _Ctrl__M_ 代表 _Alt_ 键。_C-c_ 代表 _Ctrl_ 键和 _c_ 键被同时按下。如果你看到 _C-c c_,它代表同时按下 _Ctrl_ 键和 _c_ 键,紧接着按下 _c_ 键。在 Emacs 中,编辑文本的主要区域被称为<ruby><rt>main</rt>缓冲区<rt>buffer</rt></ruby>,而在 Emacs 窗口下方用于输入命令的区域被称为<ruby>迷你<rt>mini</rt>缓冲区<rt>buffer</rt></ruby>
对于那些 Emacs 新手,我将向你介绍一些基本术语。纵览整篇文章,你将看到诸如 `C-c M-x` 等快捷键。此处 `C` 代表 `Ctrl` 键,`M` 代表 `Alt` 键。`C-c` 代表 `Ctrl` 键和 `c` 键被同时按下。如果你看到 `C-c c`,它代表同时按下 `Ctrl` 键和 `c` 键,释放后紧接着按下 `c` 键。在 Emacs 中,编辑文本的主要区域被称为<ruby>主缓冲区<rt>main buffer</rt></ruby>,而在 Emacs 窗口下方用于输入命令的区域被称为<ruby>迷你缓冲区<rt>mini buffer</rt></ruby>
启动 Emacs并按下 _C-x C-f_ 来创建一个新文件。Emacs 将提示你输入一个文件名,此处让我们将文件命名为 `buggyFactorial.cpp`。一旦文件打开,输入如下代码:
启动 Emacs并按下 `C-x C-f` 来创建一个新文件。Emacs 将提示你输入一个文件名,此处让我们将文件命名为 `buggyFactorial.cpp`。一旦文件打开,输入如下代码:
```
#include<iostream>
@ -48,32 +45,38 @@ int main() {
}
```
使用 _C-x C-s_ 快捷键保存文件。文件保存完毕,是时候进行编译了。按下 _M-x_,在弹出的<ruby>提示符<rt>prompt</rt></ruby>后输入 _compile_ 并点击回车。然后在提示符后,将内容替换为 _g++ -g buggyFactorial.cpp_ 并再次点击回车。
使用 `C-x C-s` 快捷键保存文件。文件保存完毕,是时候进行编译了。按下 `M-x`,在弹出的<ruby>提示符<rt>prompt</rt></ruby>后输入 `compile` 并点击回车。然后在提示符后,将内容替换为 `g++ -g buggyFactorial.cpp` 并再次点击回车。
![图 1: Emacs 迷你缓冲区中编译命令][3]
这将在 Emacs 中开启另一个缓冲区,显示编译的状态。如果你的代码输入没有错误,你将预期得到如图 2 所示的缓冲区。
要想隐藏编译缓冲区,首先确保你的光标在编译缓冲区中(你可以不使用鼠标,而是通过 _C-x o_ 快捷键将光标从一个缓冲区移动到另一个),然后按下 _C-x 0_。下一步就是运行代码,并观察是否运行良好。按下 _M-!_ 快捷键并在迷你缓冲区的提示符后面输入 _./a.out_
![图 2: 编译状态][4]
你可以看到迷你缓冲区中显示断言失败。很明显代码中有错误,因为 5 的阶乘是 120。那么让我们现在开始调试吧
要想隐藏编译缓冲区,首先确保你的光标在编译缓冲区中(你可以不使用鼠标,而是通过 `C-x o` 快捷键将光标从一个缓冲区移动到另一个),然后按下 `C-x 0`。下一步就是运行代码,并观察是否运行良好。按下 `M-!` 快捷键并在迷你缓冲区的提示符后面输入 `./a.out`
![图 3: 代码在迷你缓冲区中的输出][5]
你可以看到迷你缓冲区中显示断言失败。很明显代码中有错误,因为 5 的阶乘是 120。那么让我们现在开始调试吧。
### 使用 GUD 调式代码
现在,我们的代码已经编译完成,是时候看看到底哪里出错了。按下 `M-x` 快捷键并在提示符后输入 `gdb`。在接下来的提示符后,输入 `gdb -i=mi a.out`。如果一切顺利GDB 会在 Emacs 缓冲区中启动,你会看到如图 4 所示的窗口。
![图 4: Emacs 中的 GDB 缓冲区][6]
**使用 GUD 调式代码**
现在,我们的代码已经编译完成,是时候看看到底哪里出错了。按下 _M-x_ 快捷键并在提示符后输入 _gdb_。在接下来的提示符后,输入 _gdb -i=mi a.out_。如果一切顺利GDB 会在 Emacs 缓冲区中启动,你会看到如图 4 所示的窗口。
_gdb_ 提示符后,输入 _break main_ 来设置断点,并输入 _r_ 来运行程序。程序会开始运行并停在 _main()_ 函数处。
`gdb` 提示符后,输入 `break main` 来设置断点,并输入 `r` 来运行程序。程序会开始运行并停在 `main()` 函数处。
一旦 GDB 到达了 _main_ 处设置的断点,就会弹出一个新的缓冲区显示你正在调试的代码。注意左侧的红点,正是你设置断点的位置,同时会有一个小的标志提示你当前代码运行到了哪一行。当前,该标志就在断点处(如图 5
一旦 GDB 到达了 `main` 处设置的断点,就会弹出一个新的缓冲区显示你正在调试的代码。注意左侧的红点,正是你设置断点的位置,同时会有一个小的标志提示你当前代码运行到了哪一行。当前,该标志就在断点处(如图 5
![图 5: GDB 与代码显示在两个分离的窗口][7]
![图 6: 在 Emacs 中使用独立帧显示局部变量][8]
为了调试 _factorial_ 函数,我们需要单步运行。想要达到此目的,你可以使用 _gdb_ 提示符和 GDB 命令 _step_,或者使用 Emacs 快捷键 _C-c C-s_。还有其它一些快捷键,但我更喜欢 GDB 命令。因此我将在本文的后续部分使用它们。
为了调试 `factorial` 函数,我们需要单步运行。想要达到此目的,你可以在 GBD 提示符使用 GDB 命令 `step`,或者使用 Emacs 快捷键 `C-c C-s`。还有其它一些快捷键,但我更喜欢 GDB 命令。因此我将在本文的后续部分使用它们。
单步运行时让我们注意一下局部变量中的阶乘值。参考图 6 来设置在 Emacs 帧中显示局部变量值。
![图 6: 在 Emacs 中使用独立帧显示局部变量][8]
在 GDB 提示符中进行单步运行并观察局部变量值的变化。在循环的第一次迭代中,我们发现了一个问题。此处乘法的结果应该是 5 而不是 4。
本文到这里也差不多结束了,读者可以自行探索发现 GUD 模式这片新大陆。GDB 中的所有命令都可以在 GUD 模式中运行。我将此代码的修复留给读者作为一个练习。看看你在调试的过程中,可以做哪一些定制化,来使你的工作流更加简单和高效。
@ -85,17 +88,17 @@ via: https://opensourceforu.com/2019/09/debugging-in-emacs-the-grand-unified-deb
作者:[Vineeth Kartha][a]
选题:[lujun9972][b]
译者:[cycoe](https://github.com/cycoe)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensourceforu.com/author/vineeth-kartha/
[b]: https://github.com/lujun9972
[1]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Screenshot-from-2019-09-25-15-39-46.png?resize=696%2C440&ssl=1 (Screenshot from 2019-09-25 15-39-46)
[2]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Screenshot-from-2019-09-25-15-39-46.png?fit=800%2C506&ssl=1
[3]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_1.png?resize=350%2C228&ssl=1
[4]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_2.png?resize=350%2C228&ssl=1
[5]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_3.png?resize=350%2C228&ssl=1
[6]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_4.png?resize=350%2C227&ssl=1
[7]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_5.png?resize=350%2C200&ssl=1
[8]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_6.png?resize=350%2C286&ssl=1
[1]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Screenshot-from-2019-09-25-15-39-46.png?ssl=1
[2]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Screenshot-from-2019-09-25-15-39-46.png?ssl=1
[3]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_1.png?ssl=1
[4]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_2.png?ssl=1
[5]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_3.png?ssl=1
[6]: https://i0.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_4.png?ssl=1
[7]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_5.png?ssl=1
[8]: https://i1.wp.com/opensourceforu.com/wp-content/uploads/2019/09/Figure_6.png?ssl=1

View File

@ -0,0 +1,113 @@
[#]: collector: (lujun9972)
[#]: translator: (wenwensnow)
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11990-1.html)
[#]: subject: (3 eBook readers for the Linux desktop)
[#]: via: (https://opensource.com/article/20/2/linux-ebook-readers)
[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
可在 Linux 桌面使用的 3 个电子书阅读器应用
======
> 任意一个开源电子书应用都能使你在大屏设备上的阅读体验得到提升。
![电脑浏览器阅读书籍界面][1]
我通常使用手机或 Kobo 阅读器阅读电子书,总是没有在大屏设备上阅读书籍那么爽。很多人经常在自己的笔记本或桌面电脑上阅读电子书,如果你有这种需求(或者你认为以后会遇到这种情况),我想向你介绍三种 Linux 桌面下的电子书阅读器。
### Bookworm书虫
[Bookworm][2] 意在成为一个“简洁、专注的电子书阅读器”。事实证明它也确实做到了。Bookworm 内置一系列基础功能,有人抱怨它太过*简单*,缺少*功能性*虽然这词显然有点指意不明。Bookworm 起到了应有的作用而没有无关的花哨功能。
该应用的界面整洁干净。
![Bookworm 电子书应用][3]
你可通过以下方式查看书籍:
* 空格键前往下一页
* 上下方向键按行移动
* 左右方向键跳转至前后章节
你也可以通过添加注释或书签跳转至特定页面。
![Bookworm 注释][4]
Bookworm 没有太多设置选项。你能调整书籍字体大小及间距开启双页模式或夜间模式。在应用中添加新文件夹后Bookworm 会自动扫描文件夹中的电子书。
![Bookworm 参数设置][5]
Bookworm 支持常用的电子书格式EPUB、PDF、MOBI、[FB2][6],你还能用它阅读 [CBR][7] 和 CBZ 格式的数字版漫画。我只在 Bookworm 上测试了前三种格式PDF 倒是能打开,但加载速度很慢,格式也很难看。
### Foliate
单从功能上来说,[Foliate][8] 确实比 Bookworm 强上一些。Foliate 不仅功能更强,它还有更多设置选项。这个功能多样、简单干净的应用满足了所有要求。
![Foliate 电子书应用][9]
在 Foliate 中可以通过空格、方向键、向上或向下翻页键浏览电子书,这里没什么特别的。
你还可以在书籍中添加注释、查找以及翻译字句、查询字词含义。如果你电脑上安装了智能语音应用, Foliate 还能将文本朗读出来。
![在 Foliate 中的注释文本][10]
Foliate 与 Bookworm 相比有更多自定义选项。你能在应用中修改字体类型及大小、行间距、电子书页边距,也可以调高或降低屏幕亮度,从应用内置的四个主题中选择一个等。
![Foliate 设置][11]
你可以在 Foliate 上阅读 EPUB、MOBI、AZW、AZW3 格式的电子书。如果你不了解,我可以提前告诉你,后三种格式是亚马逊 Kindle 阅读器上架的书籍的闭源格式。
### Calibre 电子书阅读器
这个[电子书阅读器][12]是 [Calibre][13] 电子书管理工具的一个组件,就像它的前代一样,电子书阅读器这部分并不是软件整体最棒的部分。
![电子书阅读器应用][14]
不过别被上面的话吓到,它也的确是个桌面电子书阅读器。
在 Calibre 电子书阅读器中,你可以通过方向键、向上/向下翻页键以及空格浏览书籍,还能在在线字典中查找词语含义,添加书签。这一阅读器没有注释功能,但内置的搜索引擎却很好用,你还能将书籍保存为 PDF 格式(虽然我不太明白你为什么要这么做)。
不过参数设置这里确是它出彩的地方,它的可选设置比 Bookworm 和 Foliate 加起来都多,从字体到文本布局,页面分割方式你都能改。除此之外,你还能自定义应用按键设置,将你喜欢的词典网站添加进来,方便阅读查找。
![电子书参数设置][15]
Calibre 电子书阅读器一个很有用的功能,就是把自行设置的 CSS 配置文件效果应用到电子书上。赘言一句CSS 是一种调整网页格式的方法(这类文件就是许多电子书的一个组成部分)。如果你是使用 CSS 的高手,你可以将自己的 CSS 文件复制粘贴到配置窗口的 “User stylesheet” 部分,这就是个性化的究极办法。
据开发者描述,这一电子书阅读器“能支持所有主流电子书格式”。如果你想知道具体支持格式是什么,[这是列表链接][16]。我测试了列表中的一小部分格式,没有发现问题。
### 留在最后的话
不管你只是单纯想找个电子书阅读器,还是有个更多复杂功能的应用,上文提到的三个选择都很不错,而且它们都能提升你在大屏设备上的阅读体验。
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/2/linux-ebook-readers
作者:[Scott Nesbitt][a]
选题:[lujun9972][b]
译者:[wenwensnow](https://github.com/wenwensnow)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/scottnesbitt
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_browser_program_books_read.jpg?itok=iNMWe8Bu (Computer browser with books on the screen)
[2]: https://babluboy.github.io/bookworm/
[3]: https://opensource.com/sites/default/files/uploads/bookworm-reading.png (Bookworm e-book application)
[4]: https://opensource.com/sites/default/files/uploads/bookworm-annotations.png (Annotations in Bookworm)
[5]: https://opensource.com/sites/default/files/uploads/bookworm-preferences.png (Bookworm preferences)
[6]: https://en.wikipedia.org/wiki/FictionBook
[7]: https://en.wikipedia.org/wiki/Comic_book_archive
[8]: https://johnfactotum.github.io/foliate/
[9]: https://opensource.com/sites/default/files/uploads/foliate-reading.png (Foliate e-book application)
[10]: https://opensource.com/sites/default/files/uploads/foliate-annotation_0.png
[11]: https://opensource.com/sites/default/files/uploads/foliate-settings.png (Foliate settings)
[12]: https://calibre-ebook.com/about
[13]: https://opensourcemusings.com/managing-your-ebooks-with-calibre
[14]: https://opensource.com/sites/default/files/uploads/e-book_viewer-reading.png (E-book Viewer application)
[15]: https://opensource.com/sites/default/files/uploads/ebook-viewer-preferences.png (E-book Viewer preferences)
[16]: https://manual.calibre-ebook.com/faq.html#what-formats-does-calibre-support-conversion-to-from
[17]: https://opensourcemusings.com/three-ebook-readers-for-the-linux-desktop
[18]: https://creativecommons.org/licenses/by-sa/4.0/

View File

@ -1,8 +1,8 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11992-1.html)
[#]: subject: (Three Ways to Exclude/Hold/Prevent a Specific Package from an apt Upgrade)
[#]: via: (https://www.2daygeek.com/debian-ubuntu-exclude-hold-prevent-packages-from-apt-get-upgrade/)
[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
@ -10,53 +10,45 @@
从 apt 升级中排除/保留/阻止特定软件包的三种方法
======
有时,由于某些应用依赖性,你可能会意外更新未更新的软件包。
![](https://img.linux.net.cn/data/attachment/album/202003/13/103902tfyv8eeuo5jf9ifo.jpg)
在整个系统更新或自动包升级过程中一直会发生
有时,由于某些应用依赖性,你可能会意外更新不想更新的软件包。这在全系统更新或自动包升级时经常会发生。如果发生这种情况,可能会破坏应用的功能。这会造成严重的问题,你需要花费大量时间来解决问题
果发生这种情况,可能会破坏应用的功能。
何避免这种情况?如何从 `apt-get` 更新中排除软件包?
这会造成严重的问题,你需要花费大量时间来解决问题。
如果你要**[从 Yum Update 中排除特定软件包][1]**,请参考它。
如何避免这种情况?
如何从 apt-get 更新中排除软件包?
> 如果你要[从 Yum Update 中排除特定软件包][1],请参考这篇。
是的,可以在 Debian 和 Ubuntu 系统上使用以下三种方法来完成。
* **[apt-mark 命令][2]**
* **[dpkg 命令][3]**
* aptitude 命令
* [apt-mark 命令][2]
* [dpkg 命令][3]
* aptitude 命令
我们将分别详细展示。
### 方法 1如何使用 apt-mark 命令排除 Debian/Ubuntu 系统上的软件包更新
apt-mark 用于将软件包标记/取消标记为自动安装。
`apt-mark` 用于将软件包标记/取消标记为自动安装。
hold 选项用于将软件包标记为已阻止,以防止软件包被自动安装、升级或删除。
`hold` 选项用于将软件包标记为保留,以防止软件包被自动安装、升级或删除。
unhold 选项用于取消软件包的先前设置,以允许重复执行所有操作。
`unhold` 选项用于取消先前面的设置,以允许重复执行所有操作。
运行以下命令以使用 apt-mark 命令保留指定的软件包。
运行以下命令以使用 `apt-mark` 命令保留指定的软件包。
```
$ sudo apt-mark hold nano
nano set on hold.
```
保留软件包后,请运行以下 apt-mark 命令查看它们。
保留软件包后,请运行以下 `apt-mark` 命令查看它们。
```
$ sudo apt-mark showhold
nano
```
这表明在执行完整的系统更新时,不会升级 **nano”** 包。
这表明在执行完整的系统更新时,不会升级 nano 包。
```
$ sudo apt update
@ -70,7 +62,7 @@ The following packages have been kept back:
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
```
运行以下命令,使用 apt-mark 命令取消对 “nano” 包的保留
运行以下命令,使用 `apt-mark` 命令取消保留 nano 包
```
$ sudo apt-mark unhold nano
@ -79,17 +71,17 @@ Canceled hold on nano.
### 方法 2如何使用 dpkg 命令在 Debian/Ubuntu 系统上排除软件包更新
dpkg 命令是一个 CLI 工具,用于安装,构建,删除和管理 Debian 软件包。dpkg 的主要且更用户友好的前端是 aptitude
`dpkg` 命令是一个 CLI 工具,用于安装、构建、删除和管理 Debian 软件包。`dpkg` 的主要且更用户友好的前端是 `aptitude`
运行以下命令使用 dpkg 命令阻止给定的软件包。
运行以下命令使用 `dpkg` 命令阻止给定的软件包。
**语法:**
语法:
```
$ echo "package_name hold" | sudo dpkg --set-selections
```
运行以下 dpkg 命令以保留 **apache2”** 包。
运行以下 `dpkg` 命令以保留 apache2 包。
```
$ echo "apache2 hold" | sudo dpkg --set-selections
@ -102,7 +94,7 @@ $ sudo dpkg --get-selections | grep "hold"
apache2 hold
```
它会显示在执行完整的系统更新时,不会升级 **apache2”** 包。
它会显示在执行完整的系统更新时,不会升级 apache2包。
```
$ sudo apt update
@ -116,15 +108,15 @@ The following packages have been kept back:
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
```
运行以下命令,使用 dpkg 命令取消对指定软件包的保留。
运行以下命令,使用 `dpkg` 命令取消对指定软件包的保留。
**语法:**
语法:
```
$ echo "package_name install" | sudo dpkg --set-selections
```
运行以下命令,使用 dpkg 命令取消保留 apache2 包。
运行以下命令,使用 `dpkg` 命令取消保留 apache2 包。
```
$ echo "apache2 install" | sudo dpkg --set-selections
@ -132,17 +124,17 @@ $ echo "apache2 install" | sudo dpkg --set-selections
### 方法 3如何使用 aptitude 命令排除 Debian/Ubuntu 系统上的软件包更新
aptitude 命令是 Debian 及其衍生版本的基于文​​本的软件包管理界面。
`aptitude` 命令是 Debian 及其衍生版本的基于文​​本的软件包管理界面。
它允许用户查看软件包列表并执行软件包管理任务,例如安装、升级和删除软件包。它可以从可视界面或命令行执行操作。
运行以下命令,使用 aptitude 命令保留指定的软件包。
运行以下命令,使用 `aptitude` 命令保留指定的软件包。
```
$ sudo aptitude hold python3
```
保留某些软件包后,请运行以下 aptitude 命令查看它们。
保留某些软件包后,请运行以下命令查看它们。
```
$ sudo dpkg --get-selections | grep "hold"
@ -152,7 +144,7 @@ $ sudo apt-mark showhold
python3
```
这表明在执行完整的系统更新时,不会升级 **python3”** 软件包。
这表明在执行完整的系统更新时,不会升级 python3 软件包。
```
$ sudo apt update
@ -166,7 +158,7 @@ The following packages have been kept back:
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
```
使用 apt-mark 命令运行以下命令以解除对 **“python3”** 软件包的保留。
使用 `aptitude ` 命令运行以下命令以解除对 python3 软件包的保留。
```
$ sudo aptitude unhold python3
@ -179,7 +171,7 @@ via: https://www.2daygeek.com/debian-ubuntu-exclude-hold-prevent-packages-from-a
作者:[Magesh Maruthamuthu][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/) 荣誉推出

View File

@ -0,0 +1,145 @@
[#]: collector: (lujun9972)
[#]: translator: (HankChow)
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11993-1.html)
[#]: subject: (How to install pip to manage PyPI packages easily)
[#]: via: (https://opensource.com/article/20/3/pip-linux-mac-windows)
[#]: author: (Vijay Singh Khatri https://opensource.com/users/vijaytechnicalauthor)
安装 pip 轻松管理 PyPI 软件包
======
> 在 Linux、Mac 或 Windows 上为旧版 Python 安装 pip。
![](https://img.linux.net.cn/data/attachment/album/202003/14/102539wq3a73opalpzoabb.jpg)
Python 是一种功能强大、流行广泛的编程语言,在常规编程、数据科学等很多方面它都有丰富的软件包可供使用。但这些软件包通常都不会在 Python 安装时自动附带,而是需要由用户自行下载、安装和管理。所有的这些软件包(包括库和框架)都存放在一个名叫 [PyPI][2](也就是 <ruby>Python 软件包索引<rt> Python Package Index</rt></ruby>)的中央存储库当中,而 `pip`(也就是<ruby>首选安装程序<rt>Preferred Installer Program</rt></ruby>)则是管理这个中央存储库的工具。
在安装 `pip` 之后,管理 PyPI 的软件包就变得很方便了。大部分的软件包都可以通过在终端或者命令行界面执行 `python -m pip install <软件包名>` 这样的命令来完成安装。
较新版本的 Python 33.4 或以上)和 Python 22.7.9 或以上)都已经预装了 `pip`,旧版本的 Python 没有自带 `pip`,但可以另外安装。
在这篇文章中,我将会介绍 `pip` 在 Linux、Mac 和 Windows 系统上的安装过程。想要了解更多详细信息,可以参考 [pip.pypa][3] 的文档。
### 首先需要安装 Python
首先你的系统中需要安装好 Python否则 `pip` 安装器无法理解任何相关的命令。你可以在命令行界面、Bash 或终端执行 `python` 命令确认系统中是否已经安装 Python如果系统无法识别 `python` 命令,请先[下载 Python][4] 并安装。安装完成后,你就可以看到一些引导你安装 `pip` 的提示语了。
### 在 Linux 上安装 pip
在不同发行版的 Linux 上,安装 `pip` 的命令也有所不同。
在 Fedora、RHEL 或 CentOS 上,执行以下命令安装:
```
$ sudo dnf install python3
```
在 Debian 或 Ubuntu 上,使用 `apt` 包管理工具安装:
```
$ sudo apt install python3-pip
```
其它的发行版可能还会有不同的包管理工具,比如 Arch Linux 使用的是 `pacman`
```
$ sudo pacman -S python-pip
```
执行 `pip --version` 命令就可以确认 `pip` 是否已经正确安装。
在 Linux 系统上安装 `pip` 就是这样简单,你可以直接跳到“使用 pip”部分继续阅读。
### 在 Mac 上安装 pip
MacOS 已经预装了 Python但 Python 版本一般是比较旧的。如果你要使用 Python 的话,建议[另外安装 Python 3][6]。
在 Mac 上可以使用 [homebrew][7] 安装 Python 3
```
$ brew update && brew upgrade python
```
如果你安装的是以上提到的新版本 Python 3它会自带 `pip` 工具。你可以使用以下命令验证:
```
$ python3 -m pip --version
```
如果你使用的是 Mac安装过程也到此结束可以从“使用 pip”部分继续阅读。
### 在 Windows 上安装 pip
以下 `pip` 安装过程是针对 Windows 8 和 Windows 10 的。下面文章中的截图是 Windows 10 环境下的截图,但对 Windows 8 同样适用。
首先确认 [Python 已经安装完成][8]。
如果你想在 Windows 系统上像 Linux 一样使用包管理工具,[Chocolatey][9] 是一个不错的选择,它可以让 Python 的调用和更新变得更加方便。Chocolatey 在 PowerShell 中就可以运行只需要简单的命令Python 就可以顺利安装。
```
PS> choco install python
```
接下来就可以使用 `pip` 安装所需的软件包了。
### 使用 pip
在 Linux、BSD、Windows 和 Mac 上,`pip` 都是以同样的方式使用的。
例如安装某个库:
```
python3 -m pip install foo --user
```
卸载某个已安装的库:
```
python3 -m pip uninstall foo
```
按照名称查找软件包:
```
python3 -m pip search foo
```
`pip` 更新到一个新版本:
```
$ sudo pip install --upgrade pip
```
需要注意的是,在 Windows 系统中不需要在前面加上 `sudo` 命令,这是因为 Windows 通过独有的方式管理用户权限,对应的做法是[创建一个执行策略例外][10]。
```
python -m pip install --upgrade pip
```
希望本文介绍的的方法能对你有所帮助,欢迎在评论区分享你的经验。
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/pip-linux-mac-windows
作者:[Vijay Singh Khatri][a]
选题:[lujun9972][b]
译者:[HankChow](https://github.com/HankChow)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/vijaytechnicalauthor
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/1980s-computer-yearbook.png?itok=eGOYEKK- (Person typing on a 1980's computer)
[2]: https://pypi.org/
[3]: https://pip.pypa.io/en/stable/installing/
[4]: https://www.python.org/downloads/
[5]: tmp.u1JOYd3gs9#usage
[6]: https://opensource.com/article/19/5/python-3-default-mac
[7]: https://brew.sh
[8]: https://opensource.com/article/19/8/how-install-python-windows
[9]: https://opensource.com/article/20/3/chocolatey
[10]: https://opensource.com/article/20/3/chocolatey#admin

View File

@ -0,0 +1,116 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (GNOME 3.36 Released With Visual & Performance Improvements)
[#]: via: (https://itsfoss.com/gnome-3-36-release/)
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
GNOME 3.36 Released With Visual & Performance Improvements
======
The latest version GNOME 3.36 also codenamed as “Gresik” has finally landed after 6 months of [GNOME 3.34][1] release.
Not just limited to the feature additions, but GNOME 3.36 improves on a lot of things that we needed.
In this article, Ill highlight the key changes with GNOMEs new release.
### GNOME 3.36 Key Improvements
If you want a quick look at what has changed, you can take a look at the official video below:
[Subscribe to our YouTube channel for Linux videos][2]
Now, let me highlight the changes in the latest release separately:
#### GNOME Shell Extensions App
You can easily manage your GNOME shell extensions right through a dedicated “Extensions” app.
![][3]
So, you can update, configure, delete or disable the existing extension using the app.
#### Do Not Disturb Toggle
![][4]
You might have already noticed this on Pop!_OS or other Linux distros.
However, GNOME 3.36 now implements a DND toggle in the notifications pop-over area out of the box. You wont be notified of anything unless you turn it off.
#### Lock Screen Improvements
![][5]
With the new version, the lock screen wont need an additional slide (or animation) before entering the credentials. Instead, you will be directly greeted by the login screen.
Also, to improve consistency, the background image of the lockscreen will be a blurred out version of your wallpaper.
So, overall, the improvements to the lock screen aim to make it easier to access while improving the look/feel of it.
#### Visual Changes
![][6]
Including the obvious new additions there are several design changes that have improved the overall look and feel of GNOME 3.36.
Ranging from the icon redesign to the folders and system dialogues, a lot of minor improvements are in place to enhance the user experience on GNOME 3.36.
Also, the settings app has been tweaked to make the options easier to access along with minor interface re-designs.
#### Major Performance Improvement
GNOME claims that this update also brings in performance improvement for the GNOME desktop.
You will have a noticeable difference in the performance when using a distribution with GNOME 3.36 on board. Be it an animation, a redesign, or a minor tweak, everything that has been done for GNOME 3.36 positively impacts the performance for the users.
#### Other Changes
In addition to all the key changes mentioned above, theres a bunch of other improvements like:
* Clock redesign
* User documentation update
* GNOME Setup assistant improvements
And, a lot of stuff here and there. You can take a look at the [official release notes][7] to learn more about it.
### How to get GNOME 3.36?
Even though GNOME 3.36 has officially released. It will take a while for the Linux distributions to let you easily upgrade your GNOME experience.
[Ubuntu 20.04 LTS][8] release will include the latest version out of the box. You can wait for it.
Other [popular Linux distributions][9] like Fedora, OpenSuse, Pop!_OS should soon include GNOME 3.36 soon enough. [Arch Linux][10] has already upgraded to GNOME 3.36.
Ill advise you to wait it out till you get an update for your distribution. Nevertheless, you can take a look at the [source code][11] or try the upcoming development editions of popular distros that could potentially feature GNOME 3.36.
What do you think about GNOME 3.36? Let me know your thoughts in the comments below.
--------------------------------------------------------------------------------
via: https://itsfoss.com/gnome-3-36-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://itsfoss.com/author/ankush/
[b]: https://github.com/lujun9972
[1]: https://itsfoss.com/gnome-3-34-release/
[2]: https://www.youtube.com/c/itsfoss?sub_confirmation=1
[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/extensions-gnome.jpg?ssl=1
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/03/dnd-gnome.jpg?ssl=1
[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/gnome-lockscreen.jpg?ssl=1
[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/gnome-settings.jpg?ssl=1
[7]: https://help.gnome.org/misc/release-notes/3.36/
[8]: https://itsfoss.com/ubuntu-20-04-release-features/
[9]: https://itsfoss.com/best-linux-distributions/
[10]: https://www.archlinux.org/
[11]: https://gitlab.gnome.org/GNOME

View File

@ -1,83 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Linux is our love language)
[#]: via: (https://opensource.com/article/20/2/linux-love-language)
[#]: author: (Christopher Cherry https://opensource.com/users/chcherry)
Linux is our love language
======
When a wife teaches a husband some new tech skills, they both learn a
lot more than they expect.
![Red heart with text "you are not alone"][1]
2019 was a year of learning in the Cherry household. I am a senior software engineer who set out to learn new skills and, along the way, I taught my husband, Chris. By teaching him some of the things I learned and asking him to work through my technology walkthrough articles, I helped Chris learn new skills that enabled him to pivot his career deeper into the technology field. And I learned new ways to make my walkthroughs and training materials more accessible for readers to digest.
In this article, we talk about what we learned individually and from each other, then we explore what it means for their future.
### Questions for the student
**Jess:** Chris, what made you want to learn more about my field?
**Chris:** It was primarily to further my career. Being in network engineering has shown me that being an expert only on networks is not as valuable as it once was, and I have to know a little bit of everything. Since the network is often blamed for outages or application challenges these days, I wanted to understand more from a developer's perspective on writing applications so I could see how they depend on the network as a resource.
**Jess:** What did I teach you first, and what did you learn from it?
**Chris:** It all started with installing Linux for the first time, then adding [Ansible][2]. Each Linux distribution I worked with was easy enough to install, as long as the hardware was compatible, but compatibility wasn't always clear. That meant sometimes I learned first-hand how to troubleshoot Linux within the first five minutes of running an installation (and I liked it). Ansible gave me a reason to learn Linux package managers to install the software. Once it was installed, I quickly learned how package management handles dependencies as I looked at the files that yum installed, so Ansible, which is written in Python, can run on my system. From there, I started to install all kinds of applications with Ansible.
**Jessica:** Do you like the way I taught you?
**Chris:** We had our struggles at first, until we ironed out how I like to learn and how you should present the best way for me to learn. In the beginning, it was hard to follow what you meant. For instance, when you said things like "a Docker container," I had no reference to what you were talking about. Early on, the response was, "well, it's a container," which meant nothing to me at the time. Once I got you to explain it in more detail, it became a lot more fun to learn.
**Jess:** To be fair, this was a big lesson for me as well. I hadn't trained anyone with less knowledge on this technology than me before you, so you helped me realize that I needed to be clearer with my explanations. Thanks for that.
How did you feel about testing my articles, the ones where I had you run through the steps?
**Chris:** Personally, I thought it would be easy, and boy, was I wrong. One of the main things I learned from these, like your [introduction to Vagrant][3], was how each Linux distribution varies more than I realized. The operating system (OS) changes how you set it up, the requirements to run, and the specific commands. It seems like a lot more variability than there is with the network gear I've worked on. So I started to pay a lot more attention to the instructions and whether they were written for my OS or another one (and how difficult it can be to know sometimes). I seemed to break a lot of things along the way.
**Jess:** I break stuff all day, so different paths for different problems are daily occurrences for me.
### Questions for the teacher
**Chris:** Jess, would you change anything with the way you taught me so far?
**Jess:** I'd have liked to make you read more, as I do. Learning new technology has me churning through books. I read a book and a half, if not two books, a week, and that's with spending one hour in the morning and one hour before bed every day. I also pick one project to run through for two weeks for about an hour a day to reinforce the book skills. And that's in addition to the tech articles I read for the first hour of my day while taking in an immense amount of coffee. When I think about your goal to grow your career, I think books are an important element alongside the great blog posts and articles we talk about. I feel my reading regiment has kept me up to speed, and if you did the same, you would catch up to me pretty quickly.
**Chris:** So did the student teach the teacher in any way?
**Jess:** I learned a great deal about being patient from you. For instance, after walking through an installation of Ansible, I asked what you wanted to do next. Your first answer was, "I don't know," which was hard for me because I want you to learn what you want to learn. So I changed my approach, and now we talk more about what you want to achieve before walking through installing anything. When we moved on to the Vagrant article we worked on together, I created it with an end goal in mind, so we had something to achieve right away.
This actually made a massive change in how I do training at work. Now I ask more questions on how people learn and work hand-in-hand more often than I did before. I am more likely to sit and go through and make sure someone understands what I'm saying and what we're doing. I wasn't really before.
### What we learned together
As a couple, we both grew from collaborating on technology over the last year.
**Chris:** I'm blown away at how much I learned. Over the course of a year, I understand new operating systems, how to use an API, web application deployment with Ansible, and standing up virtual machines with Vagrant. I also learned how documentation makes life better, so it's worth the time it takes to write some. In this field of work, however, behavior isn't always documented, so I've learned to be ready to work through tough issues and document how I fix them.
**Jess:** Beyond what I learned from teaching you, I've focused on learning a good deal about Kubernetes in cloud environments. That includes deployment strategies, the complexity of the Kubernetes API, building my own containers, and securing these environments. I've also saved time to dabble: toying around with serverless code, AI models, Python, and graphically displaying heat maps. It's been a good year.
What's next for us? It's yet to be seen, but I can assure you that we're going to share it here on Opensource.com.
**Who did you mentor in 2019, or who are you mentoring in 2020? Tell us about it in the comments.**
I can see the brightness of curiosity in my six year old niece Shuchi's eyes when she explores a...
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/2/linux-love-language
作者:[Christopher Cherry][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/chcherry
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/red-love-heart-alone-stone-path.jpg?itok=O3q1nEVz (Red heart with text "you are not alone")
[2]: https://opensource.com/resources/what-ansible
[3]: https://opensource.com/resources/vagrant

View File

@ -1,5 +1,5 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: translator: (chuan-325)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )

View File

@ -0,0 +1,92 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Next wave of digital transformation requires better security, automation)
[#]: via: (https://www.networkworld.com/article/3531448/next-wave-of-digital-transformation-requires-better-security-automation.html)
[#]: author: (Zeus Kerravala https://www.networkworld.com/author/Zeus-Kerravala/)
Next wave of digital transformation requires better security, automation
======
F5 report highlights the challenges of digital initiatives, including a struggle to secure multi-cloud environments and a lack of IT skills required to extend automation efforts.
Loops7 / Getty Images
Digital transformation is a top-of-mind priority for CIOs who want innovative ways to deploy applications and run IT operations. In today's digital economy, companies that don't depend on applications to support their business are rare. On the contrary, most companies have some kind of digital transformation initiative in place, which is driving the adoption of cloud-native architectures and application services.
A new report from application delivery vendor F5 Networks finds businesses are entering the second phase of digital transformation by automating more parts of their networks. Based on a survey of nearly 2,600 senior leaders globally—from various industries, company sizes, and roles—the [_2020 State of Application Services Report_][1] uncovered five key trends shaping the application landscape.
**READ MORE:** [Top 10 underused SD-WAN features][2]
### 1\. Every company is undergoing a digital transformation
Having conducted its annual survey for six years in a row, F5 consistently found IT optimization and business process optimization to be the top reported benefits for companies with digital transformation initiatives. At this point, most companies have mastered automation of individual tasks by digitizing IT and business processes—which the report classifies as phase one of digital transformation.
Moving on to phase two, companies are shifting their focus to reducing complexity and supporting apps with a consistent set of services. External-facing apps make up a portion (45%) of an average company's portfolio and help generate revenue. Yet, the internal-facing ones—like productivity and operational apps—are vital to digitizing business processes.
Modern, microservices/cloud-native apps now make up approximately 15% of a company's portfolio, compared to 11% for mainframe-hosted apps. This mix of new and older generation apps indicates that businesses are dealing with a diverse app portfolio. As more businesses adopt an application-centric mindset, they can start managing their app portfolio like a business asset.
### 2\. Organizations struggle to secure multi-cloud environments
Every company has different needs, which is why most choose the best cloud for their applications on a case-by-case basis, the report finds. Businesses are adopting cloud platforms at a high rate, with 27% planning to have more than half of their applications in the cloud by the end of 2020.
For 87% of companies, multi-cloud is the preferred choice due to its flexibility. Multi-cloud typically includes a mix of infrastructure-as-a-service (IaaS) environments, so a company can choose to deploy multiple software-as-a-service (SaaS) or platform-as-a-service (PaaS) cloud services.
[][3]
However, multi-cloud environments pose challenges for businesses when it comes to maintaining security, policy, and compliance, according to the report's respondents. Companies are dealing with applications that reach hundreds to millions of end users—each one with its own security risk. Meanwhile, many don't have the expertise to protect the apps.
A whopping 71% of companies surveyed by F5 reported a skills gap in security. Only 45% of companies are confident that they're able to secure apps in the public cloud, while 62% think they can protect apps in an on-premises data center. The most confident companies have consistency across multiple architectures and multiple infrastructures, ensuring security and performance of all apps in their portfolio.
### 3\. Automation key to boosting efficiency
Manual processes may have been the norm for legacy networks, but modern networks require automation. That's why most companies (73%) have embraced it.
In this year's report, F5 observed more consistent use of automation in the deployment pipeline than in previous years. Automation of application infrastructure, network, application services, and security is nearly equal across the board at approximately 40% for survey respondents. (See also: [Enterprises being won over by speed, effectiveness of network automation][4])
Interestingly, more companies are choosing open source and continuous integration/continuous delivery (CI/CD) tools for automation over proprietary vendor solutions. The report found there is a need for open ecosystems with the increasing use of CI/CD tools, as businesses search for ways to address problems that slow down automation. Companies said their biggest struggles are with skill gaps in enterprise IT, integrating toolsets across vendors and devices, and the cost of new tools.
### 4\. Security app services are most widely deployed
Modern networks require application services—a pool of services necessary to deploy, run, and secure apps across on-premises or multi-cloud environments. Today, 69% of companies are using 10 or more application services, such as ingress control and service discovery. Ingress control is a relatively new application service that has become essential to companies with high API call volumes. It's one of many examples of the growing adoption of microservices-based apps.
Security services remain as the most widely deployed, with these in particular dominating the top five: SSL VPN and firewall services (81%); IPS/IDS, antivirus, and spam mitigation (77%); load balancing and DNS (68%); web application firewalls (WAF) and DDoS protection (each at 67%).
Over the next 12 months, the evolution of cloud and modern app architectures will continue to shape application services. At the top of the list (41%) is software-defined wide-area networking ([SD-WAN][5]). SD-WAN enables software-based provisioning from the cloud to meet modern application demands. Early SD-WAN deployments focused on replacing costly multi-protocol label switching (MPLS), but there is now greater emphasis on security as a core requirement for SD-WAN.
### 5\. DevOps picks up responsibility for app services
Although IT operations is still primarily responsible for deploying app services, the report revealed a shift taking place from single-function to ops-oriented team structures—such SecOps and DevOps.
The responsibility for securing, optimizing, and managing apps by DevOps teams is growing, fueled by cloud and container-native applications. Compared to just a few years ago, businesses have developed a preference for containers over virtual appliances for app services. Container preference grew from just 6% in 2017 to 18% in 2020, surpassing virtual machines (15%) and hardware (15%).
Regardless of preference, the challenges of modern app architectures call for collaboration between teams. IT operations and DevOps don't have to be mutually exclusive and can work together to address those challenges.
### What's Next?
Senior leaders surveyed in the report see big data analytics coming into play in the next two to five years.
Companies today only use a small portion of their data and aren't taking full advantage of it. In the third phase of the digital transformation, businesses can begin leveraging data captured by apps via artificial intelligence (AI)-powered analytics. The harnessed data can provide valuable insights to improve business processes.
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/3531448/next-wave-of-digital-transformation-requires-better-security-automation.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://www.f5.com/state-of-application-services-report
[2]: https://www.networkworld.com/article/3518992/top-10-underused-sd-wan-features.html
[3]: 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)
[4]: https://www.networkworld.com/article/3530275/enterprises-being-won-over-by-speed-effectiveness-of-network-automation.html
[5]: https://www.networkworld.com/article/3031279/sd-wan-what-it-is-and-why-you-ll-use-it-one-day.html
[6]: https://www.facebook.com/NetworkWorld/
[7]: https://www.linkedin.com/company/network-world

View File

@ -0,0 +1,73 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (What is the internet backbone and how it works)
[#]: via: (https://www.networkworld.com/article/3532318/what-is-the-internet-backbone-and-how-it-works.html)
[#]: author: (Tim Greene https://www.networkworld.com/author/Tim-Greene/)
What is the internet backbone and how it works
======
Tier 1 internet service providers (ISP) mesh their high-speed fiber-optic networks together to create the internet backbone, which moves traffic efficiently among geographic regions.
[Gerd Altmann][1] [(CC0)][2]
The internet generates massive amounts of computer-to-computer traffic, and insuring all that traffic can be delivered anywhere in the world requires the aggregation of a vast array of high-speed networks collectively known as the internet backbone, but how does that work?
### What is the internet backbone?
Like any other network, the internet consists of access links that move traffic to high-bandwidth routers that move traffic from its source over the best available path toward its destination. This core is made up of individual high-speed fiber-optic networks that peer with each other to create the internet backbone.
The individual core networks are privately owned by Tier 1 internet service providers (ISP), giant carriers whose networks are tied together. These providers include AT&amp;T, CenturyLink, Cogent Communications, Deutsche Telekom, Global Telecom and Technology (GTT), NTT Communications, Sprint, Tata Communications, Telecom Italia Sparkle, Telia Carrier, and Verizon.
[[Get regularly scheduled insights by signing up for Network World newsletters.]][3]
By joining these long-haul networks together, Tier 1 ISPs create a single worldwide network that gives all of them access to the entire internet routing table so they can efficiently deliver traffic to its destination through a hierarchy of progressively more local ISPs.
In addition to being physically connected, these backbone providers are held together by a shared network protocol, TCP/IP. They are actually two protocols, transport control protocol and internet protocol that set up connections between computers, insuring that the connections are reliable and formating messages into packets.
### Internet exchange points (IXP) tie the backbone together
Backbone ISPs connect their networks at peering points, neutrally owned locations with high-speed switches and routers that move traffic among the peers. These are often owned by third parties, sometimes non-profits, that facilitate unifying the backbone.
Participating Tier 1 ISPs help fund the IXPs, but dont charge each other for transporting traffic from the other Tier 1 ISPs in a relationship known as settlement-free peering. Such agreements eliminate potential financial disputes that might have the result of slowing down internet performance.
[][4]
### How fast is the backbone?
The internet backbone is made up of the fastest routers, which can deliver 100Gbps trunk speeds. These routers are made by vendors including Cisco, Extreme, Huawei, Juniper, and Nokia, and use the border gateway protocol (BGP) to route traffic among themselves.
### How traffic gets on the backbone
Below the Tier 1 ISPs are smaller Tier 2 and Tier 3 ISPs.
Tier 3 providers provide businesses and consumers with access to the internet. These providers have no access of their own to the internet backbone, so on their own would not be able to connect their customers to all of the billions of internet-attached computers.
Buying access to Tier 1 providers is expensive. So often Tier 3 ISPs contract with Tier 2 (regional) ISPs that have their own networks that can deliver traffic to a limited geographic area but not to all internet-attached devices.
In order to do that, Tier 2 ISPs contract with Tier 1 ISPs for access to the global backbone, and in that way make the entire internet accesssible to their customers.
This arrangment makes it possible for traffic from a computer on one side of the world to connect to one on the other side. That traffic goes from a source computer to a Tier 3 ISP that routes it to a Tier 2 ISP that routes it to a Tier 1 backbone provider that routes it to the appropriate Tier 2 ISP that routes it to a Tier 3 access provider that delivers it to the destination computer.
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/3532318/what-is-the-internet-backbone-and-how-it-works.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://pixabay.com/en/social-media-digitization-faces-3271592/
[2]: https://creativecommons.org/publicdomain/zero/1.0/
[3]: https://www.networkworld.com/newsletters/signup.html
[4]: 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)
[5]: https://www.facebook.com/NetworkWorld/
[6]: https://www.linkedin.com/company/network-world

View File

@ -1,5 +1,5 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: translator: (MFGJT)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )

View File

@ -1,59 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Prioritizing simplicity in your Python code)
[#]: via: (https://opensource.com/article/19/12/zen-python-simplicity-complexity)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
Prioritizing simplicity in your Python code
======
This is the second part of a special series about the Zen of Python
focusing on the third and fourth principles: simplicity and complexity.
![Person reading a book and digital copy][1]
> "Il semble que la perfection soit atteinte non quand il n'y a plus rien à ajouter, mais quand il n'y plus rien à retrancher."
>
> "It seems that perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away."
> —Antoine de Saint-Exupéry, _[Terre des Hommes][2]_, 1939
A common concern in programming is the struggle with complexity. It is easy for any programmer to make a program so complicated no expert can debug it or modify it. The [Zen of Python][3] would not be complete if it did not touch on this.
### Simple is better than complex.
When it is possible to choose at all, choose the simple solution. Python is rarely in the business of _disallowing_ things. This means it is possible, and even straightforward, to design baroque programs to solve straightforward problems.
It is worthwhile to remember at each point that simplicity is one of the easiest things to lose and the hardest to regain when writing code.
This can mean choosing to write something as a function, rather than introducing an extraneous class. This can mean avoiding a robust third-party library in favor of writing a two-line function that is perfect for the immediate use-case. Most often, it means avoiding predicting the future in favor of solving the problem at hand.
It is much easier to change the program later, especially if simplicity and beauty were among its guiding principles than to load the code down with all possible future variations.
### Complex is better than complicated.
This is possibly the most misunderstood principle because understanding the precise meanings of the words is crucial. Something is _complex_ when it is composed of multiple parts. Something is _complicated_ when it has a lot of different, often hard to predict, behaviors.
When solving a hard problem, it is often the case that no simple solution will do. In that case, the most Pythonic strategy is to go "bottom-up." Build simple tools and combine them to solve the problem.
This is where techniques like _object composition_ shine. Instead of having a complicated inheritance hierarchy, have objects that forward some method calls to a separate object. Each of those can be tested and developed separately and then finally put together.
Another example of "building up" is using [singledispatch][4], so that instead of one complicated object, we have a simple, mostly behavior-less object and separate behaviors.
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/12/zen-python-simplicity-complexity
作者:[Moshe Zadka][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/moshez
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/read_book_guide_tutorial_teacher_student_apaper.png?itok=_GOufk6N (Person reading a book and digital copy)
[2]: https://en.wikipedia.org/wiki/Wind,_Sand_and_Stars
[3]: https://www.python.org/dev/peps/pep-0020/
[4]: https://opensource.com/article/19/5/python-singledispatch

View File

@ -1,67 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (6 Raspberry Pi tutorials to try out)
[#]: via: (https://opensource.com/article/20/3/raspberry-pi-tutorials)
[#]: author: (Lauren Pritchett https://opensource.com/users/lauren-pritchett)
6 Raspberry Pi tutorials to try out
======
Each of these Raspberry Pi projects is designed to make your life easier
and more productive.
![Cartoon graphic of Raspberry Pi board][1]
There's nothing like the thrill of experiencing the result of your Raspberry Pi creation. After hours of coding, testing, and building with your bare hands, your project starts to finally take shape and you cant help but yell "woohoo!." Im fascinated by the possibilities of what the Raspberry Pi can bring to daily life. Whether you are looking to learn something new, try a productivity hack, or just have fun, there is a Raspberry Pi project for you in this round-up. 
### Set up a VPN server
This [tutorial][2] teaches you how to use the Raspberry Pi to add a layer of network security. Not only does this project have practical advantages, but it also sets you up for lots of fun to be had. The extra security will give you peace of mind to play around with other projects, like the ones listed below.
### Create an object-tracking camera
The Raspberry Pi is appealing because it offers a low barrier of entry to learn about new technologies like machine learning. This [step-by-step guide][3] gives thorough instructions on how to build a camera that pans and tilts in order to track movement with TensorFlow and your Raspberry Pi. 
### Display your favorite memories using a photo slideshow
Have you ever asked yourself: "What should I do with all of these digital photos?." If you are like me, then the answer is **yes**. I am definitely known as the picture-taker in my circle of friends and family. Thats why I love this Raspberry Pi project. In [this tutorial][4], youll learn how to set up a photo slideshow so you can display your favorite memories in your home with ease. No printer necessary!
### Play retro video games
If you feel nostalgic about retro gaming systems, youll want to try [this tutorial][5]. Learn what kind of devices work for running an Amiga emulator including the Raspberry Pi. After going through the set-up instructions, youll be playing your favorite Amiga games on your Raspberry Pi.
### Build a clock for your entertainment center
Home entertainment centers have evolved so much in the last decade. My family relies solely on streaming services for watching shows and movies. I love this because I can control my TV from my mobile device or voice assistant. However, theres a level of convenience thats missing when you no longer can glance at a clock! Follow [these quick steps][6] to build your own clock display from scratching using your Raspberry Pi.
### Scale your homebrewed beer operation
In [this tutorial][7], a seasoned homebrewer shares his experience with setting up an electric beer-brewing system. This project requires more of an investment in hardware and parts upfront, but the resulting efficiency and consistency make it all worth it. Cheers to that!
If you are a Raspberry Pi newb like me, then I recommend checking out our downloadable Raspberry Pi guides. Our [one-page cheat sheet][8] offers step-by-step instructions for how to get started. For more tips and tutorials, our [comprehensive guide][9] covers topics like choosing a Raspberry Pi, keeping it updated, contributing to the community and everything in between. 
Which Raspberry Pi project will you try? Let us know in the comments.
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/raspberry-pi-tutorials
作者:[Lauren Pritchett][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/lauren-pritchett
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/raspberrypi_cartoon.png?itok=m3TcBONJ (Cartoon graphic of Raspberry Pi board)
[2]: https://opensource.com/article/19/6/raspberry-pi-vpn-server
[3]: https://opensource.com/article/20/1/object-tracking-camera-raspberry-pi
[4]: https://opensource.com/article/19/2/wifi-picture-frame-raspberry-pi
[5]: https://opensource.com/article/19/3/amiga-raspberry-pi
[6]: https://opensource.com/article/17/7/raspberry-pi-clock
[7]: https://opensource.com/article/17/7/brewing-beer-python-and-raspberry-pi
[8]: https://opensource.com/downloads/getting-started-raspberry-pi-cheat-sheet
[9]: https://opensource.com/downloads/raspberry-pi-guide

View File

@ -1,155 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to install pip to manage PyPI packages easily)
[#]: via: (https://opensource.com/article/20/3/pip-linux-mac-windows)
[#]: author: (Vijay Singh Khatri https://opensource.com/users/vijaytechnicalauthor)
How to install pip to manage PyPI packages easily
======
Install the pip package manager on older versions of Python on Linux,
Mac, and Windows that don't come preinstalled with pip.
![Person typing on a 1980's computer][1]
Python is a powerful and popular programming language with many packages that are useful for general programming, data science, and many other things. These packages are not included with the Python installation, so you have to download, install, and manage them separately. All of these packages (libraries and frameworks) are stored in a central repository called the Python Package Index, or [PyPI][2] for short. This is where pip (short for Preferred Installer Program), Python's package manager, comes into the picture.
Installing Python pip on your system allows you to manage PyPI packages easily. Many of these packages can be installed just by typing **python -m pip install &lt;package-name&gt;** into a terminal or command-line.
Newer versions of Python 3 (3.4 and higher) and Python 2 (2.7.9 and higher) come preloaded with pip. Older versions of Python didn't include pip, but it can be installed retroactively.
In this article, I explain how to install pip on Linux, Mac, and Windows computers. You can also check the [pip.pypa][3] documentation for more information.
### Make sure Python is installed
If you don't already have Python installed on your system, do that first; otherwise, the pip installer won't understand any commands. To check whether you have Python, enter **python** in your command line, Bash, or terminal window and see what happens. If the command is not recognized, then you need to [download Python][4]. If you have Python installed, you will see a lot of commands and other stuff that will indicate you can install pip.
### Install Python pip on Linux
The command you use to install pip on Linux depends on the distribution you use.
On Fedora, RHEL, and CentOS:
```
`$ sudo dnf install python3`
```
For Debian or Ubuntu, use the Apt package:
```
`$ sudo apt install python3-pip`
```
Other distributions may have their own package manager. For example, Arch Linux uses pacman:
```
`$ sudo pacman -S python-pip`
```
To find out whether pip is installed properly, check the version using the **\--version** option.
That's all you need. You can skip down to the [using pip][5] section of this article.
### Install Python pip on Mac
MacOS comes with Python installed by default, but the version provided by Apple is almost always outdated, even right an OS release. If you're working with Python, you should [use a custom install of Python 3][6].
To install Python 3 on a Mac, use [homebrew][7]:
```
`$ brew update && brew upgrade python`
```
Because you've installed a recent version of Python3, pip is also installed. ****You can verify it with:
```
`$ python3 -m pip --version`
```
That's all you need. You can skip down to the [using pip][5] section of this article.
### Install Python pip on Windows
To install pip, you must have Windows 8 or 10. The screenshots below are from Windows 10 (but the same commands work for Windows 8).
Once you confirm you have [Python installed][8].
If you want the same luxuries as Linux users have with a package manager, you can use the [Chocolatey][9] package manager for Windows. This provides easy access to Python but also easy updates. You can use it in the open source PowerShell application to make amazing things happen in just a few commands.
```
`PS> choco install python`
```
That's it! You can now use pip to install any package you need.
### Using Python pip
Python pip works exactly the same way on each platform: Linux, BSD, Windows, Mac, and so on.
To install the imaginary library **foo**, use:
```
`python3 -m pip install foo --user`
```
To uninstall it:
```
`python3 -m pip uninstall foo`
```
To search for a package:
```
`python3 -m pip search foo`
```
To upgrade to a new version of pip:
```
`$ sudo pip install --upgrade pip`
```
On Windows, omit the **sudo** command (Windows has its own method of privilege management, so you may need to [create an exception to your execution policy][10]).
```
`python -m pip install --upgrade pip`
```
I hope you tried the installation methods described in this article and that they helped you. Please share your experience in the comments.
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/pip-linux-mac-windows
作者:[Vijay Singh Khatri][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/vijaytechnicalauthor
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/1980s-computer-yearbook.png?itok=eGOYEKK- (Person typing on a 1980's computer)
[2]: https://pypi.org/
[3]: https://pip.pypa.io/en/stable/installing/
[4]: https://www.python.org/downloads/
[5]: tmp.u1JOYd3gs9#usage
[6]: https://opensource.com/article/19/5/python-3-default-mac
[7]: https://brew.sh
[8]: https://opensource.com/article/19/8/how-install-python-windows
[9]: https://opensource.com/article/20/3/chocolatey
[10]: https://opensource.com/article/20/3/chocolatey#admin

View File

@ -1,5 +1,5 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )

View File

@ -0,0 +1,113 @@
[#]: collector: (lujun9972)
[#]: translator: (HankChow)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to write effective documentation for your open source project)
[#]: via: (https://opensource.com/article/20/3/documentation)
[#]: author: (Kevin Xu https://opensource.com/users/kevin-xu)
How to write effective documentation for your open source project
======
Documentation quality can make the difference in people trying your
project or passing it by.
![A pink typewriter][1]
Unfortunately, good code won't speak for itself. Even the most elegantly designed and well-written codebase that solves the most pressing problem in the world won't just get adopted on its own. You, the open source creator, need to speak for your code and breathe life into your creation. That's where technical writing and documentation come in.
A project's documentation gets the most amount of traffic, by far. It's the place where people decide whether to continue learning about your project or move on. Thus, spending time and energy on documentation and technical writing, focusing on the most important section, "Getting Started," will do wonders for your project's traction.
Writing may feel uncomfortable, even daunting, to many of you. As engineers, we are trained more to write code than to write _about_ code. Many people also speak English as a second or even third language and may feel insecure or intimidated about writing in English. (I learned English as a second language, and my mother tongue is Mandarin Chinese, so I feel your pain.)
But we can't get around the reality that, if you want your project to have a broad, global reach, English is the language you must use. Don't fear. I wrote this post with those challenges in mind. You don't need to be the next Shakespeare to find the advice here useful.
### Five actionable writing tips
Here are five actionable writing tips you can apply today. They may seem painfully simple and obvious, yet they are ignored over and over again in technical writing.
1. **Use** [**active voice**][2]**:** Active voice: "You can change these configurations by…" vs. passive voice: "These configurations can be changed by…"
2. **Use simple, short sentences:** While not open source, [Hemingway App][3] and [Grammarly][4] are both helpful tools.
3. **Format for easy reading:** Use headings, bullet points, and links to break up information into chunks instead of long explanatory paragraphs.
4. **Keep it visual:** Use tables and diagrams, not sentences, to represent information with multiple dimensions.
5. **Mind your spelling and grammar:** Always, always, always spell check for typos and grammar check for polish.
By applying these tips consistently in your writing and editing workflow, you achieve two big goals: efficient communication and building trust.
* **Efficient communication:** Engineers don't want to read long-winded, meandering paragraphs in documentation (they have novels for that). They want to get technical information or instructions (when it's a guide) as efficiently as possible. Thus, your writing needs to be lean and useful. (That being said, it's fine to apply some humor, emojis, and "fluff" here and there to give your project some personality and make it more memorable. How exactly you do that will depend on _your_ personality.)
* **Building trust:** The most valuable currency you must accrue, especially in the early days of building your project, is trust. Trust comes not only from your code quality but also from the quality of writing that talks about your code. Thus, please apply the same polish to your writing that you would to your code. This is the main reason for point 5 above (on spelling and grammar checks).
### Start with Getting Started documentation
With these fundamental techniques baked into your writing, the section you should spend the most time on in your documentation is the Getting Started section. This is, by far, the most important section and a classic example of the "[80/20 rule][5]" in action. Most of the web traffic to your project lands on your documentation, and most of _that_ lands on Getting Started. If it is well-constructed, you will get a new user right away. If not, the visitor will bounce and likely never come back.
How do you construct a good Getting Started section? I propose this three-step process:
1. **Make it a task:** An effective Getting Started guide should be task-oriented—a discrete mini-project that a developer can accomplish. It should _not_ contain too much information about the architectural design, core concept, and other higher-level information. A single, visual architectural overview is fine, but don't devote multiple paragraphs to how and why your project is the best-designed solution. That information belongs somewhere else (more on that below). Instead, the Getting Started section should mostly be a list of steps and commands to… well, get your project started!
2. **Can be finished in less than 30 minutes:** The core takeaway here is that the time to completion should be as low as possible; 30 minutes is the upper bound. This time limit also assumes the user has relatively little context about your project. This is important to keep in mind. Most people who bother to go through your Getting Started guide are members of a technical audience with a vague understanding of your project but not much more than that. They are there to try something out before they decide to spend more time digging deeper. "Time to completion" is a metric you should measure to continuously improve your Getting Started guide.
3. **Do something meaningful:** What "meaningful" means depends on the open source project. It is important to think hard about what that is, tightly define it into a task, and allow a developer who completes your Getting Started guide to achieve that meaningful task. This meaningful task must speak directly to your project's value; otherwise, it will leave developers feeling like they just wasted their time.
For inspiration: If you are a distributed database project, perhaps "meaningful" means the whole cluster remains available with no downtime after you kill some nodes. If you are a data analytics or business intelligence tool, perhaps "meaningful" means quickly generating a dashboard with different visualizations after loading some data. Whatever "meaningful" means to your project, it should be achievable quickly and locally on a laptop.
A good example is [Linkerd's Getting Started][6]. Linkerd is an open source service mesh for Kubernetes. I'm a novice in Kubernetes and even less familiar with service mesh. Yet, I completed Linkerd's Getting Started guide on my laptop without much hassle, and the experience gave me a taste of what operating a service mesh is all about.
The three-step process above could be a helpful framework for designing a highly efficient Getting Started section in a measurable way. It is also related to the time-to-value metric when it comes to [productizing your open source project][7].
### Other core components
Besides carefully calibrating and optimizing your Getting Started, there are five other top-level components that are necessary to build full-fledged documentation: architectural design, in-production usage guide, use cases, references, and roadmap.
* **Architectural design:** This is a deep-dive into your project's architecture and the rationales behind your design decisions, full of the details that you strategically glossed over in your Getting Started guide. This section is a big part of your overall [product marketing plan][8]. This section, usually filled with visuals and drawings, is meant to turn a casual hobbyist into an expert enthusiast who is interested in investing time in your project for the long term.
* **In-production usage guide:** There is a world of difference between trying something out on a laptop and deploying it in production. Guiding a user who wants to use your project more seriously is an important next step. Demonstrating in-production operational knowledge is also how you attract your initial business customers who may like the promise of the technology but don't know or don't feel confident about using it in a production environment.
* **Use cases:** The value of social proof is obvious, so listing your in-production adopters is important. The key here is to make sure this information is easy to find. It will likely be the second most popular link after Getting Started.
* **References:** This section explains the project in detail and allows the user to examine and understand it under a microscope. It also functions as a dictionary where people look up information when needed. Some open source creators spend an inordinate amount of time spelling out every nuance and edge case of their project here. The motivation is understandable but unnecessary at the outset when your time is limited. It's more effective to reach a balance between detail and ways to get help: links to your community forum, Stack Overflow tag, or a separate FAQ page would do.
* **Roadmap:** Laying out your future vision and plan with a rough timeline will keep users interested and incentivized for the long-term. Your project may not be perfect now, but you have a plan to perfect it. The Roadmap section is also a great place to get your community involved to build a strong ecosystem, so make sure you have a link that tells people how to voice their thoughts and opinions regarding the roadmap. (I'll write about community-building specifics in the future.)
You may not have all these components fully fleshed out yet, and some parts may materialize later than others, especially the use cases. However, be intentional about building these out over time. Addressing these five elements is the critical next step to your users' journey into your project, assuming they had a good experience with Getting Started.
One last note: include a clear one-sentence statement on what license you are using (probably in Getting Started, README, or somewhere else highly visible). This small touch will make vetting your project for adoption from the end user's side much more efficient.
### Spend 20% of your time writing
Generally, I recommend spending 1020% of your time writing. Putting it in context: If you are working on your project full time, it's about half a day to one full day per week.
The more nuanced point here is you should work writing into your normal workflow, so it becomes a routine, not an isolated chore. Making incremental progress over time, rather than doing all the writing in one giant sitting, is what will help your project reach that ultimate goal: traction and trust.
* * *
_Special thanks to [Luc Perkins][9], developer advocate at the Cloud Native Computing Foundation, for his invaluable input._
_This article originally appeared on_ _[COSS Media][10]_ _and is republished with permission._
Nigel Babu offers 10 tips for taking your project's documentation to the next level.
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/documentation
作者:[Kevin Xu][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/kevin-xu
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc-docdish-typewriter-pink.png?itok=OXJBtyYf (A pink typewriter)
[2]: https://www.grammar-monster.com/glossary/active_voice.htm
[3]: http://www.hemingwayapp.com/
[4]: https://www.grammarly.com/
[5]: https://en.wikipedia.org/wiki/Pareto_principle
[6]: https://linkerd.io/2/getting-started/
[7]: https://opensource.com/article/19/11/products-open-source-projects
[8]: https://opensource.com/article/20/2/product-marketing-open-source-project
[9]: https://twitter.com/lucperkins
[10]: https://coss.media/open-source-documentation-technical-writing-101/

View File

@ -0,0 +1,349 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Make SSL certs easy with k3s)
[#]: via: (https://opensource.com/article/20/3/ssl-letsencrypt-k3s)
[#]: author: (Lee Carpenter https://opensource.com/users/carpie)
Make SSL certs easy with k3s
======
How to encrypt your website with k3s and Letsencrypt on a Raspberry Pi.
![Files in a folder][1]
In a [previous article][2], we deployed a couple of simple websites on our k3s cluster. There were non-encrypted sites. Now that's fine, and they work, but non-encrypted is very last century! These days most websites are encrypted. In this article, we are going to install [cert-manager][3] and use it to deploy TLS encrypted sites on our cluster. Not only will the sites be encrypted, but they will be using valid public certificates that are automatically provisioned and automatically renewed from [Let's][4] [Encrypt][4]! Let's get started!
### Materials needed
To follow along with the article, you will need [the k3s Raspberry Pi cluster][5] we built in a previous article. Also, you will need a public static IP address and a domain name that you own and can create DNS records for. If you have a dynamic DNS provider that provides a domain name for you, that may work as well. However, in this article, we will be using a static IP and [CloudFlare][6] to manually create DNS "A" records.
As we create configuration files in this article, if you don't want to type them out, they are all available for download [here][7].
### Why are we using cert-manager?
Traefik (which comes pre-bundled with k3s) actually has Let's Encrypt support built-in, so you may be wondering why we are installing a third-party package to do the same thing. At the time of this writing, Traefik's Let's Encrypt support retrieves certificates and stores them in files. Cert-manager retrieves certificates and stores them in Kubernetes **secrets**. **Secrets** can be simply referenced by name and, therefore, easier to use, in my opinion. That is the main reason we are going to use cert-manager in this article.
### Installing cert-manager
Mostly we will simply follow the cert-manager [documentation][8] for installing on Kubernetes. Since we are working with an ARM architecture, however, we will be making slight changes, so we will go through the procedure here.
The first step is to create the cert-manager namespace. The namespace helps keep cert-manager's pods out of our default namespace, so we do not have to see them when we do things like **kubectl get pods** with our own pods. Creating the namespace is simple:
```
kubectl create namespace cert-manager
```
The installation instructions have you download the cert-manager YAML configuration file and apply it to your cluster all in one step. We need to break that into two steps in order to modify the file for our ARM-based Pis. We will download the file and do the conversion in one step:
```
curl -sL \
<https://github.com/jetstack/cert-manager/releases/download/v0.11.0/cert-manager.yaml> |\
sed -r 's/(image:.*):(v.*)$/\1-arm:\2/g' &gt; cert-manager-arm.yaml
```
This downloads the configuration file and updates all the contained docker images to be the ARM versions. To check what it did:
```
$ grep image: cert-manager-arm.yaml
          image: "quay.io/jetstack/cert-manager-cainjector-arm:v0.11.0"
          image: "quay.io/jetstack/cert-manager-controller-arm:v0.11.0"
          image: "quay.io/jetstack/cert-manager-webhook-arm:v0.11.0"
```
As we can see, the three images now have **-arm** added to the image name. Now that we have the correct file, we simply apply it to our cluster:
```
`kubectl apply -f cert-manager-arm.yaml`
```
This will install all of cert-manager. We can know when the installation finished by checking with **kubectl --namespace cert-manager get pods** until all pods are in the **Running** state.
That is actually it for cert-manager installation!
### A quick overview of Let's Encrypt
The nice thing about Let's Encrypt is that they provide us with publicly validated TLS certificates for free! This means that we can have a completely valid TLS encrypted website that anyone can visit for our home or hobby things that do not make money to support themselves without paying out of our own pocket for TLS certificates! Also, when using Let's Encrypt certificates with cert-manager, the entire process of procuring the certificates is automated. Certificate renewal is also automated!
But how does this work? Here is a simplified explanation of the process. We (or cert-manager on our behalf) issue a request for a certificate to Let's Encrypt for a domain name that we own. Let's Encrypt verifies that we own that domain by using an ACME DNS or HTTP validation mechanism. If the verification is successful, Let's Encrypt provides us with certificates, which cert-manager installs in our website (or other TLS encrypted endpoint). These certificates are good for 90 days before the process needs to be repeated. Cert-manager, however, will automatically keep the certificates up-to-date for us.
In this article, we will use the HTTP validation method as it is simpler to set up and works for the majority of use cases. Here is the basic process that will happen behind the scenes. Cert-manager will issue a certificate request to Let's Encrypt. Let's Encrypt will issue an ownership verification challenge in response. The challenge will be to put an HTTP resource at a specific URL under the domain name that the certificate is being requested for. The theory is that if we can put that resource at that URL and Let's Encrypt can retrieve it remotely, then we must really be the owners of the domain. Otherwise, either we could not have placed the resource in the correct place, or we could not have manipulated DNS to allow Let's Encrypt to get to it. In this case, cert-manager puts the resource in the right place and automatically creates a temporary **Ingress** record that will route traffic to the correct place. If Let's Encrypt can read the challenge and it is correct, it will issue the certificates back to cert-manager. Cert-manager will then store the certificates as secrets, and our website (or whatever) will use those certificates for securing our traffic with TLS.
### Preparing our network for the challenges
I'm assuming that you are wanting to set this up on your home network and have a router/access point that is connected in some fashion to the broader internet. If that is not the case, the following process may not be what you need.
To make the challenge process work, we need the domain that we are requesting a certificate for to route to our k3s cluster on port 80. To do that, we need to tell the world's DNS system where that is. So, we'll need to map the domain name to our public IP address. If you do not know what your public IP address is, you can go to somewhere like [WhatsMyIP][9], and it will tell you. Next, we need to enter a DNS "A" record that maps our domain name to our public IP address. For this to work reliably, you need a static public IP address, or you may be able to use a dynamic DNS provider. Some dynamic DNS providers will issue you a domain name that you may be able to use with these instructions. I have not tried this, so I cannot say for sure it works with all providers.
For this article, we are going to assume a static public IP and use CloudFlare to set the DNS "A" records. You may use your own DNS provider if you wish. The important part is that you are able to set the "A" records.
For this rest of the article, I am going to use **[k3s.carpie.net][10]** as the example domain since this is a domain I own. You would obviously replace that with whatever domain you own.
Ok, for the sake of example, assume our public IP address is 198.51.100.42. We would go to our DNS provider's DNS record section and add a record of type "A," with a name of **[k3s.carpie.net][10]** (CloudFlare assumes the domain, so there we could just enter **k3s**) and enter 198.51.100.42 as the IPv4 address.
![][11]
Be aware that sometimes it takes a while for the DNS updates to propagate. It may be several hours before you can resolve the name. It is imperative that the name resolves before moving on. Otherwise, all our certificate requests will fail.
We can check that the name resolves using the **dig** command:
```
$ dig +short k3s.carpie.net
198.51.100.42
```
Keep running the above command until an IP is returned. Just a note about CloudFlare: ClouldFlare provides a service that hides your actual IP by proxying the traffic. In this case, we'll get back a CloudFlare IP instead of our IP. This should work fine for our purposes.
The final step for network configuration is configuring our router to route incoming traffic on ports 80 and 443 to our k3s cluster. Sadly, router configuration screens vary widely, so I can't tell you exactly what yours will look like. Most of the time, the admin page we need is under "Port forwarding" or something similar. I have even seen it listed under "Gaming" (which is apparently what port forwarding is mostly used for)! Let's see what the configuration looks like for my router.
![][12]
If you had my setup, you would go to 192.168.0.1 to log in to the router administration application. For this router, it's under **NAT / QoS** -&gt; **Port Forwarding**. Here we set port **80**, **TCP** protocol to forward to 192.168.0.50 (the IP of **kmaster** our master node) port **80**. We also set port **443** to map to **kmaster** as well. This is technically not needed for the challenges, but at the end of the article, we are going to deploy a TLS enabled website, and we will need **443** mapped to get to it. So it's convenient to go ahead and map it now. We save and apply the changes, and we should be good to go!
### Configuring cert-manager to use Lets Encrypt (staging)
Now we need to configure cert-manager to issue certificates through Let's Encrypt. Let's Encrypt provides a staging (e.g., test) environment for us to sort out our configurations on. It is much more tolerant of mistakes and frequency of requests. If we bumble around on the production environment, we'll very quickly find ourselves temporarily banned! As such, we'll manually test requests using the staging environment.
Create a file, **letsencrypt-issuer-staging.yaml** with the contents:
```
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
   # The ACME server URL
    server: <https://acme-staging-v02.api.letsencrypt.org/directory>
    # Email address used for ACME registration
    email: &lt;your_email&gt;@example.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-staging
    # Enable the HTTP-01 challenge provider
    solvers:
    - http01:
        ingress:
          class: traefik
```
Make sure to update the email address to your address. This is how Let's Encrypt contacts us if something is wrong or we are doing bad things!
Now we create the issuer with:
```
`kubectl apply -f letsencrypt-issuer-staging.yaml`
```
We can check that the issuer was created successfully with:
```
`kubectl get clusterissuers`
```
**Clusterissuers** is a new Kubernetes resource type created by cert-manager.
Let's now request a test certificate manually. For our sites, we will not need to do this; we are just testing out the process to make sure our configuration is correct.
Create a certificate request file, **le-test-certificate.yaml** with the contents:
```
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
  name: k3s-carpie-net
  namespace: default
spec:
  secretName: k3s-carpie-net-tls
  issuerRef:
    name: letsencrypt-staging
    kind: ClusterIssuer
  commonName: k3s.carpie.net
  dnsNames:
 - k3s.carpie.net
```
This record just says we want to request a certificate for the domain **[k3s.carpie.net][10]**, using a **ClusterIssuer** named **letsencrypt-staging** (which we created in the previous step) and store the certificate files in the Kubernetes secret named **k3s-carpie-net-tls**.
Apply it like normal:
```
`kubectl apply -f le-test-certificate.yaml`
```
We can check the status with:
```
`kubectl get certificates`
```
If we see something like:
```
NAME                    READY   SECRET                  AGE
k3s-carpie-net          True    k3s-carpie-net-tls      30s
```
We are good to go! (The key here is **READY** being **True**).
### Troubleshooting certificate request issues
That's the happy path. If **READY** is **False**, we could give it some time and check the status again in case it takes a bit. If it stays **False,** then we have an issue we need to troubleshoot. At this point, we can walk the chain of Kubernetes resources until we find a status message that tells us the problem.
Let's say that we did the request above, and **READY** was **False**. We start the troubleshooting with:
```
`kubectl describe certificates k3s-carpie-net`
```
This will return a lot of information. Usually, the helpful things are in the **Events:** section, which is typically at the bottom. Let's say the last event was **Created new CertificateRequest resource "k3s-carpie-net-1256631848**. We would then describe that request:
```
`kubectl describe certificaterequest k3s-carpie-net-1256631848`
```
Now let's say the last event there was **Waiting on certificate issuance from order default/k3s-carpie-net-1256631848-2342473830**.
Ok, we can describe the order:
```
`kubectl describe orders default/k3s-carpie-net-1256631848-2342473830`
```
Let's say that has an event that says **Created Challenge resource "k3s-carpie-net-1256631848-2342473830-1892150396" for domain "[k3s.carpie.net][10]"**. Let's describe the challenge:
```
`kubectl describe challenges k3s-carpie-net-1256631848-2342473830-1892150396`
```
The last event returned from here is **Presented challenge using http-01 challenge mechanism**. That looks ok, so we scan up the describe output and see a message **Waiting for http-01 challenge propagation: failed to perform self check GET request … no such host**. Finally! We have found the problem! In this case, **no such host** means that the DNS lookup failed, so then we would go back and manually check our DNS settings and that our domain's DNS resolves correctly for us and make any changes needed.
### Clean up our test certificates
We actually want a real certificate for the domain name we used, so let's go ahead and clean up both the certificate and the secret we just created:
```
kubectl delete certificates k3s-carpie-net
kubectl delete secrets k3s-carpie-net-tls
```
### Configuring cert-manager to use Let's Encrypt (production)
Now that we have test certificates working, it's time to move up to production. Just like we configured cert-manager for Let's Encrypt staging environment, we need to do the same for production now. Create a file (you can copy and modify staging if desired) named **letsencrypt-issuer-production.yaml** with the contents:
```
apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
 # The ACME server URL
  server: <https://acme-v02.api.letsencrypt.org/directory>
  # Email address used for ACME registration
  email: &lt;your_email&gt;@example.com
  # Name of a secret used to store the ACME account private key
  privateKeySecretRef:
    name: letsencrypt-prod
  # Enable the HTTP-01 challenge provider
  solvers:
  - http01:
      ingress:
        class: traefik
```
(If you are copying from the staging, the only that changes is the **server:** URL. Don't forget the email)!
Apply with:
```
`kubectl apply -f letsencrypt-issuer-production.yaml`
```
### Request a certificate for our website
It's important to note that all the steps we have completed to this point are one time set up! For any additional requests in the future, we can start at this point in the instructions!
Let's deploy that same site we deployed in the [previous article][13]. (If you still have it around, you can just modify the YAML file. If not, you may want to recreate it and re-deploy it).
We just need to modify **mysite .yaml's** **Ingress** section to be:
```
\---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: mysite-nginx-ingress
  annotations:
    kubernetes.io/ingress.class: "traefik"
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  rules:
  - host: k3s.carpie.net
    http:
      paths:
      - path: /
        backend:
          serviceName: mysite-nginx-service
          servicePort: 80
  tls:
  - hosts:
   - k3s.carpie.net
    secretName: k3s-carpie-net-tls
```
Please note that just the **Ingress** section of **mysite.yaml** is shown above. The changes are the addition of the **annotation [cert-manager.io/cluster-issuer][14]: letsencrypt-prod**. This tells traefik which issuer to use when creating certificates. The only other addition is the **tls:** block. This tells traefik that we expect to have TLS on host **[k3s.carpie.net][10],** and we expect the TLS certificate files to be stored in the secret **k3s-carpie-net-tls**.
Please remember that we did not create these certificates! (Well, we created test certificates similarly named, but we deleted those.) Traefik will read this and go looking for the secret. When it does not find it, it sees the annotation saying we want to use **letsencrypt-prod** issuer to procure one. From there, it will make the request and install the certificate in the secret for us!
We're done! Let's try it out.
There it is in all its encrypted TLS beauty! Congratulations!
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/ssl-letsencrypt-k3s
作者:[Lee Carpenter][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/carpie
[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://carpie.net/articles/ingressing-with-k3s
[3]: https://cert-manager.io/
[4]: https://letsencrypt.org/
[5]: https://opensource.com/article/20/3/kubernetes-raspberry-pi-k3s
[6]: https://cloudflare.com/
[7]: https://gitlab.com/carpie/k3s_using_certmanager/-/archive/master/k3s_using_certmanager-master.zip
[8]: https://cert-manager.io/docs/installation/kubernetes/
[9]: https://whatsmyip.org/
[10]: http://k3s.carpie.net
[11]: https://opensource.com/sites/default/files/uploads/ep011_dns_example.png
[12]: https://opensource.com/sites/default/files/uploads/ep011_router.png
[13]: https://carpie.net/articles/ingressing-with-k3s#deploying-a-simple-website
[14]: http://cert-manager.io/cluster-issuer

View File

@ -0,0 +1,219 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (6 Best AUR (Arch User Repository) Helpers for Arch Linux)
[#]: via: (https://www.2daygeek.com/best-aur-arch-user-repository-helpers-arch-linux-manjaro/)
[#]: author: (Magesh Maruthamuthu https://www.2daygeek.com/author/magesh/)
6 Best AUR (Arch User Repository) Helpers for Arch Linux
======
Arch Linux is a Linux distribution largely based on the binary packages which targets x86-64 microprocessors computers.
Arch Linux uses rolling release model wherein the updates are frequently delivered over to applications.
It has package manager called **[pacman][1]** which allows to install, remove and update software packages.
Newbies are advised to step in after gaining hand on experience with other Linux flavors since Arch Linux is built for experienced users.
### What is AUR (Arch User Repository)?
[Arch User Repository][2] commonly referred as AUR is the community-based software repository for Arch users.
User compiled packages get into the Arch official repository, based on the package popularity honored by AUR Community.
### What is AUR Helper?
[AUR helper][3] is a wrapper that allows user to install the package from AUR Repository without manual intervention.
Usages such as searching of packages, resolving dependencies, retrieval and build AUR packages, Web content retrieval and submission of AUR packages are being automated.
**The 6 best AUR helpers are listed below:**
* Yay (Yet another Yogurt)
* Pakku
* Pacaur
* Pikaur
* Trizen
* Aura
### 1) Yay (Yet another Yogurt)
[Yay][4] is a best CLI based AUR helper for Arch Linux, written in GO Language. Yay is based on the design of yaourt, apacman and pacaur.
Best recommended for newbies. Similar to that of Pacman, with features matching many of the commands and options used in pacman.Allows users to find matching package providers during search and allow selection.
### How to Install yay
Run the following commands one by one to install yay on Arch Linux based systems.
```
$ sudo pacman -S git go base-devel
$ git clone https://aur.archlinux.org/yay.git
$ cd yay
$ makepkg -si
```
### How to Use yay
This use the same syntax like pacman, use the following command to install a package through yay.
```
$ yay -s arch-wiki-man
```
### 2) Pakku
[Pakku][5] can be treated as another Pacman however dwells in its initial stage. It is a wrapper which allows users to search or install packages from AUR.
It does a decent job of removing the dependencies and also allows to install packages by cloning the PKGBUILD.
### How to Install Pakku
To install pakku on Arch Linux based systems, run the following commands one by one.
```
$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/pakku.git
$ cd pakku
$ makepkg -si
```
### How to Use Pakku
It uses the same syntax as pacman, use the following command to install a package with pakku.
```
$ pakku -s dropbox
```
### 3) Pacaur
Another CLI based AUR helper that helps to reduce the user prompt interaction.
[Pacaur][6] is designed for advanced users who are inclined towards automation for repetitive tasks. Users are expected to be familiar with the AUR manual build process with makepkg and its configuration.
### How to Install Pacaur
To install pakku on Arch Linux based systems, run the following commands one by one.
```
$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/pacaur.git
$ cd pacaur
$ makepkg -si
```
### How to Use Pacaur
It uses the same syntax as pacman, use the following command to install a package with Pacaur.
```
$ pacaur -s spotify
```
### 4) Pikaur
[Pikaur][7] is a AUR helper with minimal dependencies and review PKGBUILDs all in once, next build them all without user interaction.
Pikaur will inform Pacman about the next step by mastering the pacman.
### How to Install Pikaur
To install pakku on Arch Linux based systems, run the following commands one by one.
```
$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/pikaur.git
$ cd pikaur
$ makepkg -fsri
```
### How to Use Pikaur
It uses the same syntax as pacman, use the following command to install a package with Pikaur.
```
$ pacaur -s spotify
```
### 5) Trizen
[Trizen][8] is a command line based lightweight wrapper for AUR, written in Perl. Speed oriented AUR helper which allows users to search, install packages and also permits to read AUR package comments.
Edit support for text files and the Input/output uses UTF-8 support. Built-in interaction with pacman.
### How to Install Trizen
To install pakku on Arch Linux based systems, run the following commands one by one.
```
$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/trizen.git
$ cd trizen
$ makepkg -si
```
### How to Use Trizen
It uses the same syntax as pacman, use the following command to install a package with Trizen.
```
$ pacaur -s google-chrome
```
### 6) Aura
[Aura][9] is a secure, multilingual package manager for Arch Linux and the AUR, written in Haskell. It supports many Pacman operations and sub-options which allows easy development and beautiful code.
It automates the process of installating packages from the Arch User Repositories.Users normally face difficulties in system upgrade when using Aura.
### How to Install Aura
To install pakku on Arch Linux based systems, run the following commands one by one.
```
$ sudo pacman -S git base-devel
$ git clone https://aur.archlinux.org/aura.git
$ cd aura
$ makepkg -si
```
### How to Use Aura
It uses the same syntax as pacman, use the following command to install a package with Aura.
```
$ pacaur -s android-sdk
```
### Conclusion:
Users can make their choice among the above 6 AUR helpers by analyzing through.
--------------------------------------------------------------------------------
via: https://www.2daygeek.com/best-aur-arch-user-repository-helpers-arch-linux-manjaro/
作者:[Magesh Maruthamuthu][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.2daygeek.com/author/magesh/
[b]: https://github.com/lujun9972
[1]: https://www.2daygeek.com/pacman-command-examples-manage-packages-arch-linux-system/
[2]: https://wiki.archlinux.org/index.php/Arch_User_Repository
[3]: https://wiki.archlinux.org/index.php/AUR_helpers
[4]: https://github.com/Jguer/yay
[5]: https://github.com/kitsunyan/pakku
[6]: https://github.com/E5ten/pacaur
[7]: https://github.com/actionless/pikaur
[8]: https://github.com/trizen/trizen
[9]: https://github.com/fosskers/aura

View File

@ -0,0 +1,179 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to Change MAC Address in Linux)
[#]: via: (https://itsfoss.com/change-mac-address-linux/)
[#]: author: (Community https://itsfoss.com/author/itsfoss/)
How to Change MAC Address in Linux
======
Before I show you how to change Mac address in Linux, lets first discuss why would you change it in the first place.
You may have several reasons. Maybe you dont want your actual [MAC address][1] (also called physical address) to be exposed on a public network? Other case can be that the network administrator might have blocked a particular MAC address in the router or firewall.
One practical benefit is that some public network (like Airport WiFi) allows free internet for a limited time. If you want to use the internet beyond that, spoofing your Mac address may trick the network in believing that its a new device. Its a famous meme as well.
![Airport WiFi Meme][2]
I am going to show the steps for changing MAC address (also called spoofing/faking MAC address).
### Changing MAC address in Linux
Lets go through each step:
#### Step 1: Find your MAC address and network interface
Lets find out some [details about the network card in Linux][3]. Use this command to get the network interface details:
```
ip link show
```
In the output, youll see several details along with the MAC address:
```
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
link/ether 94:c6:f8:a7:d7:30 brd ff:ff:ff:ff:ff:ff
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
link/ether 38:42:f8:8b:a7:68 brd ff:ff:ff:ff:ff:ff
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 42:02:07:8f:a7:38 brd ff:ff:ff:ff:ff:ff
```
As you can see, in this case, my network interface is called **enp0s31f6** and its MAC address is **38:42:f8:8b:a7:68**.
You may want to note it down on a secure place to revert to this original MAC address later on.
Now you may proceed to changing the MAC address.
Attention!
If you do this on a network interface which is currently in use, probably your network connection will be terminated. So either try this method on an additional card or be prepared to restart your network.
#### Method 1: Change MAC address using Macchanger
![][4]
[Macchanger][5] is simple utility to view, modify, and manipulate MAC addresses for your Network interface cards. It is available in almost all GNU/Linux operating systems and you can install is using the package installer of your distribution.
On Arch Linux or Manjaro:
```
sudo pacman -S macchanger
```
On Fedora, CentOS, RHEL:
```
sudo dnf install macchanger
```
On Debian, Ubuntu, Linux Mint, Kali Linux:
```
sudo apt install macchanger
```
**Important!** Youll be asked to specify whether macchanger should be set up to run automatically every time a network device is brought up or down. This gives a new MAC address whenever you attach an Ethernet cable or re-enable WiFi.
![Not a good idea to run it automatically][6]
I recommend not to run it automatically, unless you really need to change your MAC address every time. So, choose No (by pressing tab key) and hit Enter key to continue.
##### How to Use Macchanger to change MAC address
Do you remember your network interface name? You got it in the Step 1 earlier.
Now, to assign any random MAC address to this network card, use:
```
sudo macchanger -r enp0s31f6
```
After changing the MAC id, verify it using command:
```
ip addr
```
You will now see that MAC has been spoofed.
To change the MAC address to a specific value, specify any custom MAC address using command:
```
macchanger --mac=XX:XX:XX:XX:XX:XX
```
Where XX:XX:XX:XX:XX:XX is the new MAC id that you want to change.
Finally, to revert the MAC address to its original hardware value, run the following command:
```
macchanger -p enp0s31f6
```
However, you dont have to do this. Once you reboot the system, the changes will be automatically lost, and the actual MAC address will be restored again.
You can always check the man page for more details.
#### Method 2: Changing Mac address using iproute2 [intermediate knowledge]
I would recommend using Macchanger but if you dont want to use it, there is another way to change the MAC address in Linux.
First, turn off the network card using command:
```
sudo ip link set dev enp0s31f6 down
```
Next, set the new MAC using command:
```
sudo ip link set dev enp0s31f6 address XX:XX:XX:XX:XX:XX
```
Finally, turn the network back on with this command:
```
sudo ip link set dev enp0s31f6 up
```
Now, verify new MAC address:
```
ip link show enp0s31f6
```
Thats it. You have successfully changed the MAC address in true Linux style. Stay tuned with Its FOSS for more Linux tutorial and tips.
![][7]
### Dimitrios Savvopoulos
Dimitrios is an MSc Mechanical Engineer but a Linux enthusiast in heart. He is well settled in Solus OS but curiosity drives him to constantly test other distros. Challenge is part of his personality and his hobby is to compete from 5k to the marathon distance.
--------------------------------------------------------------------------------
via: https://itsfoss.com/change-mac-address-linux/
作者:[Community][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/itsfoss/
[b]: https://github.com/lujun9972
[1]: https://en.wikipedia.org/wiki/MAC_address
[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/airport_wifi_meme.jpg?ssl=1
[3]: https://itsfoss.com/find-network-adapter-ubuntu-linux/
[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/03/Change_MAC_Address_Linux.jpg?ssl=1
[5]: https://github.com/alobbs/macchanger
[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/03/configuring_mcchanger.jpg?ssl=1
[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/03/Dimitrios.jpg?ssl=1

View File

@ -0,0 +1,472 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to set up the Raspberry Pi Zero for travel)
[#]: via: (https://opensource.com/article/20/3/raspberry-pi-zero)
[#]: author: (Peter Garner https://opensource.com/users/petergarner)
How to set up the Raspberry Pi Zero for travel
======
You don't have to invest large amounts of money to build a relatively
powerful system that can be taken on the road and used productively.
![Airplane flying with a globe background][1]
For some time now, I've been a huge fan of the [Raspberry Pi][2] computer in all of its various forms. I have a number of them, and each has a server role to play. Most of the time, they work extremely well, and I'm safe in the knowledge that the small amount of power they consume is keeping the bills down.
If you've read my blog before, you may have read my account of how I [migrated my desktop computing][3] to a Pi 3. This worked well for quite a while, but I finally had to accept that editing large graphics and multimedia files was a problem, so I replaced it with an [Intel NUC][4]. My hankering for Pi experimentation was still there, though, and I decided to do a "what-if" exercise and see if it could survive on the road. And that's when I dragged my Pi Zero out of retirement from my spares box.
### Why travel with a Raspberry Pi
_"Why would I want to do this? Surely the trend is to travel with as powerful a device as possible?"_
Well, it's like this. Last year, my employer issued a decree that in order to conform to its security policy, we would no longer be able to check laptops in as luggage, and not long after, the US government decided to summarily ban carrying laptops in hand baggage to and from certain countries, y'know, for security. So how do we get around that one? The sensible option would be to not travel with a laptop and use a hot-desk style spare at the destination. After all, everything is in the cloud now, right? Or, you could carry your important, commercially sensitive data on a CD/DVD or memory stick, but only if it's encrypted to a standard and your employer's data handling policy allows that.
The problem is multi-faceted though: What if your role is such that you need to be able to fix software/systems on-the-go and you don't always have access to a "spare" laptop? On the occasions when I travel (by train), I have to lug my laptop with me, and it's a pain over the course of a day. Then there's the loss/theft/damage problem. Laptops can be easy targets, they can get left on trains, or you could be mugged. Or there's the "[evil maid][5]" scenario, in which someone interferes with your device without your knowledge. The list goes on.
So, here's what you can get with a Pi Zero portable computer:
* It's small enough to fit in hand baggage or your pocket.
* It's cheap enough at $8 to buy another if yours gets lost/stolen/damaged.
* The entire OS and data are held on a "disk" that is as small as a fingernail, is cheap, and is easily bought in a wide variety of retail outlets. If need be, you can create a new one from a borrowed card from a phone.
* A full development environment with the ability to work offline or online. It can also act as an SSH server so that more than one person can use it at once.
* Safe storage: If you are paranoid or traveling on certain airlines, you can remove the "disk" and store it in your wallet or on your person. If your computer is stolen in transit, go and buy another one off the shelf: you're already set up with the OS.
* Network-tolerant: Around the world, there are country-specific WiFi frequencies, and a simple text-file change enables you to be compliant within minutes.
* Keyboard independent: You can use a compliant Bluetooth keyboard, but when you need to do something more demanding, you can just plug any USB keyboard into the spare USB connector using an On-The-Go cable.
* Power supply tolerant: My 3300mAh power bank can run the Pi Zero for about eight hours, but if all else fails, you can use a TV's USB connector to power it. Generally speaking, if a TV has HDMI, it will also have a USB socket, and the Zero only draws about 120mA. Or use someone's phone charger!
* Finally, if you're unfortunate enough to lose/damage your "disk," you can easily create another by downloading your 2GB image from a secure location in the cloud and burning it to a new card. Try doing _that_ with a normal laptop.
That's motivation enough for me!
Here is my finished product, with a beer coaster for scale.
![Pi Zero W setup][6]
### How I set up the Pi Zero for travel
The cheap-as-chips Pi Zero has always been a bit of an odd beast, in my opinion. It features a single-core CPU and has a frugal 512MB of memory, some of which it has to share with the onboard video. The Raspbian OS currently based on Debian Stretch is touted as being suitable for the Zero with the LXDE-based "Pixel" GUI desktop, and indeed it can be loaded and started—but in reality, the poor thing really struggles to manage a GUI _and_ run useful software.
Nevertheless, I was determined to give it a good try and set it up with the apps that have the smallest memory footprint. I'd already been around this loop with the Pi 3, so it was more of the same—only even more so! Bearing in mind this was to be a road warrior's computer, here's what I wanted to have on it:
Web browser | Lightweight but with privacy in mind
---|---
Email | IMAP-capable and seamlessly supporting GPG
XMPP/Jabber client | No-nonsense messaging
VPN client | I'm on the road, remember
Tor client | Always useful...
Music | I carry a few MP3s, but internet radio is cool, too
Multiple desktops | Useful with a small screen
Editor/IDE | Hey, it's a working computer!
FTP/SFTP client | Hey, it's a working computer!
All in all, it's a very useful bundle for my purposes, and if I achieve a balanced environment, it could actually work.
### Hardware
The hardware was a bit of a challenge. The battery was not a problem, as I have a variety of rechargeable power packs with varying capacity, so it is really just a question of picking a suitable one for the day. The only prerequisite was that the battery should be able to take a charge while being used, and all my Jackery brand batteries do this.
For my "disk," I opted for my in-house standard 32GB SanDisk Extreme microSDHC. They're very reliable, and the size is big enough to hold a lot of software and data while still remaining affordable.
The video output would, I anticipated, be HDMI-out using the Zero's mini-HDMI connector. This suited my purposes well, as the majority of hotel TVs use this interface. Audio would also go via HDMI.
That left the human interface devices (HID), and this, predictably, caused the most consternation. I hate Bluetooth with a passion, and with the Zero's limited connectors, I'd have to bite the bullet and use a Bluetooth keyboard and mouse, preferably a combined one—and small. There's no point in having a tiny computer if you have lug a great honking keyboard around as well, so my unhappy quest began.
### Bluetooth woes
The Zero has a limited number of USB connectors on board—just one, if you allow for the power connector, which obviously means you have limited connection options. You could always use a USB extender hub, but then that's more to carry—including another power supply. That basically leaves you trying to connect a keyboard and mouse via Bluetooth. I don't believe the hype about how it can "_easily connect a wide variety of devices together,_" and I wrestle with a variety of allegedly standard devices trying to get the bloody things to play nicely together. Part of the problem with the Pi (I think) is that there's some unintended interaction between WiFi and Bluetooth that causes weird stuff to happen. My problem was that I was able to connect to the Pi using a keyboard _or_ a mouse, but not both reliably at the same time. And yes, I have a variety of allegedly standards-following Bluetooth devices, none of which decided to work together properly.
At this point, I was wondering if there was a Bluetooth Samaritan's Helpline, but there wasn't, so what the heck was I going to do?! Temporarily, I resorted to using an Apple USB keyboard with two USB sockets; this was useful for setup but not for being on the road. In the end, I spent hours browsing eBay and Amazon, and then I found it: a "_3- in-1 Mini Wireless Bluetooth Keyboard Mouse Touchpad For Windows iOS Android UK - Backlit, Ultra-thin, Built-in Rechargeable Battery, QWERTY_." Perfect on paper, but would it work? I sent off the money, and four days later, a slim package arrived from China. And it bloody well worked!! First time, every time, it got on with the Pi like pie and chips. I promptly ordered another one—accidents happen, and I wouldn't want to be left in the lurch.
So, with my hardware lineup complete, I could settle down to setting up the Pi proper.
### The GUI and the Pi
Going back to my software requirements, I thought long and hard about the smallest desktop environment and went with the supplied LXDE desktop, which I'd used several times on other projects. Although the Pi struggled a bit with screen handling, it generally performed well, and I started setting up my software. 
Web browser 1
Midori: a good compromise between size and modernity. Supports private browsing and is bundled with the Pi
Web browser 2
Links2 in graphic mode: lightweight, fast, secure, works with proxies
Email
Sylpheed: small, light, and works well with GPG
XMPP/Jabber client
Profanity. It's great!
VPN client
OpenVPN
Tor client
Ha! Links2 again
Music
SMPlayer: the GUI for MPlayer
Editor/IDE
Geany: small and light but powerful
Image viewer/editor
Pinta
FTP/SFTP client
Filezilla
**Other stuff:**
Midnight Commander
Not just a file manager (more later)
Tor proxy server
Always on, so I can use Tor as needed
Nmap
I sometimes need to test stuff
vnStat
Monitor data usage on the wlan0 interface
SSH/SFTP server
Standard issue on this distro
UFW
Firewall; can't be too careful!
Gopher client
Gopherspace! It's still out there, and I use the _original_ Gopher client!
All of the above are tried, tested, and very stable packages. The web browser decision was a calculated one: the Zero doesn't _really_ have what it takes to negotiate a modern ~~bloated, ad-ridden~~ website, and honestly, I have a phone that can handle that sort of thing. Likewise, the decision to run a Tor proxy: it's very handy to be able to access Marianas Web, and using Links2 as a browser means that the risk is minimal.
Sylpheed is a mature package that I believe has largely been replaced by Claws but is actually less demanding of resources. GPG integrated seamlessly with it, and I was able to exchange signed/encrypted messages with ease. It renders both plain-text and HTML messages well, and the interface is uncluttered.
I needed a _simple_ XMPP/Jabber client. The problem I've found with many apps of this type is that they try to incorporate multiple messaging standards when I only really need XMPP. Profanity is ideal as it does one job and does it very well.
### System setup
I spent a considerable amount of time setting up the OS for the best performance; a task made easier because I have set up numerous Raspberry Pis before. In such a small (as in memory) system, the decision to use a swap file was not taken lightly, and unfortunately, using a GUI desktop meant that the swap is in frequent use. The alternative is to not have one and hope that the system doesn't freeze up too much. I went with the suggested default of 100MB.
I then looked at logging. As this was supposed to be a small, portable system, I didn't see much point in having extensive logging, especially as it would have a negative effect on the SDHC card in the long term. One solution was a combination of disabling logging in apps wherever possible and sacrificing a little memory to create a tmpfs in-memory filesystem. This would have the added advantage that it would be recreated on each boot. So, I worked out that 8MB could be used for this and duly updated **/etc/fstab**. This works extremely well.
```
`tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=8m 0 0`
```
I also had to update **/etc/rc.local** to provide some essential directories on startup; this kept the rsyslog and Tor daemons happy.
```
mkdir -p /var/log/rsyslog
mkdir -p /var/log/tor/
mkdir -p /var/log/vnstat/
chown vnstat.root /var/log/vnstat/
chown debian-tor /var/log/tor/
```
With all that in place, the little computer was almost ready for Prime Time. But there was a problem. I've already mentioned the frugal amount of memory on the Zero, and even with the GUI and apps pared down to the bone, I was regularly using swap space. To make matters worse, much worse, my carefully set up desktop menus were having problems.
The Pi desktop comes with an _incredible_ amount of software installed, mainly to satisfy its original purpose as an educational machine. I decided early on to edit the menus to remove a lot of the "junk" and replace it with my list of apps, so I fired up the Main Menu Editor app. Normally this is quite responsive, but on the resource-challenged Zero, it had worrying lags and pauses as I made changes. Ultimately, it meant that my ad-hoc menus were corrupted, and worse still, the default Pi menus had been reinstated. Searching for help with this problem revealed that the menu system is convoluted, and if an update is not saved properly, the defaults will be substituted.
I looked at the structure of the menus as best I could and decided that trying to pick the frigging things apart was more trouble than it was worth. So, I ditched LXDE/Pixel and installed XFCE (and its even lighter-weight GUI) in its place. This time, the menu editor seemed more stable, but as I made the changes, I realized that yes, it was happening again. At that point, I had a tantrum and threw my toys out of the pram. I'd reached a crossroads in my road-warrior setup: it worked very well apart from the menus, and I felt I couldn't go back after all that work, so, with a heavy heart, I had a drastic rethink. It was supposed to be a hacker's machine, right? It was Linux and, to many like-minded people, that meant a text-based interface, right?
So I did what I had to do: I ditched the accursed GUI! Yes, go back to the '90s, maybe even earlier, and Run it Like a Boss.™ The main problem I had in my mind was that I'd no longer have nice, safe, icon-driven apps and multiple desktops to work with. My WiFi/network switcher would be no more, and worse still, I'd have to try and manage Bluetooth from the command line. That was going to be a major challenge, but I decided to proceed anyway, and I had a cloned copy of my microSDHC just in case I lost my nerve.
### Set it up again
Incidentally, if I were using a full-spec Raspberry Pi 3, I wouldn't have been in this situation. But it was my choice, so… This exercise started out well. I was already rebooting into the terminal login prompt, and the Bluetooth keyboard was working, so I was able to log in (previously, I'd run **startx** to get to the desktop). Since I no longer had the desktop bloat to worry about, my memory usage was a mere 78MB and no swap usage; I felt better already. But what about the apps that make life easy? I did more hunting around, and here's what I came up with.
Web browser
Links2 _not_ in graphic mode: lightweight, fast, secure, works with proxies
Email
(Neo)Mutt: powerful, extensible and works well with GPG
XMPP/Jabber client
Profanity. It's great!
VPN client
OpenVPN
Tor client
Ha! Links2 again
Music
Midnight Commander + mpg123
Editor/IDE
Nano: I'm using it to write this
FTP/SFTP client
Midnight Commander
File manager
Midnight Commander
**Other stuff**
Tor proxy server
Always on, so I can use Tor as needed
Nmap
I sometimes need to test stuff
vnStat
Monitor data usage on the wlan0 interface
SSH/SFTP server
Standard issue on this distro
Gopher client
Gopherspace! It's still out there, and I use the _original_ Gopher client!
**Graphics workarounds**
fbcat
Takes a screenshot using the framebuffer device
fbi
Linux framebuffer imageviewer: displays images in a terminal
fbgs
Displays PostScript/PDF files using the Linux framebuffer device on a terminal
pnmtopng
Converts a PPM into a PNG file
You'll notice that there's not too much change there, with a few notable exceptions to display graphical content.
### Do it again, and do it properly
Things looked good, but I still had some issues to solve.
#### Desktops
"But what about the multiple desktops?!" I hear you asking, "How will you view images or connect to WiFi networks?" I needed to find a solution, and fast. For the multiple desktop thing, I decided to install tmux, the Linux Terminal Multiplexer. There are so many good reasons to run tmux on a Linux system, but my key reasons are that it makes multi-screen working possible, and it uses very little memory. It also enables me to connect to the Pi via SSH and take over the session, as you can see below.
![tmux running on Raspberry Pi][7]
#### Music
I must say that it's very important to me to be able to listen to music while I'm working or relaxing, so the loss of (S)MPlayer was a major blow. I was able to listen to single MP3s or complete playlists. I was able to stream internet radio. Sigh. Midnight Commander came to the rescue with its ability to handle various file types. The secret is in the Extension File menu, which looks like this for me:
```
shell/i/.mp3
    Open=/usr/lib/mc/ext.d/sound.sh open mp3
regex/i/\\.(m3u|pls)$
        Open=/usr/lib/mc/ext.d/sound.sh open playlist
```
And my sound.sh looks like this:
```
#!/bin/bash
do_open_action() {
    filetype=$1
    case "${filetype}" in
    playlist)
        mpg123 -C -@ "${MC_EXT_FILENAME}"
        ;;
    m3u)
        mpg123 -C -@ "${MC_EXT_FILENAME}"
        ;;
    mp3)
        mpg123 -C "${MC_EXT_FILENAME}"
        ;;
    *)
        ;;
    esac
        }
case "${action}" in
open)
    ("${MC_XDG_OPEN}" "${MC_EXT_FILENAME}" &gt;/dev/null 2&gt;&amp;1) || \
        do_open_action "${filetype}"
    ;;
*)
    ;;
esac
```
Tapping Enter on an MP3 will play the file, or tapping on an M3U playlist will play whatever's in the playlist. I used the **-C** option so that I could have access to mpg123's controls. Sorted!
#### SFTP/FTP clients
Midnight Commander again! You can set up a client connection entry with the built-in menu and use **CTL+\** to select it from a drop-down. The FTP site is rendered in one of the panels as a directory structure, and you can just treat it as you would a local filesystem. SFTP is a bit harder, as you have to set it up as an SSH connection and then copy as required; it's OK if you have password authentication, but for public key authentication, I found it less involved to use SFTP from the command line. For reference, this is the syntax:
```
sftp://[user@]machine:[port]/[remote-dir]
The user, port and remote-dir elements are optional.
```
![MC FTP client example][8]
#### WiFi selector
In the GUI world, I had had a nice, icon-based WiFi network manager app that I could use to switch between networks. The text-mode alternative is the bizarrely named wicd-curses*.* It's an app that communicates with wicd (wireless control daemon) using cursor keys, and it works very well. I had to disable the dhcpcd service using systemctl to get it to work, but at least it lets me select the appropriate network, including my home network or my phone's wireless hotspot when I'm out on the road. Here's [how to do it][9].
![wicd-curses WiFi app][10]
#### Email and web browsing
For email and web browsing, I use Mutt (Neomutt) and Links2, respectively, and they just work.
#### Gopher
Trust me; you're not old enough to remember Gopher, the text mode forerunner of the WWW. Strictly speaking, it was before my time as well, but I run a thriving Gopher server, so I need a client. Here's what a Gopher server looks like running on a Raspberry Pi.
```
                gopher://gopher.petergarner.net:70
__/\\\\\\\\\\\\\\\\\\_______/\\\\\\\\\\\\\\\\\\\\\\\\\\__________________/\\\\\\____
_/\\\\\///////\\\\\\____\/\\\\\/////////\\\\\\______________/\\\\\\\\\\____
_\/\\\\\\_____\/\\\\\\___\/\\\\\\_______\/\\\\\\__/\\\\\\_______/\\\\\/\\\\\\____
_\/\\\\\\\\\\\\\\\\\\\\\/____\/\\\\\\\\\\\\\\\\\\\\\\\\\/___\///______/\\\\\/\/\\\\\\____
_\/\\\\\//////\\\\\\____\/\\\\\/////////_____/\\\\\\_____/\\\\\/__\/\\\\\\____
_\/\\\\\\____\//\\\\\\___\/\\\\\\_____________\/\\\\\\____/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\_
_\/\\\\\\_____\//\\\\\\__\/\\\\\\_____________\/\\\\\\\\__///////////\\\\\//__
_\/\\\\\\______\//\\\\\\_\/\\\\\\_____________\/\\\\\\_______________\/\\\\\\___
_\///________\///__\///______________\///_________________\///___
               Welcome to... "The Rpi4 Gopher"
               ... your source for local information, and beyond!
 --&gt;  [14] About this server (and legal)/
           -- Content
      [18] Tech-related/
      [19] Politics and Propaganda (from all sides)/
      [20] Cyber and Internet related/
      [21] Stuff (filed under "miscellany")/
.....
```
### Performance
Overall, I'm pleased to say that my switch to text mode has been very beneficial with userland tasks handled responsively. As you can see from a typical **top** display, there's plenty of available and cached memory remaining from the original 512MB. Right now, I'm listening to a playlist, writing this article in an SSH-connected tmux session, running top**,** and Mutt is handling emails.
On a regular basis, that's all I'll probably need to do, but it's great to have the option to develop and test software on the go, if I need to. Here's a simple Python script to get the Pi's CPU serial number (type):
```
&gt;&gt;&gt; #!/usr/bin/env python
...
&gt;&gt;&gt; import subprocess
&gt;&gt;&gt;
&gt;&gt;&gt; def GetCPUserial():
...     cpuinfo = subprocess.check_output(["/bin/cat", "/proc/cpuinfo"])
...     cpuinfo = cpuinfo.replace("\t","")
...     cpuinfo = cpuinfo.split("\n")
...     [ legend, cpuserial ] = cpuinfo[11].split(' ')
...     return cpuserial
...
&gt;&gt;&gt; print GetCPUserial()
9000c1
&gt;&gt;&gt;
[/code] [code]
top - 15:55:47 up  5:49,  6 users,  load average: 0.21, 0.25, 0.34
Tasks: 112 total,   1 running, 110 sleeping,   1 stopped,   0 zombie
%Cpu(s): 3.9 us, 5.8 sy, 0.0 ni, 90.3 id, 0.0 wa, 0.0 hi, 0.0 si,  
KiB Mem :   493252 total, 37984 free,  73248 used, 382020 buff/cache
KiB Swap:   102396 total, 102392 free,     4 used. 367336 avail Mem
```
I take regular backups, of course, using the indispensable [rpi-clone][11]. The beauty of this app is that I can copy the entire microSDHC card to another while the Pi is running. It also has the advantage that if I use a smaller capacity card, it will automatically and safely take this into account. I use a 32GB card, but I can dump it to an 8GB card because I'm only using about 4GB. The converse is true for a larger destination card. If you add only one utility to your Pi, this should be it—it's saved me more grief than _anything_ I've ever used! You can also use it to create distribution copies of your system.
#### Battery life
I can only describe the battery life as "impressive." Once the Zero is booted up, it takes an average 0.15A / 0.65W with the following running:
* System
* Bluetooth
* WiFi
* Audio (HDMI) subsystem
* Video (HDMI) subsystem
I've measured 20 hours of mixed usage from my 6000mAh Jackery Jetpack power bank, and if I disable WiFi and just use it in "local" mode, possibly more. It's certainly practical to use it with my smaller, 3300mAh Anker battery, which unfortunately isn't rechargeable while in use. I also have a 20,000mAh battery for long trips: I have yet to try that out.
### Taking it on the road
In terms of computing as a challenge, setting up the Zero has been a really valuable exercise. It's taught me to become acquainted with the operating system and app software at a low level in order to squeeze the maximum amount of memory from the system. It's also taught me that I don't have to invest large amounts of money to build a relatively powerful system that can be taken on the road and used productively.
Now that I've almost finished setting it up, it's time to actually _take_ it on the road and see how it runs in the field. Hey, maybe I'll actually take into a field and see if I can do some work and listen to music.
* * *
_This was originally published on [Peter Garner's blog][12] under a CC BY-NC-ND 4.0 license and is reused here with the author's permission._
Having recently co-authored a book about building things with the Raspberry Pi ( Raspberry Pi Hacks...
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/raspberry-pi-zero
作者:[Peter Garner][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/petergarner
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/plane_travel_world_international.png?itok=jG3sYPty (Airplane flying with a globe background)
[2]: https://opensource.com/resources/raspberry-pi
[3]: https://www.petergarner.net/projects/Mac_Mini_to_rpi-part_1.pdf
[4]: https://en.wikipedia.org/wiki/Next_Unit_of_Computing
[5]: http://threatbrief.com/evil-maid-attack/
[6]: https://opensource.com/sites/default/files/uploads/pi-zero-on-the-road.jpg (Pi Zero W setup)
[7]: https://opensource.com/sites/default/files/uploads/tmux-on-pi.png (tmux running on Raspberry Pi)
[8]: https://opensource.com/sites/default/files/uploads/ftp-client-mc.png (MC FTP client example)
[9]: https://www.raspberrypi.org/forums/viewtopic.php?t=150124#p987430
[10]: https://opensource.com/sites/default/files/uploads/wifi-selector.png (wicd-curses WiFi app)
[11]: https://github.com/billw2/rpi-clone
[12]: https://petergarner.net/notes/index.php?thisnote=20180202-Travels%20with%20a%20Pi

View File

@ -0,0 +1,118 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to whiteboard collaboratively with Drawpile)
[#]: via: (https://opensource.com/article/20/3/drawpile)
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
How to whiteboard collaboratively with Drawpile
======
Need to whiteboard or draw something with others? Give Drawpile a try.
![markers for a whiteboard][1]
Thanks to applications like [Krita][2] and [MyPaint][3], open source software users have all the tools they need to create stunning digital paintings. They are so good that you can see [art created with Krita][4] in some of your [favorite RPG books][5]. And it's getting better all the time; for example, [GIMP][6] 2.10 adopted MyPaint's brush engine, so users can benefit from MyPaint without even installing the whole application.
But what about collaborative illustration? What do two or more artists do when they want to work together on one piece? What does your work team use when you need to whiteboard during a business meeting? Those are the questions, and the answer is [Drawpile][7].
![Drawpile's UI][8]
Nyarlathotep by Sophia Eberhard
Drawpile is a drawing application for Linux, Windows, and macOS. It's got a respectable brush engine and all the basic editorial tools (selection tools, flips and flops, mirror, and so on) to make it a good freehand digital paint application. But its most powerful feature is its easy multi-user mode. If you have Drawpile installed, you can host a drawing session from your computer or on a Drawpile server, allowing other users to join you in your virtual studio. This goes well beyond a screen-share session, which would just allow other users to _view_ your painting, and it's not a remote desktop with just one cursor. Drawpile enables several users, each with their own brush, to work on the same canvas at the same time over a network that can span the globe.
### Installing Drawpile
If you're using Linux, Drawpile is available as a [Flatpak][9] from [Flathub.org][10].
On Windows and macOS, download and install Drawpile from [Drawpile's download page][11]. When you first launch it on macOS, you must right-click on its icon and select **Open** to accept that it hasn't been signed by a registered Apple developer.
### Drawing with Drawpile
The Drawpile interface is simple and minimal. Along the right side of the application window are docked palettes, and along the top is a toolbar. Most of the tools available to you are visible: paint brushes, paint buckets, lines, Bézier curves, and so on.
For quick access to brushes, Drawpile allows you to assign a unique brush, along with all of its settings (including color), to the number keys **1** through **5** on your keyboard. It's an efficient and easy way to quickly move between drawing tools. The **6** key holds an eraser.
Drawpile also has layers, so you can keep different parts of your painting separate until you combine them for your final render. If you're an animator, you can even use Drawpile's onion skin and flipbook features (both available in the **Layer** menu) to do rudimentary frame-by-frame animation. Unlike Krita, Drawpile doesn't feature an [animation timeline][12], but it's enough for quick and fun animations.
### Custom brushes
Drawpile isn't Krita or MyPaint, so its brush engine is simple in comparison. The preset brushes have the usual properties, though, including:
* **Opacity** adjusts how your strokes blend with existing paint
* **Hardness** defines the edges of your stroke
* **Smudging** allows existing strokes to be affected by your brush
* **Color pickup** allows your paint to pick up color from existing strokes
* **Spacing** controls how often the full brush cursor is sampled during a stroke
Most of these are pressure-sensitive, so if you're using a drawing tablet (Wacom, for instance), then your brush strokes are dynamic depending upon pen pressure. The tablet support is borrowed from Krita, and it makes a big difference (although it's probably overkill for mock-ups or whiteboarding sessions).
When you find a brush setting you like, you can add it to your brush set so you can use it again later. To add a brush, click the **Menu** button in the top-right corner of the docked **Brushes** palette and select **Add brush**.
![Adding a brush in Drawpile][13]
If the **Brushes** palette isn't visible, go to the **View** menu in the top menu bar and select **Brushes** from the **Docks** submenu.
### Collaborative drawing
To participate in a shared drawing session, go to the **Session** menu and click either **Host** to host a session or **Join** to join in on an existing one.
#### Hosting a session
If you're hosting a session, give your session a title and an optional password (or leave it blank to allow anyone in). In the **Server** section, set whether you're hosting the session from your computer or from someone else's server. You can host sessions on **pub.drawpile.net** for free, but all of your data will be sent out to the internet, which could affect performance. If you have a good internet connection, the lag is negligible, but if you're not confident in your internet speed or there's no reason to go out to the internet because your collaborators are in the same building as you, then you can host your session locally.
![Settings for hosting a session][14]
If you host locally, you must provide your IP address or computer name (ending in **.local**) to your collaborators so their Drawpile apps can find your computer. You can find your computer name in the **Sharing** preferences of the GNOME desktop if you're on Linux:
![Sharing Drawpile in GNOME][15]
You must enable Remote Login, and possibly adjust your [firewall settings][16] to allow other users to get through.
On macOS and Windows, you may be running a firewall, and you may need to provide additional sharing permissions in your control panel or system settings.
#### Joining a session
If you're joining a session, you need to know either the URL or the IP address of the session you're trying to join. A URL is like a website address, such as syntheticdreams.net/listing. An IP address is the numerical version of a URL, such as 93.184.216.34. Some IP addresses are internal to your building, while others exist out on the internet. If you haven't been invited to a drawing session, you might be able to find a public group on Drawpile's [Communities][17] page.
### Drawing with friends
Open source has always been about sharing. Drawpile is not only software you can share with your friends and colleagues; it's software that allows you to work with them in a fun and creative way. Try Drawpile for your next project or boardroom meeting!
Nick Hamilton talks about what he loves about the open source digital painting tool, Krita, prior...
Akkana Peck shares three of her favorite GIMP tools.
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/drawpile
作者:[Seth Kenlon][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/seth
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/markers_whiteboard_draw.png?itok=hp6v1gHC (markers for a whiteboard)
[2]: https://krita.org/en/
[3]: http://mypaint.org
[4]: https://krita.org/en/item/interview-with-alexandru-sabo/
[5]: https://paizo.com/products/btpy9g9x?Pathfinder-Roleplaying-Game-Bestiary-5
[6]: https://www.gimp.org/
[7]: https://drawpile.net
[8]: https://opensource.com/sites/default/files/uploads/drawpile-ui.jpg (Drawpile's UI)
[9]: https://opensource.com/article/19/10/how-build-flatpak-packaging
[10]: https://flathub.org/apps/details/net.drawpile.drawpile
[11]: https://drawpile.net/download/
[12]: https://opensource.com/life/16/10/animation-krita
[13]: https://opensource.com/sites/default/files/uploads/drawpile-brush-add.jpg (Adding a brush in Drawpile)
[14]: https://opensource.com/sites/default/files/uploads/drawpile-session-host.png (Settings for hosting a session)
[15]: https://opensource.com/sites/default/files/uploads/gnome-sharing.png (Sharing Drawpile in GNOME)
[16]: https://opensource.com/article/19/7/make-linux-stronger-firewalls
[17]: https://drawpile.net/communities

View File

@ -0,0 +1,85 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Open source alternative for multi-factor authentication: privacyIDEA)
[#]: via: (https://opensource.com/article/20/3/open-source-multi-factor-authentication)
[#]: author: (Cornelius Kölbel https://opensource.com/users/cornelius-k%C3%B6lbel)
Open source alternative for multi-factor authentication: privacyIDEA
======
As technology changes, so too will our need to adapt our authentication
mechanisms.
![Three closed doors][1]
Two-factor authentication, or multi-factor authentication, is not a topic only for nerds anymore. Many services on the internet provide it, and many end-users demand it. While the average end-user might only realize that his preferred web site either offers MFA or it does not, there is more to it behind the scene.
The two-factor market is changing, and changing rapidly. New authentication methods arise, classical vendors are merging, and products have disappeared.
The end-user might not be bothered at all, but organizations and companies who want to require multi-factor authentication for their users may wonder where to turn to and which horse to bet on.
Companies like Secure Computing, Aladdin, SafeNet, Cryptocard, Gemalto, and Thales have been providing authentication solutions for organizations for some decades and have been involved in a round dance of [mergers and acquisitions][2] during the last ten years. And the user was the one who suffered. While the IT department thought it was rolling out a reliable software of a successful vendor, a few years later, they were confronted with the product being end-of-life.
### How the cloud changes things
In 1986, RSA released RSA SecurID, a physical hardware token displaying magic numbers based on an unknown, proprietary algorithm. But, almost 20 years later, thanks to the Open Authentication Initiative, HOTP (RFC4226) and TOTP (RFC6238) were specified—originally for OTP hardware tokens.
SMS Passcode, which specialized in authenticating by sending text messages, was founded in 2005; no hardware token required. While other on-premises solutions kept the authentication server and the enrollment in a confined environment, with SMS Passcode, the authentication information (a secret text message) was transported via the mobile network to the user.
The iPhone 1 was released in 2007, and the Android phone quickly followed. DUO Security was founded in 2009 as a specific cloud MFA provider, with the smartphone acting as a second factor. Both vendors concentrated on a new second factor—the phone with a text message or the smartphone with an app—and they offered and used infrastructure that was not part of the company's network anymore.
Classical on-premises vendors started to move to the cloud, either by offering their new services or acquiring smaller vendors with cloud solutions, such as SafeNet's [acquisition of Cryptocard in 2012][3]. It seemed tempting for classical vendors to offer cloud services—no software updates on-premises, no support cases, unlimited scaling, and unlimited revenue.
Even the old top dog, RSA, now offers a "Cloud Authentication Service." And doesn't it make sense to put authentication services in the cloud? The data is hosted at cloud services like Azure, the identities are hosted in the cloud at Azure AD, so why not put authentication there with Azure MFA? This approach might make sense for companies with a complete cloud-centric approach, but it also probably locks you into one specific vendor.
Cloud seems a big topic also for multi-factor authentication. But what if you want to stay on-prem?
### The state of multi-factor authentication technology
Multi-factor authentication has also come a long way since 1986, when RSA introduced its first OTP tokens. A few decades ago, well-paid consultants made a living by rolling PKI concepts, since smartcard authentication needed a working certificate infrastructure.
After having OTP keyfob tokens and smartphones with HOTP and TOTP apps and even push notification, the current state-of-the-art authentication seems to be FIDO2/WebAuthn. While U2F was specified by the FIDO Alliance alone, WebAuthn was specified by no one else than W3C, and the good news is, the base requirements have been integrated into all browsers except Internet Explorer.
However, applications still need to add a lot of code when supporting Webauthn. But WebAuthn allows for new authentication devices like TPM chips in tablets, computers, and smartphones or cheap and small hardware devices. But U2F also looked good back then, and even it did not make the breakthrough. Will WebAuthn do it?
So these are challenging times since currently, you probably cannot use WebAuthn, but in two years, you'll probably want to. Thus, you need a system that allows you to adapt your authentication mechanisms.
### Getting actual requirements
This is one of the first requirements when you are about to choose a flexible multi-factor authentication solution. It will not work out to solely rely on text messages, or on one single smartphone app or only WebAuthn tokens. The smartphone app may vanish; the WebAuthn devices might not be applicable in all situations.
When looking at the mergers and acquisitions, we learned that it did happen and can happen again; that the software goes end-of-life, or the vendors cease their cloud services. And sometimes it is only the last few months that hurt, when the end of sales means that you cannot buy any new user licenses or onboard any new users! To get a lasting solution, you need to be independent on cloud services and vendor decisions. The safest way to do so is to go for an open source solution.
But when going for an open source solution, you want to get a reliable system, reliable meaning that you can be sure to get updates that do not break and that bugs will be fixed, and there are people to be asked.
### An open source alternative: privacyIDEA
Concentrated experiences in the two-factor market since 2004 have been incorporated into the open source software alternative: [privacyIDEA][4].
privacyIDEA is an open source solution providing a wide variety of different authentication technologies. It started with HOTP and TOTP tokens, but it also supports SMS, email, push notifications, SSH keys, X.509 certificates, Yubikeys, Nitrokeys, U2F, and a lot more. Currently, the support for WebAuthn is added.
The modular structure of the token types (being Python classes) allows new types to be added quickly, making it the most flexible in regards to authentication methods. It runs on-premises at a central location in your network. This way, you stay flexible, have control over your network, and keep pace with the latest developments.
privacyIDEA comes with a mighty and flexible policy framework that allows you to adapt privacyIDEA to your needs. The unique event handler modules enable you to fit privacyIDEA into your existing workflows or create new workflows that work the best for your scenario. It is also plays nice with the others and integrates with identity and authentication solutions like FreeRADIUS, simpleSAMLphp, Keycloak, or Shibboleth. This flexibility may be the reason organizations like the World Wide Web Consortium and companies like Axiad are using privacyIDEA.
privacyIDEA is developed [on GitHub][5] and backed by a Germany-based company providing services and support worldwide.
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/open-source-multi-factor-authentication
作者:[Cornelius Kölbel][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/cornelius-k%C3%B6lbel
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/EDU_UnspokenBlockers_1110_A.png?itok=x8A9mqVA (Three closed doors)
[2]: https://netknights.it/en/consolidation-of-the-market-and-migrations/
[3]: https://www.infosecurity-magazine.com/news/safenet-acquires-cryptocard/
[4]: https://privacyidea.org
[5]: https://github.com/privacyidea/privacyidea

View File

@ -0,0 +1,106 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (How to Install Netbeans on Ubuntu and Other Linux)
[#]: via: (https://itsfoss.com/install-netbeans-ubuntu/)
[#]: author: (Community https://itsfoss.com/author/itsfoss/)
How to Install Netbeans on Ubuntu and Other Linux
======
_**In this tutorial, youll learn various ways to install Netbeans IDE on Ubuntu and other Linux distributions.**_
[NetBeans][1] is an open source integrated development environment that comes with good cross-platform support. This tool has been recognized by the Java and C/C++ development community widely.
The development environment is quite flexible. You can configure this tool to support a wide array of development objectives. Practically, you can develop Web, Desktop and Mobile Applications without leaving this platform. Its amazing, isnt it? Besides this, the user can add a wide array of known languages such as [PHP][2], C, C++, HTML, [Ajax][3], JavaScript, JSP, Ruby on Rails and the list goes on and on!
If you are looking to install Netbeans on Linux, you have several ways to do that. I have written this tutorial primarily for Ubuntu but some installation methods are applicable to other distributions as well.
* [Installing Netbeans on Ubuntu using apt][4]: for Ubuntu and Ubuntu-based distributions but usually **it has older version of Netbeans**
* [Installing Netbeans on Ubuntu using Snap][5]: for any Linux distribution that has Snap packaging support enabled
* [Installing Netbeans using Flatpak][6]: for any Linux distribution with Flatpak package support
### Installing Netbeans IDE on Ubuntu using Apt package manager
If you search for Netbeans in Ubuntu Software Center, youll find two Netbeans available. The Apache Netbeans is the snap version which is bigger in download size but gives you the latest Netbeans.
You can install it in one click. No need to open terminal. Easiest way.
![Apache Netbeans in Ubuntu Software Center][7]
You may also opt for using the apt command but with apt version, you wont get the latest Netbeans. For example, at the time of writing this tutorial, Ubuntu 18.04 has Netbeans version 10 available via Apt while Snap has the latest Netbeans 11.
If you are a fan of [apt or apt-get][8], you can [enable the universe repository][9] and install Netbeans using this command in the terminal:
```
sudo apt install netbeans
```
### Installing Netbeans IDE on any Linux distribution using Snap
![][10]
Snap is a universal package manager and if [you have enabled Snap on your distribution][11], you can install it using the following command:
```
sudo snap install netbeans --classic
```
The process might take some time to complete because the total download size is around 1 GB. Once done, you will see the app in the application launcher.
Not only youll get the latest Netbeans with Snap, the installed version will be automatically updated to the newer version.
### Installing Netbeans using Flatpak
[Flatpak][12] is another universal packaging like Snap. Some distributions support Flatpak by default while you can [enable Flatpak support][13] on others.
Once you have the Flatpak support on your distribution, you can use the following command to install Netbeans:
```
flatpak install flathub org.apache.netbeans
```
Alernatively, you can always download the source code of this open source software and compile it yourself.
[Download Netbeans][14]
Hopefully, you selected one of the above methods to install Netbeans on your Ubuntu Linux system. But which one did you use? Did you face any issues? Do let us know.
![][15]
### Srimanta Koley
Srimanta is a passionate writer, a distrohopper &amp; open source enthusiast. He is extremely fond of everything related to technology. He loves to read books and has an unhealthy addiction to the 90s!
--------------------------------------------------------------------------------
via: https://itsfoss.com/install-netbeans-ubuntu/
作者:[Community][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/itsfoss/
[b]: https://github.com/lujun9972
[1]: https://netbeans.org/
[2]: https://www.php.net/
[3]: https://en.wikipedia.org/wiki/Ajax_(programming)
[4]: tmp.ZNFNEC210y#apt
[5]: tmp.ZNFNEC210y#snap
[6]: tmp.ZNFNEC210y#flatpak
[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/03/apache-netbeans-ubuntu-software-center.jpg?ssl=1
[8]: https://itsfoss.com/apt-vs-apt-get-difference/
[9]: https://itsfoss.com/ubuntu-repositories/
[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/03/Install_Netbeans_Linux.jpg?ssl=1
[11]: https://itsfoss.com/install-snap-linux/
[12]: https://flatpak.org/
[13]: https://itsfoss.com/flatpak-guide/
[14]: https://netbeans.apache.org/download/index.html
[15]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2020/03/srimanta.jpg?ssl=1

View File

@ -0,0 +1,83 @@
[#]: collector: (lujun9972)
[#]: translator: (sndnvaps)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Linux is our love language)
[#]: via: (https://opensource.com/article/20/2/linux-love-language)
[#]: author: (Christopher Cherry https://opensource.com/users/chcherry)
Linux 是我们最喜爱的语言
======
当一个妻子教丈夫一些新技能的时候,他们会学到比他们期待更多的知识。
![红心 "你不是孤单的"][1]
2019年是樱桃家族学习的一年。我是一个喜欢学习新技术的高级软件工程师并把学到的内容教给我的丈夫 Chris。通过教他一些我学到的东西并让他完成我的技术演练文章我帮助Chris学习到了新技术使他能够将自己的职业生涯更深入地转向技术领域。我学习到了新的方法使我的演练和培训材料更易于让读者理解。
通过这篇文章,我们来讨论一下我们从双方中各自学习到了什么东西,这学习到的内容对于我们的未来有何影响。
### 对于学生的问题
**Jess:** Chris, 是什么导致你想深入都学习我所学领域的技能呢?
**Chris:** 主要目的是为了让我事业更进一步。作为一个网络工程师的经历告诉我,现在的网络专家已经不像以前一样有价值了,我必须掌握更多的知识。由于网络经常被认为是造成这些天程序中断或程序出错的原因,我想从开发人员的角度了解更多关于编写应用程序的知识,以便于了解它们如何依赖网络资源。
**Jess:** 你想让我先教你什么内容呢,你想从中学到什么东西?
**Chris:** 首先要学习怎样安装Linux系统之后再安装[Ansible][2]程序。只要硬件能配对得上每一个Linux发生版都很容易安装上但可能会出现个别不兼容的情况。这就需要我学习如何解决系统安装前5分钟出现的问题了这个我最喜欢了。Ansible 给了一个我使用软件管理器安装程序的理由。当程序安装完成后我快速学习到程序管理器如何处理程序的依赖项目通过查看yum已经安装的程序我发现Ansible是用Python写的所以能在我的系统运行。自此之后我都通过Ansible来安装各种各样的程序。
**Jessica:** 你喜欢我这种教学方式不?
**Chris:** 我们一开始有过争吵,直到我们弄清楚了我喜欢的学习方式,你应该怎样为我提供最好的学习方式。在一开始的时候,我很难跟上你讲的内容。例如,当你说"a Docker container,"的时候,我完全不知道你在讲什么。比较早的时候,我的回答就是”这是一个容器",然而这对我来说,完全没有意义。我比较喜欢你对这些内容进行一些更深入的讲解,这让学习更有趣。
**Jess:** 老实说,这对我来说也是一堂大的课程。我从来没有教过在这个技术领域知识比我少的人在你之前,所以你帮助我认识到更多细节内容在解释的时候。我也得说声谢谢。
当你通过这几个学习步骤的时候,你觉得我的这篇测试文章怎样呢?
**Chris:** 就个人而已,对于男生来说这很容易,但我错了。在我主要学习的内容中,像你[介绍的Vagrant][3]程序,它在不同的Linux发生版本的变化比我想像的要多。操作系统OS会按你的要求更改设置方式、运行要求和特定命令。这看起来比我用的网络设备变化更大。这让我花费更多的精力去查看对应我的系统或其它系统在某此时候这个比较难以理解。在这学习路上我似乎碰到了很多不懂的事情。
**Jess:** 我每天都会遇到各种各样的问题,所以不同的方法处理不同的问题这就是日常生活。
### 对于老师的问题
**Chris:** Jess, 你现在教我的方式有什么改变呢?
**Jess:** 我会让你读多一些书,我也是。通过翻译书籍来学习新技术。每天起床后一小时和睡觉前一小时我都会看书,花费一个星期左右我就能看一到两本书。我也会创建为期两周的任务计划来实践我从书本中学习到的技能。这是除了我一天中第一个小时在喝大量咖啡时读到的科技文章之外的。当我在想如何让你增长职业技能的目标的时候,我认为书籍是一个重要的元素除了厉害博客文章和我们谈论的文章。我觉得我的阅读量使我理解增加了速度,如果你也这么做了,你也会很快赶上我的。
**Chris:** 那么学生有没有教过老师呢?
**Jess:** 我在你那里学习到耐心。举个例子当你完成了安装Ansible的时候我问你下一步要怎样操作的时候。你直接回复我“不知道”这不是我想让你学习到的内容。所以我改变了策略我们来说一说你想在安装程序的过程前需要学习到什么东西。当我们在写Vagrant文章的时候我们一起进行相应的演示操作我以创建它为目标所以我们在最后都有所获得。
这实际上对我在工作中的培训方式产生了巨大的改变。现在我讲更多问题在大家学习的过程中,并手把手进行讲解,这比我之前要做的多。我更愿意坐下来仔细检查,确保有人明白我在说什么和我们在做什么。这是我之前从来没有做过的。
### 我们在一直学到的东西
做为一对夫妇,我们的技术都有所增长在这一年的技术合作中。
**Chris:** 我对自己学到的东西感到震惊。通过一年课程学习我认识了新操作系统如何使用API使用Ansible开发网络程序和使用Vagrant启动虚拟机器。我还学习到了文档如何让生活变得更好所以我也会尝试去写一写。然而在这个工作领域行为并不总是被记录在案所以我学会了准备好处理棘手的问题并记录如何解决它们。
**Jess:** 除了我在教你中学到的知识外我还专注于学习Kubernetes在云环境中的应用知识。这包括开发阶段Kubernetes API的复杂度创建我自己的容器并对环境进行加密处理。我还节省了部分时间来学习更有趣的东西研究无服务终端的代码、人工知识模型、Python和以图形方式显示热成像。对于我来说这一年也很充足。
我们下一个目标是什么现在还不知道但我可以向您保证我们将会在Opensoruce.com上面进行分享它。
** 2019年你辅导了谁或2020年又准备辅导谁。在评论中告诉我们。 **
我能从我六岁的侄女舒淇身上看到好奇的光辉,当她发现探索的时候。。。
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/2/linux-love-language
作者:[Christopher Cherry][a]
选题:[lujun9972][b]
译者:[sndnvaps](https://github.com/sndnvaps)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/chcherry
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/red-love-heart-alone-stone-path.jpg?itok=O3q1nEVz (红心 "你不是孤单的")
[2]: https://opensource.com/resources/what-ansible
[3]: https://opensource.com/resources/vagrant

View File

@ -0,0 +1,60 @@
[#]: collector: (lujun9972)
[#]: translator: (caiichenr)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Prioritizing simplicity in your Python code)
[#]: via: (https://opensource.com/article/19/12/zen-python-simplicity-complexity)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
简单是Python编程的第一要则
======
本文是 Python 之禅特别系列的第二篇,我们将要关注其中第三与第四条原则:简单与复杂。
![Person reading a book and digital copy][1]
> "It seems that perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away."
>
> “完美并非无可增,而是不可减。”
>
> —Antoine de Saint-Exupéry, _[Terre des Hommes][2]_, 1939
编程时最常有的考量是与复杂性的斗争,只想写出让旁人无从下手的繁杂代码,对每个程序员来讲都算不上难事。倘若未能触及代码的简繁取舍,那么 [Python 之禅][3] 就有了一角残缺。
### 简单胜过复杂 Simple is better than complex
尚有选择余地时应该选简单的方案。Python 少有不可为之事,这意味着设计出巴洛克风格(即夸张和不理性)的程序只为解决浅显的问题不仅有可能,甚至会频繁发生。
正因如此,编程时应当谨记,代码的简单性是最易丢失,却最难复得的。
这意味着,在可以选用函数来表达时不要去引入额外的类;避免使用第三方库往往有助于你针对问题场景设计更妥当的简短函数。不过其根本的意图,旨在让你减少对将来的盘算,而去着重解决手头的问题。
以简单和优美作为指导原则的代码相比那些想要囊括将来一切变数的,在日后要容易修改得多。
### 复杂胜过错综复杂 Complex is better than complicated
把握用词的精确含义对于理解这条令人费解的原则是至关重要的。形容某事复杂 (_complex_),是说它由许多部分组成,着重组成成分之多;而形容某事错综复杂 (_complicated_),则是指其包含着差异巨大、难以预料的行为,强调的是各组成部分之间的杂乱联系。
解决困难问题时,往往没有可行的简单方案。此时,最 Python 化的策略是“自底向上”地构建出简单的工具,之后将其组合用以解决该问题。
这正是对象组合 (_object composition_) 这类技术的闪耀之处,它避免了错综复杂的继承体系,转而由独立的对象把一些方法调用传递给别的独立对象。这些对象都能独立地测试与部署,最终却可以组成一体。
“自底建造” 的另一例即是 [单分派泛函数 (singledispatch)][4] 的使用,抛弃了错综复杂的对象之后,我们得到是简单、几乎无行为的对象以及独立的行为。
--------------------------------------------------------------------------------
via: https://opensource.com/article/19/12/zen-python-simplicity-complexity
作者:[Moshe Zadka][a]
选题:[lujun9972][b]
译者:[caiichenr](https://github.com/caiichenr)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [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/read_book_guide_tutorial_teacher_student_apaper.png?itok=_GOufk6N (Person reading a book and digital copy)
[2]: https://en.wikipedia.org/wiki/Wind,_Sand_and_Stars
[3]: https://www.python.org/dev/peps/pep-0020/
[4]: https://opensource.com/article/19/5/python-singledispatch

View File

@ -1,116 +0,0 @@
[#]: collector: (lujun9972)
[#]: translator: (wenwensnow)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (3 eBook readers for the Linux desktop)
[#]: via: (https://opensource.com/article/20/2/linux-ebook-readers)
[#]: author: (Scott Nesbitt https://opensource.com/users/scottnesbitt)
Linux桌面版本下的3个电子书阅读器应用
======
任意一个开源电子书应用都能使你在大屏设备上的阅读体验得到提升。
![电脑浏览器阅读书籍界面][1]
我通常使用手机或Kobo阅读器阅读电子书在大屏设备上阅读书籍总是令人不快。但很多人经常在自己的笔记本或桌面上阅读电子书如果你有这种需求或者你认为以后会遇到这种情况我想向你介绍三种Linux桌面版下的电子书阅读器。
### Bookworm
[Bookworm][2]意在成为一个"简洁,专注于电子书的阅读器."事实证明它也确实做到了。Bookworm 内置一系列基础功能,有人抱怨它太过 _简单_ ,缺少 _功能_ 虽然功能这词显然有点指意不明。Bookworm在没有任何无用部分的情况下起到了应有作用。
应用界面整洁干净。
![Bookworm 电子书应用][3]
你可通过以下方式查看书籍:
* 空格键前往下一页
* 上下方向键跳转所在行
* 左右方向键跳转至前或后一章
你也可以通过添加注释或书签跳转至特定页面
![Bookworm注释][4]
Bookworm 没有太多设置选项。你能调整书籍字体大小及间距开启双页或夜间模式。在应用中添加新文件夹后Bookworm会自动扫描文件夹中的电子书。
![Bookworm 参数设置][5]
Bookworm 支持常用的电子书格式EPUB, PDF, MOBI ,[FB2][6],你还能用它阅读[CBR][7] 和CBZ格式的数字版漫画。我只在Bookworm上测试了前三种格式PDF倒是能打开但加载速度很慢格式也很难看。
### Foliate
单从功能上来说,[Foliate][8] 确实比Bookworm强上一些。Foliate不仅功能更强它还有更多设置选项。这个功能多样简单干净的应用满足了所有要求。
![Foliate 电子书应用][9]
在Foliate中可以通过空格方向键向上或向下翻页键浏览电子书这里没什么特别的。
你还可以在书籍中添加注释查找以及翻译字句查询字词含义。如果你电脑上安装了智能语音应用Foliate还能将文本朗读出来。
![在Foliate中的注释文本][10]
Foliate与Bookworm相比有更多自定义选项。你能在应用中修改字体类型及大小行间距电子书页边距也可以调高或降低屏幕亮度选择四个应用内置主题。
![Foliate 设置][11]
你可以在Foliate上阅读 EPUB, MOBI, AZW, AZW3 格式的电子书。以防万一我可以提前告诉你后三种格式是亚马逊Kindle阅读器上架书籍所特有的格式。
### Calibre电子书阅读器
[电子书阅读器][12]是[Calibre][13] 电子书管理工具的一个组件,就像之前提到的一样,电子书阅读器这部分并不是软件整体最棒的部分。
![电子书阅读器应用][14]
不过别被上面的话吓到,它也的确是个桌面电子书阅读器。
在Calibre电子书阅读器中你可以通过方向键向上/向下翻页键以及空格浏览书籍,还能在在线字典中查找词语含义,添加书签。 这一阅读器没有注释功能但内置的搜索引擎却很好用你还能将书籍保存为PDF格式虽然我不太明白你为什么要这么做
不过参数设置这里确是它出彩的地方它的可选设置比Bookworm和Foliate加起来都多从字体到文本布局页面分割方式你都能改。除此之外你还能自定义应用按键设置将你喜欢的词典网站添加进来方便阅读查找。
![电子书参数设置][15]
Calibre电子书阅读器一个很有用的功能就是把自行设置的CSS配置文件效果应用到电子书上。以防万一我可以提前告诉你CSS是一种调整网页格式的方法这类文件就是许多电子书的一个组成部分。如果你是使用CSS的高手你可以将自己的CSS文件复制粘贴到配置窗口的**User stylesheet** 部分,这就是个性化的究极办法。
据开发者描述,这一电子书阅读器“能支持所有主流电子书格式。” 如果你想知道具体支持格式是什么,[这是列表链接][16]。我测试了列表中的一小部分格式,没有发现问题。
### 留在最后的话
不管你只是单纯想找个电子书阅读器,还是有个更多复杂功能的应用,上文提到的三个选择都很不错,而且它们都能提升你在大屏设备上的阅读体验。
* * *
_这篇文章基于一篇发布在[Open Source Musings][17]上的文章,并适用于[CC BY-SA 4.0][18]许可证_
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/2/linux-ebook-readers
作者:[Scott Nesbitt][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/scottnesbitt
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_browser_program_books_read.jpg?itok=iNMWe8Bu (Computer browser with books on the screen)
[2]: https://babluboy.github.io/bookworm/
[3]: https://opensource.com/sites/default/files/uploads/bookworm-reading.png (Bookworm e-book application)
[4]: https://opensource.com/sites/default/files/uploads/bookworm-annotations.png (Annotations in Bookworm)
[5]: https://opensource.com/sites/default/files/uploads/bookworm-preferences.png (Bookworm preferences)
[6]: https://en.wikipedia.org/wiki/FictionBook
[7]: https://en.wikipedia.org/wiki/Comic_book_archive
[8]: https://johnfactotum.github.io/foliate/
[9]: https://opensource.com/sites/default/files/uploads/foliate-reading.png (Foliate e-book application)
[10]: https://opensource.com/sites/default/files/uploads/foliate-annotation_0.png
[11]: https://opensource.com/sites/default/files/uploads/foliate-settings.png (Foliate settings)
[12]: https://calibre-ebook.com/about
[13]: https://opensourcemusings.com/managing-your-ebooks-with-calibre
[14]: https://opensource.com/sites/default/files/uploads/e-book_viewer-reading.png (E-book Viewer application)
[15]: https://opensource.com/sites/default/files/uploads/ebook-viewer-preferences.png (E-book Viewer preferences)
[16]: https://manual.calibre-ebook.com/faq.html#what-formats-does-calibre-support-conversion-to-from
[17]: https://opensourcemusings.com/three-ebook-readers-for-the-linux-desktop
[18]: https://creativecommons.org/licenses/by-sa/4.0/

View File

@ -0,0 +1,66 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (6 Raspberry Pi tutorials to try out)
[#]: via: (https://opensource.com/article/20/3/raspberry-pi-tutorials)
[#]: author: (Lauren Pritchett https://opensource.com/users/lauren-pritchett)
6 个可以尝试的树莓派教程
======
这些树莓派项目均旨在简化你的生活并提高生产力。
![Cartoon graphic of Raspberry Pi board][1]
没有什么比体验树莓派创作结果更令人兴奋了。经过数小时的编程、测试和徒手构建,你的项目终于开始成形,你不禁大喊 “woohoo”。树莓派可以带给日常生活的可能性让我着迷。无论你是想学习新知识、尝试提高效率还是只是乐在其中本文总有一个树莓派项目适合你。
### 设置 VPN 服务器
本[教程][[2]教你如何使用树莓派添加网络安全层。这个项目不仅有实际好处,而且还能为你带来很多乐趣。额外的安全性使你可以放心地做其他项目,例如下面列出的项目。
### 创建一个物体跟踪摄像机
树莓派之所以具有吸引力,是因为它提供了较低的入门门槛来学习机器学习等新技术。这份[逐步指南][3]提供了详尽的说明,说明了如何构建一个全景摄像头,以便使用 TensorFlow 和树莓派跟踪运动。
### 使用照片幻灯片展示你最喜欢的回忆
你是否曾经问过自己:“我应该怎么处理这些数码照片?”。如果你像我一样,那么答案是“是”。在朋友和家人圈子中,我被公认为摄像爱好者。这就是为什么我喜欢这个树莓派项目。在[本教程][4]中,你将学习如何设置照片幻灯片,以便轻松地在家里展示自己喜欢的回忆,而无需打印机!
### 玩复古电子游戏
如果你对复古游戏系统怀有怀旧之情,那么可以尝试[本教程][5]。了解包括树莓派在内的哪些设备可以运行 Amiga 模拟器。完成设置后,你将可在树莓派上玩自己喜欢的 Amiga 游戏。
### 为你的娱乐中心搭建时钟
在过去的十年中,家庭娱乐中心发生了很大的变化。我的家人完全依靠流媒体服务来观看节目和电影。我之所以爱它是因为我可以通过移动设备或语音助手控制电视。但是,当你不再能看眼时钟时,便会失去一定程度的便利!请遵循[这些步骤][6],使用树莓派从头开始搭建自己的时钟显示。
### 扩大自制啤酒的生产规模
在[本教程][7]中,经验丰富的家庭酿酒师分享了他建立电动啤酒酿造系统的经验。该项目需要在硬件和零件上进行更多的前期投资,但由此产生的效率和一致性让这些值得。为此祝贺!
如果你是像我这样的树莓派新手,那么我建议你阅读我们可下载的树莓派指南。我们的[单页速查表][8]提供了入门指南。有关更多技巧和教程,我们的[综合指南][9]涵盖了一些主题,例如选择树莓派、保持更新、为社区做出贡献等。
你会尝试哪个树莓派项目?让我们在评论中知道。
--------------------------------------------------------------------------------
via: https://opensource.com/article/20/3/raspberry-pi-tutorials
作者:[Lauren Pritchett][a]
选题:[lujun9972][b]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/lauren-pritchett
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/raspberrypi_cartoon.png?itok=m3TcBONJ (Cartoon graphic of Raspberry Pi board)
[2]: https://opensource.com/article/19/6/raspberry-pi-vpn-server
[3]: https://opensource.com/article/20/1/object-tracking-camera-raspberry-pi
[4]: https://opensource.com/article/19/2/wifi-picture-frame-raspberry-pi
[5]: https://opensource.com/article/19/3/amiga-raspberry-pi
[6]: https://opensource.com/article/17/7/raspberry-pi-clock
[7]: https://opensource.com/article/17/7/brewing-beer-python-and-raspberry-pi
[8]: https://opensource.com/downloads/getting-started-raspberry-pi-cheat-sheet
[9]: https://opensource.com/downloads/raspberry-pi-guide