2021年3月

Google API 可以凸显出有关 Google 如何对网站进行分类的线索,以及如何调整内容以改进搜索结果的方法。

 title=

作为一名技术性的搜索引擎优化人员,我一直在寻找以新颖的方式使用数据的方法,以更好地了解 Google 如何对网站进行排名。我最近研究了 Google 的 自然语言 API 能否更好地揭示 Google 是如何分类网站内容的。

尽管有 开源 NLP 工具,但我想探索谷歌的工具,前提是它可能在其他产品中使用同样的技术,比如搜索。本文介绍了 Google 的自然语言 API,并探究了常见的自然语言处理(NLP)任务,以及如何使用它们来为网站内容创建提供信息。

了解数据类型

首先,了解 Google 自然语言 API 返回的数据类型非常重要。

实体

实体 Entities 是可以与物理世界中的某些事物联系在一起的文本短语。 命名实体识别 Named Entity Recognition (NER)是 NLP 的难点,因为工具通常需要查看关键字的完整上下文才能理解其用法。例如, 同形异义字 homographs 拼写相同,但是具有多种含义。句子中的 “lead” 是指一种金属:“铅”(名词),使某人移动:“牵领”(动词),还可能是剧本中的主要角色(也是名词)?Google 有 12 种不同类型的实体,还有第 13 个名为 “UNKNOWN”(未知)的统称类别。一些实体与维基百科的文章相关,这表明 知识图谱 对数据的影响。每个实体都会返回一个显著性分数,即其与所提供文本的整体相关性。

 title=

情感

情感 Sentiment ,即对某事的看法或态度,是在文件和句子层面以及文件中发现的单个实体上进行衡量。情感的 得分 score 范围从 -1.0(消极)到 1.0(积极)。 幅度 magnitude 代表情感的 非归一化 non-normalized 强度;它的范围是 0.0 到无穷大。

 title=

语法

语法 Syntax 解析包含了大多数在较好的库中常见的 NLP 活动,例如 词形演变 lemmatization 词性标记 part-of-speech tagging 依赖树解析 dependency-tree parsing 。NLP 主要处理帮助机器理解文本和关键字之间的关系。语法解析是大多数语言处理或理解任务的基础部分。

 title=

分类

分类 Categories 是将整个给定内容分配给特定行业或主题类别,其 置信度 confidence 得分从 0.0 到 1.0。这些分类似乎与其他 Google 工具使用的受众群体和网站类别相同,如 AdWords。

 title=

提取数据

现在,我将提取一些示例数据进行处理。我使用 Google 的 搜索控制台 API 收集了一些搜索查询及其相应的网址。Google 搜索控制台是一个报告人们使用 Google Search 查找网站页面的术语的工具。这个 开源的 Jupyter 笔记本 可以让你提取有关网站的类似数据。在此示例中,我在 2019 年 1 月 1 日至 6 月 1 日期间生成的一个网站(我没有提及名字)上提取了 Google 搜索控制台数据,并将其限制为至少获得一次点击(而不只是 曝光 impressions )的查询。

该数据集包含 2969 个页面和在 Google Search 的结果中显示了该网站网页的 7144 条查询的信息。下表显示,绝大多数页面获得的点击很少,因为该网站侧重于所谓的长尾(越特殊通常就更长尾)而不是短尾(非常笼统,搜索量更大)搜索查询。

 title=

为了减少数据集的大小并仅获得效果最好的页面,我将数据集限制为在此期间至少获得 20 次曝光的页面。这是精炼数据集的按页点击的柱状图,其中包括 723 个页面:

 title=

在 Python 中使用 Google 自然语言 API 库

要测试 API,在 Python 中创建一个利用 google-cloud-language 库的小脚本。以下代码基于 Python 3.5+。

首先,激活一个新的虚拟环境并安装库。用环境的唯一名称替换 <your-env>

virtualenv <your-env>
source <your-env>/bin/activate
pip install --upgrade google-cloud-language
pip install --upgrade requests

该脚本从 URL 提取 HTML,并将 HTML 提供给自然语言 API。返回一个包含 sentimententitiescategories 的字典,其中这些键的值都是列表。我使用 Jupyter 笔记本运行此代码,因为使用同一内核注释和重试代码更加容易。

# Import needed libraries
import requests
import json

from google.cloud import language
from google.oauth2 import service_account
from google.cloud.language import enums
from google.cloud.language import types

# Build language API client (requires service account key)
client = language.LanguageServiceClient.from_service_account_json('services.json')

# Define functions
def pull_googlenlp(client, url, invalid_types = ['OTHER'], **data):
   
        html = load_text_from_url(url, **data)
   
        if not html:
        return None
   
        document = types.Document(
        content=html,
        type=language.enums.Document.Type.HTML )

        features = {'extract_syntax': True,
                'extract_entities': True,
                'extract_document_sentiment': True,
                'extract_entity_sentiment': True,
                'classify_text': False
                }
   
        response = client.annotate_text(document=document, features=features)
        sentiment = response.document_sentiment
        entities = response.entities
   
        response = client.classify_text(document)
        categories = response.categories
         
        def get_type(type):
        return client.enums.Entity.Type(entity.type).name
   
        result = {}
   
        result['sentiment'] = []    
        result['entities'] = []
        result['categories'] = []

        if sentiment:
        result['sentiment'] = [{ 'magnitude': sentiment.magnitude, 'score':sentiment.score }]
         
        for entity in entities:
        if get_type(entity.type) not in invalid_types:
                result['entities'].append({'name': entity.name, 'type': get_type(entity.type), 'salience': entity.salience, 'wikipedia_url': entity.metadata.get('wikipedia_url', '-')  })
         
        for category in categories:
        result['categories'].append({'name':category.name, 'confidence': category.confidence})
         
         
        return result


def load_text_from_url(url, **data):

        timeout = data.get('timeout', 20)
   
        results = []
   
        try:
         
        print("Extracting text from: {}".format(url))
        response = requests.get(url, timeout=timeout)

        text = response.text
        status = response.status_code

        if status == 200 and len(text) > 0:
                return text
         
        return None
         

        except Exception as e:
        print('Problem with url: {0}.'.format(url))
        return None

要访问该 API,请按照 Google 的 快速入门说明 在 Google 云主控台中创建一个项目,启用该 API 并下载服务帐户密钥。之后,你应该拥有一个类似于以下内容的 JSON 文件:

 title=

命名为 services.json,并上传到项目文件夹。

然后,你可以通过运行以下程序来提取任何 URL(例如 Opensource.com)的 API 数据:

url = "https://opensource.com/article/19/6/how-ssh-running-container"
pull_googlenlp(client,url)

如果设置正确,你将看到以下输出:

 title=

