2020年6月

GCC 11 将默认前端语言改为 C++ 17

GCC 11 会将默认前端语言从 C++14 变更为 C++ 17。从 GCC 9 开始,对 C++ 17 的支持已经不再是实验性质,C++ 前端实现了完整的 C++ 17 语言,并且 C++ 标准库支持几乎也完成了。

来源:开源中国

拍一拍:感觉 C++ 进展好快啊!但是现在最受工程界宠爱的语言已经不是 C++ 了。

Linux Mint 20 “Ulyana” 正式版发布

最新版本的操作系统搭载 Linux 内核 5.4,基于 Ubuntu 20.04,且支持时间一直延续到 2025 年。你可以在三种桌面环境中自由选择,它们分别是Cinnamon(4.6)、MATE(1.24)和 Xfce(4.14)。

来源:cnBeta.COM

拍一拍:更多详情,我们后面会专门撰文介绍。

微软、哈佛宣布推出世界上第一个差分隐私开源平台

新平台由哈佛大学的 OpenDP 计划提供支持。该差分隐私开源平台可以在不实际暴露个人隐私的情况下,查询客户的数据。微软表示,从今天开始,任何想要使用该平台进行数据分析的人都可以获得其差分隐私专利下的免版税许可。该平台及其算法已经发布在 GitHub 上。

来源:softpedia

拍一拍:非常值得关注和鼓励的数据隐私平台,预期各个云服务商会提供相关的服务。

不管你是想要更舒服地从 Mac 搬到 Linux,还是不满意常规的 Linux 包管理器,都可以试试 Homebrew。

Homebrew 项目最初是为了给 Mac 用户提供一个非官方的 Linux 式的包管理器。用户很快就爱上了它友好的界面以及帮助性的提示,而且,它已经被移植到 Linux 系统 —— 这看起来像是一个奇怪的命运转折。

一开始,有两个分开的项目分别针对 macOS 和 Linux (Homebrew 与 Linuxbrew),但是现在是由 Homebrew 核心管理着这两个操作系统。由于我正 从 Mac 切换到 Linux,所以一直在研究我在 macOS 最常用的开源软件在 Linux 表现如何,最终,我很高兴地发现 Homebrew 对 Linux 的支持太赞了!

为什么要在 Linux 使用 Homebrew 呢?

长期使用 Linux 的用户对 Homebrew 的第一反应是:“为什么不直接使用……呢”,省略号代表他们喜欢的某个 Linux 包管理器。基于 Debian 的系统早就有了 apt,基于 Fedora 的系统则有 dnfyum,并且像 Flatpak 跟 AppImage 这样的项目,在两种系统上都能流畅运行。我花了不少时间尝试这些技术,不得不说,它们都有其强大之处。

那我为什么还要 坚持使用 Homebrew 呢?首先,我对它非常熟悉。在为我过去使用的专有软件寻找开源替代品的过程中,我已经学会了许多使用方法,而保持一些熟悉的东西,比如 Homebrew,可以让我专注于一次学习一件事情,而不是被不同系统间的差异搞垮。

此外,我没有看到哪一个包管理器像 Homebrew 一样,对用户如此友好。正如默认的帮助命令一样,命令井然有序:

$ brew -h
Example usage:
  brew search [TEXT|/REGEX/]
  brew info [FORMULA...]
  brew install FORMULA...
  brew update
  brew upgrade [FORMULA...]
  brew uninstall FORMULA...
  brew list [FORMULA...]

Troubleshooting:
  brew config
  brew doctor
  brew install --verbose --debug FORMULA

Contributing:
  brew create [URL [--no-fetch]]
  brew edit [FORMULA...]

Further help:
  brew commands
  brew help [COMMAND]
  man brew
  <https://docs.brew.sh>

过于简短的输出可能会被误解为它功能局限,但是你简单看看每一个子命令,都有很丰富的功能。虽然上面的列表只有短短 23 行,但对高级用户来说,光是子命令 install 就包含整整 79 行的帮助信息:

$ brew --help | wc -l
23
$ brew install --help | wc -l
79

它可以选择忽略或者安装依赖关系,也可以选择用源代码编译以及用什么编译器来编译某个确切的上游 Git 提交,或者选择应用的官方 “灌装” 版。总而言之,Homebrew 即适合新手,也同样能满足老鸟。

开始在 Linux 使用 Homebrew

如果你想要试着使用 Homebrew,可以用这个单行脚本在 Mac 或者 Linux 上进行安装:

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

这条命令会立即开始安装 Homebrew。如果你比较谨慎,可以使用 curl 将该文件下载到本地,检查完毕之后再运行。

$ curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh --output homebrew_installer.sh
$ more homebrew_installer.sh # 审核该脚本,直到你觉得没问题了
$ bash homebrew_installer.sh

对 Linux 的安装步骤还包括如何配置点文件,对于 Debian 系统来说是 ~/.profile,对于 Fedora 系统是 ~/.bash_profile

$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile
$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile

为了确认已经安装好,Homebrew 团队提供一个空的 hello “秘方” 供测试:

$ brew install hello
==> Downloading https://linuxbrew.bintray.com/bottles/hello-2.10.x86_64_linux.bottle.tar.gz
######################################################################## 100.0%
==> Pouring hello-2.10.x86_64_linux.bottle.tar.gz
?  /home/linuxbrew/.linuxbrew/Cellar/hello/2.10: 52 files, 595.6KB

看起来安装毫无问题,让我来试试更多操作。

命令行工具 Brew

Homebrew 宣称自己是一款默认只 “安装你需要而 [Linux] 没有的东西”的应用程序。

你可以用 brew 命令安装任何打包在 Homebrew 中的命令行软件。这些包的定义文件叫做 “ 秘方 formula ”,而且它们通过“ 瓶子 bottle ”来编译并分享。在 Homebrew 的世界里,还有许多 “啤酒方面” 的术语,但这个包管理器主要目的是让软件便于使用。

都有些什么样的软件呢?对我这样的技术玩家(既然你已经在读这篇文章,估计你也是)来说最方便的东西。例如,便利的 tree 命令,可以展示目录结构,或者 pyenv,我用它来 在 Mac 管理不同版本 Python

你可以用 search 命令查看所有可以安装的“秘方”,在后面加上 wc 命令看看一共有多少:

# -l 选项统计行数
$ brew search | wc -l
    5087

迄今为止,一共有 5000 多个 “秘方”,这囊括了很多软件。需要注意的是:并非所有 “秘方” 都能在 Linux 运行。在 brew search --help 输出中有一节提到可以按软件运行的操作系统来筛选软件。它会在浏览器打开用于每个操作系统的软件仓库。我运行的是 Fedora,所以我会用它来试一试:

$ brew search --fedora tree

浏览器打开了网址 https://apps.fedoraproject.org/packages/s/tree,向我展示了所有 Fedora 的可用选项。你也可以通过其它方法进行浏览。“秘方” 被集中整理到由操作系统划分的核心仓库当中(Mac 在 Homebrew Core,Linux 在 Linux Core)。同样也可以通过 Homebrew API 在网页显示

即使有这些选择,我还是通过其它用户的推荐找到很多新工具。我列出一些我最喜欢的工具,你可以在里面找点灵感:

  • pyenvrbenvnodenv 用来管理(相应的) Python、Ruby 和 Node.js 版本
  • imagemagick 用于脚本化编辑图片
  • pandoc 用于脚本化转换文档格式(我通常将 .docx 文件转成 .md 或者 .html)
  • hub 为 GitHub 用户提供 更好的 Git 体验
  • tldr 展示了命令工具的使用范例

想要深入了解 Homebrew,可以去 trldr 页面 看看,比起应用的 man 页面,它要友好得多。使用 search 命令确认你可以安装:

$ brew search tldr
==> Formulae
tldr ✔

太好了!对勾说明你可以安装。那么继续吧:

$ brew install tldr
==> Downloading https://linuxbrew.bintray.com/bottles/tldr-1.3.0_2.x86_64_linux.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring tldr-1.3.0_2.x86_64_linux.bottle.1.tar.gz
?  /home/linuxbrew/.linuxbrew/Cellar/tldr/1.3.0_2: 6 files, 63.2KB

Homebrew 提供了编译好的二进制文件,所以你不必在本地机器上从源码编译。这能节省很多时间,也不用听 CPU 风扇的噪声。我很欣赏 Homebrew 的另外一点是,你不完全理解每一个选项的含义也不会影响正常使用。若你想自己编译,可以在 brew install 命令后面加上 -s 或者 --build-from-source 标识,这样就能从源码编译 “秘方”(即便已经有一个 “瓶子” 存在)。

同样,软件底层的复杂性也很有意思。使用 info 可以查看 tldr 软件的依赖管理,“秘方” 的源代码存放在磁盘上的何处,甚至还能查看公开分析。

$ brew info tldr
tldr: stable 1.3.0 (bottled), HEAD
Simplified and community-driven man pages
https://tldr.sh/
Conflicts with:
  tealdeer (because both install `tldr` binaries)
/home/linuxbrew/.linuxbrew/Cellar/tldr/1.3.0_2 (6 files, 63.2KB) *
  Poured from bottle on 2020-06-08 at 15:56:15
From: https://github.com/Homebrew/linuxbrew-core/blob/master/Formula/tldr.rb
==> Dependencies
Build: pkg-config ✔
Required: libzip ✔, curl ✔
==> Options
--HEAD
        Install HEAD version
==> Analytics
install: 197 (30 days), 647 (90 days), 1,546 (365 days)
install-on-request: 197 (30 days), 646 (90 days), 1,546 (365 days)
build-error: 0 (30 days)

从 Mac 到 Linux 的一点不足

在 macOS,Homebrew 的 cask(“酒桶”)子命令可以让用户使用命令行安装、管理整个应用软件。不幸的是,cask还不能在任何 Linux 发行版上使用。我在安装一个开源工具时发现了这点:

$ brew cask install tusk
Error: Installing casks is supported only on macOS

