2020年12月

JSON 文件非常棒,因为它们以人类可读的格式存储数据集合。然而,如果 JSON 文件被最小化过,那么阅读 JSON 文件可能会很痛苦。

以这个为例:

Minified JSON is difficult to read

计算机可以很容易地读取它。即使是人也能读,但如果 JSON 文件以合适的格式显示,那么阅读就会简单很多。我的意思是 JSON 文件应该是这样读的:

Pretty Printed JSON is easier to read

你可以使用大多数的文本编辑器和一些插件以合适的格式显示它。然而,如果你在终端中,或者你想在你的 shell 脚本中这么做,事情会有所不同。

如果你有一个已最小化过的 JSON 文件,让我来告诉你如何在 Linux 终端中漂亮地输出它。

在 Linux 中用 jq 命令漂亮地打印 JSON 文件

jq 是一个命令行 JSON 处理器。你可以用它来切分、过滤、映射和转换结构化数据。我在这里不打算详细介绍 jq 命令行工具的使用。

要使用 jq,你需要先安装它。你可以使用你的发行版的包管理器来安装它。如果启用了 universe 仓库,你可以使用 apt 命令在 Ubuntu 上安装它:

sudo apt install jq

安装好后,用下面的方法在显示屏上漂亮地打印 JSON 文件:

jq . sample.json

Pretty printed JSON file

你可能也想用 cat,但我认为 cat 在这里没用。

cat sample.json | jq

请记住,上述命令不会影响原始 JSON 文件。不会向它写入任何更改。

你可能已经知道如何在 Linux 中把命令输出重定向到一个文件。你可能也知道不能重定向到同一个文件,而且 tee 命令也不能保证一直有效。

如果你想用漂亮的格式修改原来的 JSON 文件,可以把解析后的输出结果用管道传送到一个新的文件中,然后覆盖原来的 JSON 文件。

jq . sample.json > pretty.json

Pretty printing JSON file in Linux Terminal

额外技巧:用 jq 命令对 JSON 文件最小化。

让我们反过来,对一个格式良好的 JSON 文件进行最小化。要最小化 JSON 文件,你可以使用选项 -c

jq -c < pretty.json

Minified JSON file display

如果你愿意,你也可以使用 cat 和重定向:

cat pretty.json | jq -c

在 Linux 中使用 Python 来漂亮地打印 JSON 文件

你更有可能是在系统中安装了 Python。如果是这样的话,你可以用它在终端漂亮地打印 JSON 文件:

python3 -m json.tool sample.json

Pretty printing JSON with Python

我知道还有其他方法可以解析 JSON 文件并以适当的格式打印出来。你可以自己去探索,但这两种方法足以完成漂亮地打印 JSON 文件的工作。


via: https://itsfoss.com/pretty-print-json-linux/

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

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

5G 是一种蜂窝服务, Wi-Fi 6 则是短程无线接入技术,这两种技术都有使其在特定企业角色中发挥作用的特性。

Thinkstock

我们已经看到了关于 5G 蜂窝还是 Wi-Fi 6 将在企业使用中胜出的大肆宣传,但事实却是这两者在很大程度上互补,这将在 21 世纪 20 年代初形成一个有趣的竞争环境。

5G 在企业中的潜力

5G 对企业用户的承诺是在更低的延迟下提供更高的连接速度。蜂窝技术使用许可频段,可在很大程度上消除未经许可的 WiFi 频段可能会发生的潜在干涉。像当前的 4G LTE 技术一样,5G 可以由蜂窝无线运营商提供,也可以作为专用网络构建。

5G 的架构需要更多的无线接入点,并且在室内可能会出现连接质量较差或没有连接。因此,典型的组织需要为连接它的 PC、路由器和其他设备评估其 当前 4G 和潜在 5G 服务配置。部署室内微蜂窝、中继器以及分布式天线可以帮助解决室内 5G 服务问题。与 4G 一样,5G 最佳的企业应用案例应该是用于真正的移动连接,例如,公共安全车和非地毯式覆盖区域(如采矿,石油与天然气开采、运输、农业和一些制造业)。

除了广泛的移动性,5G 在漫游时的身份验证和部署速度方面也具有优势,这正好满足临时办公室或零售点的广域网连接需求。5G 将会拥有在视频直播这样的数据拥塞的情况下分流的能力。随着 5G 标准的成熟,该技术将提高其低功耗 IoT 连接的选择。

未来四到五年内,5G 将从大城市和特定地区开始逐步推出;4G 技术将在未来数年内继续流行。企业用户将需要新的设备、加密狗和路由器来连接 5G 服务。例如,苹果的 iPhone 预计要到 2020 年才能支持 5G,而物联网设备需要特定的蜂窝网络兼容性才能连接到 5G。(LCTT 译注:原文发表于 2019 年中)

Doyle Research 预计,5G 承诺的 1Gbps 和更高的带宽将对 SD-WAN 市场产生重大影响。4G LTE 已经使蜂窝服务成为主要的 WAN 连接。5G 可能比许多有线 WAN 选项(例如 MPLS 或互联网)更具成本竞争力或更便宜。5G 为企业 WAN 管理员提供了更多选择,为他们的分支站点和远程用户提供更多的带宽 —— 随着时间的推移,或将取代 MPLS。

Wi-Fi 6 在企业中的潜力

Wi-Fi 几乎无处不在,它可以将便携式笔记本电脑、平板电脑和其他设备连接到企业网络中。Wi-Fi 6(802.11ax)是 Wi-Fi 的最新版本,并有望提高速度、降低延迟、改善聚合带宽并提供高级流量管理。虽然 Wi-Fi 6 与 5G 有一些相似之处(两者均基于正交频分多址),但 Wi-Fi 6 不太容易受到干扰,能耗更低(延长设备电池的寿命),并提高了频谱效率。

与典型的 Wi-Fi 相同,目前许多厂商都有 Wi-Fi 6 早期厂商专用版本。Wi-Fi 联盟计划在 2020 年获得 Wi-Fi 6 标准设备的认证。大多数企业将按照标准 接入点 access-point (AP)的生命周期(三年左右)升级到 Wi-Fi 6,除非他们有特定的性能/延迟要求,这将促使它们更快地升级。

