2021年7月

“编程难”这一说法是有害的

在《ACM 通讯》上发表的一篇文章认为,人们普遍认为“编程本身很难”,这一点缺乏足够的证据。该文章的作者是一位计算机科学教授,他说,“为什么做这样一个笼统的、明确的声明似乎是常规的、可接受的,可以说是流行的?为什么这些声明往往不附带支持性的证据?有什么经验性的证据可以表明,广义上的编程本质上是困难的,或者说比数学中的微积分等更难?”作者认为这种认识会产生不良的影响,可能会产生严重的意外后果,包括不公平的做法。

那么你觉得编程难不难?或者说,比什么事情更难?

美国希望通过加密货币征收 280 亿美元税收

据报道,美国国会的准备投票的一项基础设施法案中,提议对交易所和其他各方适用新的信息报告要求,任何转让数字资产的经纪人都需要根据修改后的信息报告制度提交报告。现行规则要求企业报告超过一千美元的现金支付,包括加密货币在内的数字资产也被添加到其中,这可能会使该法案的“支付费用”高达约 280 亿美元。

这才叫敛财有术,正视它,规范它,并从中受益。

恶意程序开发者转向新兴编程语言

根据黑莓研究人员公布的一份报告,恶意程序开发者转向新兴编程语言去躲避检测或解决开发流程中的难点。Go 语言吸引了 APT 组织和商业恶意程序开发者的极大兴趣,使用 Go 语言编写的恶意程序样本日益常见。另一种被用于编写恶意程序的新兴语言是 D 语言。恶意程序开发者在利用新技术更新技能方面是很擅长的。

经济利益驱动的恶意软件开发者才会更积极拥抱新技术。

安卓系统是建立在高度定制的 Linux 内核之上的。因此,使用安卓模拟器在 Linux 上运行移动应用是有意义的。

虽然这不是在 Linux 机器上你可以做的新鲜事,但在 Windows 于 2021 年推出运行安卓应用的能力后,它是一个更需要的功能。

不仅仅限于使用应用,一些安卓模拟器也可以在开发和测试中派上用场。

因此,我总结了一份最好的模拟器清单,你可以用它来测试或在 Linux 上运行安卓应用/游戏。

1、Anbox

Anbox 是一个相当流行的模拟器,可以让 Linux 用户运行 Android 应用。可能深度 Linux 正是利用它使得开箱即可运行安卓应用。

它使用一个容器将安卓操作系统与主机隔离,这也让它们可以使用最新的安卓版本。

运行的安卓应用不能直接访问你的硬件,这是一个很好的安全决定。

与这里的其他一些选择不同,Anbox 在技术上不需要仿真层来使安卓系统工作。换句话说,它在你的 Linux 系统上最接近于原生的安卓体验。

由于这个原因,它可能不是最简单的选择。你不能只使用谷歌应用商店来安装应用,你需要使用安卓调试桥(ADB)。你只需要一个应用的 APK 文件就可以安装和使用它。

2、Genymotion

Genymotion 是一个为测试和开发量身定做的令人印象深刻的解决方案。

它不是一个自由开源的选择。它们通过云端或独立于 Android Studio 的桌面客户端,提供虚拟的安卓体验作为服务。

你可以模拟各种硬件配置和安卓版本,创建一个虚拟设备进行测试。它还让你有能力扩大规模,并有多个安卓虚拟设备运行,进行广泛的测试。

它可以帮助你测试文件上传在你的应用中如何工作,电池影响、性能、内存等等。

虽然它是一个主要针对专业人士的高级解决方案,但它确实支持最新的 Linux 发行版,包括 Ubuntu 20.04 LTS。

3、Android-x86

Android x86 是一个开源项目,使得安卓可以在 PC 上运行,并支持 32 位。

你可以选择在你的 Linux 系统上使用虚拟机管理器来安装它,或者直接在你的 PC 上试用它。

如果你需要安装,可以查看官方的 安装说明

与其他一些选择不同,它是一个简单的试图在 PC 上工作的模拟器,没有花哨的功能。

4、Android Studio (虚拟设备)

Android Studio 是一个用于开发和测试的完整工具。幸运的是,由于对 Linux 的支持,如果你需要的话,你可以用它来模拟安卓的体验进行实验。

你只需要创建一个安卓虚拟设备(AVD),你可以对其进行配置,然后作为模拟器进行模拟。

