Jim Hall 发布的文章

GNOME Linux 桌面环境的最新版本现已推出。了解 GNOME 44 中新的和改进的蓝牙、用户界面、应用程序和其他功能。

我在家使用的 Linux PC 上采用 GNOME 作为我主要的桌面环境。GNOME 提供了方便易用的图形化桌面,不仅具备我所需的灵活性,而且在我专注工作时不会妨碍我的操作。

最近 GNOME 发布了 GNOME 44,引入了许多新功能。我联系了 GNOME 团队,咨询了最新版本的新特性和改进。以下是品牌经理 Caroline Henriksen、GNOME 开发者和发布团队成员 Matthias Clasen,以及设计团队成员 Allan Day 分享的信息。

GNOME 的新特性

Jim Hall: 在 GNOME 44 中,有哪些令你们最为兴奋的新功能和更新的功能?

GNOME 团队: 我们非常期待全新的、现代化的用户界面设计,这不仅体现在核心应用如 “ 文件 Files ”应用(文件管理器,即 Nautilus),还包括 “ 设置 Settings ” 应用,在上一个开发循环中我们对其中的很多面板做了大量改进。如果你有机会,欢迎试用全新的 “ 鼠标和触控板 Mouse & Touchpad ” 设置面板,享受其中的动态插图。

GNOME 44 中有很多让人惊喜的功能。比如,文件选择器中全新的网格视图一定会让很多人感到惊喜,同时你也可以通过快速设置中的全新蓝牙菜单轻松地连接设备。

Jim:发布说明提到了 GNOME Circle,同时增加了几个新应用程序。请问 GNOME Circle 是什么?

团队:GNOME Circle 是一组优秀的应用程序,它们使用了 GNOME 平台。GNOME Circle 是 GNOME 推广使用我们技术的最佳应用程序,并支持应用程序开发人员的一个项目。

为了被纳入 GNOME Circle,一个应用程序必须满足一组要求。一旦满足要求,开发人员就可以获得额外的公众宣传、GNOME 基金会会员资格,以及访问其他基础设施和旅行赞助支持。有关详细信息和如何申请,请参阅 GNOME Circle 页面。

我们非常高兴看到 GNOME Circle 取得了巨大的成功。目前,它已经包含了超过 50 个应用程序!我特别喜欢其中不是所有的应用程序都与计算机有关,你可以找到健康跟踪器、节拍器或象棋钟等应用程序。

Jim:GNOME 是几个 Linux 发行版的标准桌面环境。我们可以在哪里看到 GNOME 44?

团队:已经发布的 Fedora 38 版本包含 GNOME 44。Ubuntu 23.04 也包含 GNOME 44。而且,GNOME 44 构建已经在一些主要的发行版中出现,例如 openSUSE 的 Tumbleweed 和 MicroOS 等。

GNOME 社区

Jim: GNOME 44 的发布名称是 Kuala Lumpur,请问这个名字的来源是什么?

团队: GNOME 每年都有两个重要的大型会议,GUADEC 是在年中举办的(下一届会议将于 2023 年 7 月在拉脱维亚举行),GNOME Asia 则在年末举行。我们非常感谢马来西亚的本地团队在 吉隆坡 Kuala Lumpur 为我们举办 2022 年的 GNOME Asia 活动。

组织这些活动需要 GNOME 的工作人员和当地团队投入大量的精力和承诺。作为对他们的感激之意,我们会将 GNOME 的发布版本以最近大会的地点命名。这个命名方案是几年前引入的。GNOME 3.18 的发布名称 哥德堡 Gothenburg 就是第一个采用这种方式命名的版本。

Jim: GNOME 拥有一个充满活力的用户社区,有很多积极的成员。那么,GNOME 是如何保持社区的积极参与的呢?

团队: GNOME 一直以来都是一个以社区为驱动的项目,具有强烈的协作和包容性。这也是成为 GNOME 贡献者和用户的回报之一。成为 GNOME 社区的一员,意味着你可以与来自全世界的人进行互动,共同实现目标并交流想法。这是一种丰富而鼓舞人心的体验,这也是我们的社区保持热情和积极性的原因之一。

