2021年4月

有些人可能认为 RSS 阅读器已经不再,但它们仍然坚持在这里,特别是当你不想让大科技算法来决定你应该阅读什么的时候。Feed 阅读器可以帮你自助选择阅读来源。

我最近遇到一个很棒的 RSS 阅读器 NewsFlash。它支持通过基于网页的 Feed 阅读器增加 feed,例如 Feedly 和 NewsBlur。这是一个很大的安慰,因为如果你已经使用这种服务,就不必人工导入 feed,这节省了你的工作。

NewsFlash 恰好是 FeedReadeer 的精神继承者,原来的 FeedReader 开发人员也参与其中。

如果你正在找适用的 RSS 阅读器,我们整理了 Linux Feed 阅读器 列表供您参考。

NewsFlash: 一款补充网页 RSS 阅读器账户的 Feed 阅读器

请注意,NewsFlash 并不只是针对基于网页的 RSS feed 账户量身定做的,你也可以选择使用本地 RSS feed,而不必在多设备间同步。

不过,如果你在用是任何一款支持的基于网页的 feed 阅读器,那么 NewsFlash 特别有用。

这里,我将重点介绍 NewsFlash 提供的一些功能。

NewsFlash 功能

  • 支持桌面通知
  • 快速搜索、过滤
  • 支持标签
  • 便捷、可重定义的键盘快捷键
  • 本地 feed
  • OPML 文件导入/导出
  • 无需注册即可在 Feedly 库中轻松找到不同 RSS Feed
  • 支持自定义字体
  • 支持多主题(包括深色主题)
  • 启动/禁止缩略图
  • 细粒度调整定期同步间隔时间
  • 支持基于网页的 Feed 账户,例如 Feedly、Fever、NewsBlur、feedbin、Miniflux

除上述功能外,当你调整窗口大小时,还可以打开阅读器视图,这是一个细腻的补充功能。

newsflash 截图1

账户重新设置也很容易,这将删除所有本地数据。是的,你可以手动清除缓存并设置到期时间,并为你关注的所有 feed 设置一个用户数据存在本地的到期时间。

在 Linux 上安装 NewsFlash

你无法找到适用于各种 Linux 发行版的官方软件包,只有 Flatpak

对于 Arch 用户,可以从 AUR 下载。

幸运的是,Flatpak 软件包可以让你轻松在 Linux 发行版上安装 NewsFlash。具体请参阅我们的 Flatpak 指南

你可以参考 NewsFlash 的 GitLab 页面 去解决大部分问题。

结束语

我现在用 NewsFlash 作为桌面本地解决方案,不用基于网页的服务。你可以通过直接导出 OPML 文件在移动 feed 应用上得到相同的 feed。这已经被我验证过了。

用户界面易于使用,也提供了数一数二的新版 UX。虽然这个 RSS 阅读器看似简单,但提供了你可以找到的所有重要功能。

你怎么看 NewsFlash?你喜欢用其他类似产品吗?欢迎在评论区中分享你的想法。


via: https://itsfoss.com/newsflash-feedreader/

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

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

如果你知道如何在 C++ 中使用输入输出(I/O)流,那么(原则上)你便能够处理任何类型的输入输出设备。

 title=

在 C++ 中,对文件的读写可以通过使用输入输出流与流运算符 >><< 来进行。当读写文件的时候,这些运算符被应用于代表硬盘驱动器上文件类的实例上。这种基于流的方法有个巨大的优势:从 C++ 的角度,无论你要读取或写入的内容是文件、数据库、控制台,亦或是你通过网络连接的另外一台电脑,这都无关紧要。因此,知道如何使用流运算符来写入文件能够被转用到其他领域。

输入输出流类

C++ 标准库提供了 ios\_base 类。该类作为所有 I/O 流的基类,例如 basic\_ofstreambasic\_ifstream。本例将使用读/写字符的专用类型 ifstreamofstream

  • ofstream:输出文件流,并且其能通过插入运算符 << 来实现。
  • ifstream:输入文件流,并且其能通过提取运算符 >> 来实现。

该两种类型都是在头文件 <fstream> 中所定义。

ios_base 继承的类在写入时可被视为数据接收器,在从其读取时可被视为数据源,与数据本身完全分离。这种面向对象的方法使 关注点分离 separation of concerns 依赖注入 dependency injection 等概念易于实现。

一个简单的例子

本例程是非常简单:实例化了一个 ofstream 来写入,和实例化一个 ifstream 来读取。