也有很大的机会能找到对一些最新的智能手机、电视和智能手表的支持。

它需要一定的学习曲线才能上手,但它是免费的,而且是完全开源的。

5、ARChon

一个有趣的解决方案,这是一个你可以在 Linux 和任何其他平台上使用的安卓模拟器。

它有助于在 Chrome OS 上运行安卓应用,或者在任何操作系统上使用 Chrome 浏览器。与其他一些不同的是,你可能不会得到完整的安卓体验,而只是能够运行安卓应用。

你只需解压运行时,并将其加载到 Chrome 扩展中。接下来,下载 APK 文件到上面来添加你想使用的应用。

6、Bliss OS

Bliss OS 是另一个开源项目,与 Android x86 类似,旨在使安卓在 PC 上运行。

与 Android x86 不同的是,它通过支持 32 位和 64 位架构提供了更多的兼容性选择。此外,你可以根据你的处理器下载兼容文件。

它有积极的维护,支持市场上最新的安卓版本。

总结

虽然你会能找到几个可用于 Linux 的安卓模拟器,但它们可能无法取代全面的智能手机体验。

每个模拟器都有一系列的功能和特定目的。请选择你需要的那个!

你试过安卓模拟器么?你在 Linux 中使用的最喜欢的模拟器是什么?欢迎在下面的评论中让我知道。


via: https://itsfoss.com/android-emulators-linux/

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

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

用朴素贝叶斯分类器解决现实世界里的机器学习问题。

 title=

朴素贝叶斯 Naïve Bayes 是一种分类技术,它是许多分类器建模算法的基础。基于朴素贝叶斯的分类器是简单、快速和易用的机器学习技术之一,而且在现实世界的应用中很有效。

朴素贝叶斯是从 贝叶斯定理 Bayes' theorem 发展来的。贝叶斯定理由 18 世纪的统计学家 托马斯·贝叶斯 提出,它根据与一个事件相关联的其他条件来计算该事件发生的概率。比如,帕金森氏病 患者通常嗓音会发生变化,因此嗓音变化就是与预测帕金森氏病相关联的症状。贝叶斯定理提供了计算目标事件发生概率的方法,而朴素贝叶斯是对该方法的推广和简化。

解决一个现实世界里的问题

这篇文章展示了朴素贝叶斯分类器解决现实世界问题(相对于完整的商业级应用)的能力。我会假设你对机器学习有基本的了解,所以文章里会跳过一些与机器学习预测不大相关的步骤,比如 数据打乱 date shuffling 数据切片 data splitting 。如果你是机器学习方面的新手或者需要一个进修课程,请查看 《An introduction to machine learning today》 和 《Getting started with open source machine learning》。

朴素贝叶斯分类器是 有监督的 supervised 、属于 生成模型 generative 的、非线性的、属于 参数模型 parametric 的和 基于概率的 probabilistic

在这篇文章里,我会演示如何用朴素贝叶斯预测帕金森氏病。需要用到的数据集来自 UCI 机器学习库。这个数据集包含许多语音信号的指标,用于计算患帕金森氏病的可能性;在这个例子里我们将使用这些指标中的前 8 个:

  • MDVP:Fo(Hz):平均声带基频
  • MDVP:Fhi(Hz):最高声带基频
  • MDVP:Flo(Hz):最低声带基频
  • MDVP:Jitter(%)MDVP:Jitter(Abs)MDVP:RAPMDVP:PPQJitter:DDP:5 个衡量声带基频变化的指标

这个例子里用到的数据集,可以在我的 GitHub 仓库 里找到。数据集已经事先做了打乱和切片。

用 Python 实现机器学习

接下来我会用 Python 来解决这个问题。我用的软件是:

  • Python 3.8.2
  • Pandas 1.1.1
  • scikit-learn 0.22.2.post1

Python 有多个朴素贝叶斯分类器的实现,都是开源的,包括:

  • NLTK Naïve Bayes:基于标准的朴素贝叶斯算法,用于文本分类
  • NLTK Positive Naïve Bayes:NLTK Naïve Bayes 的变体,用于对只标注了一部分的训练集进行二分类
  • Scikit-learn Gaussian Naïve Bayes:提供了部分拟合方法来支持数据流或很大的数据集(LCTT 译注:它们可能无法一次性导入内存,用部分拟合可以动态地增加数据)
  • Scikit-learn Multinomial Naïve Bayes:针对离散型特征、实例计数、频率等作了优化
  • Scikit-learn Bernoulli Naïve Bayes:用于各个特征都是二元变量/布尔特征的情况

