2021年2月

美国佛罗里达州水处理系统遭黑客攻击,被调整了自来水成分

报道称,有黑客成功渗透了控制佛罗里达州奥尔德斯马市水处理设施的计算机系统。通过篡改可远程控制的计算机数据,攻击者改变了当地供水中的化学品含量,上调了氢氧化钠碱液的水平。幸好被及时发现,目前暂无居民受到伤害的报告。当地水处理设施使用了常见的 TeamViewer 远程访问软件,有人再次远程访问了系统,将系统的氢氧化钠水平从 100 ppm 暴增到了 11100 ppm,操作员发现后及时改了回去。当地警方已经投入了调查。

这是非常严重的对公共安全的威胁,各种公共安全事业部门要注意了,有些黑客攻击不是为了牟利,但是会对社会造成很大破坏。

首款国产量子计算机操作系统“本源司南”发布

据报道,该系统由合肥本源量子计算科技有限责任公司自主研发。利用量子卷积神经网络模型开发出的量子图像识别应用,可将图像识别任务转化为多个量子线路,在经过量子态数据编码之后,这些量子线路就处于排队等待运行状态。通过“本源司南”的统一调度管理,这些量子线路在单个量子芯片上可以被并行执行,不仅大大减少了整体线路运行时间,还有效提高了量子芯片的整体利用率,使得当前有限的量子计算资源得到最大化利用。

如同超算一样,量子计算机也需要合适的操作系统才能发挥作用,可喜地看到国内在量子技术前进了一小步。

Rust 基金会成立

Rust Core 团队宣布了新成立的 Rust 基金会,创始成员中包括了微软、谷歌、华为、亚马逊云服务(AWS)等科技巨头,以及原发起方 Mozilla 。Mozilla 现已将包括商标等在内的所有基础设施资产,转移到了新成立的 Rust 基金会。

Mozilla 裁员导致这些项目星散后,或许是这些项目的好的开始。

NESHouse 作为一个黑客松项目,相比于其他正式运行的项目,可能生命周期更短,也不会走入正式运营的阶段。不过,在我个人看来,这个项目的选型、设计等,还是有一些有意思的点,值得和大家分享。

1、 黑客松,要的就是快!

这几天前几篇文章发出去后,不断有一些开发者留言评论:这个项目使用的都是别人的服务,你的价值是什么?

NESHouse 作为一个黑客松项目,目的是在有限的时间内,从 0 到 1 将需求实现,在这个过程中,开发者需要去仔细评估自己所拥有的资源和要达成的目标,让资源和目标匹配,才能很好的完成自己的开发工作,达成自己本次黑客松的目标。

作为一个 Go 后端开发者,在这个项目中,我使用的是 LeanCloud 提供的云服务,而不是使用 gin 自己写一个 http 服务器,似乎不合常理,没有使用自己最熟悉的技术方案。但如果将资源和需求结合起来看,就会发现这个选择是很正常的。gin 固然熟悉,但我不熟悉的是前端,如果我将一部分时间安排在了后端的研发上,必然挤压我在前端开发的时间。

所以在 NEShouse 项目中,我选择了我比较熟悉,且开发时间周期最短的 Serverless 云服务 —— LeanClod 来完成我的后端工作量,这样我可以几乎不用在后端上花费时间和精力来完成工作。在音频服务上选择使用声网,而不是自己实现一套,原因也一致,我的预期是在 72 小时内完成这个项目的研发,而不是自己打造一套完整的实时音频系统。所以必然会选择更加好用,更加现成的解决方案,来简化我自己的工作。

此外,在这个项目中,有一个比较适合进行工作量评估的事情,便是我在项目中使用到了 LeanCloud 的 LiveQuery 的能力。LiveQuery 提供了实时数据同步的能力,使用 WebSocket 也可以实现相同的功能,不过,如何能又好又快,同时在 WebSocket 服务器上完成各种鉴权和扩展能力,是一个麻烦的事情。你可以用这个非常简单的功能,来评估假设你自己来完成所有的功能所需要耗费的时间。这样就可以理解为什么在这个项目中,我选择 LeanCloud 来完成工作。