为了使入门更加容易,我创建了一个 Jupyter 笔记本,你可以下载并使用它来测试提取网页的实体、类别和情感。我更喜欢使用 JupyterLab,它是 Jupyter 笔记本的扩展,其中包括文件查看器和其他增强的用户体验功能。如果你不熟悉这些工具,我认为利用 Anaconda 是开始使用 Python 和 Jupyter 的最简单途径。它使安装和设置 Python 以及常用库变得非常容易,尤其是在 Windows 上。

处理数据

使用这些函数,可抓取给定页面的 HTML 并将其传递给自然语言 API,我可以对 723 个 URL 进行一些分析。首先,我将通过查看所有页面中返回的顶级分类的数量来查看与网站相关的分类。

分类

 title=

这似乎是该特定站点的关键主题的相当准确的代表。通过查看一个效果最好的页面进行排名的单个查询,我可以比较同一查询在 Google 搜索结果中的其他排名页面。

  • URL 1 |顶级类别:/法律和政府/与法律相关的(0.5099999904632568)共 1 个类别。
  • 未返回任何类别。
  • URL 3 |顶级类别:/互联网与电信/移动与无线(0.6100000143051147)共 1 个类别。
  • URL 4 |顶级类别:/计算机与电子产品/软件(0.5799999833106995)共有 2 个类别。
  • URL 5 |顶级类别:/互联网与电信/移动与无线/移动应用程序和附件(0.75)共有 1 个类别。
  • 未返回任何类别。
  • URL 7 |顶级类别:/计算机与电子/软件/商业与生产力软件(0.7099999785423279)共 2 个类别。
  • URL 8 |顶级类别:/法律和政府/与法律相关的(0.8999999761581421)共 3 个类别。
  • URL 9 |顶级类别:/参考/一般参考/类型指南和模板(0.6399999856948853)共有 1 个类别。
  • 未返回任何类别。

上方括号中的数字表示 Google 对页面内容与该分类相关的置信度。对于相同分类,第八个结果比第一个结果具有更高的置信度,因此,这似乎不是定义排名相关性的灵丹妙药。此外,分类太宽泛导致无法满足特定搜索主题的需要。

通过排名查看平均置信度,这两个指标之间似乎没有相关性,至少对于此数据集而言如此:

 title=

这两种方法对网站进行规模审查是有意义的,以确保内容类别易于理解,并且样板或销售内容不会使你的页面与你的主要专业知识领域无关。想一想,如果你出售工业用品,但是你的页面返回 “Marketing(销售)” 作为主要分类。似乎没有一个强烈的迹象表明,分类相关性与你的排名有什么关系,至少在页面级别如此。

情感

我不会在情感上花很多时间。在所有从 API 返回情感的页面中,它们分为两个区间:0.1 和 0.2,这几乎是中立的情感。根据直方图,很容易看出情感没有太大价值。对于新闻或舆论网站而言,测量特定页面的情感到中位数排名之间的相关性将是一个更加有趣的指标。

 title=

实体

在我看来,实体是 API 中最有趣的部分。这是在所有页面中按 显著性 salience (或与页面的相关性)选择的顶级实体。请注意,对于相同的术语(销售清单),Google 会推断出不同的类型,可能是错误的。这是由于这些术语出现在内容中的不同上下文中引起的。

 title=

然后,我分别查看了每个实体类型,并一起查看了该实体的显著性与页面的最佳排名位置之间是否存在任何关联。对于每种类型,我匹配了与该类型匹配的顶级实体的显著性(与页面的整体相关性),按显著性排序(降序)。

有些实体类型在所有示例中返回的显著性为零,因此我从下面的图表中省略了这些结果。

 title=

“Consumer Good(消费性商品)” 实体类型具有最高的正相关性, 皮尔森相关度 Pearson correlation 为 0.15854,尽管由于较低编号的排名更好,所以 “Person” 实体的结果最好,相关度为 -0.15483。这是一个非常小的样本集,尤其是对于单个实体类型,我不能对数据做太多的判断。我没有发现任何具有强相关性的值,但是 “Person” 实体最有意义。网站通常都有关于其首席执行官和其他主要雇员的页面,这些页面很可能在这些查询的搜索结果方面做得好。

继续,当从整体上看站点,根据实体名称和实体类型,出现了以下主题。

 title=

我模糊了几个看起来过于具体的结果,以掩盖网站的身份。从主题上讲,名称信息是在你(或竞争对手)的网站上局部查看其核心主题的一种好方法。这样做仅基于示例网站的排名网址,而不是基于所有网站的可能网址(因为 Search Console 数据仅记录 Google 中展示的页面),但是结果会很有趣,尤其是当你使用像 Ahrefs 之类的工具提取一个网站的主要排名 URL,该工具会跟踪许多查询以及这些查询的 Google 搜索结果。

实体数据中另一个有趣的部分是标记为 “CONSUMER\_GOOD” 的实体倾向于 “看起来” 像我在看到 “ 知识结果 Knowledge Results ”的结果,即页面右侧的 Google 搜索结果。

 title=

在我们的数据集中具有三个或三个以上关键字的 “Consumer Good(消费性商品)” 实体名称中,有 5.8% 的知识结果与 Google 对该实体命名的结果相同。这意味着,如果你在 Google 中搜索术语或短语,则右侧的框(例如,上面显示 Linux 的知识结果)将显示在搜索结果页面中。由于 Google 会 “挑选” 代表实体的示例网页,因此这是一个很好的机会,可以在搜索结果中识别出具有唯一特征的机会。同样有趣的是,5.8% 的在 Google 中显示这些知识结果名称中,没有一个实体的维基百科 URL 从自然语言 API 中返回。这很有趣,值得进行额外的分析。这将是非常有用的,特别是对于传统的全球排名跟踪工具(如 Ahrefs)数据库中没有的更深奥的主题。

如前所述,知识结果对于那些希望自己的内容在 Google 中被收录的网站所有者来说是非常重要的,因为它们在桌面搜索中加强高亮显示。假设,它们也很可能与 Google Discover 的知识库主题保持一致,这是一款适用于 Android 和 iOS 的产品,它试图根据用户感兴趣但没有明确搜索的主题为用户浮现内容。

总结

本文介绍了 Google 的自然语言 API,分享了一些代码,并研究了此 API 对网站所有者可能有用的方式。关键要点是:

  • 学习使用 Python 和 Jupyter 笔记本可以为你的数据收集任务打开到一个由令人难以置信的聪明和有才华的人建立的不可思议的 API 和开源项目(如 Pandas 和 NumPy)的世界。
  • Python 允许我为了一个特定目的快速提取和测试有关 API 值的假设。
  • 通过 Google 的分类 API 传递网站页面可能是一项很好的检查,以确保其内容分解成正确的主题分类。对于竞争对手的网站执行此操作还可以提供有关在何处进行调整或创建内容的指导。
  • 对于示例网站,Google 的情感评分似乎并不是一个有趣的指标,但是对于新闻或基于意见的网站,它可能是一个有趣的指标。
  • Google 发现的实体从整体上提供了更细化的网站的主题级别视图,并且像分类一样,在竞争性内容分析中使用将非常有趣。
  • 实体可以帮助定义机会,使你的内容可以与搜索结果或 Google Discover 结果中的 Google 知识块保持一致。我们将 5.8% 的结果设置为更长的(字计数)“Consumer Goods(消费商品)” 实体,显示这些结果,对于某些网站来说,可能有机会更好地优化这些实体的页面显著性分数,从而有更好的机会在 Google 搜索结果或 Google Discovers 建议中抓住这个重要作用的位置。

