This commit is contained in:
Xingyu Wang 2022-01-14 22:22:47 +08:00
commit 259f693772
10 changed files with 725 additions and 262 deletions

View File

@ -3,46 +3,48 @@
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
[#]: collector: "lujun9972"
[#]: translator: "geekpi"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-14178-1.html"
2022 年学习新编程语言的 5 个提示
2021 总结:学习新编程语言的 5 个小知识
======
借助开源的力量,任何人都可以编程。找到一个你想做的项目,并让它成为你进入编程的第一个项目。
![Woman sitting in front of her computer][1]
任何人都可以开始学习编程。[我们都是从某处开始的][2],而且你不需要有计算机科学背景就可以学习编码。这就是 Linux 和开源的力量:任何人都可以学习一点编码
> 借助开源的力量,任何人都可以编程。找到一个你想做的项目,并让它成为你进入编程的第一个项目。
如果你想学习一种新的编程语言,我们有几篇很棒的文章可以让你开始学习。下面是我们最受欢迎的几篇文章,它们可以帮助到你。
![](https://img.linux.net.cn/data/attachment/album/202201/14/151030layqs229euy206sc.jpg)
任何人都可以开始学习编程。[我们都是从某个起点开始的][2],而且你不需要有计算机科学背景就可以学习编程。这就是 Linux 和开源的力量:任何人都可以学习一点编程。
如果你想学习一种新的编程语言,我们有几篇可以让你起步的很棒的文章。下面是我们最受欢迎的几篇文章,它们可以帮助到你。
### 比较编程语言
大多数编程语言都有某些相似之处。当你知道如何用一种编程语言做一件事,学习下一种编程语言主要是弄清其语法和结构。
#### [不同的编程语言如何做同样的事情][3]
#### 不同的编程语言如何做同样的事情
学习一种新的编程语言的一个好方法是写一个简单的测试程序,如一个游戏,以探索该编程语言的工作原理。我经常写的一个示例程序是一个简单的“猜数字”游戏,即计算机 在 1 到 100 之间挑选一个数字,让我猜出来。今年早些时候,我们发表了一系列文章,探讨如何用几种编程语言编写猜数字游戏。了解这些不同的编程语言如何实现“猜数字”游戏的主要步骤。
学习一种新的编程语言的一个好方法是写一个简单的测试程序,如一个游戏,以探索该编程语言的工作原理。我经常写的一个示例程序是一个简单的“猜数字”游戏,即计算机在 1 到 100 之间挑选一个数字,让我猜出来。今年早些时候,我们发表了 [一系列文章][3],探讨如何用几种编程语言编写猜数字游戏。了解这些不同的编程语言如何实现“猜数字”游戏的主要步骤。
#### [不同的编程语言如何读写数据][4]
#### 不同的编程语言如何读写数据
[Alan 的][5]文章比较了不同的编程语言如何在相同的思想下读写数据。无论这些数据是来自于配置文件还是用户创建的文件在存储设备上处理数据对于编码者来说是很常见的。Alan 的比较文章提供了对几种流行的编程语言,如 C、Java、Groovy 和其他语言所采取的不同方法的深入了解。
[Alan 的][5]文章比较了不同的编程语言如何在相同的思想下 [读写数据][4]。无论这些数据是来自于配置文件还是用户创建的文件在存储设备上处理数据对于编码者来说是很常见的。Alan 的比较文章提供了对几种流行的编程语言,如 C、Java、Groovy 和其他语言所采取的不同方法的深入了解。
### 学习一种新的编程语言
无论你是想学习一种新的编程语言,还是想探索一种现有的编程语言,请看看下面这些关于学习编程的好文章。
#### [如何用 WebAssembly 编写 “Hello World”][6]
#### 如何用 WebAssembly 编写 “Hello World”
WebAssembly 是一种字节码格式,几乎所有的浏览器都可以将其编译为主机系统的机器代码。与 JavaScript 和 WebGL 一起WebAssembly 满足了将应用移植到网络浏览器中独立使用的需求。[Stephan][7] 解释了如何用 WASM-text 创建经典的 Hello World 程序。
WebAssembly 是一种字节码格式,几乎所有的浏览器都可以将其编译为主机系统的机器代码。与 JavaScript 和 WebGL 一起WebAssembly 满足了将应用移植到网络浏览器中独立使用的需求。[Stephan][7] 解释了如何用 WASM-text 创建经典的 [Hello World 程序][6]
#### [用 Golang 轻松实现交叉编译][8]
#### 用 Golang 轻松实现交叉编译
[Gaurav][9] 写了关于通过将脚本转换为 Go 程序来学习 Go 的交叉编译支持。你可以一次写好你的程序,并通过交叉编译为另一个环境进行编译。
[Gaurav][9] 写了关于通过将脚本转换为 Go 程序来学习 [Go 的交叉编译支持][8]。你可以一次写好你的程序,并通过交叉编译为另一个环境进行编译。
#### [为什么我使用 D 编程语言来编写脚本][10]
#### 为什么我使用 D 编程语言来编写脚本
D 编程语言由于其静态类型和元编程能力,常常被认为是一种系统编程语言。然而,它也是一种非常高效的脚本语言。[Lawrence][11] 写了关于如何利用 D 编程语言进行普通的脚本编写。
D 编程语言由于其静态类型和元编程能力,常常被认为是一种系统编程语言。然而,它也是一种非常高效的脚本语言。[Lawrence][11] 写了关于如何利用 D 编程语言进行 [普通的脚本编写][10]
借助于开源的力量,编程可以被任何人所接受。找到一个你想做的项目,并让它成为你进入编程的第一个项目。
@ -53,7 +55,7 @@ via: https://opensource.com/article/22/1/learn-programming
作者:[Jim Hall][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

@ -3,36 +3,38 @@
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
[#]: collector: "lujun9972"
[#]: translator: "geekpi"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-14175-1.html"
2022 年学习 C 语言编程的 5 种方法
2021 总结:学习 C 语言编程的 5 种方法
======
只需掌握一点 C 语言的知识,你就可以做很多事情。
![Person drinking a hot drink at the computer][1]
> 只需掌握一点 C 语言的知识,你就可以做很多事情。
![](https://img.linux.net.cn/data/attachment/album/202201/13/192104tb962skk0mm4r44q.jpg)
我精通几种编程语言,但我最喜欢的是 C 语言。C 语言开发于 20 世纪 70 年代,作为一种系统编程语言,在 2021 年仍然是最受欢迎的编程语言之一。如果你想探索 C 语言的几个特点,可以从去年的这些热门文章开始:
在 C 语言中使用 getopt 进行短选项解析][2]
### 在 C 语言中使用 getopt 进行短选项解析
如果你的程序每次运行时都能对用户作出反应,你就可以使它变得更加灵活。让你的用户告诉你的程序使用什么文件或如何以不同的方式做事情。为此,你需要读取命令行。这篇文章告诉你如何使用 `argv` 直接读取命令行,并使用 `getopt` 读取短命令行选项。
如果你的程序每次运行时都能对用户作出反应,你就可以使它变得更加灵活。让你的用户告诉你的程序使用什么文件或如何以不同的方式做事情。为此,你需要读取命令行。[这篇文章][2] 告诉你如何使用 `argv` 直接读取命令行,并使用 `getopt` 读取短命令行选项。
[在 Linux 中用 ncurses 定位屏幕上的文本][3]
### 在 Linux 中用 ncurses 定位屏幕上的文本
大多数 Linux 工具只是从屏幕的底部滚动文本。但如果你想在屏幕上定位文本,比如游戏或数据显示,该怎么办?这就是 `ncurses` 的作用。
大多数 Linux 工具只是从屏幕的底部滚动文本。但如果你想在屏幕上定位文本,比如游戏或数据显示,该怎么办?这就是 [ncurses][3] 的作用。
[用 DOS conio 开始编程][4]
### 用 DOS conio 开始编程
C 语言并不只适用于 Linux。你可以在许多操作系统上找到 C包括 DOS。许多 C 程序员控制控制台输入和输出的标准方法是使用 `conio` 库。学习如何使用 `conio` 来更新 DOS 程序的控制台,包括文本颜色和文本窗口。
C 语言并不只适用于 Linux。你可以在许多操作系统上找到 C包括 DOS。许多 C 程序员控制控制台输入和输出的标准方法是使用 `conio` 库。学习如何 [使用 conio` 来更新 DOS 程序的控制台][4],包括文本颜色和文本窗口。
[使用位域和掩码编写国际象棋游戏][5]
### 使用位域和掩码编写国际象棋游戏
在 C 语言程序中关联信息的标准方法是使用一个结合了两个或多个相关字段的结构体。例如,你可以用一个结构体来跟踪棋盘上的棋子。但是有一种更直接的方法来跟踪同样的信息,同时使用更少的数据和内存。使用二进制位域和掩码,你可以存储一个单一的值来识别每个方格中的棋子和颜色。
在 C 语言程序中关联信息的标准方法是使用一个结合了两个或多个相关字段的结构体。例如,你可以用一个结构体来跟踪棋盘上的棋子。但是有一种更直接的方法来跟踪同样的信息,同时使用更少的数据和内存。使用 [二进制位域和掩码][5],你可以存储一个单一的值来识别每个方格中的棋子和颜色。
[C 语言编程中的 5 个常见错误以及如何修复它们][6]
### C 语言编程中的 5 个常见错误以及如何修复它们
即使是最好的程序员也会产生编程错误。根据你的程序所做的事情,这些 bug 可能会引入安全漏洞,导致程序崩溃,或产生意外的行为。但是,通过一点额外的代码,你可以避免最常见和最严重的 C 语言编程错误。这里有五个可能破坏你的应用的 bug 以及你如何避免它们。
即使是最好的程序员也会产生编程错误。根据你的程序所做的事情,这些 bug 可能会引入安全漏洞,导致程序崩溃,或产生意外的行为。但是,通过一点额外的代码,你可以避免最常见和最严重的 C 语言编程错误。这里有 [五个可能破坏你的应用的 bug 以及你如何避免它们][6]
只需一点 C 语言知识,你就可以做很多事情。探索新的方法,为你的下一个 C 语言编程项目增加功能。
@ -43,7 +45,7 @@ via: https://opensource.com/article/22/1/c-programming
作者:[Jim Hall][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,135 @@
[#]: subject: "Here are the New Features Coming to Ubuntu 22.04 LTS"
[#]: via: "https://itsfoss.com/ubuntu-22-04-release-features/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lujun9972"
[#]: translator: "wxy"
[#]: reviewer: "wxy"
[#]: publisher: "wxy"
[#]: url: "https://linux.cn/article-14177-1.html"
即将出现在 Ubuntu 22.04 LTS 中的新功能
======
> 这是一篇持续更新的文章,其中列出了即将发布的 Ubuntu 22.04 LTS “Jammy Jellyfish” 中增加的所有主要功能。
![](https://img.linux.net.cn/data/attachment/album/202201/14/111922mmsbgysrekae996b.jpg)
Ubuntu 的粉丝们!现在是时候为下一个大版本,也就是 Ubuntu 22.04 LTS 感到激动了。是的。这是一个长期支持版本,它将被支持五年,直到 2027 年 4 月。
即将发布的 LTS 版本带来了一些新的功能。如果你正在使用 Ubuntu 20.04 LTS你会注意到许多视觉上的变化。如果你正在使用 Ubuntu 21.10,你已经看到了大量的变化,但在这个即将发布的版本中仍然会有一些新的变化。
在我向你展示 22.04 中新的预期新功能之前,让我们看看它将在什么时候发布。
### Ubuntu 22.04 发布时间表
Ubuntu 22.04 的稳定版计划于 2022 年 4 月 21 日发布。开发工作已经在紧锣密鼓地进行,它将遵循如下发布时间表:
* 2022 年 2 月 24 日:功能冻结
* 2022 年 3 月 17 日:用户界面冻结
* 2022 年 3 月 31 日:测试版发布
* 2022 年 4 月 14 日:候选版本
* **2022 年 4 月 21 日:最终稳定版本**
现在你知道了重要的发布日期,是时候了解一下 Ubuntu 22.04 LTS 将带来的新功能了。
### Ubuntu 22.04 LTS “Jammy Jellyfish” 的新功能
由于开发工作仍在进行中,许多新功能会在不久的将来陆续加入。我将在它们被发现时进行更新。
现在,这里是 Ubuntu 22.04 中主要的已确认和预期的新功能。
#### GNOME 42 和随之而来的视觉变化
GNOME 42 将于 2022 年 3 月发布。它将被包含在 Ubuntu 22.04 中。
像往常一样Ubuntu 将使用定制的 GNOME 版本,所以不是所有的 GNOME 42 的变化都会反映在这里。然而,由于使用了新的 libadwaita 和迁移到了 GTK 4你还是应该看到一些视觉变化。
![GNOME 42 有一个重新打造的屏幕截图工具][1]
你应该看到一个界面崭新的设置程序和重新打造的屏幕截图工具。GNOME 42 还将更新一些 GNOME 应用程序,如 Boxes并引入一个新的文本编辑器。然而我认为 Ubuntu 会坚持使用 Gedit 作为其默认的文本编辑器。
#### Grub 2.06 和它带来的麻烦
Ubuntu 22.04 LTS 将拥有 [Grub 引导加载程序][2] 2.06 版本,但其中有一个问题,它的 os-prober 功能默认是禁用的。
这意味着如果你在一个双启动系统上Grub 不会探测其他操作系统,因此它不会在 Grub 中列出 Windows或其他操作系统。一些升级到 Ubuntu 22.04 开发版本的人已经 [开始面临这个问题][3]。
这并不是说这个问题不能被解决,有一个变通办法。
安装 os-prober通常已经安装然后编辑 `/etc/default/grub` 文件,在这个文件中加入 `GRUB_DISABLE_OS_PROBER=false`。保存这个文件,[更新 Grub][4]Grub 现在应该可以看到其他操作系统了。
#### 新的固件更新程序
正如 [OMG! Ubuntu][5] 报道的那样Ubuntu 22.04 可能会有一个新的固件更新程序。
通常情况下GNOME 软件中心能够处理固件更新,即使在 Ubuntu 的 Snap 版本中。尽管如此,开发团队仍在努力开发一个专门的 GUI 工具来处理固件更新。
![图片来源OMG! Ubuntu][6]
这个新工具基本上是 `fwupd` 的基于 Flutter 和 Dart 的 GUI 前端,`fwupd` 是一个命令行工具,用于获取 [Linux 供应商的固件][7]。
#### 新的安装程序
![新的 Ubuntu 安装程序][8]
这个基于 Flutter 的新安装程序已经开发了很长时间。它本来应该和 Ubuntu 21.10 一起推出,但并没如期实现。有一个单独的 Ubuntu 21.10 预览版,其中有这个新的安装程序,它将成为 Ubuntu 22.04 的默认安装程序。
新的安装程序与 Ubuntu 桌面风格无缝整合,从而使 Ubuntu 22.04 从一开始就具有更现代的外观和感觉。
#### 改进对树莓派的支持
随着 20.10 版本的发布Ubuntu 开始支持树莓派设备上运行桌面版。虽然它可以在 8GB 版本的树莓派上工作,但在 4GB 上却很吃力,在 2GB 型号上也无法工作。
随着 Ubuntu 22.04 的推出,其性能应该会得到改善,特别是它 [引入了 zswap][9]。
#### 其他变化
在软件供应方面,你应该看到一些其他变化。大多数著名的软件应该有较新的版本。其中一些是:
* OpenSSL 3.0
* Ruby 3.0
* Python 3.10
* PHP 8.1
* GCC 11预计
目前还没有确认,但更有可能的是 Ubuntu 22.04 将采用 Linux 内核 5.17。
正如我之前所说,一切正在开发中,一旦有更多的新功能被披露,我将立即更新这篇文章。
### 获取 Ubuntu 22.04 LTS
**警告**Ubuntu 22.04 仍在努力开发中,你不应该在生产机器或你的主系统上使用它。
如果你想在备用机或虚拟机上测试它,你可以从 Ubuntu 的网站上下载日常构建版。
- [下载 Ubuntu 22.04 日常构建版(不稳定)][10]
如果你在备用机上使用 Ubuntu 20.04 LTS 或 Ubuntu 21.10,你可以强制升级到开发分支。
### 你期待 Ubuntu 22.04 的哪些功能?
很明显GNOME 42 将是 Ubuntu 22.04 的最大亮点。你希望在这个新的 LTS 版本中看到哪些功能?
--------------------------------------------------------------------------------
via: https://itsfoss.com/ubuntu-22-04-release-features/
作者:[Abhishek Prakash][a]
选题:[lujun9972][b]
译者:[wxy](https://github.com/wxy)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://itsfoss.com/author/abhishek/
[b]: https://github.com/lujun9972
[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/gnome-42-screenshot-tool.png?resize=800%2C600&ssl=1
[2]: https://itsfoss.com/what-is-grub/
[3]: https://itsfoss.community/t/windows-10-boot-option-missing-in-grub-after-upgrading-to-ubuntu-22-04-developer-version/8306/5
[4]: https://itsfoss.com/update-grub/
[5]: https://www.omgubuntu.co.uk/2021/11/ubuntu-is-working-on-a-new-firmware-updater-app
[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/gnome-firmware-on-ubuntu.jpg?resize=800%2C436&ssl=1
[7]: https://fwupd.org/
[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/ubuntu-new-installer.jpeg?resize=720%2C478&ssl=1
[9]: https://www.omgubuntu.co.uk/2022/01/ubuntu-on-raspberry-pi-4-2gb-zswap
[10]: https://cdimage.ubuntu.com/daily-live/current/

View File

@ -0,0 +1,132 @@
[#]: subject: "An open source developer's guide to 12-Factor App methodology"
[#]: via: "https://opensource.com/article/21/11/open-source-12-factor-app-methodology"
[#]: author: "Richard Conn https://opensource.com/users/richardaconn-0"
[#]: collector: "lujun9972"
[#]: translator: " "
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
An open source developer's guide to 12-Factor App methodology
======
How 12 basic principles can help teams build highly scalable apps
quickly and efficiently.
![Tips and gears turning][1]
The [12-Factor App methodology][2] provides guidelines for building apps in a short time frame and for making them scalable. It was created by the developers at Heroku for use with Software-as-a-Service (SaaS) apps, web apps, and potentially Communication-Platform-as-a-Service (CPaaS) ****apps. For organizing projects effectively and managing scalable applications, the 12-Factor App methodology has powerful advantages for open source development.
### The principles of 12-Factor App methodology
The principles of 12-Factor App methodology are strict rules that act as building blocks for developing and deploying SaaS applications, and they are not constrained to any programming language or database.
#### 1: One codebase tracked in revision control, many deploys
![An infographic illustrating one codebase, represented by green lines on the left, leading into four deployments on the right, represented by green boxes. A staging environment is represented by an orange box, and production is represented by a red box][3]
Seth Kenlon CC-0
Every application should have one codebase with multiple different environments/deploys.
Developers should not develop another codebase just for the sake of setup in different environments. Different environments represent different states, but these different environments should share the same codebase.
An environment can be considered a branch in the context of Subversion Control Systems like GitLab, where many open source projects are stored. For example, you could create a single repository for a cloud VoIP application ****named VoIP-app in any central version control system, then create two branches, development, and staging, with "master" as the release branch.
#### 2: Explicitly declare and isolate dependencies
All dependencies should be declared. Your app may depend on external system tools or libraries, but there should be no _implicit_ reliance on system tools or libraries. Your app must always explicitly declare all dependencies and their correct versions.
Including dependencies in the codebase can create problems, especially in open source projects where a change in an external library may introduce errors into the codebase. For example, a codebase might use an external library without explicitly declaring this dependence or which version. If the external library is updated to a newer, untested version, this could create compatibility issues with your code. Your codebase is protected from this issue with an explicit declaration of the dependency and its correct version.
Depending on the technology stack, it's better to use a package manager to download the dependencies on your respective system by reading a dependency declaration manifest representing the dependencies' names and versions.
#### 3: Store config in the environment
When you need to support multiple environments or clients, configurations become a vital part of an application. A configuration that varies between deployments should be stored in the environment variables. This makes it easy to change between the deploys without having to change the code.
For closed source apps, this principle is beneficial, as you would not want sensitive information like database connection information, or other secret data, to be given out publicly. However, in open source development, these details are open. In this case, the advantage is that you do not need to keep changing the code repeatedly. You just set the variables in such a way that you only have to change the environment to get your codebase to run perfectly.
#### 4: Treat backing services as attached resources
All backing services (such as databases, external storage, or message queues) are treated as attached resources and are attached and detached by the execution environment. With this principle, if the location or connection details of these services change, you still don't need to change the code. The details are available in the config instead.
Backing services can be attached or detached from deploys quickly. For example, if your cloud-based erp's database is not working correctly, the developer should be able to create a new database server restored from a recent backup—without any change to the codebase.
#### 5: Strictly separate build and run stages
A 12-Factor App requires a strict separation between build, release, and run stages.
* The first stage is the _build_ ****phase. In this phase, the source code is assembled or compiled into an executable while also loading dependencies and creating assets. Every time a new code needs to be deployed, the build phase starts.
* The second stage is the _release_ ****phase. In this phase, the code produced during the build stage is combined with the deployment's current config. The resulting release contains both the build and the config and is ready for immediate execution in the execution environment.
* The third stage is the _run_ ****phase and is the final stage: the application is run in the execution environment. It should not be interrupted by any other stage.
By strictly separating these stages, we avoid code breaks and make system maintenance much more manageable.
#### 6: Execute the app as one or more stateless processes
An app is executed in an execution environment as a collection of one or more processes. These processes are stateless, with persisted data stored on a backing service, such as a database.
This is useful for open source, because a developer using a version of the app can create multinode deployments on their cloud platform for scalability. The data is not persisted in them, since data would be lost if any one of those nodes crashes.
#### 7: Export services via port binding
Your app should act as a standalone service that is independent of additional apps. It should be accessible to other services through a URL, acting as a service. In this way, your app can serve as a resource for other apps when required. Using this concept, you can build [REST APIS][4].
#### 8: Scale out via the process model
Also known as the concurrency principle, this principle indicates that each process in your app should be able to scale, restart, or clone itself.
Instead of making a process larger, a developer can create multiple processes and distribute the load of their apps among those processes. This approach allows you to build your app to handle diverse workloads by assigning each workload to a process type.
#### 9: Maximize robustness with fast startup and graceful shutdown
Your app should be built on simple processes, so developers can scale up processes while still allowing them to restart them if anything goes wrong. This makes the app's processes disposable.
Building an app on this principle means rapid deployment of code, fast elastic scaling, more agility for the release process, and robust production deploys. All of these are very helpful in an open source development environment.
#### 10: Keep development, staging, and production as similar as possible
Teams working on a project should use the same operating systems, backing services, and dependencies. This reduces the likelihood of bugs turning up, and less time is needed for development.
Putting this principle into practice could be a challenge for open source projects due to the dispersed nature of its developers, who may not be ****[able to communicate][5] about the systems, services, and dependencies they use. One possibility for reducing these differences is a development guideline suggesting what operating system, services, and dependencies to use.
#### 11: Treat logs as event streams
Logs are essential for troubleshooting production problems or understanding user behavior. However, a 12-Factor App shouldn't be concerned with the management of logs.
Instead, it should route log entries as event streams, written as standard outputs, to a separate service for analysis and archival. Robotic process automation (RPA) technologies could be useful as a third-party service to process and analyze the logs. The execution environment will decide how to process this stream. This provides greater flexibility and power for introspecting the app's behavior.
#### 12: Run admin/management tasks as one-off processes
This principle is not really related to development but is instead about app management. Admin processes should be run in an identical environment to the regular long-running processes of the app. In a local deploy, developers could use a direct shell command inside the app checkout directory to perform one-time admin processes.
### Conclusion
By developing your app using 12-Factor App methodology, you can increase efficiency and rollout faster. It may make sense to diverge from some of the guidelines in open source development, but it is best to try to follow these guidelines as strictly as possible.
Open source 12-Factor Apps are possible. One great example is [Jitsi][6][, an open source video conference platform][7], which scaled 100-fold during the pandemic with great success, was built with the 12-Factor App methodology.
--------------------------------------------------------------------------------
via: https://opensource.com/article/21/11/open-source-12-factor-app-methodology
作者:[Richard Conn][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/richardaconn-0
[b]: https://github.com/lujun9972
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/gears_devops_learn_troubleshooting_lightbulb_tips_520.png?itok=HcN38NOk (Tips and gears turning)
[2]: https://www.redhat.com/architect/12-factor-app
[3]: https://opensource.com/sites/default/files/uploads/codebase-deploy_1.png (Codebase)
[4]: https://opensource.com/article/21/9/ansible-rest-apis
[5]: https://opensource.com/article/21/10/global-communication-open-source
[6]: https://jitsi.org/
[7]: http://jitsi.org

View File

@ -2,7 +2,7 @@
[#]: via: "https://opensource.com/article/22/1/python-roundup"
[#]: author: "Sumantro Mukherjee https://opensource.com/users/sumantro"
[#]: collector: "lujun9972"
[#]: translator: " "
[#]: translator: "geekpi"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "

View File

@ -1,87 +0,0 @@
[#]: subject: "QPrompt is a Free and Open Source Teleprompter for Video Creators"
[#]: via: "https://itsfoss.com/qprompt/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lujun9972"
[#]: translator: "geekpi"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
QPrompt is a Free and Open Source Teleprompter for Video Creators
======
These days, all sorts of people are creating video contents. From the professional YouTubers to school teachers, creating video content has become part of various job profiles.
From screen recorders to video editors, there are various tools that help create good videos. Teleprompter is also one such tool.
A teleprompter runs visual cues or even complete text so that a speaker can take hints while speaking. You might have seen news readers using the teleprompter.
There are dedicated teleprompter software that can be run on computer or mobile device.
One such software is QPrompt which is available for free on Linux, Windows and other platforms.
### QPrompt: Personal teleprompter software
![][1]
[QPrompt][2] is a teleprompter software for all kinds of video creators. Its main focus is on ease of use, and fast performance.
QPrompt works with webcams and cellphones, studio teleprompters, and tablet teleprompters. Its unique ability is to make its background transparent and that makes it excellent for video conferencing.
Heres the highlight of QPrompts features:
* Works with studio teleprompters, tablet teleprompters, webcams and phones
* Fluid motion, jitter free experience
* Make changes on the fly while prompting
* Paste from other software without hassle
* Estimates remaining time for you
* Use markers to skip to anywhere on the script
* Prompt to multiple screens, with independent mirroring
* Background transparency allows you to monitor yourself or your audience as you speak
* Built in chronometer
* Progress indicator
* Rich text formatting
* Supports writing systems of over 180 languages
The Q in QPrompt is a hint that the application is made using Qt framework. It uses [Kirigami framework][3] for the user interface. All of that makes it an excellent choice for KDE but it works the same in GNOME.
### Installing QPrompt
![QPrompt running in Ubuntu][4]
QPrompt is a free and open source software and it is available for Linux, Windows and macOS. There is also APK available for Android devices but its not stable yet.
Linux users have the choice to select between AppImage, Snap and Deb file. Flatpak package is under development at the moment of writing this article.
You can get the AppImage from the download section of the projects website:
[Download QPrompt in AppImage][2]
Other installation options are available on the release page of its GitHub repository:
[Other download options][5]
### Conclusion
I wanted to review this application on its functionality but since I have never used a teleprompter, I dont think I could test and judge all of its feature. If you have used such applications in the past, give QPrompt a try and see how it competes with other software in its category.
--------------------------------------------------------------------------------
via: https://itsfoss.com/qprompt/
作者:[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://i1.wp.com/itsfoss.com/wp-content/uploads/2022/01/QPrompt.jpg?resize=800%2C678&ssl=1
[2]: https://qprompt.app/
[3]: https://develop.kde.org/frameworks/kirigami/
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/QPrompt-screenshot.png?resize=800%2C505&ssl=1
[5]: https://github.com/Cuperino/QPrompt/releases

View File

@ -2,7 +2,7 @@
[#]: via: "https://opensource.com/article/22/1/devops-cmake"
[#]: author: "Stephan Avenwedde https://opensource.com/users/hansic99"
[#]: collector: "lujun9972"
[#]: translator: " "
[#]: translator: "robsesan"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "

View File

@ -1,137 +0,0 @@
[#]: subject: "Here are the New Features Coming to Ubuntu 22.04 LTS"
[#]: via: "https://itsfoss.com/ubuntu-22-04-release-features/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lujun9972"
[#]: translator: " "
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
Here are the New Features Coming to Ubuntu 22.04 LTS
======
_**This is a continually updated article that lists all the main features being added to the upcoming Ubuntu 22.04 LTS Jammy Jellyfish release.**_
Ubuntu fans! Its time to get excited about the next big release which is Ubuntu 22.04 LTS. Yes. It is a long term support release and it will be supported for five years till April 2027.
The upcoming LTS release brings several new features. If you are using Ubuntu 20.04 LTS, you will notice numerous visual changes. If you are using Ubuntu 21.10, you already have seen plenty of changes but there will still be a few new ones in the upcoming release.
Before I show you the new expected new features in 22.04, lets see when it will be released.
### Ubuntu 22.04 Release Schedule
The stable version of Ubuntu 22.04 is scheduled to be released on April 21, 2022. The development is already going in full swing and it will follow this release schedule:
* February 24, 2022: Feature freeze
* March 17, 2022: UI freeze
* March 31, 2022: Beta release
* April 14, 2022: Release candidate
* **April 21, 2022: Final stable release**
Now that you know the important release dates, time to know about the new features Ubuntu 22.04 LTS will be bringing.
### New features in Ubuntu 22.04 LTS Jammy Jellyfish
Since the development is still going on, many new features will be added in the near future. Ill update them as they are revealed.
For now, here are the main confirmed and expected new features in Ubuntu 22.04.
#### GNOME 42 and the visual changes that come with it
GNOME 42 will be released in March 2022. It will be included in the Ubuntu 22.04.
As always, Ubuntu will be using a customized GNOME version so not all GNOME 42 changes will be reflected here. However, you should still notice some visual changes thanks to the use of new libadwaita and GTK 4 migration.
![GNOME 42 has a revamped screenshot tool | Image Credit][1]
You should see a refreshed settings application and revamped screenshot tool. GNOME 42 will also update a number of GNOME applications like Boxes and introduce a new text editor. However, I think Ubuntu will stick with Gedit as its default text editor.
#### Grub 2.06 and the trouble that comes with it
Ubuntu 22.04 LTS will have [Grub bootloader][2] version 2.06 but there is a problem with it. It has os-prober feature disabled by default.
This means that if you are on a dual boot system, Grub wont probe for other operating systems and thus it wont list Windows (or other OS) in Grub. A few people, who upgraded to the development version of Ubuntu 22.04, have already [started facing this issue][3].
Its not that the problem cannot be fixed. There is a workaround.
Install os-prober (usually installed already) and then edit the /etc/default/grub file to add GRUB_DISABLE_OS_PROBER=false to this file. Save this file, [update grub][4] and Grub should see other operating systems now.
#### New firmware updater app
Ubuntu 22.04 is likely to have a new firmware updater app as [reported by OMG! Ubuntu][5].
Normally, GNOME Software Center is capable of handling firmware updates even with the Snap version in Ubuntu. Still, the development team is working on a dedicated GUI tool to handle firmware update.
![Image Courtesy: OMG! Ubuntu][6]
This new tool is basically a Flutter and Dart based GUI frontend to fwupd, which is a command line tool for getting [firmware from Linux Vendors][7].
#### New installer
![New Ubuntu Installer][8]
The new Flutter based installer has been a work in progress for quite some time now. It was supposed to be shipped with Ubuntu 21.10 but that didnt happen. There was a separate preview build of Ubuntu 21.10 that featured this new installer, and it is set to become the default installer with Ubuntu 22.04.
The new installer integrates seamlessly with the Ubuntu desktop style, thus giving Ubuntu 22.04 a more modern look and feel right from the beginning.
#### Improved support for Raspberry Pi
Ubuntu started supporting the desktop edition on Raspberry Pi devices with the release of version 20.10. While it could work on the 8 GB version of Raspberry Pi, it struggles on 4 GB and wont work on 2 GB models.
The performance should improve with Ubuntu 22.04 specially with the [introduction of zswap][9].
#### Other changes
There are a few other changes you should see in terms of software offering. There should be newer versions of most of the prominent softwares. Some of them are:
* OpenSSL 3.0
* Ruby 3.0
* Python 3.10
* PHP 8.1
* GCC 11 (expected)
There is no confirmation but its more likely that Ubuntu 22.04 will feature Linux kernel 5.17.
As I said earlier, things are in development and Ill update this article as soon as more new features are revealed.
### Getting Ubuntu 22.04 LTS
**Warning**: Ubuntu 22.04 is still under heavy development. You should not use it on a production machine or on your main system.
If you want to test it on a spare machine or in a virtual machine, you can download the daily build from Ubuntus website.
[Download Ubuntu 22.04 Daily Build (Unstable)][10]
If you are using Ubuntu 20.04 LTS or Ubuntu 21.10 on a spare machine, you could force upgrade to the development branch.
### What features you look forward to in Ubuntu 22.04?
Clearly, GNOME 42 will be the biggest highlight of Ubuntu 22.04. What features would you like to see in this new LTS release?
--------------------------------------------------------------------------------
via: https://itsfoss.com/ubuntu-22-04-release-features/
作者:[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://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/gnome-42-screenshot-tool.png?resize=800%2C600&ssl=1
[2]: https://itsfoss.com/what-is-grub/
[3]: https://itsfoss.community/t/windows-10-boot-option-missing-in-grub-after-upgrading-to-ubuntu-22-04-developer-version/8306/5
[4]: https://itsfoss.com/update-grub/
[5]: https://www.omgubuntu.co.uk/2021/11/ubuntu-is-working-on-a-new-firmware-updater-app
[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/gnome-firmware-on-ubuntu.jpg?resize=800%2C436&ssl=1
[7]: https://fwupd.org/
[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/ubuntu-new-installer.jpeg?resize=720%2C478&ssl=1
[9]: https://www.omgubuntu.co.uk/2022/01/ubuntu-on-raspberry-pi-4-2gb-zswap
[10]: https://cdimage.ubuntu.com/daily-live/current/

View File

@ -0,0 +1,329 @@
[#]: subject: "Learn Rust in 2022"
[#]: via: "https://opensource.com/article/22/1/rust-cheat-sheet"
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
[#]: collector: "lujun9972"
[#]: translator: " "
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
Learn Rust in 2022
======
If you're going to explore Rust this year, download our free Rust cheat
sheet, so you have a quick reference for the basics.
![Cheat Sheet cover image][1]
Rust is a relatively new programming language, and it's already a popular one [winning over programmers][2] from all industries. Still, it's also a language that builds on everything that's come before. Rust wasn't made in a day, after all, so even though there are concepts in Rust that seem wildly different from what you might have learned from Python, Java, C++, and so on, they all have a foundation in the same CPU and NUMA architecture you've always been (whether you know it or not) interacting with, and so some of what's new in Rust feels somehow familiar.
Now, I'm not a programmer by trade. I'm impatient yet obsessive. If a language doesn't help me get the results I want relatively quickly, I rarely find myself inspired to use it when I need to get something done. Rust tries to bring into balance two conflicting things: The modern computer's need for secure and structured code, and the modern programmer's desire to do less work while attaining more success.
### Install Rust
The [rust-lang.org][3] website has great documentation on installing Rust, but usually, it's as simple as downloading the `sh.rustup.rs` script and running it.
```
$ curl --proto '=https' --tlsv1.2 -sSf <https://sh.rustup.rs>
$ less sh.rustup.sh
$ sh ./sh.rustup.rs
```
### No classes
Rust doesn't have classes and does not use the `class` keyword. Rust does have the `struct` data type, however, its purpose is to serve as a kind of template for a collection of data. So instead of creating a class to represent a virtual object, you can use a struct:
```
struct Penguin {
    genus: String,
    species: String,
    extinct: bool,
    classified: u64,
}
```
You can use this similar to how a class is used. For instance, once a `Penguin` struct is defined, you can create instances of it, and interact with that instance:
```
struct Penguin {
    genus: String,
    species: String,
    extinct: bool,
    classified: u64,
}
fn main() {
    let p = Penguin { genus: "Pygoscelis".to_owned(),
         species: "R adeliæ".to_owned(), 
         extinct: false, 
         classified: 1841 };
    println!("Species: {}", p.species);    
    println!("Genus: {}", p.genus);
    println!("Classified in {}", p.classified);
    if p.extinct == true {
        println!("Sadly this penguin has been made extinct.");
    }
    
}
```
Using the `impl` data type in conjunction with the `struct` data type, you can implement a struct containing functions, and you can add inheritance and other class-like features.
### Functions
Functions in Rust are a lot like functions in other languages. Each one represents a discreet set of tasks that you can call upon when needed. The primary function must be called `main`.
Functions are declared using the `fn` keyword, followed by the function's name and any parameters the function accepts.
```
fn foo() {
  let n = 8;
  println!("Eight is written as {}", n);
}
```
Passing information from one function to another gets done with parameters. For instance, I've already created a `Penguin` class, and I've got an instance of a penguin as `p`, so passing the attributes of `p` from one function to another requires me to specify `p` as an accepted `Penguin` type for its destination function.
```
fn main() {
  let p = Penguin { genus: "Pygoscelis".to_owned(), 
    species: "R adeliæ".to_owned(), 
    extinct: false, classified: 1841 };
  printer(p);
}
fn printer(p: Penguin) {
  println!("Species: {}", p.species);    
  println!("Genus: {}", p.genus);
  println!("Classified in {}", p.classified);
  if p.extinct == true {
      println!("Sadly this penguin has been made extinct.");
  }
}
```
### Variables 
Rust creates immutable variables by default. That means that a variable you create cannot be changed later. This code, humble though it may be, cannot be compiled:
```
fn main() {
 let n = 6;
 let n = 5;
 }
```
However, you can declare a mutable variable with the keyword `mut`, so this code compiles successfully:
```
fn main() {
 let mut n = 6;
 println!("Value is {}", n);
 n = 5;
 println!("Value is {}", n);
}
```
### Compiler 
The Rust compiler, at least in terms of its error messages, is one of the nicest compilers available. When you get something wrong in Rust, the compiler makes a sincere effort to tell you what you did wrong. I've actually learned many nuances of Rust (insofar as I understand any nuance of Rust) just by learning from compiler error messages. Even when an error message is too obscure to learn from directly, it's almost always enough for an internet search to explain.
The easiest way to start a Rust program is to use `cargo`, the Rust package management and build system.
```
$ mkdir myproject
$ cd myproject
$ cargo init 
```
This creates the basic infrastructure for a project, most notably a `main.rs` file in the `src` subdirectory. Open this file and paste in the example code I've generated for this article:
```
struct Penguin {
    genus: String,
    species: String,
    extinct: bool,
    classified: u64,
}
fn main() {
    let p = Penguin { genus: "Pygoscelis".to_owned(), species: "R adeliæ".to_owned(), extinct: false, classified: 1841 };
    printer(p);
    foo();
}
fn printer(p: Penguin) {
    println!("Species: {}", p.species);    
    println!("Genus: {}", p.genus);
    println!("Classified in {}", p.classified);
    if p.extinct == true {
        println!("Sadly this penguin has been made extinct.");
    }
}
fn foo() {
     let mut n = 6;
 println!("Value is {}", n);
 n = 8;
  println!("Eight is written as {}", n);
}
```
To compile, use the `cargo build` command:
```
`$ cargo build`
```
To run your project, execute the binary in the `target` subdirectory, or else just use `cargo run`: 
```
$ cargo run
Species: R adeliæ
Genus: Pygoscelis
Classified in 1841
Value is 6
Eight is written as 8
```
### Crates
Much of the convenience of any language comes from its libraries or modules. In Rust, libraries get distributed and tracked as "crates". The [crates.io][4] website is a good registry of community crates.
To add a crate to your Rust project, list them in the `Cargo.toml` file. For instance, to install a random number function, I use the `rand` crate, with `*` serving as a wildcard to ensure that I get the latest version at compile time:
```
[package]
name = "myproject"
version = "0.1.0"
authors = ["Seth &lt;[seth@opensource.com][5]&gt;"]
edition = "2022"
[dependencies]
rand = "*"
```
Using it in Rust code requires a `use` statement at the top:
```
`use rand::Rng;`
```
Some sample code that creates a random seed and then a random range:
```
fn foo() {
    let mut rng = rand::thread_rng();
    let mut n = rng.gen_range(1..99);
    println!("Value is {}", n);
    n = rng.gen_range(1..99);
    println!("Value is {}", n);
}
```
You can use `cargo run` to run it, which detects the code change and triggers a new build. The build process downloads the `rand` crate and all the crates that it, in turn, depends upon, compiles the code, and then runs it:
```
$ cargo run
Updating crates.io index
Downloaded ppv-lite86 v0.2.16
Downloaded 1 crate (22.2 KB) in 1.40s
 Compiling libc v0.2.112
 Compiling cfg-if v1.0.0
 Compiling ppv-lite86 v0.2.16
 Compiling getrandom v0.2.3
 Compiling rand_core v0.6.3
 Compiling rand_chacha v0.3.1
 Compiling rand v0.8.4
 Compiling rustpenguin v0.1.0 (/home/sek/Demo/rustpenguin)
 Finished dev [unoptimized + debuginfo] target(s) in 13.97s
 Running `target/debug/rustpenguin`
Species: R adeliæ
Genus: Pygoscelis
Classified in 1841
Value is 70
Value is 35
```
### Rust cheat sheet
Rust is a supremely pleasant language. Thanks to its integration with online registries, its helpful compiler, and its almost intuitive syntax, it feels appropriately modern.
Make no mistake, though, it's also a complex language, with strict data types, strongly scoped variables, and many built-in methods. Rust is worth looking at, and if you're going to explore Rust, then you should download our free **[Rust cheat sheet][6]**, so you have a quick reference for the basics. The sooner you get started, the sooner you'll know Rust. And, of course, you should practice often to avoid getting rusty.
--------------------------------------------------------------------------------
via: https://opensource.com/article/22/1/rust-cheat-sheet
作者:[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/coverimage_cheat_sheet.png?itok=lYkNKieP (Cheat Sheet cover image)
[2]: https://opensource.com/article/20/5/rust-java
[3]: http://rust-lang.org
[4]: https://crates.io/
[5]: mailto:seth@opensource.com
[6]: https://opensource.com/downloads/rust-cheat-sheet

View File

@ -0,0 +1,87 @@
[#]: subject: "QPrompt is a Free and Open Source Teleprompter for Video Creators"
[#]: via: "https://itsfoss.com/qprompt/"
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
[#]: collector: "lujun9972"
[#]: translator: "geekpi"
[#]: reviewer: " "
[#]: publisher: " "
[#]: url: " "
QPrompt 是一款为视频创作者提供的免费和开源的提词器
======
这些天来,各种各样的人都在创建视频内容。从专业的 YouTubers 到学校教师,创建视频内容已经成为各种工作内容的一部分。
从屏幕记录器到视频编辑器,有各种工具可以帮助创建良好的视频。提词器也是这样的工具之一。
提词器可以运行视觉提示,甚至是完整的文本,这样演讲者就可以在讲话时接受提示。你可能已经看到新闻读者使用提词器。
有专门的提词器软件,可以在电脑或移动设备上运行。
QPrompt 就是这样一款软件,它可以在 Linux、Windows 和其他平台上免费使用。
### QPrompt个人提词器软件
![][1]
[QPrompt][2] 是一个提词器软件,适用于所有类型的视频创作者。它的主要重点是易用性和快速性能。
QPrompt 可与网络摄像头和手机、演播室提词器和平板提词器一起使用。它的独特能力是使其背景透明,这使得它在视频会议上表现出色。
以下是 QPrompt 的亮点功能:
* 可与演播室提词器、平板提词器、网络摄像头和电话一起使用
* 流畅移动,无抖动体验
* 在提示的同时进行即时修改
* 从其他软件中粘贴,不费力气
* 为你估算剩余时间
* 使用标记来跳到脚本的任何地方
* 向多个屏幕提示,有独立的镜像功能
* 背景透明,让你在讲话时可以监视你自己或你的听众
* 内置的计时器
* 进度指示器
* 丰富的文本格式
* 支持超过 180 种语言的书写系统
QPrompt 中的 “Q” 提示该应用是使用 Qt 框架制作的。它的用户界面使用 [Kirigami 框架][3]。所有这些都使它成为 KDE 的一个很好的选择,但在 GNOME 中也是如此。
### 安装 QPrompt
![QPrompt running in Ubuntu][4]
QPrompt 是一个免费的开源软件,它可以用于 Linux、Windows和 macOS。也有适用于安卓设备的 APK但目前还不稳定。
Linux 用户可以选择 AppImage、Snap 和 Deb文件。在写这篇文章的时候Flatpak 包正在开发中。
你可以从该项目网站的下载区获得 AppImage。
[下载 AppImage 格式的 QPrompt][2]
其他安装选项可在其 GitHub 仓库的发布页面上找到:
[其他下载选项][5]
### 总结
我想对这个应用的功能进行评论,但由于我从未使用过提词器,我想我无法测试和“判断”其所有功能。如果你过去使用过这类软件,可以试试 QPrompt看看它与其他同类软件的竞争情况。
--------------------------------------------------------------------------------
via: https://itsfoss.com/qprompt/
作者:[Abhishek Prakash][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://itsfoss.com/author/abhishek/
[b]: https://github.com/lujun9972
[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2022/01/QPrompt.jpg?resize=800%2C678&ssl=1
[2]: https://qprompt.app/
[3]: https://develop.kde.org/frameworks/kirigami/
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2022/01/QPrompt-screenshot.png?resize=800%2C505&ssl=1
[5]: https://github.com/Cuperino/QPrompt/releases