2、浏览器兼容,你是真的坑!

在 NESHouse 的开发中,其实并没有花费太多的时间,倒是中间因为我回老家,花了不少时间在路上。实际上,在整个项目中,最为费心的,是各种浏览器之间的兼容问题。

基于浏览器的 NESHouse 和其他基于系统原生 API 的音频应用相比,一个很大的问题在于浏览器在处理音频设备上的不同。NESHouse 使用的音频接口是基于浏览器封装后一层的 API,而这个 API 处于考虑保护用户的考虑,在某些特定的场景下,会要求你先产生一些操作才能触发音频播放,所以针对不同的浏览器,你需要编写不同的适配代码,这些代码最终就会让你的代码变得又臭又长,存在大量的冗余代码。

比如说,在微信浏览器中,默认情况下你是无法听到 WebRTC 传回的音频的,需要用户在页面上进行点击,才能进行播放。

NESHouse 在实现这部分的逻辑时,采用的是判断如果用户使用的是微信浏览器,则会显示一个用户授权页面,让用户主动去点击,来完成音频播放的能力。

如果你希望以其他的方式来解决这个问题,那也可以参考 Agora 文档中的相关说明,来实现这部分能力:https://docs.agora.io/cn/Voice/autoplay_policy_web?platform=Web

3、Alpine.js,真香

作为一个后端开发者,对于前端的几大框架,也仅仅局限在可以用,可以写出我想要的功能的应用。但在具体的实现的时候,由于一些原因,我没有使用 Vue/React/Angular 之类的应用,再加上希望在黑客松中使用一些新的技术,于是我使用了 Alpine.js。

什么是 Alpine.js?Alpine.js 是一个在基础的 DOM 上实现了类似 Vue/React 的双向绑定的一个框架,使用 Alpine.js 和 Vue/React 的一个很大的不同点就在于,他可以让你在现有的 HTML 中非常轻松的实现双向绑定,而不需要重写整个代码。

举个例子来说,假设你想要在 Vue/React 中实现双向绑定,你需要将你的代码放在模板中或者转换为 JSX 来获取相应的双向绑定的能力。但在 Alpine.js 中,你需要做的仅仅是在你需要绑定的地方加入 x-model=xxx 来实现绑定,十分简单。

不仅如此,Alpine 也实现了大部分 Vue/React 之类应用实现的功能,比如 x-forx-onx-if 等常用的命令,在实际写逻辑的时候,我大量的应用了这些逻辑来完成我自己的工作,十分方便。

在 NESHouse 中,随处可见 Alpine.js 的应用:

Alpine.js 可以很轻松让一个不熟悉 Webpack 等前端构建工具的后端工程师,在自己的应用中实现双向绑定。对于后端工程师来说,这个工具你们不可错过。

总结

NESHouse 的技术栈相比于很多复杂的应用来说,十分的简单,仅仅是 Leancloud + Agora 就可以完成几乎所有功能,但我相信,这样的技术架构选型,对于一些不需要那么大计算量、没有那么高业务负载的项目而言,是有帮助的。就算你有屠龙技,又何需在杀鸡之时用它呢?

D 语言以系统编程语言而闻名,但它也是编写脚本的一个很好的选择。

 title=

D 语言由于其静态类型和元编程能力,经常被宣传为系统编程语言。然而,它也是一种非常高效的脚本语言。

由于 Python 在自动化任务和快速实现原型想法方面的灵活性,它通常被选为脚本语言。这使得 Python 对系统管理员、管理者和一般的开发人员非常有吸引力,因为它可以自动完成他们可能需要手动完成的重复性任务。

我们自然也可以期待任何其他的脚本编写语言具有 Python 的这些特性和能力。以下是我认为 D 是一个不错的选择的两个原因。

1、D 很容易读和写

作为一种类似于 C 的语言,D 应该是大多数程序员所熟悉的。任何使用 JavaScript、Java、PHP 或 Python 的人对 D 语言都很容易上手。

