2021年6月

了解更多关于这个和其他两个未被充分利用但仍然有用的 Python 特性。

 title=

这是关于 Python 3.x 首发特性系列文章的第八篇。Python 3.7 于 2018 年首次发布,尽管它已经发布了几年,但它引入的许多特性都未被充分利用,而且相当酷。下面是其中的三个。

注解推迟评估

在 Python 3.7 中,只要激活了正确的 __future__ 标志,注解在运行时就不会被评估:

from __future__ import annotations

def another_brick(wall: List[Brick], brick: Brick) -> Education:
    pass
another_brick.__annotations__
    {'wall': 'List[Brick]', 'brick': 'Brick', 'return': 'Education'}

它使递归类型(指向自己的类)和其他有趣的事情成为了可能。然而,这意味着如果你想做自己的类型分析,你需要明确地使用 ast

import ast
raw_type = another_brick.__annotations__['wall']
[parsed_type] = ast.parse(raw_type).body
subscript = parsed_type.value
f"{subscript.value.id}[{subscript.slice.id}]"
    'List[Brick]'

itertools.islice 支持 index

Python 中的序列切片长期以来一直接受各种 类 int 对象(具有 __index__() 的对象)作为有效的切片部分。然而,直到 Python 3.7,itertools.islice,即核心 Python 中对无限生成器进行切片的唯一方法,才获得了这种支持。

例如,现在可以用 numpy.short 大小的整数来切片无限生成器:

import numpy
short_1 = numpy.short(1)
short_3 = numpy.short(3)
short_1, type(short_1)
    (1, numpy.int16)
import itertools
list(itertools.islice(itertools.count(), short_1, short_3))
    [1, 2]

functools.singledispatch() 注解注册

如果你认为 singledispatch 已经很酷了,你错了。现在可以根据注解来注册了:

import attr
import math
from functools import singledispatch

@attr.s(auto_attribs=True, frozen=True)
class Circle:
    radius: float
       
@attr.s(auto_attribs=True, frozen=True)
class Square:
    side: float

@singledispatch
def get_area(shape):
    raise NotImplementedError("cannot calculate area for unknown shape",
                              shape)

@get_area.register
def _get_area_square(shape: Square):
    return shape.side ** 2

@get_area.register
def _get_area_circle(shape: Circle):
    return math.pi * (shape.radius ** 2)

get_area(Circle(1)), get_area(Square(1))
    (3.141592653589793, 1)

欢迎来到 2017 年

Python 3.7 大约是四年前发布的,但是在这个版本中首次出现的一些特性非常酷,而且没有得到充分利用。如果你还没使用,那么将它们添加到你的工具箱中。


via: https://opensource.com/article/21/5/python-37-features

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

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

Google 用自己的专用芯片取代了数百万英特尔的芯片

今年早些时候,YouTube 披露了自己设计的芯片 Argos VCU,它专门用于将视频转码成十多个版本。YouTube 称相比以前使用软件在传统服务器的转码,Argos 的视频转码芯片性能提升了 20-33 倍。相比使用英特尔 Skylake CPU 或 Nvidia T4 Tensor core GPU 的方案,VCU 能节省大量的钱。分析师估计,Google 可能已经用 VCU 替代了 400 万到 3300 万的英特尔 CPU。Google 已经在设计第二代 Argos VCU,支持 AV1、H.264 和 VP9 编解码器。

有芯片设计能力的大企业就是豪横,这种专用芯片往往能在特定领域取得非常好的效果。

openSUSE Leap 15.3 现在与 SUSE 企业版的二进制软件包完全相同

openSUSE Leap 是一个稳定版本,其核心是由与 SUSE 企业版(SLE)相同的源代码构建的。Leap 与 SLE 并不完全相同;它更像是一个超集,因为它从相同的 SLE 核心开始,并进一步增加了自己的软件包。

SUSE 说,openSUSE Leap 15.3 与以前的版本相比有一个巨大变化:它不仅是由 SLE 源代码构建的,而且其二进制包完全相同。该公司将 openSUSE 定位为用于运行和测试工作负载,可以迁移到 SLE 进行长期维护。它也适合在不需要 SLE 支持的情况下用于生产环境。

就像红帽最近对 CentOS 所做的那样,SUSE 的做法也是为了提高 SLE 的市场份额,但 SUSE 的努力对社区来说更容易接受。