我在 论坛上 问了一下,很快得到其他用户的反馈。总结一下,方案如下:

  • 复刻 Homebrew 项目,构建这个特性,然后像别人展示其价值
  • 给该软件写一个 “秘方”,然后从源代码编译
  • 为该软件创建一个第三方仓库

最后一个是我最感兴趣的。Homebrew 通过 创建并维护 “ 水龙头 tap (另一个受啤酒影响的术语)管理第三方仓库。随着你对系统越来越熟悉,并想加入生态系统, “水龙头” 是值得研究的。

备份 Homebrew 的安装记录

我最中意的 Homebrew 特性之一就是你可以像其它任何 用版本控制工具来备份点文件 一样备份你的安装记录。为了实现这个目的,Homebrew 提供 bundle(“捆扎”)子命令,它可以控制一个叫 dump(“倾倒”)的子命令生成一个 Brewfile。这个文件包含你目前所有安装的工具列表,可以重复使用。进入你想使用的目录然后运行命令,它会根据你所安装的软件生成 Brewfile

$ cd ~/Development/dotfiles # This is my dotfile folder
$ brew bundle dump
$ ls Brewfile
Brewfile

当我换了一台机器,想要安装一样的软件时,进入含有 Brewfile 的文件夹,然后重新安装:

$ ls Brewfile
Brewfile
$ brew bundle

它会在我的新机器上安装所有列出的 “秘方”。

在 Mac 和 Linux 同时管理 Brewfile

Brewfile 非常适合备份你目前的安装记录,但是如果某些在 Mac 上运行的软件无法运行在 Linux 呢?或者刚好相反?我发现不管是 Mac 还是 Linux,如果软件无法在当前操作系统运行,Homebrew 会优雅地忽略那一行。如果它遇到不兼容的请求(比如使用 brew 在 Linux 安装 “ 酒桶 cask ” 时),它会选择跳过,继续安装过程:

$ brew bundle --file=Brewfile.example

Skipping cask licecap (on Linux)
Skipping cask macdown (on Linux)
Installing fish
Homebrew Bundle complete! 1 Brewfile dependency now installed.

为了保持配置文件的简洁,我在两个操作系统上使用同一份 Brewfile,因为它只安装与操作系统相关的版本,所以我一直没有遇到任何问题。

使用 Homebrew 管理软件包

Homebrew 已经成了我必备的命令行工具,由于我很熟悉它,所以在 Linux 上的体验也充满乐趣。Homebrew 让我的工具井然有序,并且时刻保持更新,我愈发欣赏它在实用性与功能上找到的平衡点。我更喜欢将软件包管理的细节保持在用户需要了解的最小程度,大多数人都会从中受益。如果你已经很熟悉 Linux 包管理器了,Homebrew 可能会让你觉得很基础,但稍微深入一点看,就会发现它的高级选项远远超过本文的内容。

对 Linux 用户来说,他们有很多包管理器可以选择。如果你来自 MacOS,Homebrew 会让你宾至如归。


via: https://opensource.com/article/20/6/homebrew-linux

作者:Matthew Broberg 选题:lujun9972 译者:nophDog 校对:wxy

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

Plotly 是一个数据绘图库,具有整洁的接口,它旨在允许你构建自己的 API。

Plotly 是一个绘图生态系统,可以让你在 Python 以及 JavaScript 和 R 中进行绘图。在本文中,我将重点介绍使用 Python 库进行绘图

Plotly 有三种不同的 Python API,你可以选择不同的方法来使用它:

  • 类似于 Matplotlib 的面向对象的 API
  • 数据驱动的 API,通过构造类似 JSON 的数据结构来定义绘图
  • 类似于 Seaborn 的高级绘图接口,称为 “Plotly Express” API

我将通过使用每个 API 来绘制相同的图来探索它们:英国大选结果的分组柱状图。

在我们进一步探讨之前,请注意,你可能需要调整你的 Python 环境来让这段代码运行,包括以下内容:

  • 运行最新版本的Python(LinuxMacWindows 的说明)
  • 确认你运行的 Python 版本能与这些库一起工作

数据可在线获得,可以用 Pandas 导入。

import pandas as pd
df = pd.read_csv('https://anvil.works/blog/img/plotting-in-python/uk-election-results.csv')

现在我们可以继续进行了。

使用图对象来绘制图

Plotly 面向对象的 API 被称为 graph_objects,它有点类似于 Matplotlib 的面向对象 API

要创建一个柱状图,你可以构造一个包含四个柱状图的对象:

# 导入 Plotly 和数据
import plotly.graph_objects as go
from votes import wide as df

# 得到 x 列表
years = df['year']
x = list(range(len(years)))

# 定义绘图
bar_plots = [
  go.Bar(x=x, y=df['conservative'], name='Conservative', marker=go.bar.Marker(color='#0343df')),
  go.Bar(x=x, y=df['labour'], name='Labour', marker=go.bar.Marker(color='#e50000')),
  go.Bar(x=x, y=df['liberal'], name='Liberal', marker=go.bar.Marker(color='#ffff14')),
  go.Bar(x=x, y=df['others'], name='Others', marker=go.bar.Marker(color='#929591')),
]

