diff --git a/published/20220105 Create bookmarks for your PDF with pdftk.md b/published/20220105 Create bookmarks for your PDF with pdftk.md
new file mode 100644
index 0000000000..899229da57
--- /dev/null
+++ b/published/20220105 Create bookmarks for your PDF with pdftk.md
@@ -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 格式中的正式叫法是“书签”。
+
+![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'00'
+InfoBegin
+InfoKey: CreationDate
+InfoValue: D:20151221203353Z00'00'
+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
\ No newline at end of file
diff --git a/published/20221205.4 ⭐️⭐️ True Lightweight Notepad for Ubuntu and Other Linux.md b/published/20221205.4 ⭐️⭐️ True Lightweight Notepad for Ubuntu and Other Linux.md
new file mode 100644
index 0000000000..0bff3de2a8
--- /dev/null
+++ b/published/20221205.4 ⭐️⭐️ True Lightweight Notepad for Ubuntu and Other Linux.md
@@ -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
\ No newline at end of file
diff --git a/published/20200628 Roy Fielding-s Misappropriated REST Dissertation.md b/published/202303/20200628 Roy Fielding-s Misappropriated REST Dissertation.md
similarity index 100%
rename from published/20200628 Roy Fielding-s Misappropriated REST Dissertation.md
rename to published/202303/20200628 Roy Fielding-s Misappropriated REST Dissertation.md
diff --git a/published/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md b/published/202303/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md
similarity index 100%
rename from published/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md
rename to published/202303/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md
diff --git a/published/202303/20210214 Why programmers love Linux packaging.md b/published/202303/20210214 Why programmers love Linux packaging.md
new file mode 100644
index 0000000000..62f668716e
--- /dev/null
+++ b/published/202303/20210214 Why programmers love Linux packaging.md
@@ -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
\ No newline at end of file
diff --git a/published/20210819 Short option parsing using getopt in C.md b/published/202303/20210819 Short option parsing using getopt in C.md
similarity index 100%
rename from published/20210819 Short option parsing using getopt in C.md
rename to published/202303/20210819 Short option parsing using getopt in C.md
diff --git a/published/202303/20210906 Learn everything about computers with this Raspberry Pi kit.md b/published/202303/20210906 Learn everything about computers with this Raspberry Pi kit.md
new file mode 100644
index 0000000000..faa63fd66b
--- /dev/null
+++ b/published/202303/20210906 Learn everything about computers with this Raspberry Pi kit.md
@@ -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 显示屏上玩俄罗斯方块游戏。
+ * **语音识别**:演示自然语言处理。
+ * **超声波音乐**:利用距离传感器和扬声器创建简易版的 特雷门琴(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
\ No newline at end of file
diff --git a/published/20211014 9 ways to use open source every day.md b/published/202303/20211014 9 ways to use open source every day.md
similarity index 100%
rename from published/20211014 9 ways to use open source every day.md
rename to published/202303/20211014 9 ways to use open source every day.md
diff --git a/published/202303/20220712 OpenWrt, an open source alternative to firmware for home routers.md b/published/202303/20220712 OpenWrt, an open source alternative to firmware for home routers.md
new file mode 100644
index 0000000000..d626e005cb
--- /dev/null
+++ b/published/202303/20220712 OpenWrt, an open source alternative to firmware for home routers.md
@@ -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 ipv4.method auto
+```
+
+你可以在 [Fedora 联网维基][15] 中找到更多关于这些命令的信息。
+
+在你连接到路由器后,打开一个网页浏览器并导航到 [http://openwrt/][16]。现在你应该看到 LuCI 的登录管理器:
+
+![LuCI 登录][17]
+
+使用 `root` 作为用户名,并将密码留空。
+
+### 配置 WiFi 和路由
+
+要配置你的 WiFi 天线,请点击 “网络” 菜单并选择 “无线”。
+
+![LuCI 无线配置][19]
+
+在我的设备上,上面的天线 `radio0` 工作在 2.4GHz 模式,并连接到名为 `MOBILE-INTERNET` 的本地接入点。下面的天线 `radio1` 工作在 5GHz,有一个相关的接入点,SSID 为 `OpenWrt_AV`。通过点击 “编辑” 按钮,你可以打开设备配置,以决定该设备属于 LAN 还是 WWAN 网络。在我的例子中,接入点 `OpenWrt_AV` 属于 LAN 网络,客户端连接 `MOBILE-INTERNET` 属于 WWAN 网络。
+
+![LuCI 配置屏幕][21]
+
+配置的网络在 “接口” 面板的 “网络” 下列出。
+
+![设备列表][23]
+
+为了获得我想要的功能,网络流量必须在 LAN 和 WWAN 网络之间进行路由。路由可以在 “网络” 面板的 “防火墙” 部分进行配置。我没有在这里做任何改动,因为在默认情况下,网络之间的流量是被路由的,而传入的数据包(从 WWAN 到 LAN)必须通过防火墙。
+
+![防火墙设置][28]
+
+因此,你需要知道的是一个接口是属于 LAN 还是 (W)WAN。这个概念使它相对容易配置,特别是对初学者来说。你可以在 [OpenWrt 联网基础][25] 指南中找到更多信息。
+
+### 专属门户
+
+公共 WiFi 接入点通常受到 [专属门户][26] 的保护,你必须输入一个访问代码或类似的代码。通常情况下,当你第一次连接到接入点并试图打开一个任意的网页时,这种门户就会出现。这种机制是由接入点的 DNS 服务器实现的。
+
+默认情况下,OpenWrt 激活了一个安全功能,可以防止连接的客户端受到 [DNS 重新绑定攻击][27]。OpenWrt 的重新绑定保护也阻止了专属门户网站被转发到客户端,所以你必须禁用重新绑定保护,以便你可以到达专属门户网站。这个选项在 “网络” 菜单的 “DHCP 和 DNS” 面板中。
+
+### 尝试 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
\ No newline at end of file
diff --git a/published/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md b/published/202303/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md
similarity index 100%
rename from published/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md
rename to published/202303/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md
diff --git a/published/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md b/published/202303/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md
similarity index 100%
rename from published/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md
rename to published/202303/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md
diff --git a/published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md b/published/202303/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md
similarity index 100%
rename from published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md
rename to published/202303/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md
diff --git a/published/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md b/published/202303/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md
similarity index 100%
rename from published/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md
rename to published/202303/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md
diff --git a/published/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md b/published/202303/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md
similarity index 100%
rename from published/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md
rename to published/202303/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md
diff --git a/published/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md b/published/202303/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md
similarity index 100%
rename from published/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md
rename to published/202303/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md
diff --git a/published/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md b/published/202303/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md
similarity index 100%
rename from published/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md
rename to published/202303/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md
diff --git a/published/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md b/published/202303/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md
similarity index 100%
rename from published/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md
rename to published/202303/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md
diff --git a/published/202303/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md b/published/202303/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md
new file mode 100644
index 0000000000..cafee37959
--- /dev/null
+++ b/published/202303/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md
@@ -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
+- 摇树优化(删除不使用的 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. (/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] 代码中导入所有库的部分的样子:
+
+```
+
+
+
+
+
+
+
+```
+
+这个项目也在使用 Vue,但它只是用 `
-27
-28
-29
-30 Raffles Book Club Remote Gift Exchange
-31 The players, in random order, and the luxurious gifts, wrapped:
-32
-33
-34
Wanda
-35
Carlos
-36
Bill
-37
Arlette
-38
Joanne
-39
Alekx
-40
Ermintrude
-41
Walter
-42
Hilary
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-82
-83
-84