美国将勒索软件攻击视为恐怖主义

美国司法部的一位高级官员表示,在 Colonial 石油管道网络遭黑客攻击以及网络犯罪分子造成的损害日益严重之后,司法部正在将勒索软件攻击的调查提升到与恐怖主义类似的优先地位。FBI 将政府对勒索软件的打击比作美国在 9/11 之后面临的情况。他补充说,FBI 已经确定了近一百种不同类型的勒索软件。美国司法部发出的备忘录称,“任何涉及加密货币交易所、僵尸网络、数字洗钱、非法在线论坛、‘防弹托管服务’和攻击反病毒服务的网络犯罪案件都需要通知司法部高级官员。”

勒索软件愈演愈烈,确实需要提高对勒索软件的重视。

6 月 2 日晚上八点,鸿蒙召开了 2.0 的发布会,发布了鸿蒙 OS,以及一大批的新品。这两天想必大家也都看到了不少。这篇文章不想讨论鸿蒙系统本身的体验层面的变化,而是将会将精力更多的投放在鸿蒙的生态发展中。

鸿蒙想要的是什么?

从 2019 年鸿蒙发布,有几个关键词就是核心,分布式、全场景、自主研发,其中自主研发比较好理解,而分布式、全场景一直是我无法理解的,直到看了发布会,我才意识到鸿蒙真正想要的是什么。

由于我近几年来,使用的都是苹果的生态,使用 Macbook Pro 办公,使用 Homepod 听歌,出门会使用 Airpods Pro 来降噪。所以,在看鸿蒙发布会的时候,我时常有一个想法:这个功能苹果生态里已经有了啊? 或者是这个功能的 UI 交互确实是新的,但核心的体验我在苹果生态中也已经体验了啊?

也正是这一刻,我悟了,鸿蒙想要的分布式、全场景,其实就是过去我在苹果生态一直体验的那些东西,不同的是,鸿蒙的分布式、全场景,是超出了苹果生态所给予我的东西。

鸿蒙的 1 + 8 + N 战略

鸿蒙的产品架构是 1+8+N,1 指的是手机,8 指的是 PC、平板、智慧屏、手表、智能音箱、车机、耳机、AR/VR,N 则是更多的生态。

对比着我们来看苹果的生态,1 指的是 iPhone,8 指的是 Macbook Pro、iPad、Apple TV、Apple Watch、Homepod、Apple Car、AirPods 以及不知道有没有的 VR/AR 产品。

截止到这一步,鸿蒙和苹果看起来都很像,那为什么我又说华为超越了苹果生态?

原因在于 8 加的 N。

在鸿蒙的描述中,N 是指更多的 IoT 设备,他们可以通过鸿蒙系统借助 4G/5G/HiLink 等方式,和核心的 8 个产品进行连接,沟通,从而提升产品的智能性,让用户真正感受到产品的智能特性。

而在苹果生态中,苹果是不做 IoT 设备的操作系统的。鸿蒙既做了手机、核心设备的操作系统,还做了嵌入式的操作系统,确实可以让 IoT 设备的操作体验,如同 8 个核心设备的体验,这一点是只制定标准,不下场做事的苹果所无法达到的

可以说,鸿蒙生态假设真的铺设起来了,体验、易用性,可能都要超过苹果生态目前能够提供给我们的

鸿蒙生态之乱象

鸿蒙作为一个看起来还不错的产品,为何近几年来饱受争议?我觉得主要是在宣传策略上的混乱。

鸿蒙系统近几年的搜索关注度

提起鸿蒙,数码圈的人往往说的是鸿蒙 OS;而互联网/科技圈的人说的往往是 OpenHarmony 操作系统。二者在宣传的过程中,往往都是被人称作是鸿蒙系统。

但实际上,鸿蒙 OS 是真正的鸿蒙 OS,OpenHarmony 仅仅是鸿蒙生态的一个基座,如果你将之与 Android 对比,便是 Android 与 AOSP 的区别。

OpenHarmony 架构图

我们真正在使用的鸿蒙系统,是一个完整的、加入了各项系统设定的操作系统,而我们所看到的源码的部分,只是一个操作系统的基座,你真正在使用的过程中,还需要做大量的修改和剪裁的版本。

不过,这样的区分是一件好事。Android 当年之所以能够盛行,AOSP 功不可没。OpenHarmony 同样承载了鸿蒙系统发扬光大的路线。