via: https://opensource.com/article/19/7/python-google-natural-language-api

作者:JR Oakes 选题:lujun9972 译者:stevenzdg988 校对:wxy

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

Equinix 推出“时间即服务”

许多行业和云服务都依赖于精确、可靠和安全的时间同步。传统的、基于天线的 GPS 授时基础设施解决方案可能难以安装,并会带来安全漏洞。同时,从互联网上利用公开 NTP 服务器授时也有网络安全风险。

数字基础设施公司 Equinix 正在推出的 Precision Time 服务旨在解决这个挑战。Equinix 管理和维护一个由 GPS 天线、带有原子钟保持器的时间服务器及主时钟组成的冗余堆栈。新服务支持 NTP 和 PTP 等网络授时协议。该服务提供 50 微秒的 SLA,要比大多数时间同步精度要求高得多。

连时间都能成为服务,听起来有趣,但是其实有一定的必要性。

2020 年三分之二的 Google 搜索没有带来进一步点击

2019 年的一项研究发现,50.33% 的 Google 搜索没有导致外链点击。2020 年这一比例进一步提高到三分之二左右。这一数据来自 SimilarWeb 对 2020 年 51 万亿次 Google 搜索的分析。在这些搜索中,33.59% 点击了搜索结果,1.59% 点击了付费搜索结果,其余 64.82% 则是零点击。

看来通用搜索引擎的有效性越来越差了,难怪现在有很多垂直搜索引擎出现。

Canonical 将谷歌的 Flutter 视为未来桌面和移动应用的默认选择

Flutter 是一个使用 Dart 语言的框架,可以开发跨 Android、iOS、Windows、Linux、macOS 和 Web 的应用,不过 macOS 和 Linux 版本尚处于测试阶段。尽管如此,为了扩大 Linux 应用生态系统,Ubuntu 的开发商 Canonical 上个月还是宣布将用 Flutter 构建新的桌面安装程序,并向开发者表示“Flutter 是 Canonical 未来创建的桌面和移动应用的默认选择”。

Flutter 的性能比 Electron 等替代品更好,虽然它的性能不如原生开发平台,但它跨操作系统开发的能力超过了这种差异。跨平台开发不仅仅意味着 Linux 开发者可以为其他平台编写应用,还意味着任何其他平台的 Flutter 开发者都可以将他们的应用贡献给 Linux,从而扩大 Linux 应用生态系统。

这是一个看起来不错的选择,但是 Flutter 并不是第一个以跨平台为主要卖点的框架,而之前的类似框架并未真正给 Linux 带来多少重要应用,所以将来的发展需要拭目以待。

了解在 Firefox 上运行 WebAssembly 的机会和局限性。

 title=

WebAssembly 是一种可移植的执行格式,由于它能够以近乎原生的速度在浏览器中执行应用而引起了人们的极大兴趣。WebAssembly 本质上有一些特殊的属性和局限性。但是,通过将其与其他技术结合,将出现全新的可能性,尤其是与浏览器中的游戏有关的可能性。

本文介绍了在 Firefox 上运行 WebAssembly 的概念、可能性和局限性。

沙盒

WebAssembly 有 严格的安全策略。 WebAssembly 中的程序或功能单元称为模块。每个模块实例都运行在自己的隔离内存空间中。因此,即使同一个网页加载了多个模块,它们也无法访问另一个模块的虚拟地址空间。设计上,WebAssembly 还考虑了内存安全性和控制流完整性,这使得(几乎)确定性的执行成为可能。

Web API

通过 JavaScript Web API 可以访问多种输入和输出设备。根据这个 提案,将来可以不用绕道到 JavaScript 来访问 Web API。C++ 程序员可以在 Emscripten.org 上找到有关访问 Web API 的信息。Rust 程序员可以使用 rustwasm.github.io 中写的 wasm-bindgen 库。

文件输入/输出

因为 WebAssembly 是在沙盒环境中执行的,所以当它在浏览器中执行时,它无法访问主机的文件系统。但是,Emscripten 提供了虚拟文件系统形式的解决方案。

Emscripten 使在编译时将文件预加载到内存文件系统成为可能。然后可以像在普通文件系统上一样从 WebAssembly 应用中读取这些文件。这个 教程 提供了更多信息。

持久化数据

如果你需要在客户端存储持久化数据,那么必须通过 JavaScript Web API 来完成。请参考 Mozilla 开发者网络(MDN)关于 浏览器存储限制和过期标准 的文档,了解不同方法的详细信息。

内存管理

WebAssembly 模块作为 堆栈机 在线性内存上运行。这意味着堆内存分配等概念是没有的。然而,如果你在 C++ 中使用 new 或者在 Rust 中使用 Box::new,你会期望它会进行堆内存分配。将堆内存分配请求转换成 WebAssembly 的方式在很大程度上依赖于工具链。你可以在 Frank Rehberger 关于 WebAssembly 和动态内存 的文章中找到关于不同工具链如何处理堆内存分配的详细分析。

游戏!

WebGL 结合使用时,WebAssembly 的执行速度很高,因此可以在浏览器中运行原生游戏。大型专有游戏引擎 Unity虚幻 4 展示了 WebGL 可以实现的功能。也有使用 WebAssembly 和 WebGL 接口的开源游戏引擎。这里有些例子:

有关 WebAssembly 的更多信息

WebAssembly 是一项很有前途的技术,我相信我们将来会越来越多地看到它。除了在浏览器中执行之外,WebAssembly 还可以用作可移植的执行格式。Wasmer 容器主机使你可以在各种平台上执行 WebAssembly 代码。

如果你需要更多的演示、示例和教程,请看一下这个 WebAssembly 主题集合。Mozilla 的 游戏和示例合集 并非全是 WebAssembly,但仍然值得一看。


via: https://opensource.com/article/21/3/webassembly-firefox

作者:Stephan Avenwedde 选题:lujun9972 译者:geekpi 校对:wxy

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

Grafana Tempo 是一个新的开源、大容量分布式跟踪后端。

 title=

Grafana 的 Tempo 是出自 Grafana 实验室的一个简单易用、大规模的、分布式的跟踪后端。Tempo 集成了 GrafanaPrometheus 以及 Loki,并且它只需要对象存储进行操作,因此成本低廉,操作简单。

我从一开始就参与了这个开源项目,所以我将介绍一些关于 Tempo 的基础知识,并说明为什么云原生社区会注意到它。