Wi-Fi 接入点仍然会受到干涉的影响。设计和配置接入点以提供适当的覆盖范围将会是一项挑战。企业 LAN 管理者将继续需要供应商提供的工具和合作伙伴来为组织配置最理想的 Wi-Fi 覆盖。Wi-Fi 6 解决方案必须与有线区域基础建设集成。Wi-Fi 供应商需要更好地为企业提供无线和有线解决方案的统一网络管理。

有线回程的需求

对于这两种技术,通过无线与有线网络基础设施相结合,可以提供端到端的高速通信。在企业中,Wi-Fi 通常与区域和一些较大分支机构的有线以太网交换机搭配使用。一些设备通过电缆连接到交换机,其他设备则通过 Wi-Fi 连接,而笔记本电脑可能会同时采用这两种方法。Wi-Fi 接入点通过企业内部的以太网连接,并通过光纤连接连接到 WAN 或 Internet。

5G 的架构广泛使用光纤,将分布式无线接入网络连接回 5G 网络的核心。光纤通常需要提供将 5G 端点连接到基于 SaaS 的应用程序所需的高带宽,并提供实时视频和高速互联网访问。专用 5G 网络也必须满足高速有线连接要求。

切换问题

随着手机在 5G 和 Wi-Fi 6 之间切换,企业 IT 管理者要注意到切换挑战。这些问题会影响到性能和用户满意度。一些组织正在努力制定标准,以促进 Wi-Fi 6 和 5G 间更好的互操作性。 由于 Wi-Fi 6 的架构与 5G 接轨,在蜂窝网络与 Wi-Fi 网络间移动的体验应该更加顺滑。

5G 和 Wi-Fi 6 的对比取决于位置、应用和设备

Wi-Fi 6 和 5G 在企业环境中的特定情况下相互竞争,这取决于位置、应用程序和设备类型。IT 管理者应该仔细评估他们当前和正在出现的连接性需求。Wi-Fi 将继续占领室内环境优势,而移动蜂窝网络将赢得更为广泛的室外覆盖。

一些重叠的情况发生在体育场馆、酒店和其他大型活动场所,许多用户将争夺带宽。政府应用(包括智能城市方面)可适用于 Wi-Fi 和蜂窝。医疗保健设施中有许多分布式医疗设备和需要连接的用户。大型分布式制造环境具有相似的特点。新兴的物联网应用环境可能是最有趣的“重叠使用案例”。

对于 IT 领导者的建议

虽然支持它们的无线技术正在融合,但 Wi-Fi 6 和 5G 从根本上来说是不同的网络,在企业连接中都有各自的作用。企业 IT 领导者应关注 Wi-Fi 和蜂窝网络如何相互补足,Wi-Fi 将继续作为内置技术,连接 PC 和笔记本电脑,处理手机和平板电脑数据,并实现一些物联网连接。

4G LTE 升级到 5G 后,仍将是手机和平板电脑连接的真正移动技术,也是 PC 连接的一种选择(通过加密狗),并在连接一些物联网设备方面越来越受欢迎。5G WAN 链路将日益成为标准,作为提高 SD-WAN 可靠性的备份和远程办公室的主要链路。


via: https://www.networkworld.com/article/3402316/when-to-use-5g-when-to-use-wi-fi-6.html

作者:Lee Doyle 选题:lujun9972 译者:chenmu-kk 校对:wxy

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

Fedora CoreOS入门

现在被称为 DevOps 时代,操作系统的关注度似乎比工具要低一些。然而,这并不意味着操作系统没有创新。(编辑注:基于 Linux 内核的众多发行版所提供的多样化产品就是一个很好的例子)。Fedora CoreOS 就对这个 DevOps 时代的操作系统应该是什么样有着独特的理念。

Fedora CoreOS 的理念

Fedora CoreOS(FCOS)是由 CoreOS Container Linux 和 Fedora Atomic Host 合并而来。它是一个专注于运行容器化应用程序的精简的独体操作系统。安全性是首要重点,FCOS 提供了自动更新,并带有 SELinux 强化。

为了使自动更新能够很好地工作,它们需要非常健壮,目标是运行 FCOS 的服务器在更新后不会崩溃。这是通过使用不同的发布流(stable、testing 和 next)来实现的。每个流每 2 周发布一次,更新内容会从一个流推广到另一个流(next -> testing -> stable)。这样落地在 stable 流中的更新就有机会经过长时间的测试。

入门

对于这个例子,让我们使用 stable 流和一个 QEMU 基础镜像,我们可以作为一个虚拟机运行。你可以使用 coreos-installer 来下载该镜像。

