2021年11月

百亿亿次超算尚未到来

Top 500 超算项目公布了 最新的榜单,百亿亿次超算尚未到来,日本的 ARM 超算富岳第四次登顶。目前筹备中的百亿亿次(Exascale)超算美国有 两台,中国也有 两台。Top 10 中唯一的新人是第十的微软 Azure 超算。AMD 在榜单中取得了明显进步,Top 10 中有四台采用了 AMD 的 CPU,Top 500 中共有 73 台,而英特尔的比例从上半年的 86.4% 降至了 81.4%。

老王点评:这么说,我们之前在 #438 期 的报道有误,中国的百亿亿次超算还没正式上线。

Canonical 将从根本上改善 Ubuntu 文档

在过去,Ubuntu 的 Wiki 是业内公认优质的 Linux 文档资源库,不过现在更多用户偏好于 Arch Linux Wiki,后者被视为开源文档的黄金标准。不过 Canonical 现在 希望 从根本上改善 Ubuntu 及其他软件产品的 文档。他们说,“我们希望它能成为最好的。我们所说的‘最好’是指文件首先要理解、尊重、反映并服务于其用户的需求。”

老王点评:这真是一个功德无量的工作,我只希望国内的发行版厂商也能看齐。

Discord 正在悄悄地建立一个机器人的应用帝国

Discord 服务器所有者在服务器上安装机器人,以帮助管理,或为其社区提供小游戏或功能。现在超过 30% 的 Discord 服务器在 使用机器人,每周有 1.5 亿月度活跃用户在使用 43 万个机器人。目前共有约 12,000 个经过验证的应用程序和机器人。

老王点评:相比之下,看看微信只知道一力封杀第三方机器人,而自己的机器人又是个跛脚的。

环境变量几乎在每种命令行环境中都是很有帮助的,自然包括 FreeDOS 。

几乎在每个命令行环境中的一个有用的功能是 环境变量。其中的一些变量允许你控制命令行的行为或功能,其它的变量仅允许你存储可能稍后需要的数据,在 FreeDOS 中也使用了环境变量。

在 Linux 上的变量

在 Linux 上,你可能已经熟悉其中的一些重要的环境变量。在 Linux 上的 Bash shell 中,PATH 变量标示着 shell 可以在哪里找到程序和命令。例如,在我的 Linux 系统上,我的 PATH 值如下:

bash$ echo $PATH
/home/jhall/bin:/usr/lib64/ccache:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin

这意味着,当我输入一个像 cat 这样的命令的名称时,Bash 将会按顺序检查我在 PATH 变量中所列出的每个目录:

  1. /home/jhall/bin
  2. /usr/lib64/ccache
  3. /usr/local/bin
  4. /usr/local/sbin
  5. /usr/bin
  6. /usr/sbin

在我的实例中,cat 命令位于 /usr/bin 目录,因此,完整的路径是 /usr/bin/cat

为在 Linux 上设置一个环境变量,你可以输入一个变量的名称,接着输入一个等于符号(=),接着输入一个要存储在变量中的值。为了随后使用 Bash 引用这个值,你需要在变量的名称前输入一个美元符号($)。

bash$ var=Hello
bash$ echo $var
Hello

在 FreeDOS 上的变量

在 FreeDOS 上,环境变量提供一种类似的功能。一些变量控制 DOS 系统的行为,另一些变量用于存储一些临时值。

为在 FreeDOS 上设置一个环境变量,你需要使用 SET 关键字。FreeDOS 是 不区分大小写的 ,因此你可以输入大写字母也可以使用小写字母。接下来,像你在 Linux 上一样设置变量,使用变量名称,一个等于符号(=),你想要存储的值。

不过,在 FreeDOS 中引用或 扩展 一个环境变量的值的方法,与你在 Linux 上所使用的方法是完全不同的。在 FreeDOS 中,你不能使用美元符号($)来引用一个变量。你反而需要使用百分符号 (%)来包围变量的名称。

