分类 技术 下的文章

VS Code 无疑是最受欢迎的代码编辑器之一。同样,GitHub 是编码人员中最受欢迎的平台。

两种微软产品可以很好地融合在一起。你可以在 VS Code 中无缝编码并将更改推送到你的 GitHub 仓库。从同一个应用界面完成所有这些工作让生活变得如此轻松。

如何将 GitHub 添加到 VS Code? 其实很容易。

在本教程中,我将展示:

  • 如何将你的 GitHub 帐户集成到 VS Code 中
  • 如何将仓库从 GitHub 克隆到 VS Code 中
  • 如何将你的更改从 VS Code 推送到 GitHub

听起来不错?让我们看看如何去做。

先决条件

请确保你的计算机上安装了 Git。怎么做?

一种方法是转到 VS Code 中的源代码管理视图。如果未安装 Git,它会要求你下载它。

Checking if Git is installed via VS Code

另一件事是你需要配置 Git 用户名和电子邮件

将 GitHub 添加到 VS Code

VS Code 内置了 GitHub 集成。你不需要安装任何扩展来克隆仓库和推送你的更改。

从左侧边栏转到源代码选项卡。你应该看到 “ 克隆仓库 Clone Repository ” 或 “ 发布到 GitHub Publish to GitHub ”(如果你已经打开了一个文件夹)选项。单击 “ 克隆仓库 Clone Repository ” 并为其提供 GitHub 仓库链接或单击 “ 从 GitHub 克隆 Clone from GitHub ”。

Cloning GitHub repo in VS Code

然后它会显示一条消息,要求你登录 GitHub。

VS Code asking to sign in to GitHub

你单击“ 允许 Allow ”按钮,它将打开 GitHub 登录页面。

Connect GitHub to VS Code

如果你尝试克隆一个仓库,你应该会看到这样的消息并单击 “ 打开 Open ”。

Opening GitHub repo in VS Code

这应该需要几秒钟,你就会登录到你的 GitHub 帐户。

你怎么知道你已经使用 VS Code 登录到 GitHub?

好吧,它将开始在顶部视图中显示你的 GitHub 仓库(如果有的话)(如果你之前按下了“克隆存储库”)。

GitHub repos accessible from VS Code

或者,你可以单击左下角的配置文件图标,查看它是否显示你已登录到你的 GitHub 帐户。

Checking if VS Code logged into GitHub account

在 GitHub 中克隆一个 GitHub 仓库

如果你已经在 GitHub 中打开了一个项目,想要克隆另一个 GitHub 仓库,有几种方法可以做到。

你可以使用 Git 命令将仓库克隆到磁盘上,然后在 VS Code 中打开此仓库文件夹。

或者,如果你不想使用命令行,则可以坚持使用 VS Code。

这很简单。在 VS Code 中打开一个新窗口。

Open a new window in VS Code

这将为你提供一个全新、干净的编辑器。如果看到欢迎屏幕,你可以从那里单击 “克隆存储库” 的快速链接。

否则,从左侧边栏转到“ 源码管理 Source Control ”选项卡,然后单击“ 克隆仓库 Clone Repository ”按钮。

它将在顶部打开一个视图。你可以直接复制 GitHub 仓库的 URL。它可以自动从中获取克隆链接。

Clone a new GitHub repo in VS Code

它会问你把克隆的仓库放在哪里。

Select a location for the cloned GitHub repo in VS Code

它会询问你是否要将克隆的仓库在 VS Code 中打开。如果你想立即处理它,那就去做吧。

Open the just cloned GitHub repo in VS Code

不仅仅是克隆的存储库,VS Code 会询问你是否信任你添加到其中的任何文件夹的作者。

Trust author promot in VS Code

好了,你已经在 VS Code 中克隆了一个 GitHub 仓库。让我们看看如何修改并将更改推送到 GitHub。

从 VS Code 推送更改到 GitHub

现在假设你对代码进行了一些更改并希望将提交推送到你的仓库。

当你将更改保存到文件中,VS Code 就会开始用 “M” 指示修改后的文件。对于新文件,符号为 “U”(未跟踪)。

从左侧进入“源码控制”,输入提交消息,然后单击提交旁边的按钮并选择 “ 提交并推送 Commit & Push ”。

Push your changes to GitHub from VS Code

如果你没有配置 Git 用户名和电子邮件,你将看到如下错误。