在这个例子里我将使用 sklearn Gaussian Naive Bayes

我的 Python 实现在 naive_bayes_parkinsons.py 里,如下所示:

import pandas as pd

# x_rows 是我们所使用的 8 个特征的列名
x_rows=['MDVP:Fo(Hz)','MDVP:Fhi(Hz)','MDVP:Flo(Hz)',
        'MDVP:Jitter(%)','MDVP:Jitter(Abs)','MDVP:RAP','MDVP:PPQ','Jitter:DDP']
y_rows=['status'] # y_rows 是类别的列名,若患病,值为 1,若不患病,值为 0

# 训练

# 读取训练数据
train_data = pd.read_csv('parkinsons/Data_Parkinsons_TRAIN.csv')
train_x = train_data[x_rows]
train_y = train_data[y_rows]
print("train_x:\n", train_x)
print("train_y:\n", train_y)

# 导入 sklearn Gaussian Naive Bayes,然后进行对训练数据进行拟合
from sklearn.naive_bayes import GaussianNB

gnb = GaussianNB()
gnb.fit(train_x, train_y)

# 对训练数据进行预测
predict_train = gnb.predict(train_x)
print('Prediction on train data:', predict_train)

# 在训练数据上的准确率
from sklearn.metrics import accuracy_score
accuracy_train = accuracy_score(train_y, predict_train)
print('Accuray score on train data:', accuracy_train)

# 测试

# 读取测试数据
test_data = pd.read_csv('parkinsons/Data_Parkinsons_TEST.csv')
test_x = test_data[x_rows]
test_y = test_data[y_rows]

# 对测试数据进行预测
predict_test = gnb.predict(test_x)
print('Prediction on test data:', predict_test)

# 在测试数据上的准确率
accuracy_test = accuracy_score(test_y, predict_test)
print('Accuray score on test data:', accuracy_train)

运行这个 Python 脚本:

$ python naive_bayes_parkinsons.py

train_x:
      MDVP:Fo(Hz)  MDVP:Fhi(Hz) ...  MDVP:RAP  MDVP:PPQ  Jitter:DDP
0        152.125       161.469  ...   0.00191   0.00226     0.00574
1        120.080       139.710  ...   0.00180   0.00220     0.00540
2        122.400       148.650  ...   0.00465   0.00696     0.01394
3        237.323       243.709  ...   0.00173   0.00159     0.00519
..           ...           ...           ...  ...       ...       ...        
155      138.190       203.522  ...   0.00406   0.00398     0.01218

[156 rows x 8 columns]

train_y:
      status
0         1
1         1
2         1
3         0
..      ...
155       1

[156 rows x 1 columns]

Prediction on train data: [1 1 1 0 ... 1]
Accuracy score on train data: 0.6666666666666666

Prediction on test data: [1 1 1 1 ... 1
 1 1]
Accuracy score on test data: 0.6666666666666666

在训练集和测试集上的准确率都是 67%。它的性能还可以进一步优化。你想尝试一下吗?你可以在下面的评论区给出你的方法。

背后原理

朴素贝叶斯分类器从贝叶斯定理发展来的。贝叶斯定理用于计算条件概率,或者说贝叶斯定理用于计算当与一个事件相关联的其他事件发生时,该事件发生的概率。简而言之,它解决了这个问题:如果我们已经知道事件 x 发生在事件 y 之前的概率,那么当事件 x 再次发生时,事件 y 发生的概率是多少? 贝叶斯定理用一个先验的预测值来逐渐逼近一个最终的 后验概率。贝叶斯定理有一个基本假设,就是所有的参数重要性相同(LCTT 译注:即相互独立)。

