Merge pull request #27 from LCTT/master

更新
This commit is contained in:
zEpoch 2021-07-07 19:27:03 +08:00 committed by GitHub
commit ab6120d9c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 958 additions and 263 deletions

View File

@ -0,0 +1,49 @@
[#]: subject: (My weird jobs before tech)
[#]: via: (https://opensource.com/article/21/5/weird-jobs-tech)
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
[#]: collector: (lujun9972)
[#]: translator: (MM-BCY)
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-13553-1.html)
我在进入技术行业之前的奇怪工作
======
> 你永远不会知道从你的第一份工作会走到哪里!
![Yellow plane flying in the air, Beechcraft D17S][1]
在我从事技术工作之前,我做过一些奇怪的工作。
我是一家飞机修理厂的初级助理这意味着我的工作要在溶剂中清洗肮脏的金属零件70 年代的事情可和现在不一样)。我在那里最有趣的工作是熨烫涤纶飞机的布料,放到一架正在修理中的漂亮的老式<ruby>比奇交错式双翼机<rt>Beechcraft Staggerwing</rt></ruby>的木制副翼和水平稳定器上。
在大学期间的一个夏天,我在同一个机场的一个团队工作,混合阻燃剂,然后把它注入灭火飞机(“<ruby>[水轰炸机][2]<rt>water bomber</rt></ruby>”)。那可能是我做过的最脏的工作了,但是给飞机装载还是挺酷的。有一个离地面约两米的小挡板,你可以在把填充软管连接到接头后把手指伸进去。然后泵上的人启动泵。当你觉得你的手指湿了,就挥手让管理泵的人停止泵。与此同时,在你前方几米处运行的右侧径向引擎噪音极大,螺旋桨吹掉了你身上因混合阻燃剂而积聚的红色粉尘。如果你搞砸了,让飞机装得太满,他们就得滑到一块地方,把货卸在那里,否则他们会太重而无法起飞。
另外两个夏天我在当地的百事可乐、七喜、Orange Crush 经销商那里工作,给商店和餐馆送一箱箱的软饮料。这绝对是我做过的最重的体力活了。想想看,在一辆手推车上堆放着五层高的木箱,每个木箱里装着一打 750 毫升的软饮料玻璃瓶。想想把它搬到二楼的餐厅,想想那家餐厅每周要运 120 箱……爬 24 次楼,然后又带着所有的空瓶子下来。一辆小卡车上通常会有 300 箱左右的软饮料。我们的工资是按载重计算的,而不是按小时计算的,所以我们的目标是早点完工,然后去海滩。
### 我的技术工作
送苏打水是我大学期间最后一份暑期工作。第二年我毕业了,获得了数学学位,还修了很多计算机课程,尤其是数值分析。我在技术领域的第一份工作,是为一家小型电脑服务咨询公司工作。我用 SPSS 对一些运动钓鱼调查做了一些分析,写了几百行 PL/1在我们按时间租来的服务部门的 IBM 3800 激光打印机上打印演唱会门票,并开始研究一些程序来分析森林统计数据。我最终为需要林业统计的客户工作,在 20 世纪 80 年代中期成为合伙人。那时我们已经不仅仅是测量树木,也不再使用<ruby>分时服务部门<rt>timesharing bureau</rt></ruby>来进行计算了。我们买了一台 UNIX 小型计算机,我们在 80 年代后期升级到 SUN 工作站网络。
我在一个大型开发项目上工作了一段时间,它的总部设在马来西亚吉隆坡。然后我们买了第一个地理信息系统,在 80 年代末和 90 年代,我的大部分时间都在和我们的客户一起工作,他们需要定制软件来满足他们的业务需求。到了 21 世纪初,我的三个老合伙人都准备退休了,我试图弄明白,我是如何融入我们这个不再是小公司的,大约 200 名员工的长期图景。我们新的员工老板也不明白这一点2002 年,我来到智利,想看看智利-加拿大自由贸易协定,是否提供了一个合理的机会,把我们的部分业务转移到拉丁美洲。
该业务在 2004 年正式成立。与此同时,加拿大的母公司由于一些投资组合受到严重影响,在 2007-2009 年的经济衰退的情况下,这些投资似乎不再那么明智,它在 2011 年被迫倒闭。然而,那时候,智利子公司还在经营,所以我们原来的雇员和我成了合伙人,通过资产出售买下了它。直到今天,它仍在运行,在社会环境领域做了很多很酷的事情,我经常参与其中,特别是当我可靠的数学和计算背景有用的时候。
作为一个副业,我为一个在印度以买卖赛马为业的人开发和支持一个赛马信息系统。
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/5/weird-jobs-tech
作者:[Chris Hermansen][a]
选题:[lujun9972][b]
译者:[MM-BCY](https://github.com/MM-BCY)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/clhermansen
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yellow_plane_fly_air.jpg?itok=pEcrCVJT (Yellow plane flying in the air, Beechcraft D17S)
[2]: https://worldairphotography.wordpress.com/2016/08/22/air-tanker-history-in-canada-part-one/amp/

View File

@ -0,0 +1,79 @@
[#]: subject: (Jim Hall: How Do You Fedora?)
[#]: via: (https://fedoramagazine.org/jim-hall-how-do-you-fedora/)
[#]: author: (Karimi Hari Priya https://fedoramagazine.org/author/haripriya21/)
[#]: collector: (lujun9972)
[#]: translator: (zz-air)
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-13558-1.html)
Jim Hall你觉得 Fedora 怎么样?
======
![][1]
我们最近采访了 Jim Hall了解他是如何使用 Fedora 的。这个 Fedora 杂志 [系列][2] 中的一篇。该系列介绍了 Fedora 用户以及他们如何使用 Fedora 来完成任务。如果你对本系列的后继采访感兴趣,请通过 [反馈表][3] 与我们联系。
### Jim Hall 是谁?
Jim Hall 曾担任高等教育和政府部门的首席信息官超过 8 年,最近创办了咨询公司 [Hallmentum][4]。他的大部分工作包括培训、研讨会和指导,帮助新的 IT 领导者发展领导技能,也帮助当前的 IT 领导者更好地发挥领导力。除了咨询Jim 还担任大学的兼职教师目前教授管理信息系统MIS和技术与专业写作课程。
Jim 是如何成长的? Jim 童年时代的英雄来自电视和电影包括蝙蝠侠和汉索罗。Jim 长期以来最喜欢看的电影是《星球大战新希望》。Jim 说“我是一个星球大战迷。”Jim 最喜欢吃意大利菜“我喜欢意大利菜我最喜欢的意大利菜可能是炖鸡”。Jim 的观点是,诚实、创造力、想象力、好奇心和开放性是一个人所能拥有的五个好品质。
他喜欢写作,非常好的是他的日常工作主要是写作。他花了很多时间为像 OpenSource.com、 CloudSavvy IT 和 Linux Magazine 等网站撰写“如何”类文章。现在他正在写一本关于 C 编程的书。除了写作,他还玩电子游戏来放松。他有一台 PlayStation 4 游戏机,大多数周六下午他都会坐在电视机前玩游戏。
### Fedora 社区
Jim 从 1993 年开始使用 Linux。他的第一个 Linux 发行版是 Softlanding Linux SystemSLS1.03,运行 Linux 内核 0.99,补丁级别 11。“从那以后我一直是家里的全职 Linux 用户”。Jim 在很久以前参加了 Fedora Core 时代的一个 Linux 会议之后,开始更多参与到 Fedora 中。Jim 在这遇见了 Tom “Spot” Callaway他们开始谈论 Fedora。“Spot 鼓励我用另一种方式来做贡献:找到 bug 并报告它们。这就是我参与测试所有 Beta 版本的原因”。
Jim 想在 Fedora 改变什么? 他想在 getfedora.com 上看到一个倒计时,告诉大家新的 Beta 版本或新的完整版本是什么时候发布的,这是 Fedora 项目的一个改变。并且 Jim 想让人们都知道,使用 Fedora 是多么容易。“对开源做出贡献最具挑战性的事情是弄清楚如何做出他们的第一个贡献。”Jim 补充道“我不知道我和其他开发人员一样是Fedora 项目成员’。我只是个用户。但是作为一个从 1993、1994 年就开始参与开发开源软件的人,我努力成为社区中一个有用的成员。因此,我利用一切机会尝试新的 Fedora 版本,甚至是 Beta 版,如果我发现问题,就会告诉大家。”
### 你用什么硬件?
Jim 目前正在运行一台 ThinkCentre M720 Tiny。它配置了第 8 代酷睿 i3-8100T3.10GHz6MB 缓存、32GB16GB + 16GBDDR4 2666MHz、英特尔显卡、256GB 固态硬盘 PCIe-NVME Opal M.2、英特尔 8265 802.11AC 和 蓝牙 4.2。他的显示器是华硕 VE248H。 Jim 说“这一切在Fedora上都很好用”。
他使用 Perixx Periboard-512 人体工程学经典分体式键盘,它从 1998 年开始取代了他最初的微软 Natural Keyboard Elitee PS/2 键盘。Jim 说: “我有时候会把我的 Perixx 键盘换成 Unicomp 的 IBM Model M USB 克隆键盘。我很喜欢这种带有扣动式弹簧动作的点击式键盘。我的是‘灰白色’,所以它有种经典的外观和感觉”
### 你用什么软件?
Jim 目前运行的是 Fedora 33之前是 Fedora 33 Beta 和 Fedora 32。Jim 说:“我使用 GNOME 3 作为我的桌面。我发现默认设置适合我的大多数需求,所以我没有加载任何 GNOME 扩展,但我确实使用‘设置’和 GNOME Tweaks 调整了一些东西。所以我没有做什么大的改变。例如,我将默认用户界面字体改为使用 Droid Sans Regular 字体。并且我用‘设置’来改变键盘快捷键,用 `Alt-Tab` 键来切换窗口,而不是切换应用程序。我是在 `Alt-Tab` 工作流程中长大的,所以我已经习惯了。”他使用火狐和谷歌浏览器来作为他的 Web 浏览器。
为了经营他的咨询业务Jim 依赖于一套应用程序:
* 使用 [LibreOffice][5] 去写他的书。例如,他去年出版了 《[Coaching Buttons][6]》,他完全使用 LibreOffice 来写这本书。最近他写了一本关于 [用 C 语言编写 FreeDOS 程序的书][7] 也用了 LibreOffice 。
![Libre Office Writer][15]
* [INKSCAPE][8] 为他创建了矢量格式的公司标志。他的标志可以完美地放大缩小,从文件上的小角落图像到大幅面的海报或横幅。并且 INKSCAPE 允许他导出各种通用格式。Jim 说他的广告合作伙伴很欣赏 INKSCAPE 可以输出到EPSEncapsulated Postscript这使得在产品上打印他的标志变得很容易。
* [GIMP][9] 用于其他图形,例如闪屏图片。“我的闪屏图片是我们公司的标志被放在了背景照片上,在我需要额外装饰的地方,比如印刷材料,我用它来替代普通标志。我也在我的网站上使用了闪屏图片的一个版本”。
* [QEMU][10] 用来运行虚拟机,在他那里可以启动 [FreeDOS][11]。“我喜欢使用 QEMU因为我可以在命令行中设置所有需要的选项这使我在配置虚拟机时有了很大的灵活性。为了更方便我将所有选项放入到一个脚本中用它来运行QEMU每次都是相同的选项”。
![QEMU running as easy as in FreeDOS][14]
* [Scribus][12] 是用来打印产品的。Scribus 很容易用来创建具有“全出血”的印刷品,这意味着任何颜色的背景都会与纸张的边缘重叠。全出血需要一个特殊的打印准备文件,与打印区域重叠。它甚至还提供了切割标记,以便打印机准确地知道要修剪的位置。
![Scribus Postcard][13]
--------------------------------------------------------------------------------
via: https://fedoramagazine.org/jim-hall-how-do-you-fedora/
作者:[Karimi Hari Priya][a]
选题:[lujun9972][b]
译者:[zz-air](https://github.com/zz-air)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://fedoramagazine.org/author/haripriya21/
[b]: https://github.com/lujun9972
[1]: https://fedoramagazine.org/wp-content/uploads/2020/12/PXL_20200929_205044670.PORTRAIT-01.COVER_-816x345.jpg
[2]: https://fedoramagazine.org/tag/how-do-you-fedora
[3]: https://fedoramagazine.org/submit-an-idea-or-tip
[4]: https://hallmentum.com/
[5]: https://www.libreoffice.org/
[6]: https://www.amazon.com/Coaching-Buttons-Jim-Hall/dp/0359834930
[7]: https://www.freedos.org/books/
[8]: https://inkscape.org/
[9]: https://www.gimp.org/
[10]: https://www.qemu.org/
[11]: https://www.freedos.org/
[12]: https://www.scribus.net/
[13]: https://fedoramagazine.org/wp-content/uploads/2021/03/Scribus-postcard-1024x576.png
[14]: https://fedoramagazine.org/wp-content/uploads/2021/03/QEMU-running-AsEasyAs-in-FreeDOS.png
[15]: https://fedoramagazine.org/wp-content/uploads/2021/03/LibreOffice-Writer-book-1-1024x576.png

View File

@ -3,24 +3,24 @@
[#]: author: "Sudeshna Sur https://opensource.com/users/sudeshna-sur"
[#]: collector: "lujun9972"
[#]: translator: "zepoch"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-13554-1.html"
使用 Tokei 查看有关代码的统计信息
======
了解有关项目编程语言的详细信息。
![A screen of code.][1]
> 了解有关项目编程语言的详细信息。
![](https://img.linux.net.cn/data/attachment/album/202107/06/114306ar6zjnrr92rn2vnz.jpg)
近来GitHub 添加了一个小指标来展示项目的细节,包括项目使用的编程语言。在这之前,对一个新的贡献者来说,了解他们感兴趣的项目的信息是较为困难的。
这个补充很有帮助,但是如果您想知道有关本地存储库中项目的相同信息该怎么办呢? 这正是 [Tokei][2] 派上用场的地方。这是一个当你想和精通不同语言的人想要构建一个项目时可以告诉你项目的代码数据的特别有用的工具。
### Exploring Tokei探索 Tokei
通过它的 [README][3]“Tokei 是一个可以展示你的代码数据的程序。Tokei 将会展示文件的数量,和这些文件中不同语言的代码、注释、空白的行数。“它的 v.12.1.0 release [elaborates][4] 是这样子介绍的”Tokei 是一个快速准确的代码分析 CLI 工具和库,可以使你轻松快速地在你的代码库中看到有多少空白、评论和代码行“。它能够识别超过 150 中编程语言。
### 探索 Tokei
据其 [README][3]“Tokei 是一个可以展示你的代码数据的程序。Tokei 将会展示文件的数量,和这些文件中不同语言的代码、注释、空白的行数。”它的 v.12.1.0 版本 [elaborates][4] 是这样子介绍的“Tokei 是一个快速准确的代码分析 CLI 工具和库,可以使你轻松快速地在你的代码库中看到有多少空白、评论和代码行”。它能够识别超过 150 种编程语言。
```
$ ./tokei ~/exa/src ~/Work/wildfly/jaxrs
@ -28,10 +28,10 @@ $ ./tokei ~/exa/src ~/Work/wildfly/jaxrs
Language Files Lines Code Comments Blank
Java 46 6135 4324 945 632
XML 23 5211 4839 473 224
\---------------------------------
---------------------------------
Rust
Markdown
\-----------------------------------
-----------------------------------
Total
```
@ -39,22 +39,19 @@ Total
在 Fedora 上安装 Tokei
```
`$ sudo dnf install tokei`
$ sudo dnf install tokei
```
用 Rust's Cargo 包管理器安装:
```
`$ cargo install tokei`
$ cargo install tokei
```
### 使用 Tokei
To list code statistics for the current directory:
要列出当前目录中的代码统计:
```
$ tokei
@ -92,13 +89,13 @@ $ tokei
XML 1 116 95 17 4
YAML 2 81 56 12 13
Zsh 1 59 48 8 3
\-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Markdown 55 4677 0 3214 1463
|- C 1 2 2 0 0
|- Rust 19 336 268 20 48
|- TOML 23 61 60 0 1
(Total) 5076 330 3234 1512
\-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Rust 496 210966 188958 5348 16660
|- Markdown 249 17676 1551 12502 3623
(Total) 228642 190509 17850 20283
@ -110,7 +107,6 @@ $
下面的命令打印出了支持的语言和拓展:
```
$ tokei -l
ABNF
@ -133,11 +129,8 @@ GNU Style Assembly
![Running Tokei on two files][5]
(Sudeshna Sur, [CC BY-SA 4.0][6])
默认情况下,`tokei` 仅仅输出有关语言的数据,但是使用 `--files` 标记可提供单个文件统计信息:
```
$ tokei ~/exa/src --files
===========================================================================================
@ -146,7 +139,7 @@ $ tokei ~/exa/src --files
Rust 54 9339 7070 400 1869
|- Markdown 33 1306 0 1165 141
(Total) 10645 7070 1565 2010
\-------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------
/home/ssur/exa/src/theme/default_theme.rs 130 107 0 23
/home/ssur/exa/src/output/render/times.rs 30 24 0 6
/home/ssur/exa/src/output/render/users.rs 98 76 0 22
@ -168,14 +161,14 @@ $ tokei ~/exa/src --files
/home/ssur/exa/src/options/flags.rs 84 63 6 15
/home/ssur/exa/src/fs/mod.rs 10 8 0 2
/home/ssur/exa/src/fs/feature/mod.rs 33 25 0 8
\-- /home/ssur/exa/src/output/time.rs ---------------------------------------------------------------
-- /home/ssur/exa/src/output/time.rs ---------------------------------------------------------------
|- Rust 215 170 5 40
|- Markdown 28 0 25 3
```
### 总结
我发现使用 `tokei` 来了解我的代码统计数据十分容易。另一个使用 `tokei` 的好处就是它可以用作为一个很容易集成到其他项目的库。访问 Tokei 的 [Crate.io page][7] 和 [Docs.rs][8] 网站来了解其更多用法。如果你想参与其中,你也可以通过它的 [GitHub repository][2] 来为 Tokei 作贡献。
我发现使用 `tokei` 来了解我的代码统计数据十分容易。另一个使用 `tokei` 的好处就是它可以用作为一个很容易集成到其他项目的库。访问 Tokei 的 [Crate.io page][7] 和 [Docs.rs][8] 网站来了解其更多用法。如果你想参与其中,你也可以通过它的 [GitHub 仓库][2] 来为 Tokei 作贡献。
你是否觉得 Tokei 很有用呢?可以在下方的评论区告诉我们。
@ -186,7 +179,7 @@ via: https://opensource.com/article/21/6/tokei
作者:[Sudeshna Sur][a]
选题:[lujun9972][b]
译者:[zepoch](https://github.com/zepoch)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -3,18 +3,20 @@
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-13559-1.html)
Fotoxx用于管理和编辑大型照片收藏的开源应用
Fotoxx用于管理和编辑大型照片集合的开源应用
======
![](https://img.linux.net.cn/data/attachment/album/202107/07/131024ej2kzv824zqb4zz8.jpg)
说到 [Linux 中的照片管理软件][1]Shotwell 可能是其中最有名的。难怪它在许多发行版中都预装了。
但是,如果你正在寻找一个类似 Shotwell 的应用,速度更快Fotoxx 可能是一个不错的选择。
但是,如果你正在寻找一个类似 Shotwell 而速度更快的应用Fotoxx 可能是一个不错的选择。
它可能没有一个现代的用户界面,但它在处理大量照片收藏时速度很快。这一点很重要,因为索引和显示成千上万张照片的缩略图可能需要相当多的时间和计算资源。
它可能没有一个现代的用户界面,但它在处理大量照片集合时速度很快。这一点很重要,因为索引和显示成千上万张照片的缩略图可能需要相当多的时间和计算资源。
### 用 Fotoxx 在 Linux 中管理照片并编辑它们
@ -30,19 +32,15 @@ Fotoxx用于管理和编辑大型照片收藏的开源应用
![Map view][3]
由于它专注于管理大型照片集,有几个批处理功能,可以重命名、调整大小、复制/移动、转换图像格式和编辑元数据。
由于它专注于管理大型照片集,有几个批处理功能,可以重命名、调整大小、复制/移动、转换图像格式和编辑元数据。
你可以选择图片来创建相册和幻灯片,所有这些都是在去重图片的情况下进行的。照片可以组合成 360 度的全景图。
Fotoxx 还有几个编辑功能,可以用来修饰图片,添加效果(如素描绘画)、修剪、旋转等。
Fotoxx 还有几个编辑功能,可以用来修饰图片,添加效果(如素描绘画)、修剪、旋转等。
还有一些选项可以去除旧的、扫描过的照片打印件上的红眼和尘斑。
还有一些选项可以去除旧的、扫描照片打印件上的红眼和尘斑。
我可以继续列举功能清单,但这没有结束。它的网站描述了它的全部功能,你应该去看看。
[Fotoxx Feature Overview][4]
如果你感兴趣,你可以观看这个演示 Fotoxx 功能的视频。
我可以继续列举功能清单,但这太长了。它的网站描述了它的[全部功能][4],你应该去看看。
### 在 Linux 上安装 Fotoxx
@ -60,11 +58,9 @@ sudo apt install fotoxx
![][6]
我注意到,尽管在一分钟左右的时间内索引了 4700 多张,但它并没有立即开始显示图片。我不得不**点击 Gallery-&gt;All Folders然后选择文件夹然后它就显示了图片**。所以,这一点要记住。
我注意到,尽管在一分钟左右的时间内索引了 4700 多张,但它并没有立即开始显示图片。我不得不**点击 Gallery->All Folders然后选择文件夹然后它就显示了图片**。所以,这一点要记住。
Fotoxx 是一个功能广泛的工具,你需要一些时间来适应它并探索它的所有功能。它的网站列出了几个例子,你应该看看。
[Fotoxx Feature Examples][4]
Fotoxx 是一个功能广泛的工具,你需要一些时间来适应它并探索它的[所有功能][4]。它的网站列出了几个例子,你应该看看。
正如我前面所说,它不是最漂亮的应用,但它大量的功能列表可以完成任务。如果你是一个摄影师或有大量的图片收藏,你可以试试 Fotoxx看看它是否符合你的需要。当你试过后请在评论区分享你的经验。
@ -75,7 +71,7 @@ via: https://itsfoss.com/fotoxx/
作者:[Abhishek Prakash][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

@ -1,99 +0,0 @@
[#]: subject: (Identify flowers and trees with this open source mobile app)
[#]: via: (https://opensource.com/article/21/7/open-source-plantnet)
[#]: author: (Don Watkins https://opensource.com/users/don-watkins)
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
Identify flowers and trees with this open source mobile app
======
PlantNet combines open source technology with crowdsourced knowledge to
help you become an amateur botanist.
![Fire pink flower in Maggie Valley, NC][1]
Where I live, there are lots of trails and roads lined with flowers and trees. My community is famous for its annual maple festival, and maple trees are easy for me to identify. However, there are many other trees I cannot identify by name. Flowers are the same: dandelions are easy to spot, but I don't know the names of the wildflowers that line my walking path.
Recently my wife told me about PlantNet, a mobile application that can identify these flowers and trees. It's available on iOS and Android, and it's free, so I decided to try it out.
### Identifying plants the open source way
I downloaded the app on my phone and began using it to identify some of the flowers and trees on my walks around the village. As I became familiar with the app, I noticed that the pictures I took (and those taken by other users) are shared with a Creative Commons Attribution-ShareAlike (CC-BY-SA) license. Further investigation revealed that PlantNet is [open source][2]. You can use the application anonymously if you like or become a registered member of the community.
According to the [Cos4Cloud][3] citizen science project, "PlantNet is a participatory citizen science platform for collecting, sharing, and reviewing plant observations based on automated identification. Its objective is to monitor plant biodiversity and facilitate access to plant knowledge by the general public." It uses image-recognition techniques to inventory biodiversity.
The project's development began in 2009 by botanists and computer scientists in France. It started out as a [web application][4], and the smartphone app launched in 2013. The project is part of the [Floris'Tic][5] initiative, another French project that aims to promote scientific, technical, and industrial culture in plant sciences.
PlantNet allows users to utilize a smartphone's camera to collect visual specimens, which are identified by software and the community. These photos are then shared with millions of people worldwide who are part of the PlantNet network.
The project says, "The PlantNet system works by comparing visual patterns transmitted by users via photos of plant organs (flowers, fruits, leaves …) that they seek to determine. These images are analyzed and compared to an image bank produced collaboratively and enriched daily. The system then offers a possible list of species with its illustrations."
### Using PlantNet
The mobile application is easy to use. Launch it from the app's icon on your smartphone.
![PlantNet smartphone icon][6]
(Don Watkins, [CC BY-SA 4.0][7])
When the application opens, you see the specimens you've already collected in your library. The Camera icon at the bottom of the display allows you to use your camera to add pictures to your photo library.
![Pl@ntnet homescreen][8]
(Don Watkins, [CC BY-SA 4.0][7])
Choose the Camera option, and point your phone's camera at a tree or flower you want to identify. After you take the picture, click on the option (leaf, flower, bark, fruit, and so on) that matches the specimen you want to identify.
![Selecting plant type to identify][9]
(Don Watkins, [CC BY-SA 4.0][7])
For example, if you're trying to identify a specimen by its leaf characteristics, choose **leaf**. PlantNet assigns a degree of certainty about its identification, ranging from a high to a low percentage. You can also use your smartphone's GPS function to add location information to your data collection automatically, and you can also add a note.
![Identified plant][10]
(Don Watkins, [CC BY-SA 4.0][7])
You can access all the observations you have uploaded and keep track of whether the community has approved them either on your smartphone or by logging into the website with your user ID (if you create an account). From the web interface, you can also download a record of your observations in CSV or spreadsheet formats.
![Pl@ntnet provides user stats][11]
(Don Watkins, [CC BY-SA 4.0][7])
### The great outdoors
I particularly enjoy that PlantNet links to Wikipedia so that I can read more information about the plant data I collect.
There are currently approximately 12 million PlantNet users worldwide, so the data set is growing all the time. The application is free to use for up to 500 requests per day. It also features an API that delivers data in JSON format, so you can even use PlantNet's visual identification engine as a web service.
One very nice thing about PlantNet is that it combines crowdsourced knowledge and open source technology to connect users to each other and with the great outdoors. There's no better reason to support open source software than this.
A complete description of the application and its developers is available on [YouTube][12] (in French with English subtitles). You can also learn more about the project on [PlantNet][13]'s website.
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/7/open-source-plantnet
作者:[Don Watkins][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/don-watkins
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/fire-pink-flower-maggie-valley.jpg?itok=q6Ev7TSr (Fire pink flower in Maggie Valley, NC)
[2]: https://github.com/plantnet
[3]: https://cos4cloud-eosc.eu/citizen-science-innovation/cos4cloud-citizen-observatories/plntnet/
[4]: https://identify.plantnet.org/
[5]: http://floristic.org/
[6]: https://opensource.com/sites/default/files/uploads/plantnet-icon.jpg (PlantNet smartphone icon)
[7]: https://creativecommons.org/licenses/by-sa/4.0/
[8]: https://opensource.com/sites/default/files/uploads/plantnet_camera.jpg (Pl@ntnet homescreen)
[9]: https://opensource.com/sites/default/files/uploads/plantnet_plant-type.jpg (Selecting plant type to identify)
[10]: https://opensource.com/sites/default/files/uploads/plantnet-identification.jpg (Identified plant)
[11]: https://opensource.com/sites/default/files/uploads/plantnet_user-stats.jpg (Pl@ntnet provides user stats)
[12]: https://www.youtube.com/watch?v=W_cBqaPfRFE
[13]: https://plantnet.org/

View File

@ -2,7 +2,7 @@
[#]: via: (https://opensource.com/article/21/7/invisible-passwords-python)
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )

View File

@ -0,0 +1,101 @@
[#]: subject: (Edit PDFs on the Linux command line)
[#]: via: (https://opensource.com/article/21/7/qpdf-command-line)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
Edit PDFs on the Linux command line
======
Use qpdf and poppler-utils to split, modify, and combine PDF files.
![Text editor on a browser, in blue][1]
Many of the documents you receive come in PDF format. Sometimes those PDFs need to be manipulated. For example, pages might need to be removed or added, or you might need to sign or change a specific page.
Whether good or bad, this is the reality we all live in.
There are some fancy graphical user interface tools that let you edit PDFs, but I have always been most comfortable with the command line. Of the many command-line tools for this task, the ones I use when I want to modify a PDF are `qpdf` and `poppler-utils`.
### Install
On Linux, you can install `qpdf` and `poppler-utils` using your package manager (such as `apt` or `dnf`.) For example, on Fedora:
```
`$ sudo dnf install qpdf poppler-utils`
```
On macOS, use [MacPorts][2] or [Homebrew][3]. On Windows, use [Chocolatey][4].
### qpdf
The `qpdf` command can do a lot, but I mostly use it for:
1. Splitting a PDF into separate pages
2. Concatenating, or combining, PDFs into one file
To split a PDF into separate pages:
```
`qpdf --split-pages original.pdf split.pdf`
```
This generates files like `split-01.pdf`, `split-02.pdf`, and so on. Each file is a single-page PDF file.
Concatenating files is a little subtler:
```
`qpdf --empty concatenated.pdf --pages split-*.pdf --`
```
This is what `qpdf` does by default. The `--empty` option tells qpdf to start with an empty file. The two dashes (`--`) at the end signals that there are no more files to process. This is a case where the parameters reflect an internal model, rather than what people use it for, but at least it runs and produces valid PDFs!
### poppler-utils
This package contains several utilities, but the one I use the most is [pdftoppm][5], which converts PDF files to portable pixmap (`ppm`) image files. I usually use it after I split pages with `qpdf` and need to convert a specific page to an image that I can modify. The `ppm` format is not well known, but the important thing about it is that most image manipulation methods, including [ImageMagick][6], [Pillow][7], and many other options, work with it. Most of these tools can save files back to PDF, too.
### Workflow
My usual workflow is:
* Use `qpdf` to split the PDF into pages.
* Use `poppler-utils` to convert the pages that need to be changed into images.
* Modify the images as needed and save them to PDF.
* Use `qpdf` to concatenate the pages back into one PDF.
### Other tools
There are many great open source commands to deal with PDFs, whether you're [shrinking them][8], [creating them from text files][9], [converting documents][10], or trying your best to [avoid them altogether][11]. What are your favorite open source PDF utilities? Please share them in the comments.
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/7/qpdf-command-line
作者:[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/browser_blue_text_editor_web.png?itok=lcf-m6N7 (Text editor on a browser, in blue)
[2]: https://opensource.com/article/20/11/macports
[3]: https://opensource.com/article/20/6/homebrew-mac
[4]: https://opensource.com/article/20/3/chocolatey
[5]: https://www.xpdfreader.com/pdftoppm-man.html
[6]: https://opensource.com/article/17/8/imagemagick
[7]: https://opensource.com/article/20/8/edit-images-python
[8]: https://opensource.com/article/20/8/reduce-pdf
[9]: https://opensource.com/article/20/5/pandoc-cheat-sheet
[10]: https://opensource.com/article/21/3/libreoffice-command-line
[11]: https://opensource.com/article/19/3/comic-book-archive-djvu

View File

@ -0,0 +1,265 @@
[#]: subject: (Send and receive Gmail from the Linux command line)
[#]: via: (https://opensource.com/article/21/7/gmail-linux-terminal)
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
Send and receive Gmail from the Linux command line
======
Use Mutt to send and receive email from your terminal, even if you're
using hosted service such as Gmail.
![woman on laptop sitting at the window][1]
I'm a [Mutt][2] user. I like viewing and composing emails in the convenience of my Linux terminal. With a lightweight and minimal client like Mutt, I know that I can have my email available regardless of system specifications or internet access. And because I have a Linux terminal open more often than not, my email client essentially has no footprint on my desktop real estate. It's hidden away in a [terminal tab or multiplexer pane][3], so I can ignore it when I don't need it but get to it quickly when I do need it.
A commonly perceived problem with Mutt is that most of us use hosted email accounts these days and interact with actual email protocols only superficially. Mutt (and ELM before it) was created back in simpler times, when checking email was a call to `uucp` and a glance at `/var/mail`. However, it's adapted nicely to developing technology and works well with all sorts of modern protocols like POP, IMAP, and even LDAP, so you can use Mutt even if you're using Gmail as your email host.
Because it's relatively rare to run your own email server today, and because Gmail is very common, this tutorial assumes you're using Mutt with Gmail. If you're concerned about email privacy, consider opening an account with [ProtonMail][4] or [Tutanota][5], both of which provide fully encrypted email. Tutanota has many [open source components][6], and ProtonMail provides an [IMAP bridge][7] for paid users so that you don't have to work around accessing your email outside a browser. However, many companies, schools, and organizations don't run their own email services and just use Gmail, so you may have a Gmail account whether you want one or not.
If you are [running your own email server][8], setting up Mutt is even easier than what I demonstrate in this article, so just dive right in.
### Install Mutt
On Linux, you can install Mutt from your distribution's software repository and then create a `.mutt` directory to hold its configuration files:
```
$ sudo dnf install mutt
$ mkdir ~/.mutt
```
On macOS, use [MacPorts][9] or [Homebrew][10]. On Windows, use [Chocolatey][11].
Mutt is a mail user agent (MUA), meaning its job is to read, compose, and send email to an outbound mail spool. It's the job of some other application or service to actually transfer a message to or from a mail server (although there's a lot of integration with Mutt so that it seems like it's doing all the work even when it's not.) Understanding this separation of tasks can help configuration make a little more sense.
It also explains why you must have helper applications (in addition to Mutt) depending on what service you need to communicate with. For this article, I use IMAP so that my local copy of email and my email provider's remote copy of mail remain synchronized. Should you decide to use POP instead, that configuration is even easier to configure and can be done without any external tools. IMAP integration, however, requires OfflineIMAP, a Python application available from [its GitHub repository][12].
Eventually, you'll be able to install it with the `python3 -m pip` command, but as of this writing, you must install OfflineIMAP manually because it's still being ported from Python 2 to Python 3.
OfflineIMAP requires `imaplib2`, which is also in heavy development, so I prefer doing a manual install of that, as well. The process is the same: clone the source code repository with Git, change into the directory, and install with `pip`.
First, install the `rfc6555` dependency:
```
`$ python3 -m pip install --user rfc6555`
```
Next, install `imaplib2` from source:
```
$ git clone [git@github.com][13]:jazzband/imaplib2.git
$ pushd imaplib2.git
$ python3 -m pip install --upgrade --user .
$ popd
```
Finally, install OfflineIMAP from source:
```
$ git clone [git@github.com][13]:OfflineIMAP/offlineimap3.git
$ pushd offlineimap3.git
$ python3 -m pip install --upgrade --user .
$ popd
```
If you're using Cygwin on Windows, then you must also install [Portalocker][14].
### Configure OfflineIMAP
OfflineIMAP reads the configuration file `~/.offlineimaprc` by default. A template for this file, named `offlineimap.conf`, is included in the Git repository you cloned to install OfflineIMAP. Move the example file to your home directory:
```
`$ mv offlineimap3.git/offlineimap.conf ~/.offlineimaprc`
```
Open the file in your favorite text editor and read through it. It's a well-commented file, and it's good to get familiar with the options available.
Here's my `.offlineimaprc` as an example, with comments removed for brevity. Some values may be slightly different for you, but this gives you a reasonable idea of what your end product ought to look like:
```
[general]
ui = ttyui
accounts = %your-gmail-username%
pythonfile = ~/.mutt/password_prompt.py
fsync = False
[Account %your-gmail-username%]
localrepository = %your-gmail-username%-Local
remoterepository = %your-gmail-username%-Remote
status_backend = sqlite
postsynchook = notmuch new
[Repository %your-gmail-username%-Local]
type = Maildir
localfolders = ~/.mail/%your-gmail-username%-gmail.com
nametrans = lambda folder: {'drafts':  '[Gmail]/Drafts',
                            'sent':    '[Gmail]/Sent Mail',
                            'flagged': '[Gmail]/Starred',
                            'trash':   '[Gmail]/Trash',
                            'archive': '[Gmail]/All Mail',
                            }.get(folder, folder)
[Repository %your-gmail-username%-Remote]
maxconnections = 1
type = Gmail
remoteuser = %your-gmail-username%@gmail.com
remotepasseval = '%your-gmail-API-password%'
## remotepasseval = get_api_pass()
sslcacertfile = /etc/ssl/certs/ca-bundle.crt
realdelete = no
nametrans = lambda folder: {'[Gmail]/Drafts':    'drafts',
                            '[Gmail]/Sent Mail': 'sent',
                            '[Gmail]/Starred':   'flagged',
                            '[Gmail]/Trash':     'trash',
                            '[Gmail]/All Mail':  'archive',
                            }.get(folder, folder)
folderfilter = lambda folder: folder not in ['[Gmail]/Trash',
                                             '[Gmail]/Important',
                                             '[Gmail]/Spam',
                                             ]
```
There are two replaceable values in this file: `%your-gmail-username%` and `%your-gmail-API-password%`. Replace the first with your Gmail user name. That's the part of your email address on the left of the `@gmail.com` part. You must acquire the second value from Google through a two-factor authentication (2FA) setup process (even though you don't need to use 2FA to check email).
### Set up 2FA for Gmail
Google expects its users to use the Gmail website for email, so when you attempt to access your email outside of Gmail's interface, you're essentially doing so as a developer (even if you don't consider yourself a developer). In other words, you're creating what Google considers an "app." To obtain a developer-level _app password_, you must set up 2FA; through that process, you get an app password, which Mutt can use to log in outside the usual browser interface.
For safety, you can also add a recovery email address. To do that, go to Google's [Account Security page][15] and scroll down to **Recovery email**.
To set up 2FA, go back to the Account Security page, and click on **2-step Verification** to activate and configure it. This requires a mobile phone for setup.
After activating 2FA, you get a new Google Account Security option: **App passwords**. Click on it to create a new app password for Mutt. Google generates the password for you, so copy it and paste it into your `.offlineimaprc` file in the place of the `%your-gmail-API-password%` value.
Placing your API password in your `.offlineimaprc` file stores it in plain text, which can be dangerous. For a long while, I did this and felt fine about it because my home directory is encrypted. However, in the interest of better security, I now encrypt my API password with GnuPG. That's somewhat beyond the scope of this article, but I've written an article demonstrating how to [set up GPG password integration][16].
### Enable IMAP in Gmail
There's one last thing before you can say goodbye to the Gmail web interface forever: You must enable IMAP access to your Gmail account.
To do this, go to the Gmail web interface, click the "cog" icon in the upper-right corner, and select **See all settings**. In Gmail **Settings**, click the **POP/IMAP** tab, and enable the radio button next to **Enable IMAP**. Save your settings.
Now Gmail is configured to give you access to your email outside a web browser.
### Configure Mutt
Now that you're all set up for Mutt, you'll be happy to learn that configuring Mutt is the easy part. As with [.bashrc][17], [.zshrc][18], and .emacs files, there are many examples of very good .muttrc files available on the internet. For my configuration file, I borrowed options and ideas from [Kyle Rankin][19], [Paul Frields][20], and many others, so I've abbreviated my .muttrc file to just the essentials in the interest of simplicity:
```
set ssl_starttls=yes
set ssl_force_tls=yes
set from='[tux@example.com][21]'
set realname='Tux Example'
set folder = imaps://imap.gmail.com/
set spoolfile = imaps://imap.gmail.com/INBOX
set postponed="imaps://imap.gmail.com/[Gmail]/Drafts"
set smtp_url="smtp://smtp.gmail.com:25"
set move = no
set imap_keepalive = 900
set record="imaps://imap.gmail.com/[Gmail]/Sent Mail"
# Paths
set folder           = ~/.mail
set alias_file       = ~/.mutt/alias
set header_cache     = "~/.mutt/cache/headers"
set message_cachedir = "~/.mutt/cache/bodies"
set certificate_file = ~/.mutt/certificates
set mailcap_path     = ~/.mutt/mailcap
set tmpdir           = ~/.mutt/temp
set signature        = ~/.mutt/sig
set sig_on_top       = yes
# Basic Options
set wait_key = no
set mbox_type = Maildir
unset move               # gmail does that
# Sidebar Patch
set sidebar_visible = yes
set sidebar_width   = 16
color sidebar_new color221 color233
## Account Settings
# Default inbox
set spoolfile = "+example.com/INBOX"
# Mailboxes to show in the sidebar.
mailboxes +INBOX \
          +sent \
          +drafts
# Other special folder
set postponed = "+example.com/drafts"
# navigation
macro index gi "&lt;change-folder&gt;=example.com/INBOX&lt;enter&gt;" "Go to inbox"
macro index gt "&lt;change-folder&gt;=example.com/sent" "View sent"
```
Nothing in this file requires changing, but consider replacing the fake name `Tux Example` and the fake address `example.com` with something that applies to you. Copy and paste this text into a file and save it as `~/.mutt/muttrc`.
### Launch Mutt
Before launching Mutt, run `offlineimap` from a terminal to sync your computer with the remote server. The first run of this takes _a long time_, so leave it running overnight.
Once your account has synchronized, you can launch Mutt:
```
`$ mutt`
```
Mutt prompts you for permission to create the directories it needs to organize your email activity and then displays a view of your inbox.
![Mutt email client][22]
### Learn Mutt
Learning Mutt is a mixture of exploring the application and finding your favorite hacks for your .muttrc config. For example, my config file integrates Emacs for composing messages, LDAP so that I can search through contacts, GnuPG so that I can encrypt and decrypt messages, link harvesting, HTML views, and much more. You can make Mutt anything you want it to be (as long as you want it to be an email client), and the more you experiment, the more you discover.
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/7/gmail-linux-terminal
作者:[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/lenovo-thinkpad-laptop-window-focus.png?itok=g0xPm2kD (young woman working on a laptop)
[2]: http://www.mutt.org/
[3]: https://opensource.com/article/21/5/linux-terminal-multiplexer
[4]: https://protonmail.com
[5]: https://tutanota.com
[6]: https://github.com/tutao/tutanota
[7]: https://protonmail.com/bridge/
[8]: https://www.redhat.com/sysadmin/configuring-email-server
[9]: https://opensource.com/article/20/11/macports
[10]: https://opensource.com/article/20/6/homebrew-mac
[11]: https://opensource.com/article/20/3/chocolatey
[12]: https://github.com/OfflineIMAP/offlineimap3
[13]: mailto:git@github.com
[14]: https://pypi.org/project/portalocker
[15]: https://myaccount.google.com/security
[16]: https://opensource.com/article/21/6/enter-invisible-passwords-using-python-module
[17]: https://opensource.com/article/18/9/handy-bash-aliases
[18]: https://opensource.com/article/19/9/adding-plugins-zsh
[19]: https://twitter.com/kylerankin
[20]: https://twitter.com/stickster
[21]: mailto:tux@example.com
[22]: https://opensource.com/sites/default/files/mutt.png (Mutt email client)

View File

@ -0,0 +1,216 @@
[#]: subject: (Why you need to use Kubernetes schema validation tools)
[#]: via: (https://opensource.com/article/21/7/kubernetes-schema-validation)
[#]: author: (Eyar Zilberman https://opensource.com/users/eyarz)
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
Why you need to use Kubernetes schema validation tools
======
Compare schema validation tools that help you avoid misconfigurations in
your Kubernetes clusters.
![Net catching 1s and 0s or data in the clouds][1]
How do you ensure the stability of your Kubernetes (K8s) clusters? How do you know that your manifests are syntactically valid? Are you sure you don't have any invalid data types? Are any mandatory fields missing?
Most often, we become aware of these misconfigurations only at the worst time: when we're trying to deploy the new manifests.
Specialized tools and a "shift-left" approach make it possible to verify a Kubernetes schema before it's applied to a cluster. This article addresses how you can avoid misconfigurations and which tools are the best to use.
> ## TL;DR
>
> Running schema validation tests is important, and the sooner the better. If all machines (e.g., local developer environments, continuous integration [CI], etc.) have access to your Kubernetes cluster, run `kubectl --dry-run` in server mode on every code change. If this isn't possible and you want to perform schema validation tests offline, use kubeconform together with a policy-enforcement tool to have optimal validation coverage.
### Schema-validation tools
Verifying the state of Kubernetes manifests may seem like a trivial task because the Kubernetes command-line interface (CLI), kubectl, can verify resources before they're applied to a cluster. You can verify the schema by using the [dry-run][2] flag (`--dry-run=client/server`) when specifying the `kubectl create` or `kubectl apply` commands; these will perform the validation without applying Kubernetes resources to the cluster.
But I can assure you that it's actually more complex. A running Kubernetes cluster must obtain the schema for the set of resources being validated. So, when incorporating manifest verification into a CI process, you must also manage connectivity and credentials to perform the validation. This becomes even more challenging when dealing with multiple microservices in several environments (e.g., prod, dev, etc.).
[Kubeval][3] and [kubeconform][4] are CLI tools developed to validate Kubernetes manifests without requiring a running Kubernetes environment. Because kubeconform was inspired by kubeval, they operate similarly; verification is performed against pre-generated JSON schemas created from the OpenAPI specifications ([swagger.json][5]) for each Kubernetes version. All that remains [to run][6] the schema validation tests is to point the tool executable to a single manifest, directory or pattern.
![Kubeval and kubeconform ][7]
(Eyar Zilberman, [CC BY-SA 4.0][8])
### Comparing the tools
Now that you're aware of the tools available for Kubernetes schema validation, let's compare some core abilities—misconfiguration coverage, speed tests, support for different versions, Custom Resource Definitions support, and docs—in:
* kubeval
* kubeconform
* kubectl dry-run in client mode
* kubectl dry-run in server mode
#### Misconfiguration coverage
I donned my QA hat and generated some (basic) Kubernetes manifest files with some [intentional misconfigurations][9] and then ran them against all four tools.
Misconfig/Tool |
kubeval /
kubeconform
|
kubectl dry-run
in client mode
|
kubectl dry-run
in server mode
---|---|---|---
[API deprecation][10] | ✅ Caught | ✅ Caught | ✅ Caught
[Invalid kind value][11] | ✅ Caught | ❌ Didn't catch | ✅ Caught
[Invalid label value][12] | ❌ Didn't catch | ❌ Didn't catch | ✅ Caught
[Invalid protocol type][13] | ✅ Caught | ❌ Didn't catch | ✅ Caught
[Invalid spec key][14] | ✅ Caught | ✅ Caught | ✅ Caught
[Missing image][15] | ❌ Didn't catch | ❌ Didn't catch | ✅ Caught
[Wrong K8s indentation][16] | ✅ Caught | ✅ Caught | ✅ Caught
In summary: all misconfiguration was caught by `kubectl` dry-run in server mode.
Some misconfigurations were caught by everything:
* Invalid spec key: Caught successfully by everything!
* API deprecation: Caught successfully by everything!
* Wrong k8s indentation: Caught successfully by everything!
However, some had mixed results:
* Invalid kind value: Caught by Kubeval / Kubeconform but missed by Kubectl client.
* Invalid protocol type: Caught by Kubeval / Kubeconform but missed by Kubectl client.
* Invalid label value: Missed by both Kubeval / Kubeconform and Kubectl client.
* Missing image: Missed by both Kubeval / Kubeconform and Kubectl client.
Conclusion: Running kubectl dry-run in server mode caught all misconfigurations, while kubeval/kubeconform missed two of them. It's also interesting to see that running kubectl dry-run in client mode is almost useless because it's missing some obvious misconfigurations and also requires a connection to a running Kubernetes environment.
* All the schemas validation tests were performed against Kubernetes version 1.18.0.
* Because kubeconform is based on kubeval, they provide the same result when run against the files with the misconfigurations.
* kubectl is one tool, but each mode (client or server) produces a different result (as you can see from the table).
#### Benchmark speed test
I used [hyperfine][17] to benchmark the execution time of each tool. First, I ran it against all the [files with misconfigurations][18] (seven files in total). Then I ran it against [100 Kubernetes files][19] (all the files contain the same config).
Results for running the tools against seven files with different Kubernetes schema misconfigurations:
Tool | Mean | Min | Max
---|---|---|---
kubeconform | 0.2 ms ± 0.3 ms | 0.0 ms | 2.3 ms
kubeval | 1.443 s ± 1.551 s | 0.741 s | 5.842 s
kubectl --dry-run=client | 1.92 s ± 0.035 s | 1.872 s | 2.009 s
kubectl --dry-run=server | 2.288 s ± 0.027 s | 2.241 s | 2.323 s
Results for running the tools against 100 files with valid Kubernetes schemas:
Tool | Mean | Min | Max
---|---|---|---
kubeconform | 0.3 ms ± 0.3 ms | 0.0 ms | 1.9 ms
kubeval | 1.152 s ± 0.197 s | 0.989 s | 1.669 s
kubectl --dry-run=client | 1.274 s ± 0.028 s | 1.234 s | 1.313 s
kubectl --dry-run=server | 60.675 s ± 0.546 s | 60.489 s | 62.228 s
Conclusion: While kubeconform (#1), kubeval (#2), and kubectl `--dry-run=client` (#3) provide fast results on both tests, kubectl `--dry-run=server` (#4) is slower, especially when it evaluates 100 files. Yet 60 seconds for generating a result is still a good outcome in my opinion.
#### Kubernetes versions support
Both kubeval and kubeconform accept the Kubernetes schema version as a flag. Although both tools are similar (as mentioned, kubeconform is based on kubeval), one of the key differences is that each tool relies on its own set of pre-generated JSON schemas:
* **Kubeval:** [instrumenta/kubernetes-json-schema][20] (last commit: [133f848][21] on April 29, 2020)
* **Kubeconform:** [yannh/kubernetes-json-schema][22] (last commit: [a660f03][23] on May 15, 2021)
As of May 2021, kubeval supports Kubernetes schema versions only up to 1.18.1, while kubeconform supports the latest Kubernetes schema available, 1.21.0. With kubectl, it's a little bit trickier. I don't know which version of kubectl introduced the dry run, but I tried it with Kubernetes version 1.16.0 and it still worked, so I know it's available in Kubernetes versions 1.16.01.18.0.
The variety of supported Kubernetes schemas is especially important if you want to migrate to a new Kubernetes version. With kubeval and kubeconform, you can set the version and start evaluating which configurations must be changed to support the cluster upgrade.
Conclusion: The fact that kubeconform has all the schemas for all the different Kubernetes versions available—and also doesn't require Minikube setup (as kubectl does)—makes it a superior tool when comparing these capabilities to its alternatives.
### Other things to consider
#### Custom Resource Definition (CRD) support
Both kubectl dry-run and kubeconform support the [CRD][24] resource type, while kubeval does not. According to kubeval's docs, you can pass a flag to kubeval to tell it to ignore missing schemas so that it will not fail when testing a bunch of manifests where only some are resource type CRD.
#### Documentation
Kubeval is a more popular project than kubeconform; therefore, its community and [documentation][25] are more extensive. Kubeconform doesn't have official docs, but it does have a [well-written README][26] file that explains its capabilities pretty well. The interesting part is that although Kubernetes-native tools such as kubectl are usually well-documented, it was really hard to find the information needed to understand how the `dry-run` flag works and its limitations.
Conclusion: Although it's not as famous as kubeval, the CRD support and good-enough documentation make kubeconform the winner, in my opinion.
### Strategies for validating Kubernetes schema using these tools
Now that you know the pros and cons of each tool, here are some best practices for leveraging them within your Kubernetes production-scale development flow:
* ⬅️ Shift-left: When possible, the best setup is to run `kubectl --dry-run=server` on every code change. You probably can't do that because you can't allow every developer or CI machine in your organization to have a connection to your cluster. So, the second-best effort is to run kubeconform.
* 🚔 Because kubeconform doesn't cover all common misconfigurations, it's recommended to run it with a policy enforcement tool on every code change to fill the coverage gap.
* 💸 Buy vs. build: If you enjoy the [engineering overhead][27], then kubeconform + [conftest][28] is a great combination of tools to get good coverage. Alternatively, there are tools that can provide you with an out-of-the-box experience to help you save time and resources, such as [Datree][29] (whose schema validation is powered by kubeconform).
* 🚀 During the CD step, it shouldn't be a problem to connect with your cluster, so you should always run `kubectl --dry-run=server` before deploying your new code changes.
* 👯 Another option for using kubectl dry-run in server mode, without having a connection to your Kubernetes environment, is to run Minikube + `kubectl --dry-run=server`. The downside of this hack is that you must also set up the Minikube cluster like prod (i.e., same volumes, namespace, etc.), or you'll encounter errors when trying to validate your Kubernetes manifests.
_Thank you to_ [_Yann Hamon_][30] _for creating kubeconform—it's awesome! This article wouldn't be possible without you. Thank you for all of your guidance._
* * *
_This article originally appeared on [Datree.io][31] and is reprinted with permission._
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/7/kubernetes-schema-validation
作者:[Eyar Zilberman][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/eyarz
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/data_analytics_cloud.png?itok=eE4uIoaB (Net catching 1s and 0s or data in the clouds)
[2]: https://github.com/kubernetes/enhancements/blob/master/keps/sig-api-machinery/576-dry-run/README.md
[3]: https://github.com/instrumenta/kubeval/tree/master/kubeval
[4]: https://github.com/yannh/kubeconform
[5]: https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json
[6]: https://github.com/datreeio/kubernetes-schema-validation#running-schema-validation-tests
[7]: https://opensource.com/sites/default/files/uploads/kubeval-and-kubeconform.png (Kubeval and kubeconform )
[8]: https://creativecommons.org/licenses/by-sa/4.0/
[9]: https://github.com/datreeio/kubernetes-schema-validation#misconfigs
[10]: https://github.com/datreeio/kubernetes-schema-validation#api-deprecationyaml
[11]: https://github.com/datreeio/kubernetes-schema-validation#invalid-kind-valueyaml
[12]: https://github.com/datreeio/kubernetes-schema-validation#invalid-label-valueyaml
[13]: https://github.com/datreeio/kubernetes-schema-validation#invalid-protocol-typeyaml
[14]: https://github.com/datreeio/kubernetes-schema-validation#invalid-spec-keyyaml
[15]: https://github.com/datreeio/kubernetes-schema-validation#missing-imageyaml
[16]: https://github.com/datreeio/kubernetes-schema-validation#wrong-k8s-indentationyaml
[17]: https://github.com/sharkdp/hyperfine
[18]: https://github.com/datreeio/kubernetes-schema-validation/tree/main/misconfigs
[19]: https://github.com/datreeio/kubernetes-schema-validation/tree/main/benchmark
[20]: https://github.com/instrumenta/kubernetes-json-schema
[21]: https://github.com/instrumenta/kubernetes-json-schema/commit/133f84871ccf6a7a7d422cc40e308ae1c044c2ab
[22]: https://github.com/yannh/kubernetes-json-schema
[23]: https://github.com/yannh/kubernetes-json-schema/commit/a660f03314fad36fb4cbfb4fa2f9a76b7766cf51
[24]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
[25]: https://kubeval.instrumenta.dev/
[26]: https://github.com/yannh/kubeconform/blob/master/Readme.md
[27]: https://jrott.com/posts/why-buy/
[28]: https://www.conftest.dev/
[29]: https://hub.datree.io/schema-validation/?utm_source=our_blog&utm_medium=schema-validation
[30]: https://github.com/yannh
[31]: https://www.datree.io/resources/kubernetes-schema-validation

View File

@ -0,0 +1,114 @@
[#]: subject: (How to Know if Your System Uses MBR or GPT Partitioning [on Windows and Linux])
[#]: via: (https://itsfoss.com/check-mbr-or-gpt/)
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
How to Know if Your System Uses MBR or GPT Partitioning [on Windows and Linux]
======
Knowing the correct partitioning scheme of your disk could be crucial when you are installing Linux or any other operating system.
There are two popular partitioning schemes; the older MBR and the newer GPT. Most computers use GPT these days.
While creating the live or bootable USB, some tools (like [Rufus][1]) ask you the type of disk partitioning in use. If you choose GPT with an MBR disk, the bootable USB might not work.
In this tutorial, Ill show various methods to check the disk partitioning scheme on Windows and Linux systems.
### Check whether your system uses MBR or GPT on Windows systems
While there are several ways to check the disk partitioning scheme in Windows including command line ones, Ill stick with the GUI methods.
Press the Windows button and search for disk and then click on “**Create and format disk partitions**“.
![][2]
In here, **right-click on the disk** for which you want to check the partitioning scheme. In the right-click context menu, **select Properties**.
![Right click on the disk and select properties][3]
In the Properties, go to **Volumes** tab and look for **Partition style**.
![In Volumes tab, look for Partition style][4]
As you can see in the screenshot above, the disk is using GPT partitioning scheme. For some other systems, it could show MBR or MSDOS partitioning scheme.
Now you know how to check disk partitioning scheme in Windows. In the next section, youll learn to do the same in Linux.
### Check whether your system uses MBR or GPT on Linux
There are several ways to check whether a disk uses MBR or GPT partitioning scheme in Linux as well. This includes commands and GUI tools.
Let me first show the command line method and then Ill show a couple of GUI methods.
#### Check disk partitioning scheme in Linux command line
The command line method should work on all Linux distributions.
Open a terminal and use the following command with sudo:
```
sudo parted -l
```
The above command is actually a CLI-based [partitioning manager in Linux][5]. With the option -l, it lists the disks on your system along with the details about those disks. It includes partitioning scheme information.
In the output, look for the line starting with **Partition Table**:
![][6]
In the above screenshot, the disk has GPT partitioning scheme. For **MBR**, it would show **msdos**.
You learned the command line way. But if you are not comfortable with the terminal, you can use graphical tools as well.
#### Checking disk information with GNOME Disks tool
Ubuntu and many other GNOME-based distributions have a built-in graphical tool called Disks that lets you handle the disks in your system.
You can use the same tool for getting the partition type of the disk as well.
![][7]
#### Checking disk information with Gparted graphical tool
If you dont have the option to use GNOME Disks tool, no worries. There are other tools available.
One such popular tool is Gparted. You should find it in the repositories of most Linux distributions. If not installed already, [install Gparted][8] using your distributions software center or [package manager][9].
In Gparted, select the disk and from the menu select **View-&gt;Device** Information. It will start showing the disk information in the bottom-left area and this information includes the partitioning scheme.
![][10]
See, not too complicated, was it? Now you know multiple ways of figuring our whether the disks in your system use GPT or MBR partitioning scheme.
On the same note, I would also like to mention that sometimes disks also have a [hybrid partitioning scheme][11]. This is not common and most of the time it is either MBR or GPT.
Questions? Suggestions? Please leave a comment below.
--------------------------------------------------------------------------------
via: https://itsfoss.com/check-mbr-or-gpt/
作者:[Abhishek Prakash][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/abhishek/
[b]: https://github.com/lujun9972
[1]: https://rufus.ie/en_US/
[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/03/disc-management-windows.png?resize=800%2C561&ssl=1
[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/07/gpt-check-windows-1.png?resize=800%2C603&ssl=1
[4]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/07/gpt-check-windows-2-1.png?resize=800%2C600&ssl=1
[5]: https://itsfoss.com/partition-managers-linux/
[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/07/check-if-mbr-or-gpt-in-Linux.png?resize=800%2C446&ssl=1
[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/07/check-if-mbr-or-gpt-in-Linux-gui.png?resize=800%2C548&ssl=1
[8]: https://itsfoss.com/gparted/
[9]: https://itsfoss.com/package-manager/
[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/07/check-disk-partitioning-scheme-linux-gparted.jpg?resize=800%2C555&ssl=1
[11]: https://www.rodsbooks.com/gdisk/hybrid.html

View File

@ -1,36 +0,0 @@
[#]: subject: (My weird jobs before tech)
[#]: via: (https://opensource.com/article/21/5/weird-jobs-tech)
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
[#]: collector: (lujun9972)
[#]: translator: (MM-BCY)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
我在科技行业之前的奇怪工作
======
你永远不会知道从你的第一份工作到现在你会去哪里。!
在我加入技术部之前,我做过一些奇怪的工作。
我是一家飞机修理店的初级助理,这意味着我的任务就像是清洗溶剂中的脏金属零件这样(哇70年代的情况可不一样了)。我在那里最有趣的任务是在一架正在修理中的漂亮的老式比奇飞机倾斜机翼的木制副翼和水平稳定器上熨烫涤纶飞机的布料。
在大学期间的一个夏天,,我在同一个机场的一个团队工作,混合了阻燃剂,然后把它注入灭火飞机(“[水弹][2]”)。那可能是我做过的最脏的工作了,但是给飞机装货还是挺酷的。有一个小皮瓣约两米离地面,你可以把你的手指插入后,连接灌装软管的耦合。然后泵上的人启动泵。当你觉得你的手指湿了,你挥手让泵主停止泵。与此同时,在你前方几米处,右侧的辐射状引擎噪音极大,螺旋桨吹掉了你身上因混合阻燃剂而积聚的红色粉尘。如果你搞砸了,让飞机装得太满,他们就得滑到一块地方,把货卸在那里,因为它们太重了,以至于无法在其他地方起飞。
另外两个夏天我在当地的百事可乐七喜橙色粉碎经销商那里工作给商店和餐馆送一箱箱的软饮料。这绝对是我做过的体力要求最高的工作。想象一下一个五层高的木箱每个木箱里装着一打750毫升的软饮料玻璃瓶放在一辆手推车上。想象一下把它搬到二楼的餐厅想象那家餐厅每周能拿到120箱... 24次爬楼梯然后又带着空瓶子下来。一辆小卡车上通常会有300箱左右的软饮料。我们的工资是按负荷计算的不是按小时计算的所以我们的目标是早点完工然后去海滩。
我的技术工作
送苏打水是我大学期间最后一份暑期工作。第二年我毕业了,获得了数学学位,还修了很多计算机课程,尤其是数值分析。我在技术部的第一份工作,是为一家小型电脑服务顾问公司工作。我用 社会科学统计套装软件 对一些钓鱼调查做了一些分析,写了几百行程序设计语言在我们按时间租来的服务局的 ibm 3800激光打印机上打印演唱会门票并开始研究一些程序来分析森林统计。我最终为需要林业统计的客户工作在20世纪80年代中期成为合伙人。那时我们已经不仅仅是测量树木也不再使用分时局来进行计算了。我们买了一台 unix 小型计算机我们在80年代后期升级到 sun 工作站网络
我花了一些时间研究一个大型开发项目总部设在马来西亚吉隆坡。然后我们买了第一个地理信息系统在80年代末和90年代我花了大部分时间和我们的客户一起工作他们需要定制软件来满足他们的业务需求。到了21世纪初我的三个老合伙人都准备退休了我试图弄明白我是如何融入我们这个不再是小公司的大约200名员工的长期图景的。我们的新员工老板也不明白这一点2002年我来到智利想看看智利-加拿大自由贸易协定,是否提供了一个合理的机会,把我们的部分业务转移到拉丁美洲。
2004年正式成立。与此同时这家加拿大母公司受到了一系列投资的严重影响鉴于2007-2009年的经济衰退这些投资似乎不再那么明智它在2011年被迫关门。然而那时候智利子公司还在经营所以我们原来的雇员和我成了合伙人通过资产出售买下了它。直到今天它仍在运行在社会环境领域做了很多很酷的事情我经常成为其中的一部分特别是当我可靠的数学和计算背景非常有用的时候。
作为一个副业,我为一个在印度买卖赛马的出色男人,开发和支持一个赛马信息系统。
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/5/weird-jobs-tech
作者:[Chris Hermansen][a]
选题:[lujun9972][b]
译者:[MM-BCY](https://github.com/MM-BCY)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/clhermansen
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yellow_plane_fly_air.jpg?itok=pEcrCVJT (Yellow plane flying in the air, Beechcraft D17S)
[2]: https://worldairphotography.wordpress.com/2016/08/22/air-tanker-history-in-canada-part-one/amp/

View File

@ -1,81 +0,0 @@
[#]: subject: (Jim Hall: How Do You Fedora?)
[#]: via: (https://fedoramagazine.org/jim-hall-how-do-you-fedora/)
[#]: author: (Karimi Hari Priya https://fedoramagazine.org/author/haripriya21/)
[#]: collector: (lujun9972)
[#]: translator: (zz-air)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
Jim Hall: 你觉得 Fedora 怎么样?
======
![][1]
我们最近采访了 Jim Hall 关于他如何使用 Fedora. 这个部分是在一个 Fedora 杂志 [系列][2] 上。 该系列介绍了Fedora用户以及他们如何使用Fedora来完成任务。 如果您对本系列的下一期采访感兴趣,请通过 [反馈表][3] 与我们联系。
## **Jim Hall 是谁?**
Jim Hall 曾担任高等教育和政府部门的首席信息管超过8年最近创办了咨询公司 [Hallmentum][4]。 他的大部分工作包括培训、研讨会和指导帮助新的IT领导者发展领导技能也帮助当前的IT领导者更好地发挥领导能力。除了咨询 Jim 还担任大学水平的兼职教师, 目前教授管理信息系统(MIS)和技术与专业写作课程。
Jim 是怎么长大的? Jim 童年时代的英雄来自电视和电影,包括蝙蝠侠和汉索罗。 Jim 长期以来最喜欢看的电影是《星球打字:新希望》。 Jim 说:“我是一个星球大战迷” Jim 最喜欢吃意大利菜。 “我喜欢的意大利菜可能是炖鸡”。 Jim 的观点是诚实、创造力、想象力、好奇心和开放性是一个人所能拥有的五大品质。
他喜欢写作,这很好,因为他的日常工作主要是写作。 他花了很多时间为像OpenSource.com、CloudSavvy IT 和 Linux Magazine等网站撰写“如何”文章。现在他正在写一本关于C编程的书。除了写作他还玩电子游戏来放松。他有一台 PlayStation 4游戏机大多数周六下午他都会坐在电视机前玩游戏。
## **Fedora 社区**
Jim 从1993年开始使用 Linux 。 他的第一个 Linux 发行版本是软著陆 Linux 系统 (SLS) 1.03 运行 Linux 内核 0.99 补丁级别 11。 “从那以后,我一直是家里全职 Linux 用户”。 Jim在很久以前参加了Fedora核心时代的一个Linux会议之后对Fedora的参与度更高了。 Jim 和 Tom 在这遇见了“斑点” 卡拉威, 他们开始谈论 Fedora. “ 斑点鼓励我用另一种方式来做贡献找到bug并报告它们。这就是我参与测试所有Beta版本的原因”.
Jim 想在 Fedora 改变什么? 他想看到 getfedora 的倒计时。非盈利的组织网站他告诉新的Beta版本或新的完整版本合适发布是取决于Fedora项目的改变。 并且 Jim 想让人们都知道,使用 Fedora 是多容易。 “对开源做出贡献最具挑战性的事情是找出如何做出他们的第一个贡献。”Jim补充道“我不知道我和其他开发人员一样是Fedora项目成员。我只是个用户。但是作为一个从1993年或1994年就开始参与开发开源软件的人我试图成为社区中一个有帮助的成员。因此我利用一切机会尝试新的 Fedora 版本,甚至是 Beta 版,如果我发现问题,就让人们知道。”
## **你用什么硬件 ?**
Jim 目前正在运行 ThinkCentre M720 Tiny。 它配置了第8代酷睿 i3-8100T (3.10GHz, 6MB 内存), 32GB (16GB + 16GB) DDR4 2666MHz, 因特尔显卡, 256GB 固态硬盘 PCIe-NVME Opal M.2, 英特尔 8265 802.11AC, 和 蓝牙 4.2。 他的显卡是华硕 VE248H。 Jim说“这一切都很适合 Fedora”。
他使用 Perixx Periboard-512 人体工程学经典拆分键盘它从1998年开始取代了他最初的微软天然键盘精英 PS/2 键盘。Jim 说: “我有时候会把我的 Perixx 键盘换成 Unicomp 的 IBM Model M USB克隆键盘。 我很喜欢带有弯曲弹簧动作的点击键盘。 我的是“灰白色”,所以它有种经典的外观和感觉”
Jim 目前运行的是 Fedora 33 、之前的 Fedora 33 Beta 和 Fedora 32。 Jim说“我使用 GNOME 3 作为我的桌面。 我发现默认值适合我的大多数需求所以我没有加载任何GNOME 扩展, 但我确实使用设置和 GNOME 调整了一些东西。 所以我不会做什么大的改变。 例如,我将默认用户界面字体改为使用 Droid Sans Regular 字体。并且我用“设置”来改变键盘快捷键用Alt-Tab键来切换窗口而不是切换应用程序。我是在Alt-Tab工作流程中长大的所以我已经习惯了。”。 他使用火狐和谷歌浏览器来作为他的网络浏览器。
为了经营他的咨询业务Jim依赖于一套应用程序
* 使用 [LibreOffice][5] 去写他的书例如,他去年出版了 [《指导按钮》][6],他完全是用 来写这本书的。最近他写了一本关于 [用C语言编写自由DOS程序的书][7] 也用了 LibreOffice 。
* [INKSCAPE][8] 在矢量格式上用于创造他公司的标志。他的标志从文件上的小角落图像到大幅面的海报或横幅完美地上下伸缩。并且INKSCAPE允许他导出各种通用格式。Jim说他的广告合作伙伴很欣赏INKSCAPE可以输出到EPS封装的附言这使得在产品上打印他的徽标变得很容易。
* [GIMP][9] 用于其他图形,例如飞溅图片 “我的飞溅图片是我们公司的标准被放在了背景照片上并且我用它来代替我需要额外装饰的普通标志比如印刷材料。我也在我的网站上使用了splash图像的一个版本”。
* [QEMU][10] 运行一个虚拟机,在他那里可以启动 [FreeDOS][11]. “我喜欢使用QEMU因为我可以在命令行中设置所有需要的选项这使我在配置虚拟机时有了很大的灵活性。为了使这更容易我将所有选项放入一个脚本中并使用该脚本每次使用相同的选项运行QEMU。”
* [Scribus][12] 是用来打印产品的。 Scribus使用起来很容易它可以创建打印就绪的材料并带有“全出血”这意味着任何颜色的背景都会重叠在纸张的边缘。 完全出血需要一个特殊的打印准备文件重叠的打印区域。它甚至还提供切割标记,以便打印机准确地知道要修剪的位置。
![Scribus Postcard][13]
![QEMU running as easy as in FreeDOS][14]
![Libre Office Writer][15]
--------------------------------------------------------------------------------
via: https://fedoramagazine.org/jim-hall-how-do-you-fedora/
作者:[Karimi Hari Priya][a]
选题:[lujun9972][b]
译者:[zz-air](https://github.com/zz-air)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://fedoramagazine.org/author/haripriya21/
[b]: https://github.com/lujun9972
[1]: https://fedoramagazine.org/wp-content/uploads/2020/12/PXL_20200929_205044670.PORTRAIT-01.COVER_-816x345.jpg
[2]: https://fedoramagazine.org/tag/how-do-you-fedora
[3]: https://fedoramagazine.org/submit-an-idea-or-tip
[4]: https://hallmentum.com/
[5]: https://www.libreoffice.org/
[6]: https://www.amazon.com/Coaching-Buttons-Jim-Hall/dp/0359834930
[7]: https://www.freedos.org/books/
[8]: https://inkscape.org/
[9]: https://www.gimp.org/
[10]: https://www.qemu.org/
[11]: https://www.freedos.org/
[12]: https://www.scribus.net/
[13]: https://fedoramagazine.org/wp-content/uploads/2021/03/Scribus-postcard-1024x576.png
[14]: https://fedoramagazine.org/wp-content/uploads/2021/03/QEMU-running-AsEasyAs-in-FreeDOS.png
[15]: https://fedoramagazine.org/wp-content/uploads/2021/03/LibreOffice-Writer-book-1-1024x576.png

View File

@ -0,0 +1,98 @@
[#]: subject: (Identify flowers and trees with this open source mobile app)
[#]: via: (https://opensource.com/article/21/7/open-source-plantnet)
[#]: author: (Don Watkins https://opensource.com/users/don-watkins)
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
用这个开源移动应用来识别花草和树木
======
PlantNet 将开源技术与众包知识结合起来,帮助你成为业余植物学家。
![Fire pink flower in Maggie Valley, NC][1]
在我居住的地方,有很多小路和道路两旁都有花草树木。我所在的社区因其每年的枫树节而闻名,枫树对我来说很容易识别。然而,还有许多其他的树我无法识别名字。花也是如此:蒲公英很容易发现,但我不知道在我的步行道上的野花的名字。
最近,我的妻子告诉我了 PlantNet一个可以识别这些花草和树木的移动应用。它可以在 iOS 和 Android 上使用,而且是免费的,所以我决定试试。
### 以开源的方式识别植物
我在手机上下载了这个应用程序,开始用它来识别我在村子周围散步时的一些花草和树木。随着我对这个应用的熟悉,我注意到我拍摄的图片(以及其他用户拍摄的图片)是以知识共享署名-相同方式共享CC-BY-SA的许可方式共享的。进一步的调查显示PlantNet 是[开源][2]的。如果你喜欢,你可以匿名使用该应用,或者成为社区的注册成员。
根据 [Cos4Cloud][3] 公民科学项目“PlantNet 是一个参与性的公民科学平台,用于收集、分享和审查基于自动识别的植物观察结果。它的目标是监测植物的生物多样性,促进公众对植物知识的获取”。它使用图像识别技术来清点生物多样性。
该项目的开发始于 2009 年,由法国的植物学家和计算机科学家进行。它最初是一个[网络应用][4],而智能手机应用程序于 2013 年推出。该项目是 [Floris'Tic][5] 倡议的一部分,这是法国的另一个项目,旨在促进植物科学的科学、技术和工业文化。
PlantNet 允许用户利用智能手机的摄像头来收集视觉标本,并由软件和社区进行识别。然后,这些照片将与全世界数百万加入 PlantNet 网络的人分享。
该项目说“PlantNet 系统的工作原理是比较用户通过他们寻求确定的植物器官(花、果实、叶……)的照片传送的视觉模式。这些图像被分析,并与每天协作制作和充实的图像库进行比较。然后,该系统提供一个可能的物种清单及其插图”。
### 使用 PlantNet
该应用很容易使用。从你的智能手机上的应用图标启动它。
![PlantNet smartphone icon][6]
Don Watkins, [CC BY-SA 4.0][7]
当应用打开时,你会看到你已经在资料库中收集的标本。显示屏底部的相机图标允许你使用你的相机将图片添加到你的照片库。
![Pl@ntnet homescreen][8]
Don Watkins, [CC BY-SA 4.0][7]
选择“相机”选项,将手机的摄像头对准你想识别的树木或花草。拍完照后,点击与你想识别的标本相匹配的选项(叶、花、树皮、果实等)。
![Selecting plant type to identify][9]
(Don Watkins, [CC BY-SA 4.0][7])
例如,如果你想通过叶子的特征来识别一个标本,请选择**叶子**。PlantNet 对其识别的确定程度进行了分配,从高到低的百分比不等。你还可以使用你的智能手机的 GPS 功能,将位置信息自动添加到你的数据收集中,你还可以添加注释。
![Identified plant][10]
Don Watkins, [CC BY-SA 4.0][7]
你可以在你的智能手机上或通过你的用户 ID如果你创建了一个账户登录网站访问你上传的所有观测数据并跟踪社区是否批准了它们。从网站界面上你也可以下载 CSV 或电子表格格式的观察记录。
![Pl@ntnet provides user stats][11]
Don Watkins, [CC BY-SA 4.0][7]
### 很好的户外活动
我特别喜欢 PlantNet 与维基百科的链接,这样我就可以阅读更多关于我收集的植物数据的信息。
目前全球大约有 1200 万 PlantNet 用户,所以数据集一直在增长。该应用是免费使用的,每天最多有 500 个请求。它还有一个 API以 JSON 格式提供数据,所以你甚至可以把 Pl antNet 的视觉识别引擎作为一个网络服务使用。
PlantNet 的一个非常好的地方是,它结合了众包知识和开源技术,将用户相互联系起来,并与很好的户外活动联系起来。没有比这更好的理由来支持开源软件了。
关于该应用及其开发者的完整描述可在 [YouTube][12] 上找到(有法语、英文字幕)。你也可以在 [PlantNet][13] 的网站上了解更多该项目。
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/7/open-source-plantnet
作者:[Don Watkins][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/don-watkins
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/fire-pink-flower-maggie-valley.jpg?itok=q6Ev7TSr (Fire pink flower in Maggie Valley, NC)
[2]: https://github.com/plantnet
[3]: https://cos4cloud-eosc.eu/citizen-science-innovation/cos4cloud-citizen-observatories/plntnet/
[4]: https://identify.plantnet.org/
[5]: http://floristic.org/
[6]: https://opensource.com/sites/default/files/uploads/plantnet-icon.jpg (PlantNet smartphone icon)
[7]: https://creativecommons.org/licenses/by-sa/4.0/
[8]: https://opensource.com/sites/default/files/uploads/plantnet_camera.jpg (Pl@ntnet homescreen)
[9]: https://opensource.com/sites/default/files/uploads/plantnet_plant-type.jpg (Selecting plant type to identify)
[10]: https://opensource.com/sites/default/files/uploads/plantnet-identification.jpg (Identified plant)
[11]: https://opensource.com/sites/default/files/uploads/plantnet_user-stats.jpg (Pl@ntnet provides user stats)
[12]: https://www.youtube.com/watch?v=W_cBqaPfRFE
[13]: https://plantnet.org/