我们提高社区参与度的一个重要手段是,尽可能地满足社区用户的需求,使我们的活动对世界各地的人来说更易于参加。例如,我们的旗舰会议 GUADEC 去年在墨西哥的 瓜达拉哈拉 Guadalajara 举行,这是自欧洲以外的地方举办的第一个 GUADEC 会议,这有助于增加拉丁美洲的 GNOME 用户和贡献者的参与度。

此外,我们还努力不仅在我们自己的会议和活动中,而且在其他活动如 Linux Application Summit、FOSDEM 或 SCaLE 中与我们的社区成员见面。如果你在这些活动中看到 GNOME 的展台,请过来打个招呼。通常你会发现,开发人员、设计师、基金会工作人员以及理事会成员都很乐意聊天和回答问题。

如何参与 GNOME

Jim: 如何开始编写自己的 GNOME 应用程序呢?如果我想学习如何编写我的第一个 GNOME “Hello World” 应用程序,有没有可以供我参考的教程?

团队: 开始为 GNOME 开发应用程序 网站包括一系列教程,其中包括快速创建你的第一个应用程序的指南。随着 Flatpak 和 GNOME Builder 等新技术的出现,如今创建自己的应用程序变得非常容易。打开 Builder,单击 “ 新项目 new project ”,填写一些细节,就可以拥有自己的运行中的 GNOME 应用程序。确实如此简单。

Jim: 参与者可以通过哪些方式做出贡献呢?

团队: 如果有人对 GNOME 产生了兴趣,并有动力参与其中,那么他们可以做很多事情来帮助我们。如果你是初学者,参与我们 Discourse 实例上的讨论或报告问题是一个很好的开始。还有很多非技术性工作需要完成,比如帮助我们的文档、将 GNOME 翻译成不同的语言,甚至帮助组织我们的年度会议。许多这些活动都有友好的团队进行协作,他们会帮助你入门。

或者,如果你有编码经验,你可以浏览我们的 “新手”任务,寻找你感兴趣的任务。

另一个贡献的方式是通过对 GNOME 的 捐赠。作为一个开源项目和非营利基金会,定期的捐赠可以帮助我们继续建设 GNOME,提供必要的基础设施,以及支持新的倡议。

(题图:MJ/addea707-a20a-4469-9131-cf958b942e7b)


via: https://opensource.com/article/23/4/linux-gnome-44-features

作者:Jim Hall 选题:lkxed 译者:ChatGPT 校对:wxy

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

在 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. 你可以直接访问控制台终端。 在 Linux 上,你可以创建 文本模式 的程序,使用一个诸如 ncurses 之类的库来绘制终端屏幕。但是,DOS 允许程序访问控制台终端和视频硬件。这为编写更有趣的程序提供了极大的灵活性。

我喜欢在 GCC 的 IA-16 移植或 OpenWatcom 中编写我的 C 程序,具体取决于我正在编写的是哪种程序。OpenWatcom C 编译器更容易安装,因为它只是个单一的软件包。这就是为什么我们在 FreeDOS 的 LiveCD 中提供 OpenWatcom 的原因, 在你安装 FreeDOS 的 1.3 RC4 时,如果你选择 “ 完全的安装(包括安装应用程序和游戏) Full installation including applications and games ”,那么你也自动地安装 OpenWatcom。如果你选择安装 “ 纯 DOS 系统 Plain DOS system ”,那么,你将需要使用 FDIMPLES 软件包管理器来安装 OpenWatcom C 编译器。

 title=

在 FreeDOS 1.3 RC4 上安装 OpenWatcom

在 DOS 上使用 C 语言编程

你可以在 OpenWatcom 项目网站 找到文档和库指南,以学习 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 种文本颜色 和 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 的 coniographics 库来制作一个更有趣的程序,并使用彩虹般的颜色打印 “Hello world” 。

在这个实例中,我们将遍历每种文本颜色,从 0(黑色)到 15(亮白色)。随着我们打印每一行,我们都将为下一行缩进一个空格。在我们完成后,我们将等待用户按下任意按键,然后,我们将重置屏幕并退出。