Error in VS Code if Git username and email is not set

你可以 在全局或仓库级别设置用户名和电子邮件。完全根据你自己的选择。

? 对于成功的提交和推送,你不会看到任何错误。已修改文件或新文件旁边的 “M” 或 “U” 符号将消失。

你可以通过进入 GitHub 上的仓库来验证你的推送是否成功。

你可以选择在本地提交更改而不推送它们。你也可以在这里使用 git 命令执行所有你以前使用过的操作。有用于创建拉取请求、刷新等等的选项。

VS Code gives all kind of Git actions to perform

通过 GitHub 官方扩展将其提升到一个新的水平

有一个专用的官方扩展,让你还可以管理其他人对你的仓库的拉取请求并合并它们。你还可以在此处查看在你的仓库中打开中的问题。这是将 GitHub 与 VS Code 集成的更好方法。

打开 VS Code,然后转到左侧栏中的扩展选项卡。在这里搜索 “GitHub Pull Requests and Issues”。它是 GitHub 本身的官方插件。你可以看到已验证的勾选。

单击安装按钮并在你的编辑器上安装 扩展

Installing GitHub extension in VS Code

使用此扩展,如果其他人正在协作,你可以管理你的存储库。

在 VS Code 中完全集成 Git 和 GitHub 是件好事。不喜欢命令行的人肯定会喜欢这种集成。

我希望本教程能帮助你将 GitHub 无缝添加到 VS Code。如果你仍然遇到任何问题,请告诉我。

(题图:MJ/GitHub VS Code develop illustration in high resolution, very detailed, 8k)


via: https://itsfoss.com/vs-code-github/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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

建立良好的文档可能是困难的,但它对有效的沟通至关重要。遵循这个框架来编写并与正确的人分享文档。

成功和可持续的项目,与那些消失无踪的项目有什么不同?答案是 —— 社区。社区是开源项目的发展动力,而文档是构建社区的基石之一。也就是说,文档的意义不仅仅在于文档本身。

建立好的文档可能很困难。用户不愿意阅读文档,因为它不易查找,它很快就过时了,它冗长,或者它不全面。

开发团队不写文档,因为他们陷入了“对我来说显而易见,所以对所有人都显而易见”的陷阱。他们不写,因为他们忙于开发项目。要么是需求变化太快了,要么是开发得还不够快。

但是好的文档仍然是团队和项目之间最好的沟通工具。考虑到项目随着时间的推移往往会变得更大,这一点尤其重要。

文档可以是团队或公司内部的唯一真理。这在协调人们朝着共同的目标前进,以及在人们转移到不同的项目时保留知识方面非常重要。

那么,要如何为一个项目写出合适的文档,并与正确的人分享呢?

什么是成功的社区文档?

要想在你的社区文档编写中取得成功,你需要:

  • 规划你的路径
  • 使其清晰简单
  • 灵活变通,根据具体情况调整路径
  • 做版本控制

图片展示了建立文档的整个流程

灵活并不意味着混乱。许多项目之所以成功,就是因为它们组织得很好。

James Clear(《 原子习惯 Atomic Habits 》一书的作者)写道:“你并不是提升到了你目标所在的水平,而是降低到你整个系统所在的水平。”一定要组织好过程,使水平足够高,才能取得成功。

设计流程

文档本身就是一个项目。你可以把写文档当作写代码一样。事实上,文档可以是一个产品,而且是一个非常有价值的产品。

这就意味着你可以采用与软件开发相同的流程:分析、获取需求、设计、实现和维护,把文档作为你的一个流程对待。

在设计流程时,要从不同的角度考虑。不是所有的文档都适用于所有人。

大多数用户只需要一个了解项目概况的文档,而 API 文档则是留给开发者或高级用户的。

开发者需要了解库和函数的文档。用户则更需要看到示例、操作指南,和项目与其他软件相配合的架构概述。

图片展示了编写文档时的不同视角

总之,在创建任何流程之前,你必须确定你需要什么:

  • 关注的群体: 包括开发者、集成商、管理员、用户、销售、运营、高管
  • 专业水平: 要考虑到初级、中级和高级用户
  • 详细程度: 既要有高层级的概述,也要有技术细节,所以要考虑如何呈现这些内容
  • 路径和入口: 人们如何找到文档,如何使用文档