Use % (not $) to reference a variable's value

在名称前后使用百分符号是非常重要,因为这就是 FreeDOS 知悉变量名称在哪里开始和结束的方式。这是非常有用的,因为它会允许你引用一个变量的值,与此同时,它会立即附加(或预置)其它的文本到值中。让我通过设置一个新的名称为 reply 的值为 yes 的变量,然后在 “11” 之前和 “22” 之后引用这个值来演示这一点:

Set and reference an environment variable

因为 FreeDOS 是不区分大小写的,所以你可以使用大写字母称或小写字母的变量名称以及 SET 关键字。不过,变量的值将使用你在命令行中所输入的字母。

最后,你可以看到当前在 FreeDOS 中定义的所有的环境变量。不使用任何参数的 SET 关键字将显示所有的变量,因此你可以一目了然:

Show all variables at once with SET

环境变量是一个有用的基本的命令行环境,同样适用于 FreeDOS 。你可以设置你自己的变量以满足你自己的需要,但是要仔细地更改 FreeDOS 使用的一些变量。这些变量会更改你正在运行的 FreeDOS 系统的行为:

  • DOSDIR:FreeDOS 安装目录的位置,通常是 C:\FDOS
  • COMSPEC:FreeDOS 的 shell 的当前实例,通常是 C:\COMMAND.COM%DOSDIR%\BIN\COMMAND.COM
  • LANG:用户的首选语言
  • NLSPATH:系统语言文件的位置,通常是 %DOSDIR%\NLS
  • TZ:系统的时区
  • PATH:一个目录列表,FreeDOS 可以在其中找到要运行的程序,例如 %DOSDIR%\BIN
  • HELPPATH:系统文档文件的位置,通常是 %DOSDIR%\HELP
  • TEMP:一个临时目录,FreeDOS 在其中存储来自每个命令的输出,如同它在命令行上的程序之间的 “管道” 数据
  • DIRCMD:一个控制 DIR 命令如何显示文件和目录的变量,通常设置 /OGNE 来排序(O)内容,先通过分组(G)目录,接下来按照名称(N) 、扩展名(E)来排序条目

如果你偶然间更改了任意的 FreeDOS 的 “内部” 变量,你可能会阻碍 FreeDOS 的一些部分的正常工作。在这种情况下,只需要简单地重新启动你的计算机,FreeDOS 将会按照系统默认值重新设置变量。


via: https://opensource.com/article/21/6/freedos-environment-variables

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

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

CentOS Linux 8 最后的绝响

RHEL 8.5 上周发布之后,CentOS Linux 8 2111 作为 RHEL 8.5 的重构版本于近日 发布。该版本同时也是基于上游 RHEL 8.5 的最后一个版本,在更新日志中再次重申了 CentOS Linux 8 将在 2021 年 12 月 31 日结束使用。RHEL 8.5 带来了各种容器的改进,Cockpit 网络管理的改进,以及其他各种更新和改进。此外,RHEL 8.5 还支持最近推出的 OpenJDK 17 和微软 .NET 6。那些寻找 CentOS Linux 8 替代品的人可以看看 Rocky Linux 和 AlmaLinux,它们都已经发布了基于 RHEL 8.5 的版本。当然,国内用户也可以看看欧拉和龙蜥。

老王点评:一代绝响,真正改变了企业级 Linux 市场格局,但是到底哪个替代品能真正接过 CentOS 的大旗呢?

B 站加入了开放发明网络

开放发明网络(OIN)是世界上最大的专利互不侵犯联盟。它保护 Linux 和相关的开源软件及其背后的公司免受专利攻击和专利巨头的侵害。OIN 最近扩大了其范围,从核心的 Linux 程序和相邻的开源代码扩大到其他专利,如安卓开源项目(AOSP)和 exFAT 文件系统。加入 OIN 可以在免版税的基础上将其专利相互授权。之前,中国已经有很多公司加入了 OIN,而 除了 B 站,不久前抖音母公司字节跳动和快手公司也都加入了 ION。