你可以使用任何文本编辑器来编写你的 C 源文件代码。我喜欢使用一些与众不同的编辑器,如 FreeDOS EditFreemacs,但是,我最近一直在使用 FED editor ,因为它提供 语法高亮 功能,使其很容易在我的程序源文件代码中看到关键字、字符串(LCCT 译注:C 语言中没有字符串)、变量。

 title=

使用 C 语言编写一个简单的测试程序

在你使用 OpenWatcom 编译前,你将需要设置 DOS 的 环境变量,以便 OpenWatcom 可以找到它的支持文件。OpenWatcom C 编译器软件包中包含了一个为你做这件事的设置 批处理文件\DEVEL\OW\OWSETENV.BAT。运行这个批处理文件可以自动为你的 OpenWatcom 设置环境变量。

在你的开发环境准备好后,你可以使用 OpenWatcom 编译器来编译这个 “Hello world” 程序。我已经将我的 C 源文件文件保存为 TEST.C ,因此,我可以输入 WCL TEST.C 来编译和连接该程序为一个名称为 TEST.EXE 的 DOS 可执行文件。在 OpenWatcom 的输出信息中,你将看到 WCL 实际上调用 OpenWatcom C 编译器(WCC)来编译,并调用 OpenWatcom 链接器(WLINK)来执行 对象/目标 object 链接阶段:

 title=

使用 OpenWatcom 编译测试文件

OpenWatcom 会打印一些无关的输出信息,这可能会使发现错误和警告变得困难。为了告诉编译器来抑制这些大量的额外信息,请在编译时使用 /Q(“Quiet”)选项:

 title= option to make OpenWatcom print less output")

在编译 C 源文件文件时,如果你没有看到任何错误信息,那么你现在就可以运行你的 DOS 程序了。这个 “Hello World” 示例的程序名称是 TEST.EXE 。在 DOS 命令行中输入 TEST 来运行新的程序,你应该会看到这个非常漂亮的输出:

 title=

C 语言是一种非常高效的编程语言,在像 DOS 之类的资源有限的系统上进行编程也可以很好的工作。在 DOS 上,你可以使用 C 语言来做更多的事。如果你是 C 语言的初学者,那么,你可以跟随我们在 FreeDOS 网站上的 《使用 C 语言编写 FreeDOS 程序》 的自学电子书,以及在 FreeDOS YouTube 频道 上的配套的 入门指南 how-to 系列视频,来自主学习 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 选题:lujun9972 译者:robsean 校对:wxy

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

使用 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 编写项目文档 的文章中,我将一个开源棋盘游戏的自述文件从纯文本更新为 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> 内联元素仅突出显示粗体和斜体文本。 这种对比色的使用可能看起来不太好看,但我想你可以清楚看到块和内联元素:

辣眼睛!但是这些颜色确实能帮助我么更好地看出块和內联元素的区别。

应用样式

你可以使用样式使这个自述文件更易于阅读。 因为你刚刚开始学习样式,还是先只用一些简单的样式元素:

  • 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; }

所有网络浏览器都定义了默认的衬线和无衬线字体,你可以使用这些名称来引用它们。用户可以更改他们喜欢用于显示衬线和无衬线的字体,因此不太可能对每个人都一样,但在字体列表中使用 serifsans-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>

在网页浏览器上查看时,你会看到采用无衬线字体的自述文件,标题和副标题使用衬线字体。 页面标题居中。粗体和斜体文本使用略有不同的颜色来吸引读者的注意力而不会分散注意力。 最后,列表项周围有额外的空间,使每个项目更易于阅读。

通过添加一些样式,我们使这个自述文件更易于阅读。

这是在技术写作中使用样式的简单介绍。掌握了基础知识后,你可能会对 Mozilla 的 HTML 指南 感兴趣。它包括一些很棒的初学者教程,因此你可以学习如何创建自己的网页。

有关 CSS 样式的更多信息,我推荐 Mozilla 的 CSS 指南

