分类 技术 下的文章

我们已经学习了 R 语言的基础知识,包括其语法以及语法所对应的语义,现在准备使用 R 向统计学领域进发。本文是 R 系列的第十一篇文章,我们将学习如何使用 R 语言 stats 包中提供的统计函数。

与此系列之前的文章一样,我们将使用安装在 Parabola GNU/Linux-libre(x86-64)上的 R 4.1.2 版本来运行文中的代码。

$ R --version
R version 4.1.2 (2021-11-01) -- "Bird Hippie"
Copyright (C) 2021 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under the terms of the
GNU General Public License versions 2 or 3.
For more information about these matters see https://www.gnu.org/licenses/

mean 函数

在 R 中 mean 函数用来计算算术平均值。该函数接受一个 R 对象 x 作为参数,以及一个 trim 选项来在计算均值之前剔除任意比例的数据(LCTT 译注:比如对于一个含有 7 个元素的向量 x,设置 trim 为 0.2 表示分别去掉 x 中最大和最小的前 20% —— 即 1.4 个 —— 的元素,所去掉的元素的个数会向下取整,所以最终会去掉 1 个最大值和 1 个最小值;trim 取值范围为 [0, 0.5],默认为 0)。 逻辑参数 logical argument TRUEFALSEna.rm 可以设置是否忽略空值(NA)。该函数的语法如下:

mean(x, trim = 0, na.rm = FALSE, ...)

该函数支持数值、逻辑值、日期和 时间区间 time intervals 。下面是使用 mean 函数的一些例子:

> mean(c(1, 2, 3))
2

> mean(c(1:5, 10, 20))
6.428571

> mean(c(FALSE, TRUE, FALSE))
0.3333333

> mean(c(TRUE, TRUE, TRUE))
1

我们使用 UCI 机器学习库提供的一个采集自葡萄牙银行机构的“银行营销数据集”作为样本数据。该数据可用于公共研究,包含 4 个 csv 文件,我们使用 read.csv() 函数导入其中的 bank.csv 文件。

> bank <- read.csv(file="bank.csv", sep=";")

> bank[1:3,]
  age        job marital education default balance housing loan  contact day
1  30 unemployed married   primary      no    1787      no   no cellular  19
2  33   services married secondary      no    4789     yes  yes cellular  11
3  35 management  single  tertiary      no    1350     yes   no cellular  16
  month duration campaign pdays previous poutcome  y
1   oct       79        1    -1        0  unknown no
2   may      220        1   339        4  failure no
3   apr      185        1   330        1  failure no

下面是计算 age 列均值的示例:

> mean(bank$age)
41.1701

median 函数

R 语言 stats 包中的 median 函数用来计算样本的中位数。该函数接受一个数值向量 x,以及一个逻辑值 na.rm 用来设置在计算中位数之前是否去除 NA 值。该函数的语法如下:

median(x, na.rm = FALSE, ...)

下面是使用该函数的两个例子:

> median(3:5)
4
> median(c(3:5, 50, 150))
[1] 5

现在我们可以计算银行数据中 age 列的中位数:

> median(bank$age)
39

pair 函数

pair 函数用来合并两个向量,接受向量 x 和向量 y 两个参数。xy 的长度必须相等。

Pair(x, y)

该函数返回一个 Pair 类的列数为 2 的矩阵,示例如下:

> Pair(c(1,2,3), c(4,5,6))
     x y
[1,] 1 4
[2,] 2 5
[3,] 3 6
attr(,"class")
[1] "Pair"

该函数常用于像 T 检验和 Wilcox 检验等的 配对检验 paired test

dist 函数

dist 函数用来计算数据矩阵中各行之间的距离矩阵,接受以下参数:

参数描述
x数值矩阵
method距离测量方法
diag若为 TRUE,则打印距离矩阵的对角线
upper若为 TRUE,则打印距离矩阵的上三角
p闵可夫斯基距离的幂次(见下文 LCTT 译注)

该函数提供的距离测量方法包括: 欧式距离 euclidean 最大距离 maximum 曼哈顿距离 manhattan 堪培拉距离 canberra 二进制距离 binary 闵可夫斯基距离 minkowski ,默认为欧式距离。