#include <iostream> // cout, cin, cerr etc...
#include <fstream> // ifstream, ofstream
#include <string>


int main()
{
    std::string sFilename = "MyFile.txt";    

    /******************************************
     *                                        *
     *                WRITING                 *
     *                                        *
     ******************************************/

    std::ofstream fileSink(sFilename); // Creates an output file stream

    if (!fileSink) {
        std::cerr << "Canot open " << sFilename << std::endl;
        exit(-1);
    }

    /* std::endl will automatically append the correct EOL */
    fileSink << "Hello Open Source World!" << std::endl;


    /******************************************
     *                                        *
     *                READING                 *
     *                                        *
     ******************************************/
   
    std::ifstream fileSource(sFilename); // Creates an input file stream

    if (!fileSource) {
        std::cerr << "Canot open " << sFilename << std::endl;
        exit(-1);
    }
    else {
        // Intermediate buffer
        std::string buffer;

        // By default, the >> operator reads word by workd (till whitespace)
        while (fileSource >> buffer)
        {
            std::cout << buffer << std::endl;
        }
    }

    exit(0);
}

该代码可以在 GitHub 上查看。当你编译并且执行它时,你应该能获得以下输出:

 title=

这是个简化的、适合初学者的例子。如果你想去使用该代码在你自己的应用中,请注意以下几点:

  • 文件流在程序结束的时候自动关闭。如果你想继续执行,那么应该通过调用 close() 方法手动关闭。
  • 这些文件流类继承自 basic\_ios(在多个层次上),并且重载了 ! 运算符。这使你可以进行简单的检查是否可以访问该流。在 cppreference.com 上,你可以找到该检查何时会(或不会)成功的概述,并且可以进一步实现错误处理。
  • 默认情况下,ifstream 停在空白处并跳过它。要逐行读取直到到达 EOF ,请使用 getline(...) 方法。
  • 为了读写二进制文件,请将 std::ios::binary 标志传递给构造函数:这样可以防止 EOL 字符附加到每一行。

从系统角度进行写入

写入文件时,数据将写入系统的内存写入缓冲区中。当系统收到系统调用 sync 时,此缓冲区的内容将被写入硬盘。这也是你在不告知系统的情况下,不要卸下 U 盘的原因。通常,守护进程会定期调用 sync。为了安全起见,也可以手动调用 sync()

#include <unistd.h> // needs to be included

sync();

总结

在 C++ 中读写文件并不那么复杂。更何况,如果你知道如何处理输入输出流,(原则上)那么你也知道如何处理任何类型的输入输出设备。对于各种输入输出设备的库能让你更容易地使用流运算符。这就是为什么知道输入输出流的流程会对你有所助益的原因。


via: https://opensource.com/article/21/3/ccc-input-output

作者:Stephan Avenwedde 选题:lujun9972 译者:wyxplus 校对:wxy

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

OpenBSD 开始支持火星时间

为了让 OpenBSD 能在地球之外的地方工作,开发者宣布加入对协调火星时(MTC)的支持。协调火星时类似地球的世界标准时间。火星的旋转速度比地球略慢,一天时间为 24 小时 39 分钟 35.244 秒,显然处理时间的接口和程序会出现问题。通过将时区设置为 TZ=MCT,OpenBSD 将能在火星上正常工作。

迈向星际时代!什么时候 Linux 也支持火星时间,我就设置一个火星时钟~

在德国多特蒙德不用开源软件就得证明为什么不能用

多特蒙德市议会在 2020 年到 2025 年的备忘录中宣布数字化是一项政治领导任务。该会议通过了两项决议:尽可能使用开源软件;由行政部门开发或委托开发的软件要向公众开放。

该决议意味着有利于开源软件的举证责任倒置:未来,政府将不得不证明为什么不能将开源软件用于每个专有软件应用。

真是一场漂亮的胜利!

Coinbase 定于 4 月 14 日直接上市纳斯达克

美国最大的加密货币交易所 Coinbase 表示,该公司的上市注册声明已经被美国证券交易委员会宣布生效,它计划通过直接上市的方式上市,在上市过程中不会筹集任何新的资本。此次将是首次在纳斯达克进行的大型直接上市。此前所有此类上市都是在纽约证券交易所进行的。

趁着加密货币如火如荼,直接上市的 Coinbase 简直是风生水起。

了解一下用于构建自己的家庭实验室的硬件和软件方案。