当你思考这些问题时,它可以帮助你构建你想通过文档传达的信息的结构。它定义了文档中必须包含的内容的清晰指标。

下面是如何围绕文档建立一个流程的方法。

编码约定

代码本身应该有意义。文档应通过良好的类名、文件名等来表达出来。通过思考以下内容,创建通用的编码标准和自我注解的编码过程:

  • 变量命名约定
  • 通过使用类、函数命名方案使名称易于理解
  • 避免深度嵌套,或 根本不嵌套
  • 不要简单地复制和粘贴代码
  • 不应使用长方法
  • 避免使用幻数(改用常量)
  • 使用提取的方法、变量等
  • 使用有意义的目录结构、模块、包和文件名

开发时测试

测试不仅仅是关于代码应该如何工作。它还涉及如何使用 API、函数、方法等。编写良好的测试可以揭示基本用例和边缘用例。甚至还有一种 测试驱动开发 的实践,专注于在代码开发之前创建测试用例(应该测试什么以及如何测试的分步场景)。

版本控制

版本控制(即使是对文档进行版本控制)可以帮助你跟踪更改的逻辑。它可以帮助你回答为什么这么修改。

确保提交期间的注释能解释为什么进行更改,而不是进行了哪些更改。

编写文档过程越吸引人,就会有更多的人参与其中,为它添加创造力和乐趣。你应该通过以下方式考虑文档的可读性:

  • 软件代码约定
  • 图表和图形(也通过文字进行解释)
  • 思维导图
  • 概念图
  • 信息图表
  • 图片(突出显示重要的部分)
  • 短视频

通过使用不同的交流方式,你可以提供更多的方式来参与文档。这有助于防止误解(不同的语言,不同的含义)和有助于通过不同的学习方式进行学习。

以下是一些用于创建文档的软件工具:

  • Javadoc、Doxygen、JsDoc 等: 许多语言都有自动化的文档工具,以帮助捕获代码中的主要功能
  • Web 钩子和 CI/CD 引擎: 允许持续发布文档
  • Restructured Text、Markdown、Asciidoc: 文件格式和处理引擎,帮助你从纯文本文件中生成美观且实用的文档
  • ReadTheDocs: 是一个可以和公共 Git 存储库联动的文档托管主机
  • Draw.io、LibreOffice Draw、Dia: 制作图表、图形、思维导图、路线图、计划、标准和指标等
  • Peek、Asciinema: 记录终端命令操作
  • VokoscreenNG: 录制屏幕和鼠标点击操作

文档很重要

编写文档的过程和协议与项目本身同样重要。最重要的是,它把项目的信息和项目的创造传达到位,更加令人兴奋。

快速进入项目和流程,以及了解一切是如何工作的,是文档一个重要的功能。它有助于确保众人持续参与。通过在团队中构建一种“语言”,可以简化流程,更清晰地理解所要做的事情。

文档旨在传达价值,即无论是通过团队成员还是通过应用程序的用户的言行,来展示出某些东西。

要将这个过程视为一个连续的整体,并在其中融合使用沟通、流程和文档的方式。

图片展示了文档作为一种沟通的过程

文档是一种沟通手段。

(题图:MJ:document development illustration in high resolution, very detailed


via: https://opensource.com/article/23/3/community-documentation

作者:Olga Merkulova 选题:lkxed 译者:alim0x 校对: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中国 荣誉推出

开源的 Apache SeaTunnel 项目是一个数据整合平台,可以很容易地实现数据同步。

变更数据捕获 Change Data Capture (CDC)使用服务端代理来记录、添加、更新和删除对数据表的各种操作。它以一种易用的关系型格式提供了数据变化的细节信息。它可以捕获将更改应用于目标环境中的已修改行所需的列信息和元数据。这些信息保存在一个与被跟踪的源表的列结构相对应的变化表内。

捕获变更的数据可不是一件容易的事。不过,有一个开源项目 —— Apache SeaTunnel,它是一个数据整合平台,它提供的 CDC 功能的设计理念和功能集使这些捕获成为可能,其功能包括上文提到的,超越了现有产品的解决方案。

使用场景

CDC 的经典应用是异质数据库之间的数据同步或备份。你可以在 MySQL、PostgreSQL、MariaDB 和类似的数据库间进行数据同步。另外一个例子,你也可以将数据同步到应该全文搜索引擎。借助 CDC,你可以基于 CDC 捕获的数据创建备份。

如果设计得当,数据分析系统通过订阅目标数据表的变化情况获取需要处理的数据,而不需要将分析过程嵌入已有系统。

在微服务间共享数据状态

微服务现在很流行,但是在微服务间共享信息往往是一件复杂的事。CDC 是一个可能的解决方案。微服务可以使用 CDC 来获取其他微服务的数据库变化,获取数据状态更新,以及执行相应逻辑。

更新缓存

命令查询责任隔离 Command Query Responsibility Segregation CQRS)的概念是将命令活动与查询活动分开。这两者有本质上的不同:

  • 命令向数据源写入数据。
  • 查询从数据源读取数据。