LCTT 译注:

  • 欧式距离指两点之间线段的长度,比如二维空间中 A 点 和 B 点 的欧式距离是
  • 最大距离指 n 维向量空间中两点在各维度上的距离的最大值,比如 A 点 (3,6,8,9) 和 B 点 (1,8,9,10) 之间的最大距离是 ,等于 2;
  • 曼哈顿距离指 n 维向量空间中两点在各维度上的距离之和,比如二维空间中 A 点 和 B 点 之间的曼哈顿距离是
  • 堪培拉距离的公式是
  • 二进制距离首先将两个向量中的各元素看作其二进制形式,然后剔除在两个向量中对应值均为 0 的维度,最后计算在剩下的维度上两个向量间的对应值不相同的比例,比如 V1=(1,3,0,5,0) 和 V2=(11,13,0,15,10) 的二进制形式分别是 (1,1,0,1,0) 和 (1,1,0,1,1),其中第 3 个维度的对应值均为 0,剔除该维度之后为 (1,1,1,0) 和 (1,1,1,1),在剩余的 4 个维度中只有最后一个维度在两个向量之间的值不同,最终结果为 0.25;
  • 闵可夫斯基距离是欧式距离和曼哈顿距离的推广,公式是 ,当 p = 1 时相当于曼哈顿距离,当 p = 2 时相当于欧式距离。

下面是使用欧式距离计算 age 列距离矩阵的示例:

> dist(bank$age, method="euclidean", diag=FALSE, upper=FALSE, p=2)
      1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
2     3
3     5  2
4     0  3  5
5    29 26 24 29
6     5  2  0  5 24
7     6  3  1  6 23  1
8     9  6  4  9 20  4  3
9    11  8  6 11 18  6  5  2
10   13 10  8 13 16  8  7  4  2
11    9  6  4  9 20  4  3  0  2  4
12   13 10  8 13 16  8  7  4  2  0  4
13    6  3  1  6 23  1  0  3  5  7  3  7
14   10 13 15 10 39 15 16 19 21 23 19 23 16
15    1  2  4  1 28  4  5  8 10 12  8 12  5 11
16   10  7  5 10 19  5  4  1  1  3  1  3  4 20  9
17   26 23 21 26  3 21 20 17 15 13 17 13 20 36 25 16
18    7  4  2  7 22  2  1  2  4  6  2  6  1 17  6  3 19
19    5  8 10  5 34 10 11 14 16 18 14 18 11  5  6 15 31 12
20    1  2  4  1 28  4  5  8 10 12  8 12  5 11  0  9 25  6  6
21    8  5  3  8 21  3  2  1  3  5  1  5  2 18  7  2 18  1 13  7
22   12  9  7 12 17  7  6  3  1  1  3  1  6 22 11  2 14  5 17 11  4
23   14 11  9 14 15  9  8  5  3  1  5  1  8 24 13  4 12  7 19 13  6  2
     26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
...

改用二进制距离的计算结果如下:

> dist(bank$age, method="binary", diag=FALSE, upper=FALSE, p=2)
     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
2    0
3    0 0
4    0 0 0
5    0 0 0 0
6    0 0 0 0 0
7    0 0 0 0 0 0
8    0 0 0 0 0 0 0
9    0 0 0 0 0 0 0 0
10   0 0 0 0 0 0 0 0 0
11   0 0 0 0 0 0 0 0 0  0
12   0 0 0 0 0 0 0 0 0  0  0
13   0 0 0 0 0 0 0 0 0  0  0  0
14   0 0 0 0 0 0 0 0 0  0  0  0  0
15   0 0 0 0 0 0 0 0 0  0  0  0  0  0
16   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0
17   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0
18   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0
19   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0
20   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0
21   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0
22   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0
23   0 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  0  0  0  0  0  0
     29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

quantile 函数

quantile 函数用于计算数值向量 x 的分位数及其对应的概率。当设置 na.rmTRUE 时,该函数将忽略向量中的 NANaN 值。概率 0 对应最小观测值,概率 1 对应最大观测值。该函数的语法如下:

quantile(x, ...)

quantile 函数接受以下参数:

参数描述
x数值向量
probs概率向量,取值为 [0, 1](LCTT 译注:默认为 (0, 0.25, 0.5, 0.75, 1)
na.rm若为 TRUE,忽略向量中的 NANaN
names若为 TRUE,在结果中包含命名属性
type整数类型,用于选择任意一个九种分位数算法(LCTT 译注:默认为 7)
digits小数精度
传递给其他方法的额外参数

rnorm 函数可用于生成正态分布的随机数。它可以接受要生成的观测值的数量 n,一个均值向量以及一个标准差向量。下面是一个计算 rnorm 函数生成的随机数的四分位数的示例:

> quantile(x <- rnorm(100))
    0%          25%          50%          75%         100%
-1.978171612 -0.746829079 -0.009440368  0.698271134  1.897942805

下面是生成银行年龄数据对应概率下的分位数的示例:

> quantile(bank$age, probs = c(0.1, 0.5, 1, 2, 5, 10, 50)/100)
0.1% 0.5%   1%   2%   5%  10%  50%
20.0 22.6 24.0 25.0 27.0 29.0 39.0

IQR 函数

IQR 函数用于计算向量中数值的 四分位距 interquartile range 。其语法如下:

IQR(x, na.rm = FALSE, type = 7)

参数 type 指定了一个整数以选择分位数算法,该算法在 Hyndman and Fan (1996) 中进行了讨论。下面是计算银行年龄四分位距的示例:

> IQR(bank$age, na.rm = FALSE, type=7)
16

sd 函数

sd 函数用来计算一组数值中的标准差。该函数接受一个 数值向量 numeric vector x 和一个逻辑值 na.rmna.rm 用来设置在计算时是否忽略缺失值。该函数的语法如下:

sd(x, na.rm = FALSE)

对于长度为 0 或 1 的向量,该函数返回 NA。下面是两个例子:

> sd(1:10)
3.02765

> sd(1)
NA

下面是计算 age 列标准差的示例:

> sd(bank$age)
10.57621

R 语言 stats 包中还有很多其他函数,鼓励你自行探索。

(题图:MJ/ee6b533d-69fc-4baa-a985-cc4e499b5029)


via: https://www.opensourceforu.com/2022/08/the-functions-in-the-r-stats-package/

作者:Shakthi Kannan 选题:lkxed 译者:tanloong 校对:wxy

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

使用 Bash 中的 for 循环,为网页创建一个方便的调色板。

当计算机显示器的调色板有限时,网页设计师通常使用一组 Web 安全颜色 来创建网站。虽然在较新设备上显示的现代网站可以显示比最初的 Web 安全调色板更多的颜色,但我有时喜欢在创建网页时参考 Web 安全颜色。这样我就知道我的网页在任何地方都看起来不错。

你可以在网上找到 Web 安全调色板,但我想拥有自己的副本以方便参考。你也可以使用 Bash 中的 for 循环创建一个。

Bash for 循环

Bash 中的 for 循环 的语法如下所示:

for 变量 in 集合 ; do 语句 ; done

例如,假设你想打印从 1 到 3 的所有数字。你可以快速在 Bash 命令行上编写一个 for 循环来为你完成这项工作:

$ for n in 1 2 3 ; do echo $n ; done
1
2
3

分号是标准的 Bash 语句分隔符。它们允许你在一行中编写多个命令。如果你要在 Bash 脚本文件中包含这个 for 循环,你可以用换行符替换分号并像这样写出 for 循环:

for n in 1 2 3
  do
    echo $n
  done

我喜欢将 dofor 放在同一行,这样我更容易阅读:

for n in 1 2 3 ; do
  echo $n
done

一次多个 for 循环

你可以将一个循环放在另一个循环中。这可以帮助你迭代多个变量,一次做不止一件事。假设你想打印出字母 A、B 和 C 与数字 1、2 和 3 的所有组合。你可以在 Bash 中使用两个 for 循环来实现,如下所示:

#!/bin/bash
for number in 1 2 3 ; do
  for letter in A B C ; do
    echo $letter$number
  done
done

如果将这些行放在名为 for.bash 的 Bash 脚本文件中并运行它,你会看到九行显示了所有字母与每个数字配对的组合:

$ bash for.bash
A1
B1
C1
A2
B2
C2
A3
B3
C3

遍历 Web 安全颜色

Web 安全颜色是从十六进制颜色 #000(黑色,即红色、绿色和蓝色值均为零)到 #fff(白色,即红色、绿色和蓝色均为最高),每个十六进制值的步进为 0、3、6、9、c 和 f。

你可以在 Bash 中使用三个 for 循环生成 Web 安全颜色的所有组合的列表,其中循环遍历红色、绿色和蓝色值。

#!/bin/bash
for r in 0 3 6 9 c f ; do
  for g in 0 3 6 9 c f ; do
    for b in 0 3 6 9 c f ; do
      echo "#$r$g$b"
    done
  done
done

如果将其保存在名为 websafe.bash 的新 Bash 脚本中并运行它,你就会看到所有 Web 安全颜色的十六进制值的迭代:

$ bash websafe.bash | head
#000
#003
#006
#009
#00c
#00f
#030
#033
#036
#039

要制作可用作 Web 安全颜色参考的 HTML 页面,你需要使每个条目成为一个单独的 HTML 元素。将每种颜色放在一个 <div> 元素中,并将背景设置为 Web 安全颜色。为了使十六进制值更易于阅读,将其放在单独的 <code> 元素中。将 Bash 脚本更新为如下:

#!/bin/bash
for r in 0 3 6 9 c f ; do
  for g in 0 3 6 9 c f ; do
    for b in 0 3 6 9 c f ; do
      echo "<div style='background-color:#$r$g$b'><code>#$r$g$b</code></div>"
    done
  done
done

当你运行新的 Bash 脚本并将结果保存到 HTML 文件时,你可以在浏览器中查看所有 Web 安全颜色的输出:

$ bash websafe.bash > websafe.html

Colour gradient.

这个网页不是很好看。深色背景上的黑色文字无法阅读。我喜欢应用一些 HTML 样式来确保十六进制值在颜色矩形内以黑色背景上的白色文本显示。为了使页面看起来非常漂亮,我还使用 HTML 网格样式来排列每行六个框,每个框之间留出一些空间。

要添加这种额外的样式,你需要在 for 循环前后包含其他 HTML 元素。顶部的 HTML 代码定义样式,底部的 HTML 代码关闭所有打开的 HTML 标签:

#!/bin/bash

cat<<EOF
<!DOCTYPE html>
  <html lang="en">
  <head>
    <title>Web-safe colors</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

<style>
div {
  padding-bottom: 1em;
}

code {
  background-color: black;
  color: white;
}

@media only screen and (min-width:600px) {

body {
  display: grid;
  grid-template-columns: repeat(6,1fr);
  column-gap: 1em;
  row-gap: 1em;
}

div {
  padding-bottom: 3em;
}

}
  </style>
</head>
</body>
EOF

for r in 0 3 6 9 c f ; do
for g in 0 3 6 9 c f ; do
for b in 0 3 6 9 c f ; do

echo "<div
style='background-color:#$r$g$b'><code>#$r$g$b</code></div>"

done
done
done

cat<<EOF

</body>
</html>
EOF

这个完成的 Bash 脚本以 HTML 格式生成 Web 安全颜色指南。每当你需要引用网络安全颜色时,运行脚本并将结果保存到 HTML 页面。现在你可以在浏览器中看到 Web 安全颜色的演示,作为你下一个 Web 项目的简单参考:

$ bash websafe.bash > websafe.html

Web colors.

(题图:MJ/abf9daf2-b72f-4929-8dd8-b77fb5b9d39b)


via: https://opensource.com/article/23/4/web-safe-color-guide-bash

作者:Jim Hall 选题:lkxed 译者:geekpi 校对:wxy

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

这是一个新教程系列的开始。在这一篇中,你将熟悉 bash 脚本。

本系列假定你对 Linux 终端比较熟悉。你不必精通,但了解基础知识会很好。我建议阅读终端基础知识系列。

这个系列适合谁?

任何想开始学习 Bash Shell 脚本的人。

如果你是一名将 Shell 脚本作为课程的一部分的学生,那么本系列适合你。

如果你是普通的桌面 Linux 用户,本系列将帮助你了解在探索各种软件和修复程序时遇到的大多数 Shell 脚本。你还可以使用它来自动执行一些常见的重复性任务。

到本 Bash 基础系列结束时,你应该能够编写简单到中等水平的 Bash 脚本。

该系列的所有章节都有示例练习,你可以边做边学。

? 你将在这里学习 Bash Shell 脚本。虽然还有语法基本相同的其他 Shell,但它们的行为在某些方面仍然存在差异。Bash 是最常见和通用的 Shell,因此学习 Shell 脚本从 Bash 开始吧。

你的第一个 Shell 脚本:Hello World!

打开一个终端。现在 创建一个新目录 来保存你将在本系列中创建的所有脚本:

mkdir bash_scripts

现在 切换到这个新创建的目录

cd bash_scripts

让我们在这里 创建一个新文件

touch hello_world.sh

现在,编辑该文件 并向其中添加一行 echo Hello World。你可以使用 cat 命令的追加模式(使用 >)执行此操作:

[abhishek@itsfoss]:~/bash_scripts$ cat > hello_world.sh 
echo Hello World
^C

我更喜欢在使用 cat 命令添加文本时添加新行。

Ctrl+CCtrl+D 键退出 cat 命令的追加模式。现在,如果你查看脚本 hellow_world.sh 的内容,你应该只看到一行。

Creating first shell script

关键时刻来了。你已经创建了第一个 Shell 脚本。是时候 运行 Shell 脚本 了。

这样做:

bash hello_world.sh

echo 命令只是显示提供给它的任何内容。在这种情况下,Shell 脚本应该在屏幕上输出 “Hello World”。

Run first shell script

恭喜! 你刚刚成功运行了第一个 Shell 脚本。多么酷啊!

以下是上述所有命令的重放,供你参考。

另一种运行 Shell 脚本的方法

大多数时候,你将以这种方式运行 Shell 脚本:

./hello_world.sh

这将产生错误,因为作为脚本的文件还没有执行权限。

bash: ./hello_world.sh: Permission denied

给脚本添加执行权限:

chmod u+x hello-world.sh

现在,你可以像这样运行它:

./hello_world.sh

Run shell scripts

因此,你学习了两种运行 Shell 脚本的方法。是时候让我们将注意力转回 Bash 了。

把你的 Shell 脚本变成 Bash 脚本

感到困惑? 实际上,Linux 中有几种可用的 Shell。Bash、Ksh、Csh、Zsh 等等。其中,Bash 是最受欢迎的,几乎所有发行版都默认安装了它。

Shell 是一个解释器。它接受并运行 Linux 命令。虽然大多数 Shell 的语法保持不变,但它们的行为在某些点上可能有所不同。例如,条件逻辑中括号的处理。

这就是为什么告诉系统使用哪个 Shell 来解释脚本很重要。

当你使用 bash hello_world.sh 时,你明确地使用了 Bash 解释器。

但是当你以这种方式运行 Shell 脚本时:

./hello_world.sh

系统将使用你当前使用的任何 Shell 来运行脚本。

为避免由于不同的语法处理而导致不必要的意外,你应该明确告诉系统它是哪个 shell 脚本。

怎么做? 使用释伴(#!)。通常,# 用于 Shell 脚本中的注释。但是,如果 #! 用作程序的第一行,它的特殊用途是告诉系统使用哪个 Shell。

因此,更改 hello_world.sh 的内容,使其看起来像这样:

#!/bin/bash

echo Hello World

现在,你可以像往常一样运行 Shell 脚本,因为你知道系统将使用 Bash Shell 来运行脚本。

Run bash shell script

? 如果你觉得在终端中编辑脚本文件不方便,作为桌面 Linux 用户,你可以使用 Gedit 或其他 GUI 文本编辑器编写脚本并在终端中运行。

?️ 练习时间

是时候练习你学到的东西了。以下是该级别的一些基本练习:

  • 编写一个打印 “Hello Everyone” 的 Bash 脚本
  • 编写一个显示当前工作目录的 Bash 脚本(提示:使用 pwd 命令)
  • 编写一个 Shell 脚本,使用以下列方式打印你的用户名:“My name is XYZ”(提示:使用 $USER

答案可以在社区论坛的 这个专门的帖子 中讨论。

最后一个练习使用 $USER。这是一个打印用户名的特殊变量。

这就引出了 Bash 基础系列下一章的主题:变量。

请继续关注下面的内容。

(题图:MJ/c8f6458a-84fe-4f77-9a9c-f82fef611935)


via: https://itsfoss.com/create-bash-script/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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

你的笔记本电脑就像一块空白的画布,可以用来展示个性化的装饰。你最喜欢的贴纸是什么?参与我们的调查,然后看看其他开源爱好者都说了些什么。

去年 12 月刚刚换了工作用的笔记本电脑后,我意识到我有多么喜欢给我的工作设备贴贴纸。这些贴纸有些是过去活动的纪念品,有些是我热衷的项目的标志,还有一些则只是为了好玩!

因为好奇别人的笔记本上贴了什么,我对周围的同事朋友问了一圈。

无障碍倡导者

AMyJune 的笔记本电脑上有很多 Drupal 贴纸

这是我的工作笔记本电脑(你能看出我对 Drupal 的热爱吗)。我最喜欢的贴纸是有轮椅的 Druplicon... 当 Drupal 8 发布时,我们把这个标志 和轮椅结合在一起,因为我所在的机构专注于无障碍性。

AmyJune Hineline

充满活力的 Java

Alan Formy-Duval 的笔记本电脑上有各种 Linux 贴纸

自从我还是个孩子的时候,我的电脑和其他东西上就一直有贴纸。我认为我最喜欢的要么是 “Tux”,要么是 “Linux Inside”。它们大多与领域相关,只有一些不相关的。在右下角,我有一个运行在“汤姆猫”上的 Java 贴纸(哈哈)- 这是我职业生涯中花费大部分时间的领域。

Alan Formy-Duval

实用目的

Rikard Grossman-Nielsen 的两台笔记本电脑上有贴着两条绒面条

嗯,我没有贴任何贴纸。然而,我在我的两台笔记本电脑上粘了绒面条,用来固定我的移动硬盘,这样我在公交车上玩游戏时就不会掉落了。我还粘了一个锁槽。

Rikard Grossman-Nielsen

保持外观

John 'Warthog9' Hawley 的笔记本电脑贴着各种标志

虽然这不是最装饰得最多的笔记本电脑,但我喜欢这套集合(你知道的,很难在没有旅行的情况下获得更多!)

我最喜欢的是“最后一个提交的人是维护者”。这是对维护状态的讽刺性评论,也承诺代码将因此而继续存在。

主要是关于我使用或贡献的事物,我认为有意义,或者只是觉得这个贴纸很棒。

John 'Warthog9' Hawley

盖掉 Windows

我从不在笔记本电脑上贴贴纸,因为对我来说,真正酷的贴纸似乎都是我没有的那些(一个脾气暴躁的老人说的)。

但是我孩子们在高中时用过的那台旧的组装计算机,一台拥有 3GHz Core Duo 处理器和 8GB 内存的机器上贴着一个我几年前在温哥华的 Linux 基金会开源峰会上拿到的 Open Mainframe 贴纸。我相当喜欢那个贴纸。

还有,因为在我的生活中,Control 键位于 A 键旁边,而不是在底部行,所以我周围有一些键盘上有一个 CTRL 贴纸在 CapsLock 键上,还有一个 CAPS 贴纸在 Control 键上,它们与 GNOME 调整工具中的 交换 Ctrl 和 CapsLock 选项 一起使用。

最后,过去我会剥掉那些带有 Windows 标志的贴纸,因为当时我唯一的选择是购买带有 Windows 税的计算机,并用 Linux 贴纸覆盖上面的胶片。同样,对于带有 Windows 标志的 Super 键的键盘,我也会这样做。

纪念品

StrangeMama 的笔记本电脑上有一个 Kanopi 贴纸和其他各种标志

迄今为止,Kanopi 贴纸是我最喜欢的贴纸。它不仅闪闪发光,而且呈现出七彩光泽,它时刻提醒我这家公司是多么令人惊奇。他们真的把员工放在首位,并在选择与 Kanopi 的整体公司使命和愿景相符的客户项目时非常周到。

Curt V8 贴纸是对一位亲密朋友的纪念。他热爱福特,而我丈夫喜欢雪佛兰。这种有趣的竞争导致我们在车库里乱放着福特和雪佛兰的物品,这取决于我们在哪家住。每次我看到这个仿制的福特贴纸时,我都会微笑,因为我生活在一个雪佛兰家族。

各种贴纸代表了我们多年来的家庭冒险。约会之夜,朋友,家庭公路旅行,惊险的徒步探险(天使阁),以及我年幼孩子争取从每个城市和州获得一张警察贴纸的动力。

Kristine Strange

会议福利品

Cindy William 的笔记本电脑上有各种标志,包括一个 Kanopi 贴纸和 Gilmore Girls 的标志

龙是 我所就读大学的吉祥物。我还贴了一些 Gilmore Girls 和咖啡贴纸。

这是我女儿房门的照片,上面贴满了我多年来从各种会议上带回来的贴纸。

Cindy William 的女儿房门上贴满了来自各种 WordPress 和 Drupal Camp 的标志

Cindy Williams

贴上鸡

这是我非工作用的笔记本电脑。我的工作笔记本电脑基本上被覆盖在一层蜂窝状的六边形贴纸中,上面印有我们的产品、我使用和支持的开源项目,以及至少一个 Opensource.com 的六边形贴纸。 : )

我无法挑出最喜欢的,因为它们都是我喜欢的,否则我就不会把它们贴在我随身携带的笔记本电脑上。我特别喜欢鸡、渡鸦和手持刀具的 Sergi the Cat。

Kevin Sonney 的笔记本电脑上贴着各种标志

Kevin Sonney 的笔记本电脑上贴着各种标志

Kevin Sonney

美食趣味

我过去经常在笔记本电脑上贴满贴纸。去年买的这台电脑很快就贴满了:

DJ Billings 的笔记本电脑上有各种标志,包括一个松饼标志

我最喜欢的是杯子蛋糕和甜甜圈标志,因为是我自己画的。我刚刚购买了一台 System76 的 Darter Pro 笔记本电脑,我非常喜欢它。我得到了一堆很酷的贴纸,但我一直不确定是否要把它们贴在笔记本上。我不知道为什么。

DJ Billings

保持简洁

Don Watkins 的笔记本电脑上贴有 opensource.com 和 Red Hat 的贴纸

我在我的笔记本电脑上不贴很多贴纸,但目前正在使用的这台笔记本上贴着我最喜欢的两个贴纸,它是 System76 的 Darter Pro。

Don Watkins

生活的必需品

Katie Sanders 的笔记本电脑和带有贴纸的 Yeto 杯子

我还包括了我的水瓶。我想我更喜欢那些贴纸。

啤酒,狗,音乐,牛角面包。我还需要什么?

Katie Sanders

我的座右铭

Faye Polson 的笔记本电脑上有“yeet or be yeeted”贴纸

我最喜欢的贴纸是 “yeet or be yeeted”。

Faye Polson

大蒜

Tiffany Bridge 的笔记本电脑上有电影、WordPress 和大蒜贴纸

大部分贴纸都是专业的,但 “Greetings from Hamunaptra”、“City of the Dead” 贴纸隐晦地参考了我最喜欢的电影之一《 木乃伊 The Mummy 》(1999),是由 Brendan Fraser 和 Rachel Weisz 主演的。

旗帜和 “Blackbeard's Bar & Grill” 贴纸指的是对我完全痴迷的 “Our Flag Means Death”。

而大蒜则是我朋友商店的 Cosmic Garlic 贴纸。大蒜在民间被用作各种疾病的草药疗法,所以在疫情期间把它放在笔记本电脑上似乎是一件好事。

Tiffany Bridge

开源项目

Seth Kenlon 的笔记本电脑上有各种 Linux 和开源贴纸

我通常会贴上我使用、贡献或钦佩的项目的贴纸。统计数据显示,我的笔记本电脑现在应该被覆盖了更多的贴纸。我已经三年没参加科技会议了,所以进展比以往慢一点。

Seth Kenlon

Drupal 装点一新

April 的笔记本电脑上贴着几个 Drupal 标志

我会添加一些代表我在技术领域的贴纸。所以我会包括我所参与的组织、我参加过的活动和我支持的项目。

见到人们笔记本电脑上的 Drupal 熊总是很有趣,因为我设计了它。

请注意,我所有的贴纸都贴在笔记本电脑外壳上以便保存。

April Sides

对 WordPress 狂热

Michelle Frechette 的笔记本电脑上有各种 WordPress 和 Wapuu 的贴纸

我很难选出最喜欢的,但可能是 “Michelle wapuu”!她就是我!

贴纸 “I press all the words” 和 “WordPress is my super power” 是来自 WordCamp Rochester,所以它们对我来说很重要。

基本上,如果我和某个贴纸有渊源(比如我在营地演讲过),或者我只是喜欢它,我就会贴上它!

Michelle Frechette

对艺术的热衷

Dagger McJagger 的笔记本电脑上有各种 Drupal 和开源的贴纸

我非常偏爱艺术贴纸。在电脑上看到艺术作品让我想起认识的人和使用这台电脑时的经历。

我最喜欢的是我的伴侣给我的悲伤表情 Midsommar 贴纸。第一次看完电影后,我们在剧院外花了几个小时讨论它,一直讨论到深夜。直到今天我们还在提到它。

Jonathan Daggerhart

自定义外观

Sallie Goetsch 的笔记本电脑上贴着女神 Ereshkigal 的定制外观贴纸

我在 2019 年买了一台新的旅行笔记本电脑,自那以后一直保持着原样,因为我没有参加任何活动。我的工作笔记本电脑上有一个女神 Ereshkigal 的定制外观贴纸,我以她的名字来命名这台电脑。

— Sallie Goetsch

GNU Emacs

Sachin Patil 的笔记本电脑上只有一个贴纸

一个 GNU Emacs 的贴纸。

Sachin Patil

Opensource.com

在看到大家的回复后,也许收到了非常聪明的社区经理寄来的一些很酷的贴纸...

好吧,好吧,我投降了!AmyJune、Don 和 Sachin 说服我在笔记本电脑上贴一个贴纸。

这是一张显示我笔记本电脑上独特贴纸的照片:

Chris Hermansen 的笔记本电脑上贴着 opensource.com 的贴纸

— Chris Hermansen

贴纸和开源

你不必为你的计算机贴满贴纸。这不是必须的,当然这也不能说明你比其他人更或更少热爱开源。但如果你喜欢一个开源项目,很有可能它有一款贴纸可以用来装饰你的计算机(或者你的门、水瓶或 USB 麦克风)。请放心,如果你热爱开源,同时你也喜欢贴纸,那两者之间有很强的交集!

(题图:MJ/3f69639a-1aab-46d8-97ee-ab095de96e5f)


via: https://opensource.com/article/22/11/laptop-stickers

作者:AmyJune Hineline 选题:lkxed 译者:ChatGPT 校对:wxy

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

pipx 解决了流行的 pip 工具的不足之处。学习在 Linux 中安装和使用 pipx

pip 是一种流行的工具,用于从 Python 包索引 中安装 Python 包和模块。

然而,在最近的发行版本中,pip 用户遇到了 外部管理环境错误

error: externally-managed-environment

这是为避免通过 pip 安装的 Python 包与本机包管理器之间发生冲突而添加的“功能”。Python 希望你使用单独的虚拟环境,而不是通过 pip 在全局安装包。

这就是 pipx 发挥作用的地方。它为你安装的每个应用创建一个新的虚拟环境,然后在全局级别的 /bin 中创建到本地二进制文件的链接。这一切都是自动的。它为你节省时间和精力。

让我们看看如何在 Ubuntu 和其他 Linux 发行版上安装和使用 pipx

在 Ubuntu 和其他 Linux 上安装 pipx

安装很简单,可以在 Ubuntu 和 Debian 上使用以下命令安装:

sudo apt update && sudo apt install pipx

对于其他发行版,请使用你的包管理器并安装它。

完成安装后,将其添加到 $PATH 以便可以从任何地方访问它:

pipx ensurepath

install pipx in ubuntu

关闭终端并重新启动它。这就完成了! 现在,让我们看看如何使用它。

使用 pipx

包管理器的主要用途是什么? 软件包安装、更新和删除。

让我向你展示如何使用 pipx 执行以下操作:

  • 搜索包
  • 包安装
  • 升级
  • 包移除

让我们从安装开始。

如何使用 pipx 安装包

要使用 pipx 安装包,你必须遵循一个简单的命令语法:

pipx install <package_name>

例如,在这里,我安装了一个非常有用的程序 Cowsay:

pipx install cowsay

install python packages in isolation using pipx in ubuntu

同样,如果你想安装特定版本的包,你必须在 == 后跟上版本号,如下所示:

pipx install package==version

例如,在这里,我安装了 1.24.1 版本的 numpy:

pipx install numpy==1.24.1

如何搜索包

pipx 程序没有搜索功能(因为 PyPI 的 API 使用限制)但这并不意味着你不能搜索 Python 包。

要搜索包,你需要安装 pypisearch

pipx install pypisearch

完成后,你可以使用 pypisearch 命令搜索包:

pypisearch python_package_name

在这里,我搜索了 neofetch:

search python packages in Ubuntu

如何使用 pipx 升级包

与任何其他现代包管理器一样,你可以一次升级所有包,也可以一次升级一个包。

要一次升级所有软件包,你只需执行以下命令:

pipx upgrade-all

upgrade all the python packages at once in ubuntu

如你所见,它将 numpy 升级到最新版本。

但是如果你想升级一个特定的包,你可以这样做:

pipx upgrade package-name

假设我想将 cowsay 包升级到最新版本,那么,我将使用以下命令:

pipx upgrade cowsay

upgrade specific python package using pipx in ubuntu

如何使用 pipx 卸载包

要删除包,你必须使用 uninstall 标志,如下所示:

pipx uninstall package_name

为了供你参考,在这里,我从我的系统中删除了 numpy

pipx uninstall numpy

remove python packages using pipx in ubuntu

pip 还是 pipx?

pip 的限制影响了最终用户对它的使用。值得庆幸的是,pipx 提供了急需的替代方案。它符合使用虚拟环境的 Python 准则,同时允许已安装的应用在全局范围内可用。

对于不是 Python 应用开发的最终用户,这提供了使用发行版仓库中不可用的 Python 应用的选项。

希望本教程对你有所帮助。如果你有任何问题或建议,请告诉我。

(题图:MJ/fc6190e2-a412-443e-a83c-91fce1dcf695)


via: https://itsfoss.com/install-pipx-ubuntu/

作者:Sagar Sharma 选题:lkxed 译者:geekpi 校对:wxy

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

在 Linux 中无法打开 AVIF 图片?AVIF 是一种新的网络图像文件格式,下面是在 Linux 桌面上查看 AVIF 图像的方法。

就质量而言,PNG 是最好的,但它们体积庞大,因此不适合用于网站。

JPEG 会减小文件大小,但会显着降低图像质量。

WebP 是一种相对较新的格式,可以生成尺寸更小、质量更好的图像。

现在,AVIF 是一种新的文件格式,可以在不牺牲质量的情况下压缩图像。对于相同的图像质量,它们比 WebP 更小。

最近 Linux 已开始提供 WebP 支持。但是,许多发行版默认不支持 AVIF 图像格式。

如果你从网络上下载 AVIF 格式的图像,它不会显示缩略图。

avif image no thumbnail

如果你尝试使用默认图像查看器打开它,它很可能会显示“无法识别的图像文件格式”错误。

avif images dont open linux

那么,解决方案是什么? 在 Linux 上根本看不了 AVIF 图像吗?

不,事实并非如此。对于 Linux,总有一种解决方法。

在 Linux 中查看 AVIF 图像文件

有一个名为 gThumb 的便捷 图像查看器,可用于在 Linux 上打开 AVIF 图像。

如果不是全部的话,它应该在大多数 Linux 发行版的仓库中可用。

在 Ubuntu 和基于 Debian 的发行版上,使用以下命令安装 gThumb。

sudo apt install gthumb

install gthumb ubuntu

安装后,选择一张 AVIF 图像,右键单击它并选择“ 打开方式 Open With ”选项。在这里,选择 gThumb,将其设为 AVIF 图像的默认值并打开它。

make gthumb default for avif

gThumb 在打开的图像下以缩略图格式显示同一文件夹中的所有图像。

avif image opened with gthumb in linux

使用 gThumb 打开 AVIF 图像后,它们也应该以缩略图显示。

avif image thumbnail

就是这样。你现在可以在 Linux 桌面上欣赏 AVIF 图像。

总结

gThumb 是一个用途极为广泛且功能强大的应用。这让我想知道为什么它不被用作 GNOME 或其他桌面环境和发行版中的默认图像查看器。

关于 Linux 中默认的 AVIF 支持,迟早会添加。目前,gThumb 完成了这项工作。

(题图:MJ/a54d1f0d-ea92-42dd-bb31-de8097153cad)


via: https://itsfoss.com/view-avif-images-linux/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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