不过,OpenHarmony 本身也在宣传上有硬伤。

一直以来,OpenHarmony 都被称之为 Android 套壳,在我看来,是不完全准确的。OpenHarmony 在手机/平板/智慧屏部分,使用的是兼容 Android 的机制,而且兼容 Android 的路线也是没有问题的;但在覆盖面更广的嵌入式设备中,产生的价值的是 2012 年就开发的 LiteOS;对于一些特定的场景下,OpenHarmony 可能会使用 Linux Kernel 来完成自己的工作。OpenHarmony 不是 Android 套壳,而是基于 Android /LiteOS/Linux Kernel 的土壤所诞生出来的操作系统。

操作系统的研发一直以来都不是技术问题,而是生态问题,用户不太会裸用操作系统提供的基础功能,能够留下用户的,必然是操作系统之上的应用生态,对于 OpenHarmony 这样的一个后来者,一个最为简单高效获得生态的方式,就是与原有生态的兼容,所以 OpenHarmony 兼容 Android 生态是在我意料之中的事情,倘若鸿蒙真的将整个系统完全重写,那我反而不看好 OpenHarmony。

相比于说 OpenHarmony 套壳 Android,我更倾向于 OpenHarmony 编写了一个抽象层,磨平了 LiteOS 和 Android 的系统 API,从而使得一些功能特性可以更加容易的在两种系统之上来实现。而这些,也正是鸿蒙所宣传的 1 + 8 + N战略下的核心体验的由来。

但不得不说,在宣传上,OpenHarmony 做的很一般,甚至可能没有起到好的作用,而是一个坏的作用。

鸿蒙生态的未来

说完了鸿蒙想要的东西和鸿蒙生态的乱象,最后,我想聊一聊关于鸿蒙的未来。

鸿蒙生态看起来非常的不错,但,能否达到所预想的水平,又是另外一个问题,对于鸿蒙来说,前路依然坎坷。

在国内方面,鸿蒙如果希望进行推广,就必须要考虑合作伙伴的问题,鸿蒙生态的建设不仅仅是华为的事情,华为可以完成 1+8 的建设,可后面的 N,是需要无数的中小 IoT 设备生产厂商共同建设而来的。

但,国内的厂商可能要面临的问题就是,面对曾经的对手,是否还要继续合作?如果合作了,未来是否会被华为卡脖子?华为又是否会在 OpenHarmony 中为自家系统添加单独的优化?这些问题都会让国内的厂商在面临选择时产生困惑。

此外,国内的厂商在完成了接入后, 鸿蒙想要扩大生态范围,就必然需要进行出海,出海时就要正面与 Android、iOS 所构建的生态进行竞争,在海外生态不足的情况下,如何取得竞争的胜利,也是一个需要研究和探讨的话题。

不过,说了这么多困难,我还是想说,鸿蒙看起来真的很好,或许,有朝一日我会面临这样的选择“花 15000 元,获得完整的苹果生态体验;花 10000 元,获得完整的鸿蒙生态体验,可以实现苹果生态 80% 甚至是 120% 的体验”,你会怎么选?

鸿蒙之路,道阻且长。

Quarkus 受益于 20 多年的 Java 开发历史,使开发应用变得更快、更容易。

 title=

在云上发布服务部分是为了通过简单可靠的方式为用户和开发者提供对这些服务的便捷访问。与在线应用对接的最流行的方法之一是通过应用编程接口(API),这是一个花哨的术语,意味着你允许用户通过代码与你的应用进行互动。

API 的概念很重要,因为它可以帮助其他人在你的应用基础上进行开发。假设你设计了一个网站,当用户点击一个按钮时返回一个随机数字。通常情况下,这需要用户打开你的网站并点击一个按钮。网站可能是有用的,但只是在一定程度上。如果你包含一个 API,用户可以直接向你的服务器发送一个信号,要求一个随机数,或者他们可以自己编程,“调用”你的服务器来获取一个数字,而不需要点击或手动交互。开发者可以使用你的随机数作为游戏的数值,或作为密码生成器的一部分,或其他任何开发者需要随机数的地方(总是有的)。一个好的 API 可以解锁你的应用,让其他人使用你的代码结果,本质上,将你在网络上的工作转变为一个软件库。

什么是 Quarkus?