(题图: MJ:web internet traffic design)


via: https://opensource.com/article/22/8/css-html-project-documentation

作者:Jim Hall 选题:lkxed 译者:XiaotingHuang22 校对:wxy

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

用你的树莓派制作一个接近完美的圆。

世界各地将 3 月 14 日定为圆周率日。许多人通过在房子周围找到的物体测量圆周率来庆祝圆周率日。我想用我的树莓派 3B 为今年的圆周率日做一些类似的事情。继续阅读以了解我如何使用我的树莓派测量圆周率。

你需要什么:

  • 树莓派单板机
  • 方格纸
  • 带毫米和厘米测量值的标尺

1、画一个圆

圆周率是圆的周长与其直径的比值。要计算圆周率,我们需要测量一个完美绘制的圆的周长和直径。幸运的是,树莓派主板上的安装孔足够大,可以使用铅笔或钢笔。我通过一个树莓派板安装孔插入了一根图钉,小心地将针放在一张方格纸上两条线的交点上。

握住别针,我将一支笔插入对面的安装孔中,并通过将笔绕着别针移动来画一个圆圈。树莓派主板底面的焊点会卡在纸上,但小心点还是可以画好圆圈的。

Use the Raspberry Pi as a compass to draw a circle.

2、把圆分成段

通过画一条穿过圆心的垂直线将圆分成两半,通过画一条穿过圆心的水平线将圆再次分成四分之一。当我画圆的时候,我把图钉正好放在图画纸上两条线的交点上,这样就很容易找到垂直和水平的中心线。你可以通过在对角线上画一条线来创造一个 “八分” 片。

Each small wedge is 1/8 of a circle.

进一步的划分是与尺子的练习。我用尺子找到“四分之一楔形”和“八分之一楔形”任意两个交点的中点,做成一个 1/16 的楔形。你可以使用相同的方法制作越来越小的 1/32 和 1/64 圆的切片。通过非常小心,我还能够在圆的 1/128 处测量出一个非常窄的楔形:

If you are careful, you can keep dividing to find 1/128 of a circle.

3、估算周长

我最小的楔形是一个圆的 1/128。如此小的切片,楔形的外弧非常小,我们可以用一条直线来近似它。这实际上不是圆周长的 1/128,但它足够接近,我们可以将其用作一个很好的估计。

Use the mm measurement on your ruler to measure the outer arc of the 1/128 segment.

使用我的尺子上的毫米测量值,我测量了我的 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 选题:lkxed 译者:geekpi 校对:wxy

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

这是一个完全主观的列表,为你的 Linux 控制台提供一些有趣的字体建议。

最近,终端模拟器成为我的一个话题,它让我思考:大家最喜欢的终端字体是什么?

因此,我请贡献者分享了他们喜欢使用的字体。以下是他们的答案。

VT323

我喜欢在我的 GNOME 终端中使用一个不一样的字体(VT323),而不是在我的编程时用的编辑器或其他使用等宽字体的应用程序中使用的字体(Source Code Pro)。我就是喜欢经典的 VT 风格字体的外观。

有时,我会切换到原始的 IBM EGA 字体,因为在我眼里它看起来真的很漂亮。但是我把 EGA 和 DOS 联系在一起,把 VT323 和经典的 Unix 终端联系在一起,所以我大部分时间都用 VT323。下面是我使用 VT323 作为等宽字体的 GNOME 终端的屏幕截图:

gnome-terminal1108×926 output

我设置终端使用 24pt 大小的 VT323 字体,使得终端界面呈现一个舒适的大窗口。如果我要打开一个终端窗口,我其实是想使用它来些实实在在的工作,而不是敲两下就退出。我可能会在那个终端窗口呆一段时间,所以它应该很大,很容易看到。我也更喜欢 80x25 布局(每行 80 个字符,共 25 行),因为我是一个老式 DOS 命令行玩家,25 行在我看来才是 “正确的” 行数:

preference profile screen - text appearance

—— Jim Hall

等宽的字体