分布式跟踪

想要收集对应用程序请求的遥测数据是很常见的。但是在现在的服务器中,单个应用通常被分割为多个微服务,可能运行在几个不同的节点上。

分布式跟踪是一种获得关于应用的性能细粒度信息的方式,该应用程序可能由离散的服务组成。当请求到达一个应用时,它提供了该请求的生命周期的统一视图。Tempo 的分布式跟踪可以用于单体应用或微服务应用,它提供 请求范围的信息,使其成为可观察性的第三个支柱(另外两个是度量和日志)。

接下来是一个分布式跟踪系统生成应用程序甘特图的示例。它使用 Jaeger HotROD 的演示应用生成跟踪,并把它们存到 Grafana 云托管的 Tempo 上。这个图展示了按照服务和功能划分的请求处理时间。

 title=

减少索引的大小

在丰富且定义良好的数据模型中,跟踪包含大量信息。通常,跟踪后端有两种交互:使用元数据选择器(如服务名或者持续时间)筛选跟踪,以及筛选后的可视化跟踪。

为了加强搜索,大多数的开源分布式跟踪框架会对跟踪中的许多字段进行索引,包括服务名称、操作名称、标记和持续时间。这会导致索引很大,并迫使你使用 Elasticsearch 或者 Cassandra 这样的数据库。但是,这些很难管理,而且大规模运营成本很高,所以我在 Grafana 实验室的团队开始提出一个更好的解决方案。

在 Grafana 中,我们的待命调试工作流从使用指标报表开始(我们使用 Cortex 来存储我们应用中的指标,它是一个云原生基金会孵化的项目,用于扩展 Prometheus),深入研究这个问题,筛选有问题服务的日志(我们将日志存储在 Loki 中,它就像 Prometheus 一样,只不过 Loki 是存日志的),然后查看跟踪给定的请求。我们意识到,我们过滤时所需的所有索引信息都可以在 Cortex 和 Loki 中找到。但是,我们需要一个强大的集成,以通过这些工具实现跟踪的可发现性,并需要一个很赞的存储,以根据跟踪 ID 进行键值查找。

这就是 Grafana Tempo 项目的开始。通过专注于给定检索跟踪 ID 的跟踪,我们将 Tempo 设计为最小依赖性、大容量、低成本的分布式跟踪后端。

操作简单,性价比高

Tempo 使用对象存储后端,这是它唯一的依赖。它既可以被用于单一的二进制下,也可以用于微服务模式(请参考仓库中的 例子,了解如何轻松上手)。使用对象存储还意味着你可以存储大量的应用程序的痕迹,而无需任何采样。这可以确保你永远不会丢弃那百万分之一的出错或具有较高延迟的请求的跟踪。

与开源工具的强大集成

Grafana 7.3 包括了 Tempo 数据源,这意味着你可以在 Grafana UI 中可视化来自Tempo 的跟踪。而且,Loki 2.0 的新查询特性 使得 Tempo 中的跟踪更简单。为了与 Prometheus 集成,该团队正在添加对 范例 exemplar 的支持,范例是可以添加到时间序列数据中的高基数元数据信息。度量存储后端不会对它们建立索引,但是你可以在 Grafana UI 中检索和显示度量值。尽管范例可以存储各种元数据,但是在这个用例中,存储跟踪 ID 是为了与 Tempo 紧密集成。

这个例子展示了使用带有请求延迟直方图的范例,其中每个范例数据点都链接到 Tempo 中的一个跟踪。

 title=

元数据一致性

作为容器化应用程序运行的应用发出的遥测数据通常具有一些相关的元数据。这可以包括集群 ID、命名空间、吊舱 IP 等。这对于提供基于需求的信息是好的,但如果你能将元数据中包含的信息用于生产性的东西,那就更好了。 例如,你可以使用 Grafana 云代理将跟踪信息导入 Tempo 中,代理利用 Prometheus 服务发现机制轮询 Kubernetes API 以获取元数据信息,并且将这些标记添加到应用程序发出的跨域数据中。由于这些元数据也在 Loki 中也建立了索引,所以通过元数据转换为 Loki 标签选择器,可以很容易地从跟踪跳转到查看给定服务的日志。

下面是一个一致元数据的示例,它可用于Tempo跟踪中查看给定范围的日志。

云原生

Grafana Tempo 可以作为容器化应用,你可以在如 Kubernetes、Mesos 等编排引擎上运行它。根据获取/查询路径上的工作负载,各种服务可以水平伸缩。你还可以使用云原生的对象存储,如谷歌云存储、Amazon S3 或者 Tempo Azure 博客存储。更多的信息,请阅读 Tempo 文档中的 架构部分

试一试 Tempo

如果这对你和我们一样有用,可以 克隆 Tempo 仓库试一试。


via: https://opensource.com/article/21/2/tempo-distributed-tracing

作者:Annanay Agarwal 选题:lujun9972 译者:RiaXu 校对:wxy

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

Linux 中没有一个 像样的支持 Wayland 显示服务器的屏幕录制软件

如果你使用 Wayland 的话,GNOME 内置的屏幕录像机 可能是少有的(也是唯一的)支持的软件。但是那个屏幕录像机没有可视界面和你所期望的标准屏幕录像软件的功能。

值得庆幸的是,有一个新的应用正在开发中,它提供了比 GNOME 屏幕录像机更多一点的功能,并且在 Wayland 上也能正常工作。

遇见 Kooha:一个新的 GNOME 桌面屏幕录像机

Kooha 是一个处于开发初期阶段的应用,它可以在 GNOME 中使用,是用 GTK 和 PyGObject 构建的。事实上,它利用了与 GNOME 内置屏幕录像机相同的后端。

以下是 Kooha 的功能:

  • 录制整个屏幕或选定区域
  • 在 Wayland 和 Xorg 显示服务器上均可使用
  • 在视频里用麦克风记录音频
  • 包含或忽略鼠标指针的选项
  • 可以在开始录制前增加 5 秒或 10 秒的延迟
  • 支持 WebM 和 MKV 格式的录制
  • 允许更改默认保存位置
  • 支持一些键盘快捷键

我的 Kooha 体验

它的开发者 Dave Patrick 联系了我,由于我急需一款好用的屏幕录像机,所以我马上就去试用了。

目前,Kooha 只能通过 Flatpak 安装。我安装了 Flatpak,当我试着使用时,它什么都没有记录。我和 Dave 进行了快速的邮件讨论,他告诉我这是由于 Ubuntu 20.10 中 GNOME 屏幕录像机的 bug

你可以想象我对支持 Wayland 的屏幕录像机的绝望,我 将我的 Ubuntu 升级到 21.04 测试版

在 21.04 中,可以屏幕录像,但仍然无法录制麦克风的音频。

我注意到了另外几件无法按照我的喜好顺利进行的事情。

例如,在录制时,计时器在屏幕上仍然可见,并且包含在录像中。我不会希望在视频教程中出现这种情况。我想你也不会喜欢看到这些吧。