# 指定样式
layout = go.Layout(
  title=go.layout.Title(text="Election results", x=0.5),
  yaxis_title="Seats",
  xaxis_tickmode="array",
  xaxis_tickvals=list(range(27)),
  xaxis_ticktext=tuple(df['year'].values),
)
   
# 绘制柱状图
fig = go.Figure(data=bar_plots, layout=layout)

# 告诉 Plotly 去渲染
fig.show()

与 Matplotlib 不同的是,你无需手动计算柱状图的 x 轴位置,Plotly 会帮你适配。

最终结果图:

 title=

A multi-bar plot made using Graph Objects (© 2019 Anvil)

使用 Python 数据结构来绘图

你还可以使用 Python 基本数据结构来定义绘图,它与面对对象 API 具有相同的结构。这直接对应于 Plotly 的 JavaScript 实现的 JSON API。

# 定义绘图数据
fig = {
    'data': [
        {'type': 'bar', 'x': x, 'y': df['conservative'], 'name': 'Conservative', 'marker': {'color': '#0343df'}},
        {'type': 'bar', 'x': x, 'y': df['labour'], 'name': 'Labour', 'marker': {'color': '#e50000'}},
        {'type': 'bar', 'x': x, 'y': df['liberal'], 'name': 'Liberal', 'marker': {'color': '#ffff14'}},
        {'type': 'bar', 'x': x, 'y': df['others'], 'name': 'Others', 'marker': {'color': '#929591'}},
    ],
    'layout': {
        'title': {'text': 'Election results', 'x': 0.5},
        'yaxis': {'title': 'Seats'},
        'xaxis': {
            'tickmode': 'array',
            'tickvals': list(range(27)),
            'ticktext': tuple(df['year'].values),
        }
    }
}

# 告诉 Plotly 去渲染它
pio.show(fig)

最终结果与上次完全相同:

 title=

A multi-bar plot made using JSON-like data structures (© 2019 Anvil)

使用 Plotly Express 进行绘图

Plotly Express 是对图对象进行封装的高级 API。

你可以使用一行代码来绘制柱状图:

# 导入 Plotly 和数据
import plotly.express as px
from votes import long as df

# 定义颜色字典获得自定义栏颜色
cmap = {
    'Conservative': '#0343df',
    'Labour': '#e50000',
    'Liberal': '#ffff14',
    'Others': '#929591',
}

# 生成图
fig = px.bar(df, x="year", y="seats", color="party", barmode="group", color_discrete_map=cmap)

这里使用了 长表 Long Form 数据,也称为“整洁数据”。这些列代表年份、政党和席位,而不是按政党划分。这与在 Seaborn 中制作柱状图非常相似。

>> print(long)
     year         party  seats
0    1922  Conservative    344
1    1923  Conservative    258
2    1924  Conservative    412
3    1929  Conservative    260
4    1931  Conservative    470
..    ...           ...    ...
103  2005        Others     30
104  2010        Others     29
105  2015        Others     80
106  2017        Others     59
107  2019        Others     72

[108 rows x 3 columns]

你可以访问底层的图对象 API 进行详细调整。如添加标题和 y 轴标签:

# 使用图对象 API 来调整绘图
import plotly.graph_objects as go
fig.layout = go.Layout(
    title=go.layout.Title(text="Election results", x=0.5),
    yaxis_title="Seats",
)

最后,让 Plotly 渲染:

fig.show()

这将在未使用的端口上运行一个临时 Web 服务器,并打开默认的 Web 浏览器来查看图像(Web 服务器将会马上被关闭)。

不幸的是,结果并不完美。x 轴被视为整数,因此两组之间的距离很远且很小,这使得我们很难看到趋势。

 title=

A multi-bar plot made using Plotly Express (© 2019 Anvil)

你可能会尝试通过将 x 值转换为字符串来使 Plotly Express 将其视为字符串,这样它就会以均匀的间隔和词法顺序来绘制。不幸的是,它们的间隔还是很大,像在 graph_objects中那样设置 xaxis_tickvals 也不行。

Seaborn 中的类似示例不同,在这种情况下,抽象似乎没有提供足够的应急方案来提供你想要的东西,但是也许你可以编写自己的 API?

构建自己的 Plotly API

对 Plotly 的操作方式不满意?那就构建自己的 Plotly API!

Plotly 的核心是一个 JavaScript 库,它使用 D3stack.gl 进行绘图。JavaScript 库的接口使用指定的 JSON 结构来绘图。因此,你只需要输出 JavaScript 库喜欢使用的 JSON 结构就好了。

Anvil 这样做是为了创建一个完全在浏览器中工作的 Python Plotly API。

 title=

Plotly uses a JavaScript library to create plots, driven by libraries in other languages via JSON (© 2019 Anvil)

在 Anvil 版本中,你可以同时使用图对象 API 和上面介绍的 Python 数据结构方法。运行完全相同的命令,将数据和布局分配给 Anvil 应用程序中的 Plot 组件