我不觉得我会只使用一个特定的字体。我通常使用 DejaVuLiberation。我喜欢等宽字体,因为它们更容易阅读。不过,我也不希望字母靠得太近。更重要的是,要能够区分数字 1 和小写的 L、数字 O 和大小的字母 Q 等等。另外,让所有特殊字符都能特别清楚地显示出来也很好。

我也喜欢让字体和背景之间呈现高对比度,所以我将背景设置为黑色,字符设置为白色。

—— Greg Pittman

Hack

我喜欢使用等宽字体,特别是在终端和代码编辑器中,因为它们更容易阅读。我使用 Hack 系列字体已经很多年了。它提供了一个很好的等宽字体,并提供了额外的字形和 Powerline 支持,我可以用它们在命令行上提供一些状态信息。

Command line

这是用 Fontpreview tool 工具生成的字体预览。

Display of font A-Z and the numbers

—— Ricardo Gerardi

Victor Mono

我在终端和 IDE 中使用 Victor Mono 已经好几年了。斜体的等宽手写体可能不是一开始就会喜欢上的,我喜欢这样,因为这让代码注释的外观很独特,与代码的其余部分明显不同。下面是它在终端中的样子:

terminal font is italic characters in a monospace cursive script

我在 IDE 和终端使用了 Solarized Dark 配色方案。如果可以的话,任何与工作或代码相关的东西都会使用相同的配色方案和相同的字体,所以一切看起来都很统一。这些年来,我使用了各种字体,但我总是试图在我的终端中使用与 IDE 中相同的字体。

—— Chris Reynolds

Monaco

目前,我用 16pt 大小的 Monaco 常规字形。(要比 12pt 或是 14pt 大小好多了。)

—— Jenny Panighetti

用粉红色来装点

这让我想起了有一次我恶作剧把团队里的其他开发者的终端都改成了粉红色(我是里面唯一的女性),一个婴儿粉的背景与深粉红色的文字的搭配。

我喜欢把我的个人终端弄得漂漂亮亮的,但在工作中,我会用黑底白字,并把字体弄成 16pt 左右,因为我喜欢较大的字体尺寸。

我总是把我的终端设置为 SF Mono 字体,但我把它加粗,并增大了一点,以便我可以更好地看到它。我最喜欢的颜色是粉红色或漂亮的水蓝色。我也喜欢终端的默认风格,它叫做 “Novel”。

Two open terminals, one pink and one aqua blue

—— RachieVee

万事不决,问 ChatGPT

对于这个问题,我决定问问 ChatGPT。以下是它的回答:

作为一个语言模型,我没有个人偏好,也没有能力拥有一种最喜欢的字体。但是,有一些流行的终端字体,包括 Monospace、Consolas 和 Inconsolata。这些字体很受欢迎,因为它们易于阅读,不同字符之间有明显的区别,即使在字体大小比较小的情况下也非常清晰。此外,它们被设计为适配在各种不同的操作系统和终端中得到更好的呈现,使它们成为开发人员和用户的通用选择。

我部分使用 GPT-3 生成了这段文字,GPT-3 是 OpenAI 的大规模语言生成模型。在生成草稿后,作者可以根据自己的喜好审查、编辑和修改,以符合个人的喜好,并对最终发布的内容承担最终责任。

—— Stephanie Brinley

Fantasque Sans Mono

$ grep font ~/.Xdefaults
URxvt*font: xft:FantasqueSansMono-Regular:pixelsize=12:antialias=true

我不记得我是什么时候开始使用 Fantasque Sans Mono 的,但我想这是我过去 8 年来的默认选择,无论是在 Rxvt 还是 Konsole 中。我不知道我在 GNOME 终端中使用的是什么字体,很可能是 GNOME 上的默认字体。

—— Seth Kenlon

Jetbrains Mono

最近,我将 Tilix 设置为默认终端。我的 Tilix 配置与 Jim Hall 使用的设置类似。几个不同点是:

  • 光标形状是下划线而不是块
  • 字体是 Jetbrains Mono Nerd Font Mono Medium 14

Black terminal with blue text

—— Alan Formy-Duval