你有想过创建一个家庭实验室吗?或许你想尝试不同的技术,构建开发环境、亦或是建立自己的私有云。拥有一个家庭实验室的理由很多,本教程旨在使入门变得更容易。

规划家庭实验室时,需要考虑三方面:硬件、软件和维护。我们将在这里查看前两方面,并在以后的文章中讲述如何节省维护计算机实验室的时间。

硬件

在考虑硬件需求时,首先要考虑如何使用实验室以及你的预算、噪声、空间和电力使用情况。

如果购买新硬件过于昂贵,请搜索当地的大学、广告以及诸如 eBay 或 Craigslist 之类的网站,能获取二手服务器的地方。它们通常很便宜,并且服务器级的硬件可以使用很多年。你将需要三类硬件:虚拟化服务器、存储设备和路由器/防火墙。

虚拟化服务器

一个虚拟化服务器允许你去运行多个共享物理机资源的虚拟机,同时最大化利用和隔离资源。如果你弄坏了一台虚拟机,无需重建整个服务器,只需虚拟一个好了。如果你想进行测试或尝试某些操作而不损坏整个系统,仅需要新建一个虚拟机来运行即可。

在虚拟服务器中,需考虑两个最重要的因素是 CPU 的核心数及其运行速度以及内存容量。如果没有足够的资源够全部虚拟机共享,那么它们将被过度分配并试着获取其他虚拟机的 CPU 的周期和内存。

因此,考虑一个多核 CPU 的平台。你要确保 CPU 支持虚拟化指令(因特尔的 VT-x 指令集和 AMD 的 AMD-V 指令集)。能够处理虚拟化的优质的消费级处理器有因特尔的 i5 或 i7 和 AMD 的 Ryzen 处理器。如果你考虑服务器级的硬件,那么因特尔的志强系列和 AMD 的 EPYC 都是不错的选择。内存可能很昂贵,尤其是最近的 DDR4 内存。当我们估计所需多少内存时,请为主机操作系统的内存至少分配 2 GB 的空间。

如果你担心电费或噪声,则诸如因特尔 NUC 设备之类的解决方案虽然外形小巧、功耗低、噪音低,但是却以牺牲可扩展性为代价。

NAS

如果希望装有硬盘驱动器的计算机存储你的所有个人数据,电影,图片等,并为虚拟化服务器提供存储,则需要 网络附加存储 Network-attached storage (NAS)。

在大多数情况下,你不太可能需要一颗强力的 CPU。实际上,许多商业 NAS 的解决方案使用低功耗的 ARM CPU。支持多个 SATA 硬盘的主板是必须的。如果你的主板没有足够的端口,请使用 主机总线适配器 host bus adapter (HBA)SAS 控制器添加额外的端口。

网络性能对于 NAS 来说是至关重要的,因此最好选择 千兆 gigabit 网络(或更快网络)。

内存需求根据你的文件系统而有所不同。ZFS 是 NAS 上最受欢迎的文件系统之一,你需要更多内存才能使用诸如缓存或重复数据删除之类的功能。 纠错码 Error-correcting code (ECC)的内存是防止数据损坏的最佳选择(但在购买前请确保你的主板支持)。最后但同样重要的,不要忘记使用 不间断电源 uninterruptible power supply (UPS),因为断电可能会使得数据出错。

防火墙和路由器

你是否曾意识到,廉价的路由器/防火墙通常是保护你的家庭网络不受外部环境影响的主要部分?这些路由器很少及时收到安全更新(如果有的话)。现在害怕了吗?好吧,确实

通常,你不需要一颗强大的 CPU 或是大量内存来构建你自己的路由器/防火墙,除非你需要高吞吐率或是执行 CPU 密集型任务,像是虚拟私有网络服务器或是流量过滤。在这种情况下,你将需要一个支持 AES-NI 的多核 CPU。

你可能想要至少 2 个千兆或更快的 以太网卡 Ethernet network interface cards (NIC),这不是必需的,但我推荐使用一个管理型交换机来连接你自己的装配的路由器,以创建 VLAN 来进一步隔离和保护你的网络。

 title=

软件

在选择完你的虚拟化服务器、NAS 和防火墙/路由器后,下一步是探索不同的操作系统和软件,以最大程度地发挥其作用。尽管你可以使用 CentOS、Debian或 Ubuntu 之类的常规 Linux 发行版,但是与以下软件相比,它们通常花费更多的时间进行配置和管理。