如果你还没有安装 D,请安装 D 编译器,这样你就可以运行本文中的 D 代码。你也可以使用在线 D 编辑器

下面是一个 D 代码的例子,它从一个名为 words.txt 的文件中读取单词,并在命令行中打印出来:

open
source
is
cool

用 D 语言写脚本:

#!/usr/bin/env rdmd
// file print_words.d

// import the D standard library
import std;

void main(){
    // open the file
     File("./words.txt")

         //iterate by line
        .byLine

        // print each number
        .each!writeln;
}

这段代码以 释伴) 开头,它将使用 rdmd 来运行这段代码,rdmd 是 D 编译器自带的编译和运行代码的工具。假设你运行的是 Unix 或 Linux,在运行这个脚本之前,你必须使用chmod 命令使其可执行:

chmod u+x print_words.d

现在脚本是可执行的,你可以运行它:

./print_words.d

这将在你的命令行中打印以下内容:

open
source
is
cool

恭喜你,你写了第一个 D 语言脚本。你可以看到 D 是如何让你按顺序链式调用函数,这让阅读代码的感觉很自然,类似于你在头脑中思考问题的方式。这个功能让 D 成为我最喜欢的编程语言

试着再写一个脚本:一个非营利组织的管理员有一个捐款的文本文件,每笔金额都是单独的一行。管理员想把前 10 笔捐款相加,然后打印出金额:

#!/usr/bin/env rdmd
// file sum_donations.d

import std;

void main()
{
    double total = 0;

    // open the file
    File("monies.txt")

         // iterate by line
        .byLine

         // pick first 10 lines
        .take(10)

        // remove new line characters (\n)
        .map!(strip)

         // convert each to double
        .map!(to!double)

        // add element to total
        .tee!((x) { total += x; })

        // print each number
        .each!writeln;

    // print total
    writeln("total: ", total);
}

each 一起使用的 ! 操作符是模板参数的语法。

2、D 是快速原型设计的好帮手

D 是灵活的,它可以快速地将代码敲打在一起,并使其发挥作用。它的标准库中包含了丰富的实用函数,用于执行常见的任务,如操作数据(JSON、CSV、文本等)。它还带有一套丰富的通用算法,用于迭代、搜索、比较和 mutate 数据。这些巧妙的算法通过定义通用的 基于范围的接口 而按照序列进行处理。

上面的脚本显示了 D 中的链式调用函数如何提供顺序处理和操作数据的要领。D 的另一个吸引人的地方是它不断增长的用于执行普通任务的第三方包的生态系统。一个例子是,使用 Vibe.d web 框架构建一个简单的 web 服务器很容易。下面是一个例子:

#!/usr/bin/env dub
/+ dub.sdl:
dependency "vibe-d" version="~>0.8.0"
+/
void main()
{
    import vibe.d;
    listenHTTP(":8080", (req, res) {
        res.writeBody("Hello, World: " ~ req.path);
    });
    runApplication();
}

它使用官方的 D 软件包管理器 Dub,从 D 软件包仓库中获取 vibe.d Web 框架。Dub 负责下载 Vibe.d 包,然后在本地主机 8080 端口上编译并启动一个 web 服务器。

尝试一下 D 语言

这些只是你可能想用 D 来写脚本的几个原因。

D 是一种非常适合开发的语言。你可以很容易从 D 下载页面安装,因此下载编译器,看看例子,并亲自体验 D 语言。


via: https://opensource.com/article/21/1/d-scripting

作者:Lawrence Aberba 选题:lujun9972 译者:geekpi 校对:wxy

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

这本初学者指南向你展示了在 Linux 中可以使用 pacman 命令做什么,如何使用它们来查找新的软件包,安装和升级新的软件包,以及清理你的系统。

pacman 包管理器是 Arch Linux 和其他主要发行版如 Red Hat 和 Ubuntu/Debian 之间的主要区别之一。它结合了简单的二进制包格式和易于使用的 构建系统pacman 的目标是方便地管理软件包,无论它是来自 官方库 还是用户自己构建的软件库。

