mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
Merge branch 'LCTT:master' into master
This commit is contained in:
commit
ff03ef1a7f
156
published/20220105 Create bookmarks for your PDF with pdftk.md
Normal file
156
published/20220105 Create bookmarks for your PDF with pdftk.md
Normal file
@ -0,0 +1,156 @@
|
||||
[#]: subject: "Create bookmarks for your PDF with pdftk"
|
||||
[#]: via: "https://opensource.com/article/22/1/pdf-metadata-pdftk"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15973-1.html"
|
||||
|
||||
使用 pdftk 为 PDF 文档创建书签
|
||||
======
|
||||
|
||||
> 充分利用现有的技术,提供书签以帮助用户。
|
||||
|
||||
![][0]
|
||||
|
||||
在 [介绍 pdftk-java][2] 中, 我展示了如何在脚本中使用 `pdftk-java` 来快速修改 PDF 文件。
|
||||
|
||||
但是,`pdftk-java` 最有用的场景是处理那种动辄几百页的没有目录的大 PDF 文件。这里所谓的目录不是指文档前面供打印的目录,而是指显示在 PDF 阅读器侧边栏里的目录,它在 PDF 格式中的正式叫法是“<ruby>书签<rt>bookmarks</rt></ruby>”。
|
||||
|
||||
![Screenshot of a sidebar table of contents next to a PDF][3]
|
||||
|
||||
如果没有书签,就只能通过上下滚动或全局搜索文本来定位想要的章节,这非常麻烦。
|
||||
|
||||
PDF 文件的另一个恼人的小问题是缺乏元数据,比如标题和作者。如果你打开过一个标题栏上显示类似 “Microsoft Word - 04_Classics_Revisited.docx” 的 PDF 文件,你就能体会那种感觉了。
|
||||
|
||||
`pdftk-java` 让我能够创建自己的书签,我再也不面对这些问题了。
|
||||
|
||||
### 在 Linux 上安装 pdftk-java
|
||||
|
||||
正如 `pdftk-java` 的名称所示的,它是用 Java 编写的。它能够在所有主流操作系统上运行,只要你安装了 Java。
|
||||
|
||||
Linux 和 macOS 用户可以从 [AdoptOpenJDK.net][5] 安装 Java(LCTT 译注:原文为 Linux,应为笔误)。
|
||||
|
||||
Windows 用户可以安装 [Red Hat's Windows build of OpenJDK][6]。
|
||||
|
||||
在 Linux 上安装 pdftk-java:
|
||||
|
||||
1. 从 Gitlab 仓库下载 [pdftk-all.jar release][7],保存至 `~/.local/bin/` 或 [其它路径][8] 下.
|
||||
2. 用文本编辑器打开 `~/.bashrc`,添加 `alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'`
|
||||
3. 运行 `source ~/.bashrc` 使新的 Bash 设置生效。
|
||||
|
||||
### 数据转储
|
||||
|
||||
修改元数据的第一步是抽取 PDF 当前的数据文件。
|
||||
|
||||
现在的数据文件可能并没包含多少内容,但这也是一个不错的开端。
|
||||
|
||||
```
|
||||
$ pdftk mybigfile.pdf \
|
||||
data_dump \
|
||||
output bookmarks.txt
|
||||
```
|
||||
生成的 `bookmarks.txt` 文件中包含了输入 PDF 文件 `mybigfile.pdf` 的所有元数据和一大堆无用数据。
|
||||
|
||||
### 编辑元数据
|
||||
|
||||
用文本编辑器(比如 [Atom][9] 或 [Gedit][10])打开 `bookmarks.txt` 以编辑 PDF 元数据。
|
||||
|
||||
元数据的格式和数据项直观易懂:
|
||||
|
||||
```
|
||||
InfoBegin
|
||||
InfoKey: Creator
|
||||
InfoValue: Word
|
||||
InfoBegin
|
||||
InfoKey: ModDate
|
||||
InfoValue: D:20151221203353Z00&apos;00&apos;
|
||||
InfoBegin
|
||||
InfoKey: CreationDate
|
||||
InfoValue: D:20151221203353Z00&apos;00&apos;
|
||||
InfoBegin
|
||||
InfoKey: Producer
|
||||
InfoValue: Mac OS X 10.10.4 Quartz PDFContext
|
||||
InfoBegin
|
||||
InfoKey: Title
|
||||
InfoValue: Microsoft Word - 04_UA_Classics_Revisited.docx
|
||||
PdfID0: f049e63eaf3b4061ddad16b455ca780f
|
||||
PdfID1: f049e63eaf3b4061ddad16b455ca780f
|
||||
NumberOfPages: 42
|
||||
PageMediaBegin
|
||||
PageMediaNumber: 1
|
||||
PageMediaRotation: 0
|
||||
PageMediaRect: 0 0 612 792
|
||||
PageMediaDimensions: 612 792
|
||||
[...]
|
||||
```
|
||||
|
||||
你可以将 `InfoValue` 的值修改为对当前 PDF 有意义的内容。比如可以将 `Creator` 字段从 `Word` 修改为实际的作者或出版社名称。比起使用导出程序自动生成的标题,使用书籍的实际标题会更好。
|
||||
|
||||
你也可以做一些清理工作。在 `NumberOfPages` 之后的行都不是必需的,可以删除这些行的内容。
|
||||
|
||||
### 添加书签
|
||||
|
||||
PDF 书签的格式如下:
|
||||
|
||||
```
|
||||
BookmarkBegin
|
||||
BookmarkTitle: My first bookmark
|
||||
BookmarkLevel: 1
|
||||
BookmarkPageNumber: 2
|
||||
```
|
||||
|
||||
* `BookmarkBegin` 表示这是一个书签。
|
||||
* `BookmarkTitle` 书签在 PDF 阅读器中显示的文本。
|
||||
* `BookmarkLevel` 书签层级。如果书签层级为 2,它将出现在上一个书签的小三角下。如果设置为 3,它会显示在上一个 2 级书签的小三角下。这让你能为章以及其中的节设置书签。
|
||||
* `BookmarkPageNumber` 点击书签时转到的页码。
|
||||
|
||||
为你需要的章节创建书签,然后保存文件。
|
||||
|
||||
### 更新书签信息
|
||||
|
||||
现在已经准备好了元数据和书签,你可以将它们导入到 PDF 文件中。实际上是将这些信息导入到一个新的 PDF 文件中,它的内容与原 PDF 文件相同:
|
||||
|
||||
```
|
||||
$ pdftk mybigfile.pdf \
|
||||
update_info bookmarks.txt \
|
||||
output mynewfile.pdf
|
||||
```
|
||||
|
||||
生成的 `mynewfile.pdf` 包含了你设置的全部元数据和书签。
|
||||
|
||||
### 体现专业性
|
||||
|
||||
PDF 文件中是否包含定制化的元数据和书签可能并不会影响销售。
|
||||
|
||||
但是,关注元数据可以向用户表明你重视质量保证。增加书签可以为用户提供便利,同时亦是充分利用现有技术。
|
||||
|
||||
使用 `pdftk-java` 来简化这个过程,用户会感激不尽。
|
||||
|
||||
*(题图:MJ/f8869a66-562d-4ee4-9f2d-1949944d6a9c)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/1/pdf-metadata-pdftk
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-concentration-focus-windows-office.png?itok=-8E2ihcF (Woman using laptop concentrating)
|
||||
[2]: https://opensource.com/article/21/12/edit-pdf-linux-pdftk
|
||||
[3]: https://opensource.com/sites/default/files/uploads/pdtfk_update.jpeg (table of contents)
|
||||
[4]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[5]: https://adoptopenjdk.net/releases.html
|
||||
[6]: https://developers.redhat.com/products/openjdk/download
|
||||
[7]: https://gitlab.com/pdftk-java/pdftk/-/jobs/1527259628/artifacts/raw/build/libs/pdftk-all.jar
|
||||
[8]: https://opensource.com/article/17/6/set-path-linux
|
||||
[9]: https://opensource.com/article/20/12/atom
|
||||
[10]: https://opensource.com/article/20/12/gedit
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202307/06/185044ioz6nw1jqkqnhx66.jpg
|
@ -0,0 +1,255 @@
|
||||
[#]: subject: "True Lightweight Notepad for Ubuntu and Other Linux"
|
||||
[#]: via: "https://www.debugpoint.com/lightweight-notepad-linux/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15957-1.html"
|
||||
|
||||
真正轻量级的 Linux 记事本
|
||||
======
|
||||
|
||||
> 轻量级、资源友好的基于 GUI 的基本记事本列表,适用于 Ubuntu 和其他 Linux。
|
||||
|
||||
![][1]
|
||||
|
||||
Linux 是一个因其速度、稳定性和灵活性而广受欢迎的操作系统。Linux 的一个关键特点是能够根据你的需求自定义和配置系统。这包括选择适合你系统的正确应用程序和工具。本教程将介绍一些适用于 Linux 的最佳轻量级记事本。我们将查看它们的特点、优缺点,并提供选择适合你需求的正确记事本的建议。无论你是学生、程序员,还是喜欢做笔记的普通用户,一款优秀的记事本对于任何 Linux 用户来说都是必不可少的工具。
|
||||
|
||||
### Ubuntu 和其他发行版的最佳轻量级记事本
|
||||
|
||||
#### 1、Mousepad
|
||||
|
||||
该列表中的第一个是流行的文本编辑器 - Mousepad。它是 Xfce 桌面环境的默认文本编辑器,使用 GTK 开发。它简单轻便,但与本列表中的 Leafpad 相比,它具有更多的设置和功能。
|
||||
|
||||
你可以将其视为具有一些额外功能的 Leafpad。
|
||||
|
||||
其关键特点包括深浅色主题、标签式编辑、字体和插件功能。你可以在安装后和使用过程中发现更多类似的设置。
|
||||
|
||||
下面是其外观示例:
|
||||
|
||||
![在 Ubuntu 上运行的 mousepad][3]
|
||||
|
||||
由于 Mousepad 在所有主要的 Linux 发行版仓库中都可用,所以安装非常简单。
|
||||
|
||||
对于 Ubuntu、Linux Mint 和相关发行版,使用以下命令进行安装。
|
||||
|
||||
```
|
||||
sudo apt install mousepad
|
||||
```
|
||||
|
||||
对于 Fedora Linux,请使用以下命令:
|
||||
|
||||
```
|
||||
sudo dnf install mousepad
|
||||
```
|
||||
|
||||
而 Arch Linux 用户可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo pacman -S mousepad
|
||||
```
|
||||
|
||||
#### 2、Featherpad
|
||||
|
||||
[FeatherPad][4] 是一个独立于桌面环境的基于 Qt 的轻量级文本编辑器,适用于 Ubuntu 和其他 Linux 发行版。它的一些关键特性包括拖放支持、分离和附加标签、虚拟桌面感知,以及一个可选的固定搜索栏,并有每个标签的入口。
|
||||
|
||||
此外,它可以在搜索时立即突出显示找到的匹配项,提供了一个停靠窗口用于文本替换,并支持显示行号和跳转到特定行。
|
||||
|
||||
此外,Featherpad 可以检测文本编码,为常见的编程语言提供语法高亮,并支持会话管理。它还具有拼写检查(使用 Hunspell)、文本缩放、打印和自动保存等功能。
|
||||
|
||||
![在 Ubuntu 上运行的 Featherpad][5]
|
||||
|
||||
安装 Featherpad 很简单。
|
||||
|
||||
对于 Ubuntu 和相关的发行版,你可以使用终端中的以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install featherpad
|
||||
```
|
||||
|
||||
对于 Fedora Linux,请使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo dnf install featherpad
|
||||
```
|
||||
|
||||
Arch Linux 用户可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo pacman -S featherpad
|
||||
```
|
||||
|
||||
#### 3、Leafpad
|
||||
|
||||
[Leafpad][6] 是一个基于 GTK 的简单的轻量级 Linux 文本编辑器。它旨在快速、易于使用,并且需要最少的资源。Leafpad 具有干净直观的用户界面,提供了你所需的所有基本文本编辑工具,如剪切、复制和粘贴,并支持撤消和重做。此外,它还支持多种编程语言的语法高亮,使其成为程序员的有用工具。
|
||||
|
||||
由于其简单和高效性,Leafpad 是 Linux 用户的热门选择。它可能是 Windows 记事本应用程序的完美替代品。它具有所有基本功能,包括自动换行、行号、字体选择和自动缩进。
|
||||
|
||||
下面是它的外观示例。这是列表中最简单和轻量级的记事本。
|
||||
|
||||
![leafpad - 在 Ubuntu 上运行的简易记事本][7]
|
||||
|
||||
但是,在 Ubuntu 上安装 Leafpad 有些棘手。不幸的是,它在 Universe 仓库中不可用,只能作为 Snap 软件包而不是 Flatpak 软件包使用。
|
||||
|
||||
但是,你可以从 Debian 仓库中获取并在 Ubuntu 中安装它。
|
||||
|
||||
从 Debian 仓库下载 deb 文件,并使用以下命令进行安装。
|
||||
|
||||
```
|
||||
wget http://ftp.us.debian.org/debian/pool/main/l/leafpad/leafpad_0.8.18.1-5_amd64.deb
|
||||
```
|
||||
|
||||
```
|
||||
sudo dpkg -i leafpad_0.8.18.1-5_amd64.deb
|
||||
```
|
||||
|
||||
Fedora 用户可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo dnf install leafpad
|
||||
```
|
||||
|
||||
Arch Linux 用户可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo pacman -S leafpad
|
||||
```
|
||||
|
||||
#### 4、Beaver 编辑器
|
||||
|
||||
[Beaver][8] 编辑器是一个轻量级、启动快速的文本编辑器,具有极少的依赖性。它是基于 GTK+2 库构建的,不需要额外安装的库,非常适合在较旧的计算机和小型 Linux 发行版上使用。Beaver 的核心功能包括基本功能和语法高亮,还可以通过插件添加额外功能。其界面简洁高效,并包含高质量的 Tango 美术作品。
|
||||
|
||||
![Beaver 编辑器在 Ubuntu 上运行][9]
|
||||
|
||||
这是一个有些老旧的应用程序,但它仍然正常工作。目前,它仅适用于 Ubuntu 和相关的发行版。你可以下载预编译的 deb 文件,并使用以下命令进行安装:
|
||||
|
||||
```
|
||||
wget https://www.bristolwatch.com/debian/packages/beaver_amd64.deb
|
||||
```
|
||||
|
||||
```
|
||||
sudo dpkg -i beaver_amd64.deb
|
||||
```
|
||||
|
||||
#### 5、Gedit
|
||||
|
||||
[Gedit 文本编辑器][10] 是 GNOME 桌面环境的默认文本编辑器,被数百万用户在诸如 Ubuntu 和 Fedora 等各种 Linux 发行版上使用。它是核心 GNOME 应用程序的一部分,旨在成为一个轻量级的通用文本编辑器。然而,通过其设置和已安装的插件,Gedit 也包含许多增强生产力的功能,使得它能够与其他流行的文本编辑器竞争。
|
||||
|
||||
尽管如此,它最近已经从 GNOME 桌面的默认编辑器标签中“降级”。基于现代 GTK4 的 [GNOME 文本编辑器][11] 已取而代之。
|
||||
|
||||
但它仍然是最好的编辑器之一,你可以通过插件和 [各种技巧][12] 将其从简单的编辑器扩展为更高级的编辑器。
|
||||
|
||||
![Gedit 文本编辑器][13]
|
||||
|
||||
要安装它,请使用以下命令(针对 Ubuntu 和相关发行版):
|
||||
|
||||
```
|
||||
sudo apt install gedit
|
||||
```
|
||||
|
||||
对于 Fedora Linux 用户,请使用以下命令进行安装。
|
||||
|
||||
```
|
||||
sudo dnf install gedit
|
||||
```
|
||||
|
||||
最后,Arch Linux 用户可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo pacman -S gedit
|
||||
```
|
||||
|
||||
#### 6. Xed
|
||||
|
||||
如果你使用 Linux Mint,那么你可能听说过 Xed。Xed 是 Linux Mint 的默认文本编辑器,它非常轻量级。作为一个 “Xapp” 应用程序,它遵循 Linux Mint 的设计和功能指南,提供简单的用户界面、强大的菜单、工具栏和功能。
|
||||
|
||||
Xed 的一些主要特点包括:
|
||||
|
||||
- 传统的用户界面,保持简洁易用
|
||||
- 强大的工具栏和上下文菜单选项,增强功能的能力
|
||||
- 语法高亮显示
|
||||
- 配置选项,如标签、编码等
|
||||
- 支持 UTF-8 文本
|
||||
- 编辑远程服务器文件
|
||||
- 广泛的插件支持,可根据需要添加更多高级功能
|
||||
- 支持概览地图
|
||||
- 可缩放的编辑窗口
|
||||
|
||||
Xed 是最好的编辑器之一,可作为 Linux 系统上轻量级记事本的替代品。
|
||||
|
||||
![Xed 编辑器来自 Linux Mint 团队][14]
|
||||
|
||||
如果你使用的是 Linux Mint,它应该是默认安装的。然而,在 Ubuntu 中安装它需要运行一系列命令。打开终端并运行以下命令来在 Ubuntu 中安装 Xed。
|
||||
|
||||
```
|
||||
wget http://packages.linuxmint.com/pool/import/i/inxi/inxi_3.0.32-1-1_all.deb
|
||||
wget http://packages.linuxmint.com/pool/backport/x/xapp/xapps-common_2.4.2+vera_all.deb
|
||||
wget http://packages.linuxmint.com/pool/backport/x/xapp/libxapp1_2.4.2+vera_amd64.deb
|
||||
wget http://packages.linuxmint.com/pool/backport/x/xed/xed-common_3.2.8+vera_all.deb
|
||||
wget http://packages.linuxmint.com/pool/backport/x/xed/xed_3.2.8+vera_amd64.deb
|
||||
```
|
||||
|
||||
```
|
||||
sudo dpkg -i inxi_3.0.32-1-1_all.deb
|
||||
sudo dpkg -i xapps-common_2.4.2+vera_all.deb
|
||||
sudo dpkg -i libxapp1_2.4.2+vera_amd64.deb
|
||||
sudo dpkg -i xed-common_3.2.8+vera_all.deb
|
||||
sudo dpkg -i xed_3.2.8+vera_amd64.deb
|
||||
```
|
||||
|
||||
有关更多详情,请访问 [Xed 的 GitHub 存储库][15]。
|
||||
|
||||
### 内存和资源比较
|
||||
|
||||
由于我们在讨论性能,这是比较的关键,我们列出了上述所有应用程序在最新的 Ubuntu 安装中消耗的内存。
|
||||
|
||||
正如你所看到的,Xfce 的 Mousepad 最轻量级,而 Gedit 最占资源。
|
||||
|
||||
| 应用程序名称 | Ubuntu 闲置时消耗的内存 |
|
||||
| :- | :- |
|
||||
| Mousepad | 303 KB |
|
||||
| Featherpad | 1.7 MB |
|
||||
| Leafpad | 7.7 MB |
|
||||
| Beaver pad | 11.1 MB |
|
||||
| Gedit | 30.2 MB |
|
||||
| Xed | 32.1 MB |
|
||||
|
||||
### 总结
|
||||
|
||||
总之,在 Linux 上选择一个轻量级的记事本对于各种用途至关重要。无论你是需要记笔记、编写代码还是编辑文本,轻量级记事本可以让你的工作更快、更轻松、更高效。Linux 操作系统提供了各种记事本应用程序,每个应用程序都具有其独特的功能和能力。
|
||||
|
||||
这份轻量级 Linux 记事本的前几名(应用程序)列表探讨了一些应用程序,包括 Leafpad、Gedit、Mousepad 和其他应用程序。
|
||||
|
||||
无论你选择哪个记事本,你可以确信它将提供你在 Linux 系统上完成工作所需的功能。
|
||||
|
||||
你最喜欢哪个?在评论框里告诉我吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/lightweight-notepad-linux/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:ChatGPT
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/12/notepad-1head.jpg
|
||||
[2]: https://www.debugpoint.com/notepad-replacement-ubuntu/
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2022/12/mousepad-running-in-Ubuntu.jpg
|
||||
[4]: https://github.com/tsujan/FeatherPad
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2022/12/featherpad-running-in-Ubuntu.jpg
|
||||
[6]: http://tarot.freeshell.org/leafpad/v
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/12/leafpad-a-simple-notepad-running-in-Ubuntu.jpg
|
||||
[8]: https://sourceforge.net/projects/beaver-editor/
|
||||
[9]: https://www.debugpoint.com/wp-content/uploads/2022/12/Beaver-editor-running-in-Ubuntu.jpg
|
||||
[10]: https://wiki.gnome.org/Apps/Gedit
|
||||
[11]: https://www.debugpoint.com/gnome-text-editor/
|
||||
[12]: https://www.debugpoint.com/gedit-features/
|
||||
[13]: https://www.debugpoint.com/wp-content/uploads/2022/12/gedit-text-editor.jpg
|
||||
[14]: https://www.debugpoint.com/wp-content/uploads/2022/12/Xed-editor-from-Linux-Mint-team.jpg
|
||||
[15]: https://github.com/linuxmint/xed
|
@ -0,0 +1,73 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15674-1.html)
|
||||
[#]: subject: (Why programmers love Linux packaging)
|
||||
[#]: via: (https://opensource.com/article/21/2/linux-packaging)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
|
||||
为什么程序员喜欢为 Linux 打包
|
||||
======
|
||||
|
||||
> 程序员可以通过 Flatpak 轻松、稳定地发布他们的软件,让他们专注于他们的激情工作:编程。
|
||||
|
||||
![][0]
|
||||
|
||||
如今,人们比以往任何时候都喜爱 Linux。在这个系列中,我将分享使用 Linux 的 21 个不同理由。今天,我将谈一谈是什么让 Linux 的打包成为程序员的理想选择。
|
||||
|
||||
程序员喜欢编程。这可能看起来是一个显而易见的说法,但重要的是要明白,开发软件所涉及的不仅仅是编写代码。它包括编译、文档、源代码管理、安装脚本、配置默认值、支持文件、交付格式等等。从一个空白的屏幕到一个可交付的软件安装程序,需要的不仅仅是编程,但大多数程序员宁愿编程也不愿打包。
|
||||
|
||||
### 什么是打包?
|
||||
|
||||
当食物被送到商店购买时,它是被包装好的。当直接从农民或从环保的散装或桶装商店购买时,包装是你所带的任何容器。当从杂货店购买时,包装可能是一个纸板箱、塑料袋、一个铁罐等等。
|
||||
|
||||
当软件被提供给广大计算机用户时,它也必须被打包起来。像食品一样,软件也有几种打包方式。开源软件可以不进行打包,因为用户在获得原始代码后,可以自己编译和打包它。然而,打包也有好处,所以应用程序通常以某种特定于用户平台的格式交付。而这正是问题的开始,因为软件包的格式并不只有一种。
|
||||
|
||||
对于用户来说,软件包使安装软件变得容易,因为所有的工作都由系统的安装程序完成。软件被从软件包中提取出来,并分发到操作系统中的适当位置。几乎没有任何出错的机会。
|
||||
|
||||
然而,对于软件开发者来说,打包意味着你必须学会如何创建一个包 —— 而且不仅仅是一个包,而是为你希望你的软件可以安装到的每一个操作系统创建一个独特的包。更加复杂的是,每个操作系统都有多种打包格式和选项,有时甚至是不同的编程语言。
|
||||
|
||||
### 为 Linux 打包
|
||||
|
||||
传统上,Linux 的打包方式似乎是非常多的。从 Fedora 衍生出来的 Linux 发行版,如 Red Hat 和 CentOS,默认使用 .rpm 包。Debian 和 Ubuntu(以及类似的)默认使用 .deb 包。其他发行版可能使用其中之一,或者两者都不使用,选择自定义的格式。当被问及时,许多 Linux 用户说,理想情况下,程序员根本不会为 Linux 打包他们的软件,而是依靠每个发行版的软件包维护者来创建软件包。所有安装在 Linux 系统上的软件都应该来自该发行版的官方软件库。然而,目前还不清楚如何让你的软件可靠地被一个发行版打包和包含,更不用说所有的发行版了。
|
||||
|
||||
### Linux 的 Flatpak
|
||||
|
||||
Flatpak 打包系统是为了统一和去中心化 Linux 作为开发者的交付目标而推出的。通过 Flatpak,无论是开发者还是其他人(Linux 社区的成员、不同的开发者、Flatpak 团队成员或其他任何人)都可以自由地打包软件。然后他们可以将软件包提交给 Flathub,或者选择自我托管软件包,并将其提供给几乎任何 Linux 发行版。Flatpak 系统适用于所有 Linux 发行版,所以针对一个发行版就等于针对所有发行版。
|
||||
|
||||
### Flatpak 技术如何工作
|
||||
|
||||
Flatpak 具有普遍吸引力的秘密是一个标准基础。Flatpak 系统允许开发者引用一套通用的软件开发者工具包(SDK)模块。这些模块由 Flatpak 系统的维护者进行打包和管理。当你安装 Flatpak 时,SDK 会根据需要被拉入,以确保与你的系统兼容。任何特定的 SDK 只需要一次,因为它所包含的库可以在任何 Flatpak 中共享。
|
||||
|
||||
如果开发者需要一个尚未包含在现有 SDK 中的库,开发者可以在 Flatpak 中添加该库。
|
||||
|
||||
结果不言自明。用户可以从一个叫做 [Flathub][2] 的中央仓库在任何 Linux 发行版上安装数百个软件包。
|
||||
|
||||
### 开发者如何使用 Flatpak
|
||||
|
||||
Flatpak 被设计成可重复的,所以构建过程很容易被集成到 CI/CD 工作流程中。Flatpak 是在一个 [YAML][3] 或 JSON 清单文件中定义的。你可以按照我的 [介绍性文章][4] 创建你的第一个 Flatpak,你也可以在 [docs.flatpak.org][5] 阅读完整的文档。
|
||||
|
||||
### Linux 让它变得简单
|
||||
|
||||
在 Linux 上创建软件很容易,为 Linux 打包也很简单,而且可以自动化。如果你是一个程序员,Linux 使你很容易忘记打包这件事,因为它只需要针对一个系统,并可以整合到你的构建过程中。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/2/linux-packaging
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brown-package-red-bow.jpg?itok=oxZYQzH- (Package wrapped with brown paper and red bow)
|
||||
[2]: https://flatpak.org/setup/
|
||||
[3]: https://www.redhat.com/sysadmin/yaml-beginners
|
||||
[4]: https://opensource.com/article/19/10/how-build-flatpak-packaging
|
||||
[5]: https://docs.flatpak.org/en/latest/index.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/29/231331qb9ye8gggeekvce1.jpg
|
@ -0,0 +1,130 @@
|
||||
[#]: subject: "Learn everything about computers with this Raspberry Pi kit"
|
||||
[#]: via: "https://opensource.com/article/21/9/raspberry-pi-crowpi2"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15656-1.html"
|
||||
|
||||
用 CrowPi 树莓派套件了解关于计算机的一切
|
||||
======
|
||||
|
||||
> CrowPi 是一个超棒的树莓派项目系统,安装在一个笔记本电脑般的外壳里。
|
||||
|
||||
![][0]
|
||||
|
||||
我喜欢历史,也喜欢计算机,因此相比于计算机如何变成个人配件,我更喜欢听它在成为日常家用电器前的故事。[我经常听到的一个故事][2] 是很久以前(反正在计算机时代算久远了)的计算机是多么的简单。事实上,它们简单到对于一个好奇的用户来说,弄清楚如何编程并不是十分困难。再看看现代计算机,它具有面向对象的编程语言、复杂的 GUI 框架、网络 API、容器等,但愈发令人担忧的是,计算工具正变得越来越难懂,对于那些没有接受过专门培训的人来说基本上无法使用。
|
||||
|
||||
从树莓派在 2012 年发布之日起,它就一直被定位为一个教育平台。一些第三方供应商通过附加组件和培训套件支持树莓派,以帮助所有年龄段的学习者探索编程、物理计算和开源。然而,直到最近,很大程度上还是要由用户来弄清楚市场上的所有部件如何组合在一起,直到我最近买了 CrowPi。
|
||||
|
||||
![CrowPi 不是一个笔记本电脑][3]
|
||||
|
||||
### CrowPi2 介绍
|
||||
|
||||
乌鸦是非常聪明的鸟。它们能识别并记住面孔,模仿听到的声音,解决复杂的谜题,甚至使用工具来完成任务。CrowPi 使用乌鸦作为其徽标和名字是恰当的,因为这个设备充满了探索、实验、教育的机会,最重要的是,充满了乐趣。
|
||||
|
||||
其设计很巧妙:它看起来像笔记本电脑,但远不止于此。当你从机壳中取出蓝牙键盘时,它会显示一个隐藏的电子设备工坊,配有 LCD 屏幕、16 个按钮、刻度盘、RFID 传感器、接近传感器、线路板、扬声器、GPIO 连接、LED 阵列等等。_而且这一切都是可编程的。_
|
||||
|
||||
顾名思义,该装置本身完全由树莓派提供支持,它牢固地固定在机壳底部。
|
||||
|
||||
![CrowPi 的树莓派板][5]
|
||||
|
||||
默认情况下,你应该用电源适配器为设备充电,包装附带一个壁式插头,你可以将其插入机壳,而不是直接为树莓派供电。你还可以使用插入外部微型 USB 端口的电池电源。机壳内甚至还有一个抽屉,方便你存放电池。这样做的时候,有一根 USB 线从电池抽屉中弹出,并插入机壳电源端口,因此你不会产生这是一台“普通”笔记本电脑的错觉。然而,这样一台设备能够有如此美观的设计已经很理想了!
|
||||
|
||||
### 首次启动系统
|
||||
|
||||
CrowPi2 提供一张安装了 Raspbian 系统,贴有 “System” 标签的 microSD 卡,不过它同时还提供了装载 [RetroPie][6] 的第二张 microSD 卡。作为一个负责任的成年人(咳咳),我自然是先启动了 RetroPie。
|
||||
|
||||
RetroPie 总是很有趣,CrowPi2 附带两个超任风格的游戏控制器,确保你能获得最佳的复古游戏体验。
|
||||
|
||||
令人赞叹不已的是,启动实际的 Raspbian 系统的过程同样有趣,甚至可以说更有趣。它的登录管理器是一个自定义项目中心,有一些快速链接,如编程示例项目、Python 和 Arduino IDE、Scratch、Python 示例游戏、Minecraft 等。你也可以选择退出项目中心,只使用桌面。
|
||||
|
||||
![CrowPi 中心][7]
|
||||
|
||||
对于习惯使用树莓派或 Linux 的人来说,CrowPi 桌面很熟悉,不过它也足够简单,所以很容易上手。左上角有应用程序菜单,桌面上有快捷图标,右上角有网络选择和音量控制的系统托盘等等。
|
||||
|
||||
![CrowPi 桌面][8]
|
||||
|
||||
CrowPi 上有很多东西可供选择,所以你可能很难决定从哪里开始。对我来说,主要分为四大类:编程、物理电子学、Linux 和游戏。
|
||||
|
||||
盒子里有一本使用说明,所以你会知道你需要怎样进行连接(例如,键盘是电池供电的,所以它有时确实需要充电,它和鼠标总是需要一个 USB 适配器)。虽然说明书很快就能读完,但这一例子也充分体现了 CrowPi 团队是如何认真对待说明书的。
|
||||
|
||||
![CrowPi 文档][9]
|
||||
|
||||
### 编程
|
||||
|
||||
如果你想学习如何编码,在 CrowPi 上有很多成功的途径。你可以从中选择你觉得最满意的路径。
|
||||
|
||||
#### 1、Scratch
|
||||
|
||||
[Scratch][10] 是一个简单的可视化编码应用程序,可让你像拼 [乐高积木][11] 一样将代码块组合在一起,制作出游戏和互动故事。这是开启编程之旅最简单的方法,我曾见过年仅 8 岁的孩子会花数小时来研究自己设计的游戏的最佳算法。当然,它不仅适合孩子们!成年人也可以从中获得很多乐趣。不知道从哪里开始?包装盒中有一本 99 页的小册子(打印在纸张上),其中包含 Scratch 课程和项目供你尝试。
|
||||
|
||||
#### 2、Java 和 Minecraft
|
||||
|
||||
Minecraft 不是开源的(虽然有 [几个开源项目][12] 复刻了它),但它有足够的可用资源,因此也经常被用来教授编程。Minecraft 是用 Java 编写的,CrowPi 同时装载有 [Minecraft Pi Edition][13] 和 [BlueJ Java IDE][14] ,如此可使学习 Java 变得比以往更容易、更有趣。
|
||||
|
||||
#### 3、Python 和 PyGame
|
||||
|
||||
CrowPi 上有几个非常有趣的游戏,它们是用 Python 和 [PyGame 游戏引擎][15] 编写的。你可以玩这些游戏,然后查看其源代码以了解游戏的运行方式。CrowPi 中包含 Geany、Thonny 和 [Mu][16] 编辑器,因此你可以使用 Python 立即开始编程。与 Scratch 一样,包装盒中有一本包含有课程的小册子,因此你可以学习 Python 基础知识。
|
||||
|
||||
### 电子器件
|
||||
|
||||
隐藏在键盘下的物理电子工坊本质上是一系列 Pi Hat(附着在上的硬件)。为了让你可以认识所有的组件,CrowPi 绘制了一张中英双语的折页图进行详细的说明。除此之外还有很多示例项目可以帮助你入门。 以下是一张小清单:
|
||||
|
||||
* **你好**:当你与 CrowPi 说话时,LCD 屏幕上打印输出“你好”。
|
||||
* **入侵警报**:使用接近传感器发出警报。
|
||||
* **远程控制器**:让你能够使用远程控制(是的,这个也包含在盒子里)来触发 CrowPi 上的事件。
|
||||
* **RGB 俄罗斯方块**:让你可以在 LED 显示屏上玩俄罗斯方块游戏。
|
||||
* **语音识别**:演示自然语言处理。
|
||||
* **超声波音乐**:利用距离传感器和扬声器创建简易版的 <ruby>特雷门琴<rt>Theramin</rt></ruby>(LCTT 译注:世上唯一不需要身体接触的电子乐器)。
|
||||
|
||||
这些项目仅仅是入门级别而已,因为你还可以在现有的基础上搭建更多东西。当然,还有更多内容值得探索。包装盒里还有网络跳线、电阻、LED 和各种组件,这样你闲暇时也可以了解树莓派的 GPIO (通用输入输出端口)功能的所有信息。
|
||||
|
||||
不过我也发现了一个问题:示例项目的位置有点难找。找到演示项目很容易(它们就在 CrowPi 中心上),但源代码的位置并不是很容易被找到。我后来发现大多数示例项目都在 `/usr/share/code` 中,你可以通过文件管理器或终端进行访问。
|
||||
|
||||
![CrowPi 外围设备][17]
|
||||
|
||||
### Linux
|
||||
|
||||
树莓派上运行的是 Linux 系统。如果你一直想更深入了解 Linux,那么 CrowPi 同样会是一个很好的平台。你可以探索 Linux 桌面、终端以及几乎所有 Linux 或开源应用程序。如果你多年来一直在阅读有关开源的文章,并准备深入研究开源操作系统,那么 CrowPi 会是你想要的平台(当然还有很多其他平台也可以)。
|
||||
|
||||
### 游戏
|
||||
|
||||
包装盒中包含的 **RetroPie** SD 卡意味着你可以重新启动切换为复古游戏机,并任意玩各种老式街机游戏。它跟 Steam Deck 并不完全相同,但也是一个有趣且令人振奋的小游戏平台。因为它配备的不是一个而是两个游戏控制器,所以它非常适合多人合作的沙发游戏。最重要的是,你不仅可以在 CrowPi 上玩游戏,还可以制作自己的游戏。
|
||||
|
||||
### 配备螺丝刀
|
||||
|
||||
自我坐下开始使用 CrowPi2 以来已经大约两周,但我还没有通关所有项目。有很多个晚上,我不得不强迫自己停下摆弄它,因为即使我厌倦了一个项目,我也会不可避免地发现还有其他东西可以探索。总而言之,我在盒子里找到了一个特别的组件,这个组件让我马上知道 CrowPi 和我就是天造地设:它是一把不起眼的小螺丝刀。盒子上没有撕开就不保修的标签。CrowPi 希望你去修补、拆解、探索和学习。它不是笔记本电脑,甚至也不仅仅是个树莓派;而是一个便携的、低功耗的、多样化的、开源的学习者工具包。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/9/raspberry-pi-crowpi2
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc-lead-teacher-learner.png?itok=rMJqBN5G (Teacher or learner?)
|
||||
[2]: https://opensource.com/article/21/8/my-first-programming-language
|
||||
[3]: https://opensource.com/sites/default/files/crowpi-not-laptop.jpeg (CrowPi more than a laptop)
|
||||
[4]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[5]: https://opensource.com/sites/default/files/crowpi-pi.jpeg (crowpi pi board)
|
||||
[6]: https://opensource.com/article/19/1/retropie
|
||||
[7]: https://opensource.com/sites/default/files/crowpi-hub.png (CrowPi hub)
|
||||
[8]: https://opensource.com/sites/default/files/crowpi-desktop.png (CrowPi desktop)
|
||||
[9]: https://opensource.com/sites/default/files/crowpi-docs.jpeg (CrowPi docs)
|
||||
[10]: https://opensource.com/article/20/9/scratch
|
||||
[11]: https://opensource.com/article/20/6/open-source-virtual-lego
|
||||
[12]: https://opensource.com/alternatives/minecraft
|
||||
[13]: https://www.minecraft.net/en-us/edition/pi
|
||||
[14]: https://opensource.com/article/20/7/ide-java#bluej
|
||||
[15]: https://opensource.com/downloads/python-gaming-ebook
|
||||
[16]: https://opensource.com/article/18/8/getting-started-mu-python-editor-beginners
|
||||
[17]: https://opensource.com/sites/default/files/crowpi-peripherals.jpeg (CrowPi peripherals)
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/24/170210th71d0o707worogv.jpg
|
@ -0,0 +1,177 @@
|
||||
[#]: subject: "OpenWrt, an open source alternative to firmware for home routers"
|
||||
[#]: via: "https://opensource.com/article/22/7/openwrt-open-source-firmware"
|
||||
[#]: author: "Stephan Avenwedde https://opensource.com/users/hansic99"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15671-1.html"
|
||||
|
||||
OpenWrt:一个开源的家用路由器固件替代品
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> OpenWrt 是一个基于 Linux 的开源操作系统,主要针对嵌入式网络设备。
|
||||
|
||||
如果你在家里阅读这篇文章,你可能是用一个 LTE/5G/DSL/WIFI 路由器联网的。这种设备通常负责在你的本地设备(智能手机、PC、电视等)之间路由数据包,并通过内置的调制解调器提供对 WWW 的访问。你家里的路由器很可能有一个基于网页的界面,用于配置该设备。这种界面往往过于简单,因为它们是为普通用户制作的。
|
||||
|
||||
如果你想要更多的配置选项,但又不想花钱买一个专业的设备,你应该看看其他的固件,如 [OpenWrt][2]。
|
||||
|
||||
### OpenWrt 的特点
|
||||
|
||||
OpenWrt 是一个基于 Linux 的、针对嵌入式网络设备的开源操作系统。它主要用于替代各种家用路由器上的原始固件。OpenWrt 具备一个好的路由器应该具备的所有有用功能,如 DNS 服务器([dnsmasq][3]),WiFi 接入点(AP)和客户端功能,用于调制解调器功能的 PPP 协议,而且,与标准固件不同,这一切都是可以完全配置的。
|
||||
|
||||
#### LuCI 网页界面
|
||||
|
||||
OpenWrt 可以通过命令行(SSH)或使用 GUI 配置界面([LuCI][4])进行远程配置。LuCI 是一个用 [Lua][5] 编写的轻量级、可扩展的网页 GUI,它可以精确地配置你的设备。除了配置,LuCI 还提供了很多额外的信息,如实时图表、系统日志和网络诊断。
|
||||
|
||||
![LuCI 网页界面][6]
|
||||
|
||||
LuCI 有一些可选的扩展,以增加更多的配置选择。
|
||||
|
||||
#### 可写文件系统
|
||||
|
||||
它的另一个亮点是可写文件系统。原有的固件通常是只读的,而 OpenWrt 配备了一个可写的文件系统,这要归功于一个巧妙的解决方案,它将 OverlayFS 与 SquashFS/JFFS2 文件系统相结合,允许安装软件包以增强功能。在 [OpenWrt 文档][8] 中可以找到更多关于文件系统架构的信息。
|
||||
|
||||
#### 扩展
|
||||
|
||||
OpenWrt 有一个相关的软件包管理器,[opkg][9],它允许安装额外的服务,比如 FTP 服务器、DLNA 媒体服务器、OpenVPN 服务器、用于实现文件共享的 Samba 服务器、控制电话的 Asterisk 等等。当然,有些扩展需要适当的底层硬件资源。
|
||||
|
||||
### 动机
|
||||
|
||||
你可能想知道为什么要冒着对你的设备造成不可修复的损害和失去保修的风险,而尝试更换路由器制造商的固件。如果你的设备以你想要的方式工作,那么你可能不应该。永远不要碰一个正在运行的系统!但是,如果你想增强功能,或者你的设备缺乏配置选项,那么你应该看看 OpenWrt 是否可以成为一种补救措施。
|
||||
|
||||
在我的例子中,我想要一个旅行用的路由器,当我在露营地的时候,我可以把它放在一个合适的位置,以便让其它设备与这个本地 WiFi 接入点(AP)保持良好连接。该路由器将作为一个普通的客户端连接到互联网,并广播它的 WiFi 接入点让我的其它设备连接到它。这样我就可以配置我的所有设备与这个路由器的接入点连接,当我在其他地方时我只需要改变路由器的客户端连接。此外,在一些露营地,你只能得到一个单一设备的访问代码,我可以通过这种设置来加强。
|
||||
|
||||
作为我的旅行路由器,我选择 TP-Link TL-WR902AC 的原因如下:
|
||||
|
||||
* 很小
|
||||
* 两根 WiFi 天线
|
||||
* 5V 电源(USB)
|
||||
* 低功耗
|
||||
* 成本效益高(你以 30 美元左右的价格得到它)
|
||||
|
||||
为了了解它的尺寸,这里是它在树莓派 4 旁边的样子:
|
||||
|
||||
![TP-Link TL-WR902AC 在树莓派旁边][10]
|
||||
|
||||
尽管这个路由器带来了我所需要的所有硬件功能,但我很快发现,默认的固件并不能让我按照我想要的方式配置它。该路由器主要是作为一个 WiFi 接入点,它可以复制现有的 WiFi 网络或通过板载以太网接口将自己连接到网络。默认的固件对于这些使用情况是非常有限的。
|
||||
|
||||
(LCTT 译注:此型号国内没有销售,它的特点之一是可以通过插入 3G/4G USB 网卡连接到互联网,但由于它不在国内销售,所以没有支持哪种国内 3G/4G USB 网卡的说明,我 [查下来](https://www.tp-link.com/lk/support/3g-comp-list/tl-wr902ac/?location=1963) 似乎华为的 E3372h-320 是可用的。有相关实践的同学可以分享一下经验。
|
||||
|
||||
国内销售的其它类似型号只能通过以太网口或 WiFi 连接到互联网,这种情况下,如果只能通过 3G/4G 连接互联网,那需要另外买一个随身 WiFi /移动路由器。)
|
||||
|
||||
幸运的是,该路由器能够运行 OpenWrt,所以我决定用它来替换原来的固件。
|
||||
|
||||
### 安装
|
||||
|
||||
当你的 LTE/5G/DSL/WiFi 路由器符合 [最低要求][12] 时,很有可能在它上面运行 OpenWrt。下一步,你要查看 [硬件表][13],检查你的设备是否被列为兼容,以及你要选择哪个固件包。OpenWrt 的 [TP-Link TL-WR902AC][14] 的页面还包括安装说明,其中描述了如何刷入内部存储器。
|
||||
|
||||
刷入固件的过程在不同的设备之间可能会有所不同,所以我就不详细介绍了。简而言之,我必须通过将设备连接到一个具有特定 IP 地址的网络接口上的 TFTP 服务器,重命名 OpenWrt 固件文件,然后按复位按钮启动设备。
|
||||
|
||||
### 配置
|
||||
|
||||
一旦刷入成功,你的设备现在应该用新的固件启动了。现在启动可能需要更长的时间,因为与默认固件相比,OpenWrt 具有更多的功能。
|
||||
|
||||
为了开始配置,需要在你的 PC 和路由器之间建立一个直接的以太网连接,OpenWrt 在此充当了一个 DHCP 服务器,并将你的 PC 的以太网适配器配置为一个 DHCP 客户端。
|
||||
|
||||
在 Fedora Linux 上,要激活你的网络适配器的 DHCP 客户端模式,首先你必须通过运行找出连接的 UUID:
|
||||
|
||||
```
|
||||
$ nmcli connection show
|
||||
NAME UUID TYPE DEVICE
|
||||
Wired Conn 1 7a96b...27a ethernet ens33
|
||||
virbr0 360a0...673 bridge virbr0
|
||||
testwifi 2e865...ee8 wifi --
|
||||
virbr0 bd487...227 bridge --
|
||||
Wired Conn 2 16b23...7ba ethernet --
|
||||
```
|
||||
|
||||
选择你要修改的连接的 UUID,然后运行:
|
||||
|
||||
```
|
||||
$ nmcli connection modify <UUID> ipv4.method auto
|
||||
```
|
||||
|
||||
你可以在 [Fedora 联网维基][15] 中找到更多关于这些命令的信息。
|
||||
|
||||
在你连接到路由器后,打开一个网页浏览器并导航到 [http://openwrt/][16]。现在你应该看到 LuCI 的登录管理器:
|
||||
|
||||
![LuCI 登录][17]
|
||||
|
||||
使用 `root` 作为用户名,并将密码留空。
|
||||
|
||||
### 配置 WiFi 和路由
|
||||
|
||||
要配置你的 WiFi 天线,请点击 “<ruby>网络<rt>Network</rt></ruby>” 菜单并选择 “<ruby>无线<rt>Wireless</rt></ruby>”。
|
||||
|
||||
![LuCI 无线配置][19]
|
||||
|
||||
在我的设备上,上面的天线 `radio0` 工作在 2.4GHz 模式,并连接到名为 `MOBILE-INTERNET` 的本地接入点。下面的天线 `radio1` 工作在 5GHz,有一个相关的接入点,SSID 为 `OpenWrt_AV`。通过点击 “<ruby>编辑<rt>Edit</rt></ruby>” 按钮,你可以打开设备配置,以决定该设备属于 LAN 还是 WWAN 网络。在我的例子中,接入点 `OpenWrt_AV` 属于 LAN 网络,客户端连接 `MOBILE-INTERNET` 属于 WWAN 网络。
|
||||
|
||||
![LuCI 配置屏幕][21]
|
||||
|
||||
配置的网络在 “<ruby>接口<rt>Interfaces</rt></ruby>” 面板的 “<ruby>网络<rt>Network</rt></ruby>” 下列出。
|
||||
|
||||
![设备列表][23]
|
||||
|
||||
为了获得我想要的功能,网络流量必须在 LAN 和 WWAN 网络之间进行路由。路由可以在 “<ruby>网络<rt>Network</rt></ruby>” 面板的 “<ruby>防火墙<rt>Firewall</rt></ruby>” 部分进行配置。我没有在这里做任何改动,因为在默认情况下,网络之间的流量是被路由的,而传入的数据包(从 WWAN 到 LAN)必须通过防火墙。
|
||||
|
||||
![防火墙设置][28]
|
||||
|
||||
因此,你需要知道的是一个接口是属于 LAN 还是 (W)WAN。这个概念使它相对容易配置,特别是对初学者来说。你可以在 [OpenWrt 联网基础][25] 指南中找到更多信息。
|
||||
|
||||
### 专属门户
|
||||
|
||||
公共 WiFi 接入点通常受到 [专属门户][26] 的保护,你必须输入一个访问代码或类似的代码。通常情况下,当你第一次连接到接入点并试图打开一个任意的网页时,这种门户就会出现。这种机制是由接入点的 DNS 服务器实现的。
|
||||
|
||||
默认情况下,OpenWrt 激活了一个安全功能,可以防止连接的客户端受到 [DNS 重新绑定攻击][27]。OpenWrt 的重新绑定保护也阻止了专属门户网站被转发到客户端,所以你必须禁用重新绑定保护,以便你可以到达专属门户网站。这个选项在 “<ruby>网络<rt>Network</rt></ruby>” 菜单的 “<ruby>DHCP 和 DNS<rt>DHCP and DNS</rt></ruby>” 面板中。
|
||||
|
||||
### 尝试 OpenWrt
|
||||
|
||||
由于升级到 OpenWrt,我得到了一个基于商品硬件的灵活的旅行路由器。OpenWrt 使你的路由器具有完全的可配置性和可扩展性,而且由于其制作精良的网页 GUI,它也适合初学者使用。甚至有一些 [精选路由器][30] 在出厂时已经安装了 OpenWrt。你还可以用很多 [可用的软件包][31] 来增强你的路由器的功能。例如,我正在使用 [vsftp][32] FTP 服务器,在连接的 U 盘上托管一些电影和电视剧。看看该 [项目主页][33],在那里你可以找到许多切换到 OpenWrt 的理由。
|
||||
|
||||
图片来自: Stephan Avenwedde,[CC BY-SA 4.0][7]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/7/openwrt-open-source-firmware
|
||||
|
||||
作者:[Stephan Avenwedde][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/hansic99
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/OSDC_Internet_Cables_520x292_0614_RD.png
|
||||
[2]: https://openwrt.org
|
||||
[3]: https://thekelleys.org.uk/dnsmasq/doc.html
|
||||
[4]: https://openwrt.org/docs/guide-user/luci/start
|
||||
[5]: https://opensource.com/article/20/2/lua-cheat-sheet
|
||||
[6]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_overview_c_0.png
|
||||
[7]: https://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||||
[8]: https://openwrt.org/docs/techref/flash.layout
|
||||
[9]: https://openwrt.org/docs/guide-user/additional-software/opkg
|
||||
[10]: https://opensource.com/sites/default/files/2022-07/OpenWrt_Comparison_RaspberryPi.jpg
|
||||
[12]: https://openwrt.org/supported_devices
|
||||
[13]: https://openwrt.org/toh/start
|
||||
[14]: https://openwrt.org/toh/tp-link/tl-wr902ac_v3
|
||||
[15]: https://fedoraproject.org/wiki/Networking/CLI
|
||||
[16]: http://openwrt/
|
||||
[17]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_login_manager.png
|
||||
[19]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_wireless_section_c.webp
|
||||
[21]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_wifi_device_configuration.webp
|
||||
[23]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_network_devices_0.webp
|
||||
[25]: https://openwrt.org/docs/guide-user/base-system/basic-networking
|
||||
[26]: https://en.wikipedia.org/wiki/Captive_portal
|
||||
[27]: https://en.wikipedia.org/wiki/DNS_rebinding
|
||||
[28]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_firewall_settings.webp
|
||||
[30]: https://opensource.com/article/22/1/turris-omnia-open-source-router
|
||||
[31]: https://openwrt.org/packages/table/start
|
||||
[32]: https://openwrt.org/docs/guide-user/services/nas/ftp.overview
|
||||
[33]: https://openwrt.org/reasons_to_use_openwrt
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/29/105431e78pqv0n8x6aqm0l.jpg
|
@ -0,0 +1,195 @@
|
||||
[#]: subject: "Writing Javascript without a build system"
|
||||
[#]: via: "https://jvns.ca/blog/2023/02/16/writing-javascript-without-a-build-system/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15666-1.html"
|
||||
|
||||
在没有构建系统的情况下编写 Javascript
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
嗨!这周我一直在写一些 Javascript,和往常一样,当我开始一个新的前端项目时,我面临的问题是:我是否应该使用构建系统?
|
||||
|
||||
我想谈谈构建系统对我有什么吸引力,为什么我(通常)仍然不使用它们,以及一些前端 Javascript 库要求你使用构建系统时,为什么我觉得这让我感到沮丧。
|
||||
|
||||
我写这篇文章是因为我看到的大多数关于 JS 的文章都假定你正在使用构建系统,而对于像我这样的人来说,编写非常简单的、不需要构建系统的小型 Javascript 项目时,构建系统可能反而添加了很多麻烦。
|
||||
|
||||
#### 什么是构建系统?
|
||||
|
||||
构建系统的思路是,你有一堆 Javascript 或 Typescript 代码,你想在把它放到你的网站上之前把它翻译成不同的 Javascript 代码。
|
||||
|
||||
构建系统可以做很多有用的事情,比如:
|
||||
|
||||
- (出于效率的考虑)将 100 多个 JS 文件合并成一个大的捆绑文件
|
||||
- 将 Typescript 翻译成 Javascript
|
||||
- 对 Typescript 进行类型检查
|
||||
- 精简化
|
||||
- 添加 Polyfills 以支持旧的浏览器
|
||||
- 编译 JSX
|
||||
- <ruby>摇树优化<rt>Tree Shaking</rt></ruby>(删除不使用的 JS 代码以减少文件大小)
|
||||
- 构建 CSS(像 [tailwind][1] 那样)
|
||||
- 可能还有很多其他重要的事情
|
||||
|
||||
正因为如此,如果你今天正在构建一个复杂的前端项目,你可能会使用 Webpack、Rollup、Esbuild、Parcel 或 Vite 等构建系统。
|
||||
|
||||
很多这些功能对我很有吸引力,我过去使用构建系统也是出于这样一些原因: 例如,[Mess With DNS][2] 使用 Esbuild 来翻译 Typescript,并将许多文件合并成一个大文件。
|
||||
|
||||
#### 目标:轻松地对旧的小网站进行修改
|
||||
|
||||
我做了很多简单的小网站([之一][3]、[之二][4]、[之三][5]、[之四][6]),我对它们的维护精力大约为 0,而且我改变它们的频率很低。
|
||||
|
||||
我的目标是,如果我有一个 3、5 年前做的网站,我希望能在 20 分钟内,
|
||||
|
||||
- 在一台新的电脑上从 GitHub 获取源代码
|
||||
- 做一些修改
|
||||
- 把它放到互联网上
|
||||
|
||||
但我对构建系统(不仅仅是 Javascript 构建系统!)的经验是,如果你有一个 5 年历史的网站,要重新构建这个网站会非常痛苦。
|
||||
|
||||
因为我的大多数网站都很小,所以使用构建系统的 *优势* 很小 —— 我并不真的需要 Typescript 或 JSX。我只要有一个 400 行的 `script.js` 文件就可以了。
|
||||
|
||||
#### 示例:尝试构建 SQL 实验场
|
||||
|
||||
我的一个网站([SQL 试验场][5])使用了一个构建系统(它使用 Vue)。我最后一次编辑该项目是在 2 年前,是在另一台机器上。
|
||||
|
||||
让我们看看我今天是否还能在我的机器上轻松地构建它。首先,我们要运行 `npm install`。下面是我得到的输出:
|
||||
|
||||
```
|
||||
$ npm install
|
||||
[lots of output redacted]
|
||||
npm ERR! code 1
|
||||
npm ERR! path /Users/bork/work/sql-playground.wizardzines.com/node_modules/grpc
|
||||
npm ERR! command failed
|
||||
npm ERR! command sh /var/folders/3z/g3qrs9s96mg6r4dmzryjn3mm0000gn/T/install-b52c96ad.sh
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/surface/init.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/avl/avl.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/backoff/backoff.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_args.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_stack.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_stack_builder.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channel_trace.o
|
||||
npm ERR! CXX(target) Release/obj.target/grpc/deps/grpc/src/core/lib/channel/channelz.o
|
||||
```
|
||||
|
||||
在构建 `grpc` 时出现了某种错误。没问题。反正我也不需要这个依赖关系,所以我可以花 5 分钟把它拆下来重建。现在我可以 `npm install` 了,一切正常。
|
||||
|
||||
现在让我们试着构建这个项目:
|
||||
|
||||
```
|
||||
$ npm run build
|
||||
? Building for production...Error: error:0308010C:digital envelope routines::unsupported
|
||||
at new Hash (node:internal/crypto/hash:71:19)
|
||||
at Object.createHash (node:crypto:130:10)
|
||||
at module.exports (/Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/util/createHash.js:135:53)
|
||||
at NormalModule._initBuildHash (/Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:414:16)
|
||||
at handleParseError (/Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:467:10)
|
||||
at /Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:499:5
|
||||
at /Users/bork/work/sql-playground.wizardzines.com/node_modules/webpack/lib/NormalModule.js:356:12
|
||||
at /Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:373:3
|
||||
at iterateNormalLoaders (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:214:10)
|
||||
at iterateNormalLoaders (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:221:10)
|
||||
at /Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:236:3
|
||||
at runSyncOrAsync (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:130:11)
|
||||
at iterateNormalLoaders (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:232:2)
|
||||
at Array.<anonymous> (/Users/bork/work/sql-playground.wizardzines.com/node_modules/loader-runner/lib/LoaderRunner.js:205:4)
|
||||
at Storage.finished (/Users/bork/work/sql-playground.wizardzines.com/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:43:16)
|
||||
at /Users/bork/work/sql-playground.wizardzines.com/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:79:9
|
||||
```
|
||||
|
||||
[这个 Stack Overflow 的答案][7] 建议运行 `export NODE_OPTIONS=--openssl-legacy-provider` 来解决这个错误。
|
||||
|
||||
这很有效,最后我得以 `npm run build` 来构建这个项目。
|
||||
|
||||
这其实并不坏(我只需要删除一个依赖关系和传递一个略显神秘的 Node 选项!),但我宁愿不被那些构建错误破坏。
|
||||
|
||||
#### 对我来说,对于小项目来说,构建系统并不值得
|
||||
|
||||
对我来说,一个复杂的 Javascript 构建系统对于 500 行的小项目来说似乎并不值得 —— 它意味着放弃了在未来能够轻松更新项目的能力,以换取一些相当微小的好处。
|
||||
|
||||
#### Esbuild 似乎更稳定一些
|
||||
|
||||
我想为 Esbuild 大声叫好: 我 [在 2021 年了解到 Esbuild][8],并用于一个项目,到目前为止,它确实是一种更可靠的构建 JS 项目的方式。
|
||||
|
||||
我刚刚尝试在一台新电脑上构建一个我最后一次改动在 8 个月前的 Esbuild 项目,结果成功了。但我不能肯定的说,两年后我是否还能轻松的建立那个项目。也许会的,我希望如此!
|
||||
|
||||
#### 不使用构建系统通常是很容易的
|
||||
|
||||
下面是 [Nginx 实验场][6] 代码中导入所有库的部分的样子:
|
||||
|
||||
```
|
||||
<script src="js/vue.global.prod.js"></script>
|
||||
<script src="codemirror-5.63.0/lib/codemirror.js"></script>
|
||||
<script src="codemirror-5.63.0/mode/nginx/nginx.js"></script>
|
||||
<script src="codemirror-5.63.0/mode/shell/shell.js"></script>
|
||||
<script src="codemirror-5.63.0/mode/javascript/javascript.js"></script>
|
||||
<link rel="stylesheet" href="codemirror-5.63.0/lib/codemirror.css">
|
||||
<script src="script.js "></script>
|
||||
```
|
||||
|
||||
这个项目也在使用 Vue,但它只是用 `<script src` 来加载 Vue —— 前端没有构建过程。
|
||||
|
||||
#### 一个使用 Vue 的无构建系统模板
|
||||
|
||||
有几个人问如何在没有构建系统的情况下开始编写 Javascript。当然,如果你想的话,你可以写原味的 JS,但我常用的框架是 Vue 3。
|
||||
|
||||
[这是我做的一个小模板][9],用于启动一个没有构建系统的 Vue 3 项目。它只有 2 个文件和大约 30 行的 HTML/JS。
|
||||
|
||||
#### 有些库需要你使用构建系统
|
||||
|
||||
构建系统这些事情最近盘旋在我的脑海里,因为这周我正在用 CodeMirror 5 做一个新项目,我看到有一个新版本,CodeMirror 6。
|
||||
|
||||
所以我想 —— 很酷,也许我应该使用 CodeMirror 6 而不是 CodeMirror 5。但是 —— 似乎没有构建系统你就不能使用 CodeMirror 6(根据 [迁移指南][10]),所以我打算坚持使用 CodeMirror 5。
|
||||
|
||||
同样地,你以前可以把 Tailwind 作为一个巨大的 CSS 文件下载,但是 [Tailwind 3][11] 似乎根本不能作为一个大的 CSS 文件使用,你需要运行 Javascript 来构建它。所以我现在要继续使用 Tailwind 2。(我知道,我知道,你不应该使用大的 CSS 文件,但是它验收只有 300KB,而且我真的不希望有构建步骤)
|
||||
|
||||
(更正:看起来 Tailwind 在 2021 年发布了一个 [独立的命令行工具][12],这似乎是一个不错的选择)
|
||||
|
||||
我不完全确定为什么有些库不提供无构建系统版本 —— 也许发布无构建系统版本会给库增加很多额外的复杂性,而维护者认为这不值得。或者,库的设计意味着由于某种原因,不可能发布无构建系统版本。
|
||||
|
||||
#### 我希望有更多的无构建系统的 Javascript 技巧
|
||||
|
||||
到目前为止,我的主要策略是:
|
||||
|
||||
- 在某个库的网站上搜索 “CDN”,找到一个单独的 Javascript 文件
|
||||
- 使用 [https://unpkg.com][13] 来查看该库是否有一个我可以使用的内置版本
|
||||
- 托管我自己的库的版本,而不是依赖可能崩溃的 CDN
|
||||
- 编写我自己的简单集成方案,而不是拉入另一个依赖关系(例如,前几天我为 Vue 编写了自己的 CodeMirror 组件)。
|
||||
- 如果我想要一个构建系统,就使用 Esbuild
|
||||
|
||||
还有一些看起来很有趣但我还没有研究过的东西:
|
||||
|
||||
- 这个 [关于 Javascript 注释中类型语法的 Typescript 建议][14]
|
||||
- 一般来说,ES 模块
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2023/02/16/writing-javascript-without-a-build-system/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://tailwindcss.com/
|
||||
[2]: https://messwithdns.net/
|
||||
[3]: https://css-examples.wizardzines.com/
|
||||
[4]: https://questions.wizardzines.com
|
||||
[5]: https://sql-playground.wizardzines.com/
|
||||
[6]: https://nginx-playground.wizardzines.com/
|
||||
[7]: https://stackoverflow.com/questions/69692842/error-message-error0308010cdigital-envelope-routinesunsupported
|
||||
[8]: https://jvns.ca/blog/2021/11/15/esbuild-vue/
|
||||
[9]: https://github.com/jvns/vue3-tiny-template
|
||||
[10]: https://codemirror.net/docs/migration/
|
||||
[11]: https://tailwindcss.com/docs/installation
|
||||
[12]: https://tailwindcss.com/blog/standalone-cli
|
||||
[13]: https://unpkg.com
|
||||
[14]: https://devblogs.microsoft.com/typescript/a-proposal-for-type-syntax-in-javascript/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/27/120324jeqlswqte9exfxhh.jpg
|
@ -10,6 +10,8 @@
|
||||
世界上只有两个 Linux 发行版:Arch Linux 与其它
|
||||
======
|
||||
|
||||
(经提醒,标注原文标题:**Arch Linux 与其他 Linux 发行版,哪个更适合你?**)
|
||||
|
||||
![][0]
|
||||
|
||||
> 如果你打算把 Arch Linux 作为日常用机,你应该考虑一下 Arch Linux 与其他发行版的不同优点。下面是一个快速比较。
|
||||
@ -144,4 +146,4 @@ via: https://www.debugpoint.com/arch-linux-vs-other-distros/
|
||||
[4]: https://www.debugpoint.com/pacman-command-arch-examples/
|
||||
[5]: https://www.debugpoint.com/aur-arch-linux/
|
||||
[6]: https://www.debugpoint.com/linux-distro-beginners/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/16/091648yt6xxdjnc5tttn1z.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/16/091648yt6xxdjnc5tttn1z.jpg
|
@ -0,0 +1,117 @@
|
||||
[#]: subject: "A Guide to Find the Right Debian ISO for Download"
|
||||
[#]: via: "https://www.debugpoint.com/download-debian-iso/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15662-1.html"
|
||||
|
||||
如何找到合适的 Debian ISO 来下载
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Linux 初学者可能会被官方的 Debian 下载 ISO 的页面弄得不知所措。这篇指南旨在简化下载体验。
|
||||
|
||||
对于 Debian 初学者来说,安装 Debian 可能会是一次艰难的经历。官方的下载页面包含了不少链接,以至于到底需要下载哪个令人困惑。
|
||||
|
||||
我准备这篇指南来帮助你从下载页面挑选合适的 Debian ISO 文件。
|
||||
|
||||
总的来说,你可以将 Debian ISO 文件分为两大类。它们是 “自由” 和 “非自由” 。
|
||||
|
||||
### 关于 “自由” 和 “非自由” Debian 镜像之间的一些注意事项
|
||||
|
||||
- Debian “非自由” 镜像是指包含不符合 Debian 自由软件准则的软件包的 Debian 操作系统的安装镜像。
|
||||
- “非自由” 软件包包含专有的、有版权的或受许可证限制的软件,这些软件包禁止用户修改或分发代码。Debian 项目提供这些 “非自由” 镜像作为用户的一种可选下载项,以便他们使用需要专有驱动或固件的特定硬件设备或软件。
|
||||
- “自由” 版本的 Debian,仅包含开源和可自由分发的软件包,这意味着用户有修改、分发和与他人分享的自由,而不受任何法律和道德上的限制。
|
||||
|
||||
从 Debian 12 “Bookworm”(即将发布)之后,非自由固件软件包将正式包含在主 ISO 文件中。因此,这篇指南将分为两个部分。
|
||||
|
||||
### 下载: Debian 12 “Bookworm”
|
||||
|
||||
这里是一份下载 ISO 版本的 Debian 12 “Bookworm” 的简单的表格(当前还不稳定,正在测试)。
|
||||
|
||||
| 描述 | 最大 ISO 体积 | **选择此 ISO 的情形** | ISO 下载链接(amd64) |
|
||||
| :- | :- | :- | :- |
|
||||
| 最小的体积;非常适合基本安装 | 700 MB | 你想下载基础的软件包,然后通过互联网来安装 | [iso-cd][1] |
|
||||
| 完整的 DVD 体积 | 5 GB | 你想先下载所有的东西,然后开始安装,它非常适合离线安装 | [iso-dvd][2] |
|
||||
|
||||
### 下载: Debian 11 “Bullseye”
|
||||
|
||||
#### 自由版本的 ISO 文件(没有专有软件包)
|
||||
|
||||
下面的 ISO 镜像是 “自由” 版本的镜像,这意味着它们不包含用于固件的大量专有软件包。
|
||||
|
||||
| 描述 | 最大 ISO 体积 | **选择此 ISO 的情形** | ISO 下载链接(amd64) |
|
||||
| :- | :- | :- | :- |
|
||||
| 最小的体积(网络安装 CD);需要联通互联网下载软件包 | 500 MB | 你有稳定高速的互联网,希望开始时下载较少 | [iso-cd][3] [torrent][4] |
|
||||
| 完整的 CD 体积;带有 CD 1、2 和 3;对于最基础的安装,你只需要 CD 1 | 700 MB | 你希望下载基础的软件包,然后不使用互联网来安装它们 | [iso-cd][5] [torrent][6] |
|
||||
| 完整的 DVD 体积;带有 DVD 1、2 和 3;对于最基础的安装,你只需要 DVD 1 | 5 GB | 你想先下载所有的东西,然后开始安装,这是离线安装的最理想方式 | [iso-dvd][7] [torrent][8] |
|
||||
|
||||
#### 非自由版本的 ISO 文件(带有专有软件包)
|
||||
|
||||
如果你有 Wi-Fi、蓝牙等特殊硬件 – 你可能会希望从下面的表中获取 “非自由” 版本的软件包。
|
||||
|
||||
| 类型 | 镜像种类 | **选择此 ISO 的情形** | ISO 下载链接(amd64) |
|
||||
| :- | :- | :- | :- |
|
||||
| 非自由 | 完整的 CD 、DVD | 你想要减少工作量,并希望 Debian 能够在所有受支持的硬件上工作 | [cd-dvd][9] (然后转到 `*-nonfree` 目录) |
|
||||
| 非自由 | 完整的 CD 、DVD(<ruby>立付<rt>Live</rt></ruby>版) – 独立的桌面环境软件包 | 你想要减少工作量,Debian 能够工作,并且带有一个立付系统。立付系统也提供完整的安装 | [cd-dvd-live][9](然后转到 `*-nonfree` 目录) |
|
||||
|
||||
### 其它的架构
|
||||
|
||||
#### 针对 Debian 11 “Bullseye”
|
||||
|
||||
- [arm64][10]
|
||||
- [armel][11]
|
||||
- [armhf][12]
|
||||
- [i386][13]
|
||||
- mips (不可用)
|
||||
- [mips64el][14]
|
||||
- [mipsel][15]
|
||||
- [ppc64el][16]
|
||||
- [s390x][17]
|
||||
|
||||
所有的镜像,下载链接: [单击这里][18]。
|
||||
|
||||
### 较旧的版本(Debian 10 “Buster”)
|
||||
|
||||
如果你需要一些针对 Debian 10 “Buster” 的镜像,请访问这个 [页面][19]。
|
||||
|
||||
### 总结
|
||||
|
||||
对新用户来说,如果想要从官方网站上下载 Debian ISO 镜像,网站的信息可能多到无所适从。因此,我以一种恰当的格式总结下载链接。我希望这篇文章有助于你找到适合于你系统的目标 Debian ISO 镜像。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/download-debian-iso/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-cd/
|
||||
[2]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/
|
||||
[3]: https://cdimage.debian.org/cdimage/release/current/amd64/iso-cd/
|
||||
[4]: https://cdimage.debian.org/cdimage/release/current/amd64/bt-cd/
|
||||
[5]: https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
|
||||
[6]: https://cdimage.debian.org/debian-cd/current/amd64/bt-cd/
|
||||
[7]: https://cdimage.debian.org/cdimage/release/current/amd64/iso-dvd/
|
||||
[8]: https://cdimage.debian.org/cdimage/release/current/amd64/bt-dvd/
|
||||
[9]: https://cdimage.debian.org/cdimage/unofficial/non-free/cd-including-firmware/
|
||||
[10]: http://ftp.debian.org/debian/dists/bullseye/main/installer-arm64/current/images/
|
||||
[11]: http://ftp.debian.org/debian/dists/bullseye/main/installer-armel/current/images/
|
||||
[12]: http://ftp.debian.org/debian/dists/bullseye/main/installer-armhf/current/images/
|
||||
[13]: http://ftp.debian.org/debian/dists/bullseye/main/installer-i386/current/images/
|
||||
[14]: http://ftp.debian.org/debian/dists/buster/main/installer-mips64el/current/images/
|
||||
[15]: http://ftp.debian.org/debian/dists/bullseye/main/installer-mipsel/current/images/
|
||||
[16]: http://ftp.debian.org/debian/dists/bullseye/main/installer-ppc64el/current/images/
|
||||
[17]: http://ftp.debian.org/debian/dists/bullseye/main/installer-s390x/current/images/
|
||||
[18]: https://cdimage.debian.org/cdimage/
|
||||
[19]: https://www.debian.org/releases/buster/debian-installer/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/26/101016gdf20utfqsu1215a.jpg
|
@ -0,0 +1,354 @@
|
||||
[#]: subject: "NixOS Series #4: Things To Do After Installing NixOS"
|
||||
[#]: via: "https://itsfoss.com/things-to-do-after-installing-nixos/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15663-1.html"
|
||||
|
||||
NixOS 系列 #4:安装 NixOS 后要做的事
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
安装之后,你会发现 NixOS 与通用的 Linux 发行版有很大的不同。
|
||||
|
||||
当然,作为 [高级 Linux 发行版][1]之一,大多数新用户对它并不熟悉。
|
||||
|
||||
如果你不知道 [为什么你应该使用 NixOS][2],并且出于好奇而尝试它,那么在继续进行之前,知道它是为谁准备的至关重要。
|
||||
|
||||
虽然我假设你已经安装了这个发行版,但如果你是第一次使用,我建议先 [在虚拟机上安装 NixOS][3]。
|
||||
|
||||
### 1、更新软件包
|
||||
|
||||
即使你使用最新的 ISO 进行安装,也总是会有更新的。那么为什么不从更新软件包开始呢?
|
||||
|
||||
要升级软件包,首先,你必须在添加的频道中检查是否有更新:
|
||||
|
||||
```
|
||||
nix-channel --update
|
||||
```
|
||||
|
||||
然后,使用下面的命令来安装这些更新(如果有的话):
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch --upgrade
|
||||
```
|
||||
|
||||
这就行了!它将处理其余的事情。
|
||||
|
||||
### 2、在 NixOS 中改变主机名
|
||||
|
||||
如果你尝试用传统的方法 [改变主机名][4](使用 `hostnamectl` 命令),会出现以下错误:
|
||||
|
||||
![在 NixOS 中改变主机名的错误][5]
|
||||
|
||||
在 NixOS 中,你可以用它的主配置文件轻松地改变主机名。使用如下命令:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/configuration.nix
|
||||
```
|
||||
|
||||
在这个配置文件中,寻找以下一行:
|
||||
|
||||
```
|
||||
networking.hostName = "nixos";
|
||||
```
|
||||
|
||||
然后把它改成:
|
||||
|
||||
```
|
||||
networking.hostName = "Your_Hostname";
|
||||
```
|
||||
|
||||
例如,我把我的主机名改为 `itsFOSS`:
|
||||
|
||||
```
|
||||
networking.hostName = "itsFOSS";
|
||||
```
|
||||
|
||||
![在 NixOS 中改变主机名][6]
|
||||
|
||||
现在,[保存更改并退出 nano][7] 文本编辑器。
|
||||
|
||||
为了使你对主机名的修改生效,执行以下命令:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
最后,重新打开终端,主机名的变化应该反映出来。
|
||||
|
||||
### 3、设置 Flatpak
|
||||
|
||||
我知道你可能在想什么。Nix 软件包管理器已经提供了大量的软件包。那么,为什么你需要 Flatpak 呢?
|
||||
|
||||
安装你所需要的东西对于第一次使用的人来说可能有点费时。所以,Flatpak 应该能给你带来方便。
|
||||
|
||||
[设置 Flatpak][8] 与你在 Ubuntu 上做的不一样。
|
||||
|
||||
要设置 Flatpak,你必须对 `configuration.nix` 文件进行修改,可以通过以下方式访问该文件:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/configuration.nix
|
||||
```
|
||||
|
||||
[在 nano 中移动到最后一行][9],在 `}` 前添加以下一行:
|
||||
|
||||
```
|
||||
services.flatpak.enable = true;
|
||||
```
|
||||
|
||||
![在 NixOS 上设置 Flatpak][10]
|
||||
|
||||
按 `Ctrl + O` 保存更改,按回车键,按 `Ctrl + X` 退出。
|
||||
|
||||
接下来,使用以下命令重建并切换到新的配置文件:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
最后,使用下面的命令将 Flathub 软件库添加到系统中:
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
想知道到底什么是 Flatpak 包吗?你可以参考我们关于它的文章:
|
||||
|
||||
> **[什么是 Flatpak?你需要知道的关于这个通用包装系统的一切重要信息][23]**
|
||||
|
||||
### 4、启用垃圾收集
|
||||
|
||||
NixOS 以其不可改变性而闻名,这是有充分理由的。
|
||||
|
||||
每当你升级一个软件包时,旧的软件包不会被删除。只是指向旧包的符号链接将被指向最新的版本。
|
||||
|
||||
而这样做,你的系统中会积累下不必要的垃圾。
|
||||
|
||||
但是,删除每一个旧世代将违背 NixOS 的初衷。
|
||||
|
||||
所以,在这种情况下,你可以将你的系统配置为每周删除垃圾包。
|
||||
|
||||
要做到这一点,首先,打开 NixOS 配置文件:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/configuration.nix
|
||||
```
|
||||
|
||||
并在配置文件末尾的 `}` 前添加以下一行:
|
||||
|
||||
```
|
||||
# Automatic Garbage Collection
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 7d";
|
||||
};
|
||||
```
|
||||
|
||||
![在 NixOS 中启用自动垃圾收集][11]
|
||||
|
||||
保存修改并退出 nano 文本编辑器。
|
||||
|
||||
为了激活垃圾收集,重建并切换到新的配置文件:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
如果你不确定垃圾收集器是否在后台正常运行,你可以用以下命令列出活动的计时器:
|
||||
|
||||
```
|
||||
systemctl list-timers
|
||||
```
|
||||
|
||||
![][12]
|
||||
|
||||
正如你所看到的,Nix 垃圾收集器正在如期运行,并显示距离下次清理还有 5 天。
|
||||
|
||||
### 5、安装你喜欢的软件
|
||||
|
||||
我是说这是我们使用电脑的唯一原因 —— “为了使用我们最喜欢的软件”,如果还不是,我们就把它变成现实!
|
||||
|
||||
寻找软件包的最好地方是 [Nix 软件包搜索][13],可以使用你喜欢的任何浏览器访问。
|
||||
|
||||
- 搜索软件包
|
||||
- 选择软件包
|
||||
- 点击 “nix-env” 并复制给定的 NixOS 的命令
|
||||
- 执行该命令,就可以了
|
||||
|
||||
你可以查看我们的 [NixOS 软件包管理][14] 指南,了解所有的细节。
|
||||
|
||||
让我在这里给你一个简单的回顾。例如,在这里,我想安装 Librewolf,所以我采用了以下方法:
|
||||
|
||||
![搜索 NixOS 的软件包][15]
|
||||
|
||||
**但如果你想安装 SSH 或 Plex 等服务,上述方法就不能用了**。
|
||||
|
||||
为此,你得查看位于页面顶部的 “<ruby>NixOS 选项<rt>NixOS options</rt></ruby>”。
|
||||
|
||||
因此,假设我想安装 OpenSSH,那么我必须按照给定的步骤进行:
|
||||
|
||||
- 进入 “NixOS 选项”。
|
||||
- 搜索服务的名称
|
||||
- 获取服务的名称并将其粘贴到 `configuration.nix` 中,将其值改为 `true`。
|
||||
|
||||
![搜索 NixOS 的服务][16]
|
||||
|
||||
```
|
||||
services.openssh.enable = true
|
||||
```
|
||||
|
||||
![在 NixOS 上启用 OpenSSH][17]
|
||||
|
||||
在配置文件中加入这一行后,重建服务:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
### 6、在 NixOS 中启用自动更新(可选)
|
||||
|
||||
一些用户喜欢启用自动更新功能,而另一些用户则可以在他们方便的时候更新软件包。
|
||||
|
||||
所以这完全取决于你。
|
||||
|
||||
**要启用自动更新**,首先打开 `configuration.nix` 文件:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/configuration.nix
|
||||
```
|
||||
|
||||
接下来,在配置文件的末尾,在 `}` 之前添加以下一行:
|
||||
|
||||
```
|
||||
# Auto system update
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
};
|
||||
```
|
||||
|
||||
![在 NixOS 中启用自动系统更新][18]
|
||||
|
||||
保存修改并退出 nano。
|
||||
|
||||
要启用自动更新,你必须用以下方法重建并切换到该文件:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
你也可以用下面的命令检查 NixOS 的升级定时器:
|
||||
|
||||
```
|
||||
systemctl list-timers
|
||||
```
|
||||
|
||||
![NixOS 的自动升级定时器][19]
|
||||
|
||||
正如你所看到的,`nixos-upgrade.service` 正在后台如期运行!
|
||||
|
||||
### 7、减少交换度
|
||||
|
||||
如果你正在利用交换分区,你可能想减少交换度。
|
||||
|
||||
交换度只不过是你想要多积极地使用交换分区(或内存)的数值,其范围从 0 到 100。
|
||||
|
||||
交换度越小,你的系统就会越多地使用物理内存(RAM),而交换分区只不过是你的存储驱动器的一部分而已。
|
||||
|
||||
另外,存储驱动器的速度相对比内存慢,所以如果可能的话,你应该减少交换度。
|
||||
|
||||
要检查你的系统的默认交换度,请使用以下方法:
|
||||
|
||||
```
|
||||
cat /proc/sys/vm/swappiness
|
||||
```
|
||||
|
||||
![检查 Linux 系统的交换度][20]
|
||||
|
||||
而对于大多数 Linux 发行版,它被设置为 `60`。
|
||||
|
||||
我建议你把这个值降低到 `10`。
|
||||
|
||||
要做到这一点,首先,用以下命令打开配置文件:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/hardware-configuration.nix
|
||||
```
|
||||
|
||||
并在 `}` 之前的行末添加以下一行:
|
||||
|
||||
```
|
||||
boot.kernel.sysctl = { "vm.swappiness" = 10;};
|
||||
```
|
||||
|
||||
![减少 NixOS 中的交换度][21]
|
||||
|
||||
保存修改并退出文本编辑器。
|
||||
|
||||
现在,重建配置并使用下面的方法切换到它:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
现在,你可以再次检查交换度,它应该反映出变化:
|
||||
|
||||
```
|
||||
cat /proc/sys/vm/swappiness
|
||||
```
|
||||
|
||||
![减少 NixOS 中的交换度][22]
|
||||
|
||||
就这些了。
|
||||
|
||||
### 总结
|
||||
|
||||
如果你在第一次安装 NixOS 后马上遵循这些要点,你应该得到一个良好的用户体验。
|
||||
|
||||
当然,根据你的要求,还可以有一些其他的东西。但是,我认为上面提到的事情是最基本或最常见的事情。
|
||||
|
||||
在本系列的下一部分,我将讨论在 NixOS 上设置家庭管理器,这对有多个用户的系统应该是有帮助的。
|
||||
|
||||
💬 安装NixOS后,你首先做什么?让我知道你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/things-to-do-after-installing-nixos/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lkxed][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/sagar/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://itsfoss.com/advanced-linux-distros/
|
||||
[2]: https://linux.cn/article-15606-1.html
|
||||
[3]: https://linux.cn/article-15624-1.html
|
||||
[4]: https://itsfoss.com/change-hostname-ubuntu/
|
||||
[5]: https://itsfoss.com/content/images/2023/02/error-changing-hostname-in-nixos.png
|
||||
[6]: https://itsfoss.com/content/images/2023/02/change-hostname-in-NixOS.png
|
||||
[7]: https://linuxhandbook.com/nano-save-exit/?ref=its-foss
|
||||
[8]: https://itsfoss.com/flatpak-guide/
|
||||
[9]: https://linuxhandbook.com/beginning-end-file-nano/?ref=its-foss
|
||||
[10]: https://itsfoss.com/content/images/2023/02/setup-flatpak-on-nixos.png
|
||||
[11]: https://itsfoss.com/content/images/2023/02/enable-automatic-garbage-collection-in-NixOS.png
|
||||
[12]: https://itsfoss.com/content/images/2023/02/list-active-timers-in-nixos.png
|
||||
[13]: https://search.nixos.org/packages?ref=its-foss
|
||||
[14]: https://linux.cn/article-15645-1.html
|
||||
[15]: https://itsfoss.com/content/images/2023/02/search-packages-for-nixos.png
|
||||
[16]: https://itsfoss.com/content/images/2023/02/Search-the-service-for-nixos.png
|
||||
[17]: https://itsfoss.com/content/images/2023/02/enable-openssh-on-nixos.png
|
||||
[18]: https://itsfoss.com/content/images/2023/02/enable-auto-system-update-in-nixos.png
|
||||
[19]: https://itsfoss.com/content/images/2023/02/auto-upgrade-timer-in-nixos.png
|
||||
[20]: https://itsfoss.com/content/images/2023/02/check-swapiness-of-linux-system.png
|
||||
[21]: https://itsfoss.com/content/images/2023/02/reduce-swapiness-in-nixos.png
|
||||
[22]: https://itsfoss.com/content/images/2023/02/reduce-swapiness-in-NixOS.png
|
||||
[23]: https://itsfoss.com/what-is-flatpak/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/26/142500uzc095szl064s9xx.jpg
|
@ -0,0 +1,325 @@
|
||||
[#]: subject: "How to Install Kubernetes Cluster Using Kubespray"
|
||||
[#]: via: "https://www.linuxtechi.com/install-kubernetes-using-kubespray/"
|
||||
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15675-1.html"
|
||||
|
||||
使用 Kubespray 安装 Kubernetes 集群
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 你是否正在寻找有关如何使用 Kubespray 安装 Kubernetes(k8s)的简单指南?
|
||||
|
||||
此页面上的分步指南将向你展示如何在 Linux 系统上使用 Kubespray 安装 Kubernetes 集群。
|
||||
|
||||
Kubespray 是一个自由开源的工具,它提供了 Ansible <ruby>剧本<rt>playbook</rt></ruby> 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。
|
||||
|
||||
它支持一系列操作系统,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux(RHEL),它可以在各种平台上部署 Kubernetes,包括裸机、公共云和私有云。
|
||||
|
||||
在本指南中,我们使用以下实验室:
|
||||
|
||||
- Ansible 节点(Kubespray 节点):最小安装的 Ubuntu 22.04 LTS(192.168.1.240)
|
||||
- 3 个控制器节点:最小安装的 Rocky Linux 9(192.168.1.241/242/243)
|
||||
- 2 个工作节点:最小安装的 Rocky Linux 9(192.168.1.244/245)
|
||||
|
||||
### Kubespray 的最低系统要求
|
||||
|
||||
- 主节点:1500 MB RAM、2 个 CPU 和 20 GB 可用磁盘空间
|
||||
- 工作节点:1024 MB、2 个 CPU、20 GB 可用磁盘空间
|
||||
- Ansible 节点:1024 MB、1 个 CPU 和 20 GB 磁盘空间
|
||||
- 每个节点上的互联网连接
|
||||
- 拥有 sudo 管理员权限
|
||||
|
||||
事不宜迟,让我们深入了解安装步骤。
|
||||
|
||||
### 步骤 1)配置 Kubespray 节点
|
||||
|
||||
登录到你的 Ubuntu 22.04 系统并安装 Ansible。运行以下一组命令:
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
$ sudo apt install git python3 python3-pip -y
|
||||
$ git clone https://github.com/kubernetes-incubator/kubespray.git
|
||||
$ cd kubespray
|
||||
$ pip install -r requirements.txt
|
||||
```
|
||||
|
||||
验证 Ansible 版本,运行:
|
||||
|
||||
```
|
||||
$ ansible --version
|
||||
```
|
||||
|
||||
![][1]
|
||||
|
||||
创建主机清单,运行以下命令,不要忘记替换适合你部署的 IP 地址:
|
||||
|
||||
```
|
||||
$ cp -rfp inventory/sample inventory/mycluster
|
||||
$ declare -a IPS=(192.168.1.241 192.168.1.241 192.168.1.242 192.168.1.243 192.168.1.244 192.168.1.245)
|
||||
$ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
|
||||
```
|
||||
|
||||
修改清单文件,设置 3 个控制节点和 2 个工作节点:
|
||||
|
||||
```
|
||||
$ vi inventory/mycluster/hosts.yaml
|
||||
```
|
||||
|
||||
![][2]
|
||||
|
||||
保存并关闭文件。
|
||||
|
||||
查看并修改文件 `inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml` 中的以下参数:
|
||||
|
||||
```
|
||||
kube_version: v1.26.2
|
||||
kube_network_plugin: calico
|
||||
kube_pods_subnet: 10.233.64.0/18
|
||||
kube_service_addresses: 10.233.0.0/18
|
||||
cluster_name: linuxtechi.local
|
||||
```
|
||||
|
||||
![][3]
|
||||
|
||||
要启用 Kuberenetes 仪表板和入口控制器等插件,请在文件 `inventory/mycluster/group_vars/k8s_cluster/addons.yml` 中将参数设置为已启用:
|
||||
|
||||
```
|
||||
$ vi inventory/mycluster/group_vars/k8s_cluster/addons.yml
|
||||
```
|
||||
|
||||
```
|
||||
dashboard_enabled: true
|
||||
ingress_nginx_enabled: true
|
||||
ingress_nginx_host_network: true
|
||||
```
|
||||
|
||||
保存并退出文件。
|
||||
|
||||
### 步骤 2)将 SSH 密钥从 Ansible 节点复制到所有其他节点
|
||||
|
||||
首先在你的 Ansible 节点上为你的本地用户生成 SSH 密钥:
|
||||
|
||||
```
|
||||
$ ssh-keygen
|
||||
```
|
||||
|
||||
使用 `ssh-copy-id` 命令复制 SSH 密钥:
|
||||
|
||||
```
|
||||
$ ssh-copy-id sysops@192.168.1.241
|
||||
$ ssh-copy-id sysops@192.168.1.242
|
||||
$ ssh-copy-id sysops@192.168.1.243
|
||||
$ ssh-copy-id sysops@192.168.1.244
|
||||
$ ssh-copy-id sysops@192.168.1.245
|
||||
```
|
||||
|
||||
还要在每个节点上运行以下命令:
|
||||
|
||||
```
|
||||
$ echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
|
||||
```
|
||||
|
||||
### 步骤 3)禁用防火墙并启用 IPV4 转发
|
||||
|
||||
要在所有节点上禁用防火墙,请从 Ansible 节点运行以下 `ansible` 命令:
|
||||
|
||||
```
|
||||
$ cd kubespray
|
||||
$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo systemctl stop firewalld && sudo systemctl disable firewalld"
|
||||
```
|
||||
|
||||
运行以下 `ansible` 命令以在所有节点上启用 IPv4 转发和禁用交换:
|
||||
|
||||
```
|
||||
$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf"
|
||||
$ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab && sudo swapoff -a"
|
||||
```
|
||||
|
||||
### 步骤 4)启动 Kubernetes 部署
|
||||
|
||||
现在,我们都准备好开始 Kubernetes 集群部署,从 Ansible 节点运行下面的 Ansible 剧本:
|
||||
|
||||
```
|
||||
$ cd kubespray
|
||||
$ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
|
||||
```
|
||||
|
||||
![][4]
|
||||
|
||||
现在监控部署,可能需要 20 到 30 分钟,具体取决于互联网速度和硬件资源。
|
||||
|
||||
部署完成后,我们将在屏幕上看到以下输出:
|
||||
|
||||
![][5]
|
||||
|
||||
很好,上面的输出确认部署已成功完成。
|
||||
|
||||
### 步骤 5)访问 Kubernetes 集群
|
||||
|
||||
登录到第一个主节点,切换到 root 用户,在那里运行 `kubectl` 命令:
|
||||
|
||||
```
|
||||
$ sudo su -
|
||||
# kubectl get nodes
|
||||
# kubectl get pods -A
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
![][6]
|
||||
|
||||
完美,上面的输出确认集群中的所有节点都处于就绪状态,并且所有命名空间的 <ruby>容器荚<rt>Pod</rt></ruby> 都已启动并正在运行。这表明我们的 Kubernetes 集群部署成功。
|
||||
|
||||
让我们尝试部署基于 Nginx 的部署并将其公开为节点端口,运行以下 `kubectl` 命令:
|
||||
|
||||
```
|
||||
$ kubectl create deployment demo-nginx-kubespray --image=nginx --replicas=2
|
||||
$ kubectl expose deployment demo-nginx-kubespray --type NodePort --port=80
|
||||
$ kubectl get deployments.apps
|
||||
$ kubectl get pods
|
||||
$ kubectl get svc demo-nginx-kubespray
|
||||
```
|
||||
|
||||
以上命令的输出:
|
||||
|
||||
![][7]
|
||||
|
||||
现在尝试使用工作节点的 IP 地址和节点端口(30050)访问此 Nginx 应用。
|
||||
|
||||
使用以下 `curl` 命令或 Web 浏览器访问此应用。
|
||||
|
||||
```
|
||||
$ curl 192.168.1.245:30050
|
||||
```
|
||||
|
||||
或者,
|
||||
|
||||
![][8]
|
||||
|
||||
完美,这证实了应用可以在我们的集群之外访问。
|
||||
|
||||
### 步骤 6)Kubernetes 仪表板(GUI)
|
||||
|
||||
要访问 Kubernetes 仪表板,让我们首先创建服务帐户并分配管理员权限,以便它可以使用令牌访问仪表板。
|
||||
|
||||
在 kube-system 命名空间中创建名为 “admin-user” 的服务帐户:
|
||||
|
||||
```
|
||||
$ vi dashboard-adminuser.yml
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: admin-user
|
||||
namespace: kube-system
|
||||
```
|
||||
|
||||
保存并关闭文件。
|
||||
|
||||
```
|
||||
$ kubectl apply -f dashboard-adminuser.yml
|
||||
serviceaccount/admin-user created
|
||||
```
|
||||
|
||||
创建集群角色绑定:
|
||||
|
||||
```
|
||||
$ vi admin-role-binding.yml
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: admin-user
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: cluster-admin
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: admin-user
|
||||
namespace: kube-system
|
||||
```
|
||||
|
||||
保存并退出文件。
|
||||
|
||||
```
|
||||
$ kubectl apply -f admin-role-binding.yml
|
||||
clusterrolebinding.rbac.authorization.k8s.io/admin-user created
|
||||
```
|
||||
|
||||
现在,为管理员用户创建令牌:
|
||||
|
||||
```
|
||||
$ kubectl -n kube-system create token admin-user
|
||||
```
|
||||
|
||||
![][9]
|
||||
|
||||
复制此令牌并将其放在安全的地方,因为我们将使用令牌登录 Kubernetes 仪表板。
|
||||
|
||||
使用以下 `ssh` 命令从你的系统连接到第一个主节点:
|
||||
|
||||
```
|
||||
$ ssh -L8001:localhost:8001 sysops@192.168.1.241
|
||||
```
|
||||
|
||||
注意:替换适合你环境的 IP 地址。
|
||||
|
||||
登录后,切换到 root 用户并运行 `kubectl proxy` 命令:
|
||||
|
||||
```
|
||||
$ sudo su -
|
||||
# kubectl proxy
|
||||
Starting to serve on 127.0.0.1:8001
|
||||
```
|
||||
|
||||
![][10]
|
||||
|
||||
打开系统的网络浏览器,如下设置代理:
|
||||
|
||||
![][11]
|
||||
|
||||
完成代理设置后,将以下网址粘贴到浏览器中:
|
||||
|
||||
```
|
||||
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#/login
|
||||
```
|
||||
|
||||
![][12]
|
||||
|
||||
选择令牌登录并粘贴你在上面为管理员用户生成的令牌,然后单击“<ruby>登录<rt>Sign in</rt></ruby>”。
|
||||
|
||||
![][13]
|
||||
|
||||
这就是本指南的全部内容,我希望你能从中找到有用的信息。请在下面的评论部分中发表你的疑问和反馈。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linuxtechi.com/install-kubernetes-using-kubespray/
|
||||
|
||||
作者:[Pradeep Kumar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linuxtechi.com/author/pradeep/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Ansible-Version-Kubespray-Ubuntu.png
|
||||
[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/K8s-inventory-file-kubespray.png
|
||||
[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Edit-Cluster-yaml-kubespray.gif
|
||||
[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/k8s-deployment-ansible-playbook-kubespray-1024x673.png?ezimgfmt=ng:webp/ngcb22
|
||||
[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubernetes-deployment-successfull-kubespray-1024x446.png?ezimgfmt=ng:webp/ngcb22
|
||||
[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubectl-Commands-k8s-kubespray-1024x856.png?ezimgfmt=ng:webp/ngcb22
|
||||
[7]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Demo-Nginx-Deployment-Kubespray-kubernetes.png
|
||||
[8]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Nginx-Default-Page-Kubespray-Demo-Application.png
|
||||
[9]: https://www.linuxtechi.com/wp-content/uploads/2023/03/create-token-admin-user-k8s-dashboard.png
|
||||
[10]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Ssh-Tunneling-master-node-kubernetes.png
|
||||
[11]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Proxy-Settings-Kubenetes-Dashbaord-kubespray.png
|
||||
[12]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubernetes-Dashboard-Login-Page-KubeSpray.png
|
||||
[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubernetes-Dashboard-Home-Page-Kubespray.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/30/074513iy2it365a3fti2f2.jpg
|
@ -3,30 +3,30 @@
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15660-1.html"
|
||||
|
||||
Python 中的输入函数:概念和示例
|
||||
======
|
||||
|
||||
**在这篇文章中,我将通过一些通俗易懂的例子来解释 Python 的 Input 函数的基础知识。**
|
||||
> 在这篇文章中,我将通过一些通俗易懂的例子来解释 Python 的 Input 函数的基础知识。
|
||||
|
||||
![][1]
|
||||
|
||||
Python 是世界上最流行的编程语言之一,广泛应用于各种应用程序中。Python 中的一个基本概念是 `Input()` 函数,它允许用户通过提供输入值与程序进行交互。
|
||||
Python 是世界上最流行的编程语言之一,广泛应用于各种应用程序中。Python 中的一个基本概念是 `input()` 函数,它允许用户通过提供输入值与程序进行交互。
|
||||
|
||||
让我们看看 input 函数它是如何工作的,以及如何在 Python 程序中有效地使用它。
|
||||
让我们看看 `input()` 函数是如何工作的,以及如何在 Python 程序中有效地使用它。
|
||||
|
||||
在开始之前,我希望你已经安装了 Python 并设置了一个基本的编辑器。如果没有,请参考我的以下指南:
|
||||
|
||||
- [如何在 Ubuntu/Linux 上安装 Python 3.11][2]
|
||||
- [如何在 Ubuntu 等 Linux 上安装 Python 3.11][2]
|
||||
- [如何在 Windows 上安装 Python][3]
|
||||
- [如何为 Python 设置 IDLE 编辑器][4]
|
||||
|
||||
### Python Input 函数
|
||||
|
||||
Python 中的 input 函数用于接受用户输入的字符串。它提示用户输入一个值并等待用户提供输入。然后将用户的输入作为字符串存储在变量中,稍后可以在程序中使用。
|
||||
Python 中的 `input()` 函数用于接受用户输入的字符串。它提示用户输入一个值并等待用户提供输入。然后将用户的输入作为字符串存储在变量中,稍后可以在程序中使用。
|
||||
|
||||
#### 句法
|
||||
|
||||
@ -34,21 +34,20 @@ Python 中的 input 函数用于接受用户输入的字符串。它提示用户
|
||||
input("your message to user")
|
||||
```
|
||||
|
||||
当你运行 input 函数时,它会向用户显示消息并_等待_输入。光标等待。当用户输入并按下回车键,input 函数就会读取用户的输入。该值存储在你指定的变量中。
|
||||
当你运行 `input()` 函数时,它会向用户显示消息并 _等待_ 输入。显示光标等待。当用户输入并按下回车键,`input()` 函数就会读取用户的输入。该值存储在你指定的变量中。
|
||||
|
||||
让我们看几个例子。
|
||||
|
||||
### 示例 1:简单的 input 函数用法
|
||||
|
||||
以下代码片段接受输入并显示带有附加字符串的输出。
|
||||
### 示例 1:简单的 input() 函数用法
|
||||
|
||||
以下代码片段接受输入并显示带有附加字符串的输出:
|
||||
|
||||
```
|
||||
your_name = input("Enter your name:")
|
||||
print("Hello " + your_name)
|
||||
```
|
||||
|
||||
**输出:**
|
||||
输出:
|
||||
|
||||
```
|
||||
Enter your name:arindamHello arindam
|
||||
@ -58,7 +57,7 @@ Enter your name:arindamHello arindam
|
||||
|
||||
### 示例 2:以整数和浮点数作为输入
|
||||
|
||||
在使用 input() 函数时,你还可以在运行时将输入转换为 int() 或 float() 。这是一个例子。
|
||||
在使用 `input()` 函数时,你还可以在运行时使用 `int()` 或 `float()` 将输入转换。这是一个例子:
|
||||
|
||||
```
|
||||
no_of_books = int(input("Enter total books ordered:"))
|
||||
@ -79,7 +78,7 @@ Total price: 50.5
|
||||
|
||||
### 示例 3:连接列表
|
||||
|
||||
你还可以使用其他函数(例如列表)来接受一组值并将它们转换为 Python 中的 [list][6]。这是一个接受输入并将其转换为列表的示例。然后使用另一组值并附加到第一个列表。
|
||||
你还可以使用其他函数(例如列表)来接受一组值并将它们转换为 Python 中的 [列表][6]。这是一个接受输入并将其转换为列表的示例。然后使用另一组值并附加到第一个列表:
|
||||
|
||||
```
|
||||
# 获取第一个列表的输入
|
||||
@ -96,7 +95,7 @@ for j in list_2:
|
||||
print(list_1)
|
||||
```
|
||||
|
||||
**输出:**
|
||||
输出:
|
||||
|
||||
```
|
||||
Enter numbers for list 1:1234
|
||||
@ -106,7 +105,7 @@ Enter some letters for list 2:ABCD
|
||||
|
||||
### 总结
|
||||
|
||||
我希望这个简单的指南通过几个示例阐明了 input() 函数。对于简单的场景,它是一个强大的功能,可以从标准输入中接受值。
|
||||
我希望这个简单的指南通过几个示例阐明了 `input()` 函数。对于简单的场景,它是一个强大的功能,可以从标准输入中接受值。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -115,15 +114,15 @@ via: https://www.debugpoint.com/input-function-python/
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][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/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/pyinput.jpg
|
||||
[2]: https://www.debugpoint.com/install-python-3-11-ubuntu/
|
||||
[3]: https://www.debugpoint.com/install-python-windows/
|
||||
[4]: https://www.debugpoint.com/install-idle-ubuntu-linux/
|
||||
[2]: https://linux.cn/article-15230-1.html
|
||||
[3]: https://linux.cn/article-15480-1.html
|
||||
[4]: https://linux.cn/article-15622-1.html
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2023/03/Python-Input-function-a-simple-example.jpg
|
||||
[6]: https://docs.python.org/3/library/stdtypes.html?highlight=list#lists
|
@ -0,0 +1,145 @@
|
||||
[#]: subject: "How to know if You are Behind a Proxy Server?"
|
||||
[#]: via: "https://itsfoss.com/check-proxy-server/"
|
||||
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15657-1.html"
|
||||
|
||||
如何知道你是否使用了代理服务器?
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
什么是代理?
|
||||
|
||||
代理是充当客户端和另一台服务器之间的中介的服务器或软件应用。它充当客户端和互联网之间的网关,允许用户访问在线资源,同时隐藏他们的身份、位置和其他个人信息。
|
||||
|
||||
代理通常用于增强安全性和隐私,并为你的网络添加过滤器/防火墙。
|
||||
|
||||
有几种类型的代理,如 HTTP 代理、SOCKS 代理、透明代理等。
|
||||
|
||||
除非你在透明代理后面,否则检查起来毫不费力。在这里,我将讨论检测透明代理和常用代理的方法。
|
||||
|
||||
### 如何检查你是否在透明代理后面
|
||||
|
||||
虽然每种类型的代理都有其特性和功能,但如果它是透明代理,你将无法在客户端的 PC 上检测到它。这是因为透明代理在后台静默运行,拦截所有流量而不修改它。
|
||||
|
||||
有时,可能是你的互联网服务提供商和内容交付网络使用它们来缓存资源的副本以节省带宽或只是为了监视/过滤网络。
|
||||
|
||||
有几种方法可以检查你是否在透明代理后面:
|
||||
|
||||
- **通过某些在线 IP 检测/检查网站获得的 IP 地址可能与你的计算机或设备的 IP 地址不匹配**。因为代理服务器正在拦截你的流量并将其与 IP 地址一起发送出去。
|
||||
- **检查你的网络设置以查看是否配置了代理服务器。**
|
||||
- **借助一些在线代理检测工具。**
|
||||
- **连接到你知道不存在的服务器。** 如果网页上显示的错误看起来与平时不同,你可能使用了代理。
|
||||
|
||||
无论你喜欢与否,你始终可以使用 [VPN 服务][1] 绕过透明代理。
|
||||
|
||||
### 如何检查你是否在 Ubuntu 上使用代理
|
||||
|
||||
Ubuntu 或任何其他 Linux 发行版提供了多种检查方法。此处使用运行 GNOME 的 Ubuntu 22.10。
|
||||
|
||||
#### 使用 GNOME 设置
|
||||
|
||||
这是直接的 GUI 方式。打开 GNOME <ruby>设置<rt>Settings</rt></ruby> 并转到 “<ruby>网络<rt>Networks</rt></ruby>” 选项卡,然后按旁边的齿轮图标。
|
||||
|
||||
![Select the gear icon adjacent to the Network proxy section][2]
|
||||
|
||||
它应该默认 <ruby>禁用<rt>Disabled</rt></ruby>。
|
||||
|
||||
如果你在代理后面,你可以在这里看到不同的状态。在代理设置中,你可以看到,我在这里使用了代理(手动配置)。
|
||||
|
||||
![Proxy details in GNOME Settings][3]
|
||||
|
||||
可以使用 GNOME 桌面中的 `gsettings` 命令更改相同的代理状态。
|
||||
|
||||
```
|
||||
gsettings set org.gnome.system.proxy mode 'none'
|
||||
```
|
||||
|
||||
你可以将 `none` 替换为 `auto` 或 `manual`。请记住,此设置是临时的,仅适用于当前用户。
|
||||
|
||||
#### 使用命令行
|
||||
|
||||
你可以通过命令行以多种方式获取代理的状态。
|
||||
|
||||
##### 通过列出关联的环境变量获取代理的状态
|
||||
|
||||
打开终端并运行以下任一命令:
|
||||
|
||||
```
|
||||
env | grep -i proxy
|
||||
```
|
||||
|
||||
```
|
||||
cat /etc/environment | grep -i proxy
|
||||
```
|
||||
|
||||
```
|
||||
set | grep -i proxy
|
||||
```
|
||||
|
||||
![Using set command to check Proxy variables][4]
|
||||
|
||||
空输出意味着没有配置代理。否则,它将打印相关的环境变量。
|
||||
|
||||
> 🚧 请注意,如果你将代理设置为环境变量,这将起作用。
|
||||
|
||||
或者,你可以回显每个代理变量以检查是否设置了特定的代理变量。
|
||||
|
||||
以下是你可以在终端中输入的内容:
|
||||
|
||||
```
|
||||
echo $http_proxy
|
||||
```
|
||||
|
||||
##### 使用 nmcli 命令检查
|
||||
|
||||
打开终端并输入:
|
||||
|
||||
```
|
||||
nmcli connection show
|
||||
```
|
||||
|
||||
![List all the connections using nmcli command][5]
|
||||
|
||||
这将列出你的连接和关联的 UUID 编号。记下要检查的连接的 UUID 编号。然后使用命令:
|
||||
|
||||
```
|
||||
nmcli connection show <UUID or name> | grep -i "proxy"
|
||||
```
|
||||
|
||||
这将列出变量,你可以在其中记下代理服务器和端口。
|
||||
|
||||
![Proxy details using nmcli command][6]
|
||||
|
||||
### 总结
|
||||
|
||||
我希望本指南可以帮助你了解你是否在使用代理。
|
||||
|
||||
我必须提一下,**并非所有代理配置都是恶意的。**
|
||||
|
||||
但是,了解你的系统是否配置了代理很重要。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/check-proxy-server/
|
||||
|
||||
作者:[Sreenath][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://itsfoss.com/best-vpn-linux/
|
||||
[2]: https://itsfoss.com/content/images/2023/02/select-the-gear-icon-adjacent-to-proxy.png
|
||||
[3]: https://itsfoss.com/content/images/2023/02/Proxy-in-GNOME-settings.png
|
||||
[4]: https://itsfoss.com/content/images/2023/02/set_grep_proxy.png
|
||||
[5]: https://itsfoss.com/content/images/2023/02/nmcli-connection-show.png
|
||||
[6]: https://itsfoss.com/content/images/2023/02/proxy-using-nmcli.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/24/174021wkdzn81kvtnngzaw.jpg
|
@ -0,0 +1,67 @@
|
||||
[#]: subject: "How to set up your own open source DNS server"
|
||||
[#]: via: "https://opensource.com/article/23/3/open-source-dns-server"
|
||||
[#]: author: "Amar Gandhi https://opensource.com/users/amar1723"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15672-1.html"
|
||||
|
||||
如何设置自己的保护隐私的 DNS 服务器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 通过开源项目 AdGuard Home 运行你自己的 DNS 服务器来控制你的互联网隐私。
|
||||
|
||||
域名服务器(DNS)将域名(如 example.com)与 IP 地址(如 93.184.216.34)相关联。这就是当你输入 URL 或搜索引擎返回 URL 供你访问时,你的网络浏览器如何知道在世界的哪个地方寻找数据。DNS 为互联网用户提供了极大的便利,但也并非没有缺点。例如,付费广告会出现在网页上,因为你的浏览器会自然的使用 DNS 来解析这些广告在互联网上“存在”的位置。同样,跟踪你在线活动的软件通常由通过 DNS 解析的服务启用。你不想完全关闭 DNS,因为它非常有用。但是你可以运行自己的 DNS 服务,以便更好地控制它的使用方式。
|
||||
|
||||
我相信运行自己的 DNS 服务器至关重要,这样你就可以阻止广告并保持你的浏览隐私,远离试图分析你的在线交互的提供商。我过去用过 [Pi-hole][1],今天仍然推荐它。然而,最近,我一直在我的网络上运行开源项目 [AdGuard Home][2]。我发现它有一些值得探索的独特功能。
|
||||
|
||||
### AdGuard Home
|
||||
|
||||
在我使用过的开源 DNS 软件中,[AdGuard Home][2] 是最容易设置和维护的。你可以在一个项目中获得许多 DNS 解析解决方案,例如 DNS over TLS、DNS over HTTPS 和 DNS over QUIC。
|
||||
|
||||
你可以使用一个脚本将 AdGuard 设置为容器或本地服务:
|
||||
|
||||
```
|
||||
$ curl -s -S -L \
|
||||
https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh
|
||||
```
|
||||
|
||||
查看这个脚本以便了解它的作用。了解了它的工作过程后,再运行它:
|
||||
|
||||
```
|
||||
$ sh ./install.sh
|
||||
```
|
||||
|
||||
我最喜欢 AdGuard Home 的一些功能:
|
||||
|
||||
- 一个简单的管理界面
|
||||
- 使用 AdGuard 阻止列表来阻止广告和恶意软件
|
||||
- 单独配置网络上每个设备的选项
|
||||
- 强制在特定设备上进行安全搜索
|
||||
- 为管理界面设置 HTTPS,这样与它的远程交互是完全加密的
|
||||
|
||||
我发现 AdGuard Home 为我节省了时间。它的黑名单比 Pi-hole 上的黑名单更强大。你可以快速轻松地将其配置为 DNS over HTTPS。
|
||||
|
||||
### 没有更多的恶意软件
|
||||
|
||||
恶意软件是你计算机上不需要的内容。它并不总是对你有直接危险,但它可能会为第三方带来危险活动。这不是互联网最初的目的。我认为你应该托管自己的 DNS 服务,以保护你的互联网历史记录的私密性,并避免被微软、谷歌和亚马逊等已知跟踪器掌握。在你的网络上试用 AdGuard Home 吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/open-source-dns-server
|
||||
|
||||
作者:[Amar Gandhi][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/amar1723
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/article/18/2/block-ads-raspberry-pi
|
||||
[2]: https://github.com/AdguardTeam/AdGuardHome
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/29/150451m9ggza42gagt9gih.jpg
|
@ -3,18 +3,20 @@
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15668-1.html"
|
||||
|
||||
Python 中的变量:概念与示例
|
||||
======
|
||||
|
||||
**本教程解释了 Python 中变量的概念、它们的类型,以及如何在实际项目中使用的示例。**
|
||||
![][0]
|
||||
|
||||
> 本教程解释了 Python 中变量的概念、它们的类型,以及如何在实际项目中使用的示例。
|
||||
|
||||
在 Python 中,变量是存储值的保留内存位置。
|
||||
|
||||
它们是可以分配一个值并在整个代码中引用它的名称。使用变量使值可访问并为值提供与你的代码相关的上下文/含义。
|
||||
它们是个名称,可以分配一个值给它并在整个代码中引用它。使用变量使值可访问并为值提供与你的代码相关的上下文/含义。
|
||||
|
||||
在开始之前,我希望你已经安装了 Python 并设置了一个基本的编辑器。如果没有,请参考我的以下指南:
|
||||
|
||||
@ -25,15 +27,15 @@ Python 中的变量:概念与示例
|
||||
### 变量规则
|
||||
|
||||
- 变量区分大小写。
|
||||
- 变量名称只能包含大写和小写字母(A–Z、a–z)、数字 (0–9) 和下划线 (_)。
|
||||
- 他们不能以数字开头。
|
||||
- Python 变量是[动态类型][4]。
|
||||
- 变量名称只能包含大写和小写字母(A–Z、a–z)、数字(0–9)和下划线(_)。
|
||||
- 它们不能以数字开头。
|
||||
- Python 变量是 [动态类型][4]。
|
||||
- Python 支持 Unicode 变量(例如 é 和 ü 等装饰字母,甚至中文、日文和阿拉伯符号)。
|
||||
- 根据 [PEP 8 标准][5],变量名只能是小写,单词可以用下划线分隔(例如 total_price)。
|
||||
|
||||
### Python 变量:示例
|
||||
|
||||
要在 Python 中创建一个变量,我们需要使用赋值运算符 (=) 为其赋值。例如,下面的代码行创建了一个名为 “x” 的变量并为其赋值 10:
|
||||
要在 Python 中创建一个变量,我们需要使用赋值运算符(`=`)为其赋值。例如,下面的代码行创建了一个名为 `x` 的变量并为其赋值 `10`:
|
||||
|
||||
```
|
||||
x = 10
|
||||
@ -65,23 +67,23 @@ z = 2 + 3j
|
||||
x = 5
|
||||
y = 10
|
||||
z = x + y
|
||||
print(z) # Output: 15
|
||||
print(z) # 输出:15
|
||||
|
||||
# 字符串连接
|
||||
first_name = "John"
|
||||
last_name = "Doe"
|
||||
full_name = first_name + " " + last_name
|
||||
print(full_name) # Output: John Doe
|
||||
print(full_name) # 输出:John Doe
|
||||
```
|
||||
|
||||
![A simple demonstration of variables in Python][6]
|
||||
|
||||
变量也可以在现实世界的项目中用于存储和操作数据。例如,在 Web 应用中,我们可以使用变量来[存储用户输入][7]、数据库查询以及向用户输出数据。
|
||||
变量也可以在现实世界的项目中用于存储和操作数据。例如,在 Web 应用中,我们可以使用变量来 [存储用户输入][7]、数据库查询以及向用户输出数据。
|
||||
|
||||
```
|
||||
# 用户输入
|
||||
name = input("What is your name? ")
|
||||
print("Hello, " + name + "!") # Output: Hello, John!
|
||||
print("Hello, " + name + "!") # 输出: Hello, John!
|
||||
|
||||
# 数据库查询
|
||||
import sqlite3
|
||||
@ -92,50 +94,50 @@ cursor = conn.cursor()
|
||||
cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
|
||||
user = cursor.fetchone()
|
||||
|
||||
print(user) # Output: (1, 'John Doe', 'johndoe@example.com')
|
||||
print(user) # 输出: (1, 'John Doe', 'johndoe@example.com')
|
||||
|
||||
# 输出数据给用户
|
||||
balance = 100.00
|
||||
print("Your current balance is ₹" + str(balance)) # Output: Your current balance is ₹100.0
|
||||
print("Your current balance is ₹" + str(balance)) # 输出: Your current balance is ₹100.0
|
||||
```
|
||||
|
||||
### 使用变量时的常见错误
|
||||
|
||||
在处理变量时,你可能会遇到一些常见错误。这里是其中的一些。
|
||||
|
||||
- `NameError`:当你尝试访问尚未定义的变量时会发生此错误。例如,如果你尝试打印一个尚未赋值的变量的值,你将得到一个 NameError。以下代码给出了 NameError,因为变量 “Full_name” 未定义。
|
||||
- `NameError`:当你尝试访问尚未定义的变量时会发生此错误。例如,如果你尝试打印一个尚未赋值的变量的值,你将得到一个 `NameError`。以下代码给出了 `NameError`,因为变量 `Full_name` 未定义。
|
||||
|
||||
```
|
||||
# NameError 演示
|
||||
first_name = "John"
|
||||
last_name = "Doe"
|
||||
full_name = first_name + " " + last_name
|
||||
print(Full_name) # NameError
|
||||
```
|
||||
```
|
||||
# NameError 演示
|
||||
first_name = "John"
|
||||
last_name = "Doe"
|
||||
full_name = first_name + " " + last_name
|
||||
print(Full_name) # NameError
|
||||
```
|
||||
|
||||
![NameError example][8]
|
||||
![NameError example][8]
|
||||
|
||||
- `TypeError`:当你尝试对错误数据类型的变量进行操作时会发生此错误。例如,如果你尝试连接一个字符串和一个整数,你将得到 TypeError。下面的代码片段给出了 TypeError。
|
||||
- `TypeError`:当你尝试对错误数据类型的变量进行操作时会发生此错误。例如,如果你尝试连接一个字符串和一个整数,你将得到 `TypeError`。下面的代码片段给出了 `TypeError`。
|
||||
|
||||
```
|
||||
# TypeError 演示
|
||||
first_name = "John"
|
||||
age = 10
|
||||
print(first_name + age)
|
||||
```
|
||||
```
|
||||
# TypeError 演示
|
||||
first_name = "John"
|
||||
age = 10
|
||||
print(first_name + age)
|
||||
```
|
||||
|
||||
![TypeError example in Python][9]
|
||||
![TypeError example in Python][9]
|
||||
|
||||
- `ValueError`:当你尝试将变量转换为不同的数据类型但无法进行转换时会发生此错误。例如,如果你尝试将包含字母的字符串转换为整数,你将得到 ValueError。
|
||||
- `ValueError`:当你尝试将变量转换为不同的数据类型但无法进行转换时会发生此错误。例如,如果你尝试将包含字母的字符串转换为整数,你将得到 `ValueError`。
|
||||
|
||||
```
|
||||
# ValueError 演示
|
||||
first_name = "John"
|
||||
age = 10
|
||||
print(int(first_name))
|
||||
```
|
||||
```
|
||||
# ValueError 演示
|
||||
first_name = "John"
|
||||
age = 10
|
||||
print(int(first_name))
|
||||
```
|
||||
|
||||
![ValueError in Python][10]
|
||||
![ValueError in Python][10]
|
||||
|
||||
### 总结
|
||||
|
||||
@ -148,19 +150,20 @@ via: https://www.debugpoint.com/python-variables/
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][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/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.debugpoint.com/install-python-3-11-ubuntu/
|
||||
[2]: https://www.debugpoint.com/install-python-windows/
|
||||
[3]: https://www.debugpoint.com/install-idle-ubuntu-linux/
|
||||
[1]: https://linux.cn/article-15230-1.html
|
||||
[2]: https://linux.cn/article-15480-1.html
|
||||
[3]: https://linux.cn/article-15622-1.html
|
||||
[4]: https://en.wikipedia.org/wiki/Type_system
|
||||
[5]: https://peps.python.org/pep-0008/
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2023/03/A-simple-demonstration-of-variables-in-Python.jpg
|
||||
[7]: https://www.debugpoint.com/input-function-python/
|
||||
[7]: https://linux.cn/article-15660-1.html
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2023/03/NameError-example.jpg
|
||||
[9]: https://www.debugpoint.com/wp-content/uploads/2023/03/TypeError-example-in-Python.jpg
|
||||
[10]: https://www.debugpoint.com/wp-content/uploads/2023/03/ValueError-in-Python.jpg
|
||||
[10]: https://www.debugpoint.com/wp-content/uploads/2023/03/ValueError-in-Python.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/28/090047xt7zffdrgrmmfxrn.jpg
|
@ -0,0 +1,212 @@
|
||||
[#]: subject: "Ubuntu 23.04 “Lunar Lobster”: Best New Features"
|
||||
[#]: via: "https://www.debugpoint.com/ubuntu-23-04-features/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15669-1.html"
|
||||
|
||||
Ubuntu 23.04 “Lunar Lobster” 的最佳新功能
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 介绍最新的 Ubuntu 23.04 “Lunar Lobster” 版本,它包含了大量的新功能和改进。
|
||||
|
||||
代号为 “<ruby>月球龙虾<rt>Lunar Lobster</rt></ruby>” 的 Ubuntu 23.04 是 2023 年的第一个短期版本,它将被支持 9 个月,直到 2024 年 1 月。这个版本采用了新的软件包和技术来改进 Ubuntu 的核心后台和进展工作。在某种程度上,许多变化是作为明年的 LTS 版本(Ubuntu 24.04)的准备工作而被确定的。
|
||||
|
||||
它的开发周期几乎接近结束。截至发稿时,测试版已经冻结。所以,现在是探索这个版本的新功能的好时机。
|
||||
|
||||
但在此之前,先来看看即将到来的里程碑:
|
||||
|
||||
- 测试版冻结: 2023 年 3 月 27 日
|
||||
- 测试版发布: 2023 年 3 月 30 日
|
||||
- 候选版本:2023 年 4 月 13 日
|
||||
- 最终版本:2023 年 4 月 20 日
|
||||
|
||||
![Ubuntu 23.04 Lunar Lobster Daily Live desktop][1]
|
||||
|
||||
### Ubuntu 23.04 的新功能
|
||||
|
||||
#### 新的桌面安装程序
|
||||
|
||||
Ubuntu 新的基于 Rust 的桌面安装程序终于可以在这个版本中体验了。这项工作历经了两年多的时间。在经历了许多障碍和关键错误的修复后,现在已经稳定到可以在正式版本中发布。从这个版本开始,经典的 Ubiquity 被全新的安装程序所取代,如下面一组图片所示:
|
||||
|
||||
![新的 Ubuntu 安装程序--主页面][2]
|
||||
|
||||
![分区摘要页][3]
|
||||
|
||||
![外观变化][4]
|
||||
|
||||
![用户信息页面][5]
|
||||
|
||||
然而,正如我从一些消息来源听到的,旧的 Uqiuity 将继续保留(直到明年)。但我不完全确定旧的安装程序将如何启动。因为默认的 <ruby>立付介质<rt>Live Media</rt></ruby> 会启动新的安装程序。
|
||||
|
||||
与旧安装程序的相比,新的有一些变化。首先,相对于旧的 Uqiuity 对话框和小工具控制,外观和感觉更加现代。
|
||||
|
||||
关于分区的摘要细节现在作为一个单独的页面出现,而不是一个弹出框。
|
||||
|
||||
此外,Ubuntu 23.04 现在在安装前会询问深色/浅色模式选项。我不确定这样做的必要性,因为 Ubuntu 已经在一个单独的应用程序中定义了一些开箱步骤。
|
||||
|
||||
#### GNOME 44 桌面
|
||||
|
||||
Ubuntu 23.04 桌面版采用了 GNOME 44。这个版本的 GNOME 44 带来了一堆长期等待的更新。例如,在这个版本中,你可以在本地文件选取器对话框中体验到图像预览。此外,文件应用得到了期待已久的缺失功能,即原生的文件夹展开视图(树状视图)。你可以使用下面的设置来启用它。
|
||||
|
||||
![新的可展开文件夹视图][6]
|
||||
|
||||
![启用树状视图的设置][7]
|
||||
|
||||
在 GNOME 44 中的其他关键变化包括:文件应用现在支持在粘贴图像数据时创建文件,改进的无障碍设置页面可以提供更好的导航,以及大大改进的 GNOME 网页浏览器。
|
||||
|
||||
你可以在下面这篇功能亮点页面上了解更多关于 GNOME 44 的发布:
|
||||
|
||||
> **[GNOME 44 - 最佳功能][8]**
|
||||
|
||||
#### 精简 ISO 镜像
|
||||
|
||||
这是一个令人惊讶的举动,Ubuntu 团队在这个版本中 [引入][9] 一个官方的精简 ISO 镜像(不到 200MB)。一旦发布,你可以使用这个精简 ISO 镜像来创建自定义的 Ubuntu Linux。截至发稿时,我们还没有得到这个精简镜像的日常构建 ISO。
|
||||
|
||||
然而,Xubuntu 团队 [已经发布了][10] 一个精简 ISO 镜像,我尝试了一下。同样地,所有的官方风味版都有望得到他们自己的精简 ISO 文件。
|
||||
|
||||
更多的信息将在未来几天内到达。
|
||||
|
||||
#### 多用 Snap,少用 Flatpak
|
||||
|
||||
一些与 Snap 和 Flatpak 相关的重要变化即将到来,你应该为此做好准备。
|
||||
|
||||
首先,推行更多的 Snap 包是显而易见的,因为官方 Telegram 桌面应用程序现在在 Ubuntu 中使用 Snap 包。
|
||||
|
||||
此外,Ubuntu 计划将 Steam 桌面客户端作为 Snap 包发布,该客户端 [目前正在测试中][11]。Steam 桌面客户端现在以原生 deb 和 Flatpak 包的形式提供。Steam Snap 预计将在今年年底到来,而不是在这个版本中。
|
||||
|
||||
与此同时,默认的 Flatpak 和 Flathub 集成现在已经正式从所有支持的 Ubuntu 官方风味版中 [移除][12]。这个决定在网上引起了一些 “讨论”。
|
||||
|
||||
因此,从这个版本开始,Ubuntu MATE 和 Kubuntu 将不会默认搭载 Flatpak/Flathub。然而,你可以通过 [只需几个步骤][13] 安装它。
|
||||
|
||||
#### 新的应用程序
|
||||
|
||||
Ubuntu 23.04 的默认应用程序集合一如既往地进行了升级。然而,你可能会注意到一些关键的变化。
|
||||
|
||||
首先,LibreOffice 可能看起来有点不同。LibreOffice 团队最近改变了默认的图标主题,在 Ubuntu GNOME 的桌面环境中,它看起来非常棒。
|
||||
|
||||
在这个版本中包含的 LibreOffice 7.5 中, Writer 有一个改进的书签模块,Calc 电子表格有了新的数字格式,Impress 有了新的表格设计风格等等。
|
||||
|
||||
你可以在这里阅读更多关于 [LibreOffice 7.5 的功能][14]。
|
||||
|
||||
![新的 LibreOffice 图标][15]
|
||||
|
||||
Ubuntu 23.04 中其他应用程序的总结:
|
||||
|
||||
- [Firefox 111][16](Snap)
|
||||
- LibreOffice 7.5
|
||||
- Transmission 3.0
|
||||
- Shotwell 图像查看器 0.30
|
||||
|
||||
#### 官方风味版
|
||||
|
||||
对于所有的教育工作者和学生来说,有一个好消息。从 23.04 版本开始,Edubuntu 将 [正式出现][17]。它是 Ubuntu 官方风味版列表中的另一个补充。Edubuntu 可能会有一个更大的 ISO 文件(大约 5GB),并安装了所有与教育有关的 FOSS 软件。我将会有一篇单独的文章来点评这个风味版。
|
||||
|
||||
此外,如下的风味版都有其对应的桌面环境:
|
||||
|
||||
- 配备 [KDE Plasma 5.27][18] 的 Kubuntu
|
||||
- 配备 [Xfce 4.18][19] 的 Xubuntu
|
||||
- 配备 MATE 1.26.1 的 Ubuntu MATE
|
||||
- 配备 [LXQt 1.2][20] 的 Lubuntu
|
||||
- 配备 Budgie 10.7 的 Ubuntu Budgie
|
||||
|
||||
Ubuntu Budgie 23.04 带来了一些令人兴奋的功能,如边缘平铺、热角等。
|
||||
|
||||
#### 内核和工具链更新
|
||||
|
||||
截至发稿时,每日构建副本都是 Linux 内核 6.1。然而,在内核冻结(2023 年 4 月 6 日)之前,目前的主线内核 6.2 可能会到达 Ubuntu 23.04。Linux 内核 6.2 改进了对 GPU、CPU、端口和 Rust 更新的支持。
|
||||
|
||||
在核心部分,Python 3.11 现在可以在 Ubuntu 23.04 中开箱即用。你不需要再单独 [安装 Python 3.11][21]。值得一提的是,Python 3.12 版本将在今年发布,目前正在进行多次 RC 测试。
|
||||
|
||||
其他工具链的更新如下:
|
||||
|
||||
- GCC 13
|
||||
- GlibC 2.37
|
||||
- Ruby 3.1
|
||||
- golang 1.2
|
||||
- LLVM 16
|
||||
|
||||
#### Ubuntu 23.04 的新壁纸
|
||||
|
||||
桌面版本永远不会缺席一些新的很酷的壁纸。在成功的 [壁纸竞赛][22] 之后,获胜者被选为以 “月亮和龙虾” 为特色的默认壁纸。
|
||||
|
||||
这里是默认的一张。而其余的你可以在 [这里][23] 找到。
|
||||
|
||||
![Ubuntu 23.04 Lunar Lobster 默认壁纸][24]
|
||||
|
||||
### 下载
|
||||
|
||||
每日构建的 ISO 文件存在于以下 Ubuntu 桌面和风味版的链接中。
|
||||
|
||||
请注意,你不应该将这些作为主要用途。它们有一些错误(至少我发现了一些),而且还不完全稳定。
|
||||
|
||||
| Ubuntu 风味版 | .iso 镜像 - 日常构建 |
|
||||
|:-:|:-:|
|
||||
| Ubuntu 23.04 桌面(GNOME)| [https://cdimage.ubuntu.com/ubuntu/daily-live/pending/][25] |
|
||||
| Xubuntu 23.04 | [https://cdimage.ubuntu.com/xubuntu/daily-live/current/][26] |
|
||||
| Ubuntu MATE 23.04 | [https://cdimage.ubuntu.com/ubuntu-mate/daily-live/current/][27] |
|
||||
| Ubuntu Kylin 23.04 | 尚无 |
|
||||
| Lubuntu 23.04 | [https://cdimage.ubuntu.com/lubuntu/daily-live/current/][28] |
|
||||
| Kubuntu 23.04 | [https://cdimage.ubuntu.com/kubuntu/daily-live/current/][29] |
|
||||
| Ubuntu Budgie 23.04 | [https://cdimage.ubuntu.com/ubuntu-budgie/daily-live/current/][30] |
|
||||
| Ubuntu Unity 23.04 | [https://cdimage.ubuntu.com/ubuntu-unity/daily-live/current/][31] |
|
||||
| Edubuntu 23.04 | [https://cdimage.ubuntu.com/edubuntu/daily-live/current/][32] |
|
||||
|
||||
### 总结
|
||||
|
||||
总之,新的 Ubuntu 23.04 有望为桌面用户提供更流畅、更无缝的体验。
|
||||
|
||||
从改进的安全功能到增强的生产力工具和应用程序,这次更新肯定会让 Ubuntu 的爱好者和粉丝感到高兴。无论你是经验丰富的用户还是 Ubuntu 生态系统的新手,这个版本都值得一看。
|
||||
|
||||
最后,Ubuntu 23.04 将于 2023 年 4 月 20 日发布。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/ubuntu-23-04-features/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/Ubuntu-23.04-Lunar-Lobster-Daily-Live-desktop.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2023/03/New-Ubuntu-Installer-main-page.jpg
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2023/03/Partition-summary-page.jpg
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2023/03/Appearane-changes.jpg
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2023/03/User-information-page.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2023/02/New-expandable-folder-view.jpg
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2023/02/Settings-to-enable-tree-view.jpg
|
||||
[8]: https://www.debugpoint.com/gnome-44/
|
||||
[9]: https://debugpointnews.com/ubuntu-mini-iso-announcement/
|
||||
[10]: https://www.debugpoint.com/xubuntu-minimal/
|
||||
[11]: https://discourse.ubuntu.com/t/steam-call-for-testing/34575
|
||||
[12]: https://debugpointnews.com/ubuntu-flavours-flatpak/
|
||||
[13]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[14]: https://www.debugpoint.com/libreoffice-7-5/
|
||||
[15]: https://www.debugpoint.com/wp-content/uploads/2023/03/New-LibreOffice-Icons.jpg
|
||||
[16]: https://debugpointnews.com/firefox-111/
|
||||
[17]: https://discourse.ubuntu.com/t/announcing-edubuntu-revival/32929
|
||||
[18]: https://www.debugpoint.com/kde-plasma-5-27/
|
||||
[19]: https://www.debugpoint.com/xfce-4-18-review/
|
||||
[20]: https://www.debugpoint.com/lxqt-1-2-0-features/
|
||||
[21]: https://www.debugpoint.com/install-python-3-11-ubuntu/
|
||||
[22]: https://debugpointnews.com/ubuntu-23-04-wallpaper-competition/
|
||||
[23]: https://discourse.ubuntu.com/t/lunar-lobster-23-04-wallpaper-competition/33132
|
||||
[24]: https://www.debugpoint.com/wp-content/uploads/2023/03/Ubuntu-23.04-Lunar-Lobster-Default-Wallpapers.jpg
|
||||
[25]: https://cdimage.ubuntu.com/ubuntu/daily-live/pending/
|
||||
[26]: https://cdimage.ubuntu.com/xubuntu/daily-live/current/
|
||||
[27]: https://cdimage.ubuntu.com/ubuntu-mate/daily-live/current/
|
||||
[28]: https://cdimage.ubuntu.com/lubuntu/daily-live/current/
|
||||
[29]: https://cdimage.ubuntu.com/kubuntu/daily-live/current/
|
||||
[30]: https://cdimage.ubuntu.com/ubuntu-budgie/daily-live/current/
|
||||
[31]: https://cdimage.ubuntu.com/ubuntu-unity/daily-live/current/
|
||||
[32]: https://cdimage.ubuntu.com/edubuntu/daily-live/current/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/28/170903lijh6axllqqei9bx.jpg
|
@ -0,0 +1,144 @@
|
||||
[#]: subject: "GNOME 44 is Here With New Tricks Up its Sleeve"
|
||||
[#]: via: "https://news.itsfoss.com/gnome-44-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15659-1.html"
|
||||
|
||||
GNOME 44 发布
|
||||
======
|
||||
|
||||
> GNOME 44 终于来了,它带来了重新打造的设置应用,更新了快速设置功能,改进了可访问性等等。
|
||||
|
||||
![GNOME 44][1]
|
||||
|
||||
GNOME 可以说是***最受欢迎的桌面环境**之一。
|
||||
|
||||
之前的 [GNOME 43 版本][2] 就补充了许多有用的功能,而现在的 GNOME 44 版本也是一样。
|
||||
|
||||
让我们看看都有哪些内容。
|
||||
|
||||
### 🆕 GNOME 44 有什么新功能?
|
||||
|
||||
![介绍 GNOME 44][3]
|
||||
|
||||
我们最近已经分别介绍了 GNOME 44 的最佳功能;在这里,让我回顾一下这个发布的相关细节。
|
||||
|
||||
主要的亮点包括:
|
||||
|
||||
- 设置菜单的改造
|
||||
- 快速设置的改进
|
||||
- 文件选择器的网格视图
|
||||
- 文件管理器的改进
|
||||
|
||||
#### 1、设置菜单的改造
|
||||
|
||||
![GNOME 44 上更新的设置菜单的截图][4]
|
||||
|
||||
设置菜单进行了小规模的改造,**可访问性面板被重新设计**,以提供一个更现代的导航体验。
|
||||
|
||||
![鼠标和触摸板设置更新后的截图][5]
|
||||
|
||||
然后,一项新的功能让你可以 **通过二维码分享 Wi-Fi 密码**,并且改进了鼠标/触摸板设置。
|
||||
|
||||
“设备安全”下的信息也得到了更新,以增加技术细节的清晰度。
|
||||
|
||||
![GNOME 44 设备安全][6]
|
||||
|
||||
#### 2、改进的快速设置菜单
|
||||
|
||||
![GNOME 44 快速设置面板中的蓝牙设置截图][7]
|
||||
|
||||
快速设置面板已经得到了许多更新;它现在可以让你 **查看和管理当前连接的蓝牙设备**。
|
||||
|
||||
但你必须前往设置菜单来配对新设备。
|
||||
|
||||
![GNOME 44 快速设置菜单中的新截图快捷方式][8]
|
||||
|
||||
另一个新增功能是**新的屏幕截图快捷方式**,可以毫不费力地从快速设置菜单中进行屏幕截图。
|
||||
|
||||
这还不是全部;GNOME 44 的快速设置菜单现在有一个检查**在后台运行的应用程序的巧妙方法**。
|
||||
|
||||
![][9]
|
||||
|
||||
你可以在我们之前的报道中找到关于这个功能的更多细节:
|
||||
|
||||
> **[GNOME 正在(某种程度上)恢复在几年前删除的功能](https://linux.cn/article-15551-1.html)**
|
||||
|
||||
#### 3、新的锁屏/登录窗口
|
||||
|
||||
![GNOME 44 的新锁屏和登录窗口的截图][10]
|
||||
|
||||
GNOME 44 提供了**更新的锁屏和登录窗口**,有一个更大的用户头像和各种元素的细微变化,例如时钟的字体大小。
|
||||
|
||||
#### 4、GNOME 文件选取器中的缩略图
|
||||
|
||||
![GNOME 44 的文件选取器中的文件缩略图预览截图][11]
|
||||
|
||||
去年年底,我们看到了 GNOME 文件选取器的一个**长时间要求的功能** 的 [回归][12],而现在它终于到来了。
|
||||
|
||||
GNOME 的文件选取器从来没有一个合适的缩略图预览来查看文件。取而代之的是,它**依赖于一个普通的列表视图**。
|
||||
|
||||
直到现在。
|
||||
|
||||
它现在**带来了一个合适的缩略图视图**,可以通过点击文件选取器右上角的 “列表-网格视图” 切换进行切换。
|
||||
|
||||
#### 🛠️ 其他变化和改进
|
||||
|
||||
![GNOME 44 壁纸集合][13]
|
||||
|
||||
这些并不是 GNOME 44 带来的唯一改进;这里有一些值得一提的改进:
|
||||
|
||||
- 新壁纸。
|
||||
- 对文件管理器的各种小更新带来了性能的提高。
|
||||
- Epiphany 网页浏览器被移植到 GTK4,并进行了许多错误修正。
|
||||
- 在 GNOME 软件应用中加入了一个新的过滤器,激活后只显示开源的应用程序。
|
||||
- 对联系人应用进行了各种改进,能够以二维码的形式分享联系人。
|
||||
- 对 GNOME Builder 的许多 UI 和风格进行了修复。
|
||||
- 在 [GNOME Circle][14] 集合中添加了十个新的应用程序。
|
||||
|
||||
你可以通过 [官方发布说明][15] 来了解更多。
|
||||
|
||||
### 开始使用 GNOME 44
|
||||
|
||||
你可以在下个月期待 GNOME 44 与 Ubuntu 23.04 和 Fedora 38 一起出现。
|
||||
|
||||
如果你迫不及待地想得到它,使用 [Boxes][17] 安装 [GNOME OS][16] 应该是一个测试它的好方法。
|
||||
|
||||
> **[GNOME][18]**
|
||||
|
||||
💬 你对这个丰富的 GNOME 44 更新有何看法?你想在你的 Linux 系统上使用它吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/gnome-44-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/gnome-44-release.jpg
|
||||
[2]: https://news.itsfoss.com/gnome-43-release/
|
||||
[3]: https://youtu.be/N7SGe1MiqNA
|
||||
[4]: https://news.itsfoss.com/content/images/2023/03/GNOME44_settings.jpg
|
||||
[5]: https://news.itsfoss.com/content/images/2023/03/GNOME44_settings_2.jpg
|
||||
[6]: https://news.itsfoss.com/content/images/2023/03/gnome-44-device-security.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/03/GNOME44_QuickSettings.jpg
|
||||
[8]: https://news.itsfoss.com/content/images/2023/03/GNOME44_QuickSettings_2.jpg
|
||||
[9]: https://news.itsfoss.com/content/images/2023/03/background-app-running--1-.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/03/GNOME44_lockscreen.jpg
|
||||
[11]: https://news.itsfoss.com/content/images/2023/03/GNOME44_file_view.jpg
|
||||
[12]: https://news.itsfoss.com/gnome-file-picker/
|
||||
[13]: https://news.itsfoss.com/content/images/2023/03/gnome-44-wallpapers.jpg
|
||||
[14]: https://circle.gnome.org/?ref=its-foss-news
|
||||
[15]: https://release.gnome.org/44/?ref=its-foss-news
|
||||
[16]: https://os.gnome.org/?ref=its-foss-news
|
||||
[17]: https://wiki.gnome.org/Apps/Boxes?ref=its-foss-news
|
||||
[18]: https://www.gnome.org/getting-gnome/?ref=its-foss-news
|
@ -0,0 +1,77 @@
|
||||
[#]: subject: "Adding a Pop of Color to GNOME: Accent Colors Are on the Way"
|
||||
[#]: via: "https://news.itsfoss.com/gnome-accent-colors/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15665-1.html"
|
||||
|
||||
为 GNOME 添加流行色彩: 强调色即将问世
|
||||
======
|
||||
|
||||
> GNOME 用户,你在等待这一刻吗?准备好选择你的颜色吧!
|
||||
|
||||
![GNOME 的强调色][0]
|
||||
|
||||
从 [Ubuntu 22.04 LTS][2] 开始,Ubuntu 上就有了对强调色的支持,人们都很喜欢它。然而,遗憾的是,GNOME 从来没有这样的支持。
|
||||
|
||||
现在,得益于一项在 GNOME 中引入强调色支持的工作,这种情况正在改变。
|
||||
|
||||
**具体情况如何?** 最近,[Alexander Mikhaylenko][4] 发出了一个附有 [合并请求][3] 的提议,以在 GNOME 中添加对强调色的支持。
|
||||
|
||||
在目前,它还处于一个 **早期开发中状态**,尚有很多工作要做,还有一些问题要在最终发布前解决。
|
||||
|
||||
通过查看其代码,很明显,**最初将提供对 10 种强调色的支持**,发布后可能会有更多的选择。
|
||||
|
||||
**想知道它可能看起来如何?**
|
||||
|
||||
在 Mastodon 上的一个 [讨论][5] 中,GNOME 基金会的成员 [Jamie][6] 分享了一些由 Alexander 制作的模拟图,其中描绘了两种不同的配色。
|
||||
|
||||
一个是绿色的:
|
||||
|
||||
![GNOME 即将推出的强调色支持的早期预览][7]
|
||||
|
||||
另一个是蓝色的:
|
||||
|
||||
![GNOME 即将推出的强调色支持的另一个早期预览][8]
|
||||
|
||||
我必须说,这些看起来不错 😃。想在非 Fedora 发行版上得到一些 Fedora 的爱吗?把它变成蓝色和其他东西?就它了!
|
||||
|
||||
> 📝 请记住,你在上面看到的东西在最终发布前可能会有变化。
|
||||
|
||||
**预期时间?** 在上述讨论中被另一个用户问到时,Alexander 提到,我们可以 **预期强调色支持会在 GNOME 45 中出现**。
|
||||
|
||||
鉴于 GNOME 44 最近才发布,我们还需要等待一段时间才能真正看到它的实现。
|
||||
|
||||
但是,很高兴知道它有可能在不久之后出现。
|
||||
|
||||
我很喜欢 GNOME 终于得到了对强调色的支持,我希望这种等待是值得的。
|
||||
|
||||
如果你问我,我喜欢在我的 GNOME 系统上有绿色的强调色。你呢?
|
||||
|
||||
参考自: [OMG! Linux][9]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/gnome-accent-colors/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/gnome-accent-picker.jpg
|
||||
[2]: https://news.itsfoss.com/ubuntu-22-04-release/
|
||||
[3]: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2715?ref=its-foss-news
|
||||
[4]: https://gitlab.gnome.org/exalm?ref=its-foss-news
|
||||
[5]: https://crab.garden/@jamie/110063105101806314?ref=its-foss-news
|
||||
[6]: https://crab.garden/@jamie?ref=its-foss-news
|
||||
[7]: https://news.itsfoss.com/content/images/2023/03/GNOME_Accent_Color_1.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/03/GNOME_Accent_Color_2.png
|
||||
[9]: https://www.omglinux.com/gnome-accent-colors-are-coming/?ref=its-foss-news
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/27/092558szpjzk341lv7zvvg.jpg
|
@ -0,0 +1,81 @@
|
||||
[#]: subject: "Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT"
|
||||
[#]: via: "https://news.itsfoss.com/open-source-model-dolly/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lxbwolf"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15678-1.html"
|
||||
|
||||
号称可以成为 ChatGPT 平替的开源模型 “Dolly”
|
||||
======
|
||||
|
||||
> 你需要一款 ChatGPT 的平替?还得是开源的?看起来我们已经被卷入了与 ChatGPT 的开源大战。
|
||||
|
||||
![open source model dolly][1]
|
||||
|
||||
Databricks 这家软件公司,在各个领域都有所建树,尤其是在数据仓库和基于人工智能的解决方案方面。
|
||||
|
||||
最近,随着 ChatGPT 横空出世,Meta、谷歌甚至 Mozilla 都开始效仿 ChatGPT。
|
||||
|
||||
而现在,Databricks 开源了其 <ruby>[大型语言模型][3]<rt>large language model</rt></ruby>(LLM)“Dolly”,也正在以自己的方式进行尝试。
|
||||
|
||||
我们一起来看看它。
|
||||
|
||||
**发生了什么?** 在最近的公告中,Databricks 介绍了他们号称 “**廉价构建**” 的 LLM,使用 [EleutherAI][5] 的已经开源的参数 [模型][4] 提供功能。
|
||||
|
||||
他们在该模型基础上稍作调整,赋予了 Dolly 指令诸如头脑风暴和文本生成的能力。
|
||||
|
||||
当你拿它与 GPT-3 中的 **1750 亿个参数** 比较时,Dolly 的 **60 亿个参数** 就可能显得微不足道。
|
||||
|
||||
但是,当 Databricks 的人看到即使数据量与 GPT-3 相差这么多,Dolly 也能 **展示很多与 ChatGPT 相同的能力** 时,他们感到非常震惊。
|
||||
|
||||
下面是他们展示的其中一个例子:
|
||||
|
||||
![a screenshot of how dolly performs in an open question and answer scenario][6]
|
||||
|
||||
原始模型使用了 [Alpaca][7] 的数据,该模型由斯坦福大学以 Meta 的 [LLaMA][8] LLM 为基础建立。
|
||||
|
||||
但是,正如你所看到的,原始模型产生了一个非常杂乱无章的结果,而 Dolly,通过不同的模型和调整,能够产生一个更为可用的答案。
|
||||
|
||||
> 📝 有趣的事实:“<ruby>多莉<rt>Dolly</rt></ruby>” 名字取自世界上第一只克隆羊。
|
||||
|
||||
**为什么是现在?** 根据 Databricks 的说法,他们认为 **许多公司更愿意建立自己的模型,**而不是将数据发送给某个紧紧掌握模型只对外提供 API 的集中式供应商。
|
||||
|
||||
许多公司可能不愿意将他们最敏感的数据交给第三方,然后在模型质量、成本和所需行为方面进行各种权衡。
|
||||
|
||||
**你想看看吗?**
|
||||
|
||||
当然,但有一个问题。
|
||||
|
||||
你必须 **使用他们的平台来使用 Dolly**,他们已经开源了一个 [Databricks 笔记本][9],可以帮助你在 Databricks 上构建它。
|
||||
|
||||
此外,如果你想获得训练好的权重,你必须联系他们。不过我不确定他们是否会免费提供使用权。
|
||||
|
||||
总而言之,这种开源其模型的举动应该对其他公司有好处,可以保护他们的数据、节省运营成本,其他公司也能使用它创建自己的模型。
|
||||
|
||||
你可以查看其 [公告博客][10],以了解更多技术细节和其他计划。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/open-source-model-dolly/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/opensource-ai-model-dolly.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[3]: https://en.wikipedia.org/wiki/Large_language_model?ref=its-foss-news
|
||||
[4]: https://huggingface.co/EleutherAI/gpt-j-6B?ref=its-foss-news
|
||||
[5]: https://www.eleuther.ai/?ref=its-foss-news
|
||||
[6]: https://news.itsfoss.com/content/images/2023/03/Dolly_AI.jpg
|
||||
[7]: https://crfm.stanford.edu/2023/03/13/alpaca.html?ref=its-foss-news
|
||||
[8]: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/?ref=its-foss-news
|
||||
[9]: https://github.com/databrickslabs/dolly?ref=its-foss-news
|
||||
[10]: https://www.databricks.com/blog/2023/03/24/hello-dolly-democratizing-magic-chatgpt-open-models.html?ref=its-foss-news
|
@ -0,0 +1,77 @@
|
||||
[#]: subject: "Ubuntu Cinnamon Gets Official Ubuntu Flavor Status"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-cinnamon-official/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15677-1.html"
|
||||
|
||||
Ubuntu Cinnamon 正式成为 Ubuntu 官方风味版
|
||||
======
|
||||
|
||||
> 在 Ubuntu 的混合风味中加入肉桂味,完美!
|
||||
|
||||
![][0]
|
||||
|
||||
在等待下个月的 Ubuntu 23.04 吗?
|
||||
|
||||
好吧,我们已经提到,在 Ubuntu 23.04 版本的 [令人兴奋][3] 的事情中,包括一个新的官方的 Cinnamon 风味(它最初是 Ubuntu Cinnamon Remix)。
|
||||
|
||||
而且,它**现在是官方版本*,因为 Ubuntu 的技术委员会以足够的票数 [批准了它][4]。
|
||||
|
||||
### Ubuntu Cinnamon 23.04 值得期待的地方
|
||||
|
||||
![Ubuntu Cinnamon 23.04 的屏幕截图][5]
|
||||
|
||||
如果你之前已经使用过 Ubuntu Cinnamon Remix(非官方),你可能对它有点概念了。
|
||||
|
||||
如果你想要一个带有 Cinnamon 桌面的 Ubuntu 风味版,而没有众多的特殊定制,Ubuntu Cinnamon 适合你。
|
||||
|
||||
而另一方面,Linux Mint 也是一个基于 Ubuntu 的 Cinnamon 桌面。然而,你会得到一个 Mint 特有的主题、图标、工具和调整,体验有所不同。
|
||||
|
||||
基本上,如果你使用 Linux Mint,它不会让你感觉到 “只是另一种 Ubuntu 风味”。
|
||||
|
||||
别忘了,Linux Mint 默认禁用 Snap,而且是 Flatpak 优先的,这与 Ubuntu Cinnamon 23.04 的情况完全相反。
|
||||
|
||||
![Ubuntu Cinnamon 菜单截图][6]
|
||||
|
||||
所以,如果你喜欢使用 Snap 而不是 Flatpak,并且喜欢 Ubuntu 通常的风味版的工作方式,Ubuntu Cinnamon 是一个不错的补充。关于这个版本的其他一些值得注意的地方包括:
|
||||
|
||||
- 预装的应用程序,如 [Synaptic Package Manager][7]、LibreOffice 等
|
||||
- Ubuntu 的 Yaru 主题
|
||||
- 没有像你期望的 Linux Mint 那样的 XApp
|
||||
|
||||
目前,根据其 [最新的日常构建][8],Ubuntu Cinnamon 23.04 几乎已经准备好发布(将于下个月发布)。
|
||||
|
||||
它是否会赢得 Linux Mint 用户的青睐,那是另外一个故事。但是,**Ubuntu 上的新 Cinnamon 版应该会让更多的用户尝试 Cinnamon 桌面,这是件好事**。
|
||||
|
||||
Cinnamon 桌面融合了传统 Windows 风格的布局,并提供了更多的功能。
|
||||
|
||||
你可以在 [Ubuntu Cinnamon 博客][9] 上阅读官方公告。
|
||||
|
||||
你考虑改用 Ubuntu Cinnamon 作为你的首选口味吗?请在评论中分享你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-cinnamon-official/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/ubuntu-cinnamon-official-flavour.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[3]: https://news.itsfoss.com/ubuntu-23-04/
|
||||
[4]: https://lists.ubuntu.com/archives/technical-board/2023-March/002725.html?ref=its-foss-news
|
||||
[5]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-home.jpg
|
||||
[6]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-menu.jpg
|
||||
[7]: https://itsfoss.com/synaptic-package-manager/?ref=its-foss-news
|
||||
[8]: https://cdimage.ubuntu.com/ubuntucinnamon/daily-live/current/?ref=its-foss-news
|
||||
[9]: https://ubuntucinnamon.org/ubuntu-cinnamon-flavor-status-announcement/?ref=its-foss-news
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202303/31/091748pq8tq8nluucc5eth.jpg
|
@ -0,0 +1,192 @@
|
||||
[#]: subject: "5 Best PDF editors for Ubuntu and Other Linux"
|
||||
[#]: via: "https://www.debugpoint.com/pdf-editors-ubuntu/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15972-1.html"
|
||||
|
||||
适用于 Linux 的 5 个最佳 PDF 编辑器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 我们列出了适用于 Ubuntu 和其他 Linux 发行版的最佳自由及开源的 PDF 编辑器。并根据它们的 PDF 编辑功能进行比较。
|
||||
|
||||
正在寻找适用于 Ubuntu 的自由及开源 PDF 编辑器?继续阅读本文以了解 Ubuntu 的最佳 PDF 编辑器以及如何使用它们编辑 PDF 文件的分步指南。
|
||||
|
||||
Ubuntu 是深受开发人员、学生和专业人士欢迎的操作系统。编辑 PDF 文件是许多用户的常见任务,但找到适合该工作的工具可能很困难。在本文中,我们将介绍一些最好的免费和开源的 PDF 编辑器及其功能。
|
||||
|
||||
### 适用于 Ubuntu 和其他发行版的最佳免费 PDF 编辑器
|
||||
|
||||
#### LibreOffice Draw
|
||||
|
||||
LibreOffice 是一款流行的开源办公生产力套件。它的绘图组件名为 “LibreOffice Draw”,能够编辑 PDF。在此列表中的所有应用中,LibreOffice Draw 是在 Linux 中编辑 PDF 文件的最佳选择。
|
||||
|
||||
让我们看看如何编辑示例 PDF 和选项。
|
||||
|
||||
- 打开 LibreOffice Draw 并单击“<ruby>文件<rt>File</rt></ruby>”>“<ruby>打开<rt>Open</rt></ruby>”
|
||||
- 选择你要编辑的 PDF 文件
|
||||
- 根据需要编辑 PDF 文件
|
||||
- 保存编辑后的 PDF 文件
|
||||
|
||||
这是正在编辑文本的示例图片。
|
||||
|
||||
![LibreOffice Draw 中的 pdf 编辑示例][1]
|
||||
|
||||
关于 LibreOffice Draw 的一些使用说明:
|
||||
|
||||
- LibreOffice Draw 本身将 PDF 组件检测为小的文本或图像块。例如,如果 PDF 文件中有一个段落,它会将其检测为单独的文本块。请参见下图。
|
||||
- 这可能有点棘手,但你仍然可以仔细编辑它。
|
||||
- 此外,你还可以在 PDF 文件中添加文本框和其他组件。
|
||||
|
||||
![LibreOffice Draw edits PDF texts block wise][2]
|
||||
|
||||
#### Inkscape
|
||||
|
||||
流行的 [Inkscape][3] 图形编辑器可以编辑和修改 PDF 文件。它提供的读取单个 PDF 组件的功能是无与伦比的,而且完全被低估了。
|
||||
|
||||
Inkscape 允许你通过外部库的 “Popller/Cairo 导入”或内置的内部 PDF 导入工具来导入 PDF 文件。你也可以告诉 Inkscape 将 PDF 字体与你系统中任何最接近的字体相匹配。
|
||||
|
||||
![Inkscape PDF 导入选项][4]
|
||||
|
||||
打开 PDF 时,你可以单独编辑 PDF 中的章节、单词、线条、段落或绘图。每个组件都会被识别并表示为单独的层,以进行更高级的编辑。
|
||||
|
||||
编辑完成后,你可以再次将其导出成 PDF。
|
||||
|
||||
![在 Ubuntu 中使用 Inkscape 编辑 PDF][5]
|
||||
|
||||
如果你想要高级 PDF 编辑,Inkscape 是最好的选择。步骤概述如下。
|
||||
|
||||
- 打开 Inkscape 并单击“<ruby>文件<rt>File</rt></ruby>”>“<ruby>打开<rt>Open</rt></ruby>”
|
||||
- 选择你要编辑的 PDF 文件
|
||||
- 根据需要编辑 PDF 文件
|
||||
- 导出编辑后的 PDF 文件
|
||||
|
||||
你可以[在 Linux 系统安装 Flatpak][6] 和 Flathub,并使用以下命令安装 Inkscape。
|
||||
|
||||
```
|
||||
flatpak install org.inkscape.Inkscape
|
||||
```
|
||||
|
||||
#### GIMP
|
||||
|
||||
许多人不知道流行的光栅图形编辑器 [GIMP][7] 也可以打开并允许你编辑 PDF。在 GIMP 中打开 PDF 文件会提示你将每个 PDF 页面分别作为图像文件的图层打开。你现在可以编辑图像并最终从 GIMP 将它们导出为 PDF。
|
||||
|
||||
![File open dialog in GIMP which shows prompts for advanced PDF import settings][8]
|
||||
|
||||
但有一个问题。每个 PDF 页面都成为 GIMP 中的静态图像。其中包括文本、图表、图标等。因此,如果你想修改它,你可能需要匹配字体大小、通过 GIMP 选择删除部分等等。
|
||||
|
||||
因此,总的来说,你可以进行高级编辑,但无法修改其上的现有文本。
|
||||
|
||||
使用方法很简单。
|
||||
|
||||
- 打开 GIMP 并单击“<ruby>文件<rt>File</rt></ruby>”>“<ruby>打开<rt>Open</rt></ruby>”
|
||||
- 选择你要编辑的 PDF 文件
|
||||
- 根据需要编辑 PDF 文件。
|
||||
- 另存为编辑后的 PDF 文件
|
||||
|
||||
你可以 [在 Linux 系统安装 Flatpak][6] 和 Flathub,并使用以下命令安装 GIMP。
|
||||
|
||||
```
|
||||
flatpak install org.gimp.GIMP
|
||||
```
|
||||
|
||||
![使用 GIMP 编辑 PDF][9]
|
||||
|
||||
#### Okular
|
||||
|
||||
KDE 社区流行的文档查看器应用 [Okular][10] 的 PDF 编辑功能有限。它没有加载一整套 PDF 编辑功能。不过,你可以在 Okular 中执行一些高级注释。
|
||||
|
||||
因此,我认为它在这个列表中占有一席之地是当之无愧的。
|
||||
|
||||
在 PDF 中使用 Okular 可以执行以下操作:
|
||||
|
||||
- 添加文本作为注释
|
||||
- 使用各种颜色高亮显示 PDF 中的文本
|
||||
- 添加注释、箭头和手绘图。
|
||||
|
||||
**但是,你无法使用 Okular 修改现有 PDF 内容。**
|
||||
|
||||
注释完成后,你可以将文件另存为 PDF。
|
||||
|
||||
你可以 [在 Linux 系统安装 Flatpak][6] 和 Flathub,并使用以下命令安装 Okular。
|
||||
|
||||
```
|
||||
flatpak install org.kde.okular
|
||||
```
|
||||
|
||||
![使用 Okular 进行基本 PDF 注释][11]
|
||||
|
||||
#### Scribus
|
||||
|
||||
[Scribus][12] 是最古老的开源桌面出版程序之一,它以 PDF 和 Postscript 格式生成商业级输出,主要(但不限于)用于 Linux。
|
||||
|
||||
虽然主要用于设计,但它可以打开 PDF 文件并提供有限的编辑选项。
|
||||
|
||||
导入选项允许你选择将 PDF 文本导入为矢量图像还是文本。此外,你还可以调整 PDF 组件的大小、将其分组/取消分组、更改文本等。
|
||||
|
||||
完成后,你可以将其保存回 PDF 文件。它是被低估的程序之一,你可以尝试使用它在 Ubuntu 和其他发行版中编辑 PDF。
|
||||
|
||||
你可以 [在 Linux 系统安装 Flatpak][6] 和 Flathub,并使用以下命令安装 Scribus。
|
||||
|
||||
```
|
||||
flatpak install net.scribus.Scribus
|
||||
```
|
||||
|
||||
![用于导入 PDF 文件的 Scribus 选项][13]
|
||||
|
||||
![在 Ubuntu 中编辑 pdf 的 Scribus 选项][14]
|
||||
|
||||
### 其他商业和非自由及开源替代品
|
||||
|
||||
你可能想尝试一些商业的、非自由及开源软件的选项。这里是其中的一些。
|
||||
|
||||
- [Sejda PDF Desktop][15](最多免费 3 个任务,200 页,每天 50 MB)
|
||||
- [PDFedit(当前未维护,使用旧库)][16]
|
||||
- [Master PDF editor(商业)][17]
|
||||
|
||||
### 总结
|
||||
|
||||
我们推荐的免费 PDF 编辑器是 Inkscape 和 LibreOffice Draw。它们都能够满足从基本到高级的使用水平,并且效果良好。
|
||||
|
||||
你可以尝试其他选项,但结果可能会根据 PDF 文件的复杂程度而有所不同。
|
||||
|
||||
此外,你始终可以选择商业选项以获得更多功能。
|
||||
|
||||
我希望本指南可以帮助你为 Ubuntu 和其他 Linux 发行版选择最好的免费 PDF 编辑器。
|
||||
|
||||
*(题图:MJ/3ea2b1da-87e4-4839-97e9-5937f93c64eb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/pdf-editors-ubuntu/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/Sample-pdf-editing-in-LibreOffice-Draw.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2023/03/LibreOffice-Draw-edits-PDF-texts-block-wise.jpg
|
||||
[3]: https://inkscape.org/
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2023/03/Inkscape-PDF-import-options.jpg
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2023/03/Edit-PDF-using-Inkscape-in-Ubuntu.jpg
|
||||
[6]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[7]: https://www.gimp.org/
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2023/03/File-open-dialog-in-GIMP-which-shows-prompts-for-advanced-PDF-import-settings.jpg
|
||||
[9]: https://www.debugpoint.com/wp-content/uploads/2023/03/Editing-PDF-using-GIMP.jpg
|
||||
[10]: https://okular.kde.org/
|
||||
[11]: https://www.debugpoint.com/wp-content/uploads/2023/03/Basic-PDF-annotation-using-Okular.jpg
|
||||
[12]: http://www.scribus.net/
|
||||
[13]: https://www.debugpoint.com/wp-content/uploads/2023/03/Scribus-options-to-import-PDF-files.jpg
|
||||
[14]: https://www.debugpoint.com/wp-content/uploads/2023/03/Scribus-options-to-edit-pdf-in-Ubuntu.jpg
|
||||
[15]: https://www.sejda.com/desktop
|
||||
[16]: https://sourceforge.net/projects/pdfedit/
|
||||
[17]: https://code-industry.net/masterpdfeditor/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202307/06/183239nz7t4ab2zb690a9a.jpg
|
@ -0,0 +1,91 @@
|
||||
[#]: subject: "5 of the most curious uses of the Raspberry Pi"
|
||||
[#]: via: "https://opensource.com/article/23/3/most-curious-uses-raspberry-pi"
|
||||
[#]: author: "AmyJune Hineline https://opensource.com/users/amyjune"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15970-1.html"
|
||||
|
||||
树莓派的五种最奇特的用途
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 人们使用树莓派做各种各样的事情。有哪些用途让你特别好奇的吗?
|
||||
|
||||
最近,我在一个电话会议上听到有人说开源社区是好奇心和解决问题的文化的结合。好奇心是我们解决问题的基础。在解决各种规模的问题时,我们使用了大量的开源工具,其中包括在功能极为方便的树莓派上运行的 [Linux][1]。
|
||||
|
||||
我们每个人都有各种不同的生活经历,所以我向我们的作者社区询问了他们所遇到的最奇特的树莓派用途。我有一种预感,这些令人惊奇的构建将会为其他人激发灵感。
|
||||
|
||||
### 使用树莓派进行实验
|
||||
|
||||
对我来说,树莓派是在家庭网络中增加额外开发资源的绝佳工具。如果我想要创建一个新的网站或者尝试一个新的软件工具,我不必让我的桌面 Linux 机器因为一堆我可能只在实验时使用一次的软件包而变得笨重。相反,我会将它设置在我的树莓派上。
|
||||
|
||||
如果我认为我将要做一些冒险的事情,我会使用备份的启动环境。我有两张 microSD 卡,这样我就可以在树莓派上插一张卡,同时设置第二张卡进行任何我想要的实验。额外的 microSD 卡成本并不高,但在我想要在第二个镜像上进行实验的时候,它能节省大量时间。只需关机,换下 microSD 卡,重新启动,立即就可以在专用的测试系统上工作。
|
||||
|
||||
当我不进行实验时,我的树莓派充当打印服务器,将我的非 WiFi 打印机连接到家庭网络上。它还是一个方便的 SSH 文件服务器,让我可以快速备份重要文件。
|
||||
|
||||
— [Jim Hall][3]
|
||||
|
||||
### 树莓派的流行
|
||||
|
||||
我见过的树莓派最令人惊讶的事情是它使小型单板计算机的概念变得流行和通俗化,并使其真正实用于大众。
|
||||
|
||||
在树莓派出现之前,我们有类似的小型单板计算机,但它们往往是小众的、昂贵的,并且从软件角度来看让人拒之千里。树莓派价格便宜,便宜到任何人都可以轻松为一个项目获得一台(不考虑目前难以获得的情况)。一旦它变得便宜,人们就会克服软件挑战,使其足够好以解决许多基本的计算任务,甚至可以将完整的真正的计算机用于特定任务,而不仅仅是微控制器。
|
||||
|
||||
我们拥有大量好的、相对廉价的小型单板计算机,这促进了各种调试、玩耍和 [实验][4]。人们愿意尝试新的想法,甚至推动了更多业余爱好者的硬件开发来支持这些想法。
|
||||
|
||||
老实说,这是我从树莓派看到的最令人惊奇和激进的事情:它根本性地改变了人们对计算的认知,尤其是树莓派擅长的领域,并不仅仅催生了自己的生态系统,现在还催生了无数其他多样化的生态系统。
|
||||
|
||||
— [John ‘Warthog9' Hawley][5]
|
||||
|
||||
### 蜜蜂的树莓派
|
||||
|
||||
在 2018 年,我和我的弟弟曾经养过几个蜂箱,并使用树莓派和各种传感器来监测蜂箱的温度和湿度。我们还计划在夏天实施蜂箱秤,以观察蜜蜂的产蜜情况,并在冬天测量重量,以查看蜜蜂是否有足够的食物。不过我们最终没有实施这个计划。
|
||||
|
||||
我们的小型监测解决方案基于树莓派 2B,运行 Raspbian Stretch(基于 Debian 9),并连接了一个温湿度传感器(DHT11)。在蜂箱内我们有三到四个这样的传感器,用于测量蜂箱入口孔、盖子下方和最低框架的温度。我们直接将传感器连接到树莓派,并使用 Python_DHT 传感器库读取数据。我们还建立了 [InfluxDB][6]、Telegraf,并最终设置了 [Grafana][7] 来可视化数据。
|
||||
|
||||
如果你想了解更多关于我们的设置的信息,我们在 [Linux Magazine][8] 上发表了一篇关于我们小型监测解决方案的文章。
|
||||
|
||||
— [Heike Jurzik][9]
|
||||
|
||||
### 树莓派的复古计算
|
||||
|
||||
我希望用树莓派创建一个模拟如何使用“开关和指示灯”将机器语言编程到旧式计算机的项目。使用树莓派的 GPIO 引脚,这看起来相当简单。例如,他们的在线手册上展示了如何使用 GPIO 开关控制 LED 的开关,或者使用按钮进行输入。我认为只需一些 LED 和开关,再加上在树莓派上运行的小程序,就可以模拟旧式计算机。不过,我缺乏空闲时间来从事这样的项目,这就是为什么我编写了 [Toy CPU][10] 来模拟它。
|
||||
|
||||
— [Jim Hall][3]
|
||||
|
||||
### 使用树莓派打造玩具
|
||||
|
||||
当我女儿四岁的时候,她要求圣诞节时给她买一个“巨齿鲨音乐盒”。她能在脑海中完美地想像出来。它会是粉红色的、闪闪发光的,上面有她的名字。当她打开盒子时,会播放这部热门电影的主题曲。她可以将巨齿鲨和其他宝贝都放在盒子里。在网上和商店里到处搜索后,我发现没有一个能与她的想象相媲美。于是我和丈夫决定,在我们自己的玩具店(也就是他的家庭办公室)自己动手制作一个。而这一切的核心当然是树莓派。他使用光传感器和 Python 脚本,让音乐在恰当的时刻播放。我们将科技设备谨慎地放置在音乐盒的底部,并根据她的审美进行装饰。那一年,开源技术让圣诞魔法成为了可能!
|
||||
|
||||
— [Lauren Pritchett][11]
|
||||
|
||||
*(题图:MJ/aa8f1412-0f1d-4780-99db-22d6522010b7)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/most-curious-uses-raspberry-pi
|
||||
|
||||
作者:[AmyJune Hineline][a]
|
||||
选题:[lkxed][b]
|
||||
译者:ChatGPT
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/amyjune
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/article/19/3/learn-linux-raspberry-pi
|
||||
[2]: https://opensource.com/article/22/3/run-drupal-raspberry-pi
|
||||
[3]: https://opensource.com/users/jim-hall
|
||||
[4]: https://opensource.com/article/20/8/kubernetes-raspberry-pi
|
||||
[5]: https://opensource.com/users/warthog9
|
||||
[6]: https://opensource.com/article/17/8/influxdb-time-series-database-stack
|
||||
[7]: https://opensource.com/article/21/3/raspberry-pi-grafana-cloud
|
||||
[8]: https://www.linux-magazine.com/index.php/layout/set/print/Issues/2018/214/Monitoring-Beehives
|
||||
[9]: https://opensource.com/users/hej
|
||||
[10]: https://opensource.com/article/23/1/learn-machine-language-retro-computer
|
||||
[11]: https://opensource.com/users/lauren-pritchett
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202307/05/165343at95f5gf954lfll6.jpg
|
111
published/202304/20210108 What is an open source evangelist.md
Normal file
111
published/202304/20210108 What is an open source evangelist.md
Normal file
@ -0,0 +1,111 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (rsqrt2b)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15753-1.html)
|
||||
[#]: subject: (What is an open source evangelist?)
|
||||
[#]: via: (https://opensource.com/article/21/1/open-source-evangelist)
|
||||
[#]: author: (Peter Czanik https://opensource.com/users/czanik)
|
||||
|
||||
什么是开源布道师?
|
||||
======
|
||||
|
||||
> 了解如何成为产品用户和开发人员之间的桥梁。
|
||||
|
||||
![][0]
|
||||
|
||||
当人们得知我是位(专注于 [syslog-ng][2] 和 [sudo][3] 的)开源布道师的时候,他们经常问我为 Linux 世界中如此知名的软件“代言”是什么感觉。我的回答非常简短:非常棒!
|
||||
|
||||
我是整个研发环节的一部分,所以我不会觉得自己可有可无。当人们实践我教他们的东西,以及当我收集到的用户反馈影响产品开发的时候,我感觉我很有意义。
|
||||
|
||||
### 什么是布道师?
|
||||
|
||||
我将布道师定义为软件(或其他产品)的用户和开发人员之间的桥梁。布道师不仅仅将好消息分享给用户,还要从他们那里收集反馈。
|
||||
|
||||
布道师们有着各式各样的背景:有些人具有市场营销背景,对技术有着浓厚的兴趣;有些人是喜欢和用户交流的开发人员。我属于第三类——“资深用户”,即从用户视角对软件产品有深入了解的人。
|
||||
|
||||
我要和非常多的用户打交道。syslog-ng 的用户群体非常庞大,它可以用在大多数 Linux 发行版和 BSD 变体上。数以亿计的设备运行着 syslog-ng,其中包括 BMW i3 和 Kindle。大多数基于 BSD 的设备,譬如 FreeNAS,使用 syslog-ng 记录日志,而 Synology 和 QNAP 的基于 Linux 的<ruby>网络附属存储<rt>Network Attached Storage</rt></ruby>(NAS)也是如此。就算 syslog-ng 运行在太空的某处,我也不会感到惊讶。
|
||||
|
||||
大多数 Linux 和 Unix 用户使用 sudo,因为它几乎被安装在每一台 Linux 设备上。它的社区很大,有几千万人。人们经常问我是如何和那么多用户打交道的,但这并不困难。
|
||||
|
||||
### 我是如何成为一名布道师的
|
||||
|
||||
我成为布道师的旅程是一个跨越了近 20 年的进化过程。它始于许多年前,那时候我在大学教书。之后是和 POWER/PowerPC 的 Linux 用户、开发人员合作。最后,我在 [Balabit][4] 的工作中开始使用 syslog-ng,再后来我开始接触 sudo。
|
||||
|
||||
我在 Balabit 的第一份工作是帮助 Linux 发行版将它们的 syslog-ng 包升级到上游的最新版本。随着我越来越多地了解 syslog-ng 的细节,我开始帮助它的用户。一年后,我在匈牙利和国际会议上发表关于 syslog-ng 的演说。不久之后,我从用户那里收集到的反馈开始对产品开发产生影响。
|
||||
|
||||
八年后,也就是 2018 年,Balabit 被 [One Identity][5] 收购,sudo 的维护者 [Todd Miller][6] 成为了我的同事。在那之前我只是了解一些基本的 sudo 功能,但我变得对 sudo 更感兴趣,并开始了解它的高级功能。很快,我开始为 sudo 布道,从一名 syslog-ng 布道师进化为一个更广泛意义上的开源布道师。
|
||||
|
||||
### 技术布道的四大支柱
|
||||
|
||||
技术布道师做很多事情,大致可以分为四类:开发人员、支持人员、技术产品营销和产品经理。我将更详细地介绍这四个支柱。
|
||||
|
||||
#### 开发人员
|
||||
|
||||
我不是开发人员,但我做了很多开发人员的工作,例如为各式各样的 Linux 发行版和 FreeBSD 打包 syslog-ng,做很多测试,将 syslog-ng 集成到其他软件中,并在异构平台上测试。我做的开发者任务有助于社区,并帮助我更好地了解社区需求。
|
||||
|
||||
#### 支持人员
|
||||
|
||||
关注错误追踪器,在 Google Alerts 和 Twitter 上查看 syslog-ng 关键词,以及阅读邮件列表,都能让我更好地帮助我们的用户群体。通过帮助他人,我也能能更好地理解他们的问题所在。
|
||||
|
||||
#### 技术产品营销
|
||||
|
||||
我真的不喜欢“营销”这个词,但是写博客和在会议上演说 *确实是* 营销。作为一名前系统管理员,我了解我的听众,我们有共同的声音。除了我自己的 Twitter 账号 [@PCzanik][7] 之外,我还在 [@sngOSE][8] (syslog-ng 开源版)和 [@SudoProject][9] (sudo)账号下发帖。
|
||||
|
||||
Twitter 是个收集和分享技术新闻的绝佳平台。即使营销只是我工作的一个方面,它仍是我布道工作中最引人注目的部分:
|
||||
|
||||
* **给内向者的社交场合生存技巧:** 当人们得知我是一个内向的人,而仍然从事了这份工作之后,就经常问我是如何做到的。发表演讲或在会议展位上工作一整天是很困难的:有太多的人、太多的噪音了。我在这里针对这种场合给出一些生存技巧:
|
||||
* 专注于结果。活动是从用户那里收集反馈的绝佳机会。等你演讲完,可以随地开始一场好的讨论,甚至在展台或走廊上。在活动中,用户会给出很多现实生活中的反馈,记住她们的意见会有很多帮助。
|
||||
* 知道活动何时结束。请记住在嘈杂的环境中只能待上一段时间,这对你会有很大的帮助。
|
||||
* 与你志同道合的人尽情交谈,他们和你一样害羞、和你一样有不安全感、和你有着相同的技术兴趣。
|
||||
* **疫情期间的营销技巧:** 许多人问我 COVID-19 是如何影响我的工作的,因为我从 2020 年开始就不能出行。我刚从 [RSA 大会][10] 和 [南加州 Linux 博览会][11] 上回来,两天后航班就暂停了、边境也关闭了(LCTT 校注:本文原文发表于 2021 年)。即使现在也在开虚拟会议,我仍可以做有关 sudo 和 syslog-ng 的演说,但这样反馈就会减少,甚至没有反馈——没有让我和用户见面的走廊,也没有供演讲者讨论最新、最好的技术的晚宴。会议上注意力比以往更不集中,因为在家里工作总有各种各样的干扰因素。我看到了许多不同的方法试图解决这个问题,每一项都有其优缺点:
|
||||
* 全局聊天室适合举办小型活动。但当活动有超过几十个人时,它将会变成一连串的“大家好,我来自马萨诸塞州,波士顿” 或者类似的无用的消息,从而没有机会进行一些有意义的讨论。
|
||||
* 如果活动有多个<ruby>专题<rt>track</rt></ruby>,给每个专题讨论一个单独的聊天室是很有用的。演讲者和用户都可以从聊天中发布的问题和评论中学到很多东西。如果有一个主持人,这将成倍地有用。始终记得将讨论限制在主题上,并确保在问答环节中产生的问题传达到演讲者耳中。
|
||||
* <ruby>随机聊天<rt>chat roulette</rt></ruby>是个随机联系陌生人的好方法,并且能产生好的讨论。不过这种方法对于演讲者来说随机性太高了。
|
||||
* <ruby>针对性聊天<rt>Tracking chats</rt></ruby>很好,不过许多人不喜欢公开提问或分享经验。直接与演讲者聊天可以解决这个问题。
|
||||
|
||||
#### 产品经理
|
||||
|
||||
我不是产品经理,尽管有时候我希望自己收集到的反馈可以直接转化为功能,但我定期与开发者和产品经理分享用户反馈。在内部讨论中,我总是代表用户一方,而不是考虑开发者如何用用最简单的方法推进产品,或者如何产生最多收益。
|
||||
|
||||
### 为什么要布道广为人知、广泛使用的软件?
|
||||
|
||||
每个 Linux 用户都知道 sudo,他们中的许多人也知道 syslog-ng。那我们为什么要布道它们呢?这是因为许多人只知道这些程序的基础知识,这也是他们刚开始使用 Linux 时学到的。但这两款软件都不是简单的、几十年来处于维护模式的工具序,两者都是仍在持续开发中的有生命力的程序。
|
||||
|
||||
大多数人对 syslog-ng 的了解仅限于它收集日志消息并把消息存储在文本文件中。但 syslog-ng 还有许多 [其他功能][12],包括解析消息、使用地理信息丰富消息、精确的消息路径(过滤)和把消息存储在数据库、Hadoop 或消息队列中。
|
||||
|
||||
sudo 通常被认为是管理员命令的前缀,但它可以做许多其他事情。sudo 可以记录在里面运行的会话,允许你检查用户通过 sudo 使用超级权限做了什么事情。你也可以使用插件扩展 sudo。从 [sudo 的 1.9 版本][13] 开始,你甚至可以用 Python 扩展 sudo,这使得扩展它变得容易得多。
|
||||
|
||||
### 总结
|
||||
|
||||
成为一名开源布道师是个非常有趣的工作,即使是在 COVID-19 时代,虽然确实增加了我的工作难度。如果你对于这个角色有其他问题,或者有关于技术布道师或者开发大使则如何帮助你的故事,请在评论里分享。
|
||||
|
||||
*(题图:MJ/sci-fi evangelist in high resolution, very detailed, 8k)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/1/open-source-evangelist
|
||||
|
||||
作者:[Peter Czanik][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[rsqrt2b](https://github.com/rsqrt2b)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/czanik
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/laptop-stickers-team-happy_0.png?itok=G2-GcSPp (Teamwork starts with communication )
|
||||
[2]: https://www.syslog-ng.com/
|
||||
[3]: https://www.sudo.ws/
|
||||
[4]: https://en.wikipedia.org/wiki/Balabit
|
||||
[5]: https://www.oneidentity.com/
|
||||
[6]: https://www.linkedin.com/in/millert/
|
||||
[7]: https://twitter.com/PCzanik
|
||||
[8]: https://twitter.com/sngose
|
||||
[9]: https://twitter.com/SudoProject
|
||||
[10]: https://www.rsaconference.com/usa/us-2020
|
||||
[11]: https://www.socallinuxexpo.org/scale/18x
|
||||
[12]: https://www.syslog-ng.com/community/b/blog/posts/building-blocks-of-syslog-ng
|
||||
[13]: https://opensource.com/article/20/10/sudo-19
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/25/090825y2fss1oesohbslf2.jpg
|
119
published/202304/20210111 an even better video wharf.md
Normal file
119
published/202304/20210111 an even better video wharf.md
Normal file
@ -0,0 +1,119 @@
|
||||
[#]: subject: "an even better video wharf"
|
||||
[#]: via: "https://jao.io/blog/2021-01-11-an-even-better-video-wharf.html"
|
||||
[#]: author: "jao https://jao.io"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "Drwhooooo"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15711-1.html"
|
||||
|
||||
一个更好的视频码头
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
之前,[我在写][1] 有关 [embark][2] 的内容,我的第一设备为启动远程视频流设计了一个新的 embark。embark 的作者 Omar Antolín Camarena 不仅阅读了这篇内容,还点评了一下我认为值得跟进的一些重大改进。
|
||||
|
||||
首先,你应该记得我们曾定义过一个检测视频 URL 的函数:
|
||||
|
||||
```
|
||||
|
||||
(defun jao-video-finder ()
|
||||
"Check whether we're looking at a video URL.
|
||||
Return (video-url . <URL>) if so."
|
||||
(when-let ((url (thing-at-point-url-at-point)))
|
||||
(when (string-match-p jao-video-url-rx url)
|
||||
(cons 'video-url url))))
|
||||
|
||||
```
|
||||
|
||||
当我们得到了一个非空的 `url` 值,即便它不是一个视频链接,但它仍然是一个确切的 URL,并且 embark 已有了一个 `url` 类别,所以我们可以借助默认的 URL 寻检器存储一个新的句法分析,语句如下:
|
||||
|
||||
```
|
||||
|
||||
(when-let ((url (thing-at-point-url-at-point)))
|
||||
(cons (if (string-match-p jao-video-url-rx url) 'video-url 'url) url))
|
||||
|
||||
```
|
||||
|
||||
这里有一个潜在的缺点就是:我们重写了 embark 的寻检器,`embark-target-url-at-point`,所以我们可能更愿意保留后者。
|
||||
|
||||
实际上多亏了 embark 的 _目标转换器_ 我们才能做成。我们可以在 `embark-transformers-alist` 中添加任意一个函数,应用于任何一个给定类别的目标,而 embark 会将其转换后的值应用于它的操作中。Omar 很贴切地把这个过程称为“目标的精化”;我们具体做法如下:
|
||||
|
||||
```
|
||||
|
||||
(defun jao-refine-url-type (url)
|
||||
"Refine type of URL in case it is a video."
|
||||
(cons (if (string-match-p jao-video-url-rx url) 'video-url 'url) url))
|
||||
|
||||
(add-to-list 'embark-transformer-alist '(url . jao-refine-url-type))
|
||||
|
||||
```
|
||||
|
||||
通过这种策略,我们就不再需要 `jao-video-finder` 了,而且从概念上来说,我们的 `video-url` 应该被定义为一个精化操作而并非是一个目标 [脚注 1]。Omar 的第二个提议也与这个概念相契合:想必我们都希望所有关于 `url` 和我们的 `video-url` 的操作都是可用的,不是吗?
|
||||
唔,这就是为什么我们用来定义行为的 `embark-define-keymap` 的宏可以通过使用关键字 [脚注 2] `:parent` 继承其他键映射中已经定义的所有操作的原因:
|
||||
|
||||
```
|
||||
|
||||
(embark-define-keymap jao-video-url-map
|
||||
"Actions on URLs pointing to remote video streams."
|
||||
:parent embark-url-map
|
||||
("p" jao-play-video-url))
|
||||
|
||||
(add-to-list 'embark-keymap-alist '(video-url . jao-video-url-map))
|
||||
|
||||
```
|
||||
|
||||
这种继承键映射的功能并非是 embark 的附属功能:vanilla Emacs 键映射通过标准函数 `set-keymap-parent` 已经搞定它了。你可以完全不用 `embark-define-keymap` 来定义 `jao-video-url-map`,工作原理是一样的。
|
||||
|
||||
这样,我们的代码就能够更短,特征更多:谢谢你,Omar!
|
||||
|
||||
**脚注 1**:在某些情况下,保留 jao-video-finder 是有意义的,即,如果我们想要改变检测 URL 的功能的话。例如,我在使用 emacs-w3m 的时候,经常有一个 URL 作为文本属性储存了起来(实际文本是个链接文本)。要通过那里检索 URL,就需要调用 `w3m-anchor`,而用 `embark-target-url-at-point` 就会错过它。对于这种情况,我最终编写(并使用)`jao-video-finder` 将其通过下文定义:
|
||||
|
||||
```
|
||||
|
||||
(when-let ((url (or (w3m-anchor) (thing-at-point-url-at-point))))
|
||||
(cons (if (string-match-p jao-video-url-rx url) 'video-url 'url) url))
|
||||
|
||||
```
|
||||
|
||||
另一种达成同件事情的方式(再次向 Omar 致敬)便是为 w3m 的锚点放置一个特定的巡检器(且继续使用 video-url 的转换器):
|
||||
|
||||
```
|
||||
|
||||
(defun jao-w3m-url-finder ()
|
||||
(when-let ((url (w3m-anchor)))
|
||||
(cons 'url url)))
|
||||
|
||||
(add-to-list 'embark-target-finders #'jao-w3m-url-finder)
|
||||
|
||||
```
|
||||
|
||||
这种方法更加模块化,并且取决于你们的喜好,且更加巧妙。这些功能都很小巧并且两种方法之间并没有太大的差别,但是如果其中某一种继续加入更多寻检器的话,前一种方法用起来来反而会让一切变得更糟。
|
||||
|
||||
**脚注 2**:在我最开始的例子中,我在视频地图中还添加了 `browse-url` 和 `browse-url-firefox`。前一个已不再重要,因为它已经在 `embark-url-map` 中出现过了,如果我们想让 `browse-url-firefox` 对 _所有_ 的 URLs 可用,我们可以将其加入到 `embark-url-map` (谨记,embark 的键映射只是 Emacs 的键映射)。这是另一种扩展 embark 的简便方法。
|
||||
|
||||
*(题图:MJ:emacs video geek wallpaper dark plain background Illustration)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jao.io/blog/an-even-better-video-wharf.html
|
||||
|
||||
作者:[jao][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Drwhooooo](https://github.com/Drwhooooo)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jao.io
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://jao.io/blog/2021-01-09-embarking-videos.html
|
||||
[2]: https://github.com/oantolin/embark
|
||||
[3]: tmp.VUqMT3Yft2#fn.1
|
||||
[4]: tmp.VUqMT3Yft2#fn.2
|
||||
[5]: tmp.VUqMT3Yft2#fnr.1
|
||||
[6]: tmp.VUqMT3Yft2#fnr.2
|
||||
[7]: https://jao.io/blog/tags.html
|
||||
[8]: https://jao.io/blog/tag-emacs.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/11/150233vzkt1tute4i4oemg.jpg
|
132
published/202304/20210625 How to program in C on FreeDOS.md
Normal file
132
published/202304/20210625 How to program in C on FreeDOS.md
Normal file
@ -0,0 +1,132 @@
|
||||
[#]: subject: (How to program in C on FreeDOS)
|
||||
[#]: via: (https://opensource.com/article/21/6/program-c-freedos)
|
||||
[#]: author: (Jim Hall https://opensource.com/users/jim-hall)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (robsean)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15739-1.html)
|
||||
|
||||
在 FreeDOS 上,如何使用 C 语言编程
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在 FreeDOS 上使用 C 语言编程与在 Linux 上使用 C 语言编程非常类似。
|
||||
|
||||
当我第一次开始使用 DOS 时,我喜欢 DOS 自带的 BASIC 来编写游戏和其它一些有趣的程序。很长时间后,我才学习 C 编程语言。
|
||||
|
||||
我马上爱上了使用 C 语言做开发!它是一种简单易懂的编程语言,在编写有用的程序时,这给予我很大的灵活性。实际上,很多 FreeDOS 的核心实用程序都是使用 C 语言和汇编语言编写的。
|
||||
|
||||
因此,FreeDOS 的 1.3 RC4 包含一个 C 语言可能并不出人意料,此外还有其它编程语言的编译器。FreeDOS 的 1.3 RC4 LiveCD 包含两个 C 编译器:Bruce's C 编译器(一个简单的 C 编译器)和 OpenWatcom C 编译器 。在 Bonus CD 上,你也可以找到 DJGPP(一款基于 GNU 的 GCC 的 32 位 C 编译器)和 GCC 的 IA-16 移植(需要 386 或更好的 CPU 来编译,但是,生成的程序可以在低端系统上运行)。
|
||||
|
||||
在 FreeDOS 上使用 C 语言编程与在 Linux 上使用 C 语言编程非常类似,但是有两个例外:
|
||||
|
||||
1. **你需要知道你使用了多少内存。** Linux 允许程序使用很多内存,但是 FreeDOS 有很多限制。DOS 程序只使用四种 [内存模式][2](大、中、紧凑和小)中的其中一种,具体取决于它们需要多少内存。
|
||||
2. **你可以直接访问控制台终端。** 在 Linux 上,你可以创建 _文本模式_ 的程序,使用一个诸如 ncurses 之类的库来绘制终端屏幕。但是,DOS 允许程序访问控制台终端和视频硬件。这为编写更有趣的程序提供了极大的灵活性。
|
||||
|
||||
我喜欢在 GCC 的 IA-16 移植或 OpenWatcom 中编写我的 C 程序,具体取决于我正在编写的是哪种程序。OpenWatcom C 编译器更容易安装,因为它只是个单一的软件包。这就是为什么我们在 FreeDOS 的 LiveCD 中提供 OpenWatcom 的原因, 在你安装 FreeDOS 的 1.3 RC4 时,如果你选择 “<ruby>完全的安装(包括安装应用程序和游戏)<rt>Full installation including applications and games</rt></ruby>”,那么你也自动地安装 OpenWatcom。如果你选择安装 “<ruby>纯 DOS 系统<rt>Plain DOS system</rt></ruby>”,那么,你将需要使用 FDIMPLES 软件包管理器来安装 OpenWatcom C 编译器。
|
||||
|
||||
![安装 OpenWatcom][3]
|
||||
|
||||
*在 FreeDOS 1.3 RC4 上安装 OpenWatcom*
|
||||
|
||||
### 在 DOS 上使用 C 语言编程
|
||||
|
||||
你可以在 [OpenWatcom 项目网站][5] 找到文档和库指南,以学习 OpenWatcom C 编译器所提供的独特的关于 DOS 的 C 语言编程库。简单描述几个最有用的函数:
|
||||
|
||||
来自 `conio.h` 头文件:
|
||||
|
||||
* `int getch(void)`:从键盘上获取一个按下的单个按键
|
||||
* `int getche(void)`:从键盘上获取一个按下的单个按键,并回显该按键
|
||||
|
||||
来自 `graph.h` 头文件:
|
||||
|
||||
* `_settextcolor(short color)`:设置打印文本时的颜色
|
||||
* `_setbkcolor(short color)`:设置打印文本时的背景颜色
|
||||
* `_settextposition(short y, short x)`:移动光标到行 `y` 和 列 `x`
|
||||
* `_outtext(char _FAR *string)`:从当前光标位置开始,直接将一串字符打印到屏幕
|
||||
|
||||
DOS 只支持 [16 种文本颜色][6] 和 8 种背景颜色。你可以使用值 0(黑色)到 15(亮白色)来具体指定文本颜色,以及使用值 0(黑色)到 7(白色)来具体指定背景颜色:
|
||||
|
||||
* `0`:黑色
|
||||
* `1`:蓝色
|
||||
* `2`:绿色
|
||||
* `3`:品蓝色
|
||||
* `4`:红色
|
||||
* `5`:品红色
|
||||
* `6`:棕色
|
||||
* `7`:白色
|
||||
* `8`:亮黑色
|
||||
* `9`:亮蓝色
|
||||
* `10`:亮绿色
|
||||
* `11`:亮品蓝色
|
||||
* `12`:亮红色
|
||||
* `13`:亮品红色
|
||||
* `14`:黄色
|
||||
* `15`:亮白色
|
||||
|
||||
### 一个花哨的 “Hello world” 程序
|
||||
|
||||
很多新开发者学习编写的第一个程序是为用户打印 “Hello world” 。我们可以使用 DOS 的 `conio` 和 `graphics` 库来制作一个更有趣的程序,并使用彩虹般的颜色打印 “Hello world” 。
|
||||
|
||||
在这个实例中,我们将遍历每种文本颜色,从 0(黑色)到 15(亮白色)。随着我们打印每一行,我们都将为下一行缩进一个空格。在我们完成后,我们将等待用户按下任意按键,然后,我们将重置屏幕并退出。
|
||||
|
||||
你可以使用任何文本编辑器来编写你的 C 源文件代码。我喜欢使用一些与众不同的编辑器,如 [FreeDOS Edit][7] 和 [Freemacs][8],但是,我最近一直在使用 [FED editor][9] ,因为它提供 _语法高亮_ 功能,使其很容易在我的程序源文件代码中看到关键字、字符串(LCCT 译注:C 语言中没有字符串)、变量。
|
||||
|
||||
![编写一个简单的 C 程序][10]
|
||||
|
||||
*使用 C 语言编写一个简单的测试程序*
|
||||
|
||||
在你使用 OpenWatcom 编译前,你将需要设置 DOS 的 [环境变量][11],以便 OpenWatcom 可以找到它的支持文件。OpenWatcom C 编译器软件包中包含了一个为你做这件事的设置 [批处理文件][12]:`\DEVEL\OW\OWSETENV.BAT`。运行这个批处理文件可以自动为你的 OpenWatcom 设置环境变量。
|
||||
|
||||
在你的开发环境准备好后,你可以使用 OpenWatcom 编译器来编译这个 “Hello world” 程序。我已经将我的 C 源文件文件保存为 `TEST.C` ,因此,我可以输入 `WCL TEST.C` 来编译和连接该程序为一个名称为 `TEST.EXE` 的 DOS 可执行文件。在 OpenWatcom 的输出信息中,你将看到 `WCL` 实际上调用 OpenWatcom C 编译器(`WCC`)来编译,并调用 OpenWatcom 链接器(`WLINK`)来执行 <ruby>对象/目标<rt>object</rt></ruby> 链接阶段:
|
||||
|
||||
![使用 OpenWatcom 编译][13]
|
||||
|
||||
*使用 OpenWatcom 编译测试文件*
|
||||
|
||||
OpenWatcom 会打印一些无关的输出信息,这可能会使发现错误和警告变得困难。为了告诉编译器来抑制这些大量的额外信息,请在编译时使用 `/Q`(“Quiet”)选项:
|
||||
|
||||
![使用 OpenWatcom 编译][14]
|
||||
|
||||
在编译 C 源文件文件时,如果你没有看到任何错误信息,那么你现在就可以运行你的 DOS 程序了。这个 “Hello World” 示例的程序名称是 `TEST.EXE` 。在 DOS 命令行中输入 `TEST` 来运行新的程序,你应该会看到这个非常漂亮的输出:
|
||||
|
||||
![运行测试程序][15]
|
||||
|
||||
C 语言是一种非常高效的编程语言,在像 DOS 之类的资源有限的系统上进行编程也可以很好的工作。在 DOS 上,你可以使用 C 语言来做更多的事。如果你是 C 语言的初学者,那么,你可以跟随我们在 FreeDOS 网站上的 《[使用 C 语言编写 FreeDOS 程序][16]》 的自学电子书,以及在 [FreeDOS YouTube 频道][17] 上的配套的 <ruby>入门指南<rt>how-to</rt></ruby> 系列视频,来自主学习 C 语言。
|
||||
|
||||
|
||||
*(题图:MJ:Legacy sci-fi computer programming::1.7 celestial::1 edison bulb::1 satellite imagery::1 wooden::1 in high resolution, very detailed, 8k)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/program-c-freedos
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_women_computing_2.png?itok=JPlR5aCA (Woman sitting in front of her computer)
|
||||
[2]: https://devblogs.microsoft.com/oldnewthing/20200728-00/?p=104012
|
||||
[3]: https://opensource.com/sites/default/files/uploads/install-ow.png (Installing OpenWatcom on FreeDOS 1.3 RC4)
|
||||
[4]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[5]: http://openwatcom.org/
|
||||
[6]: https://opensource.com/article/21/6/freedos-sixteen-colors
|
||||
[7]: https://opensource.com/article/21/6/freedos-text-editor
|
||||
[8]: https://opensource.com/article/21/6/freemacs
|
||||
[9]: https://opensource.com/article/21/1/fed-editor
|
||||
[10]: https://opensource.com/sites/default/files/uploads/fed-test.png (Writing a simple test program in C)
|
||||
[11]: https://opensource.com/article/21/6/freedos-environment-variables
|
||||
[12]: https://opensource.com/article/21/6/automate-tasks-bat-files-freedos
|
||||
[13]: https://opensource.com/sites/default/files/uploads/wcl-test.png (Compiling the test program with OpenWatcom)
|
||||
[14]: https://opensource.com/sites/default/files/uploads/wcl-q-test.png (Use the /Q \("Quiet"\) option to make OpenWatcom print less output)
|
||||
[15]: https://opensource.com/sites/default/files/uploads/test.png (You can create beautiful programs in C)
|
||||
[16]: https://www.freedos.org/books/cprogramming/
|
||||
[17]: https://www.youtube.com/freedosproject
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/20/153041cl4dqmq46p63vl6l.jpg
|
@ -0,0 +1,204 @@
|
||||
[#]: subject: "Write your first CI/CD pipeline in Kubernetes with Tekton"
|
||||
[#]: via: "https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton"
|
||||
[#]: author: "Savita Ashture https://opensource.com/users/savita-ashture"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "lxbwolf"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15681-1.html"
|
||||
|
||||
用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线
|
||||
======
|
||||
|
||||
> Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。
|
||||
|
||||
![][0]
|
||||
|
||||
Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。通过对底层实施细节的抽象,它还可以帮助你在多个云供应商或企业内部系统中进行端到端(构建、测试、部署)应用开发。
|
||||
|
||||
### Tekton 介绍
|
||||
|
||||
[Tekton][2] 最初被称为 [Knative Build][3],后来被重组为独立的开源项目,有自己的 [治理组织][4],现在是属于 [Linux 基金会][5] 的项目。Tekton 提供了一个集群内的容器镜像构建和部署工作流程,换句话说,它是一个 <ruby>持续集成<rt>continuous integration</rt></ruby>(CI)和 <ruby>持续交付<rt>continuous delivery</rt></ruby>(CD)服务。它由 Tekton 流水线和几个支持组件如 Tekton CLI、Triggers 和 Catalog 等组成。
|
||||
|
||||
Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩展被安装和运行,由一套Kubernetes 定制化资源组成,定义了你为流水线创建和复用的构建块。由于 Tekton 是一种 Kubernetes 原生技术,所以它非常容易扩展。当你需要增加你的工作负载时,你只需向你的集群添加节点就可以了。由于其可扩展的设计和社区贡献的组件库,它也很容易定制。
|
||||
|
||||
对于需要 CI/CD 系统来开展工作的开发人员,和为其组织内的开发人员建立 CI/CD 系统的平台工程师,Tekton 是理想选择。
|
||||
|
||||
### Tekton 组件
|
||||
|
||||
构建 CI/CD 流水线的过程非常复杂,因此 Tekton 为每一步都提供工具。以下是 Tekton 提供的主要组件:
|
||||
|
||||
* <ruby>流水线<rt></rt>Pipeline</rt></ruby>: 定义了一组 Kubernetes [自定义资源][6],作为你用来组装 CI/CD 流水线的构建块。
|
||||
* <ruby>触发器<rt>Triggers</rt></ruby>:一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。
|
||||
* <ruby>命令行<rt>CLI</rt></ruby>:提供一个名为 `tkn` 的命令行界面,你可以使用它从终端与 Tekton 进行交互。
|
||||
* <ruby>仪表盘<rt>Dashboard</rt></ruby>:是 Tekton 流水线的一个基于网页的图形界面,显示流水线的执行信息。
|
||||
* <ruby>目录<rt>Catalog</rt></ruby>:是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。
|
||||
* <ruby>中心<rt>Hub</rt></ruby>:是一个基于网页的图形界面,用于访问 Tekton 目录。
|
||||
* <ruby>操作员<rt>Operator</rt></ruby>:是一种 Kubernetes [操作员模式][7],你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。
|
||||
* <ruby>链<rt>Chains</rt></ruby>:是一个 Kubernetes <ruby>自定义资源定义<rt>Custom Resource Definition</rt></ruby>(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。
|
||||
* <ruby>结果<rt>Results</rt></ruby>:旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。
|
||||
|
||||
### Tekton 术语
|
||||
|
||||
![Tekton terminology][8]
|
||||
|
||||
* <ruby>步骤<rt>Step</rt></ruby>:是 CI/CD 工作流程中最基本的实体,例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。
|
||||
* <ruby>任务<rt>Task</rt></ruby>::** 是按特定顺序排列的步骤的集合。Tekton 以 [Kubernetes 容器荚][10] 的形式运行任务,其中每个步骤都成为 <ruby>容器荚<rt>pod</rt></ruby> 中的一个运行容器。
|
||||
* <ruby>流水线<rt>Pipelines</rt></ruby>:是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个 <ruby>有向无环图<rt>directed acyclic graph</rt></ruby>(DAG),并按顺序执行图。换句话说,它创建了一些 Kubernetes 容器荚,并确保每个容器荚按预期成功运行。
|
||||
|
||||
![Tekton pipelines][11]
|
||||
|
||||
* <ruby>流水线运行<rt>PipelineRun</rt></ruby>:顾名思义,是一条流水线的具体执行。
|
||||
* <ruby>任务运行<rt>TaskRun</rt></ruby>:是一个任务的具体执行。你可以选择在流水线外运行一次任务运行,可以通过它查看任务中每个步骤执行的具体情况。
|
||||
|
||||
### 创建你的 CI/CD 流水线
|
||||
|
||||
开始使用 Tekton 的最简单方法是自己编写一个简单的流水线。如果你每天都在使用 Kubernetes,那你可能对 YAML 很熟悉,这正是 Tekton 流水线的定义方式。下面是一个克隆代码库的简单流水线的例子。
|
||||
|
||||
首先,创建一个 `task.yaml` 文件,用你喜欢的文本编辑器打开它。这个文件定义了你要执行的 <ruby>步骤<rt>Step</rt></ruby>。在这个例子中,就是克隆一个仓库,所以我把这个步骤命名为 “clone”。该文件设置了一些环境变量,然后使用一个简单的 shell 脚本来执行克隆。
|
||||
|
||||
接下来是 <ruby>任务<rt>Task</rt></ruby>。你可以把步骤看作是一个被任务调用的函数,而任务则设置步骤所需的参数和工作空间。
|
||||
|
||||
```
|
||||
apiVersion: tekton.dev/v1beta1
|
||||
kind: Task
|
||||
metadata:
|
||||
name: git-clone
|
||||
spec:
|
||||
workspaces:
|
||||
- name: output
|
||||
description: The git repo will be cloned onto the volume backing this Workspace.
|
||||
params:
|
||||
- name: url
|
||||
description: Repository URL to clone from.
|
||||
type: string
|
||||
- name: revision
|
||||
description: Revision to checkout. (branch, tag, sha, ref, etc...)
|
||||
type: string
|
||||
default: ""
|
||||
steps:
|
||||
- name: clone
|
||||
image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0"
|
||||
env:
|
||||
- name: PARAM_URL
|
||||
value: $(params.url)
|
||||
- name: PARAM_REVISION
|
||||
value: $(params.revision)
|
||||
- name: WORKSPACE_OUTPUT_PATH
|
||||
value: $(workspaces.output.path)
|
||||
script: |
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}"
|
||||
|
||||
/ko-app/git-init \
|
||||
-url="${PARAM_URL}" \
|
||||
-revision="${PARAM_REVISION}" \
|
||||
-path="${CHECKOUT_DIR}"
|
||||
cd "${CHECKOUT_DIR}"
|
||||
EXIT_CODE="$?"
|
||||
if [ "${EXIT_CODE}" != 0 ] ; then
|
||||
exit "${EXIT_CODE}"
|
||||
fi
|
||||
# Verify clone is success by reading readme file.
|
||||
cat ${CHECKOUT_DIR}/README.md
|
||||
|
||||
```
|
||||
|
||||
创建第二个文件 `pipeline.yaml`,并用你喜欢的文本编辑器打开它。这个文件通过设置诸如可以运行和处理任务的工作区等重要参数来定义流水线。
|
||||
|
||||
```
|
||||
apiVersion: tekton.dev/v1beta1
|
||||
kind: Pipeline
|
||||
metadata:
|
||||
name: cat-branch-readme
|
||||
spec:
|
||||
params:
|
||||
- name: repo-url
|
||||
type: string
|
||||
description: The git repository URL to clone from.
|
||||
- name: branch-name
|
||||
type: string
|
||||
description: The git branch to clone.
|
||||
workspaces:
|
||||
- name: shared-data
|
||||
description: |
|
||||
This workspace will receive the cloned git repo and be passed
|
||||
to the next Task for the repo's README.md file to be read.
|
||||
tasks:
|
||||
- name: fetch-repo
|
||||
taskRef:
|
||||
name: git-clone
|
||||
workspaces:
|
||||
- name: output
|
||||
workspace: shared-data
|
||||
params:
|
||||
- name: url
|
||||
value: $(params.repo-url)
|
||||
- name: revision
|
||||
value: $(params.branch-name)
|
||||
|
||||
```
|
||||
|
||||
最后,创建一个 `pipelinerun.yaml` 文件,用喜欢的文本编辑器打开它。这个文件真正的运行流水线。它调用流水线中定义的参数(继而调用任务文件中定义的任务)。
|
||||
|
||||
```
|
||||
apiVersion: tekton.dev/v1beta1
|
||||
kind: PipelineRun
|
||||
metadata:
|
||||
name: git-clone-checking-out-a-branch
|
||||
spec:
|
||||
pipelineRef:
|
||||
name: cat-branch-readme
|
||||
workspaces:
|
||||
- name: shared-data
|
||||
volumeClaimTemplate:
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 1Gi
|
||||
params:
|
||||
- name: repo-url
|
||||
value: <https://github.com/tektoncd/pipeline.git>
|
||||
- name: branch-name
|
||||
value: release-v0.12.x
|
||||
|
||||
```
|
||||
|
||||
把不同工作分在不同的文件中的好处是,`git-clone` 任务可以在多条流水线中复用。
|
||||
|
||||
例如,假设你想为一个流水线项目做端到端的测试。你可以使用 `git-clone` 任务 **来让每一次测试都基于最新的代码**。
|
||||
|
||||
### 总结
|
||||
|
||||
只要你熟悉 Kubernetes,那 Tekton 对你来说就像其他 Kubernetes 原生应用一样简单。它有很多工具可以帮助你创建流水线并与之交互。如果你喜欢自动化,不妨试试 Tekton!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton
|
||||
|
||||
作者:[Savita Ashture][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/savita-ashture
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/plumbing_pipes_tutorial_how_behind_scenes.png?itok=F2Z8OJV1 (Plumbing tubes in many directions)
|
||||
[2]: https://github.com/tektoncd/pipeline
|
||||
[3]: https://github.com/knative/build
|
||||
[4]: https://cd.foundation/
|
||||
[5]: https://www.linuxfoundation.org/projects/
|
||||
[6]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
|
||||
[7]: https://operatorhub.io/what-is-an-operator
|
||||
[8]: https://opensource.com/sites/default/files/uploads/tekto-terminology.png (Tekton terminology)
|
||||
[9]: https://tekton.dev/docs/concepts/concept-tasks-pipelines.png
|
||||
[10]: https://kubebyexample.com/en/concept/pods
|
||||
[11]: https://opensource.com/sites/default/files/uploads/tekton-pipelines.png (Tekton pipelines)
|
||||
[12]: https://tekton.dev/docs/concepts/concept-runs.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/01/180822blxgx0c1k43n4kl4.jpg
|
@ -0,0 +1,104 @@
|
||||
[#]: subject: "5 open source alternatives to 微软 Exchange"
|
||||
[#]: via: "https://opensource.com/article/21/11/open-source-alternatives-微软-exchange"
|
||||
[#]: author: "Heike Jurzik https://opensource.com/users/hej"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15705-1.html"
|
||||
|
||||
可以替代微软 Exchange 的 5 个开源软件
|
||||
======
|
||||
|
||||
> 不再将就于微软 Exchange 这一专有软件,试一试这些基于 Linux 系统的电子邮件和群件服务吧。
|
||||
|
||||
![][0]
|
||||
|
||||
几十年来,微软 Exchange 一直统治着电子邮件和群件服务市场。作为领头羊,它主宰着企业界,无处不在的 Outlook 邮件客户端已成为群件的事实标准。由于 Exchange 与微软的 Office 产品紧密联系,无论是桌面客户端还是移动客户端,微软用户都可以轻松使用各种生产力软件和功能。
|
||||
|
||||
然而,许多公司对于将数据存储在微软的云中也心存疑虑。在本文中,我将介绍一些开源替代产品及其优势。这不仅与如何不再受供应商控制和降低成本有关,更关乎使用具有开放标准和不同安全级别的软件 —— 用于组件服务器本身及其背后的操作系统。
|
||||
|
||||
本文中介绍的这五个替代产品都是基于 Linux 的。 虽然 grommunio、Kopano、Nextcloud、ownCloud 和 OX App Suite 在功能上差异很大,吸引到的企业类型各不相同,但它们都提供免费版本,并可选择购买付费支持服务和附加组件。所有产品都可以在本地或云端运行。最重要的是,所有供应商都为其软件提供 SaaS(<ruby>软件即服务<rt>Software as a Service</rt></ruby>)解决方案。
|
||||
|
||||
### grommunio
|
||||
|
||||
[grommunio][2],以前被称为 grammm,在 AGPLv3 许可下发布的。它由奥地利同名公司开发和支持。与 Exchange 不同,grommunio 提供符合标准的邮件服务器,以及功能齐全的群件解决方案,具有电子邮件、联系人、日历、任务、文件共享等功能。grommunio 适用于各种开源和专有邮件客户端,如 Windows Mail、Outlook、Android、Apple Mail/iOS、Thunderbird 等,并支持旧的 RPC over HTTP 协议和 Outlook 标准协议 MAPI over HTTP。除此之外还包含:用于移动设备的 Exchange ActiveSync 和各种标准协议,如 CalDAV(日历)、CardDAV(地址簿)、IMAP、POP3、SMTP 和 LDAP,以及活动目录(用于同步用户帐户)。
|
||||
|
||||
外部对接的开源应用程序还提供了一些微软的 API 或协议不支持的功能。例如,开发人员合并了 [Jitsi][3](视频和音频电话软件)、[Mattermost][4](聊天软件)以及文件共享和同步([ownCloud][5])。除此之外,grommunio 还配备了基本的移动设备管理软件(MDM)。
|
||||
|
||||
grommunio 的设计面向各种不同的用户,并且与 Exchange 一样,它支持数据库分片(数据库在多个主机之间的水平分布)。灵活的存储后端允许管理员通过添加其他服务器或云帐户来扩展他们的设置。grommunio 仅将 MySQL 数据库用于元数据,而所有“内容”(例如邮件和群件对象)都存储在每个用户的 SQLite 数据库中。有关底层架构的更多信息,请查看 [该制造商的网站][6]。
|
||||
|
||||
其社区版是免费的,其中包括所有的 grommunio 功能并支持多达五个用户帐户。
|
||||
|
||||
### Kopano
|
||||
|
||||
来自德国和荷兰的软件制造商 Kopano 出品的 [Kopano][7],也采用 AGPLv3 许可,基于 Zarafa 软件堆栈。与其前身不同,Kopano 的目标不只是成为 Exchange 的替代品。相反,它提供一个完整的群件解决方案,除了电子邮件、联系人、日历、任务、笔记和文档编辑这些标准功能外,它还包括实时通信。Kopano 可以与 [许多其他平台][8]、应用程序和服务交互,其中一些通过插件就能轻松实现。对于视频会议,Kopano 团队基于 WebRTC 开发了自己的开源解决方案:Kopano Meet 提供端到端加密,在 Windows、macOS、Linux、Android 和 iOS 客户端都适用。
|
||||
|
||||
Outlook 客户端通过 ActiveSync(Z-Push 库)或 [Kopano OL Extension][9](KOE)来同步移动数据,KOE 是已经包含了 ActiveSync 的加强版。Kopano 提供本机 Web 客户端(WebApp)、移动设备客户端(Mobility)以及支持 Windows、Linux 和 macOS 的桌面版本(DeskApp)。它可以通过 IMAP、CalDAV 和 CardDAV 连接其他客户端。所有直接连接到 Kopano 服务器的应用程序都使用 SOAP(<ruby>简单对象访问协议<rt>Simple Object Access Protocol</rt></ruby>)中的 MAPI。
|
||||
|
||||
Kopano Groupware 和 Kopano ONE(Kopano Groupware 的特别版)都提供免费的社区版本。 Kopano Meet 还可以作为应用程序或容器下载。
|
||||
|
||||
### Nextcloud
|
||||
|
||||
[Nextcloud][10] 在斯图加特和柏林(德国)都有办事处,采用 AGPLv3 许可。与 ownCloud 或 Dropbox 一样,用户可以通过桌面(Windows、Linux 和 macOS)、网络浏览器或本地应用程序(Android 和 iOS)访问该软件套件。从 18 版本开始,Nextcloud 除了拥有 Nextcloud Files(文件同步和共享)还包括了 Nextcloud Talk(通话、聊天和网络会议)和 Nextcloud Groupware(日历、联系人和邮件),并更名为 Nextcloud Hub。
|
||||
|
||||
用户和群组管理通过 OpenID 或 LDAP 进行。Nextcloud 支持各种存储后端,例如 FTP、S3 和 Dropbox。Nextcloud 可与多种数据库管理系统配合使用,包括 PostgreSQL、MariaDB、SQLite 和 Oracle 数据库。管理员可以通过 [Nextcloud 应用程序商店][11] 中的 200 多个应用程序扩展功能,其中包括实时通信、音频和视频聊天、任务管理、邮件等等。
|
||||
|
||||
Nextcloud 是完全免费的。最重要的是,该公司提供了 Nextcloud Enterprise 版本(针对企业部署进行了预配置、优化和强化)
|
||||
|
||||
### ownCloud
|
||||
|
||||
[ownCloud][12] 是由位于德国纽伦堡的 ownCloud GmbH 公司开发和维护的具有文件同步、共享和内容协作功能的软件。它的客户端-服务器软件的核心和许多社区应用程序都是在 AGPLv3 下发布的。一些扩展功能的企业应用程序以 ownCloud 商业许可证(OCL)的形式授权。
|
||||
|
||||
ownCloud 主要是一款内容协作软件,包括在线办公文档编辑、日历、联系人同步等功能。移动客户端支持 Android 和 iOS,桌面应用可以和 Windows、macOS 和 Linux 的原生文件管理器结合使用。它允许访问 Web 界面,无需安装专用客户端软件。ownCloud 支持 WebDAV、CalDAV 和 CardDAV 协议。LDAP 协议也包含其中,但 ownCloud 也可以连接到支持 OpenID Connect 身份验证标准的其他身份提供者。
|
||||
|
||||
ownCloud 可以整合微软 Office Online Server、Office 365 和微软 Teams,同时为微软 Outlook 和 eM 客户端提供可用插件。如有必要,外部存储功能可连接到不同的存储提供商,例如 Amazon S3、Dropbox、微软 SharePoint、Google Drive、Windows 网络驱动器(SMB)和 FTP。该供应商还为企业客户提供额外的功能,如端到端加密、勒索软件和防病毒保护等(请参阅 [完整功能列表][13])。
|
||||
|
||||
社区版免费且 100% 开源。
|
||||
|
||||
### OX App Suite
|
||||
|
||||
[Open-Xchange][14] 成立于 2005 年,总部位于德国奥尔佩和纽伦堡。今天,OX 在多个欧洲国家、美国和日本设有办事处。[OX App Suite][15] 是一个模块化的电子邮件、通信和协作平台,主要为电信公司、托管公司和其他提供基于云的服务的提供商而设计。
|
||||
|
||||
OX 后端在 GPLv2 协议下发布,前端(UI)在 AGPLv3 下发布。用户可以通过他们喜欢的浏览器(完全个性化的门户)或移动应用程序(Android 和 iOS)访问应用程序套件。或者,原生客户端(移动设备和台式机)也可用于 OX Mail 和 OX Drive。得益于 CardDAV 和 CalDAV 扩展、Exchange Active Sync 和适用于 Android 的 OX Sync App,联系人、日历和任务得以同步。
|
||||
|
||||
OX App Suite 包含用于电子邮件、联系人、日历和任务的应用程序。 还有其他工具和扩展可用,其中一些是开源的,一些功能则要付费,包括 OX Documents(文本文档、电子表格、演示文稿)、OX Drive(管理、共享和同步文件)、OX Guard(电子邮件和文件加密)等等。如需完整列表,请访问 OX 网站的 [一般条款和条件][16]。
|
||||
|
||||
该应用免费提供有限功能的社区版。
|
||||
|
||||
### 开源电子邮件和群件
|
||||
|
||||
电子邮件和群件服务并不是必须花(很多)钱才可获得,当然也没有必要满足于在别人的服务器上托管的专有解决方案。如果你不太热衷于管理职责,那么上述的这五个 Exchange 开源替代品都可以作为 SaaS 解决方案使用。另外,所有供应商都提供专业技术支持,你可以在本地运行软件,一切尽在你的掌握中,但你却不会感觉自己孤军无援。
|
||||
|
||||
(题图由 MJ 生成:Mail Cooperation Groupware Office Open Source hyper realistic, hyper detailed, intricate detail, beautiful lighting, very detailed,Illustration)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/11/open-source-alternatives-微软-exchange
|
||||
|
||||
作者:[Heike Jurzik][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/hej
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/team_dev_email_chat_video_work_wfm_desk_520.png?itok=6YtME4Hj (Working on a team, busy worklife)
|
||||
[2]: https://grommunio.com/
|
||||
[3]: https://opensource.com/article/20/5/open-source-video-conferencing
|
||||
[4]: https://opensource.com/article/20/7/mattermost
|
||||
[5]: https://opensource.com/article/21/7/owncloud-windows-files
|
||||
[6]: https://grommunio.com/features/architecture/
|
||||
[7]: https://kopano.com/
|
||||
[8]: https://kopano.com/products/interoperability/
|
||||
[9]: https://kb.kopano.io/display/WIKI/Setting+up+the+Kopano+OL+Extension
|
||||
[10]: https://nextcloud.com/
|
||||
[11]: https://apps.nextcloud.com/
|
||||
[12]: https://owncloud.com/
|
||||
[13]: https://owncloud.com/features/
|
||||
[14]: https://www.open-xchange.com/
|
||||
[15]: https://www.open-xchange.com/products/ox-app-suite/
|
||||
[16]: https://www.open-xchange.com/terms-and-conditions/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/09/114919i7cu0zwk4e663x0c.jpg
|
@ -0,0 +1,100 @@
|
||||
[#]: subject: "Open source mind mapping with Draw.io"
|
||||
[#]: via: "https://opensource.com/article/21/12/open-source-mind-mapping-drawio"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "FYJNEVERFOLLOWS"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15700-1.html"
|
||||
|
||||
使用开源思维导图 Draw.io
|
||||
======
|
||||
|
||||
> 下次你需要头脑风暴、组织想法或计划项目时,不妨试试 Draw.io。
|
||||
|
||||
![][0]
|
||||
|
||||
地图有一些特别之处。我记得小时候打开托尔金《霍比特人》的封面,盯着手绘的中土世界地图,感受简单的图画中蕴含着丰富的可能性。除了描述事物与其他事物之间的关系这一明显目的外,我认为地图在表达可能性方面做得很好。你可以到户外去,沿着这条路或那条路走,如果你这样做了,去想想你将能够看到的所有新的、令人兴奋的事物。
|
||||
|
||||
尽管如此,地图并不一定是有价值和充满可能性的文字。有些地图描述了一个思维过程、计划、算法,甚至是一些随机的想法,这些想法拼命地想要组合成一件潜在的艺术作品,它们被称之为“思维导图”、“流程图”或“创意板”。可以用开源的 [Draw.io][2] 应用程序去很容易地制作。
|
||||
|
||||
### 安装 Draw.io
|
||||
|
||||
Draw.io 是一个开源的在线应用程序,因此你可以将其作为在线应用程序使用,下载 [桌面版本][3],或 [克隆 Git 存储库][4] 并将其托管在你自己的服务器上。
|
||||
|
||||
### 使用 Draw.io 画图
|
||||
|
||||
当你第一次启动 Draw.io 时,你需要选择保存数据的位置。如果你自己托管 Draw.io,你的选择取决于你可以访问哪些 API 密钥。你可以从几个在线存储服务中为在线公共实例进行选择,这取决于你的帐户。如果你不想把你的数据存储在别人的服务器上,你也可以选择把你的工作保存在本地存储上。如果你还不确定,可以单击 “<ruby>稍后决定<rt>Decide later</rt></ruby>” 继续进入应用程序,而无需选择任何内容。
|
||||
|
||||
Draw.io 的交互界面中间有一个很大的工作空间,左边是主工具栏,顶部是工具栏,右边是属性面板。
|
||||
|
||||
![Draw.io interface][5]
|
||||
|
||||
工作流程很简单:
|
||||
|
||||
1. 从左侧工具栏中选择一个形状。
|
||||
2. 在工作空间中编辑形状。
|
||||
3. 添加另一个形状,并连接它们。
|
||||
|
||||
重复这个过程,你就得到了一张图。
|
||||
|
||||
![Draw.io example][7]
|
||||
|
||||
### 项目规划
|
||||
|
||||
当你第一次接受一项大任务时,你通常对你想要的结果有一个非常清晰的想法。假设你想开始一个社区项目来画一幅壁画。你想要的结果是一幅壁画。它很容易定义,你可以或多或少地在脑海中描绘出结果。
|
||||
|
||||
然而,一旦你开始朝着目标前进,你就必须开始弄清楚细节。壁画应该画在哪里?即便知道画在哪,你如何获得在公共墙上作画的许可的?油漆呢?你应该用一种特殊的油漆吗?你会用刷子还是喷枪涂油漆?你需要什么样的专业设备来喷漆?画一幅壁画需要多少人和多长时间?画家工作时的支持服务怎么样?最后,这幅画是关于什么的?一个想法很快就会变得势不可挡,因为你离实现它越近。
|
||||
|
||||
这不仅仅适用于绘制壁画、制作戏剧或电影。它几乎适用于任何不平凡的努力。这正是像 Draw.io 这样的应用程序可以帮助绘制的。
|
||||
|
||||
以下是如何使用 Draw.io 创建项目流程图:
|
||||
|
||||
1. 从头脑风暴开始。没有什么想法是太小或太大的。为每个想法制作一个框,然后双击 Draw.io 工作空间中的框以输入文本。
|
||||
2. 一旦在工作空间中你产生了可能想到的所有想法,就可以将它们拖放到相关的组中。我们的目标是创建一些小任务云或集群,因为它们是同一过程的一部分,所以或多或少会一起进行。
|
||||
3. 一旦你确定了相关任务的集群,就为这些任务命名。例如,如果你正在绘制壁画,那么任务可能是 “许可”、“设计”、“购买”、“绘制”,这反映出你需要首先获得当地政府的许可,然后设计壁画,然后购买用品,最后绘制壁画。每个任务都有组成部分,但大体上,你现在已经确定了项目的工作流程。
|
||||
4. 用箭头连接主要任务。并不是所有的过程都是完全线性的。例如,在你获得市议会的许可后,一旦你设计了你打算画的东西,你可能必须回到他们那里进行最终批准。这很正常。这是一个循环,有一些来回,但最终,你会突破这个循环,进入下一阶段。
|
||||
5. 掌握好你的流程图,完成每一项任务,直到你达到最终目标。
|
||||
|
||||
### 思维导图
|
||||
|
||||
思维导图往往不是关于进步,而是关于保持某种状态或对许多想法进行展望。例如,假设你已经决定减少生活中的浪费。你对自己能做什么有一些想法,但你想组织和保存你的想法,这样你就不会忘记它们。
|
||||
|
||||
以下是如何使用 Draw.io 创建思维导图:
|
||||
|
||||
1. 从头脑风暴开始。没有什么想法是太琐碎或太大的。为每个想法制作一个框,然后双击 Draw.io 工作空间中的框以输入文本。也可以通过选择框并单击右侧属性面板中的色样,为框指定背景色。
|
||||
2. 将你的想法分组或分类。
|
||||
3. 可以选择将想法与彼此直接相关的箭头连接起来。
|
||||
|
||||
![Draw.io waste reduction example][8]
|
||||
|
||||
### 保存你的图表
|
||||
|
||||
你可以将图表保存为 PNG、JPG 图像、Draw.io XML 或纯 XML 文件。如果将其另存为 XML,则可以在 Draw.io 中再次打开它进行进一步编辑。导出的图像非常适合与他人共享。
|
||||
|
||||
### 使用 Draw.io
|
||||
|
||||
有很多很棒的绘图应用程序,但我不经常制作图表,所以可以随时使用 Draw.io。它的界面简单易用,结果干净专业。下次当你需要头脑风暴、组织想法或计划项目时,可以试试 Draw.io。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/12/open-source-mind-mapping-drawio
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/career_journey_road_gps_path_map_520.png?itok=PpL6jJgY (Looking at a map for career journey)
|
||||
[2]: http://draw.io
|
||||
[3]: https://github.com/jgraph/drawio-desktop
|
||||
[4]: https://github.com/jgraph/drawio
|
||||
[5]: https://opensource.com/sites/default/files/uploads/draw-io-ui.png (Draw.io interface)
|
||||
[6]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[7]: https://opensource.com/sites/default/files/uploads/draw-io-example.jpg (Draw.io example)
|
||||
[8]: https://opensource.com/sites/default/files/uploads/draw-io-export.jpg (Draw.io waste reduction example)
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/07/144214m945y0naawn5zb95.jpg
|
@ -0,0 +1,117 @@
|
||||
[#]: subject: "‘Speek!’ : An Open-Source Chat App That Uses Tor"
|
||||
[#]: via: "https://itsfoss.com/speek/"
|
||||
[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15724-1.html"
|
||||
|
||||
Speek!:一个使用 Tor 的开源聊天应用程序
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 一个有趣的、开源的私人通讯软件,它利用 Tor 来保证你的通信安全和私密。
|
||||
|
||||
Speek 是一种网络通讯服务,它利用多种技术保证网络聊天的私密性。
|
||||
|
||||
它是端到端加密的、去中心化和开源的。
|
||||
|
||||
毫无疑问,它的目标是将自己定位为 [WhatsApp 的替代品][1] 之一和 [Linux 上的 Signal][2] 的竞争对手。
|
||||
|
||||
那么,它到底如何呢? 让我们一起来仔细看看细节。
|
||||
|
||||
### Speek! 适用于 Linux 和安卓的点对点即时消息应用程序
|
||||
|
||||
(LCTT 译注: <ruby>点对点<rt>Peer-to-Peer</rt></ruby>,又称对等式网络,是无中心服务器、依靠 <ruby>对等点<rt>peer</rt></ruby> 交换信息的互联网络体系,它的作用在于,减低以往网路传输中的节点,以降低资料遗失的风险。)
|
||||
|
||||
![Speek! 截图][3]
|
||||
|
||||
Speek!(名称中带有感叹号)是一种加密的聊天软件,旨在抗审查,同时保护数据隐私。
|
||||
|
||||
你也可以认为它是 [Session][4] 的替代品,但有一些区别。
|
||||
|
||||
与其他可用的通讯软件相比,它是一个相当新的竞争对手。但是如果你想尝试开源的解决方案,它应该作为候选者。
|
||||
|
||||
虽然 Speek! 声称能保持匿名,但如果你需要的是完全匿名的话,你应该始终注意自己在设备上的活动。因为你需要考虑的不仅仅是即时通讯软件。
|
||||
|
||||
![Speek! id][5]
|
||||
|
||||
Speek! 利用去中心化的 Tor 网络来保证安全性和私密性。不仅如此,这样做可以让你无需电话号码就能使用服务。你只需要你的 Speek ID 就可以与人联系,而别人很难知道你的 ID。
|
||||
|
||||
(LCTT 译注:Tor 是一个可以实现匿名通信的自由软件。其名源于 <ruby>洋葱路由器<rt>The Onion Router</rt></ruby> 的英文缩写。)
|
||||
|
||||
### Speek! 的亮点
|
||||
|
||||
![Speek! 选项][6]
|
||||
|
||||
Speek! 的一些主要亮点包括:
|
||||
|
||||
* 端到端加密:除收件人外,没有人可以查看你的消息。
|
||||
* 通过 TOR 路由流量:使用 TOR 路由消息,增强隐私。
|
||||
* 没有中央服务器:增加了对审查的抵抗力,因为很难关闭服务。此外,没有针对黑客的单一攻击点。
|
||||
* 无需注册:无需共享任何个人信息即可开始使用该服务。你只需要一个公钥来识别/添加用户。
|
||||
* 自毁聊天:当你关闭应用程序时,消息会自动删除。增添了额外的隐私和安全性。
|
||||
* 无元数据:它会在你交换消息时消除任何元数据。
|
||||
* 私人文件共享:你还可以使用该服务安全地共享文件。
|
||||
|
||||
### 下载适用于 Linux 和其他平台的 Speek!
|
||||
|
||||
你可以从他们的 [官方网站][7] 下载 Speek!。
|
||||
|
||||
在撰写本文时,Speek! 仅适用于 Linux、安卓、macOS 和 Windows。
|
||||
|
||||
对于 Linux,你会找到一个 [AppImage][8] 文件。如果你不知道 AppImage,可以参考我们的 [AppImage 指南][9] 来运行该应用程序。
|
||||
|
||||
![安卓系统上的 Speek!][10]
|
||||
|
||||
另外,[Google Play 商店][11] 上的安卓应用程序还比较早期。因此,你在尝试使用它时可以期待一下它的改进。
|
||||
|
||||
[Speek!][12]
|
||||
|
||||
### 关于 Speek! 的用户体验
|
||||
|
||||
![Speek! 截图][13]
|
||||
|
||||
这个应用的用户体验非常令人满意,包含了所有必备的功能。它可以更好,但已经很不错了。
|
||||
|
||||
嗯,关于 Speek! 的 GUI 没什么好说的。GUI 非常极简风。它的核心是一个聊天应用程序,而它做得恰如其分。没有动态,没有附近的人,没有不必要的附加组件。
|
||||
|
||||
在我使用这个应用程序的有限时间里,我很满意它的功能。它提供的功能使其成为一款出色的聊天应用程序,可通过其背后的所有技术提供安全和私密的消息传递体验。
|
||||
|
||||
如果将它与一些商业上更成功的聊天软件进行比较,它在功能上存在不足。但话又说回来,Speek! 的设计就不是一个只关注用户体验的时尚聊天应用。
|
||||
|
||||
因此,我只向注重隐私的用户推荐 Speek!。如果你想要平衡用户体验和功能,你可能希望继续使用像 Signal 这样的私人聊天软件。
|
||||
|
||||
你对于 Speek 又有什么看法?对于注重隐私的用户来说,它是一个很好的私人聊天软件吗? 请在下方评论区告诉我你的想法。
|
||||
|
||||
*(题图:MJ:A girl looks at her phone while two cats are peeking at her phone next to her.)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/speek/
|
||||
|
||||
作者:[Pratham Patel][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/pratham/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/private-whatsapp-alternatives/
|
||||
[2]: https://itsfoss.com/install-signal-ubuntu/
|
||||
[3]: https://itsfoss.com/content/images/wordpress/2022/05/01_speek_gui-1-800x532.webp
|
||||
[4]: https://itsfoss.com/session-messenger/
|
||||
[5]: https://itsfoss.com/content/images/wordpress/2022/05/speek-id-800x497.png
|
||||
[6]: https://itsfoss.com/content/images/wordpress/2022/05/speek-options-800x483.png
|
||||
[7]: https://speek.network
|
||||
[8]: https://itsfoss.com/appimage-interview/
|
||||
[9]: https://itsfoss.com/use-appimage-linux/
|
||||
[10]: https://itsfoss.com/content/images/wordpress/2022/05/speek-android.jpg
|
||||
[11]: https://play.google.com/store/apps/details?id=com.speek.chat
|
||||
[12]: https://speek.network/
|
||||
[13]: https://itsfoss.com/content/images/wordpress/2022/05/01_speek_gui-1-800x532.webp
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/15/162817st1ffhth0ov6sz6t.jpg
|
@ -0,0 +1,376 @@
|
||||
[#]: subject: "How To Create Multiboot USB Drives With Ventoy In Linux"
|
||||
[#]: via: "https://ostechnix.com/how-to-create-multiboot-usb-drives-with-ventoy-in-linux/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "hanszhao80"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15720-1.html"
|
||||
|
||||
如何在 Linux 系统中使用 Ventoy 创建多重引导的 U 盘
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
Ventoy 是一个自由开源和跨平台的程序,可以在 Linux、macOS 和微软的 Windows 中创建多重引导的 U 盘。
|
||||
|
||||
你不必周而复始地格式化你的 USB 设备,只需创建一次可引导的 U 盘即可,如有需要可在将来添加你想要的 ISO。
|
||||
|
||||
你甚至可以创建子文件夹,例如 Linux ISO、Windows ISO,并把各自的 ISO 文件放在相应的文件夹里。Ventoy 会自动为新添加的 ISO 生成菜单条目,并将它们添加到启动菜单中。
|
||||
|
||||
一旦你创建完多重引导的 U 盘,使用它启动你的系统,选择你想加载的 ISO,马上就可以使用它。就是如此简单!
|
||||
|
||||
### 功能
|
||||
|
||||
Ventoy 有很多有用的功能,如:
|
||||
|
||||
- 非常容易安装和使用。
|
||||
- 快速(仅受限于复制 ISO 文件的速度)。
|
||||
- 你不需要解压缩 ISO 文件。直接从 ISO 文件启动即可。
|
||||
- 可被安装在 U 盘/本地硬盘/SSD 盘/NVMe 盘/SD 卡中。
|
||||
- 它支持<ruby>传统<rt>Legacy</rt></ruby> BIOS、IA32 UEFI、x86_64 UEFI、ARM64 UEFI、MIPS64EL UEFI 等(LCTT 译注:这些英文缩写都是代表了不同的 CPU 架构。如 IA32 是指英特尔 32 位体系架构,x86_64 指基于 x86 架构的 64 位扩展架构,ARM64 则是 ARM 体系结构的 64 位扩展、MIPS64EL 是指 64 位小端序的 MIPS 架构)。
|
||||
- 支持 IA32/x86_64 UEFI 的安全启动。
|
||||
- 支持主分区使用 FAT32/exFAT/NTFS/UDF/XFS/Ext2/Ext3/Ext4 格式。默认使用 exFAT。
|
||||
- 支持在物理机中使用 Linux 发行版启动 vhd、vdi、raw 等格式的虚拟磁盘文件。
|
||||
- 持久化的存储支持。
|
||||
- 支持 MBR 和 GPT 两种分区格式都。默认使用 MBR。
|
||||
- 你可以用大于 4 GB 的 ISO 文件创建引导盘。
|
||||
- 几乎所有类型的操作系统都支持。开发者声称 Ventoy 已经测试过了超过 900 多个 ISO 文件。
|
||||
- 支持 Linux 自动安装。意味着你可以添加你的模板或脚本来进行无人值守的部署。例如,Redhat/CentOS 的 kickstart 脚本,SUSE 的 autoYast xml,Debian 的 preseed 脚本。把脚本或模板放在 U 盘里,让 ventoy 使用它进行无人值守安装。你也可以在任何时候更新这些脚本。不需要创建新的 ISO 文件,只要使用原来的 ISO 即可。
|
||||
- 支持 Windows 系统的自动安装。
|
||||
- 在启动期间对 USB 盘写保护。
|
||||
- 不影响 USB 启动盘的正常使用。这意味着你可以将 U 盘用于文件复制等其他用途。
|
||||
- 当有新的 Ventoy 版本时可供升级时,无须重新创建 USB 启动盘。在版本升级过程中,数据不会被破坏。
|
||||
- 当一个新的发行版发布时,不需要更新 Ventoy。
|
||||
- 将 ISO 文件复制/粘贴到 U 盘中,即可添加一个新的操作系统,没有必要从头开始。
|
||||
- 支持 <ruby>内存盘<rt>Memdisk</rt></ruby> 模式。在某些机器上,可能无法加载 ISO。在这种情况下,你可以使用 <ruby>内存盘<rt>Memdisk</rt></ruby> 模式。Ventoy 将把整个 ISO 文件加载到内存中,然后启动它。
|
||||
- 插件框架。
|
||||
- <ruby>传统<rt>Legacy</rt></ruby> 和 UEFI 的本地启动菜单风格。
|
||||
- 有命令行界面、本地图形化界面和基于 Web 的图形化界面的版本可用。
|
||||
- 支持主题和菜单风格的定制。
|
||||
- 跨平台。它支持 Linux、manOS 和 Windows 等操作系统。
|
||||
- 自由开源!
|
||||
|
||||
### 在 Linux 中用 Ventoy 创建多重启动的 U 盘
|
||||
|
||||
正如我之前提到的,Ventoy 有命令行界面、本地图形化界面和基于 Web 的图形化界面的版本可用。
|
||||
|
||||
#### 1. 使用 Ventoy 命令行创建多重启动的 U 盘
|
||||
|
||||
首先,你需要找到你的 U 盘名称。可以通过下面的指南,来了解在 Linux 中寻找磁盘驱动器细节的不同方法。
|
||||
|
||||
> **[如何在 Linux 中 寻找硬盘驱动器细节][1]**
|
||||
|
||||
我将使用 `fdisk` 命令来查找我的 U 盘的详细信息:
|
||||
|
||||
```
|
||||
$ sudo fdisk -l
|
||||
```
|
||||
|
||||
样例输出:
|
||||
|
||||
```
|
||||
[...]
|
||||
Disk /dev/sdb: 14.54 GiB, 15597568000 bytes, 30464000 sectors
|
||||
Disk model: Cruzer Blade
|
||||
Units: sectors of 1 * 512 = 512 bytes
|
||||
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||
Disklabel type: dos
|
||||
Disk identifier: 0x4d924612
|
||||
```
|
||||
|
||||
如你所见,我的 U 盘的名称是 `/dev/sdb`。
|
||||
|
||||
接下来,从 [发布页][2] 下载最新的 Ventoy 脚本。截至编写本指南时,最新版本是 `1.0.77`(LCTT 译注:截至翻译完成时,最新版本是 `1.0.91`)。
|
||||
|
||||
到你下载脚本的位置,解压它。我把它解压在一个名为 `ventoy` 的文件夹中。使用 `cd` 命令切换到 `ventoy` 目录中:
|
||||
|
||||
```
|
||||
$ cd ventoy
|
||||
```
|
||||
|
||||
现在,运行以下命令来创建多重启动的 U 盘:
|
||||
|
||||
```
|
||||
$ sudo sh Ventoy2Disk.sh -I /dev/sdb
|
||||
```
|
||||
|
||||
将 `/dev/sdb` 替换为你的 U 盘名称。
|
||||
|
||||
这里,大写的 `-I` 参数意味着将无视之前是否安装过 ventoy,**强制安装 ventoy** 到 `sdb`。当你使用小写的 `-i`,若此时磁盘已经安装了 ventoy ,它会安装失败。
|
||||
|
||||
要启用安全启动支持,使用 `-s` 参数。默认情况下,这个选项是关掉的。
|
||||
|
||||
```
|
||||
$ sudo sh Ventoy2Disk.sh -I -s /dev/sdb
|
||||
```
|
||||
|
||||
你将被提示确认 USB 启动盘的创建过程。仔细检查 U 盘的名称,并输入 `Y`,按回车键继续:
|
||||
|
||||
样例输出:
|
||||
|
||||
```
|
||||
**********************************************
|
||||
Ventoy: 1.0.77 x86_64
|
||||
longpanda admin@ventoy.net
|
||||
https://www.ventoy.net
|
||||
**********************************************
|
||||
|
||||
Disk : /dev/sdb
|
||||
Model: SanDisk Cruzer Blade (scsi)
|
||||
Size : 14 GB
|
||||
Style: MBR
|
||||
|
||||
Attention:
|
||||
You will install Ventoy to /dev/sdb.
|
||||
All the data on the disk /dev/sdb will be lost!!!
|
||||
|
||||
Continue? (y/n) y
|
||||
|
||||
All the data on the disk /dev/sdb will be lost!!!
|
||||
Double-check. Continue? (y/n) y
|
||||
|
||||
Create partitions on /dev/sdb by parted in MBR style ...
|
||||
Done
|
||||
Wait for partitions ...
|
||||
partition exist OK
|
||||
create efi fat fs /dev/sdb2 ...
|
||||
mkfs.fat 4.2 (2021-01-31)
|
||||
success
|
||||
Wait for partitions ...
|
||||
/dev/sdb1 exist OK
|
||||
/dev/sdb2 exist OK
|
||||
partition exist OK
|
||||
Format partition 1 /dev/sdb1 ...
|
||||
mkexfatfs 1.3.0
|
||||
Creating... done.
|
||||
Flushing... done.
|
||||
File system created successfully.
|
||||
mkexfatfs success
|
||||
writing data to disk ...
|
||||
sync data ...
|
||||
esp partition processing ...
|
||||
|
||||
Install Ventoy to /dev/sdb successfully finished.
|
||||
```
|
||||
|
||||
![在 Linux 操作系统中用 Ventoy 创建多重引导的 U 盘][3]
|
||||
|
||||
几秒钟后,多重启动的 U 盘将被创建。
|
||||
|
||||
上述命令将创建两个分区。你可以用 `fdisk` 命令来验证它:
|
||||
|
||||
```
|
||||
$ sudo fdisk -l
|
||||
```
|
||||
|
||||
样例输出:
|
||||
|
||||
```
|
||||
[...]
|
||||
Disk /dev/sdb: 14.53 GiB, 15597568000 bytes, 30464000 sectors
|
||||
Disk model: Cruzer Blade
|
||||
Units: sectors of 1 * 512 = 512 bytes
|
||||
Sector size (logical/physical): 512 bytes / 512 bytes
|
||||
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
||||
Disklabel type: dos
|
||||
Disk identifier: 0x436cedd0
|
||||
|
||||
Device Boot Start End Sectors Size Id Type
|
||||
/dev/sdb1 * 2048 30398463 30396416 14.5G 7 HPFS/NTFS/exFAT
|
||||
/dev/sdb2 30398464 30463999 65536 32M ef EFI (FAT-12/16/32)
|
||||
```
|
||||
|
||||
现在打开你的文件管理器,把 ISO 文件复制到第一个分区。不用担心你分不清楚哪个是第一个分区,你的文件管理器将只显示第一个分区。
|
||||
|
||||
![将 ISO 文件复制到用 Ventoy 创建的 USB 启动盘上][4]
|
||||
|
||||
你甚至可以为不同的 ISO 文件类型创建子文件夹。例如,你可以为存储 Linux ISO 文件创建一个子文件夹,为 BSD ISO 文件创建一个子文件夹,为 Windows ISO 文件创建一个子文件夹。
|
||||
|
||||
Ventoy 将扫描整个 U 盘,为所有可用的 ISO 文件创建菜单项,并自动将它们添加到 Ventoy 的主启动菜单中。
|
||||
|
||||
如果你喜欢用命令行方式复制 ISO 文件,请到你保存 ISO 文件的地方,用 `rsync` 程序从命令行复制所有 ISO 文件,如下所示:
|
||||
|
||||
```
|
||||
$ rsync *.iso /media/$USER/ventoy/ --progress -ah
|
||||
```
|
||||
|
||||
请注意,在某些 Linux 发行版中,U 盘可能被挂载在 `/run/media/` 位置。
|
||||
|
||||
大功告成!我们刚刚用 Ventoy 创建了多重引导的 U 盘。
|
||||
|
||||
用新制作的可引导 U 盘启动你的系统,你会对 Ventoy 的启动菜单感到满意:
|
||||
|
||||
![Ventoy 的多重启动菜单][5]
|
||||
|
||||
选择你想启动的操作系统,并按下回车键加载它!
|
||||
|
||||
下面是用 Ventoy 创建的多重启动 U 盘的简短视频演示:
|
||||
|
||||
![][7]
|
||||
|
||||
很酷,不是吗?确实如此!
|
||||
|
||||
如果你想在 Oracle Virtualbox 中用 U 盘启动,请参考以下指南:
|
||||
|
||||
> **[如何在 Linux 中从 U 盘 启动 Virtualbox 的虚拟系统?][8]**
|
||||
|
||||
#### 2. 使用 Ventoy 图形化界面创建多重启动的 U 盘
|
||||
|
||||
最初,Ventoy 在 Linux 平台上没有任何图形化的用户界面。我们在 Linux 中只能使用Ventoy 的命令行模式创建 USB 启动盘。
|
||||
|
||||
幸运的是,Ventoy 从 1.0.36 版开始提供基于网页的图形用户界面,从 1.0.52 版开始提供本地化图形用户界面(使用 GTK/QT)。
|
||||
|
||||
相信我,Ventoy 的图形化用户界面使用起来非常简单!它的界面非常小巧,但它拥有我们所需要的一切,只需点击几下鼠标就能创建一个单一的或多重引导的启动盘。
|
||||
|
||||
打开你的终端,进入你下载最新 Ventoy 程序的位置。
|
||||
|
||||
```
|
||||
$ cd Downloads/ventoy-1.0.77/
|
||||
```
|
||||
|
||||
运行适配的 Ventoy 图形化用户界面可执行文件,这取决于发行版的架构。
|
||||
|
||||
- VentoyGUI.i386 - 32 位的 X86 架构的操作系统适用
|
||||
* VentoyGUI.x86_64 - 64 位的 X86 架构的操作系统适用
|
||||
* VentoyGUI.aarch64 - ARM64 架构的操作系统适用
|
||||
* VentoyGUI.mips64el - 龙芯 3A MIPS 架构的操作系统适用
|
||||
|
||||
我使用的是 Debian 11 X86 64 位系统,所以我运行以下命令:
|
||||
|
||||
```
|
||||
$ ./VentoyGUI.x86_64
|
||||
```
|
||||
|
||||
这就是 Ventoy 图形用户界面的样子。
|
||||
|
||||
![Ventoy 图形用户界面][9]
|
||||
|
||||
Ventoy 会自动为你选择已插入的 U 盘。但是我建议你确认所选择的是否真的是你想格式化的 U 盘。
|
||||
|
||||
![使用 Ventoy 图形用户界面创建多重启动的 U 盘][10]
|
||||
|
||||
你将被提示确认该过程。点击 “OK” 继续。
|
||||
|
||||
##### Ventoy 选项和语言
|
||||
|
||||
从菜单栏中点击<ruby>选项<rt>Option</rt><ruby>按钮。
|
||||
|
||||
![Ventoy 选项][11]
|
||||
|
||||
从 <ruby>选项<rt>Option</rt><ruby> 下拉按钮,你可以做以下事情:
|
||||
|
||||
- <ruby>安全启动支持<rt>Secure Boot Support</rt></ruby> - 勾选/取消勾选以启用或禁用安全启动。默认情况下,它处于选中状态以示启用。
|
||||
- <ruby>分区格式<rt>Partition Style</rt></ruby> - 支持 MBR 和 GPT 分区格式。默认是 MBR。
|
||||
- <ruby>分区配置<rt>Partition Configuration</rt></ruby> - 在这里,你可以选择在磁盘的末端保留一些空闲空间。
|
||||
- <ruby>清除<rt>Clear</rt></ruby> Ventoy - 从你的磁盘中删除 Ventoy。
|
||||
- <ruby>显示所有设备<rt>Show All Devices</rt></ruby> - 如果你想显示包括你的本地磁盘在内的所有连接的设备,请选中这个选项。在选择这个选项时要特别小心。你可能会不小心选择你的一个本地磁盘并将其格式化。
|
||||
|
||||
<ruby>语言<rt>Language</rt></ruby> 按钮允许你选择你喜欢的语言。
|
||||
|
||||
##### 更新 Ventoy
|
||||
|
||||
每当有新的 Ventoy 版本发布时,没有必要重新创建可引导的 USB 启动盘。你可以安全地将Ventoy 更新到新版本,而不会丢失 U 盘中的任何现有数据。
|
||||
|
||||
要将已安装的 Ventoy 版本更新到最新的可用版本,请插入 U 盘并启动 Ventoy 图形化用户界面,如上所示。
|
||||
|
||||
在 Ventoy 图形化用户界面中, 点击 <ruby>更新<rt>Update</rt></ruby> 按钮。
|
||||
|
||||
![更新 Ventoy][12]
|
||||
|
||||
#### 3. 使用 Ventoy 基于 Web 的图形化用户界面创建多重启动的 USB 启动盘
|
||||
|
||||
Ventoy 基于 Web 的图形化用户界面与本地图形化用户界面完全相同。有一天,我在我的Fedora Linux 桌面系统上试用了 Ventoy 基于 Web 的用户界面。我很惊讶我是多么喜欢Ventoy 图形用户界面的简洁。
|
||||
|
||||
要了解如何使用 Ventoy 图形用户界面创建可引导的 U 盘,请参考以下链接:
|
||||
|
||||
> **[在 Linux 中用 Ventoy 基于 Web 的用户界面创建可引导的 U 盘][13]**
|
||||
|
||||
### 将 ISO 镜像加载到 RAM 中
|
||||
|
||||
就像我之前提到的,ISO 镜像在某些机器上可能无法启动,特别是在传统的 BIOS 模式下。这就是 <ruby>内存盘<rt>Memdisk</rt></ruby> 模式的用武之地。
|
||||
|
||||
当 <ruby>内存盘<rt>Memdisk</rt></ruby> 模式被启用时,Ventoy 将把整个 ISO 镜像文件加载到内存中启动。
|
||||
|
||||
在选择操作系统之前按 `F1` 键,启用 <ruby>内存盘<rt>Memdisk</rt></ruby>模式(译者注:从 1.0.83 版本开始,进入该模式的快捷键从 `F1` 改成了 `Ctrl+D`)。当 <ruby>内存盘<rt>Memdisk</rt></ruby> 模式启用时,你会在右上角看到通知。
|
||||
|
||||
![启用 Ventoy 的内存盘模式][14]
|
||||
|
||||
现在,ISO 将被加载到内存中:
|
||||
|
||||
![在 Ventoy 中加载 ISO 到内存][15]
|
||||
|
||||
请再次按 `F1` 键以切换回正常模式。
|
||||
|
||||
### 创建持久化的可引导 U 盘
|
||||
|
||||
我们现在知道了如何在 Linux 中用 Ventoy 创建多重启动的 U 盘。我们可以使用这个可引导的 USB 启动盘来测试 Linux 发行版,而不必真的在硬盘上安装它们。
|
||||
|
||||
当你使用 <ruby>立付<rt>Live</rt></ruby> OS 时,你可以做各种事情,如安装应用程序、下载文件、播放媒体文件、创建文件和文件夹、按照你的喜好定制等等。
|
||||
|
||||
然而,一旦你重新启动系统,所有上述变化都将消失。如果你想让所有的改变在重启系统后仍然保留,你应该创建一个持久化的可引导的 U 盘。
|
||||
|
||||
Ventoy 能够制作持久化的 USB 启动盘。请参考下面的链接学习怎么做。
|
||||
|
||||
> **[在 Linux 中使用 Ventoy 创建持久化的可引导 U 盘][16]**
|
||||
|
||||
### 总结
|
||||
|
||||
信不信由你,Ventoy 是我用过的在 Linux 中创建多重引导(持久或非持久)的 USB 闪存盘工具中最简单、最快速、最巧妙的之一。
|
||||
|
||||
它真的做到了开箱即用!试一下吧,你不会失望的!
|
||||
|
||||
### 与 Ventoy 有关的安全问题
|
||||
|
||||
Ventoy 网站、论坛和该网站上的一些文件被一些杀毒软件标记为恶意软件或木马。请查看这些发布在该项目 GitHub 页面中的议题:
|
||||
|
||||
- [https://github.com/ventoy/Ventoy/issues/22][17]
|
||||
- [https://github.com/ventoy/Ventoy/issues/83][18]
|
||||
- [https://github.com/ventoy/Ventoy/issues/31][19]
|
||||
|
||||
然而,Manjaro 打包者 Linux Aarhus 在代码审查后认为:没有合理的理由怀疑这个应用程序的安全性。
|
||||
|
||||
他声称 “**没有混淆的代码**”。所以,我觉得 Ventoy 是可以**安全**使用的。
|
||||
|
||||
### 资源
|
||||
|
||||
* [Ventoy 官网][20]
|
||||
* [Ventoy GitHub 仓库][21]
|
||||
|
||||
*(题图: MJ: USB disk bootload computer sci-fi future in sky stars)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/how-to-create-multiboot-usb-drives-with-ventoy-in-linux/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[hanszhao80](https://github.com/hanszhao80)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/how-to-find-hard-disk-drive-details-in-linux/
|
||||
[2]: https://github.com/ventoy/Ventoy/releases
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2022/07/Create-Multiboot-USB-Drives-With-Ventoy-In-Linux.png
|
||||
[4]: https://ostechnix.com/wp-content/uploads/2020/05/Copy-ISO-files-to-USB-bootable-drive.png
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2020/05/Ventoy-multiboot-menu.png
|
||||
[6]: https://youtu.be/VFr1mAikeJU
|
||||
[8]: https://ostechnix.com/how-to-boot-from-usb-drive-in-virtualbox-in-linux/
|
||||
[9]: https://ostechnix.com/wp-content/uploads/2022/07/Ventoy-GUI.png
|
||||
[10]: https://ostechnix.com/wp-content/uploads/2022/07/Create-Multiboot-USB-Drives-Using-Ventoy-GUI.png
|
||||
[11]: https://ostechnix.com/wp-content/uploads/2022/07/Ventoy-Options.png
|
||||
[12]: https://ostechnix.com/wp-content/uploads/2022/07/Update-Ventoy.png
|
||||
[13]: https://ostechnix.com/create-bootable-usb-drive-with-ventoy-webui-in-linux/
|
||||
[14]: https://ostechnix.com/wp-content/uploads/2020/05/Enable-Memdisk-mode-in-Ventoy.png
|
||||
[15]: https://ostechnix.com/wp-content/uploads/2020/05/Load-ISO-to-memory-in-Ventoy.png
|
||||
[16]: https://ostechnix.com/create-persistent-bootable-usb-using-ventoy-in-linux/
|
||||
[17]: https://github.com/ventoy/Ventoy/issues/22
|
||||
[18]: https://github.com/ventoy/Ventoy/issues/83
|
||||
[19]: https://github.com/ventoy/Ventoy/issues/31
|
||||
[20]: https://www.ventoy.net/en/index.html
|
||||
[21]: https://github.com/ventoy/Ventoy
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/14/091200ff7k7784a817zvl7.jpg
|
@ -0,0 +1,91 @@
|
||||
[#]: subject: "Open Source Software: Is There an Easy Path to Success?"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/"
|
||||
[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "CanYellow"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15702-1.html"
|
||||
|
||||
开源软件:存在成功的捷径吗?
|
||||
======
|
||||
|
||||
> 开发开源软件背后的工作是相当庞大的。那么我们如何保证开源项目的成功呢?存在捷径吗?本文认为是没有的。
|
||||
|
||||
![][0]
|
||||
|
||||
今天,开源已经风靡世界。很多大型企业在快速成功的诱惑下被推向开源。但真实情况是世界上并不存在成功的捷径。你无法做到通过一次努力就能让所有的开源项目正常运行。
|
||||
|
||||
事实上,上述公司早期遇到的许多挑战都不是技术上的,而是人员与文化上的。
|
||||
|
||||
开发一个能够在市场上获得成功的开源项目需要在开源的许多层面上下功夫。而维持这样的成功是一个持续的过程。所有这一切的关键在于找到以下这个非常基本的问题的正确答案:开源究竟是什么。
|
||||
|
||||
### 开源是代码
|
||||
|
||||
对于很多新用户而言,他们可能并不完全了解开源的不同层面,答案相当简单:开源就是软件!这当然没有错,毕竟我们多数人就是这样使用它的。不过,相比仅仅被视作软件而言,开源远不止这些。
|
||||
|
||||
任何开源项目的实质仍然是代码本身。代码是使一个开源项目有别于其他项目,并使其对用户有益的根本。当你从事开源工作的时候,代码和软件一样都是产品的一部分。
|
||||
|
||||
从零开始开发一个开源项目或者 <ruby>复刻<rt>fork</rt></ruby> 一个现有项目,即便是在面对一个庞大而复杂的代码库时,也需要编写成千上万行代码。尤其是在创建一个现有项目的复刻的情况下,在移除任何在先的许可证、宣传材料或者其他任何可能已经失去作用的文件时必须小心翼翼(LCTT 校注:部分开源项目不允许你改变其原有的许可证)。终究是一个项目的功能吸引了它的用户群并维持项目的持续发展。当最终用户在考虑是否使用开源软件的时候,他们会阅读项目的源代码,而他们在其中所看到的应当是那些能够建立他们的信心的内容。
|
||||
|
||||
### 开源是社区
|
||||
|
||||
如何参与到社区中也是产品构建的一部分。创建一个社区并维护一个健康的社区关系是开源的核心之一,但对于大部分的领导者而言也往往是最坚难的任务,很少有人能很好地维护它。你可以尝试建立基金会或者提供赞助,但是最终还是由人们自行决定是否想要加入社区。
|
||||
|
||||
重要的是与社区保持一定程度的透明度,并不断保持。社区成员可以在它想要的任何阶段参与进来。除了需要进行的工作之外,诸如安全设置、签发证书、注册商标等,尽可能多的将你所做的工作展示给社区是相当重要的,这有助于取得社区信任。归根到底,你需要对社区负责,你的项目成也社区,败也社区。这可能会导致你的项目开发更谨慎、更缓慢并且向社区公开,不过项目最终会进展顺利。
|
||||
|
||||
如此地公开你正在进行的工作似乎有些令人生怯,尤其是当你担心更新推迟或者是出现漏洞的影响的时候。不过,让社区成员知悉你的进展,不仅有助帮助你建立与社区之间的信任关系,而且能够让社区成员感到被认可。
|
||||
|
||||
另一方面,公开你的工作流也可以获得来自社区成员的监督,他们经常有自己的见解并向你反馈。记录这些反馈是很重要的,这使得你的开源项目如实地反映社区需求。他们是项目的最终用户,而他们的反馈则反映了他们如何看待你的项目的长期发展,以及你的项目最终将有多么成功或者主流。
|
||||
|
||||
举例而言,当我们在考虑一个新功能的时候,我们在 <ruby>征求意见文档<rt>Request for Comments</rt></ruby>(RFC)中发布一个征集意见的请求,我们会收到大量的反馈,我们必须认真思考应当如何吸收这些反馈。
|
||||
|
||||
因为开源是一个大型的合作项目,社区对支持开源项目的主动支持,使项目成为了最好的项目。并非所有的问题都要解决,但只要你有在倾听社区的呼声,社区就会有参与感。
|
||||
|
||||
参与到社区中也存在一些隐患。社区内部、项目维护与社区之间均可能存在不同意见,尤其是在涉及治理的问题上。治理对于一个开源项目来说是相当重要的。这也就是为什么拥有一份清晰的文档化的治理条例对于项目以及社区均是如此重要。
|
||||
|
||||
社区治理是一个关键的而又难啃的骨头。社区授权本身需要相当大的信任。对于一个拥有成千上万行代码的项目,在社区中寻找能够有效领导社区的人物是不容易的。不过开源项目经常是由更小的子项目组成的,这些子项目最好由社区中的某个人进行管理。这有助于社区更紧密地参与到项目中。
|
||||
|
||||
建立社区的过程不是一帆风顺的。让我列举一一些有助于维持社区与我的团队之间平衡的技巧。
|
||||
|
||||
**声明你的原则:** 尤其是在开源项目的早期,在项目代码仍在完善,很多事情还不完美的时候,项目之外的人员很难真正理解你所做的决定。向他们说明你做出决定所依据的原则,有助于你在思考过程上保持坦率,从而让社区不会错误地干扰你的事务。这一经验非常有效,在你做出决定时坚持遵循其中一项原则并展示出来是非常重要的。
|
||||
|
||||
**确定如何进行协作:** 你可以通过 Discord、Slack 或者邮件等途径完成这一工作。但是如果你试图同时使用它们,你将毫不意外的分散项目社区。社区人员将在所有这些途径上互相交流。选择一到两种沟通工具,投身于它们来保证社区的信息同步。
|
||||
|
||||
**珍惜反馈意见:** 倾听来自社区的反馈并付诸行动。即使需要你作出艰难的决定,你也应当向社区展示你是重视社区话语的。
|
||||
|
||||
**维护一套行为准则:** 如果你与社区打交道,你需要定义什么行为是可以接受的。一套落地的行为准则有助于在人们越过红线时警示他们。如果你可以提前制定这些你可以避免很多麻烦。
|
||||
|
||||
**考虑如何分发你的项目:** 存在这样的情况,因为你还没有准备好某一个组件,或者是因为存在一些你不希望所有人都能够访问的项目功能,所以你可能并不希望将你的项目完全向公众公开。关键是制定符合你的要求而不是向用户妥协的分发条款,如此,需要某种功能的用户可以获取所需项目的同时,不需要该功能的用户也不需要在开始使用该项目做出妥协。
|
||||
|
||||
**尽可能地避免投票:** 这是因为部分成员经常会赞成与大部分成员的意见相左的选项,这会使这些人产生一定程度的失望,并让他们觉得被项目所孤立。反之,尽量尝试询问他们想要解决什么问题,并尝试创造一个不需要付出代价的解决方案。
|
||||
|
||||
### 开源是许可
|
||||
|
||||
开源是给予你的用户如何使用你的软件的自由,而许可能够做到这一点。开源项目许可的好处在于,它保证了不论你作为维护者做了什么,你的所有最终用户以及利益相关方总是可以维护一系列的项目复刻版本,这些都是重要的项目复刻。
|
||||
|
||||
许可提供了人们可选择性,如果他们认为有必要,他们可以将项目带到不同的路径中。他们拥有创建副本的权利,这使得许多优秀的软件能够被开发出来。维护者有责任倾听他们的社区成员的声音,并以一个对项目的社区成员有利的方式运营项目。
|
||||
|
||||
我们推荐使用现有的许多可用的许可证,而不是独立制作你自己的许可条款,原因很简单,因为用户以及利益相关方通常都很熟悉常用的许可证,因此你不需要再花费时间在解释许可条款上。这将帮助你将你的精力集中在项目的其他部分上。
|
||||
|
||||
### 最后,开源是一项运动
|
||||
|
||||
开源包括了很多维度,也包含了很多人员。最重要的是,它是关于理解人们想要什么,并创建一个鼓励协作与透明的环境。开源也是关于创建社区,帮助建立走自己想走的开源项目的方式。维护者创造越多的机会让社区自由发挥,开源产品就越好,也越发成功。
|
||||
|
||||
开源是以上所有这些方面,而你的视野越宽阔,你就能越好的利用它。请考虑你如何能够在开源的每一个维度上出类拔萃,因为时至今日,开源的成功之路并无捷径。
|
||||
|
||||
---
|
||||
|
||||
via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/
|
||||
|
||||
作者:[Jules Graybill][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[CanYellow](https://github.com/CanYellow)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/jules-graybill/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/08/122245uqlbfaxp3flkwf5b.jpg
|
@ -0,0 +1,274 @@
|
||||
[#]: subject: "Level up your HTML document with CSS"
|
||||
[#]: via: "https://opensource.com/article/22/8/css-html-project-documentation"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15721-1.html"
|
||||
|
||||
使用 CSS 提升你的 HTML 文档
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 使用 CSS 让你的 HTML 项目更具风格。
|
||||
|
||||
当你编写文档时,无论是为开源项目还是技术写作项目,你都应该有两个目标:文档应该写得好,同时要易于阅读。前者通过清晰的写作技巧和技术编辑来解决。第二个目标可以通过对 HTML 文档进行一些简单的更改来解决。
|
||||
|
||||
超文本标记语言(HTML)是互联网的支柱。自 1994 年“万维网”问世以来,所有网络浏览器都使用 HTML 来显示文档和网站。几乎与此同时,HTML 一直支持样式表,它是对 HTML 文档的一种特殊添加,用于定义文本在屏幕上的呈现方式。
|
||||
|
||||
单纯用 HTML 编写项目文档也是可以的。然而,纯 HTML 样式可能感觉有点简陋。因此,尝试向 HTML 文档添加一些简单的样式,为文档添加一点活力,并使文档更清晰、更易于阅读。
|
||||
|
||||
### 定义一个 HTML 文档
|
||||
|
||||
让我们从一个纯 HTML 文档开始,探索如何向其添加样式。一个空的 HTML 文档在顶部包含 `<!DOCTYPE html>` 定义,后面跟着一个 `<html>` 块来定义文档本身。 在 `<html>` 元素中,你还需要加上一个文档标头,其中包含有关文档的元数据,例如标题。文档正文的内容放在父 `<html>` 块内的 `<body>` 块中。
|
||||
|
||||
你可以使用以下 HTML 代码定义一个空白页面:
|
||||
|
||||
```
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>这是一个新文档</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
在另一篇关于 [用 HTML 编写项目文档][2] 的文章中,我将一个开源棋盘游戏的自述文件从纯文本更新为 HTML 文档,并使用一些基本的 HTML 标记,如 `<h1>` 和 `<h2>` 作为标题和副标题,`<p>` 用于段落,`<b>` 和 `<i>` 用于粗体和斜体文本。让我们从那篇文章结束的地方继续讲:
|
||||
|
||||
```
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>简易 Senet</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>简易 Senet</h1>
|
||||
<h2>游戏玩法</h2>
|
||||
|
||||
<p>游戏会自动为你“投掷”投掷棒,并在屏幕右下角显示结果。</p>
|
||||
|
||||
<p>如果“投掷”结果为零,你失去本轮机会。</p>
|
||||
|
||||
<p>轮到你的时候,游戏会自动选择
|
||||
你在棋盘上的第一块棋子。 你不一定
|
||||
能够用这个棋子走棋,所以选择你的棋子
|
||||
移动,然后按 <i>Space</i>(或 <i>Enter</i>)移动
|
||||
它。 你可以通过几种不同的方法进行选择:</p>
|
||||
|
||||
<ul>
|
||||
<li><i>向上</i>/<i>向下</i>/<i>向左</i>/<i>向右</i> to
|
||||
朝特定方块移动。</li>
|
||||
|
||||
<li>加号 (<b>+</b>) 或减号 (<b>-</b>) 使棋子在棋盘上向“左”或向“右”移动。
|
||||
请注意,它们会自动遵循棋盘的“倒过来的 S”方向移动。</li>
|
||||
|
||||
<li><em>Tab</em>在棋盘上选择下一个你想要移动的棋子。</li>
|
||||
</ul>
|
||||
|
||||
<p>要随时退出游戏,请按 <b>Q</b>(大写
|
||||
Q)或按 <i>Esc</i>,这样游戏会提示你是否想要
|
||||
放弃比赛。</p>
|
||||
|
||||
<p>如果你比对手更快将所有棋子移出棋盘,你就赢得了比赛。
|
||||
这同时需要运气和游戏策略!</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
此 HTML 文档演示了利用 HTML 的技术写作者经常使用的一些块和内联元素。块元素在围绕文本定义一个矩形。段落和标题就是块元素,因为它们从文档的左边缘延伸到右边缘。例如,`<p>` 在段落周围包含一个不可见的矩形。相比之下,内联元素的使用则紧跟在它们包围的文本。如果你在段落中的某些文本上使用 `<b>`,则只有被 `<b>` 和 `</b>` 包围的文本会变为粗体。
|
||||
|
||||
你可以将直接样式应用于此文档以更改字体、颜色和其他文本样式,但修改文档外观的更有效方法是将样式表应用于文档本身。你可以在 `<head>` 元素中使用其他元数据执行此操作。你可以为样式表引用文件,但在这个例子中,我使用 `<style>` 块在文档中定义样式表。以下是带有空样式表的 `<head>` :
|
||||
|
||||
```
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>简易 Senet</title>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
...
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
### 定义样式
|
||||
|
||||
由于你刚刚开始学习样式表,因此这里先演示一种基本样式:背景色。我喜欢从背景颜色开始,因为它有助于演示块和内联元素。让我们应用一个有点华丽的样式表,为所有 `<p>` 段落设置*浅蓝色*背景颜色,为 `<ul>` 无序列表设置*浅绿色*背景。对任何粗体文本使用*黄色*背景,对任何斜体文本使用*粉红色*背景。
|
||||
|
||||
你可以在 HTML 文档的 `<style>` 块中使用样式来定义这些样式。样式表使用与 HTML 文档不同的标记。样式语法看起来像 `element { style; style; style; ... }` 并使用花括号将多种文本样式组合到一个定义中。
|
||||
|
||||
```
|
||||
<style>
|
||||
p { background-color: lightblue; }
|
||||
ul { background-color: lightgreen; }
|
||||
|
||||
b { background-color: yellow; }
|
||||
i { background-color: pink; }
|
||||
</style>
|
||||
```
|
||||
|
||||
请注意,每个样式都以分号结尾。
|
||||
|
||||
如果在网页浏览器中查看此 HTML 文档,你可以看到 `<p>` 和 `<ul>` 块元素如何填充为矩形,而 `<b>` 和 `<i>` 内联元素仅突出显示粗体和斜体文本。 这种对比色的使用可能看起来不太好看,但我想你可以清楚看到块和内联元素:
|
||||
|
||||
![辣眼睛!但是这些颜色确实能帮助我么更好地看出块和內联元素的区别。][3]
|
||||
|
||||
### 应用样式
|
||||
|
||||
你可以使用样式使这个自述文件更易于阅读。 因为你刚刚开始学习样式,还是先只用一些简单的样式元素:
|
||||
|
||||
* `background-color` 设置背景颜色
|
||||
* `color` 设置文字颜色
|
||||
* `font-family` 使用不同的文本字体
|
||||
* `margin-top` 在元素上方添加空间
|
||||
* `margin-bottom` 在元素下方添加空间
|
||||
* `text-align` 改变文本的对齐方式,例如靠左、靠右或居中
|
||||
|
||||
让我们重新开始你的样式表并将这些新样式应用到文档中。首先,在文档中使用更令人愉悦的字体。如果你的 HTML 文档没有指定字体,网络浏览器会为你选择一种。根据浏览器的设置方式,这可能是衬线字体(如我的屏幕截图中使用的字体)或无衬线字体。衬线字体在每个字母上添加了一个小笔画,这样在打印时更容易阅读。无衬线字体缺少这种额外的笔划,这使得文本在计算机显示器上显得更清晰。常见的衬线字体包括 Garamond 或 Times New Roman。 流行的无衬线字体包括 Roboto 和 Arial。
|
||||
|
||||
例如,要将文档正文字体设置为 Roboto,你可以使用以下样式:
|
||||
|
||||
```
|
||||
body { font-family: Roboto; }
|
||||
```
|
||||
|
||||
通过设置字体,你假设查看文档的人也安装了该字体。有些字体已经十分常见,以至于它们被认为是事实上的“网页安全”字体。 这些字体包括 Arial 等无衬线字体和 Times New Roman 等衬线字体。Roboto 是一种较新的字体,可能还无法随处可用。因此,网页设计师通常不会只列出一种字体,而是设置一种或多种“备用”字体。你可以通过用逗号分隔来添加这些替代字体。 例如,如果用户的系统上没有 Roboto 字体,你可以使用以下样式定义将 Arial 字体用作文本正文:
|
||||
|
||||
```
|
||||
body { font-family: Roboto, Arial; }
|
||||
```
|
||||
|
||||
所有网络浏览器都定义了默认的衬线和无衬线字体,你可以使用这些名称来引用它们。用户可以更改他们喜欢用于显示衬线和无衬线的字体,因此不太可能对每个人都一样,但在字体列表中使用 `serif` 或 `sans-serif` 通常是个好主意。通过添加该字体,至少用户可以大致了解你希望 HTML 文档的呈现方式:
|
||||
|
||||
```
|
||||
body { font-family: Roboto, Arial, sans-serif; }
|
||||
```
|
||||
|
||||
如果字体名称不止一个单词,则你必须在其两边加上引号。HTML 允许你在此处使用单引号或双引号。 为标题和副标题定义一些衬线字体,包括 Times New Roman:
|
||||
|
||||
```
|
||||
h1 { font-family: "Times New Roman", Garamond, serif; }
|
||||
h2 { font-family: "Times New Roman", Garamond, serif; }
|
||||
```
|
||||
|
||||
请注意,H1 标题和 H2 副标题使用完全相同的字体定义。如果你想避免无谓的打字,可以使用样式表快捷方式为 H1 和 22 使用相同的样式定义:
|
||||
|
||||
```
|
||||
h1, h2 { font-family: "Times New Roman", Garamond, serif; }
|
||||
```
|
||||
|
||||
在编写文档时,许多技术作者更喜欢将主标题放在页面的中央。你可以在块元素(例如 H1 标题)上使用 `text-align` 来使标题居中:
|
||||
|
||||
```
|
||||
h1 { text-align: center; }
|
||||
```
|
||||
|
||||
为了让粗体和斜体文本更突出,请将它们置于稍微不同的颜色中。对于某些文档,我可能会使用深蓝表示粗体文本,使用深绿表示斜体文本。这些颜色非常接近黑色,但颜色的细微差别足以吸引读者的注意力。
|
||||
|
||||
```
|
||||
b { color: darkblue; }
|
||||
i { color: darkgreen; }
|
||||
```
|
||||
|
||||
最后,我更喜欢在我的列表元素周围添加额外的间距,以使它们更易于阅读。如果每个列表项只有几个词,额外的空间可能无关紧要。但是我的示例文本中的中间项很长,可以换到第二行。 额外的空间有助于读者更清楚地看到此列表中的每个项目。 你可以使用边距样式在块元素上方和下方添加空间:
|
||||
|
||||
```
|
||||
li { margin-top: 10px; margin-bottom: 10px; }
|
||||
```
|
||||
|
||||
这种样式定义了一个距离,此处我将其指定为每个列表元素上方和下方的 10px(十个*像素*)。 你可以使用多种不同的距离度量。十像素实际上就是屏幕上十个像素的空间,无论是台式机显示器、笔记本电脑显示屏,还是手机或平板电脑屏幕。
|
||||
|
||||
假设你真的只是想在列表元素之间添加一个额外的空行,你也可以使用 `em` 来测量。`em` 是一个旧的排版术语,如果你指的是左右间距,它就是大写 `M` 的宽度,或者对于垂直间距,就是大写 `M` 的高度。所以你可以改用 1em 来写边距样式:
|
||||
|
||||
```
|
||||
li { margin-top: 1em; margin-bottom: 1em; }
|
||||
```
|
||||
|
||||
HTML 文档中的完整样式列表如下所示:
|
||||
|
||||
```
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>简易 Senet</title>
|
||||
<style>
|
||||
body { font-family: Roboto, Arial, sans-serif; }
|
||||
h1, h2 { font-family: "Times New Roman", Garamond, serif; }
|
||||
h1 { text-align: center; }
|
||||
b { color: darkblue; }
|
||||
i { color: darkgreen; }
|
||||
li { margin-top: 1em; margin-bottom: 1em; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>简易 Senet</h1>
|
||||
<h2>游戏玩法</h2>
|
||||
|
||||
<p>游戏会自动为你“投掷”投掷棒,并在屏幕右下角显示结果。</p>
|
||||
|
||||
<p>如果“投掷”结果为零,你失去本轮机会。</p>
|
||||
|
||||
<p>轮到你的时候,游戏会自动选择
|
||||
你在棋盘上的第一块棋子。 你不一定
|
||||
能够用这个棋子走棋。所以选择你的棋子
|
||||
移动,然后按 <i>Space</i>(或 <i>Enter</i>)移动
|
||||
它。 你可以通过几种不同的方法进行选择:</p>
|
||||
|
||||
<ul>
|
||||
<li><i>向上</i>/<i>向下</i>/<i>向左</i>/<i>向右</i> to
|
||||
朝特定方块移动。</li>
|
||||
|
||||
<li>加号 (<b>+</b>) 或减号 (<b>-</b>) 使棋子在棋盘上向“左”或向“右”移动。
|
||||
请注意,它们会自动遵循棋盘的“倒过来的 S”方向移动。</li>
|
||||
|
||||
<li><em>Tab</em>在棋盘上选择下一个你想要移动的棋子。</li>
|
||||
</ul>
|
||||
|
||||
<p>要随时退出游戏,请按 <b>Q</b>(大写
|
||||
Q)或按 <i>Esc</i>,这样游戏会提示你是否想要
|
||||
放弃比赛。</p>
|
||||
|
||||
<p>如果你比对手更快将所有棋子移出棋盘,你就赢得了比赛。
|
||||
这同时需要运气和游戏策略!</p>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
在网页浏览器上查看时,你会看到采用无衬线字体的自述文件,标题和副标题使用衬线字体。 页面标题居中。粗体和斜体文本使用略有不同的颜色来吸引读者的注意力而不会分散注意力。 最后,列表项周围有额外的空间,使每个项目更易于阅读。
|
||||
|
||||
![通过添加一些样式,我们使这个自述文件更易于阅读。][4]
|
||||
|
||||
这是在技术写作中使用样式的简单介绍。掌握了基础知识后,你可能会对 [Mozilla 的 HTML 指南][5] 感兴趣。它包括一些很棒的初学者教程,因此你可以学习如何创建自己的网页。
|
||||
|
||||
有关 CSS 样式的更多信息,我推荐 [Mozilla 的 CSS 指南][6]。
|
||||
|
||||
*(题图: MJ:web internet traffic design)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/css-html-project-documentation
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/painting_computer_screen_art_design_creative.png
|
||||
[2]: https://opensource.com/article/22/8/writing-project-documentation-html
|
||||
[3]: https://opensource.com/sites/default/files/2022-08/style-html-1.png
|
||||
[4]: https://opensource.com/sites/default/files/2022-08/style-html-2.png
|
||||
[5]: https://developer.mozilla.org/en-US/docs/Web/HTML
|
||||
[6]: https://developer.mozilla.org/en-US/docs/Web/CSS
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/14/155136ypp8ziciecvunbpl.jpg
|
@ -0,0 +1,132 @@
|
||||
[#]: subject: "Linux Mint Release Cycle: What You Need to Know"
|
||||
[#]: via: "https://itsfoss.com/linux-mint-release-cycle/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chris000132"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15752-1.html"
|
||||
|
||||
Linux Mint 的发行周期
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
你可能知道,Linux Mint 是一个基于 Ubuntu 的发行版。
|
||||
|
||||
Ubuntu 每六个月发布一个新版本,但 Linux Mint 并不遵循六个月一次的发行模式。
|
||||
|
||||
Linux Mint 以 Ubuntu LTS(<ruby>[长期支持][1]<rt>long term support</rt></ruby>)版本作为其基础。Ubuntu 的 LTS 版本每两年发布一次,所以 **你也会每两年得到一个 Mint 的大版本更新**(比如 Mint 19, 20, 21 等)。
|
||||
|
||||
与 Ubuntu LTS 版本一样,Linux Mint 的大版本也被支持五年。虽然在这期间有**三个小更新版本**(比如 Mint 20.1、20.2、20.3)。
|
||||
|
||||
与 Ubuntu 相比,多久能得到一次 Linux Mint 的升级?你应该在什么时候等待 Linux Mint 的升级?当有新版本的时候,你应该升级到新版本吗?
|
||||
|
||||
在这里,让我重点介绍一下这些 Linux Mint 的发行周期的重要细节。
|
||||
|
||||
### Linux Mint 的发行周期
|
||||
|
||||
Ubuntu 每两年发布一个长期支持版本。之后很快就会有一个 Mint 版本出现。换句话说,你每两年就会得到一个新的 Mint 版本。
|
||||
|
||||
所以,Linux Mint 20 是在 2020 年基于 Ubuntu 20.04 发行的,Mint 21 是在 2022 年基于 Ubuntu 22.04 发行的。
|
||||
|
||||
与 Ubuntu 不同,Mint 没有严格的发行时间表。没有事先确定的发行日期。新版本在其开发者认为准备好的时候就会到来。
|
||||
|
||||
#### 小版本
|
||||
|
||||
在 Mint 的两个大版本发布之间,有三个小版本,每隔 6 个月发布一次。
|
||||
|
||||
即 Mint 20(即 20.0)是在 2020 年 6 月发布的。Mint 20.1 在 2020 年 12 月,Mint 20.2 在 2021 年 6 月,Mint 20.3 在 2021 年 12 月。在这之后,Mint 团队将致力于开发下一个大版本。
|
||||
|
||||
这些小版本会更新什么?比如,一个新版本的桌面环境,主要包含用户图形界面的视觉变化。它有时也可能提供新的应用程序。
|
||||
|
||||
升级到小版本是可选的。你可以选择继续使用 20.1,而不升级到 20.2 和 20.3。这是那些不喜欢频繁(在图形界面上)改变他们系统的人的首选。
|
||||
|
||||
在最后一个消版本发布(XX.03)之后,你的系统将只得到已安装软件的安全和维护更新。你不会得到桌面环境和其他一些软件(如 GIMP 或 LibreOffice)的新的大版本更新。
|
||||
|
||||
#### 支持周期
|
||||
|
||||
并非所有基于 Ubuntu 的发行版都能为你提供与 Canonical 的 Ubuntu 相同的周期性更新优势。许多基于 Ubuntu 的发行版和 [官方的衍生版本][2] 提供了最长 3 年的支持。
|
||||
|
||||
幸运的是,对于 **Linux Mint** 来说,你可以得到和 Ubuntu 一样的更新福利。
|
||||
|
||||
**每个 Linux Mint 版本的支持期为 5 年**,在此之后,你必须升级到下一个版本,或者重新安装较新的版本。
|
||||
|
||||
例如,Mint 20 是在 2020 年发布的,比 Ubuntu 20.04 晚几个月。Ubuntu 20.04 LTS 被支持到 2025 年,因此 Mint 20 系列也被支持到 2025 年。
|
||||
|
||||
一个系列的所有小版本都支持到同一日期。Mint 20.1、20.2 和 20.3 都将被支持到 2025 年。
|
||||
|
||||
同样地,Ubuntu 22.04 LTS 将被支持到 2027 年 4 月。你可以期待 Linux Mint 21 系列(它基于 Ubuntu 22.04)的更新周期到相同的时间线。
|
||||
|
||||
**总结一下:**
|
||||
|
||||
* 你每两年得到一个新的 Linux Mint 大版本
|
||||
* 每个大版本的支持周期为 5 年
|
||||
* 每个大版本(XX 版)在下一个大版本之前都会有三个小版本(XX.1、XX.2、XX.3)
|
||||
* 小版本(XX.1,XX.2,XX.3)与大版本(XX)的支持时间相同
|
||||
|
||||
### 你什么时候应该升级 Linux Mint?
|
||||
|
||||
这完全取决于你,
|
||||
|
||||
每两年会有一个新的大版本。你可以选择在那时升级它,或者你可以在整个五年的生命周期内保持你目前的版本。
|
||||
|
||||
除非你想获得最新的功能和改进,你可以选择不把你的 Linux Mint 安装升级到另一个大版本。
|
||||
|
||||
对于小版本,你可以选择更新,也可以不更新。比如,20 到 20.1 或 20.1 到 20.2。即使你不使用最新的小版本,你仍然会得到重要的安全和维护更新。
|
||||
|
||||
你可以参考我们的 [Linux Mint 升级指南][3] 以寻求帮助。
|
||||
|
||||
### Linux Mint 的版本划分和命名
|
||||
|
||||
与 Ubuntu 发行版不同,Linux Mint 有一个不同的编号方案。Linux Mint 喜欢在每一个 Ubuntu LTS 版本中提升编号。
|
||||
|
||||
换句话说:
|
||||
|
||||
Linux Mint 19 → **Ubuntu 18.04 LTS**
|
||||
|
||||
Linux Mint 20 → **Ubuntu 20.04 LTS**
|
||||
|
||||
Linux Mint 21 → **Ubuntu 22.04 LTS**
|
||||
|
||||
所以,你应该避开以下的混淆:
|
||||
|
||||
*Linux Mint 20 基于 Ubuntu 20.04 并不意味着 Linux Mint 21 将基于 Ubuntu 21.04。*
|
||||
|
||||
此外,每个版本都有**三个小版本**,带有内核的小更新和一些 Linux Mint 应用程序的潜在升级。
|
||||
|
||||
现在,来看看它的**命名方案**:
|
||||
|
||||
每个 Linux Mint 版本,无论是小的还是大的,都有一个代号。通常,它是一个女性的名字,通常源自希腊或拉丁语。
|
||||
|
||||
和 Ubuntu 一样,代号也有一个模式。大版本的代号是按字母顺序递增的。当涉及到小版本时,你会发现新的名字会以相同的字母开头。
|
||||
|
||||
例如,Mint 20 被称为 **Ulyana**,20.1 为 **Ulyssa**,20.2 为 **Uma**,而 20.3 为 **Una**。同样地,Mint 19 系列的代号以 T 开头。
|
||||
|
||||
在写这篇文章的时候,Mint 21(最新版本)的代号以 **V** 开头,21 系列的第一个版本叫 **Vanessa**。
|
||||
|
||||
在 Mint 21 系列中至少还会有三个小版本,它们将每六个月发布一次,直到 2024 年的下一个 Mint 大版本。而它们都将有一个以字母 V 开头的代号。
|
||||
|
||||
### 薄荷留香
|
||||
|
||||
我希望这篇文章能消除对 Linux Mint 升级的各种困惑,并让你更多地了解 Linux Mint 的发布和更新周期。
|
||||
|
||||
*(题图:MJ/mint cinamon plain dark background in high resolution, very detailed, 8k)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linux-mint-release-cycle/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chris000132](https://github.com/chris000132)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/long-term-support-lts/
|
||||
[2]: https://itsfoss.com/which-ubuntu-install/
|
||||
[3]: https://itsfoss.com/upgrade-linux-mint-version/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/24/231022h7rzqz8zfvviaqb7.jpg
|
@ -0,0 +1,185 @@
|
||||
[#]: subject: "How to Merge PDF Files in Linux"
|
||||
[#]: via: "https://itsfoss.com/merge-pdf-linux/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15730-1.html"
|
||||
|
||||
如何在 Linux 中合并 PDF 文件
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 有多个关于同一主题的 PDF,现在你想将它们合并成一个 PDF?
|
||||
|
||||
或者你可能需要上传由不同文件组成的单个文件?许多政府和学术门户网站都要求这样做。
|
||||
|
||||
作为 Linux 用户,如果你遇到需要合并 PDF 的情况,本教程将帮助你。
|
||||
|
||||
在本教程中,我将分享三种合并多个 PDF 文件的方法:
|
||||
|
||||
- 使用 PDF Tricks GUI 工具
|
||||
- 使用 LibreOffice(允许你选择页面)
|
||||
- 使用 ImageMagick 命令行工具(Linux 教程会没有终端方法就结束么?)
|
||||
|
||||
你可以全部了解一下并选择最适合你的。
|
||||
|
||||
### 方法 1:使用 PDF Tricks GUI 工具在 Linux 中合并 PDF
|
||||
|
||||
在试用了多种 GUI 工具后,我发现 PDF Tricks 使用简单且易于导航。
|
||||
|
||||
此外,除了合并 PDF 文件之外,它还包括其他功能,包括:
|
||||
|
||||
- 压缩 PDF。
|
||||
- 拆分 PDF。
|
||||
- 将 PDF 转换为 JPG、PNG 和文本格式。
|
||||
|
||||
它以 [Flatpak][1] 的形式提供。请 [确保你的 Linux 系统启用了 Flatpak 支持][2]。
|
||||
|
||||
我分享的是在 Ubuntu 上启用 Flatpak 的步骤:
|
||||
|
||||
```
|
||||
sudo apt install flatpak
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
现在,使用以下命令在你的系统中安装 PDF Tricks:
|
||||
|
||||
```
|
||||
flatpak install flathub com.github.muriloventuroso.pdftricks
|
||||
```
|
||||
|
||||
完成安装后,从系统菜单中打开 PDF Tricks 应用。
|
||||
|
||||
第一次运行时,你会得到一个可以使用此工具执行的操作列表。显然,要合并 PDF 文件,请使用第三个选项。
|
||||
|
||||
![merge pdf files using in ubuntu][3]
|
||||
|
||||
在下一步中,单击 “<ruby>添加文件<rt>Add file</rt></ruby>” 并选择要合并的文件:
|
||||
|
||||
![choose files to merge][4]
|
||||
|
||||
选择文件后,单击 “<ruby>合并<rt>Merge</rt></ruby>” 按钮:
|
||||
|
||||
![click on merge button][5]
|
||||
|
||||
它将打开系统的默认文件管理器。你可以在此处选择要保存合并文件的位置以及应命名的文件:
|
||||
|
||||
![locate and name the merged pdf file][6]
|
||||
|
||||
就是这样。合并后的 PDF 已保存。
|
||||
|
||||
如果你正在寻找,我们提供了一份 [可用于阅读和编辑 PDF 文件的最佳 PDF 阅读器][7] 列表。
|
||||
|
||||
### 方法 2:使用 LibreOffice 合并 PDF 文件
|
||||
|
||||
很棒的 LibreOffice 能够处理许多与 PDF 相关的任务。你甚至可以 [使用 LibreOffice Draw 工具编辑 PDF 文件][8] 来添加数字签名、添加文本等。
|
||||
|
||||
好处是你不需要安装其他应用。LibreOffice 已经安装在大多数发行版上,如果不是全部的话。
|
||||
|
||||
打开文件管理器并选择要合并的 PDF 文件。
|
||||
|
||||
右键单击选定的文件 > <ruby>使用其他应用打开<rt>Open With Other Application</rt></ruby> > LibreOffice Draw,它将打开选定的 PDF 文件。
|
||||
|
||||
它将在单独的 LibreOffice Draw 实例中打开你选择的每个 PDF 文件:
|
||||
|
||||
![open pdf file in libreoffice][9]
|
||||
|
||||
现在,你必须从左侧预览栏选择单个页面或整个 PDF 文件(使用 `Ctrl + A`)并将其拖放到要合并的文件的预览栏:
|
||||
|
||||
拖放后,单击左上角的第 5 个选项,提示是 <ruby>直接导出为 PDF<rt>Export Directly as PDF</rt></ruby>:
|
||||
|
||||
![export directly as pdf in libreoffice][10]
|
||||
|
||||
将打开一个文件管理器,你可以从中定位并命名文件:
|
||||
|
||||
![save merged file from libreoffice][11]
|
||||
|
||||
这就完成了!
|
||||
|
||||
### 更多技巧:在命令行中合并 PDF (对于高级用户)
|
||||
|
||||
如果我不包括命令行方法,那算什么 Linux 教程?要在命令行中合并 PDF 文件,你可以使用 ImageMagick。
|
||||
|
||||
ImageMagick 其实是一个图像相关的工具。PDF 文件本质上是图像,这就是 ImageMagick 可以处理它们的原因。
|
||||
|
||||
你可能甚至不需要单独 [安装 ImageMagick][12],因为它已经默认安装在大多数发行版中。
|
||||
|
||||
例如,我将添加 3 个名为 pdf-1.pdf、pdf-2.pdf 和 pdf-3.pdf 的 PDF 文件,并将最终合并的 PDF 文件输出命名为 MergedFile.pdf(多么聪明):
|
||||
|
||||
```
|
||||
convert pdf-1.pdf pdf-2.pdf pdf-3.pdf MergedFile.pdf
|
||||
```
|
||||
|
||||
#### “no images defined” 故障排除
|
||||
|
||||
如果你看到这样的策略错误:
|
||||
|
||||
![][13]
|
||||
|
||||
这个问题很容易解决。你只需在 ImageMagick 策略文件中进行少量更改。
|
||||
|
||||
打开策略文件进行编辑:
|
||||
|
||||
```
|
||||
sudo nano /etc/ImageMagick-6/policy.xml
|
||||
```
|
||||
|
||||
并查找以下行:
|
||||
|
||||
```
|
||||
<policy domain="coder" rights="none" pattern="PDF" />
|
||||
```
|
||||
|
||||
现在,你需要将 `rights="none"` 更改为 `rights=read|write`:
|
||||
|
||||
```
|
||||
<policy domain="coder" rights="read|write" pattern="PDF" />
|
||||
```
|
||||
|
||||
![change policy in imagemagick to merge pdf files][14]
|
||||
|
||||
保存更改,现在你可以使用 ImageMagick 轻松合并文件:
|
||||
|
||||
![merge pdf files using imagemagick in linux terminal][15]
|
||||
|
||||
### 总结
|
||||
|
||||
现在你知道了在 Linux 中合并 PDF 文件的几种方法。合并后的 PDF 文件可能很大。如果你需要在有大小限制的门户上传合并的 PDF 文件,你可以 [压缩 PDF 文件][16]。
|
||||
|
||||
如果你在使用上述方法时遇到任何问题,请告诉我。
|
||||
|
||||
*(题图:MJ:process docs illustrations in high resolution)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/merge-pdf-linux/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/what-is-flatpak/
|
||||
[2]: https://itsfoss.com/flatpak-guide/
|
||||
[3]: https://itsfoss.com/content/images/wordpress/2022/11/merge-pdf-files-using-in-ubuntu-1.png
|
||||
[4]: https://itsfoss.com/content/images/wordpress/2022/11/choose-files-to-merge.png
|
||||
[5]: https://itsfoss.com/content/images/wordpress/2022/11/click-on-merge-button.png
|
||||
[6]: https://itsfoss.com/content/images/wordpress/2022/11/locate-and-name-the-merged-pdf-file.png
|
||||
[7]: https://itsfoss.com/pdf-editors-linux/
|
||||
[8]: https://itsfoss.com/edit-pdf-files-ubuntu-linux/
|
||||
[9]: https://itsfoss.com/content/images/wordpress/2022/11/open-pdf-file-in-libreoffice.png
|
||||
[10]: https://itsfoss.com/content/images/wordpress/2022/11/export-directly-as-pdf-in-libreoffice.png
|
||||
[11]: https://itsfoss.com/content/images/wordpress/2022/11/save-merged-file-from-libreoffice.png
|
||||
[12]: https://itsfoss.com/install-imagemagick-ubuntu/
|
||||
[13]: https://itsfoss.com/content/images/wordpress/2022/11/convert-im6.q16-attempt-to-perform-an-operation-not-allowed-by-the-security-policy-pdf-@-error-constitute.c-iscoderauthorized-421.0a.png
|
||||
[14]: https://itsfoss.com/content/images/wordpress/2022/11/change-policy-in-imagemagick-to-merge-pdf-files.png
|
||||
[15]: https://itsfoss.com/content/images/wordpress/2022/11/merge-pdf-files-using-imagemagick-in-linux-terminal.png
|
||||
[16]: https://itsfoss.com/compress-pdf-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/17/155926wvvvh01v1vtcldd0.jpg
|
@ -0,0 +1,65 @@
|
||||
[#]: subject: "How open source leaders can foster an inclusive environment"
|
||||
[#]: via: "https://opensource.com/article/23/2/open-source-leaders-inclusive-environment"
|
||||
[#]: author: "Kate Carcia Poulin https://opensource.com/users/kcarcia"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15746-1.html"
|
||||
|
||||
开源项目领导者可以如何营造包容的环境
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 那些被你领入社区的人,有一天也会向其他人伸出援手。
|
||||
|
||||
开源领导者可以通过创造归属感、提供机会和表示支持来为新来者创造包容性社区。他们了解提交代码和与其他社区成员建立联系的复杂性。创造包容性社区可以建立信誉并获得影响力。这种经验对于想要参与但不知道从哪里开始的贡献者来说是无价的。
|
||||
|
||||
几年前,当我开始管理一个活跃于 Linux 内核社区的团队时,我发现自己因为没有任何内核经验而感到处境困难。复杂的代码库、庞大的电子邮件归档和高风险的交流让我感到害怕。当我团队中的新内核开发人员表达了类似的感受时,我意识到我的感觉在团队里普遍存在。对于那些支持贡献者或想自己做出贡献的人来说,入门的道路并不总是清晰的,甚至可能感觉遥不可及。
|
||||
|
||||
### 4 个策略建立包容性领导力
|
||||
|
||||
开源领导者可以通过为那些希望融入社区的人创造途径来发挥自己的影响力。本文涵盖的策略可应用于正式的 [指导][1] 或 [辅导][2] 关系,但同样适用于日常互动。在培养环境的包容性时,看似微不足道的交流往往会产生最重要的影响。
|
||||
|
||||
#### 怀着好奇心接近了解新人
|
||||
|
||||
经验较少或来自非传统背景的人可能会以意想不到或不同的方式解决问题。在应对这些差异时,如果用妄加评论或批评的方式,可能会在知识曲线通常很陡峭的社区中创造一个不安全的学习环境。例如,Linux 内核的长期贡献者了解社区丰富的历史,这意味着他们不需要明说就能理解社区的决策和反应。新的贡献者必须积累这方面的知识,但只有当他们感到安全,并愿意冒必要的风险来发展自己的技能时,他们才能有效地做到这一点。
|
||||
|
||||
开源领导者可以通过带着好奇心去接近新人来支持他们学习。你可以问他们这样的问题,“你能帮我理解一下你为什么采用这种方法吗?”而不是直接宣布提议的解决方案“对或错”。问题打开了一个继续学习的对话,而不是关闭那些值得探索的重要方面的想法。这个过程也拓宽了领导者的视野,他们可以通过考虑新的观点来学习。
|
||||
|
||||
#### 发现并分享学习机会
|
||||
|
||||
开源领导者可以确定适合其他人的项目,使他们可以获得技术专长和学习社区流程。在为他人创造机会的同时,领导者也为自己创造了更多机会。这是因为他们有更多时间探索新的尝试,同时通过分派任务继续推进他们的工作。随着领导者的成长,他们帮助周围的人取得成功的能力变得与他们的直接贡献一样重要。
|
||||
|
||||
要知道 [失败][3] 是学习的一部分,因此你要考虑找一些新手失败后不会造成严重后果的项目。例如,在 Linux 内核中,代码库的某些部分的小改动可能会造成灾难性的后果。考虑可以实现小小的胜利的项目,以帮助新来者在没有高风险的情况下建立信心并感到掌控感。通过会议、电子邮件论坛或任何涉及如何参与到社区里的宣传活动分享这些想法,让人们更容易获取到这些信息。
|
||||
|
||||
#### 展现你脆弱的一面
|
||||
|
||||
拥有更多的经验并不意味着你知道一切。通常情况下,即使是与我共事过的最有经验的 Linux 内核贡献者也会被未知子系统中的新挑战击败。经验不足的社区成员通常会认为经验丰富的社区成员已经了解了一切。但是,经验就是要善于找出你不知道的东西。如果你处于权威地位或者被认为是专家,你可以通过分享个人挣扎和坚持的经验来表现你脆弱的一面,这样做可以鼓励那些和你有着类似感受的人。
|
||||
|
||||
#### 为他人做担保
|
||||
|
||||
向你的人脉介绍新来的成员。在激发他们兴趣的领域里,让新成员和在这个领域内具有专业知识的社区成员建立联系。在公共论坛上说出他们的名字,并称赞他们所做的出色工作。作为受人尊敬的领导者,你的支持可以帮助他们在社区内建立联系和信任。
|
||||
|
||||
通过树立社区包容性,我们可以拥有丰富多样的社区。我希望开源领导者会考虑这些建议,因为你提拔到社区的人未来的某天也会同样向别人伸出援手。
|
||||
|
||||
*(题图:MJ:inclusive environment community illustration in high resolution, very detailed)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/2/open-source-leaders-inclusive-environment
|
||||
|
||||
作者:[Kate Carcia Poulin][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/kcarcia
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/article/22/8/mentoring-power-multiplier
|
||||
[2]: https://enterprisersproject.com/article/2021/4/it-leadership-how-to-coach?intcmp=7013a000002qLH8AAM
|
||||
[3]: https://opensource.com/article/20/11/normalize-failure
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/22/234237shv6km5mua4tmb3v.jpg
|
@ -0,0 +1,149 @@
|
||||
[#]: subject: "Essential tips and tricks for your first tech job"
|
||||
[#]: via: "https://opensource.com/article/23/2/your-first-tech-job"
|
||||
[#]: author: "Fatima https://opensource.com/users/ftaj"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15696-1.html"
|
||||
|
||||
技术领域小白必不可少的工作技巧和诀窍
|
||||
======
|
||||
|
||||
> 开始一份新工作对任何人来说都让人害怕。下面是如何在你的第一份技术工作的早期阶段找到方向。
|
||||
|
||||
刚刚入职那几天确实令人害怕。 我现在依然可以清晰举出很多例子,例如在第一天上班前的晚上无法入睡,因为不知道第二天将要发生什么而内心崩溃。对于大多数人来说,开始一份新工作就像踏入未知领域。即使你已是行业的资深人士,不可否认的是,你内心可能还是会对即将发生的事情感到有点害怕。
|
||||
|
||||
可以理解的是,刚入职的时候你的事情很多。你要认识新的人,有新的项目和技术要了解,有文档要阅读,有教程要看完,还有没完没了的人事培训和要填的文件。这可能让你感觉压力山大,再加上你还面临着相当大程度的不确定性和未知数,以上种种能引起焦虑。
|
||||
|
||||
促使我写这篇文章有两个原因,首先是在我还是学生的时候,大部分讨论都围绕着如何找一份技术工作,却没有人谈论接下来发生的事情。如何在新角色中脱颖而出?现在回过头来看,我想我当时认为最困难的事情是得到一份工作,之后发生什么的一切我都可以自己弄清楚。
|
||||
|
||||
同样的,在我开始在这个行业工作之后,我发现大部分我看到的与职业相关的内容都是讨论如何从一个高级职位升到另一个高级职位。没有人真正谈论在此中间我们要做什么。实习生和初级工程师呢?他们在早期职业生涯中如何找到方向?
|
||||
|
||||
在拥有了三年全职软件工程师的经验(以及之前的几次实习)之后,我将这段时间的经历进行了复盘,并整理出一份我自己在适应新技术职位时使用过的技巧和诀窍清单。我想不只局限于前面的几个月,而是优先考虑如何让这段经历帮助你实现长期的成功。
|
||||
|
||||
### 反思现有的流程和文档
|
||||
|
||||
大多数新员工一开始要么拥有一大堆文档,要么根本没有。你可以将这视为一个机会,而不是被这两种可能性中的任何一种所淹没。
|
||||
|
||||
从现有文档中找到缺口,并想想你可以怎样为下一位入职的工程师做出这方面的改进。这不仅能显示你工作的主动性,还表明你致力于改进团队中的现有流程。
|
||||
|
||||
上述两种极端情况我都遇到过。我在没有任何文档的团队中工作过,也在一些更新文档方面很勤快的团队中工作过。对于前者,你的路径非常简单直接,你可以致力于创建那些缺失的文档。对于后者,你总是可以想办法改进已有的东西。有时,过多的书面文件也会让人感到害怕,尤其是对新员工而言。有些事情可能通过其他媒介进行更好地解释,比如视频教程或截屏。
|
||||
|
||||
### 勤问问题
|
||||
|
||||
我会建议你在开始一份新工作时研究一下公司是否会为你分配搭档。这在公司中是相当普遍的做法。工作搭档的主要作用是在你入职时为你提供帮助。我发现这非常有用,因为这个人能够针对你所有的问题给出指导,你就不必为了寻找合适的人或部门而四处奔波。
|
||||
|
||||
虽然我鼓励提问,但在提问之前也有必要做功课,包括:
|
||||
|
||||
- 做好调查。这包括进行网络搜索、查看论坛和阅读现有文档。使用所有可用的工具。然而,给自己设定时间规划是很重要的。你必须平衡好尽职调查与牢记手头项目截止日期和可交付成果。
|
||||
- 说出来。作为母语不是英语的人,我建议你在提问之前大声把想法说出来。根据我的经验,我经常发现自己会用一种语言(通常是我的母语)思考但不得不用另一种语言来解释,而当我在一些困难的问题中挣扎时这一现象尤为突出。有时这颇有挑战性,因为经过翻译后的想法可能没那么容易理解。
|
||||
- 组织思绪。当你在为某件事而苦苦挣扎时,可能同时有很多不同的想法在你的脑海中翻来覆去。这些想法可能对你来说都挺有道理的,但对于别人来说却不一定说得通。对此,我建议你坐下来,收集你的想法,写下来,然后大声说出来。这一做法可确保当你在解释自己的思维过程时,你能按照预期进行流畅地表达出来,听众也可以紧跟你的思路。
|
||||
|
||||
这种方法称为橡皮鸭调试法,是开发人员在调试时的常见做法。背后的概念是,有时向第三方解释你的问题非常有助于你找到解决方案,同时也证明了你出色的沟通技巧。
|
||||
|
||||
尊重别人的时间。即使你在向你的搭档求助时,也要意识到他们也有自己的日常任务要完成。 我尝试过的一些事情包括:
|
||||
|
||||
- 写下我的问题,然后留出一些时间与我的导师交流,以便与他们交谈。
|
||||
- 整理问题而不是反复寻求帮助,这样导师可以在他们有空的时候着手解决。
|
||||
- 安排 15-20 分钟的快速视频聊天,特别是如果你想共享屏幕,这一方法可以很好地展示你的发现。
|
||||
|
||||
我认为这些方法是更好的选择,因为这么做你能得到对方全部的关注,而不是在他们忙着其他事情的时候每隔几分钟打扰他们一下。
|
||||
|
||||
### 深入研究你的项目
|
||||
|
||||
即使在拥有出色文档的团队中,开始你的技术项目也可能非常艰巨,因为一个项目涉及多个部分。不过,随着时间的推移,你将了解团队是如何做事的。但是,通过记下一张实用清单,这包括基本项目设置、测试要求、审查和部署流程、任务跟踪和文档,你将迅速搞清楚一切,节省了你的时间和潜在的麻烦。
|
||||
|
||||
如果你开始的项目没有文档(我就遇到过这种情况),请看看你能不能找到当前或以前的项目所有者并了解基本的项目结构,这包括设置、部署等。
|
||||
|
||||
- 确定你的团队在 IDE(集成开发环境)中的偏好。你可以自由使用你喜欢的 IDE,但使用和团队相同的 IDE 会比较好,尤其是在调试的时候,因为 IDE 的选择会影响调试。不同的 IDE 提供不同程度的调试支持。
|
||||
- 了解如何进行调试。我的意思不仅仅是使用打印语句(不是说这种方法有什么问题)。充分利用团队的经验!
|
||||
- 了解测试要求。这可能取决于项目的范围和团队的一般惯例,越早弄清楚要求,你在后期推送自己的修改请求时就会越有信心。
|
||||
- 可视化部署过程。这个过程可能因团队、公司等而异。无论这个过程是非正式或正式,请确保你了解自己提交的新代码是如何被部署至新环境中、部署流水线是什么样的、如何安全地部署代码更改、在构建失败后可以怎么做,如何回滚错误的更改,以及如何在生产环境中测试你的更改。
|
||||
- 了解工单流程。了解如何记录工单以及要求的详细程度。你会由此发现每个公司各不相同。有的公司希望我们每天提交工单以显示我们的进度。有的公司可能不需要如此详细。
|
||||
|
||||
基于我刚才提到的所有内容,我建议你可以在入职头几周内做一个有益的、一体化的练习——跟随模仿另一位工程师并进行结对编码。这么做让你可以端到端地观察整个流程,从派单给工程师到部署到生产中都清清楚楚。
|
||||
|
||||
如果刚入职几周时你还没有机会亲身实践,可能你会感到沮丧。为了解决这个问题,你可以让你的经理也给你派一些初级的单子。这些通常是一些小任务,例如代码清理或添加单元测试。不过,它们允许你修补代码库,这有助于提高你的理解并给你带来成就感,这在新工作的初期是非常鼓舞人心的。
|
||||
|
||||
### 当你遇到困难时尤其要大声说出来
|
||||
|
||||
我想强调一下当你碰到困难时沟通的重要性。遇到困难总是难免的,尤其是在一份新工作的最初几个月,尽管这可能会令人沮丧,但这正是你的沟通技巧大放异彩的地方。
|
||||
|
||||
- 让工作中的阻碍和进步透明化。即使是像权限问题一样的小事(新员工常常遇到的障碍之一),也要确保你的经理知道。
|
||||
- 如果有些工作耽搁了,不要等到最后一天才向团队报告。你的项目延迟会推动许多其他事情的发展。对于一些必要的项目延迟请提前告知,以便你的经理可以与相关人员分享这一信息。
|
||||
- 不要因为匆忙而忘记全面测试代码的更改或为你的代码的写文档等事情。
|
||||
|
||||
### 获得技术大局观
|
||||
|
||||
获得技术大局观是我个人一直在努力改进的地方,并且我一直在积极改变自己对此的看法。
|
||||
|
||||
当年我开始实习时,我会非常专注于自己想学的东西。我会非常专注于我的项目,但对其他一切完全视而不见。多年后,我意识到对其他或相邻的项目视而不见可能不是最明智的。
|
||||
|
||||
首先,技术大局观会影响你对自身工作的理解。我曾经天真地以为,只要我专注于自己的项目就可以成为一名优秀的工程师。但事情并非如此。你应该花时间了解其他可能与你的项目有所交互的服务。你无需深入了解细节,但建立基本的理解也会大有帮助。
|
||||
|
||||
新员工的一个普遍经历是与公司其他人脱节,会有这种感觉很正常,尤其是在大公司。我是一个很快就会产生排斥感的人,所以当我刚到 Yelp 时 —— 这是一家比我以前的公司大得多的公司,项目规模也大得多,我优先考虑了解大局。我不仅努力建立对我的项目的理解,还认真了解了其他相邻项目。
|
||||
|
||||
在 Yelp 的头几周,我与团队中的其他各位工程师坐下来,请他们给我一个关于我将要做什么和项目的总体目标的概况。这种方法非常有用,因为我不仅根据工程师的资历和他们在项目上的工作时间得到了不同程度的解释,而且还加深了我对我将要从事的工作的理解。我参加这些会议的目的,是希望我对项目掌握的认识让我能够向街上的陌生人解释我所做的事。为此,我还请我的技术主管向我解释,当用户打开 Yelp 应用程序并搜索内容时,我的工作成果会在什么时候出现。
|
||||
|
||||
在这种情况下架构图也很有用,尤其是它能帮助你了解不同服务是如何交互的。
|
||||
|
||||
### 建立期望
|
||||
|
||||
在过去很长一段时间里,我以为自己只需要尽力而为,成为一名优秀的员工就行。只要我有在工作,达成目标,而且没有人投诉,那就足够好了,对吧?错!
|
||||
|
||||
你必须对你的职业有战略眼光。你不能只是将它外包给人们的一片好心,并希望自己只要达成了目标就能得到想要的结果。
|
||||
|
||||
- 在你开始新工作的那一刻就建立明确的标准。这因公司而异,因为有些组织有非常明确的措施,而其他组织可能几乎没有。如果是后者,我建议你在头几周内找你的经理坐下来谈谈,制定并统一一个标准。
|
||||
- 确保你彻底了解公司将如何评估你以及采用什么方法进行评估。
|
||||
|
||||
我记得在我的第一份全职工作中,我对自己的第一次评估谈话一头雾水。整个谈话非常含糊不清,而且我对自己的长处、短处甚至可以如何改进都一无所知。
|
||||
|
||||
起初,我很容易地将一切都归咎于我的经理,因为作为新员工的我认为这是他们的工作,而不是我的职责。但随着时间的推移,我意识到,就我的绩效评估而言,我不能只是袖手旁观。你不能只做好工作并期望它就足够了。你必须积极参与到这些对话中。你必须确保你的努力和贡献被注意到。为了确保你的工作得到认可,你可以做很多事情,从定期参与技术设计对话到设置团建活动。
|
||||
|
||||
与建立期望相联系的还有积极寻求反馈的重要性。不要等到每三、四个月进行一次正式的绩效评估时才知道自己的表现如何。积极与你的经理建立反馈循环。虽然这听起来很可怕,但尝试定期进行寻求反馈的谈话。
|
||||
|
||||
### 在分布式团队中找到方向
|
||||
|
||||
在过去两年中我们的工作场所在不断变化,如今在远程和分布式团队中工作已成为常态,不再罕见。我列出了一些技巧,帮助你在分布式团队中快速找到工作方向:
|
||||
|
||||
- 建立核心时间并将其设置在你的日历上。核心时间是你的团队一致同意的几个小时,在这段时间里,大家都明白自己应该在线并能随时响应。这样做很方便,因为会议只会安排在这个时间段,让你在计划自己一天的工作时更轻松。
|
||||
- 注意人们的时区和午餐时间。
|
||||
- 在虚拟世界中,你需要付出更大的努力来维持社交互动,而小小的心意却可以大大有助于让工作环境更加友好。
|
||||
|
||||
其中包括:
|
||||
|
||||
- 开始会议时,互相寒暄并询问人们周末/一天过得如何。这有助于打破僵局,让你能够与团队成员建立更私人的、超越工作的联系。
|
||||
- 建议定期举行非正式的虚拟聚会,与团队进行一些随意的闲聊。
|
||||
|
||||
### 维持工作生活间的平衡
|
||||
|
||||
在你职业生涯刚开始的时候,你很容易认为只要投入很多时间就能成功,特别是考虑到我们全天候待命的“忙碌文化”,以及认为建立生活工作的平衡是在职业生涯下阶段才需要考虑的想法。但这些想法与事实相去甚远,因为工作与生活的平衡不会神奇地发生在你身上。你需要积极和非常勤奋地去找到个人的平衡点。
|
||||
|
||||
没有工作与生活平衡的可怕之处在于它是慢慢蔓延到你身上的。刚开始是你下班后还在查看电子邮件,然后慢慢地,你开始周末也在工作,一直感到疲惫不堪。
|
||||
|
||||
我列出了一些提示,可以帮助你避免这种情况:
|
||||
|
||||
- 关闭/暂停通知和电子邮件并将自己设置为离线。
|
||||
- 不要在周末工作。刚开始是你需要在这一个周末工作,但不知不觉间,你会发现自己大部分周末都在工作。不管是什么工作,它可以等到星期一。
|
||||
- 如果你是待命的工程师,请了解公司的相关政策。一些公司提供金钱补偿,而另一些公司可能会以休假代替。利用这个时间。不使用 PTO(带薪休假)和健康日等福利确实会缩短你的工作寿命。
|
||||
|
||||
### 总结
|
||||
|
||||
毫无疑问,开始一份新工作压力很大而且很困难。我希望这些方法和技巧会让你的头几个月变得更轻松,并为你在新职位上取得巨大成功做好准备。记住,勤沟通,确立职业目标,积极主动,有效地使用公司的工具。做到这些,我相信你会做得很好!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/2/your-first-tech-job
|
||||
|
||||
作者:[Fatima][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/ftaj
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/article/21/5/open-source-burnout
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/06/000732j1ipb1whhhlwgpen.jpg
|
@ -0,0 +1,117 @@
|
||||
[#]: subject: "The power of sisterhood and allyship in open source"
|
||||
[#]: via: "https://opensource.com/article/23/3/power-sisterhood-allyship-open-source"
|
||||
[#]: author: "Paloma Oliveira https://opensource.com/users/discombobulateme"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15735-1.html"
|
||||
|
||||
开源领域中姐妹情谊和盟友关系的力量
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> “站在巨人的肩膀上”不仅是指开源,而且是指通过承认女性先驱和领导者在该领域的作用,在技术中建立姐妹情谊的基础。
|
||||
|
||||
两年多前,我从艺术家转职成为一名 [软件开发人员][1]。我不是单凭一己之力做到的。 我得到了 PyLadies Berlin 的支持,PyLadies Berlin 是一个国际志愿者团体的柏林本地分会,旨在支持女性从事技术工作。
|
||||
|
||||
我们习惯了“职业变化”这个词,就好像它是一个轨迹的中断。但根据我的经验,事实并非如此。一个人无法抹去自己过去的点点滴滴,而多样化背景带来的丰富性可以造就爆发点。个体的人生旅程虽然通常与计算机科学毫无相关,却担起了令科技对社会有所影响的职责,并为技术行业带来丰富性和创造力。
|
||||
|
||||
作为一名艺术家,我得到了自由,并打开了探索从建筑到科学等多个领域的大门。我大部分的艺术经历发生在巴西的黑客空间里,这里充斥着<ruby>自由及开源软件<rt>Free/Libre Open Source Software</rt></ruby>(FLOSS)的思想,即开放的自由共享文化。如今,由于一些不属于本文讨论范围的意识形态和实践原因,最常见的术语是“开源”。对我来说幸运的是,我的职业转变始于一次在 <ruby>开源项目办公室<rt>Open Source Program Office</rt></ruby>(OSPO)的实习,它让我的转变经历感觉——几乎可以说——像回家一样。
|
||||
|
||||
### 放在巨人的肩膀上
|
||||
|
||||
我们都受益于开源。无论你是否编码,你所使用的软件都依赖于它。由于这是一种开放的文化,一切都建立在他人的工作之上,所以经常听到“站在巨人的肩膀上”这个表述,指的是我们的进步都建立在前人的工作和贡献之上。 这突出了从他人的经验和成就中学习的重要性。
|
||||
|
||||
这篇文章旨在揭示我站在谁的肩膀上。这不仅是为了表达我对他们的感激之情,也是为了回答我在接受 JSParty 的 Kevin Ball 和 Christopher Hiller 采访时被问到的一个问题:你能做些什么来改善周围环境的多样性?
|
||||
|
||||
“站在巨人的肩膀上”不仅是指开源,而且是指通过承认女性先驱和领导者在该领域的作用,在技术中建立姐妹情谊的基础。通过承认在我们之前的女性所做的贡献,我们可以从她们所面临的挑战中获得灵感和洞察力,并从她们挣脱束缚的经验中学习。通过这种方式,我们“站在巨人的肩膀上”,以她们的工作为基础,为女性和 [被低估的][2] 技术人员创造更具包容性和支持性的环境。
|
||||
|
||||
通过相互支持,认识到从他人经验中学习的重要性,并形成一个支持网络,我们可以共同努力克服挑战,通过创造更公平的环境,为所有人建设更美好的未来。通过这样做,我们正在创造新的巨人,供其他人在未来立足。
|
||||
|
||||
### 组织一个当地社区: Meili Triantafyllidi 和 Jessica Greene
|
||||
|
||||
我加入了 PyLadies Berlin,它由 Meili 于 2013 年创立。Jessica 是组织者之一,她是 Ecosia 的一名初级软件工程师。成为社区组织者意味着利用你个人的空闲时间和热情,尽力创建一个安全的、支持性的网络和学习空间。这些工作包括寻找举办地点、宣传活动、策划主题、寻找演讲者,最重要的是,倾听社区的需求。
|
||||
|
||||
作为多元文化城市的新人并试图在城市中找到自己的位置,我感到 PyLadies 与其说是一个学习 Python 的地方,不如说是一个让我感受到被欢迎和被理解的中心。
|
||||
|
||||
根据我们常常听到的叙述,科技领域是每个人都在前往的新希望之地,有无限的岗位需求、切换国家的自由和高薪的职业。其他行业没有提供这种服务,或者至少没有达到这种规模。专注于带来多样性空间的社区提供了使这对每个人都成为现实的可能性。
|
||||
|
||||
每个活动都以社区公告、包含议程的简单幻灯片以及类似活动的宣传开始。当时我听闻的两个活动引导我走上了我的职业道路:Rail Girls Summer of Code 计划和 FrauenLoop。因为感觉有必要回馈当初给予了我支持的社区,我成为了共同组织者之一。
|
||||
|
||||
### 搭建人际关系网和学习专业知识: FrauenLoop
|
||||
|
||||
FrauenLoop 由 Nakeema Stefflbauer 博士于 2016 年创立,致力于改变欧盟科技公司的面貌。该项目分为 3 个月的周期,由每周的晚间课程和周末研讨会组成,以培训在科技行业里没有人际关系网的女性。
|
||||
|
||||
学习课程是围绕女性的专业需求开发的,从以技术行业为重点的课程到女性举办的关于科技行业如何真正运作以及如何成功立足的研讨会。一些常见的话题包括薪资谈判和练习技术面试。最近,为了应对裁员,柏林技术工人联盟举办了一场研讨会,揭开如何对公司解雇流程提出质疑的神秘面纱。
|
||||
|
||||
研讨会聚焦于女性,尤其是移民群体,她们正处于家庭状况和职业转变的阶段,真正准备好去寻找工作了。
|
||||
|
||||
和 Nakeema 在一起本身就给我带来了灵感。该项目提供了理解编程和学习网页开发基础知识的起点。但最重要的是,你与项目中的其他人建立了联系,他们是 PyLadies 未来的共同组织者、演讲者、业余项目的导师和朋友。
|
||||
|
||||
FrauenLoop 还为其学生提供了回去担任导师的机会。对我来说,这是决定我前进道路的转折点。做了一年多的导师,增强了我对自己的信心,也巩固了我自己的学习。受到帮助他人学习这一责任的挑战,你不可避免要一直学习。
|
||||
|
||||
在那里我遇到了 Victoria Hodder,她是我申请 Rail Girls Summer of Code 时的搭档。
|
||||
|
||||
### 多元化项目:从 Rail Girls Summer of Code 到 Ecosia Summer of Code
|
||||
|
||||
Rail Girls Summer of Code 是一项面向女性和非二元性别程序员的全球奖学金计划,入选的申请者将获得为期三个月的奖学金,以从事现有的开源项目。该计划活跃于 2013 年到 2020 年。
|
||||
|
||||
申请以一个团队为单位进行提交,即来自同一个城市的两个人。虽然这是一个远程项目,但有一个本地同行确保了问责制和相互支持。
|
||||
|
||||
除了同伴,项目还需要有一个办公的地方,一个适合工作三个月的环境。这个地方可以是你的家、联合办公空间、工作办公室,或者最好的情况下是培训公司。虽然培训公司除了提供工作空间外没有其他义务,但它让我们与当地公司联系起来,并为我们提供了一个空间,让我们能够与我们想进入的行业内的人建立知名度和关系网。
|
||||
|
||||
我在 PyLadies Berlin 的联合组织者 Jessica 通过该项目开启了她在科技领域的职业生涯。她提议 Ecosia(她当时也是现在所任职的公司)担任两个团队的指导工作,其中一个是我和 Victoria 的团队(我们专注于网络开发),另一个是 Taciana Cruz 和 Karina Cordeiro 的团队(他们专注于数据)。
|
||||
|
||||
在三个月的申请期内,大流行来势汹汹。在参与 [if-me][2] 项目后,我和维多利亚被 _某种程度上_ 选入了 the Rail Girls 项目。因为是 _某种程度上_ 被选中的,我们与 Rail Girls 的沟通在选拔后期变得非常混乱,最终他们在最后一刻取消了项目。
|
||||
|
||||
我们当时都崩溃了。大流行的重压给我们带来了沉重打击,它不仅粉碎了我们获得一份有偿工作的机会,而且粉碎了长期以来养成的开始新职业的梦想。
|
||||
|
||||
当时还是初级软件开发人员的 Jessica懂我们的处境,因此她挺身而出,她没有感到无能为力,而是站出来表明自己的立场。除了为适应个人新角色所付出的努力,她还给自己安排了更多工作,并创建了 [Ecosia Summer of Code][3] 这一项目。
|
||||
|
||||
Ecosia 无法支付奖学金,但 Jessica 开发了一个导师计划。该计划利用公司的可用资源,提供高素质专业人士的指导,以填补我们的知识空白。由于 Victoria 和 Karina 因为需要有报酬的工作而放弃了项目,Taciana 和我设法继续进行个人项目。我们找到了可以一起努力并相互支持的共同主题。
|
||||
|
||||
大约一年后,其中一位导师 Jakiub Fialla 邀请我去她的公司聊聊开源。我与其他一些人依然保持着联系,时不时地,当他们举办 PyLadies Berlin 活动时,我会顺便过去见见他们。如此甜蜜。
|
||||
|
||||
### 赞助多样性: Coyotiv 项目和它的创始人 Armagan Amcalar
|
||||
|
||||
当 Rail Girls 项目被取消时,我在 Instagram 上看到一篇关于训练营的帖子,该训练营提供全栈网络开发计划奖学金。
|
||||
|
||||
申请流程很简单,所以我就申请了。我很快收到了一份自发的面试邀请。当时的我感到沮丧、凌乱又绝望,没有任何准备就参加了面试,所以我全程非常诚实。整个面试的谈话同样坦诚,对此我深表感激。
|
||||
|
||||
面试官是 [Coyotiv 软件工程学院][4] 的创始人 Armagan Amcalar。具有音乐背景的Armagan 富有创造力,对周围的世界有着批判性的思考。这所学校是在他为柏林的 Women Techmakers 提供免费速成课程三年后创办的。他没有死记硬背多样性演讲,而是根据它采取行动,为所有全职参与者提供奖学金。
|
||||
|
||||
我获得了奖学金,并与其他四个人(其中 3 名女性)一起组成了第一批学生。训练营持续了高强度的 17 周。它对改变我对代码的看法极为重要。与我尝试学习的其他地方不同,Armagan 并不关心我们选择什么编程框架。相反,这一切都是为了理解我们在做什么,并将软件工程视为一种创造性的、强大的工具来塑造我们生活的世界。我得到的不仅仅是奖学金,我还收获了一个朋友和终身导师,他为我提供华丽转身的机会,打开了一扇通往美好生活的大门。
|
||||
|
||||
你是不是觉得我的反应太夸张了?你可以问问我身边的人。我的搭档此时已经认识我大约 14 年了,他是这样评价我的变化的:我变得纪律严明,充满活力,一路走来我对学到的东西感到高兴,就软件及其相关的事物进行深入对话,不再困惑矛盾,我放弃了终生的艺术事业,转而找到了人生的目标。由于我的变化实在惊人,他参加了我后面的几届训练营项目。
|
||||
|
||||
学校为我提供了技术知识、面试培训、简历支持和公开演讲培训。毕业不仅仅要求开发个人的全栈项目,还必须通过在 npm 上发布一个库来回馈开源,因为有如此多的软件是基于开源构建的。Node 包管理器(npm)是一个 JavaScript 包存储库,允许你通过在基于 Javascript 的项目中轻松安装代码来重用代码。尽管我参与自由软件运动和开源已经十多年了,但我从没想过我可以用实际代码回馈它。
|
||||
|
||||
### 我的贡献
|
||||
|
||||
[彩虹企鹅][5] 就这样诞生了。它是一个 npm 库,可以在开发人员敲代码时发送激励信息。 也许它不是一个非常实用的工具。但对我来说它依然是个必要的工具,这基于我个人的经历——我经历过学习编码的挫折,为 if-me 项目做出贡献,而且从其他学习者那里听到了许多类似的故事。
|
||||
|
||||
通过我在这些编程社区的经历,我了解到编程远不止一行行的代码,拥有盟友是多么强大和有必要。无论你是谁或你自认为了解什么,自由和开源软件社区中都有机会。你的参与不一定要是大动作,因为盟友们的小小贡献加起来远大于一个人贡献的总和。迈出第一步。在开源领域中找到你的盟友。
|
||||
|
||||
*(题图:MJ:tech woman illustration in high resolution, very detailed, 8k)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/power-sisterhood-allyship-open-source
|
||||
|
||||
作者:[Paloma Oliveira][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/discombobulateme
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://enterprisersproject.com/article/2022/9/software-developer-day-life?intcmp=7013a000002qLH8AAM
|
||||
[2]: https://www.if-me.org/
|
||||
[3]: https://blog.ecosia.org/ecosia-summer-of-code-mentoring/
|
||||
[4]: https://www.coyotiv.com/
|
||||
[5]: https://www.npmjs.com/package/rainbow-penguin
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/18/234855fuxewrdvwaey8jj1.jpg
|
@ -0,0 +1,142 @@
|
||||
[#]: subject: "Synchronize databases more easily with open source tools"
|
||||
[#]: via: "https://opensource.com/article/23/3/synchronize-databases-apache-seatunnel"
|
||||
[#]: author: "Li Zongwen https://opensource.com/users/li-zongwen"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "cool-summer-021"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15733-1.html"
|
||||
|
||||
使用这个开源工具轻松同步数据库
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 开源的 Apache SeaTunnel 项目是一个数据整合平台,可以很容易地实现数据同步。
|
||||
|
||||
<ruby>变更数据捕获<rt>Change Data Capture</rt></ruby>(CDC)使用服务端代理来记录、添加、更新和删除对数据表的各种操作。它以一种易用的关系型格式提供了数据变化的细节信息。它可以捕获将更改应用于目标环境中的已修改行所需的列信息和元数据。这些信息保存在一个与被跟踪的源表的列结构相对应的变化表内。
|
||||
|
||||
捕获变更的数据可不是一件容易的事。不过,有一个开源项目 —— [Apache SeaTunnel][1],它是一个数据整合平台,它提供的 CDC 功能的设计理念和功能集使这些捕获成为可能,其功能包括上文提到的,超越了现有产品的解决方案。
|
||||
|
||||
### 使用场景
|
||||
|
||||
CDC 的经典应用是异质数据库之间的数据同步或备份。你可以在 [MySQL][2]、PostgreSQL、MariaDB 和类似的数据库间进行数据同步。另外一个例子,你也可以将数据同步到应该全文搜索引擎。借助 CDC,你可以基于 CDC 捕获的数据创建备份。
|
||||
|
||||
如果设计得当,数据分析系统通过订阅目标数据表的变化情况获取需要处理的数据,而不需要将分析过程嵌入已有系统。
|
||||
|
||||
### 在微服务间共享数据状态
|
||||
|
||||
微服务现在很流行,但是在微服务间共享信息往往是一件复杂的事。CDC 是一个可能的解决方案。微服务可以使用 CDC 来获取其他微服务的数据库变化,获取数据状态更新,以及执行相应逻辑。
|
||||
|
||||
### 更新缓存
|
||||
|
||||
<ruby>命令查询责任隔离<rt>Command Query Responsibility Segregation</rt></ruby>([CQRS][4])的概念是将命令活动与查询活动分开。这两者有本质上的不同:
|
||||
|
||||
- 命令向数据源写入数据。
|
||||
- 查询从数据源读取数据。
|
||||
|
||||
问题是,读事件发生的时间与写事件发生的时间有关,以及这些事件的发生是由谁来承担责任的?
|
||||
|
||||
更新缓存可能很困难。你可以使用 CDC 从数据库获取数据更新事件,让它控制缓存的更新或失效。
|
||||
|
||||
CQRS 设计通常使用两种不同的存储实例来支持业务查询和变更操作。为了保证数据的一致性,我们可以使用分布式事务来保证强大的数据一致性,代价是可用性、性能和扩展性。你也可以使用 CDC 来确保最终的数据一致性,它的性能和伸缩性较好,但其代价是数据延迟,目前业界可以保持在毫秒范围内。
|
||||
|
||||
例如,你可以使用 CDC 把 MySQL 中的数据同步到你的全文搜索引擎(比如ElasticSearch)。在这种架构中,ElasticSearch 搜索了所有的查询,但是当你需要修改数据时,你不能直接操作 ElasticSearch 的,你需要修改上游的 MySQL 数据,因而生成了一个更新事件。当 ElasticSearch 监视数据库时,这个事件就被系统获取了,并在 ElasticSearch 中提示更新。
|
||||
|
||||
在一些 CQRS 系统中,也可以用类似的方法更新查询视图。
|
||||
|
||||
### 痛点
|
||||
|
||||
CDC 不是一个新概念,很多现有的项目已经实现了它。但是对很多用户来说,已有解决方案存在一些不足。
|
||||
|
||||
#### 单数据表配置
|
||||
|
||||
当你使用一些 CDC 软件时,你必须分别配置每个表。例如,为了同步十张表,你需要写十条 源 SQL 和 <ruby>汇聚<rt>Sink</rt></ruby> SQL 语句。为了进行转换操作,你也需要写与转换相关的 SQL 语句。
|
||||
|
||||
有时候,对于一张表来说可以手写,但只对数据量小的情况适用。当数据量大时,会发生类型映射或参数配置的错误,进而导致较高的操作和维护成本。
|
||||
|
||||
SeaTunnel 是一个易用的数据集成平台,有望解决这个问题。
|
||||
|
||||
#### 不支持模式演化
|
||||
|
||||
一些 CDC 解决方案支持 DDL 事件传递,但不支持传递到 <ruby>汇聚节点<rt>Sink</rt></ruby>,以便它能进行同步变更。由于无法根据 DDL 事件改变转换的类型信息,所以即使一个能获取事件的 CDC 也不一定可以将它发送至引擎(所以汇聚节点不能遵循 DDL 事件来进行变更)。
|
||||
|
||||
#### 太多的链接
|
||||
|
||||
在一些 CDC 平台上,当有多个表时,如果一张表被同步了,就必须使用一个链接来代表一张表。当存在多个表时,也需要很多链接。这就给源 JDBC 数据库带来了压力,同时导致binlog 过多,还会导致重复的日志解析。
|
||||
|
||||
### SeaTunnel CDC 架构的目标
|
||||
|
||||
Apache SeaTunnel 是一个开源、高效、分布式、大规模的数据集成框架。为了解决现有数据集成工具解决不了的问题,开发者社区“重新造轮子”,开发了一种具有独特功能的 CDC 平台。它的架构设计吸收了现有工具的优点,消除了相应的缺点。
|
||||
|
||||
Apache Seatunnel 支持:
|
||||
|
||||
- 以无锁并行的方式快照历史数据。
|
||||
- 日志心跳检测和动态添加数据表。
|
||||
- 读取子数据库、子表和多结构表。
|
||||
- 模式演进。
|
||||
- 所有基础的 CDC 功能。
|
||||
|
||||
它降低了用户的操作和维护成本,并且支持动态添加数据表。
|
||||
|
||||
例如,当你要同步整个数据库,并在稍后需要添加一个新表,你不必手动维护、改变配置或重启当前作业。
|
||||
|
||||
另外,Apache SeaTunnel 也支持并行读取子数据库、子表和多结构表。还支持模式演进、DDL 转换,以及在引擎内改变支持的模式,这些可以变为 <ruby>转换器<rt>Transform</rt></ruby>和 <ruby>汇聚节点<rt>Sink</rt></ruby>。
|
||||
|
||||
### SeaTunnel CDC 现状
|
||||
|
||||
如今,CDC 拥有支持增量和快照阶段的基本能力。它也支持 MySQL 实时和离线使用。MySQL 实时测试已完成,即将进行离线测试。因为它涉及对转换器和汇聚节点的更改,目前还不支持模式。不支持动态发现新增表,已预留了一些支持多结构表的接口。
|
||||
|
||||
### 项目展望
|
||||
|
||||
作为 Apache 孵化的项目,Apache SeaTunnel 的社区正快速发展起来。下一届社区计划会议的主要目标有:
|
||||
|
||||
#### 1、发展并改进连接器和目录生态
|
||||
|
||||
我们正努力改善连接器和目录功能,包括:
|
||||
|
||||
- 支持连接更多数据库,包括 TiDB、Doris 和 Stripe。
|
||||
- 改善现有的连接器的易用性和性能。
|
||||
- 支持 CDC 连接器用于实时、增量同步场景。
|
||||
|
||||
任何对连接器感兴趣者都可以查看 [Umbrella][5]。
|
||||
|
||||
#### 2、支持更多数据集成场景(SeaTunnel 引擎)
|
||||
|
||||
现有的引擎仍然存在一些解决不了的痛点,例如对整个数据库的同步,表结构变化的同步以及任务失败的大粒度。
|
||||
|
||||
我们正努力解决这些问题,对此感兴趣者可以查看 [#2272 议题][6]。
|
||||
|
||||
#### 3、更易使用(Web 版)
|
||||
|
||||
我们正努力提供 Web 界面,令操作更简便。通过 Web 界面,我们将实现以 DAG/SQL 的形式查看目录、连接器、任务和相关信息。我们也会给予用户访问调度平台的权限,以便更方便地进行任务管理。
|
||||
|
||||
欲了解更多关于 Web 版的信息,请访问 [Web 平台子项目][7]。
|
||||
|
||||
### 总结
|
||||
|
||||
数据库活动通常必须被仔细跟踪,才能对数据的更新、删除或添加操作进行管理。CDC 提供了这种功能。Apache SeaTunnel 是一个开源解决方案,能满足这些需求,它将持续迭代更新,从而提供更多功能。该项目和社区也很活跃,欢迎你的加入。
|
||||
|
||||
*(题图:MJ:database connections illustration in high resolution, very detailed, 8k)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/synchronize-databases-apache-seatunnel
|
||||
|
||||
作者:[Li Zongwen][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[cool-summer-021](https://github.com/cool-summer-021)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/li-zongwen
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://seatunnel.apache.org/
|
||||
[2]: https://opensource.com/downloads/mariadb-mysql-cheat-sheet
|
||||
[3]: https://www.redhat.com/en/topics/microservices?intcmp=7013a000002qLH8AAM
|
||||
[4]: https://www.redhat.com/architect/illustrated-cqrs
|
||||
[5]: https://github.com/apache/incubator-seatunnel/issues/1946
|
||||
[6]: https://github.com/apache/incubator-seatunnel/issues/2272
|
||||
[7]: https://github.com/apache/incubator-seatunnel-web
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/18/173544yeggjebh4algejg4.jpg
|
@ -0,0 +1,172 @@
|
||||
[#]: subject: "Best GUI Package Managers for Arch Linux"
|
||||
[#]: via: "https://www.debugpoint.com/arch-linux-gui-package-managers/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15727-1.html"
|
||||
|
||||
Arch Linux 的最佳 GUI 包管理器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 让我们点评一些最好的 Arch Linux GUI 包管理器。选择最符合你需求的。
|
||||
|
||||
由于其可定制性、灵活性和尖端功能,Arch Linux 是高级用户和开发人员中最受欢迎和使用最广泛的 Linux 发行版之一。
|
||||
|
||||
由于其极简设计,在 Arch Linux 中安装软件的主要方式是使用终端通过命令行界面 (CLI)。
|
||||
|
||||
但并不是每个人都喜欢使用终端。基于图形用户界面(GUI)的包管理器是这些人的必备程序。有几个可选的包管理器。让我们了解一些比较流行的。
|
||||
|
||||
### 在 Arch Linux 上寻找基于 GUI 的包管理器要考虑什么?
|
||||
|
||||
在为 Arch Linux 选择基于 GUI 的包管理器时,必须考虑几个因素:
|
||||
|
||||
首先,它应该有一个干净易用的界面,对初学者来说很直观。
|
||||
|
||||
其次,它应该支持所有包管理操作,例如安装、删除、更新和搜索包。
|
||||
|
||||
第三,它应该具有高级功能,例如依赖项解析和对 AUR 包的支持。
|
||||
|
||||
最后,它应该是轻量级的,不会占用太多的系统资源。
|
||||
|
||||
### Arch Linux 的最佳 GUI 包管理器
|
||||
|
||||
#### 1、Pamac
|
||||
|
||||
此列表中的第一个 GUI 包管理器是 [Pamac][1],它由 Manjaro Linux 团队开发。具有漂亮且用户友好的界面,使其超级易于使用。
|
||||
|
||||
其直观的界面使用户可以轻松安装、删除和更新软件包。它建立在支持 AUR 的 [libalpm][2] 之上。Pamac 还支持 Snap 和 Flatpak 的 `appstream:///` 协议。因此,你可以直接从 appstream 链接启动该应用安装程序。此外,它还具有高级功能,例如依赖项解析和对 AUR 包的支持。此外,Pamac 是轻量级的,不会占用太多系统资源。
|
||||
|
||||
![Pamac 帮你浏览和安装软件包][3]
|
||||
|
||||
使用其 GUI,你可以浏览 Arch 仓库,还可以根据其功能查看应用。Pamac GUI 中有单独的部分,可以使你能够删除和卸载包,包括孤立的包。
|
||||
|
||||
它是最好的 GUI 包管理器之一。
|
||||
|
||||
![你也可以使用 Pamac 升级你的 Arch Linux 系统][4]
|
||||
|
||||
Pamac 安装很容易。它在 Arch 用户仓库(AUR)中可用。你可以 [安装 Yay][5] AUR 助手或任何其他助手来安装它。这是使用 Yay 安装的命令。该软件包位于 [此处][6]。如果你正在运行 [Manjaro Linux][7],它应该已经存在。
|
||||
|
||||
```
|
||||
yay -S pamac-aur-git
|
||||
```
|
||||
|
||||
#### 2、Octopi
|
||||
|
||||
接下来的 GUI 包管理器是 [Octopi][8],它是另一个漂亮的工具。它是使用 Qt 构建的,并带有一个高效的 GUI。在功能方面,它是一个非常先进的工具。
|
||||
|
||||
使用 Octopi,你可以搜索包、安装它们,当然也可以删除它们。此外,你可以查看直接从 Arch 仓库中获取的每个包的详细信息。例如,包版本、最后更新日期、新闻和其他信息。
|
||||
|
||||
此外,它允许你查看包的 PKGBUILD 信息。如果你想进一步调查包,这是一个很好的功能。
|
||||
|
||||
最后,它是超轻量级的,不会占用大量系统资源。我认为 Octopi 完全被低估了,它是 Arch Linux 功能丰富的软件管理器之一。
|
||||
|
||||
![Octopi][9]
|
||||
|
||||
它在 AUR 中可用,你可以使用 [Yay][5] 或任何 AUR 助手安装它。
|
||||
|
||||
```
|
||||
yay -S --needed octopi
|
||||
```
|
||||
|
||||
#### 3、GNOME “软件”应用
|
||||
|
||||
此列表中的第三个是你可能已经知道的 GNOME “<ruby>软件<rt>Software</rt></ruby>”应用。它是 Ubuntu、Fedora 和许多其他发行版的默认软件管理器。基于 GTK4,它支持所有类型的包,如 .deb、.rpm、Flatpak 和 Snap。在 Arch Linux 中,它支持主 Arch 仓库,包括用户仓库(AUR)。
|
||||
|
||||
但是,与此列表中的其他应用程序相比,它对系统资源的占用可能有点大。但它是一个现代的包管理器,可以很好地用于各种场景。
|
||||
|
||||
![GNOME “软件”应用][10]
|
||||
|
||||
安装很简单,因为它在主 Arch 仓库中可用。你可以从终端使用以下命令安装它。
|
||||
|
||||
```
|
||||
sudo pacman -S --needed gnome-software
|
||||
```
|
||||
|
||||
#### 4. KDE “发现”应用
|
||||
|
||||
我个人最喜欢的是 KDE “<ruby>[发现][11]<rt>Discover</rt></ruby>”应用 ,它是 KDE Plasma 团队中最好的软件管理器之一。如果你使用过 Kubuntu 或任何其他 KDE Plasma 桌面,那么你已经熟悉它了。
|
||||
|
||||
“发现”应用支持所有主要的打包格式,包括 deb、rpm、Flatpak 和 Snap。它有一个定义明确的软件及其来源信息页面。你还可以按应用名称搜索或按应用类别浏览目录。
|
||||
|
||||
对于 Arch Linux,它可以从主 Arch 仓库和 AUR 中获取包和信息。
|
||||
|
||||
![Discover][12]
|
||||
|
||||
你可以在 Arch Linux 中使用以下命令安装它。
|
||||
|
||||
```
|
||||
sudo pacman -S --needed discover
|
||||
```
|
||||
|
||||
#### 5、Bauh
|
||||
|
||||
[Bauh][13] 是一个相对较新的基于 GUI 的 Arch Linux 包管理器。它具有简单且用户友好的界面,使用户可以轻松管理他们的包。
|
||||
|
||||
它的主窗口为你提供了在 Arch Linux 系统中管理应用程序的所有选项。主搜索框使你能够搜索应用程序。此外,你可以通过类型浏览,例如仅查看 Flatpak、AUR 等包。
|
||||
|
||||
此外,使用 Bauh 的主 GUI,你可以逐个降级和更新软件包,查看软件包信息,甚至直接启动应用。
|
||||
|
||||
良好设计的设置面板为你提供了所需的所有自定义选项。
|
||||
|
||||
![Arch Linux 中的 Bauh 包管理器][14]
|
||||
|
||||
在系统中 [设置][5] AUR 之后,你可以使用以下命令安装它。
|
||||
|
||||
```
|
||||
yay -S --needed bauh
|
||||
```
|
||||
|
||||
### 还有几个
|
||||
|
||||
还有一些其他的包管理器可以在 Arch Linux 中使用。这是其中的一小部分。这些不是那么流行。但它们也可以作为替代方案。
|
||||
|
||||
- [Apper][15]:使用 PackageKit 的应用和包管理器(来自 KDE 团队)
|
||||
- [tkPacman][16]:使用 Tcl/Tk 构建的 pacman 轻量级 GUI
|
||||
|
||||
最后,你可以在官方 [Arch Wiki][17] 中阅读更多相关信息。
|
||||
|
||||
### 总结
|
||||
|
||||
在本文中,我们讨论了一些适用于 Arch Linux 的最佳基于 GUI 的包管理器,包括 Pamac、Octopi、GNOME “软件”应用、KDE “发现”应用 和 Bauh。
|
||||
|
||||
这些包管理器中的每一个都有自己的优点和缺点,因此你可以选择最适合你需求的那个。
|
||||
|
||||
如果你要我推荐,我建议你试试这些:Pamac、Octopi 和 Bauh。它们都是很好的。
|
||||
|
||||
*(题图:MJ:software package manager hd, abstract)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/arch-linux-gui-package-managers/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://wiki.manjaro.org/index.php/Pamac
|
||||
[2]: https://man.archlinux.org/man/libalpm.3.en
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2023/03/Pamac-helps-you-to-browse-and-install-packages.jpg
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2023/03/You-can-also-upgrade-your-Arch-Linux-system-using-Pamac.jpg
|
||||
[5]: https://www.debugpoint.com/install-yay-arch/
|
||||
[6]: https://aur.archlinux.org/packages/pamac-aur-git
|
||||
[7]: https://www.debugpoint.com/manjaro-linux-review-2022/
|
||||
[8]: https://tintaescura.com/projects/octopi/
|
||||
[9]: https://www.debugpoint.com/wp-content/uploads/2023/03/Octopi.jpg
|
||||
[10]: https://www.debugpoint.com/wp-content/uploads/2023/03/GNOME-Software.jpg
|
||||
[11]: https://apps.kde.org/discover/
|
||||
[12]: https://www.debugpoint.com/wp-content/uploads/2023/03/Discover.jpg
|
||||
[13]: https://github.com/vinifmor/bauh
|
||||
[14]: https://www.debugpoint.com/wp-content/uploads/2023/03/Bauh-package-manager-in-Arch-Linux.jpg
|
||||
[15]: https://apps.kde.org//system/apper/
|
||||
[16]: https://aur.archlinux.org/packages/tkpacman
|
||||
[17]: https://wiki.archlinux.org/title/Pacman/Tips_and_tricks#Graphical
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/16/152829wbmjtg5fgjiyf4lt.jpg
|
@ -0,0 +1,148 @@
|
||||
[#]: subject: "Write documentation that actually works for your community"
|
||||
[#]: via: "https://opensource.com/article/23/3/community-documentation"
|
||||
[#]: author: "Olga Merkulova https://opensource.com/users/olga-merkulova"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "alim0x"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15743-1.html"
|
||||
|
||||
编写对社区真正有用的文档
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 建立良好的文档可能是困难的,但它对有效的沟通至关重要。遵循这个框架来编写并与正确的人分享文档。
|
||||
|
||||
成功和可持续的项目,与那些消失无踪的项目有什么不同?答案是 —— 社区。社区是开源项目的发展动力,而文档是构建社区的基石之一。也就是说,文档的意义不仅仅在于文档本身。
|
||||
|
||||
建立好的文档可能很困难。用户不愿意阅读文档,因为它不易查找,它很快就过时了,它冗长,或者它不全面。
|
||||
|
||||
开发团队不写文档,因为他们陷入了“对我来说显而易见,所以对所有人都显而易见”的陷阱。他们不写,因为他们忙于开发项目。要么是需求变化太快了,要么是开发得还不够快。
|
||||
|
||||
但是好的文档仍然是团队和项目之间最好的沟通工具。考虑到项目随着时间的推移往往会变得更大,这一点尤其重要。
|
||||
|
||||
文档可以是团队或公司内部的唯一真理。这在协调人们朝着共同的目标前进,以及在人们转移到不同的项目时保留知识方面非常重要。
|
||||
|
||||
那么,要如何为一个项目写出合适的文档,并与正确的人分享呢?
|
||||
|
||||
### 什么是成功的社区文档?
|
||||
|
||||
要想在你的社区文档编写中取得成功,你需要:
|
||||
|
||||
- 规划你的路径
|
||||
- 使其清晰简单
|
||||
- 灵活变通,根据具体情况调整路径
|
||||
- 做版本控制
|
||||
|
||||
![图片展示了建立文档的整个流程][1]
|
||||
|
||||
灵活并不意味着混乱。许多项目之所以成功,就是因为它们组织得很好。
|
||||
|
||||
James Clear(《<ruby>原子习惯<rt>Atomic Habits</rt></ruby>》一书的作者)写道:“你并不是提升到了你目标所在的水平,而是降低到你整个系统所在的水平。”一定要组织好过程,使水平足够高,才能取得成功。
|
||||
|
||||
### 设计流程
|
||||
|
||||
文档本身就是一个项目。你可以把写文档当作写代码一样。事实上,文档可以是一个产品,而且是一个非常有价值的产品。
|
||||
|
||||
这就意味着你可以采用与软件开发相同的流程:分析、获取需求、设计、实现和维护,把文档作为你的一个流程对待。
|
||||
|
||||
在设计流程时,要从不同的角度考虑。不是所有的文档都适用于所有人。
|
||||
|
||||
大多数用户只需要一个了解项目概况的文档,而 API 文档则是留给开发者或高级用户的。
|
||||
|
||||
开发者需要了解库和函数的文档。用户则更需要看到示例、操作指南,和项目与其他软件相配合的架构概述。
|
||||
|
||||
![图片展示了编写文档时的不同视角][2]
|
||||
|
||||
总之,在创建任何流程之前,你必须确定你需要什么:
|
||||
|
||||
- **关注的群体:** 包括开发者、集成商、管理员、用户、销售、运营、高管
|
||||
- **专业水平:** 要考虑到初级、中级和高级用户
|
||||
- **详细程度:** 既要有高层级的概述,也要有技术细节,所以要考虑如何呈现这些内容
|
||||
- **路径和入口:** 人们如何找到文档,如何使用文档
|
||||
|
||||
当你思考这些问题时,它可以帮助你构建你想通过文档传达的信息的结构。它定义了文档中必须包含的内容的清晰指标。
|
||||
|
||||
下面是如何围绕文档建立一个流程的方法。
|
||||
|
||||
### 编码约定
|
||||
|
||||
代码本身应该有意义。文档应通过良好的类名、文件名等来表达出来。通过思考以下内容,创建通用的编码标准和自我注解的编码过程:
|
||||
|
||||
- 变量命名约定
|
||||
- 通过使用类、函数命名方案使名称易于理解
|
||||
- 避免深度嵌套,或 [根本不嵌套][3]
|
||||
- 不要简单地复制和粘贴代码
|
||||
- 不应使用长方法
|
||||
- 避免使用幻数(改用常量)
|
||||
- 使用提取的方法、变量等
|
||||
- 使用有意义的目录结构、模块、包和文件名
|
||||
|
||||
### 开发时测试
|
||||
|
||||
测试不仅仅是关于代码应该如何工作。它还涉及如何使用 API、函数、方法等。编写良好的测试可以揭示基本用例和边缘用例。甚至还有一种 [测试驱动开发][4] 的实践,专注于在代码开发之前创建测试用例(应该测试什么以及如何测试的分步场景)。
|
||||
|
||||
### 版本控制
|
||||
|
||||
版本控制(即使是对文档进行版本控制)可以帮助你跟踪更改的逻辑。它可以帮助你回答为什么这么修改。
|
||||
|
||||
确保提交期间的注释能解释为什么进行更改,而不是进行了哪些更改。
|
||||
|
||||
编写文档过程越吸引人,就会有更多的人参与其中,为它添加创造力和乐趣。你应该通过以下方式考虑文档的可读性:
|
||||
|
||||
- 软件代码约定
|
||||
- 图表和图形(也通过文字进行解释)
|
||||
- 思维导图
|
||||
- 概念图
|
||||
- 信息图表
|
||||
- 图片(突出显示重要的部分)
|
||||
- 短视频
|
||||
|
||||
通过使用不同的交流方式,你可以提供更多的方式来参与文档。这有助于防止误解(不同的语言,不同的含义)和有助于通过不同的学习方式进行学习。
|
||||
|
||||
以下是一些用于创建文档的软件工具:
|
||||
|
||||
- **Javadoc、Doxygen、JsDoc 等:** 许多语言都有自动化的文档工具,以帮助捕获代码中的主要功能
|
||||
- **Web 钩子和 CI/CD 引擎:** 允许持续发布文档
|
||||
- **Restructured Text、Markdown、Asciidoc:** 文件格式和处理引擎,帮助你从纯文本文件中生成美观且实用的文档
|
||||
- **ReadTheDocs:** 是一个可以和公共 Git 存储库联动的文档托管主机
|
||||
- **Draw.io、LibreOffice Draw、Dia:** 制作图表、图形、思维导图、路线图、计划、标准和指标等
|
||||
- **Peek、Asciinema:** 记录终端命令操作
|
||||
- **VokoscreenNG:** 录制屏幕和鼠标点击操作
|
||||
|
||||
### 文档很重要
|
||||
|
||||
编写文档的过程和协议与项目本身同样重要。最重要的是,它把项目的信息和项目的创造传达到位,更加令人兴奋。
|
||||
|
||||
快速进入项目和流程,以及了解一切是如何工作的,是文档一个重要的功能。它有助于确保众人持续参与。通过在团队中构建一种“语言”,可以简化流程,更清晰地理解所要做的事情。
|
||||
|
||||
文档旨在传达价值,即无论是通过团队成员还是通过应用程序的用户的言行,来展示出某些东西。
|
||||
|
||||
要将这个过程视为一个连续的整体,并在其中融合使用沟通、流程和文档的方式。
|
||||
|
||||
![图片展示了文档作为一种沟通的过程][5]
|
||||
|
||||
文档是一种沟通手段。
|
||||
|
||||
*(题图:MJ:document development illustration in high resolution, very detailed)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/community-documentation
|
||||
|
||||
作者:[Olga Merkulova][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[alim0x](https://github.com/alim0x)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/olga-merkulova
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/sites/default/files/2023-03/documentationflowchart.png
|
||||
[2]: https://opensource.com/sites/default/files/2023-03/different.perspectives.whiledocumenting.png
|
||||
[3]: https://opensource.com/article/20/2/java-streams
|
||||
[4]: https://opensource.com/article/20/1/test-driven-development
|
||||
[5]: https://opensource.com/sites/default/files/2023-03/doc.is_.aprocessofcommunication.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/22/172758mm2rzjry2ful090y.jpg
|
@ -0,0 +1,79 @@
|
||||
[#]: subject: "My first pull request at age 14"
|
||||
[#]: via: "https://opensource.com/article/23/3/my-first-code-contribution-age-14"
|
||||
[#]: author: "Neil Naveen https://opensource.com/users/neilnaveen"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "hanszhao80"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15723-1.html"
|
||||
|
||||
14 岁那年,我提交了第一个拉取请求
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 年龄并不是为开源做贡献的障碍。
|
||||
|
||||
我叫 Neil Naveen,我是一个 14 岁的初中生,已经有七年的编码经验。我使用 [Golang][1] 编码也有两年了。
|
||||
|
||||
不过,编码并不是我唯一的爱好。我练习柔术已经有四年了,并参加过多次比赛。我对编码和柔术充满热情,因为它们教给了我重要的人生课程。
|
||||
|
||||
### Codecombat
|
||||
|
||||
我在 [Codecombat][2] 上开始编码,它教会了我许多基本的编码技巧。
|
||||
|
||||
在我的编码历程中,最激动人心的时刻之一是我在 Codecombat 主办的多人竞技场中,在大约 50,000 名玩家中排名第 16。当时我只有 11 岁,这对我来说是一个不可思议的成就。它给了我继续探索和学习新事物的信心。
|
||||
|
||||
### Leetcode
|
||||
|
||||
在 Codecombat 之后,我转到了 [leetcode.com][3]。通过解决这个网站量身定制的问题,来磨练我的算法编码技能,以学习特定的算法。
|
||||
|
||||
### Coding Game
|
||||
|
||||
当我 13 岁时,我转到了 [Coding Game][4] 的机器人编程。这里的竞争更加激烈,因此我必须采用更好的算法。例如,在创建终极 <ruby>井字游戏<rt>tic-tac-toe</rt></ruby>人工智能时,我使用了 <ruby>极小化极大算法<rt>Minimax</rt></ruby> 和 <ruby>蒙特卡洛树搜索<rt>Monte Carlo Tree Search</rt></ruby> 等算法,使我的代码快速高效。
|
||||
|
||||
### GitHub CLI
|
||||
|
||||
有一天,我看到爸爸在使用一个叫 [GitHub CLI][5] 的开源工具,我被它迷住了。GitHub CLI 是一个允许用户直接从命令行与 GitHub 的 API 互动的工具,而不需要到 GitHub 网站上去。
|
||||
|
||||
又有一天,我父亲正在审查一个旨在检测依赖关系中的漏洞的机器人的 <ruby>拉取请求<rt>PR</rt></ruby>。
|
||||
|
||||
后来,我思考了 GitHub CLI 和这个机器人,并想知道 GitHub CLI 本身是否被一个安全机器人所监控。事实证明它没有。
|
||||
|
||||
所以我创建了一个修复程序,并包含了 GitHub CLI 的安全审计。
|
||||
|
||||
令我高兴的是,我的贡献被接受了。它被合并到了项目中,这对我来说是一个激动人心的时刻。能为一个像 GitHub CLI 这样受欢迎的工具的重要项目作出贡献,并帮助保护它,是一个极好的机遇。这是我的 PR 的链接:[https://github.com/cli/cli/pull/4473][6]
|
||||
|
||||
### 提交你的代码
|
||||
|
||||
我希望我的故事能激励其他年轻人去探索并为开源世界做出贡献。年龄并不是障碍。每个人都应该探索和贡献。如果你想看看我的网站,请到 [neilnaveen.dev][7]。你也可以看看我的 [Leetcode 个人资料][8]。如果你有兴趣,可以看看我在 [CloudNativeSecurityCon][9] 的演讲记录。
|
||||
|
||||
我很感激迄今为止我所拥有的机会,我很兴奋地期盼我的未来。谢谢你阅读我的故事!
|
||||
|
||||
(LCTT 校注:我也接触过几位初中生,他们在技术和开源方面有这浓厚的兴趣,并取得了令人称道的进展。所以,看到这篇文章的同学们,你也可以的!)
|
||||
|
||||
(题图:MJ:Kids programming learning carton)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/my-first-code-contribution-age-14
|
||||
|
||||
作者:[Neil Naveen][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[hanszhao80](https://github.com/hanszhao80)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/neilnaveen
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/article/18/11/learning-golang
|
||||
[2]: https://codecombat.com
|
||||
[3]: https://leetcode.com/neilnaveen
|
||||
[4]: https://www.codingame.com/profile/0fa733a2c7f92a829e4190625b5b9a485718854
|
||||
[5]: https://github.com/cli/cli
|
||||
[6]: https://github.com/cli/cli/pull/4473
|
||||
[7]: https://neilnaveen.dev
|
||||
[8]: https://leetcode.com/neilnaveen/
|
||||
[9]: https://www.youtube.com/watch?v=K6NRUGol-rE
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/15/090228sa3z0p8pt3bre9vt.jpg
|
@ -0,0 +1,341 @@
|
||||
[#]: subject: "How to Install CRI-O (Container Runtime) on Ubuntu 22.04"
|
||||
[#]: via: "https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/"
|
||||
[#]: author: "James Kiarie https://www.linuxtechi.com/author/james/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15687-1.html"
|
||||
|
||||
如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
CRI-O 是 Kubernetes 的开源轻量级容器运行时。它是使用 <ruby>开放容器组织<rt>Open Container Initiative</rt></ruby>(OCI)兼容运行时的 Kubernetes <ruby>容器运行时接口<rt>Container Runtime Interface</rt></ruby>(CRI)的实现。在运行 Kubernetes 时,它是 Docker 的完美替代品。
|
||||
|
||||
在本指南中,我们将逐步演示如何在 Ubuntu 22.04 LTS 上安装 CRI-O。
|
||||
|
||||
### 先决条件
|
||||
|
||||
在开始之前,这是你需要的:
|
||||
|
||||
- 具有 SSH 访问权限的 Ubuntu 22.04 实例
|
||||
- 在实例上配置的 sudo 用户
|
||||
- 快速稳定的互联网连接
|
||||
|
||||
有了这个,让我们开始吧。
|
||||
|
||||
### 步骤 1:更新系统并安装依赖
|
||||
|
||||
立即登录你的服务器实例,并按如下方式更新包列表:
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
```
|
||||
|
||||
更新本地包索引后,按如下方式安装依赖项:
|
||||
|
||||
```
|
||||
$ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
|
||||
```
|
||||
|
||||
### 步骤 2:添加 CRI-O 存储库
|
||||
|
||||
要安装 CRI-O,我们需要在 Ubuntu 上添加或启用它的仓库。但首先,你需要根据操作系统和要安装的 CRI-O 版本定义变量。
|
||||
|
||||
因此,定义如下变量:
|
||||
|
||||
```
|
||||
$ export OS=xUbuntu_22.04
|
||||
$ export CRIO_VERSION=1.24
|
||||
```
|
||||
|
||||
完成后,运行以下命令集以添加 CRI-O Kubic 仓库:
|
||||
|
||||
```
|
||||
$ echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
|
||||
$ echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list
|
||||
```
|
||||
|
||||
![][1]
|
||||
|
||||
此后,为 CRI-O 仓库导入 GPG 密钥:
|
||||
|
||||
```
|
||||
$ curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add -
|
||||
$ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -
|
||||
```
|
||||
|
||||
这会产生如下输出:
|
||||
|
||||
![][2]
|
||||
|
||||
再次更新包索引,使系统与新添加的 CRI-O Kubic 仓库同步:
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
```
|
||||
|
||||
### 步骤 3:在 Ubuntu 22.04 上安装 CRI-O
|
||||
|
||||
添加仓库后,使用 APT 包管理器安装 CRI-O 和运行时客户端:
|
||||
|
||||
```
|
||||
$ sudo apt install cri-o cri-o-runc -y
|
||||
```
|
||||
|
||||
![][3]
|
||||
|
||||
安装后,启动并启用 CRI-O 守护程序:
|
||||
|
||||
```
|
||||
$ sudo systemctl start crio
|
||||
$ sudo systemctl enable crio
|
||||
```
|
||||
|
||||
接下来,验证 CRI-O 服务是否正在运行:
|
||||
|
||||
```
|
||||
$ sudo systemctl status crio
|
||||
```
|
||||
|
||||
你应该看到以下输出,表明 CRI-O 服务正在按预期运行:
|
||||
|
||||
![][4]
|
||||
|
||||
### 步骤 4:为 CRI-O 安装 CNI 插件
|
||||
|
||||
接下来,你需要安装 CNI(<ruby>容器网络接口<rt>Container Network Interface</rt></ruby>)以及 CNI 插件。请记住,环回和桥接配置已启用并且足以使用 CRI-O 运行 <ruby>容器荚<rt>Pod</rt></ruby>:
|
||||
|
||||
因此,要安装 CNI 插件,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo apt install containernetworking-plugins -y
|
||||
```
|
||||
|
||||
安装后,编辑 CRI-O 配置文件:
|
||||
|
||||
```
|
||||
$ sudo nano /etc/crio/crio.conf
|
||||
```
|
||||
|
||||
取消注释 `network_dir` 和 `plugin_dirs` 部分,并在 `plugin_dirs` 下添加 `/usr/lib/cni/`。
|
||||
|
||||
![][5]
|
||||
|
||||
保存更改并退出配置文件。
|
||||
|
||||
接下来,重启 CRIO 服务:
|
||||
|
||||
```
|
||||
$ sudo systemctl restart crio
|
||||
```
|
||||
|
||||
### 步骤 5:安装 CRI-O 工具
|
||||
|
||||
此外,你还需要安装 `cri-tools` 包,它提供了 `crictl` 命令行程序,用于交互和管理容器和 pod。
|
||||
|
||||
为此,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo apt install -y cri-tools
|
||||
```
|
||||
|
||||
安装后,确认 `crictl` 的版本和 `RunTimeVersion` 如下:
|
||||
|
||||
```
|
||||
$ sudo crictl --runtime-endpoint unix:///var/run/crio/crio.sock version
|
||||
```
|
||||
|
||||
![][6]
|
||||
|
||||
一定要检查 CRI-O 是否准备好使用以下命令部署容器荚:
|
||||
|
||||
```
|
||||
$ sudo crictl info
|
||||
```
|
||||
|
||||
![][7]
|
||||
|
||||
`crictl` 命令提供自动补全功能,让你可以通过按 `TAB` 键自动补全命令。要启用命令补全,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo su -
|
||||
|
||||
# crictl completion > /etc/bash_completion.d/crictl
|
||||
```
|
||||
|
||||
然后重新加载当前的 Bash 会话:
|
||||
|
||||
```
|
||||
# source ~/.bashrc
|
||||
```
|
||||
|
||||
![][8]
|
||||
|
||||
要使用自动补全功能,你需要注销或启动新的终端会话。然后只需键入 `crictl` 命令并按 `TAB` 键即可查看所有选项。
|
||||
|
||||
```
|
||||
$ crictl
|
||||
```
|
||||
|
||||
![][9]
|
||||
|
||||
### 步骤 6:使用 crictl 程序创建容器荚
|
||||
|
||||
至此,CRI-O 已完全安装和配置并准备好启动容器荚。在本节中,我们将在容器荚中创建一个 Apache Web 服务器并确认它是否正在处理请求。
|
||||
|
||||
首先,我们将使用容器荚配置文件设置一个沙箱或隔离环境,如下所示:
|
||||
|
||||
```
|
||||
$ sudo nano apache_sandbox.json
|
||||
```
|
||||
|
||||
然后我们将以下配置添加到文件中:
|
||||
|
||||
```
|
||||
{
|
||||
"metadata": {
|
||||
"name": "apache-sandbox",
|
||||
"namespace": "default",
|
||||
"attempt": 1,
|
||||
"uid": "hdishd83djaidwnduwk28bcsb"
|
||||
},
|
||||
"linux": {
|
||||
},
|
||||
"log_directory": "/tmp"
|
||||
}
|
||||
```
|
||||
|
||||
保存并退出。接下来使用以下命令创建容器荚。这会打印出很长的字母数字,它是容器荚 ID。
|
||||
|
||||
```
|
||||
$ sudo crictl runp apache_sandbox.json
|
||||
```
|
||||
|
||||
要确认容器荚已创建,请运行命令:
|
||||
|
||||
```
|
||||
$ sudo crictl pods
|
||||
```
|
||||
|
||||
![][10]
|
||||
|
||||
要检索有关创建的容器荚的更多信息,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo crictl inspectp --output table 05ba2f0704f22
|
||||
```
|
||||
|
||||
这将打印出 ID、名称、UID、命名空间、创建日期、内部 IP 等详细信息。
|
||||
|
||||
![][11]
|
||||
|
||||
### 步骤 7:在容器荚中创建容器
|
||||
|
||||
这部分中,我们将在容器荚中创建一个 Apache Web 服务器容器。因此,使用 `crictl` 程序从 Docker Hub 拉取 Apache Web 服务器镜像:
|
||||
|
||||
```
|
||||
$ sudo crictl pull httpd
|
||||
```
|
||||
|
||||
你可以如图所示验证拉取的镜像:
|
||||
|
||||
```
|
||||
$ sudo crictl images
|
||||
```
|
||||
|
||||
![][12]
|
||||
|
||||
接下来,我们将为 Apache Web 服务器定义一个容器配置文件:
|
||||
|
||||
```
|
||||
$ sudo nano container_apache.json
|
||||
```
|
||||
|
||||
复制并粘贴以下代码:
|
||||
|
||||
```
|
||||
{
|
||||
"metadata": {
|
||||
"name": "apache"
|
||||
},
|
||||
"image":{
|
||||
"image": "httpd"
|
||||
},
|
||||
"log_path":"apache.0.log",
|
||||
"linux": {
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
保存并退出配置文件。
|
||||
|
||||
最后,要将容器连接到之前创建的沙盒容器荚,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo crictl create 05ba2f0704f22 container_apache.json apache_sandbox.json
|
||||
```
|
||||
|
||||
这会向终端输出一长串字母数字 ID。请记下此 ID。
|
||||
|
||||
最后,使用 ID 启动 Apache Web 服务器容器,如下所示:
|
||||
|
||||
```
|
||||
$ sudo crictl start 37f4d26510965452aa918f04d629f5332a1cd398d4912298c796942e22f964a7
|
||||
```
|
||||
|
||||
![][13]
|
||||
|
||||
要检查容器状态,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo crictl ps
|
||||
```
|
||||
|
||||
![][14]
|
||||
|
||||
要验证 Apache Web 服务器是否正在运行,请使用 `curl` 命令和容器荚的内部 ID 向 Web 服务器发送 HTTP 请求:
|
||||
|
||||
```
|
||||
$ curl -I 10.85.0.2
|
||||
```
|
||||
|
||||
以下输出确认 Web 服务器正在运行:
|
||||
|
||||
![][15]
|
||||
|
||||
### 结论
|
||||
|
||||
这就是全部的指南。我们已经在 Ubuntu 22.04 上成功安装了 CRI-O,并继续创建容器荚和容器。欢迎你提出意见和反馈。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/
|
||||
|
||||
作者:[James Kiarie][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linuxtechi.com/author/james/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Set-Crio-Repository-Ubuntu-Linux.png
|
||||
[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Import-GPG-Keys-for-Crio-Repository-Ubuntu-Linux.png
|
||||
[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Apt-Install-Crio-Ubuntu-Linux.png
|
||||
[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Start-Enable-Crio-Service-Ubuntu.png
|
||||
[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crio-Conf-Network-Plugins-Directory-Ubuntu.png
|
||||
[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Crio-Version-Check-Ubuntu-Linux.png
|
||||
[7]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Info-Command-Ubuntu.png
|
||||
[8]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Enable-Bash-Completion-Crictl-Command-Ubuntu.png
|
||||
[9]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Command-Options-Ubuntu.png
|
||||
[10]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Pods-Status-Ubuntu.png
|
||||
[11]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Inspect-Pod-Ubuntu-Linux.png
|
||||
[12]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-pull-image-ubuntu.png
|
||||
[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Create-Container-Inside-Pod-Ubuntu-Linux.png
|
||||
[14]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Pods-Status-Crictl-Command-Ubuntu.png
|
||||
[15]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Curl-Command-Httpd-Pod-Ubuntu.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/03/105419akd0pr3ns2n50nz0.jpg
|
@ -0,0 +1,276 @@
|
||||
[#]: subject: "NixOS Series #5: How to set up home-manager on NixOS?"
|
||||
[#]: via: "https://itsfoss.com/home-manager-nixos/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15697-1.html"
|
||||
|
||||
NixOS 系列 #5:如何在 NixOS 上设置主目录管理器
|
||||
======
|
||||
|
||||
在发表这篇文章之前,我解释了如何为一个单用户系统 [在 NixOS 中安装和删除软件包][1]。
|
||||
|
||||
但是,如果你正在供多个用户使用,有一个很好的方法来分别满足每个用户的需求。
|
||||
|
||||
在本指南中,我将指导你如何在 NixOS 上设置一个 <ruby>主目录管理器<rt>Home Manager</rt></ruby>,以及如何使用它来安装软件包。
|
||||
|
||||
如果你是新读者,本系列中讨论的一些资源包括:
|
||||
|
||||
- [使用 NixOS 的原因][2]
|
||||
- [在虚拟机上安装 NixOS][3]
|
||||
- [安装 NixOS 后要做的事情][4]
|
||||
|
||||
### 在 NixOS 上设置主目录管理器
|
||||
|
||||
在本指南中,我将指导你通过 2 种方式来设置主目录管理器:
|
||||
|
||||
- 独立的主目录管理器(使用单独的配置文件)
|
||||
- 作为一个 NixOS 模块(在 `configuration.nix` 文件中使用它)
|
||||
|
||||
那么,让我们从独立方式开始。
|
||||
|
||||
#### 独立安装的主目录管理器
|
||||
|
||||
如果你使用的是 NixOS 的稳定频道,你可以使用以下命令来配置主目录管理器:
|
||||
|
||||
```
|
||||
nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager
|
||||
```
|
||||
|
||||
在编写本指南时,稳定版是 `22.11`。
|
||||
|
||||
而 **如果你在一个不稳定的频道上**,请使用以下命令:
|
||||
|
||||
```
|
||||
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
|
||||
```
|
||||
|
||||
无论你使用稳定版还是不稳定版,下面的步骤都是一样的。
|
||||
|
||||
一旦完成,更新频道:
|
||||
|
||||
```
|
||||
nix-channel --update
|
||||
```
|
||||
|
||||
最后,使用下面的命令来安装主目录管理器:
|
||||
|
||||
```
|
||||
nix-shell '<home-manager>' -A install
|
||||
```
|
||||
|
||||
🛠️ 在安装时,可能会出现以下错误:
|
||||
|
||||
![安装主目录管理器时出现构建错误][5]
|
||||
|
||||
重新启动你的系统并再次使用安装命令,它将开始安装。
|
||||
|
||||
一旦完成,它将显示独立安装的主目录管理器的位置:
|
||||
|
||||
![主目录管理器在NixOS中的位置][6]
|
||||
|
||||
#### 将主目录管理器安装为 NixOS 模块
|
||||
|
||||
> ⚠️ 如果你选择将主目录管理器作为 NixOS 模块使用,你将需要 sudo 权限。
|
||||
|
||||
如果你在一个稳定的频道上(在写本文的时候,是 `22.11`),你可以使用下面的命令来添加主目录管理器的稳定频道:
|
||||
|
||||
```
|
||||
sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager
|
||||
```
|
||||
|
||||
而 **如果你使用的是不稳定通道或主通道**,则使用以下命令:
|
||||
|
||||
```
|
||||
sudo nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
|
||||
```
|
||||
|
||||
一旦你使用上面的任何一条命令完成了添加频道的工作,就用下面的方法更新频道:
|
||||
|
||||
```
|
||||
sudo nix-channel --update
|
||||
```
|
||||
|
||||
接下来,用以下方法打开 `configuration.nix` 文件:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/configuration.nix
|
||||
```
|
||||
|
||||
并在 `imports []` 中添加以下一行:
|
||||
|
||||
```
|
||||
<home-manager/nixos>
|
||||
```
|
||||
|
||||
![将主目录管理器安装为 NixOS 模块][7]
|
||||
|
||||
现在,跳到该行的末尾,在 `}` 前添加以下内容:
|
||||
|
||||
```
|
||||
home-manager.users.{username} = { pkgs, ... }: {
|
||||
home.packages = [ ] ;
|
||||
};
|
||||
```
|
||||
|
||||
![NixOS 配置文件中的主目录管理器模块的格式][8]
|
||||
|
||||
上面这一行是为了方便安装和删除软件包而添加的,我接下来会告诉你。
|
||||
|
||||
现在,[保存修改并退出 Nano][9] 文本编辑器。
|
||||
|
||||
接下来,重建配置,并做一个切换:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
但如果你使用的是稳定版,并使用上述命令,就会出现以下错误:
|
||||
|
||||
> 🛠️ 错误: 选项 `home-manager.users.user.home.stateVersion` 被使用但没有定义:
|
||||
|
||||
![错误: 选项 `home-manager.users.user.home.stateVersion` 已被使用但未被定义。][10]
|
||||
|
||||
要解决这个问题,你必须在你的主目录管理器块中添加 `home.stateVersion`。
|
||||
|
||||
在写这篇文章时,我正在运行 22.11,所以整个主目录管理器块看起来像这样:
|
||||
|
||||
```
|
||||
home-manager.users.{username} = { pkgs, ... }: {
|
||||
home.stateVersion = "22.11";
|
||||
home.packages = [ ] ;
|
||||
};
|
||||
```
|
||||
|
||||
![如何解决 `home-manager.users.user.home.stateVersion` 选项被使用但没有定义。][11]
|
||||
|
||||
保存修改,按 `Ctrl+O`,按回车键和 `Ctrl+X` 退出 Nano 文本编辑器。
|
||||
|
||||
现在,试着重建配置并再次进行切换,应该可以解决问题。
|
||||
|
||||
### 如何在 NixOS 上使用主目录管理器安装软件包
|
||||
|
||||
现在你已经安装了主目录管理器,如何用它来安装软件包:
|
||||
|
||||
#### 使用独立安装的主目录管理器
|
||||
|
||||
首先,用下面的方法打开配置文件:
|
||||
|
||||
```
|
||||
nano /home/$USER/.config/nixpkgs/home.nix
|
||||
```
|
||||
|
||||
跳到行末,在 `}` 前添加以下代码块:
|
||||
|
||||
```
|
||||
home.packages = [];
|
||||
```
|
||||
|
||||
现在,你所要做的就是在这两个大括号之间写上软件包的名称。
|
||||
|
||||
例如,如果我想安装 `htop`,我将得输入以下内容:
|
||||
|
||||
```
|
||||
home.packages = [pkgs.htop];
|
||||
```
|
||||
|
||||
是的,你通常要在软件包的名称后面加上 `pkgs.`。
|
||||
|
||||
但是,如果你想在每次安装新包时不使用 `pkgs.`,可以改变代码块的语法,如图所示:
|
||||
|
||||
```
|
||||
home.packages = with pkgs; [];
|
||||
```
|
||||
|
||||
而现在,你不再需要在每次安装时使用 `pkgs.`:
|
||||
|
||||
```
|
||||
home.packages = with pkgs; [htop];
|
||||
```
|
||||
|
||||
例如,在这里,我想安装 `htop`、`firefox`和 `libreoffice`,所以我的 `home` 块会看起来像这样:
|
||||
|
||||
![在 NixOS 上使用主目录管理器安装多个软件包][12]
|
||||
|
||||
一旦你完成了添加你喜欢的软件包,保存配置文件并使用以下命令来安装软件包:
|
||||
|
||||
```
|
||||
home-manager switch
|
||||
```
|
||||
|
||||
#### 使用 NixOS 模块方式
|
||||
|
||||
首先,用以下命令打开 `configuration.nix` 文件:
|
||||
|
||||
```
|
||||
sudo nano /etc/nixos/configuration.nix
|
||||
```
|
||||
|
||||
在配置部分,我已经添加了主目录管理器块,所以剩下的就是在 `home.packages = [ ];` 里面添加软件包的名称,格式如图所示:
|
||||
|
||||
```
|
||||
home.packages = [ pkgs.package_name ] ;
|
||||
```
|
||||
|
||||
> 💡我已经在上节提到软件包名称前你可以使用 `pkgs.` 。
|
||||
|
||||
例如,如果我想 [安装 htop][13]、Firefox 和 LibreOffice,那么我将添加:
|
||||
|
||||
```
|
||||
pkgs.htop pkgs.firefox pkgs.libreoffice
|
||||
```
|
||||
|
||||
然后我的主目录管理器块会看起来像这样:
|
||||
|
||||
![作为 NixOS 模块在主目录管理器中安装多个软件包][14]
|
||||
|
||||
现在,保存修改并退出文本编辑器。
|
||||
|
||||
接下来,重建配置并使用以下命令进行切换:
|
||||
|
||||
```
|
||||
sudo nixos-rebuild switch
|
||||
```
|
||||
|
||||
这是这样!软件包将很快被安装。
|
||||
|
||||
### 这就结束了
|
||||
|
||||
我认为你应该选择独立安装,因为你不需要使用超级用户的权限。另外,如果你运行一个有多个用户的系统,为不同的用户拥有不同的配置文件是相当方便的。
|
||||
|
||||
因此,除非你想用一个文件来实现各种目的,否则我认为没有其他理由使用模块选项。
|
||||
|
||||
就这样,我结束了 NixOS 的初学者系列。我希望它能给你一个足够好的平台来熟悉这个独特的 Linux 发行版。
|
||||
|
||||
💬 你喜欢 NixOS 系列文章吗?对于 NixOS 的初学者,我们还有什么要介绍的吗?请提供你的宝贵意见。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/home-manager-nixos/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lkxed][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/sagar/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://linux.cn/article-15645-1.html
|
||||
[2]: https://linux.cn/article-15606-1.html
|
||||
[3]: https://linux.cn/article-15624-1.html
|
||||
[4]: https://linux.cn/article-15663-1.html
|
||||
[5]: https://itsfoss.com/content/images/2023/02/building-error-while-installing-home-manager.png
|
||||
[6]: https://itsfoss.com/content/images/2023/02/location-of-home-manager-in-NixOS.png
|
||||
[7]: https://itsfoss.com/content/images/2023/02/install-home-manager-as-NixOS-module.png
|
||||
[8]: https://itsfoss.com/content/images/2023/02/syantax-for-home-manager-module-in-NixOS-config-file.png
|
||||
[9]: https://linuxhandbook.com/nano-save-exit/?ref=itsfoss.com
|
||||
[10]: https://itsfoss.com/content/images/2023/02/The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png
|
||||
[11]: https://itsfoss.com/content/images/2023/02/how-to-solve-The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png
|
||||
[12]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-using-home-manager-on-NixOS.png
|
||||
[13]: https://itsfoss.com/use-htop/
|
||||
[14]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-in-home-manager-as-a-NixOS-module.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/06/110641k8v9q1152hhhh114.jpg
|
@ -0,0 +1,107 @@
|
||||
[#]: subject: "3 surprising things Linux sysadmins can do with systemd"
|
||||
[#]: via: "https://opensource.com/article/23/3/3-things-you-didnt-know-systemd-could-do"
|
||||
[#]: author: "Alan Smithee https://opensource.com/users/alansmithee"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15685-1.html"
|
||||
|
||||
三件可以用 systemd 做的令人惊讶的事情
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 它不仅仅是为了让你的电脑启动得更快。
|
||||
|
||||
当 systemd 刚问世时,有很多关于它能加快启动时间的消息。这项功能对大多数人都有吸引力(对那些不重启的人来说就不那么重要了),所以在很多方面,这也是它今天仍然拥有的声誉。虽然 systemd 确实是在启动过程中并行启动服务起到了作用,但它的作用远不止于此。以下是你可能没有意识到 systemd 可以做的三件事,但你应该好好利用。
|
||||
|
||||
### 1、简化 Linux ps
|
||||
|
||||
如果你曾经使用过 `ps`,甚至只是 `top` 命令,那么你就会知道你的电脑一直都在运行数百个进程。有时,这正是你需要的信息,以便了解你的计算机或其用户在做什么。其他时候,你真正需要的是一个总体的概览。
|
||||
|
||||
`systemd-cgtop` 命令提供了一个基于<ruby>控制组<rt>cgroup</rt></ruby>任务安排的计算机负载的简单视图。[控制组][2] 对现代 Linux 很重要,基本上是容器和 Kubernetes 的底层支持结构(这也是云计算可以扩展的原因),但它们也是家庭电脑上的有用结构。例如,从 `systemd-cgtop` 的输出中,你可以看到用户进程的负载,而不是系统进程:
|
||||
|
||||
```
|
||||
Control Group Proc+ %CPU Memory Input/s Output/s
|
||||
/ 183 5.0 1.6G 0B 3.0M
|
||||
user.slice 4 2.8 1.1G 0B 174.7K
|
||||
user.slice/user-1000.slice 4 2.8 968.2M 0B 174.7K
|
||||
system.slice 65 2.2 1.5G 0B 2.8M
|
||||
```
|
||||
|
||||
你也可以只查看你的用户空间进程,或者查看用户空间进程和内核线程。
|
||||
|
||||
这绝不是对 `top` 或 `ps` 的替代,而是从一个不同的、独特的角度来观察你的系统。在运行容器时,它可能是至关重要的,因为容器使用控制组。
|
||||
|
||||
### 2、Linux 定时任务
|
||||
|
||||
[Cron][3] 是 Linux 的一个经典组件。当你想安排一些事情定期发生时,你会使用 Cron。它很可靠,而且相当好地集成到你的系统中。
|
||||
|
||||
问题是,Cron 并不了解有些计算机会被关闭。如果你有一个安排在午夜的 Cron 任务,但你每天在 23:59 关闭你的电脑,那么你的 Cron 任务就永远不会运行。Cron 没有任何工具可以检测到一夜之间错过了工作。
|
||||
|
||||
作为对这个问题的回答,有一个很好的 [Anacron][4],但它不像 Cron 那样集成的好。要让 Anacron 运行,你需要做很多设置。
|
||||
|
||||
第二个选择是 systemd 计时器。和 Cron 一样,它也是内置的,可以随时使用。你需要写一个单元文件,这肯定比单行的 Crontab 条目多,但也很简单。例如,这里有一个单元文件,在开机 30 分钟后运行一个假想的备份脚本,但每天只运行一次。这可以确保我的电脑得到备份,并防止它每天尝试备份超过一次。
|
||||
|
||||
```
|
||||
[Unit]
|
||||
Description=Backup
|
||||
Requires=myBackup.service
|
||||
|
||||
[Timer]
|
||||
OnBootSec=30min
|
||||
OnUnitActiveSec=1d
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
```
|
||||
|
||||
当然,你也可以干预并提示运行一个任务。多亏了 `OnUnitActiveSec` 指令,systemd 不会试图运行你手动激活的作业。
|
||||
|
||||
### 3、运行 Linux 容器
|
||||
|
||||
容器使启动一个复杂的服务变得非常容易。你可以在短短几分钟内运行一个 [Mattermost][5] 或 Discourse 服务器。在某些情况下,困难的部分是在你运行容器后管理和监控它们。Podman 使得管理它们变得容易,但是用什么来管理 Podman 呢?嗯,[你可以使用 systemd][6]。
|
||||
|
||||
Podman 有一个内置的命令来生成单元文件,这样你的容器就可以被 systemd 管理和监控:
|
||||
|
||||
```
|
||||
$ podman generate systemd --new --files --name example_pod
|
||||
```
|
||||
|
||||
然后你所要做的就是启动服务:
|
||||
|
||||
```
|
||||
$ systemctl --user start pod-example_pod.service
|
||||
```
|
||||
|
||||
和其他服务一样,systemd 确保你的容器荚在任何情况下都能运行。它记录问题,你可以用 `journalctl` 和其他重要的日志来查看,你也可以用 `systemd-cgtop` 在控制组中监控它的活动。
|
||||
|
||||
它不是 [Kubernetes 平台][7],但对于一两个容器来说,你只需要在可靠和可预测的基础上提供服务,Podman 和 systemd 是一对很棒的组合。
|
||||
|
||||
### 下载 systemd 电子书
|
||||
|
||||
systemd 的内容还有很多,你可以从作者 [David Both][8] 的新书《[systemd 实用指南][1]》中了解基础知识,以及很多实用的技巧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/3-things-you-didnt-know-systemd-could-do
|
||||
|
||||
作者:[Alan Smithee][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/alansmithee
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/downloads/pragmatic-guide-systemd-linux
|
||||
[2]: https://www.redhat.com/sysadmin/cgroups-part-four?intcmp=7013a000002qLH8AAM
|
||||
[3]: https://opensource.com/article/17/11/how-use-cron-linux
|
||||
[4]: https://opensource.com/article/21/2/linux-automation
|
||||
[5]: https://opensource.com/education/16/3/mattermost-open-source-chat
|
||||
[6]: https://www.redhat.com/sysadmin/podman-run-pods-systemd-services?intcmp=7013a000002qLH8AAM
|
||||
[7]: https://www.redhat.com/en/technologies/cloud-computing/openshift/aws?intcmp=7013a000002qLH8AAM
|
||||
[8]: https://opensource.com/users/dboth
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/02/135545u0rwtqdemqefme3e.jpg
|
@ -0,0 +1,68 @@
|
||||
[#]: subject: "Open source tools for mind mapping"
|
||||
[#]: via: "https://opensource.com/article/23/3/open-source-mind-mapping"
|
||||
[#]: author: "Amrita https://opensource.com/users/amrita42"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15708-1.html"
|
||||
|
||||
开源思维导图工具
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 使用思维导图与开源工具来做一个有影响力的演示。
|
||||
|
||||
在今天的世界和社交媒体中,许多人没有耐心阅读冗长的文字内容。视觉效果是吸引受众注意力的好方法。
|
||||
|
||||
你知道吗,3M 公司的研究得出结论,视觉的处理速度是文字的 60,000 倍?视觉比文字更有冲击力,能增强创造性思维和记忆。
|
||||
|
||||
### 一图胜千言
|
||||
|
||||
我收集了一些常见的 [Git 命令][1]。我把 Git 命令作为主话题,每个子话题都是一个带有定义的 Git 命令语法。为此,我使用了 Wisemapping。
|
||||
|
||||
![A git command mind map][2]
|
||||
|
||||
不管你以前是否知道 [思维导图][3] 是什么,现在你看到了思维导图,你就可以理解这个概念了。这就是视觉的力量。
|
||||
|
||||
### 如何创建一个思维导图?
|
||||
|
||||
- 从主话题开始,把它放在你的画板中间。
|
||||
- 创建子话题并将它们与主话题联系起来。
|
||||
- 你可以为每个子话题添加细节,如定义、例子等。
|
||||
|
||||
### 3 个你可以用来创建思维导图的开源工具
|
||||
|
||||
看看这三个开源工具,为你的想法创建一个视觉:
|
||||
|
||||
- [Wisemapping][4]
|
||||
- [Freeplane][5]
|
||||
- [Semantik][6]
|
||||
|
||||
维基百科对思维导图的定义是:将信息直观地组织成一个层次结构,显示整体中各部分之间的关系。思维导图从一个中心话题开始,然后建立起关系。它是一种结构化思想和创造有影响力的演示的视觉方式。
|
||||
|
||||
你可以在工作中使用思维导图。例如,我用思维导图来展示一个项目所计划的功能的高层概述。有了这些优秀的开源思维导图应用,你很容易就能开始将你的下一个项目可视化。试试用开源的思维导图吧。
|
||||
|
||||
*(题图:MJ:Thinking Brainstorming Creativity Ideas Discussion Illustrations Blue Gold Simplicity)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/open-source-mind-mapping
|
||||
|
||||
作者:[Amrita][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/amrita42
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/downloads/cheat-sheet-git
|
||||
[2]: https://opensource.com/sites/default/files/2023-03/mindmap.jpg
|
||||
[3]: https://opensource.com/article/21/12/open-source-mind-mapping-drawio
|
||||
[4]: https://www.wisemapping.com/
|
||||
[5]: https://opensource.com/article/19/1/productivity-tool-freeplane
|
||||
[6]: https://waf.io/semantik.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/10/114653pwq2z2md5mootf05.jpg
|
@ -0,0 +1,149 @@
|
||||
[#]: subject: "How to Install and Use Neovim on Ubuntu and other Linux Distributions"
|
||||
[#]: via: "https://itsfoss.com/install-neovim/"
|
||||
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15680-1.html"
|
||||
|
||||
如何安装和使用 Neovim
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 你一定已经听说过著名的 Vim 文本编辑器。然而,这篇文章是关于它的复刻 Neovim。
|
||||
|
||||
Vim 也是 Vi 的一个复刻,这使得 Neovim 成为复刻的复刻。所以,你最终可以使用任何东西,因为它有一些独特的特征。
|
||||
|
||||
如果你决定使用 Neovim,让我帮助你在 Ubuntu 和其他 Linux 发行版上开始使用它。
|
||||
|
||||
### Neovim 概述
|
||||
|
||||
![][2]
|
||||
|
||||
[Neovim][3] 是一个以其简单的维护和社区贡献而闻名的项目。此外,开发工作很好地分配在多个开发人员之间。
|
||||
|
||||
对于最终用户而言,Neovim 的可扩展性远超人们的预期。Neovim 的目标是在不损害 Vim 传统功能的情况下提供更好的应用。
|
||||
|
||||
使用 [Neovim 的 GUI][4],你可以获得增强的编辑体验。
|
||||
|
||||
### Neovim 的特点
|
||||
|
||||
虽然你可以在其官方网站及其 [GitHub 页面][5] 上探索所有相关信息。让我强调一些特点:
|
||||
|
||||
- 现代图形界面
|
||||
- 从多种语言访问 API,包括(C/C++、C#、Go、Haskell、Java/Kotlin、JavaScript/Node.js、Lua、Perl、Python、Ruby、Rust 等等)
|
||||
- 嵌入式、可编写脚本的终端仿真器
|
||||
- 异步任务控制
|
||||
- 多个实例之间的共享数据
|
||||
- XDG 基本目录支持
|
||||
- 与大多数 Vim 插件兼容,包括 Ruby 和 Python 插件
|
||||
|
||||
> 💡 我们建议你在开始使用 Vim 和 Neovim 之前,先了解其用法。
|
||||
|
||||
### 在 Ubuntu 和 Linux 上安装 Neovim
|
||||
|
||||
由于 Neovim 的流行,安装它很简单。因为 Neovim 在你选择的任何发行版的官方仓库中都可用。
|
||||
|
||||
> 如果你需要,我们还有一个 [在 Linux 上安装 Vim][6] 的指南。
|
||||
|
||||
要在 Ubuntu 上安装 Neovim,只需单击停靠区中的 Ubuntu 软件图标。然后,搜索 Neovim。你可以根据自己的喜好选择 Snap 或 deb 版本。但是,deb 包版本是过时的 Neovim 版本。
|
||||
|
||||
![neovim listed on ubuntu software center][7]
|
||||
|
||||
如果你不想要 Snap 版本,你可以从 [Neovim 的 Github 发布页][8] 获取最新的 deb 文件。如果你仔细查看发布页面,还有一个 Appimage 文件。
|
||||
|
||||
如果你想使用终端而不是 GUI,你可以执行以下操作:
|
||||
|
||||
对于基于 **Ubuntu 和 Debian** 的发行版,输入以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install neovim
|
||||
```
|
||||
|
||||
对于 **Manjaro 和 Arch Linux**,使用以下命令更新你的系统并安装 Neovim:
|
||||
|
||||
```
|
||||
sudo pacman -Syu neovim
|
||||
```
|
||||
|
||||
对于 **Fedora**,使用以下命令:
|
||||
|
||||
```
|
||||
sudo dnf install -y neovim
|
||||
```
|
||||
|
||||
要安装 **Flatpak**,你可以使用此命令:
|
||||
|
||||
```
|
||||
flatpak install flathub io.neovim.nvim
|
||||
```
|
||||
|
||||
最后,要安装 **Snap 包**,请使用以下命令:
|
||||
|
||||
```
|
||||
sudo snap install nvim --classic
|
||||
```
|
||||
|
||||
如果你更喜欢从源代码构建软件,请遵循该项目的 Github 页面上给出的 [步骤][9]。
|
||||
|
||||
### 如何使用 Neovim
|
||||
|
||||
要在安装完成后使用 Neovim,只需从应用菜单启动它,方法是按超级键并输入 `neovim`。这将打开一个带有 Neovim 的终端窗口。
|
||||
|
||||
![][10]
|
||||
|
||||
或者你可以打开你选择的任何终端仿真器并输入以下命令:
|
||||
|
||||
```
|
||||
nvim
|
||||
```
|
||||
|
||||
是的,不是 `neovim`,而是 `nvim`。例如,要编辑 `/etc/fstab`,请输入以下命令:
|
||||
|
||||
```
|
||||
sudo nvim /etc/fstab
|
||||
```
|
||||
|
||||
现在 fstab 文件将被打开,如下面的截图所示:
|
||||
|
||||
![][11]
|
||||
|
||||
如果你无法退出编辑器,请不要担心,按下 `Shift+Z+Z`。例如,如果此快捷键令人困惑,请使用你需要的键在任何文本编辑器中输入大写的 `ZZ` 就明白了。
|
||||
|
||||
关于这一点,我应该重申,你需要学习 Vim 或 Neovim 并阅读文档才能有效地利用其所有功能。
|
||||
|
||||
### 总结
|
||||
|
||||
安装和启动 Neovim 非常简单,但学习它肯定需要一些键盘操作。
|
||||
|
||||
这只是编辑器的概述。我不是这方面的专家,但我希望这对所有初学者都有好处!
|
||||
|
||||
💬 你使用 Neovim 吗? 在下面的评论中分享你的经验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-neovim/
|
||||
|
||||
作者:[Anuj Sharma][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/anuj/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[2]: https://itsfoss.com/content/images/2023/03/goneovim.png
|
||||
[3]: https://neovim.io/?ref=itsfoss.com
|
||||
[4]: https://itsfoss.com/neovim-gui-editors/
|
||||
[5]: https://github.com/neovim/neovim?ref=itsfoss.com
|
||||
[6]: https://itsfoss.com/install-latest-vim-ubuntu/
|
||||
[7]: https://itsfoss.com/content/images/2023/01/software-center-neovim-snap.png
|
||||
[8]: https://github.com/neovim/neovim/releases/tag/stable?ref=itsfoss.com
|
||||
[9]: https://github.com/neovim/neovim/wiki/Installing-Neovim?ref=itsfoss.com#install-from-source
|
||||
[10]: https://itsfoss.com/content/images/2023/01/neovim-default-screen.png
|
||||
[11]: https://itsfoss.com/content/images/2023/01/neovim-fstab.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/01/173733iav3pvd88htv38vt.jpg
|
@ -0,0 +1,135 @@
|
||||
[#]: subject: "How to Install Kubernetes (k8s) Metrics Server Step by Step"
|
||||
[#]: via: "https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/"
|
||||
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15714-1.html"
|
||||
|
||||
如何逐步安装 Kubernetes(k8s)指标服务器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在这篇文章中,我们将逐步介绍如何安装 Kubernetes 指标服务器。
|
||||
|
||||
Kubernetes(k8s)指标服务器是一个组件,用于收集和聚合来自 Kubernetes 集群中各种来源(包括节点和 <ruby>容器荚<rt>Pod</rt></ruby>)的指标数据。此数据可用于监控和优化资源利用率、识别潜在问题并提高 Kubernetes 集群的整体性能。
|
||||
|
||||
指标服务器收集资源利用率数据,例如集群中节点和容器荚的 CPU 和内存使用情况。它提供了一个 API 端点,可用于查询此数据并检索集群中特定资源的指标。
|
||||
|
||||
##### 先决条件
|
||||
|
||||
- 启动并运行 Kubernetes 集群(v1.21 或更高版本)。
|
||||
- `kubectl` 命令行工具已安装,并配置为与你的 Kubernetes 集群交互。
|
||||
- 创建和修改 Kubernetes 对象的能力。
|
||||
|
||||
事不宜迟,让我们深入了解安装步骤。
|
||||
|
||||
### 步骤 1 下载指标服务器清单
|
||||
|
||||
第一步是从 Kubernetes GitHub 仓库下载最新的指标服务器清单文件。使用下面的 `curl` 命令下载 yaml 文件:
|
||||
|
||||
```
|
||||
# curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
|
||||
```
|
||||
|
||||
![][1]
|
||||
|
||||
如果你计划在高可用性模式下安装指标服务器,请下载以下清单文件:
|
||||
|
||||
```
|
||||
# curl https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml
|
||||
```
|
||||
|
||||
### 步骤 2 修改指标服务器 Yaml 文件
|
||||
|
||||
接下来,你需要修改指标服务器的 yaml 文件以设置一些配置选项:
|
||||
|
||||
```
|
||||
# vi components.yaml
|
||||
```
|
||||
|
||||
找到 `container` 下的 `args` 部分,添加以下行:
|
||||
|
||||
```
|
||||
- --kubelet-insecure-tls
|
||||
```
|
||||
|
||||
在 `spec` 下,添加以下参数:
|
||||
|
||||
```
|
||||
hostNetwork: true
|
||||
```
|
||||
|
||||
![][2]
|
||||
|
||||
保存并关闭文件。
|
||||
|
||||
### 步骤 3 部署指标服务器
|
||||
|
||||
现在,我们准备好部署指标服务器,运行以下 `kubectl` 命令:
|
||||
|
||||
```
|
||||
# kubectl apply -f components.yaml
|
||||
```
|
||||
|
||||
![][3]
|
||||
|
||||
### 步骤 4 验证指标服务器部署
|
||||
|
||||
部署指标服务器后,通过检查在 `kube-system` 命名空间中运行的容器荚状态来验证它的状态:
|
||||
|
||||
```
|
||||
# kubectl get pods -n kube-system
|
||||
```
|
||||
|
||||
![][4]
|
||||
|
||||
上面的输出确认指标服务器容器荚已启动并正在运行。
|
||||
|
||||
### 步骤 5 测试指标服务器安装
|
||||
|
||||
最后,你可以通过运行以下 `kubectl` 命令来测试指标服务器:
|
||||
|
||||
```
|
||||
# kubectl top nodes
|
||||
```
|
||||
|
||||
此命令应显示集群中每个节点的资源利用率,包括 CPU 和内存使用率。
|
||||
|
||||
![][5]
|
||||
|
||||
要查看当前命名空间或特定命名空间的容器荚资源利用率,请运行:
|
||||
|
||||
```
|
||||
# kubectl top pod
|
||||
# kubectl top pod -n kube-system
|
||||
```
|
||||
|
||||
![][6]
|
||||
|
||||
这就是这篇文章的全部内容,我希望你能从中找到有用的信息。请在下面的评论部分发表你的反馈和疑问。
|
||||
|
||||
*(题图:MJ: Kubernetes container paper art light blue background ultra-detailed topview)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/
|
||||
|
||||
作者:[Pradeep Kumar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linuxtechi.com/author/pradeep/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Download-Metrics-Server-Yaml-file-Curl-Command-1024x127.png?ezimgfmt=ng:webp/ngcb22
|
||||
[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Edit-Metrics-Server-Yaml-file.png
|
||||
[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Deploy-Metrics-Server-Kubectl-Command.png
|
||||
[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Metrics-Server-Pods-Status-Kube-System.png
|
||||
[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubectl-top-node-command-Output.png?ezimgfmt=ng:webp/ngcb22
|
||||
[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubectl-top-pod-command-output.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/12/100919k6p6yyweu6nv6nkh.jpg
|
@ -0,0 +1,92 @@
|
||||
[#]: subject: "blendOS Aims to Replace All Linux Distributions"
|
||||
[#]: via: "https://news.itsfoss.com/blendos/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15684-1.html"
|
||||
|
||||
blendOS 的目标:取代所有的 Linux 发行版
|
||||
======
|
||||
|
||||
> Ubuntu Unity 的负责人提出了一个新的发行版,听起来像是每个人都可能想要关注的东西。
|
||||
|
||||
![blend os][1]
|
||||
|
||||
听起来太牵强了?
|
||||
|
||||
好吧,blendOS 把自己定位为发行版的终极杂拌。
|
||||
|
||||
blendOS 是 Rudra Saraswat 的一个新项目,他以基于 Ubuntu 的合成版而闻名,特别是 Ubuntu Unity(现在是官方的 [Ubuntu 风味版][3])。
|
||||
|
||||
我想说的是,这个项目有一个非常准确的名字来表达它想要实现的目标。
|
||||
|
||||
但是,blendOS 的目标是如何成为所有人的替代品?它到底是什么?
|
||||
|
||||
### blendOS 不只是又一个 Linux 发行版
|
||||
|
||||
![blendOS][4]
|
||||
|
||||
blendOS 是一个基于 Arch 的发行版,它支持每种类型的应用程序包。
|
||||
|
||||
如果你了解过 [carbonOS][5] 和 [Vanilla OS][6],你应该对这类发行版中的一些共同点有了了解。
|
||||
|
||||
其中之一是,**不可变性**,意思是,操作系统的核心/基础保持不变,给你带来增强的安全性,以及更简单和可靠的更新。
|
||||
|
||||
同样,blendOS 也有以下的关键亮点:
|
||||
|
||||
- 不可变操作系统
|
||||
- 支持多个软件包管理器,包括 Apt、DNF、Yum、Pacman 和 Yay
|
||||
- 支持多种桌面环境
|
||||
- Flathub 商店桌面应用
|
||||
|
||||
[blendOS][7] 使用 Jade GUI(来自 [Crystal Linux][8] 的安装程序)来提供一个无缝的安装体验。而且,Flathub 商店可以直接安装应用程序,而不是像人们想象的那样下载 Flatpakref文件。
|
||||
|
||||
为了使所有的发行版的软件包都能正常工作,blendOS 使用其软件包管理器 blend。
|
||||
|
||||
你仍然可以通过 Arch 容器在命令行使用 Pacman。
|
||||
|
||||
此外,它还支持,T2 Mac,即 2018 年后生产的英特尔 Mac。因此,如果你想在你已经拥有的设备上做实验,blendOS 应该可以使用。
|
||||
|
||||
> 🚧 截至目前,该项目还处于早期发展阶段。
|
||||
|
||||
预计一些直接的变化包括:
|
||||
|
||||
![][9]
|
||||
|
||||
- 用 Podman 代替 Distrobox 的实现
|
||||
- 一个新的 GUI 配置工具,支持管理覆盖层和容器
|
||||
|
||||
所以,是的,你现在看到的东西可能会有变化。然而,它仍然是听起来令人激动的东西。
|
||||
|
||||
你可以在其 [官方博客文章][10] 中阅读其计划中的变化,并在其 [GitHub 页面][11]中探索 blendOS。
|
||||
|
||||
> **[blendOS][7]**
|
||||
|
||||
你对 blendOS 有什么看法?它值得关注吗?请在评论中告诉我!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/blendos/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/blendOS-first-look.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[3]: https://itsfoss.com/which-ubuntu-install/?ref=its-foss-news
|
||||
[4]: https://news.itsfoss.com/content/images/2023/03/blend-os.jpg
|
||||
[5]: https://news.itsfoss.com/carbonos/
|
||||
[6]: https://news.itsfoss.com/vanilla-os-debian-ubuntu/
|
||||
[7]: https://blendos.co/?ref=its-foss-news
|
||||
[8]: https://news.itsfoss.com/crystal-linux-dev/
|
||||
[9]: https://news.itsfoss.com/content/images/2023/03/blend-settings-containers.png
|
||||
[10]: https://blendos.co/future-of-blendos/?ref=its-foss-news
|
||||
[11]: https://github.com/blend-os?ref=its-foss-news
|
@ -0,0 +1,85 @@
|
||||
[#]: subject: "Use this open source accounting app to run your small business"
|
||||
[#]: via: "https://opensource.com/article/23/3/open-source-accounting-run-business"
|
||||
[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15703-1.html"
|
||||
|
||||
使用这个开源的会计应用来管理你的小企业
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 用 GnuCash 跟踪客户和发票的情况。
|
||||
|
||||
[GnuCash][1] 是一个强大而灵活的会计工具,可用于小企业的发票和会计。它的许多功能使它特别适合这一目的,包括跟踪支出和收入、生成报告和管理发票的能力。此外,GnuCash 是自由开源的,这使得资源有限的小企业也可以使用它。在这篇文章中,我会讨论 GnuCash 的特点,使你可以很容易地在自己的小企业中开始使用它。
|
||||
|
||||
几年前,我开始使用 GnuCash 进行个人财务管理,但发现它也可以作为我的小企业的一个有用工具。在我企业的大部分时间里,我一直在使用一个专有的解决方案。我逐渐厌倦了被迫定期升级以获取我的小企业的发票和报表。转而使用 GnuCash,使我能够在不牺牲任何功能的情况下,将我的小企业会计与我的个人财务相结合。
|
||||
|
||||
### 在 Linux 上安装 GnuCash
|
||||
|
||||
你可以从你的仓库中安装 GnuCash。在 Debian、Elementary 和类似的软件上:
|
||||
|
||||
```
|
||||
$ sudo apt install gnucash
|
||||
```
|
||||
|
||||
在 Fedora、CentOS、Mageia 和类似系统上:
|
||||
|
||||
```
|
||||
$ sudo dnf install gnucash
|
||||
```
|
||||
|
||||
### 企业版 GnuCash
|
||||
|
||||
GnuCash 带有一个账户设置向导,可以帮助你建立一个普通的商业账户配置。要访问它:
|
||||
|
||||
- 启动 GnuCash。
|
||||
- 点击 “<ruby>文件<rt>File</rt></ruby>” 菜单,选择 “<ruby>新文件<rt>New File</rt></ruby>”。
|
||||
|
||||
按照屏幕上出现的 GnuCash 助手来创建你的新商业账户文件。
|
||||
|
||||
屏幕上的说明将指导你完成设置业务的过程。单击 “<ruby>助手<rt>Assistant</rt></ruby>” 窗口右上角的 “<ruby>下一步<rt>Next</rt></ruby>”。系统会提示你输入公司名称、地址、联系信息和你自己选择的公司 ID。你还必须选择默认税表和日期格式。
|
||||
|
||||
下一个页面提示你选择货币,有大量的货币支持。
|
||||
|
||||
然后提示你选择你要创建的账户。选择创建 “<ruby>企业账户<rt>Business Accounts</rt></ruby>” 的选项。你可以随时定制账户列表,GnuCash 提供了 [大量的文档][2],帮助你更好地根据个人需求进行定制。
|
||||
|
||||
完成助手,然后单击 GnuCash “助手” 窗口右上角的 “<ruby>应用<rt>Apply</rt></ruby>”。
|
||||
|
||||
### 添加客户
|
||||
|
||||
GnuCash 的顶部菜单有一个标有 “<ruby>业务<rt>Business</rt></ruby>” 的菜单项。该菜单上的第一个项目是 “<ruby>客户<rt>Customers</rt></ruby>”,其次是 “<ruby>客户概览<rt>Customers Overview</rt></ruby>”。在这里你可以查看你所有客户的列表。
|
||||
|
||||
下一个项目是 “<ruby>新客户<rt>New Customer</rt></ruby>”。这是你输入新客户的地方。对话框为客户信息提供了一个位置,包括帐单信息、运输地址、电子邮件地址、电话号码等。
|
||||
|
||||
### 创建一个发票
|
||||
|
||||
添加客户后,你可以开始创建发票的过程。点击 “业务” 菜单,选择 “客户”,然后点击 “<ruby>新发票<rt>New Invoice</rt></ruby>”。
|
||||
|
||||
付款处理也很简单。这位于 “业务” 菜单中。选择 “客户”,然后 “<ruby>处理付款<rt>Process Payment</rt></ruby>”。
|
||||
|
||||
### 你在做生意了
|
||||
|
||||
如果你的业务需要,“业务” 菜单还包括输入供应商和雇员的选项。有一个菜单项用于销售税和许多其他选项,以确保你符合当地的要求。
|
||||
|
||||
使用 GnuCash,你的数据不是以专有格式存储的,所以如果你需要,你可以在将来迁移到任何其他平台。数据存储的开放标准,特别是当这些数据是法律要求的时候,是很重要的,可以让你完全拥有你的商业历史。使用 GnuCash 使你能控制你的小企业。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/open-source-accounting-run-business
|
||||
|
||||
作者:[Don Watkins][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/don-watkins
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.gnucash.org/
|
||||
[2]: https://www.gnucash.org/docs/v4/C/gnucash-guide/bus_setup.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/08/150133rfxheuuce1ufi99c.jpg
|
@ -0,0 +1,138 @@
|
||||
[#]: subject: "Create a ChatBot in Mattermost with Python"
|
||||
[#]: via: "https://opensource.com/article/23/3/chatbot-mattermost-python"
|
||||
[#]: author: "Dr. Michael J. Garbade https://opensource.com/users/drmjg"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15693-1.html"
|
||||
|
||||
使用 Python 在 Mattermost 中创建 ChatOps 聊天机器人
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 用一个简单的开源机器人在你的组织中实施 ChatOps。
|
||||
|
||||
ChatOps 是一种协作模型,它将人员、流程、工具和自动化连接到一个透明的工作流中。[Mattermost][1] 是一个开源、自托管的消息平台,使组织能够安全、有效和高效地进行通信。它是 Slack、Discord 和其他专有消息平台的绝佳 [开源替代品][2]。本文概述了在 Mattermost 上创建 ChatOps 机器人的步骤,包括必要的代码示例和解释。
|
||||
|
||||
### 先决条件
|
||||
|
||||
在开始之前,请确保你可以访问 Mattermost 服务器,[安装 Python][3],并 [使用 pip][4] 安装 Mattermost Python 驱动。
|
||||
|
||||
### 在 Mattermost 上创建一个机器人帐户
|
||||
|
||||
要创建机器人帐户,请访问 Mattermost 系统控制台,并添加具有适当访问权限的机器人帐户。获取机器人的用户名和密码以在 Python 脚本中使用。
|
||||
|
||||
### 设置 Mattermost Python 驱动
|
||||
|
||||
使用 `pip` 安装 Mattermost Python 驱动,并将其导入 Python 脚本。创建一个新的驱动实例并登录到 Mattermost 服务器。
|
||||
|
||||
### 在 Python 中创建 ChatOps 机器人
|
||||
|
||||
创建一个新的 Python 脚本,定义要导入的必要库,并使用 Mattermost 驱动的 API 实现机器人的功能。编写代码来处理消息、命令和其他事件,并使用 Mattermost 驱动的 API 方法向通道和用户发送消息和通知。最后,调试和测试 ChatOps 机器人。
|
||||
|
||||
### ChatOps 机器人代码示例
|
||||
|
||||
以下是响应用户消息的简单 ChatOps 机器人的示例 Python 代码:
|
||||
|
||||
```
|
||||
from mattermostdriver import Driver
|
||||
|
||||
bot_username = 'bot_username'
|
||||
bot_password = 'bot_password'
|
||||
server_url = 'https://your.mattermost.server.url'
|
||||
|
||||
def main():
|
||||
driver = Driver({'url': server_url, 'login_id': bot_username, 'password': bot_password, 'scheme': 'https'})
|
||||
driver.login()
|
||||
team = driver.teams.get_team_by_name('team_name')
|
||||
channel = driver.channels.get_channel_by_name(team['id'], 'channel_name')
|
||||
|
||||
@driver.on('message')
|
||||
def handle_message(post, **kwargs):
|
||||
if post['message'] == 'hello':
|
||||
driver.posts.create_post({
|
||||
'channel_id': post['channel_id'],
|
||||
'message': 'Hi there!'
|
||||
})
|
||||
|
||||
driver.init_websocket()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
```
|
||||
|
||||
### 添加功能
|
||||
|
||||
在 Mattermost 上创建基本的 ChatOps 机器人后,你可以添加更多功能来扩展其功能。以下是步骤:
|
||||
|
||||
- **确定要添加的功能**:在编写代码之前,你必须确定要添加到 ChatOps 机器人的功能。可以是从发送通知到与第三方工具集成的任何事情。
|
||||
- **编写代码**:确定要添加的功能后,就可以开始编写代码了。代码将取决于添加的功能,但你可以使用 Mattermost Python 驱动与 Mattermost API 交互并实现该功能。
|
||||
- **测试代码**:编写代码后,重要的是对其进行测试以确保其按预期工作。在将其部署到生产服务器之前,你可以在开发服务器或测试通道中测试代码。
|
||||
- **部署代码**:当你对其进行了测试并且它按预期工作,你就可以将其部署到你的生产服务器。遵循你组织的部署流程并确保新代码不会破坏任何现有功能。
|
||||
- **记录新功能**:记录你添加到 ChatOps 机器人的新功能非常重要。这将使其他团队成员更容易使用该机器人并了解其功能。
|
||||
|
||||
一个 ChatOps Bot 功能示例是与第三方工具集成并提供某些任务的状态更新。
|
||||
|
||||
```
|
||||
from mattermostdriver import Driver
|
||||
import requests
|
||||
|
||||
bot_username = 'bot_username'
|
||||
bot_password = 'bot_password'
|
||||
server_url = 'https://your.mattermost.server.url'
|
||||
|
||||
def main():
|
||||
driver = Driver({'url': server_url, 'login_id': bot_username, 'password': bot_password, 'scheme': 'https'})
|
||||
driver.login()
|
||||
team = driver.teams.get_team_by_name('team_name')
|
||||
channel = driver.channels.get_channel_by_name(team['id'], 'channel_name')
|
||||
|
||||
@driver.on('message')
|
||||
def handle_message(post, **kwargs):
|
||||
if post['message'] == 'status':
|
||||
# Make a request to the third-party tool API to get the status
|
||||
response = requests.get('https://api.thirdpartytool.com/status')
|
||||
if response.status_code == 200:
|
||||
status = response.json()['status']
|
||||
driver.posts.create_post({
|
||||
'channel_id': post['channel_id'],
|
||||
'message': f'The status is {status}'
|
||||
})
|
||||
else:
|
||||
driver.posts.create_post({
|
||||
'channel_id': post['channel_id'],
|
||||
'message': 'Failed to get status'
|
||||
})
|
||||
|
||||
driver.init_websocket()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
```
|
||||
|
||||
在此示例中,ChatOps 机器人监听命令 `status` 并向第三方工具 API 发出请求以获取当前状态。然后它会在发出命令的 Mattermost 频道中发布状态更新。这使团队成员无需离开聊天平台即可快速获取任务状态的更新。
|
||||
|
||||
### 开源 ChatOps
|
||||
|
||||
总之,在 Mattermost 上创建 ChatOps 机器人是一个简单的过程,可以为你组织的沟通和工作流程带来许多好处。本文提供了分步分解和代码示例,可帮助你开始创建你的机器人,甚至可以通过添加新功能对其进行自定义。现在你了解了基础知识,你可以进一步探索 ChatOps 和 Mattermost 以优化团队的协作和生产力。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/chatbot-mattermost-python
|
||||
|
||||
作者:[Dr. Michael J. Garbade][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/drmjg
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://mattermost.com/
|
||||
[2]: https://opensource.com/alternatives/slack
|
||||
[3]: https://opensource.com/article/17/10/python-101
|
||||
[4]: https://opensource.com/article/20/3/pip-linux-mac-windows
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/05/092837ab3y8zft3hhv02hr.jpg
|
@ -0,0 +1,189 @@
|
||||
[#]: subject: "Debian 12 Bookworm: Best New Features"
|
||||
[#]: via: "https://www.debugpoint.com/debian-12-features/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15694-1.html"
|
||||
|
||||
Debian 12 “Bookworm” 的新功能和改进
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 让我们给你总结一下即将发布的 Debian 12 “Bookworm” 的新功能和改进。
|
||||
|
||||
Debian 12 已经开发了几个月了,并且正在慢慢走向最终的发布版本。截止发稿时, 它当前正处于冻结状态下。这意味着预计不会有重大的软件包更改或改进。
|
||||
|
||||
这个发布版本带来一些新功能和改进,使其成为 Debian 爱好者期待的一个版本。在这篇文章中,我们将讨论 Debian 12 “Bookworm” 的最好的新功能,以及它们如何使用户受益。
|
||||
|
||||
让我们来看看。
|
||||
|
||||
![Debian 12 Bookworm GNOME Desktop][1]
|
||||
|
||||
### Debian 12 “Bookworm” 的新功能和改进
|
||||
|
||||
#### Linux 内核
|
||||
|
||||
这个发布版本采用了发布于 2022 年 12 月的 Linux 主线内核 6.1。从时间线上看,到目前为止,Debian 12 的内核版本号只比最新内核落后一个版本。因此,你将通过使用稳定的 Linux 内核 6.1 来获得最新的和最好的硬件支持。
|
||||
|
||||
这个内核的亮点功能包括:初步支持 Rust 框架、更新支持英特尔和 AMD 即将推出的 CPU/GPU 系列硬件、改善 Btrfs 和其它文件系统系统的性能等等。
|
||||
|
||||
如果你想要了解更多的话,我们已经有一篇关于 [内核 6.1 特性][2] 的专题文章。
|
||||
|
||||
#### 在安装程序中的非自由软件包
|
||||
|
||||
在 Debian 12 中出现了一个与 Debian 的 ISO 文件有关的重大更改。最初,Debian 就分别针对 “自由” 和 “非自由” 软件包提供了不同的 ISO 文件。专有的 “非自由” 软件包是单独的 ISO 文件的一部分。因此,如果你需要针对你的特殊硬件的驱动支持,那么你可以针对你的笔记本/台式机/服务器下载不同的 ISO 文件。
|
||||
|
||||
然而,这种体验使终端用户在选择恰当的 Debian 的 ISO 时感到迷惑。为此,Debian 团队去年发起一次社区投票,以选出如何处理 “非自由” 的最好的选项。
|
||||
|
||||
根据 [选出的结果][3] , 现在,基本的 ISO 文件现在包含 “自由” 和 “非自由” 的软件包。
|
||||
|
||||
那么,发生了什么变化?
|
||||
|
||||
在我们尝试现在官方的 Debian 的 ISO 文件时,你只需要选择一个包含所有东西的 ISO 文件 (DVD 大小的体积)。此外,也提供小型的网络安装的 ISO 文件,包含 “非自由” 固件。
|
||||
|
||||
你可以查看关于 Debian 的 ISO 文件的 [这篇指南][4] 。
|
||||
|
||||
#### GNOME 在默认情况下使用 Pipewire
|
||||
|
||||
如果你在 Debian Linux 中使用 GNOME 桌面环境,那么,给你带来一个好消息。
|
||||
|
||||
Debian 12 和 GNOME 桌面环境 [在默认情况下,使用 Pipewire 和 Wireplumber 管理器][5] 作为声音服务器,取代了 Pulseaudio 。现代化的 Pipewire 早就已经引入 Ubuntu 、Fedora 、Pop!_OS 等其它领先的发行版。
|
||||
|
||||
![Pipewire in Debian 12][6]
|
||||
|
||||
#### 新版本的 Apt 软件包管理器(2.6)
|
||||
|
||||
Debian 12 引入 Apt 软件包管理器的最新的版本。[Apt 2.6][7] 版本专门处理了这个版本中引入的非自由 ISO 镜像支持。这些更改包含:默认启用非自由固件,Apt 将显示非自由软件包的更新。
|
||||
|
||||
#### 桌面环境
|
||||
|
||||
在 Debian 12 中,除 GNMOE 桌面环境外,所有的主流桌面环境都是最新的。这是因为 [GNOME 44][8] 才刚刚发布,由于工作日程计划不一样,因此它没有进入 “Bookworm” 。Debian 12 已经处于硬冻结状态。
|
||||
|
||||
因此,在 Debian 12 中,你将得到 [GNOME 43][9] 版本,与最新的发布版本相比,它也没有落后多少。此外,如果你从 [Debian 11][10] 转换而来,那么,这将是一次重大的 GNOME 升级。
|
||||
|
||||
幸运的是,[KDE Plasma 5.27][11] 现在可以在这个发布版本中使用了。KDE Plasma 是 Plasma 5 的最终版本,并且在 Plasma 6 版本准备好之前,它可能会成为 LTS 。因此,它是一次重要的升级。KDE Plasma 维护人员成功地实现了这一目标。
|
||||
|
||||
另外,在 Debian 12 中的 [Xfce 4.18][12] 通过令人惊艳的 Thunar 的特色功能带来了更好的桌面体验。此外,在 Debian 12 中,LXQt 1.2 、MATE 1.26 和 LXDE 11 都是最新的版本。
|
||||
|
||||
这里有一份摘要:
|
||||
|
||||
- GNOME 43
|
||||
- KDE Plasma 5.27
|
||||
- LXDE 11
|
||||
- LXQt 1.2
|
||||
- MATE 1.26
|
||||
- Xfce 4.18
|
||||
|
||||
#### 核心模块和应用程序
|
||||
|
||||
大多数主要的应用程序都已经刷新版本。尤其是,Python 3.11 已经包含在 Debian 12 中,这将有助于帮助开发者和很多使用情况。此外,LibreOffice 7.4 和 Firefox 102.9 ESR 也是两个重要的更新。这里有一份关于主要应用程序和软件包升级的小列表:
|
||||
|
||||
- LibreOffice 7.4.4
|
||||
- Firefox 102.9 ESR
|
||||
- GIMP 2.10.32
|
||||
- OpenJDK 11.6
|
||||
- PHP 8.2
|
||||
- Python 3.11+
|
||||
- Samba 4.17
|
||||
|
||||
#### 杂项更新
|
||||
|
||||
- Debian 12 现在在双启动设置时可以检测到 Windows 11
|
||||
- 在 Debian 和 Cinnamon 桌面环境中,默认启用支持屏幕阅读器
|
||||
- 在 30 秒超时后,自动启动语音合成
|
||||
- 更容易地检测多路径设备
|
||||
- 支持多个 initrd 路径
|
||||
- 支持新的 ARM 和 RISC-V 设备
|
||||
- 放弃实验性的 DMRAID 支持
|
||||
|
||||
你可以 [在这里][13] 了解更多的变化。
|
||||
|
||||
#### 默认的主题和墙纸
|
||||
|
||||
在每一次发布版本中,Debian 都会从引入一些来自社区的令人惊叹的艺术作品。Debian 12 以 “<ruby>绿宝石<rt>Emerald</rt></ruby>” 作为默认的艺术作品主题。
|
||||
|
||||
“_经过抛光和凿刻,或在它们原始和纯天然的状态下,宝石可以有无限的形状。”_
|
||||
|
||||
通过 Emerald 主题,创建者希望将光线与矿物质以一种简洁至近乎空灵的设计结合在一起。
|
||||
|
||||
默认主题和横幅可以在安装程序、动画 Plymouth 、壁纸等所有的位置都可以看到。
|
||||
|
||||
这里是一些选自 [官方画廊][14] 的图片。
|
||||
|
||||
![Default wallpaper][15]
|
||||
|
||||
![Debian 12 Plymouth][16]
|
||||
|
||||
### 如何下载 Debian 12
|
||||
|
||||
**注意**: Debian 12 尚未发布稳定版本。因此,不要在正式工作中使用它,也不要从 Bullseye 升级到 “Bookworm” 。
|
||||
|
||||
如果你正在运行 Debian 11 “Bullseye” ,你可以通过任意的文本编辑器来打开 `/etc/apt/sources.list` ,并添加下面的命令行。务必验证镜像 URL ,并更改下面的命令行。
|
||||
|
||||
```
|
||||
deb http://http.us.debian.org/debian bookworm main non-free contrib
|
||||
deb http://security.debian.org/ bookworm/updates main contrib non-free
|
||||
deb http://http.us.debian.org/debian sid main non-free contrib
|
||||
```
|
||||
|
||||
在添加这些命令行后,刷新 `apt` 缓存:
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
```
|
||||
|
||||
接下来,运行下面的命令行来获取更新:
|
||||
|
||||
```
|
||||
sudo apt dist-upgrade
|
||||
```
|
||||
|
||||
下载全新的 ISO 文件,访问任意一个下面的链接。
|
||||
|
||||
> **[下载 Debian 12 (DVD) ISO – Alpha2][17]**
|
||||
|
||||
### 总结
|
||||
|
||||
总而言之,Debian 12 “Bookworm” 是一个令人印象深刻的版本,带来了一些新的特色功能和改善。从最新的桌面环境到新内核和更新的软件包,这个发布版本为新用户和有经验的 Debian 用户都提供了很多东西。
|
||||
|
||||
因为它专注于稳定性、安全性和开源原则,所以,对于那些寻求替换 Ubuntu 和通用操作系统的人来说,Debian 12 “Bookworm” 可能是最好的选择。
|
||||
|
||||
这个版本的最终版本预期在 2023 年第二季度发布。
|
||||
|
||||
> **[Debian 12 更改日志(有点过时了)][18]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/debian-12-features/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Bookworm-GNOME-Desktop.jpg
|
||||
[2]: https://www.debugpoint.com/linux-kernel-6-1/
|
||||
[3]: https://lists.debian.org/debian-vote/2022/10/msg00000.html
|
||||
[4]: https://www.debugpoint.com/download-debian-iso/
|
||||
[5]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1020249
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2023/03/Pipewire-in-Debian-12.jpg
|
||||
[7]: https://launchpad.net/ubuntu/+source/apt/+changelog
|
||||
[8]: https://www.debugpoint.com/gnome-44/
|
||||
[9]: https://www.debugpoint.com/gnome-43/
|
||||
[10]: https://www.debugpoint.com/debian-11-features/
|
||||
[11]: https://www.debugpoint.com/kde-plasma-5-27/
|
||||
[12]: https://www.debugpoint.com/xfce-4-18-review/
|
||||
[13]: https://lists.debian.org/debian-devel-announce/2022/09/msg00004.html
|
||||
[14]: https://wiki.debian.org/DebianArt/Themes/Emerald
|
||||
[15]: https://www.debugpoint.com/wp-content/uploads/2023/03/Default-wallpaper.jpg
|
||||
[16]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Plymouth.jpg
|
||||
[17]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/
|
||||
[18]: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/05/112008tjogt4q224g49tj4.jpg
|
@ -0,0 +1,205 @@
|
||||
[#]: subject: "Rust Basics Series #1: Create and Run Your First Rust Program"
|
||||
[#]: via: "https://itsfoss.com/rust-introduction/"
|
||||
[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "mcfd"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15709-1.html"
|
||||
|
||||
Rust 基础系列 #1: 创建并运行你的首个 Rust 程序
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在 Rust 编程系列的第一篇中,你将学习如何用 Rust 编写和执行你的第一个程序。
|
||||
|
||||
Rust 是最快风靡开发者和科技公司的系统编程语言之一。日常使用它的开发者将其评为**最受欢迎的编程语言**之一,而它 [已经连续七年获此殊荣了][2]!
|
||||
|
||||
它是如此的受欢迎,以致于现在有两股巨大的推力将其带入 Linux 生态系统中:
|
||||
|
||||
- [将 Rust 作为 Linux 内核的二级支持语言][3]
|
||||
- System76 [正在使用 Rust 重写他们自己的桌面环境][4]
|
||||
|
||||
而这还仅仅是在 Linux 生态系统中。安卓上的蓝牙软件 [Gabeldorsche][5] 现在也是由 Rust 编写的。
|
||||
|
||||
你是否也看到了 Rust 的流行趋势?那么你或许也想学习使用 Rust 进行编程。
|
||||
|
||||
### 为什么你要考虑 Rust 而不是其他编程语言?
|
||||
|
||||
首先,Rust 是一门 **类型安全的编程语言** 并且 **拥有极其严格的编译期检查**。因此,你首先会 “被迫” 写不出不安全的代码(好吧,通常是这样)。
|
||||
|
||||
Rust 编程语言有以下 “目标”:
|
||||
|
||||
- **性能**:Rust 的二进制文件和 C 语言的二进制文件一样快,有时甚至超过了 C++ 的二进制文件!
|
||||
- **内存安全**:Rust 非常重视内存安全。
|
||||
- **并发性**:对内存安全的关注消除了很多类似竞争的情况,并帮助你在程序中无畏并发。
|
||||
|
||||
以下是在 C/C++ 等语言中可能犯的一些错误(但 Rust 不会):
|
||||
|
||||
- 释放后使用
|
||||
- 双重释放
|
||||
- 越界访问
|
||||
- 使用 `NULL`
|
||||
- 不适当的指针运算或访问
|
||||
- 使用未经初始化的变量
|
||||
- 线程不安全的多线程
|
||||
|
||||
看看 [苹果][6]、[微软][7]、[谷歌][8] 等大公司因这类 [0day][9] 错误而引起的问题吧。
|
||||
|
||||
现在你可能知道了为什么要选择 Rust 语言而不是其他编程语言,让我们开始学习 Rust 语言的系列教程吧!
|
||||
|
||||
### 目标受众
|
||||
|
||||
出于对 Rust 的热爱,我写了这个系列的 Rust 教程,帮助你熟悉 Rust 编程的概念。
|
||||
|
||||
这个教程系列是为已经熟悉 C 和 C++ 等编程语言的人准备的。我假设你已经知道了 _变量_、_函数_、_循环_ 等基本术语。
|
||||
|
||||
我对你的唯一要求是你不懈的坚持与努力。
|
||||
|
||||
### 安装 Rust 工具链
|
||||
|
||||
我希望你能在本地安装 [Rust 工具链][10]。你可以通过运行以下命令来做到这一点:
|
||||
(LCTT 译注:如果你使用 Linux 发行版,请不要直接安装软件源里的 Rust 工具链,尽管这样看起来很便捷。)
|
||||
|
||||
```
|
||||
curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs | sh
|
||||
```
|
||||
|
||||
![Installing Rust on Ubuntu Linux][11]
|
||||
|
||||
除了 Rust 基本工具链,我还建议再安装一些工具,这些工具将在开发过程中帮助你:
|
||||
|
||||
```
|
||||
rustup component add rust-src rust-analyzer rust-analysis
|
||||
```
|
||||
|
||||
你还需要 [安装 gcc][14]。否则,你可能会遇到“链接器 `cc` 未找到”的错误。该软件包在不同的发行版中都被称为 gcc。
|
||||
|
||||
在 Ubuntu 和 Debian 上使用:
|
||||
|
||||
```
|
||||
sudo apt install gcc
|
||||
```
|
||||
|
||||
> 💡 如果你不希望在本地安装 Rust 工具链,不用担心。你还可以直接在你的浏览器中运行 Rust 代码!只要到 [Rust 试验场][12] 并把所讨论的代码粘贴在那里。
|
||||
|
||||
### Hello Rust!
|
||||
|
||||
自从 <ruby>丹尼斯·里奇<rt>Dennis Ritchie</rt></ruby> 和 <ruby>布莱恩・柯林汉<rt>Brian Kernighan</rt></ruby> 用 “Hello World” 程序介绍了 C 语言后,在 UNIX 世界里,你学习的任何新编程语言第一步都这样做,这已经成为一种习惯。
|
||||
|
||||
因此,让我们也用 Rust 编写我们的 Hello World 程序。
|
||||
|
||||
我将在我的家目录里 [新建一个项目目录][13] 叫做 `learn-rust-its-foss`。然后,在这里我将新建一个叫 `hello-world` 的目录。最后,在里面新建 `main.rs` 文件:
|
||||
|
||||
```
|
||||
// 这串代码将打印字符
|
||||
// "Hello world!" 将被打印到 `标准输出`
|
||||
|
||||
fn main() {
|
||||
println!("Hello world!");
|
||||
}
|
||||
```
|
||||
|
||||
> 📋 就像 C、C++ 和 Java 源代码文件相应的扩展名是 `.c`、`.cpp` 和 `.java`,Rust 的源文件扩展名是 `.rs`。
|
||||
|
||||
作为一个 C/C++ 程序员,你可能已经在 [Linux 上使用 GCC][14],在 macOS 上使用 `Clang`,在 Windows 上使用 MSVC。但是为了编译 Rust 代码,该语言的创造者自己提供了一个官方的 `rustc` 编译器。
|
||||
|
||||
运行 Rust 程序和 [执行 C/C++ 程序][15] 是一样的。你首先编译代码,然后得到可执行文件,最后再运行这个可执行文件从而来运行代码。
|
||||
|
||||
```
|
||||
$ ls
|
||||
main.rs
|
||||
|
||||
$ rustc main.rs
|
||||
|
||||
$ ls
|
||||
main main.rs
|
||||
|
||||
$ ./main
|
||||
Hello world!
|
||||
```
|
||||
|
||||
很好!
|
||||
|
||||
### 解读 Rust 代码
|
||||
|
||||
现在你已经编写、编译并运行了你的第一个 Rust 程序,让我们对 “Hello World” 的代码进行解读,并理解每一部分。
|
||||
|
||||
```
|
||||
fn main() {
|
||||
}
|
||||
```
|
||||
|
||||
`fn` 关键字用来在 Rust 中声明一个函数。在它后面 `main` 是这个被声明函数的名字。像许多编译型编程语言一样,`main` 是一个特殊的函数,用来作为你的程序的入口。
|
||||
|
||||
任何写在 `main` 函数里的代码(在大括号 `{` `}` 之间)将在程序被启动时运行。
|
||||
|
||||
#### println 宏
|
||||
|
||||
在 `main` 函数中, 有一个语句(LCTT 译注:“语句” 区别于 “表达式”):
|
||||
|
||||
```
|
||||
println!("Hello world!");
|
||||
```
|
||||
|
||||
就像 C 语言的标准库有 `printf` 函数一样,Rust 语言的标准库有 `println` **宏**。宏类似于函数,但它以**感叹号**(`!`)来区分。你将在本系列的后面学习宏和函数的知识。
|
||||
|
||||
`println` 宏接收一个格式化的字符串,并把它放到程序的标准输出中(在我们的例子中,就是终端)。由于我希望输出一些文本而不是一个变量,我将把文本放在双引号(`"`)内。最后,我用一个分号来结束这个语句,表示语句的结束。
|
||||
|
||||
> 📋 你只需知道,任何看起来像函数调用但在开头括号前有感叹号的东西,就是 Rust 编程语言中的一个宏。
|
||||
|
||||
#### 注释
|
||||
|
||||
Rust 遵循已知的 C 编程语言的注释风格。单行注释以两个正斜杠(`//`)开始,多行注释以 `/*` 开始,以 `*/` 结束。
|
||||
|
||||
```
|
||||
// 这是一个多行注释
|
||||
// 但是没有什么阻止你在
|
||||
// 第二行或第三行也这样写
|
||||
|
||||
/*
|
||||
* 这是一个“真•多行注释”
|
||||
* 它看起来比较漂亮
|
||||
*/
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
你刚刚通过 Hello World 程序迈出了用 Rust 写代码的第一步。
|
||||
|
||||
作为一种练习,也许你可以编写并执行一个打印出 `Yes! I did Rust` 的 Rust 程序。
|
||||
|
||||
在本系列的下一部分中,你将学习在 Rust 程序中使用变量。敬请期待!
|
||||
|
||||
*(题图:MJ:computer sci-fi ,code secure ,"rust" ,gold blue slive ,background dark, high resolution super detailed)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/rust-introduction/
|
||||
|
||||
作者:[Pratham Patel][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[mcfd](https://github.com/mcfd)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/pratham/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[2]: https://survey.stackoverflow.co/2022/?ref=itsfoss.com#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages
|
||||
[3]: https://news.itsfoss.com/linux-kernel-6-1-release/?ref=itsfoss.com
|
||||
[4]: https://news.itsfoss.com/pop-os-cosmic-rust/?ref=itsfoss.com
|
||||
[5]: https://android.googlesource.com/platform//system/bt/+/83498aa554aea220fcff30b6310a0a7b4557969f/gd/rust/linux/stack/src/bluetooth.rs?ref=itsfoss.com
|
||||
[6]: https://langui.sh/2019/07/23/apple-memory-safety/?ref=itsfoss.com
|
||||
[7]: https://msrc-blog.microsoft.com/2019/07/18/we-need-a-safer-systems-programming-language/?ref=itsfoss.com
|
||||
[8]: https://security.googleblog.com/2019/05/queue-hardening-enhancements.html?ref=itsfoss.com
|
||||
[9]: https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view?ref=itsfoss.com#gid=1190662839
|
||||
[10]: https://itsfoss.com/install-rust-cargo-ubuntu-linux/
|
||||
[11]: https://itsfoss.com/content/images/2023/03/install-rust.svg
|
||||
[12]: https://play.rust-lang.org/?ref=itsfoss.com
|
||||
[13]: https://itsfoss.com/make-directories/
|
||||
[14]: https://learnubuntu.com/install-gcc/?ref=itsfoss.com
|
||||
[15]: https://itsfoss.com/run-c-program-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/10/164143yksc0b56bbs0itiu.jpg
|
@ -0,0 +1,81 @@
|
||||
[#]: subject: "Measure pi with a Raspberry Pi"
|
||||
[#]: via: "https://opensource.com/article/23/3/measure-pi-raspberry-pi"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15717-1.html"
|
||||
|
||||
使用一块树莓派主板测量圆周率
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 用你的树莓派制作一个接近完美的圆。
|
||||
|
||||
世界各地将 3 月 14 日定为圆周率日。许多人通过在房子周围找到的物体测量圆周率来庆祝圆周率日。我想用我的树莓派 3B 为今年的圆周率日做一些类似的事情。继续阅读以了解我如何使用我的树莓派测量圆周率。
|
||||
|
||||
你需要什么:
|
||||
|
||||
- 树莓派单板机
|
||||
- 方格纸
|
||||
- 带毫米和厘米测量值的标尺
|
||||
- 笔
|
||||
|
||||
### 1、画一个圆
|
||||
|
||||
圆周率是圆的周长与其直径的比值。要计算圆周率,我们需要测量一个完美绘制的圆的周长和直径。幸运的是,树莓派主板上的安装孔足够大,可以使用铅笔或钢笔。我通过一个树莓派板安装孔插入了一根图钉,小心地将针放在一张方格纸上两条线的交点上。
|
||||
|
||||
握住别针,我将一支笔插入对面的安装孔中,并通过将笔绕着别针移动来画一个圆圈。树莓派主板底面的焊点会卡在纸上,但小心点还是可以画好圆圈的。
|
||||
|
||||
![Use the Raspberry Pi as a compass to draw a circle.][1]
|
||||
|
||||
### 2、把圆分成段
|
||||
|
||||
通过画一条穿过圆心的垂直线将圆分成两半,通过画一条穿过圆心的水平线将圆再次分成四分之一。当我画圆的时候,我把图钉正好放在图画纸上两条线的交点上,这样就很容易找到垂直和水平的中心线。你可以通过在对角线上画一条线来创造一个 “八分” 片。
|
||||
|
||||
![Each small wedge is 1/8 of a circle.][2]
|
||||
|
||||
进一步的划分是与尺子的练习。我用尺子找到“四分之一楔形”和“八分之一楔形”任意两个交点的中点,做成一个 1/16 的楔形。你可以使用相同的方法制作越来越小的 1/32 和 1/64 圆的切片。通过非常小心,我还能够在圆的 1/128 处测量出一个非常窄的楔形:
|
||||
|
||||
![If you are careful, you can keep dividing to find 1/128 of a circle.][3]
|
||||
|
||||
### 3、估算周长
|
||||
|
||||
我最小的楔形是一个圆的 1/128。如此小的切片,楔形的外弧非常小,我们可以用一条直线来近似它。这实际上不是圆周长的 1/128,但它足够接近,我们可以将其用作一个很好的估计。
|
||||
|
||||
![Use the mm measurement on your ruler to measure the outer arc of the 1/128 segment.][4]
|
||||
|
||||
使用我的尺子上的毫米测量值,我测量了我的 1/128 楔形的外弧为 3.8 毫米。这样,我可以估计圆的周长为 3.8 毫米乘以 128,即 486.4 毫米。要转换为厘米,除以十:**48.64cm**。
|
||||
|
||||
### 4、计算圆周率
|
||||
|
||||
圆周率的值是圆的周长与其直径的比值。我们在步骤 3 中估算了周长。测量直径是使用尺子测量圆周的简单练习。我的圆是 **15.4cm**。
|
||||
|
||||
现在我们知道了周长和直径,我们可以将圆周率计算为 48.64 除以 15.4,即 **3.158**。这与 pi 的实际值 3.141 相差不远。
|
||||
|
||||
测量圆周率是一项有趣的数学练习!各个年龄段的数学爱好者都可以使用方格纸、笔和尺子等简单工具自行测量圆周率。以一种有趣的新方式使用你的树莓派来绘制圆并独立测量圆周率。这是一个估计值,因为我们将圆上的 1/128 弧近似为一条直线,但这使我们无需太多努力就足够接近了。
|
||||
|
||||
(LCTT 校注:这真是对树莓派的“合理”应用,摔!)
|
||||
|
||||
*(题图:MJ: Circumference in high resolution, very detailed)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/3/measure-pi-raspberry-pi
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://opensource.com/sites/default/files/2023-03/10000000000003E8000003E8BE7DE71919BB0C82.jpg
|
||||
[2]: https://opensource.com/sites/default/files/2023-03/100000010000028A0000028A0625B218857F031C.webp
|
||||
[3]: https://opensource.com/sites/default/files/2023-03/100000000000079E00000514506C8EE5131D886A.webp
|
||||
[4]: https://opensource.com/sites/default/files/2023-03/10000000000003E8000003E881402FB71F1945FF.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/13/120203upp4tb199bbhpp59.jpg
|
@ -0,0 +1,197 @@
|
||||
[#]: subject: "Write a cute program with Emojicode"
|
||||
[#]: via: "https://opensource.com/article/23/4/emojicode"
|
||||
[#]: author: "Jessica Cherry https://opensource.com/users/cherrybomb"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15699-1.html"
|
||||
|
||||
用 Emojicode 写一个可爱的程序
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这种有趣的开源语言是学习编码真正的完美选择。
|
||||
|
||||
在这篇文章中,我将介绍一个最好的编码语言,学习如何制作任何东西!它叫做 Emojicode,是由 Theo Belaire 在 2014 年创建的,它是一种开源的编程语言,使用 emoji 字符来表示其语法。当用 Emojicode 开发时,表情符被用来创建变量、函数和控制结构。因为它是一种静态类型的语言,变量类型必须在使用前声明,但它也支持类和继承等面向对象的概念。这种语言可以在每个操作系统上运行,它是一种超级有趣的编码方式,特别是当你是一个非英语母语的人时。这很有帮助,因为象形表示可以把我们大家聚集在一起,让我们以类似数学的方式说同样的语言。
|
||||
|
||||
### 先决条件
|
||||
|
||||
在本教程中,我使用的是基于 Debian 的操作系统。我的工具可能与你的操作系统的要求不同。以下是我所使用的工具:
|
||||
|
||||
- [Geany][1],一个 Linux 下的开源 IDE。
|
||||
- IBus,它允许你挑选表情符并把它们放在你的编辑器中。我使用的界面被称为 **emoji picker**。
|
||||
- 基于 Debian 的 Linux。
|
||||
- 一个 C++ 编译器。我使用的是 `g++` 编译器。
|
||||
- [Emojicode][2]
|
||||
|
||||
我使用的是 Linux 操作系统,但你可以 [阅读文档][3] 了解在其他操作系统上使用它时可能需要采取的任何特殊步骤。
|
||||
|
||||
### 在 Linux 上安装 Emojicode
|
||||
|
||||
有几种方法可以在你的电脑上安装 Emojicode,但它们有一个很酷的 [神奇的安装页面][4],可以告诉你具体该怎么做。下面是我的做法:
|
||||
|
||||
```
|
||||
$ wget https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz -O emojicode.tar.gz \
|
||||
&& tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \
|
||||
&& cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \
|
||||
&& cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64
|
||||
```
|
||||
|
||||
Emojicode 的安装过程提供了有用的反馈。
|
||||
|
||||
![The emojicode installation procedure provides useful feedback along the way.][5]
|
||||
|
||||
现在,你已经安装好了,是时候开始编写代码了!
|
||||
|
||||
### 它是怎么运作的?
|
||||
|
||||
首先,所有 Emojicode 文件的扩展名都以文件名 `.🍇` 结尾,但因为你不能在一般的文件名中这样做,所以它被翻译成 `filename.emojic`。这里是最重要的语法元素:
|
||||
|
||||
- 把 `🏁` 放在一行的开头,表示要执行哪些代码块
|
||||
- 用 `🍇` 开始一个代码块
|
||||
- 用 `🍉` 来结束一个代码块
|
||||
- 想打印什么吗?就用 `😀 🔤 <string> 🔤 ❗`
|
||||
|
||||
还有很多其他的,所以这里有一些实际的例子。
|
||||
|
||||
### 打印一首俳句
|
||||
|
||||
首先,试着打印一首漂亮的俳句来玩玩吧! 在这个例子中,我将添加一行注释。看看你是否能识别它。
|
||||
|
||||
```
|
||||
🏁🍇
|
||||
💭 This is a single line comment for fun
|
||||
😀 🔤Emojicode is great,🔤 ❗
|
||||
😀 🔤Fun and expressive code,🔤 ❗
|
||||
😀 🔤no sadness, just joy.🔤 ❗
|
||||
🍉
|
||||
```
|
||||
|
||||
现在我们需要保存我们的代码,并通过我们的编译器运行它,使之成为一个漂亮的可执行文件:
|
||||
|
||||
```
|
||||
$ emojicodec haiku.emojic
|
||||
$ ls
|
||||
haiku haiku.emojic haiku.o
|
||||
```
|
||||
|
||||
正如你所看到的,代码已经被编译并生成了两个文件,其中一个是可执行的。运行 `haiku` 文件:
|
||||
|
||||
```
|
||||
$ ./haiku
|
||||
Emojicode is great,
|
||||
Fun and expressive code,
|
||||
no sadness, just joy.
|
||||
```
|
||||
|
||||
### 数学和变量操作
|
||||
|
||||
接下来,你要同时做几件事:一点点数学和变量的改变。首先,将一个变量赋值为 0:
|
||||
|
||||
```
|
||||
0 ➡️ 🖍🆕x
|
||||
```
|
||||
|
||||
你刚刚使用蜡笔(`🖍`)表情符、新建(`🆕`)表情符和变量名称创建了一个新变量,同时还将该变量赋值为 0。
|
||||
|
||||
接下来,用磁铁(`🧲`)表情符打印一行包括该变量的内容:
|
||||
|
||||
```
|
||||
😀 🔤The value is 🧲x🧲 🔤 ❗
|
||||
```
|
||||
|
||||
接下来,使用加号(`➕`)和箭头(`⬅️`)表情符改变变量:
|
||||
|
||||
```
|
||||
x ⬅️➕ 1
|
||||
```
|
||||
|
||||
然后打印另一行的值。如此这般,然后打印出最终的数值。如下:
|
||||
|
||||
```
|
||||
🏁 🍇
|
||||
|
||||
💭Updating a variable using math
|
||||
0 ➡️ 🖍🆕x
|
||||
😀 🔤The value is 🧲x🧲 🔤 ❗
|
||||
|
||||
x ⬅️➕ 1
|
||||
😀 🔤The value is 🧲x🧲 🔤 ❗
|
||||
|
||||
x ⬅️➕ 15
|
||||
😀 🔤The value is 🧲x🧲 🔤 ❗
|
||||
|
||||
x ⬅️➖ 9
|
||||
😀 🔤The value is 🧲x🧲 🔤 ❗
|
||||
|
||||
x ⬅️➗ 2
|
||||
😀 🔤The final value is 🧲x🧲 🔤 ❗
|
||||
🍉
|
||||
```
|
||||
|
||||
接下来,用 `emojicodec` 编译代码,然后用你的可执行代码来看看结果:
|
||||
|
||||
```
|
||||
$ emojicodec math.emojic
|
||||
$ ./math
|
||||
The value is 0
|
||||
The value is 1
|
||||
The value is 16
|
||||
The value is 7
|
||||
The final value is 3
|
||||
```
|
||||
|
||||
如你所见,作为变量打印出来的所有内容都已使用新数学进行了更新。你可以用许多数学表情符来进一步操作。下面是一些更多的运算符:
|
||||
|
||||
```
|
||||
🚮 is your modulo
|
||||
◀ Less than
|
||||
▶ Greater than
|
||||
◀🙌 less than or equal to
|
||||
▶🙌 greater than or equal to
|
||||
```
|
||||
|
||||
### Emojicode 的怪癖
|
||||
|
||||
当我在文档中来回查看时,我发现了一些有趣的怪癖。其中之一是,当从用户那里抓取输入时,由于一些已知的编译器问题,耳朵的肤色很重要。
|
||||
|
||||
获取用户输入的动作是这样的:
|
||||
|
||||
```
|
||||
🆕🔡▶️👂🏼❗️
|
||||
```
|
||||
|
||||
获取和分配用户输入的操作是这样的:
|
||||
|
||||
```
|
||||
🆕🔡▶️👂🏼❗️ ➡️ inputText
|
||||
```
|
||||
|
||||
我试图让它工作,我的编译器出现了一些问题,我发现了这个问题。你也可能会在这里和那里遇到一些小问题。如果你遇到了,请创建一个 [议题][6],这样它就有可能被修复。
|
||||
|
||||
### 没有技巧,只有很棒的代码
|
||||
|
||||
虽然我可以介绍更多内容,但我可以向你保证,这段令人惊叹的代码背后的文档非常丰富。尽管我写这篇文章只是为了赶上愚人节的乐趣,但我不得不承认这是有史以来最好的语言之一,因为它教会了你很多非常真实的编程概念。我恳切地建议把它作为一种有趣的方式来教你的一些朋友、孩子,或者是对编码感兴趣的同学。希望你度过了一个充满乐趣的愚人节!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/4/emojicode
|
||||
|
||||
作者:[Jessica Cherry][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/cherrybomb
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://github.com/geany/geany
|
||||
[2]: https://github.com/emojicode/emojicode
|
||||
[3]: https://www.emojicode.org/docs/
|
||||
[4]: https://www.emojicode.org/docs/guides/
|
||||
[5]: https://opensource.com/sites/default/files/2023-03/emoji.webp
|
||||
[6]: https://github.com/emojicode/emojicode/issues
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/07/141230yv2s53itmiw45ots.jpg
|
@ -0,0 +1,242 @@
|
||||
[#]: subject: "10 Tweaks to Supercharge Gedit as Code Editor"
|
||||
[#]: via: "https://itsfoss.com/gedit-tweaks/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15688-1.html"
|
||||
|
||||
将 Gedit 作为代码编辑器的 10 项增强调整
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Gedit 是一个好的文本编辑器。用这些技巧、窍门和调整把它变成一个好的代码编辑器。
|
||||
|
||||
GNOME 可能已经抛弃了 Gedit 作为默认的文本编辑器,但它仍然是 Linux 老用户的最爱。
|
||||
|
||||
它主要是一个文本编辑器,但通过一些调整,它可以作为一个轻量级的代码编辑器使用。
|
||||
|
||||
是啊!为什么要用 VS Code 或其他专门的代码编辑器来编写 Bash 脚本或其他语言的简单程序?用 Gedit 也可以过一天。
|
||||
|
||||
我将在本文中分享一些我最喜欢的 Gedit 技巧和窍门。虽然大多数的调整对写代码是有益的,但有些对一般的文本写作也是有帮助的。
|
||||
|
||||
### 1、安装插件
|
||||
|
||||
可能个别人甚至不知道 Gedit 有强大的插件功能。你可以安装插件来获得额外的功能。
|
||||
|
||||
有两种类型的插件:
|
||||
|
||||
- 可以从编辑器菜单中访问的官方 Gedit 插件
|
||||
- 第三方插件,可以从项目网站上下载,并放入插件目录中(下面讨论)。
|
||||
|
||||
Gedit 插件可以放在 `/usr/share/gedit/plugins` 或 `~/.local/share/gedit/plugins` 目录下。
|
||||
|
||||
![][2]
|
||||
|
||||
你可以通过点击 “汉堡包” 菜单,然后打开 “<ruby>首选项<rt>Preferences</rt></ruby>” 窗口来访问可用和已安装的插件。
|
||||
|
||||
![][3]
|
||||
|
||||
首选项窗口有 “<ruby>插件<rt>Plugins</rt></ruby>” 标签,你可以看到所有可用的插件。你可以使用复选框来启用和禁用这些插件。
|
||||
|
||||
![][4]
|
||||
|
||||
### 2、在侧边栏中显示文件浏览器
|
||||
|
||||
如果你正在处理一个有多个文件和文件夹的项目,在侧边栏中用文件浏览器看到所有可用的文件是相当有用的。
|
||||
|
||||
进入 “首选项” -> “插件”,启用 “<ruby>文件浏览器面板<rt>File Browser Panel</rt></ruby>”。
|
||||
|
||||
![][5]
|
||||
|
||||
之后,点击右上角的汉堡包菜单,从菜单 “<ruby>查看<rt>View</rt></ruby>” -> “<ruby>侧面板<rt>Side Panel</rt></ruby>” 启用侧面板视图。
|
||||
|
||||
现在把侧面板视图改为文件浏览器,如果还没有的话。
|
||||
|
||||
![][6]
|
||||
|
||||
### 3、嵌入一个终端
|
||||
|
||||
是的!你可以在 Gedit 文本编辑器中直接嵌入一个终端。
|
||||
|
||||
这有什么意义呢?嗯,如果你正在写程序或脚本,嵌入终端可以帮助你运行脚本,并在编辑器中检查代码的变化。
|
||||
|
||||
![][7]
|
||||
|
||||
要得到这个,首先要安装这个插件(针对 Ubuntu):
|
||||
|
||||
```
|
||||
sudo apt install gedit-plugin-terminal
|
||||
```
|
||||
|
||||
一旦插件安装完毕,从 “首选项” -> “插件” 中启用它。
|
||||
|
||||
![][8]
|
||||
|
||||
嗯,从汉堡包菜单-> “查看”-> “<ruby>底部面板<rt>Bottom Panel</rt></ruby>” 中启用底部面板。
|
||||
|
||||
![][9]
|
||||
|
||||
### 4、Markdown 预览
|
||||
|
||||
喜欢 Markdown 吗?我也是!
|
||||
|
||||
有几个适用于 Linux 的 Markdown 编辑器,但你不必为了使用 Markdown 而去安装另一个应用程序。
|
||||
|
||||
在一个名为 “[Gedit Markdown Preview][10]” 的插件的帮助下,Gedit 完全有能力呈现 Markdown 代码。
|
||||
|
||||
Arch 用户可以在 AUR 中找到它,软件包为 `gedit-plugin-markdown_preview`。
|
||||
|
||||
其他 Linux 用户可以找到 [项目网页上的安装说明][11]。
|
||||
|
||||
一旦安装,在插件中启用它。你必须从汉堡包菜单 -> “查看”-> “侧面板” 中启用侧面板视图。
|
||||
|
||||
![][12]
|
||||
|
||||
有了这个,它就开始在侧面板或底部窗格中显示 Markdown 文本的渲染文本。
|
||||
|
||||
![][13]
|
||||
|
||||
### 5、创建代码片段
|
||||
|
||||
*好的码农编码,优秀码农复用。*
|
||||
|
||||
如果你发现自己重复使用同一段代码或文本,你可以将其保存为片段,并在需要时插入。这将为你节省一些时间(和挫折)。
|
||||
|
||||
先启用片段插件:
|
||||
|
||||
![][14]
|
||||
|
||||
现在你可以从汉堡包菜单-> “<ruby>管理片段<rt>Manage Snippets</rt></ruby>” 来访问片段。
|
||||
|
||||
![][15]
|
||||
|
||||
你会发现它已经有几个为各种编程语言添加的片段。
|
||||
|
||||
![][16]
|
||||
|
||||
你也可以通过点击左下角的 “+” 号将你的片段添加到所需的文件夹中。你也可以为片段指定一个快捷键,以便更快速地插入它们。
|
||||
|
||||
![][17]
|
||||
|
||||
例如,我为 [添加一个 Markdown 表格][18] 添加了一个新的片段,并为其分配了一个键盘快捷键和 TAB 触发器(如上图所示)。现在,如果我在 Markdown 文档中按 `CTRL + Alt + S`,就会添加一个表格。或者,输入 `table` 并按下 `TAB` 键也会添加 Markdown 表格。
|
||||
|
||||
> 💡 通常,片段被保存在 `/usr/share/gedit/plugins/snippet` 文件夹中作为 XML 文档,但我找不到新添加的片段被保存在哪里。
|
||||
|
||||
### 6、修复深色模式的问题
|
||||
|
||||
编码员喜欢深色模式。Gedit 遵守系统主题,如果你在操作系统层面切换到深色模式,它也会切换到深色模式。
|
||||
|
||||
一个主要的问题是,你无法阅读当前选定行的任何内容,因为文本和行的高亮部分都是白色的。
|
||||
|
||||
![][19]
|
||||
|
||||
这个问题没有解决办法。然而,一个变通的办法是,要么禁用当前行的高亮显示,要么使用不同的颜色方案。
|
||||
|
||||
进入 “首选项” -> “<ruby>字体和颜色<rt>Font & Colors</rt></ruby>”,然后选择像 Oblivion 这样的深色方案。这将稍微改变颜色方案,但至少你能看到高亮行的文字。
|
||||
|
||||
![][20]
|
||||
|
||||
### 7、快速高亮选中的文本
|
||||
|
||||
双击一个词,Gedit 就会高亮显示整个文档中出现的所有相同的词。
|
||||
|
||||
![][21]
|
||||
|
||||
虽然有一个官方插件,但这个功能默认是不启用的。
|
||||
|
||||
进入 “首选项” -> “插件”,启用 “<ruby>快速高亮<rt>Quick Highlight</rt></ruby>” 选项。
|
||||
|
||||
![][22]
|
||||
|
||||
### 8、显示行号
|
||||
|
||||
许多代码编辑器默认都会显示行号。当你看到 “第 X 行的语法错误 ” 时,它可以帮助你快速找到该行。
|
||||
|
||||
你可以通过进入 “首选项” -> “查看” -> “<ruby>显示行号来启用行号<rt>Display Line Numbers</rt></ruby>”:
|
||||
|
||||
![][23]
|
||||
|
||||
你也可以从底部启用或停用它。
|
||||
|
||||
![][24]
|
||||
|
||||
### 9、保存一个版本
|
||||
|
||||
如果你正在修改一个文件,也许建立一个备份副本会更好?Gedit 可以自动做到这一点。
|
||||
|
||||
在 “首选项” -> “<ruby>编辑器<rt>Editor</rt></ruby>” -> “<ruby>创建一个备份副本<rt>Create a Backup copy</rt></ruby>” 中启用这个功能。
|
||||
|
||||
![][25]
|
||||
|
||||
一个在原文件名称后面加上 `~` 符号的文件将作为备份文件出现。
|
||||
|
||||
![][26]
|
||||
|
||||
### 10、自动保存文件
|
||||
|
||||
既然我们在谈论版本和备份,那么 [在 Gedit 中启用自动保存][27] 怎么样?这样,如果你在处理一个文件时,忘记用 `Ctrl+S` 手动保存,修改的内容会自动保存。
|
||||
|
||||
> 🚧 这个功能对一个从未在磁盘上保存过的全新文档不起作用。
|
||||
|
||||
从 “偏好” -> “编辑器”,你可以启用 “<ruby>自动保存<rt>Autosave</rt></ruby>” 功能。默认情况下,它每 10 分钟自动保存一次,但你可以根据自己的喜好改变时间。
|
||||
|
||||
![][28]
|
||||
|
||||
还有一个第三方的 [smart-auto-save 扩展][29],可以在你停止输入时自动保存文档。
|
||||
|
||||
![][30]
|
||||
|
||||
### 知道更多的 Gedit 技巧吗?
|
||||
|
||||
使用任何软件的乐趣之一是发现它不那么明显的功能。
|
||||
|
||||
在这里,你最喜欢哪个 Gedit 的调整?你知道一个没有多少人知道的 Gedit 的秘籍吗?在评论中与我们分享吧?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/gedit-tweaks/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][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/lkxed/
|
||||
[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[2]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-gedit-plugin-saved-to-the-directory.png
|
||||
[3]: https://itsfoss.com/content/images/2023/03/ACCESS-PREFERENCES.png
|
||||
[4]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-plugins-in-prefereneces.png
|
||||
[5]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-plugin-in-preferences.png
|
||||
[6]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-as-a-side-pane.png
|
||||
[7]: https://itsfoss.com/content/images/2023/03/TERMINAL-gedit-embedded-terminal.png
|
||||
[8]: https://itsfoss.com/content/images/2023/03/TERMINAL-embedded-terminal-plugin-in-plugins-tab.png
|
||||
[9]: https://itsfoss.com/content/images/2023/03/TERMINAL-enable-bottom-panel-for-embedded-terminal.png
|
||||
[10]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com
|
||||
[11]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com#installation
|
||||
[12]: https://itsfoss.com/content/images/2023/03/ENABLE-SIDE-PANEL.png
|
||||
[13]: https://itsfoss.com/content/images/2023/03/MARKDOWN-PREVIEW-markdown-preview.png
|
||||
[14]: https://itsfoss.com/content/images/2023/03/ENABLE-SNIPPET-PLUGLIN.png
|
||||
[15]: https://itsfoss.com/content/images/2023/03/ACCESS-MANAGE-SNIPPET.png
|
||||
[16]: https://itsfoss.com/content/images/2023/03/SNIPPET-pre-created-snippets-in-gedit-showing-cpp-main-snippet.png
|
||||
[17]: https://itsfoss.com/content/images/2023/03/adding-a-custom-markdown-table-snippet.png
|
||||
[18]: https://itsfoss.com/markdown-table/
|
||||
[19]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-text-not-visible-in-highlight-line.png
|
||||
[20]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-settting-a-new-clor-scheme-to-the-dark-mode-font-issue.png
|
||||
[21]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-result.png
|
||||
[22]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-already-available-plugin-no-external-needed.png
|
||||
[23]: https://itsfoss.com/content/images/2023/03/LINE-NUMBER-display-line-numbers-in-gedit.png
|
||||
[24]: https://itsfoss.com/content/images/2023/03/SHOW-LINE-NUMBERS.png
|
||||
[25]: https://itsfoss.com/content/images/2023/03/SAVE-BACKUP.png
|
||||
[26]: https://itsfoss.com/content/images/2023/03/VERSION-in-file-manager.png
|
||||
[27]: https://itsfoss.com/how-to-enable-auto-save-feature-in-gedit/
|
||||
[28]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-files-the-built-in-save-function-that-saves-the-document-after-some-time.png
|
||||
[29]: https://github.com/seanh/gedit-smart-autosave/?ref=itsfoss.com
|
||||
[30]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-Smart-auto-save.png
|
||||
[31]: https://itsfoss.com/flatpak-tips-tweaks/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/03/163721ts31zsxhs1wuwp63.jpg
|
@ -0,0 +1,88 @@
|
||||
[#]: subject: "Handle any type of document with this open source tool"
|
||||
[#]: via: "https://opensource.com/article/23/4/open-source-collabora-online-interoperability"
|
||||
[#]: author: "Heike Jurzik https://opensource.com/users/hej"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15712-1.html"
|
||||
|
||||
用 Collabora Online 在不同类型的文件间转换
|
||||
======
|
||||
|
||||
![0][]
|
||||
|
||||
> 探索 Collabora Online 的互操作性,使文档和电子表格在所有办公套件中兼容。
|
||||
|
||||
[Collabora Online][1] 支持各种各样的文件和格式。不过,这个开源办公套件在互操作性方面的表现如何?本文仔细研究了 Collabora Online 与不同办公套件(如 Microsoft 365 和 Google Workspace)交换复杂文本文档和电子表格的能力。
|
||||
|
||||
[Collabora Online][2] 是一款适用于云端或内部的开源办公套件,可以保护你的隐私,让你完全控制你的数据。该软件由位于剑桥的 Collabora Productivity Ltd 开发,其团队在世界各地工作。Collabora Online 以 LibreOffice 技术为基础,并主要使用 Mozilla Public License 2.0 许可。
|
||||
|
||||
Collabora Online 可以在任何现代网络浏览器中运行,不需要额外的插件或附加组件。它有一个完整的基于云的办公套件,包括一个文字处理器(Writer)、电子表格程序(Calc)、演示软件(Impress)和一个设计矢量图的应用(Draw)。
|
||||
|
||||
本文介绍了 Collabora Online 的一些新的互操作性功能,包括宏、动态字体加载和电子表格应用程序的 Sparklines 支持。这些功能扩展了现有的对微软文件格式的出色处理。
|
||||
|
||||
### 什么是互操作性,为什么它很重要?
|
||||
|
||||
一般来说,互操作性是指不同的设备或应用在一起工作和无缝交换数据的能力。在办公套件的背景下,互操作性主要是指文件格式。用户应该能够打开、编辑和保存 `.doc` 和 `.docx`、`.xls` 和 `.xlsx`、`.odt` 和 `.ods`文件,无论它们是用微软的 Word、苹果的 iWork 还是 LibreOffice 创建。
|
||||
|
||||
对于在线办公套件也是如此。通过确保文件可以在 Microsoft 365、Google Workspace 和 Collabora Online 之间交换,互操作性有助于提高生产力和促进协作。所有在线办公套件都可以保存各种格式的文件。它们还可以导入和导出最初在其他办公套件中创建的文档、电子表格和演示文稿。
|
||||
|
||||
### 管理宏,确保文件处理顺畅
|
||||
|
||||
经常引起问题的是带有宏的文件。它们通常是用特定的编程语言开发的,适用于某个特定的应用。虽然在 Google Sheets 中记录和编辑宏是可能的,但在微软 Office 中用 Visual Basic for Applications(VBA)实现的宏不能被转换,必须用 Google Apps Script 重新创建。打开带有 VBA 宏的 Word 文档会产生错误,并通知用户这些宏将被忽略或禁用。
|
||||
|
||||
Collabora Online 支持宏,并在容器内的服务器端运行它们。该功能默认是禁用的,管理员必须在 `coolwsd.xml` 配置文件中明确激活它。之后,用户可以选择在加载文档时允许使用宏。不过,有几个限制。例如,它不可能访问数据库源,访问其他(外部)文件,调用外部程序,使用控制形状,等等。多年来,由于活跃的社区以及客户和合作伙伴的贡献,Collabora Online 支持的代码和对象的数量已经大大增加。
|
||||
|
||||
### Collabora Online:动态字体加载
|
||||
|
||||
办公套件中互操作性的另一个关键方面是字体。使用含有在特定平台上无法使用的字体的文档,可能会导致错误、意外的格式变化,甚至是内容的完全丢失。
|
||||
|
||||
微软 Office 文档经常使用 Google Workspace 或 Collabora Online 中没有的默认字体。为了解决这个问题,办公套件经常建议替换掉缺失的字体。这通常是有用的,但有时会导致不好的结果。
|
||||
|
||||
从 22.05.7 版本(2022 年 11 月发布)开始,Collabora Online 可以列出缺失的字体并建议替换。它还可以下载必要的字体并将其添加到服务器上。一切都是动态进行的,而不会停机。新的字体在几分钟内就可以在编辑会话中使用,实现最佳的互操作性。
|
||||
|
||||
![Fonts can introduce a surprising complexity to your document, but Collabora Online can handle it.][3]
|
||||
|
||||
为了实现这一目标,在文档被渲染的同时,通过 API 追踪丢失字体的信息。一个 JSON 文件存储了需要添加的字体列表。`coolwsd.xml` 文件(服务器端的设置)指向该 JSON 文件。它每分钟检查一次修改情况,并下载缺少的字体。
|
||||
|
||||
### 探索 Sparkline:显示电子表格中的数据趋势
|
||||
|
||||
Sparkline 是在工作表中单个单元格内的微小图表,它可以将数据的趋势可视化。这些微型图表有不同的风格,包括线、条和柱。Sparkline 还支持不同的颜色和水平/垂直轴。与显示尽可能多的数据并与文本流分开的大型图表不同,Sparkline 被缩减为核心值,通常放在同一单元格中数据本身的旁边或后面。Sparkline 通常是为一个单元格定义的,但也可以将共享相同数据范围和属性的多个 Sparkline 进行分组,以便进行渲染。
|
||||
|
||||
![Customize the look of Sparklines.][4]
|
||||
|
||||
Sparkline 是一个紧凑的参考,提供了一个快速的方法来说明趋势、模式、统计异常、增加和减少,同时避免了完整图表的复杂性。下面是一些不同的 Sparkline 类型:
|
||||
|
||||
- 线形图: 通过线段从左到右连接各点,对于显示在一定时间内变化的数据特别有用。
|
||||
- 条形图: 使用水平排列的条形图表示数据,通常用于比较数字数据。
|
||||
- 柱状图: 是比较一系列数值的理想选择。柱是垂直的,其长度表示数据的相对大小/价值。柱状图经常被用来表示不同类别或群体的数据。
|
||||
|
||||
要创建一个 Sparkline,你首先要为该函数定义一个输入数据范围(一列或一行中的两个或多个单元格)。你还可以决定你希望 Sparkline 出现的单元格。在大多数电子表格应用中,你右键点击迷你图表来调整其属性,选择图表类型,并选择颜色。Collabora Online 为此提供了一个单独的对话框,使得改变微型图表的风格变得简单而方便。
|
||||
|
||||
在三个线上办公软件之间交换带有 Sparkline 的文件是可能的,不会丢失图表及其格式。如果你想在 Microsoft 365、Google Workspace 和 Collabora Online 之间共享电子表格,请确保使用微软格式的 .xlsx 进行导入和导出,因为 Google Sheets 不能很好地处理 .ods 文件。
|
||||
|
||||
### 文件交换很容易
|
||||
|
||||
Collabora Online 提供了几个新的互操作性功能,使得与其他办公套件交换文件变得容易。宏程序支持、动态字体加载和 Sparkline 确保了文档的无缝处理,避免了意外的格式变化。使用 Collabora Online 来统一和简化你的办公工作。
|
||||
|
||||
*(题图:MJ:Office docs process dark plain background Illustration )*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/4/open-source-collabora-online-interoperability
|
||||
|
||||
作者:[Heike Jurzik][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/hej
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://www.collaboraoffice.com/
|
||||
[2]: https://opensource.com/article/22/7/open%20source-collabora-online
|
||||
[3]: https://opensource.com/sites/default/files/2023-03/1000020100000952000005F6266BD457E1698CC0.webp
|
||||
[4]: https://opensource.com/sites/default/files/2023-03/1000020100000690000004FB490A0D79C005B60B.webp
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/11/172833cww99zg2goqgtngk.jpg
|
@ -0,0 +1,154 @@
|
||||
[#]: subject: "Our favorite fonts for the Linux terminal"
|
||||
[#]: via: "https://opensource.com/article/23/4/linux-terminal-fonts"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Taivasjumala"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15715-1.html"
|
||||
|
||||
大家最喜欢的 Linux 终端字体
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这是一个完全主观的列表,可以为你的 Linux 控制台提供一些有趣的字体建议。
|
||||
|
||||
最近,终端模拟器成为我的一个话题,它让我思考:大家最喜欢的终端字体是什么?
|
||||
|
||||
因此,我请贡献者分享了他们喜欢使用的字体。以下是他们的答案。
|
||||
|
||||
### VT323
|
||||
|
||||
我喜欢在我的 GNOME 终端中使用一个不一样的字体([VT323][1]),而不是在我的编程时用的编辑器或其他使用等宽字体的应用程序中使用的字体(Source Code Pro)。我就是喜欢经典的 VT 风格字体的外观。
|
||||
|
||||
有时,我会切换到原始的 IBM EGA 字体,因为在我眼里它看起来真的很漂亮。但是我把 EGA 和 DOS 联系在一起,把 VT323 和经典的 Unix 终端联系在一起,所以我大部分时间都用 VT323。下面是我使用 VT323 作为等宽字体的 GNOME 终端的屏幕截图:
|
||||
|
||||
![gnome-terminal1108×926 output][2]
|
||||
|
||||
我设置终端使用 24pt 大小的 VT323 字体,使得终端界面呈现一个舒适的大窗口。如果我要打开一个终端窗口,我其实是想使用它来些实实在在的工作,而不是敲两下就退出。我可能会在那个终端窗口呆一段时间,所以它应该很大,很容易看到。我也更喜欢 80x25 布局(每行 80 个字符,共 25 行),因为我是一个老式 DOS 命令行玩家,25 行在我看来才是 “正确的” 行数:
|
||||
|
||||
![preference profile screen - text appearance][3]
|
||||
|
||||
—— [Jim Hall][4]
|
||||
|
||||
### 等宽的字体
|
||||
|
||||
我不觉得我会只使用一个特定的字体。我通常使用 [DejaVu][5] 或 [Liberation][6]。我喜欢等宽字体,因为它们更容易阅读。不过,我也不希望字母靠得太近。更重要的是,要能够区分数字 1 和小写的 L、数字 O 和大小的字母 Q 等等。另外,让所有特殊字符都能特别清楚地显示出来也很好。
|
||||
|
||||
我也喜欢让字体和背景之间呈现高对比度,所以我将背景设置为黑色,字符设置为白色。
|
||||
|
||||
—— [Greg Pittman][7]
|
||||
|
||||
### Hack
|
||||
|
||||
我喜欢使用等宽字体,特别是在终端和代码编辑器中,因为它们更容易阅读。我使用 [Hack][8] 系列字体已经很多年了。它提供了一个很好的等宽字体,并提供了额外的字形和 Powerline 支持,我可以用它们在命令行上提供一些状态信息。
|
||||
|
||||
![Command line][9]
|
||||
|
||||
这是用 [Fontpreview tool][10] 工具生成的字体预览。
|
||||
|
||||
![Display of font A-Z and the numbers][11]
|
||||
|
||||
—— [Ricardo Gerardi][12]
|
||||
|
||||
### Victor Mono
|
||||
|
||||
我在终端和 IDE 中使用 [Victor Mono][13] 已经好几年了。斜体的等宽手写体可能不是一开始就会喜欢上的,我喜欢这样,因为这让代码注释的外观很独特,与代码的其余部分明显不同。下面是它在终端中的样子:
|
||||
|
||||
![terminal font is italic characters in a monospace cursive script][14]
|
||||
|
||||
我在 IDE 和终端使用了 Solarized Dark 配色方案。如果可以的话,任何与工作或代码相关的东西都会使用相同的配色方案和相同的字体,所以一切看起来都很统一。这些年来,我使用了各种字体,但我总是试图在我的终端中使用与 IDE 中相同的字体。
|
||||
|
||||
—— [Chris Reynolds][15]
|
||||
|
||||
### Monaco
|
||||
|
||||
目前,我用 16pt 大小的 Monaco 常规字形。(要比 12pt 或是 14pt 大小好多了。)
|
||||
|
||||
—— [Jenny Panighetti][16]
|
||||
|
||||
### 用粉红色来装点
|
||||
|
||||
这让我想起了有一次我恶作剧把团队里的其他开发者的终端都改成了粉红色(我是里面唯一的女性),一个婴儿粉的背景与深粉红色的文字的搭配。
|
||||
|
||||
我喜欢把我的个人终端弄得漂漂亮亮的,但在工作中,我会用黑底白字,并把字体弄成 16pt 左右,因为我喜欢较大的字体尺寸。
|
||||
|
||||
我总是把我的终端设置为 SF Mono 字体,但我把它加粗,并增大了一点,以便我可以更好地看到它。我最喜欢的颜色是粉红色或漂亮的水蓝色。我也喜欢终端的默认风格,它叫做 “Novel”。
|
||||
|
||||
![Two open terminals, one pink and one aqua blue][17]
|
||||
|
||||
—— [RachieVee][18]
|
||||
|
||||
### 万事不决,问 ChatGPT
|
||||
|
||||
对于这个问题,我决定问问 [ChatGPT][19]。以下是它的回答:
|
||||
|
||||
> 作为一个语言模型,我没有个人偏好,也没有能力拥有一种最喜欢的字体。但是,有一些流行的终端字体,包括 Monospace、Consolas 和 Inconsolata。这些字体很受欢迎,因为它们易于阅读,不同字符之间有明显的区别,即使在字体大小比较小的情况下也非常清晰。此外,它们被设计为适配在各种不同的操作系统和终端中得到更好的呈现,使它们成为开发人员和用户的通用选择。
|
||||
|
||||
我部分使用 GPT-3 生成了这段文字,GPT-3 是 OpenAI 的大规模语言生成模型。在生成草稿后,作者可以根据自己的喜好审查、编辑和修改,以符合个人的喜好,并对最终发布的内容承担最终责任。
|
||||
|
||||
—— [Stephanie Brinley][20]
|
||||
|
||||
### Fantasque Sans Mono
|
||||
|
||||
```
|
||||
$ grep font ~/.Xdefaults
|
||||
URxvt*font: xft:FantasqueSansMono-Regular:pixelsize=12:antialias=true
|
||||
```
|
||||
|
||||
我不记得我是什么时候开始使用 [Fantasque Sans Mono][21] 的,但我想这是我过去 8 年来的默认选择,无论是在 [Rxvt][22] 还是 Konsole 中。我不知道我在 GNOME 终端中使用的是什么字体,很可能是 GNOME 上的默认字体。
|
||||
|
||||
—— [Seth Kenlon][23]
|
||||
|
||||
### Jetbrains Mono
|
||||
|
||||
最近,我将 Tilix 设置为默认终端。我的 Tilix 配置与 Jim Hall 使用的设置类似。几个不同点是:
|
||||
|
||||
- 光标形状是下划线而不是块
|
||||
- 字体是 [Jetbrains Mono][24] Nerd Font Mono Medium 14
|
||||
|
||||
![Black terminal with blue text][25]
|
||||
|
||||
—— [Alan Formy-Duval][26]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/23/4/linux-terminal-fonts
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Taivas Jumala](https://github.com//Taivasjumala)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://fontsource.org/fonts/vt323
|
||||
[2]: https://opensource.com/sites/default/files/2023-01/gnome-terminal1108%C3%97926.png
|
||||
[3]: https://opensource.com/sites/default/files/2023-01/gnome-terminal-vt323848%C3%97661.png
|
||||
[4]: https://opensource.com/users/jim-hall
|
||||
[5]: https://fontsource.org/fonts/dejavu-mono
|
||||
[6]: https://github.com/liberationfonts
|
||||
[7]: https://opensource.com/users/greg-p
|
||||
[8]: https://sourcefoundry.org/hack/
|
||||
[9]: https://opensource.com/sites/default/files/2023-01/Geradi%201.png
|
||||
[10]: https://github.com/sdushantha/fontpreview
|
||||
[11]: https://opensource.com/sites/default/files/2023-01/fontpreview_default.png
|
||||
[12]: https://opensource.com/users/rgerardi
|
||||
[13]: https://rubjo.github.io/victor-mono/
|
||||
[14]: https://opensource.com/sites/default/files/2023-01/reynolds1.png
|
||||
[15]: https://opensource.com/users/jazzsequence
|
||||
[16]: https://twitter.com/elvenjen
|
||||
[17]: https://opensource.com/sites/default/files/2023-01/pink-blue.webp
|
||||
[18]: https://opensource.com/users/rachievee
|
||||
[19]: https://opensource.com/article/23/2/chatgpt-vs-community
|
||||
[20]: https://opensource.com/users/sbrinley
|
||||
[21]: https://github.com/belluzj/fantasque-sans
|
||||
[22]: https://opensource.com/article/19/10/why-use-rxvt-terminal
|
||||
[23]: https://opensource.com/users/seth
|
||||
[24]: https://www.jetbrains.com/lp/mono/
|
||||
[25]: https://opensource.com/sites/default/files/2023-01/alan.png
|
||||
[26]: https://opensource.com/users/alanfdoss
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202304/12/162240yvgnvohomg7nrnno.jpg
|
@ -0,0 +1,112 @@
|
||||
[#]: subject: "TUXEDO Stellaris 16 (Gen5) is The Ultimate Linux Laptop You Can Find Now"
|
||||
[#]: via: "https://news.itsfoss.com/tuxedo-stellaris-16-gen-5/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15729-1.html"
|
||||
|
||||
TUXEDO Stellaris 16(Gen5)是目前所能找到的终极 Linux 笔记本电脑
|
||||
======
|
||||
|
||||
> 这款笔记本电脑拥有 RTX 4090 和 i9 处理器等规格,可谓惊人!你觉得呢?
|
||||
|
||||
![tuxedo stellar][1]
|
||||
|
||||
TUXEDO 电脑是 Linux 领域的一个著名品牌,它提供了不同价格/性能的可定制的 Linux 笔记本和台式电脑。
|
||||
|
||||
顺便说一句,它是值得信赖的 [购买 Linux 电脑][3] 的地方之一。
|
||||
|
||||
在最近的公告中,他们推出了 **Stellaris 16 英寸笔记本电脑的下一个进化版**。
|
||||
|
||||
我必须说,这可以成为 Framework 最近宣布的高性能 16 英寸笔记本电脑的有力挑战者。
|
||||
|
||||
让我们来看看它。
|
||||
|
||||
### TUXEDO Stellaris 16 Gen 5 概览
|
||||
|
||||
![a photo of the tuxedo stellaris 16 - gen5 laptop][4]
|
||||
|
||||
这款笔记本电脑的主要亮点是,它采用了英伟达最新、最强大的 [RTX40 系列][5] 笔记本 GPU,提供了强大的图形性能和功能。
|
||||
|
||||
搭配了英特尔的顶级处理器 [i9 13900HX][6],其 24 个核心可以在高达 157W TDP(睿频)的情况下超频到 **极快的 5.40 GHz**,这是一个引人注目的组合。
|
||||
|
||||
但请记住,为了充分发挥笔记本电脑的运行潜力,TUXEDO 建议使用 **他们的外部水冷却解决方案**,[TUXEDO Aquaris][7],它可以通过磁力连接到笔记本电脑的背面。
|
||||
|
||||
> 📋 在订购该笔记本电脑时,你必须为此支付额外费用。
|
||||
|
||||
该处理器在没有全速运行时,基本 TDP 为 55W,时钟速度为 3.90GHz。
|
||||
|
||||
对于这样一台轻薄的笔记本电脑来说,这仍然是一个不错的性能数字! 😮
|
||||
|
||||
Stellaris 16 - Gen5 笔记本电脑的一些其它关键亮点如下:
|
||||
|
||||
- 外壳 1是由铝和塑料的组合组成。
|
||||
- 一个 240 赫兹的 16 英寸 IPS 显示屏,支持英伟达 G-SYNC。
|
||||
- GPU 最高可选英伟达 RTX 4090。
|
||||
- 高达 64GB DDR5,5600MHz 的内存(2x32GB)。
|
||||
- 99Wh 的电池,允许运行时间长达 10 小时(空闲),在典型负载下约 6-7 小时。
|
||||
|
||||
### TUXEDO Stellaris 16:是什么让它成为强者?
|
||||
|
||||
Stellaris 16 - Gen5 笔记本电脑上的高端硬件不仅吸引了游戏玩家,也吸引了其他各种用户,如内容创作者、AI/ML 工程师、UI/UX 艺术家等等。
|
||||
|
||||
那么,是什么让它囊括如此完整的用户群体呢?
|
||||
|
||||
嗯,是在各种可能的设置中自由选择。
|
||||
|
||||
首先,你可以从 RTX 4060 这种相对平静的 GPU 到疯狂的 RTX 4090 中挑选,其间还有 RTX 4070 和 RTX 4080 可选。
|
||||
|
||||
![tuxedo stellaris laptop][8]
|
||||
|
||||
然后是键盘选项,你可以选择他们新增加的 [樱桃 MX Ultra-Low Profile][9] 机械键盘,以获得打字时的触觉和听觉感受,或者通常的静音薄膜键盘。
|
||||
|
||||
你还可以从广泛的键盘布局清单中挑选,包括英语、德语、西班牙语、匈牙利语,以及更多,还有带有背光的 TUX 超级键。
|
||||
|
||||
内存也不例外。你可以在两个性能层之间做出选择。一个是 “性能” 层,提供 DDR5 RAM,以迅速的 4800 MHz 运行,一个是 “高性能” 层,提供 DDR5 RAM,以令人瞠目的 5600 MHz 运行。
|
||||
|
||||
这些层级提供最大 64GB 的内存,采用来自 SK 海力士、三星和美光的内存条。
|
||||
|
||||
至于存储,两个 PCIe 4.0 x4 的 M.2 2280 SSD 插槽,配备各种三星 SSD。其阵容从三星 970 EVO Plus 开始,中间是三星 980,极速的三星 980 Pro 是该系列的顶配。
|
||||
|
||||
> 📋 在两个 M.2 插槽都插满的情况下,最多可实现 4TB 的存储。
|
||||
|
||||
除此之外,Stellaris 16 - Gen5 具有 Wi-Fi 6E 和蓝牙 5.3,并预装了 [TUXEDO OS][10],除非你在购买时选择不同的操作系统,如 Ubuntu 22.04 LTS、Kubuntu 22.04 LTS、Ubuntu Budgie 22.04 LTS 和 Windows 11 Home/Pro 等。
|
||||
|
||||
### 什么时候可以买到和价格
|
||||
|
||||
TUXEDO Stellaris 16 - Gen5 现在可预购,在 4 月底开始交付。
|
||||
|
||||
基本配置的价格为 1763.87 欧元,配备 i9 处理器、RTX 4060、运行频率为 5600 MHz 的 16GB 内存(2x 8GB),500GB 三星 980 固态硬盘和 TUXEDO 操作系统。
|
||||
|
||||
> **[预购][11]**
|
||||
|
||||
前往 [官方商店列表][11],并开始按照你的要求进行配置吧。
|
||||
|
||||
(LCTT 译注:原文带有受惠链接,但本文非收费软文。)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/tuxedo-stellaris-16-gen-5/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1304/2023/04/tuxedo-stellaris-gen-5.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp
|
||||
[3]: https://itsfoss.com/get-linux-laptops/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/04/TUXEDO_Stellaris_16-Gen5.jpg
|
||||
[5]: https://www.nvidia.com/en-us/geforce/laptops/
|
||||
[6]: https://ark.intel.com/content/www/us/en/ark/products/232171/intel-core-i913900hx-processor-36m-cache-up-to-5-40-ghz.html
|
||||
[7]: https://www.tuxedocomputers.com/en/Linux-Hardware/Accessories/Further-accessories/TUXEDO-Aquaris--External-Water-Cooling-Device_1.tuxedo
|
||||
[8]: https://news.itsfoss.com/content/images/2023/04/stellaris16-gen5_back.jpg
|
||||
[9]: https://www.cherrymx.de/en/cherry-mx/mx-ultra-low-profile/mx-ulp-click.html
|
||||
[10]: https://www.tuxedocomputers.com/os
|
||||
[11]: https://www.tuxedocomputers.com/en/TUXEDO-Stellaris-16-Gen5.tuxedo
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user