另外就是关于多显示器的支持。没有专门选择某一个屏幕的选项。我连接了两个外部显示器,默认情况下,它录制所有三个显示器。可以使用设置捕捉区域,但精确拖动屏幕区域是一项耗时的任务。

它也没有 Kazam 或其他传统屏幕录像机中有的设置帧率或者编码的选项。

在 Linux 上安装 Kooha(如果你使用 GNOME)

请确保在你的 Linux 发行版上启用 Flatpak 支持。目前它只适用于 GNOME,所以请检查你使用的桌面环境。

使用此命令将 Flathub 添加到你的 Flatpak 仓库列表中:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

然后用这个命令来安装:

flatpak install flathub io.github.seadve.Kooha

你可以通过菜单或使用这个命令来运行它:

flatpak run io.github.seadve.Kooha

总结

Kooha 并不完美,但考虑到 Wayland 领域的巨大空白,我希望开发者努力修复这些问题并增加更多的功能。考虑到 Ubuntu 21.04 将默认切换到 Wayland,以及其他一些流行的发行版如 Fedora 和 openSUSE 已经默认使用 Wayland,这一点很重要。


via: https://itsfoss.com/kooha-screen-recorder/

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

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

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

什么是《代码英雄》

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

本文是《代码英雄》系列播客《代码英雄》第四季(1):小型机 —— 旧机器的灵魂音频脚本。

导语:它们不适合放在你的口袋里。但在当时, 小型机 minicomputer 比之前的房间大小的 大型机 mainframe 的尺寸小了一个数量级。它们为可以装进包里的 个人电脑 Personal Computer (PC),以及最终你口袋里的手机铺平了道路。

16 位小型机改变了 20 世纪 70 年代的 IT 世界。他们让公司的每个工程师都有机会拥有自己的计算机。但这还不够,直到 32 位版本的到来。

Carl Alsing 和 Jim Guyer 讲述了他们在 数据通用 Data General 公司创造革命性的新 32 位计算机的工作。但他们如今被视作传奇的工作是在秘密中完成的。他们的机器代号为 “Eagle”,其设计目的是为了与自己公司的另一个团队正在制造的机器竞争。这些工程师们回忆了为使项目继续进行而做的公司政治和阴谋,以及他们如何将限制转化为优势。Neal Firth 则讨论了如何在一个令人兴奋但要求很高的项目中的生活。在这个项目中,代码英雄们一起工作,只是因为他们想这样做,而不是期望获奖或成名。这三个人都讨论了这个故事如何在 Tracy Kidder 的非虚构工程经典《 新机器的灵魂 The Soul of a New Machine 》中所成就的不朽。

00:00:03 - Saron Yitbarek

那是 1978 年,小型机业界激战正酣。就在一年前, 数字设备公司 Digital Equipment Corporation (DEC)发布了其 32 位的 VAX 11 780 计算机。它比市面上的 16 位机器要强大得多。 VAX 的销售迅速地超越了那些步履缓慢的竞争对手。其主要竞争对手 数据通用 Data General 公司迫切需要一台新机器来和 VAX 竞争。他们需要一台属于自己的 32 位计算机,而且要够快才行,但数据通用公司和 DEC 之间的竞争并不是唯一的战斗。数据通用公司内部还正酝酿一场地盘争夺战,而这两场战斗的战利品都是在令人难以置信的环境下创造令人难以置信的机器。一台 13 英寸的笔记本电脑大概有 3 磅重。如今,我们认为计算机的便携性及方便的尺寸是理所应当的,但是在 20 世纪 70 年代,大多数计算机仍然有着整个机房大小的大型机、重达数吨,而且价值数百万美金。而当硬件成本急剧下降后,开发更小、更快、更便宜的机器的竞争就开始了。小型机为工程师和科学家打开了拥有自己的终端机的大门。正是小型机引领我们到了今天的样子。

00:01:37

在上一季的《代码英雄》中,我们深入探究了对软件开发至关重要的领域 —— 编程语言的世界。诸如 JavaScript、Python 和 C、Perl、COBOL 以及 Go 之类的语言,我们审视了它们的历史、它们所解决的问题,以及它们是怎样随着时间推移而演变的。在这一季中,也就是第四季,我们将再一次深入探索,这一次是我们软件运行于其上的硬件。我们将为大家讲述七个特别的故事,讲述那些敢于改变硬件规则的人和团队。你桌上的笔记本电脑、口袋里的手机,如今你所拥有的每一件硬件设备,以及它们的前代产品,都是代码英雄们全身心投入的结果。他们的激情打造、他们的大胆举动,让我们的硬件成为现实,彻底改变了我们现如今的编程方式。

00:02:36

我是 Saron Yitbarek。这里是代码英雄,一档来自 红帽 Red Hat 的原创播客节目。

00:02:45

在我们本季的首播中,将讲述一个工程团队竞相设计、调试和交付下一代计算机的故事。他们工作的故事变成了 1981 年 Tracy Kidder 获得了普利策奖的畅销书《 新机器的灵魂 The Soul of a New Machine 》的主题。在这本书中讲述了这一集中你将听到的众多嘉宾的故事。

00:03:07

让我们说回到数据通用公司。该公司主席 Ed de Castro 制定了与 DEC 竞争的计划。他拆分了工程部门,将一支团队从其位于 马萨诸塞州 Massachusetts 韦斯特伯勒 Westborough 的总部迁移到了 北卡罗来那州 North Carolina 的新办公室。他们的任务是开发一款领先的 32 位的机器设计,以粉碎 VAX。他们将项目命名为 “Fountainhead”。Ed de Castro 为这支团队提供了几乎无限的支持和资源,他将 Fountainhead 视为他公司的救星。而剩下的几名工程师被留在了马萨诸塞州,他们觉得自己被严重轻视了。他们认为自己能够开发一个干掉 VAX 的杀手,可能会比 Fountainhead 项目所能开发的更好,但是 Ed de Castro 不会给他们机会。因此,这个小组的负责人 Tom West 决定自己动手。Tom West 是一名自学成才的计算机工程师,他负责数据通用公司的 Eclipse 部门。 Eclipse 是数据通用公司最成功的 16 位小型机产品线。Tom 能造机器,也能卖货,而且他知道市场需求是什么。Fountainhead 项目成立以后,Ed de Castro 让剩下的工程师们继续致力于优化去年的产品线。 而 Tom 和其他人都对此不以为然。

00:04:31 - Carl Alsing

我们对此一点都不满意。我们中有些人离开去做其他工作,而另一些人则感到十分沮丧,担心自己的事业,而且感觉没意思。而且我们觉得另一组人肯定会失败。

00:04:46 - Saron Yitbarek

Carl Alsing 是数据通用公司微编程小组的经理。他是 Tom 的副手。他们决定提出自己的项目计划。

00:04:56 - Carl Alsing