via: https://opensource.com/article/23/4/linux-terminal-fonts

作者:Jim Hall 选题:lkxed 译者:Taivas Jumala 校对:wxy

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

通过使用命令行让用户告诉程序要什么,可以让程序更加灵活。

 title=

在已经知道要处理什么文件和对文件进行哪些操作的情况下,编写处理文件的 C 语言程序就很容易了。如果将文件名“硬编码”在程序中,或者你的程序只以一种方式来处理文件,那么你的程序总是知道要做什么。

但是如果程序每次运行时能够对用户的输入做出反应,可以使程序更灵活。让用户告诉程序要处理什么文件,或者以不同的方式完成任务,要实现这样的功能就需要读取命令行参数。

读取命令行

一个 C 语言程序可以用如下声明开头:

int main()

这是启动 C 程序最简单的形式。但如果在圆括号中加入标准参数,你的程序就可以从命令行中读取选项了:

int main(int argc, char **argv)

argc 表示命令行中的参数个数。它总是一个至少为 1 的数。

argv 是一个二级指针,它指向一个字符串数组。这个数组中保存的是从命令行接收的各个参数。数组的第一个元素 *argv[0] 是程序的名称。**argv 数组的其它元素包含剩下的命令行参数。

下面我将写一个简单的示例程序,它能够回显通过命令行参数传递给它的选项。它跟 Linux 的 echo 命令类似,只不过我们的程序会打印出程序名。同时它还会调用 puts 函数将命令行选项按行打印输出。

#include <stdio.h>

int
main(int argc, char **argv)
{
  int i;

  printf("argc=%d\n", argc); /* debugging */

  for (i = 0; i < argc; i++) {
    puts(argv[i]);
  }

  return 0;
}

编译此程序,并在运行时提供一些命令行参数,你会看到传入的命令行参数被逐行打印出来:

$ ./echo this program can read the command line
argc=8
./echo
this
program
can
read
the
command
line

这个命令行将程序的 argc 置为 8,**argv 数组包含 8 个元素:程序名以及用户输入的 7 个单词。由于 C 语言中数组下标从 0 开始,所以这些元素的标号分别是 0 到 7。这也是在 for 循环中处理命令行参数时能够用 i < argc 作为比较条件的原因。

你也可以用这个方式实现自己的 catcp 命令。cat 命令的基本功能是显示一个或几个文件的内容。下面是一个简化版的cat 命令,它从命令行获取文件名:

#include <stdio.h>

void
copyfile(FILE *in, FILE *out)
{
  int ch;

  while ((ch = fgetc(in)) != EOF) {
    fputc(ch, out);
  }
}

int
main(int argc, char **argv)
{
  int i;
  FILE *fileptr;

  for (i = 1; i < argc; i++) {
    fileptr = fopen(argv[i], "r");

    if (fileptr != NULL) {
      copyfile(fileptr, stdout);
      fclose(fileptr);
    }
  }

  return 0;
}

这个简化版的 cat 命令从命令行读取文件名列表,然后将各个文件的内容逐字符地显示到标准输出上。假定我有一个叫做 hello.txt 的文件,其中包含数行文本内容。我能用自己实现的 cat 命令将它的内容显示出来:

$ ./cat hello.txt
Hi there!
This is a sample text file.

以这个简单程序为出发点,你也可以实现自己版本的其它 Linux 命令。比如 cp 命令,它从命令行读取两个文件名:要读取的文件和要写入的文件。

读取命令行选项

通过命令行读取文件名和其它文本固然很棒,但是如果想要程序根据用户给出的选项改变行为呢?比如 Linux 的 cat 命令就支持以下命令行选项:

  • -b 显示非空行的行号
  • -E 在行尾显示 $
  • -n 显示行号
  • -s 合并显示空行
  • -T 将制表符显示为 ^I
  • -v^xM-x 方式显示非打印字符,换行符和制表符除外

这些以一个连字符开头的单字母的选项叫做短选项。通常短选项是分开使用的,就像这样 cat -E -n。但是也可以将多个短选项合并,比如 cat -En

