2023年9月

利用 Just Perfection GNOME 扩展为你的 Linux 桌面带来全新的个性化定制体验。

GNOME 在 Linux 界中备受喜爱,是 最热门的桌面环境 之一。

然而,讨论到 GNOME 的可定制程度,你会发现与 KDE 相比,可供选择的选项相对较少。

这并不意味着我们无法 定制 GNOME。图形化的界面工具 GNOME 调整 GNOME Tweaks 让你能轻松改变一些常规配置。而对于更深层次的设置更改,可以使用 dconf 编辑器,不过这对许多人可能略显复杂。

在此,我想向你推荐一款名叫 Just Perfection 的 GNOME 扩展,它帮助你一次性修改桌面的多种设置。

Just Perfection,一款全能扩展 ?

如果 Just Perfection 扩展的名称是 “Do it all” 或许会更符合其特性。我在后续的功能介绍中会更详细地解释此扩展的用途。

通过使用这个扩展,你可以进行诸如设置 停靠区 Dock 、通知面板、图标,以及调整与 GNOME 交互方式等一系列的微调。

Just Perfection 这款工具有以下一些核心特性:

  • 提供 4 个预设的用户配置文件
  • 可以启用/禁用 super 键、动画、面板、时钟、日历等功能
  • 可以启用/禁用应用菜单、面板通知、电源图标及活动状态的图标显示
  • 可以个性化调整面板、通知栏、OSD 位置(音量/亮度弹出)、窗口尺寸,以及在按下 Alt + Tab 时的应用程序预览
  • 可以调整工作空间预览的行为、是否展示工作空间切换器、应用网格的打开方式等等

这些功能听起来确实令人期待,对吗?

Just Perfection 的安装方法

Linux 上安装 GNOME 扩展有 多种途径。其中一个是通过网页浏览器来进行安装。

若要使用网页浏览器进行安装,请访问其官方下载页面:

获取 Just Perfection

在完成安装之后,你可以在下载页面看到一个设置图标,点击它,就会弹出一个对话框,你可以在其中调整 Just Perfection 扩展的设置:

Just Perfection GNOME 扩展的使用方法

使用这款扩展最方便的方法,就是选择四个预先配置好的用户配置之一。

虽然这一步是可选的,我还是建议启用“覆盖 Shell 主题”的选项,这样可以让你的桌面更具视觉吸引力:

一旦做了这个操作,它会自动切换到 Custom 用户配置,同时使停靠区背景变为透明。

关于各个用户配置文件的简述:

  • Default:默认文件,不会做出任何改变,但如果你启用了覆盖 Shell 的选项,它会稍微缩小面板和停靠区的尺寸。
  • Custom:在启用且覆盖 Shell 选项后生效,可将停靠区背景变为透明。
  • Minimal:减少停靠区和面板的尺寸,增加更多的屏幕工作区域。
  • Super Minimal:移除停靠区和面板,给予你一个干净的视野和最大的屏幕工作空间。

以下是在切换这些用户配置文件时的预期效果情况:

现在,你可以启用或禁用各种选项,来定制你理想的桌面环境。

使用 Just Perfection 创造简洁的桌面环境

在本节,我将展示如何实现一个由 Linux Mint 的 Cinnamon 桌面启发的简约桌面体验,其视觉效果如下:

下图是在切换工作空间时的显示效果:

为了使我的桌面看起来如上所示的简约,我进行了以下设定:

  • 透明的停靠区定位于右侧(可在系统菜单中设置)
  • 将面板位置调整到底部
  • 从面板中移除 应用 Application 菜单及 活动 Activities
  • 将时钟调整到左下角
  • 设置通知弹出位置为左下角
  • 启用工作区切换器
  • 增大工作区概览面板的半径

不过这些步骤可根据个人喜好进行跳过。

1、将透明的停靠区定位在右侧

要实现透明的停靠区,你需要在 “ 用户配置 Profile ” 菜单中选取 Custom 配置文件,并启用 “ Shell 主题 Shell Theme ” 选项即可:

如果你使用的是 Ubuntu 的最新版本,你可以在系统菜单中找到调整停靠区位置的选项。

首先,在系统菜单中打开设置,然后进入 “ 外观 Appearance ” 菜单。在 “ 停靠区 Dock ” 部分,你会找到 “ 在屏幕上的位置 Position on screen ” 选项。

在这里选择 “ 右侧 Right ” 即可:

对于使用较旧 GNOME 版本的用户,你可能无法找到这个菜单。

然而,不必担心,你可以 安装名为 Dash to Dock 的扩展 来获得相同的效果。

在此,你需进行以下两个设置:

  • 将屏幕上的位置选项设为 “ 右侧 Right
  • 如果已经选中了面板模式,取消选中即可

2、将面板定位至底部

要将面板定位至底部,前往 “ 定制 Customize ” 菜单,找到 “ 面板位置 Panel Position ” 选项。

双击这个选项并选择 “ 底部 Bottom ”:

3、将时钟位置设定在左下角

过去的六个月里我一直在以此方式使用时钟,这对我的工作流程帮助很大。简单说,你会更频繁地看时钟,以此更快地对时间有所感触。

这也让桌面看起来更好!

要更改时钟位置,进入 “定制” 菜单,然后找到 “ 时钟菜单位置 Clock Menu Position ” 选项,选择 “ 左侧 Left ”:

4、移除应用菜单和活动按钮

我注意到用户中鲜有人使用这两个选项,因此移除它们不失为一种方式,这样可以使界面看上去更清晰简洁。

要达到目的,你需要前往 “ 视觉 Visibility ” 菜单,然后取消以下两个选项:

  • 活动按钮
  • 应用菜单