在你的(Workstation)终端上,更新镜像的链接后,运行以下命令(编辑注:在 Silverblue 上,基于容器的 coreos 工具是最简单的方法,可以尝试一下。说明可以在 https://docs.fedoraproject.org/en-US/fedora-coreos/tutorial-setup/ 中找到,特别是 “Setup with Podman or Docker” 一节。):

$ sudo dnf install coreos-installer
$ coreos-installer download --image-url https://builds.coreos.fedoraproject.org/prod/streams/stable/builds/32.20200907.3.0/x86_64/fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2.xz
$ xz -d fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2.xz
$ ls
fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2

创建一个配置

要定制一个 FCOS 系统,你需要提供一个配置文件,Ignition 将使用这个文件来配置系统。你可以用这个文件来配置诸如创建用户、添加受信任的 SSH 密钥、启用 systemd 服务等等。

以下配置创建了一个 core 用户,并在 authorized_keys 文件中添加了一个 SSH 密钥。它还创建了一个 systemd 服务,使用 podman 来运行一个简单的 “hello world” 容器:

version: "1.0.0"
variant: fcos
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-ed25519 my_public_ssh_key_hash fcos_key
systemd:
  units:
    -
      contents: |
          [Unit]
          Description=Run a hello world web service
          After=network-online.target
          Wants=network-online.target
          [Service]
          ExecStart=/bin/podman run --pull=always   --name=hello --net=host -p 8080:8080 quay.io/cverna/hello
          ExecStop=/bin/podman rm -f hello
          [Install]
          WantedBy=multi-user.target
      enabled: true
      name: hello.service

在配置中加入你的 SSH 密钥后,将其保存为 config.yaml。接下来使用 Fedora CoreOS Config Transpiler(fcct)工具将这个 YAML 配置转换成有效的 Ignition 配置(JSON 格式)。

直接从 Fedora 的资源库中安装 fcct,或者从 GitHub 中获取二进制文件:

$ sudo dnf install fcct
$ fcct -output config.ign config.yaml

安装并运行 Fedora CoreOS

要运行镜像,你可以使用 libvirt 堆栈。要在 Fedora 系统上使用 dnf 软件包管理器安装它:

$ sudo dnf install @virtualization

现在让我们创建并运行一个 Fedora CoreOS 虚拟机:

$ chcon --verbose unconfined_u:object_r:svirt_home_t:s0 config.ign
$ virt-install --name=fcos \
--vcpus=2 \
--ram=2048 \
--import \
--network=bridge=virbr0 \
--graphics=none \
--qemu-commandline="-fw_cfg name=opt/com.coreos/config,file=${PWD}/config.ign" \
--disk=size=20,backing_store=${PWD}/fedora-coreos-32.20200907.3.0-qemu.x86_64.qcow2

安装成功后,会显示一些信息并提供登录提示符:

Fedora CoreOS 32.20200907.3.0
Kernel 5.8.10-200.fc32.x86_64 on an x86_64 (ttyS0)
SSH host key: SHA256:BJYN7AQZrwKZ7ZF8fWSI9YRhI++KMyeJeDVOE6rQ27U (ED25519)
SSH host key: SHA256:W3wfZp7EGkLuM3z4cy1ZJSMFLntYyW1kqAqKkxyuZrE (ECDSA)
SSH host key: SHA256:gb7/4Qo5aYhEjgoDZbrm8t1D0msgGYsQ0xhW5BAuZz0 (RSA)
ens2: 192.168.122.237 fe80::5054:ff:fef7:1a73
Ignition: user provided config was applied
Ignition: wrote ssh authorized keys file for user: core

Ignition 配置文件没有为 core 用户提供任何密码,因此无法通过控制台直接登录。(不过,也可以通过 Ignition 配置为用户配置密码。)

使用 Ctrl + ] 组合键退出虚拟机的控制台。然后检查 hello.service 是否在运行:

$ curl http://192.168.122.237:8080
Hello from Fedora CoreOS!

使用预先配置的 SSH 密钥,你还可以访问虚拟机并检查其上运行的服务:

$ ssh [email protected]
$ systemctl status hello
● hello.service - Run a hello world web service
Loaded: loaded (/etc/systemd/system/hello.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-28 10:10:26 UTC; 42s ago

zincati、rpm-ostree 和自动更新

zincati 服务使用自动更新驱动 rpm-ostreed。

检查虚拟机上当前运行的 Fedora CoreOS 版本,并检查 zincati 是否找到了更新:

$ ssh [email protected]
$ rpm-ostree status
State: idle
Deployments:
● ostree://fedora:fedora/x86_64/coreos/stable
Version: 32.20200907.3.0 (2020-09-23T08:16:31Z)
Commit: b53de8b03134c5e6b683b5ea471888e9e1b193781794f01b9ed5865b57f35d57
GPGSignature: Valid signature by 97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0
$ systemctl status zincati
● zincati.service - Zincati Update Agent
Loaded: loaded (/usr/lib/systemd/system/zincati.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-28 13:36:23 UTC; 7s ago
…
Oct 28 13:36:24 cosa-devsh zincati[1013]: [INFO ] initialization complete, auto-updates logic enabled
Oct 28 13:36:25 cosa-devsh zincati[1013]: [INFO ] target release '32.20201004.3.0' selected, proceeding to stage it

... zincati reboot ...

重启后,我们再远程登录一次,检查新版的 Fedora CoreOS:

$ ssh [email protected]
$ rpm-ostree status
State: idle
Deployments:
● ostree://fedora:fedora/x86_64/coreos/stable
Version: 32.20201004.3.0 (2020-10-19T17:12:33Z)
Commit: 64bb377ae7e6949c26cfe819f3f0bd517596d461e437f2f6e9f1f3c24376fd30
GPGSignature: Valid signature by 97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0
ostree://fedora:fedora/x86_64/coreos/stable
Version: 32.20200907.3.0 (2020-09-23T08:16:31Z)
Commit: b53de8b03134c5e6b683b5ea471888e9e1b193781794f01b9ed5865b57f35d57
GPGSignature: Valid signature by 97A1AE57C3A2372CCA3A4ABA6C13026D12C944D0

rpm-ostree status 现在显示了两个版本的 Fedora CoreOS,一个是 QEMU 镜像中的版本,一个是更新后的最新版本。有了这两个版本,就可以使用 rpm-ostree rollback 命令回滚到之前的版本。

最后,你可以确保 hello 服务仍在运行并提供内容:

$ curl http://192.168.122.237:8080
Hello from Fedora CoreOS!

更多信息参见:Fedora CoreOS 更新

删除虚拟机

要进行事后清理,使用以下命令删除虚拟机和相关存储:

$ virsh destroy fcos
$ virsh undefine --remove-all-storage fcos

结论

Fedora CoreOS 为在容器中运行应用程序提供了一个坚实而安全的操作系统。它在推荐主机使用声明式配置文件进行配置的 DevOps 环境中表现出色。自动更新和回滚到以前版本的操作系统的能力,可以在服务的运行过程中带来安心的感觉。

通过关注项目文档中的教程,了解更多关于 Fedora CoreOS 的信息。


via: https://fedoramagazine.org/getting-started-with-fedora-coreos/

作者:Clément Verna 选题:lujun9972 译者:wxy 校对:wxy

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

拥有一致的命名标准是保持本地和上游 Git 仓库保持一致的关键。

当本地 Git 仓库的命名与远程仓库不一致时,与远程仓库协作就会变得很混乱。

解决此问题的一个方法是标准化两个词的使用和含义:origin 指的是你个人的 example.com/<USER>/* 仓库,而 upstream 指的是你从 origin 仓库 复刻 fork 出来的 example.com 仓库。换句话说,upstream 指的是公开提交工作的上游仓库,而 origin 指的是你对上游仓库的本地复刻,例如,你从这里生成 拉取请求 pull request (PR)。

pbench 仓库为例,下面是一个逐步建立新的本地克隆的方法,其中 originupstream 的定义是一致的。

1、在大多数 Git 托管服务上,当你想在上面工作时,必须对它进行复刻。当你运行自己的 Git 服务器时,这并不是必要的,但对于一个公开的代码库来说,这是一个在贡献者之间传输差异的简单方法。

创建一个 Git 仓库的复刻。在这个例子中,假设你的复刻位于 example.com/<USER>/pbench

2、接下来,你必须获得一个统一资源标识符 (URI),以便通过 SSH 进行 克隆 cloning 。在大多数 Git 托管服务上,比如 GitLab 或 GitHub,它在一个标有 “Clone” 或 “Clone over SSH” 的按钮或面板上,可以将克隆 URI 复制到剪贴板中。

3、在你的开发系统中,使用你复制的 URI 克隆仓库:

$ git clone [email protected]:<USER>/pbench.git

这将以默认名称 origin 来克隆 Git 仓库,作为你的 pbench 仓库复刻副本。

4、切换到刚才克隆的目录:

$ cd ~/pbench

5、下一步,获取源仓库的 SSH URI(你最初复刻的那个)。这可能和上面的方法一样。找到 “Clone” 按钮或面板,复制克隆地址。在软件开发中,这通常被称为“上游”,因为(理论上)这是大多数提交发生的地方,而你打算让这些提交流向下游的仓库。

6、将 URI 添加到你的本地仓库中。是的,将有两个不同的远程仓库分配给你的本地仓库副本:

$ git remote add upstream [email protected]:bigproject/pbench.git

7、现在你有两个命名远程仓库:originupstream。 你可以用 remote 子命令查看你的远程仓库:

$ git remote -v

现在,你的本地 master 分支正在跟踪 originmaster,这不一定是你想要的。你可能想跟踪这个分支的 upstream 版本,因为大多数开发都在上游进行。这个想法是,你要在从上游获得的内容的基础上添加更改。

8、将你的本地的 master 分支改成跟踪 upstream/master

$ git fetch upstream
$ git branch --set-upstream-to=upstream/master master

你可以对任何你想要的分支这样做,而不仅仅是 master。例如,有些项目使用 dev 分支来处理所有不稳定的变化,而将 master 保留给已批准发布的代码。

9、一旦你设置了你的跟踪分支,一定要变基(rebase)你的 master 分支,使它与上游仓库的任何新变化保持一致:

$ git remote update
$ git checkout master
$ git rebase

这是一个保持 Git 仓库在不同复刻之间同步的好方法。如果你想自动完成这项工作,请阅读 Seth Kenlon 关于使用 Ansible 托管 Git 仓库的文章。


via: https://opensource.com/article/20/11/multiple-git-repositories

作者:Peter Portante 选题:lujun9972 译者:geekpi 校对:wxy

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

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客《代码英雄》第三季(5):基础设施的影响音频脚本。

导语:用在 IT 基础设施中的语言是没有有效期的。COBOL 已经存在了 60 年 —— 而且不会很快消失。我们为大型机维护了数十亿行经典代码。但我们也在用 Go 等语言为云构建新的基础设施。

COBOL 是计算机的一次巨大飞跃,让各行各业变得更加高效。Chris Short 介绍了学习 COBOL 是如何被视为安全的长期投注的。60 年后的今天,还有数十亿行并不容易被替换掉的 COBOL 代码 —— 懂这门语言的专家也很少。Ritika Trikha 解释说,有些事情必须改变。要么更多的人必须学习 COBOL,要么依赖 COBOL 的行业必须更新他们的代码库。这两个选择都很困难。但未来并不是用 COBOL 编写的。今天的 IT 基础架构是在云端构建的,其中很多是用 Go 编写的。Carmen Hernández Andoh 分享了 Go 的设计者是如何想要设计一种更适合云计算的语言。Kelsey Hightower 指出,语言通常都是超专注于一种任务。但它们正变得越来越开放和灵活。

00:00:00 - Saron Yitbarek

1904 年,纽约市地铁首次开始运营时,它被惊叹为现代的一个奇迹。但是……当今天的通勤者仍依赖一个多世纪前设计的基础设施时,会发生什么?列车挤满了人,而且常常晚点。纽约每年有 20 亿人次地铁出行,再也没有人为此感到惊叹了。我们还在依赖昨日的过时基础设施,我们必须找到新的好办法,让它发挥作用。

00:00:44

过去,基础设施项目通常是些可见的大而具体的事物,例如地铁。而且由于这种物理可见性,它们损坏时也显而易见。高速公路开裂、电线杆倒下,我们很清楚这些东西何时需要维修。为了使我们的生活与老化的基础设施保持协调,大量的工作是必不可少的。

00:01:12

但是事物并不总是那么一是一、二是二。如今,我们还拥有 IT 基础设施,在偏僻地区嗡嗡作响的服务器农场,跨越海洋的光纤电缆,还有软件基础设施。而像遗留的操作系统或没人敢替换的 shell 脚本,这些 IT 基础设施变得陈旧和破旧时,我们是无法看出的。但是,造就了今日发展的基础设施却正在老化,就像旧的地铁轨道一样。这可能会扰乱我们的现代生活。如今命令行英雄们正努力确保我们不会被过去束缚,因此出现了大量新的挑战。

00:02:02

这是我们第三季进入编程语言世界探索的第 5 期。我们将研究两种编程语言,它们与最初设计的目标基础设施密切相关。COBOL 是一种大型机的原生语言,而 Go 是云计算的原生语言。它们都深受其起源的影响。理解这一点可能会让明天的开发者不至于像纽约人一样被塞进宾夕法尼亚州的车站。

00:02:33

我是 Saron Yitbarek,这里是红帽的原创播客,《命令行英雄》的第三季。

00:02:43 - 格蕾丝·赫柏 Grace Hopper

我们面前有很多事情需要去做,但是我们首先需要大量相关的且易于访问的信息。我们才刚刚开始。

00:02:53 - Saron Yitbarek

海军上将 格蕾丝·赫柏 Grace Hopper 在 20 世纪 40、50 年代率先开发了高级编程语言。而她之所以能够实现这种巨大的飞跃,是因为当时的基础设施,大型计算机。

00:03:08 - Chris Short

嗨,我叫 Chris Short。

00:03:10 - Saron Yitbarek

Chris 是红帽的首席产品营销经理,而且他也是一位历史爱好者。

00:03:17 - Chris Short

上世纪 40 年代的赫柏上将创造了 FLOW-MATIC,这在当时是革命性的,她被广泛认为是 COBOL 的祖母。因此,她能够坐在那里说:“嘿,只需将其放在大型机上”,或“嘿,只需将其存储在大型机上”即可。

00:03:31 - Saron Yitbarek

这是一个重大的游戏规则改变。突然,你有了这种机器无关的语言,即 COBOL,它是大型机环境特有的。可能性开始逐步打开。

00:03:42 - Chris Short

大型机和 COBOL 真正使得每个组织能够说,它们不再需要充满了带着铅笔、纸、计算器和滑尺的人的办公室,他们可能只需要半个办公室来安装大型机。然后,他们可以雇人用 COBOL 来编写一些应用程序来完成整个财务团队做的所有的数学、逻辑运算以及账目。因此,你需要的财务团队人数少了,仅仅是因为更多的输入可以被数字化,而不是全手动操作。

00:04:17 - Saron Yitbarek

如果你是那些新来的 COBOL 程序员之一,你会觉得你有了一份终身的工作。因为你的工作所基于的基础设施 —— 所有那些大型机 —— 始终会在那里。

00:04:30 - Chris Short

那时侯摩尔定律还未出现,所以你可以整整十年都在同一个大型机上工作,对吧?就像你不用去考虑下一个操作系统,或者下一个类型的容器编排器,又或者下一个出现 AI 之类的东西一样。你可能会整个职业生涯都在从事 COBOL。而且你知道自己的生活将会非常稳定。

00:04:55 - Saron Yitbarek

但是,摩尔定律最终还是来了。新的基础设施也出现了。现如今,程序员不太可能去学习一种半个世纪前的旧语言。但实际上,那些老旧的大型机其实并没有消失。这意味着我们对 COBOL 开发人员的需求也没有消失。

00:05:17 - Chris Short

寻找 COBOL 开发者变得越来越困难。最终会发生的事情是这些大型机可能已经存在了 50 年。这些仍然可以编写出色 COBOL 程序的开发人员将获得巨额收入,以帮助项目运行并完成大型机中的数据重组。而且,该技能肯定会绝迹,并且正在成为一个利润丰厚的职业领域,如果你……现在写 COBOL 绝对可以赚很多钱。

00:05:49 - Saron Yitbarek

尤其是在制造业和金融业。你无法超越几十年前建立的所有基础设施。遗留代码遍及全球。忽略这些老旧的基础设施及其相关的语言,将是一个巨大的错误。

00:06:08 - Chris Short

有两千亿行代码摆在那里,要重构这些代码真的很难。不,我不认为在有生之年我们会看到它消失,真的。

00:06:21 - Saron Yitbarek

Chris Short 是红帽的首席产品营销经理。

00:06:28

我想花一秒钟解释一下 Chris 的观点。你想想看,95% 的 ATM 交易中都有 COBOL 代码,那就是我们与这种语言的联系。但是,COBOL 程序员的平均年龄并不比该语言年轻多少。他们 45 岁,或许 55岁。新人们并不感兴趣这门语言。这就是为什么我想向你介绍一个人。

00:06:56 - Ritika Trikha

嘿,我是 Ritika Trikha。

00:06:59 - Saron Yitbarek

Ritika 是一名技术编辑,曾在 HackerRank 工作。她对 COBOL 的这个问题着迷:人们认为 COBOL 是后大型机时代无意义的残留品。

00:07:12 - Ritika Trikha

如今的开发人员根本不会考虑 COBOL 了,见也没见过,想也没想过。

00:07:17 - Saron Yitbarek

但这可能是灾难的根源。

00:07:21 - Ritika Trikha

如今,仍然有大量的 COBOL 代码在驱动企业的业务。每年至少新增 15 亿行 COBOL 新代码。我认为当你看特定行业时,真的很有意思。就像美国国税局有 5000 万行代码。社会保障局有 6000 万行代码。 因此,这些单位和实体正在处理一些如今最敏感、重要的信息,如果我们不继续为这些大型机提供支持和维护,就会造成很大的破坏。

00:08:04 - Saron Yitbarek

因此,如果我们无法摆脱旧的基础设施,又无法挥舞魔杖来重建整个大型机业务,我们该怎么办?编码人员有时候仅考虑未来,该如何接受过去?我们首先需要直面该问题。

00:08:25 - Ritika Trikha

你知道,年轻一代将不得不重拾这些技能。或者,必须对这些大型机进行某种现代化改造。无论是哪种方式,这个问题都不会消失。这就是为什么 COBOL 还活着的原因。

00:08:35 - Saron Yitbarek

这并不容易。 Ritika 认为我们已经忽略这个问题太长时间了。

00:08:42 - Ritika Trikha

这非常昂贵、艰巨,并且替换数十亿行 COBOL 代码的风险也非常高。它是用于关键任务的代码,比如社会保障和金融信息。COBOL 是专门为此类大量交易而设计的。因此,它由格蕾丝·赫柏在 60 年代为商业交易而设计。自上世纪 60 年代以来,一直存在“如果没坏,为什么要修复它”的说法,现在我们处于这样一个关头,即延续了数十年的大量的高价值数据运行在 COBOL 上。

00:09:22 - Saron Yitbarek

从某种意义上说, Ritika 在呼吁一种文化的转变。改变对 "进 "与 "退 "的态度。由于发展的世界慢慢有了越来越久的历史,我们会更加地接触到自己的历史。你无法摆脱老化的基础设施。这意味着你也不能忽略编程语言的历史。

00:09:47 - Ritika Trikha

有些事情必须得做。当我在 HackerRank 时,我亲眼看到了多少银行和金融机构对 COBOL 开发人员的伤害,几乎是绝望的。这不是一个会被解决的问题,我认为要么必须有某种现代化的系统,要么我们继续培训人员并激励他们。我个人认为将会有 COBOL 再次出现的一天。真的,当所有拥有 COBOL 知识的开发人员退休,并且没有新一代的开发人员学 COBOL 时,将会发生什么?总得做点什么,对吧?所以,当从 COBOL 转向新的基于云的基础设施时,需要有更多的系统化和制度化的改变。

00:10:37 - Saron Yitbarek

Ritika Trikha 是一名旧金山的技术作家。

00:10:49 - Saron Yitbarek

那么 Ritika 提到的那些基于云的基础设施呢?我们今天建立的基础设施是否会将后代绑定到特定的语言,像我们仍绑定找 COBOL 上一样? 亚马逊 Web 服务 Amazon Web Services (AWS)可能是最大的单一云基础设施,于 2006 年推出。 Google 云平台 Google Cloud Platform (GCP)于 2008 年问世,微软 Azure 于 2010 年问世。 Go 语言以并发为重点,定位于在新的云基础设施上蓬勃发展。这是这个时代的语言。

00:11:26 - Carmen Andoh

嗨,我叫 Carmen Andoh, 我是谷歌 Go 团队的项目经理。

00:11:34 - Saron Yitbarek

Carmen 对 Go 语言与今天的基础设施有怎样的联系有深入的理解。这要从 Go 的创作者和编程语言历史的紧密联系说起。

00:11:47 - Carmen Andoh

Robert Pike、Robert Griesemer 和 Ken Thompson。这些名字算是从上世纪 60 年代就开始出现了。Ken Thompson 发明了 B 语言,然后他在夏天的假期继续发明 UNIX 操作系统。Rob Pike 发明了字符串编码 UTF-8,他还发明了 ASCII。他帮助 Ken Thompson 共同编写了 UNIX 编程环境。所以,这两个人是很多、很多年前的同事,他们一直在研究和发明用以前的编程语言编写的操作系统,这些语言包括 Ken Thompson 最终帮助 Dennis Ritchie 一起编写的 C 语言。

00:12:28 - Saron Yitbarek

Pike、Griesemer 和 Thompson 在 Google 工作之后,他们发现了一个严重的问题。并没有出现大规模的并发。人们等待了几个小时编译出来。他们使用的是 C++,并且必须得编写所有这些回调和事件调度器。那是在 2009 年,我们的基础设施再次发生了变化。诸如 C++ 之类的语言越来越不适应这种新的现实。

00:12:59 - Carmen Andoh

多核处理器、网络系统、大规模计算集群和 Web 编程模型等正在引入这些问题。而且,还有这个行业的增长,程序员数量在 2010 年就会达到成千上万。因此,直到那时,所有的编程语言都是在规避问题而不是在正面解决问题。

00:13:24 - Saron Yitbarek

最终,将达到一个临界点,必须开始改变。

00:13:30 - Carmen Andoh

嘿,我们讨厌 C++ ,我说:“好吧,让我们看看我们是否能发明些新的东西。”

00:13:37 - Saron Yitbarek

这种新语言需要完美地适应我们最新的基础设施。

00:13:43 - Carmen Andoh

2005 年云技术到来以后,你不再需要自己的计算机,在某种程度上在其他地方租用它,你就可以得到一个分布式系统。但是在分布式系统中,以及在云计算中,存在并发消息传递问题。你需要确保采用异步对你来说没有问题。Go 缺省就是异步的编程语言。基本上,这意味着你执行的每个操作(例如将所有这些不同的消息发送给系统中的另一个计算机)都无需等待另一个机器对你的响应即可完成。因此,它可以在任何给定时间处理多个消息。

00:14:28 - Carmen Andoh

就是说,云计算是分布式的。因此 Go 的开发就是来满足这一确切需求。Go 早就成为进行这种分布式计算的标准方法之一。这就是为什么我认为它立即引起了开发人员的广泛关注。Go 绝对是云基础设施的语言,无论是其设计,还是所有云基础设施工具,以及在过去十年中如雨后春笋般出现的模块的生态。

00:15:06 - Saron Yitbarek

很快,诸如 Kubernetes 之类的关键应用都用 Go 编写了。谷歌还创建了 Go Cloud,这是一个开源库和一系列工具,使得 Go 更具吸引力。很显然,它是新生态系统的语言。它是云的语言。而且,它的创造者们因开发生命力持久的语言而享有声誉,这绝对没有坏处。

00:15:33 - Carmen Andoh

我认为业界的其他人会说:“嘿,我认为这不会很快消失。”这种语言的发明者恰巧也发明了语言有 50 、60 年了。

00:15:47 - Saron Yitbarek

Carmen Andoh 是谷歌 Go 团队的项目经理。

00:15:54

因此,我们有了一种新的语言 Go ,旨在提供云基础设施必需的并发性。听起来不错。Go 的设计师倾向于创造可以持续半个世纪的语言。这也很棒。但是我的问题是,从现在起,50 年后,当 Go 更像是 COBOL 时,这到底意味着什么?当世界上充满了只有老开发人员才能理解的旧版 Go 代码时,这又意味着什么?在当今的云基础设施老化的时候,我们是否会做好准备?我们是否从 COBOL 和大型机领域吸取了教训,可以帮助我们为 Go 和云设计更美好的未来?

00:16:40

幸运的是,我找到了问所有这些问题的合适人选。这就是下面这位。

00:16:51

我们如何使我们的语言能面向未来?我们知道他们与当今的基础设施息息相关。我们也知道,随着数十年的发展,新的基础设施必将取代旧的基础设施。那么,我们今天做些什么以确保将来能平滑演进?

00:17:10 - Kelsey Hightower

我是 Kelsey Hightower ,我在谷歌,是一名开发人员推广大使,我致力于引入开放性技术并将它们应用于谷歌云上的产品。

00:17:19 - Saron Yitbarek

Kelsey 花了大量时间思考编程的未来。我很好奇,是否有一天我们将陷于握有 Go 语言技能的是另一批老龄化的程序员的问题,就像我们现在缺少 COBOL 的引导一样。我们是否在为这个长远的未来做计划?因此,我和 Kelsey 坐下来进行讨论。

00:17:42 - Kelsey Hightower

...等等。但是,如果你考虑到今天面临的一些新的挑战,如应对互联网,这种网络,你将面临许多用户,成千上万的并发用户,以及不同的机器和架构类型的组合。考虑到这些新的场景,因此你通常希望有一种新的语言来解决。例如, JavaScript 是用于 Web 的,你不会想改造 COBOL 以便可以用它来进行 Web 编程。最终,我们今天已经有了数百种相当完善的语言,而且它们都非常专注于他们的优势。

00:18:15 - Saron Yitbarek

那么,在那种情况下,我们是否需要积极推动人们走向 COBOL ?如果我们正在为这些新问题开发新语言,并且它们是高度定制化的,而 COBOL 仍在坚持不谢幕,我们是否需要鼓励人们选择它,以便我们可以维护我们的旧代码?

00:18:32 - Kelsey Hightower

好吧,我认为这将对企业是个挑战吧?所以,你已经在 COBOL 上投入了 10 到 20 年,没有人会主动想学习一些新的 COBOL。或者你不会像刚从大学毕业那么“我要加倍努力……”。

00:18:45 - Saron Yitbarek

没错。

00:18:46 - Kelsey Hightower

“...这种语言比我父母的年龄都大。” 因此,在那个领域,你必须问自己,继续使用 COBOL 的风险是什么?未来是否仍然有意义?我认为它仍然有益于某些类型的工作任务,但是我们必须问自己一个问题,是时候推进了吗?是时候进化一点了吗?因此,如果你仍然有数十亿行的 COBOL 代码,那么你将必须寻找所有剩余的 COBOL 人才,并将其招进来,但也许我们该开始考虑其他语言能从 COBOL 学习些什么,并将某些功能和库加入到其他语言中。

00:19:26 - Saron Yitbarek

COBOL 终止以后的日子,将会是一个巨大的基础设施项目。用我对纽约地铁的比喻,就像是要替换每条地下隧道。因此,展望未来,我想知道我们是否可以预见到这些问题,甚至将来对自己也能有所帮助。

00:19:48

如果我们将今天的云计算与大型机进行比较,我们是否会在最终到达同一条船上,有着这些旧代码库,使用着旧的但非常稳定的语言,而且我们也到了必须做出选择的时候,我们应该继续前进还是保持不变?

00:20:05 - Kelsey Hightower

云有点不同的是它不是来自一个制造商,对吗?许多云提供商通常提供了一系列技术集合,你就可以选择编程语言、编程范式,无论你是要事件驱动还是基于 HTTP 的全 Web 服务。这意味着你可以选择编程的方式,然后只需专注于要解决的问题。因此,数据进进出出,但是你来选择处理数据的方式。

00:20:36

大型机通常只有一个主界面,对吗?就像你编写一份任务一样,这就是你提交任务的方式,这就是你监控任务的方式,这就是结果。这本身就是一个限制。如果你考虑一些较新的大型机,它们也会支持些较新的技术,因此即使在大型机领域,你也会开始看到可用于运行任务的编程语言扩展。

00:20:58

那么我们开始问自己,好吧,既然我有了新的选项,该什么时候离开这种特定的编程范式继续前进呢?我认为我们不会陷入困境。

00:21:08 - Saron Yitbarek

正确。

00:21:08 - Kelsey Hightower

我认为新的分布式机器很不错,可能起步成本更低,你不必购买整个大型机即可开工。但是我们仍然希望易用性和之前一样:给你我的工作,你为我运行它,完成后告诉我。

00:21:24 - Saron Yitbarek

绝对是这样,你觉得发生的事情,或者说 COBOL 所发生的事情,会发生在今天的任何一种语言上吗? 以 Go 语言做例子,你看到我们在努力地改进 Go 从而吸引人们在 30 年后还想用 Go ?

00:21:38 - Kelsey Hightower

我认为所有语言都会遭受这种命运吧?如果你仔细想一下,其实 Python 已经存在很长时间了。我想差不多 20 年了,甚至更久。因此,我认为会 …… Python 重新流行起来了,它现在是机器学习的基础语言。

00:21:53 - Saron Yitbarek

是的。

00:21:54 - Kelsey Hightower

对于 Tensorflow 之类的库,如果我们仅用时间来衡量,我认为这可能不是看待它的正确方式。还应该有社区是否活跃?语言的适配意愿是否活跃?我认为 Python 做得确实非常出色……社区看到了使其他语言更易于使用的能力。例如,Tensorflow 底层有很多 C++ ,使用这种语言编程可能没有 Python 这样的用户友好性。你可以用 Python,并用它来生成人们正在使用的一些东西,例如 Tensorflow 。现在机器学习非常热门,人们将 Python 引入了这个新领域,那么你猜怎么着? Python 仍然是活跃的,并且在未来的一段时间内都是活跃的。对于 Go 来说,这同样适用。如果 Go 能够继续保持活跃度,那么,它就像许多基础设施工具和许多云库的基层一样,它也将保持活跃。因此,我认为都是这些社区确保了它们将来占有一席之地,并且当未来出现时,确保那里仍有它们的位置。

00:22:58 - Saron Yitbarek

是的。那么,我们如何让我们的语言面向未来呢?就是说,我们如何有意地设计一种语言,使其能持续存在,并在 20、30 年内都保持活跃呢?

00:23:10 - Kelsey Hightower

使用语言的人,我认为这在开源世界中确实是独一无二的。现在,我们已经不再使用商业语言了,对吧,过去曾经来自微软的语言或太阳微系统的如 Java™ ,那时侯,每个人都依赖于供应商来尽心尽力来对语言能干什么以及对运行时环境进行新的改进。现在,我们看到的诸如 Go、Node.js、Ruby 之类的东西,所有这些都是社区支持的,并且社区专注于运行时环境和语言。这样任何人都可以添加新库,对吧?有一个新的 HTTP 规范,对,HTTP/2 几年前问世了,每个社区都有贡献者添加了那些特定的库,猜猜现在怎么样?所有现在这些语言,都兼容于大部分的未来网站。

00:24:01

我认为现在是个人真正地拥有了更多的控制权,如果他们想让语言适用于新的用例,只需要自己贡献即可。因此,我们不再受限于一两家公司。如果公司倒闭,那么运行时环境可能会因此而消亡。我们不再有这个问题了。

00:24:23 - Saron Yitbarek

我们之前在这个播客上已经说过了。未来是开放的。但是,令人着迷的是考虑怎样能做到再过几十年,过去也将是开放的。它们将继承能够变形和演进的基础设施和语言。

00:24:39 - Kelsey Hightower

太棒了,感谢你的加入,我期待人们的工作,而且大型机仍然有意义。它们是经典技术,因此我们不称其为遗产。

00:24:47 - Saron Yitbarek

哦,我喜欢,经典,非常好。

00:24:51

Kelsey Hightower 是 Google 的开发者推广大使。

00:24:57

我正在想象一个充满经典编程语言以及尚未诞生的新语言的未来。那是我为之兴奋的未来。

00:25:07 - 演讲者

请离关着的门远一点。

00:25:12 - Saron Yitbarek

要知道,2017 年 Andrew Cuomo 州长宣布纽约市地铁进入紧急状态。他的政府拨出 90 亿美元投资于老化的基础设施。这应该提醒我们,迟早我们得注意遗留的系统。你不仅需要继续前进,面向未来。你还背着历史包袱。

00:25:37

在开发的世界中,我们倾向于偏向未来。我们认为我们的语言仅在它们流行时才有用。但是,随着信息基础架构的不断老化,开发的历史变得越来越真实。事实证明,过去根本没有过去。记住这一点是我们的工作。

00:26:05

你可以前往 redhat.com/commandlineheroes ,以了解有关 COBOL 或 Go 或本季我们要介绍的其他语言的更多信息。那里有很多很棒的材料在等你。

00:26:19 - Saron Yitbarek

下一集是关于 Bash 的。我们将探索 shell 脚本的起源以及自动化的关键。

00:26:30 - Saron Yitbarek

《命令行英雄》是红帽的原创播客。我是 Saron Yitbarek 。下期之前,编码不止。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-3/the-infrastructure-effect

作者:Red Hat 选题:bestony 译者:messon007 校对:wxy

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

Zotero 是一款令人印象深刻的自由开源的应用,它让你可以收集、组织、引用和共享研究成果。你还可以使用 Zotero 为你的文档即时创建参考文献和书目。

通常,你可以使用 Linux 上任何一款笔记应用来收集和分享你的想法。但是,在这里,我想分享一些专门为你量身定做的东西,来帮助你收集、整理和分享你的研究成果,即 Zotero

Zotero:收集、整理和分享研究成果

Zotero 是一个完全开源的项目,你可以在 GitHub 上找到它。它的目的是帮助你轻松地收集、整理、添加笔记和分享你的研究成果。

而且,这一切都不需要基于云端的服务,它是完全离线的。所以,你的研究成果是属于你的。当然,除非你出于协作目的想将其同步,为此你可能需要参考该文档

作为一个好的起点,你可以选择 WebDAV 存储,或者直接创建一个 Zotero 帐户来轻松同步和分享你的研究成果。

例如,我创建了一个名为 ankush9 的 Zotero 账户,你可以在 https://www.zotero.org/ankush9 找到我的研究合集(我添加到我的出版物中)。

这使得它很容易分享你组织的研究成果,你可以选择将哪些部分共享到出版物中。

让我着重介绍一下 Zotero 的主要功能,来帮助你决定是否需要尝试一下。

Zotero 的功能

  • 能够使用浏览器插件从网页直接添加信息
  • 为每份资料添加说明
  • 支持添加标签
  • 支持添加语音记录
  • 添加视频作为附件
  • 添加软件作为附件
  • 将电子邮件作为附件
  • 将播客作为附件
  • 添加博客文章
  • 添加一个文件链接
  • 根据项目建立书目
  • 离线快照存储(无需连接互联网即可访问保存的网页)
  • 可以复制项目
  • 整理库中的项目
  • 提供了一个垃圾箱,可以删除你的项目,并在需要时轻松恢复。
  • 支持同步
  • 支持数据导出
  • 可整合 LibreOffice 插件
  • 使用你的 Zotero 个人资料链接轻松分享你的研究笔记。
  • 跨平台支持

如果你只是想快速创建书目,你可以尝试他们的另一个工具,ZoteroBib

在 Linux 上安装 Zotero

它适用于 Windows、macOS 和 Linux。对于 Linux,如果你使用的是基于 Ubuntu 的发行版(或 Ubuntu 本身),你可以下载一个 deb 文件(由第三方维护)并安装它。

安装 deb 文件很简单,它在 Pop OS 20.04 上工作得很好。如果你使用的是其他 Linux 发行版,你可以解压 tar 包并进行安装。

你可以按照官方安装说明来找到合适的方法。

总结

它有大量的功能,你可以组织、分享、引用和收集资源,以供你进行搜索。由于支持音频、视频、文本和链接,它应该适合几乎所有的东西。

当然,我会将它推荐给有经验的用户,让它发挥最大的作用。而且,如果你之前使用过树状图(思维导图)笔记工具的人,你就知道要做什么了。

你觉得 Zotero 怎么样?如果它不适合你,你有更好的替代品建议么?请在下面的评论中告诉我你的想法。


via: https://itsfoss.com/zotero/

作者:Ankush Das 选题:lujun9972 译者:geekpi 校对:wxy

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