这是用 Anvil 的客户端 Python API 绘制的多列柱状图:

# 导入 Anvil 库
from ._anvil_designer import EntrypointTemplate
from anvil import *
import anvil.server

# 导入客户端 Plotly
import plotly.graph_objs as go

# 这是一个 Anvil 表单
class Entrypoint(EntrypointTemplate):
  def __init__(self, **properties):
    # Set Form properties and Data Bindings.
    self.init_components(**properties)

    # 从服务器获取数据
    data = anvil.server.call('get_election_data')
   
    # 获取一个方便的 x 值列表
    years = data['year']
    x = list(range(len(years)))

    # 定义绘图
    bar_plots = [
      go.Bar(x=x, y=data['conservative'], name='Conservative', marker=go.Marker(color='#0343df')),
      go.Bar(x=x, y=data['labour'], name='Labour', marker=go.Marker(color='#e50000')),
      go.Bar(x=x, y=data['liberal'], name='Liberal', marker=go.Marker(color='#ffff14')),
      go.Bar(x=x, y=data['others'], name='Others', marker=go.Marker(color='#929591')),
    ]
    # 规定布局
    layout = {
      'title': 'Election results',
      'yaxis': {'title': 'Seats'},
      'xaxis': {
        'tickmode': 'array',
        'tickvals': list(range(27)),
        'ticktext': data['year'],
      },
    }

    # 生成多列柱状图
    self.plot_1.data = bar_plots
    self.plot_1.layout = layout

绘图逻辑与上面相同,但是它完全在 Web 浏览器中运行,绘图是由用户计算机上的 Plotly JavaScript 库完成的!与本系列的所有其它 Python 绘图库相比,这是一个很大的优势。因为其它 Python 库都需要在服务器上运行。

这是在 Anvil 应用中运行的交互式 Plotly 图:

 title=

The election plot on the web using Anvil's client-side-Python Plotly library (© 2019 Anvil)

你可以复制此示例作为一个 Anvil 应用程序(注意:Anvil 需要注册才能使用)。

在前端运行 Plotly 还有另一个优势:它为自定义交互行为提供了更多选项。

在 Plotly 中自定义交互

Plotly 绘图不仅是动态的,你可以自定义它们的互动行为。例如,你可以在每个柱状图中使用 hovertemplate 自定义工具提示的格式:

    go.Bar(
      x=x,
      y=df['others'],
      name='others',
      marker=go.bar.Marker(color='#929591'),
      hovertemplate='Seats: <b>%{y}</b>',
    ),

当你把这个应用到每个柱状图时,你会看到以下结果:

 title=

A multi-bar plot with custom tool-tips (© 2019 Anvil)

这很有用,当你想要在某些事件发生时执行任何你想要的代码就更好了(例如,当用户将鼠标悬停在栏上,你想要显示一个相关选举的信息框)。在 Anvil 的 Plotly 库中,你可以将事件处理程序绑定到诸如悬停之类的事件,这使得复杂的交互成为可能。

A multi-bar plot with a hover event handler (© 2019 Anvil)

你可以通过将方法绑定到绘图的悬停事件来实现:

  def plot_1_hover(self, points, **event_args):
    """This method is called when a data point is hovered."""
    i = points[0]['point_number']
    self.label_year.text = self.data['year'][i]
    self.label_con.text = self.data['conservative'][i]
    self.label_lab.text = self.data['labour'][i]
    self.label_lib.text = self.data['liberal'][i]
    self.label_oth.text = self.data['others'][i]
    url = f"https://en.wikipedia.org/wiki/{self.data['year'][i]}_United_Kingdom_general_election"
    self.link_more_info.text = url
    self.link_more_info.url = url

这是一种相当极端的交互性,从开发人员的角度来看,也是一种极端的可定制性。这都要归功于 Plotly 的架构 —— 它有一个简洁的接口,明确的设计是为了让你建立自己的API。如果到处都能看到这种伟大的设计,那将会很有帮助!

使用 Bokeh 进行自定义交互

现在你已经了解了 Plotly 如何使用 JavaScript 来创建动态图,并且可以使用 Anvil 的客户端编写 Python 代码在浏览器中实时编辑它们。

Bokeh 是另一个 Python 绘图库,它可以输出可嵌入 Web 应用程序的 HTML 文档,并获得与 Plotly 提供的功能类似的动态功能(如果你想知道如何发音,那就是 “BOE-kay”)。


via: https://opensource.com/article/20/5/plotly-python

作者:Shaun Taylor-Morgan 选题:lujun9972 译者:MjSeven 校对:wxy

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

Fedora 开发者再次讨论使用 Nano 替代 Vi/Vim 作为默认文本编辑器

类似的建议去年就已经讨论过一次,现在再次讨论 Fedora 是否应该默认使用 Nano 而不是 Vi,因为 Vi 目前在 git 提交和其他基于 CLI 的文本编辑中被用作默认编辑器。而这对于那些改用 Fedora 而又不知道如何使用 Vi 的用户来说,无疑是增加了使用障碍。支持此提案的开发者认为,将 Nano 作为默认编辑器不要求使用者具备专业知识,这对用户更友好,也让 Fedora 更加易于使用。支持者认为 Nano 是适用于每个人的选项。