5、将通知弹窗定位至右下角

因为面板自身已经被移动到底部,所以(至少对我来说)将弹窗放在顶部毫无意义。而且,相比从顶部,从底部阅读信息要更加方便。

为此,你需要做以下两步:

  • 前往 “定制” 菜单
  • 在 “ 提示栏位置 Notification Banner Position ` 中选择 “ 底部末端 Bottom End ”。

6、启用工作区切换器

当你在预览多个工作区的活动时,工作区切换器可以显示每个工作区的预览。

可能有些混淆?启用后的样子如下:

这样,你只需要按下 super 键,就可以清楚地查看在每个工作区中发生的事情。

当然,你同样可以通过(按两下 super 键)打开系统菜单来获得相同的视角,但为何要浪费一次按键并打开系统菜单,而不是在预览窗口中就实现呢?

要启用这个功能,需要以下三步:

  • 前往 “ 行为 Behavior ” 菜单并打开 “ 始终显示工作区切换器 Always Show Workspace Switcher
  • 进入 “ 定制 Customize ” 菜单
  • 为 “ 工作区切换器大小 Workspace Switcher Size ” 选择 11%

我增加工作区切换器大小的原因是,我觉得默认的视图尺寸相对较小。

7、增大工作区概览面板的圆角半径

我非常喜欢圆角设计,尤其是当它应用在工作区概览面板上时,当壁纸与设置相得益彰时尤为如此。

这就是应用上述设置后的效果:

要增加工作区概览面板圆角的半径,你需要:

  • 前往 “定制” 菜单
  • 在 “ 工作区背景圆角尺寸 Workspace Background Corner Size ” 中选择 60px (这是最大的设置值)

关于 GNOME 更深层次的自定义

如果你是 Ubuntu 的新手,那么我们有一份详细的指南,可以带你熟悉 如何自定义 GNOME

如何自定义 GNOME

下面会演示如何使用 GNOME Tweak 工具来提升 GNOME 的使用感受:

在 Ubuntu 等 Linux 下安装和使用 GNOME 调整工具

我希望这篇指南能对你有所帮助。

(题图:MJ/a7937194-0bf3-4626-99b6-4fbba1790314)


via: https://itsfoss.com/just-perfection-gnome-extension/

作者:Sagar Sharma 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

约翰·卡马克认为人工智能部分归功于他的《雷神之锤》

给世界带来第一人称射击游戏《DOOM》的传奇软件开发者 约翰·卡马克 John Carmack 在一次访谈中说,人工智能之所以能发展到今天,可能要归功于他的开创性游戏《雷神之锤》,因为它引发了对 GPU 的需求。他认为英伟达的黄仁勋认识到了 GPU 处理其他计算任务的潜力,从而引发了当前的人工智能热潮,但他仍为自己的贡献感到自豪。此外,他认为, 通用人工智能 artificial general intelligence (AGI)很可能在 2030 年左右与公众见面,他成立了一家研究 AGI 的初创公司 Keen。

消息来源:The Register
老王点评:所以说,游戏拯救世界。不过要是按这个意义说,以太坊这种需要 GPU 的区块链也是人工智能的重要推手啊。

倡议 Apache 基金会结束 Apache Open Office

有开发者号召社区向 Apache 基金会写信,敦促他们将 Apache Open Office 项目归档。在 2014 年之后,被捐赠给 Apache 基金会的 Open Office 就没有任何实质更新。偶尔能看到有一些错误修复和字典更新。虽然看起来它的代码库还有变化,但是你会发现这些提交大多是为代码添加一些空行(或许是为了让代码好看一些?)。为防止你不会写,他还给出了一份敦促 Apache 基金会的参考邮件。

消息来源:Rocket 9 Labs
老王点评:Open Office 简直就是 Apache 基金会的笑话。

入侵索尼的勒索软件组织称自己严格遵守 GDPR 运营

这个名为 Ransomed.vc 的组织在网上宣称已经成功入侵了索尼的所有系统,并称由于索尼不想支付赎金,它将会出售数据。该组织已经发布了一些黑客证据数据,尽管这些数据“从表面上看并不是特别有说服力”。据说,Ransomed.vc 既是勒索软件运营商,也是勒索软件即服务组织。它声称自己是 “解决公司内部数据安全漏洞的安全解决方案”,并 “严格遵守 GDPR 和数据隐私法” 运营。该组织称:“如果没有收到付款,我们有义务向 GDPR 机构报告违反《数据隐私法》的行为。”

消息来源:Video Gameschronicle
老王点评:居然这么理直气壮,还要报告到 GDPR。我不禁揉了揉眼睛。

掌握这些极致实用的快捷键,让你的 Linux 终端操作效率大幅提升。

学习 Linux 命令无疑是你的首要任务,但当你能熟练 运用命令行 之后,有另一样东西值得你去关注。

那就是终端快捷键!

如果你不知道如何利用它们提升终端会话的效率,那你就无法真正理解它们的重要性。

在本教程中,我将为你详细讲解顶级的终端快捷键,并且举例说明它们的用法。

在我逐一解释快捷键之前,先来看一下这个备忘录,它对我将在本教程中讨论的内容进行了概览:

快捷键功能描述
Ctrl + A光标快速跳至行首。
Ctrl + E光标快速跳至行尾。
Ctrl + U删除光标至行首的所有内容。
Ctrl + K删除光标至行尾的所有内容。
Ctrl + W删除光标前的一个单词。
Ctrl + L清空整个终端屏幕。
Ctrl + C停止正在执行的进程或命令。
Ctrl + D注销或退出终端。
Ctrl + Z暂停正在执行的进程(之后可恢复执行)。
Ctrl + R在命令历史中进行逆向搜索。
上箭头 从命令历史中显示先前的命令。
下箭头 从命令历史中显示后续的命令。
!!重复执行最近的命令。
!n重复执行命令历史中的第 n 条命令。
Tab自动补全命令,文件名或目录名。
连续按 Tab 两次列出所有可能的补全选项。
Ctrl + Shift + C复制所选文本或命令。
Ctrl + Shift + V粘贴已复制的文本或命令。
Ctrl + Shift + N打开新的终端窗口。
Ctrl + Shift + T在当前终端中打开新的选项卡。
Ctrl + TabCtrl + PageDown在终端的选项卡之间切换。
? 虽然我在这篇文章中用的是大写字母,但实际上我们不需要使用大写来输入它们。比如 Ctrl+A,意思是同时按下 Ctrl 键和 A 键,并不意味着需要同时按下 Shift 键和 a 键来输入大写的 A

接下来,我们更详细地看看这些快捷键如何使用。

1、Ctrl + A:光标切换至行首

当你在终端中按下 Ctrl + A 组合键,光标就会迅速跳到命令的起始处。这个功能在你需要修改一条长命令序列起始部分的时候十分实用。

例如,在以下示例中,你可以看到无论光标处在何位置,只需按下 Ctrl + A,光标就会立刻跳转至行首:

使用 Ctrl + A 快捷键在 Linux 终端内前往行首

2、Ctrl + E:光标切换至行尾

在使用终端的过程中,如果你想迅速跳到当前行的末尾,直接按下 Ctrl + E 组合键就可以了。

在下面的示例中,我使用了一段样本文本,并按下 Ctrl + E 来快速移动到行尾:

使用 Ctrl + E 在 linux 终端内前往行尾

3、Ctrl + U:删除光标位置至行首的内容

有些时候,你可能需要删除从光标位置到行首的所有内容。

此时,你只需使用左箭头键将光标移动至你想要开始删除的位置,然后按下 Ctrl + U

使用 Ctrl+U 从光标位置删除到行首的内容

? 在输完 sudo 命令输入密码时,不确定是否输入正确?没必要用退格键一路删除,只需简单地使用 Ctrl+U 快捷键重新开始输入密码即可。

4、Ctrl + K:从光标删除至行尾

如你所猜想,当你按下 Ctrl + K ,它会移除光标至行尾的所有内容(光标位置右侧的所有)。

使用这种快捷操作时,你先要把光标放在你想从那里开始删除的位置,然后按下 Ctrl + K,如下图展示的那样:

在 Linux 终端利用 Ctrl + K 删除光标至行尾的内容

5、Ctrl + W:删除光标前的一个词

我日常常用该快捷键,因为我时常打错命令,需要删除命令的一部分,这个时候只需要简单地按 Ctrl + W 就可以了。

当你按下 Ctrl + W 键时,它只会删除光标前的一个词:

在 Linux 终端通过按 Ctrl + W 删除光标前的一个词

6、Ctrl + L:清理终端显示(或者理解为整理显示内容)

按下 Ctrl + L 并不会彻底地 清空终端显示,但它可以整理显示内容。如果你向上滚动,你还能找到之前的命令和执行记录。

它与 clear 命令有所不同。clear 命令会消除历史记录,而且你会在命令历史中找到 clear 命令的执行。

但是当你按下 Ctrl + L 时,它只是整理当前屏幕的显示内容,并不会出现在历史记录中,因为它本身并不是一条命令。

比如在这个示例中,我执行了历史命令,随后按下 Ctrl + L 键进行了屏幕清理:

利用 Ctrl+L 清理 Linux 终端屏幕显示

7、Ctrl + C:终止当前进程/执行

有没有想要 停止进行中的命令,却不知所措,最后只好关闭终端呢?解决办法其实很简单,按下 Ctrl + C 就行了。

当你按下这一组键时,它将发送 SIGINT 信号以终别过程。

例如,在这里,我结束了正在执行的命令进程:

利用 Ctrl+C 终端快捷键来中止运行中的命令

最后,你会看到 ^C 符号,表示你按下了 Ctrl + C 来中止当前执行。

但是,有些进程可能不会被 Ctrl + C 信号所中止,此时,你可以使用 Linux 中的其他 中止信号 来终止。

如何在 Linux 中使用 SIGINT 和其它中止信号

8、Ctrl + D:退出登录或者退出终端

你总是可以使用 exit 命令来关闭 Shell 会话和终端。你也可以选择使用 Ctrl+D 快捷键。

当你按 Ctrl + D 时,如果你正在 SSH 中使用,它会结束会话,如果再次按下,它将直接关闭终端:

利用 Ctrl+D 来关闭会话

9、Ctrl + Z:暂停当前进程

总是杀掉命令并不是个好主意,因为你有可能需要重新启动过程。

这种情况下,你可以按 Ctrl + Z 来暂停当前的进程,然后可以从之前暂停的地方继续。

例如,在这里,我暂停了更新进程:

利用 Ctrl+Z 挂起一个进程

你想更多地了解 如何暂停命令及如何恢复它们 吗?这里有一篇为此准备的详细指南:

如何在 Linux 中暂停并稍后恢复一个进程

10、Ctrl + R:搜索命令历史

当你按 Ctrl + R 时,它会打开一个搜索模式的提示,从中你可以键入命令的任何部分,并将找到匹配你输入的字符串的命令。

一旦你找到那个命令,只需按 Enter 键,它就会执行那个命令。

例如,在这里,我搜索了 update,返回的结果是在 Ubuntu 中的仓库更新命令(sudo apt update):

利用 Ctrl + R 快捷键从历史记录中搜索命令

? 如果你对历史记录中的任何建议都不满意,可以使用 Ctrl+C 退出搜索模式。

11、上箭头:呈现命令历史中的上一条

当你按下上箭头 键时,命令历史中之前执行过的命令将会按次序逐一显示:

使用箭头键向下遍历历史记录

12、下箭头:呈现命令历史中的下一条

当你按下上箭头 键时,它会展示先前的命令,但在有些情况下,你可能无意间点击了多次,这时你希望展示之前已显示过的命令。

这个时候,你可以使用下箭头 键。

在以下图示中,我首先多次按下了上箭头键,然后为了返回到先前显示的命令,我按下了下箭头键:

使用箭头键向下遍历历史记录

? Page UpPage Down 键也可以用于同样的目的。

13、!!:重复最后一条命令

有时候,你可能需要重复执行一次或多次最近的命令,此时你只需要输入 !!(两个感叹号)即可:

!!

比如,在这里,我执行了一个 echo 命令,随后我用了 !! 来重复执行相同的命令:

!! 命令能够重复执行你最近在终端输入的命令

但是,这个快捷键最常用且最实用的场景是,当你忘记给命令加上 sudo。这样你无需重新输入整个命令,只需使用 sudo !! 就可以了

在 Linux 终端中使用 !! 快捷键的实践应用

? 一个类似的键盘快捷键是 Alt+.,这个快捷键会给你提供上一条命令的最后一个参数或部分。假设你刚使用了 ls /etc/apt/sources.list.d,现在你想进入这个目录。只需输入 cd 然后使用 Alt+. 就可以。这就如同你输入 cd /etc/apt/sources.list.d 一样。

14、!n:重播历史中的第 n 条命令

你可以通过执行 Bash 的 history 命令来查看命令历史,每个命令都会有一个相应的索引号:

history

从历史中选择命令

现在,假设我想要执行倒数第二个 echo 命令,我会这样使用:

!1998

15、Tab:命令自动补全

我认为这应是终端快捷键列表的首个条目。

在输入长命令时,你可以输入一部分,然后点击 Tab 键,它将为你进行自动补全。

例如,这里,我通过 Tab 键来自动完成我的脚本执行:

点击 Tab 来查看命令,选项与参数建议

16、Tab(连击两次):列出所有可能的自动补全

如果按 Tab 键无效果,那可能是因为当前输入的命令存在多种可能。

在这种场合,你可以连击两次 Tab 键,以列出所有可能的补全选项:

连击两次 Tab 键可列出所有可能的自动补全建议

✋ 接下来的一些快捷键取决于终端的模拟器。虽然这些快捷键应该适用于大多数的终端应用,但不能完全确定。

17、Ctrl + Shift + C:复制所选文本

复制终端中的文本,你需要先用鼠标选取文本,然后按下 Ctrl + Shift + C 来复制选中的内容:

按下 Ctrl+Shift+C 进行复制

18、Ctrl + Shift + V:粘贴已复制的文本

当你通过选取和按下 Ctrl + Shift + C 复制了文本后,你可以通过按下 Ctrl + Shift + V 在任何地方粘贴:

在终端按下 Ctrl+Shift+V 进行粘贴

19、Ctrl + Shift + N:打开新的终端窗口

当你按下 Ctrl + Shift + N 时,会打开一个新的终端窗口,且新窗口的工作目录与之前那个窗口内的工作目录相同:

20、Ctrl + Shift + T:开启新的终端标签页

就像使用网络浏览器一样,终端也支持开启多个标签页来进行不同的任务。要开启一个新的标签页,只需按下 Ctrl + Shift + T 就可以了:

21、Ctrl + Tab 或 Ctrl + PageDown:切换标签页

如果你按照之前的方式创建了多个标签页,你或许需要在它们之间进行切换。

为此,你可以使用 Ctrl + TabCtrl + PageDown

? 这可能更多是 Ubuntu 的功能。你可以通过 按下 Ctrl+Alt+T 键来打开新的终端窗口

接下来:必知的 Linux 命令

你喜欢这个“必备”键盘快捷键列表吗?可能你会对 最基本却必备的 Linux 命令列表 也感兴趣:

31 个最基本却必备的 Ubuntu Linux 命令

我明白起初你可能不容易记住所有这些终端快捷键。但通过不断实践,它们会逐渐深入你的肌肉记忆。

另外,你有一些没有在这里列出的钟爱的快捷键吗?欢迎在评论区分享。

(题图:MJ/992e3559-4ed7-4529-9aea-85d52484cccf)


via: https://itsfoss.com/linux-terminal-shortcuts/

作者:Sagar Sharma 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Doxygen 是一款广泛使用的开源文档生成工具,它通过代码注释来生成文档。

在试着熟悉别人的代码时,你总希望他们留下的代码注释能对你理解代码有所帮助。同理,无论为了自己还是其他人,编写代码时写注释是好习惯。所有编程语言都有专门的注释语法,注释可以是一个单词、一行文字、甚至是一整段话。编译器或解释器处理源代码时会忽略注释。

注释不能完全取代文档,但是有方法可以使用注释来生成文档。Doxygen 是一个开源的文档生成工具,它能够根据代码注释生成 HTML 或 LaTeX 格式的文档。Doxygen 让你在不用额外操作的情况下创建代码结构概览。尽管 Doxygen 主要是用来给 C++ 生成文档的,它对其它语言同样适用,比如 C、Objective-C、 C#、 PHP、Java 和 Python 等。

要使用 Doxygen,你只需要在源代码中使用 Doxygen 能够识别的语法来写注释。Doxygen 会扫描源码文件,然后根据这些特殊注释生成 HTML 或 LaTeX 文档。下面的示例项目会演示如何使用 Doxygen 注释,以及文档是如通过注释生成出来的。示例代码可从 GitHub 上获得,本文中也将引用 Doxygen 手册及文档 的相关章节。

在 Linux 上安装 Doxygen

在 Fedora 上可以通过软件包的形式安装 Doxygen。打开终端运行命令:

sudo dnf install doxygen

在基于 Debian 的操作系统上,可以通过以下命令来安装:

sudo apt-get install doxygen

使用

安装完 Doxygen 后,你需要在项目中按 Doxygen 可以识别的格式来注释代码,还要提供一个 Doxyfile 配置文件来控制 Doxygen 的一些行为。

注意:如果你用的是 GitHub 上的示例项目,你可以忽略下面一步。

如果 Doxyfile 文件不存在,你可以用 Doxygen 生成一个标准 Doxyfile 模板文件。切换到项目根目录下,运行:

doxygen -g

参数 -g 表示 生成 generate 。现在应该会出现一个名为 Doxyfile 的新文件。通过命令调用 Doxygen:

doxygen

现在应该能会有两个新文件夹:

  • html/
  • latex/

默认情况下,Doxygen 会同时输出 LaTeX 和 HTML 格式的文档。本文主要关注 HTML 文档。你可以在 Doxygen 官方文档的入门小节中找到关于 LaTeX 格式输出的更多信息。

双击 html/index.html 打开 HTML 文件。用空的配置文件生成的文档如下图:

A screenshot of a doxygen generated main page on Firefox. The content field under My Project Documentation is blank.

现在我们试着修改 Doxyfile 文件,并在源代码中添加特殊注释。

Doxyfile 文件

Doxyfile 文件中可以定义大量的可调选项,本文通过介绍示例项目的 Doxyfile 文件我只能覆盖其中很小的子集。

第 35 行:项目名称

你可以在这里指定项目名称,它最终会显示在 页眉 header 和浏览器标签上。

# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
# double-quotes, unless you are using Doxywizard) that should identify the
# project for which the documentation is generated. This name is used in the
# title of most generated pages and in a few other places.
# The default value is: My Project.

PROJECT_NAME           = "My Project"

第 47 行:项目简介

项目简介会以略小的字号显示在页眉上。

# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer a
# quick idea about the purpose of the project. Keep the description short.

PROJECT_BRIEF          = "An example of using Doxygen in C++"

第 926 行:包含子目录

允许 Doxygen 查找源代码和文档文件时递归遍历子目录。

# The RECURSIVE tag can be used to specify whether or not subdirectories should
# be searched for input files as well.
# The default value is: NO.

RECURSIVE = YES

第 1769 行:禁用 LaTeX 输出

如果你只想生成 HTML 文档,可以通过这个开关禁用 LaTeX 输出。

# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.

# The default value is: YES.

GENERATE_LATEX = NO

修改完成后,你可以再次运行 Doxygen 来检验修改是否生效了。可以在调用 Doxygen 时使用 -x 选项来查看 Doxyfile 文件的变更项:

A screenshot of the terminal showing the differences, Project Name, Project Brief, Recursive, and status of Generate Latex

通过调用 diff 命令,Doxygen 仅显示当前 Doxyfile 文件和模板文件的差异。

特殊注释

Doxygen 通过扫描源代码文件中的特殊注释和关键字来生成 HTML 文档。示例项目中的 ByteStream 类的头文件可以很好地解释特殊注释的用法。

下面用构造函数和析构函数作为示例:

/*! @brief Constructor which takes an external buffer to operate on
*
* The specified buffer already exist.
* Memory and size can be accessed by buffer() and size().
*
* @param[in] pBuf Pointer to existing buffer
* @param[in] size Size of the existing buffer
*/

ByteStream(char* pBuf, size_t size) noexcept;

特殊注释块有不同的格式风格。我倾向于使用 /*! 开头(Qt 风格),每行前添加 *,以 */ 结束注释块。你可以参考 Doxygen 手册的文档化代码小节,以大致了解不同的风格选项。

Doxygen 注释分两个部分:简要描述和详细描述。它们都是可选的。在上面的例子中的注释块是对紧跟其后的构造函数声明的描述。在 @brief 之后的文本会显示在类概览小节中:

A screenshot of the C++ example of using Doxygen showing the Byte Stream Class Reference. The categories in the list are public member functions, writing (operators for writing to the stream), and reading (operators for reading from the stream)

在空行(空行是段落分隔符)之后是构造函数的实际文档。用 @param[in/out] 关键字标注传递给构造函数的参数,Doxygen 基于此生成参数列表:

Screenshot of the Doxygen example showing the parameters under ByteStream

值得注意的是 Doxygen 为 buffer()size() 方法自动生成了链接。相反,Doxygen 忽略了析构函数前的注释,因为它并没有使用特殊注释:

// Destructor
~ByteStream();

现在你已经看到 Doxygen 的绝大部分功能了。通过使用一种稍微改良的注释格式,让 Doxygen 能够识别它们。通过使用一些关键字,你甚至可以进一步控制格式化。在下一节中,我会进一步介绍 Doxygen 的其它特性。

其它特性

现在几乎所有的工作都可以通过对源代码注释的方式完成。通过一些微调,你可以轻松地优化 Doxygen 的输出。

Markdown 格式

为了进阶的格式化,Doxygen 支持 Markdown 和 HTML 命令。Markdown 速查表可以在 这里 下载到。

项目主页

除了自定义页眉之外,html/index.html 几乎没有其它内容了。你可以通过使用关键字向其中添加一些有意义的内容。因为主页通常不是针对某个源代码文件的,你可以将要显示在主页的内容放到项目根目录下的一个单独文件中。示例项目中就是这样做的,其输出效果如下:

The Doxygen Example Documentation field now contains headings and documentation: Introduction, Running the example, System requirements, and Building the code, with step by step examples and code snippets (all can be found in the example on GitHub)

自动链接生成

上面已将提到了,当你引用代码的其它部分时,Doxygen 会自动识别并生成相应链接。但要注意,这要求被引用部分也有文档才行。

更多信息可以在官方文档的自动链接生成中找到。

分组

ByteStream 重载 overload 了的读写流操作符 (<<>>)。在类的概览中可以发现操作符被分为读和写两组。分组是在 ByteStream 的头文件中定义的。

分组的语法以标记 @{ 开始,以 }@ 结束。在标记范围中的内容都属于这个分组。在 ByteStream.h 中的实现如下:

/** @name Writing
* Operators for writing to the stream
* @{
*/

(...)

/** @}
* @name Reading
* Operators for reading from the stream
* @{
*/

(...)

/** @} */

你可以在官方文档的分组中找到更多相关信息。

LLVM 支持

如果你用 Clang 构建项目的话,可以通过使用 -Wdocumentation 选项让 Clang 对特殊注释进行检查。想了解该特性的更多信息,可以参考 LLVM 用户手册和 Dmitri Gribenko 的展示报告,它们可以在 Clang 网站上找到。

谁在用 Doxygen

Doxygen 是在 1997 年首次发布的。尽管有些年头了,现在仍然有很多项目在使用 Doxygen。比如 NASA 的飞行软件框架 F Prime、图像处理库 OpenCV、包管理器 RPM。你还可以在其它领域发现 Doxygen 语法标记的身影,比如内容管理平台 Drupal 的文档标准中。

注意:Doxygen 输出的 HTML 文档风格类似于九十年代网页。并且它也难以描绘元编程和模板编程架构。在这些情况下,你应该选择 Sphinx 而不是 Doxygen。

(题图:MJ/4d354094-397e-4ac5-a80d-25b9c736ede5)


via: https://opensource.com/article/22/5/document-source-code-doxygen-linux

作者:Stephan Avenwedde 选题:lkxed 译者:toknow-gh 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Netflix 准备寄出最后的 DVD

Netflix 成立于 1997 年,最初的主业就是以邮寄方式出租 DVD 和蓝光碟片。在高峰期,它每周处理 120 万张 DVD,雇佣了 50 名员工。如今它只剩下 6 名员工筛选 DVD 碟片,而这一切也将在周五结束,停止邮寄其标志性的红色包裹。在鼎盛期,Netflix 是邮政服务的第五大客户,经营着 58 家邮寄设施,128 个运输车队,能为其 98.5% 的客户提供一日送达服务。这项业务仍然有 100 万客户,为了缓和忠诚客户的强烈反应,Netflix 允许客户保留最后租借的碟片。

消息来源:Las Vegas Sun
老王点评:一个时代的结束象征。你有多久没有看过 DVD 碟片了?

英特尔因付费阻止 AMD 进入市场而被罚 4 亿美元

2009 年,欧盟就英特尔的反垄断行为开出了创纪录的 11.3 亿美元罚款。虽然英特尔的隐藏回扣等行为因缺乏伤害证据而在上诉中驳回,但欧盟委员会维持了英特尔向 PC 厂商付费以推迟或限制产品使用 AMD 处理器的指控,对其罚款 4 亿美元。具体而言,欧盟委员会举例说明,2002 年到 2005 年,英特尔向惠普付费要求其不要通过直销渠道向中小企业提供采用 AMD CPU 的电脑;英特尔付费给联想公司,要求其将 AMD 笔记本电脑的推出时间推迟六个月。英特尔没有对这一裁决提出异议,而欧盟委员会已经对被驳回的回扣部分提起了上诉。

消息来源:Neo Win
老王点评:这竞争手段也是绝了。

微软为其 AI 数据中心寻找核电专家

微软正在招聘一名 “核技术首席项目经理”,负责“全球小型模块化反应堆(SMR)和微反应器能源战略的成熟和实施”,为微软云和人工智能所在的数据中心提供动力。SMR 是一种小型、模块化的核裂变发电厂,它可以由生产线制造,而且非常便于携带,可以放置在许多环境中。微反应器比 SMR 更小,甚至可以移动。据估计,为一个数据中心供电可能需要四个 SMR。

消息来源:The Register
老王点评:我有个担心,要是有一天 AI 能控制自己所需要的能源供给怎么办。?

当涉及到 CPU 的时候,有许多术语:AArch64、x86\_64、amd64、arm 等等。了解它们是什么以及它们之间的区别。

当你查看数据表或软件下载页面时是否被 ARMAArch64x86_64i386 等术语混淆?这些被称为 CPU 架构,我会帮你深入了解这个计算话题。

以下的表将为你总结每个字符串所代表的意义:

CPU 架构描述
x86_64 /x86/amd6464 位 AMD/英特尔 CPU 的别称
AArch64 /arm64/ARMv8/ARMv964 位 ARM CPU 的别称
i38632 位 AMD/英特尔 CPU
AArch32 /arm/ARMv1ARMv732 位 ARM CPU 的别称
rv64gc /rv64g64 位 RISC-V CPU 的别称
ppc64le64 位 PowerPC CPU,小端字节序存储

从左到右是使用该术语来描述 CPU 架构超过其右侧其他可选用术语的偏好。

从左到右是使用该术语描述 CPU 架构的优先级,使用左侧的而不是其右侧的其他可供选择的术语。

如果你像我一样是个极客,并想要更深入地解释,请继续阅读!

概述:CPU 架构

通常来说,我之前列出的术语是描述 CPU 架构的。但严格讲,它们被计算机工程师视为 CPU 的 指令集架构 Instruction Set Architecture (ISA)。

CPU 的指令集架构定义了 CPU 如何解析二进制代码中的 1 和 0。

这些 CPU 的 ISA 有几个主要的类别:

  • x86(AMD/英特尔)
  • ARM
  • RISC-V
  • PowerPC(IBM 仍在使用)

当然,还有更多种类的 CPU ISA,比如 MIPS、SPARC、DEC Alpha 等等。但我列出的这些至今仍然被广泛使用(以某种形式)。

上述列出的 ISA 主要根据 内存总线的宽度 分为至少两个子集。内存总线的宽度指的是 CPU 和 RAM 一次能传输的位数。内存总线有很多种宽度,但最常见的是 32 位和 64 位。

? 32 位的 CPU ISA 要么是已经过时的历史产物,被留下来要么只是为了支持旧的系统,要么只运用在微控制器中。可以说,所有新的硬件都已经是 64 位的了,特别是那些面向消费者的硬件。

x86(AMD/英特尔)

x86 CPU 的指令集架构主要源于英特尔,因为英特尔是最初搭配 8085 微处理器创建了它。8085 微处理器的内存总线宽度为 16 位。而后来,AMD 加入了这个领域,并且一直紧随英特尔的步伐,直到 AMD 创建出了自己的超集 64 位架构,超过了英特尔。

x86 架构的子集如下:

  • i386:如果你拥有的是 2007 年之前的 CPU,那么这可能就是你的 CPU 架构。它是现在使用的 AMD/英特尔的 x86 架构的 32 位“版本”。
  • x86_64/x86/amd64:这三个术语在不同的项目中可能会被交替使用。 但它们都是指 x86 AMD/英特尔架构的 64 位“版本”。无论如何,x86_64 这个字符串比 x86amd64 使用得更广泛(也更受欢迎)。例如,FreeBSD 项目称 64 位的 x86 架构为 amd64,而 Linux 和 macOS 则称之为 x86_64
? 由于 AMD 在创造 64 位 ISA 上超越了英特尔,所以一些项目(比如 FreeBSD)把 x86 的 64 位版本称为 amd64但更被广泛接受的术语还是 x86\_64

对于 CPU ISA,“x86” 这个字符串是一种特殊的情况。你要知道,在从 32 位的 x86(i386)到 64 位的 x86(x86_64)的过渡过程中,CPU 制造商确保了 CPU 能够运行 32 位 64 位指令。所以,有时你可能会看到 x86 也被用来意指“这款产品只能运行在 64 位的计算机上,但如果该计算机能运行 32 位指令,那么你也可以在它上面运行 32 位的用户软件”。

这种 x86 的模糊性——也就是诸如能同时运行 32 位代码的 64 位处理器——其主要用于和存在于运行在 64 位处理器上的,但是允许用户运行 32 位软件的操作系统,Windows 就通过这种被称作“兼容模式”的特性运用了这种方式。

汇总一下,由 AMD 和 英特尔 设计的 CPU 有两种架构:32 位的(i386)和 64 位的(x86_84)。

其它的英特尔

x86_64 ISA 实际上有几个子集。这些子集都是 64 位,但它们新添加了诸如 SIMD( 单指令多数据 Single Instruction Multiple Data )指令等功能。

  • x86_64-v1:这是大多数人都熟知的基础 x86_64 ISA。当人们谈论 x86_64 时,他们通常指的就是 x86_64-v1 ISA。
  • x86_64-v2:此版本新增了更多如 SSE3( 流式 SIMD 扩展版本 3 Streaming SIMD Extensions 3 )之类的指令扩展。
  • x86_64-v3:除了基础指令外,还新增了像 AVX( 高级矢量扩展 Advance Vector eXtensions )和 AVX2 等指令。这些指令可以使用高达 256 位宽的 CPU 寄存器!如果你能够有效利用它们,就能大规模并行处理计算任务。
  • x86_64-v4:这个版本在 x86_64-v3 ISA 的基础上,迭代了更多的 SIMD 指令扩展,比如 AVX256 和 AVX512。其中,AVX512 可以使用高达 512 位宽的 CPU 寄存器

ARM

ARM 不仅是一家为 CPU ISA 制定规范的公司,它也设计并授权给其他厂商使用其 CPU 内核,甚至允许其他公司使用 ARM CPU ISA 设计自己的 CPU 内核。(最后那句话听起来就像是个 SQL 查询似的!)

你可能因为如树莓派这类的 单板计算机 Single Board Computer )(SBC)听说过 ARM。但其实 ARM 的 CPU 还广泛应用于手机中。最近,苹果从使用 x86_64 处理器转向了在其笔记本和台式机产品中使用自家设计的 ARM 处理器。

就像任一种 CPU 架构一样,ARM 基于内存总线宽度也有两个子集。

官方认定的 32 位和 64 位 ARM 架构的名称分别是 AArch32AArch64。这里的 AArch 字符串代表 “ Arm 架构 Arm Architecture ”。这些是 CPU 执行指令时可切换的模式

实际符合 ARM 的 CPU ISA 的指令规范被命名为 ARMvX,其中 X 是规范版本的代表数字。目前为止,已经有九个主要的规范版本。规范 ARMv1ARMv7 定义了适用于 32 位 CPU 的架构,而 ARMv8ARMv9 是适用于 64 位 ARM CPU 的规范。(更多信息在此

? 每个 ARM CPU 规范又有进一步的子规范。例如 ARMv8,我们有 ARMv8-R、ARMv8-A、ARMv8.1-A、ARMv8.2-A、ARMv8.3-A、ARMv8.4-A、ARMv8.5-A、ARMv8.6-A、ARMv8.7-A、ARMv8.8-A 和 ARMv8.9-A。 其中 -A 表示“应用核心”,-R 表示“实时核心”。

你可能会觉得困惑,为什么在 AArch64 正式被 ARM 认定为 64 位 ARM 架构后,有些人仍然称其为 arm64。原因主要有两点:

  1. arm64 这个名称在 ARM 决定采用 AArch64 之前就已经广为人知了。(ARM 的一些官方文档也将 64 位的 ARM 架构称为 arm64…… ?)
  2. Linus Torvalds 对 AArch64 这个名称表示不满。 因此,Linux 的代码库主要将 AArch64 称为 arm64。然而,当你在系统中运行 uname -m 时,输出仍然是 aarch64

因此,对于 32 位 ARM CPU,你应该寻找 AArch32 这个字符串,但有时也可能是 armarmv7。相似的,对于 64 位 ARM CPU,你应该找 AArch64 这个字符串,但有时也可能会是 arm64ARMv8ARMv9

RISC-V

RISC-V 是 CPU 指令集架构(ISA)的一个开源规范。**但这并不意味着 CPU 自身是开源的!**这有点像以太网的情况。以太网规范是开源的,但你需付费购买网线、路由器和交换器。同样,RISC-V CPU 也要花钱购买。 ?

尽管如此,这并没有阻止人们创建并在开源许可下提供免费获取(设计上的获取,并非物理核心/SoC)的 RISC-V 核心。这是其中的一项尝试

? 总结一下:如果你在寻找运行于 RISC-V 消费级 CPU 上的软件,你应该寻找 “rv64gc” 这一字符串。这是许多 Linux 发行版所公认的。

像所有 CPU 架构一样,RISC-V 拥有 32 位和 64 位 CPU 架构。但由于 RISC-V 是非常新的描述 CPU ISA 的方式,大部分主流消费端或客户端的 CPU 核心一般都是 64 位的。大部分 32 位的设计都是微控制器,用于非常具体的用例。

它们的区别在于 CPU 的扩展。被称为 RISC-V CPU 的最低要求即实现“ 基本整数指令集 Base Integer Instruction Set ”(rv64i)。

下表列出了一些扩展及其描述:

扩展名称描述
rv64i64 位基本整数指令集(必须的
m乘法和除法指令
a原子指令
f单精度浮点指令
d双精度浮点指令
g别名;一组运行通用操作系统所需的扩展集(包括 imafd
c压缩指令

rv64i 这一字符串中,rv 表示 RISC-V,64 指的是 64 位 CPU 架构,而 i 指的是强制性的基本整数指令集扩展。 rv64i 之所以是一体的,因为即使 i 被认为是一种“扩展”,但它是必须的

约定俗成的,扩展名称按上述特定顺序排列。因此,rv64g 展开为 rv64imafd,而不是 rv64adfim

? 还有其他一些像 Zicsr 和 Zifencei 这样的扩展,它们位于 dg 扩展之间,但我故意不列出,以避免令你感到害怕。

因此,严格说来,(在写这篇文章的时候)rv64g 实际上是 rv64imafdZicsrZifencei恶魔般的笑声

PowerPC

PowerPC 曾是苹果、IBM 以及,摩托罗拉早期合作时代的一种流行 CPU 架构。在苹果转向英特尔的 x86 架构之前,它一直被应用于苹果的全部消费品产品线。

最初,PowerPC 采取的是大端字节序的内存排序。后来随着 64 位架构的引入,增加了使用小端字节排序的选项。这么做的目的是为了与英特尔的内存排序保持兼容(以防止软件错误),因为英特尔自始至终都一直采用的是小端字节序。有关字节序的更多内容,我可以唠叨很久,不过你可以通过阅读 这篇 Mozilla 的文档 来了解更多。

由于字节序在此也起到了一定的作用,PowerPC 共有三种架构:

  • powerpc:表示 32 位的 PowerPC 架构。
  • ppc64:表示拥有大端字节序内存排序的 64 位 PowerPC 架构。
  • ppc64le:表示拥有小端字节序内存排序的 64 位 PowerPC 架构。

目前,ppc64le 是被广泛使用的架构

结论

市面上有各种各样的 CPU 架构。对于每一种架构,都有 32 位和 64 位的子集。在现有的 CPU 中,我们可以找到 x86、ARM、RISC-V 和 PowerPC 等架构。

其中,x86 是最广泛和易于获取的 CPU 架构,因为英特尔和 AMD 都采取了这种架构。此外,ARM 提供的产品几乎在手机和易于获取的单板计算机中被独占使用。

RISC-V 正在努力使硬件更广泛地被使用。我就有一款带有 RISC-V CPU 的单板计算机。 ?

而 PowerPC 主要用于服务器,至少当前如此。

(题图:MJ/634ac7ea-b344-443a-b041-3bb3b31a956f)


via: https://itsfoss.com/arm-aarch64-x86_64/

作者:Pratham Patel 选题:lujun9972 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出