老王点评:OIN 的意义不用多说,让人欣喜的是,除了一些大公司,中国更多的较小规模的科技公司也开始加入 OIN。

付费版 Firefox Relay 提供无限量的电子邮件别名

Mozilla 推出的 Firefox Relay 是一个免费产品,它为你提供了五个 电子邮件别名,每次你需要在网上随机注册一个账户时都可以使用。现在,该服务推出了一个付费版,可以得到你自己的子域(yourdomain.mozmail.com)。你必须安装它的 Firefox 扩展,才能使用该功能。每当你访问一个要求提供电子邮件地址的网站时,浏览器上就会出现 Relay 图标,你可以点击它来生成一个随机的地址。

老王点评:这个服务不错,或许但是给 Mozilla 带来的收入应该不多。

使用 setuptools 来向用户交付 Python 代码。

 title=

你花了几周的时间来完善你的代码。你已经对它进行了测试,并把它发送给一些亲近的开发者朋友以保证质量。你已经将所有的源代码发布在 你的个人 Git 服务器 上,并且从一些勇敢的早期使用者收到了一些有用的错误报告。现在你已经准备好将你的 Python 代码提供给全世界。

就在这时你遇到一个问题。你不知道如何交付产品。

将代码交付给它的目标用户是一件大事。这是软件开发的一个完整的分支,是 CI/CD 中的 “D”,但很多人都忘记了,至少到最后才知道。我写过关于 AutotoolsCmake 的文章,但有些语言有自己的方法来帮助你将你的代码提供给用户。对于 Python 来说,向用户提供代码的一个常见方法是使用 setuptools

安装 setuptools

安装和更新 setuptools 的最简单方法是使用 pip

$ sudo python -m pip install --upgrade setuptools

示例库

我创建了一个简单的 Python 库,名为 myhellolib,来作为需要打包的示例代码。这个库接受一个字符串,然后用大写字母打印出这个字符串。

它只有两行代码,但项目结构很重要,所以首先创建目录树:

$ mkdir -p myhellolib.git/myhellolib

为了确认这个项目是一个可导入的库(即 Python “模块”),在代码目录中创建一个空文件 __init__.py,同时创建一个包含代码的文件:

$ touch myhellolib.git/myhellolib/__init__.py
$ touch myhellolib.git/myhellolib/myhellolib.py

myhellolib.py 文件中,输入简单的 Python 代码:

def greeter(s):
    print(s.upper())

这就是写好的库。

测试它

在打包之前,测试一下你的库。创建一个 myhellolib.git/test.py 文件并输入以下代码:

import myhellolib.myhellolib as hello
hello.greeter("Hello Opensource.com.")

运行该脚本:

$ cd myhellolib.git
$ python ./test.py
HELLO OPENSOURCE.COM

它可以工作,所以现在你可以把它打包了。

Setuptools

要用 setuptools 打包一个项目,你必须创建一个 .toml 文件,将 setuptools 作为构建系统。将这段文字放在项目目录下的 myhellolib.toml 文件中。

