分类 技术 下的文章

使用 Python 中的 scaffoldclick 库,你可以将一个简单的实用程序升级为一个成熟的命令行界面工具。

Python 吉祥物和 Linux 的吉祥物企鹅

在我的职业生涯中,我写过、用过和看到过很多随意的脚本。一些人需要半自动化完成任务,于是它们诞生了。一段时间后,它们变得越来越大。它们在一生中可能转手很多次。我常常希望这些脚本提供更多的命令行工具式的感觉。但是,从一次性脚本到合适的工具,真正提高质量水平有多难呢?事实证明这在 Python 中并不难。

搭建骨架脚本

在本文中,我将从一小段 Python 代码开始。我将把它应用到 scaffold 模块中,并使用 click 库扩展它以接受命令行参数。

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

本文所有没有在这里插入显示的代码示例,你都可以在 https://codeberg.org/ofosos/rotoscope 中找到特定版本的代码。该仓库中的每个提交都描述了本文操作过程中一些有意义的步骤。

这个片段做了几件事:

  • 检查 INCOMING 指定的路径中是否有文本文件
  • 如果存在,则使用当前时间戳创建一个新文件名,并将其移动到 ARCHIVE
  • 删除当前的 ARCHIVE/latest.txt 链接,并创建一个指向刚刚添加文件的新链接

作为一个示例,它很简单,但它会让你理解这个过程。

使用 Pyscaffold 创建应用程序

首先,你需要安装 scaffoldclicktox Python 库

$ python3 -m pip install scaffold click tox

安装 scaffold 后,切换到示例的 rotoscope 项目所在的目录,然后执行以下命令:

$ putup rotoscope -p rotoscope \
    --force --no-skeleton -n rotoscope \
    -d 'Move some files around.' -l GLWT \
    -u http://codeberg.org/ofosos/rotoscope \
    --save-config --pre-commit --markdown

Pyscaffold 会重写我的 README.md,所以从 Git 恢复它:

$ git checkout README.md

Pyscaffold 在文档中说明了如何设置一个完整的示例项目,我不会在这里介绍,你之后可以探索。除此之外,Pyscaffold 还可以在项目中为你提供持续集成(CI)模板:

  • 打包: 你的项目现在启用了 PyPi,所以你可以将其上传到一个仓库并从那里安装它。
  • 文档: 你的项目现在有了一个完整的文档文件夹层次结构,它基于 Sphinx,包括一个 readthedocs.org 构建器。
  • 测试: 你的项目现在可以与 tox 一起使用,测试文件夹包含运行基于 pytest 的测试所需的所有样板文件。
  • 依赖管理: 打包和测试基础结构都需要一种管理依赖关系的方法。setup.cfg 文件解决了这个问题,它包含所有依赖项。
  • 预提交钩子: 包括 Python 源代码格式工具 black 和 Python 风格检查器 flake8。

查看测试文件夹并在项目目录中运行 tox 命令,它会立即输出一个错误:打包基础设施无法找到相关库。

现在创建一个 Git 标记(例如 v0.2),此工具会将其识别为可安装版本。在提交更改之前,浏览一下自动生成的 setup.cfg 并根据需要编辑它。对于此示例,你可以修改 LICENSE 和项目描述,将这些更改添加到 Git 的暂存区,我必须禁用预提交钩子,然后提交它们。否则,我会遇到错误,因为 Python 风格检查器 flake8 会抱怨糟糕的格式。

$ PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit

如果这个脚本有一个入口点,用户可以从命令行调用,那就更好了。现在,你只能通过找 .py 文件并手动执行它来运行。幸运的是,Python 的打包基础设施有一个很好的“罐装”方式,可以轻松地进行配置更改。将以下内容添加到 setup.cfgoptions.entry_points 部分:

console_scripts =
    roto = rotoscope.rotoscope:rotoscope

这个更改会创建一个名为 roto 的 shell 命令,你可以使用它来调用 rotoscope 脚本,使用 pip 安装 rotoscope 后,可以使用 roto 命令。

就是这样,你可以从 Pyscaffold 免费获得所有打包、测试和文档设置。你还获得了一个预提交钩子来保证(大部分情况下)你按照设定规则提交。

CLI 工具化

现在,一些值会硬编码到脚本中,它们作为命令 参数 会更方便。例如,将 INCOMING 常量作为命令行参数会更好。

首先,导入 click 库,使用 Click 提供的命令装饰器对 rotoscope() 方法进行装饰,并添加一个 Click 传递给 rotoscope 函数的参数。Click 提供了一组验证器,因此要向参数添加一个路径验证器。Click 还方便地使用函数的内嵌字符串作为命令行文档的一部分。所以你最终会得到以下方法签名:

@click.command()
@click.argument('incoming', type=click.Path(exists=True))
def rotoscope(incoming):
    """
    Rotoscope 0.4 - Bleep, blooop.
    Simple sample that move files.
    """

主函数会调用 rotoscope(),它现在是一个 Click 命令,不需要传递任何参数。

选项也可以使用 环境变量 自动填充。例如,将 ARCHIVE 常量改为一个选项:

@click.option('archive', '--archive', default='/Users/mark/archive', envvar='ROTO_ARCHIVE', type=click.Path())

使用相同的路径验证器。这一次,让 Click 填充环境变量,如果环境变量没有提供任何内容,则默认为旧常量的值。

Click 可以做更多的事情,它有彩色的控制台输出、提示和子命令,可以让你构建复杂的 CLI 工具。浏览 Click 文档会发现它的更多功能。

现在添加一些测试。

测试

Click 对使用 CLI 运行器 运行端到端测试 提供了一些建议。你可以用它来实现一个完整的测试(在 示例项目 中,测试在 tests 文件夹中。)

测试位于测试类的一个方法中。大多数约定与我在其他 Python 项目中使用的非常接近,但有一些细节,因为 rotoscope 使用 click。在 test 方法中,我创建了一个 CliRunner。测试使用它在一个隔离的文件系统中运行此命令。然后测试在隔离的文件系统中创建 incomingarchive 目录和一个虚拟的 incoming/test.txt 文件,然后它调用 CliRunner,就像你调用命令行应用程序一样。运行完成后,测试会检查隔离的文件系统,并验证 incoming 为空,并且 archive 包含两个文件(最新链接和存档文件)。

from os import listdir, mkdir
from click.testing import CliRunner
from rotoscope.rotoscope import rotoscope

class TestRotoscope:
    def test_roto_good(self, tmp_path):
        runner = CliRunner()

        with runner.isolated_filesystem(temp_dir=tmp_path) as td:
            mkdir("incoming")
            mkdir("archive")
            with open("incoming/test.txt", "w") as f:
                f.write("hello")

            result = runner.invoke(rotoscope, ["incoming", "--archive", "archive"])
            assert result.exit_code == 0

            print(td)
            incoming_f = listdir("incoming")
            archive_f = listdir("archive")
            assert len(incoming_f) == 0
            assert len(archive_f) == 2

要在控制台上执行这些测试,在项目的根目录中运行 tox

在执行测试期间,我在代码中发现了一个错误。当我进行 Click 转换时,rotoscope 只是取消了最新文件的链接,无论它是否存在。测试从一个新的文件系统(不是我的主文件夹)开始,很快就失败了。我可以通过在一个很好的隔离和自动化测试环境中运行来防止这种错误。这将避免很多“它在我的机器上正常工作”的问题。

搭建骨架脚本和模块

本文到此结束,我们可以使用 scaffoldclick 完成一些高级操作。有很多方法可以升级一个普通的 Python 脚本,甚至可以将你的简单实用程序变成成熟的 CLI 工具。


via: https://opensource.com/article/22/7/bootstrap-python-command-line-application

作者:Mark Meyer 选题:lkxed 译者:MjSeven 校对:wxy

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

Podman Desktop 是一个开源 GUI 应用,用于在 Linux、macOS 和 Windows 上管理容器。

从历史上看,开发人员一直使用 Docker Desktop 对容器进行图形化管理。这适用于那些安装了 Docker Daemon 和 Docker CLI 的人。然而,对于那些使用无守护进程的 Podman 工具的人来说,虽然有一些 Podman 前端,如 PodsPodman desktop companionCockpit,但没有官方应用。现在不是这种情况了。有了 Podman Desktop!

本文将讨论由红帽和其他开源贡献者开发的 Podman Desktop 的特性、安装和使用。

安装

要在 Fedora Linux 上安装 Podman Desktop,请访问 podman-desktop.io,然后单击 “Download for Linux” 按钮。你将看到两个选项:Flatpak 和 zip。在这个例子中,我们使用的是 Flatpak。单击 “Flatpak” 链接后,通过双击文件在 GNOME 软件中打开它(如果你使用的是 GNOME)。你也可以通过终端安装它:

flatpak install podman-desktop-X.X.X.flatpak

在上面的命令中,将 X.X.X 替换为你下载的特定版本。如果你下载了 zip 文件,那么解压缩存档,然后启动 Podman Desktop 应用的二进制文件。你还可以通过进入 GitHub 上项目的 发布 页找到预发布版本。

特性

