2023年5月

中国淡出超算 TOP500 榜单

最新的一期超级计算机 TOP500 榜单已经出炉,前十名和上一期一样,没有变化。美国橡树岭国家实验室的 Frontier 仍然是唯一上榜的 E 级的超大规模系统。在榜单中的排名前列的中国超算还是太湖之光和天河 2A,分别位列第 7 和第 10。在此次榜单中,中国有 134 台超算,2023 年只增加了一台吉利公司的超算。而之前的一些论文中的数据透露,中国还有更强大的超算,但是没有显示在榜单中。

消息来源:The Register
老王点评:显然,中国已经不再需要参加这种榜单的排名了。原因大家都懂。

微软展示云电脑 Windows 365 Boot

微软在 Build 2023 上展示了一个技术预览,让物理 PC 可以启动到在 Azure 中运行的虚拟 PC,而不是从其本地驱动器运行 Windows。这项名为 “Windows 365 Boot” 的技术被认为是 “共享设备的一个伟大的解决方案,在那里用独特的用户身份登录可以把你带到你自己的个人和安全的云电脑。”不过微软没有说这项技术何时能普遍使用。

消息来源:The Register
老王点评:云电脑并不是什么稀奇的事情。但是我依然还是喜欢用本地电脑 —— 哦,不,我不使用 Windows。

PyPI 正在减少存储的 IP 地址数据

之前,我们 报道 过,Python 官方软件包库 PyPI 应美国司法部要求向其提供了几个用户的数据,包括 IP 地址等信息。这引来了一些用户对隐私的关切。PyPI 表示,它正在努力减少它所存储的用户数据,其目的不是为了无法回应合法的信息要求,而是为了只存储必要的最低数量的数据,以免使用户受到不必要的隐私侵犯。但这一努力早在 2020 年就在进行,自从此次提供了数据后,又被重新启动。

消息来源:The Register
老王点评:监管与隐私之间的平衡,确实难以拿捏。不知道国外有没有要求必须保存什么数据、保存多久的要求。

在本文中,我们将介绍如何在 RHEL 9/8 上使用 Pacemaker 设置两节点高可用性 Apache 集群。

Pacemaker 是适用于类 Linux 操作系统的高可用性集群软件。Pacemaker 被称为“集群资源管理器”,它通过在集群节点之间进行资源故障转移来提供集群资源的最大可用性。Pacemaker 使用 Corosync 进行集群组件之间的心跳和内部通信,Corosync 还负责集群中的投票选举(Quorum)。

先决条件

在我们开始之前,请确保你拥有以下内容:

  • 两台 RHEL 9/8 服务器
  • Red Hat 订阅或本地配置的仓库
  • 通过 SSH 访问两台服务器
  • root 或 sudo 权限
  • 互联网连接

实验室详情:

事不宜迟,让我们深入了解这些步骤。

1、更新 /etc/hosts 文件

在两个节点上的 /etc/hosts 文件中添加以下条目:

192.168.1.6  node1.example.com
192.168.1.7  node2.example.com

2、安装高可用包 Pacemaker

Pacemaker 和其他必需的包在 RHEL 9/8 的默认包仓库中不可用。因此,我们必须启用高可用仓库。在两个节点上运行以下订阅管理器命令。

对于 RHEL 9 服务器:

$ sudo subscription-manager repos --enable=rhel-9-for-x86_64-highavailability-rpms

对于 RHEL 8 服务器:

$ sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms

启用仓库后,运行命令在两个节点上安装 pacemaker 包:

$ sudo dnf install pcs pacemaker fence-agents-all -y

3、在防火墙中允许高可用端口

要允许防火墙中的高可用端口,请在每个节点上运行以下命令:

$ sudo firewall-cmd --permanent --add-service=high-availability
$ sudo firewall-cmd --reload

4、为 hacluster 用户设置密码并启动 pcsd 服务

在两台服务器上为 hacluster 用户设置密码,运行以下 echo 命令:

$ echo "<Enter-Password>" | sudo passwd --stdin hacluster

执行以下命令在两台服务器上启动并启用集群服务:

$ sudo systemctl start pcsd.service
$ sudo systemctl enable pcsd.service

5、创建高可用集群

使用 pcs 命令对两个节点进行身份验证,从任何节点运行以下命令。在我的例子中,我在 node1 上运行它:

$ sudo pcs host auth node1.example.com node2.example.com

使用 hacluster 用户进行身份验证。

使用下面的 pcs cluster setup 命令将两个节点添加到集群,这里我使用的集群名称为 http_cluster。仅在 node1 上运行命令:

$ sudo pcs cluster setup http_cluster --start node1.example.com node2.example.com
$ sudo pcs cluster enable --all

这两个命令的输出如下所示:

从任何节点验证初始集群状态:

$ sudo pcs cluster status

注意:在我们的实验室中,我们没有任何防护设备,因此我们将其禁用。但在生产环境中,强烈建议配置防护。

$ sudo pcs property set stonith-enabled=false
$ sudo pcs property set no-quorum-policy=ignore

6、为集群配置共享卷

在服务器上,挂载了一个大小为 2GB 的共享磁盘(/dev/sdb)。因此,我们将其配置为 LVM 卷并将其格式化为 XFS 文件系统。

在开始创建 LVM 卷之前,编辑两个节点上的 /etc/lvm/lvm.conf 文件。

将参数 #system_id_source = "none" 更改为 system_id_source = "uname"

$ sudo sed -i 's/# system_id_source = "none"/ system_id_source = "uname"/g' /etc/lvm/lvm.conf

node1 上依次执行以下一组命令创建 LVM 卷:

$ sudo pvcreate /dev/sdb
$ sudo vgcreate --setautoactivation n vg01 /dev/sdb
$ sudo lvcreate -L1.99G -n lv01 vg01
$ sudo lvs /dev/vg01/lv01
$ sudo mkfs.xfs /dev/vg01/lv01

将共享设备添加到集群第二个节点(node2.example.com)上的 LVM 设备文件中,仅在 node2 上运行以下命令:

[sysops@node2 ~]$ sudo lvmdevices --adddev /dev/sdb

7、安装和配置 Apache Web 服务器(httpd)

在两台服务器上安装 Apache web 服务器(httpd),运行以下 dnf 命令:

$ sudo dnf install -y httpd wget

并允许防火墙中的 Apache 端口,在两台服务器上运行以下 firewall-cmd 命令:

$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload

在两个节点上创建 status.conf 文件,以便 Apache 资源代理获取 Apache 的状态:

$ sudo bash -c 'cat <<-END > /etc/httpd/conf.d/status.conf
<Location /server-status>
    SetHandler server-status
    Require local
</Location>
END'
$

修改两个节点上的 /etc/logrotate.d/httpd

替换下面的行

/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true

/usr/bin/test -f /run/httpd.pid >/dev/null 2>/dev/null &&
/usr/bin/ps -q $(/usr/bin/cat /run/httpd.pid) >/dev/null 2>/dev/null &&
/usr/sbin/httpd -f /etc/httpd/conf/httpd.conf \
-c "PidFile /run/httpd.pid" -k graceful > /dev/null 2>/dev/null || true

保存并退出文件。

8、为 Apache 创建一个示例网页

仅在 node1 上执行以下命令:

$ sudo lvchange -ay vg01/lv01
$ sudo mount /dev/vg01/lv01 /var/www/
$ sudo mkdir /var/www/html
$ sudo mkdir /var/www/cgi-bin
$ sudo mkdir /var/www/error
$ sudo bash -c ' cat <<-END >/var/www/html/index.html
<html>
<body>High Availability Apache Cluster - Test Page </body>
</html>
END'
$
$ sudo umount /var/www

注意:如果启用了 SElinux,则在两台服务器上运行以下命令:

$ sudo restorecon -R /var/www

9、创建集群资源和资源组

为集群定义资源组和集群资源。在我的例子中,我们使用 webgroup 作为资源组。

  • web_lvm 是共享 LVM 卷的资源名称(/dev/vg01/lv01
  • web_fs 是将挂载在 /var/www 上的文件系统资源的名称
  • VirtualIP 是网卡 enp0s3 的 VIP(IPadd2)资源
  • Website 是 Apache 配置文件的资源。

从任何节点执行以下命令集。

$ sudo pcs resource create web_lvm ocf:heartbeat:LVM-activate vgname=vg01 vg_access_mode=system_id --group webgroup
$ sudo pcs resource create web_fs Filesystem device="/dev/vg01/lv01" directory="/var/www" fstype="xfs" --group webgroup
$ sudo pcs resource create VirtualIP IPaddr2 ip=192.168.1.81 cidr_netmask=24 nic=enp0s3 --group webgroup
$ sudo pcs resource create Website apache configfile="/etc/httpd/conf/httpd.conf" statusurl="http://127.0.0.1/server-status" --group webgroup

现在验证集群资源状态,运行:

$ sudo pcs status

很好,上面的输出显示所有资源都在 node1 上启动。

10、测试 Apache 集群

尝试使用 VIP(192.168.1.81)访问网页。

使用 curl 命令或网络浏览器访问网页:

$ curl http://192.168.1.81

或者

完美!以上输出确认我们能够访问我们高可用 Apache 集群的网页。

让我们尝试将集群资源从 node1 移动到 node2,运行:

$ sudo pcs node standby node1.example.com
$ sudo pcs status

完美,以上输出确认集群资源已从 node1 迁移到 node2

要从备用节点(node1.example.com)中删除节点,运行以下命令:

$ sudo pcs node unstandby node1.example.com

以上就是这篇文章的全部内容,我希望你发现它提供了丰富的信息,请在下面的评论部分中发表你的疑问和反馈。

(题图:MJ/3bf8c775-72ed-4e44-a28d-c872c7c8632f)


via: https://www.linuxtechi.com/high-availability-apache-cluster-on-rhel/

作者:Pradeep Kumar 选题:lkxed 译者:geekpi 校对:wxy

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

在这一章中,在实例的帮助下,学习如何使用函数并从中返回值。

就跟任何现代编程语言一样,Rust 也有函数。

你已经熟悉的函数是 main 函数。这个函数在程序启动时被调用。

但是其他函数呢?在本文中,你将学习如何在 Rust 程序中使用函数。

函数的基本语法

你可能已经在我们声明 main 函数时知道了这一点,不管怎么样,还是让我们看一下声明函数的语法。

// 声明函数
fn function_name() {
    <statement(s)>;
}

// 调用函数
function_name();

来让我们看一个简单的函数,它将字符串 "Hi there!" 打印到标准输出。

fn main() {
    greet();
}

fn greet() {
    println!("Hi there!");
}
? 与 C 不一样的是,不管你是否要在声明或定义之前调用函数都没有关系。只要这个函数在 某个地方 被声明了,Rust 就会处理它。

正如预期,它的输出如下:

Hi there!

这挺简单的。让我们把它提升到下一个级别。让我们创建一个接受参数并返回值的函数。有没有参数和有没有返回值这两者之间无关。

使用函数接受参数

声明一个接受参数的函数的语法如下:

// 声明函数
fn function_name(variable_name: type) {
    <statement(s)>;
}

// 调用函数
function_name(value);

你可以把函数参数想象成一个传递给函数的 元组。它可以接受多种数据类型的参数,而且你可以接受任意多个参数。所以,你不必局限于接受相同类型的参数。

与某些语言不同的是,Rust 没有 默认参数在调用函数时填充所有参数是强制性的

示例:饥饿函数

来让我们看一个程序来更好地理解这个。

fn main() {
    food(2, 4);
}

fn food(theplas: i32, rotis: i32) {
    println!(
        "我饿了... 我需要 {} 个葫芦巴叶饼和 {} 个罗提!",
        theplas, rotis
    );
}

在第 5 行,我声明了一个名为 food 的函数。这个函数接受 2 个参数:theplasrotis(印度食物的名字)。然后我打印了这些变量的内容。

对于 main 函数,我使用参数 24 调用 food 函数。这意味着 theplas 被赋值为 2rotis 被赋值为 4

来让我们看一下程序的输出:

我饿了... 我需要 2 个葫芦巴叶饼和 4 个罗提!

我现在真的饿了... ?

从函数返回值

就像函数可以接受参数一样,函数也可以返回一个或多个值。这样的函数的语法如下:

// 声明函数
fn function_name() -> data_type {
    <statement(s)>;
}

// 调用函数
let x = function_name();

函数可以使用 return 关键字或者使用表达式而不是语句来返回一个值。

等等!什么是表达式?

在进一步之前:语句与表达式

在讲解 Rust 函数的例子中提起这个可能不太合适,但是你应该理解 Rust 和其他编程语言中语句和表达式的区别。

语句是以分号结尾且 不会计算出某个值 的代码行。另一方面,表达式是一行不以分号结尾且计算出某个值的代码行。

来让我们用一个例子来理解:

fn main() {
    let a = 873;
    let b = {
        // 语句
        println!("Assigning some value to b...");

        // 表达式
        a * 10
    };

    println!("b: {b}");
}

在第 3 行,我开始了一个代码块,在这个代码块中我有一个语句和一个表达式。注释标明了哪个是哪个。

在第 5 行的代码不会计算出某个值,因此需要以分号结尾。这是一个语句。

第 8 行的代码计算出了一个值。它是 a * 10873 * 10),并计算出了 8730。因为这一行没有以分号结尾,所以这是一个表达式。