来源:开源中国

拍一拍:Vi/Vim 已经成为 Linux 世界的象征性标志,也是很多 Linux 用户的入门门槛之一。究竟 Linux 是该向更易用发展;还是保持传统,过滤一些迈不过门槛的用户呢?

Canonical 因在 Ubuntu 每日消息(MOTD)中植入广告而遭到抨击

在一则讨伐 Canonical 的 Reddit 帖子中,已经收到了上千网友的评论。屏幕截图显示,Ubuntu 中混入了一条附带链接的文字广告:“如果你一直在等待面向 macOS 的完美 Kubernetes 开发解决方案,现在是时候体验 Microk8s 了!”截至发稿时,Canonical 仍未对 MOTD 中包含的广告链接发表评论。

拍一拍:有自家的发行版真好,可以随便做广告。

来源:cnBeta.COM

Jakarta EE 9 Milestone 1 发布 从 javax.* 过渡到 jakarta.*

此版本将所有 API 更新为在包名称中使用 jakarta.*。至于为什么变化,这是因为 Oracle 拒绝交出相关权利,过渡实际上就是此版本的全部内容。

来源:开源中国

拍一拍:不肯融入开放世界的,必将被开放世界所抛弃。

iOS 14 与 macOS Big Sur 将支持 DNS 加密通信

目前苹果已加入 Mozilla、谷歌和微软等公司的加密 DNS 通信倡议,积极在自家产品中中改进隐私安全体验。今秋正式发布的时候,该公司设备用户将同时体验到 DNS-over-HTTPS(简称 DoH)和 DNS-over-LTS(简称 DoT)带来的好处。启用了 DoH 和 DoT 之后,域名查询和接收响应的过程都会被加密处理,可有效防止被第三方和恶意行为者追踪用户的浏览历史。

来源:cnBeta.COM

拍一拍:一方面技术进步让个人隐私无从隐身,另一方面新的保护隐私的技术也在不断进步,技术世界就是在不断博弈之中前进。

Word 编辑器迎来“在线查重”功能

据悉,该功能由必应提供支撑,可在显示文档内容的相似性比例,并使之更轻松地插入相应的引文。结合相似性检测和引文工具,学生们不仅可以规避抄袭查重。目前这项功能仅提供了对英语文本的支持。作为三月份预告的 Microsoft 365 更新的一部分,该功能将先向教育版订阅者推送,然后再分发给家庭和企业版订阅用户。

来源:cnBeta.COM

拍一拍:编辑器就支持“查重”会省心一些,不过,问题在于,如何写出符合查重标准的文章吧?

Android 12 曝光:谷歌欲全面抛弃对 32 位的支持

因为 32 位的固有限制,不少主流操作系统已经切换到 64 位环境,比如 iOS 11、macOS Catalina 等,Windows 10 也自 v2004 版本开始停止向 OEM 分发 32 位系统。下面,该 Android了。据开发者爆料,Android S(按照字母排序,对应安卓 12 系统)的 x86\_64 模拟器已经停止对 32 位的支持,此乃破天荒的头一次。

来源:快科技

拍一拍:世界总是不经意间慢慢抛弃很多旧的东西,现在轮到了 32 位架构了。

正如我们向读者承诺的那样,我们将对 Ubuntu 20.04 LTS 版本的所有主要特色版进行评测。在这个续篇中,我们将对 Ubuntu Budgie 进行评测。

顾名思义,Ubuntu Budgie 是使用 Budgie 桌面环境Ubuntu 官方特色版。这个版本是 Ubuntu 家族中较新的一位成员。Ubuntu Budgie 的第一个版本是 16.04,它在 17.04 版本时被接受为官方特色版。

他们的目标是“结合 Budgie 界面的简洁和优雅,以生产具有现代范式的面向桌面的传统发行版。”

Ubuntu Budgie 20.04 评测:哪些改变了,哪些没有!

自 18.04 LTS 发布以来,Ubuntu Budgie 有了令人惊讶的更新和改进:

  • 苹果风格的新菜单
  • 默认采用基于 Budgie 的网络管理小程序
  • 新的 Window Shuffler 允许你通过快捷键平铺应用程序
  • 快速切换桌面布局的新工具
  • 支持 4k 分辨率
  • 新的默认应用程序:GNOME Firmware 和 Drawing
  • 现在已经为 20.04 重构了向后移植包
  • 默认浏览器是火狐
  • 默认使用 Catfish 搜索文件和文本
  • 在 Budgie 中集成了 Nemo 文件管理器
  • 由于错误,系统托盘小程序被移除了
  • 默认情况下,事件警报声被禁用
  • 修复了键盘快捷键神秘失踪的问题
  • 更好的锁屏样式
  • 由于社区的需求,文件应用 Nautilus 已被 Nemo 取代
  • Plank 坞站现在已经切换到屏幕底部,是透明的,并且默认有弹跳动画
  • 快速笔记和热角小程序已从 Python 移植到 Vala,以提高速度
  • Celluloid 取代了 MPV
  • 更新了 GNOME 的依赖性