如果你曾经使用过 Ubuntu 或基于 debian 的发行版,那么你可能使用过 apt-getapt 命令。pacman 在 Arch Linux 中是同样的命令。如果你 刚刚安装了 Arch Linux,在安装 Arch Linux 后,首先要做的 几件事 之一就是学习使用 pacman 命令。

在这个初学者指南中,我将解释一些基本的 pacman 命令的用法,你应该知道如何用这些命令来管理你的基于 Archlinux 的系统。

Arch Linux 用户应该知道的几个重要的 pacman 命令

与其他包管理器一样,pacman 可以将包列表与软件库同步,它能够自动解决所有所需的依赖项,以使得用户可以通过一个简单的命令下载和安装软件。

通过 pacman 安装软件

你可以用以下形式的代码来安装一个或者多个软件包:

pacman -S 软件包名1 软件包名2 ...

安装一个包

-S 选项的意思是 同步 synchronization ,它的意思是 pacman 在安装之前先与软件库进行同步。

pacman 数据库根据安装的原因将安装的包分为两组:

  • 显式安装:由 pacman -S-U 命令直接安装的包
  • 依赖安装:由于被其他显式安装的包所 依赖,而被自动安装的包。

卸载已安装的软件包

卸载一个包,并且删除它的所有依赖。

pacman -R 软件包名

移除一个包

删除一个包,以及其不被其他包所需要的依赖项:

pacman -Rs 软件包名

如果需要这个依赖的包已经被删除了,这条命令可以删除所有不再需要的依赖项:

pacman -Qdtq | pacman -Rs -

升级软件包

pacman 提供了一个简单的办法来 升级 Arch Linux。你只需要一条命令就可以升级所有已安装的软件包。这可能需要一段时间,这取决于系统的新旧程度。

以下命令可以同步存储库数据库,并且 更新系统的所有软件包,但不包括不在软件库中的“本地安装的”包:

pacman -Syu
  • S 代表同步
  • y 代表更新本地存储库
  • u 代表系统更新

也就是说,同步到中央软件库(主程序包数据库),刷新主程序包数据库的本地副本,然后执行系统更新(通过更新所有有更新版本可用的程序包)。

系统更新

注意!

对于 Arch Linux 用户,在系统升级前,建议你访问 Arch-Linux 主页 查看最新消息,以了解异常更新的情况。如果系统更新需要人工干预,主页上将发布相关的新闻。你也可以订阅 RSS 源Arch 的声明邮件

在升级基础软件(如 kernel、xorg、systemd 或 glibc) 之前,请注意查看相应的 论坛,以了解大家报告的各种问题。

在 Arch 和 Manjaro 等滚动发行版中不支持部分升级。这意味着,当新的库版本被推送到软件库时,软件库中的所有包都需要根据库版本进行升级。例如,如果两个包依赖于同一个库,则仅升级一个包可能会破坏依赖于该库的旧版本的另一个包。

用 Pacman 查找包

pacman 使用 -Q 选项查询本地包数据库,使用 -S 选项查询同步数据库,使用 -F 选项查询文件数据库。

pacman 可以在数据库中搜索包,包括包的名称和描述:

pacman -Ss 字符串1 字符串2 ...

查找一个包

查找已经被安装的包:

pacman -Qs 字符串1 字符串2 ...

根据文件名在远程软包中查找它所属的包:

pacman -F 字符串1 字符串2 ...

查看一个包的依赖树:

pactree 软件包名

清除包缓存

pacman 将其下载的包存储在 /var/cache/Pacman/pkg/ 中,并且不会自动删除旧版本或卸载的版本。这有一些优点:

  1. 它允许 降级 一个包,而不需要通过其他来源检索以前的版本。
  2. 已卸载的软件包可以轻松地直接从缓存文件夹重新安装。

但是,有必要定期清理缓存以防止文件夹增大。