值得庆幸的是,所有 Linux 和 Unix 系统都包含 getopt 库。它提供了一种简单的方式来读取命令行参数。getopt 定义在头文件 unistd.h 中。你可以在程序中使用 getopt 来读取命令行短选项。

与其它 Unix 系统不同的是,Linux 上的 getopt 总是保证短选项出现在命令行参数的最前面。比如,用户输入的是 cat -E file -n-E 在最前面,-n 在文件名之后。如果使用 Linux 的 getopt 来处理,程序会认为用户输入的是 cat -E -n file。这样做可以使处理过程更顺畅,因为 getopt 可以解析完所有短选项,剩下的文件名列表可以通过 **argv 来统一处理。

你可以这样使用 getopt:

#include <unistd.h>

int getopt(int argc, char **argv, char *optstring);

optstring 是由所有合法的选项字符组成的字符串。比如你的程序允许的选项是 -E-n, 那么 optstring 的值就是 "En"

通常通过在循环中调用 getopt 来解析命令行选项。每次调用时 getopt 会返回找到的下一个短选项,如果遇到无法识别的选项则返回 '?'。当没有更多短选项时它返回 -1,并且设置全局变量 optind 的值指向 **argv 中所有段选项之后的第一个元素。

下面看一个简单的例子。这个演示程序没有实现 cat 命令的所有选项,但它只是能够解析命令行。每当发现一个合法的命令行选项,它就打印出相应的提示消息。在你自己的程序中,你可能会根据这些命令行选项执行变量赋值等者其它操作。

#include <stdio.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
  int i;
  int option;

  /* parse short options */

  while ((option = getopt(argc, argv, "bEnsTv")) != -1) {
    switch (option) {
    case 'b':
      puts("Put line numbers next to non-blank lines");
      break;
    case 'E':
      puts("Show the ends of lines as $");
      break;
    case 'n':
      puts("Put line numbers next to all lines");
      break;
    case 's':
      puts("Suppress printing repeated blank lines");
      break;
    case 'T':
      puts("Show tabs as ^I");
      break;
    case 'v':
      puts("Verbose");
      break;
    default:                          /* '?' */
      puts("What's that??");
    }
  }

  /* print the rest of the command line */

  puts("------------------------------");

  for (i = optind; i < argc; i++) {
    puts(argv[i]);
  }

  return 0;
}

假如你把程序编译为 args,你可以通过尝试不同的命令行参数组合,来了解程序是怎么解析短选项,以及是怎么将其它的命令行参数留下来的。最简单的例子是将所有的选项都放在最前面,就像这样:

$ ./args -b -T file1 file2
Put line numbers next to non-blank lines
Show tabs as ^I
------------------------------
file1
file2

现在试试将两个短选项合并使用的效果:

$ ./args -bT file1 file2
Put line numbers next to non-blank lines
Show tabs as ^I
------------------------------
file1
file2

如果有必要的话,getopt可以对命令行参数进行重排:

$ ./args -E file1 file2 -T
Show the ends of lines as $
Show tabs as ^I
------------------------------
file1
file2

如果用户输入了错误的短选项,getopt 会打印一条消息:

$ ./args -s -an file1 file2
Suppress printing repeated blank lines
./args: invalid option -- 'a'
What's that??
Put line numbers next to all lines
------------------------------
file1
file2

下载速查表

getopt 还有更多的功能。例如,通过设计 -s string-f file 这样的命令行语法规则,可以让短选项拥有自己的二级选项。你也可以告诉 getopt 在遇到无法识别的选项时不显示错误信息。使用 man 3 getopt 命令查看 getopt(3) 手册可以了解 getopt 的更多功能。

如果你需要 getopt()getopt_long()的使用语法和结构上的提示,可以 下载我制作的速查表。它提供了最小可行代码,并列出了你需要了解的一些全局变量的含义。速查表的一面是 getopt() 的用法,另一面是 getopt_long()的用法。


via: https://opensource.com/article/21/8/short-option-parsing-c

作者:Jim Hall 选题:lujun9972 译者:toknow-gh 校对:wxy

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