Ubuntu Budgie 现在随附了 Budgie 桌面环境的最新版本(10.5.1)。改进包括:

  • 在 Budgie 桌面设置中新增 Raven 部分
  • Raven 通知可以分组,通知可以关闭
  • 重新打造了图标任务列表
  • 能够设置虚拟桌面的数量

Ubuntu Budgie 自带了大量的 Budgie 小程序 applet 微应用 min-app 。它们可以通过 Ubuntu Budgie “欢迎”应用来安装。

  • WeatherShow:显示未来五天的天气预报,每 3 小时更新一次
  • Wallstreet:一个可以循环展示你的图像文件夹中的壁纸工具
  • Visual-space:一个紧凑的工作区切换器
  • Dropby:这个小程序可让你在面板上快速管理 U 盘
  • Kangaroo:从面板上快速浏览文件夹
  • 垃圾桶小程序:管理你的垃圾桶
  • Fuzzyclock:以模糊的方式显示时间
  • 工作区秒表:允许你跟踪在每个工作区花费的时间

完整的变更和更新列表,请访问变更日志

系统要求

Ubuntu Budgie 20.04 更新了系统要求

  • 4GB 或以上的内存
  • 64 位的 Intel 和 AMD 处理器
  • 在 CSM 模式下启动的 UEFI 电脑
  • 基于英特尔的现代苹果电脑

如你所见,Budgie 并不是一个真正的轻量级选择。

安装的应用

Ubuntu Budgie 中默认包含了以下有用的应用程序:

  • AisleRiot Solitaire
  • Geary
  • Catfish 搜索工具
  • Cheese 网络摄像头工具
  • GNOME Drawing
  • GNOME 2048
  • GNOME Mahjongg
  • GNOME Mines
  • GNOME Sudoku
  • Gthumb
  • LibreOffice
  • Maps
  • Rhythmbox
  • Tilix
  • Ubuntu Budgie 欢迎应用
  • Evince 文档查看器
  • Plank
  • Celluloid

安装

起初,我无法让 Ubuntu Budgie 进入 即用 live 环境来安装它。结果发现 Ubuntu Budgie 试图通过 EFI 来启动,我从 Ubuntu Budgie 论坛得到了解决方案。

当出现紫色的闪屏时,我必须按下 ESC 键并选择 legacy。之后,它就如常启动了,安装也没有问题了。我只在 Ubuntu Budgie 上遇到过这个问题。我下载并尝试了 Ubuntu MATE 20.04 ISO,但没有遇到类似的问题。

Ubuntu Budgie 20.04 的体验

除了这个安装上的小问题,我使用 Ubuntu Budgie 的体验非常愉快。自 Ikey 第一次创建 Budgie 桌面以来,Budgie 桌面已经进步了很多,并且已经成为一个非常成熟的选择。Ubuntu Budgie 的目标是“生产一个面向桌面的传统发行版”。它确实做到了极致。他们所做的所有改变都在不断地为他们的产品增添更多的光彩。

总的来说,Ubuntu Budgie 是一个非常漂亮的发行版。从默认的主题到壁纸选择,你可以看出他们付出了很多努力,视觉体验非常吸引人。

需要注意的是,Ubuntu Budgie 并不适合低配置的系统。我在戴尔 Latitude D630 上运行它。在没有打开任何应用程序的情况下,它使用了大约 700MB 的内存。

在 Ubuntu Budgie 中,让我喜欢的部分超乎我的预期,其中一个部分是 Tilix 终端模拟器。Tilix 允许你在右侧或下方添加终端窗口。它有很多很多功能,我简直爱死了它,我打算在我的其他 Linux 系统上也安装它。

关于 Ubuntu Budgie 20.04 的最后感想

Ubuntu Budgie 是众多官方版本中一个很受欢迎的新版本。Budgie 给人的感觉非常流畅和精致。它不会让你觉得碍手碍脚,而是帮你完成工作。

如果你厌倦了当前的桌面环境,想体验一下新的东西,不妨来看看。如果你对当前的环境感到满意,那么就试试 Ubuntu Budgie 的即用 DVD。你可能会喜欢上它。

你是否已经尝试过 Ubuntu 20.04 Budgie?你对它的使用体验如何?如果没有用过,你现在使用的是哪个版本的 Ubuntu 20.04?


via: https://itsfoss.com/ubuntu-budgie-20-04-review/

作者:John Paul 选题:lujun9972 译者:wxy 校对:wxy

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

这周推荐的开源软件是 Synaptic。学习这个经过时光积淀的软件包管理器能做哪些现代软件管理器做不到的事情。

Synaptic 软件包管理器是什么?

Synaptic 是一个轻量级的 apt 软件包管理器系统)的 GUI 前端,使用在 Debian、Ubuntu、Linux Mint 以及其它很多基于 Debian/Ubuntu 发行版中。