? 使用表达式是从代码块中返回某些东西的一种方便的方法。因此,当返回一个值时,它是 return 关键字的替代方案。表达式不仅仅用于从函数中 “返回” 一个值。正如你刚刚看到的,a * 10 的值是从内部作用域 “返回” 到外部作用域,并赋值给变量 b。一个简单的作用域不是一个函数,但表达式的值仍然被 “返回” 了。

示例:购买腐烂的水果

来让我们看一个演示以理解函数如何返回一个值:

fn main() {
    println!(
        "如果我从水果摊买了 2 公斤苹果,我必须付给他们 {} 印度卢比。",
        retail_price(2.0)
    );
    println!(
        "但是,如果我从水果摊买了 30 公斤苹果,我就要付给他们 {} 印度卢比。",
        wholesale_price(30.0)
    );
}

fn retail_price(weight: f64) -> f64 {
    return weight * 500.0;
}

fn wholesale_price(weight: f64) -> f64 {
    weight * 400.0
}

我在上述代码中有两个函数:retail_pricewholesale_price。两个函数都接受一个参数并将值存储在 weight 变量中。这个变量的类型是 f64,函数签名表示最终函数返回一个 f64 值。

这两个函数都将购买的苹果的重量乘以一个数字。这个数字表示苹果的当前每公斤价格。由于批发商有大量订单,物流在某种程度上更容易,价格可以降低一点。

除了每公斤价格之外,这两个函数还有一个区别。那就是,retail_price 函数使用 return 关键字返回乘积。而 wholesale_price 函数使用表达式返回乘积。

如果我从水果摊买了 2 公斤苹果,我必须付给他们 1000 印度卢比。
但是,如果我从水果摊买了 30 公斤苹果,我就要付给他们 12000 印度卢比。

输出显示,从函数返回值的两种方法都按预期工作。

返回多个值

你可以有一个返回不同类型的多个值的函数。你有很多选择,但返回一个元组是最简单的。

接下来是一个示例:

fn main() {
    let (maths, english, science, sanskrit) = tuple_func();

    println!("数学考试得分: {maths}");
    println!("英语考试得分: {english}");
    println!("科学考试得分: {science}");
    println!("梵语考试得分: {sanskrit}");
}

fn tuple_func() -> (f64, f64, f64, f64) {
    // return marks for a student
    let maths = 84.50;
    let english = 85.00;
    let science = 75.00;
    let sanskrit = 67.25;

    (maths, english, science, sanskrit)
}

函数 tuple_func 返回 4 个封装在一个元组中的 f64 值。这些值是一个学生在四门科目(满分 100 分)中获得的分数。

当函数被调用时,这个元组被返回。我可以使用 tuple_name.0 方案打印这些值,但我认为最好先解构元组,这样可以帮助我们搞清楚值对应的是什么。然后我使用了包含被解构的元组的值的变量来打印分数。

这是我得到的输出:

数学考试得分: 84.5
英语考试得分: 85
科学考试得分: 75
梵语考试得分: 67.25

总结

本文介绍了 Rust 编程语言中的函数。这些是函数的 “类型”:

  • 不接受任何参数也不返回任何值的函数
  • 接收一个或多个参数的函数
  • 给调用者返回一个或多个值的函数

你知道接下来是什么吗?Rust 中的条件语句,也就是 if-else。请继续关注并享受学习 Rust 的过程。

(题图:MJ/5a07503b-c691-4276-83b2-bb42f5fda347)


via: https://itsfoss.com/rust-functions/

作者:Pratham Patel 选题:lkxed 译者:Cubik65536 校对:wxy

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

红帽利用 Ansible 数据训练运维 AI

红帽和 IBM 创建了 Project Wisdom,这使用户能够将编码命令作为一个简单的英语句子来输入,例如,“部署网络应用栈” 或 “安装 Nodejs 依赖”。这发展成了红帽的第一个重要的人工智能产品:Ansible Lightspeed。这种生成性人工智能服务提供了更一致、更准确、更快速的自动化。它使用自然语言处理,并与代码助理集成,以访问建立在红帽的 Kubernetes 服务 OpenShift 上的 IBM 基础模型。这些 LLM 是建立在红帽已知的正确数据上的,是基于经过测试的、高质量的数据和代码,而不是某个人为了赶时间而匆忙写出来的垃圾。

消息来源:The Register
老王点评:这才叫 “AIOps”。不过我总是还有点担忧,LLM 这种模型即便是在可信的数据上进行训练的,偶尔也会有“幻觉”出现,那对于运维可能就是灾难了。

Windows 11 也将有应用的云备份功能

智能手机用户长期以来一直享有云备份和恢复的功能,你可以购买一个新设备,在第一次启动时,只需登录你的平台账户,从云备份中选择 “恢复我的应用程序”。而现在,Windows 11 也能做到这一点。微软在 Build 2023 上宣布了这一功能。如果用户选择恢复,Windows 11 将自动应用旧的墙纸和设置,甚至开始预装你在旧电脑上安装的应用程序。一旦用户进入桌面,他们会看到任务栏中已经有了他们之前钉住的所有应用程序,点击它们将从微软商店自动下载。

消息来源:Windows Central
老王点评:这种功能我们在智能手机使用的怡然自得,可为什么换成 Windows 我就觉得那么不放心呢?

亚马逊关闭其中国的安卓应用商店

在亚马逊将其 Kindle 电子书阅读器撤出中国的 11 个月后,它又宣布在中国关闭其安卓应用商店。这个安卓应用商店几乎没有人使用,它为其基于安卓的 Fire 平板提供了应用市场。这个平板每年在全球销售约 1600 万台,而在中国销售更少。此外,亚马逊的安卓应用市场上的应用也提供给 Windows 的安卓子系统。

消息来源:The Register
老王点评:反正也没人使用。不过,对于 Windows 的安卓子系统用户,可能下载应用就麻烦了,但这个可能也没啥人用。