Podman Desktop 仍处于早期阶段。然而,它支持许多常见的容器操作,如创建容器镜像、运行容器等。此外,你可以在 “ 首选项 Preferences ” 的 “ 扩展 Extensions ” 部分下找到 Podman 扩展,你可以使用它来管理 macOS 和 Windows 上的 Podman 虚拟机。

此外,Podman Desktop 支持 Docker Desktop 扩展。你可以在 “ 首选项 Preferences ” 下的 “Docker Desktop Extensions” 安装此类扩展。应用窗口有两个窗格。左侧窄窗格显示应用的不同功能,右侧窗格是内容区域,它将根据左侧选择的内容显示相关信息。

Podman Desktop 0.0.6 在 Fedora 36 上运行

演示

为了全面了解 Podman Desktop 的功能,我们将从 Dockerfile 创建一个镜像并将其推送到注册中心,然后拉取并运行它,这一切都在 Podman Desktop 中完成。

构建镜像

第一步是通过在命令行中输入以下行来创建一个简单的 Dockerfile:

cat <<EOF>>Dockerfile
FROM docker.io/library/httpd:2.4
COPY . /var/www/html 
WORKDIR /var/www/html 

CMD ["httpd", "-D", "FOREGROUND"]
EOF

现在,点击 “ 镜像 Images ” 并按下 “ 构建镜像 Build Image ” 按钮。你将被带到一个新页面以指定 Dockerfile、构建上下文和镜像名称。在 Containerfile 路径下,单击并浏览以选择你的 Dockerfile。在镜像名称下,输入镜像的名称。如果要将镜像推送到容器注册中心,那么可以以 example.com/username/repo:tag 形式指定完全限定的镜像名称(FQIN)。在此示例中,我输入 quay.io/codezombie/demo-httpd:latest,因为我在 quay.io 上有一个名为 demo-httpd 的公共仓库。你可以按照类似的格式来指定容器注册中心(Quay、Docker Hub、GitHub Container Registry 等)的 FQIN。现在,按下 “ 构建 Build ” 按钮并等待构建完成。

推送镜像

构建完成后,就该推送镜像了。所以,我们需要在 Podman Desktop 中配置一个注册中心。进入 “ 首选项 Preferences ” -> “ 注册中心 Registries ” 并按下 “ 添加注册中心 Add registry ” 按钮。

添加注册中心对话框

在 “ 添加注册中心 Add registry ” 对话框中,输入你的注册中心服务器地址和用户凭据,然后单击 “ 添加注册中心 Add registry ”。

现在,回到镜像列表中我的镜像,并按下上传图标将其推送到仓库。当你将鼠标悬停在设置中添加的注册中心名称开头的镜像名称上时(此演示中的 quay.io),镜像名称旁边会出现一个推送按钮。

将鼠标悬停在镜像名称上时出现的按钮

镜像通过 Podman Desktop 推送到仓库

镜像被推送后,任何有权访问镜像仓库的人都可以拉取它。由于我的镜像仓库是公开的,因此你可以轻松地将其拉入 Podman Desktop。

拉取镜像

因此,为确保一切正常,请在本地删除此镜像并将其拉入 Podman Desktop。在列表中找到镜像并按删除图标将其删除。删除镜像后,单击 “ 拉取镜像 Pull Image ” 按钮。在 “ 要拉取的镜像 Image to Pull ” 输入完全限定名称,然后按 “ 拉取镜像 Pull Image ”。

Our container image is successfully pulled

创建一个容器

作为 Podman Desktop 演示的最后一部分,让我们从镜像中启动一个容器并检查结果。转到 “ 容器 Containers ” 并按 “ 创建容器 Create Container ”。这将打开一个包含两个选项的对话框:“ 从 Containerfile/Dockerfile From Containerfile/Dockerfile ” 和 “ 从已有镜像 From existing image ”。按下 “ 从已有镜像 From existing image ”。这将进入镜像列表。在那里,选择我们要拉取的镜像。

在 Podman Desktop 中创建容器

现在,我们从列表中选择我们最近拉取的镜像,然后按它前面的 “ 运行 Play ” 按钮。在出现的对话框中,我输入 demo-web 作为容器名,输入 8000 作为端口映射,然后按下 “ 启动容器 Start Container ”。

Container configuration

容器开始运行,我们可以通过运行以下命令检查 Apache 服务器的默认页面:

curl http://localhost:8000

可以工作!

你还应该能够在容器列表中看到正在运行的容器,其状态已更改为 “ 运行中 Running ”。在那里,你会在容器前面找到可用的操作。例如,你可以单击终端图标打开 TTY 进入到容器中!

接下来是什么