[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"

接下来,创建一个名为 setup.py 的文件,包含项目的元数据:

from setuptools import setup

setup(
   name='myhellolib',
   version='0.0.1',
   packages=['myhellolib'],
   install_requires=[
      'requests',
      'importlib; python_version == "3.8"',
   ],
)

不管你信不信,这就是 setuptools 需要的所有设置。你的项目已经可以进行打包。

打包 Python

要创建你的 Python 包,你需要一个构建器。一个常见的工具是 build,你可以用 pip 安装它:

$ python -m pip install build --user

构建你的项目:

$ python -m build

过了一会儿,构建完成了,在你的项目文件夹中出现了一个新的目录,叫做 dist。这个文件夹包含一个 .tar.gz 和一个 .whl 文件。

这是你的第一个 Python 包! 下面是包的内容:

$ tar --list --file dist/myhellolib-0.0.1.tar.gz
myhellolib-0.0.1/
myhellolib-0.0.1/PKG-INFO
myhellolib-0.0.1/myhellolib/
myhellolib-0.0.1/myhellolib/__init__.py
myhellolib-0.0.1/myhellolib/myhellolib.py
myhellolib-0.0.1/myhellolib.egg-info/
myhellolib-0.0.1/myhellolib.egg-info/PKG-INFO
myhellolib-0.0.1/myhellolib.egg-info/SOURCES.txt
myhellolib-0.0.1/myhellolib.egg-info/dependency_links.txt
myhellolib-0.0.1/myhellolib.egg-info/requires.txt
myhellolib-0.0.1/myhellolib.egg-info/top_level.txt
myhellolib-0.0.1/setup.cfg
myhellolib-0.0.1/setup.py

$ unzip -l dist/myhellolib-0.0.1-py3-none-any.whl 
Archive:  dist/myhellolib-0.0.1-py3-none-any.whl
Name
----
myhellolib/__init__.py
myhellolib/myhellolib.py
myhellolib-0.0.1.dist-info/METADATA
myhellolib-0.0.1.dist-info/WHEEL
myhellolib-0.0.1.dist-info/top_level.txt
myhellolib-0.0.1.dist-info/RECORD
-------
6 files

让它可用

现在你知道了打包你的 Python 包是多么容易,你可以使用 Git 钩子、GitLab Web 钩子、Jenkins 或类似的自动化工具来自动完成这个过程。你甚至可以把你的项目上传到 PyPi,这个流行的 Python 模块仓库。一旦它在 PyPi 上,用户就可以用 pip 来安装它,就像你在这篇文章中安装 setuptoolsbuild 一样!

当你坐下来开发一个应用或库时,打包并不是你首先想到的事情,但它是编程的一个重要方面。Python 开发者在程序员如何向世界提供他们的工作方面花了很多心思,没有比 setuptools 更容易的了。试用它,使用它,并继续用 Python 编码!


via: https://opensource.com/article/21/11/packaging-python-setuptools

作者:Seth Kenlon 选题:lujun9972 译者:geekpi 校对:wxy

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

如果你在 Ubuntu 上使用终端的时间很长,你可能会希望调整终端的字体和大小以获取一种良好的体验。

更改字体是一种最简单但最直观的 Linux 的终端自定义 的方法。让我向你展示在 Ubuntu 中更改终端的字体的详细步骤,以及一些字体选择的提示和建议。

注意:这些步骤可能也对大多数的其它的 Linux 的终端模拟器 有效,但是你访问选项的方法可能会有所不同。

使用 GUI 更改 Ubuntu 的终端的字体和大小

步骤 1. 在 Ubuntu 中打开终端窗口 ,方法是按 Ctrl+Alt+T 组合键。

步骤 2. 打开终端“ 首选项 Preferences ”。你可以单击菜单按钮来找到它。

你也可以右击终端屏幕的任意位置来访问首选项,如下图所示。

步骤 3. 现在,你应该能够访问针对终端的设置。在默认情况下,在这里将会有一个未命名的配置文件。这就是默认的配置文件。我建议创建一个新的配置文件,以便你的更改不会影响默认的设置。

步骤 4. 为了更改字体,你需要启用“ 自定义字体 Custom font ” 选项,接下来单击 “Monospace Regular” 。

它将显示针对这个选项的可用的一个字体列表。

在这里,你可以在字体列表的底部快速预览字体,也可以调整你的 Ubuntu 的终端的字体大小。

在默认情况下,字体的大小是 12 ,字体的样式是 Ubuntu mono

步骤 5. 最后,你也可以搜索你喜欢的字体样式,并在查看预览和调整字体大小后,通过点击 “ 选择 Select ” 来完成更改字体。

这就是全部的步骤。你已经成功地更改字体。在下面的图像中查看更改。移动划款来查看不同点。

Ubuntu terminal font change

获取针对 Ubuntu 的终端的新字体的提示

你可以中从因特网上下载 TTF 格式的字体文件,右击这些 TTF 文件 可以很容易在 Ubuntu 中安装这些新的字体

你可以打开一个新的终端窗口来加载新安装的字体。

不过,请记住,Ubuntu 不会在终端中显示所有新安装的字体。为什么?因为终端已经被分配使用 monospaced 字体。如果字体中字母间靠得很近的,那看起来就很诡异了。一些字体不能清晰区分字母 “o” 和数字 “0” 。同样,你也可能面临区分小写字母 “l” 和小写字母 “i” 的难题。

这就是为什么你会在终端中所看到的字体的名称中通常会带有 “mono” 的原因。

一般来说,在字体方面可能会有很多可读性难题,这可能会造成更加混乱的局面。因此,最好选择一种不会在终端上使人难易阅读的字体。

你还应该检查在你增大/减少字体大小期间该字体是否看起来良好/诡异,以确保在你自定义你的终端时没有问题。

针对终端自定义的字体建议

Free mono 和 Noto mono 是默认字体选择列表中可用的一些好字体,可应用于你的终端。

你可以尝试 在 Linux 中安装新的字体 ,像 JetBrains MonoRobo Mono 、Larabiefont 、Share Tech Mono 以及来自 Google 和其它来源的字体。

你喜欢在 Ubuntu 的终端上使用什么样的字体和大小?请在下面的评论区告诉我们!


via: https://itsfoss.com/change-terminal-font-ubuntu/

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

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

新的“行锤”攻击打破了 DDR4 内存保护

行锤 Rowhammer ”攻击是通过每秒数百万次访问(或者说锤打)脆弱芯片内的物理行,导致相邻行的比特翻转,这意味着 1 变成 0,0 变成了 1。一个没有特权的应用程序可以通过每秒数百万次以特定模式访问 DDR 内存的“行锤”来破坏内存中的数据,从而 获得系统特权。这个漏洞已经在 2015 年被发现,对 DDR3 造成了严重影响后,在 DDR4 中有所缓解。以前的“行锤”攻击都是以统一的模式锤击行,这些“攻击者”行被访问的次数相同。而 新发表的研究 中使用了非均匀模式,以不同的频率访问两个或更多的攻击者行。结果是:在一个测试池中,所有 40 个随机选择的 DIMM 都经历了比特翻转。

老王点评:如果这个攻击技术被武器化,那所有使用 DDR 内存的计算机都处于被攻击的阴影笼罩之下。

英特尔 4004 微处理器推出 50 周年

1971 年 11 月 15 日 英特尔推出的 4004 微处理器仅使用了 2,300 个晶体管,一次可在芯片中运行四位数据。这种半英寸长的矩形集成电路的时钟速度为 750 kHz,每秒可进行约 92,000 次运算。英特尔于 1972 年推出有 3,500 个晶体管的八位的 8008;1978 年推出有 29,000 个晶体管的十六位的 8086,每秒可进行 710,000 次运算。IBM 将下一代的英特尔 8088 用于其首款 PC。而如今,苹果新的 M1 Max 处理器有 570 亿个晶体管,每秒可执行 10.4 万亿次浮点运算。这意味着计算机能力在 50 年内至少提高了 10 亿倍。

老王点评:50 年对于人类历史来说是短短一瞬间,但是这小小的芯片却整个改变了世界。

因文字太难输入,Facebook Messenger 五成语音流量来自柬埔寨

2018 年 Facebook 工程师注意到了一个令他们不解的现象:Messenger 近五成语音流量 来自柬埔寨。高棉语有 74 个字符,比大部分文字都多。高棉语在每个键位都有两个字符,需要在两个按键层反复切换。因此在柬埔寨人们大量使用语音,虽然后来高棉语输入法也得到了改善。当然,语音沟通的不便之处就是没法快速搜索,只能根据语音条长短大致记忆。

老王点评:还好我们的中文输入法比较好,或者说拼音普及的好,要不中文输入更难。