Quarkus 是一个原生 Kubernetes Java 栈,为无服务器应用交付而设计。与有 20 年历史的 Java 相比,Quarkus 相对年轻,但受益于这 20 年的发展,用该项目的话说,是 “超音速的亚原子 Java”。可能没有人知道这句话的确切含义,但你肯定可以通过一下午使用 Quarkus 来感受到它对你的开发生活的意义。

Quarkus 让你用一个有用的 API 开发应用,几乎不需要配置,也不用担心启动一个复杂的环境。你不需要学习关于云计算或边缘计算的所有知识,就可以学习并擅长使用 Quarkus。了解 Quarkus 可以使你的开发更快,它可以帮助你为现代计算机网络制作灵活的应用。

下面是我们最近的一些涉及 Quarkus 的文章。

开始使用 Quarkus

在 Saumya Singh 的《如何创建你的第一个 Quarkus 应用》中,你可以了解 Quarkus 和无服务器交付的好处,并在大约 10 分钟内创建了一个简单的演示应用。事实上,10 分钟以内更准确,因为在 Maven 和 Quarkus 之间,几乎没有你想象中的那么多设置。它几乎感觉不到像 Java 一样的坏处,而感觉像 Java 一样好。

边缘开发

Linux 是创建物联网 (IoT) 边缘应用 的一个流行平台。这有很多原因,包括安全性、编程语言和开发模型的广泛选择以及协议支持。不出所料,Quarkus 对物联网的处理非常好。Quarkus 的内存效率高,启动快,并且有快速的运行时,所以它不仅是物联网的可行解决方案,而且是理想的解决方案。你可以通过 Daniel Oh 的《在 Linux 上使用开源的边缘开发入门》来开始使用 Quarkus 和物联网。

Quarkus 和 VS Code

当你处理代码时,一个集成开发环境(IDE)会有很大的不同。微软的开源 VS Code(或无品牌标志的 VSCodium)是一个伪装成 IDE 的流行文本编辑器(或者说是伪装成文本编辑器的 IDE?),它有很多扩展,可以使它成为几乎任何编程语言的专门环境。如果你正在使用或考虑使用 VS Code,那么请阅读 Daniel Oh 的《Quarkus in VS Code》使用指南,了解一些关于 Maven、Quarkus 和 VS Code 如何协同工作的专业技巧。

获得 Quarkus

使用 Quarkus 开发,可以像 Python 一样简单地设置环境,但它为你提供了强大的 Java 语言及其众多的库。它是进入云计算、Knative 和边缘计算的一个重要入口。获取 Quarkus 并开始编码。


via: https://opensource.com/article/21/5/quarkus

作者:Alan Smithee 选题:lujun9972 译者:geekpi 校对:wxy

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

诺顿销售带有以太坊挖矿功能的杀毒软件

NortonLifeLock 开始为其 Norton 360 安全套件提供以太坊挖矿功能了。该功能已被添加到部分客户的安装中,预计在未来几周内将对所有 Norton 360 客户开放。

诺顿认为,多年来,许多加密矿工不得不在挖掘加密货币的过程中承担风险,为了运行挖矿软件而禁用他们的安全机制,并允许在他们的机器上运行未经审核的代码,这些代码可能会从他们的收入中窃取加密货币,甚至植入勒索软件。甚至该公司表示,更好的方法是让其计算机安全软件在运行时挖掘以太坊,然后将结果存储在诺顿云中,以避免本地硬盘发生故障而造成损失。

好像有点道理?而且挖到的以太坊不但可以用来支付反病毒软件的费用,而且没准还能挣钱?但是我总觉得这个思路有点清奇。

Stack Overflow 以 18 亿美元出售给腾讯的最大股东

著名编程问答网站 Stack Overflow 宣布以 18 亿美元出售给 Prosus。Stack Overflow 创办于 2008 年,每月能吸引超过 1 亿访问者。Stack Overflow 的收入主要来自企业推广其产品和招聘员工。

Prosus 是腾讯大股东 Naspers 旗下的投资部门,Naspers 在 2001 年以 3400 万美元控制了腾讯 28.9% 的股份。Prosus 在 4 月份以 146 亿美元的价格出售了其在腾讯的一小部分股权,现在还持有超过 2000 亿美元的腾讯股份。收购 Stack Overflow 是该公司至今最大的交易之一。

看来技术社区积累下来的知识和技术用户是真金白银啊。