虚拟化软件

KVM 基于内核的虚拟机 Kernel-based Virtual Machine )使你可以将 Linux 变成虚拟机监控程序,以便可以在同一台机器中运行多个虚拟机。最好的是,KVM 作为 Linux 的一部分,它是许多企业和家庭用户的首选。如果你愿意,可以安装 libvirtvirt-manager 来管理你的虚拟化平台。

Proxmox VE 是一个强大的企业级解决方案,并且是一个完全开源的虚拟化和容器平台。它基于 Debian,使用 KVM 作为其虚拟机管理程序,并使用 LXC 作为容器。Proxmox 提供了强大的网页界面、API,并且可以扩展到许多群集节点,这很有用,因为你永远不知道何时实验室容量不足。

oVirt(RHV)是另一种使用 KVM 作为虚拟机管理程序的企业级解决方案。不要因为它是企业级的,就意味着你不能在家中使用它。oVirt 提供了强大的网页界面和 API,并且可以处理数百个节点(如果你运行那么多服务器,我可不想成为你的邻居!)。oVirt 用于家庭实验室的潜在问题是它需要一套最低限度的节点:你将需要一个外部存储(例如 NAS)和至少两个其他虚拟化节点(你可以只在一个节点上运行,但你会遇到环境维护方面的问题)。

网络附加存储软件

FreeNAS 是最受欢迎的开源 NAS 发行版,它基于稳定的 FreeBSD 操作系统。它最强大的功能之一是支持 ZFS 文件系统,该文件系统提供了数据完整性检查、快照、复制和多个级别的冗余(镜像、条带化镜像和条带化)。最重要的是,所有功能都通过功能强大且易于使用的网页界面进行管理。在安装 FreeNAS 之前,请检查硬件是否支持,因为它不如基于 Linux 的发行版那么广泛。

另一个流行的替代方法是基于 Linux 的 OpenMediaVault。它的主要功能之一是模块化,带有可扩展和添加特性的插件。它包括的功能包括基于网页管理界面,CIFS、SFTP、NFS、iSCSI 等协议,以及卷管理,包括软件 RAID、资源配额, 访问控制列表 access control lists (ACL)和共享管理。由于它是基于 Linux 的,因此其具有广泛的硬件支持。

防火墙/路由器软件

pfSense 是基于 FreeBSD 的开源企业级路由器和防火墙发行版。它可以直接安装在服务器上,甚至可以安装在虚拟机中(以管理虚拟或物理网络并节省空间)。它有许多功能,可以使用软件包进行扩展。尽管它也有命令行访问权限,但也可以完全使用网页界面对其进行管理。它具有你所希望路由器和防火墙提供的所有功能,例如 DHCP 和 DNS,以及更高级的功能,例如入侵检测(IDS)和入侵防御(IPS)系统。你可以侦听多个不同接口或使用 VLAN 的网络,并且只需鼠标点击几下即可创建安全的 VPN 服务器。pfSense 使用 pf,这是一种有状态的数据包筛选器,它是为 OpenBSD 操作系统开发的,使用类似 IPFilter 的语法。许多公司和组织都有使用 pfSense。


考虑到所有的信息,是时候动手开始建立你的实验室了。在之后的文章中,我将介绍运行家庭实验室的第三方面:自动化进行部署和维护。


via: https://opensource.com/article/19/3/home-lab

作者:Michael Zamot (Red Hat) 选题:lujun9972 译者:wyxplus 校对:wxy

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

在微服务环境中,服务网格为开发和运营提供了好处。

 title=

很多开发者不知道为什么要关心 服务网格 Service Mesh 。这是我在开发者见面会、会议和实践研讨会上关于云原生架构的微服务开发的演讲中经常被问到的问题。我的回答总是一样的:“只要你想简化你的微服务架构,它就应该运行在 Kubernetes 上。”

关于简化,你可能也想知道,为什么分布式微服务必须设计得如此复杂才能在 Kubernetes 集群上运行。正如本文所解释的那样,许多开发人员通过服务网格解决了微服务架构的复杂性,并通过在生产中采用服务网格获得了额外的好处。

什么是服务网格?

服务网格是一个专门的基础设施层,用于提供一个透明的、独立于代码的 (polyglot) 方式,以消除应用代码中的非功能性微服务能力。

 title=

为什么服务网格对开发者很重要