内疚通常被认为是一种消极的情绪,但通过很好地引导它,你可以取得令人惊讶的成功。

最近,一位朋友兼同事问我是否有兴趣一起在会议上发言。我很惊喜,因为我对他们展示的项目贡献不大,但我表达了兴趣。我们开会讨论演讲内容,那时我才知道我被邀请参加的真正原因:会议的 多样性、公平性和包容性(DEI) 倡议要求至少有一名发言人不是男性。我被冒犯了。感觉我被邀请参加会议只是因为我的性别,而不是基于我的能力。

我的朋友向我保证,这并不是邀请我的唯一原因。他们需要新的贡献者,因为有很多工作要做,他们希望我可以帮助填补这一空白。

我考虑了一下,并试图理解为什么会有 DEI 的举措。我还想到了硬币的另一面,想做演讲的人不能做演讲,除非他们找到一个来自少数群体的人和他们一起演讲。

当我想到大局和这个机会将给我带来的好处时,我决定放弃我的自我伤害。一旦我放下被冒犯的感觉,我就意识到,我在介绍我没有直接贡献的东西时也感到非常不舒服。我的道德观并不认同这一点。我怎么可能踏上舞台,充当我没有努力过的东西的代言人?

决心提供更多帮助

我对这个项目做了一些研究。这项技术对我来说并不完全陌生,而且我很好地掌握了它所要实现的基本原理。事实上,它的总体目标让我感到很兴奋,可以做出贡献。如果做得好,它对用户来说将是超级有用的。

我下定决心,只有当我有机会十倍地回馈社区并成为一个关键的贡献者时,我才会继续这个演讲机会。我的朋友非常愿意帮助我走上这条道路。

带着这个决心,我们提交了我们的演讲。我的共同演讲者都很支持我,让我感到很受欢迎。他们说,只要我对这个项目有兴趣,有热情,其他都不重要。

参加这次会议是一个巨大的机会,它对我产生了如此 积极的影响。我遇到了很多开源社区的有经验的人,我感到很受鼓舞!我学到了很多新的东西!我从会议上的人和各种小组、会议和讨论中学到了 很多 新东西。我们的演讲很顺利,我认为在这样一个大型会议上发表演讲是一个相当大的成就。

然而,会议一结束,我的 内疚感 就开始发作了。

内疚是一种动力

我觉得我欠这个社区和那些给我这个机会的人。我想专注于我所做的承诺,但在其他更优先的事情的阻碍下,这很难。每当我偏离我的计划时,内疚感就会让我坚持下去。它提醒我,我必须回馈给我这样一个好机会的社区。经过几个月的挣扎和折腾,我可以自豪地说,我没有放弃。今天,我是这个项目的一个积极贡献者。

我喜欢它带来的挑战,我喜欢解决项目领域中的一些关键问题。我还能够带头在我们的下游生态系统中实施这个上游项目。作为锦上添花,我再次被邀请与团队一起展示,并向社区介绍项目的最新情况。这一次,不是因为 DEI 的倡议,因为比例已经平衡了。

感到内疚毕竟不是那么糟糕!

我很高兴我抓住了这个机会,我也很高兴这对每个参与者来说都是一个双赢的局面。如果没有人找我做共同主持人,我可能永远也不会参与这个项目,那将是多么大的失误啊!我很感激这些人!我很感谢那些给我这个机会并支持我的人。

我可能不是唯一面临这种情况的女性。我想告诉所有的女性,如果这样的机会出现,没有必要感到内疚,或者你“欠”别人的,或者任何形式的压力。如果你确实感到这种压力,那么就把这种情绪变成一种武器,用它来做好事!

这样就和标题联系起来了吗?因为我说的是我如何把这种内疚感作为一种动力,但也说首先不要感到任何内疚、

另一方面,不确定我们是否应该将文章的标题改为“DEI 机会在开始时可能不舒服,但有优势”之类的东西?无论如何,我对这篇文章总体上是满意的!