移动版 UC 浏览器被曝收集用户信息

外媒报道,安全研究人员发现在安卓和 iOS 版本的 UC 浏览器上,用户的 IP 地址及其访问的每个网站,无论他们是否处于隐身模式,都会被发送到 UCWeb 拥有的服务器。

安全研究人员通过对他发现的一些被送回服务器的加密数据进行逆向工程而发现了这个问题。一旦密钥被破解,他就能看到每次访问的网站被传回 UCWeb。而在苹果的 iOS 系统上,他甚至不需要对加密进行逆向工程,因为设备上实际上没有加密(尽管在传输过程中是加密的)。

安全研究人员表示,他从未见过其它主流浏览器会像 UC 浏览器这样。

下面的剧本我都想好了,“为失误”而道歉。

探索 os.fspath 和其他两个未被充分利用但仍然有用的 Python 特性。

 title=

这是 Python 3.x 首发特性系列文章中的第七篇。Python 3.6 首次发布于 2016 年,尽管它已经发布了一段时间,但它引入的许多特性都没有得到充分利用,而且相当酷。下面是其中的三个。

分隔数字常数

快回答哪个更大,10000000 还是 200000?你在看代码时能正确回答吗?根据当地的习惯,在写作中,你会用 10,000,000 或 10.000.000 来表示第一个数字。问题是,Python 使用逗号和句号是用于其他地方。

幸运的是,从 Python 3.6 开始,你可以使用下划线来分隔数字。这在代码中和使用字符串的 int() 转换器时都可以使用:

import math
math.log(10_000_000) / math.log(10)
    7.0
math.log(int("10_000_000")) / math.log(10)
    7.0

Tau 是对的

45 度角用弧度表示是多少?一个正确的答案是 π/4,但这有点难记。记住 45 度角是一个八分之一的转角要容易得多。正如 Tau Manifesto 所解释的,,称为 Τ,是一个更自然的常数。

在 Python 3.6 及以后的版本中,你的数学代码可以使用更直观的常数:

print("Tan of an eighth turn should be 1, got", round(math.tan(math.tau/8), 2))
print("Cos of an sixth turn should be 1/2, got", round(math.cos(math.tau/6), 2))
print("Sin of a quarter turn should be 1, go", round(math.sin(math.tau/4), 2))
    Tan of an eighth turn should be 1, got 1.0
    Cos of an sixth turn should be 1/2, got 0.5
    Sin of a quarter turn should be 1, go 1.0

os.fspath

从 Python 3.6 开始,有一个神奇的方法表示“转换为文件系统路径”。当给定一个 strbytes 时,它返回输入。

对于所有类型的对象,它寻找 __fspath__ 方法并调用它。这允许传递的对象是“带有元数据的文件名”。

open()stat 这样的普通函数仍然能够使用它们,只要 __fspath__ 返回正确的东西。

例如,这里有一个函数将一些数据写入一个文件,然后检查其大小。它还将文件名记录到标准输出,以便追踪:

def write_and_test(filename):
    print("writing into", filename)
    with open(filename, "w") as fpout:
        fpout.write("hello")
    print("size of", filename, "is", os.path.getsize(filename))

你可以用你期望的方式来调用它,用一个字符串作为文件名:

write_and_test("plain.txt")
    writing into plain.txt
    size of plain.txt is 5

然而,可以定义一个新的类,为文件名的字符串表示法添加信息。这样可以使日志记录更加详细,而不改变原来的功能:

class DocumentedFileName:
    def __init__(self, fname, why):
        self.fname = fname
        self.why = why
    def __fspath__(self):
        return self.fname
    def __repr__(self):
        return f"DocumentedFileName(fname={self.fname!r}, why={self.why!r})"

DocumentedFileName 实例作为输入运行该函数,允许 openos.getsize 函数继续工作,同时增强日志:

write_and_test(DocumentedFileName("documented.txt", "because it's fun"))
    writing into DocumentedFileName(fname='documented.txt', why="because it's fun")
    size of DocumentedFileName(fname='documented.txt', why="because it's fun") is 5

欢迎来到 2016 年

Python 3.6 是在五年前发布的,但是在这个版本中首次出现的一些特性非常酷,而且没有得到充分利用。如果你还没使用,那么将他们添加到你的工具箱中。


via: https://opensource.com/article/21/5/python-36-features

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

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