问题是,读事件发生的时间与写事件发生的时间有关,以及这些事件的发生是由谁来承担责任的?

更新缓存可能很困难。你可以使用 CDC 从数据库获取数据更新事件,让它控制缓存的更新或失效。

CQRS 设计通常使用两种不同的存储实例来支持业务查询和变更操作。为了保证数据的一致性,我们可以使用分布式事务来保证强大的数据一致性,代价是可用性、性能和扩展性。你也可以使用 CDC 来确保最终的数据一致性,它的性能和伸缩性较好,但其代价是数据延迟,目前业界可以保持在毫秒范围内。

例如,你可以使用 CDC 把 MySQL 中的数据同步到你的全文搜索引擎(比如ElasticSearch)。在这种架构中,ElasticSearch 搜索了所有的查询,但是当你需要修改数据时,你不能直接操作 ElasticSearch 的,你需要修改上游的 MySQL 数据,因而生成了一个更新事件。当 ElasticSearch 监视数据库时,这个事件就被系统获取了,并在 ElasticSearch 中提示更新。

在一些 CQRS 系统中,也可以用类似的方法更新查询视图。

痛点

CDC 不是一个新概念,很多现有的项目已经实现了它。但是对很多用户来说,已有解决方案存在一些不足。

单数据表配置

当你使用一些 CDC 软件时,你必须分别配置每个表。例如,为了同步十张表,你需要写十条 源 SQL 和 汇聚 Sink SQL 语句。为了进行转换操作,你也需要写与转换相关的 SQL 语句。

有时候,对于一张表来说可以手写,但只对数据量小的情况适用。当数据量大时,会发生类型映射或参数配置的错误,进而导致较高的操作和维护成本。

SeaTunnel 是一个易用的数据集成平台,有望解决这个问题。

不支持模式演化

一些 CDC 解决方案支持 DDL 事件传递,但不支持传递到 汇聚节点 Sink ,以便它能进行同步变更。由于无法根据 DDL 事件改变转换的类型信息,所以即使一个能获取事件的 CDC 也不一定可以将它发送至引擎(所以汇聚节点不能遵循 DDL 事件来进行变更)。

太多的链接

在一些 CDC 平台上,当有多个表时,如果一张表被同步了,就必须使用一个链接来代表一张表。当存在多个表时,也需要很多链接。这就给源 JDBC 数据库带来了压力,同时导致binlog 过多,还会导致重复的日志解析。

SeaTunnel CDC 架构的目标

Apache SeaTunnel 是一个开源、高效、分布式、大规模的数据集成框架。为了解决现有数据集成工具解决不了的问题,开发者社区“重新造轮子”,开发了一种具有独特功能的 CDC 平台。它的架构设计吸收了现有工具的优点,消除了相应的缺点。

Apache Seatunnel 支持:

  • 以无锁并行的方式快照历史数据。
  • 日志心跳检测和动态添加数据表。
  • 读取子数据库、子表和多结构表。
  • 模式演进。
  • 所有基础的 CDC 功能。

它降低了用户的操作和维护成本,并且支持动态添加数据表。

例如,当你要同步整个数据库,并在稍后需要添加一个新表,你不必手动维护、改变配置或重启当前作业。

另外,Apache SeaTunnel 也支持并行读取子数据库、子表和多结构表。还支持模式演进、DDL 转换,以及在引擎内改变支持的模式,这些可以变为 转换器 Transform 汇聚节点 Sink

SeaTunnel CDC 现状

如今,CDC 拥有支持增量和快照阶段的基本能力。它也支持 MySQL 实时和离线使用。MySQL 实时测试已完成,即将进行离线测试。因为它涉及对转换器和汇聚节点的更改,目前还不支持模式。不支持动态发现新增表,已预留了一些支持多结构表的接口。