这将是使用最新技术进行的全新设计,构建一个能够击败 DEC 的 VAX 的 32 位计算机。所以我们为此提出了一项建议,并去找了主席 Ed de Castro,他说:“不,没门儿。北卡罗来那州的小组在负责这项工作。你们不必操心。”因此,我们感到十分灰心,回去提出了另一个名为 Victor 的计划。我们研究了如何使去年的老产品更好的方法。我们在里面设置了一个小开关,即系统里的一个模式位,当你打开它时,它将使得计算机能够像现代 32 位小型机一样运行,尽管比较慢。然后我们向 Ed de Castro 提出了这个功能。最后他说:“你们在这里有个模式位。我不想再看到其他任何带有模式位的设计。北卡罗来那州那边正在负责新设计。”于是乎又一次,我们深感沮丧,我想就是在那会儿 Tom West 决定要做一些秘密的事情。

00:06:06 - Saron Yitbarek

Tom 想出了两个故事。一个是讲给 Ed de Castro 的:他们将会对旧的 Eclipse 产品线进行加强,使它运行得更快一点,增加几个新按钮,并且换个新颜色。Tom 把它说成保险措施,以防万一北卡罗来那州那边出了什么问题。Ed de Castro 同意了。然后 Tom 给他的团队讲了另一个更棒的故事。

00:06:32 - Carl Alsing

Tom West 向我们团队中的一些人提议,我们要开发一款真正优秀的现代机器,它对以前的机器完全兼容,并且采用我们所需的所有最新高科技的东西,有虚拟内存、32 位和纠错代码,以及所有这类东西:多任务、多处理、大量内存。“伙计们,我们将打造出最新的、能在市场上大杀四方的新机器。”

00:07:04 - Saron Yitbarek

这款极具市场杀伤力的新机器的代号是 “Eagle”。现如今,人们觉得我们的电脑中的内存是没有任何限制的,但是在那时候,当从 16 位转换到 32 位时,发生了重大的突破。突然之间,你的地址空间就从能够存储 65000 字节的信息变成了 40 多亿字节。随着这一增长,软件也可以处理更加大量的数据。这给计算机公司带来了两个基本的挑战:从 16 位过渡到 32 位,这是肯定的,但是他们还得让使用旧软件的老客户感到满意。因此,他们必须得开发一款能够让旧软件继续运行的机器,即一款向后兼容的 32 位计算机。VAX 尽其所能也没有找到第二个问题的完美解决方案,但是 Tom 坚信他的 Eagle 可以做到。

00:08:14

Eagle 的总部位于韦斯特伯勒 14 号楼 AB 的地下室。Tom 指派 Carl 负责 微码 micro coding 。Carl 指派 Chuck Holland 来管理 编码员 coder ,他们被称为 微码小子 Micro Kids 。同时,Ed Rasala 将负责硬件。他委派了 Ken Holberger 负责管理团队,这个团队被恰当地称为 哈迪男孩 Hardy Boys 。(LCTT 译注:《哈迪男孩》是一部 1977 年的美国电视剧。) Tom 有一个盟友,就是工程副总裁 Carl Carman。 Carman 也对 Ed de Castro 有意见,因为 Ed de Castro 拒绝让他来负责北卡罗来那州的小组。

00:08:51 - Carl Alsing

Carl Carman 知道我们在干什么,却什么都没有对他的老板说。所以他给我们提供了资金,但我们需要保持较低的薪水,并且需要一些非常聪明的工程师。因此,我们决定去招收大学毕业生。这样做的好处之一是他们不知道什么是你做不到的。他们以为你无所不能。

00:09:15 - Saron Yitbarek

那时 Jim Guyer 刚从大学毕业两年,在数据通用公司工作时被分派到了哈迪男孩。

00:09:21 - Jim Guyer

北卡罗来那州那边正在开发的机器更多是高端计算,本质上几乎是大型机。而且,嗯,我的意思是,这在当时确实是投入到与 IBM 以及其他大型机公司的竞争中去的相当重要的一步。我们认为我们有优势,因为我们想做的事情并不那么雄心勃勃,而且我们真的、真的专注于一种简洁、干净、简单的实现方案,用最低的成本、最少的组件等等。

00:09:51 - Saron Yitbarek

成本低廉,设计简单。他们意识到他们需要使用 固件 firmware 来控制一切。与硬件相比,把越多的功能置于固件控制之下,所开发的机器就越便宜、越灵活。

00:10:03

而且它们能够根据需求进行修改。当然,现代计算机都是以这种方式构建而成的,但在 1978 年,这种方法是全新的。

00:10:15 - Carl Alsing

我们所做的设计非常简约。我们正在研究能够使事情简单明了的方法。因为我们知道,它不可能变成一个庞大而又昂贵的机器。它必须只是几块板子、几个电路,这是让使它快速发展的一个优势。设计一款安全的、无风险的产品,和设计一款用于制胜的产品是有区别的。而我们并不担心风险,我们在意的是取胜。我们希望它既快速又便宜,我们希望快速地开发它。因此,我们只用了三、四块板子,这是最低限度的硬件,我们通过固件来弥补这些。

00:11:06 - Saron Yitbarek

Eagle 团队面临着很多严苛的限制。 VAX 是这个星球上(当时)性能最高的 32 位计算机。 Eagle 必须与之匹敌。但最重要的是,它还必须兼容他们的 16 位架构。要用比其他团队更少的金钱和时间来做到所有这一切,这使得 Eagle 感觉像是在赌博。但 Tom West 的团队全力以赴投身于其中。

00:11:32 - Jim Guyer

有两套无时无刻都在运行着的系统,我们有两班工程师为之工作。我们所有人都必须全盘掌握。因此,我们不得不学会其他每一个人的岗位所要做的工作。这对我而言既具有挑战性又极其富有教育意义。但是我们大家都参与其中努力着,“要解决这个问题下一步该做什么?我们需要着眼于何处?”每个人都仔细钻研原理图和其他文档,试图找出办法,“看看这个信号,看看那台计算机的状态,看看微码正在执行的步骤顺序。它在正常运转吗?哦等等,它出错了。呃,为什么它会这样运行呢?”

00:12:13 - Carl Alsing

这是件严肃的事情,这就是工作态度。小组里的工作很紧张。有时候人们会对于采用何种方式去做某件事情而发生争论。可能有一种方法会花费稍微多一点的钱,而另一种方法则更便宜,但是可能速度稍慢或效率稍低。为了达成共识,可能会开展激烈的讨论或会议。但我们还是做出了这些选择,然后我们协作努力。

00:12:44

我们没日没夜地工作,在 原型 prototype 上付出了很多时间。我们只有两个原型,两个团队都能在这两个原型上工作着实很重要。因此,晚班和白班都有人在工作,人们都很疲惫,但这让人感到非常兴奋 —— 这是值得的。所以没有人过多地抱怨工作条件。

00:13:11 - Saron Yitbarek