pacman contrib 包中提供的 paccache(8) 脚本默认情况下会删除已安装和未安装包的所有缓存版本,但最近 3 个版本除外:

paccache -r

清除缓存

要删除当前未安装的所有缓存包和未使用的同步数据库,请执行:

pacman -Sc

要从缓存中删除所有文件,请使用清除选项两次,这是最激进的方法,不会在缓存文件夹中留下任何内容:

pacman -Scc

安装本地或者第三方的包

安装不是来自远程存储库的“本地”包:

pacman -U 本地软件包路径.pkg.tar.xz

安装官方存储库中未包含的“远程”软件包:

pacman -U http://www.example.com/repo/example.pkg.tar.xz

额外内容:用 pacman 排除常见错误

下面是使用 pacman 管理包时可能遇到的一些常见错误。

提交事务失败(文件冲突)

如果你看到以下报错:

error: could not prepare transaction
error: failed to commit transaction (conflicting files)
package: /path/to/file exists in filesystem
Errors occurred, no packages were upgraded.

这是因为 pacman 检测到文件冲突,不会为你覆盖文件。

解决这个问题的一个安全方法是首先检查另一个包是否拥有这个文件(pacman-Qo 文件路径)。如果该文件属于另一个包,请提交错误报告。如果文件不属于另一个包,请重命名“存在于文件系统中”的文件,然后重新发出更新命令。如果一切顺利,文件可能会被删除。