贝叶斯计算主要包括以下步骤:

  1. 计算总的先验概率:
    P(患病)P(患病) 和 P(不患病)P(不患病)
  2. 计算 8 种指标各自是某个值时的后验概率 (value1,...,value8 分别是 MDVP:Fo(Hz),...,Jitter:DDP 的取值):
    P(value1,\ldots,value8\ |\ 患病)P(value1,…,value8 ∣ 患病)
    P(value1,\ldots,value8\ |\ 不患病)P(value1,…,value8 ∣ 不患病)
  3. 将第 1 步和第 2 步的结果相乘,最终得到患病和不患病的后验概率:
    P(患病\ |\ value1,\ldots,value8) \propto P(患病) \times P(value1,\ldots,value8\ |\ 患病)P(患病 ∣ value1,…,value8)∝P(患病)×P(value1,…,value8 ∣ 患病)
    P(不患病\ |\ value1,\ldots,value8) \propto P(不患病) \times P(value1,\ldots,value8\ |\ 不患病)P(不患病 ∣ value1,…,value8)∝P(不患病)×P(value1,…,value8 ∣ 不患病)

上面第 2 步的计算非常复杂,朴素贝叶斯将它作了简化:

  1. 计算总的先验概率:
    P(患病)P(患病) 和 P(不患病)P(不患病)
  2. 对 8 种指标里的每个指标,计算其取某个值时的后验概率:
    P(value1\ |\ 患病),\ldots,P(value8\ |\ 患病)P(value1 ∣ 患病),…,P(value8 ∣ 患病)
    P(value1\ |\ 不患病),\ldots,P(value8\ |\ 不患病)P(value1 ∣ 不患病),…,P(value8 ∣ 不患病)
  3. 将第 1 步和第 2 步的结果相乘,最终得到患病和不患病的后验概率:
    P(患病\ |\ value1,\ldots,value8) \propto P(患病) \times P(value1\ |\ 患病) \times \ldots \times P(value8\ |\ 患病)P(患病 ∣ value1,…,value8)∝P(患病)×P(value1 ∣ 患病)×…×P(value8 ∣ 患病)
    P(不患病\ |\ value1,\ldots,value8) \propto P(不患病) \times P(value1\ |\ 不患病) \times \ldots \times P(value8\ |\ 不患病)P(不患病 ∣ value1,…,value8)∝P(不患病)×P(value1 ∣ 不患病)×…×P(value8 ∣ 不患病)

这只是一个很初步的解释,还有很多其他因素需要考虑,比如数据类型的差异,稀疏数据,数据可能有缺失值等。

超参数

朴素贝叶斯作为一个简单直接的算法,不需要超参数。然而,有的版本的朴素贝叶斯实现可能提供一些高级特性(比如超参数)。比如,GaussianNB 就有 2 个超参数:

  • priors:先验概率,可以事先指定,这样就不必让算法从数据中计算才能得出。
  • var\_smoothing:考虑数据的分布情况,当数据不满足标准的高斯分布时,这个超参数会发挥作用。

损失函数

为了坚持简单的原则,朴素贝叶斯使用 0-1 损失函数。如果预测结果与期望的输出相匹配,损失值为 0,否则为 1。

优缺点

优点:朴素贝叶斯是最简单、最快速的算法之一。
优点:在数据量较少时,用朴素贝叶斯仍可作出可靠的预测。
缺点:朴素贝叶斯的预测只是估计值,并不准确。它胜在速度而不是准确度。
缺点:朴素贝叶斯有一个基本假设,就是所有特征相互独立,但现实情况并不总是如此。

从本质上说,朴素贝叶斯是贝叶斯定理的推广。它是最简单最快速的机器学习算法之一,用来进行简单和快速的训练和预测。朴素贝叶斯提供了足够好、比较准确的预测。朴素贝叶斯假设预测特征之间是相互独立的。已经有许多朴素贝叶斯的开源的实现,它们的特性甚至超过了贝叶斯算法的实现。


via: https://opensource.com/article/21/1/machine-learning-python

作者:Girish Managoli 选题:lujun9972 译者:tanloong 校对:wxy

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

借助终端上的 XML 工具包 XMLStarlet,你就是 XML 之星。

 title=

学习解析 XML 通常被认为是一件复杂的事情,但它不一定是这样。XML 是高度严格结构化的,所以也是相对来说可预测的。也有许多其他工具可以帮助你使这项工作易于管理。

我最喜欢的 XML 实用程序之一是 XMLStarlet,这是一个用于终端的 XML 工具包,借助这个 XML 工具包,你可以验证、解析、编辑、格式化和转换 XML 数据。XMLStarLet 是个相对较小的命令,但浏览 XML 却充满潜力,因此本文演示了如何使用它来查询 XML 数据。