工作条件 —— 据传当时 Tom West 为了让团队完成他所期望的东西,实行了一种被称为“ 蘑菇管理 mushroom management ”的方法。喂养它们然后看着它们成长。在狭窄而炎热的工作空间里,时间很漫长,日程安排也不切实际。Tom 本人被形容为神秘、冷酷、无情的人。有位工程师甚至称他为“ 黑暗王子 the Prince of Darkness ”。 Tom West 是否如此渴望取胜以至于剥削了他的团队吗?他是否为了得到完美的机器而牺牲了微码小子们和哈迪男孩们的福祉?

00:13:56 - Jim Guyer

Tom 是个有趣的家伙。他对你期望很高,但不会给你很多指导。他希望你可以自己弄清楚需要做什么,而如果你不能做到的话,你就会被踢出团队。

00:14:10 - Saron Yitbarek

指导来自于 Carl 或是 Ed, 他们是 Jim 和团队其他成员每天都与之工作的部门经理。但这些年轻的工程师也为了取胜而参与其中,他们喜欢自己所获得的机会,愿意自己去搞清楚。

00:14:26 - Jim Guyer

我个人获得了第一届微码小子通宵荣誉奖。我不知道是什么理由,也许我们都是能力超群、豪气冲天、无知无畏的年轻后浪。我们很自信,我们觉得自己相当聪明,可以解决问题,我们相互依靠,也许这就是自负。我乐在其中。我认为我们大部分人都乐在其中。

00:14:56 - Saron Yitbarek

Carl 不同意“蘑菇管理”这一说法。他说情况恰恰相反。他们都确切地知道正在发生什么,以及预期是什么。反而是高层管理人员不知道。同时,Tom West 正在承受着来自多条战线的巨大压力,而这种压力也传递给了他的团队。

00:15:18 - Carl Alsing

Tom 对这个项目的真实性质保持着低调。因此,他并没有对工程师们说很多,他保持着超然的态度,当然他也告诉他们,他们不能在团队之外或是家中讨论该项目。甚至不能使用 “Eagle” 一词。因此,我们还传达了这个项目非常紧急,我们必须在一年之内完成,竞争已在市场中展开,如果我们要通过这个东西来占据市场之巅,我们必须现在就把它完成。因此他们承受着很大的压力,并且团队期望他们在夜晚和周末也参加工作,没有时间留给他们去和家人野餐或是做其他任何与工作不相关的事情。

00:16:06 - Saron Yitbarek

我想知道在 14 号楼 AB 的战壕里奋战是怎样的感受。所以我邀请 Neal Firth 来到身边。他是微码小子中的一员,刚毕业就加入了团队。

00:16:20

和 Tom West 共事的感觉如何?你和他有过很多互动吗?

00:16:24 - Neal Firth

不一定。他是那种幽灵般的人物。我们能看到他在身边。他一般也不会不干预,以便我们能够领导自己、实现目标。我们正在做的事情是全新的,他不想把上一代处理器要做的工作强加给我们。

00:16:49 - Saron Yitbarek

这听起来像是一个工作十分紧张的地方,在这里你真切地想不断前进并完成工作。你是怎样应对没有太多时间这一事实的?

00:16:57 - Neal Firth

老实说,这并不是问题。想要时间充裕实际上并没有什么问题。我们可能会花费一些时间来实现结果。这需要家里人非常支持与理解,因为她们并不一定会立马同意。你可以将其等同于当时的一些硅谷人,或是像 乔布斯 Jobs 沃兹尼亚克 Wozniak 之类的人,我们投身其中并搞定它。我们确实不全是“ 住在同一间公寓 live-in-the-same-apartment ”或“ 在地板上写代码 code-on-the-floor ”那样的人,但具有其中的一些特征。

00:17:35 - Saron Yitbarek

在那段时间里,是什么让你坚持了下来?为什么你这么有动力?

00:17:39 - Neal Firth

坦率地说,就是在解决问题。我一直是一个喜欢思考并善于解决问题的人。事实上,团队里的大部分人都是这样的。我们所有人都有着类似的背景,并且我们都很享受解决问题这件事。就是,解决那些难题,找到一种前所未有的方式去做事。

00:18:01 - Saron Yitbarek

那么在这个项目中,你最难忘的时刻是什么?

00:18:05 - Neal Firth

当时,项目已经进行了相当长的时间,我们正在运行微码模拟器,它实际上是被提议当作生产模拟器来运行的,已经运行了 10 到 12 个小时了。突然,字母 E 出现在了控制台上,然后我们等了一会儿,又是一个字母,接着又是一个字母,然后我们突然意识到我们运行的是测试代码,是正在设计运行的诊断程序。因此,微码模拟器正在模拟运行这份微码的硬件,并且它开始打印字母,就好像它真的在运行一样。所以当它真正问世并运行时,可能比实际上要慢了十万倍,但这仍是我最难忘的时刻之一。

00:19:02 - Saron Yitbarek

现在回过头想想,你觉得自己当时有被剥削吗?

00:19:07 - Neal Firth

没有。我可以意识到正在发生着什么。我知道正在发生什么。所以,没有,我没觉得被剥削。实际上,这是我大学毕业时候的期望,否则我永远都不可能参与这么重大的项目,或是有机会在这样的一个项目中扮演那么重要的角色。

00:19:31 - Saron Yitbarek

我想知道你如何看待发明的牺牲,因为如果你要考虑所有我们所创造的伟大事物,通常来说我们不得不放弃一些东西,是这样吗?必须舍弃一些东西来做出真正惊人的东西。这样的情况你遇到过吗?如果有的话,你不得不放弃的东西是什么呢?

00:19:48 - Neal Firth

我不会说我放弃某些东西是有一个思想驱动的过程,我认为更重要的是,我更能适应自己正在做的事情以及所做的事对周围人的影响。

00:20:03

但我从来没把它看作是一种牺牲,而与我亲近的人们,他们生活在就是这样的一个世界里。我听说过一些可怕的故事,如果你愿意的话,在今天,在这里都是,你醒来,插上你的咖啡机,拿一些披萨或点心,然后你开始写代码,最后你在你的键盘上睡着。然后你在下一个早晨醒来,重复这个过程。

00:20:35

我们当然远没有达到那种牺牲的程度,我仍然有妻子,我仍然有朋友,我们仍然在一起。这当然不是份 朝九晚五 nine-to-five 的工作,但是它给我带来了许多个人层面与技术层面的成就,我能把这些和我的妻子、姐妹、父亲、母亲以及岳父分享,这些人可以欣赏这些。

00:20:59 - Saron Yitbarek

是啊。那么,你认为使某件事情变得真正伟大的关键是什么呢?

00:21:06 - Neal Firth

