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”,但很多人都忘记了,至少到最后才知道。我写过关于 Autotools 和 Cmake 的文章,但有些语言有自己的方法来帮助你将你的代码提供给用户。对于 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 来安装它,就像你在这篇文章中安装 setuptools 和 build 一样!

当你坐下来开发一个应用或库时,打包并不是你首先想到的事情,但它是编程的一个重要方面。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 Mono 、Robo 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 个字符,比大部分文字都多。高棉语在每个键位都有两个字符,需要在两个按键层反复切换。因此在柬埔寨人们大量使用语音,虽然后来高棉语输入法也得到了改善。当然,语音沟通的不便之处就是没法快速搜索,只能根据语音条长短大致记忆。

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