当开发人员将微服务部署到云时,无论业务功能如何,他们都必须解决非功能性微服务功能,以避免级联故障。这些功能通常可以体现在服务发现、日志、监控、 韧性 resiliency 、认证、 弹性 elasticity 和跟踪等方面。开发人员必须花费更多的时间将它们添加到每个微服务中,而不是开发实际的业务逻辑,这使得微服务变得沉重而复杂。

随着企业加速向云计算转移,服务网格 可以提高开发人员的生产力。Kubernetes 加服务网格平台不需要让服务负责处理这些复杂的问题,也不需要在每个服务中添加更多的代码来处理云原生的问题,而是负责向运行在该平台上的任何应用(现有的或新的,用任何编程语言或框架)提供这些服务。那么微服务就可以轻量级,专注于其业务逻辑,而不是云原生的复杂性。

为什么服务网格对运维很重要

这并没有回答为什么运维团队需要关心在 Kubernetes 上运行云原生微服务的服务网格。因为运维团队必须确保在 Kubernetes 环境上的大型混合云和多云上部署新的云原生应用的强大安全性、合规性和可观察性。

服务网格由一个用于管理代理路由流量的控制平面和一个用于注入 边车 Sidecar 的数据平面组成。边车允许运维团队做一些比如添加第三方安全工具和追踪所有服务通信中的流量,以避免安全漏洞或合规问题。服务网格还可以通过在图形面板上可视化地跟踪指标来提高观察能力。

如何开始使用服务网格

对于开发者和运维人员,以及从应用开发到平台运维来说,服务网格可以更有效地管理云原生功能。

你可能想知道从哪里开始采用服务网格来配合你的微服务应用和架构。幸运的是,有许多开源的服务网格项目。许多云服务提供商也在他们的 Kubernetes 平台中提供 服务网格。

 title=

你可以在 CNCF Service Mesh Landscape 页面中找到最受欢迎的服务网格项目和服务的链接。


via: https://opensource.com/article/21/3/service-mesh

作者:Daniel Oh 选题:lujun9972 译者:geekpi 校对:wxy

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

一个底层组件的许可证发生变化后,导致大量 Ruby 软件无法构建

有一个名为 mimemagic 的 Ruby GEM 被广泛使用于包括 Rails 在内的 Ruby 软件中。该组件 是以 MIT 许可证发布的,但它又依赖于一个以 GPLv2 许可证发布的 shared-mime-info,因此,按照许可证要求,mimemagic 也应该使用 GPLv2 许可证。在发现了这一错误之后,该组件作者马上撤回了其 MIT 许可证的版本,重新发布了使用 GPLv2 许可证的新版本,这当即导致许多依赖于该组件的软件构建失败。

这对于 Rails 和其他喜欢或需要 MIT 许可证的项目来说是不可接受的,虽然 mimemagic 后来发布了修订版,去除了对 GPLv2 组件的依赖,回到了 MIT 许可证,但是一些软件已经对 mimemagic (或者说对他的作者的草率行为)失望了,决定采用另外的 MIT 组件来替代它。最终 Rails 发布了新版本,放弃了 mimemagic

这件事说起来不复杂,但是目前这种叠床架屋的软件依赖架构,已经屡屡出现因为底层某个很小的组件的一些变化而导致很多上层组件和软件出现构建问题。我觉得是时候反思这种组件构建模式了。

Linux Mint 改进通知系统以敦促用户升级以保障安全

之前我们报道过,Linux Mint 的更新相对保守,以便用户可以完全控制何时、如何以及安装哪些更新;但这种思路导致一些用户运行过时的、存在缺陷的软件。Mint 称,“为了补救这个问题,我们创建了一个新的弹出式窗口,它可以让用户知道有多少更新,为什么需要应用更新,它让用户可以查看可用的更新,并为用户提供打开自动更新的选项。如果用户驳回通知,它将在两天后再次出现,所以它并不霸道。”

Mint 在小心翼翼地平衡用户体验和安全,为这个态度点赞。

微软正式发布支持树莓派 OS 的 VS Code 的新版本

VS Code 发布了 1.55,在此版本中,微软正式支持了树莓派 OS。其实,在几周前它就已经出现在了树莓派 OS 的 APT 仓库中了,当时还因为树莓派基金会在未通知用户的情况下,悄悄加入了微软的 APT 库而引发了一些争议,因为这使得每个运行树莓派 OS 的用户在更新时都会 “ping” 一下微软。

但对另外一些人来说,只是在意 VS Code 在树莓派上不多的内存上是否能好好运行。