安装

XMLStarLet 默认安装在 CentOS、Fedora,和许多其他现代 Linux 发行版上,所以你可以打开终端,输入 xmlstarlet 来访问它。如果 XMLStarLet 还没有被安装,你的操作系统则会为你安装它。

或者,你可以用包管理器安装 xmlstarlet

$ sudo dnf install xmlstarlet

在 macOS 上,可以使用 MacPortsHomebrew。在 Windows 上,可以使用 Chocolatey

如果都失败了,你可以从 Sourceforge 上的源代码 手动安装它。

用 XMLStarlet 解析 XML

有许多工具可以帮助解析和转换 XML 数据,包括允许你 编写自己的解析器 的软件库,和复杂的命令,如 fopxsltproc。不过有时你不需要处理 XML 数据;你只需要一个方便的方法从 XML 数据中来提取、更新或验证重要数据。对于随手的 XML 交互,我使用 xmlstarlet,这是常见的处理 XML任务的一个典型的“瑞士军刀”式应用。通过运行 --help 命令,你可以看到它提供哪些选项:

$ xmlstarlet --help
Usage: xmlstarlet [<options>] <command> [<cmd-options>]
where <command> is one of:
  ed    (or edit)      - Edit/Update XML document(s)
  sel   (or select)    - Select data or query XML document(s) (XPATH, etc)
  tr    (or transform) - Transform XML document(s) using XSLT
  val   (or validate)  - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
  fo    (or format)    - Format XML document(s)
  el    (or elements)  - Display element structure of XML document
  c14n  (or canonic)   - XML canonicalization
  ls    (or list)      - List directory as XML
[...]

你可以通过在这些子命令的末尾附加 -help 来获得进一步的帮助:

$ xmlstarlet sel --help
  -Q or --quiet             - do not write anything to standard output.
  -C or --comp              - display generated XSLT
  -R or --root              - print root element &lt;xsl-select&gt;
  -T or --text              - output is text (default is XML)
  -I or --indent            - indent output
[...]

用 sel 命令选择数据

可以使用 xmlstarlet select(简称 sel)命令查看 XML 格式的数据。下面是一个简单的 XML 文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xml>
  <os>
   <linux>
    <distribution>
      <name>Fedora</name>
      <release>7</release>
      <codename>Moonshine</codename>
      <spins>
        <name>Live</name>
        <name>Fedora</name>
        <name>Everything</name>
      </spins>
    </distribution>

    <distribution>
      <name>Fedora Core</name>
      <release>6</release>
      <codename>Zod</codename>
      <spins></spins>
    </distribution>
   </linux>
  </os>    
</xml>

在 XML 文件中查找数据时,你的第一个任务是关注要探索的节点。如果知道节点的路径,请使用 -value of 选项指定完整路径。你越早浏览 文档对象模型(DOM)树,就可以看到更多信息:

$ xmlstarlet select --template \
  --value-of /xml/os/linux/distribution \
  --nl myfile.xml
      Fedora
      7
      Moonshine
     
        Live
        Fedora
        Everything     
     
      Fedora Core
      6
      Zod

--nl 代表“新的一行”,它插入大量的空白,以确保在输入结果后,终端在新的一行显示。我已经删除了样本输出中的一些多余空间。

通过进一步深入 DOM 树来凝聚关注点:

$ xmlstarlet select --template \
  --value-of /xml/os/linux/distribution/name \
  --nl myfile.xml
Fedora
Fedora Core

条件选择

用于导航和解析 XML 的最强大工具之一被称为 XPath。它规范了 XML 搜索中使用的语法,并从 XML 库调用函数。XMLStarlet 能够解析 XPath 表达式,因此可以使用 XPath 函数来有条件的进行选择。XPath 具有丰富的函数,由 W3C 提供了详细文档,但我觉得 Mozilla 的 XPath 文档 更简洁。

可以使用方括号作为测试函数,将元素的内容与某个值进行比较。下面是对 <name> 元素的值的测试,它仅返回与特定匹配相关联的版本号。

想象一下,示例 XML 文件包含以 1 开头的所有 Fedora 版本。要查看与旧名称 “Fedora Core” 关联的所有版本号(该项目从版本 7 开始删除了名称中的 “Core”),请执行以下操作:

$ xmlstarlet sel --template \
  --value-of '/xml/os/linux/distribution[name = "Fedora Core"]/release' \
  --nl myfile.xml
6
5
4
3
2
1

通过将路径的 --value-of 更改为 /xml/os/linux/distribution[name=“Fedora Core”]/codename,你便可以查看这些版本的所有代号。

匹配路径和获取目标值

将 XML 标记视为节点的一个好处是,一旦找到节点,就可以将其视为当前的数据的“目录”。它不是一个真正的目录,至少不是文件系统意义上的目录,但它是一个可以查询的数据集合。为了帮助你将目标和“里面”的数据分开,XMLStarlet 把你试图用 --match 选项匹配的内容和用 --value-of 选项匹配的数据值进行了区分。

假设你知道 <spin> 节点包含几个元素。这就是你的目标节点。一旦到了这里,就可以使用 --value-of 指定想要哪个元素的值。要查看所有元素,可以使用点(.)来代表当前位置:

$ xmlstarlet sel --template \
  --match '/xml/os/linux/distribution/spin' \
  --value-of '.' --nl myfile.xml \
Live
Fedora
Everything

与浏览 DOM 一样,可以使用 XPath 表达式来限制返回数据的范围。在本例中,我使用 last() 函数来检索 spin 节点中的最后一个元素:

$ xmlstarlet select --template \
  --match '/xml/os/linux/distribution/spin' \
  --value-of '*[last()]' --nl myfile.xml
Everything

在本例中,我使用 position() 函数选择 spin 节点中的特定元素:

$ xmlstarlet select --template \
  --match '/xml/os/linux/distribution/spin' \
  --value-of '*[position() = 2]' --nl myfile.xml
Fedora

--match--value 选项可以重叠,因此如何将它们一起使用取决于你自己。对于示例 XML,这两个表达式执行的是相同的操作:

$ xmlstarlet select  --template \
  --match '/xml/os/linux/distribution/spin' \
  --value-of '.' \
  --nl myfile.xml
Live
Fedora
Everything     

$ xmlstarlet select --template \
  --match '/xml/os/linux/distribution' \
  --value-of 'spin' \
  --nl myfile.xml
Live
Fedora
Everything

熟悉 XML

XML 有时看起来过于冗长和笨拙,但为与之交互和构建的工具却总是让我吃惊。如果你想要好好使用 XML,那么 XMLStarlet 可能是一个很好的切入点。下次要打开 XML 文件查看其结构化数据时,请尝试使用 XMLStarlet,看看是否可以查询这些数据。当你对 XML 越熟悉时,它就越能作为一种健壮灵活的数据格式而为你服务。


via: https://opensource.com/article/21/7/parse-xml-linux

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

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

谷歌宣布新的游戏化漏洞赏金平台

谷歌的漏洞奖励计划(VRP)共发现 11055 个漏洞,奖励了 2022 名研究人员,总奖励金额近 3000 万美元,并有近 20 名漏洞猎人加入了谷歌 VRP 团队。为了纪念该计划的 10 周年,他们宣布了一个新的平台:bughunters.google.com,这个新网站将谷歌所有的 VRP(谷歌、安卓、滥用、Chrome 和 Play 商店)更紧密地联系在一起。该平台将具有游戏化功能,提供更多互动或竞争的机会。将有每个国家的排行榜,并有机会获得特定错误的奖励或徽章。

加入游戏化元素后,真成了赏金猎人打怪模式了。

中国 IPv6 活跃用户数已达网民半数

网信办在回答记者问时提到:截至 2021 年 5 月,我国 IPv6 地址拥有量达到 59030 块(/32),位居世界第一,我国 IPv6 活跃用户数达 5.28 亿,占互联网网民总数的 53.39%。

按网信办《通知》要求,到 2023 年末,IPv6 活跃用户数达到 7 亿,物联网 IPv6 连接数达到 2 亿。到 2025 年末,IPv6 活跃用户数达到 8 亿,物联网 IPv6 连接数达到 4 亿。之后再用五年左右时间,完成向 IPv6 单栈的演进过渡。

在 IPv4 地址得不到满足的情况下,转而拥抱 IPv6 反而走在了其它 IPv4 富裕国家前面。

微软新提案让 Chrome 页面加载速度更快