使某件事情变得真正伟大的关键 —— 有趣的问题 —— 我认为这取决于参与其中的人员,因为他们想要这样做,而不是因为他们对成就、财富或是名望的渴望。因为那些东西都转瞬即逝,而且永远无法使人满足。但是如果你要努力地去实现一个目标,而且你和一群人共同努力并去实现它,那么当你最终实现目标的时候,这确确实实是能令人心满意足的。

00:21:42 - Saron Yitbarek

Neal Firth 是 Eagle 项目中微码小子中的一员。他目前是一家名为 VIZIM Worldwide 的软件公司的总裁。

00:21:57

正如 Tracy Kidder 书中所记载的那样, Tom West 的超然和距离感是刻意为之的。这是他试图在日常交谈中保持头脑清醒,从而能使 Eagle 的目标保持原样。不过更重要的是,他想保护团队,将他们与周遭发生的政治与企业边缘化相隔绝。他也保护了微码小子们和哈迪男孩们不受先入为主的观念影响。

00:22:28

1980 年, Eagle 完成了。比 Tom 所承诺的要晚了一年,但至少还是完成了,不像 Fountainhead。就像资深团队所预料的那样, Fountainhead 团队失败了,他们的项目遭到了搁置。这位是 Bill Foster,当时的软件开发总监,他谈到了 Fountainhead 的挣扎。

00:22:50 - Bill Foster

我认为所犯下的最大错误在于没有对其设置任何限制。或多或少地,就是让我们去开发世界上最好的计算机。嗯,它应该在什么时候被完成?哦,我们对此确实没有个明确的期限。它应该花费多少成本?好吧,我们也不确定。我不得不让 Ed 失望了。他没有在程序员和工程师之间设置足够的界限。

00:23:15

而且如果你让一群程序员和工程师放任自流,猜猜怎么着,他们将使事情变得复杂,设计出过分庞大的东西,以至于永远不能完成。

00:23:26 - Saron Yitbarek

让我们回忆一下。从 Tom 和他的团队决定秘密开发 Eagle 开始,这已经进行了两年了。整个过程中,公司总裁并不知道正在发生了什么。当现在已经正式命名为 Eclipse MV/8000 的这款机器准备交付时,市场营销负责人去找了 Ed de Castro,为营销活动放行。 Carl Alsing 将对此作出解释。

00:23:53 - Carl Alsing

市场营销负责人说道:“好吧,我们已经准备好为 Eagle 进行推广了,我们需要数千美元。我们将在全球六个不同的城市举行新闻发布会。我们将进行一个巡演,去到很多城市,我们将拍摄一部影片来展示它,这将轰动一时。”

00:24:14 - Carl Alsing

然后 Ed de Castro 说:“我不明白。你们为什么要那样做?”这只不过是在 Eclipse 那边的另一个包而已,表面工夫的工作而已。市场经理说:“不,这是一款全新的机器。这是一款 32 位的机器,有虚拟内存,具备兼容性。它将击败 VAX。所有你要的东西都在这里了。”

00:24:37 - Carl Alsing

Ed de Castro 着实有点儿困惑。他以为我们在北卡罗来那州遭遇了失败,将成为事情的终结,但我们拯救了他。因此,是的,他邀请了我们所有人,我们举行了一次小型的午餐会。午餐会上有三明治和苏打水,他说:“嗯,你们做得很好,我很吃惊。我此前并没有意识到你们在做这个,但是我们会推广它,我知道将会安排一部影片、一些巡游,而且你们将成为这其中的一部分,所以,感谢你们,请吃你们的三明治吧。”

00:25:19 - Saron Yitbarek

现如今被命名为 MV/8000 的 Eagle 出现在了《 计算机世界 Computer World 》杂志的封面上。推出期间,媒体的炒作使得这支原本秘密的、深居地下室的团队成员们变成了小名人。毕竟,他们拯救了数据通用公司。

00:25:38

但好景不长。 Tom West 再也无法让团队免受公司内部政治的影响。团队面对敌意毫无准备。公司里的其他人都嫉妒他们的成就,并对他们能在秘密项目中逃离如此之久感到震惊。

00:25:57

不久后,一个新的工程副总裁取代了他们的盟友 Carl Carman。这个新来的人在第一台 MV/8000 被售出之前就拆分了 Eagle 小组,并把 Tom 发配到了数据通用公司的日本办事处。

00:26:13 - Jim Guyer

我认为我们开发出了花钱所能够买到的最好的 32 位超级小型机,我认为这对数据通用公司来说是一件很棒的事情,我认为它将能把 DEC 稍微踢开一点,而不是我们把世界从他们身边夺走。那时候的竞争太艰难了,在高科技领域很难成为赢家,但我认为我们已经做了一些有价值的事情。

00:26:42 - Saron Yitbarek

当 Eagle 发行时,它确实拯救了数据通用公司,但在市场份额被 DEC 夺走三年后,该公司从未真正恢复过来,而行业却发展了。小型机不再是大势所趋。 微型计算机 microcomputer 的竞争已经开始了,这为 个人计算机 personal computer 革命铺平了道路。

00:27:04 - Carl Alsing

数据通用公司继续开发了其他的版本,并在其他的型号上进行了改进,这样进行了一段时间,取得了一些成功。但是世事无常。市场发生了变化,他们自己转型成了一家软件公司,然后最终被其他人收购了。如今,我认为他们在马萨诸塞州 霍普金顿 Hopkinton 某家公司的文件抽屉里。

00:27:36 - Saron Yitbarek

一年后, Eagle 团队中的许多人离开了数据通用公司。有人感到精疲力竭。有些人准备好要去开发一些不一样的东西。一些人前往西部的硅谷,热衷于寻找下一个创意火花。无论如何,在一个不承认他们为拯救公司所做的一切的公司里,继续待下去似乎没有什么意义。1981 那一年 Tracy Kidder 的《 新机器的灵魂 The Soul of a New Machine 》出版了。现如今,全世界都知道 Eagle 是如何构建起来了。

00:28:14 - Carl Alsing

如果你问我新机器的灵魂是什么,我想我会说是他们所经历的人和事,他们所做出的牺牲,他们所做出的努力,他们对此所感到的兴奋,以及他们所希望得到的满足感。也许得到了,也许没有,但他们为之而努力。

00:28:35 - Jim Guyer

从某种意义上说,这款机器是有点儿个性。但真正有个性的是这些有勇气的人。

00:28:47 - Saron Yitbarek

在我们有关硬件的全新一季的下一集里,我们会将时光倒回大型机世界,讲述另一群叛逆员工的故事。他们制造的计算机催生了一门改变世界的编程语言。

00:29:04 - Saron Yitbarek

代码英雄 Command Line Heroes 》是 红帽 Red Hat 的一档原创播客节目。这一季,我们正在为你整理一些出色的研究,以便你可以更多地了解到我们正在谈论的硬件的历史。请前往 redhat.com/commandlineheroes 深入了解 Eagle 及其背后的团队。我是 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-4/minicomputers

作者:Red Hat 选题:bestony 译者:JonnieWayy 校对:windgeek, wxy

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