(题图:MJ/19d2ee02-eaf1-4cd7-8bd2-0be83466b2fc)


via: https://opensource.com/article/23/4/guilt-motivation

作者:Surya Seetharaman 选题:lkxed 译者:geekpi 校对:wxy

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

你已尽力而为,但提醒仍然有帮助!

reminders

你经常忘记事情吗? 需要一点帮助来记住你的任务吗? ?

虽然你可以使用 Linux 的笔记应用,但它们可能无法有效地提醒你任务和事情。

“Reminders” 应用可以成为你的小帮手,提醒你未完成的工作。

让我们看看它能为你做些什么。

Reminders:概述 ⭐

Reminders 是一个简单的 Linux 开源提醒应用,主要使用 Python 编写。它在一个紧凑的包中包含了一些很好的特性。

你也可以将其用作 待办事项列表应用 之一。

当你启动该应用时,你会看到一个精简的主屏幕,所有提醒都井井有条。

当然,我创建了一些你可能想要关注的有趣任务!?

a screenshot of the homescreen of the reminders app

? 默认情况下,你所有的提醒都按时间排序; 你可以使用左上角的切换按钮更改它。

你可以使用右下角的加号按钮创建新提醒。你可以给它起一个名字、一个简短的描述、将它设置为一个重要的提醒,并设置日期/时间。

你还可以将其设置为以特定的时间间隔重复,例如分钟、小时、天和周。

当提醒时间到了时,它会向你显示通知并播放声音通知你。

a screenshot of the new reminder dialog window on reminders

犯了一个错误?

你可以通过选择现有提醒并单击 “ 编辑 Edit ” 按钮来编辑它们。

a screenshot showcasing the edit reminder functionality on reminders

你还可以进入“ 即将到来的提醒 Upcoming Reminders ”类别以查看已安排的提醒。

a screenshot of the upcoming reminders section on reminders

同样,你可以通过进入特定类别来查看过去的提醒和已完成的提醒:“ 过去的提醒 Past Reminders ” 和 “ 已完成的提醒 Completed Reminders ”。

a screenshot of the past reminders section on reminders

Reminders 还支持自定义列表,可以整齐地组织提醒事项,以便快速轻松地访问。

请允许我向你展示如何创建列表。

首先,你必须创建一个自定义列表,方法是单击边栏中的 “ 编辑列表 Edit Lists ” 按钮创建一个。

a screenshot of the custom lists feature on reminders

然后,在创建新提醒时,在 “ 位置 Location ” 选项下,选择你刚刚创建的列表。

? 你还可以在编辑现有提醒时选择列表。

a screenshot of using the custom lists feature on reminders

现在,单击侧边栏菜单中的列表以查看其下方的提醒。

a screenshot of the custom lists category on reminders

? 这让我印象深刻。Reminders 有可选支持,链接一个人的微软帐户以与他们的微软 To Do 列表同步

这是一个非常简单的链接过程,能够调整获取待办事项的自动刷新频率。

a screenshot of the microsoft to do integration on reminders

Reminders 在一个非常紧凑的包中提供了一些很棒的功能,微软 To Do 集成可能会吸引正在寻找具有此类功能的 Linux 应用的用户。

最接近的替代方案是 “Go For It!”,这是另一个提供类似用户体验的 Linux 待办事项应用(未活跃维护,但足够好)。

? 获取 Reminders

你可以从 Flathub 下载 Reminders 应用或使用 GitHub 上的源代码构建它。

他们有将其移植到 Windows 的计划,但它可能发生也可能不会发生。

如果你已经安装了 Flatpak,你可以在终端输入以下命令来安装它:

flatpak install flathub io.github.dgsasha.Remembrance
下载 Reminders(Flathub)

? 你使用什么待办事项或提醒应用来跟踪你想做的事情? 在下面的评论中分享你的选择。


via: https://news.itsfoss.com/reminders/

作者:Sourav Rudra 选题:lkxed 译者:geekpi 校对:校对者ID

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