在一个新的 Chromium 提案中,微软正通过 chrome://protocol 为获取的脚本开发新的“代码缓存”。在启用之后,能提高 Chrome 在 Windows、Linux、macOS 和其他桌面平台上的页面加载速度。在加载和执行一个脚本后,V8 可以将为该脚本生成的解释器字节码序列化。之后,如果 Blink 告诉 V8 再次运行相同的脚本,并提供以前的序列化字节码,那么 V8 可以跳过最初的解析步骤,脚本运行得更快。这对于页面加载时间来说非常重要。在使用新功能之后,微软已经观察到在新标签页上首次绘制内容的时间减少了 11%-20%。

自从微软使用 Chromium 作为 Edge 内核之后,Chromium 的改进速度就明显加快了。

满足日常需求的重要应用之一是 Web 浏览器。这是因为上网是大多数人在电脑前进行的一项活动。本文将介绍一些你可以在 Fedora Linux 上使用的开源 Web 浏览器。你需要安装上述软件。本文提到的所有浏览器都已经在官方的 Fedora 软件库中提供。如果你不熟悉如何在 Fedora Linux 中添加软件包,请参阅我之前的文章 安装 Fedora 34 工作站后要做的事情

Firefox

火狐 Firefox 是一个快速且注重隐私的浏览器,可以在许多设备上使用。它是由 Mozilla 创建的,是一个具有完整功能的浏览器,提供许多扩展。你可以为你的火狐浏览器添加许多强大的功能和有用的特性。它只使用适量的内存来创造一个流畅的体验,使你的电脑保持对其他任务的响应。你可以创建一个账户,让你在多个设备上共享配置,所以你不需要在每个设备上设置火狐浏览器。

火狐浏览器提供以下功能:

  • 隐私浏览模式
  • 阻止广告跟踪器
  • 密码管理器
  • 设备之间的同步
  • 画中画

关于火狐浏览器的更多信息可在此链接中找到:https://www.mozilla.org/en-US/firefox

GNOME Web

GNOME Web 是 GNOME 桌面(Fedora 工作站的默认桌面环境)的一个浏览器。如果你使用 GNOME 作为默认桌面环境的 Fedora 工作站,它可能非常适合作为你的主浏览器。这个浏览器有一个简单、干净、漂亮的外观。GNOME Web 的功能比 Firefox 少,但对于普通用途来说已经足够了。

GNOME Web 提供了以下功能:

  • 隐身模式
  • GNOME 桌面集成
  • 内置广告拦截器
  • 智能跟踪预防

关于 GNOME Web 的更多信息可以在这个链接中找到:https://wiki.gnome.org/Apps/Web

Chromium

Chromium 是一个来自 Chromium 项目的开源 Web 浏览器,它有一个极简的用户界面。它的外观与 Chrome 相似,因为它实际上是作为 Chrome 和其他几个浏览器的基础。许多人使用 Chromium 是因为他们已经习惯了 Chrome。

Chromium 提供以下功能:

  • 隐身模式
  • 扩展程序
  • 密码的自动填写

关于 Chromium 浏览器的更多信息可在此链接中找到:https://www.chromium.org/Home

qutebrowser

这个浏览与上面提到的稍有不同,qutebrowser 是一个以键盘为中心的浏览器,具有精简的 GUI。因此,你不会发现通常在其他浏览器中的按钮,如返回、主页、重新加载等。相反,你可以用键盘输入命令来运行 qutebrowser 中的功能。它使用 Vim 风格的键绑定,所以它适合 Vim 用户。如果你有兴趣在上网时获得不同的体验,你应该试试这个浏览器。

qutebrowser 提供以下功能:

  • 广告屏蔽
  • 隐私浏览模式
  • 快速书签

关于 qutebrowser 浏览器的更多信息可在此链接中找到:https://qutebrowser.org/

总结

每个人在使用互联网时都有不同的需求,特别是在浏览方面。本文中提到的每个浏览器都有不同的功能。因此,请选择适合你日常需求和喜好的浏览器。如果你使用的是本文中提到的浏览器,请在评论中分享你的故事。如果你使用的是其他的浏览器,请说一下。希望这篇文章能帮助你选择在 Fedora 上满足你日常需求的浏览器。


via: https://fedoramagazine.org/apps-for-daily-needs-part-1-web-browsers/

作者:Arman Arisman 选题:lujun9972 译者:geekpi 校对:wxy

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