Podman Desktop 还很年轻,处于 积极开发 中。 GitHub 上有一个项目 路线图,其中列出了令人兴奋的按需功能,包括:

  • Kubernetes 集成
  • 支持 Pod
  • 任务管理器
  • 卷支持
  • 支持 Docker Compose
  • Kind 支持

via: https://fedoramagazine.org/manage-containers-on-fedora-linux-with-podman-desktop/

作者:Mehdi Haghgoo 选题:lkxed 译者:geekpi 校对:wxy

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

为什么文本只能使用这些有限的颜色显示,为什么 FreeDOS 使用这些颜色和阴影,而不是其他颜色?答案就像技术中的许多事情一样,历史原因。

如果你仔细了解过 FreeDOS,你可能已经注意到文本使用有限的颜色范围 —— 16 种文本颜色和 8 种背景颜色。这类似于 Linux 显示文本颜色的方式 —— 你或许能够在 Linux 终端中更改 文本颜色,但你仍然只能使用 16 种文本颜色和 8 种背景颜色。

 title=

DOS 文本有 16 种颜色和 8 种背景颜色(吉姆·霍尔,CC-BY SA 4.0

为什么文本只能使用这些有限的颜色显示,为什么 FreeDOS 使用这些颜色和阴影,而不是其他颜色?

答案就像技术中的许多事情一样,历史原因。

PC 色彩的由来

为了解释为什么文本只有 16 种颜色,让我给你讲一个关于第一台 IBM 个人计算机的故事。这个故事的部分内容可能有些杜撰,但基本内容已经足够接近。

IBM 于 1981 年发布了 个人计算机 Personal Computer 5150(“IBM PC”)。该 PC 使用了一个简单的监视器屏幕,以绿色显示文本。由于此显示器仅适用于一种颜色,因此被称为 单色 monochrome (“IBM 5151 单色显示器”,搭载 IBM 单色显示适配器 Monochrome Display Adapter ,即 MDA)。

同年,IBM 发布了 PC 的更新版本,带来了惊人的技术成就 —— 颜色!新的 IBM 5153 彩色显示器依赖于新的 IBM 彩色图形适配器 Color Graphics Adapter (CGA)。正是由于这个原始的 CGA,所有的 DOS 文本都继承了它们的颜色。

但在我们讨论那一部分之前,我们首先需要了解一些关于颜色的东西。当我们谈论计算机屏幕上的颜色时,我们谈论的是混合 三原色(红色、绿色和蓝色)的不同值。你可以将不同级别(“亮度”)的红光、绿光和蓝光混合在一起,以创建几乎任何颜色。混合红色和蓝色光,你会得到洋红色。混合蓝色和绿色,你会得到青色或浅绿色。均匀地混合所有颜色,你会得到白色。没有任何浅色,你会看到黑色(没有颜色)。

 title=

混合红色、绿色和蓝色光以获得不同的颜色(吉姆·霍尔,CC-BY SA 4.0

IBM 5153 彩色显示器通过在 阴极射线管 cathode ray tube (CRT)上点亮微小的红色、绿色和蓝色光点来向用户呈现颜色。这些小点排列得非常紧密,并以红色、绿色和蓝色的三色点组成一个“像素”的模式排列。通过控制同时点亮哪些荧光点,IBM 5153 彩色显示器可以显示不同颜色的像素。

 title=

每个红色、绿色和蓝色三元组都是一个像素(吉姆·霍尔,CC-BY SA 4.0

顺便说一句,即使是现代显示器也使用这种红色、绿色和蓝色点的组合来表示颜色。现代计算机的不同之处在于,每个像素都使用红色、绿色和蓝色 LED 灯(通常并排排列),而不是微小的荧光点。计算机可以打开或关闭每个 LED 灯,以混合每个像素中的红色、绿色和蓝色。

 title=

每个红色、绿色和蓝色三元组都是一个像素(吉姆·霍尔,CC-BY SA 4.0

定义 CGA 颜色

IBM 工程师意识到他们可以通过混合红色、绿色和蓝色像素来显示多种颜色。在最简单的情况下,你可以假设单个像素中的每个红色、绿色和蓝色点要么“开”,要么“关”。正如任何计算机程序员都会告诉你的那样,你可以将“开”和“关”表示为二进制 —— 1(1 = 开)和 0(0 = 关)。

用 1 或 0 表示红色、绿色和蓝色意味着你可以组合多达八种颜色,从 000(红色、绿色和蓝色都关闭)到 111(红色、绿色和蓝色都打开)。请注意,位模式类似于“RGB”,因此 RGB=001 是蓝色的(只有蓝色是打开的),RGB=011 是青色的(绿色和蓝色都打开了):

颜色代码名称
 000
 001
 010绿
 011
 100
 101洋红
 110
 111

但这只是最简单的情况。一位特别聪明的 IBM 工程师意识到,只需再添加一点,你就可以将颜色数量从 8 种颜色增加到 16 种。因此,我们可以使用像 iRGB 这样的位模式,而不是像 RGB 这样的位模式。我们将把这个额外的“i”位称为“强度”位,因为如果我们将“强度”位设置为 1(开),那么我们将在全亮度下点亮红色、绿色和蓝色;如果“强度”位为 0(关闭),我们可以使用一些中级亮度。

有了这个简单的修复程序,现在 CGA 可以显示 16 种颜色!为了简单起见,IBM 工程师将高强度颜色称为常规颜色名称的“明亮”版本。因此,“红色”与“亮红色”配对,“洋红色”与“亮洋红色”配对。

颜色代码名称颜色代码名称
 0000 1000亮黑
 0001 1001亮蓝
 0010绿 1010亮绿
 0011 1011亮青
 0100 1100亮红
 0101洋红 1101亮洋红
 0110 1110亮黄
 0111 1111亮白

哦不,等等!这实际上不是十六种颜色。如果你注意到 iRGB=0000(黑色)和 iRGB=1000(亮黑色),它们都是相同的 黑色。没有颜色可以“亮”,所以它们都是普通的黑色。这意味着我们只有 15 种颜色,而不是我们希望的 16 种颜色。

但 IBM 有聪明的工程师为他们工作,他们意识到如何解决这个问题以获得 16 种颜色。IBM 实际上没有实现直接的 RGB 到 iRGB,而是实现了 iRGB 方案。随着这一变化,IBM 为每个光点设置了四个亮度级别:完全关闭、三分之一亮度、三分之二亮度和全亮度。如果“亮度”位被关闭,那么每个红色、绿色和蓝色光点将以三分之二的亮度点亮。如果你打开“亮度”位,RGB 颜色中的所有 0 都将以三分之一的亮度点亮,而所有 1 都将以全亮度点亮。

让我用另一种方式向你描述这一点,使用 Web 颜色代码表示。如果你熟悉 HTML 颜色,你可能知道你可以使用 #RGB 表示颜色,其中 RGB 表示红色、绿色和蓝色值的组合,每个值都在十六进制值 0 到 F 之间。因此,使用 IBM 修改后的 iRGB 定义,iRGB=0001 是 #00a(蓝色),iRGB=1001 是 #55f(亮蓝色),因为对于高亮度颜色,RGB=001 中的所有零点都以三分之一的亮度点亮(0 到 F 刻度上的“5”左右),RGB=001 中的所有零点都以三分之二的亮度点亮(0 到 F刻度上的“A”)。

颜色代码名称颜色代码名称
 0000 1000亮黑
 0001 1001亮蓝
 0010绿 1010亮绿
 0011 1011亮青
 0100 1100亮红
 0101洋红 1101亮洋红
 0110 1110亮黄
 0111 1111亮白

有了这些颜色,我们终于完成了!我们拥有从 iRGB=0000(黑色)到 iRGB=1111(亮白色)以及介于两者之间的所有颜色的全光谱。就像彩虹般的颜色,这很漂亮。

除了……不,等等,这里有问题!我们实际上还不能复制彩虹的所有颜色。我们在小学学到的方便的助记符是 ROYGBIV,它可以帮助我们记住彩虹的颜色有红色、橙色、黄色、绿色、蓝色、靛蓝和紫色。我们修改后的 iRGB 配色方案包括红色、黄色、绿色和蓝色——我们可以将其“伪造”为靛蓝和紫色,但是我们缺少橙色。遭了!

 title=

一条美丽的彩虹——不幸的是它含有橙色。(Paweł Fijałkowski,公共)

为了解决这个问题,聪明的 IBM 工程师对 RGB=110 做了最后的修复。高强度颜色(iRGB=1110)以全亮度点亮红色和绿色荧光粉点以产生黄色,但是在低亮度颜色(iRGB=0110)下,他们以三分之二的亮度点亮红色,以三分之一的亮度点亮绿色。这将 iRGB=0110 变成了橙色——尽管它后来被称为“棕色”,因为 IBM 不得不在某处弄乱标准名称。

颜色代码名称颜色代码名称
 0000 1000亮黑
 0001 1001亮蓝
 0010绿 1010亮绿
 0011 1011亮青
 0100 1100亮红
 0101洋红 1101亮洋红
 0110 1110
 0111 1111亮白

这就是 CGA 以及扩展的 DOS 获得十六种颜色的方式!如果你好奇,这也是为什么会有“亮黑色”的原因,即使它只是一种灰色阴影。

表示颜色(位和字节)

但是你可能想知道:为什么 DOS 可以显示 16 种文本颜色,却只能显示 8 种背景颜色?为此,我们需要快速了解计算机如何将颜色信息传递给 CGA 卡。

简而言之,CGA 卡希望将每个字符的文本颜色和背景颜色编码在一个字节数据包中,一共八位。那么八位是从哪里来的呢?

我们刚刚了解了 iRGB(四位)如何生成十六种颜色。文本颜色使用 iRGB ,四位,背景颜色仅限于八种低强度颜色(RGB,三位),加起来只有七位。丢失的第八位在哪里?

最后一个位可能是为 DOS 时代最重要的用户界面元素保留的 —— 闪烁文本。虽然闪烁的文本在如今可能很烦人,但在整个 1980 年代初期,闪烁的文本是表示错误消息等关键信息的友好方式。

将这个“闪烁”位添加到三个背景颜色位(RGB)和四个文本颜色位(iRGB)中会产生八个位或一个字节!计算机喜欢以完整字节为单位进行计数,这使其成为将颜色(和闪烁)信息传输到计算机的便捷方式。

因此,表示颜色(和闪烁)的完整字节是 Bbbbffff,其中 ffff 是文本颜色的 iRGB 位模式(从 0 到 15),bbb 是低强度的 RGB 位模式背景颜色(从 0 到 7),而 B 是“闪烁”位。

十六种文本颜色和八种背景颜色的限制一直持续到今天。当然,DOS 坚持使用这种颜色组合,但即使是像 GNOME 终端这样的 Linux 终端仿真器也仍然受限于 16 种文本颜色和 8 种背景颜色。当然,Linux 终端可能允许你更改使用的特定颜色,但你仍然限于十六种文本颜色和八种背景颜色。为此,你要感谢 DOS 和最初的 IBM PC。别客气!


via: https://opensource.com/article/21/6/freedos-sixteen-colors

作者:Jim Hall 选题:lujun9972 译者:gpchn 校对:wxy

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

人工智能(AI)和机器学习(ML)正在影响当今几乎每个行业。本文重点介绍了这些技术在我们日常生活中的各种使用方式,以及一些开源云平台如何实现其部署。

人工智能 artificial intelligence (AI)的目标是构建能够模仿人类认知的机器和自动化系统。在全球范围内, AI 正在以各种方式改变着社会、政治和经济。 AI 应用的例子包括 谷歌帮助 Google Help 、Siri、Alexa 和特斯拉等自动驾驶汽车。

如今, AI 正被广泛使用,以有效的方式解决各行各业的难题。它被用于医疗保健行业,以做出比人类更准确、更快速的诊断。医生可以使用 AI 来诊断疾病,并在患者病情恶化时得到提醒。

数据安全对每个企业都至关重要,网络攻击的数量也在不断增加。使用 AI ,可以提高数据的安全性。这方面的一个例子是集成智能机器人来识别软件错误和网络攻击。

Twitter、WhatsApp、Facebook 和 Snapchat 只是使用 AI 算法存储和管理数十亿个人资料的社交媒体平台中的一小部分。 AI 可以整理和筛选大量数据,以找到最新趋势、标签和各种各样人的需求。

Figure 1: Key applications of machine learning

旅游业越来越依赖 AI ,因为后者可以帮助完成各种与旅行相关的任务,包括为消费者预订酒店、航班和最佳路线。为了提供更好、更快的客户服务,由 AI 驱动的聊天机器人正被用于旅游业。

工具/平台链接
Streamlithttps://github.com/streamlit/streamlit
TensorFlowhttps://www.tensorflow.org/
PyTorchhttps://pytorch.org/
scikit-learnhttps://scikit-learn.org/
Apache Sparkhttps://spark.apache.org/
Torchhttp://torch.ch/
Hugging Facehttps://huggingface.co/
Kerashttps://keras.io/
TensorFlowJShttps://www.tensorflow.org/js
KNIMEhttps://www.knime.com/
Apache Mahouthttps://mahout.apache.org/
Accordhttp://accord-framework.net/
Shogunhttp://shogun-toolbox.org/
RapidMinerhttps://rapidminer.com/
Blockshttps://github.com/mila-iqia/blocks
TuriCreatehttps://github.com/apple/turicreate
Dopaminehttps://github.com/google/dopamine
FlairNLPhttps://github.com/flairNLP/flair

表 1: ML 的工具和框架

不同领域的机器学习

让软件应用程序和小工具自行响应和发展的所有技术和工具都称为 机器学习 machine learning (ML)。多亏了 ML 技术, AI 可以在没有真正被明确编程来执行所需操作的情况下进行学习。ML 算法不依赖于预定义的计算机指令,而是从样本输入中学习一个模式,然后完全基于学习到的模式来预测和执行任务。如果没有严格的算法可供选择, ML 可以成为救命稻草。它将通过分析以前的处理方式来选择新处理方式,然后将其付诸实施。ML 为各种行业的技术进步和以前无法想象的技术扫清了道路。如今,它被用于各种尖端技术 — 从预测算法到互联网电视直播。

一个值得注意的 ML 和 AI 技术是图像识别,它是一种对数字图像中的特征或项进行分类和检测的方法。分类和人脸识别是使用这种方法完成的。

Figure 2: Streamlit cloud for machine learning

将 ML 用于推荐系统是其最广泛使用和知名的应用之一。在当今的电子商务世界中,产品推荐是一种利用强大的 ML 技术的代表性工具。网站使用 AI 和 ML 来跟踪过去的购买、搜索趋势和购物车历史,然后根据这些数据生成产品推荐。

在医疗保健行业中使用 ML 算法引起了很多兴趣。通过使用 ML 算法,可以跨多个医院部门预测急诊室等待时间。员工轮班的详细信息、患者数据以及科室讨论和急诊室布局的记录都用于帮助创建算法。 ML 算法可用于检测疾病、计划治疗和预测。

用于 ML 的云平台的主要特点

  • 算法或特征提取
  • 关联规则挖掘
  • 基于大数据的预测分析
  • 分类、回归和聚类
  • 数据加载和转换
  • 数据准备、数据预处理和可视化
  • 降维
  • 分布式线性代数
  • 假设检验和核方法
  • 处理图像、音频、信号和视觉数据集
  • 模型选择和优化模块
  • 预处理和数据流编程
  • 推荐系统
  • 通过插件支持文本挖掘和图像挖掘
  • 可视化和绘图

基于云的 AI 和 ML 应用程序部署

AI 和 ML 的应用可以部署在云平台上。如今,许多云服务提供商使程序员能够构建模型以在其领域内进行有效的决策。

这些基于云的平台与预先训练的 ML 和 深度学习 deep learning (DL)模型集成在一起,无需任何编码或用少量的脚本即可在这些模型上部署应用程序。

Figure 3: Categories of ML deployments in Streamlit

Streamlit

Streamlit 让数据科学家和 ML 专家能够访问各种 ML 模型。它是开源的并且与云部署兼容。ML 模型可以在几分钟内准备好与数据集一起使用

Streamlit 提供一系列 ML 模型和多个类别的源代码,包括自然语言处理、地理、教育、计算机视觉等。

Figure 4: Hugging Face for machine learning

Hugging Face

这是另一个平台,为各种类别的 ML 和 AI 提供预先训练的模型和架构。许多企业巨头都在使用这个平台,包括 Facebook AI、微软、谷歌 AI、亚马逊网络服务和 Grammarly。

Hugging Face 中提供了许多预训练和部署就绪的模型,用于不同的应用程序,包括自然语言处理和计算机视觉。

使用 Hugging Face 中的 ML 模型可以执行以下任务:

  • 音频到音频处理
  • 自动语音识别
  • 计算机视觉
  • 填充蒙版
  • 图像分类
  • 图像分割
  • 物体检测
  • 问题应答
  • 句子相似度
  • 总结
  • 文本分类
  • 文本生成
  • 文本到语音翻译
  • 令牌分类
  • 翻译分类

Hugging Face 中可用的问题解决器经过优化且有效,有助于快速部署模型(图 5)。

Figure 5: Problem solvers and models in Hugging Face

这些基于云的平台对多个领域的研究人员、从业者和数据科学家非常有用,并简化了性能良好的实际应用程序的开发。


via: https://www.opensourceforu.com/2022/09/platforms-that-help-deploy-ai-and-ml-applications-on-the-cloud/

作者:Dr Kumar Gaurav 选题:lkxed 译者:Misite Bao 校对:wxy

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

一个名为 GNU LibreJS 的 Firefox 浏览器扩展程序旨在自动阻止非自由软件的大型 JavaScript 脚本。与 NoScript 相比,GNU LibreJS 的操作也类似。主要的区别特征之一是 NoScript 在默认情况下会阻止大多数 JavaScript 脚本,而 GNU LibreJS 针对的非自由软件的大型 JavaScript 脚本。

GNU LibreJS 源于 Richard Stallman 的一篇名为《JavaScript 陷阱》的文章。Stallman 认为,运行在浏览器上的非自由软件,主要是用 JavaScript 编写的,也有用其他语言编写的。这些应用程序有许多是专有软件或者不开源的,更有甚者其中不乏一些有害的或有问题的程序。Stallman 声称 Google 文档使用的 JavaScript 程序的大小为半兆字节。它是压缩过的,想要理解和分析这样的程序就很具有挑战性。Stallman 将监控用户的 JavaScript 代码称为恶意软件。

Stallman 建议不要运行那些复杂的或非常消耗处理能力的 JavaScript。从外部页面加载的脚本、修改 DOM 的脚本以及对 eval 的调用,都是符合上面描述的 JavaScript 代码的例子。GNU 网站发布了一个(符合上述描述的)列表。当 GNU LibreJS 安装在 Firefox 和其他兼容的浏览器中时,它会为用户做出这些区分。它会启用那些小型的 JavaScript,并阻止它认为非自由软件的大型 JavaScript 代码。

该扩展添加了一个工具栏图标,指示页面上存在多少被阻止的 JavaScript 引用。除了更改整个网站或特定脚本或代码段状态的控件外,单击会显示接受和阻止的 JavaScript。可以将整个网站以及特定脚本或代码片段列入白名单或黑名单。扩展程序会记住之前的设置。提供了显示 JavaScript 代码的选项,以及撤销所有自定义设置或单个自定义设置的选项。


via: https://www.opensourceforu.com/2022/09/gnu-librejs-for-firefox-stops-non-free-non-trivial-javascript/

作者:Laveesh Kocher 选题:lkxed 译者:littlebirdnest 校对:wxy

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

本指南旨在帮助你了解如何在流行的浏览器,如 Firefox、谷歌 Chrome、Chromium 和微软 Edge 中启用深色模式。

我们都喜欢深色模式。许多人喜欢它,而不是标准的浅色模式。虽然许多桌面应用提供了原生的深色模式,但一些应用通过桌面环境的基础模式适应深色模式。

你不能否认,我们都在浏览器上花了好多时间。我们很少使用桌面应用(除非你是在工作,如视频编辑等)。因此,当你在浏览器上花很多时间阅读和学习时,你应该也可以选择深色模式。但是,对于各个浏览器,稍微有点不同。

本指南为你提供简单的步骤,你可以按照这些步骤在 Mozilla Firefox、Chromium、Chrome 和 Edge 浏览器中启用深色模式。

在浏览器中启用深色模式

在 Firefox 中启用深色模式

打开 Firefox ,点击右上角的设置菜单。

点击 “ 设置 Settings > 扩展和主题 Extension and Themes ”。

选择“ 深色主题 Dark Theme ”并点击“ 启用 enable ”。然后你应该看到深色模式被应用到 Firefox。

Enable dark mode in Firefox

Firefox in Dark Mode

要恢复它,按照同样的步骤,选择浅色主题。

Chromium 和 Chrome 的深色模式

Chromium 或 Chrome 默认不预装任何深色主题。因此,你需要去 Chrome 商店,下载任何你想要的深色主题。在本指南中,我将推荐 “Morpheon Dark” 主题,它有超过一百万用户在使用它。

从 Chromium 浏览器中打开 Morpheon Dark 主题页面(从以下链接)。

Chrome 网络商店中的 Morpheon Dark 主题

点击“ 添加到 Chrome Add To Chrome ” 按钮。它应该会在 Chrome 中启用。

你可能想探索 Chrome 网络商店中的其他黑白或深色主题。请访问此页面,查看所有的深色主题集合

然而,你应该记住一件事:这个主题不会改变设置或上下文菜单。这很明显。因为它只是改变了浏览器窗口,而那些菜单是操作系统本身的一部分(有时)。

Chromium Dark Theme

对 Google Chrome 也要按照同样的步骤进行。

Edge 浏览器的深色模式

然而,微软 Edge 浏览器 默认带有更好的深色主题。它允许你从设置中使用 GTK+、浅色和深色模式。

打开 Edge 浏览器

点击右上角的三个小圆点。

进入“ 外观 Appearance ”,选择“ 深色 Dark ”。这就完成了。

这个 Edge 的深色主题实现得更好,因为它改变了上下文菜单和地址栏。

Edge in Dark Theme

结束语

如果你是一个高级用户,你可能不需要这个指南。你可以搞清楚。

但我们为所有的读者涵盖了所有从基础到高级的教程。许多新的 Linux 用户可能也不知道如何在浏览器中启用深色模式。

因此,话虽如此,我希望这能帮助你和其他人。如果你遇到任何麻烦,请在下面的评论栏里告诉我。


via: https://www.debugpoint.com/dark-mode-browser/

作者:Arindam 选题:lkxed 译者:geekpi 校对:wxy

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