总的来说,所有你可以 在终端中使用 apt-get 命令 来做的事,都可以通过 Synaptic 来实现。

曾几何时,Synaptic 几乎是所有基于 Debian Linux 发行版的默认图形化软件包管理器。它被认为是一种用户友好的、易于使用的管理应用程序的方法。

随着像 GNOME “软件”KDE “发现” 等现代软件包管理器工具带来更现代和直观的图形用户界面,事情发生了变化。这些软件包管理器有更好的界面,以一种更友好的方式显示软件包信息,带有缩略图、评分和评论。

最后,Synaptic 的使用被局限于在大多数的轻量级 Linux 发行版 中。

为什么你要使用像 Synaptic 软件包管理器这样的 “古老的” 软件?

当然,在多大数的情况下,你没有必要这样做。

但是,Synaptic 仍然比 GNOME “软件” 的功能要很多。记住,它基本上是 apt 的 GUI 前端,这意味着它(几乎)可以做任何你能够 在终端中使用 apt 命令 所做的事。

例如,如果你想 在 Ubuntu 中阻止特定的软件包更新,你可以在 Synaptic 中做到这一点,但是你却不能 GNOME/Ubuntu 的软件中心中实现。

另外,我注意到 Ubuntu 20.04 的软件中心存在一些问题。它加载速度缓慢,它搜索软件包时缓慢,并且它充满了 snap 应用程序(不是每个人都喜欢)。

Synaptic 也是 Ubuntu 中一个轻量级应用程序,使用可以可以让你感觉你的系统快一点。

Synaptic 软件包管理器的功能

下面是对 Synaptic 的概况:

  • 更新软件包缓存
  • 升级整个系统
  • 管理软件包包存储库
  • 通过名称、描述、维护者、版本、依赖项等搜索软件包
  • 通过组、状态(安装与否)、源或更多信息列出软件包
  • 通过名称、状态、大小或版本排序软件包
  • 获取与软件包相关的信息
  • 锁定软件包版本
  • 安装指定版本的软件包

还有很多功能,大家可以自己去探索。

如何在 Ubuntu 上安装 Synaptic 软件包管理器

Synaptic 软件包管理器可在 Ubuntu 的 Universe 存储库中获得。如果 Universe 存储库未启用,你可以在软件中心中找到Synaptic:

Synaptic 在 Ubuntu 软件中心

你也可以通过命令行来安装 Synaptic 。先确保启用 universe 存储库:

sudo add-apt-repository univers

然后更新缓存(在 Ubuntu 18.04 及更高版本中不需要):

sudo apt update

现在,使用下面的命令来安装 synaptic 软件包管理器:

sudo apt install synaptic

这就是所有的安装过程。

如何使用 Synaptic 软件包管理器

在安装后,你可以在菜单中开始搜索 Synaptic 并启动它:

可以看到,这个界面不是最好看的界面之一。注意复选框的颜色。白色意味着软件包未安装,绿色意味软件包已安装。

你可以搜索一个应用程序并单击复选框将标记其为安装。它也将(以绿色的形式)高亮将被作为依赖关系项目的软件包。单击应用来安装选择的软件包:

你可以使用 Synaptic 查看在 Ubuntu 中安装的所有软件包 。你也可以从这个视图中选择移除软件包。

你可以根据源显示各个存储库中可用的软件包。这是查看 哪个 PPA 提供什么软件包的好方法。你可以通过如上所述的方法来安装或移除软件包。

通常,当你更新 Ubuntu 时,所有的软件包都会同时更新。使用 Synaptic,你可以轻松地选择你需要更新/升级到较新版本的软件包。

你也可以锁定软件包的版本,以便它们就不会随着系统更新而被更新。

你也可以使用 Synaptic 搜索软件包。这类似于 使用 apt-cache search 命令搜索软件包

如果你认为你做了错误的选择,你可以从“编辑”菜单中单击撤销。

你可以使用 Synaptic 做很多事,我无法涵盖所有可能的用法。我在这里已经涵盖了最常见的一些方法,如果你将要去使用 Synaptic 的话,我留给你去探索。

Synaptic 并不适合所有的人

如果你不喜欢 Synaptic,你可以在软件中心中移除它,或在终端中使用这个命令:

sudo apt remove synaptic

Ubuntu 还有另一个被称为 AppGrid 的轻量级软件包管理器。据我所知,它已经有一段时间没有更新了。

Synaptic 当然并不适合所有的人。它列出了你在常规软件中心中看不到的库和包。如果你移除了一个你不知道的库,那么它可能会引起问题。

我认为 Synaptic 更适合于中高级用户,他们既想更好地控制软件包管理器又不想使用命令行方法。

你有什么要说的吗?你使用过 Synaptic 软件包管理器吗?你是使用软件中心还是你只在终端中探索?请在评论区中分享你的喜好。


via: https://itsfoss.com/synaptic-package-manager/

作者:Abhishek Prakash 选题:lujun9972 译者:robsean 校对:wxy

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