你可以显式地运行 pacman -S –overwrite 要覆盖的文件模式**,强制pacman` 覆盖与 给模式匹配的文件,而不是手动重命名并在以后删除属于该包的所有文件。

提交事务失败(包无效或损坏)

/var/cache/pacman/pkg/ 中查找 .part 文件(部分下载的包),并将其删除。这通常是由在 pacman.conf 文件中使用自定义 XferCommand 引起的。

初始化事务失败(无法锁定数据库)

pacman 要修改包数据库时,例如安装包时,它会在 /var/lib/pacman/db.lck 处创建一个锁文件。这可以防止 pacman 的另一个实例同时尝试更改包数据库。

如果 pacman 在更改数据库时被中断,这个过时的锁文件可能仍然保留。如果你确定没有 pacman 实例正在运行,那么请删除锁文件。

检查进程是否持有锁定文件:

lsof /var/lib/pacman/db.lck

如果上述命令未返回任何内容,则可以删除锁文件:

rm /var/lib/pacman/db.lck

如果你发现 lsof 命令输出了使用锁文件的进程的 PID,请先杀死这个进程,然后删除锁文件。

我希望你喜欢我对 pacman 基础命令的介绍。


via: https://itsfoss.com/pacman-command/

作者:Dimitrios Savvopoulos 选题:lujun9972 译者:Chao-zhi 校对:wxy

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

微软的 VS Code 有 1400 万用户,而全球开发者才 2400 万

据统计,世界上大约有 2400 万开发者。而根据微软的数据,已经有 1400 万用户在使用微软的 VS Code,仅仅在 2020 年就增加了 500 万用户。当然,这些用户不全是专业开发者,DevOps、IT 管理、学生,甚至记者等各种职业和行业的人都在使用它。

不过,使用 VS Code 的专业开发者也很多,据微软的说法,“我们有近 200 万 Python 开发者使用 VS Code,远超过 100 万的 C++ 开发者在使用 VS Code。甚至我们的 Java 使用者也接近 100 万。”

微软开发的轻量级的、开源的 VS Code 取得了出乎意料的成功,再加上微软的 Windows Terminal、WSL 等,只能说调转枪口的微软认真做起来开源,十分可怕。

量子计算机发现 AES 等加密算法存在重大缺陷

Terra Quantum 公司拥有一支由约 80 名量子物理学家、密码学家和数学家组成的团队,其研究发现了影响对称加密密码的重大缺陷,这包括被广泛用于保护互联网上传输的数据和加密文件的安全的 AES 加密算法。其研究发现,即使是 AES 加密的最强版本,也可能被几年后可能出现的量子计算机破译。他们是在研究如何逆转哈希函数时有了这一发现的。并且,据此发现,他们开发了一种新的量子计算机无法破解的加密协议,新协议利用了一种被称为量子密钥分配的方法。

我认为,如果几年后量子计算能打破现有的主流加密算法,并可投入实际使用,整个基于这些对称和非对称加密算法建立起来的互联网安全,都岌岌可危。但是,我相信,量子计算不是摧毁互联网和信息世界的武器,也会是加强信息安全的重要盾牌。

微软将在今年 4 月用 Chromium 版本干掉原始版本的 Edge 浏览器

微软已经宣布,作为周二补丁更新的一部分,微软 Edge 的原始版本将在 4 月份从用户的 Windows 10 上被删除。微软不但夸赞了自家的 Chromium Edge,还踩了 Google Chrome 一脚,“新的 Edge 提供了内置的安全性和与微软安全生态系统的最佳互操作性,同时对 Windows 10 上的企业来说比 Chrome 浏览器更安全。”

抛弃 Edge 最积极不是用户,是微软自己。当然,原始版 Edge 也不孤单,因为当年 IE 也是这样被抛弃。

虽然从产品策略和用户体验来说,Chromium 版 Edge 都是一个好事,但是我总觉得在这个浏览器吞噬世界的时代,Chromium 取得垄断性胜利不是好事。

Zint 可以轻松生成 50 多种类型的自定义条码。

 title=

二维码是一种很好的可以向人们提供信息的方式,且没有打印的麻烦和费用。大多数人的智能手机都支持二维码扫描,无论其操作系统是什么。

你可能想使用二维码的原因有很多。也许你是一名教师,希望通过补充材料来测试你的学生,以增强学习效果,或者是一家餐厅,需要在遵守社交距离准则的同时提供菜单。我经常行走于自然小径,那里贴有树木和其他植物的标签。用二维码来补充这些小标签是一种很好的方式,它可以提供关于公园展品的额外信息,而无需花费和维护标识牌。在这些和其他情况下,二维码是非常有用的。

在互联网上搜索一个简单的、开源的方法来创建二维码时,我发现了 Zint。Zint 是一个优秀的开源 (GPLv3.0) 生成条码的解决方案。根据该项目的 GitHub 仓库:“Zint 是一套可以方便地对任何一种公共领域条形码标准的数据进行编码的程序,并允许你将这种功能集成到你自己的程序中。”

Zint 支持 50 多种类型的条形码,包括二维码(ISO 18004),你可以轻松地创建这些条形码,然后复制和粘贴到 word 文档、博客、维基和其他数字媒体中。人们可以用智能手机扫描这些二维码,快速链接到信息。

安装 Zint

Zint 适用于 Linux、macOS 和 Windows。

你可以在基于 Ubuntu 的 Linux 发行版上使用 apt 安装 Zint 命令:

$ sudo apt install zint

我还想要一个图形用户界面(GUI),所以我安装了 Zint-QT:

$ sudo apt install zint-qt

请参考手册的安装部分,了解 macOS 和 Windows 的说明。

用 Zint 生成二维码

安装好后,我启动了它,并创建了我的第一个二维码,这是一个指向 Opensource.com 的链接。

 title=

Zint 的 50 多个其他条码选项包括许多国家的邮政编码、DotCode、EAN、EAN-14 和通用产品代码 (UPC)。项目文档中包含了它可以渲染的所有代码的完整列表。

你可以将任何条形码复制为 BMP 或 SVG,或者将输出保存为你应用中所需要的任何尺寸的图像文件。这是我的 77x77 像素的二维码。

 title=

该项目维护了一份出色的用户手册,其中包含了在命令行GUI 中使用 Zint 的说明。你甚至可以在线试用 Zint。对于功能请求或错误报告,请访问网站发送电子邮件


via: https://opensource.com/article/21/2/zint-barcode-generator

作者:Don Watkins 选题:lujun9972 译者:geekpi 校对:wxy

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