项目展望

作为 Apache 孵化的项目,Apache SeaTunnel 的社区正快速发展起来。下一届社区计划会议的主要目标有:

1、发展并改进连接器和目录生态

我们正努力改善连接器和目录功能,包括:

  • 支持连接更多数据库,包括 TiDB、Doris 和 Stripe。
  • 改善现有的连接器的易用性和性能。
  • 支持 CDC 连接器用于实时、增量同步场景。

任何对连接器感兴趣者都可以查看 Umbrella

2、支持更多数据集成场景(SeaTunnel 引擎)

现有的引擎仍然存在一些解决不了的痛点,例如对整个数据库的同步,表结构变化的同步以及任务失败的大粒度。

我们正努力解决这些问题,对此感兴趣者可以查看 #2272 议题

3、更易使用(Web 版)

我们正努力提供 Web 界面,令操作更简便。通过 Web 界面,我们将实现以 DAG/SQL 的形式查看目录、连接器、任务和相关信息。我们也会给予用户访问调度平台的权限,以便更方便地进行任务管理。

欲了解更多关于 Web 版的信息,请访问 Web 平台子项目

总结

数据库活动通常必须被仔细跟踪,才能对数据的更新、删除或添加操作进行管理。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 选题:lkxed 译者:cool-summer-021 校对:wxy

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

有多个关于同一主题的 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 的形式提供。请 确保你的 Linux 系统启用了 Flatpak 支持

我分享的是在 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

在下一步中,单击 “ 添加文件 Add file ” 并选择要合并的文件:

choose files to merge

选择文件后,单击 “ 合并 Merge ” 按钮:

click on merge button

它将打开系统的默认文件管理器。你可以在此处选择要保存合并文件的位置以及应命名的文件:

locate and name the merged pdf file

就是这样。合并后的 PDF 已保存。

如果你正在寻找,我们提供了一份 可用于阅读和编辑 PDF 文件的最佳 PDF 阅读器 列表。

方法 2:使用 LibreOffice 合并 PDF 文件

很棒的 LibreOffice 能够处理许多与 PDF 相关的任务。你甚至可以 使用 LibreOffice Draw 工具编辑 PDF 文件 来添加数字签名、添加文本等。

好处是你不需要安装其他应用。LibreOffice 已经安装在大多数发行版上,如果不是全部的话。

打开文件管理器并选择要合并的 PDF 文件。

右键单击选定的文件 > 使用其他应用打开 Open With Other Application > LibreOffice Draw,它将打开选定的 PDF 文件。

它将在单独的 LibreOffice Draw 实例中打开你选择的每个 PDF 文件:

open pdf file in libreoffice

现在,你必须从左侧预览栏选择单个页面或整个 PDF 文件(使用 Ctrl + A)并将其拖放到要合并的文件的预览栏:

拖放后,单击左上角的第 5 个选项,提示是 直接导出为 PDF Export Directly as PDF

export directly as pdf in libreoffice

将打开一个文件管理器,你可以从中定位并命名文件:

save merged file from libreoffice

这就完成了!

更多技巧:在命令行中合并 PDF (对于高级用户)

如果我不包括命令行方法,那算什么 Linux 教程?要在命令行中合并 PDF 文件,你可以使用 ImageMagick。

ImageMagick 其实是一个图像相关的工具。PDF 文件本质上是图像,这就是 ImageMagick 可以处理它们的原因。

你可能甚至不需要单独 安装 ImageMagick,因为它已经默认安装在大多数发行版中。

例如,我将添加 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” 故障排除

如果你看到这样的策略错误:

这个问题很容易解决。你只需在 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

保存更改,现在你可以使用 ImageMagick 轻松合并文件:

merge pdf files using imagemagick in linux terminal

总结

现在你知道了在 Linux 中合并 PDF 文件的几种方法。合并后的 PDF 文件可能很大。如果你需要在有大小限制的门户上传合并的 PDF 文件,你可以 压缩 PDF 文件

如果你在使用上述方法时遇到任何问题,请告诉我。

(题图:MJ:process docs illustrations in high resolution)


via: https://itsfoss.com/merge-pdf-linux/

作者:Sagar Sharma 选题:lkxed 译者:geekpi 校对: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中国 荣誉推出