From a0e7de5ecf8bc0e779975d03fc34c36ac51b61a6 Mon Sep 17 00:00:00 2001 From: Bright Huang Date: Wed, 8 Feb 2023 13:25:07 +0800 Subject: [PATCH 01/83] D --- ...blishing- Platinum open access journals.md | 80 ------------------- 1 file changed, 80 deletions(-) delete mode 100644 sources/talk/20220513 When open source meets academic publishing- Platinum open access journals.md diff --git a/sources/talk/20220513 When open source meets academic publishing- Platinum open access journals.md b/sources/talk/20220513 When open source meets academic publishing- Platinum open access journals.md deleted file mode 100644 index da6d702522..0000000000 --- a/sources/talk/20220513 When open source meets academic publishing- Platinum open access journals.md +++ /dev/null @@ -1,80 +0,0 @@ -[#]: subject: "When open source meets academic publishing: Platinum open access journals" -[#]: via: "https://opensource.com/article/22/5/platinum-open-access-academic-journals" -[#]: author: "Joshua Pearce https://opensource.com/users/jmpearce" -[#]: collector: "lkxed" -[#]: translator: "CanYellow" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -当开源遇到学术出版:白金开放获取期刊 -====== - -学者现在可以免费发表(文章),免费阅读(文章),与此同时仍然能够在专业成就的道路上持续进步。 - -![Stack of books for reading][1] -图自:Opensource.com - -学者们经常将他们的作品免费提供给公司,然后却要花钱购买它!你能想象农民在免费送出他们的食物之后再重新花钱买回来做晚餐吗?可能不能吧。像我这样的学者陷入这样的阴谋中几十年了,我们以工作安全为交换免费提供我们的作品,然后却要每年花几百万美元来阅读我们自己的文章。 - -幸运的是,情况正在发生改变。我刚刚完成的一项[研究][2]的结果显示:对于学者来说,获得工作安全保障的同时而不对此付出代价是可能的。我的研究发现数百种期刊是 *白金开放获取* (platinum open access,译注:源自中文网络)的——也就是说,它们不需要作者或者读者就同行评议的文章付费,却仍然享有声望和读者群以帮助学者在他们的职业生涯中取得成功。 - -这一趋势正在扩张:[开放获取期刊目录][3]罗列了超过17300种期刊,这些期刊均提供了某种程度上的开放获取(OA)方式。该目录还提供了超过12250种无须文章处理费(APC)的期刊。我使用一段简易的开源[Python 脚本][4]来将该列表与另一按照期刊发表的文章被其他文章引用的频次排名的期刊列表(期刊影响因子列表)进行比较。很明显,最近几年来,总体的开放获取(OA)期刊与白金开放获取(OA)期刊均呈上升趋势。这一趋势可能有助于在避免学术奴役的同时加速科学发展。 - -### 学者的窘境 - -学者们通常是相当聪慧的,那么他们为什么如此长时间地投身于这种不利体系中呢?简而言之,学者陷于这样一个陷阱中:为了维系他们的工作和获得终身教职,他们需要在高影响因子(impact factor)的期刊上发表文章。影响因子是一种基于最近两年间在给定期刊上发表的文章的平均引用数量的衡量指标。影响因子由 Web of Science 索引。对学者而言,影响因子是一个有影响力的衡量指标。 - -历史上,学术出版由一小部分主要出版商统治。他们采用基于订阅制的商业模式。在这样的商业模式中,学术作者撰写文章,评审同行的文章,也经常进行这些文章的编辑工作。这些工作都是没有任何报酬的。这些文章出版了,它们的版权则由那些主要的出版公司所有。即使是参与上述工作的学者也需要个人付费阅读这些文章(~每篇文章35美元),或者由他们所在学校的图书馆付费订阅期刊上的所有文章。(订阅)所花的费用是相当可观的:单一出版商的所有文章的订阅费用通常超过一百万每年。 - -有很多显然的理由都说明这一体制是毫无意义的。限制对隐匿在付费专区后的受版权保护的科学文献的访问使得科学进程陷于停滞。如果你因为无法查看而不知道前沿科技是什么的话,你就无法进行相应的前沿技术研究。科学家分为能够负担访问这些文章的费用的人以及不能负担(这些费用的人)。在这个发展的世界中,学者一般都努力负担这些费用,不过即使是财力雄厚的[哈佛大学][5]也已经采取行动控制它的年度期刊费用。 - -文章作者的花费也同样高昂。每篇文章的文章处理费从几百美元到骇人听闻的几千美元不等。文章处理费对一些资金不足的学科尤其有害,比如人文学科与社会学科(与物理学、医学和工程学相比而言)。大量的文章处理费也强化了学术界的贫富差距,使得(学者的)专业成就依赖于其所拥有的将收入投入文章发表的能力。还有其他的要求从业者付费为他人制造产品的职业吗? - -### 开放获取,解决之道! - -开放获取行动可以解决上述问题,开放获取行动倡导使所有的学术文献对任何人都能自由自由获取。开放获取的出版量有明显上升:它占了当前同行评议文章的将近三分之一。 - -开放获取的优势分两个方面。首先,开放获取有利于科学整体,因为它提供了一个不受阻碍地阅读前沿技术的方式。这些技术有助于进一步做出重要的认知进步。其次,就学者个人层面而言,通过让他们的作品在网络上轻而易举地免费获得,开放获取提供了最大化他们作品的潜在受众的实际优势。 - -基于上述原因,资助者已经开始要求开放获取,尤其是科学领域的公共资助者。如果一项研究的公共资助者还需要在阅读研究内容时二次付费,这种做法很难站得住脚。 - -### 学术出版目前身处何方,以后又去向何处? - -传统出版商仍然掌控着目前的局面,主要是因为认为他们垄断了具有影响因子的期刊这一认知。很多学者无视传统出版方式的缺点,仍然持续在基于订阅制的期刊上发表文章或者支付高昂的文章处理费,因为他们知道在高影响因子的期刊上发表文章是至关重要的,它能够提供赖以获取补助、终身教职与职位晋升的专业性的证明。 - -多年以前,学术界完全没有选择的余地:要么在具有影响因子的期刊上发表,要么在通过开放获取方式发表。现在他们可以通过开放获取方式发表并仍然能够通过以下三种方式之一享受影响因子的益处: - -* 绿色开放获取模式(Green OA):以传统方式出版后,再通过上传预印版或者接受版论文至开放仓库或者服务器完成自行归档。一些高校拥有用于上述目的的公共仓库。举例而言,韦仕敦大学(Western University,译注:来自中文网络)拥用[Scholarship@Western][6]公共仓库,该校的任何教师都可以在上面分享他们的作品。没有属于自己的公共仓库的学者可以使用诸如[preprints.org][7], [arXiv][8], or  [OSF preprints][9]等网络服务器。我也会将社交媒体用于学术,比如将[Academia][10] 或 [ResearchGate][11] 用于自行存档。由于不同的出版商设计了不同的规则,这是不方便查阅的,而且某种程度上是耗时耗时耗力的。 - -* 金色开放获取模式(Gold OA):在日益壮大的具有影响因子的期刊列表上选一份期刊发表,它将使你的文章发表后可以自由获取但是需要文章处理费。这种方式易于查阅:开放获取设置内建于出版过程中,只需要像往常一样进行学术出版。这种方式的缺点是用于文章处理的费用可能会从研究活动中挪用。 - -* 白金开放获取模式(Platinum OA):在具有影响因子的白金开放获取期刊上发表。不需要为出版和阅读付费。挑战在于在您的学科中找到符合上述标准的期刊,不过情况正在持续变化。 - -目前已经有数以万计的期刊,但是具有影响因子的白金开放获取期刊仅仅几百种。对于学者,困难可能在于在他们的研究与符合他们预期的期刊之间找到一个合适的平衡。你可以在我研究的附录中找到本文提到的列表,或者使用上文提到的 Python 脚本自行更新列表数量。白金开放获取期刊的数量正在快速增长,因此如果你目前尚未找到合适的期刊,仍然可能在不久以后拥有一些可靠的期刊以供选择。祝你享受出版的乐趣! - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/22/5/platinum-open-access-academic-journals - -作者:[Joshua Pearce][a] -选题:[lkxed][b] -译者:[CanYellow](https://github.com/CanYellow) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/jmpearce -[b]: https://github.com/lkxed -[1]: https://opensource.com/sites/default/files/lead-images/books_read_list_stack_study.png -[2]: https://doi.org/10.3390/knowledge2020013 -[3]: https://doaj.org/ -[4]: https://osf.io/mh4bx/ -[5]: https://www.theguardian.com/science/2012/apr/24/harvard-university-journal-publishers-prices -[6]: https://ir.lib.uwo.ca/ -[7]: https://www.preprints.org/ -[8]: https://arxiv.org/ -[9]: https://osf.io/preprints/ -[10]: https://westernu.academia.edu/JoshuaPearce/Papers -[11]: https://www.researchgate.net/profile/Joshua-Pearce -[12]: https://www.mdpi.com/2673-9585/2/2/13 From cdacc2c2b7372a09fd2e1d898b1ec60e0df091eb Mon Sep 17 00:00:00 2001 From: Bright Huang Date: Sat, 18 Feb 2023 09:48:54 +0800 Subject: [PATCH 02/83] W2 --- ...Fielding-s Misappropriated REST Dissertation.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md b/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md index 406b7049c6..3950cde9be 100644 --- a/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md +++ b/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md @@ -7,15 +7,29 @@ [#]: via: (https://twobithistory.org/2020/06/28/rest.html) [#]: author: (Two-Bit History https://twobithistory.org) +被错误使用的罗伊·菲尔丁的有关描述性状态迁移的博士论文 +====== + +TD Roy Fielding's Misappropriated REST Dissertation ====== +符合描述性状态迁移的 (RESTful,REST译自审定公布名词数据库) 应用程序接口 (API) 无处不在。有趣的是又有多少人真正了解“描述性状态迁移”的应有之义呢? + +DN RESTful APIs are everywhere. This is funny, because how many people really know what “RESTful” is supposed to mean? +大概我们中的大多数人都会跟[黑客新闻网站上的这篇公开问答][1]产生共鸣: I think most of us can empathize with [this Hacker News poster][1]: +> 我阅读了几篇介绍描述性状态迁移的文章,甚至包括原始论文的部分章节。然而我仍然对描述性状态迁移到底是什么只有一个相当模糊的想法。我开始认为没有人真的了解描述性状态迁移,它仅仅是一个定义相当不充分的概念。 + +DN > I’ve read several articles about REST, even a bit of the original paper. But I still have quite a vague idea about what it is. I’m beginning to think that nobody knows, that it’s simply a very poorly defined concept. +我曾经计划写一篇有关描述性状态迁移的博客,在里面探讨描述性状态迁移是如何成为这样一个在网络通信领域占主导地位的范式的。我通过阅读[2000年发表的罗伊·菲尔丁的博士论文][2]开始我的研究,这篇博士论文向世人介绍了描述性状态迁移的概念。在读过菲尔丁的博士论文以后, + + I had planned to write a blog post exploring how REST came to be such a dominant paradigm for communication across the internet. I started my research by reading [Roy Fielding’s 2000 dissertation][2], which introduced REST to the world. After reading Fielding’s dissertation, I realized that the much more interesting story here is how Fielding’s ideas came to be so widely misunderstood. Many more people know that Fielding’s dissertation is where REST came from than have read the dissertation (fair enough), so misconceptions about what the dissertation actually contains are pervasive. From d65cd66b768c8c3ae4d18726984e62974e540450 Mon Sep 17 00:00:00 2001 From: CanYellow Date: Mon, 27 Feb 2023 13:26:40 +0800 Subject: [PATCH 03/83] h0227 --- ... Fielding-s Misappropriated REST Dissertation.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md b/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md index 3950cde9be..c26b86d313 100644 --- a/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md +++ b/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md @@ -7,7 +7,7 @@ [#]: via: (https://twobithistory.org/2020/06/28/rest.html) [#]: author: (Two-Bit History https://twobithistory.org) -被错误使用的罗伊·菲尔丁的有关描述性状态迁移的博士论文 +被错误应用的罗伊·菲尔丁的有关描述性状态迁移的博士论文 ====== TD @@ -27,15 +27,22 @@ I think most of us can empathize with [this Hacker News poster][1]: DN > I’ve read several articles about REST, even a bit of the original paper. But I still have quite a vague idea about what it is. I’m beginning to think that nobody knows, that it’s simply a very poorly defined concept. -我曾经计划写一篇有关描述性状态迁移的博客,在里面探讨描述性状态迁移是如何成为这样一个在网络通信领域占主导地位的范式的。我通过阅读[2000年发表的罗伊·菲尔丁的博士论文][2]开始我的研究,这篇博士论文向世人介绍了描述性状态迁移的概念。在读过菲尔丁的博士论文以后, - +我曾经计划写一篇有关描述性状态迁移的博客,在里面探讨描述性状态迁移是如何成为这样一个在网络通信领域占主导地位的范式的。我通过阅读[2000年发表的罗伊·菲尔丁的博士论文][2]开始我的研究,这篇博士论文向世人介绍了描述性状态迁移的概念。在读过菲尔丁的博士论文以后,我意识到,相比之下,更引人注意的是菲尔丁的理论缘何受到如此普遍的误解。 +DN I had planned to write a blog post exploring how REST came to be such a dominant paradigm for communication across the internet. I started my research by reading [Roy Fielding’s 2000 dissertation][2], which introduced REST to the world. After reading Fielding’s dissertation, I realized that the much more interesting story here is how Fielding’s ideas came to be so widely misunderstood. +(相对公平地说)很多人知道描述性状态迁移源自菲尔丁的博士论文,但并没有读过该论文。因此对于这篇博士论文的原始内容的误解才得以流行。 + +DN Many more people know that Fielding’s dissertation is where REST came from than have read the dissertation (fair enough), so misconceptions about what the dissertation actually contains are pervasive. +最大的误解是:这篇博士论文直接讨论了(译注:广义的)构建应用程序接口的问题,我此前一直认为描述性状态迁移从一开始就打算成为构建在超文本传输协议(HTTP)之上的网络应用程序接口(Web API)的架构模型,我相信很多人也这样认为。我猜测此前可能存在一个混乱的试验时期,开发人员采用完全错误的方式在超文本传输协议基础上开发应用程序接口,然后菲尔丁出现了并提出了将描述性状态迁移做为网络应用程序开发的正确方式。但是这种想法的时间线对不上:我们今天所熟知的网络服务的应用程序接口并非是在菲尔丁出版他的博士论文之后才出现的新生事物。 + +DN The biggest of these misconceptions is that the dissertation directly addresses the problem of building APIs. I had always assumed, as I imagine many people do, that REST was intended from the get-go as an architectural model for web APIs built on top of HTTP. I thought perhaps that there had been some chaotic experimental period where people were building APIs on top of HTTP all wrong, and then Fielding came along and presented REST as the sane way to do things. But the timeline doesn’t make sense here: APIs for web services, in the sense that we know them today, weren’t a thing until a few years after Fielding published his dissertation. +菲尔丁的博士论文(名为“架构风格与基于网络的软件架构设计”)(译者注,网络中文版的中文译名)不是讨论如何在超文本传输协议的基础上构建应用程序接口,而恰恰是讨论超文本协议本身菲尔丁是超文本传输协议1.0版规范的贡献者同时也是超文本传输协议1.1版的共同作者。有感于从HTTP协议的设计中获得的架构经验,他的博士论文将描述性状态迁移视为指导HTTP/1.1的标准化过程的架构原则的精华。举例而言,他拒绝了使用`MGET`和`MHEAD`方法进行批量请求的提议,因为他认为这违反了REST所定义的约束条件,尤其是在一个符合REST的系统中传递的消息应该是易于代理和缓存的约束条件。[1][3]因此,HTTP/1.1转而围绕持久性连接设计,在此基础上可以发送多个HTTP请求。(菲尔丁同时认为) Fielding’s dissertation (titled “Architectural Styles and the Design of Network-based Software Architectures”) is not about how to build APIs on top of HTTP but rather about HTTP itself. Fielding contributed to the HTTP/1.0 specification and co-authored the HTTP/1.1 specification, which was published in 1999. He was interested in the architectural lessons that could be drawn from the design of the HTTP protocol; his dissertation presents REST as a distillation of the architectural principles that guided the standardization process for HTTP/1.1. Fielding used these principles to make decisions about which proposals to incorporate into HTTP/1.1. For example, he rejected a proposal to batch requests using new `MGET` and `MHEAD` methods because he felt the proposal violated the constraints prescribed by REST, especially the constraint that messages in a REST system should be easy to proxy and cache.[1][3] So HTTP/1.1 was instead designed around persistent connections over which multiple HTTP requests can be sent. (Fielding also felt that cookies are not RESTful because they add state to what should be a stateless system, but their usage was already entrenched.[2][4]) REST, for Fielding, was not a guide to building HTTP-based systems but a guide to extending HTTP. This isn’t to say that Fielding doesn’t think REST could be used to build other systems. It’s just that he assumes these other systems will also be “distributed hypermedia systems.” This is another misconception people have about REST: that it is a general architecture you can use for any kind of networked application. But you could sum up the part of the dissertation where Fielding introduces REST as, essentially, “Listen, we just designed HTTP, so if you also find yourself designing a _distributed hypermedia system_ you should use this cool architecture we worked out called REST to make things easier.” It’s not obvious why Fielding thinks anyone would ever attempt to build such a thing given that the web already exists; perhaps in 2000 it seemed like there was room for more than one distributed hypermedia system in the world. Anyway, Fielding makes clear that REST is intended as a solution for the scalability and consistency problems that arise when trying to connect hypermedia across the internet, _not_ as an architectural model for distributed applications in general. From 5524589f8f4d5e129db7d23719608a45356a10c0 Mon Sep 17 00:00:00 2001 From: Bright Huang Date: Mon, 13 Mar 2023 21:54:10 +0800 Subject: [PATCH 04/83] tr1 --- ...ware- Is There an Easy Path to Success-.md | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md b/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md index 7f9aea7ab5..3ec81b5b02 100644 --- a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md +++ b/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md @@ -7,24 +7,51 @@ [#]: publisher: " " [#]: url: " " +开源软件:存在成功的捷径吗? +====== + +DN Open Source Software: Is There an Easy Path to Success? ====== + +开发开源软件背后的工作是相当庞大的。那么我们如何保证开源项目的成功呢?存在捷径吗?本文认为是没有的。 + +DN There’s so much that goes on behind the scenes while developing open source software. So how does one make an open source project successful? Is there a shortcut? This article indicates there isn’t one. -![team work working together][1] +![团队合作][1] +今天,开源已经风靡世界。很多大型企业在快速成功的诱惑下被推向开源。但真实情况是世界上并不存在成功的捷径。你无法做到通过一次努力就能让所有的开源项目正常运行。 + +DN Open source has become all the rage now. Many entrepreneurs are drawn to it by the allure of quick success. But the truth is, there is no easy path to such success. There is no one thing that you can do to get all of open source right. +事实上,上述公司早期遇到的许多挑战都不是技术上的,而是人员与文化上的。 + +DN In fact, a lot of the challenges that companies face early on are not technology challenges, but are people and cultural challenges. +开发一个能够在市场上获得成功的开源项目需要同不同层级(的开源社区人员)一同工作。维护这样的项目也是一个持续的过程。所有这一切的关键在于找到以下这个非常基础的问题的正确答案:开源究竟是什么。 + +DN There are many layers of open source that need to be worked on to build a project that can become a hit in the market. And maintaining that success is an ongoing process. But at the crux of it all lies finding the right answer to a very basic question: what exactly is open source? +### 开源就是代码 + +DN ### Open source is the code +对于很多没有深刻认识到构成开源的不同层级(的开源社区人员)用户而言,答案相当简单:开源就是软件!这当然没有错,毕竟这就是我们多数人如何使用它的。不过,相比仅仅被视作软件而言,开源远不止这些。 + +DN For many new users who may not be fully aware of the layers that make open source, the answer is fairly simple: open source is software! And that is not wrong, of course, since that is how most of us are using it. But there’s just so much more to open source than merely being touted as software. +任何开源项目的实质仍然是代码本身。代码是使一个开源项目有别于其他项目并使其对用户有益的根本。当你在开源中工作的时候,代码和软件一样都是产品自身的一部分。 + +DN The essence of any open source project still remains the code. It is what makes the project special and useful for the user. When you’re working in open source, the code is just as much a part of the product as the software. +从零开始开发一个(开源)项目或者复刻(fork)一个现有项目的分支 Developing a project from the ground up, or even creating a fork of an existing project, requires thousands and thousands of lines of code to be written, even while handling such a large and complex codebase. Especially in the case of creating a fork, care must be taken to remove any prior licences, marketing material, or anything that might not be useful for the user anymore. After all, it is the features of a project that attract its user base and what retains it. When end users are deciding whether to use open source software, they will read the source code, and what they see there should be something that builds their confidence. ### Open source is the community From 3e987de0a137a025a1039ea4250c6299f4bd903c Mon Sep 17 00:00:00 2001 From: "Xiaobin.Liu" Date: Wed, 29 Mar 2023 08:35:06 +0800 Subject: [PATCH 05/83] APL --- ...Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md b/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md index eff38740f4..9d2ff9ebd8 100644 --- a/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md +++ b/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md @@ -2,7 +2,7 @@ [#]: via: "https://news.itsfoss.com/open-source-model-dolly/" [#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "lxbwolf" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -80,4 +80,4 @@ via: https://news.itsfoss.com/open-source-model-dolly/ [7]: https://crfm.stanford.edu/2023/03/13/alpaca.html?ref=its-foss-news [8]: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/?ref=its-foss-news [9]: https://github.com/databrickslabs/dolly?ref=its-foss-news -[10]: https://www.databricks.com/blog/2023/03/24/hello-dolly-democratizing-magic-chatgpt-open-models.html?ref=its-foss-news \ No newline at end of file +[10]: https://www.databricks.com/blog/2023/03/24/hello-dolly-democratizing-magic-chatgpt-open-models.html?ref=its-foss-news From d2e7d1a3ef75a571cba96527f0327d819514f949 Mon Sep 17 00:00:00 2001 From: geekpi Date: Wed, 29 Mar 2023 08:52:58 +0800 Subject: [PATCH 06/83] translated --- ...stall CRI-O (Container Runtime) on Ubuntu 22.04.md | 295 --------------- ...stall CRI-O (Container Runtime) on Ubuntu 22.04.md | 339 ++++++++++++++++++ 2 files changed, 339 insertions(+), 295 deletions(-) delete mode 100644 sources/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md create mode 100644 translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md diff --git a/sources/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md b/sources/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md deleted file mode 100644 index ef0fa7f0e3..0000000000 --- a/sources/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md +++ /dev/null @@ -1,295 +0,0 @@ -[#]: subject: "How to Install CRI-O (Container Runtime) on Ubuntu 22.04" -[#]: via: "https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/" -[#]: author: "James Kiarie https://www.linuxtechi.com/author/james/" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -How to Install CRI-O (Container Runtime) on Ubuntu 22.04 -====== - -CRI-O is an opensource and lightweight container runtime for Kubernetes. It is an implementation of the Kubernetes Container Runtime Interface (CRI) using Open Container Initiative (OCI) compatible runtimes. It’s a perfect alternative to Docker when running Kubernetes. - -In this guide, we will demonstrate how to install CRI-O on Ubuntu 22.04 LTS step by step. - -##### Prerequisites - -Before you start out, here is what you need: - -- An instance of Ubuntu 22.04 with SSH access -- A sudo user configured on the instance -- Fast and stable internet connectivity - -With that out of the way, let us get started out. - -### Step 1: Update the system and Install dependencies - -Right off the bat, log into your server instance and update the package lists as follows. - -``` -$ sudo apt update -``` - -Once the local package index has been updated, install the dependencies as follows. - -``` -$ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y -``` - -### Step 2: Add CRI-O repository - -To install CRI-O, we need to add or enable its repository on Ubuntu. But first, you need to define the variables based on the operating systems and the CRI-O version that you want to install. - -As such, define the variables as shown below. - -``` -$ export OS=xUbuntu_22.04 -$ export CRIO_VERSION=1.24 -``` - -Once that is done, run the following set of commands to add the CRI-O Kubic repository. - -``` -$ echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list -$ echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list -``` - -Thereafter, import the GPG key for the CRI-O repository - -``` -$ curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add - -$ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add - -``` - -This yields the following output as shown below. - -Once again update the package index to synchronize the system with the newly added CRI-O Kubic repositories. - -``` -$ sudo apt update -``` - -### Step 3: Install CRI-O On Ubuntu 22.04 - -With the repositories added, install CRI-O and the runtime client using the APT package manager. - -``` -$ sudo apt install cri-o cri-o-runc -y -``` - -Once installed, start and enable the CRI-O daemon. - -``` -$ sudo systemctl start crio -$ sudo systemctl enable crio -``` - -Next, verify if the CRI-O service is running: - -``` -$ sudo systemctl status crio -``` - -You should get the following output which shows that the CRI-O service is running as expected. - -### Step 4: Install CNI Plugins For CRI-O - -Next, you need to install the CNI (Container Network Interface) as well as the CNI plugins. Keep in mind that the loopback and bridge configurations are enabled and sufficient for running pods using CRI-O. - -Therefore, to install the CNI plugins, run the following command. - -``` -$ sudo apt install containernetworking-plugins -y -``` - -Once installed, edit the CRI-O configuration file - -``` -$ sudo nano /etc/crio/crio.conf -``` - -Uncomment network_dir & plugin_dirs section and also add ‘/usr/lib/cni/’ under plugin_dirs section. - -Save the changes and exit the configuration file. - -Next, restart the CRIO service. - -``` -$ sudo systemctl restart crio -``` - -### Step 5: Install CRI-O tools - -In addition, you also need to install the cri-tools package which provides the crictl command-line utility which is used for interacting and managing containers and pods. - -To do so, run the command: - -``` -$ sudo apt install -y cri-tools -``` - -Once installed, confirm the version of crictl and RunTimeVersion as follows. - -``` -$ sudo crictl --runtime-endpoint unix:///var/run/crio/crio.sock version -``` - -Be sure to also check if CRI-O is ready to deploy pods using the following command: - -``` -$ sudo crictl info -``` - -The crictl command provides an autocompletion feature that lets you autocomplete commands by pressing the TAB key. To enable command completion run the following command. - -``` -$ sudo su - - -# crictl completion > /etc/bash_completion.d/crictl -``` - -Then reload the current bash session. - -``` -# source ~/.bashrc -``` - -To use the auto-completion feature, you will need to log out or start a new terminal session. Then simply type the crictl command and press the TABkey to view all the options. - -``` -$ crictl -``` - -### Step 6: Create a Pod using crictl utility - -Up to this point, CRI-O is fully installed and configured and ready to spin up a pod. In this section, we will create an Apache web server inside a pod and confirm if it is serving requests. - -First, we are going to set up a pod sandbox or an isolated environment using a pod configuration file as follows. - -``` -$ sudo nano apache_sandbox.json -``` - -We will then add the following configuration to the file. - -``` -{ -    "metadata": { -        "name": "apache-sandbox", -        "namespace": "default", -        "attempt": 1, -        "uid": "hdishd83djaidwnduwk28bcsb" -    }, -    "linux": { -    }, -    "log_directory": "/tmp" -} -``` - -Save and exit. Next create the pod using the following command. This prints out  long alphanumeric number which is the pod ID. - -``` -$ sudo crictl runp apache_sandbox.json -``` - -To confirm that the pod has been created, run the command. - -``` -$ sudo crictl pods -``` - -To retrieve more information about the created pod, run the command: - -``` -$ sudo crictl inspectp --output table 05ba2f0704f22 -``` - -This prints out the ID, Name, UID, Namespace, date of creation, internal pod IP among other details. - -### Step 7: Create a container inside a pod - -In section we are going to create an Apache web server container inside the pod. So, use the crictl utility to pull an Apache web server image from Docker Hub. - -``` -$ sudo crictl pull httpd -``` - -You can verify the image pulled as shown. - -``` -$ sudo crictl images -``` - -Next, we are going to define a container configuration file for the Apache web server. - -``` -$ sudo nano container_apache.json -``` - -Copy and paste the following code. - -``` -{ -  "metadata": { -      "name": "apache" -    }, -  "image":{ -      "image": "httpd" -    }, -  "log_path":"apache.0.log", -  "linux": { -  } -} -``` - -Save and exit the configuration file. - -Finally, to attach the container to the sand box pod created earlier, run the command: - -``` -$ sudo crictl create 05ba2f0704f22 container_apache.json apache_sandbox.json -``` - -This outputs a large alphanumeric ID to the terminal.. Take note of this ID. - -Finally, use the ID to start the Apache web server container as follows. - -``` -$ sudo crictl start 37f4d26510965452aa918f04d629f5332a1cd398d4912298c796942e22f964a7 -``` - -To check the container status, run the command: - -``` -$ sudo crictl ps -``` - -To verify that the Apache web server is running, send a HTTP request to the web server using the curl command and the pod’s internal ID. - -``` -$ curl -I 10.85.0.2 -``` - -The following output confirms that the web server is running. - -##### Conclusion - -That’s all from this, guide. We have successfully installed CRI-O on Ubuntu 22.04 and gone ahead to create a pod and container. Your comments and feedback are welcome. - -Also Read: How to Install Docker on Ubuntu 22.04 / 20.04 LTS - --------------------------------------------------------------------------------- - -via: https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/ - -作者:[James Kiarie][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.linuxtechi.com/author/james/ -[b]: https://github.com/lkxed/ diff --git a/translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md b/translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md new file mode 100644 index 0000000000..6488c68851 --- /dev/null +++ b/translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md @@ -0,0 +1,339 @@ +[#]: subject: "How to Install CRI-O (Container Runtime) on Ubuntu 22.04" +[#]: via: "https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/" +[#]: author: "James Kiarie https://www.linuxtechi.com/author/james/" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +如何在 Ubuntu 22.04 上安装 CRI-O(容器运行时) +====== + +CRI-O 是 Kubernetes 的开源轻量级容器运行时。它是使用 Open Container Initiative (OCI) 兼容运行时的 Kubernetes 容器运行时接口 (CRI) 的实现。在运行 Kubernetes 时,它是 Docker 的完美替代品。 + +在本指南中,我们将逐步演示如何在 Ubuntu 22.04 LTS 上安装 CRI-O。 + +##### 先决条件 + +在开始之前,这是你需要的: + +- 具有 SSH 访问权限的 Ubuntu 22.04 实例 +- 在实例上配置的 sudo 用户 +- 快速稳定的互联网连接 + +有了这个,让我们开始吧。 + +### 步骤 1:更新系统并安装依赖 + +立即登录你的服务器实例并按如下方式更新包列表。 + +``` +$ sudo apt update +``` + +更新本地包索引后,按如下方式安装依赖项。 + +``` +$ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y +``` + +### 步骤 2:添加 CRI-O 存储库 + +要安装 CRI-O,我们需要在 Ubuntu 上添加或启用它的仓库。但首先,你需要根据操作系统和要安装的 CRI-O 版本定义变量。 + +因此,定义如下变量。 + +``` +$ export OS=xUbuntu_22.04 +$ export CRIO_VERSION=1.24 +``` + +完成后,运行以下命令集以添加 CRI-O Kubic 仓库。 + +``` +$ echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list +$ echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$CRIO_VERSION/$OS/ /"|sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION.list +``` + +![][1] + +此后,为 CRI-O 仓库导入 GPG 密钥。 + +``` +$ curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add - +$ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add - +``` + +这会产生如下输出。 + +![][2] + +再次更新包索引,使系统与新添加的 CRI-O Kubic 仓库同步。 + +``` +$ sudo apt update +``` + +### 步骤 3:在 Ubuntu 22.04 上安装 CRI-O + +添加仓库后,使用 APT 包管理器安装 CRI-O 和运行时客户端。 + +``` +$ sudo apt install cri-o cri-o-runc -y +``` + +![][3] + +安装后,启动并启用 CRI-O 守护程序。 + +``` +$ sudo systemctl start crio +$ sudo systemctl enable crio +``` + +接下来,验证 CRI-O 服务是否正在运行: + +``` +$ sudo systemctl status crio +``` + +你应该看到以下输出,表明 CRI-O 服务正在按预期运行。 + +![][4] + +### 步骤 4:为 CRI-O 安装 CNI 插件 + +接下来,你需要安装 CNI(容器网络接口)以及 CNI 插件。请记住,环回和桥接配置已启用并且足以使用 CRI-O 运行 pod。 + +因此,要安装 CNI 插件,请运行以下命令。 + +``` +$ sudo apt install containernetworking-plugins -y +``` + +安装后,编辑 CRI-O 配置文件。 + +``` +$ sudo nano /etc/crio/crio.conf +``` + +取消注释 network_dir 和 plugin_dirs 部分,并在 plugin_dirs 下添加 “/usr/lib/cni/”。 + +![][5] + +保存更改并退出配置文件。 + +接下来,重启 CRIO 服务。 + +``` +$ sudo systemctl restart crio +``` + +### 步骤 5:安装 CRI-O 工具 + +此外,你还需要安装 cri-tools 包,它提供了 crictl 命令行程序,用于交互和管理容器和 pod。 + +为此,请运行以下命令: + +``` +$ sudo apt install -y cri-tools +``` + +安装后,确认 crictl 和 RunTimeVersion 的版本如下。 + +``` +$ sudo crictl --runtime-endpoint unix:///var/run/crio/crio.sock version +``` + +![][6] + +一定要检查 CRI-O 是否准备好使用以下命令部署 pod: + +``` +$ sudo crictl info +``` + +![][7] + +crictl 命令提供自动补全功能,让你可以通过按 TAB 键自动补全命令。要启用命令补全,请运行以下命令。 + +``` +$ sudo su - + +# crictl completion > /etc/bash_completion.d/crictl +``` + +然后重新加载当前的 bash 会话。 + +``` +# source ~/.bashrc +``` + +![][8] + +要使用自动补全功能,你需要注销或启动新的终端会话。然后只需键入 crictl 命令并按 TAB 键即可查看所有选项。 + +``` +$ crictl +``` + +![][9] + +### 步骤 6:使用 crictl 程序创建 Pod + +至此,CRI-O 已完全安装和配置并准备好启动 pod。在本节中,我们将在 pod 中创建一个 Apache Web 服务器并确认它是否正在处理请求。 + +首先,我们将使用 pod 配置文件设置一个 pod 沙箱或隔离环境,如下所示。 + +``` +$ sudo nano apache_sandbox.json +``` + +然后我们将以下配置添加到文件中。 + +``` +{ + "metadata": { + "name": "apache-sandbox", + "namespace": "default", + "attempt": 1, + "uid": "hdishd83djaidwnduwk28bcsb" + }, + "linux": { + }, + "log_directory": "/tmp" +} +``` + +保存并退出。接下来使用以下命令创建 pod。这会打印出很长的字母数字,它是 pod ID。 + +``` +$ sudo crictl runp apache_sandbox.json +``` + +要确认 Pod 已创建,请运行命令。 + +``` +$ sudo crictl pods +``` + +![][10] + +要检索有关创建的 pod 的更多信息,请运行以下命令: + +``` +$ sudo crictl inspectp --output table 05ba2f0704f22 +``` + +这将打印出 ID、名称、UID、命名空间、创建日期、内部 pod IP 等详细信息。 + +![][11] + +### 步骤 7:在 pod 中创建容器 + +这部分中,我们将在 pod 中创建一个 Apache Web 服务器容器。因此,使用 crictl 程序从 Docker Hub 拉取 Apache Web 服务器镜像。 + +``` +$ sudo crictl pull httpd +``` + +你可以如图所示验证拉取的镜像。 + +``` +$ sudo crictl images +``` + +![][12] + +接下来,我们将为 Apache Web 服务器定义一个容器配置文件。 + +``` +$ sudo nano container_apache.json +``` + +复制并粘贴以下代码。 + +``` +{ + "metadata": { + "name": "apache" + }, + "image":{ + "image": "httpd" + }, + "log_path":"apache.0.log", + "linux": { + } +} +``` + +保存并退出配置文件。 + +最后,要将容器连接到之前创建的沙盒 pod,请运行以下命令: + +``` +$ sudo crictl create 05ba2f0704f22 container_apache.json apache_sandbox.json +``` + +这会向终端输出一长串字母数字 ID。请记下此 ID。 + +最后,使用 ID 启动 Apache Web 服务器容器,如下所示。 + +``` +$ sudo crictl start 37f4d26510965452aa918f04d629f5332a1cd398d4912298c796942e22f964a7 +``` + +![][13] + +要检查容器状态,请运行以下命令: + +``` +$ sudo crictl ps +``` + +![][14] + +要验证 Apache Web 服务器是否正在运行,请使用 curl 命令和 pod 的内部 ID 向 Web 服务器发送 HTTP 请求。 + +``` +$ curl -I 10.85.0.2 +``` + +以下输出确认 Web 服务器正在运行。 + +![][15] + +##### 结论 + +这就是全部的指南。我们已经在 Ubuntu 22.04 上成功安装了 CRI-O,并继续创建 pod 和容器。欢迎你提出意见和反馈。 + + +-------------------------------------------------------------------------------- + +via: https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/ + +作者:[James Kiarie][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linuxtechi.com/author/james/ +[b]: https://github.com/lkxed/ +[1]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Set-Crio-Repository-Ubuntu-Linux.png +[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Import-GPG-Keys-for-Crio-Repository-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 +[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Apt-Install-Crio-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 +[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Start-Enable-Crio-Service-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crio-Conf-Network-Plugins-Directory-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Crio-Version-Check-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 +[7]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Info-Command-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[8]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Enable-Bash-Completion-Crictl-Command-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[9]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Command-Options-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[10]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Pods-Status-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[11]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Inspect-Pod-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 +[12]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-pull-image-ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Create-Container-Inside-Pod-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 +[14]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Pods-Status-Crictl-Command-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 +[15]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Curl-Command-Httpd-Pod-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 \ No newline at end of file From c57ee6cddd7f63ab1ea1e53d4678c3e099be23d9 Mon Sep 17 00:00:00 2001 From: geekpi Date: Wed, 29 Mar 2023 08:58:12 +0800 Subject: [PATCH 07/83] translating --- ...se this open source accounting app to run your small business.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md b/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md index 859b5157ad..983819b924 100644 --- a/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md +++ b/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/23/3/open-source-accounting-run-business" [#]: author: "Don Watkins https://opensource.com/users/don-watkins" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 19a0d90003b626579074e38992a0d9efc1019ac4 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 29 Mar 2023 10:57:56 +0800 Subject: [PATCH 08/83] ATRP @wxy https://linux.cn/article-15671-1.html --- ...lternative to firmware for home routers.md | 177 ++++++++++++++++++ ...lternative to firmware for home routers.md | 173 ----------------- 2 files changed, 177 insertions(+), 173 deletions(-) create mode 100644 published/20220712 OpenWrt, an open source alternative to firmware for home routers.md delete mode 100644 sources/tech/20220712 OpenWrt, an open source alternative to firmware for home routers.md diff --git a/published/20220712 OpenWrt, an open source alternative to firmware for home routers.md b/published/20220712 OpenWrt, an open source alternative to firmware for home routers.md new file mode 100644 index 0000000000..d626e005cb --- /dev/null +++ b/published/20220712 OpenWrt, an open source alternative to firmware for home routers.md @@ -0,0 +1,177 @@ +[#]: subject: "OpenWrt, an open source alternative to firmware for home routers" +[#]: via: "https://opensource.com/article/22/7/openwrt-open-source-firmware" +[#]: author: "Stephan Avenwedde https://opensource.com/users/hansic99" +[#]: collector: "lkxed" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15671-1.html" + +OpenWrt:一个开源的家用路由器固件替代品 +====== + +![][0] + +> OpenWrt 是一个基于 Linux 的开源操作系统,主要针对嵌入式网络设备。 + +如果你在家里阅读这篇文章,你可能是用一个 LTE/5G/DSL/WIFI 路由器联网的。这种设备通常负责在你的本地设备(智能手机、PC、电视等)之间路由数据包,并通过内置的调制解调器提供对 WWW 的访问。你家里的路由器很可能有一个基于网页的界面,用于配置该设备。这种界面往往过于简单,因为它们是为普通用户制作的。 + +如果你想要更多的配置选项,但又不想花钱买一个专业的设备,你应该看看其他的固件,如 [OpenWrt][2]。 + +### OpenWrt 的特点 + +OpenWrt 是一个基于 Linux 的、针对嵌入式网络设备的开源操作系统。它主要用于替代各种家用路由器上的原始固件。OpenWrt 具备一个好的路由器应该具备的所有有用功能,如 DNS 服务器([dnsmasq][3]),WiFi 接入点(AP)和客户端功能,用于调制解调器功能的 PPP 协议,而且,与标准固件不同,这一切都是可以完全配置的。 + +#### LuCI 网页界面 + +OpenWrt 可以通过命令行(SSH)或使用 GUI 配置界面([LuCI][4])进行远程配置。LuCI 是一个用 [Lua][5] 编写的轻量级、可扩展的网页 GUI,它可以精确地配置你的设备。除了配置,LuCI 还提供了很多额外的信息,如实时图表、系统日志和网络诊断。 + +![LuCI 网页界面][6] + +LuCI 有一些可选的扩展,以增加更多的配置选择。 + +#### 可写文件系统 + +它的另一个亮点是可写文件系统。原有的固件通常是只读的,而 OpenWrt 配备了一个可写的文件系统,这要归功于一个巧妙的解决方案,它将 OverlayFS 与 SquashFS/JFFS2 文件系统相结合,允许安装软件包以增强功能。在 [OpenWrt 文档][8] 中可以找到更多关于文件系统架构的信息。 + +#### 扩展 + +OpenWrt 有一个相关的软件包管理器,[opkg][9],它允许安装额外的服务,比如 FTP 服务器、DLNA 媒体服务器、OpenVPN 服务器、用于实现文件共享的 Samba 服务器、控制电话的 Asterisk 等等。当然,有些扩展需要适当的底层硬件资源。 + +### 动机 + +你可能想知道为什么要冒着对你的设备造成不可修复的损害和失去保修的风险,而尝试更换路由器制造商的固件。如果你的设备以你想要的方式工作,那么你可能不应该。永远不要碰一个正在运行的系统!但是,如果你想增强功能,或者你的设备缺乏配置选项,那么你应该看看 OpenWrt 是否可以成为一种补救措施。 + +在我的例子中,我想要一个旅行用的路由器,当我在露营地的时候,我可以把它放在一个合适的位置,以便让其它设备与这个本地 WiFi 接入点(AP)保持良好连接。该路由器将作为一个普通的客户端连接到互联网,并广播它的 WiFi 接入点让我的其它设备连接到它。这样我就可以配置我的所有设备与这个路由器的接入点连接,当我在其他地方时我只需要改变路由器的客户端连接。此外,在一些露营地,你只能得到一个单一设备的访问代码,我可以通过这种设置来加强。 + +作为我的旅行路由器,我选择 TP-Link TL-WR902AC 的原因如下: + +* 很小 +* 两根 WiFi 天线 +* 5V 电源(USB) +* 低功耗 +* 成本效益高(你以 30 美元左右的价格得到它) + +为了了解它的尺寸,这里是它在树莓派 4 旁边的样子: + +![TP-Link TL-WR902AC 在树莓派旁边][10] + +尽管这个路由器带来了我所需要的所有硬件功能,但我很快发现,默认的固件并不能让我按照我想要的方式配置它。该路由器主要是作为一个 WiFi 接入点,它可以复制现有的 WiFi 网络或通过板载以太网接口将自己连接到网络。默认的固件对于这些使用情况是非常有限的。 + +(LCTT 译注:此型号国内没有销售,它的特点之一是可以通过插入 3G/4G USB 网卡连接到互联网,但由于它不在国内销售,所以没有支持哪种国内 3G/4G USB 网卡的说明,我 [查下来](https://www.tp-link.com/lk/support/3g-comp-list/tl-wr902ac/?location=1963) 似乎华为的 E3372h-320 是可用的。有相关实践的同学可以分享一下经验。 + +国内销售的其它类似型号只能通过以太网口或 WiFi 连接到互联网,这种情况下,如果只能通过 3G/4G 连接互联网,那需要另外买一个随身 WiFi /移动路由器。) + +幸运的是,该路由器能够运行 OpenWrt,所以我决定用它来替换原来的固件。 + +### 安装 + +当你的 LTE/5G/DSL/WiFi 路由器符合 [最低要求][12] 时,很有可能在它上面运行 OpenWrt。下一步,你要查看 [硬件表][13],检查你的设备是否被列为兼容,以及你要选择哪个固件包。OpenWrt 的 [TP-Link TL-WR902AC][14] 的页面还包括安装说明,其中描述了如何刷入内部存储器。 + +刷入固件的过程在不同的设备之间可能会有所不同,所以我就不详细介绍了。简而言之,我必须通过将设备连接到一个具有特定 IP 地址的网络接口上的 TFTP 服务器,重命名 OpenWrt 固件文件,然后按复位按钮启动设备。 + +### 配置 + +一旦刷入成功,你的设备现在应该用新的固件启动了。现在启动可能需要更长的时间,因为与默认固件相比,OpenWrt 具有更多的功能。 + +为了开始配置,需要在你的 PC 和路由器之间建立一个直接的以太网连接,OpenWrt 在此充当了一个 DHCP 服务器,并将你的 PC 的以太网适配器配置为一个 DHCP 客户端。 + +在 Fedora Linux 上,要激活你的网络适配器的 DHCP 客户端模式,首先你必须通过运行找出连接的 UUID: + +``` +$ nmcli connection show +NAME          UUID         TYPE      DEVICE +Wired Conn 1  7a96b...27a  ethernet  ens33 +virbr0        360a0...673  bridge   virbr0 +testwifi      2e865...ee8  wifi     -- +virbr0        bd487...227  bridge   -- +Wired Conn 2  16b23...7ba  ethernet -- +``` + +选择你要修改的连接的 UUID,然后运行: + +``` +$ nmcli connection modify ipv4.method auto +``` + +你可以在 [Fedora 联网维基][15] 中找到更多关于这些命令的信息。 + +在你连接到路由器后,打开一个网页浏览器并导航到 [http://openwrt/][16]。现在你应该看到 LuCI 的登录管理器: + +![LuCI 登录][17] + +使用 `root` 作为用户名,并将密码留空。 + +### 配置 WiFi 和路由 + +要配置你的 WiFi 天线,请点击 “网络Network” 菜单并选择 “无线Wireless”。 + +![LuCI 无线配置][19] + +在我的设备上,上面的天线 `radio0` 工作在 2.4GHz 模式,并连接到名为 `MOBILE-INTERNET` 的本地接入点。下面的天线 `radio1` 工作在 5GHz,有一个相关的接入点,SSID 为 `OpenWrt_AV`。通过点击 “编辑Edit” 按钮,你可以打开设备配置,以决定该设备属于 LAN 还是 WWAN 网络。在我的例子中,接入点 `OpenWrt_AV` 属于 LAN 网络,客户端连接 `MOBILE-INTERNET` 属于 WWAN 网络。 + +![LuCI 配置屏幕][21] + +配置的网络在 “接口Interfaces” 面板的 “网络Network” 下列出。 + +![设备列表][23] + +为了获得我想要的功能,网络流量必须在 LAN 和 WWAN 网络之间进行路由。路由可以在 “网络Network” 面板的 “防火墙Firewall” 部分进行配置。我没有在这里做任何改动,因为在默认情况下,网络之间的流量是被路由的,而传入的数据包(从 WWAN 到 LAN)必须通过防火墙。 + +![防火墙设置][28] + +因此,你需要知道的是一个接口是属于 LAN 还是 (W)WAN。这个概念使它相对容易配置,特别是对初学者来说。你可以在 [OpenWrt 联网基础][25] 指南中找到更多信息。 + +### 专属门户 + +公共 WiFi 接入点通常受到 [专属门户][26] 的保护,你必须输入一个访问代码或类似的代码。通常情况下,当你第一次连接到接入点并试图打开一个任意的网页时,这种门户就会出现。这种机制是由接入点的 DNS 服务器实现的。 + +默认情况下,OpenWrt 激活了一个安全功能,可以防止连接的客户端受到 [DNS 重新绑定攻击][27]。OpenWrt 的重新绑定保护也阻止了专属门户网站被转发到客户端,所以你必须禁用重新绑定保护,以便你可以到达专属门户网站。这个选项在 “网络Network” 菜单的 “DHCP 和 DNSDHCP and DNS” 面板中。 + +### 尝试 OpenWrt + +由于升级到 OpenWrt,我得到了一个基于商品硬件的灵活的旅行路由器。OpenWrt 使你的路由器具有完全的可配置性和可扩展性,而且由于其制作精良的网页 GUI,它也适合初学者使用。甚至有一些 [精选路由器][30] 在出厂时已经安装了 OpenWrt。你还可以用很多 [可用的软件包][31] 来增强你的路由器的功能。例如,我正在使用 [vsftp][32] FTP 服务器,在连接的 U 盘上托管一些电影和电视剧。看看该 [项目主页][33],在那里你可以找到许多切换到 OpenWrt 的理由。 + +图片来自: Stephan Avenwedde,[CC BY-SA 4.0][7] + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/22/7/openwrt-open-source-firmware + +作者:[Stephan Avenwedde][a] +选题:[lkxed][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hansic99 +[b]: https://github.com/lkxed +[1]: https://opensource.com/sites/default/files/lead-images/OSDC_Internet_Cables_520x292_0614_RD.png +[2]: https://openwrt.org +[3]: https://thekelleys.org.uk/dnsmasq/doc.html +[4]: https://openwrt.org/docs/guide-user/luci/start +[5]: https://opensource.com/article/20/2/lua-cheat-sheet +[6]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_overview_c_0.png +[7]: https://creativecommons.org/licenses/by-sa/4.0/legalcode +[8]: https://openwrt.org/docs/techref/flash.layout +[9]: https://openwrt.org/docs/guide-user/additional-software/opkg +[10]: https://opensource.com/sites/default/files/2022-07/OpenWrt_Comparison_RaspberryPi.jpg +[12]: https://openwrt.org/supported_devices +[13]: https://openwrt.org/toh/start +[14]: https://openwrt.org/toh/tp-link/tl-wr902ac_v3 +[15]: https://fedoraproject.org/wiki/Networking/CLI +[16]: http://openwrt/ +[17]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_login_manager.png +[19]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_wireless_section_c.webp +[21]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_wifi_device_configuration.webp +[23]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_network_devices_0.webp +[25]: https://openwrt.org/docs/guide-user/base-system/basic-networking +[26]: https://en.wikipedia.org/wiki/Captive_portal +[27]: https://en.wikipedia.org/wiki/DNS_rebinding +[28]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_firewall_settings.webp +[30]: https://opensource.com/article/22/1/turris-omnia-open-source-router +[31]: https://openwrt.org/packages/table/start +[32]: https://openwrt.org/docs/guide-user/services/nas/ftp.overview +[33]: https://openwrt.org/reasons_to_use_openwrt +[0]: https://img.linux.net.cn/data/attachment/album/202303/29/105431e78pqv0n8x6aqm0l.jpg \ No newline at end of file diff --git a/sources/tech/20220712 OpenWrt, an open source alternative to firmware for home routers.md b/sources/tech/20220712 OpenWrt, an open source alternative to firmware for home routers.md deleted file mode 100644 index 608b34ccc3..0000000000 --- a/sources/tech/20220712 OpenWrt, an open source alternative to firmware for home routers.md +++ /dev/null @@ -1,173 +0,0 @@ -[#]: subject: "OpenWrt, an open source alternative to firmware for home routers" -[#]: via: "https://opensource.com/article/22/7/openwrt-open-source-firmware" -[#]: author: "Stephan Avenwedde https://opensource.com/users/hansic99" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -OpenWrt, an open source alternative to firmware for home routers -====== -OpenWrt is a Linux-based, open source operating system targeting embedded network devices. - -If you're reading this article from home, you are probably connected with a LTE/5G/DSL/WIFI router. Such devices are usually responsible to route packets between your local devices (smartphone, PC, TV, and so on) and provide access to the world wide web through a built-in modem. Your router at home has most likely a web-based interface for configuration purposes. Such interfaces are often oversimplified as they are made for casual users. - -If you want more configuration options, but don't want to spend for a professional device you should take a look at an alternative firmware such as [OpenWrt][2]. - -### OpenWrt features - -OpenWrt is a Linux-based, open source operating system targeting embedded network devices. It is mainly used as a replacement for the original firmware on home routers of all kinds. OpenWrt comes with all the useful features a good router should have like a DNS server ([dnsmasq][3]), Wifi access point and client functionality, PPP protocol for modem functionality and, unlike with the standard firmware, everything is fully configurable. - -### LuCI Web Interface - -OpenWrt can be configured remotely by command line (SSH) or using [LuCI][4], a GUI configuration interface. LuCI is a lightweight, extensible web GUI written in [Lua][5], which enables an exact configuration of your device. Besides configuration, LuCI provides a lot of additional information like real time graphs, system logs, and network diagnostics. - -![LuCI web interface][6] - -Image by: Stephan Avenwedde, [CC BY-SA][7] - -There are some optional extensions available for LuCI to add even further configuration choices. - -### Writeable file system - -Another highlight is the writeable filesystem. While the stock firmware is usually read-only, OpenWrt comes with a writeable filesystem thanks to a clever solution that combines OverlayFS with SquashFS and JFFS2 filesystems to allow installation of packages to enhance functionality. Find more information about the file system architecture in the [OpenWrt documentation][8]. - -### Extensions - -OpenWrt has an associated package manager, [opkg][9], which allows to install additional services. Some examples are an FTP server, a DLNA media server, an OpenVPN server, a Samba server to enable file sharing, or Asterisk (software to control telephone calls). Of course, some extensions require appropriate resources of the underlying hardware. - -### Motivation - -You might wonder why you should try to replace a router manufacture's firmware, risking irreparable damage to your device and loss of warranty. If your device works the way you want, then you probably shouldn’t. Never touch a running system! But if you want to enhance functionality, or if your device is lacking configuration options, then you should check whether OpenWrt could be a remedy. - -In my case, I wanted a travel router which I can place on an appropriate position when I’m on a campsite in order to get a good connection to the local Wifi access point. The router should connect itself as an ordinary client and broadcasts it’s own access point for my devices. This allows me to configure all my devices to connect with the routers access points and I only have to change the routers client connection when I’m somewhere else. Moreover, on some campsites you only get an access code for one single device, which I can enhance with this setup. - -As my travel router, I choose the TP-Link TL-WR902AC for the following reasons: - -* Small -* Two Wifi antennas -* 5V power supply (USB) -* Low power consumption -* Cost effective (you get it for around $30) - -To get an idea of the size, here it is next to a Raspberry Pi4: - -![TP-Link TL-WR902AC next to a Raspberry Pi][10] - -Image by: Stephan Avenwedde, [CC BY-SA 4.0][11] - -Even though the router brings all hardware capabilities I demand, I relatively quickly found out that the default firmware don’t let me configure it the way I wanted. The router is mainly intended as an Wifi access point, which repeats an existing Wifi network or connects itself to the web over the onboard Ethernet interface. The default firmware is very limited for these use cases. - -Fortunately, the router is capable of running OpenWrt, so I decided to replace the original firmware with it. - -### Installation - -When your LTE/5G/DSL/WIFI router meets the [minimum requirements][12], chances are high that it's possible to run OpenWrt on it. As the next step, you look in the [hardware table][13] and check whether your devices is listed as compatible, and which firmware package you have to choose. The page for the [TP-Link TL-WR902AC][14] also includes the installation instructions which describe how to flash the internal memory. - -The process of flashing the firmware can vary between different devices, so I won’t go into detail on this. In a nutshell, I had to connect the device over  a TFTP server on a network interface with a certain IP address, rename the OpenWrt firmware file and then boot up the device considering pressing the reset button. - -### Configuration - -Once flashing was successfully, your device should now boot up with the new firmware. It may take a bit longer now to boot up as OpenWrt comes with much more features compared to the default firmware. - -OpenWrt acts as a DHCP server, so in order to begin with configuration, make a direct Ethernet connection between your PC and the router, and configure your PC’s Ethernet adapter as a DHCP client. - -On Fedora Linux, to activate the DHCP client mode for your network adapter, first you have to find out the connection UUID by running: - -``` -$ nmcli connection show -NAME          UUID         TYPE      DEVICE -Wired Conn 1  7a96b...27a  ethernet  ens33 -virbr0        360a0...673  bridge   virbr0 -testwifi      2e865...ee8  wifi     -- -virbr0        bd487...227  bridge   -- -Wired Conn 2  16b23...7ba  ethernet -- -``` - -Pick the UUID for the connection you want to modify and then run: - -``` -$ nmcli connection modify ipv4.method auto -``` - -You can find more information about these commands in the [Fedora Networking Wiki][15]. - -After you have a connection to your router, open a web browser and navigate to [http://openwrt/][16]. You should now see LuCI’s login manager: - -![LuCI login][17] - -Use **root** as the username, and leave the password field blank. - -### Configuring Wifi and routing - -To configure your Wifi antennas, click on the **Network** menu and select **Wireless**. - -![LuCI wireless configuration][19] - -On my device, the antenna **radio0** on top operates in 2.4 GHz mode and is connected to the local access point called *MOBILE-INTERNET*. The antenna **radio1** below operates at 5 GHz and has an associated access point with the SSID *OpenWrt_AV*. With a click of the **Edit**button, you can open the device configuration to decide whether the device belongs to the *LAN* or WWAN network. In my case, the access point *OpenWrt_AV* belongs to the LAN network and the client connection *MOBILE-INTERNET* belongs to the WWAN network. - -![LuCI configuration screen][21] - -Configured networks are listed under **Network**, in the **Interfaces** panel. - -![Device list][23] - -In order to get the functionality I want, network traffic must be routed between the LAN and the WWAN network. The routing can be configured in the **Firewall** section of the **Network** panel. I didn’t change anything here because, by default, the traffic is routed between the networks, and incoming packets (from WWAN to LAN) have to pass the firewall. - -So all you need to know is whether an interface belongs to LAN or (W)WAN. This concept makes it relatively easy to configure, especially for beginners. You can find more information in [OpenWrt’s basic networking][25] guide. - -### Captive portals - -Public Wifi access points are often protected by a [captive portal][26] where you have to enter an access code or similar. Usually, such portals show up when you are first connected to the access point and try to open an arbitrary web page. This mechanism is realized by the access point's DNS server. - -By default, OpenWrt has a security feature activated that prevents connected clients from a [DNS rebinding attack][27]. OpenWrt’s rebind protection also prevents captive portals from being forwarded to clients, so you must disable rebind protection so you can reach captive portals. This option is in the **DHCP and DNS** panel of the **Network** menu. - -![Firewall settings][28] - -### Try OpenWrt - -Thanks to an upgrade to OpenWrt, I got a flexible travel router based on commodity hardware. OpenWrt makes your router fully configurable and extensible and, thanks to the well-made web GUI, it's also appropriate for beginners. There are even a few [select routers][30] that ship with OpenWrt already installed. You are also able to enhance your router's functionality with lots of [available packages][31]. For example, I’m using the [vsftp][32] FTP server to host some movies and TV series on a connected USB stick. Take a look at the [projects homepage][33], where you can find many reasons to switch to OpenWrt. - -Image by: Stephan Avenwedde, [CC BY-SA 4.0][7] - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/22/7/openwrt-open-source-firmware - -作者:[Stephan Avenwedde][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/hansic99 -[b]: https://github.com/lkxed -[1]: https://opensource.com/sites/default/files/lead-images/OSDC_Internet_Cables_520x292_0614_RD.png -[2]: https://openwrt.org -[3]: https://thekelleys.org.uk/dnsmasq/doc.html -[4]: https://openwrt.org/docs/guide-user/luci/start -[5]: https://opensource.com/article/20/2/lua-cheat-sheet -[6]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_overview_c_0.png -[7]: https://creativecommons.org/licenses/by-sa/4.0/legalcode -[8]: https://openwrt.org/docs/techref/flash.layout -[9]: https://openwrt.org/docs/guide-user/additional-software/opkg -[10]: https://opensource.com/sites/default/files/2022-07/OpenWrt_Comparison_RaspberryPi.jpg -[12]: https://openwrt.org/supported_devices -[13]: https://openwrt.org/toh/start -[14]: https://openwrt.org/toh/tp-link/tl-wr902ac_v3 -[15]: https://fedoraproject.org/wiki/Networking/CLI -[16]: http://openwrt/ -[17]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_login_manager.png -[19]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_wireless_section_c.webp -[21]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_wifi_device_configuration.webp -[23]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_network_devices_0.webp -[25]: https://openwrt.org/docs/guide-user/base-system/basic-networking -[26]: https://en.wikipedia.org/wiki/Captive_portal -[27]: https://en.wikipedia.org/wiki/DNS_rebinding -[28]: https://opensource.com/sites/default/files/2022-07/openwrt_luci_firewall_settings.webp -[30]: https://opensource.com/article/22/1/turris-omnia-open-source-router -[31]: https://openwrt.org/packages/table/start -[32]: https://openwrt.org/docs/guide-user/services/nas/ftp.overview -[33]: https://openwrt.org/reasons_to_use_openwrt From 6b3a3a4fbc50846313af8a50010cb72015cf05da Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 29 Mar 2023 15:05:44 +0800 Subject: [PATCH 09/83] RP @geekpi https://linux.cn/article-15672-1.html --- ...w to set up your own open source DNS server.md | 67 +++++++++++++++++++ ...w to set up your own open source DNS server.md | 62 ----------------- 2 files changed, 67 insertions(+), 62 deletions(-) create mode 100644 published/20230315.2 ⭐️ How to set up your own open source DNS server.md delete mode 100644 translated/tech/20230315.2 ⭐️ How to set up your own open source DNS server.md diff --git a/published/20230315.2 ⭐️ How to set up your own open source DNS server.md b/published/20230315.2 ⭐️ How to set up your own open source DNS server.md new file mode 100644 index 0000000000..c1fcfb780f --- /dev/null +++ b/published/20230315.2 ⭐️ How to set up your own open source DNS server.md @@ -0,0 +1,67 @@ +[#]: subject: "How to set up your own open source DNS server" +[#]: via: "https://opensource.com/article/23/3/open-source-dns-server" +[#]: author: "Amar Gandhi https://opensource.com/users/amar1723" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15672-1.html" + +如何设置自己的保护隐私的 DNS 服务器 +====== + +![][0] + +> 通过开源项目 AdGuard Home 运行你自己的 DNS 服务器来控制你的互联网隐私。 + +域名服务器(DNS)将域名(如 example.com)与 IP 地址(如 93.184.216.34)相关联。这就是当你输入 URL 或搜索引擎返回 URL 供你访问时,你的网络浏览器如何知道在世界的哪个地方寻找数据。DNS 为互联网用户提供了极大的便利,但也并非没有缺点。例如,付费广告会出现在网页上,因为你的浏览器会自然的使用 DNS 来解析这些广告在互联网上“存在”的位置。同样,跟踪你在线活动的软件通常由通过 DNS 解析的服务启用。你不想完全关闭 DNS,因为它非常有用。但是你可以运行自己的 DNS 服务,以便更好地控制它的使用方式。 + +我相信运行自己的 DNS 服务器至关重要,这样你就可以阻止广告并保持你的浏览隐私,远离试图分析你的在线交互的提供商。我过去用过 [Pi-hole][1],今天仍然推荐它。然而,最近,我一直在我的网络上运行开源项目 [AdGuard Home][2]。我发现它有一些值得探索的独特功能。 + +### AdGuard Home + +在我使用过的开源 DNS 软件中,[AdGuard Home][2] 是最容易设置和维护的。你可以在一个项目中获得许多 DNS 解析解决方案,例如 DNS over TLS、DNS over HTTPS 和 DNS over QUIC。 + +你可以使用一个脚本将 AdGuard 设置为容器或本地服务: + +``` +$ curl -s -S -L \ + https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh +``` + +查看这个脚本以便了解它的作用。了解了它的工作过程后,再运行它: + +``` +$ sh ./install.sh +``` + +我最喜欢 AdGuard Home 的一些功能: + +- 一个简单的管理界面 +- 使用 AdGuard 阻止列表来阻止广告和恶意软件 +- 单独配置网络上每个设备的选项 +- 强制在特定设备上进行安全搜索 +- 为管理界面设置 HTTPS,这样与它的远程交互是完全加密的 + +我发现 AdGuard Home 为我节省了时间。它的黑名单比 Pi-hole 上的黑名单更强大。你可以快速轻松地将其配置为 DNS over HTTPS。 + +### 没有更多的恶意软件 + +恶意软件是你计算机上不需要的内容。它并不总是对你有直接危险,但它可能会为第三方带来危险活动。这不是互联网最初的目的。我认为你应该托管自己的 DNS 服务,以保护你的互联网历史记录的私密性,并避免被微软、谷歌和亚马逊等已知跟踪器掌握。在你的网络上试用 AdGuard Home 吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/open-source-dns-server + +作者:[Amar Gandhi][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/amar1723 +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/article/18/2/block-ads-raspberry-pi +[2]: https://github.com/AdguardTeam/AdGuardHome +[0]: https://img.linux.net.cn/data/attachment/album/202303/29/150451m9ggza42gagt9gih.jpg \ No newline at end of file diff --git a/translated/tech/20230315.2 ⭐️ How to set up your own open source DNS server.md b/translated/tech/20230315.2 ⭐️ How to set up your own open source DNS server.md deleted file mode 100644 index b27313ad45..0000000000 --- a/translated/tech/20230315.2 ⭐️ How to set up your own open source DNS server.md +++ /dev/null @@ -1,62 +0,0 @@ -[#]: subject: "How to set up your own open source DNS server" -[#]: via: "https://opensource.com/article/23/3/open-source-dns-server" -[#]: author: "Amar Gandhi https://opensource.com/users/amar1723" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -如何设置自己的开源 DNS 服务器 -====== - -域名服务器 (DNS) 将域名(如 example.com)与 IP 地址(如 93.184.216.34)相关联。这就是当你输入 URL 或搜索引擎返回 URL 供你访问时,你的网络浏览器如何知道在世界的哪个地方寻找数据。DNS 为互联网用户提供了极大的便利,但也并非没有缺点。例如,付费广告会出现在网页上,因为你的浏览器自然会使用 DNS 来解析这些广告在互联网上“存在”的位置。同样,跟踪你在线活动的软件通常由通过 DNS 解析的服务启用。你不想完全关闭 DNS,因为它非常有用。但是你可以运行自己的 DNS 服务,以便更好地控制它的使用方式。 - -我相信运行自己的 DNS 服务器至关重要,这样你就可以阻止广告并保持你的浏览隐私,远离试图分析你的在线交互的提供商。我过去用过 [Pi-hole][1],今天仍然推荐它。然而,最近,我一直在我的网络上运行开源项目 [Adguard Home][2]。我发现它有一些值得探索的独特功能。 - -### Adguard Home - -在我使用过的开源 DNS 软件中,[Adguard Home][2] 是最容易设置和维护的。你可以在一个项目中获得许多 DNS 解析解决方案,例如 DNS over TLS、DNS over HTTPS 和 DNS over QUIC。 - -你可以使用一个脚本将 Adguard 设置为容器或本地服务: - -``` -$ curl -s -S -L \ -https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh -``` - -查看脚本以便了解它的作用。熟悉安装过程后,运行它: - -``` -$ sh ./install.sh -``` - -我最喜欢 AdGuard Home 的一些功能: - -- 一个简单的管理界面 -- 使用 Adguard 阻止列表阻止广告和恶意软件 -- 单独配置网络上每个设备的选项 -- 强制在特定设备上进行安全搜索 -- 为管理界面设置 HTTPS,这样与它的远程交互是完全加密的 - -我发现 Adguard Home 为我节省了时间。它的黑名单比 Pi-hole 上的黑名单更强大。你可以快速轻松地将其配置为 DNS over HTTPS。 - -### 没有更多的恶意软件 - -恶意软件是你计算机上不需要的内容。它并不总是对你有直接危险,但它可能会为第三方带来危险活动。这不是互联网曾经打算做的。我认为你应该托管自己的 DNS 服务,以保护你的互联网历史记录的私密性,并避免被 Microsoft、Google 和 Amazon 等已知跟踪器掌握。在你的网络上试用 Adguard Home。 - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/3/open-source-dns-server - -作者:[Amar Gandhi][a] -选题:[lkxed][b] -译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/amar1723 -[b]: https://github.com/lkxed/ -[1]: https://opensource.com/article/18/2/block-ads-raspberry-pi -[2]: https://github.com/AdguardTeam/AdGuardHome \ No newline at end of file From 250ed08082632de37af8a306673eababf8f0ba6e Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 29 Mar 2023 23:14:28 +0800 Subject: [PATCH 10/83] ATRP @wxy https://linux.cn/article-15674-1.html --- ...14 Why programmers love Linux packaging.md | 73 +++++++++++++++++++ ...14 Why programmers love Linux packaging.md | 71 ------------------ 2 files changed, 73 insertions(+), 71 deletions(-) create mode 100644 published/20210214 Why programmers love Linux packaging.md delete mode 100644 sources/tech/20210214 Why programmers love Linux packaging.md diff --git a/published/20210214 Why programmers love Linux packaging.md b/published/20210214 Why programmers love Linux packaging.md new file mode 100644 index 0000000000..62f668716e --- /dev/null +++ b/published/20210214 Why programmers love Linux packaging.md @@ -0,0 +1,73 @@ +[#]: collector: (lujun9972) +[#]: translator: (wxy) +[#]: reviewer: (wxy) +[#]: publisher: (wxy) +[#]: url: (https://linux.cn/article-15674-1.html) +[#]: subject: (Why programmers love Linux packaging) +[#]: via: (https://opensource.com/article/21/2/linux-packaging) +[#]: author: (Seth Kenlon https://opensource.com/users/seth) + +为什么程序员喜欢为 Linux 打包 +====== + +> 程序员可以通过 Flatpak 轻松、稳定地发布他们的软件,让他们专注于他们的激情工作:编程。 + +![][0] + +如今,人们比以往任何时候都喜爱 Linux。在这个系列中,我将分享使用 Linux 的 21 个不同理由。今天,我将谈一谈是什么让 Linux 的打包成为程序员的理想选择。 + +程序员喜欢编程。这可能看起来是一个显而易见的说法,但重要的是要明白,开发软件所涉及的不仅仅是编写代码。它包括编译、文档、源代码管理、安装脚本、配置默认值、支持文件、交付格式等等。从一个空白的屏幕到一个可交付的软件安装程序,需要的不仅仅是编程,但大多数程序员宁愿编程也不愿打包。 + +### 什么是打包? + +当食物被送到商店购买时,它是被包装好的。当直接从农民或从环保的散装或桶装商店购买时,包装是你所带的任何容器。当从杂货店购买时,包装可能是一个纸板箱、塑料袋、一个铁罐等等。 + +当软件被提供给广大计算机用户时,它也必须被打包起来。像食品一样,软件也有几种打包方式。开源软件可以不进行打包,因为用户在获得原始代码后,可以自己编译和打包它。然而,打包也有好处,所以应用程序通常以某种特定于用户平台的格式交付。而这正是问题的开始,因为软件包的格式并不只有一种。 + +对于用户来说,软件包使安装软件变得容易,因为所有的工作都由系统的安装程序完成。软件被从软件包中提取出来,并分发到操作系统中的适当位置。几乎没有任何出错的机会。 + +然而,对于软件开发者来说,打包意味着你必须学会如何创建一个包 —— 而且不仅仅是一个包,而是为你希望你的软件可以安装到的每一个操作系统创建一个独特的包。更加复杂的是,每个操作系统都有多种打包格式和选项,有时甚至是不同的编程语言。 + +### 为 Linux 打包 + +传统上,Linux 的打包方式似乎是非常多的。从 Fedora 衍生出来的 Linux 发行版,如 Red Hat 和 CentOS,默认使用 .rpm 包。Debian 和 Ubuntu(以及类似的)默认使用 .deb 包。其他发行版可能使用其中之一,或者两者都不使用,选择自定义的格式。当被问及时,许多 Linux 用户说,理想情况下,程序员根本不会为 Linux 打包他们的软件,而是依靠每个发行版的软件包维护者来创建软件包。所有安装在 Linux 系统上的软件都应该来自该发行版的官方软件库。然而,目前还不清楚如何让你的软件可靠地被一个发行版打包和包含,更不用说所有的发行版了。 + +### Linux 的 Flatpak + +Flatpak 打包系统是为了统一和去中心化 Linux 作为开发者的交付目标而推出的。通过 Flatpak,无论是开发者还是其他人(Linux 社区的成员、不同的开发者、Flatpak 团队成员或其他任何人)都可以自由地打包软件。然后他们可以将软件包提交给 Flathub,或者选择自我托管软件包,并将其提供给几乎任何 Linux 发行版。Flatpak 系统适用于所有 Linux 发行版,所以针对一个发行版就等于针对所有发行版。 + +### Flatpak 技术如何工作 + +Flatpak 具有普遍吸引力的秘密是一个标准基础。Flatpak 系统允许开发者引用一套通用的软件开发者工具包(SDK)模块。这些模块由 Flatpak 系统的维护者进行打包和管理。当你安装 Flatpak 时,SDK 会根据需要被拉入,以确保与你的系统兼容。任何特定的 SDK 只需要一次,因为它所包含的库可以在任何 Flatpak 中共享。 + +如果开发者需要一个尚未包含在现有 SDK 中的库,开发者可以在 Flatpak 中添加该库。 + +结果不言自明。用户可以从一个叫做 [Flathub][2] 的中央仓库在任何 Linux 发行版上安装数百个软件包。 + +### 开发者如何使用 Flatpak + +Flatpak 被设计成可重复的,所以构建过程很容易被集成到 CI/CD 工作流程中。Flatpak 是在一个 [YAML][3] 或 JSON 清单文件中定义的。你可以按照我的 [介绍性文章][4] 创建你的第一个 Flatpak,你也可以在 [docs.flatpak.org][5] 阅读完整的文档。 + +### Linux 让它变得简单 + +在 Linux 上创建软件很容易,为 Linux 打包也很简单,而且可以自动化。如果你是一个程序员,Linux 使你很容易忘记打包这件事,因为它只需要针对一个系统,并可以整合到你的构建过程中。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/2/linux-packaging + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brown-package-red-bow.jpg?itok=oxZYQzH- (Package wrapped with brown paper and red bow) +[2]: https://flatpak.org/setup/ +[3]: https://www.redhat.com/sysadmin/yaml-beginners +[4]: https://opensource.com/article/19/10/how-build-flatpak-packaging +[5]: https://docs.flatpak.org/en/latest/index.html +[0]: https://img.linux.net.cn/data/attachment/album/202303/29/231331qb9ye8gggeekvce1.jpg \ No newline at end of file diff --git a/sources/tech/20210214 Why programmers love Linux packaging.md b/sources/tech/20210214 Why programmers love Linux packaging.md deleted file mode 100644 index 837b4a2aed..0000000000 --- a/sources/tech/20210214 Why programmers love Linux packaging.md +++ /dev/null @@ -1,71 +0,0 @@ -[#]: collector: (lujun9972) -[#]: translator: ( ) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Why programmers love Linux packaging) -[#]: via: (https://opensource.com/article/21/2/linux-packaging) -[#]: author: (Seth Kenlon https://opensource.com/users/seth) - -Why programmers love Linux packaging -====== -Programmers can distribute their software easily and consistently via -Flatpaks, letting them focus on their passion: Programming. -![Package wrapped with brown paper and red bow][1] - -In 2021, there are more reasons why people love Linux than ever before. In this series, I'll share 21 different reasons to use Linux. Today, I'll talk about what makes packaging for Linux ideal for programmers. - -Programmers love to program. That probably seems like an obvious statement, but it's important to understand that developing software involves a lot more than just writing code. It includes compiling, documentation, source code management, install scripts, configuration defaults, support files, delivery format, and more. Getting from a blank screen to a deliverable software installer requires much more than just programming, but most programmers would rather program than package. - -### What is packaging? - -When food is sent to stores to be purchased, it is packaged. When buying directly from a farmer or from an eco-friendly bulk or bin store, the packaging is whatever container you've brought with you. When buying from a grocery store, packaging may be a cardboard box, plastic bag, a tin can, and so on. - -When software is made available to computer users at large, it also must be packaged. Like food, there are several ways software can be packaged. Open source software can be left unpackaged because users, having access to the raw code, can compile and package it themselves. However, there are advantages to packages, so applications are commonly delivered in some format specific to the user's platform. And that's where the problems begin, because there's not just one format for software packages. - -For the user, packages make it easy to install software because all the work is done by the system's installer. The software is extracted from its package and distributed to the appropriate places within the operating system. There's little opportunity for anything to go wrong. - -For the software developer, however, packaging means that you have to learn how to create a package—and not just one package, but a unique package for every operating system you want your software to be installable on. To complicate matters, there are multiple packaging formats and options for each operating system, and sometimes even for the programming language being used. - -### Packaging on Linux - -Packaging options for Linux have traditionally seemed pretty overwhelming. Linux distributions derived from Fedora, such as Red Hat and CentOS, default to `.rpm` packages. Debian and Ubuntu (and similar) default to `.deb` packages. Other distributions may use one or the other, or neither, opting for a custom format. When asked, many Linux users say that ideally, a programmer won't package their software for Linux at all but instead rely on the package maintainers of each distribution to create the package. All software installed onto any Linux system ought to come from that distribution's official repository. However, it remains unclear how to get your software reliably packaged and included by one distribution, let alone all distributions. - -### Flatpak for Linux - -The Flatpak packaging system was introduced to unify and decentralize Linux as a delivery target for developers. With Flatpak, either a developer or anyone (a member of a Linux community, a different developer, a Flatpak team member, or anyone else) is free to package software. They can then submit the package to Flathub or choose to self-host the package and offer it to basically any Linux distribution. The Flatpak system is available to all Linux distributions, so targeting one is the same as targeting them all. - -### How Flatpak technology works - -The secret to Flatpak's universal appeal is a standard base. The Flatpak system allows developers to reference a common set of Software Developer Kit (SDK) modules. These are packaged and managed by the maintainers of the Flatpak system. The SDKs get pulled in as needed whenever you install a Flatpak, ensuring compatibility with your system. Any given SDK is only required once because the libraries it contains can be shared across any Flatpak calling for it. - -If a developer requires a library not already included in an existing SDK, the developer can add that library in the Flatpak. - -The results speak for themselves. Users may install hundreds of packages on any Linux distribution from one central repository, called [Flathub][2]. - -### How developers use Flatpaks - -Flatpaks are designed to be reproducible, so the build process is easily integrated into a CI/CD workflow. A Flatpak is defined in a [YAML][3] or JSON manifest file. You can create your first Flatpak by following my [introductory article][4], and you can read the full documentation at [docs.flatpak.org][5]. - -### Linux makes it easy - -Creating software on Linux is easy, and packaging it up for Linux is simple and automatable. If you're a programmer, Linux makes it easy for you to forget about packaging by targeting one system and integrating that into your build process. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/2/linux-packaging - -作者:[Seth Kenlon][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/seth -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/brown-package-red-bow.jpg?itok=oxZYQzH- (Package wrapped with brown paper and red bow) -[2]: https://flatpak.org/setup/ -[3]: https://www.redhat.com/sysadmin/yaml-beginners -[4]: https://opensource.com/article/19/10/how-build-flatpak-packaging -[5]: https://docs.flatpak.org/en/latest/index.html From f7c7240e095572361ff6df0ea9d070df2cb2143b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Wed, 29 Mar 2023 23:52:59 +0800 Subject: [PATCH 11/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][ta?= =?UTF-8?q?lk]:=2020230329.0=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20The?= =?UTF-8?q?=20open=20source=20way=20of=20raising=20a=20family.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...⭐️ The open source way of raising a family.md | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 sources/talk/20230329.0 ⭐️⭐️ The open source way of raising a family.md diff --git a/sources/talk/20230329.0 ⭐️⭐️ The open source way of raising a family.md b/sources/talk/20230329.0 ⭐️⭐️ The open source way of raising a family.md new file mode 100644 index 0000000000..61640acf6f --- /dev/null +++ b/sources/talk/20230329.0 ⭐️⭐️ The open source way of raising a family.md @@ -0,0 +1,63 @@ +[#]: subject: "The open source way of raising a family" +[#]: via: "https://opensource.com/article/23/3/open-source-family" +[#]: author: "Ruth Netser https://opensource.com/users/rnetser1" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +The open source way of raising a family +====== + +As a rebellious teenager in the 80s, "because I said so" was a phrase I heard all too often at home. I wasn't really a rebel. I just wanted to be heard and seen as a person starting to articulate their thoughts and emotions. + +The feeling I had of not being heard or listened to led me to believe that it's important to raise kids who are not afraid to speak up, but who can also learn to adapt. Listening to them and collaborating with kids can also help them be creative and, eventually, allow them to be part of a successful organization. + +### How children interpret information + +I didn't intentionally encourage open behaviors for my children, nor did I actively tell my kids to speak up. Nevertheless, on my eldest son's first day of kindergarten, we were called by his teacher. She told us that when she went over the rules of not fighting, pushing, and so on with the class, my kid had raised his hand to tell her that his parents allowed him to dispute and debate all the time. + +It was true. I let my boys express themselves and be heard. But my kid's words surprised me. Only then did I realize that while I'd been doing something right, the fact is that how my kids act shouldn't just be a reaction to the way we educate them. Nor should we leave it up to them to pick things from second-hand context. That day was a game changer for me, and practicing an open culture officially and proactively entered our home. + +### Open for growth + +When I was young, parents and elders were the knowledgeable ones. + +As a kid, it was not always easy to get information. While I was encouraged to express an opinion, it was only up to the point where it was a normative and "easy to digest" one. Today, parents and teachers and kids all have the same means to access data. What you do with it is entirely up to you. + +For example, when playing Scattergories in Hebrew, the word "virus" is normally the only animal starting with "V" that most people play. To gain more points, we decided to find additional animal names that qualified. In no time, we found not one but three new animals (my kid's teacher argued that a "wallaby" (spelled with a "V" in Hebrew) was not a real thing, but that's another story). + +I teach my kids to read between the lines and never to accept things presented to them as "facts" without question. This allows them to practice critical thinking. It also allows them to question me, which leads us to open and transparent discussions. + +Are these discussions easy? No. Do I always have the energy to conduct them? Absolutely not. + +However, to help them practice the learn-to-listen "muscle," these conversations are a must. + +Occasionally, we have to force ourselves to find time to focus our attention on our family. It takes time to build a robust and open culture, and as people change so does your family culture. You have to adapt and work to keep it alive. As leader of the pack, I have to provide my kids with a safe place, a place where they can openly share their ideas, a place where they feel belonging. + +In a family, you have to collaborate and solve problems together. Listening to the different ideas and approaches to solving issues allows you to come up with creative (and yet not always to everyone's liking) solutions. + +One issue in my home was the noise in the house when playing computer games. This happens mostly late at night and on the weekends. We sat down together and came up with an agreed-upon timeslot for noisy games. From then on, those who wanted to play knew when they could play, and those seeking some quiet time also knew when those times would happen. As kids grow up, the nature of the decisions and discussions change. + +Does it mean that all decisions are shared with the kids? No. Does it mean that it's all roses? Absolutely not. + +Encouraging kids to connect may end up with a broken vase for which no one seems to be accountable. It may lead to "because I said so" to pop in for a visit. However, having challenging yet inclusive conversations, encouraging innovative thinking, and including kids in decisions are ways of preparing them for adulthood. Hopefully, it'll make them better people, too (so far, this is working well, in my humble opinion.) + +### Open family culture + +Practicing open culture is not a one-time thing. It's a journey, and it's a mindset. I believe it provides both my kids and me the tools to be resilient, open-minded, tolerant, and inquisitive both inside the house and out. Start an open culture with those closest to you, and take it with you everywhere you go. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/open-source-family + +作者:[Ruth Netser][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/rnetser1 +[b]: https://github.com/lkxed/ From e025367c3ddf2fb575f8466c4d62627491727c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Wed, 29 Mar 2023 23:53:34 +0800 Subject: [PATCH 12/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][ne?= =?UTF-8?q?ws]:=2020230329.1=20=E2=AD=90=EF=B8=8F=20Ubuntu=20Cinnamon=20Ge?= =?UTF-8?q?ts=20Official=20Ubuntu=20Flavor=20Status.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Cinnamon Gets Official Ubuntu Flavor Status.md | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md diff --git a/sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md b/sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md new file mode 100644 index 0000000000..7be3a41a02 --- /dev/null +++ b/sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md @@ -0,0 +1,78 @@ +[#]: subject: "Ubuntu Cinnamon Gets Official Ubuntu Flavor Status" +[#]: via: "https://news.itsfoss.com/ubuntu-cinnamon-official/" +[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Ubuntu Cinnamon Gets Official Ubuntu Flavor Status +====== + +A Cinnamon edition to the mix of Ubuntu flavors. Perfect! + +![ubuntu cinnamon][1] + +![][2] + +Waiting for Ubuntu 23.04 next month? + +Well, we already mentioned that one of the [exciting things about the Ubuntu 23.04 release][3] includes a new official Cinnamon flavor (originally, Ubuntu Cinnamon Remix). + +And, that is **now official**, as the Technical Board of Ubuntu [approved it][4] with enough votes. + +### Ubuntu Cinnamon 23.04: What to Expect? + +![ubuntu cinnamon 23.04 screenshot][5] + +If you already used Ubuntu Cinnamon Remix (unofficial) earlier, you may have an idea of how they approach it. + +Nevertheless, if you wanted an Ubuntu flavor and Cinnamon desktop, without numerous special customizations, Ubuntu Cinnamon is your friend. + +Linux Mint, on the other hand, is an option which is also based on Ubuntu featuring Cinnamon. However, you get a Mint-specific theme, iconography, tools, and tweaks that make it a different experience. + +Basically, if you use Linux Mint, it is not going to feel like "_just another Ubuntu flavor_". + +Not to forget, Linux Mint disables snap by default and is Flatpak-first, an entire opposite of what Ubuntu Cinnamon 23.04 will be. + +![ubuntu cinnamon menu screenshot][6] + +So, if you prefer using snaps over Flatpak, and like how the usual Ubuntu flavors work on your system, Ubuntu Cinnamon is a nice addition. Some other points to note about this release include: + +- Pre-installed apps like [Synaptic Package Manager][7], LibreOffice, etc. +- Ubuntu's Yaru theme +- No XApps like you expect with Linux Mint + +Currently, Ubuntu Cinnamon 23.04 is almost ready for release (due for next month) as per its [latest daily build][8]. + +Whether it is going to win over Linux Mint users, that is a different story. But, **a new Cinnamon edition on Ubuntu should get more users to try the Cinnamon desktop, which is a good thing.** + +The Cinnamon desktop is a blend of traditional Windows-style layout with more to offer. + +You can read the official announcement on the [Ubuntu Cinnamon blog][9]. + +_💬 Do you think you will be switching to Ubuntu Cinnamon as your preferred flavor to others? Share your thoughts in the comments._ + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/ubuntu-cinnamon-official/ + +作者:[Ankush Das][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/ubuntu-cinnamon-official-flavour.png +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://news.itsfoss.com/ubuntu-23-04/ +[4]: https://lists.ubuntu.com/archives/technical-board/2023-March/002725.html?ref=its-foss-news +[5]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-home.jpg +[6]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-menu.jpg +[7]: https://itsfoss.com/synaptic-package-manager/?ref=its-foss-news +[8]: https://cdimage.ubuntu.com/ubuntucinnamon/daily-live/current/?ref=its-foss-news +[9]: https://ubuntucinnamon.org/ubuntu-cinnamon-flavor-status-announcement/?ref=its-foss-news \ No newline at end of file From 311121d628c16f2cd9d158dd454082a224c3e1a8 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 30 Mar 2023 07:51:00 +0800 Subject: [PATCH 13/83] RP @geekpi https://linux.cn/article-15675-1.html --- ...w to Install Kubernetes Cluster Using Kubespray.md | 94 ++++++++++--------- 1 file changed, 49 insertions(+), 45 deletions(-) rename {translated/tech => published}/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md (71%) diff --git a/translated/tech/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md b/published/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md similarity index 71% rename from translated/tech/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md rename to published/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md index 1bbe0f1bc3..60f4c2a1ce 100644 --- a/translated/tech/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md +++ b/published/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md @@ -3,28 +3,30 @@ [#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/" [#]: collector: "lkxed" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15675-1.html" -如何使用 Kubespray 安装 Kubernetes 集群 +使用 Kubespray 安装 Kubernetes 集群 ====== -你是否正在寻找有关如何使用 kubespray 安装 Kubernetes (k8s) 的简单指南? +![][0] -此页面上的分步指南将向你展示如何在 Linux 系统上使用 kubespray 安装 Kubernetes 集群。 +> 你是否正在寻找有关如何使用 Kubespray 安装 Kubernetes(k8s)的简单指南? -Kubespray 是一个免费的开源工具,它提供了 ansible playbook 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。 +此页面上的分步指南将向你展示如何在 Linux 系统上使用 Kubespray 安装 Kubernetes 集群。 -它支持一系列操作系统,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux,它可以在各种平台上部署 Kubernetes,包括裸机、公共云和私有云。 +Kubespray 是一个自由开源的工具,它提供了 Ansible 剧本playbook 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。 + +它支持一系列操作系统,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux(RHEL),它可以在各种平台上部署 Kubernetes,包括裸机、公共云和私有云。 在本指南中,我们使用以下实验室: -- Ansible 节点(Kubespray 节点):最小安装的 Ubuntu 22.04 LTS (192.168.1.240) -- 3 个控制器节点:最小安装的 Rocky Linux 9 (192.168.1.241/242/243) -- 2 个工作节点:最小安装的 Rocky Linux 9 (192.168.1.244/245) +- Ansible 节点(Kubespray 节点):最小安装的 Ubuntu 22.04 LTS(192.168.1.240) +- 3 个控制器节点:最小安装的 Rocky Linux 9(192.168.1.241/242/243) +- 2 个工作节点:最小安装的 Rocky Linux 9(192.168.1.244/245) -##### kubespray 的最低系统要求 +### Kubespray 的最低系统要求 - 主节点:1500 MB RAM、2 个 CPU 和 20 GB 可用磁盘空间 - 工作节点:1024 MB、2 个 CPU、20 GB 可用磁盘空间 @@ -36,7 +38,7 @@ Kubespray 是一个免费的开源工具,它提供了 ansible playbook 来部 ### 步骤 1)配置 Kubespray 节点 -登录到你的 Ubuntu 22.04 系统并安装 ansible。运行以下一组命令: +登录到你的 Ubuntu 22.04 系统并安装 Ansible。运行以下一组命令: ``` $ sudo apt update @@ -46,7 +48,7 @@ $ cd kubespray $ pip install -r requirements.txt ``` -验证 ansible 版本,运行: +验证 Ansible 版本,运行: ``` $ ansible --version @@ -62,7 +64,7 @@ $ declare -a IPS=(192.168.1.241 192.168.1.241 192.168.1.242 192.168.1.243 192.16 $ CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]} ``` -修改 inventory 文件,设置 3 个控制节点和 2 个工作节点: +修改清单文件,设置 3 个控制节点和 2 个工作节点: ``` $ vi inventory/mycluster/hosts.yaml @@ -72,7 +74,7 @@ $ vi inventory/mycluster/hosts.yaml 保存并关闭文件。 -查看并修改文件 “inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml” 中的以下参数: +查看并修改文件 `inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml` 中的以下参数: ``` kube_version: v1.26.2 @@ -84,35 +86,36 @@ cluster_name: linuxtechi.local ![][3] -要启用 kuberenetes 仪表板和入口控制器等插件,请在文件 “inventory/mycluster/group_vars/k8s_cluster/addons.yml” 中将参数设置为已启用: +要启用 Kuberenetes 仪表板和入口控制器等插件,请在文件 `inventory/mycluster/group_vars/k8s_cluster/addons.yml` 中将参数设置为已启用: ``` $ vi inventory/mycluster/group_vars/k8s_cluster/addons.yml ------------ +``` + +``` dashboard_enabled: true ingress_nginx_enabled: true ingress_nginx_host_network: true ------------ ``` 保存并退出文件。 -### 步骤 2)将 SSH 密钥从 ansible 节点复制到所有其他节点 +### 步骤 2)将 SSH 密钥从 Ansible 节点复制到所有其他节点 -首先在你的 ansible 节点上为你的本地用户生成 ssh-keys: +首先在你的 Ansible 节点上为你的本地用户生成 SSH 密钥: ``` $ ssh-keygen ``` -使用 ssh-copy-id 命令复制 ssh-keys: +使用 `ssh-copy-id` 命令复制 SSH 密钥: ``` -$ ssh-copy-id [email protected] -$ ssh-copy-id [email protected] -$ ssh-copy-id [email protected] -$ ssh-copy-id [email protected] -$ ssh-copy-id [email protected] +$ ssh-copy-id sysops@192.168.1.241 +$ ssh-copy-id sysops@192.168.1.242 +$ ssh-copy-id sysops@192.168.1.243 +$ ssh-copy-id sysops@192.168.1.244 +$ ssh-copy-id sysops@192.168.1.245 ``` 还要在每个节点上运行以下命令: @@ -121,16 +124,16 @@ $ ssh-copy-id [email protected] $ echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops ``` -### 步骤 3) 禁用防火墙并启用 IPV4 转发 +### 步骤 3)禁用防火墙并启用 IPV4 转发 -要在所有节点上禁用防火墙,请从 ansible 节点运行以下 ansible 命令: +要在所有节点上禁用防火墙,请从 Ansible 节点运行以下 `ansible` 命令: ``` $ cd kubespray $ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo systemctl stop firewalld && sudo systemctl disable firewalld" ``` -运行以下 ansible 命令以在所有节点上启用 IPv4 转发和禁用交换: +运行以下 `ansible` 命令以在所有节点上启用 IPv4 转发和禁用交换: ``` $ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf" @@ -139,7 +142,7 @@ $ ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sudo sed -i '/ swap ### 步骤 4)启动 Kubernetes 部署 -现在,我们都准备好开始 Kubernetes 集群部署,从 ansible 节点运行下面的 ansible playbook: +现在,我们都准备好开始 Kubernetes 集群部署,从 Ansible 节点运行下面的 Ansible 剧本: ``` $ cd kubespray @@ -158,7 +161,7 @@ $ ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root ### 步骤 5)访问 Kubernetes 集群 -登录到第一个主节点,切换到 root 用户,在那里运行 kubectl 命令: +登录到第一个主节点,切换到 root 用户,在那里运行 `kubectl` 命令: ``` $ sudo su - @@ -170,9 +173,9 @@ $ sudo su - ![][6] -完美,上面的输出确认集群中的所有节点都处于就绪状态,并且所有命名空间的 Pod 都已启动并正在运行。这表明我们的 Kubernetes 集群部署成功。 +完美,上面的输出确认集群中的所有节点都处于就绪状态,并且所有命名空间的 容器荚Pod 都已启动并正在运行。这表明我们的 Kubernetes 集群部署成功。 -让我们尝试部署基于 nginx 的部署并将其公开为节点端口,运行以下 kubectl 命令: +让我们尝试部署基于 Nginx 的部署并将其公开为节点端口,运行以下 `kubectl` 命令: ``` $ kubectl create deployment demo-nginx-kubespray --image=nginx --replicas=2 @@ -186,15 +189,15 @@ $ kubectl get svc demo-nginx-kubespray ![][7] -现在尝试使用工作节点的 IP 地址和节点端口 (30050) 访问此 nginx 应用。 +现在尝试使用工作节点的 IP 地址和节点端口(30050)访问此 Nginx 应用。 -使用以下 curl 命令或 Web 浏览器访问此应用。 +使用以下 `curl` 命令或 Web 浏览器访问此应用。 ``` $ curl 192.168.1.245:30050 ``` -或者 +或者, ![][8] @@ -220,7 +223,6 @@ metadata: ``` $ kubectl apply -f dashboard-adminuser.yml serviceaccount/admin-user created -$ ``` 创建集群角色绑定: @@ -246,7 +248,6 @@ subjects: ``` $ kubectl apply -f admin-role-binding.yml clusterrolebinding.rbac.authorization.k8s.io/admin-user created -$ ``` 现在,为管理员用户创建令牌: @@ -259,15 +260,15 @@ $ kubectl -n kube-system create token admin-user 复制此令牌并将其放在安全的地方,因为我们将使用令牌登录 Kubernetes 仪表板。 -使用以下 ssh 命令从你的系统连接到第一个主节点 +使用以下 `ssh` 命令从你的系统连接到第一个主节点: ``` -$ ssh -L8001:localhost:8001 [email protected] +$ ssh -L8001:localhost:8001 sysops@192.168.1.241 ``` 注意:替换适合你环境的 IP 地址。 -登录后,切换到 root 用户并运行 “kubectl proxy” 命令: +登录后,切换到 root 用户并运行 `kubectl proxy` 命令: ``` $ sudo su - @@ -283,11 +284,13 @@ Starting to serve on 127.0.0.1:8001 完成代理设置后,将以下网址粘贴到浏览器中: +``` http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#/login +``` ![][12] -选择令牌登录并粘贴你在上面为管理员用户生成的令牌,然后单击“登录”。 +选择令牌登录并粘贴你在上面为管理员用户生成的令牌,然后单击“登录Sign in”。 ![][13] @@ -300,7 +303,7 @@ via: https://www.linuxtechi.com/install-kubernetes-using-kubespray/ 作者:[Pradeep Kumar][a] 选题:[lkxed][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -318,4 +321,5 @@ via: https://www.linuxtechi.com/install-kubernetes-using-kubespray/ [10]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Ssh-Tunneling-master-node-kubernetes.png [11]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Proxy-Settings-Kubenetes-Dashbaord-kubespray.png [12]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubernetes-Dashboard-Login-Page-KubeSpray.png -[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubernetes-Dashboard-Home-Page-Kubespray.png \ No newline at end of file +[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubernetes-Dashboard-Home-Page-Kubespray.png +[0]: https://img.linux.net.cn/data/attachment/album/202303/30/074513iy2it365a3fti2f2.jpg \ No newline at end of file From c3d821f0587b78273a1ecc49da9a17d38ba94218 Mon Sep 17 00:00:00 2001 From: geekpi Date: Thu, 30 Mar 2023 08:49:34 +0800 Subject: [PATCH 14/83] translated --- ...vim on Ubuntu and other Linux Distributions.md | 150 ------------------ ...vim on Ubuntu and other Linux Distributions.md | 150 ++++++++++++++++++ 2 files changed, 150 insertions(+), 150 deletions(-) delete mode 100644 sources/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md create mode 100644 translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md diff --git a/sources/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md b/sources/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md deleted file mode 100644 index 061b5be74f..0000000000 --- a/sources/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md +++ /dev/null @@ -1,150 +0,0 @@ -[#]: subject: "How to Install and Use Neovim on Ubuntu and other Linux Distributions" -[#]: via: "https://itsfoss.com/install-neovim/" -[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -How to Install and Use Neovim on Ubuntu and other Linux Distributions -====== - -![][1] - -You must have heard about the famous Vim text editor already. However, this article is about its fork, Neovim. - -Vim is also a fork of vi which makes Neovim fork of a fork. So, you can end up using anything for some of its unique traits. - -If you decide to use Neovim, let me help you get started with it on Ubuntu and other Linux distributions. - -### Neovim: Overview - -![][2] - -[Neovim][3] is a project known for its simple maintenance and community contributions. Moreover, the development effort is distributed well between multiple developers. - -For end-users, Neovim is much more extensible than one would expect. The aim of Neovim is to provide better applications of it without compromising the traditional capabilities of Vim. - -With a [GUI for Neovim,][4] you can get an enhanced editing experience. - -### Features of Neovim - -While you can explore all about it on its official website and its [GitHub page][5]. Let me highlight some features: - -- Modern Graphical Interfaces -- API access from many language including (C/C++, C#, Go, Haskell, Java/Kotlin, JavaScript/Node.js, Lua, Perl, Python, Ruby, Rust to name a few) -- Embedded, scriptable terminal emulator -- Asynchronous job control -- Shared data among multiple instances -- XDG base directories support -- Compatible with most Vim plugins, including Ruby and Python plugins - -💡 - -We advise you to learn the usage of Vim and Neovim before you start using it. - -### Installing Neovim on Ubuntu and Linux - -Installing Neovim is simple due to its popularity. As Neovim is available in official repos of any distribution you pick. - -We also have a guide to [install Vim on Linux][6], in case you want that. - -To install Neovim on Ubuntu, just click on the Ubuntu Software icon in the dock. Then, search for Neovim. You can select the snap or the deb version as per your preference. However, the deb package version will be an outdated version of Neovim. - -![neovim listed on ubuntu software center][7] - -And, if you do not want the snap version, you can grab the latest deb file from the [Github releases page for Neovim][8]. If you look closer in the releases page, there is an Appimage file as well. - -If you want to utilize the terminal instead of the GUI, here's what you can do: - -For **Ubuntu and Debian** based distributions, enter the following command to install - -``` -sudo apt install neovim -``` - -For **Manjaro and Arch Linux**, use the below command to update your system and install Neovim - -``` -sudo pacman -Syu neovim -``` - -For **Fedora**, use the following command - -``` -sudo dnf install -y neovim -``` - -To install the **Flatpak**, you can use this command - -``` -flatpak install flathub io.neovim.nvim -``` - -Lastly, to install the **snap package** use the below command - -``` -sudo snap install nvim --classic -``` - -If you prefer building software from source, follow [the steps given on the project's Github page][9]. - -### How to use Neovim - -To use Neovim after installation is complete, just launch it from the application menu by pressing the super key and typing the name "neovim" without quotes. This will open a terminal window with Neovim open. - -![][10] - -Or you can just open any Terminal Emulator of your choice and enter the following command - -``` -nvim -``` - -Yes, not "neovim" but just "**nvim**". For example, to edit _/etc/fstab_ enter the following command. - -``` -sudo nvim /etc/fstab -``` - -Now the fstab file will open as shown in the screenshot below. - -![][11] - -Don't worry if you cannot exit the editor; press **Shift+Z+Z**. For example, if this shortcut key confuses, use the keys you need to type "ZZ" (uppercase) without quotes in any text editor. - -On that note, I should re-iterate that you need to learn Vim or Neovim and go through the documentation to efficiently make use of all its features. - -### Conclusion - -Installing and launching Neovim is pretty straightforward but learning it will require some keyboard grinding for sure. - -This was just an overview of the editor. I am not an expert on this, but I hope this serves well for all the beginners out there! - -💬 _Do you use Neovim? Share your experience on it in the comments below._ - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/install-neovim/ - -作者:[Anuj Sharma][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/anuj/ -[b]: https://github.com/lkxed/ -[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[2]: https://itsfoss.com/content/images/2023/03/goneovim.png -[3]: https://neovim.io/?ref=itsfoss.com -[4]: https://itsfoss.com/neovim-gui-editors/ -[5]: https://github.com/neovim/neovim?ref=itsfoss.com -[6]: https://itsfoss.com/install-latest-vim-ubuntu/ -[7]: https://itsfoss.com/content/images/2023/01/software-center-neovim-snap.png -[8]: https://github.com/neovim/neovim/releases/tag/stable?ref=itsfoss.com -[9]: https://github.com/neovim/neovim/wiki/Installing-Neovim?ref=itsfoss.com#install-from-source -[10]: https://itsfoss.com/content/images/2023/01/neovim-default-screen.png -[11]: https://itsfoss.com/content/images/2023/01/neovim-fstab.png \ No newline at end of file diff --git a/translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md b/translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md new file mode 100644 index 0000000000..6384e02e01 --- /dev/null +++ b/translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md @@ -0,0 +1,150 @@ +[#]: subject: "How to Install and Use Neovim on Ubuntu and other Linux Distributions" +[#]: via: "https://itsfoss.com/install-neovim/" +[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +如何在 Ubuntu 和其他 Linux 发行版上安装和使用 Neovim +====== + +![][1] + +你一定已经听说过著名的 Vim 文本编辑器。然而,这篇文章是关于它的分支 Neovim。 + +Vim 也是 vi 的一个分叉,这使得 Neovim 成为分叉的分叉。所以,你最终可以使用任何东西,因为它有一些独特的特征。 + +如果你决定使用 Neovim,让我帮助你在 Ubuntu 和其他 Linux 发行版上开始使用它。 + +### Neovim:概述 + +![][2] + +[Neovim][3] 是一个以其简单的维护和社区贡献而闻名的项目。此外,开发工作在多个开发人员之间很好地分配。 + +对于最终用户而言,Neovim 的可扩展性远超人们的预期。Neovim 的目标是在不损害 Vim 传统功能的情况下提供更好的应用。 + +使用 [Neovim 的 GUI][4],你可以获得增强的编辑体验。 + +### Neovim 的特点 + +虽然你可以在其官方网站及其 [GitHub 页面][5]上探索所有相关信息。让我强调一些特点: + +- 现代图形界面 +- 从多种语言访问 API,包括(C/C++、C#、Go、Haskell、Java/Kotlin、JavaScript/Node.js、Lua、Perl、Python、Ruby、Rust 等等) +- 嵌入式、可编写脚本的终端仿真器 +- 异步作业控制 +- 多个实例之间的共享数据 +- XDG 基本目录支持 +- 与大多数 Vim 插件兼容,包括 Ruby 和 Python 插件 + +💡 + +我们建议你在开始使用 Vim 和 Neovim 之前了解其用法。 + +### 在 Ubuntu 和 Linux 上安装 Neovim + +由于 Neovim 的流行,安装它很简单。因为 Neovim 在你选择的任何发行版的官方仓库中都可用。 + +如果你需要,我们还有一个[在 Linux 上安装 Vim][6] 的指南。 + +要在 Ubuntu 上安装 Neovim,只需单击 Dock 中的 Ubuntu 软件图标。然后,搜索 Neovim。你可以根据自己的喜好选择 snap 或 deb 版本。但是,deb 包版本将是 Neovim 的过时版本。 + +![neovim listed on ubuntu software center][7] + +而且,如果你不想要 snap 版本,你可以从 [Neovim 的 Github 发布页][8]获取最新的 deb 文件。如果你仔细查看发布页面,还有一个 Appimage 文件。 + +如果你想使用终端而不是 GUI,你可以执行以下操作: + +对于基于 **Ubuntu 和 Debian** 的发行版,输入以下命令进行安装: + +``` +sudo apt install neovim +``` + +对于 **Manjaro 和 Arch Linux**,使用以下命令更新你的系统并安装 Neovim: + +``` +sudo pacman -Syu neovim +``` + +对于 **Fedora**,使用以下命令: + +``` +sudo dnf install -y neovim +``` + +要安装 **Flatpak**,你可以使用此命令: + +``` +flatpak install flathub io.neovim.nvim +``` + +最后,要安装 **snap 包**,请使用以下命令: + +``` +sudo snap install nvim --classic +``` + +如果你更喜欢从源代码构建软件,请遵循[项目 Github 页面上给出的步骤][9]。 + +### 如何使用 Neovim + +要在安装完成后使用 Neovim,只需从应用菜单启动它,方法是按超级键并输入不带引号的 “neovim”。这将打开一个带有 Neovim 的终端窗口。 + +![][10] + +或者你可以打开你选择的任何终端仿真器并输入以下命令: + +``` +nvim +``` + +是的,不是 “neovim”,而是 “**nvim**”。例如,要编辑 _/etc/fstab_,请输入以下命令。 + +``` +sudo nvim /etc/fstab +``` + +现在 fstab 文件将打开,如下面的截图所示。 + +![][11] + +如果你无法退出编辑器,请不要担心,按下 **Shift+Z+Z**。例如,如果此快捷键令人困惑,请使用你需要的键在任何文本编辑器中输入不带引号的“ZZ”(大写)。 + +关于这一点,我应该重申,你需要学习 Vim 或 Neovim 并阅读文档才能有效地利用其所有功能。 + +### 总结 + +安装和启动 Neovim 非常简单,但学习它肯定需要一些键盘操作。 + +这只是编辑器的概述。我不是这方面的专家,但我希望这对所有初学者都有好处! + +💬 _你使用 Neovim 吗? 在下面的评论中分享你的经验。_ + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/install-neovim/ + +作者:[Anuj Sharma][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/anuj/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://itsfoss.com/content/images/2023/03/goneovim.png +[3]: https://neovim.io/?ref=itsfoss.com +[4]: https://itsfoss.com/neovim-gui-editors/ +[5]: https://github.com/neovim/neovim?ref=itsfoss.com +[6]: https://itsfoss.com/install-latest-vim-ubuntu/ +[7]: https://itsfoss.com/content/images/2023/01/software-center-neovim-snap.png +[8]: https://github.com/neovim/neovim/releases/tag/stable?ref=itsfoss.com +[9]: https://github.com/neovim/neovim/wiki/Installing-Neovim?ref=itsfoss.com#install-from-source +[10]: https://itsfoss.com/content/images/2023/01/neovim-default-screen.png +[11]: https://itsfoss.com/content/images/2023/01/neovim-fstab.png \ No newline at end of file From f2a84590929839476b51aa3d674c23ed74c9189d Mon Sep 17 00:00:00 2001 From: geekpi Date: Thu, 30 Mar 2023 08:53:51 +0800 Subject: [PATCH 15/83] translating --- ... How to Install Kubernetes (K8s) Metrics Server Step by Step.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md b/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md index 6495a01770..d444306801 100644 --- a/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md +++ b/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md @@ -2,7 +2,7 @@ [#]: via: "https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/" [#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 100752d1170341998f930de8b3576ec9a5a61cc4 Mon Sep 17 00:00:00 2001 From: "Xiaobin.Liu" Date: Thu, 30 Mar 2023 21:36:22 +0800 Subject: [PATCH 16/83] TSL --- ...aims to be a Cheaper Alternative to ChatGPT.md | 83 ------------------- ...aims to be a Cheaper Alternative to ChatGPT.md | 83 +++++++++++++++++++ 2 files changed, 83 insertions(+), 83 deletions(-) delete mode 100644 sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md create mode 100644 translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md diff --git a/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md b/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md deleted file mode 100644 index 9d2ff9ebd8..0000000000 --- a/sources/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md +++ /dev/null @@ -1,83 +0,0 @@ -[#]: subject: "Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT" -[#]: via: "https://news.itsfoss.com/open-source-model-dolly/" -[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/" -[#]: collector: "lkxed" -[#]: translator: "lxbwolf" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT -====== - -An affordable alternative to ChatGPT? And, open-source? Looks like we're joining the open-source race against ChatGPT. - -![open source model dolly][1] - -![][2] - -Databricks is a software company that has established itself in a variety of sectors, with data warehousing, and AI-based solutions being their primary focus. - -In recent times, we have seen the meteoric rise of ChatGPT, resulting in similar efforts from the likes of Meta, Google, and even Mozilla. - -And now, Databricks is trying in their own way by open-sourcing its [large language model][3] (LLM) 'Dolly'. - -Let's take a look at it. - -**What is happening?:** In a recent announcement, Databricks introduced what they term as **'a cheap-to-build'** LLM that functions by using an existing open-source parameter [model][4] by [EleutherAI][5]. - -The model has been slightly tweaked to give Dolly instruction following capabilities such as brainstorming and text generation. - -When you compare the **175 billion parameters** in GPT-3, Dolly's **6 billion parameters** might seem puny in comparison. - -But, the folks over at Databricks were surprised when they saw that even with this much data, Dolly was **able to****exhibit many of the same capabilities as ChatGPT**. - -Below is one of the examples they showcased: - -![a screenshot of how dolly performs in an open question and answer scenario][6] - -The original model used data from [Alpaca][7], the model built by Stanford using the [LLaMA][8] LLM by Meta as a base. - -But, as you can see, the original model produced a very haphazard result, whereas Dolly, with its different model and tweaks, was able to produce a far usable answer. - -> 📝 Fun Fact: The name was taken from the first cloned mammal, Dolly the sheep. - -**Why now?:** According to Databricks, they think that **many companies would prefer to build their own model** rather than sending data to some centralized provider who has locked their model behind an API. - -Many companies might not be comfortable handing over their most sensitive data to a third party, and then there are the various tradeoffs in terms of model quality, cost, and desired behavior. - -**Do you want to check it out?** - -Sure, but there's a catch. - -You will have to **use their platform to use Dolly**, they have open-sourced a [Databricks notebook][9] that will help you build it on Databricks. - -Moreover, if you want to get access to the trained weights, you will have to contact them. I am uncertain whether they will provide access to it for free, though. - -In a nutshell, this move to open-source their model should be good for companies to help safeguard their data, save on operating costs, and more by enabling them to create their own model. - -You can check out the[announcement blog][10] to learn more about the technical details and other plans for it. - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/open-source-model-dolly/ - -作者:[Sourav Rudra][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/sourav/ -[b]: https://github.com/lkxed/ -[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/opensource-ai-model-dolly.png -[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[3]: https://en.wikipedia.org/wiki/Large_language_model?ref=its-foss-news -[4]: https://huggingface.co/EleutherAI/gpt-j-6B?ref=its-foss-news -[5]: https://www.eleuther.ai/?ref=its-foss-news -[6]: https://news.itsfoss.com/content/images/2023/03/Dolly_AI.jpg -[7]: https://crfm.stanford.edu/2023/03/13/alpaca.html?ref=its-foss-news -[8]: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/?ref=its-foss-news -[9]: https://github.com/databrickslabs/dolly?ref=its-foss-news -[10]: https://www.databricks.com/blog/2023/03/24/hello-dolly-democratizing-magic-chatgpt-open-models.html?ref=its-foss-news diff --git a/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md b/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md new file mode 100644 index 0000000000..4cb85acadc --- /dev/null +++ b/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md @@ -0,0 +1,83 @@ +[#]: subject: "Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT" +[#]: via: "https://news.itsfoss.com/open-source-model-dolly/" +[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/" +[#]: collector: "lkxed" +[#]: translator: "lxbwolf" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +号称可以成为 ChatGPT 平替的开源模型 ”Dolly“ +====== + +你需要一款 ChatGPT 的平替?还得是开源的?看起来我们已经被卷入了与 ChatGPT 的开源大战。 + +![open source model dolly][1] + +![][2] + +Databricks 这家软件公司,在各个领域都有所建树,尤其是在数据仓库和基于人工智能的解决方案方面。 + +最近,随着 ChatGPT 横空出世,Meta、Google 甚至 Mozilla 也可以效仿 ChatGPT。 + +而现在,Databricks 开源了其 [大型语言模型large language model][3](LLM)"Dolly",也正在以自己的方式进行尝试。 + +我们一起来看看它。 + +**发生了什么?:**在最近的公告中,Databricks 介绍了他们号称 **”廉价构建“** 的 LLM,使用 [EleutherAI][5] 的已经开源参数[模型][4] 提供功能。 + +他们在该模型基础上稍作调整,赋予了 Dolly 指令跟随能力,如头脑风暴和文本生成。 + +当你拿它与 GPT-3 中的 **1750亿个参数** 比较时,Dolly 的 **60亿个参数** 就可能显得微不足道了。 + +但是,当 Databricks 的人看到即使数据量与 GPT-3 相差这么多,Dolly 也能 **展示很多与 ChatGPT 相同的能力** 时,他们感到非常震惊。 + +下面是他们展示的其中一个例子: + +![a screenshot of how dolly performs in an open question and answer scenario][6] + +原始模型使用了 [Alpaca][7] 的数据,该模型由斯坦福大学以 Meta 的 [LaMA][8] LLM 为基础建立。 + +但是,正如你所看到的,原始模型产生了一个非常杂乱无章的结果,而 Dolly,通过不同的模型和调整,能够产生一个更为可用的答案。 + +> 📝 有趣的事实:Dolly 名字取自世界上第一只克隆羊。 + +**为什么是现在?**根据 Databricks 的说法,他们认为 **许多公司更愿意建立自己的模型,**而不是将数据发送给某个紧紧掌握模型只对外提供 API 的集中式供应商。 + +许多公司可能不愿意将他们最敏感的数据交给第三方,然后在模型质量、成本和所需行为方面进行各种权衡。 + +**你想看看吗?** + +当然,但有一个问题。 + +你必须 **使用他们的平台来使用 Dolly**,他们已经开源了一个 [Databricks 笔记本][9],可以帮助你在 Databricks 上构建它。 + +此外,如果你想获得训练好的权重,你必须联系他们。不过我不确定他们是否会免费提供使用权。 + +总而言之,这种开源其模型的举动应该对其他公司有好处,可以保护他们的数据、节省运营成本,其他公司也能使用它创建自己的模型。 + +你可以查看 [公告博客][10],以了解更多技术细节和其他计划。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/open-source-model-dolly/ + +作者:[Sourav Rudra][a] +选题:[lkxed][b] +译者:[lxbwolf](https://github.com/lxbwolf) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/sourav/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/opensource-ai-model-dolly.png +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://en.wikipedia.org/wiki/Large_language_model?ref=its-foss-news +[4]: https://huggingface.co/EleutherAI/gpt-j-6B?ref=its-foss-news +[5]: https://www.eleuther.ai/?ref=its-foss-news +[6]: https://news.itsfoss.com/content/images/2023/03/Dolly_AI.jpg +[7]: https://crfm.stanford.edu/2023/03/13/alpaca.html?ref=its-foss-news +[8]: https://ai.facebook.com/blog/large-language-model-llama-meta-ai/?ref=its-foss-news +[9]: https://github.com/databrickslabs/dolly?ref=its-foss-news +[10]: https://www.databricks.com/blog/2023/03/24/hello-dolly-democratizing-magic-chatgpt-open-models.html?ref=its-foss-news From 26f5d547baa8023f7a59c6133c496fd59b7daa8f Mon Sep 17 00:00:00 2001 From: "Xiaobin.Liu" Date: Thu, 30 Mar 2023 21:40:27 +0800 Subject: [PATCH 17/83] TSL --- ...Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md b/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md index 4cb85acadc..312f241013 100644 --- a/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md +++ b/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md @@ -24,7 +24,7 @@ Databricks 这家软件公司,在各个领域都有所建树,尤其是在数 我们一起来看看它。 -**发生了什么?:**在最近的公告中,Databricks 介绍了他们号称 **”廉价构建“** 的 LLM,使用 [EleutherAI][5] 的已经开源参数[模型][4] 提供功能。 +**发生了什么?:** 在最近的公告中,Databricks 介绍了他们号称 **”廉价构建“** 的 LLM,使用 [EleutherAI][5] 的已经开源参数[模型][4] 提供功能。 他们在该模型基础上稍作调整,赋予了 Dolly 指令跟随能力,如头脑风暴和文本生成。 @@ -42,7 +42,7 @@ Databricks 这家软件公司,在各个领域都有所建树,尤其是在数 > 📝 有趣的事实:Dolly 名字取自世界上第一只克隆羊。 -**为什么是现在?**根据 Databricks 的说法,他们认为 **许多公司更愿意建立自己的模型,**而不是将数据发送给某个紧紧掌握模型只对外提供 API 的集中式供应商。 +**为什么是现在?** 根据 Databricks 的说法,他们认为 **许多公司更愿意建立自己的模型,**而不是将数据发送给某个紧紧掌握模型只对外提供 API 的集中式供应商。 许多公司可能不愿意将他们最敏感的数据交给第三方,然后在模型质量、成本和所需行为方面进行各种权衡。 From f23960d25be568d4e8754e1efb079a236d4477f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Thu, 30 Mar 2023 23:34:33 +0800 Subject: [PATCH 18/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230329.2=20=E2=AD=90=EF=B8=8F=20Linux=20Terminal=20Bas?= =?UTF-8?q?ics=207=20Copy=20Files=20and=20Directories=20in=20Linux.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...asics 7 Copy Files and Directories in Linux.md | 221 ++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 sources/tech/20230329.2 ⭐️ Linux Terminal Basics 7 Copy Files and Directories in Linux.md diff --git a/sources/tech/20230329.2 ⭐️ Linux Terminal Basics 7 Copy Files and Directories in Linux.md b/sources/tech/20230329.2 ⭐️ Linux Terminal Basics 7 Copy Files and Directories in Linux.md new file mode 100644 index 0000000000..dce3427cf5 --- /dev/null +++ b/sources/tech/20230329.2 ⭐️ Linux Terminal Basics 7 Copy Files and Directories in Linux.md @@ -0,0 +1,221 @@ +[#]: subject: "Linux Terminal Basics #7: Copy Files and Directories in Linux" +[#]: via: "https://itsfoss.com/copy-files-directory-linux/" +[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Linux Terminal Basics #7: Copy Files and Directories in Linux +====== + +![][1] + +Copying files is one of the most basic yet crucial tasks you will be doing regularly. + +Linux has a dedicated cp command for copying both files and directories (folders). + +In this part of the Terminal Basics series, you'll learn to copy files and folders in the terminal. + +> 📋 Just to recall, here's what you have learned so far in this Terminal Basics series: +> - [Change directories][2] +> - [Make new directories][3] +> - [List directory contents][4] +> - [Create files][5] +> - [Reading files][6] +> - [Removing files and directories][7] + +Let's go on with the seventh chapter in the series. + +### Copying files in Linux command line + +Let me show you a few examples of copying files. + +#### Copy a file to another directory + +To copy one file to another directory, all you have to do is follow the given command syntax: + +``` +cp Source_file Destination_directory +``` + +For example, here, I have copied a file named `Hello.txt` to the directory named `Tux`: + +![copy file to another directory in linux command line][8] + +And as you can see, the file has successfully been copied to the Tux directory. + +#### Copy the file but rename it + +You can choose to rename the file while copying it. Just give a different name to the 'target file'. + +``` +cp Source_file Renamed_file +``` + +For reference, here, I have copied a file named `Hello.txt` to the same directory by renaming it to `Renamed_Hello.txt`: + +![rename a file while copying in a same directory in linux terminal][9] + +Why would you do that? Say, you have to edit a config file. A good practice is to make a backup of the config file in the same location before editing it. This way, you can revert to the old configuration if things don't go as planned. + +#### Copy multiple files to another location + +To copy multiple files to another directory, execute the command in the following fashion: + +``` +cp File1 File2 File3 FileN Target_directory +``` + +Here, I copy multiple files to a new location. + +![copy multiple files using the cp command in linux][10] + +> 📋 When you are copying multiple files, renaming them would not be possible with just the cp command. + +#### Deal with duplicate files while copying + +By default, the cp command will override the file if a file with the same name exists in the target directory. + +To avoid overriding, you can use the `-n` option with the cp command, and it won't override the existing files: + +``` +cp -n Source_File Destination_directory +``` + +For example, here, I have tried to copy two files that were already there in my targeted directory and used `-v` option to showcase what is being done by the command: + +``` +cp -n -v itsFOSS.txt LHB.txt LU.txt ~/Tux +``` + +![how not to override files while copying in linux using the cp command][11] + +#### Interactively copy files + +But what about when you want to override some files, whereas some should be kept intact? + +Well, you can use the cp command in the interactive mode using the `-i` option, and it will ask you each time whether the file should be overridden or not: + +``` +cp -i Source_file Destination_directory +``` + +![how to use cp command in interactive mode][12] + +> 🖥️ Practice all the above-discussed examples yourself. You already know about creating files and folders so recreate everything. + +### Copy directories in Linux command line + +There is mkdir command to make new directories, rmdir to remove (empty) directories. But there is no cpdir command for copying directories. + +You'll have to use the same cp command but with the recursive option `-r` to copy a directory with all its content to another location: + +``` +cp -r Source_dir Target_dir +``` + +For example, here, I have copied a directory named `IF` to `LHB`: + +![how to copy a directory in linux command line][13] + +But it copied the entire directory 🤨 + +So, what do you do when you only want to copy the directory's contents, not the directory itself? + +Here's what you can do: + +#### Copy only the contents of a directory (not the directory) + +To copy only the contents of the directory, not the directory itself, you append `/.` at the end of the source directory's name: + +``` +cp -r Source_directory/. Destination_directory +``` + +Here, I want to copy the contents of a directory named `IF` which contains the following three files: + +![check the file contents of directory using the tree command][14] + +And I will execute the following command to copy the file contents of the `IF` directory to `LHB`: + +``` +cp -r IF/. LHB +``` + +![copy the file contents of directory not a directory itself in linux command line][15] + +You can also use Source_directory/* here. + +#### Copy multiple directories + +To copy multiple directories, you will have to execute the command in the following way: + +``` +cp -r Dir1 Dir2 Dir3 DirN Destiniation_directory +``` + +For example, here, I have copied two directories named `IF` and `LU` to the `LHB`: + +``` +cp -r IF LU ~/LHB +``` + +![copy multiple directories using the cp command in linux command line][16] + +You can do the same when you want to copy files from multiple directories but not the directory itself: + +``` +cp -r Dir1/. Dir2/. Dir3/. DirN/. Destination_directory +``` + +![copy files from multiple directories but not directories their self using the cp command][17] + +> 🖥️ You can also rename the directories the same way you renamed files.  + +### Test your knowledge + +Now, let's see how much you remember the lessons learned so far. + +- Create a directory called copy_practice +- Copy the file /etc/services to this newly created folder +- Create a folder named secrets under this directory and copy files /etc/passwd and /etc/services in it +- Copy the services file in copy_practice to the secrets folder but don't overwrite it +- Copy the secrets folder to your home directory +- Delete the secrets and copy_practice directories + +That would give you some practice. + +It's going well so far. You have learned quite a few things. In the next chapter, you'll see about moving files and folders with mv command. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/copy-files-directory-linux/ + +作者:[Sagar Sharma][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/sagar/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://itsfoss.com/change-directories/ +[3]: https://itsfoss.com/make-directories/ +[4]: https://itsfoss.com/list-directory-content/ +[5]: https://itsfoss.com/create-files/ +[6]: https://itsfoss.com/view-file-contents/ +[7]: https://itsfoss.com/delete-files-folders-linux/ +[8]: https://itsfoss.com/content/images/2023/02/copy-file-to-another-directory-in-linux-command-line.png +[9]: https://itsfoss.com/content/images/2023/02/rename-a-file-while-copying-in-a-same-directory-in-linux-terminal.png +[10]: https://itsfoss.com/content/images/2023/02/copy-multiple-files-using-the-cp-command-in-linux.png +[11]: https://itsfoss.com/content/images/2023/02/how-not-to-override-files-while-copying-in-linux-using-the-cp-command.png +[12]: https://itsfoss.com/content/images/2023/02/how-to-use-cp-command-in-interactive-mode.png +[13]: https://itsfoss.com/content/images/2023/02/how-to-copy-a-directory-in-linux-command-line.png +[14]: https://itsfoss.com/content/images/2023/02/check-the-file-contents-of-directory-using-the-tree-command.png +[15]: https://itsfoss.com/content/images/2023/02/copy-the-file-contents-of-directory-not-a-directory-itself-in-linux-command-line.png +[16]: https://itsfoss.com/content/images/2023/02/copy-multiple-directories-using-the-cp-command-in-linux-command-line.png +[17]: https://itsfoss.com/content/images/2023/02/copy-files-from-multiple-directories-but-not-directories-their-self-using-the-cp-command.png From 53efe55a23da55cbbf9cda9fbe0d68305309cd85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Thu, 30 Mar 2023 23:35:43 +0800 Subject: [PATCH 19/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230330.0=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Edub?= =?UTF-8?q?untu=2023.04=20Best=20New=20Features.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0 ⭐️⭐️ Edubuntu 23.04 Best New Features.md | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 sources/tech/20230330.0 ⭐️⭐️ Edubuntu 23.04 Best New Features.md diff --git a/sources/tech/20230330.0 ⭐️⭐️ Edubuntu 23.04 Best New Features.md b/sources/tech/20230330.0 ⭐️⭐️ Edubuntu 23.04 Best New Features.md new file mode 100644 index 0000000000..071827a042 --- /dev/null +++ b/sources/tech/20230330.0 ⭐️⭐️ Edubuntu 23.04 Best New Features.md @@ -0,0 +1,156 @@ +[#]: subject: "Edubuntu 23.04: Best New Features" +[#]: via: "https://www.debugpoint.com/edubuntu-23-04/" +[#]: author: "Arindam https://www.debugpoint.com/author/admin1/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Edubuntu 23.04: Best New Features +====== + +**Edubuntu 23.04 revives after eight years for thousands of educators and students. Here are the best new features.** + +Edubuntu is a popular open-source educational operating system based on Ubuntu Linux. It targets students and teachers primarily and aims to be the “classroom Linux distro” with a solid Ubuntu base. The new release, Edubuntu 23.04, comes with exciting new features and updates that make it even more valuable for educators and students. This article will explore the best new features of Edubuntu 23.04. + +Before that, a little background of this Ubuntu flavour. + +Edubuntu was an official Ubuntu flavour until the Ubuntu 14.04 “release “Trust Tahr” release. The last release of Edubuntu was on April 2014, i.e. Edubuntu 14.04. Since then, it has been discontinued. + +A few days back, Erich Eickmeyer, who is the Ubuntu Studio project leader, [announced][1] that Edubuntu is officially returning with the 23.04 with a revival plan. + +And finally, the daily build images are available to try out before the final release. + +![Edubuntu 23.04 Desktop][2] + +### Edubuntu 23.04: Best New Features + +#### User interface changes with modern GNOME + +The last release of Edubuntu had Unity desktop by default. Because Ubuntu was focussing on the Unity desktop in 2014. And later, on October 2017, it was replaced by the GNOME desktop, which continues till today. + +Edubuntu 23.04 features the default GNOME 44 desktop environment. GNOME 44 brings a lot of under-the-hood improvements and updates. That includes a few long pending changes. For the first time in a decade, you get the thumbnail view in the file picker in GNOME. In addition, Files get image copy to file creation feature and more. You can learn about these in this GNOME 44 feature guide. + +So, if you have been coming back to use Edubuntu since 2014, then these are a lot to take in. And the modern GNOME 44 is entirely different from the Unity desktop back in 2014. + +That being said, the new interface is designed to provide a better user experience, making navigating the system more accessible for students and teachers. + +#### Look and feel with the new logo + +The default GNOME desktop is not much tweaked to minimise the revival effort. So, a new Edubuntu logo debuts following the new Ubuntu logo “circle-of-friends” unveiled last year. The logo itself is a design feat with one person raising a hand showing the education theme. + +![Edubuntu logo][3] + +Edubuntu’s flagship red colour theme is complimented by the Yaru-Red theme. It is consistent across the desktop, including selections, GTK widgets and Plymouth. + +![Edubuntu 23.04 with Yaru Red theme][4] + +#### Accessibility and settings update + +GNOME desktop, by default, is much more improved on the Accessibility front with many settings. In GNOME 44, the entire accessibility settings page is revamped. It is now based on a friendly name instead of a generic list of controls. Edubuntu 23.04 definitely going to provide a good experience with GNOME 44 for students having special needs. + +Furthermore, the output and input section on the sound page in settings is shuffled for better clarity. + +![Revamped Accessibility in Edubuntu 23.04][5] + +#### Education specific applications + +The most critical aspect of this distro is the applications specific to education. The default set of applications in Edubuntu 23.04 is well packaged, considering all types of students and their grade levels. + +For generic office work, LibreOffice 7.5 is included. Browsing the web is easier with secure Firefox (snap). + +Students who need art-related applications can take advantage of the below set of default apps: + +- **GIMP** raster drawing program +- **Drawing** – simple image editor (similar to MS Paint) +- **Tux Paint** – drawing program for beginners +- **LibreCAD** – Free and open-source computer-aided design app +- **Inkscape** – Vector drawing program + +A well set of language and learning tools to help all students across grades. Here’s a list: + +- **Endeavor** – GTK-based to-do manager +- **Gobby** – an excellent tool for collaborative document editing over a network +- **Ulcc** – teach children through pictures. +- **Khangman and KWordquiz** – to learn and teach new words +- **PDFMod** – PDF editor +- **Calibre** – e-book management + +Furthermore, a few important apps which are specialised and are perfect for specific subjects learning are also included. + +- **Gramps** – genealogical research application +- **KGeography** – to learn world map +- **Fritzing** – electronic circuit designer and simulator + +![Fritzing - circuit design app][6] + +A huge collection of science and math applications are already installed by default. + +- **Atomix** – Puzzle game about atoms and molecules +- **Chemtool** – design chemical diagrams +- **Kalzium** – Learn periodic table +- **Light speed** – An OpenGL-based program developed to illustrate the effects of special relativity on the appearance of moving objects +- **Rocs** – Graph theory simulator +- **Stellarium** – free and open-source planetarium software +- **Step** – Interactive physics simulator +- **Dia** – diagramming application +- **Kalgebra** – learn algebra interactively + +In addition, GNOME Extensions manager is pre-installed in Edubuntu for easy installation for extensions, taking the effort away from educators. + +#### Application controls for students + +Since many applications and packages are installed, it’s necessary to have control in place to restrict certain apps for specific users. Edubuntu has a built-in menu editor. Using this utility, you can hide certain apps from the menu that are non-admin users. + +![Edubuntu menu administration][7] + +#### Hardware support and core changes + +At the core, Edubuntu 23.04 is powered by the latest Linux Kernel 6.2. This brings all modern hardware, CPU, CPU, ports and file system support. + +Python 3.11 is included as part of the Ubuntu base to help students to learn this popular programming language. + +#### Performance and related attributes + +Since many applications are packages installed by default, the default ISO size is slightly larger. The current ISO size is almost ~6 GB, which is massive. So, deploying this distro requires a larger download and USB stick. + +The performance is identical to the base Ubuntu with GNOME. However, as per the number of educational apps you launch, the resource requirement would increase significantly. Also, you need to remember the CPU speed while installing Edubuntu because of math and science apps. + +I believe that any modern laptop or desktop lineup (not more than five years old) should work just fine with Edubuntu 23.04. + +On the installation side, it uses the old Ubiquity installer from Ubuntu (not the new one), so I believe it would be stable and easy to use. + +### Download + +You can download to try Edubuntu 23.04 daily build using the below link. You may try it out in a virtual machine or physical system. Remember that it has some bugs, and some apps show unexpected behaviour. + +[Download Edubuntu 23.04 (testing)][8] + +### Closing Notes + +Edubuntu 23.04 is an excellent distro for educational purposes, and the new features and improvements in this release make it even more valuable for students and teachers. From improved user interface to better language support, Edubuntu 23.04 has something for everyone. Its enhanced collaboration tools, multimedia support, and science/math apps are perfect for classrooms. + +We are glad that it’s back! + +-------------------------------------------------------------------------------- + +via: https://www.debugpoint.com/edubuntu-23-04/ + +作者:[Arindam][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.debugpoint.com/author/admin1/ +[b]: https://github.com/lkxed/ +[1]: https://discourse.ubuntu.com/t/announcing-edubuntu-revival/32929 +[2]: https://www.debugpoint.com/wp-content/uploads/2023/03/Edubuntu-23.04-Desktop.jpg +[3]: https://www.debugpoint.com/wp-content/uploads/2023/03/Edubuntu-logo.jpg +[4]: https://www.debugpoint.com/wp-content/uploads/2023/03/Edubuntu-23.04-with-Yaru-Red-theme.jpg +[5]: https://www.debugpoint.com/wp-content/uploads/2023/03/Revamped-Accessibility-in-Edubuntu-23.04.jpg +[6]: https://www.debugpoint.com/wp-content/uploads/2023/03/Fritzing-circuit-design-app.jpg +[7]: https://www.debugpoint.com/wp-content/uploads/2023/03/Edubuntu-menu-administration.jpg +[8]: https://cdimage.ubuntu.com/edubuntu/daily-live/current/ \ No newline at end of file From fedab46957c264553d69f244d1b46a721c20a76e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Thu, 30 Mar 2023 23:37:28 +0800 Subject: [PATCH 20/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230330.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=203=20?= =?UTF-8?q?reasons=20my=20Linux=20team=20uses=20Penpot.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...️⭐️ 3 reasons my Linux team uses Penpot.md | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 sources/tech/20230330.1 ⭐️⭐️ 3 reasons my Linux team uses Penpot.md diff --git a/sources/tech/20230330.1 ⭐️⭐️ 3 reasons my Linux team uses Penpot.md b/sources/tech/20230330.1 ⭐️⭐️ 3 reasons my Linux team uses Penpot.md new file mode 100644 index 0000000000..319447005d --- /dev/null +++ b/sources/tech/20230330.1 ⭐️⭐️ 3 reasons my Linux team uses Penpot.md @@ -0,0 +1,104 @@ +[#]: subject: "3 reasons my Linux team uses Penpot" +[#]: via: "https://opensource.com/article/23/3/linux-penpot" +[#]: author: "Emma Kidney https://opensource.com/users/ekidney" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +3 reasons my Linux team uses Penpot +====== + +Working with Fedora exposes you to a lot of different open source software. A major Fedora website revamp started over a year ago, with the goal of improving design aesthetics, creating a style guide, planning the website strategy, and choosing the tech stack for delivering the Fedora Linux offerings website. From a design perspective, the team needed a tool to create mock-ups, a place to hold the asset libraries, and something suitable to hand off to developers once complete. + +### Choosing Penpot + +Figma is a popular interface designing tool recommended by many, but it wasn't deemed suitable because the company had recently imposed restrictions on their free plan. This concern arose before Adobe acquired Figma, so the decision not to use it was even more significant in retrospect! + +The team looked into Penpot and found that it matched everyone's requirements. Penpot is the first open source design and prototyping platform for cross-domain teams. A team within Kaleidos creates Penpot. Kaleidos is a technology company started in 2011 that fully focuses on open source projects. + +There are three ways the Fedora Websites and Apps team uses Penpot: + +- Wireframes and mock-ups +- UX testing and feedback +- Collabloration + +I expand on these uses below. While the example discusses the Fedora Project, Penpot offers benefits to any open source community. + +### 1. Wireframes and mock-ups + +Drafting webpage designs is the primary way our team uses Penpot. Drafting enables quick collaboration and lessens communication issues between contributors. Developers and designers can collaborate freely and in the same space. + +Community feedback is important. It can be a bit difficult to share mock-ups properly. Penpot is web-based and easily accessible on any platform. When entering **View Mode** on a prototype, the tool generates a shareable link. You can also modify the permissions or destroy the link if you no longer want it shared. + +![Creating a shareable link and editing permissions on Penpot.][1] + +### 2. UX testing and feedback + +This revamp works closely with the Fedora community. By running usability testing sessions on prototypes and sharing design progress, we use Penpot to keep the community involved every step of the way. + +### 3. Collaboration + +During the revamp, our development and design teams used Penpot to generate ideas, organize meetings, and test new concepts visually. + +Our teams used Penpot as a whiteboard in early planning sessions and enabled the developers to contribute ideas asynchronously while engaging in the discussion. This method reduced stress, made sure everyone's ideas could be heard, helped us see patterns, and mediated disagreements for a good compromise. Penpot helped create a sense of understanding between everyone. + +The team used Penpot as a source of assets. Uses can store elements and other content in an asset library so that one can use them repeatedly. Penpot stores components, graphics, typographies, color palettes, and more. + +![An example of an asset library within Penpot.][2] + +Sharing these libraries enables the whole team to access them. This can be helpful when working with a team that regularly accesses the same source files. If a new member joins, all assets they need to start building mock-ups for the project would be readily available. Users can export these assets directly from the Penpot file. + +![Exporting selected assets in a Penpot file.][3] + +Developers can view the prototype in full on any browser. This capability makes building the website easier as you can code side by side with the prototype. If a designer is working on the file at the same time, changes they make can be seen by refreshing in **View Mode** or in real-time if in the actual file. + +![An editor with code and the Penpot interface.][4] + +### Open source values + +Penpot aligns with the Fedora Project's "Four Foundations" of Freedom, Friends, Features, and First. As you review these values, consider how the tool might align with your own open source initiative. + +#### Freedom + +We choose open source and free alternatives to proprietary code and content and limit the effects of proprietary code on and within the Project. Penpot is the first open source design and prototyping platform. Penpot is web-based, independent of operating systems, and works with open web standards. This ensures compatibility with web browsers and external applications like Inkscape. + +#### Friends + +My community consists of people from all walks of life working together to advance free software. Penpot's mission is similar. Its goal is to provide an open source and open standards tool to bring collaboration between designers and developers to the next level. Using Penpot has allowed for a smooth handoff to developers and has allowed us to work productively together. There's no back-and-forth looking for files or assets, as everything they need is in the Penpot file. + +#### Features + +Fedora cares about excellent software. Its feature development is always done openly and transparently, and it encourages participation. Anyone can start working on any issue or as part of any team that interests them. Penpot shares this ethos. Anyone can collaborate! The code and a contributor guide are available on the project's Git repository. + +#### First + +Fedora adopts a strategy of advancing free software through consistent forward momentum. This approach usually follows a "release early, release often" workflow. Penpot also updates frequently. It publishes a Dev Diary blog to the community, highlighting the work that has been done. It states on its website, "We also have this sense of urgency, we need to act fast, there's too much at stake." + +### Wrap up + +The project is coming close to completion, with the first deadline aligning with the release of Fedora Linux 38. Penpot has proven to be a valuable tool and is expanding the resources available to Open Source Design enthusiasts. With the platform celebrating its official launch recently, it's exciting to see what's next. + +Penpot has changed the way the our team works. What can it do for your organization and community? + +This article has been adapted from the talk: _Mock-ups and Motions—How the Fedora Design Team uses Penpot_ by Ashlyn Knox and Emma Kidney, given at the Creative Freedom Summit. A recording of the talk is available to [watch on PeerTube][5]. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/linux-penpot + +作者:[Emma Kidney][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ekidney +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/sites/default/files/2023-03/permissions.webp +[2]: https://opensource.com/sites/default/files/2023-03/asset-library.webp +[3]: https://opensource.com/sites/default/files/2023-03/exporting.webp +[4]: https://opensource.com/sites/default/files/2023-03/coding.webp +[5]: https://peertube.linuxrocks.online/w/5H22PH66kYwiTKcKR1p2kJ \ No newline at end of file From 77082d1aecff7a62ec5ff081317fb2253914e32d Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 31 Mar 2023 08:52:15 +0800 Subject: [PATCH 21/83] translated --- ...e accounting app to run your small business.md | 80 ------------------- ...e accounting app to run your small business.md | 80 +++++++++++++++++++ 2 files changed, 80 insertions(+), 80 deletions(-) delete mode 100644 sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md create mode 100644 translated/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md diff --git a/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md b/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md deleted file mode 100644 index 983819b924..0000000000 --- a/sources/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md +++ /dev/null @@ -1,80 +0,0 @@ -[#]: subject: "Use this open source accounting app to run your small business" -[#]: via: "https://opensource.com/article/23/3/open-source-accounting-run-business" -[#]: author: "Don Watkins https://opensource.com/users/don-watkins" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Use this open source accounting app to run your small business -====== - -[GnuCash][1] is a powerful and flexible accounting tool that can be used for small business invoicing and accounting. It has a number of features that make it particularly well-suited for this purpose, including the ability to track expenses and income, generate reports, and manage invoices. Additionally, GnuCash is free and open source, which makes it accessible to small businesses with limited resources. In this article, I discuss the features of GnuCash that make it easy for you to get started using it in your own small business. - -I began using GnuCash a number of years ago for my personal finances but found it could also function as a useful tool for my small business too. I'd been using a proprietary solution for much of the life of my business. I grew tired of being forced to upgrade periodically to get access to my invoices and statements for my small business. Moving to GnuCash gave me the ability to integrate my small business accounting with my personal finances without sacrificing any features. - -### Install GnuCash on Linux - -You can install GnuCash from your software repository. On Debian, Elementary, and similar: - -``` -$ sudo apt install gnucash -``` - -On Fedora, CentOS, Mageia, and similar: - -``` -$ sudo dnf install gnucash -``` - -### GnuCash for business - -GnuCash comes with an account setup wizard that can help you build a common business account configuration. To access it: - -- Start GnuCash. -- Click on the **File** menu and select **New File**. - -Follow the GnuCash Assistant that appears on screen to create your new business account file. - -The onscreen instructions guides you through the process of setting up your business. Click on **Next** in the top right corner of the **Assistant** window. You're prompted to enter a company name, address, contact information, and a company ID of your own choosing. You must also choose a default tax table and a date format. - -The next screen prompts you to choose the currency, and there are a large number of currencies supported. - -Then you're prompted to choose the accounts you want to create. Select the option to create **Business Accounts**. You can always customize the list of accounts, and GnuCash provides [copious documentation][2] to help you better customize it to your individual needs. - -Complete the assistant, then click **Apply** in the top right-hand corner of the GnuCash **Assistant** window. - -### Adding customers - -The top menu of GnuCash has a menu item labeled **Business**. The first item on that menu is **Customers**, followed by **Customers Overview**. This is where you can view a list of all your customers. - -The next item is **New Customer**. This is where you enter new customers. The dialog box provides a place for customer information, including billing information, shipping address, email address, telephone number, and more. - -### Create an invoice - -After adding a customer, you can begin the process of creating invoices. Click on the **Business** menu, select **Customer**, and then **New Invoice**. - -Payment processing is easy too. This is located in the **Business** menu. Select **Customer**, and then **Process Payment**. - -### You're in business - -The **Business** menu also includes options for entering vendors and employees, should your business require that information. There's a menu item for sales tax and many other options to ensure you're compliant with local expectations. - -With GnuCash, your data isn't stored in a proprietary format, so you can migrate to any other platform in the future if you need to. Open standards for data storage, especially when that data is a legal requirement, are important and allow you to have full possession of your business history. Using GnuCash puts you in control of your small business. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/3/open-source-accounting-run-business - -作者:[Don Watkins][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/don-watkins -[b]: https://github.com/lkxed/ -[1]: https://www.gnucash.org/ -[2]: https://www.gnucash.org/docs/v4/C/gnucash-guide/bus_setup.html \ No newline at end of file diff --git a/translated/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md b/translated/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md new file mode 100644 index 0000000000..d9b61a76aa --- /dev/null +++ b/translated/tech/20230327.2 ⭐️ Use this open source accounting app to run your small business.md @@ -0,0 +1,80 @@ +[#]: subject: "Use this open source accounting app to run your small business" +[#]: via: "https://opensource.com/article/23/3/open-source-accounting-run-business" +[#]: author: "Don Watkins https://opensource.com/users/don-watkins" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +使用这个开源的会计应用来管理你的小企业 +====== + +[GnuCash][1] 是一个强大而灵活的会计工具,可用于小企业的发票和会计。它的许多功能使它特别适合这一目的,包括跟踪支出和收入、生成报告和管理发票的能力。此外,GnuCash 是免费和开源的,这使得资源有限的小企业也可以使用它。在这篇文章中,我会讨论 GnuCash 的特点,使你可以很容易地在自己的小企业中开始使用它。 + +几年前,我开始使用 GnuCash 进行个人财务管理,但发现它也可以作为我的小企业的一个有用工具。在我企业的大部分时间里,我一直在使用一个专有的解决方案。我逐渐厌倦了被迫定期升级以获取我的小企业的发票和报表。转而使用 GnuCash,使我能够在不牺牲任何功能的情况下,将我的小企业会计与我的个人财务相结合。 + +### 在 Linux 上安装 GnuCash + +你可以从你的仓库中安装 GnuCash。在 Debian、Elementary 和类似的软件上: + +``` +$ sudo apt install gnucash +``` + +在 Fedora、CentOS、Mageia 和类似系统上: + +``` +$ sudo dnf install gnucash +``` + +### 企业版 GnuCash + +GnuCash 带有一个账户设置向导,可以帮助你建立一个普通的商业账户配置。要访问它: + +- 启动 GnuCash。 +- 点击**文件**菜单,选择**新文件**。 + +按照屏幕上出现的 GnuCash 助手来创建你的新商业账户文件。 + +屏幕上的说明将指导你完成设置业务的过程。单击“**助手**”窗口右上角的“**下一步**”。系统会提示你输入公司名称、地址、联系信息和你自己选择的公司 ID。你还必须选择默认税表和日期格式。 + +下一个页面提示你选择货币,有大量的货币支持。 + +然后提示你选择你要创建的账户。选择创建**企业账户**的选项。你可以随时定制账户列表,GnuCash 提供了[大量的文档][2],帮助你更好地根据个人需求进行定制。 + +完成助手,然后单击 GnuCash **助手**窗口右上角的**应用**。 + +### 添加客户 + +GnuCash 的顶部菜单有一个标有**业务**的菜单项。该菜单上的第一个项目是**客户**,其次是**客户概览**。在这里你可以查看你所有客户的列表。 + +下一个项目是**新客户**。这是你输入新客户的地方。对话框为客户信息提供了一个位置,包括帐单信息、运输地址、电子邮件地址、电话号码等。 + +### 创建一个发票 + +添加客户后,你可以开始创建发票的过程。点击**业务**菜单,选择**客户**,然后点击**新发票**。 + +付款处理也很简单。这位于**业务**菜单中。选择**客户**,然后**处理付款**。 + +### 你在做生意了 + +如果你的业务需要,**业务**菜单还包括输入供应商和雇员的选项。有一个菜单项用于销售税和许多其他选项,以确保你符合当地的要求。 + +使用 GnuCash,你的数据不是以专有格式存储的,所以如果你需要,你可以在将来迁移到任何其他平台。数据存储的开放标准,特别是当这些数据是法律要求的时候,是很重要的,可以让你完全拥有你的商业历史。使用 GnuCash 使你能控制你的小企业。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/open-source-accounting-run-business + +作者:[Don Watkins][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/don-watkins +[b]: https://github.com/lkxed/ +[1]: https://www.gnucash.org/ +[2]: https://www.gnucash.org/docs/v4/C/gnucash-guide/bus_setup.html \ No newline at end of file From 2448d3e1781e2a2170ec61b889b1be35e0d0036f Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 31 Mar 2023 08:55:25 +0800 Subject: [PATCH 22/83] translating --- .../20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md b/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md index c625ce0a3d..57beb542cc 100644 --- a/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md +++ b/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/23/3/chatbot-mattermost-python" [#]: author: "Dr. Michael J. Garbade https://opensource.com/users/drmjg" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From a831aaeebcfe9ce3e04227f156730e59c5a20d82 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 31 Mar 2023 09:18:48 +0800 Subject: [PATCH 23/83] ATRP @wxy https://linux.cn/article-15677-1.html --- ...Cinnamon Gets Official Ubuntu Flavor Status.md | 77 ++++++++++++++++++ ...Cinnamon Gets Official Ubuntu Flavor Status.md | 78 ------------------- 2 files changed, 77 insertions(+), 78 deletions(-) create mode 100644 published/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md delete mode 100644 sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md diff --git a/published/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md b/published/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md new file mode 100644 index 0000000000..2ccf834c3e --- /dev/null +++ b/published/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md @@ -0,0 +1,77 @@ +[#]: subject: "Ubuntu Cinnamon Gets Official Ubuntu Flavor Status" +[#]: via: "https://news.itsfoss.com/ubuntu-cinnamon-official/" +[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" +[#]: collector: "lkxed" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15677-1.html" + +Ubuntu Cinnamon 正式成为 Ubuntu 官方风味版 +====== + +> 在 Ubuntu 的混合风味中加入肉桂味,完美! + +![][0] + +在等待下个月的 Ubuntu 23.04 吗? + +好吧,我们已经提到,在 Ubuntu 23.04 版本的 [令人兴奋][3] 的事情中,包括一个新的官方的 Cinnamon 风味(它最初是 Ubuntu Cinnamon Remix)。 + +而且,它**现在是官方版本*,因为 Ubuntu 的技术委员会以足够的票数 [批准了它][4]。 + +### Ubuntu Cinnamon 23.04 值得期待的地方 + +![Ubuntu Cinnamon 23.04 的屏幕截图][5] + +如果你之前已经使用过 Ubuntu Cinnamon Remix(非官方),你可能对它有点概念了。 + +如果你想要一个带有 Cinnamon 桌面的 Ubuntu 风味版,而没有众多的特殊定制,Ubuntu Cinnamon 适合你。 + +而另一方面,Linux Mint 也是一个基于 Ubuntu 的 Cinnamon 桌面。然而,你会得到一个 Mint 特有的主题、图标、工具和调整,体验有所不同。 + +基本上,如果你使用 Linux Mint,它不会让你感觉到 “只是另一种 Ubuntu 风味”。 + +别忘了,Linux Mint 默认禁用 Snap,而且是 Flatpak 优先的,这与 Ubuntu Cinnamon 23.04 的情况完全相反。 + +![Ubuntu Cinnamon 菜单截图][6] + +所以,如果你喜欢使用 Snap 而不是 Flatpak,并且喜欢 Ubuntu 通常的风味版的工作方式,Ubuntu Cinnamon 是一个不错的补充。关于这个版本的其他一些值得注意的地方包括: + +- 预装的应用程序,如 [Synaptic Package Manager][7]、LibreOffice 等 +- Ubuntu 的 Yaru 主题 +- 没有像你期望的 Linux Mint 那样的 XApp + +目前,根据其 [最新的日常构建][8],Ubuntu Cinnamon 23.04 几乎已经准备好发布(将于下个月发布)。 + +它是否会赢得 Linux Mint 用户的青睐,那是另外一个故事。但是,**Ubuntu 上的新 Cinnamon 版应该会让更多的用户尝试 Cinnamon 桌面,这是件好事**。 + +Cinnamon 桌面融合了传统 Windows 风格的布局,并提供了更多的功能。 + +你可以在 [Ubuntu Cinnamon 博客][9] 上阅读官方公告。 + +你考虑改用 Ubuntu Cinnamon 作为你的首选口味吗?请在评论中分享你的想法。 + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/ubuntu-cinnamon-official/ + +作者:[Ankush Das][a] +选题:[lkxed][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/ubuntu-cinnamon-official-flavour.png +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://news.itsfoss.com/ubuntu-23-04/ +[4]: https://lists.ubuntu.com/archives/technical-board/2023-March/002725.html?ref=its-foss-news +[5]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-home.jpg +[6]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-menu.jpg +[7]: https://itsfoss.com/synaptic-package-manager/?ref=its-foss-news +[8]: https://cdimage.ubuntu.com/ubuntucinnamon/daily-live/current/?ref=its-foss-news +[9]: https://ubuntucinnamon.org/ubuntu-cinnamon-flavor-status-announcement/?ref=its-foss-news +[0]: https://img.linux.net.cn/data/attachment/album/202303/31/091748pq8tq8nluucc5eth.jpg \ No newline at end of file diff --git a/sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md b/sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md deleted file mode 100644 index 7be3a41a02..0000000000 --- a/sources/news/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md +++ /dev/null @@ -1,78 +0,0 @@ -[#]: subject: "Ubuntu Cinnamon Gets Official Ubuntu Flavor Status" -[#]: via: "https://news.itsfoss.com/ubuntu-cinnamon-official/" -[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Ubuntu Cinnamon Gets Official Ubuntu Flavor Status -====== - -A Cinnamon edition to the mix of Ubuntu flavors. Perfect! - -![ubuntu cinnamon][1] - -![][2] - -Waiting for Ubuntu 23.04 next month? - -Well, we already mentioned that one of the [exciting things about the Ubuntu 23.04 release][3] includes a new official Cinnamon flavor (originally, Ubuntu Cinnamon Remix). - -And, that is **now official**, as the Technical Board of Ubuntu [approved it][4] with enough votes. - -### Ubuntu Cinnamon 23.04: What to Expect? - -![ubuntu cinnamon 23.04 screenshot][5] - -If you already used Ubuntu Cinnamon Remix (unofficial) earlier, you may have an idea of how they approach it. - -Nevertheless, if you wanted an Ubuntu flavor and Cinnamon desktop, without numerous special customizations, Ubuntu Cinnamon is your friend. - -Linux Mint, on the other hand, is an option which is also based on Ubuntu featuring Cinnamon. However, you get a Mint-specific theme, iconography, tools, and tweaks that make it a different experience. - -Basically, if you use Linux Mint, it is not going to feel like "_just another Ubuntu flavor_". - -Not to forget, Linux Mint disables snap by default and is Flatpak-first, an entire opposite of what Ubuntu Cinnamon 23.04 will be. - -![ubuntu cinnamon menu screenshot][6] - -So, if you prefer using snaps over Flatpak, and like how the usual Ubuntu flavors work on your system, Ubuntu Cinnamon is a nice addition. Some other points to note about this release include: - -- Pre-installed apps like [Synaptic Package Manager][7], LibreOffice, etc. -- Ubuntu's Yaru theme -- No XApps like you expect with Linux Mint - -Currently, Ubuntu Cinnamon 23.04 is almost ready for release (due for next month) as per its [latest daily build][8]. - -Whether it is going to win over Linux Mint users, that is a different story. But, **a new Cinnamon edition on Ubuntu should get more users to try the Cinnamon desktop, which is a good thing.** - -The Cinnamon desktop is a blend of traditional Windows-style layout with more to offer. - -You can read the official announcement on the [Ubuntu Cinnamon blog][9]. - -_💬 Do you think you will be switching to Ubuntu Cinnamon as your preferred flavor to others? Share your thoughts in the comments._ - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/ubuntu-cinnamon-official/ - -作者:[Ankush Das][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/ankush/ -[b]: https://github.com/lkxed/ -[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/ubuntu-cinnamon-official-flavour.png -[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[3]: https://news.itsfoss.com/ubuntu-23-04/ -[4]: https://lists.ubuntu.com/archives/technical-board/2023-March/002725.html?ref=its-foss-news -[5]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-home.jpg -[6]: https://news.itsfoss.com/content/images/2023/03/ubuntu-cinnamon-menu.jpg -[7]: https://itsfoss.com/synaptic-package-manager/?ref=its-foss-news -[8]: https://cdimage.ubuntu.com/ubuntucinnamon/daily-live/current/?ref=its-foss-news -[9]: https://ubuntucinnamon.org/ubuntu-cinnamon-flavor-status-announcement/?ref=its-foss-news \ No newline at end of file From 928cffb664e667e490bf8f5d5e30294dea4d5dfa Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 31 Mar 2023 09:55:00 +0800 Subject: [PATCH 24/83] RP @lxbwolf https://linux.cn/article-15678-1.html --- ...aims to be a Cheaper Alternative to ChatGPT.md | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) rename {translated/news => published}/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md (72%) diff --git a/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md b/published/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md similarity index 72% rename from translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md rename to published/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md index 312f241013..00ca8094e2 100644 --- a/translated/news/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md +++ b/published/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md @@ -3,32 +3,30 @@ [#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/" [#]: collector: "lkxed" [#]: translator: "lxbwolf" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15678-1.html" -号称可以成为 ChatGPT 平替的开源模型 ”Dolly“ +号称可以成为 ChatGPT 平替的开源模型 “Dolly” ====== -你需要一款 ChatGPT 的平替?还得是开源的?看起来我们已经被卷入了与 ChatGPT 的开源大战。 +> 你需要一款 ChatGPT 的平替?还得是开源的?看起来我们已经被卷入了与 ChatGPT 的开源大战。 ![open source model dolly][1] -![][2] - Databricks 这家软件公司,在各个领域都有所建树,尤其是在数据仓库和基于人工智能的解决方案方面。 -最近,随着 ChatGPT 横空出世,Meta、Google 甚至 Mozilla 也可以效仿 ChatGPT。 +最近,随着 ChatGPT 横空出世,Meta、谷歌甚至 Mozilla 都开始效仿 ChatGPT。 -而现在,Databricks 开源了其 [大型语言模型large language model][3](LLM)"Dolly",也正在以自己的方式进行尝试。 +而现在,Databricks 开源了其 [大型语言模型][3]large language model(LLM)“Dolly”,也正在以自己的方式进行尝试。 我们一起来看看它。 -**发生了什么?:** 在最近的公告中,Databricks 介绍了他们号称 **”廉价构建“** 的 LLM,使用 [EleutherAI][5] 的已经开源参数[模型][4] 提供功能。 +**发生了什么?** 在最近的公告中,Databricks 介绍了他们号称 “**廉价构建**” 的 LLM,使用 [EleutherAI][5] 的已经开源的参数 [模型][4] 提供功能。 -他们在该模型基础上稍作调整,赋予了 Dolly 指令跟随能力,如头脑风暴和文本生成。 +他们在该模型基础上稍作调整,赋予了 Dolly 指令诸如头脑风暴和文本生成的能力。 -当你拿它与 GPT-3 中的 **1750亿个参数** 比较时,Dolly 的 **60亿个参数** 就可能显得微不足道了。 +当你拿它与 GPT-3 中的 **1750 亿个参数** 比较时,Dolly 的 **60 亿个参数** 就可能显得微不足道。 但是,当 Databricks 的人看到即使数据量与 GPT-3 相差这么多,Dolly 也能 **展示很多与 ChatGPT 相同的能力** 时,他们感到非常震惊。 @@ -36,11 +34,11 @@ Databricks 这家软件公司,在各个领域都有所建树,尤其是在数 ![a screenshot of how dolly performs in an open question and answer scenario][6] -原始模型使用了 [Alpaca][7] 的数据,该模型由斯坦福大学以 Meta 的 [LaMA][8] LLM 为基础建立。 +原始模型使用了 [Alpaca][7] 的数据,该模型由斯坦福大学以 Meta 的 [LLaMA][8] LLM 为基础建立。 但是,正如你所看到的,原始模型产生了一个非常杂乱无章的结果,而 Dolly,通过不同的模型和调整,能够产生一个更为可用的答案。 -> 📝 有趣的事实:Dolly 名字取自世界上第一只克隆羊。 +> 📝 有趣的事实:“多莉Dolly” 名字取自世界上第一只克隆羊。 **为什么是现在?** 根据 Databricks 的说法,他们认为 **许多公司更愿意建立自己的模型,**而不是将数据发送给某个紧紧掌握模型只对外提供 API 的集中式供应商。 @@ -56,7 +54,7 @@ Databricks 这家软件公司,在各个领域都有所建树,尤其是在数 总而言之,这种开源其模型的举动应该对其他公司有好处,可以保护他们的数据、节省运营成本,其他公司也能使用它创建自己的模型。 -你可以查看 [公告博客][10],以了解更多技术细节和其他计划。 +你可以查看其 [公告博客][10],以了解更多技术细节和其他计划。 -------------------------------------------------------------------------------- @@ -65,7 +63,7 @@ via: https://news.itsfoss.com/open-source-model-dolly/ 作者:[Sourav Rudra][a] 选题:[lkxed][b] 译者:[lxbwolf](https://github.com/lxbwolf) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 235da3ef8267d8671b7e1dd27b1ffaf0e1b6873e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91?= Date: Fri, 31 Mar 2023 10:20:21 +0800 Subject: [PATCH 25/83] translating --- .../20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md b/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md index b6be9196ac..5b06930b9a 100644 --- a/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md +++ b/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md @@ -2,7 +2,7 @@ [#]: via: "https://www.debugpoint.com/debian-12-features/" [#]: author: "Arindam https://www.debugpoint.com/author/admin1/" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "robsean" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -181,4 +181,4 @@ via: https://www.debugpoint.com/debian-12-features/ [15]: https://www.debugpoint.com/wp-content/uploads/2023/03/Default-wallpaper.jpg [16]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Plymouth.jpg [17]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/ -[18]: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html \ No newline at end of file +[18]: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html From b1b7c063462661ade5c3861e2458ecc60f97bc50 Mon Sep 17 00:00:00 2001 From: "Xiaobin.Liu" Date: Fri, 31 Mar 2023 23:47:51 +0800 Subject: [PATCH 26/83] APL --- ...Write your first CI-CD pipeline in Kubernetes with Tekton.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md b/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md index ebd326aca7..cc85b3ecf8 100644 --- a/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md +++ b/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton" [#]: author: "Savita Ashture https://opensource.com/users/savita-ashture" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "lxbwolf" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 463af51ece5200db636ce864354ad58a0187c8f1 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 1 Apr 2023 08:21:59 +0800 Subject: [PATCH 27/83] =?UTF-8?q?=E5=BD=92=E6=A1=A3=20202303?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20200628 Roy Fielding-s Misappropriated REST Dissertation.md | 0 ...Source Security Foundation (OpenSSF)- Reflection and Future.md | 0 .../{ => 202303}/20210214 Why programmers love Linux packaging.md | 0 .../20210819 Short option parsing using getopt in C.md | 0 ...Learn everything about computers with this Raspberry Pi kit.md | 0 .../{ => 202303}/20211014 9 ways to use open source every day.md | 0 ...rt, an open source alternative to firmware for home routers.md | 0 .../20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md | 0 ...⭐️ A data scientist's guide to open source community analysis.md | 0 ...21219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md | 0 .../20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md | 0 ...0230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md | 0 ...230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md | 0 .../20230216.0 ⭐️ 5 escape sequences for your Linux shell.md | 0 ...️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md | 0 .../20230216.2 ⭐️⭐️ Writing Javascript without a build system.md | 0 .../20230221.0 ⭐️ Making Directories in Linux Terminal.md | 0 ...2.0 ⭐️⭐️ NixOS Series 1 Why Should You Consider Using NixOS.md | 0 .../20230223.1 ⭐️ Linux is Just a Kernel What Does it Mean.md | 0 ...️⭐️ NixOS Series 2 How to Install NixOS on a Virtual Machine.md | 0 ...⭐️ How to Install IDLE Python IDE in Ubuntu and Other Linux.md | 0 ... Ubuntu Plans for Mini ISO Images for Minimal Desktop Workloads.md | 0 .../20230228.2 ⭐️ 3 tips to manage large Postgres databases.md | 0 ...0230301.0 ⭐️ How to Install PgAdmin4 on RHEL 9 Step by Step.md | 0 ...⭐️ FFmpeg 6.0 Released with WBMP and Radiance HDR Image Support.md | 0 ...20230301.3 ⭐️⭐️ Use your Raspberry Pi as a streaming server.md | 0 ...️ Parallel and distributed computing with Raspberry Pi clusters.md | 0 ...0303.0 ⭐️ A trivia vending machine made with a Raspberry Pi.md | 0 ...0230303.1 ⭐️ How I automate graphics creation with Inkscape.md | 0 .../20230304.0 ⭐️⭐️ Top 5 Best Arch Linux Distros For Everyone.md | 0 .../20230305.0 ⭐️ Install DOSBox in Ubuntu to Play Retro Games.md | 0 ...6.0 ⭐️ Xubuntu Minimal Opportunity to Build Your Own Distro.md | 0 .../20230306.2 ⭐️ How Wikipedia helps keep the internet open.md | 0 ...06.3 ⭐️ NixOS Series 3 Install and Remove Packages in NixOS.md | 0 .../{ => 202303}/20230307.1 ⭐️ Switch from iCloud to Nextcloud.md | 0 ...30307.2 ⭐️ Terminal Basics Series 4 Creating Files in Linux.md | 0 ...ux “Raptor” 230305 Release Drops Latte Dock, Brings Key Changes.md | 0 .../20230308.1 ⭐️ Vanilla OS Drops Ubuntu, Welcomes Debian Sid.md | 0 ...️⭐️ How to Install MiniKube on RHEL 8Rocky Linux 8AlmaLinux 8.md | 0 .../20230308.3 ⭐️ 8 examples of influential women in tech.md | 0 ...08.4 ⭐️⭐️ What cloud developers need to know about hardware.md | 0 ...0230308.7 ⭐️⭐️ Top 5 Best EPUB Readers for Linux [Compared].md | 0 ...⭐️ Postgres DevOps database administrator A day in the life.md | 0 .../20230309.1 ⭐️ Contribute to open source without code.md | 0 ...️⭐️ Arch Linux vs Other Linux Distros Which is Right for You.md | 0 ...13.0 ⭐️⭐️ A Guide to Find the Right Debian ISO for Download.md | 0 ...3.2 ⭐️⭐️ NixOS Series 4 Things To Do After Installing NixOS.md | 0 ...13.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md | 0 .../{ => 202303}/20230314.2 ⭐️ How I destroyed my Raspberry Pi.md | 0 ...Linux Introduces “Kali Purple” for Defensive Security Hardening.md | 0 ...0230315.0 ⭐️ Input Function in Python Concepts and Examples.md | 0 .../20230315.1 ⭐️ How to know if You are Behind a Proxy Server.md | 0 ...20230315.2 ⭐️ How to set up your own open source DNS server.md | 0 ...316.2 ⭐️ Firefox 111 Released with New Native Notifications.md | 0 .../20230317.0 ⭐️ Variables in Python Concepts with Examples.md | 0 ...30321.3 ⭐️⭐️ Ubuntu 23.04 “Lunar Lobster” Best New Features.md | 0 ...30323.3 ⭐️⭐️ GNOME 44 is Here With New Tricks Up its Sleeve.md | 0 ...️ Adding a Pop of Color to GNOME Accent Colors Are on the Way.md | 0 ...rce Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md | 0 ...329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md | 0 60 files changed, 0 insertions(+), 0 deletions(-) rename published/{ => 202303}/20200628 Roy Fielding-s Misappropriated REST Dissertation.md (100%) rename published/{ => 202303}/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md (100%) rename published/{ => 202303}/20210214 Why programmers love Linux packaging.md (100%) rename published/{ => 202303}/20210819 Short option parsing using getopt in C.md (100%) rename published/{ => 202303}/20210906 Learn everything about computers with this Raspberry Pi kit.md (100%) rename published/{ => 202303}/20211014 9 ways to use open source every day.md (100%) rename published/{ => 202303}/20220712 OpenWrt, an open source alternative to firmware for home routers.md (100%) rename published/{ => 202303}/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md (100%) rename published/{ => 202303}/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md (100%) rename published/{ => 202303}/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md (100%) rename published/{ => 202303}/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md (100%) rename published/{ => 202303}/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md (100%) rename published/{ => 202303}/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md (100%) rename published/{ => 202303}/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md (100%) rename published/{ => 202303}/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md (100%) rename published/{ => 202303}/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md (100%) rename published/{ => 202303}/20230221.0 ⭐️ Making Directories in Linux Terminal.md (100%) rename published/{ => 202303}/20230222.0 ⭐️⭐️ NixOS Series 1 Why Should You Consider Using NixOS.md (100%) rename published/{ => 202303}/20230223.1 ⭐️ Linux is Just a Kernel What Does it Mean.md (100%) rename published/{ => 202303}/20230227.0 ⭐️⭐️ NixOS Series 2 How to Install NixOS on a Virtual Machine.md (100%) rename published/{ => 202303}/20230228.0 ⭐️ How to Install IDLE Python IDE in Ubuntu and Other Linux.md (100%) rename published/{ => 202303}/20230228.1 ⭐️ Ubuntu Plans for Mini ISO Images for Minimal Desktop Workloads.md (100%) rename published/{ => 202303}/20230228.2 ⭐️ 3 tips to manage large Postgres databases.md (100%) rename published/{ => 202303}/20230301.0 ⭐️ How to Install PgAdmin4 on RHEL 9 Step by Step.md (100%) rename published/{ => 202303}/20230301.1 ⭐️⭐️ FFmpeg 6.0 Released with WBMP and Radiance HDR Image Support.md (100%) rename published/{ => 202303}/20230301.3 ⭐️⭐️ Use your Raspberry Pi as a streaming server.md (100%) rename published/{ => 202303}/20230302.0 ⭐️⭐️ Parallel and distributed computing with Raspberry Pi clusters.md (100%) rename published/{ => 202303}/20230303.0 ⭐️ A trivia vending machine made with a Raspberry Pi.md (100%) rename published/{ => 202303}/20230303.1 ⭐️ How I automate graphics creation with Inkscape.md (100%) rename published/{ => 202303}/20230304.0 ⭐️⭐️ Top 5 Best Arch Linux Distros For Everyone.md (100%) rename published/{ => 202303}/20230305.0 ⭐️ Install DOSBox in Ubuntu to Play Retro Games.md (100%) rename published/{ => 202303}/20230306.0 ⭐️ Xubuntu Minimal Opportunity to Build Your Own Distro.md (100%) rename published/{ => 202303}/20230306.2 ⭐️ How Wikipedia helps keep the internet open.md (100%) rename published/{ => 202303}/20230306.3 ⭐️ NixOS Series 3 Install and Remove Packages in NixOS.md (100%) rename published/{ => 202303}/20230307.1 ⭐️ Switch from iCloud to Nextcloud.md (100%) rename published/{ => 202303}/20230307.2 ⭐️ Terminal Basics Series 4 Creating Files in Linux.md (100%) rename published/{ => 202303}/20230308.0 ⭐️ Garuda Linux “Raptor” 230305 Release Drops Latte Dock, Brings Key Changes.md (100%) rename published/{ => 202303}/20230308.1 ⭐️ Vanilla OS Drops Ubuntu, Welcomes Debian Sid.md (100%) rename published/{ => 202303}/20230308.2 ⭐️⭐️ How to Install MiniKube on RHEL 8Rocky Linux 8AlmaLinux 8.md (100%) rename published/{ => 202303}/20230308.3 ⭐️ 8 examples of influential women in tech.md (100%) rename published/{ => 202303}/20230308.4 ⭐️⭐️ What cloud developers need to know about hardware.md (100%) rename published/{ => 202303}/20230308.7 ⭐️⭐️ Top 5 Best EPUB Readers for Linux [Compared].md (100%) rename published/{ => 202303}/20230309.0 ⭐️ Postgres DevOps database administrator A day in the life.md (100%) rename published/{ => 202303}/20230309.1 ⭐️ Contribute to open source without code.md (100%) rename published/{ => 202303}/20230309.3 ⭐️⭐️ Arch Linux vs Other Linux Distros Which is Right for You.md (100%) rename published/{ => 202303}/20230313.0 ⭐️⭐️ A Guide to Find the Right Debian ISO for Download.md (100%) rename published/{ => 202303}/20230313.2 ⭐️⭐️ NixOS Series 4 Things To Do After Installing NixOS.md (100%) rename published/{ => 202303}/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md (100%) rename published/{ => 202303}/20230314.2 ⭐️ How I destroyed my Raspberry Pi.md (100%) rename published/{ => 202303}/20230314.4 ⭐️ Kali Linux Introduces “Kali Purple” for Defensive Security Hardening.md (100%) rename published/{ => 202303}/20230315.0 ⭐️ Input Function in Python Concepts and Examples.md (100%) rename published/{ => 202303}/20230315.1 ⭐️ How to know if You are Behind a Proxy Server.md (100%) rename published/{ => 202303}/20230315.2 ⭐️ How to set up your own open source DNS server.md (100%) rename published/{ => 202303}/20230316.2 ⭐️ Firefox 111 Released with New Native Notifications.md (100%) rename published/{ => 202303}/20230317.0 ⭐️ Variables in Python Concepts with Examples.md (100%) rename published/{ => 202303}/20230321.3 ⭐️⭐️ Ubuntu 23.04 “Lunar Lobster” Best New Features.md (100%) rename published/{ => 202303}/20230323.3 ⭐️⭐️ GNOME 44 is Here With New Tricks Up its Sleeve.md (100%) rename published/{ => 202303}/20230323.5 ⭐️ Adding a Pop of Color to GNOME Accent Colors Are on the Way.md (100%) rename published/{ => 202303}/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md (100%) rename published/{ => 202303}/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md (100%) diff --git a/published/20200628 Roy Fielding-s Misappropriated REST Dissertation.md b/published/202303/20200628 Roy Fielding-s Misappropriated REST Dissertation.md similarity index 100% rename from published/20200628 Roy Fielding-s Misappropriated REST Dissertation.md rename to published/202303/20200628 Roy Fielding-s Misappropriated REST Dissertation.md diff --git a/published/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md b/published/202303/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md similarity index 100% rename from published/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md rename to published/202303/20210128 Open Source Security Foundation (OpenSSF)- Reflection and Future.md diff --git a/published/20210214 Why programmers love Linux packaging.md b/published/202303/20210214 Why programmers love Linux packaging.md similarity index 100% rename from published/20210214 Why programmers love Linux packaging.md rename to published/202303/20210214 Why programmers love Linux packaging.md diff --git a/published/20210819 Short option parsing using getopt in C.md b/published/202303/20210819 Short option parsing using getopt in C.md similarity index 100% rename from published/20210819 Short option parsing using getopt in C.md rename to published/202303/20210819 Short option parsing using getopt in C.md diff --git a/published/20210906 Learn everything about computers with this Raspberry Pi kit.md b/published/202303/20210906 Learn everything about computers with this Raspberry Pi kit.md similarity index 100% rename from published/20210906 Learn everything about computers with this Raspberry Pi kit.md rename to published/202303/20210906 Learn everything about computers with this Raspberry Pi kit.md diff --git a/published/20211014 9 ways to use open source every day.md b/published/202303/20211014 9 ways to use open source every day.md similarity index 100% rename from published/20211014 9 ways to use open source every day.md rename to published/202303/20211014 9 ways to use open source every day.md diff --git a/published/20220712 OpenWrt, an open source alternative to firmware for home routers.md b/published/202303/20220712 OpenWrt, an open source alternative to firmware for home routers.md similarity index 100% rename from published/20220712 OpenWrt, an open source alternative to firmware for home routers.md rename to published/202303/20220712 OpenWrt, an open source alternative to firmware for home routers.md diff --git a/published/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md b/published/202303/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md similarity index 100% rename from published/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md rename to published/202303/20221117.0 ⭐️⭐️ How to Install and Use htop in Linux.md diff --git a/published/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md b/published/202303/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md similarity index 100% rename from published/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md rename to published/202303/20221206.3 ⭐️⭐️ A data scientist's guide to open source community analysis.md diff --git a/published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md b/published/202303/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md similarity index 100% rename from published/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md rename to published/202303/20221219.1 ⭐️⭐️ How I use my old camera as a webcam with Linux.md diff --git a/published/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md b/published/202303/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md similarity index 100% rename from published/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md rename to published/202303/20221220.2 ⭐️⭐️ How I use Artipie, a PyPI repo.md diff --git a/published/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md b/published/202303/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md similarity index 100% rename from published/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md rename to published/202303/20230131.1 ⭐️⭐️ Use Terraform to manage an OpenStack cluster.md diff --git a/published/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md b/published/202303/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md similarity index 100% rename from published/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md rename to published/202303/20230206.1 ⭐️⭐️ Wordsmith on the Linux command line with dict.md diff --git a/published/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md b/published/202303/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md similarity index 100% rename from published/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md rename to published/202303/20230216.0 ⭐️ 5 escape sequences for your Linux shell.md diff --git a/published/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md b/published/202303/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md similarity index 100% rename from published/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md rename to published/202303/20230216.1 ⭐️⭐️ Beginner's Guide to R Markdown Syntax [With Cheat Sheet].md diff --git a/published/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md b/published/202303/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md similarity index 100% rename from published/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md rename to published/202303/20230216.2 ⭐️⭐️ Writing Javascript without a build system.md diff --git a/published/20230221.0 ⭐️ Making Directories in Linux Terminal.md b/published/202303/20230221.0 ⭐️ Making Directories in Linux Terminal.md similarity index 100% rename from published/20230221.0 ⭐️ Making Directories in Linux Terminal.md rename to published/202303/20230221.0 ⭐️ Making Directories in Linux Terminal.md diff --git a/published/20230222.0 ⭐️⭐️ NixOS Series 1 Why Should You Consider Using NixOS.md b/published/202303/20230222.0 ⭐️⭐️ NixOS Series 1 Why Should You Consider Using NixOS.md similarity index 100% rename from published/20230222.0 ⭐️⭐️ NixOS Series 1 Why Should You Consider Using NixOS.md rename to published/202303/20230222.0 ⭐️⭐️ NixOS Series 1 Why Should You Consider Using NixOS.md diff --git a/published/20230223.1 ⭐️ Linux is Just a Kernel What Does it Mean.md b/published/202303/20230223.1 ⭐️ Linux is Just a Kernel What Does it Mean.md similarity index 100% rename from published/20230223.1 ⭐️ Linux is Just a Kernel What Does it Mean.md rename to published/202303/20230223.1 ⭐️ Linux is Just a Kernel What Does it Mean.md diff --git a/published/20230227.0 ⭐️⭐️ NixOS Series 2 How to Install NixOS on a Virtual Machine.md b/published/202303/20230227.0 ⭐️⭐️ NixOS Series 2 How to Install NixOS on a Virtual Machine.md similarity index 100% rename from published/20230227.0 ⭐️⭐️ NixOS Series 2 How to Install NixOS on a Virtual Machine.md rename to published/202303/20230227.0 ⭐️⭐️ NixOS Series 2 How to Install NixOS on a Virtual Machine.md diff --git a/published/20230228.0 ⭐️ How to Install IDLE Python IDE in Ubuntu and Other Linux.md b/published/202303/20230228.0 ⭐️ How to Install IDLE Python IDE in Ubuntu and Other Linux.md similarity index 100% rename from published/20230228.0 ⭐️ How to Install IDLE Python IDE in Ubuntu and Other Linux.md rename to published/202303/20230228.0 ⭐️ How to Install IDLE Python IDE in Ubuntu and Other Linux.md diff --git a/published/20230228.1 ⭐️ Ubuntu Plans for Mini ISO Images for Minimal Desktop Workloads.md b/published/202303/20230228.1 ⭐️ Ubuntu Plans for Mini ISO Images for Minimal Desktop Workloads.md similarity index 100% rename from published/20230228.1 ⭐️ Ubuntu Plans for Mini ISO Images for Minimal Desktop Workloads.md rename to published/202303/20230228.1 ⭐️ Ubuntu Plans for Mini ISO Images for Minimal Desktop Workloads.md diff --git a/published/20230228.2 ⭐️ 3 tips to manage large Postgres databases.md b/published/202303/20230228.2 ⭐️ 3 tips to manage large Postgres databases.md similarity index 100% rename from published/20230228.2 ⭐️ 3 tips to manage large Postgres databases.md rename to published/202303/20230228.2 ⭐️ 3 tips to manage large Postgres databases.md diff --git a/published/20230301.0 ⭐️ How to Install PgAdmin4 on RHEL 9 Step by Step.md b/published/202303/20230301.0 ⭐️ How to Install PgAdmin4 on RHEL 9 Step by Step.md similarity index 100% rename from published/20230301.0 ⭐️ How to Install PgAdmin4 on RHEL 9 Step by Step.md rename to published/202303/20230301.0 ⭐️ How to Install PgAdmin4 on RHEL 9 Step by Step.md diff --git a/published/20230301.1 ⭐️⭐️ FFmpeg 6.0 Released with WBMP and Radiance HDR Image Support.md b/published/202303/20230301.1 ⭐️⭐️ FFmpeg 6.0 Released with WBMP and Radiance HDR Image Support.md similarity index 100% rename from published/20230301.1 ⭐️⭐️ FFmpeg 6.0 Released with WBMP and Radiance HDR Image Support.md rename to published/202303/20230301.1 ⭐️⭐️ FFmpeg 6.0 Released with WBMP and Radiance HDR Image Support.md diff --git a/published/20230301.3 ⭐️⭐️ Use your Raspberry Pi as a streaming server.md b/published/202303/20230301.3 ⭐️⭐️ Use your Raspberry Pi as a streaming server.md similarity index 100% rename from published/20230301.3 ⭐️⭐️ Use your Raspberry Pi as a streaming server.md rename to published/202303/20230301.3 ⭐️⭐️ Use your Raspberry Pi as a streaming server.md diff --git a/published/20230302.0 ⭐️⭐️ Parallel and distributed computing with Raspberry Pi clusters.md b/published/202303/20230302.0 ⭐️⭐️ Parallel and distributed computing with Raspberry Pi clusters.md similarity index 100% rename from published/20230302.0 ⭐️⭐️ Parallel and distributed computing with Raspberry Pi clusters.md rename to published/202303/20230302.0 ⭐️⭐️ Parallel and distributed computing with Raspberry Pi clusters.md diff --git a/published/20230303.0 ⭐️ A trivia vending machine made with a Raspberry Pi.md b/published/202303/20230303.0 ⭐️ A trivia vending machine made with a Raspberry Pi.md similarity index 100% rename from published/20230303.0 ⭐️ A trivia vending machine made with a Raspberry Pi.md rename to published/202303/20230303.0 ⭐️ A trivia vending machine made with a Raspberry Pi.md diff --git a/published/20230303.1 ⭐️ How I automate graphics creation with Inkscape.md b/published/202303/20230303.1 ⭐️ How I automate graphics creation with Inkscape.md similarity index 100% rename from published/20230303.1 ⭐️ How I automate graphics creation with Inkscape.md rename to published/202303/20230303.1 ⭐️ How I automate graphics creation with Inkscape.md diff --git a/published/20230304.0 ⭐️⭐️ Top 5 Best Arch Linux Distros For Everyone.md b/published/202303/20230304.0 ⭐️⭐️ Top 5 Best Arch Linux Distros For Everyone.md similarity index 100% rename from published/20230304.0 ⭐️⭐️ Top 5 Best Arch Linux Distros For Everyone.md rename to published/202303/20230304.0 ⭐️⭐️ Top 5 Best Arch Linux Distros For Everyone.md diff --git a/published/20230305.0 ⭐️ Install DOSBox in Ubuntu to Play Retro Games.md b/published/202303/20230305.0 ⭐️ Install DOSBox in Ubuntu to Play Retro Games.md similarity index 100% rename from published/20230305.0 ⭐️ Install DOSBox in Ubuntu to Play Retro Games.md rename to published/202303/20230305.0 ⭐️ Install DOSBox in Ubuntu to Play Retro Games.md diff --git a/published/20230306.0 ⭐️ Xubuntu Minimal Opportunity to Build Your Own Distro.md b/published/202303/20230306.0 ⭐️ Xubuntu Minimal Opportunity to Build Your Own Distro.md similarity index 100% rename from published/20230306.0 ⭐️ Xubuntu Minimal Opportunity to Build Your Own Distro.md rename to published/202303/20230306.0 ⭐️ Xubuntu Minimal Opportunity to Build Your Own Distro.md diff --git a/published/20230306.2 ⭐️ How Wikipedia helps keep the internet open.md b/published/202303/20230306.2 ⭐️ How Wikipedia helps keep the internet open.md similarity index 100% rename from published/20230306.2 ⭐️ How Wikipedia helps keep the internet open.md rename to published/202303/20230306.2 ⭐️ How Wikipedia helps keep the internet open.md diff --git a/published/20230306.3 ⭐️ NixOS Series 3 Install and Remove Packages in NixOS.md b/published/202303/20230306.3 ⭐️ NixOS Series 3 Install and Remove Packages in NixOS.md similarity index 100% rename from published/20230306.3 ⭐️ NixOS Series 3 Install and Remove Packages in NixOS.md rename to published/202303/20230306.3 ⭐️ NixOS Series 3 Install and Remove Packages in NixOS.md diff --git a/published/20230307.1 ⭐️ Switch from iCloud to Nextcloud.md b/published/202303/20230307.1 ⭐️ Switch from iCloud to Nextcloud.md similarity index 100% rename from published/20230307.1 ⭐️ Switch from iCloud to Nextcloud.md rename to published/202303/20230307.1 ⭐️ Switch from iCloud to Nextcloud.md diff --git a/published/20230307.2 ⭐️ Terminal Basics Series 4 Creating Files in Linux.md b/published/202303/20230307.2 ⭐️ Terminal Basics Series 4 Creating Files in Linux.md similarity index 100% rename from published/20230307.2 ⭐️ Terminal Basics Series 4 Creating Files in Linux.md rename to published/202303/20230307.2 ⭐️ Terminal Basics Series 4 Creating Files in Linux.md diff --git a/published/20230308.0 ⭐️ Garuda Linux “Raptor” 230305 Release Drops Latte Dock, Brings Key Changes.md b/published/202303/20230308.0 ⭐️ Garuda Linux “Raptor” 230305 Release Drops Latte Dock, Brings Key Changes.md similarity index 100% rename from published/20230308.0 ⭐️ Garuda Linux “Raptor” 230305 Release Drops Latte Dock, Brings Key Changes.md rename to published/202303/20230308.0 ⭐️ Garuda Linux “Raptor” 230305 Release Drops Latte Dock, Brings Key Changes.md diff --git a/published/20230308.1 ⭐️ Vanilla OS Drops Ubuntu, Welcomes Debian Sid.md b/published/202303/20230308.1 ⭐️ Vanilla OS Drops Ubuntu, Welcomes Debian Sid.md similarity index 100% rename from published/20230308.1 ⭐️ Vanilla OS Drops Ubuntu, Welcomes Debian Sid.md rename to published/202303/20230308.1 ⭐️ Vanilla OS Drops Ubuntu, Welcomes Debian Sid.md diff --git a/published/20230308.2 ⭐️⭐️ How to Install MiniKube on RHEL 8Rocky Linux 8AlmaLinux 8.md b/published/202303/20230308.2 ⭐️⭐️ How to Install MiniKube on RHEL 8Rocky Linux 8AlmaLinux 8.md similarity index 100% rename from published/20230308.2 ⭐️⭐️ How to Install MiniKube on RHEL 8Rocky Linux 8AlmaLinux 8.md rename to published/202303/20230308.2 ⭐️⭐️ How to Install MiniKube on RHEL 8Rocky Linux 8AlmaLinux 8.md diff --git a/published/20230308.3 ⭐️ 8 examples of influential women in tech.md b/published/202303/20230308.3 ⭐️ 8 examples of influential women in tech.md similarity index 100% rename from published/20230308.3 ⭐️ 8 examples of influential women in tech.md rename to published/202303/20230308.3 ⭐️ 8 examples of influential women in tech.md diff --git a/published/20230308.4 ⭐️⭐️ What cloud developers need to know about hardware.md b/published/202303/20230308.4 ⭐️⭐️ What cloud developers need to know about hardware.md similarity index 100% rename from published/20230308.4 ⭐️⭐️ What cloud developers need to know about hardware.md rename to published/202303/20230308.4 ⭐️⭐️ What cloud developers need to know about hardware.md diff --git a/published/20230308.7 ⭐️⭐️ Top 5 Best EPUB Readers for Linux [Compared].md b/published/202303/20230308.7 ⭐️⭐️ Top 5 Best EPUB Readers for Linux [Compared].md similarity index 100% rename from published/20230308.7 ⭐️⭐️ Top 5 Best EPUB Readers for Linux [Compared].md rename to published/202303/20230308.7 ⭐️⭐️ Top 5 Best EPUB Readers for Linux [Compared].md diff --git a/published/20230309.0 ⭐️ Postgres DevOps database administrator A day in the life.md b/published/202303/20230309.0 ⭐️ Postgres DevOps database administrator A day in the life.md similarity index 100% rename from published/20230309.0 ⭐️ Postgres DevOps database administrator A day in the life.md rename to published/202303/20230309.0 ⭐️ Postgres DevOps database administrator A day in the life.md diff --git a/published/20230309.1 ⭐️ Contribute to open source without code.md b/published/202303/20230309.1 ⭐️ Contribute to open source without code.md similarity index 100% rename from published/20230309.1 ⭐️ Contribute to open source without code.md rename to published/202303/20230309.1 ⭐️ Contribute to open source without code.md diff --git a/published/20230309.3 ⭐️⭐️ Arch Linux vs Other Linux Distros Which is Right for You.md b/published/202303/20230309.3 ⭐️⭐️ Arch Linux vs Other Linux Distros Which is Right for You.md similarity index 100% rename from published/20230309.3 ⭐️⭐️ Arch Linux vs Other Linux Distros Which is Right for You.md rename to published/202303/20230309.3 ⭐️⭐️ Arch Linux vs Other Linux Distros Which is Right for You.md diff --git a/published/20230313.0 ⭐️⭐️ A Guide to Find the Right Debian ISO for Download.md b/published/202303/20230313.0 ⭐️⭐️ A Guide to Find the Right Debian ISO for Download.md similarity index 100% rename from published/20230313.0 ⭐️⭐️ A Guide to Find the Right Debian ISO for Download.md rename to published/202303/20230313.0 ⭐️⭐️ A Guide to Find the Right Debian ISO for Download.md diff --git a/published/20230313.2 ⭐️⭐️ NixOS Series 4 Things To Do After Installing NixOS.md b/published/202303/20230313.2 ⭐️⭐️ NixOS Series 4 Things To Do After Installing NixOS.md similarity index 100% rename from published/20230313.2 ⭐️⭐️ NixOS Series 4 Things To Do After Installing NixOS.md rename to published/202303/20230313.2 ⭐️⭐️ NixOS Series 4 Things To Do After Installing NixOS.md diff --git a/published/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md b/published/202303/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md similarity index 100% rename from published/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md rename to published/202303/20230313.3 ⭐️⭐️ How to Install Kubernetes Cluster Using Kubespray.md diff --git a/published/20230314.2 ⭐️ How I destroyed my Raspberry Pi.md b/published/202303/20230314.2 ⭐️ How I destroyed my Raspberry Pi.md similarity index 100% rename from published/20230314.2 ⭐️ How I destroyed my Raspberry Pi.md rename to published/202303/20230314.2 ⭐️ How I destroyed my Raspberry Pi.md diff --git a/published/20230314.4 ⭐️ Kali Linux Introduces “Kali Purple” for Defensive Security Hardening.md b/published/202303/20230314.4 ⭐️ Kali Linux Introduces “Kali Purple” for Defensive Security Hardening.md similarity index 100% rename from published/20230314.4 ⭐️ Kali Linux Introduces “Kali Purple” for Defensive Security Hardening.md rename to published/202303/20230314.4 ⭐️ Kali Linux Introduces “Kali Purple” for Defensive Security Hardening.md diff --git a/published/20230315.0 ⭐️ Input Function in Python Concepts and Examples.md b/published/202303/20230315.0 ⭐️ Input Function in Python Concepts and Examples.md similarity index 100% rename from published/20230315.0 ⭐️ Input Function in Python Concepts and Examples.md rename to published/202303/20230315.0 ⭐️ Input Function in Python Concepts and Examples.md diff --git a/published/20230315.1 ⭐️ How to know if You are Behind a Proxy Server.md b/published/202303/20230315.1 ⭐️ How to know if You are Behind a Proxy Server.md similarity index 100% rename from published/20230315.1 ⭐️ How to know if You are Behind a Proxy Server.md rename to published/202303/20230315.1 ⭐️ How to know if You are Behind a Proxy Server.md diff --git a/published/20230315.2 ⭐️ How to set up your own open source DNS server.md b/published/202303/20230315.2 ⭐️ How to set up your own open source DNS server.md similarity index 100% rename from published/20230315.2 ⭐️ How to set up your own open source DNS server.md rename to published/202303/20230315.2 ⭐️ How to set up your own open source DNS server.md diff --git a/published/20230316.2 ⭐️ Firefox 111 Released with New Native Notifications.md b/published/202303/20230316.2 ⭐️ Firefox 111 Released with New Native Notifications.md similarity index 100% rename from published/20230316.2 ⭐️ Firefox 111 Released with New Native Notifications.md rename to published/202303/20230316.2 ⭐️ Firefox 111 Released with New Native Notifications.md diff --git a/published/20230317.0 ⭐️ Variables in Python Concepts with Examples.md b/published/202303/20230317.0 ⭐️ Variables in Python Concepts with Examples.md similarity index 100% rename from published/20230317.0 ⭐️ Variables in Python Concepts with Examples.md rename to published/202303/20230317.0 ⭐️ Variables in Python Concepts with Examples.md diff --git a/published/20230321.3 ⭐️⭐️ Ubuntu 23.04 “Lunar Lobster” Best New Features.md b/published/202303/20230321.3 ⭐️⭐️ Ubuntu 23.04 “Lunar Lobster” Best New Features.md similarity index 100% rename from published/20230321.3 ⭐️⭐️ Ubuntu 23.04 “Lunar Lobster” Best New Features.md rename to published/202303/20230321.3 ⭐️⭐️ Ubuntu 23.04 “Lunar Lobster” Best New Features.md diff --git a/published/20230323.3 ⭐️⭐️ GNOME 44 is Here With New Tricks Up its Sleeve.md b/published/202303/20230323.3 ⭐️⭐️ GNOME 44 is Here With New Tricks Up its Sleeve.md similarity index 100% rename from published/20230323.3 ⭐️⭐️ GNOME 44 is Here With New Tricks Up its Sleeve.md rename to published/202303/20230323.3 ⭐️⭐️ GNOME 44 is Here With New Tricks Up its Sleeve.md diff --git a/published/20230323.5 ⭐️ Adding a Pop of Color to GNOME Accent Colors Are on the Way.md b/published/202303/20230323.5 ⭐️ Adding a Pop of Color to GNOME Accent Colors Are on the Way.md similarity index 100% rename from published/20230323.5 ⭐️ Adding a Pop of Color to GNOME Accent Colors Are on the Way.md rename to published/202303/20230323.5 ⭐️ Adding a Pop of Color to GNOME Accent Colors Are on the Way.md diff --git a/published/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md b/published/202303/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md similarity index 100% rename from published/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md rename to published/202303/20230327.4 ⭐️ Open-Source Model 'Dolly' Claims to be a Cheaper Alternative to ChatGPT.md diff --git a/published/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md b/published/202303/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md similarity index 100% rename from published/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md rename to published/202303/20230329.1 ⭐️ Ubuntu Cinnamon Gets Official Ubuntu Flavor Status.md From bfa9a7e23d2dc107639a497067bf843e1668dc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sat, 1 Apr 2023 11:29:56 +0800 Subject: [PATCH 28/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][ne?= =?UTF-8?q?ws]:=2020230331.0=20=E2=AD=90=EF=B8=8F=20SD=20Maid=20v2=20Andro?= =?UTF-8?q?id=20System=20Cleaning=20App=20Goes=20Open-Source.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ndroid System Cleaning App Goes Open-Source.md | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md diff --git a/sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md b/sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md new file mode 100644 index 0000000000..4a807a4e2a --- /dev/null +++ b/sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md @@ -0,0 +1,83 @@ +[#]: subject: "SD Maid v2: Android System Cleaning App Goes Open-Source" +[#]: via: "https://news.itsfoss.com/android-cleaner-sd-maid-2/" +[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +SD Maid v2: Android System Cleaning App Goes Open-Source +====== + +SD Maid app is now getting revamped for its v2 as an open-source project. + +![sd maid icon][1] + +![][2] + +SD Maid is a decently popular system cleaning tool for Android devices. + +The app is free to get started but offers a “pro” version of it to unlock additional features for enhanced cleaning. + +It helps you find discarded apps, cache files, duplicates, and abandoned files. You can also optimize the database with it. I have been using it for my Android devices, and it works like a charm. It cleans junk without hassle and makes things tidy. + +However, it also included some additional features which are no longer useful for newer Android devices. + +Hence, the developer decided to make something **simpler and faster, tuned better for newer Android versions.** + +### SD Maid 2 + +![sd maid 2][3] + +[SD Maid 2][4] or SD Maid SE is the successor of SD Maid app as an open-source project. + +> 🚧 The app is in active development and in its early phases. Expect changes and features to be added. + +The original SD Maid app was planned to be open-source, but was not. + +So, the developer took an open-source approach for its successor, which is a good thing. + +The key highlights of the new app are: + +- **Faster performance** +- **Tailored for new Android versions** +- **New UI with themes** +- **Simpler approach to usability** +- **New features and updates can be expected with Android upgrades** + +And, with the successor taking over, the original SD Maid app will go into maintenance mode, meaning it will only receive important fixes/security updates to keep things running for existing users. + +> 📢 Even if you are an existing SD Maid Pro user, you have to purchase a separate license for SD Maid 2 “Pro” to support the project. It is a one-time fee. + +In case you are not aware of its features, you can expect SD Maid 2 to help you with: + +- Removing data that belongs to apps that are no longer installed (**CorpseFinder**) +- Deleting expendable files, e.g. caches (**AppCleaner**) +- User configurable filters for random files (**SystemCleaner**) +- Scheduling actions (**Scheduler**) +- Controling/disabling apps (**AppControl**) + +📥 You can download the app now from the **[Google Play Store][4], [GitHub][5], and [F-Droid][6].** + +_💬 What do you think about the new SD Maid app as an open-source project? Share your thoughts!_ + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/android-cleaner-sd-maid-2/ + +作者:[Ankush Das][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/sdmaid2-se-goes-open-source-android.jpg +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://news.itsfoss.com/content/images/2023/03/sd-maid-2.jpg +[4]: https://play.google.com/store/apps/details?id=eu.darken.sdmse&ref=its-foss-news +[5]: https://github.com/d4rken-org/sdmaid-se?ref=its-foss-news +[6]: https://apt.izzysoft.de/fdroid/index/apk/eu.darken.sdmse/?ref=its-foss-news \ No newline at end of file From 1c4cedb2f91d23aabefa105df861486081f98743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sat, 1 Apr 2023 11:30:23 +0800 Subject: [PATCH 29/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230331.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=208=20?= =?UTF-8?q?Immutable=20Linux=20Distributions=20for=20Those=20Looking=20to?= =?UTF-8?q?=20Embrace=20the=20Future.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...butions for Those Looking to Embrace the Future.md | 146 ++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 sources/tech/20230331.1 ⭐️⭐️ 8 Immutable Linux Distributions for Those Looking to Embrace the Future.md diff --git a/sources/tech/20230331.1 ⭐️⭐️ 8 Immutable Linux Distributions for Those Looking to Embrace the Future.md b/sources/tech/20230331.1 ⭐️⭐️ 8 Immutable Linux Distributions for Those Looking to Embrace the Future.md new file mode 100644 index 0000000000..a6210871ac --- /dev/null +++ b/sources/tech/20230331.1 ⭐️⭐️ 8 Immutable Linux Distributions for Those Looking to Embrace the Future.md @@ -0,0 +1,146 @@ +[#]: subject: "8 Immutable Linux Distributions for Those Looking to Embrace the Future" +[#]: via: "https://itsfoss.com/immutable-linux-distros/" +[#]: author: "Ankush Das https://itsfoss.com/author/ankush/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +8 Immutable Linux Distributions for Those Looking to Embrace the Future +====== + +![][1] + +Every distro is tailored for a range of purposes. Some are configured to work on [old computers][2], some aim to [great user experience][3] and some focus on security. + +Immutable distributions were not what users wanted a couple of years back. But, recently, more projects are focusing on the immutability aspect as a core feature of the Linux distribution. + +Why is that? And, what are all the options available? Before you get to the list, let me briefly tell you more about immutability: + +### What is an immutable Linux distro? + +An immutable distro ensures that the operating system's core remains unchanged. The root file system for an immutable distro remains read-only, making it possible to stay the same across multiple instances. Of course, you can change things if you would like to. But, the ability remains disabled by default. + +How is it useful? + +Traditionally, immutable distributions existed to allow for easier testing and container-based software development. Furthermore, immutability provides you with better security and reliable updates for your operating system. + +Back then, the focus on such features was limited to distros aimed for professionals and developers. Now, it is being incorporated for daily desktop users. + +📋 + +The list is in no particular ranking order. And, some options are still in their early phases of development. + +### 1. carbonOS + +![carbon os screenshot with gnome menu][4] + +[carbonOS][5] is an upcoming independent Linux distro (at the time of writing this). It focuses on providing a seamless user experience with robust tech at its core. + +It takes a Flatpak-first and container-first approach. carbonOS also aims to provide safe system updates, and verified boot as some features that not all atomic distros offer. + +In addition to its unique traits, it also wants to focus on providing an excellent GNOME desktop experience to users. + +### 2. Fedora Silverblue + +![fedora workstation screenshot][6] + +[Silverblue][7] is a variant of Fedora Workstation with immutability. It is one of the most popular immutable distributions out there. + +The user interface and the experience remains unchanged from a typical Fedora Workstation release. Whenever you have a new Fedora release, expect a new Silverblue release as well. + +Fedora Silverblue aims to offer a stable experience which is useful for testing and container-based software development. You can always roll back to the previous version of the operating system if something goes wrong after an update. + +### 3. Flatcar Container Linux + +![flatcar linux][8] + +A community-built Linux distribution tailored for container workloads, as the name suggests. + +You get a minimal OS image that includes only the tools needed to run containers, no package manager, and no configuration hassle. + +If you want to have a reliable infrastructure for your containers, [Flatcar][9] can be a nice option that is scalable, secure, and simple at the same time. Explore more about it on its [GitHub page][10]. + +### 4. openSUSE MicroOS + +![opensuse microos][11] + +[openSUSE MicroOS][12] is built for servers where one needs to deploy containers or work with automated workflows. + +It relies on transactional updates utilizing btrfs with snapshots, that helps save the file system's history without occupying much storage space. + +Overall, MicroOS is a scalable, reliable, and secure option for server users. + +### 5. Vanilla OS + +![vanilla os][13] + +[Vanilla OS][14] is a fairly new entrant to the immutability space. However, it managed to make waves with its release, and then switching to a Debian base, ditching Ubuntu right after its first stable release. + +It aims to provide an easy-to-use desktop experience with reliability and immutable features. + +### 6. Bottlerocket + +![YouTube Video][14] + +[Bottlerocket][16] is a Linux-based open-source OS built by Amazon Web Services to run containers on its platform. + +Unlike other options, its usage is limited to AWS. + +It ensures that the customers using AWS services have minimal maintenance overhead and get to automate their workflows seamlessly. You can only use it as an Amazon Machine Image (AMI) when you create an Amazon Elastic Compute Cloud (EC2). + +### 7. blendOS + +![blendOS][17] + +[blendOS][18] is an interesting distro in development which aims to provide all the good things from other distributions. + +In other words, you can install any type of package on the distro (RPM, DEB, etc.) while getting the immutability and update reliability as one would expect. + +### 8. Talos Linux + +![talos linux][19] + +Yet another unique Linux distribution, designed for Kubernetes. [Talos Linux][20] is an intriguing option for cloud users/developers. + +It is secure, immutable, and a minimal option that supports cloud platforms, bare metal, and virtualization platforms. You can easily launch a Talos cluster inside Docker too. + +The OS runs in memory from a [SquashFS][21], which leaves the entire primary disk to Kubernetes. + +_💬 What do you think about immutable Linux distros? Do you need them? Do you want to replace the popular options on your system with any of these in the future?_ + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/immutable-linux-distros/ + +作者:[Ankush Das][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/ankush/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://itsfoss.com/lightweight-linux-beginners/ +[3]: https://itsfoss.com/beautiful-linux-distributions/ +[4]: https://itsfoss.com/content/images/2023/03/carbon-os-screenshot.png +[5]: https://carbon.sh/?ref=itsfoss.com +[6]: https://itsfoss.com/content/images/2023/03/fedora-37-silverblue.jpg +[7]: https://silverblue.fedoraproject.org/?ref=itsfoss.com +[8]: https://itsfoss.com/content/images/2023/03/flatcar-linux.jpg +[9]: https://www.flatcar.org/?ref=itsfoss.com +[10]: https://github.com/flatcar/Flatcar?ref=itsfoss.com +[11]: https://itsfoss.com/content/images/2023/03/opensuse-micro-os.jpg +[12]: https://microos.opensuse.org/?ref=itsfoss.com +[13]: https://itsfoss.com/content/images/2023/03/vanilla-os.jpg +[14]: https://vanillaos.org/?ref=itsfoss.com +[15]: https://www.youtube.com/embed/Y2cas2I-5bk?feature=oembed +[16]: https://aws.amazon.com/bottlerocket/?ref=itsfoss.com +[17]: https://itsfoss.com/content/images/2023/03/blend-os.jpg +[18]: https://blendos.co/?ref=itsfoss.com +[19]: https://itsfoss.com/content/images/2023/03/talos-linux.jpg +[20]: https://www.talos.dev/?ref=itsfoss.com +[21]: https://en.wikipedia.org/wiki/SquashFS?ref=itsfoss.com \ No newline at end of file From 50f7a50401ca79c55123693d14105660b1e9b73c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sat, 1 Apr 2023 11:30:37 +0800 Subject: [PATCH 30/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230331.2=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Meas?= =?UTF-8?q?ure=20pi=20with=20a=20Raspberry=20Pi.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...1.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md diff --git a/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md b/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md new file mode 100644 index 0000000000..60957b8f29 --- /dev/null +++ b/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md @@ -0,0 +1,72 @@ +[#]: subject: "Measure pi with a Raspberry Pi" +[#]: via: "https://opensource.com/article/23/3/measure-pi-raspberry-pi" +[#]: author: "Jim Hall https://opensource.com/users/jim-hall" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Measure pi with a Raspberry Pi +====== + +March 14th is celebrated around the world as Pi Day. Many people celebrate Pi Day by measuring pi with objects found around the house. I wanted to do something similar for this year's Pi Day using my Raspberry Pi 3B. Read on to learn how I measured pi using my Raspberry Pi. + +What you'll need: + +- Raspberry Pi single-board computer +- Graph paper +- Ruler with mm and cm measurements +- Pen + +### 1. Draw a circle + +Pi is the ratio of the circumference of a circle to its diameter. To calculate pi, we need to measure both the circumference and diameter of a perfectly drawn circle. Fortunately, the Raspberry Pi motherboard has mounting holes that are big enough to fit a pencil or pen. I stuck a pin through one Pi board mounting hole, careful to land the pin on the intersection of two lines on a piece of graph paper. + +Holding the pin still, I inserted a pen in the opposite mounting hole and drew a circle by moving the pen around the pin. The solder points on the underside of the Raspberry Pi motherboard can catch on the paper, but you can draw a good circle if you are careful. + +![Use the Raspberry Pi as a compass to draw a circle.][1] + +### 2. Divide the circle into segments + +Divide the circle in half by drawing a vertical line through the center of the circle and again into quarters by drawing a horizontal line through the circle. When I drew my circle, I placed the pin exactly on the intersection of two lines on the graph paper, which makes finding the vertical and horizontal center lines easy to find. You can create an "eighth" slice by drawing a line across the diagonal. + +![Each small wedge is 1/8 of a circle.][2] + +Further divisions are an exercise with the ruler. I used the ruler to find the midpoint of any two intersections of the "quarter-wedge" and the "one-eighth wedge" to make a 1/16 wedge. You can use the same method to make smaller and smaller slices that are 1/32 and 1/64 of a circle. By being very careful, I was also able to measure a very narrow wedge at 1/128 of a circle: + +![If you are careful, you can keep dividing to find 1/128 of a circle.][3] + +### 3. Estimate the circumference + +My smallest wedge is 1/128 of a circle. With such a small slice, the outer arc of the wedge is so small that we can approximate it with a straight line. This will not actually be 1/128 of the circle's circumference, but it will be close enough that we can use it as a good estimate. + +![Use the mm measurement on your ruler to measure the outer arc of the 1/128 segment.][4] + +Using the mm measurement on my ruler, I measured the outer arc of my 1/128 wedge at 3.8mm. With that, I can estimate the circumference of my circle as 3.8mm times 128, or 486.4mm. To convert to centimeters, divide by ten: **48.64cm**. + +### 4. Calculate pi + +The value of pi is the ratio of the circumference of a circle to its diameter. We estimated the circumference in step 3. Measuring the diameter is a simple exercise of using the ruler to measure across the circle. My circle is **15.4cm**. + +Now that we know the circumference and diameter, we can calculate pi as 48.64 divided by 15.4, which is **3.158**. That's not too far off from the actual value of pi, at 3.141. + +Measuring pi is a fun math exercise! Math fans of all ages can use simple tools such as graph paper, pen, and ruler to measure pi on their own. Use your Raspberry Pi in a fun, new way to draw a circle and measure pi independently. This is an estimate since we are approximating a 1/128 arc on a circle as a straight line, but this gets us close enough without too much effort. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/measure-pi-raspberry-pi + +作者:[Jim Hall][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/jim-hall +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/sites/default/files/2023-03/10000000000003E8000003E8BE7DE71919BB0C82.jpg +[2]: https://opensource.com/sites/default/files/2023-03/100000010000028A0000028A0625B218857F031C.webp +[3]: https://opensource.com/sites/default/files/2023-03/100000000000079E00000514506C8EE5131D886A.webp +[4]: https://opensource.com/sites/default/files/2023-03/10000000000003E8000003E881402FB71F1945FF.jpg \ No newline at end of file From 2d159c0068405c59246b948d738210e007128565 Mon Sep 17 00:00:00 2001 From: "Xiaobin.Liu" Date: Sat, 1 Apr 2023 15:43:37 +0800 Subject: [PATCH 31/83] TSL --- ...I-CD pipeline in Kubernetes with Tekton.md | 223 ------------------ ...I-CD pipeline in Kubernetes with Tekton.md | 222 +++++++++++++++++ 2 files changed, 222 insertions(+), 223 deletions(-) delete mode 100644 sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md create mode 100644 translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md diff --git a/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md b/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md deleted file mode 100644 index cc85b3ecf8..0000000000 --- a/sources/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md +++ /dev/null @@ -1,223 +0,0 @@ -[#]: subject: "Write your first CI/CD pipeline in Kubernetes with Tekton" -[#]: via: "https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton" -[#]: author: "Savita Ashture https://opensource.com/users/savita-ashture" -[#]: collector: "lujun9972" -[#]: translator: "lxbwolf" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Write your first CI/CD pipeline in Kubernetes with Tekton -====== -Tekton is a Kubernetes-native open source framework for creating -continuous integration and continuous delivery (CI/CD) systems. -![Plumbing tubes in many directions][1] - -Tekton is a Kubernetes-native open source framework for creating continuous integration and continuous delivery (CI/CD) systems. It also helps to do end-to-end (build, test, deploy) application development across multiple cloud providers or on-premises systems by abstracting away the underlying implementation details. - -### Introduction to Tekton - -[Tekton][2], known initially as [Knative Build][3], later got restructured as its own open source project with its own [governance organization][4] and is now a [Linux Foundation][5] project. Tekton provides an in-cluster container image build and deployment workflow—in other words, it is a continuous integration (CI) and continuous delivery (CD) service. It consists of Tekton Pipelines and several supporting components, such as Tekton CLI, Triggers, and Catalog. - -Tekton is a Kubernetes native application. It installs and runs as an extension on a Kubernetes cluster and comprises a set of Kubernetes Custom Resources that define the building blocks you can create and reuse for your pipelines. Because it's a K-native technology, Tekton is remarkably easy to scale. When you need to increase your workload, you can just add nodes to your cluster. It's also easy to customize because of its extensible design and thanks to a community repository of contributed components. - -Tekton is ideal for developers who need CI/CD systems to do their work and platform engineers who build CI/CD systems for developers in their organization. - -### Tekton components - -Building CI/CD pipelines is a far-reaching endeavor, so Tekton provides tools for every step of the way. Here are the major components you get with Tekton: - - * **Pipeline: **Pipeline defines a set of Kubernetes [Custom Resources][6] that act as building blocks you use to assemble your CI/CD pipelines. - * **Triggers: **Triggers is a Kubernetes Custom Resource that allows you to create pipelines based on information extracted from event payloads. For example, you can trigger the instantiation and execution of a pipeline every time a merge request gets opened against a Git repository. - * **CLI:** CLI provides a command-line interface called `tkn` that allows you to interact with Tekton from your terminal. - * **Dashboard:** Dashboard is a web-based graphical interface for Tekton pipelines that displays information about the execution of your pipelines. - * **Catalog:** Catalog is a repository of high-quality, community-contributed Tekton building blocks (tasks, pipelines, and so on) ready for use in your own pipelines. - * **Hub:** Hub is a web-based graphical interface for accessing the Tekton catalog. - * **Operator:** Operator is a Kubernetes [Operator pattern][7] that allows you to install, update, upgrade, and remove Tekton projects on a Kubernetes cluster. - * **Chains: **Chains is a Kubernetes Custom Resource Definition (CRD) controller that allows you to manage your supply chain security in Tekton. It is currently a work-in-progress. - * **Results: **Results aims to help users logically group CI/CD workload history and separate out long-term result storage away from the pipeline controller. - - - -### Tekton terminology - -![Tekton terminology][8] - -(Source: [Tekton documentation][9]) - - * **Step:** A step is the most basic entity in a CI/CD workflow, such as running some unit tests for a Python web app or compiling a Java program. Tekton performs each step with a provided container image. - - * **Task:** A task is a collection of steps in a specific order. Tekton runs a task in the form of a [Kubernetes pod][10], where each step becomes a running container in the pod. - - * **Pipelines:** A pipeline is a collection of tasks in a specific order. Tekton collects all tasks, connects them in a directed acyclic graph (DAG), and executes the graph in sequence. In other words, it creates a number of Kubernetes pods and ensures that each pod completes running successfully as desired. - -![Tekton pipelines][11] - -(Source: [Tekton documentation][12]) - - * **PipelineRun: **A PipelineRun, as its name implies, is a specific execution of a pipeline. - - * **TaskRun:** A TaskRun is a specific execution of a task. TaskRuns are also available when you choose to run a task outside a pipeline, with which you may view the specifics of each step execution in a task. - - - - -### Create your own CI/CD pipeline - -The easiest way to get started with Tekton is to write a simple pipeline of your own. If you use Kubernetes every day, you're probably comfortable with YAML, which is precisely how Tekton pipelines are defined. Here's an example of a simple pipeline that clones a code repository. - -First, create a file called `task.yam`**l** and open it in your favorite text editor. This file defines the steps you want to perform. In this example, that's cloning a repository, so I've named the step clone. The file sets some environment variables and then provides a simple shell script to perform the clone. - -Next comes the task. You can think of a step as a function that gets called by the task, and the task sets parameters and workspaces required for steps. - - -``` - - -apiVersion: tekton.dev/v1beta1 -kind: Task -metadata: - name: git-clone -spec: - workspaces: -   - name: output -     description: The git repo will be cloned onto the volume backing this Workspace. - params: -   - name: url -     description: Repository URL to clone from. -     type: string -   - name: revision -     description: Revision to checkout. (branch, tag, sha, ref, etc...) -     type: string -     default: "" - steps: -   - name: clone -     image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0" -     env: -       - name: PARAM_URL -         value: $(params.url) -       - name: PARAM_REVISION -         value: $(params.revision) -       - name: WORKSPACE_OUTPUT_PATH -         value: $(workspaces.output.path) -     script: | -      #!/usr/bin/env sh -       set -eu - -       CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}" - -       /ko-app/git-init \ -         -url="${PARAM_URL}" \ -         -revision="${PARAM_REVISION}" \ -         -path="${CHECKOUT_DIR}" -       cd "${CHECKOUT_DIR}" -       EXIT_CODE="$?" -       if [ "${EXIT_CODE}" != 0 ] ; then -         exit "${EXIT_CODE}" -       fi -       # Verify clone is success by reading readme file. -       cat ${CHECKOUT_DIR}/README.md - -``` - -Create a second file called `pipeline.yaml`, and open it in your favorite text editor. This file defines the pipeline by setting important parameters, such as a workspace where the task can be run and processed. - - -``` - - -apiVersion: tekton.dev/v1beta1 -kind: Pipeline -metadata: - name: cat-branch-readme -spec: - params: -   - name: repo-url -     type: string -     description: The git repository URL to clone from. -   - name: branch-name -     type: string -     description: The git branch to clone. - workspaces: -   - name: shared-data -     description: | -      This workspace will receive the cloned git repo and be passed -       to the next Task for the repo's README.md file to be read. - tasks: -   - name: fetch-repo -     taskRef: -       name: git-clone -     workspaces: -       - name: output -         workspace: shared-data -     params: -       - name: url -         value: $(params.repo-url) -       - name: revision -         value: $(params.branch-name) - -``` - -Finally, create a file called `pipelinerun.yaml` and open it in your favorite text editor. This file actually runs the pipeline. It invokes parameters defined in the pipeline (which, in turn, invokes the task defined by the task file.) - - -``` - - -apiVersion: tekton.dev/v1beta1 -kind: PipelineRun -metadata: - name: git-clone-checking-out-a-branch -spec: - pipelineRef: -   name: cat-branch-readme - workspaces: -   - name: shared-data -     volumeClaimTemplate: -       spec: -         accessModes: -          - ReadWriteOnce -         resources: -           requests: -             storage: 1Gi - params: -   - name: repo-url -     value: -   - name: branch-name -     value: release-v0.12.x - -``` - -The advantage of structuring your work in separate files is that the `git-clone` task is reusable for multiple pipelines. - -For example, suppose you want to do end-to-end testing for a pipeline project. You can use the `git-clone`** **task to ensure that you have a fresh copy of the code you need to test. - -### Wrap up - -As long as you're familiar with Kubernetes, getting started with Tekton is as easy as adopting any other K-native application. It has plenty of tools to help you create pipelines and to interface with your pipelines. If you love automation, try Tekton! - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton - -作者:[Savita Ashture][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/savita-ashture -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/plumbing_pipes_tutorial_how_behind_scenes.png?itok=F2Z8OJV1 (Plumbing tubes in many directions) -[2]: https://github.com/tektoncd/pipeline -[3]: https://github.com/knative/build -[4]: https://cd.foundation/ -[5]: https://www.linuxfoundation.org/projects/ -[6]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ -[7]: https://operatorhub.io/what-is-an-operator -[8]: https://opensource.com/sites/default/files/uploads/tekto-terminology.png (Tekton terminology) -[9]: https://tekton.dev/docs/concepts/concept-tasks-pipelines.png -[10]: https://kubebyexample.com/en/concept/pods -[11]: https://opensource.com/sites/default/files/uploads/tekton-pipelines.png (Tekton pipelines) -[12]: https://tekton.dev/docs/concepts/concept-runs.png diff --git a/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md b/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md new file mode 100644 index 0000000000..cd25e5ac8c --- /dev/null +++ b/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md @@ -0,0 +1,222 @@ +[#]: subject: "Write your first CI/CD pipeline in Kubernetes with Tekton" +[#]: via: "https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton" +[#]: author: "Savita Ashture https://opensource.com/users/savita-ashture" +[#]: collector: "lujun9972" +[#]: translator: "lxbwolf" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +用 Tekton 编写你在 Kubernetes 中的第一条 CI/CD 流水线 +====== +Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。 +![Plumbing tubes in many directions][1] + +Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。通过对底层实施细节的抽象,它还可以帮助你在多个云供应商或企业内部系统中进行端到端(构建、测试、部署)应用开发。 + +### Tekton 介绍 + +[Tekton][2] 最初被称为 [Knative Build][3],后来被重组为独立的开源项目,有自己的 [治理组织][4],现在属于 [Linux 基金会][5] 的项目。Tekton 提供了一个集群内的容器镜像构建和部署工作流程,换句话说,它是一个持续集成(CI)和持续交付(CD)服务。它由 Tekton 流水线和几个支持组件如 Tekton CLI、Triggers 和 Catalog 等组成。 + +Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩展被安装和运行,由一套定义了你为流水线创建和复用的构建块的 Kubernetes 定制化资源组成。由于 Tekton 是一种 Kubernetes 原生技术,所以它非常容易扩展。当你需要增加你的工作负载时,你只需向你的集群添加节点就可以了。由于其可扩展的设计和社区贡献的组件库,它也很容易定制。 + +对于需要 CI/CD 系统来开展工作的开发人员和为其组织内的开发人员建立 CI/CD 系统的平台工程师,Tekton 是理想选择。 + +### Tekton 组件 + +构建 CI/CD 流水线的过程非常复杂,因此 Tekton 为每一步都提供工具。以下是 Tekton 提供的主要组件: + + * **Pipeline: ** Pipeline 定义了一组 Kubernetes [自定义资源][6],作为你用来组装 CI/CD 流水线的构建块。 + * **Triggers: ** Triggers 是一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。 + * **CLI:**  CLI 提供一个名为 `tkn` 的命令行界面,你可以使用它从终端与 Tekton 进行交互。 + * **Dashboard:**  Dashboard 是 Tekton 流水线的一个基于网络的图形界面,显示流水线的执行信息。 + * **Catalog:** Catalog 是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。 + * **Hub:** Hub 是一个基于网络的图形界面,用于访问 Tekton catalog。 + * **Operator:**  Operator 是 Kubernetes 的 [Operator 模式][7],你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。 + * **Chains: ** Chains 是一个 Kubernetes 自定义资源定义Custom Resource Definition(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。 + * **Results: ** Results 旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。 + + + +### Tekton 术语 + +![Tekton terminology][8] + +(Source: [Tekton documentation][9]) + + * **Step:** 步骤(step)是 CI/CD 工作流程中最基本的实体,例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。 + + * **Task:** 任务(task)是按特定顺序排列的步骤的集合。Tekton 以 [Kubernetes pod][10] 的形式运行任务,其中每个步骤都成为 pod 中的一个运行容器。 + + * **Pipelines:** 流水线(pipeline)是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个有向无环图directed acyclic graph(DAG),并按顺序执行图。换句话说,它创建了一些 Kubernetes pod,并确保每个 pod 按预期成功运行。 + +![Tekton pipelines][11] + +(Source: [Tekton documentation][12]) + + * **PipelineRun: ** 顾名思义,是一条流水线的具体执行。 + + * **TaskRun:** TaskRun 是一个任务的具体执行。你可以选择在流水线外运行一次 TaskRun,可以通过它查看任务中每个步骤执行的具体情况。 + + + + +### 创建你的 CI/CD 流水线 + +开始使用 Tekton 的最简单方法是自己编写一个简单的流水线。如果你每天都在使用 Kubernetes,那你可能对 YAML 很熟悉,这正是 Tekton 流水线的定义方式。下面是一个克隆代码库的简单流水线的例子。 + +首先,创建一个`task.yaml` 文件,用你喜欢的文本编辑器打开它。这个文件定义了你要执行的步骤。在这个例子中,就是克隆一个仓库,所以我把这个步骤命名为 clone。该文件设置了一些环境变量,然后使用一个简单的 shell 脚本来执行克隆。 + +接下来是任务。你可以把步骤看作是一个被任务调用的函数,而任务则设置步骤所需的参数和工作空间。 + + +``` + + +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: git-clone +spec: + workspaces: +   - name: output +     description: The git repo will be cloned onto the volume backing this Workspace. + params: +   - name: url +     description: Repository URL to clone from. +     type: string +   - name: revision +     description: Revision to checkout. (branch, tag, sha, ref, etc...) +     type: string +     default: "" + steps: +   - name: clone +     image: "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.21.0" +     env: +       - name: PARAM_URL +         value: $(params.url) +       - name: PARAM_REVISION +         value: $(params.revision) +       - name: WORKSPACE_OUTPUT_PATH +         value: $(workspaces.output.path) +     script: | +      #!/usr/bin/env sh +       set -eu + +       CHECKOUT_DIR="${WORKSPACE_OUTPUT_PATH}" + +       /ko-app/git-init \ +         -url="${PARAM_URL}" \ +         -revision="${PARAM_REVISION}" \ +         -path="${CHECKOUT_DIR}" +       cd "${CHECKOUT_DIR}" +       EXIT_CODE="$?" +       if [ "${EXIT_CODE}" != 0 ] ; then +         exit "${EXIT_CODE}" +       fi +       # Verify clone is success by reading readme file. +       cat ${CHECKOUT_DIR}/README.md + +``` + +创建第二个文件`pipeline.yaml`,并用你喜欢的文本编辑器打开它。这个文件通过设置诸如可以运行和处理任务的工作区等重要参数来定义流水线。 + + +``` + + +apiVersion: tekton.dev/v1beta1 +kind: Pipeline +metadata: + name: cat-branch-readme +spec: + params: +   - name: repo-url +     type: string +     description: The git repository URL to clone from. +   - name: branch-name +     type: string +     description: The git branch to clone. + workspaces: +   - name: shared-data +     description: | +      This workspace will receive the cloned git repo and be passed +       to the next Task for the repo's README.md file to be read. + tasks: +   - name: fetch-repo +     taskRef: +       name: git-clone +     workspaces: +       - name: output +         workspace: shared-data +     params: +       - name: url +         value: $(params.repo-url) +       - name: revision +         value: $(params.branch-name) + +``` + +最后,创建一个 `pipelinerun.yaml` 文件,用喜欢的文本编辑器打开它。这个文件真正的运行流水线。它调用流水线中定义的参数(继而调用任务文件中定义的任务)。 + + +``` + + +apiVersion: tekton.dev/v1beta1 +kind: PipelineRun +metadata: + name: git-clone-checking-out-a-branch +spec: + pipelineRef: +   name: cat-branch-readme + workspaces: +   - name: shared-data +     volumeClaimTemplate: +       spec: +         accessModes: +          - ReadWriteOnce +         resources: +           requests: +             storage: 1Gi + params: +   - name: repo-url +     value: +   - name: branch-name +     value: release-v0.12.x + +``` + +把不同工作分在不同的文件中的好处是,`git-clone` 任务可以在多条流水线中复用。 + +例如,假设你想为一个流水线项目做端到端的测试。你可以使用 `git-clone` 任务 **来让每一次测试都基于最新的代码**。 + +### 总结 + +只要你熟悉 Kubernetes,那 Tekton 对你来说就像其他 Kubernetes 原生应用一样简单。它有很多工具可以帮助你创建流水线并与之交互。如果你喜欢自动化,不妨试试 Tekton! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton + +作者:[Savita Ashture][a] +选题:[lujun9972][b] +译者:[lxbwolf](https://github.com/lxbwolf) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/savita-ashture +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/plumbing_pipes_tutorial_how_behind_scenes.png?itok=F2Z8OJV1 (Plumbing tubes in many directions) +[2]: https://github.com/tektoncd/pipeline +[3]: https://github.com/knative/build +[4]: https://cd.foundation/ +[5]: https://www.linuxfoundation.org/projects/ +[6]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ +[7]: https://operatorhub.io/what-is-an-operator +[8]: https://opensource.com/sites/default/files/uploads/tekto-terminology.png (Tekton terminology) +[9]: https://tekton.dev/docs/concepts/concept-tasks-pipelines.png +[10]: https://kubebyexample.com/en/concept/pods +[11]: https://opensource.com/sites/default/files/uploads/tekton-pipelines.png (Tekton pipelines) +[12]: https://tekton.dev/docs/concepts/concept-runs.png From 92fe5ebe89e11a6e04d11b4470155f8b7fc64a1d Mon Sep 17 00:00:00 2001 From: "Xiaobin.Liu" Date: Sat, 1 Apr 2023 15:46:09 +0800 Subject: [PATCH 32/83] TSL --- ...r first CI-CD pipeline in Kubernetes with Tekton.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md b/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md index cd25e5ac8c..69cd04b717 100644 --- a/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md +++ b/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md @@ -26,15 +26,15 @@ Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩 构建 CI/CD 流水线的过程非常复杂,因此 Tekton 为每一步都提供工具。以下是 Tekton 提供的主要组件: - * **Pipeline: ** Pipeline 定义了一组 Kubernetes [自定义资源][6],作为你用来组装 CI/CD 流水线的构建块。 - * **Triggers: ** Triggers 是一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。 + * **Pipeline:** Pipeline 定义了一组 Kubernetes [自定义资源][6],作为你用来组装 CI/CD 流水线的构建块。 + * **Triggers:** Triggers 是一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。 * **CLI:**  CLI 提供一个名为 `tkn` 的命令行界面,你可以使用它从终端与 Tekton 进行交互。 * **Dashboard:**  Dashboard 是 Tekton 流水线的一个基于网络的图形界面,显示流水线的执行信息。 * **Catalog:** Catalog 是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。 * **Hub:** Hub 是一个基于网络的图形界面,用于访问 Tekton catalog。 * **Operator:**  Operator 是 Kubernetes 的 [Operator 模式][7],你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。 - * **Chains: ** Chains 是一个 Kubernetes 自定义资源定义Custom Resource Definition(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。 - * **Results: ** Results 旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。 + * **Chains:** Chains 是一个 Kubernetes 自定义资源定义Custom Resource Definition(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。 + * **Results:** Results 旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。 @@ -54,7 +54,7 @@ Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩 (Source: [Tekton documentation][12]) - * **PipelineRun: ** 顾名思义,是一条流水线的具体执行。 + * **PipelineRun:** 顾名思义,是一条流水线的具体执行。 * **TaskRun:** TaskRun 是一个任务的具体执行。你可以选择在流水线外运行一次 TaskRun,可以通过它查看任务中每个步骤执行的具体情况。 From 3792bf79cea11f8854809eda8c62a8ee40b28b18 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 1 Apr 2023 17:38:26 +0800 Subject: [PATCH 33/83] RP @geekpi https://linux.cn/article-15680-1.html --- ...vim on Ubuntu and other Linux Distributions.md | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) rename {translated/tech => published}/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md (63%) diff --git a/translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md b/published/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md similarity index 63% rename from translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md rename to published/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md index 6384e02e01..0aa024a45e 100644 --- a/translated/tech/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md +++ b/published/20230325.0 ⭐️ How to Install and Use Neovim on Ubuntu and other Linux Distributions.md @@ -3,26 +3,26 @@ [#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/" [#]: collector: "lkxed" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15680-1.html" -如何在 Ubuntu 和其他 Linux 发行版上安装和使用 Neovim +如何安装和使用 Neovim ====== -![][1] +![][0] -你一定已经听说过著名的 Vim 文本编辑器。然而,这篇文章是关于它的分支 Neovim。 +> 你一定已经听说过著名的 Vim 文本编辑器。然而,这篇文章是关于它的复刻 Neovim。 -Vim 也是 vi 的一个分叉,这使得 Neovim 成为分叉的分叉。所以,你最终可以使用任何东西,因为它有一些独特的特征。 +Vim 也是 Vi 的一个复刻,这使得 Neovim 成为复刻的复刻。所以,你最终可以使用任何东西,因为它有一些独特的特征。 如果你决定使用 Neovim,让我帮助你在 Ubuntu 和其他 Linux 发行版上开始使用它。 -### Neovim:概述 +### Neovim 概述 ![][2] -[Neovim][3] 是一个以其简单的维护和社区贡献而闻名的项目。此外,开发工作在多个开发人员之间很好地分配。 +[Neovim][3] 是一个以其简单的维护和社区贡献而闻名的项目。此外,开发工作很好地分配在多个开发人员之间。 对于最终用户而言,Neovim 的可扩展性远超人们的预期。Neovim 的目标是在不损害 Vim 传统功能的情况下提供更好的应用。 @@ -30,31 +30,29 @@ Vim 也是 vi 的一个分叉,这使得 Neovim 成为分叉的分叉。所以 ### Neovim 的特点 -虽然你可以在其官方网站及其 [GitHub 页面][5]上探索所有相关信息。让我强调一些特点: +虽然你可以在其官方网站及其 [GitHub 页面][5] 上探索所有相关信息。让我强调一些特点: - 现代图形界面 - 从多种语言访问 API,包括(C/C++、C#、Go、Haskell、Java/Kotlin、JavaScript/Node.js、Lua、Perl、Python、Ruby、Rust 等等) - 嵌入式、可编写脚本的终端仿真器 -- 异步作业控制 +- 异步任务控制 - 多个实例之间的共享数据 - XDG 基本目录支持 - 与大多数 Vim 插件兼容,包括 Ruby 和 Python 插件 -💡 - -我们建议你在开始使用 Vim 和 Neovim 之前了解其用法。 +> 💡 我们建议你在开始使用 Vim 和 Neovim 之前,先了解其用法。 ### 在 Ubuntu 和 Linux 上安装 Neovim 由于 Neovim 的流行,安装它很简单。因为 Neovim 在你选择的任何发行版的官方仓库中都可用。 -如果你需要,我们还有一个[在 Linux 上安装 Vim][6] 的指南。 +> 如果你需要,我们还有一个 [在 Linux 上安装 Vim][6] 的指南。 -要在 Ubuntu 上安装 Neovim,只需单击 Dock 中的 Ubuntu 软件图标。然后,搜索 Neovim。你可以根据自己的喜好选择 snap 或 deb 版本。但是,deb 包版本将是 Neovim 的过时版本。 +要在 Ubuntu 上安装 Neovim,只需单击停靠区中的 Ubuntu 软件图标。然后,搜索 Neovim。你可以根据自己的喜好选择 Snap 或 deb 版本。但是,deb 包版本是过时的 Neovim 版本。 ![neovim listed on ubuntu software center][7] -而且,如果你不想要 snap 版本,你可以从 [Neovim 的 Github 发布页][8]获取最新的 deb 文件。如果你仔细查看发布页面,还有一个 Appimage 文件。 +如果你不想要 Snap 版本,你可以从 [Neovim 的 Github 发布页][8] 获取最新的 deb 文件。如果你仔细查看发布页面,还有一个 Appimage 文件。 如果你想使用终端而不是 GUI,你可以执行以下操作: @@ -82,17 +80,17 @@ sudo dnf install -y neovim flatpak install flathub io.neovim.nvim ``` -最后,要安装 **snap 包**,请使用以下命令: +最后,要安装 **Snap 包**,请使用以下命令: ``` sudo snap install nvim --classic ``` -如果你更喜欢从源代码构建软件,请遵循[项目 Github 页面上给出的步骤][9]。 +如果你更喜欢从源代码构建软件,请遵循该项目的 Github 页面上给出的 [步骤][9]。 ### 如何使用 Neovim -要在安装完成后使用 Neovim,只需从应用菜单启动它,方法是按超级键并输入不带引号的 “neovim”。这将打开一个带有 Neovim 的终端窗口。 +要在安装完成后使用 Neovim,只需从应用菜单启动它,方法是按超级键并输入 `neovim`。这将打开一个带有 Neovim 的终端窗口。 ![][10] @@ -102,17 +100,17 @@ sudo snap install nvim --classic nvim ``` -是的,不是 “neovim”,而是 “**nvim**”。例如,要编辑 _/etc/fstab_,请输入以下命令。 +是的,不是 `neovim`,而是 `nvim`。例如,要编辑 `/etc/fstab`,请输入以下命令: ``` sudo nvim /etc/fstab ``` -现在 fstab 文件将打开,如下面的截图所示。 +现在 fstab 文件将被打开,如下面的截图所示: ![][11] -如果你无法退出编辑器,请不要担心,按下 **Shift+Z+Z**。例如,如果此快捷键令人困惑,请使用你需要的键在任何文本编辑器中输入不带引号的“ZZ”(大写)。 +如果你无法退出编辑器,请不要担心,按下 `Shift+Z+Z`。例如,如果此快捷键令人困惑,请使用你需要的键在任何文本编辑器中输入大写的 `ZZ` 就明白了。 关于这一点,我应该重申,你需要学习 Vim 或 Neovim 并阅读文档才能有效地利用其所有功能。 @@ -122,7 +120,7 @@ sudo nvim /etc/fstab 这只是编辑器的概述。我不是这方面的专家,但我希望这对所有初学者都有好处! -💬 _你使用 Neovim 吗? 在下面的评论中分享你的经验。_ +💬 你使用 Neovim 吗? 在下面的评论中分享你的经验。 -------------------------------------------------------------------------------- @@ -131,7 +129,7 @@ via: https://itsfoss.com/install-neovim/ 作者:[Anuj Sharma][a] 选题:[lkxed][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -147,4 +145,5 @@ via: https://itsfoss.com/install-neovim/ [8]: https://github.com/neovim/neovim/releases/tag/stable?ref=itsfoss.com [9]: https://github.com/neovim/neovim/wiki/Installing-Neovim?ref=itsfoss.com#install-from-source [10]: https://itsfoss.com/content/images/2023/01/neovim-default-screen.png -[11]: https://itsfoss.com/content/images/2023/01/neovim-fstab.png \ No newline at end of file +[11]: https://itsfoss.com/content/images/2023/01/neovim-fstab.png +[0]: https://img.linux.net.cn/data/attachment/album/202304/01/173733iav3pvd88htv38vt.jpg \ No newline at end of file From 56415d250bd3f7c6b0898f085235902fe000f465 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sat, 1 Apr 2023 18:10:27 +0800 Subject: [PATCH 34/83] RP @lxbwolf https://linux.cn/article-15681-1.html --- ...I-CD pipeline in Kubernetes with Tekton.md | 78 +++++++------------ 1 file changed, 30 insertions(+), 48 deletions(-) rename {translated/tech => published}/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md (56%) diff --git a/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md b/published/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md similarity index 56% rename from translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md rename to published/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md index 69cd04b717..094f6a04f2 100644 --- a/translated/tech/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md +++ b/published/20211108 Write your first CI-CD pipeline in Kubernetes with Tekton.md @@ -3,76 +3,63 @@ [#]: author: "Savita Ashture https://opensource.com/users/savita-ashture" [#]: collector: "lujun9972" [#]: translator: "lxbwolf" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15681-1.html" -用 Tekton 编写你在 Kubernetes 中的第一条 CI/CD 流水线 +用 Tekton 在 Kubernetes 中编写你的第一条 CI/CD 流水线 ====== -Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。 -![Plumbing tubes in many directions][1] + +> Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。 + +![][0] Tekton 是一个用于创建持续集成和持续交付(CI/CD)系统的 Kubernetes 原生开源框架。通过对底层实施细节的抽象,它还可以帮助你在多个云供应商或企业内部系统中进行端到端(构建、测试、部署)应用开发。 ### Tekton 介绍 -[Tekton][2] 最初被称为 [Knative Build][3],后来被重组为独立的开源项目,有自己的 [治理组织][4],现在属于 [Linux 基金会][5] 的项目。Tekton 提供了一个集群内的容器镜像构建和部署工作流程,换句话说,它是一个持续集成(CI)和持续交付(CD)服务。它由 Tekton 流水线和几个支持组件如 Tekton CLI、Triggers 和 Catalog 等组成。 +[Tekton][2] 最初被称为 [Knative Build][3],后来被重组为独立的开源项目,有自己的 [治理组织][4],现在是属于 [Linux 基金会][5] 的项目。Tekton 提供了一个集群内的容器镜像构建和部署工作流程,换句话说,它是一个 持续集成continuous integration(CI)和 持续交付continuous delivery(CD)服务。它由 Tekton 流水线和几个支持组件如 Tekton CLI、Triggers 和 Catalog 等组成。 -Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩展被安装和运行,由一套定义了你为流水线创建和复用的构建块的 Kubernetes 定制化资源组成。由于 Tekton 是一种 Kubernetes 原生技术,所以它非常容易扩展。当你需要增加你的工作负载时,你只需向你的集群添加节点就可以了。由于其可扩展的设计和社区贡献的组件库,它也很容易定制。 +Tekton 是一个 Kubernetes 原生应用。它在 Kubernetes 集群中作为扩展被安装和运行,由一套Kubernetes 定制化资源组成,定义了你为流水线创建和复用的构建块。由于 Tekton 是一种 Kubernetes 原生技术,所以它非常容易扩展。当你需要增加你的工作负载时,你只需向你的集群添加节点就可以了。由于其可扩展的设计和社区贡献的组件库,它也很容易定制。 -对于需要 CI/CD 系统来开展工作的开发人员和为其组织内的开发人员建立 CI/CD 系统的平台工程师,Tekton 是理想选择。 +对于需要 CI/CD 系统来开展工作的开发人员,和为其组织内的开发人员建立 CI/CD 系统的平台工程师,Tekton 是理想选择。 ### Tekton 组件 构建 CI/CD 流水线的过程非常复杂,因此 Tekton 为每一步都提供工具。以下是 Tekton 提供的主要组件: - * **Pipeline:** Pipeline 定义了一组 Kubernetes [自定义资源][6],作为你用来组装 CI/CD 流水线的构建块。 - * **Triggers:** Triggers 是一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。 - * **CLI:**  CLI 提供一个名为 `tkn` 的命令行界面,你可以使用它从终端与 Tekton 进行交互。 - * **Dashboard:**  Dashboard 是 Tekton 流水线的一个基于网络的图形界面,显示流水线的执行信息。 - * **Catalog:** Catalog 是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。 - * **Hub:** Hub 是一个基于网络的图形界面,用于访问 Tekton catalog。 - * **Operator:**  Operator 是 Kubernetes 的 [Operator 模式][7],你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。 - * **Chains:** Chains 是一个 Kubernetes 自定义资源定义Custom Resource Definition(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。 - * **Results:** Results 旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。 - - + * 流水线Pipeline: 定义了一组 Kubernetes [自定义资源][6],作为你用来组装 CI/CD 流水线的构建块。 + * 触发器Triggers:一种 Kubernetes 自定义资源,允许你根据从事件有效载荷中提取的信息来创建流水线。例如,你可以在每次创建 Git 仓库的合并请求时,触发流水线的实例化和执行。 + * 命令行CLI:提供一个名为 `tkn` 的命令行界面,你可以使用它从终端与 Tekton 进行交互。 + * 仪表盘Dashboard:是 Tekton 流水线的一个基于网页的图形界面,显示流水线的执行信息。 + * 目录Catalog:是一个高质量的、由社区贡献的 Tekton 构建块(任务、流水线等),可在你自己的流水线中使用。 + * 中心Hub:是一个基于网页的图形界面,用于访问 Tekton 目录。 + * 操作员Operator:是一种 Kubernetes [操作员模式][7],你可以在 Kubernetes 集群中安装、更新、升级和删除 Tekton 项目。 + * Chains:是一个 Kubernetes 自定义资源定义Custom Resource Definition(CRD)控制器,使你可以在 Tekton 中处理供应链安全的问题。正在开发中。 + * 结果Results:旨在帮助用户对 CI/CD 工作负载历史进行逻辑分组,并将长期结果的存储从流水线控制器中分离出来。 ### Tekton 术语 ![Tekton terminology][8] -(Source: [Tekton documentation][9]) - - * **Step:** 步骤(step)是 CI/CD 工作流程中最基本的实体,例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。 - - * **Task:** 任务(task)是按特定顺序排列的步骤的集合。Tekton 以 [Kubernetes pod][10] 的形式运行任务,其中每个步骤都成为 pod 中的一个运行容器。 - - * **Pipelines:** 流水线(pipeline)是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个有向无环图directed acyclic graph(DAG),并按顺序执行图。换句话说,它创建了一些 Kubernetes pod,并确保每个 pod 按预期成功运行。 + * 步骤Step:是 CI/CD 工作流程中最基本的实体,例如为 Python 网络应用程序运行一些单元测试或编译一个 Java 程序。Tekton 使用容器镜像执行每个步骤。 + * 任务Task::** 是按特定顺序排列的步骤的集合。Tekton 以 [Kubernetes 容器荚][10] 的形式运行任务,其中每个步骤都成为 容器荚pod 中的一个运行容器。 +* 流水线Pipelines:是按特定顺序排列的任务的集合。Tekton 把所有任务连接成一个 有向无环图directed acyclic graph(DAG),并按顺序执行图。换句话说,它创建了一些 Kubernetes 容器荚,并确保每个容器荚按预期成功运行。 ![Tekton pipelines][11] -(Source: [Tekton documentation][12]) - - * **PipelineRun:** 顾名思义,是一条流水线的具体执行。 - - * **TaskRun:** TaskRun 是一个任务的具体执行。你可以选择在流水线外运行一次 TaskRun,可以通过它查看任务中每个步骤执行的具体情况。 - - - + * 流水线运行PipelineRun:顾名思义,是一条流水线的具体执行。 + * 任务运行TaskRun:是一个任务的具体执行。你可以选择在流水线外运行一次任务运行,可以通过它查看任务中每个步骤执行的具体情况。 ### 创建你的 CI/CD 流水线 开始使用 Tekton 的最简单方法是自己编写一个简单的流水线。如果你每天都在使用 Kubernetes,那你可能对 YAML 很熟悉,这正是 Tekton 流水线的定义方式。下面是一个克隆代码库的简单流水线的例子。 -首先,创建一个`task.yaml` 文件,用你喜欢的文本编辑器打开它。这个文件定义了你要执行的步骤。在这个例子中,就是克隆一个仓库,所以我把这个步骤命名为 clone。该文件设置了一些环境变量,然后使用一个简单的 shell 脚本来执行克隆。 - -接下来是任务。你可以把步骤看作是一个被任务调用的函数,而任务则设置步骤所需的参数和工作空间。 +首先,创建一个 `task.yaml` 文件,用你喜欢的文本编辑器打开它。这个文件定义了你要执行的 步骤Step。在这个例子中,就是克隆一个仓库,所以我把这个步骤命名为 “clone”。该文件设置了一些环境变量,然后使用一个简单的 shell 脚本来执行克隆。 +接下来是 任务Task。你可以把步骤看作是一个被任务调用的函数,而任务则设置步骤所需的参数和工作空间。 ``` - - apiVersion: tekton.dev/v1beta1 kind: Task metadata: @@ -119,12 +106,9 @@ spec: ``` -创建第二个文件`pipeline.yaml`,并用你喜欢的文本编辑器打开它。这个文件通过设置诸如可以运行和处理任务的工作区等重要参数来定义流水线。 - +创建第二个文件 `pipeline.yaml`,并用你喜欢的文本编辑器打开它。这个文件通过设置诸如可以运行和处理任务的工作区等重要参数来定义流水线。 ``` - - apiVersion: tekton.dev/v1beta1 kind: Pipeline metadata: @@ -159,10 +143,7 @@ spec: 最后,创建一个 `pipelinerun.yaml` 文件,用喜欢的文本编辑器打开它。这个文件真正的运行流水线。它调用流水线中定义的参数(继而调用任务文件中定义的任务)。 - ``` - - apiVersion: tekton.dev/v1beta1 kind: PipelineRun metadata: @@ -202,7 +183,7 @@ via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton 作者:[Savita Ashture][a] 选题:[lujun9972][b] 译者:[lxbwolf](https://github.com/lxbwolf) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -220,3 +201,4 @@ via: https://opensource.com/article/21/11/cicd-pipeline-kubernetes-tekton [10]: https://kubebyexample.com/en/concept/pods [11]: https://opensource.com/sites/default/files/uploads/tekton-pipelines.png (Tekton pipelines) [12]: https://tekton.dev/docs/concepts/concept-runs.png +[0]: https://img.linux.net.cn/data/attachment/album/202304/01/180822blxgx0c1k43n4kl4.jpg \ No newline at end of file From 6f86907a3726bab0c76c0208406c2b8589ba61e6 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 2 Apr 2023 09:59:52 +0800 Subject: [PATCH 35/83] ATRP @wxy https://linux.cn/article-15684-1.html --- ...dOS Aims to Replace All Linux Distributions.md | 92 ++++++++++++++++++ ...dOS Aims to Replace All Linux Distributions.md | 94 ------------------- 2 files changed, 92 insertions(+), 94 deletions(-) create mode 100644 published/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md delete mode 100644 sources/news/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md diff --git a/published/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md b/published/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md new file mode 100644 index 0000000000..e7d4818164 --- /dev/null +++ b/published/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md @@ -0,0 +1,92 @@ +[#]: subject: "blendOS Aims to Replace All Linux Distributions" +[#]: via: "https://news.itsfoss.com/blendos/" +[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" +[#]: collector: "lkxed" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15684-1.html" + +blendOS 的目标:取代所有的 Linux 发行版 +====== + +> Ubuntu Unity 的负责人提出了一个新的发行版,听起来像是每个人都可能想要关注的东西。 + +![blend os][1] + +听起来太牵强了? + +好吧,blendOS 把自己定位为发行版的终极杂拌。 + +blendOS 是 Rudra Saraswat 的一个新项目,他以基于 Ubuntu 的合成版而闻名,特别是 Ubuntu Unity(现在是官方的 [Ubuntu 风味版][3])。 + +我想说的是,这个项目有一个非常准确的名字来表达它想要实现的目标。 + +但是,blendOS 的目标是如何成为所有人的替代品?它到底是什么? + +### blendOS 不只是又一个 Linux 发行版 + +![blendOS][4] + +blendOS 是一个基于 Arch 的发行版,它支持每种类型的应用程序包。 + +如果你了解过 [carbonOS][5] 和 [Vanilla OS][6],你应该对这类发行版中的一些共同点有了了解。 + +其中之一是,**不可变性**,意思是,操作系统的核心/基础保持不变,给你带来增强的安全性,以及更简单和可靠的更新。 + +同样,blendOS 也有以下的关键亮点: + +- 不可变操作系统 +- 支持多个软件包管理器,包括 Apt、DNF、Yum、Pacman 和 Yay +- 支持多种桌面环境 +- Flathub 商店桌面应用 + +[blendOS][7] 使用 Jade GUI(来自 [Crystal Linux][8] 的安装程序)来提供一个无缝的安装体验。而且,Flathub 商店可以直接安装应用程序,而不是像人们想象的那样下载 Flatpakref文件。 + +为了使所有的发行版的软件包都能正常工作,blendOS 使用其软件包管理器 blend。 + +你仍然可以通过 Arch 容器在命令行使用 Pacman。 + +此外,它还支持,T2 Mac,即 2018 年后生产的英特尔 Mac。因此,如果你想在你已经拥有的设备上做实验,blendOS 应该可以使用。 + +> 🚧 截至目前,该项目还处于早期发展阶段。 + +预计一些直接的变化包括: + +![][9] + +- 用 Podman 代替 Distrobox 的实现 +- 一个新的 GUI 配置工具,支持管理覆盖层和容器 + +所以,是的,你现在看到的东西可能会有变化。然而,它仍然是听起来令人激动的东西。 + +你可以在其 [官方博客文章][10] 中阅读其计划中的变化,并在其 [GitHub 页面][11]中探索 blendOS。 + +> **[blendOS][7]** + +你对 blendOS 有什么看法?它值得关注吗?请在评论中告诉我! + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/blendos/ + +作者:[Ankush Das][a] +选题:[lkxed][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/ankush/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/blendOS-first-look.png +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://itsfoss.com/which-ubuntu-install/?ref=its-foss-news +[4]: https://news.itsfoss.com/content/images/2023/03/blend-os.jpg +[5]: https://news.itsfoss.com/carbonos/ +[6]: https://news.itsfoss.com/vanilla-os-debian-ubuntu/ +[7]: https://blendos.co/?ref=its-foss-news +[8]: https://news.itsfoss.com/crystal-linux-dev/ +[9]: https://news.itsfoss.com/content/images/2023/03/blend-settings-containers.png +[10]: https://blendos.co/future-of-blendos/?ref=its-foss-news +[11]: https://github.com/blend-os?ref=its-foss-news diff --git a/sources/news/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md b/sources/news/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md deleted file mode 100644 index d7aa71568a..0000000000 --- a/sources/news/20230327.1 ⭐️ blendOS Aims to Replace All Linux Distributions.md +++ /dev/null @@ -1,94 +0,0 @@ -[#]: subject: "blendOS Aims to Replace All Linux Distributions" -[#]: via: "https://news.itsfoss.com/blendos/" -[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -blendOS Aims to Replace All Linux Distributions -====== - -Ubuntu Unity's lead has come up with a new distro that sounds like something everyone might want to keep an eye on. - -![blend os][1] - -![][2] - -Sounds too far-fetched? - -Well, **blendOS** pitches itself to be the **ultimate distro-blend**. - -blendOS is a new project by **Rudra Saraswat**, known for Ubuntu-based remixes, and Ubuntu Unity in particular (which is now an official [Ubuntu flavour][3]). - -I would say the project has a pretty accurate name for what it wants to achieve. - -_But, how does blendOS aim to be a replacement to all? What is it all about?_ - -### blendOS: Not Just Another Linux Distribution - -![blendOS][4] - -blendOS is an Arch-based distro which supports every type of app package. - -If you have read about **[carbonOS][5]** and **[Vanilla O][6]**[S][6], you should have a good idea about some common points among such distros. - -One of them being, **immutability**, meaning, the core/base of the operating system remains unchanged, giving you an enhanced security, and simpler, and reliable updates. - -Similarly, blendOS has the following key highlights: - -- Immutable operating system -- Support for multiple package managers including **apt, dnf, yum, pacman, and yay** -- Multiple desktop environment support -- Flathub Store as a desktop app - -[blendOS][7] uses Jade GUI (the installer from [Crystal Linux][8]) to provide a seamless installation experience. And, the Flathub store can directly install apps, and not download flatpakref files, as one would expect. - -To make all distribution packages work, blendOS uses its package manager **blend.** - -You can still use pacman from a shell through an Arch container. - -Additionally, it supports, T2 macs, i.e., Intel Macs made after 2018. So, if you want to experiment on a device that you already have, blendOS should work with it. - -> 🚧 As of now, the project is at its early stages of development. - -Some immediate changes expected include: - -![][9] - -- Distrobox to be replaced with its implementation using Podman -- A new GUI configuration tool, with support for managing overlays and containers - -So, yes, what you see right now is subject to change. However, it is still something that sounds exciting. - -You can read about its planned changes in its [official blog post][10] and explore blendOS on its [GitHub page][11]. - -[blendOS][7] - -_💬 What do you think about blendOS? Is it worth keeping an eye out for? Let me know in the comments!_ - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/blendos/ - -作者:[Ankush Das][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/ankush/ -[b]: https://github.com/lkxed/ -[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/blendOS-first-look.png -[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[3]: https://itsfoss.com/which-ubuntu-install/?ref=its-foss-news -[4]: https://news.itsfoss.com/content/images/2023/03/blend-os.jpg -[5]: https://news.itsfoss.com/carbonos/ -[6]: https://news.itsfoss.com/vanilla-os-debian-ubuntu/ -[7]: https://blendos.co/?ref=its-foss-news -[8]: https://news.itsfoss.com/crystal-linux-dev/ -[9]: https://news.itsfoss.com/content/images/2023/03/blend-settings-containers.png -[10]: https://blendos.co/future-of-blendos/?ref=its-foss-news -[11]: https://github.com/blend-os?ref=its-foss-news From 262019e4e27901b1c4b098d3eaa005c68279f36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sun, 2 Apr 2023 12:02:33 +0800 Subject: [PATCH 36/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][ne?= =?UTF-8?q?ws]:=2020230401.0=20=E2=AD=90=EF=B8=8F=20Enough=20of=20it!=20Ub?= =?UTF-8?q?untu=20to=20Ditch=20Snap=20Completely=20With=2024.04=20LTS=20Na?= =?UTF-8?q?ughty=20Nightingale.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mpletely With 24.04 LTS Naughty Nightingale.md | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md diff --git a/sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md b/sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md new file mode 100644 index 0000000000..ff7f46d15a --- /dev/null +++ b/sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md @@ -0,0 +1,66 @@ +[#]: subject: "Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale" +[#]: via: "https://news.itsfoss.com/ubuntu-ditch-snap/" +[#]: author: "Abhishek https://news.itsfoss.com/author/root/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale +====== + +On this historic date, Canonical has decided to abandon the Snap project and remove it completely in the upcoming release of 24.04 codenamed Naughty Nightingale. + +![Snap Ubuntu][1] + +![][2] + +Despite putting so much weight behind Snap, Ubuntu continues to lose in the race of 'universal Linux packaging'. + +While all kinds of distros are adopting Fedora's Flatpak, Ubuntu's Snap is being rejected even by Ubuntu-based distros like Linux Mint and elementary OS. + +Nitrux, Vanilla, gLinux, and many more distros have [ditched Ubuntu for Debian][3], and Snap probably played a role in the decision-making. + +This continued rejection has disheartened the Snap team, who worked hard to force people into liking Snap by [disguising Snap apps as apt packages][4]. + +So, in a recent discussion at UbuntuCon, Canonical management decided to phase out Snap development and its integration into Ubuntu core. + +> After the initial resistance, some Linux users have started liking Snap, just as few people got attached to Unity. This is a scary situation for us. From Ubuntu One to Unity and Mir, we have abandoned projects in the past. We can do it again for the greater good. + +The development is ceased immediately and the work will begin to decouple Snap from Ubuntu. The next LTS release, 24.04 Naughty Nightingale, will see no traces of Snap. + +Not everyone is happy with the decision, of course. + +In an anonymous Reddit post, a Snap developer shares: + +> Snap is a craft and we have crafted the Snap to perfection. We worked so hard that if anyone searches for 'how to install xyz application on Linux', the Snapcraft pages comes up first to suggest using Snap packages. And now our effort is being discarded in a Snap. + +The Canonical management is aware of the concern. They are considering open sourcing Snap so that others can pick up the project to continue the development, just like Ubuntu Touch and Unity. + +If someone wants to develop a 'Ubuntu Snap Remix', we could even consider awarding it official flavor status, Canonical revealed. + +This decision has left _all_ the Snap fans in shock and denial. But the decision has been made and this date will become part of history. _**Mark the date.**_ + +You can read the official discussion and announcement on the page below. + +[Official Announcement][5] + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/ubuntu-ditch-snap/ + +作者:[Abhishek][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/root/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/04/ubuntu-snap.png +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://news.itsfoss.com/vanilla-os-debian-ubuntu/ +[4]: https://news.itsfoss.com/ubuntu-firefox-snap-default/ +[5]: https://en.wikipedia.org/wiki/April_Fools%27_Day?ref=its-foss-news \ No newline at end of file From 728b56901d42cb9fac2e4303c7fe9b07e3c05d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sun, 2 Apr 2023 12:03:04 +0800 Subject: [PATCH 37/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230401.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Usin?= =?UTF-8?q?g=20mocks=20in=20Python.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20230401.1 ⭐️⭐️ Using mocks in Python.md | 425 ++++++++++++++++++ 1 file changed, 425 insertions(+) create mode 100644 sources/tech/20230401.1 ⭐️⭐️ Using mocks in Python.md diff --git a/sources/tech/20230401.1 ⭐️⭐️ Using mocks in Python.md b/sources/tech/20230401.1 ⭐️⭐️ Using mocks in Python.md new file mode 100644 index 0000000000..834d711a8c --- /dev/null +++ b/sources/tech/20230401.1 ⭐️⭐️ Using mocks in Python.md @@ -0,0 +1,425 @@ +[#]: subject: "Using mocks in Python" +[#]: via: "https://opensource.com/article/23/4/using-mocks-python" +[#]: author: "Moshe Zadka https://opensource.com/users/moshez" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Using mocks in Python +====== + +April 1st is all about fake stories and pretending. This makes it the perfect day to talk about mocking. + +Sometimes, using real objects is hard, ill-advised, or complicated. For example, a `requests.Session` connects to real websites. Using it in your unittests invites a…lot…of problems. + +### Basic mocking in Python + +"Mocks" are a unittest concept. They produce objects that are substitutes for the real ones. + +``` +from unittest import mock +``` + +There's a whole cottage industry that will explain that "mock", "fake", and "stub" are all subtly different. In this article, I use the terms interchangeably. + +``` +regular = mock.MagicMock() + +def do_something(o): + return o.something(5) + +do_something(regular) +``` + +This code produces: + +``` + +``` + +Mocks have all the methods. The methods usually return another Mock. This can be changed by assigning it to `return_value`. + +For example, suppose you want to call the following function: + +``` +def do_something(o): + return o.something() + 1 +``` + +It requires something which has the `.something()` method. Luckily, mock objects have it: + +``` +obj = mock.MagicMock(name="an object") +obj.something.return_value = 2 +print(do_something(obj)) +``` + +The answer: + +``` +3 +``` + +It is also possible to override the "magic methods": + +``` +a = mock.MagicMock() +a.__str__.return_value = "an a" +print(str(a)) +``` + +The answer: + +``` +an a +``` + +### The spec + +Make sure that a mock does not have "extra" methods or attributes by using a spec. For example, here's some code that should fail: + +``` +import pathlib + +def bad_pathlib_usage(path): + ## TYPO: missing underscore + path.writetext("hello") + +dummy_path = mock.MagicMock(spec=pathlib.Path) + +try: + bad_pathlib_usage(dummy_path) +except Exception as exc: + print("Failed!", repr(exc)) +``` + +The result: + +``` +Failed! AttributeError("Mock object has no attribute 'writetext'") +``` + +### Mock side effect + +Sometimes, having a `MagicMock` that returns the same thing every time isn't quite everything you need it to be. For example, `sys.stdin.readline()` usually returns different values, not the same value throughout the test. + +The property `side_effect` allows controlling what a magic mock returns on a more detailed level than using `return_value`. + +### Iterable + +One of the things that can be assigned to `side_effect` is an _iterable_, such as a sequence or a generator. + +This is a powerful feature. It allows controlling each call's return value, with little code. + +``` +different_things = mock.MagicMock() +different_things.side_effect = [1, 2, 3] +print(different_things()) +print(different_things()) +print(different_things()) +``` + +The output: + +``` +1 +2 +3 +``` + +A more realistic example is when simulating file input. In this case, I want to be able to control what `readline` returns each time to pretend it's file input: + +``` +def parse_three_lines(fpin): + line = fpin.readline() + name, value = line.split() + modifier = fpin.readline().strip() + extra = fpin.readline().strip() + return {name: f"{value}/{modifier}+{extra}"} + +from io import TextIOBase + +filelike = mock.MagicMock(spec=TextIOBase) +filelike.readline.side_effect = [ + "thing important\n", + "a-little\n", + "to-some-people\n" +] +value = parse_three_lines(filelike) +print(value) +``` + +The result: + +``` +{'thing': 'important/a-little+to-some-people'} +``` + +### Exception + +Another thing that's possible is assigning an exception to the `side_effect` attribute. This causes the call to raise the exception you assigned. Using this feature allows simulating edge conditions in the environment, usually precisely the ones that: + +- You care about +- Are hard to simulate realistically + +One popular case is network issues. As per Murphy's law, they always happen at 4 AM, causing a pager to go off, and never at 10 AM when you're sitting at your desk. The following is based on real code I wrote to test a network service. + +In this simplified example, the code returns the length of the response line, or a negative number if a timeout has been reached. The number is different based on when in the protocol negotiation this has been reached. This allows the code to distinguish "connection timeout" from "response timeout", for example. + +Testing this code against a real server is hard. Servers try hard to avoid outages! You could fork the server's C code and add some chaos or you can just use `side_effect` and mock: + +``` +import socket + +def careful_reader(sock): + sock.settimeout(5) + try: + sock.connect(("some.host", 8451)) + except socket.timeout: + return -1 + try: + sock.sendall(b"DO THING\n") + except socket.timeout: + return -2 + fpin = sock.makefile() + try: + line = fpin.readline() + except socket.timeout: + return -3 + return len(line.strip()) + +from io import TextIOBase +from unittest import mock + +sock = mock.MagicMock(spec=socket.socket) +sock.connect.side_effect = socket.timeout("too long") +print(careful_reader(sock)) +``` + +The result is a failure, which in this case means a successful test: + +``` +-1 +``` + +With careful side effects, you can get to each of the return values. For example: + +``` +sock = mock.MagicMock(spec=socket.socket) +sock.sendall.side_effect = socket.timeout("too long") +print(careful_reader(sock)) +``` + +The result: + +``` +-2 +``` + +### Callable + +The previous example is simplified. Real network service test code must verify that the results it got were correct to validate that the server works correctly. This means doing a synthetic request and looking for a correct result. The mock object has to emulate that. It has to perform some computation on the inputs. + +Trying to test such code without performing any computation is difficult. The tests tend to be too insensitive or too "flakey". + +- An insensitive test is one that does not fail in the presence of bugs. +- A flakey test is one that sometimes fails, even when the code is correct. + +Here, my code is incorrect. The insensitive test does not catch it, while the flakey test would fail even if it was fixed! + +``` +import socket +import random + +def yolo_reader(sock): + sock.settimeout(5) + sock.connect(("some.host", 8451)) + fpin = sock.makefile() + order = [0, 1] + random.shuffle(order) + while order: + if order.pop() == 0: + sock.sendall(b"GET KEY\n") + key = fpin.readline().strip() + else: + sock.sendall(b"GET VALUE\n") + value = fpin.readline().strip() + return {value: key} ## Woops bug, should be {key: value} +``` + +The following would be too "insensitive", not detecting the bug: + +``` +sock = mock.MagicMock(spec=socket.socket) +sock.makefile.return_value.readline.return_value = "interesting\n" +assert yolo_reader(sock) == {"interesting": "interesting"} +``` + +The following would be too "flakey," detecting the bug even if it's not there, sometimes: + +``` +for i in range(10): + sock = mock.MagicMock(spec=socket.socket) + sock.makefile.return_value.readline.side_effect = ["key\n", "value\n"] + if yolo_reader(sock) != {"key": "value"}: + print(i, end=" ") +``` + +For example: + +``` +3 6 7 9 +``` + +The final option of getting results from a mock object is to assign a callable object to `side_effect`. This calls `side_effect` to simply call it. Why not just assign a callable object directly to the attribute? Have patience, I'll get to that in the next part! + +In this example, my callable object (just a function) assigns a `return_value` to the attribute of another object. This isn't that uncommon. I'm simulating the environment, and in a real environment, poking one thing often affects other things. + +``` +sock = mock.MagicMock(spec=socket.socket) +def sendall(data): + cmd, name = data.decode("ascii").split() + if name == "KEY": + sock.makefile.return_value.readline.return_value = "key\n" + elif name == "VALUE": + sock.makefile.return_value.readline.return_value = "value\n" + else: + raise ValueError("got bad command", name) +sock.sendall.side_effect = sendall +print(yolo_reader(sock), dict(key="value")) +``` + +The result: + +``` +{'value': 'key'} {'key': 'value'} +``` + +### Mock call arguments: x-ray for code + +When writing a unit test, you are "away" from the code but trying to peer into its guts to see how it behaves. The Mock object is your sneaky spy. After it gets into the production code, it records everything faithfully. This is how you can find what your code does and whether it's the right thing. + +### Call counts + +The simplest thing is to just make sure that the code is called the expected number of times. The `.call_count` attribute is exactly what counts that. + +``` +def get_values(names, client): + ret_value = [] + cache = {} + for name in names: + # name = name.lower() + if name not in cache: + value = client.get(f"https://httpbin.org/anything/grab?name={name}").json()['args']['name'] + cache[name] = value + ret_value.append(cache[name]) + return ret_value + +client = mock.MagicMock() +client.get.return_value.json.return_value = dict(args=dict(name="something")) +result = get_values(['one', 'One'], client) +print(result) +print("call count", client.get.call_count) +``` + +The results: + +``` +['something', 'something'] +call count 2 +``` + +One benefit of checking `.call_count >= 1` as opposed to checking `.called` is that it is more resistant to silly typos. + +``` +def call_function(func): + print("I'm going to call the function, really!") + if False: + func() + print("I just called the function") + +func = mock.MagicMock() +call_function(func) +print(func.callled) # TYPO -- Extra "l" +``` + +``` +I'm going to call the function, really! +I just called the function + +``` + +Using `spec` diligently can prevent that. However, `spec` is not recursive. Even if the original mock object has a spec, rare is the test that makes sure that every single attribute it has also has a spec. However, using `.call_count` instead of `.called` is a simple hack that completely eliminates the chance to make this error. + +### Call arguments + +In the next example, I ensure the code calls the method with the correct arguments. When automating data center manipulations, it's important to get things right. As they say, "To err is human, but to destroy an entire data center requires a robot with a bug." + +We want to make sure our Paramiko-based automation correctly gets the sizes of files, even when the file names have spaces in them. + +``` +def get_remote_file_size(client, fname): + client.connect('ssh.example.com') + stdin, stdout, stderr = client.exec_command(f"ls -l {fname}") + stdin.close() + results = stdout.read() + errors = stderr.read() + stdout.close() + stderr.close() + if errors != '': + raise ValueError("problem with command", errors) + return int(results.split()[4]) + +fname = "a file" +client = mock.MagicMock() +client.exec_command.return_value = [mock.MagicMock(name=str(i)) for i in range(3)] +client.exec_command.return_value[1].read.return_value = f"""\ +-rw-rw-r-- 1 user user 123 Jul 18 20:25 {fname} +""" +client.exec_command.return_value[2].read.return_value = "" +result = get_remote_file_size(client, fname) +assert result == 123 +[args], kwargs = client.exec_command.call_args +import shlex +print(shlex.split(args)) +``` + +The results: + +``` +['ls', '-l', 'a', 'file'] +``` + +Woops! That's not the right command. Good thing you checked the arguments. + +### Deep dive into mocks + +Mocks have a lot of power. Like any powerful tool, using it improperly is a fast way to get into a big mess. But properly using the `.return_value`, `.side_effect`, and the various `.call*` properties, it's possible to write the best sort of unit tests. + +A good unit test is one that: + +- Fails in the presence of incorrect code +- Passes in the presence of correct code + +"Quality" is not binary. It exists on a spectrum. The _badness_ of a unit test is determined by: + +- How many errors it lets pass. That's a "missing alarm" or "false negative". If you're a statistician, it's a "type 2 error". +- How many _correct_ code changes it fails. That's a "false alarm" or "false positive". If you're a statistician, it's a "type 1 errors". + +When using a mock, take the time and think about both metrics to evaluate whether this mock and this unit test, will help or hinder you. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/4/using-mocks-python + +作者:[Moshe Zadka][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/moshez +[b]: https://github.com/lkxed/ From c617bbb919192e87ee5e1d26c65cf5d49f73382a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sun, 2 Apr 2023 12:03:35 +0800 Subject: [PATCH 38/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230401.2=20=E2=AD=90=EF=B8=8F=20Write=20a=20cute=20pro?= =?UTF-8?q?gram=20with=20Emojicode.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... ⭐️ Write a cute program with Emojicode.md | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md diff --git a/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md b/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md new file mode 100644 index 0000000000..134ed12c55 --- /dev/null +++ b/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md @@ -0,0 +1,192 @@ +[#]: subject: "Write a cute program with Emojicode" +[#]: via: "https://opensource.com/article/23/4/emojicode" +[#]: author: "Jessica Cherry https://opensource.com/users/cherrybomb" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Write a cute program with Emojicode +====== + +In this article, I'll cover the greatest coding language to learn how to make anything! It's called Emojicode. Created in 2014 by Theo Belaire, Emojicode is an open source programming language that uses emoji characters to represent its syntax. When working in Emojicode, emoji are used to create variables, functions, and control structures. Because it's a statically typed language, variable types must be declared before use, but it also supports object-oriented concepts like classes and inheritance. This language can be run on every OS, and it's a super fun way to code, especially if you're a non-native English speaker. This is helpful because pictographic representations can bring us all together and allow us to speak the same language in a way similar to math. + +### Prerequisites + +In this tutorial, I'm using a Debian-based OS. My tools may be different than what your OS may require. Here's what I'm using: + +- [Geany][1], an open source IDE for Linux. +- IBus, which allows you to pick emoji and place them in your editor. The interface I'm using is called **emoji picker**. +- Debian-based Linux. +- A C++ compiler. I'm using the `g++` compiler. +- [Emojicode][2] + +I'm using a Linux OS, but you can [read the docs][3] to learn about any special steps you might need to take to use it on another OS. + +### Intall Emojicode on Linux + +There are a couple ways to install Emojicode on your computer, but they have a cool [magic install page][4] that can tell you exactly what to do. Here's what I did: + +``` +$ wget https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz -O emojicode.tar.gz \ +&& tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \ +&& cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \ +&& cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64 +``` + +This is the output of that command. + +![The emojicode installation procedure provides useful feedback along the way.][5] + +Now that you have everything installed, it's time to move on to some code! + +### How does this whole thing work? + +To start, all Emojicode file extensions end in filename.🍇 but because you can't do that in your average file name, it translates to `filename.emojic`. Here are the most important syntax elements: + +- Put 🏁 at the beginning of a line to indicate what blocks of code are meant to be executed +- Start a block of code with 🍇 +- End a block of code using 🍉 +- Want to print something? Just use 😀 🔤 `` 🔤 ❗ + +There's way more to it, so here are some practical examples. + +### Print a haiku + +First up, try printing a nice haiku for fun! I'll add a single comment in this example. See if you can identify it. + +``` +🏁🍇 +💭 This is a single line comment for fun +😀 🔤Emojicode is great,🔤 ❗ +😀 🔤Fun and expressive code,🔤 ❗ +😀 🔤no sadness, just joy.🔤 ❗ +🍉 +``` + +Now we need to save our code and run it through our compiler to make a nice executable file: + +``` +$ emojicodec haiku.emojic +$ ls +haiku haiku.emojic haiku.o +``` + +As you can see, the code has been compiled and generated two files, one of which is executable. Run the `haiku` file: + +``` +$ ./haiku +Emojicode is great, +Fun and expressive code, +no sadness, just joy. +``` + +### Math and variable manipulation + +Next up, you're going to do a couple of things at once: a little bit of math and the changing of the variable. Start by assigning a variable to 0: + +``` +0 ➡️ 🖍🆕x +``` + +You just created a new variable by using the crayon emoji, and the new emoji next to the variable name, while also assigning that variable to 0. + +Next, print a line that includes the variable using the magnets emoji: + +``` +😀 🔤The value is 🧲x🧲 🔤 ❗ +``` + +Next, change the variable using the plus sign and arrow emojis: + +``` +x ⬅️➕ 1 +``` + +Then print another line with the value. I continue this for a while and print the final value. Here's what I did: + +``` +🏁 🍇 + +💭Updating a variable using math +0 ➡️ 🖍🆕x +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➕ 1 +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➕ 15 +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➖ 9 +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➗ 2 +😀 🔤The final value is 🧲x🧲 🔤 ❗ +🍉 +``` + +Next, compile the code using `emojicodec`, and then use your executable code to see the outcome: + +``` +$ emojicodec math.emojic +$ ./math +The value is 0 +The value is 1 +The value is 16 +The value is 7 +The final value is 3 +``` + +As you can see, everything printed out as the variable was updated with the new math. You can take this even further with the many mathematic emojis available. Here are just a few more operators: + +``` +🚮 is your modulo +◀ Less than +▶ Greater than +◀🙌 less than or equal to +▶🙌 greater than or equal to +``` + +### Emojicode quirks + +While I was bouncing around the docs, I found some interesting quirks. One of those is that while grabbing input from a user, the skin tone of the ear matters due to some known compiler issue. + +The action for getting user input is this: + +``` +🆕🔡▶️👂🏼❗️ +``` + +The action for getting and assigning user input is this: + +``` +🆕🔡▶️👂🏼❗️ ➡️ inputText +``` + +I was attempting to get that to work but was having some issues with my compiler when I found that. You may also run into some small things here and there. If you do, be sure to create an [issue][6], so it has a chance of being fixed. + +### No tricks, just great code + +While I could go through so much more, I can assure you the docs behind this amazing code are very extensive. Even though I was inspired to write this article just for fun in time April Fool's Day, I have to admit this is one of the best languages ever made because it teaches you a lot about very real programming concepts. I earnestly suggest this as a fun way to teach some of your friends, kids, or maybe a classmate, who is interested in coding. Hopefully, you have a fun-filled April Fool's Day! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/4/emojicode + +作者:[Jessica Cherry][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/cherrybomb +[b]: https://github.com/lkxed/ +[1]: https://github.com/geany/geany +[2]: https://github.com/emojicode/emojicode +[3]: https://www.emojicode.org/docs/ +[4]: https://www.emojicode.org/docs/guides/ +[5]: https://opensource.com/sites/default/files/2023-03/emoji.webp +[6]: https://github.com/emojicode/emojicode/issues From 5a9bdd088966c09fdf5dfc34a3741f349a8bc24f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Sun, 2 Apr 2023 12:05:32 +0800 Subject: [PATCH 39/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230401.3=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=2010?= =?UTF-8?q?=20Tweaks=20to=20Supercharge=20Gedit=20as=20Code=20Editor.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... 10 Tweaks to Supercharge Gedit as Code Editor.md | 239 ++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md diff --git a/sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md b/sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md new file mode 100644 index 0000000000..fa7fac9c06 --- /dev/null +++ b/sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md @@ -0,0 +1,239 @@ +[#]: subject: "10 Tweaks to Supercharge Gedit as Code Editor" +[#]: via: "https://itsfoss.com/gedit-tweaks/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +10 Tweaks to Supercharge Gedit as Code Editor +====== + +![][1] + +GNOME may have ditched Gedit as the default text editor but it is still a favorite of long-time Linux users. + +It is primarily a text editor, but with some tweaks, it can work as a lightweight code editor. + +Yeah! Why use VS Code or other dedicated code editors for writing Bash scripts or simple programs in other languages? Gedit saves the day. + +I'll share some of my favorite Gedit tips and tricks in this article. While most of the tweaks are beneficial for writing codes, some could be helpful for general text writing as well. + +### 1. Install plugins + +Few people don't even know that Gedit has a robust plugin feature. You can install plugins to get additional features. + +There are two kinds of plugins: + +- Official Gedit plugins that are accessible from the editor menu +- Third-party plugins that can be downloaded from the project websites and placed into the plugins directory (discussed below) + +The Gedit plugins can be located in `/usr/share/gedit/plugins` or  `~/.local/share/gedit/plugins` directories. + +![][2] + +You can access the available and installed plugins by clicking the Hamburger menu and then opening the Preference window, + +![][3] + +The Preferences window has the Plugins tab and you can see all the plugins available to you. You can use the checkbox to enable and disable the plugins. + +![][4] + +### 2. Show file browser in the side panel + +If you are working on a project that has multiple files and folders, getting the file browser to see all the available files in the sidebar is quite helpful. + +Go to **Preferences -> Plugins** and enable the **File Browser Panel**. + +![][5] + +After that, click on the hamburger menu at top right and enable the Side Panel View from Menu **View -> Side Panel** + +Now change the side panel view to file browser, if not already. + +![][6] + +### 3. Embed a terminal + +Yes! You can embed a terminal right into the Gedit text editor. + +What's the point? Well, if you are writing programs or scripts, an embed terminal helps you run the script and check the code changes right there in the editor. + +![][7] + +To get this, first install the plugin (for Ubuntu): + +``` +sudo apt install gedit-plugin-terminal +``` + +Once the plugin is installed, enable it from Preferences->Plugin. + +![][8] + +Mow, enable bottom panel from hamburger menu -> **View -> Bottom Panel** + +![][9] + +### 4. Markdown preview + +Love Markdown? Me too! + +There are several Markdown editors available for Linux but you don't have to install another application just to use Markdown. + +With the help of a plugin, unsurprisingly called [Gedit Markdown Preview][10], Gedit is perfectly capable of rendering Markdown code. + +Arch users can find it in the AUR as gedit-plugin-markdown_preview package. + +Other Linux users can find the [installation instructions on the project webpage][11]. + +Once it is installed, enable it in plugins. You must enable the side panel view from the hamburger menu --> View > Side panel + +![][12] + +With that, it starts showing rendered text for Markdown text in the side or bottom pane. + +![][13] + +### 5. Create snippets + +_Good coders code. Better coders reuse._ + +If you find yourself reusing same piece of code or text, you can save it as snippet and insert it when needed. This will save you some time (and frustration). + +Enable the Snippet plugin first. + +![][14] + +Now you can access the snippets from **Hamburger Menu -> Manage Snippets** + +![][15] + +You'll find that it already has several snippets added for various programming languages. + +![][16] + +You can also add your snippets in the desired folder by clicking the + sign on the bottom left. You may also assign a shortcut key to snippets to insert them even more quickly. + +![][17] + +For example, I added a new snippet for [adding a Markdown table][18] and assigned a keyboard shortcut and tab trigger to it (as seen in the above image). Now, if I press **CTRL + Alt + S** in a Markdown document, a table is added. Alternatively, typing **table** and pressing the TAB key also adds the Markdown table. + +> 💡 Usually, the snippets are saved in `/usr/share/gedit/plugins/snippet` folder as XM docs, but I could not find where the newly added snippets are saved. + +### 6. Fix the dark mode problem + +Coders love dark mode. Gedit adheres to the system theme, and if you switch to dark mode at the OS level, it also switches to dark mode. + +The one major problem is that you cannot read anything on the currently selected line because both text and line highlights are white colored. + +![][19] + +There is no fix for this. However, a workaround is to either disable highlighting the current line or use a different color scheme.I prefer choosing a different color scheme. + +Go to Preferences -> Font & Colors and then select a dark color scheme like Oblivion. It will change the color scheme a little but at least you will be able to see the text on the highlighted lines. + +![][20] + +### 7. Quick highlight selected text + +Double-click a word and Gedit highlights all the occurrences of the same word in the entire document. + +![][21] + +This feature is not enabled by default though an official plugin is available. + +Go to Preferences -> Plugins and enable the Quick Highlight option. + +![][22] + +### 8. Show line numbers + +Many code editors show the line numbers by default. It helps you quickly go to the line when you see a 'syntax error at line X'. + +You can enable line numbers by going to **Preferences -> View -> Display Line Numbers:** + +![][23] + +You may also enable or disable it from the bottom. + +![][24] + +### 9. Save a version + +If you are modifying a file, perhaps it would be better to create a backup copy? Gedit can do this automatically. + +Enable this feature in **preferences -> Editor -> Create a Backup copy**. + +![][25] + +A file with the name of the original file appended with a `~` symbol will appear as the backup file. + +![][26] + +### 10. Autosave files + +Since we are talking about versions and backups, how about [enabling autosave in Gedit][27]? This way, if you are working on a document and forgot to save it using Ctrl+S manually, the changes get saved automatically. + +> 🚧 This feature does NOT work on a completely new document that has never been saved on the disk. + +From **Preferences -> Editor**, you can enable the Autosave feature. By default, it autosaves every 10 minutes but you can change the duration to your liking. + +![][28] + +There is also a third-party [smart-auto-save extension][29] that autosaves the document as soon as you stop typing it. + +![][30] + +### Know more Gedit tricks? + +One of the joys of using any piece of software is discovering it's not-so-obvious features. + +Which Gedit tweaks you liked the most here? Do you know a killer Gedit feature that not many people are aware of? Share it with us in the comments? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/gedit-tweaks/ + +作者:[Abhishek Prakash][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-gedit-plugin-saved-to-the-directory.png +[3]: https://itsfoss.com/content/images/2023/03/ACCESS-PREFERENCES.png +[4]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-plugins-in-prefereneces.png +[5]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-plugin-in-preferences.png +[6]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-as-a-side-pane.png +[7]: https://itsfoss.com/content/images/2023/03/TERMINAL-gedit-embedded-terminal.png +[8]: https://itsfoss.com/content/images/2023/03/TERMINAL-embedded-terminal-plugin-in-plugins-tab.png +[9]: https://itsfoss.com/content/images/2023/03/TERMINAL-enable-bottom-panel-for-embedded-terminal.png +[10]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com +[11]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com#installation +[12]: https://itsfoss.com/content/images/2023/03/ENABLE-SIDE-PANEL.png +[13]: https://itsfoss.com/content/images/2023/03/MARKDOWN-PREVIEW-markdown-preview.png +[14]: https://itsfoss.com/content/images/2023/03/ENABLE-SNIPPET-PLUGLIN.png +[15]: https://itsfoss.com/content/images/2023/03/ACCESS-MANAGE-SNIPPET.png +[16]: https://itsfoss.com/content/images/2023/03/SNIPPET-pre-created-snippets-in-gedit-showing-cpp-main-snippet.png +[17]: https://itsfoss.com/content/images/2023/03/adding-a-custom-markdown-table-snippet.png +[18]: https://itsfoss.com/markdown-table/ +[19]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-text-not-visible-in-highlight-line.png +[20]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-settting-a-new-clor-scheme-to-the-dark-mode-font-issue.png +[21]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-result.png +[22]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-already-available-plugin-no-external-needed.png +[23]: https://itsfoss.com/content/images/2023/03/LINE-NUMBER-display-line-numbers-in-gedit.png +[24]: https://itsfoss.com/content/images/2023/03/SHOW-LINE-NUMBERS.png +[25]: https://itsfoss.com/content/images/2023/03/SAVE-BACKUP.png +[26]: https://itsfoss.com/content/images/2023/03/VERSION-in-file-manager.png +[27]: https://itsfoss.com/how-to-enable-auto-save-feature-in-gedit/ +[28]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-files-the-built-in-save-function-that-saves-the-document-after-some-time.png +[29]: https://github.com/seanh/gedit-smart-autosave/?ref=itsfoss.com +[30]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-Smart-auto-save.png +[31]: https://itsfoss.com/flatpak-tips-tweaks/ From 1c0b7fea2ab830c76657b281a7ad2d3dddff5b60 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Sun, 2 Apr 2023 13:56:37 +0800 Subject: [PATCH 40/83] ATRP @wxy https://linux.cn/article-15685-1.html --- ... things Linux sysadmins can do with systemd.md | 107 ++++++++++++++++++ ... things Linux sysadmins can do with systemd.md | 102 ----------------- 2 files changed, 107 insertions(+), 102 deletions(-) create mode 100644 published/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md delete mode 100644 sources/tech/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md diff --git a/published/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md b/published/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md new file mode 100644 index 0000000000..cbec0d48ea --- /dev/null +++ b/published/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md @@ -0,0 +1,107 @@ +[#]: subject: "3 surprising things Linux sysadmins can do with systemd" +[#]: via: "https://opensource.com/article/23/3/3-things-you-didnt-know-systemd-could-do" +[#]: author: "Alan Smithee https://opensource.com/users/alansmithee" +[#]: collector: "lkxed" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15685-1.html" + +三件可以用 systemd 做的令人惊讶的事情 +====== + +![][0] + +> 它不仅仅是为了让你的电脑启动得更快。 + +当 systemd 刚问世时,有很多关于它能加快启动时间的消息。这项功能对大多数人都有吸引力(对那些不重启的人来说就不那么重要了),所以在很多方面,这也是它今天仍然拥有的声誉。虽然 systemd 确实是在启动过程中并行启动服务起到了作用,但它的作用远不止于此。以下是你可能没有意识到 systemd 可以做的三件事,但你应该好好利用。 + +### 1、简化 Linux ps + +如果你曾经使用过 `ps`,甚至只是 `top` 命令,那么你就会知道你的电脑一直都在运行数百个进程。有时,这正是你需要的信息,以便了解你的计算机或其用户在做什么。其他时候,你真正需要的是一个总体的概览。 + +`systemd-cgtop` 命令提供了一个基于控制组cgroup任务安排的计算机负载的简单视图。[控制组][2] 对现代 Linux 很重要,基本上是容器和 Kubernetes 的底层支持结构(这也是云计算可以扩展的原因),但它们也是家庭电脑上的有用结构。例如,从 `systemd-cgtop` 的输出中,你可以看到用户进程的负载,而不是系统进程: + +``` +Control Group Proc+ %CPU Memory Input/s Output/s +/ 183 5.0 1.6G 0B 3.0M +user.slice 4 2.8 1.1G 0B 174.7K +user.slice/user-1000.slice 4 2.8 968.2M 0B 174.7K +system.slice 65 2.2 1.5G 0B 2.8M +``` + +你也可以只查看你的用户空间进程,或者查看用户空间进程和内核线程。 + +这绝不是对 `top` 或 `ps` 的替代,而是从一个不同的、独特的角度来观察你的系统。在运行容器时,它可能是至关重要的,因为容器使用控制组。 + +### 2、Linux 定时任务 + +[Cron][3] 是 Linux 的一个经典组件。当你想安排一些事情定期发生时,你会使用 Cron。它很可靠,而且相当好地集成到你的系统中。 + +问题是,Cron 并不了解有些计算机会被关闭。如果你有一个安排在午夜的 Cron 任务,但你每天在 23:59 关闭你的电脑,那么你的 Cron 任务就永远不会运行。Cron 没有任何工具可以检测到一夜之间错过了工作。 + +作为对这个问题的回答,有一个很好的 [Anacron][4],但它不像 Cron 那样集成的好。要让 Anacron 运行,你需要做很多设置。 + +第二个选择是 systemd 计时器。和 Cron 一样,它也是内置的,可以随时使用。你需要写一个单元文件,这肯定比单行的 Crontab 条目多,但也很简单。例如,这里有一个单元文件,在开机 30 分钟后运行一个假想的备份脚本,但每天只运行一次。这可以确保我的电脑得到备份,并防止它每天尝试备份超过一次。 + +``` +[Unit] +Description=Backup +Requires=myBackup.service + +[Timer] +OnBootSec=30min +OnUnitActiveSec=1d + +[Install] +WantedBy=timers.target +``` + +当然,你也可以干预并提示运行一个任务。多亏了 `OnUnitActiveSec` 指令,systemd 不会试图运行你手动激活的作业。 + +### 3、运行 Linux 容器 + +容器使启动一个复杂的服务变得非常容易。你可以在短短几分钟内运行一个 [Mattermost][5] 或 Discourse 服务器。在某些情况下,困难的部分是在你运行容器后管理和监控它们。Podman 使得管理它们变得容易,但是用什么来管理 Podman 呢?嗯,[你可以使用 systemd][6]。 + +Podman 有一个内置的命令来生成单元文件,这样你的容器就可以被 systemd 管理和监控: + +``` +$ podman generate systemd --new --files --name example_pod +``` + +然后你所要做的就是启动服务: + +``` +$ systemctl --user start pod-example_pod.service +``` + +和其他服务一样,systemd 确保你的容器荚在任何情况下都能运行。它记录问题,你可以用 `journalctl` 和其他重要的日志来查看,你也可以用 `systemd-cgtop` 在控制组中监控它的活动。 + +它不是 [Kubernetes 平台][7],但对于一两个容器来说,你只需要在可靠和可预测的基础上提供服务,Podman 和 systemd 是一对很棒的组合。 + +### 下载 systemd 电子书 + +systemd 的内容还有很多,你可以从作者 [David Both][8] 的新书《[systemd 实用指南][1]》中了解基础知识,以及很多实用的技巧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/3-things-you-didnt-know-systemd-could-do + +作者:[Alan Smithee][a] +选题:[lkxed][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/alansmithee +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/downloads/pragmatic-guide-systemd-linux +[2]: https://www.redhat.com/sysadmin/cgroups-part-four?intcmp=7013a000002qLH8AAM +[3]: https://opensource.com/article/17/11/how-use-cron-linux +[4]: https://opensource.com/article/21/2/linux-automation +[5]: https://opensource.com/education/16/3/mattermost-open-source-chat +[6]: https://www.redhat.com/sysadmin/podman-run-pods-systemd-services?intcmp=7013a000002qLH8AAM +[7]: https://www.redhat.com/en/technologies/cloud-computing/openshift/aws?intcmp=7013a000002qLH8AAM +[8]: https://opensource.com/users/dboth +[0]: https://img.linux.net.cn/data/attachment/album/202304/02/135545u0rwtqdemqefme3e.jpg \ No newline at end of file diff --git a/sources/tech/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md b/sources/tech/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md deleted file mode 100644 index 8557940d8f..0000000000 --- a/sources/tech/20230323.2 ⭐️ 3 surprising things Linux sysadmins can do with systemd.md +++ /dev/null @@ -1,102 +0,0 @@ -[#]: subject: "3 surprising things Linux sysadmins can do with systemd" -[#]: via: "https://opensource.com/article/23/3/3-things-you-didnt-know-systemd-could-do" -[#]: author: "Alan Smithee https://opensource.com/users/alansmithee" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -3 surprising things Linux sysadmins can do with systemd -====== - -When it first started out, there was a lot of press about systemd and its ability to speed up boot time. That feature had a mostly-universal appeal (it's less important to those who don't reboot), so in many ways, that's the reputation it still has today. And while it's true that systemd is the thing that launches services in parallel during startup, there's a lot more to it than that. Here are three things you may not have realized systemd could do but should be taking advantage. Get more tips from our new downloadable eBook, **[A pragmatic guide to systemd][1]**. - -### 1. Simplify Linux ps - -If you've ever used the `ps` or even just the `top` command, then you know that your computer is running hundreds of processes at any given moment. Sometimes, that's exactly the kind of information you need in order to understand what your computer, or its users, are up to. Other times, all you really need is a general overview. - -The `systemd-cgtop` command provides a simple view of your computer's load based on the cgroups (control groups) tasks have been arranged into. [Control groups][2] are important to modern Linux, and are essentially the support structures underneath containers and Kubernetes (which in turn are why the cloud scales the way it does), but also they're useful constructs on your home PC. For instance, from the output of `systemd-cgtop`, you can see the load of your user processes as opposed to system processes: - -``` -Control Group Proc+ %CPU Memory Input/s Output/s -/ 183 5.0 1.6G 0B 3.0M -user.slice 4 2.8 1.1G 0B 174.7K -user.slice/user-1000.slice 4 2.8 968.2M 0B 174.7K -system.slice 65 2.2 1.5G 0B 2.8M -``` - -You can also view just your userspace processes, or just your userspace processes and kernel threads. - -This isn't a replacement for `top` or `ps` by any means, but it's an additional view into your system from a different and unique angle. And it can be vital when running containers, because containers use cgroups. - -### 2. Linux cron - -[Cron][3] is a classic component of Linux. When you want to schedule something to happen on a regular basis, you use cron. It's reliable and pretty well integrated into your system. - -The problem is, cron doesn't understand that some computers get shut down. If you have a cronjob scheduled for midnight, but you turn your computer off at 23:59 every day, then your cronjob never runs. There's no facility for cron to detect that there was a missed job overnight. - -As an answer to that problem, there's the excellent [anacron][4], but that's not quite as integrated as cron. There's a lot of setup you have to do to get anacron running. - -A second alternative is systemd timers. Like cron, it's already built in and ready to go. You have to write a unit file, which is definitely more lines than a one-line crontab entry, but it's also pretty simple. For instance, here's a unit file to run an imaginary backup script 30 minutes after startup, but only once a day. This ensures that my computer gets backed up, and prevents it from trying to backup more than once daily. - -``` -[Unit] -Description=Backup -Requires=myBackup.service - -[Timer] -OnBootSec=30min -OnUnitActiveSec=1d - -[Install] -WantedBy=timers.target -``` - -You can, of course, intervene and prompt a job to run with . Thanks to the `OnUnitActiveSec` directive, systemd doesn't attempt to run a job you've manually activated. - -### 3. Run Linux containers - -Containers make starting up a complex service really easy. You can run a [Mattermost][5] or Discourse server in mere minutes. The hard part, in some cases, is managing and monitoring the containers once you have them running. Podman makes it easy to manage them, but what do use to manage Podman? Well, [you can use systemd][6]. - -Podman has a built-in command to generate unit files so your containers can be managed and monitored by systemd: - -``` -$ podman generate systemd --new --files --name example_pod -``` - -All you have to do then is start the service: - -``` -$ systemctl --user start pod-example_pod.service -``` - -As with any other service on your computer, systemd ensures that your pod runs no matter what. It logs problems, which you can view with `journalctl` along with your other essential logs, and you can monitor its activity within cgroups using `systemd-cgtop`. - -It's no [Kubernetes platform][7], but for one or two containers that you just want to have available on a reliable and predictable basis, Podman and systemd are an amazing pair. - -### Download the systemd eBook - -There's a lot more to systemd, and you can learn the basics, along with lots of useful and pragmatic tips, from author [David Both][8] in his new complimentary **[pragmatic guide to systemd][1]**. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/3/3-things-you-didnt-know-systemd-could-do - -作者:[Alan Smithee][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/alansmithee -[b]: https://github.com/lkxed/ -[1]: https://opensource.com/downloads/pragmatic-guide-systemd-linux -[2]: https://www.redhat.com/sysadmin/cgroups-part-four?intcmp=7013a000002qLH8AAM -[3]: https://opensource.com/article/17/11/how-use-cron-linux -[4]: https://opensource.com/article/21/2/linux-automation -[5]: https://opensource.com/education/16/3/mattermost-open-source-chat -[6]: https://www.redhat.com/sysadmin/podman-run-pods-systemd-services?intcmp=7013a000002qLH8AAM -[7]: https://www.redhat.com/en/technologies/cloud-computing/openshift/aws?intcmp=7013a000002qLH8AAM -[8]: https://opensource.com/users/dboth \ No newline at end of file From dd9db68f7f825af55d2adc0e2abaf709c42307cf Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Sun, 2 Apr 2023 14:00:50 +0800 Subject: [PATCH 41/83] =?UTF-8?q?Revert=20"[=E6=89=8B=E5=8A=A8=E9=80=89?= =?UTF-8?q?=E9=A2=98][news]:=2020230401.0=20=E2=AD=90=EF=B8=8F=20Enough=20?= =?UTF-8?q?of=20it!=20Ubuntu=20to=20Ditch=20Snap=20Completely=20With=2024.?= =?UTF-8?q?04=20LTS=20Naughty=20Nightingale.md"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...mpletely With 24.04 LTS Naughty Nightingale.md | 66 ------------------- 1 file changed, 66 deletions(-) delete mode 100644 sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md diff --git a/sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md b/sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md deleted file mode 100644 index ff7f46d15a..0000000000 --- a/sources/news/20230401.0 ⭐️ Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale.md +++ /dev/null @@ -1,66 +0,0 @@ -[#]: subject: "Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale" -[#]: via: "https://news.itsfoss.com/ubuntu-ditch-snap/" -[#]: author: "Abhishek https://news.itsfoss.com/author/root/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Enough of it! Ubuntu to Ditch Snap Completely With 24.04 LTS Naughty Nightingale -====== - -On this historic date, Canonical has decided to abandon the Snap project and remove it completely in the upcoming release of 24.04 codenamed Naughty Nightingale. - -![Snap Ubuntu][1] - -![][2] - -Despite putting so much weight behind Snap, Ubuntu continues to lose in the race of 'universal Linux packaging'. - -While all kinds of distros are adopting Fedora's Flatpak, Ubuntu's Snap is being rejected even by Ubuntu-based distros like Linux Mint and elementary OS. - -Nitrux, Vanilla, gLinux, and many more distros have [ditched Ubuntu for Debian][3], and Snap probably played a role in the decision-making. - -This continued rejection has disheartened the Snap team, who worked hard to force people into liking Snap by [disguising Snap apps as apt packages][4]. - -So, in a recent discussion at UbuntuCon, Canonical management decided to phase out Snap development and its integration into Ubuntu core. - -> After the initial resistance, some Linux users have started liking Snap, just as few people got attached to Unity. This is a scary situation for us. From Ubuntu One to Unity and Mir, we have abandoned projects in the past. We can do it again for the greater good. - -The development is ceased immediately and the work will begin to decouple Snap from Ubuntu. The next LTS release, 24.04 Naughty Nightingale, will see no traces of Snap. - -Not everyone is happy with the decision, of course. - -In an anonymous Reddit post, a Snap developer shares: - -> Snap is a craft and we have crafted the Snap to perfection. We worked so hard that if anyone searches for 'how to install xyz application on Linux', the Snapcraft pages comes up first to suggest using Snap packages. And now our effort is being discarded in a Snap. - -The Canonical management is aware of the concern. They are considering open sourcing Snap so that others can pick up the project to continue the development, just like Ubuntu Touch and Unity. - -If someone wants to develop a 'Ubuntu Snap Remix', we could even consider awarding it official flavor status, Canonical revealed. - -This decision has left _all_ the Snap fans in shock and denial. But the decision has been made and this date will become part of history. _**Mark the date.**_ - -You can read the official discussion and announcement on the page below. - -[Official Announcement][5] - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/ubuntu-ditch-snap/ - -作者:[Abhishek][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/root/ -[b]: https://github.com/lkxed/ -[1]: https://news.itsfoss.com/content/images/size/w1304/2023/04/ubuntu-snap.png -[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[3]: https://news.itsfoss.com/vanilla-os-debian-ubuntu/ -[4]: https://news.itsfoss.com/ubuntu-firefox-snap-default/ -[5]: https://en.wikipedia.org/wiki/April_Fools%27_Day?ref=its-foss-news \ No newline at end of file From b20a556cecc36a04cd0dbded286158c16224a7f7 Mon Sep 17 00:00:00 2001 From: Xiaoting Huang <1912890545@qq.com> Date: Sun, 2 Apr 2023 16:41:37 +0800 Subject: [PATCH 42/83] Update 20211124 5 open source alternatives to Microsoft Exchange.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit XiaotingHuang22 is translating. 任务申领。 --- ...211124 5 open source alternatives to Microsoft Exchange.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md b/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md index ae959d3984..a40bb84626 100644 --- a/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md +++ b/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/11/open-source-alternatives-microsoft-exchange" [#]: author: "Heike Jurzik https://opensource.com/users/hej" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "XiaotingHuang22" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -75,7 +75,7 @@ via: https://opensource.com/article/21/11/open-source-alternatives-microsoft-exc 作者:[Heike Jurzik][a] 选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) +译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From ad05fc6e08f41c73b40303a6bbdbf6d3409fcd1b Mon Sep 17 00:00:00 2001 From: geekpi Date: Mon, 3 Apr 2023 08:42:34 +0800 Subject: [PATCH 43/83] translated --- ...ubernetes (K8s) Metrics Server Step by Step.md | 114 --------------- ...ubernetes (K8s) Metrics Server Step by Step.md | 130 ++++++++++++++++++ 2 files changed, 130 insertions(+), 114 deletions(-) delete mode 100644 sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md create mode 100644 translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md diff --git a/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md b/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md deleted file mode 100644 index d444306801..0000000000 --- a/sources/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md +++ /dev/null @@ -1,114 +0,0 @@ -[#]: subject: "How to Install Kubernetes (K8s) Metrics Server Step by Step" -[#]: via: "https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/" -[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -How to Install Kubernetes (K8s) Metrics Server Step by Step -====== - -In this post, we will cover to how to install Kubernetes metrics server step by step. - -The Kubernetes(k8s) Metrics Server is a component that collects and aggregates metrics data from various sources in the Kubernetes cluster, including nodes and pods. This data can be used to monitor and optimize resource utilization, identify potential issues, and improve the overall performance of your Kubernetes cluster. - -Metrics Server collects resource utilization data such as CPU and memory usage for nodes and pods in the cluster. It provides an API endpoint that can be used to query this data and retrieve metrics for specific resources in the cluster. - -##### Prerequisites - -- A Kubernetes cluster (v1.21 or high) up and running. -- kubectl command line tool installed and configured to interact to your Kubernetes cluster. -- The ability to create and modify Kubernetes objects. - -Without any further delay, let’s deep dive into the installation steps. - -### Step 1) Download Metrics Server Manifest - -The first step is to download the latest Metrics Server manifest file from the Kubernetes GitHub repository. Use below curl command to download yaml file, - -``` -# curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -``` - -If you are planning to install metrics server in high availability mode then download following manifest file. - -``` -# curl https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml -``` - -### Step 2) Modify Metrics Server Yaml File - -Next, you need to modify the Metrics Server yaml file to set some configuration options, - -``` -# vi components.yaml -``` - -Find the args section under the container section, add the following line: - -``` -- --kubelet-insecure-tls -``` - -Under the spec section, add following parameter, - -``` -hostNetwork: true -``` - -Save and close the file. - -### Step 3) Deploy Metrics Server - -Now, we are all set to deploy metrics server, run following kubectl command, - -``` -# kubectl apply -f components.yaml -``` - -### Step 4) Verify Metrics Server Deployment - -After deploying the Metrics Server, verify it’s status by checking the pods status which is running in the kube-system namespace, - -``` -# kubectl get pods -n kube-system -``` - -Output above confirms that metrics-server pod is up and running. - -### Step 5) Test Metrics Server Installation - -Finally, you can test the metrics server by running following kubectl command, - -``` -# kubectl top nodes -``` - -This command should display the resource utilization for each node in your cluster, including CPU and memory usage. - -To view pods resource utilization of your current namespace or specific namespace, run - -``` -# kubectl top pod -# kubectl top pod -n kube-system -``` - -That’s all from this post, I have hope you found it informative. Please do post your feedback and queries in below comments section. - -Also Read: How to Install and Use Helm in Kubernetes - --------------------------------------------------------------------------------- - -via: https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/ - -作者:[Pradeep Kumar][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.linuxtechi.com/author/pradeep/ -[b]: https://github.com/lkxed/ diff --git a/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md b/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md new file mode 100644 index 0000000000..5e435a627b --- /dev/null +++ b/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md @@ -0,0 +1,130 @@ +[#]: subject: "How to Install Kubernetes (K8s) Metrics Server Step by Step" +[#]: via: "https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/" +[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +如何逐步安装 Kubernetes (K8s) 指标服务器 +====== + +在这篇文章中,我们将逐步介绍如何安装 Kubernetes 指标服务器。 + +Kubernetes(k8s) 指标服务器是一个组件,用于收集和聚合来自 Kubernetes 集群中各种来源(包括节点和 Pod)的指标数据。此数据可用于监控和优化资源利用率、识别潜在问题并提高 Kubernetes 集群的整体性能。 + +指标服务器收集资源利用率数据,例如集群中节点和 Pod 的 CPU 和内存使用情况。它提供了一个 API 端点,可用于查询此数据并检索集群中特定资源的指标。 + +##### 先决条件 + +- 启动并运行 Kubernetes 集群(v1.21 或更高版本)。 +- kubectl 命令行工具已安装并配置为与你的 Kubernetes 集群交互。 +- 创建和修改 Kubernetes 对象的能力。 + +事不宜迟,让我们深入了解安装步骤。 + +### 步骤 1) 下载指标服务器清单 + +第一步是从 Kubernetes GitHub 仓库下载最新的指标服务器清单文件。使用下面的 curl 命令下载 yaml 文件: + +``` +# curl -LO https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml +``` + +![][1] + +如果你计划在高可用性模式下安装指标服务器,请下载以下清单文件: + +``` +# curl https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/high-availability-1.21+.yaml +``` + +### 步骤 2)修改指标服务器 Yaml 文件 + +接下来,你需要修改 Metrics Server yaml 文件以设置一些配置选项: + +``` +# vi components.yaml +``` + +找到 container 下的 args 部分,添加以下行: + +``` +- --kubelet-insecure-tls +``` + +在 spec 下,添加以下参数: + +``` +hostNetwork: true +``` + +![][2] + +保存并关闭文件。 + +### 步骤 3)部署指标服务器 + +现在,我们准备好部署指标服务器,运行以下 kubectl 命令: + +``` +# kubectl apply -f components.yaml +``` + +![][3] + +### 步骤 4)验证指标服务器部署 + +部署指标服务器后,通过检查在 kube-system 命名空间中运行的 pod 状态来验证它的状态: + +``` +# kubectl get pods -n kube-system +``` + +![][4] + +上面的输出确认指标服务器 pod 已启动并正在运行。 + +### 步骤 5)测试指标服务器安装 + +最后,你可以通过运行以下 kubectl 命令来测试指标服务器: + +``` +# kubectl top nodes +``` + +此命令应显示集群中每个节点的资源利用率,包括 CPU 和内存使用率。 + +![][5] + +要查看当前命名空间或特定命名空间的 pod 资源利用率,请运行: + +``` +# kubectl top pod +# kubectl top pod -n kube-system +``` + +![][6] + +这就是这篇文章的全部内容,我希望你能从中找到有用的信息。请在下面的评论部分发表你的反馈和疑问。 + +-------------------------------------------------------------------------------- + +via: https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/ + +作者:[Pradeep Kumar][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linuxtechi.com/author/pradeep/ +[b]: https://github.com/lkxed/ +[1]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Download-Metrics-Server-Yaml-file-Curl-Command-1024x127.png?ezimgfmt=ng:webp/ngcb22 +[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Edit-Metrics-Server-Yaml-file.png +[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Deploy-Metrics-Server-Kubectl-Command.png +[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Metrics-Server-Pods-Status-Kube-System.png +[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubectl-top-node-command-Output.png?ezimgfmt=ng:webp/ngcb22 +[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Kubectl-top-pod-command-output.png \ No newline at end of file From 456560b4a0a277672b0dbac958d56361f06aa7d7 Mon Sep 17 00:00:00 2001 From: geekpi Date: Mon, 3 Apr 2023 08:44:53 +0800 Subject: [PATCH 44/83] translating --- .../tech/20230401.2 ⭐️ Write a cute program with Emojicode.md | 4 ++-- ...How to Install Kubernetes (K8s) Metrics Server Step by Step.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md b/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md index 134ed12c55..e5c9b8b7f6 100644 --- a/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md +++ b/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/23/4/emojicode" [#]: author: "Jessica Cherry https://opensource.com/users/cherrybomb" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -189,4 +189,4 @@ via: https://opensource.com/article/23/4/emojicode [3]: https://www.emojicode.org/docs/ [4]: https://www.emojicode.org/docs/guides/ [5]: https://opensource.com/sites/default/files/2023-03/emoji.webp -[6]: https://github.com/emojicode/emojicode/issues +[6]: https://github.com/emojicode/emojicode/issues diff --git a/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md b/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md index 5e435a627b..9a5bca290f 100644 --- a/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md +++ b/translated/tech/20230327.0 ⭐️ How to Install Kubernetes (K8s) Metrics Server Step by Step.md @@ -115,7 +115,7 @@ via: https://www.linuxtechi.com/how-to-install-kubernetes-metrics-server/ 作者:[Pradeep Kumar][a] 选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) +译者:[geekpi](https://github.com/geekpi) 校对:[校对者ID](https://github.com/校对者ID) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 From 47d57245cd4fbfda2cbfcab3a3a69fa7b0c8462a Mon Sep 17 00:00:00 2001 From: Xiaoting Huang <1912890545@qq.com> Date: Mon, 3 Apr 2023 10:13:43 +0800 Subject: [PATCH 45/83] =?UTF-8?q?Update=20and=20rename=20sources/talk/2023?= =?UTF-8?q?0227.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Essential=20tip?= =?UTF-8?q?s=20and=20tricks=20for=20your=20first=20tech=20job.md=20to=20tr?= =?UTF-8?q?anslated/talk/20230227.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F?= =?UTF-8?q?=20Essential=20tips=20and=20tricks=20for=20your=20first=20tech?= =?UTF-8?q?=20job.md=20(#29020)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update 20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md XiaotingHuang is translating. * Update and rename sources/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md to translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md Translated by XiaotingHuang22. --- ...sential tips and tricks for your first tech job.md | 146 ----------------- ...sential tips and tricks for your first tech job.md | 151 ++++++++++++++++++ 2 files changed, 151 insertions(+), 146 deletions(-) delete mode 100644 sources/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md create mode 100644 translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md diff --git a/sources/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md b/sources/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md deleted file mode 100644 index a7a9f31537..0000000000 --- a/sources/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md +++ /dev/null @@ -1,146 +0,0 @@ -[#]: subject: "Essential tips and tricks for your first tech job" -[#]: via: "https://opensource.com/article/23/2/your-first-tech-job" -[#]: author: "Fatima https://opensource.com/users/ftaj" -[#]: collector: "lkxed" -[#]: translator: "XiaotingHuang22" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Essential tips and tricks for your first tech job -====== - -First days at work are scary. I still recall many instances where I lay awake at night before my first day at work, having an internal meltdown over what would happen the next day. Starting a new job is uncharted territory for most people. Even if you're a veteran in the industry, there's no denying that there can be a part of you that's a bit terrified of what is to come. - -Understandably, a lot is happening. There are new people to meet, new projects and technologies to understand, documentation to read, tutorials to sit through, and endless HR presentations and paperwork to fill out. This can be overwhelming and, coupled with the considerable degree of uncertainty and unknowns you're dealing with, can be quite anxiety-inducing. - -Two reasons motivated me to write about this subject. The first one being that back when I was a student, most of the discussion revolved around getting a job in tech, and no one talked about what happened next. How do you excel in your new role? Now that I look back, I think I assumed that the hard part is getting the job, and whatever comes after, I could probably figure out myself. - -Similarly, once I started working in the industry, most of the career-related content I came across was about how to go from one senior level to another. No one really talked about what to do in the middle. What about the interns and the junior engineers? How do they navigate their early careers? - -After completing three years of full-time professional experience as a software engineer (and a couple of internships before), I reflected on my time. I put together a list of tips and tricks I've employed while settling into a new tech role. I wanted to look beyond just the first couple of months and prioritize helping achieve long-term success. - -### Reflect on existing processes and documentation - -Most new employees start by either having a ton of documentation thrown their way or none at all. Instead of being overwhelmed by either of these possibilities, you could view this as an opportunity. - -Identify gaps in existing documentation and think about how you could improve it for the next engineer that gets onboarded. This not only shows initiative on your part but also demonstrates that you're committed to improving existing processes within your team. - -I've seen both ends of the spectrum. I've been on teams with no documentation whatsoever. I've also been on teams that were very diligent with keeping their documentation up to date. Your path is pretty straightforward with the former, and you can work on creating that missing documentation. With the latter, you can always think of ways to improve what already exists. Sometimes, too much documentation in written form can also feel intimidating, especially for new employees. Some things might be better explained through other mediums, like video tutorials or screencasts. - -### Ask questions - -I encourage you to look into whether a buddy will be assigned to you when you're starting. This is a fairly common practice at companies. The purpose of a buddy is to help you as you are onboarded. I've found this incredibly helpful because it gives you someone to direct all your questions, and you don't have to run around trying to find the right person/team. - -While asking questions should always be encouraged, it is also necessary to do your homework before you ask those questions, including: - -- Do your research. This encompasses doing a web search, checking forums, and reading existing documentation. Use all the available tools at your disposal. However, it is essential to timebox yourself. You must balance doing your due diligence and keeping project deadlines and deliverables in mind. -- Talk it out. As someone whose first language isn't English, I recommend talking things out loud before asking questions. In my experience, I've often found that, especially when I'm struggling with something difficult, I think in one language (probably my native language) and must explain it in another. This can be a bit challenging sometimes because doing that translation might not be straightforward. -- Organize your thoughts. When struggling with something, it's very common to have many scrambled ideas that make sense to us but might not necessarily make sense to another person. I suggest sitting down, gathering your thoughts, writing them down, and talking through them out loud. This practice ensures that when you're explaining your thought process, it flows as intended, and the listener can follow your train of thought. - -This approach is called the rubber duck technique, a common practice developers use while debugging. The concept is that sometimes explaining your problem to a third person can be very helpful in getting to the solution. This is also a testament to your excellent communication skills. - -Respect people's time. Even if you're reaching out to someone like your buddy, be cognizant of the fact that they also have their day-to-day tasks to complete. Some things that I've tried out include the following: - -- Write down my questions and then set aside some time with my mentor so I could talk to them. -- Compile questions instead of repeatedly asking for help so your mentor can get to them when they have time. -- Schedule a quick 15-20 min video chat, especially if you want to share your screen, which is a great way to showcase your findings. - -I think these approaches are better because you get someone's undivided attention instead of bothering them every couple of minutes when their attention might be elsewhere. - -### Deep dive into your projects - -Even on teams with excellent documentation, starting your technical projects can be very daunting since multiple components are involved. Over time though, you will understand how your team does things. However, it can save you time and potential headaches to figure this out early on by keeping a handy list to refer to, including basic project setup, testing requirements, review and deployment processes, task tracking, and documentation. - -If there's no documentation for the project you're starting on (a situation I have been in), see if you can identify the current or previous project owner and understand the basic project structure. This includes setting it up, deploying it, etc. - -- Identify your team's preference in the IDE (integrated development environment). You're free to use the IDE of your choice, but using the same one as your team can help, especially when debugging, since the choice of IDE impacts debugging. Different IDEs offer varying degrees of debugging support. -- Understand how to do debugging, and I don't just mean using print statements (not that there's anything wrong with that approach). Leverage your team's experience here! -- Understand testing requirements. This might depend on the scope of your project and general team practices, but the earlier you figure this out, the more confident you'll be in the changes you push to production. -- Visualize the deployment process. This process can vary by team, company, etc. Regardless of how informal or formal it may be, make sure you understand how your changes get deployed to production, what the deployment pipeline looks like, how to deploy changes safely, what to do in case of failed builds, how to rollback faulty changes, and how to test your changes in production. -- Understand the ticketing process. Understand how to document tickets and the level of detail expected. You will see a lot of variation here. Some companies expected us to submit our tickets daily, showing our progress. Other companies might not require that level of documentation. - -Given everything I just mentioned, a beneficial, all-in-one exercise you can do in the first couple of weeks is to shadow another engineer and do peer coding sessions. This allows you to observe the entire process, end to end, from the moment a ticket is assigned to an engineer to when it gets deployed to production. - -The first couple weeks can also feel frustrating if you're not yet given an opportunity to get your hands dirty. To counter this, ask your manager to assign some starter tickets to you. These are usually minor tasks like code cleanup or adding unit tests. Still, they allow you to tinker with the codebase, which helps improve your understanding and gives you a sense of accomplishment, which is a very encouraging feeling in the early days of a new job. - -### Speak up, especially when you're stuck - -I want to stress the importance of communication when you're stuck. This happens, especially in the early months of a new job, and as frustrating as it can be, this is where your communication skills will shine. - -- Be transparent about blockers and your progress. Even if it's something as trivial as permission issues (a fairly common blocker for new employees), ensure that your manager is aware. -- Don't wait until the last day to report if something will be delayed. Delays in your project push many other things forward. Share necessary project delays well in advance, so your manager can share this with stakeholders. -- Don't forget things like thoroughly testing your changes or documenting your code just because you're in a rush. - -### Gain technical context - -Gaining technical context is something I've personally struggled with, and I've actively worked on changing my approach in this area. - -When I started as an intern, I would go in with a very focused mindset regarding what I wanted to learn. I'd have a laser-sharp focus on my project, but I'd completely turn a blind eye to everything else. Over the years, I realized that turning a blind eye to other or adjacent projects might not be the wisest decision. - -First and foremost, it impacts your understanding of your work. I was naive to think I could be a good engineer if I focused exclusively on my project. That's just not true. You should take the time to understand other services with which your project might interact. You don't need to get into the nitty gritty, but developing a basic understanding goes a long way. - -A common experience that new employees undergo is disconnecting from the rest of the company, which is a very natural feeling, especially at larger companies. I'm someone who develops a sense of exclusion very quickly, so when I moved to Yelp, a significantly larger company than my previous one, with projects of a much larger scale, I prioritized understanding the big picture. Not only did I work on developing an understanding of my project but also of other adjacent projects. - -In my first few weeks at Yelp, I sat down with various engineers on my team and asked them to give me a bird's eye view of what I would be doing and the project's overarching goal. This approach was incredibly helpful because not only did I get varying degrees of explanations based on how senior the engineer was and how long they had been working on the project, but it also deepened my understanding of what I would be working on. I went into these meetings with the goal that my knowledge of the project should allow me to explain what I do to a stranger on the street. To this end, I asked my tech lead to clarify at what point my work came into the picture when a user opened the Yelp app and searched for something. - -Architecture diagrams can also help in this scenario, especially when understanding how different services interact. - -### Establish expectations - -For the longest time, I thought that all I needed to do was my best and be a good employee. If I was doing work, meeting goals, and no one complained, that should be good enough, right? Wrong. - -You must be strategic with your career. You can't just outsource it to people's goodwill and hope you'll get the desired results just because you're meeting expectations. - -- Establish clear criteria the moment you start your new job. This varies by company, as some organizations have very well-defined measures while others might barely have any. If it's the latter, I suggest you sit down with your manager within the first couple of weeks and establish and unanimously agree on a criterion. -- Make sure you thoroughly understand how you will be evaluated and what measures are used. - -I remember walking out of my first evaluation very confused in my first full-time role. The whole conversation had been very vague and hand-wavy, and I had no clarity about my strengths, weaknesses, or even steps to improve. - -At first, it was easy to attribute everything to my manager because the new employee in me thought this was their job, not mine. But over time, I realized that I couldn't just take a backseat as far as my performance evaluations were concerned. You can't just do good work and expect it to be enough. You have to actively take part in these conversations. You have to make sure that your effort and contributions are being noticed. From regularly contributing to technical design conversations to setting up socials for your team, ensure that your work is acknowledged. - -Tying into establishing expectations is also the importance of actively seeking feedback. Don't wait until your formal performance evaluations every three or four months to find out how you're doing. Actively set up a feedback loop with your manager. Try to have regular conversations where you're seeking feedback, as scary as that may be. - -### Navigate working in distributed teams - -The workplace has evolved over the past two years, and working in remote and distributed teams is now the norm instead of a rarity. I've listed some tips to help you navigate working in distributed teams: - -- When starting meetings, exchange pleasantries and ask people how their weekend/day has been. This helps break the ice and enables you to build a more personal connection with your team members, which goes beyond work. -- Suggest an informal virtual gathering periodically for some casual chit-chat with the team. - -- Establish core hours and set these on your calendar. These are a set of hours that your team will unanimously agree upon, and the understanding is that everyone should be online and responsive during these hours. This is also convenient because meetings only get scheduled within these hours, making it much easier to plan your day. -- Be mindful of people's time zones and lunch hours. -- In the virtual world, you need to make a greater effort to maintain social interactions, and little gestures can go a long way in helping make the work environment much friendlier. These include the following: - -### Maintain a work-life balance - -At the beginning of your career, it's easy to think that it's all about putting in those hours, especially given the 'hustle culture' narrative that we're fed 24/7 and the idea that a work-life balance is established in the later stages of our careers. This idea couldn't be further from the truth because a work-life balance isn't just magically going to occur for you. You need to actively and very diligently work on it. - -The scary thing about not having a work-life balance is that it slowly creeps up on you. It starts with you checking emails after hours and then slowly makes its way to you, working over weekends and feeling perpetually exhausted. - -**[ Related read [How I recognize and prevent burnout in open source][1] ]** - -I've listed some tips to help you avoid this situation: - -- Turn off/pause notifications and emails and set yourself to offline. -- Do not work weekends. It starts with you working one weekend, and the next thing you know, you're working most weekends. Whatever it is, it can wait until Monday. -- If you're an on-call engineer, understand your company's policies surrounding that. Some companies offer monetary compensation, while others may give time off in lieu. Use this time. Not using your benefits like PTO (paid time off) and wellness days really shortens your longevity at work. - -### Wrap up - -There's no doubt that starting a new job is stressful and difficult. I hope that these tips and tricks will make your first few months easier and set you up for great success with your new position. Remember to communicate, establish your career goals, take initiative, and use the company's tools effectively. I know you'll do great! - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/2/your-first-tech-job - -作者:[Fatima][a] -选题:[lkxed][b] -译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ftaj -[b]: https://github.com/lkxed/ -[1]: https://opensource.com/article/21/5/open-source-burnout diff --git a/translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md b/translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md new file mode 100644 index 0000000000..558384ded5 --- /dev/null +++ b/translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md @@ -0,0 +1,151 @@ +[#]: subject: "Essential tips and tricks for your first tech job" +[#]: via: "https://opensource.com/article/23/2/your-first-tech-job" +[#]: author: "Fatima https://opensource.com/users/ftaj" +[#]: collector: "lkxed" +[#]: translator: "XiaotingHuang22" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Essential tips and tricks for your first tech job 技术领域小白必不可少的工作技巧和诀窍 +====== + +刚刚入职那几天确实令人害怕。 我现在依然可以清晰举出很多例子,例如在第一天上班前的晚上无法入睡,因为不知道第二天将要发生什么而内心崩溃。 对于大多数人来说,开始一份新工作就像踏入未知领域。 即使你已是行业的资深人士,不可否认的是,你内心可能还是会对即将发生的事情感到有点害怕。 + +可以理解的是,刚入职的时候你的事情很多。 你要认识新的人,有新的项目和技术要了解,有文档要阅读,有教程要看完,还有没完没了的人事谈话和文件要填。 这可能让你感觉压力山大,再加上你还面临着相当大程度的不确定性和未知数,以上种种能引起焦虑。 + +促使我写这篇文章有两个原因, 首先是在我还是学生的时候,大部分讨论都围绕着如何找一份技术工作,却没有人谈论接下来发生的事情。 如何在新角色中脱颖而出? 现在回过头来看,我想我当时认为最困难的事情是得到一份工作,之后发生什么的一切我都可以自己弄清楚。 + +同样的,在我开始在这个行业工作之后,我发现大部分我看到的与职业相关的内容都是讨论如何从一个高级别升到另一个高级级别职称。 没有人真正谈论在此中间我们要做什么。 实习生和初级工程师呢? 他们在早期职业生涯中如何找到方向? + +在拥有了三年全职软件工程师的经验(以及之前的几次实习)之后,我将这段时间的经历进行了复盘并整理出一份我自己在适应新技术职位时使用过的技巧和诀窍表格。我想不只局限于前面的几个月,而是优先考虑如何让这段经历帮助你实现长期的成功。 + + +### 从现有的流程和文档着手学习 + +大多数新员工一开始要么拥有一大堆文档,要么根本没有。 你可以将这视为一个机会,而不是被这两种可能性中的任何一种所淹没。 + +从现有文档中找到缺口,并想想你可以怎样为下一位入职的工程师做出这方面的改进。 这不仅能显示你工作的主动性,还表明你致力于改进团队中的现有流程。 + +上述两种极端情况我都遇到过。我在没有任何文件的团队中工作过,也在一些更新文档方面很勤快的团队中工作过。 对于前者,你的路径非常简单直接,你可以致力于创建那些缺失的文档。 对于后者,您总是可以想办法改进已经存在的东西。 有时,过多的书面文件也会让人感到害怕,尤其是对新员工而言。 有些事情可能通过其他媒介进行更好地解释,比如视频教程或截屏视频。 + +### 勤问问题 + +我会建议你在开始一份新工作时研究一下公司是否会为你分配搭档。 这在公司中是相当普遍的做法。 工作搭档的主要作用是在你入职时为你提供帮助。 我发现这非常有用,因为这个人能够针对你所有的问题给出指导,你就不必为了寻找合适的人或部门而四处奔波。 + +虽然我鼓励提问,但在提问之前也有必要做功课,包括: + +- 做好调查。 这包括进行网络搜索、查看论坛和阅读现有文档。 使用所有可用的工具。 然而,给自己设定时间规划是很重要的。 你必须平衡好尽职调查与牢记手头项目截止日期和可交付成果。 +- 说出来。 作为母语不是英语的人,我建议你在提问之前大声把想法说出来。 根据我的经验,我经常发现自己会用一种语言(通常是我的母语)思考但不得不用另一种语言来解释,而当我在一些困难的问题中挣扎时这一现象尤为突出。有时这颇有挑战性,因为经过翻译后的想法可能没那么容易理解。 +- 组织思绪。 当你在为某件事而苦苦挣扎时,可能同时有很多不同的想法在你的脑海中翻来覆去。这些想法可能对你来说都挺有道理的,但对于别人来说却不一定说得通。对此,我建议你坐下来,收集你的想法,写下来,然后大声说出来。 这一做法可确保当你在解释自己的思维过程时,你能按照预期进行流畅地表达出来,听众也可以紧跟你的思路。 + + +这种方法称为橡皮鸭调试法,是开发人员在调试时的常见做法。 背后的概念是,有时向第三方解释你的问题非常有助于你找到解决方案,同时也证明了你出色的沟通技巧。 + +尊重别人的时间。 即使你在向你的搭档求助时,也要意识到他们也有自己的日常任务要完成。 我尝试过的一些事情包括: + + +- 写下我的问题,然后留出一些时间与我的导师交流,以便与他们交谈。 +- 整理问题而不是反复寻求帮助,这样导师可以在他们有空的时候着手解决。 +- 安排 15-20 分钟的快速视频聊天,特别是如果你想共享屏幕,这一方法可以很好地展示你的发现。 + +我认为这些方法是更好的选择,因为这么做你能得到对方全部的关注,而不是在他们忙着其他事情的时候每隔几分钟打扰他们一下。 + +### 深入研究你的项目 + +即使在拥有出色文档的团队中,开始你的技术项目也可能非常艰巨,因为一个项目涉及多个部分。 不过,随着时间的推移,你将了解团队是如何做事的。 但是,通过记下一张包括基本项目设置、测试要求、审查和部署流程、任务跟踪和文档的实用清单,你将迅速搞清楚一切,节省了你的时间和潜在的麻烦。 + +如果你开始的项目没有文档(我就遇到过这种情况),请看看你能不能找到当前或以前的项目所有者并了解基本的项目结构,这包括设置、部署等。 + +- 确定你的团队在 IDE(集成开发环境)中的偏好。 你可以自由使用你喜欢的 IDE,但使用和团队相同的 IDE 会比较好,尤其是在调试的时候,因为 IDE 的选择会影响调试。 不同的 IDE 提供不同程度的调试支持。 +- 了解如何进行调试,我的意思不仅仅是使用打印语句(不是说这种方法有什么问题)。 充分利用团队的经验! +- 了解测试要求。 这可能取决于项目的范围和团队的一般惯例,越早弄清楚要求,你在后期推送自己的修改请求时就会越有信心。 +- 可视化部署过程。 这个过程可能因团队、公司等而异。无论这个过程是非正式或正式,请确保你了解自己提交的新代码是如何被部署至新环境中、部署流水线是什么样的、如何安全地部署代码更改、在构建失败后可以怎么做,如何回滚错误的更改,以及如何在生产环境中测试你的更改。 +- 了解报修流程。 了解如何记录报修以及要求的详细程度。 你会由此发现每个公司各不相同。 有的公司希望我们每天提交报修单以显示我们的进度。 有的公司可能不需要如此详细的文档。 + +基于我刚才提到的所有内容,我建议你可以在入职头几周内做一个有益的、一体化的练习——跟随模仿另一位工程师并进行同行编码。 这么做让你可以端到端地观察整个流程,从派单给工程师到部署到生产中都清清楚楚。 + +如果刚入职几周时你还没有机会亲身实践,可能你会感到沮丧。 为了解决这个问题,你可以让你的经理也给你派一些单子。 这些通常是一些小任务,例如代码清理或添加单元测试。 不过,它们允许你修补代码库,这有助于提高你的理解并给你带来成就感,这在新工作的初期是非常鼓舞人心的。 + +### 当你遇到困难时尤其要大声说出来 + +我想强调一下当你碰到困难时沟通的重要性。 遇到困难总是难免的,尤其是在一份新工作的最初几个月,尽管这可能会令人沮丧,但这正是你的沟通技巧大放异彩的地方。 + +- 让工作中的阻碍和进步透明化。 即使是像权限问题一样微不足道(新员工常常遇到的障碍之一),也要确保你的经理知道。 +- 如果有些工作耽搁了,不要等到最后一天才向团队报告。 你的项目延迟会推动许多其他事情的发展。 对于一些必要的项目延迟请提前告知,以便你的经理可以与相关人员分享这一信息。 +- 不要因为匆忙而忘记全面测试代码的更改或记录你的代码等事情。 + +### 获得技术大局观 + +获得技术大局观是我个人一直在努力改进的地方,并且我一直在积极改变自己对此的看法。 + +当年我开始实习时,我会非常专注于自己想学的东西。 我会非常专注于我的项目,但对其他一切完全视而不见。 多年后,我意识到对其他或相邻的项目视而不见可能不是最明智的。 + +首先,技术大局观会影响你对自身工作的理解。 我曾经天真地以为,只要我专注于自己的项目就可以成为一名优秀的工程师。但事情并非如此。你应该花时间了解其他可能与你的项目有所交互的服务。 你无需深入了解细节,但建立基本的理解也会大有帮助。 + +新员工的一个普遍经历是与公司其他人脱节,会有这种感觉很正常,尤其是在大公司。 我是一个很快就会产生排斥感的人,所以当我刚到 Yelp 时 —— 这是一家比我以前的公司大得多的公司,项目规模也大得多,我优先考虑了解大局。 我不仅努力建立对我的项目的理解,还认真了解了其他相邻项目。 + +在 Yelp 的头几周,我与团队中的不同工程师坐下来,请他们给我一个关于我将要做什么和项目的总体目标的概况。 这种方法非常有用,因为我不仅根据工程师的资历和他们在项目上的工作时间得到了不同程度的解释,而且还加深了我对我将要从事的工作的理解。 我参加这些会议的目的,是希望我对项目掌握的认识让我能够向街上的陌生人解释我所做的事。为此,我还请我的技术主管向我解释,当用户打开 Yelp 应用程序并搜索内容时,我的工作成果会在什么时候出现。 + +在这种情况下架构图也很有用,尤其是它能帮助你了解不同服务是如何交互的。 + +### 建立期望 + +在过去很长一段时间里,我以为自己只需要尽力而为,成为一名优秀的员工。 只要我有在工作,达成目标,而且没有人投诉,那就足够好了,对吧? 错! + +你必须对你的职业有战略眼光。 你不能只是将它外包给人们的一片好心,并希望自己只要达成了目标就能得到想要的结果。 + +- 在你开始新工作的那一刻就建立明确的标准。 这因公司而异,因为有些组织有非常明确的措施,而其他组织可能几乎没有。 如果是后者,我建议你在头几周内找你的经理坐下来谈谈,制定并统一一个标准。 +- 确保你彻底了解公司将如何评估你以及采用什么方法进行评估。 + +我记得在我的第一份全职工作中,我对自己的第一次评估会议一头雾水。 整个谈话非常含糊不清,而且我对自己的长处、短处甚至可以如何改进都一无所知。 + +起初,我很容易地将一切都归咎于我的经理,因为作为新员工的我认为这是他们的工作,而不是我的职责。 但随着时间的推移,我意识到,就我的绩效评估而言,我不能只是退居二线。 你不能只做好工作并期望它就足够了。 你必须积极参与到这些对话中。 你必须确保你的努力和贡献被注意到。 为了确保你的工作得到认可,你可以做很多事情,从定期参与技术设计对话到设置团建活动。 + +建立期望也是积极寻求反馈,这一点也十分重要。不要等到每三四个月进行一次正式的绩效评估时才知道自己的表现如何。 积极与你的经理建立反馈循环。 虽然这听起来很可怕,但尝试定期进行寻求反馈的谈话。 + +### 在分布式团队中找到方向 + +在过去两年中我们的工作场所在不断变化,如今在远程和分布式团队中工作已成为常态,不再罕见。 我列出了一些技巧,帮助你在分布式团队中快速找到工作方向: + +- 开始会议时,互相寒暄并询问人们周末/一天过得如何。 这有助于打破僵局,让你能够与团队成员建立更私人的、超越工作的联系。 +- 建议定期举行非正式的虚拟聚会,与团队进行一些随意的闲聊。 + + +- 建立核心时间并将其设置在你的日历上。 核心时间是你的团队一致同意的几个小时,在这段时间里,大家都明白自己应该在线并能随时响应。 这样做很方便,因为会议只会安排在这个时间段,让你在计划自己一天的工作时更轻松。 +- 注意人们的时区和午餐时间。 +- 在虚拟世界中,您需要付出更大的努力来维持社交互动,而小小的心意却可以大大有助于让工作环境更加友好。 其中包括: + +### 维持工作生活间的平衡 + +在你职业生涯刚开始的时候,你很容易认为只要投入很多时间就能成功,特别是考虑到我们全天候待命的“忙碌文化”以及认为建立生活工作的平衡是在职业生涯下阶段才需要考虑的想法。但这些想法与事实相去甚远,因为工作与生活的平衡不会神奇地发生在你身上。 你需要积极和非常勤奋地去找到个人的平衡点。 + +没有工作与生活平衡的可怕之处在于它是慢慢蔓延到你身上的。 刚开始是你下班后还在查看电子邮件,然后慢慢地,你开始周末也在工作,一直感到疲惫不堪。 + +**[ 相关阅读 [我是如何识别并防止自己在开源项目中感到倦怠的][1] ]** + + +我列出了一些提示,可以帮助你避免这种情况: + +- 关闭/暂停通知和电子邮件并将自己设置为离线。 +- 不要在周末工作。 刚开始是你需要在这一个周末工作,但不知不觉间,你会发现自己大部分周末都在工作。 不管是什么工作,它可以等到星期一。 +- 如果你是随叫随到的工程师,请了解公司的相关政策。 一些公司提供金钱补偿,而另一些公司可能会以休假代替。 利用这个时间。 不使用 PTO(带薪休假)和健康日等福利确实会缩短你的工作寿命。 + +### 总结 + +毫无疑问,开始一份新工作压力很大而且很困难。 我希望这些方法和技巧会让你的头几个月变得更轻松,并为你在新职位上取得巨大成功做好准备。 记住,勤沟通,确立职业目标,积极主动,有效地使用公司的工具。 做到这些,我相信你会做得很好! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/2/your-first-tech-job + +作者:[Fatima][a] +选题:[lkxed][b] +译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ftaj +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/article/21/5/open-source-burnout From 3e62eb63e4fd198a2bb62126ed757e105e8981ec Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 3 Apr 2023 11:00:47 +0800 Subject: [PATCH 46/83] RP @geekpi https://linux.cn/article-15687-1.html --- ...stall CRI-O (Container Runtime) on Ubuntu 22.04.md | 126 +++++++++--------- 1 file changed, 64 insertions(+), 62 deletions(-) rename {translated/tech => published}/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md (60%) diff --git a/translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md b/published/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md similarity index 60% rename from translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md rename to published/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md index 6488c68851..ea8cfd47c7 100644 --- a/translated/tech/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md +++ b/published/20230321.0 ⭐️⭐️ How to Install CRI-O (Container Runtime) on Ubuntu 22.04.md @@ -3,18 +3,20 @@ [#]: author: "James Kiarie https://www.linuxtechi.com/author/james/" [#]: collector: "lkxed" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15687-1.html" -如何在 Ubuntu 22.04 上安装 CRI-O(容器运行时) +如何在 Ubuntu 22.04 上安装 CRI-O 容器运行时 ====== -CRI-O 是 Kubernetes 的开源轻量级容器运行时。它是使用 Open Container Initiative (OCI) 兼容运行时的 Kubernetes 容器运行时接口 (CRI) 的实现。在运行 Kubernetes 时,它是 Docker 的完美替代品。 +![][0] + +CRI-O 是 Kubernetes 的开源轻量级容器运行时。它是使用 开放容器组织Open Container Initiative(OCI)兼容运行时的 Kubernetes 容器运行时接口Container Runtime Interface(CRI)的实现。在运行 Kubernetes 时,它是 Docker 的完美替代品。 在本指南中,我们将逐步演示如何在 Ubuntu 22.04 LTS 上安装 CRI-O。 -##### 先决条件 +### 先决条件 在开始之前,这是你需要的: @@ -26,13 +28,13 @@ CRI-O 是 Kubernetes 的开源轻量级容器运行时。它是使用 Open Conta ### 步骤 1:更新系统并安装依赖 -立即登录你的服务器实例并按如下方式更新包列表。 +立即登录你的服务器实例,并按如下方式更新包列表: ``` $ sudo apt update ``` -更新本地包索引后,按如下方式安装依赖项。 +更新本地包索引后,按如下方式安装依赖项: ``` $ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y @@ -42,14 +44,14 @@ $ sudo apt install apt-transport-https ca-certificates curl gnupg2 software-prop 要安装 CRI-O,我们需要在 Ubuntu 上添加或启用它的仓库。但首先,你需要根据操作系统和要安装的 CRI-O 版本定义变量。 -因此,定义如下变量。 +因此,定义如下变量: ``` $ export OS=xUbuntu_22.04 $ export CRIO_VERSION=1.24 ``` -完成后,运行以下命令集以添加 CRI-O Kubic 仓库。 +完成后,运行以下命令集以添加 CRI-O Kubic 仓库: ``` $ echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /"| sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list @@ -58,18 +60,18 @@ $ echo "deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainer ![][1] -此后,为 CRI-O 仓库导入 GPG 密钥。 +此后,为 CRI-O 仓库导入 GPG 密钥: ``` $ curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$CRIO_VERSION/$OS/Release.key | sudo apt-key add - $ curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add - ``` -这会产生如下输出。 +这会产生如下输出: ![][2] -再次更新包索引,使系统与新添加的 CRI-O Kubic 仓库同步。 +再次更新包索引,使系统与新添加的 CRI-O Kubic 仓库同步: ``` $ sudo apt update @@ -77,7 +79,7 @@ $ sudo apt update ### 步骤 3:在 Ubuntu 22.04 上安装 CRI-O -添加仓库后,使用 APT 包管理器安装 CRI-O 和运行时客户端。 +添加仓库后,使用 APT 包管理器安装 CRI-O 和运行时客户端: ``` $ sudo apt install cri-o cri-o-runc -y @@ -85,7 +87,7 @@ $ sudo apt install cri-o cri-o-runc -y ![][3] -安装后,启动并启用 CRI-O 守护程序。 +安装后,启动并启用 CRI-O 守护程序: ``` $ sudo systemctl start crio @@ -98,33 +100,33 @@ $ sudo systemctl enable crio $ sudo systemctl status crio ``` -你应该看到以下输出,表明 CRI-O 服务正在按预期运行。 +你应该看到以下输出,表明 CRI-O 服务正在按预期运行: ![][4] ### 步骤 4:为 CRI-O 安装 CNI 插件 -接下来,你需要安装 CNI(容器网络接口)以及 CNI 插件。请记住,环回和桥接配置已启用并且足以使用 CRI-O 运行 pod。 +接下来,你需要安装 CNI(容器网络接口Container Network Interface)以及 CNI 插件。请记住,环回和桥接配置已启用并且足以使用 CRI-O 运行 容器荚Pod: -因此,要安装 CNI 插件,请运行以下命令。 +因此,要安装 CNI 插件,请运行以下命令: ``` $ sudo apt install containernetworking-plugins -y ``` -安装后,编辑 CRI-O 配置文件。 +安装后,编辑 CRI-O 配置文件: ``` $ sudo nano /etc/crio/crio.conf ``` -取消注释 network_dir 和 plugin_dirs 部分,并在 plugin_dirs 下添加 “/usr/lib/cni/”。 +取消注释 `network_dir` 和 `plugin_dirs` 部分,并在 `plugin_dirs` 下添加 `/usr/lib/cni/`。 ![][5] 保存更改并退出配置文件。 -接下来,重启 CRIO 服务。 +接下来,重启 CRIO 服务: ``` $ sudo systemctl restart crio @@ -132,7 +134,7 @@ $ sudo systemctl restart crio ### 步骤 5:安装 CRI-O 工具 -此外,你还需要安装 cri-tools 包,它提供了 crictl 命令行程序,用于交互和管理容器和 pod。 +此外,你还需要安装 `cri-tools` 包,它提供了 `crictl` 命令行程序,用于交互和管理容器和 pod。 为此,请运行以下命令: @@ -140,7 +142,7 @@ $ sudo systemctl restart crio $ sudo apt install -y cri-tools ``` -安装后,确认 crictl 和 RunTimeVersion 的版本如下。 +安装后,确认 `crictl` 的版本和 `RunTimeVersion` 如下: ``` $ sudo crictl --runtime-endpoint unix:///var/run/crio/crio.sock version @@ -148,7 +150,7 @@ $ sudo crictl --runtime-endpoint unix:///var/run/crio/crio.sock version ![][6] -一定要检查 CRI-O 是否准备好使用以下命令部署 pod: +一定要检查 CRI-O 是否准备好使用以下命令部署容器荚: ``` $ sudo crictl info @@ -156,7 +158,7 @@ $ sudo crictl info ![][7] -crictl 命令提供自动补全功能,让你可以通过按 TAB 键自动补全命令。要启用命令补全,请运行以下命令。 +`crictl` 命令提供自动补全功能,让你可以通过按 `TAB` 键自动补全命令。要启用命令补全,请运行以下命令: ``` $ sudo su - @@ -164,7 +166,7 @@ $ sudo su - # crictl completion > /etc/bash_completion.d/crictl ``` -然后重新加载当前的 bash 会话。 +然后重新加载当前的 Bash 会话: ``` # source ~/.bashrc @@ -172,7 +174,7 @@ $ sudo su - ![][8] -要使用自动补全功能,你需要注销或启动新的终端会话。然后只需键入 crictl 命令并按 TAB 键即可查看所有选项。 +要使用自动补全功能,你需要注销或启动新的终端会话。然后只需键入 `crictl` 命令并按 `TAB` 键即可查看所有选项。 ``` $ crictl @@ -180,17 +182,17 @@ $ crictl ![][9] -### 步骤 6:使用 crictl 程序创建 Pod +### 步骤 6:使用 crictl 程序创建容器荚 -至此,CRI-O 已完全安装和配置并准备好启动 pod。在本节中,我们将在 pod 中创建一个 Apache Web 服务器并确认它是否正在处理请求。 +至此,CRI-O 已完全安装和配置并准备好启动容器荚。在本节中,我们将在容器荚中创建一个 Apache Web 服务器并确认它是否正在处理请求。 -首先,我们将使用 pod 配置文件设置一个 pod 沙箱或隔离环境,如下所示。 +首先,我们将使用容器荚配置文件设置一个沙箱或隔离环境,如下所示: ``` $ sudo nano apache_sandbox.json ``` -然后我们将以下配置添加到文件中。 +然后我们将以下配置添加到文件中: ``` { @@ -206,13 +208,13 @@ $ sudo nano apache_sandbox.json } ``` -保存并退出。接下来使用以下命令创建 pod。这会打印出很长的字母数字,它是 pod ID。 +保存并退出。接下来使用以下命令创建容器荚。这会打印出很长的字母数字,它是容器荚 ID。 ``` $ sudo crictl runp apache_sandbox.json ``` -要确认 Pod 已创建,请运行命令。 +要确认容器荚已创建,请运行命令: ``` $ sudo crictl pods @@ -220,25 +222,25 @@ $ sudo crictl pods ![][10] -要检索有关创建的 pod 的更多信息,请运行以下命令: +要检索有关创建的容器荚的更多信息,请运行以下命令: ``` $ sudo crictl inspectp --output table 05ba2f0704f22 ``` -这将打印出 ID、名称、UID、命名空间、创建日期、内部 pod IP 等详细信息。 +这将打印出 ID、名称、UID、命名空间、创建日期、内部 IP 等详细信息。 ![][11] -### 步骤 7:在 pod 中创建容器 +### 步骤 7:在容器荚中创建容器 -这部分中,我们将在 pod 中创建一个 Apache Web 服务器容器。因此,使用 crictl 程序从 Docker Hub 拉取 Apache Web 服务器镜像。 +这部分中,我们将在容器荚中创建一个 Apache Web 服务器容器。因此,使用 `crictl` 程序从 Docker Hub 拉取 Apache Web 服务器镜像: ``` $ sudo crictl pull httpd ``` -你可以如图所示验证拉取的镜像。 +你可以如图所示验证拉取的镜像: ``` $ sudo crictl images @@ -246,13 +248,13 @@ $ sudo crictl images ![][12] -接下来,我们将为 Apache Web 服务器定义一个容器配置文件。 +接下来,我们将为 Apache Web 服务器定义一个容器配置文件: ``` $ sudo nano container_apache.json ``` -复制并粘贴以下代码。 +复制并粘贴以下代码: ``` { @@ -270,7 +272,7 @@ $ sudo nano container_apache.json 保存并退出配置文件。 -最后,要将容器连接到之前创建的沙盒 pod,请运行以下命令: +最后,要将容器连接到之前创建的沙盒容器荚,请运行以下命令: ``` $ sudo crictl create 05ba2f0704f22 container_apache.json apache_sandbox.json @@ -278,7 +280,7 @@ $ sudo crictl create 05ba2f0704f22 container_apache.json apache_sandbox.json 这会向终端输出一长串字母数字 ID。请记下此 ID。 -最后,使用 ID 启动 Apache Web 服务器容器,如下所示。 +最后,使用 ID 启动 Apache Web 服务器容器,如下所示: ``` $ sudo crictl start 37f4d26510965452aa918f04d629f5332a1cd398d4912298c796942e22f964a7 @@ -294,20 +296,19 @@ $ sudo crictl ps ![][14] -要验证 Apache Web 服务器是否正在运行,请使用 curl 命令和 pod 的内部 ID 向 Web 服务器发送 HTTP 请求。 +要验证 Apache Web 服务器是否正在运行,请使用 `curl` 命令和容器荚的内部 ID 向 Web 服务器发送 HTTP 请求: ``` $ curl -I 10.85.0.2 ``` -以下输出确认 Web 服务器正在运行。 +以下输出确认 Web 服务器正在运行: ![][15] -##### 结论 - -这就是全部的指南。我们已经在 Ubuntu 22.04 上成功安装了 CRI-O,并继续创建 pod 和容器。欢迎你提出意见和反馈。 +### 结论 +这就是全部的指南。我们已经在 Ubuntu 22.04 上成功安装了 CRI-O,并继续创建容器荚和容器。欢迎你提出意见和反馈。 -------------------------------------------------------------------------------- @@ -316,24 +317,25 @@ via: https://www.linuxtechi.com/install-crio-container-runtime-on-ubuntu/ 作者:[James Kiarie][a] 选题:[lkxed][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 [a]: https://www.linuxtechi.com/author/james/ [b]: https://github.com/lkxed/ [1]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Set-Crio-Repository-Ubuntu-Linux.png -[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Import-GPG-Keys-for-Crio-Repository-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 -[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Apt-Install-Crio-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 -[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Start-Enable-Crio-Service-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crio-Conf-Network-Plugins-Directory-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Crio-Version-Check-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 -[7]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Info-Command-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[8]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Enable-Bash-Completion-Crictl-Command-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[9]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Command-Options-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[10]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Pods-Status-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[11]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Inspect-Pod-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 -[12]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-pull-image-ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Create-Container-Inside-Pod-Ubuntu-Linux.png?ezimgfmt=ng:webp/ngcb22 -[14]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Pods-Status-Crictl-Command-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 -[15]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Curl-Command-Httpd-Pod-Ubuntu.png?ezimgfmt=ng:webp/ngcb22 \ No newline at end of file +[2]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Import-GPG-Keys-for-Crio-Repository-Ubuntu-Linux.png +[3]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Apt-Install-Crio-Ubuntu-Linux.png +[4]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Start-Enable-Crio-Service-Ubuntu.png +[5]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crio-Conf-Network-Plugins-Directory-Ubuntu.png +[6]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Crio-Version-Check-Ubuntu-Linux.png +[7]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Info-Command-Ubuntu.png +[8]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Enable-Bash-Completion-Crictl-Command-Ubuntu.png +[9]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Command-Options-Ubuntu.png +[10]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Pods-Status-Ubuntu.png +[11]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-Inspect-Pod-Ubuntu-Linux.png +[12]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Crictl-pull-image-ubuntu.png +[13]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Create-Container-Inside-Pod-Ubuntu-Linux.png +[14]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Pods-Status-Crictl-Command-Ubuntu.png +[15]: https://www.linuxtechi.com/wp-content/uploads/2023/03/Curl-Command-Httpd-Pod-Ubuntu.png +[0]: https://img.linux.net.cn/data/attachment/album/202304/03/105419akd0pr3ns2n50nz0.jpg \ No newline at end of file From 98fd1375119ee37a9ac01bef551dd1064f279716 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 3 Apr 2023 11:55:15 +0800 Subject: [PATCH 47/83] =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=96=B0=E9=97=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ed with Audio Forwarding from Android to PC.md | 68 --------------- ...pen-Source AI to Develop Solutions like ChatGPT.md | 69 --------------- ...ndroid System Cleaning App Goes Open-Source.md | 83 ------------------- 3 files changed, 220 deletions(-) delete mode 100644 sources/news/20230313.1 ⭐️ Scrcpy 2.0 Released with Audio Forwarding from Android to PC.md delete mode 100644 sources/news/20230323.4 ⭐️⭐️ Mozilla Plans to Work On Open-Source AI to Develop Solutions like ChatGPT.md delete mode 100644 sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md diff --git a/sources/news/20230313.1 ⭐️ Scrcpy 2.0 Released with Audio Forwarding from Android to PC.md b/sources/news/20230313.1 ⭐️ Scrcpy 2.0 Released with Audio Forwarding from Android to PC.md deleted file mode 100644 index 9a17450ae9..0000000000 --- a/sources/news/20230313.1 ⭐️ Scrcpy 2.0 Released with Audio Forwarding from Android to PC.md +++ /dev/null @@ -1,68 +0,0 @@ -[#]: subject: "Scrcpy 2.0 Released with Audio Forwarding from Android to PC" -[#]: via: "https://debugpointnews.com/scrcpy-2-0-release/" -[#]: author: "arindam https://debugpointnews.com/author/dpicubegmail-com/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Scrcpy 2.0 Released with Audio Forwarding from Android to PC -====== - -**A new release of Scrcpy 2.0 is here with the most requested feature of audio forwarding.** - -Scrcpy, a free and open-source tool that allows users to control their Android devices from their computer. It has released its latest version, Scrcpy 2.0. With this newest update, users can now mirror their Android screens on not only their computer but also forward audio from their device to their computer. - -![Scrcpy running - Image credit Reddit][1] - -### Scrcpy 2.0: New features - -Audio forwarding was the most requested feature of this great utility. The developer worked with various solutions earlier, such as USBaudio to bring in this feature. But none of the POCs was viable for significant use cases. - -Things changed when Google introduced audio capture API in the Android 10 release on September 2019. With this new API, it’s now easier to implement this feature with several tweaks to control the latency of Audio from your Android device to your computer. - -Furthermore, Scrcpy 2.0 also supports the option to choose video and audio codecs. The device screen can now be encoded in H.265, or even AV1 if your device supports AV1 encoding. - -``` -scrcpy --audio-codec=opus --audio-bit-rate=16k -scrcpy --audio-codec=aac --audio-bit-rate=16k -``` - -In addition, you can also control the audio buffering via the command line to tweak it for your use case. - -``` -scrcpy --video-codec=h265 --display-buffer=200 --audio-buffer=200 -``` - -### Android version support - -This new feature works out-of-the-box for Android 12 or newer (all modern mobile phones). However, for Android 11, you must unlock the device screen while using audio forwarding. - -Scrcpy is a powerful tool that can be used for various purposes, from gaming and multimedia playback to productivity and remote technical support. With its latest update, Scrcpy 2.0, the tool has become even more versatile and user-friendly, making it an excellent choice for anyone looking to mirror and control their Android device on their computer. - -### Wrapping Up - -You can learn more about this new version on the official announcement [page][2]. A download and installation instruction is present [here][3], if you want to try it out. - -For Linux distributions, you can install them using the instructions present [here][4]. - -_Via [announcement][2]_ - --------------------------------------------------------------------------------- - -via: https://debugpointnews.com/scrcpy-2-0-release/ - -作者:[arindam][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://debugpointnews.com/author/dpicubegmail-com/ -[b]: https://github.com/lkxed/ -[1]: https://debugpointnews.com/wp-content/uploads/2023/03/Scrcpy-running-Image-credit-Reddit.jpg -[2]: https://blog.rom1v.com/2023/03/scrcpy-2-0-with-audio/ -[3]: https://github.com/Genymobile/scrcpy/blob/master/README.md#get-the-app -[4]: https://github.com/Genymobile/scrcpy/blob/master/doc/linux.md \ No newline at end of file diff --git a/sources/news/20230323.4 ⭐️⭐️ Mozilla Plans to Work On Open-Source AI to Develop Solutions like ChatGPT.md b/sources/news/20230323.4 ⭐️⭐️ Mozilla Plans to Work On Open-Source AI to Develop Solutions like ChatGPT.md deleted file mode 100644 index 82d4975e63..0000000000 --- a/sources/news/20230323.4 ⭐️⭐️ Mozilla Plans to Work On Open-Source AI to Develop Solutions like ChatGPT.md +++ /dev/null @@ -1,69 +0,0 @@ -[#]: subject: "Mozilla Plans to Work On Open-Source AI to Develop Solutions like ChatGPT" -[#]: via: "https://news.itsfoss.com/mozilla-open-source-ai/" -[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Mozilla Plans to Work On Open-Source AI to Develop Solutions like ChatGPT -====== - -Mozilla's getting into the A.I. game? I think we need more of this! - -![mozilla AI][1] - -[Mozilla][2] is a well-known name in the tech space for its privacy-focused endeavors and the Firefox web browser. - -But, as we all know, the **biggest catch of 2023 has been A.I**. It has seen rapid growth across many sectors, with big tech betting heavily on it. - -Microsoft, Google, and several others 🤯 Chatbots, search engine integration, content creation, graphics design, and what not. - -And Mozilla doesn't want to miss out on it. - -In a recent announcement, they revealed **plans to set up a new startup** and **gather a community** to build a trustworthy, independent, and open-source AI ecosystem. - -Let's look at what we can expect. - -❓ **What is happening?:** Mozilla has **committed $30M to kick-start a new startup** called [Mozilla.ai][3]. - -It aims to bring together people from different walks of life to collectively work on creating a trustworthy and independent AI ecosystem that will benefit everyone. - -The first order of business will be to create **tools that make generative AI much safer and transparent** than what it is now, and to make 'people-centric' recommendation systems that don't serve skewed information. - -This startup will be led by [Moez Draief][4] (_Managing Director of Mozilla)._The initial board members will be **Harvard's**[Karim Lakhani][5], Credo's [Navrina Singh][6], and Mozilla's [Mark Surman][7] (_Director of the Mozilla Foundation_). - -**Why now?:** Obviously, the new wave of AI has created a lot of excitement and concerns ⚡ - -The current/upcoming wave of AI can potentially improve many people's lives, but only **if the technology is more human-focused**. Mozilla says this will only be possible when they put '_human agency and the interests of users at the cor_e' and prioritize transparency and accountability. - -In contrast, the tech giants and cloud companies with significant resources are **scrambling to continue their dominance** over the market by doing things the usual way, with no special focus on improving transparency and moderation. - -🙌 It is good to hear that the Mozilla Foundation is getting involved to develop open-source A.I. solutions that could challenge the likes of ChatGPT, Google Bard, and more. - -Not to forget, there's another team working on making an open-source alternative to ChatGPT. And, yes, we need more of this t**o compete with the big tech clenching their claws in the consumer market with no community oversight**. - -I suggest you go through the [announcement blog][8] to know more about Mozilla's AI plans if you are curious. - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/mozilla-open-source-ai/ - -作者:[Sourav Rudra][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/sourav/ -[b]: https://github.com/lkxed/ -[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/mozilla-ai-opensource.png -[2]: https://www.mozilla.org/?ref=its-foss-news -[3]: https://mozilla.ai/?ref=its-foss-news -[4]: https://www.linkedin.com/in/moezdraief/?ref=its-foss-news -[5]: https://www.linkedin.com/in/professorkl?ref=its-foss-news -[6]: https://www.linkedin.com/in/navrina/?ref=its-foss-news -[7]: https://ca.linkedin.com/in/msurman?ref=its-foss-news -[8]: https://blog.mozilla.org/en/mozilla/introducing-mozilla-ai-investing-in-trustworthy-ai/?ref=its-foss-news \ No newline at end of file diff --git a/sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md b/sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md deleted file mode 100644 index 4a807a4e2a..0000000000 --- a/sources/news/20230331.0 ⭐️ SD Maid v2 Android System Cleaning App Goes Open-Source.md +++ /dev/null @@ -1,83 +0,0 @@ -[#]: subject: "SD Maid v2: Android System Cleaning App Goes Open-Source" -[#]: via: "https://news.itsfoss.com/android-cleaner-sd-maid-2/" -[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -SD Maid v2: Android System Cleaning App Goes Open-Source -====== - -SD Maid app is now getting revamped for its v2 as an open-source project. - -![sd maid icon][1] - -![][2] - -SD Maid is a decently popular system cleaning tool for Android devices. - -The app is free to get started but offers a “pro” version of it to unlock additional features for enhanced cleaning. - -It helps you find discarded apps, cache files, duplicates, and abandoned files. You can also optimize the database with it. I have been using it for my Android devices, and it works like a charm. It cleans junk without hassle and makes things tidy. - -However, it also included some additional features which are no longer useful for newer Android devices. - -Hence, the developer decided to make something **simpler and faster, tuned better for newer Android versions.** - -### SD Maid 2 - -![sd maid 2][3] - -[SD Maid 2][4] or SD Maid SE is the successor of SD Maid app as an open-source project. - -> 🚧 The app is in active development and in its early phases. Expect changes and features to be added. - -The original SD Maid app was planned to be open-source, but was not. - -So, the developer took an open-source approach for its successor, which is a good thing. - -The key highlights of the new app are: - -- **Faster performance** -- **Tailored for new Android versions** -- **New UI with themes** -- **Simpler approach to usability** -- **New features and updates can be expected with Android upgrades** - -And, with the successor taking over, the original SD Maid app will go into maintenance mode, meaning it will only receive important fixes/security updates to keep things running for existing users. - -> 📢 Even if you are an existing SD Maid Pro user, you have to purchase a separate license for SD Maid 2 “Pro” to support the project. It is a one-time fee. - -In case you are not aware of its features, you can expect SD Maid 2 to help you with: - -- Removing data that belongs to apps that are no longer installed (**CorpseFinder**) -- Deleting expendable files, e.g. caches (**AppCleaner**) -- User configurable filters for random files (**SystemCleaner**) -- Scheduling actions (**Scheduler**) -- Controling/disabling apps (**AppControl**) - -📥 You can download the app now from the **[Google Play Store][4], [GitHub][5], and [F-Droid][6].** - -_💬 What do you think about the new SD Maid app as an open-source project? Share your thoughts!_ - --------------------------------------------------------------------------------- - -via: https://news.itsfoss.com/android-cleaner-sd-maid-2/ - -作者:[Ankush Das][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://news.itsfoss.com/author/ankush/ -[b]: https://github.com/lkxed/ -[1]: https://news.itsfoss.com/content/images/size/w1304/2023/03/sdmaid2-se-goes-open-source-android.jpg -[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[3]: https://news.itsfoss.com/content/images/2023/03/sd-maid-2.jpg -[4]: https://play.google.com/store/apps/details?id=eu.darken.sdmse&ref=its-foss-news -[5]: https://github.com/d4rken-org/sdmaid-se?ref=its-foss-news -[6]: https://apt.izzysoft.de/fdroid/index/apk/eu.darken.sdmse/?ref=its-foss-news \ No newline at end of file From d13d48417a3df712b02d7972049888adeed39b00 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Mon, 3 Apr 2023 16:42:12 +0800 Subject: [PATCH 48/83] ATRP @wxy https://linux.cn/article-15688-1.html --- ... 10 Tweaks to Supercharge Gedit as Code Editor.md | 242 ++++++++++++++++++ ... 10 Tweaks to Supercharge Gedit as Code Editor.md | 239 ----------------- 2 files changed, 242 insertions(+), 239 deletions(-) create mode 100644 published/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md delete mode 100644 sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md diff --git a/published/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md b/published/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md new file mode 100644 index 0000000000..60a082f288 --- /dev/null +++ b/published/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md @@ -0,0 +1,242 @@ +[#]: subject: "10 Tweaks to Supercharge Gedit as Code Editor" +[#]: via: "https://itsfoss.com/gedit-tweaks/" +[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" +[#]: collector: "lkxed" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15688-1.html" + +将 Gedit 作为代码编辑器的 10 项增强调整 +====== + +![][0] + +> Gedit 是一个好的文本编辑器。用这些技巧、窍门和调整把它变成一个好的代码编辑器。 + +GNOME 可能已经抛弃了 Gedit 作为默认的文本编辑器,但它仍然是 Linux 老用户的最爱。 + +它主要是一个文本编辑器,但通过一些调整,它可以作为一个轻量级的代码编辑器使用。 + +是啊!为什么要用 VS Code 或其他专门的代码编辑器来编写 Bash 脚本或其他语言的简单程序?用 Gedit 也可以过一天。 + +我将在本文中分享一些我最喜欢的 Gedit 技巧和窍门。虽然大多数的调整对写代码是有益的,但有些对一般的文本写作也是有帮助的。 + +### 1、安装插件 + +可能个别人甚至不知道 Gedit 有强大的插件功能。你可以安装插件来获得额外的功能。 + +有两种类型的插件: + +- 可以从编辑器菜单中访问的官方 Gedit 插件 +- 第三方插件,可以从项目网站上下载,并放入插件目录中(下面讨论)。 + +Gedit 插件可以放在 `/usr/share/gedit/plugins` 或 `~/.local/share/gedit/plugins` 目录下。 + +![][2] + +你可以通过点击 “汉堡包” 菜单,然后打开 “首选项Preferences” 窗口来访问可用和已安装的插件。 + +![][3] + +首选项窗口有 “插件Plugins” 标签,你可以看到所有可用的插件。你可以使用复选框来启用和禁用这些插件。 + +![][4] + +### 2、在侧边栏中显示文件浏览器 + +如果你正在处理一个有多个文件和文件夹的项目,在侧边栏中用文件浏览器看到所有可用的文件是相当有用的。 + +进入 “首选项” -> “插件”,启用 “文件浏览器面板File Browser Panel”。 + +![][5] + +之后,点击右上角的汉堡包菜单,从菜单 “查看View” -> “侧面板Side Panel” 启用侧面板视图。 + +现在把侧面板视图改为文件浏览器,如果还没有的话。 + +![][6] + +### 3、嵌入一个终端 + +是的!你可以在 Gedit 文本编辑器中直接嵌入一个终端。 + +这有什么意义呢?嗯,如果你正在写程序或脚本,嵌入终端可以帮助你运行脚本,并在编辑器中检查代码的变化。 + +![][7] + +要得到这个,首先要安装这个插件(针对 Ubuntu): + +``` +sudo apt install gedit-plugin-terminal +``` + +一旦插件安装完毕,从 “首选项” -> “插件” 中启用它。 + +![][8] + +嗯,从汉堡包菜单-> “查看”-> “底部面板Bottom Panel” 中启用底部面板。 + +![][9] + +### 4、Markdown 预览 + +喜欢 Markdown 吗?我也是! + +有几个适用于 Linux 的 Markdown 编辑器,但你不必为了使用 Markdown 而去安装另一个应用程序。 + +在一个名为 “[Gedit Markdown Preview][10]” 的插件的帮助下,Gedit 完全有能力呈现 Markdown 代码。 + +Arch 用户可以在 AUR 中找到它,软件包为 `gedit-plugin-markdown_preview`。 + +其他 Linux 用户可以找到 [项目网页上的安装说明][11]。 + +一旦安装,在插件中启用它。你必须从汉堡包菜单 -> “查看”-> “侧面板” 中启用侧面板视图。 + +![][12] + +有了这个,它就开始在侧面板或底部窗格中显示 Markdown 文本的渲染文本。 + +![][13] + +### 5、创建代码片段 + +*好的码农编码,优秀码农复用。* + +如果你发现自己重复使用同一段代码或文本,你可以将其保存为片段,并在需要时插入。这将为你节省一些时间(和挫折)。 + +先启用片段插件: + +![][14] + +现在你可以从汉堡包菜单-> “管理片段Manage Snippets” 来访问片段。 + +![][15] + +你会发现它已经有几个为各种编程语言添加的片段。 + +![][16] + +你也可以通过点击左下角的 “+” 号将你的片段添加到所需的文件夹中。你也可以为片段指定一个快捷键,以便更快速地插入它们。 + +![][17] + +例如,我为 [添加一个 Markdown 表格][18] 添加了一个新的片段,并为其分配了一个键盘快捷键和 TAB 触发器(如上图所示)。现在,如果我在 Markdown 文档中按 `CTRL + Alt + S`,就会添加一个表格。或者,输入 `table` 并按下 `TAB` 键也会添加 Markdown 表格。 + +> 💡 通常,片段被保存在 `/usr/share/gedit/plugins/snippet` 文件夹中作为 XML 文档,但我找不到新添加的片段被保存在哪里。 + +### 6、修复深色模式的问题 + +编码员喜欢深色模式。Gedit 遵守系统主题,如果你在操作系统层面切换到深色模式,它也会切换到深色模式。 + +一个主要的问题是,你无法阅读当前选定行的任何内容,因为文本和行的高亮部分都是白色的。 + +![][19] + +这个问题没有解决办法。然而,一个变通的办法是,要么禁用当前行的高亮显示,要么使用不同的颜色方案。 + +进入 “首选项” -> “字体和颜色Font & Colors”,然后选择像 Oblivion 这样的深色方案。这将稍微改变颜色方案,但至少你能看到高亮行的文字。 + +![][20] + +### 7、快速高亮选中的文本 + +双击一个词,Gedit 就会高亮显示整个文档中出现的所有相同的词。 + +![][21] + +虽然有一个官方插件,但这个功能默认是不启用的。 + +进入 “首选项” -> “插件”,启用 “快速高亮Quick Highlight” 选项。 + +![][22] + +### 8、显示行号 + +许多代码编辑器默认都会显示行号。当你看到 “第 X 行的语法错误 ” 时,它可以帮助你快速找到该行。 + +你可以通过进入 “首选项” -> “查看” -> “显示行号来启用行号Display Line Numbers”: + +![][23] + +你也可以从底部启用或停用它。 + +![][24] + +### 9、保存一个版本 + +如果你正在修改一个文件,也许建立一个备份副本会更好?Gedit 可以自动做到这一点。 + +在 “首选项” -> “编辑器Editor” -> “创建一个备份副本Create a Backup copy” 中启用这个功能。 + +![][25] + +一个在原文件名称后面加上 `~` 符号的文件将作为备份文件出现。 + +![][26] + +### 10、自动保存文件 + +既然我们在谈论版本和备份,那么 [在 Gedit 中启用自动保存][27] 怎么样?这样,如果你在处理一个文件时,忘记用 `Ctrl+S` 手动保存,修改的内容会自动保存。 + +> 🚧 这个功能对一个从未在磁盘上保存过的全新文档不起作用。 + +从 “偏好” -> “编辑器”,你可以启用 “自动保存Autosave” 功能。默认情况下,它每 10 分钟自动保存一次,但你可以根据自己的喜好改变时间。 + +![][28] + +还有一个第三方的 [smart-auto-save 扩展][29],可以在你停止输入时自动保存文档。 + +![][30] + +### 知道更多的 Gedit 技巧吗? + +使用任何软件的乐趣之一是发现它不那么明显的功能。 + +在这里,你最喜欢哪个 Gedit 的调整?你知道一个没有多少人知道的 Gedit 的秘籍吗?在评论中与我们分享吧? + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/gedit-tweaks/ + +作者:[Abhishek Prakash][a] +选题:[lkxed][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/abhishek/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-gedit-plugin-saved-to-the-directory.png +[3]: https://itsfoss.com/content/images/2023/03/ACCESS-PREFERENCES.png +[4]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-plugins-in-prefereneces.png +[5]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-plugin-in-preferences.png +[6]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-as-a-side-pane.png +[7]: https://itsfoss.com/content/images/2023/03/TERMINAL-gedit-embedded-terminal.png +[8]: https://itsfoss.com/content/images/2023/03/TERMINAL-embedded-terminal-plugin-in-plugins-tab.png +[9]: https://itsfoss.com/content/images/2023/03/TERMINAL-enable-bottom-panel-for-embedded-terminal.png +[10]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com +[11]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com#installation +[12]: https://itsfoss.com/content/images/2023/03/ENABLE-SIDE-PANEL.png +[13]: https://itsfoss.com/content/images/2023/03/MARKDOWN-PREVIEW-markdown-preview.png +[14]: https://itsfoss.com/content/images/2023/03/ENABLE-SNIPPET-PLUGLIN.png +[15]: https://itsfoss.com/content/images/2023/03/ACCESS-MANAGE-SNIPPET.png +[16]: https://itsfoss.com/content/images/2023/03/SNIPPET-pre-created-snippets-in-gedit-showing-cpp-main-snippet.png +[17]: https://itsfoss.com/content/images/2023/03/adding-a-custom-markdown-table-snippet.png +[18]: https://itsfoss.com/markdown-table/ +[19]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-text-not-visible-in-highlight-line.png +[20]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-settting-a-new-clor-scheme-to-the-dark-mode-font-issue.png +[21]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-result.png +[22]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-already-available-plugin-no-external-needed.png +[23]: https://itsfoss.com/content/images/2023/03/LINE-NUMBER-display-line-numbers-in-gedit.png +[24]: https://itsfoss.com/content/images/2023/03/SHOW-LINE-NUMBERS.png +[25]: https://itsfoss.com/content/images/2023/03/SAVE-BACKUP.png +[26]: https://itsfoss.com/content/images/2023/03/VERSION-in-file-manager.png +[27]: https://itsfoss.com/how-to-enable-auto-save-feature-in-gedit/ +[28]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-files-the-built-in-save-function-that-saves-the-document-after-some-time.png +[29]: https://github.com/seanh/gedit-smart-autosave/?ref=itsfoss.com +[30]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-Smart-auto-save.png +[31]: https://itsfoss.com/flatpak-tips-tweaks/ +[0]: https://img.linux.net.cn/data/attachment/album/202304/03/163721ts31zsxhs1wuwp63.jpg \ No newline at end of file diff --git a/sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md b/sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md deleted file mode 100644 index fa7fac9c06..0000000000 --- a/sources/tech/20230401.3 ⭐️⭐️ 10 Tweaks to Supercharge Gedit as Code Editor.md +++ /dev/null @@ -1,239 +0,0 @@ -[#]: subject: "10 Tweaks to Supercharge Gedit as Code Editor" -[#]: via: "https://itsfoss.com/gedit-tweaks/" -[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -10 Tweaks to Supercharge Gedit as Code Editor -====== - -![][1] - -GNOME may have ditched Gedit as the default text editor but it is still a favorite of long-time Linux users. - -It is primarily a text editor, but with some tweaks, it can work as a lightweight code editor. - -Yeah! Why use VS Code or other dedicated code editors for writing Bash scripts or simple programs in other languages? Gedit saves the day. - -I'll share some of my favorite Gedit tips and tricks in this article. While most of the tweaks are beneficial for writing codes, some could be helpful for general text writing as well. - -### 1. Install plugins - -Few people don't even know that Gedit has a robust plugin feature. You can install plugins to get additional features. - -There are two kinds of plugins: - -- Official Gedit plugins that are accessible from the editor menu -- Third-party plugins that can be downloaded from the project websites and placed into the plugins directory (discussed below) - -The Gedit plugins can be located in `/usr/share/gedit/plugins` or  `~/.local/share/gedit/plugins` directories. - -![][2] - -You can access the available and installed plugins by clicking the Hamburger menu and then opening the Preference window, - -![][3] - -The Preferences window has the Plugins tab and you can see all the plugins available to you. You can use the checkbox to enable and disable the plugins. - -![][4] - -### 2. Show file browser in the side panel - -If you are working on a project that has multiple files and folders, getting the file browser to see all the available files in the sidebar is quite helpful. - -Go to **Preferences -> Plugins** and enable the **File Browser Panel**. - -![][5] - -After that, click on the hamburger menu at top right and enable the Side Panel View from Menu **View -> Side Panel** - -Now change the side panel view to file browser, if not already. - -![][6] - -### 3. Embed a terminal - -Yes! You can embed a terminal right into the Gedit text editor. - -What's the point? Well, if you are writing programs or scripts, an embed terminal helps you run the script and check the code changes right there in the editor. - -![][7] - -To get this, first install the plugin (for Ubuntu): - -``` -sudo apt install gedit-plugin-terminal -``` - -Once the plugin is installed, enable it from Preferences->Plugin. - -![][8] - -Mow, enable bottom panel from hamburger menu -> **View -> Bottom Panel** - -![][9] - -### 4. Markdown preview - -Love Markdown? Me too! - -There are several Markdown editors available for Linux but you don't have to install another application just to use Markdown. - -With the help of a plugin, unsurprisingly called [Gedit Markdown Preview][10], Gedit is perfectly capable of rendering Markdown code. - -Arch users can find it in the AUR as gedit-plugin-markdown_preview package. - -Other Linux users can find the [installation instructions on the project webpage][11]. - -Once it is installed, enable it in plugins. You must enable the side panel view from the hamburger menu --> View > Side panel - -![][12] - -With that, it starts showing rendered text for Markdown text in the side or bottom pane. - -![][13] - -### 5. Create snippets - -_Good coders code. Better coders reuse._ - -If you find yourself reusing same piece of code or text, you can save it as snippet and insert it when needed. This will save you some time (and frustration). - -Enable the Snippet plugin first. - -![][14] - -Now you can access the snippets from **Hamburger Menu -> Manage Snippets** - -![][15] - -You'll find that it already has several snippets added for various programming languages. - -![][16] - -You can also add your snippets in the desired folder by clicking the + sign on the bottom left. You may also assign a shortcut key to snippets to insert them even more quickly. - -![][17] - -For example, I added a new snippet for [adding a Markdown table][18] and assigned a keyboard shortcut and tab trigger to it (as seen in the above image). Now, if I press **CTRL + Alt + S** in a Markdown document, a table is added. Alternatively, typing **table** and pressing the TAB key also adds the Markdown table. - -> 💡 Usually, the snippets are saved in `/usr/share/gedit/plugins/snippet` folder as XM docs, but I could not find where the newly added snippets are saved. - -### 6. Fix the dark mode problem - -Coders love dark mode. Gedit adheres to the system theme, and if you switch to dark mode at the OS level, it also switches to dark mode. - -The one major problem is that you cannot read anything on the currently selected line because both text and line highlights are white colored. - -![][19] - -There is no fix for this. However, a workaround is to either disable highlighting the current line or use a different color scheme.I prefer choosing a different color scheme. - -Go to Preferences -> Font & Colors and then select a dark color scheme like Oblivion. It will change the color scheme a little but at least you will be able to see the text on the highlighted lines. - -![][20] - -### 7. Quick highlight selected text - -Double-click a word and Gedit highlights all the occurrences of the same word in the entire document. - -![][21] - -This feature is not enabled by default though an official plugin is available. - -Go to Preferences -> Plugins and enable the Quick Highlight option. - -![][22] - -### 8. Show line numbers - -Many code editors show the line numbers by default. It helps you quickly go to the line when you see a 'syntax error at line X'. - -You can enable line numbers by going to **Preferences -> View -> Display Line Numbers:** - -![][23] - -You may also enable or disable it from the bottom. - -![][24] - -### 9. Save a version - -If you are modifying a file, perhaps it would be better to create a backup copy? Gedit can do this automatically. - -Enable this feature in **preferences -> Editor -> Create a Backup copy**. - -![][25] - -A file with the name of the original file appended with a `~` symbol will appear as the backup file. - -![][26] - -### 10. Autosave files - -Since we are talking about versions and backups, how about [enabling autosave in Gedit][27]? This way, if you are working on a document and forgot to save it using Ctrl+S manually, the changes get saved automatically. - -> 🚧 This feature does NOT work on a completely new document that has never been saved on the disk. - -From **Preferences -> Editor**, you can enable the Autosave feature. By default, it autosaves every 10 minutes but you can change the duration to your liking. - -![][28] - -There is also a third-party [smart-auto-save extension][29] that autosaves the document as soon as you stop typing it. - -![][30] - -### Know more Gedit tricks? - -One of the joys of using any piece of software is discovering it's not-so-obvious features. - -Which Gedit tweaks you liked the most here? Do you know a killer Gedit feature that not many people are aware of? Share it with us in the comments? - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/gedit-tweaks/ - -作者:[Abhishek Prakash][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/abhishek/ -[b]: https://github.com/lkxed/ -[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[2]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-gedit-plugin-saved-to-the-directory.png -[3]: https://itsfoss.com/content/images/2023/03/ACCESS-PREFERENCES.png -[4]: https://itsfoss.com/content/images/2023/03/PLUGIN-INSTALL-plugins-in-prefereneces.png -[5]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-plugin-in-preferences.png -[6]: https://itsfoss.com/content/images/2023/03/FILE-BROWSER-file-browser-as-a-side-pane.png -[7]: https://itsfoss.com/content/images/2023/03/TERMINAL-gedit-embedded-terminal.png -[8]: https://itsfoss.com/content/images/2023/03/TERMINAL-embedded-terminal-plugin-in-plugins-tab.png -[9]: https://itsfoss.com/content/images/2023/03/TERMINAL-enable-bottom-panel-for-embedded-terminal.png -[10]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com -[11]: https://github.com/maoschanz/gedit-plugin-markdown_preview?ref=itsfoss.com#installation -[12]: https://itsfoss.com/content/images/2023/03/ENABLE-SIDE-PANEL.png -[13]: https://itsfoss.com/content/images/2023/03/MARKDOWN-PREVIEW-markdown-preview.png -[14]: https://itsfoss.com/content/images/2023/03/ENABLE-SNIPPET-PLUGLIN.png -[15]: https://itsfoss.com/content/images/2023/03/ACCESS-MANAGE-SNIPPET.png -[16]: https://itsfoss.com/content/images/2023/03/SNIPPET-pre-created-snippets-in-gedit-showing-cpp-main-snippet.png -[17]: https://itsfoss.com/content/images/2023/03/adding-a-custom-markdown-table-snippet.png -[18]: https://itsfoss.com/markdown-table/ -[19]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-text-not-visible-in-highlight-line.png -[20]: https://itsfoss.com/content/images/2023/03/DARK-MODE-ISSUE-settting-a-new-clor-scheme-to-the-dark-mode-font-issue.png -[21]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-result.png -[22]: https://itsfoss.com/content/images/2023/03/QUICK-HIGHLIGHT-already-available-plugin-no-external-needed.png -[23]: https://itsfoss.com/content/images/2023/03/LINE-NUMBER-display-line-numbers-in-gedit.png -[24]: https://itsfoss.com/content/images/2023/03/SHOW-LINE-NUMBERS.png -[25]: https://itsfoss.com/content/images/2023/03/SAVE-BACKUP.png -[26]: https://itsfoss.com/content/images/2023/03/VERSION-in-file-manager.png -[27]: https://itsfoss.com/how-to-enable-auto-save-feature-in-gedit/ -[28]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-files-the-built-in-save-function-that-saves-the-document-after-some-time.png -[29]: https://github.com/seanh/gedit-smart-autosave/?ref=itsfoss.com -[30]: https://itsfoss.com/content/images/2023/03/AUTO-SAVE-Smart-auto-save.png -[31]: https://itsfoss.com/flatpak-tips-tweaks/ From f673f2a7c9af351f8182369a206563e321fb57fb Mon Sep 17 00:00:00 2001 From: Xiaoting Huang <1912890545@qq.com> Date: Mon, 3 Apr 2023 18:39:34 +0800 Subject: [PATCH 49/83] Update and rename sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md to translated/tech/20211124 5 open source alternatives to Microsoft Exchange.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated by XiaotingHuang22. 辛苦审核啦! --- ...urce alternatives to Microsoft Exchange.md | 100 ------------------ ...urce alternatives to Microsoft Exchange.md | 99 +++++++++++++++++ 2 files changed, 99 insertions(+), 100 deletions(-) delete mode 100644 sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md create mode 100644 translated/tech/20211124 5 open source alternatives to Microsoft Exchange.md diff --git a/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md b/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md deleted file mode 100644 index a40bb84626..0000000000 --- a/sources/tech/20211124 5 open source alternatives to Microsoft Exchange.md +++ /dev/null @@ -1,100 +0,0 @@ -[#]: subject: "5 open source alternatives to Microsoft Exchange" -[#]: via: "https://opensource.com/article/21/11/open-source-alternatives-microsoft-exchange" -[#]: author: "Heike Jurzik https://opensource.com/users/hej" -[#]: collector: "lujun9972" -[#]: translator: "XiaotingHuang22" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -5 open source alternatives to Microsoft Exchange -====== -There is no need to settle for a proprietary solution. Try one of these -Linux-based email and groupware services. -![Working on a team, busy worklife][1] - -For decades, Microsoft Exchange has ruled the market for email and groupware services. This top dog dominates the corporate world, and the omnipresent Outlook mail client has become the de facto standard for groupware. Since Exchange is closely integrated with Microsoft's Office products, users have access to a wide variety of productivity software and features, whether they're using a desktop or a mobile client. - -However, many companies have concerns about storing their data in the Microsoft cloud. In this article, I look at some open source alternatives and their advantages. It's not just about becoming vendor-independent and reducing costs; it's about using software with open standards and a different level of security—for the groupware server itself and the operating system behind it. - -All five alternatives in this article are Linux-based. While grommunio, Kopano, Nextcloud, ownCloud, and the OX App Suite vary widely in functionality and are therefore attractive to different types of enterprises, they all provide free editions with the option to purchase paid support and add-ons. All candidates can either run on-prem or in the cloud. On top of that, all vendors offer a SaaS solution for their software. - -### grommunio - -[grommunio][2], formerly known as grammm, is published under the AGPLv3 license. It is developed and supported by the Austrian company of the same name. Unlike Exchange, grommunio offers a mail server that's standards-compliant as well as a fully functional groupware solution with features like email, contacts, calendar, tasks, file sharing, and more. grommunio works with various open source and proprietary mail clients, like Windows Mail, Outlook, Android, Apple Mail/iOS, Thunderbird, etc., and supports both the older RPC over HTTP protocol and the Outlook standard protocol MAPI over HTTP. Also included: Exchange ActiveSync for mobile devices and various standard protocols like CalDAV (calendar), CardDAV (address book), IMAP, POP3, SMTP, and LDAP, as well as Active Directory (for syncing of user accounts). - -External open source applications provide some features not supported by Microsoft's API or protocols. For example, the developers have integrated [Jitsi][3] (video and audio telephony), [Mattermost][4] (chat), and file sharing and syncing ([ownCloud][5]). grommunio is also equipped with basic mobile device management (MDM). - -grommunio is designed for a very large number of users and—just like Exchange—supports database sharding (horizontal distribution of databases across multiple hosts). The flexible storage backend allows administrators to extend their setup by adding other servers or cloud accounts. grommunio uses a MySQL database for metadata only, while all "content" such as mail and groupware objects are stored in a per-user SQLite database. For more information on the underlying architecture, please have a look at the [manufacturer's website][6]. - -The Community edition is free of charge and includes all grommunio features for up to five user accounts.  - -### Kopano - -[Kopano][7], from the German-Dutch software manufacturer Kopano, is also AGPLv3-licensed and based on the Zarafa software stack. Unlike its predecessor, Kopano doesn't aim to be a mere replacement for Exchange. Instead, it's a complete groupware solution and includes real-time communication in addition to the standard features of email, contacts, calendar, tasks, notes, and document editing. Kopano interacts with [many other platforms][8], applications, and services. Some of them can easily be integrated by plugins. For video conferencing, the Kopano team has developed its own open source solution based on WebRTC: Kopano Meet offers end-to-end encryption and is available for Windows, macOS, Linux, Android, and iOS. - -Outlook clients are supported via ActiveSync (Z-Push library) or the [Kopano OL Extension][9] (KOE), which serves as an enhancement to the already included ActiveSync. Kopano offers a native web client (WebApp), a client for mobile devices (Mobility), and a desktop version (DeskApp) with support for Windows, Linux, and macOS. Connecting other clients is possible via IMAP, CalDAV, and CardDAV. All applications directly connecting to the Kopano Server use MAPI in SOAP (Simple Object Access Protocol). - -Free community versions are available for Kopano Groupware and Kopano ONE (a special edition of the Kopano Groupware). Kopano Meet can be downloaded as an application or container. - -### Nextcloud - -[Nextcloud][10], with offices in Stuttgart and Berlin (Germany), is licensed under the AGPLv3. Like in ownCloud or Dropbox, users can access the software suite via their desktops (Windows, Linux, and macOS), web browsers, or native apps (Android and iOS). Since version 18, Nextcloud includes Nextcloud Talk (calls, chats, and web meetings) and Nextcloud Groupware (calendar, contacts, and mail) in addition to Nextcloud Files (file sync and share), and changed its name to Nextcloud Hub. - -User and group administration happens via OpenID or LDAP. Various storage backends are supported, such as FTP, S3, and Dropbox. Nextcloud works with several database management systems, including PostgreSQL, MariaDB, SQLite, and Oracle Database. Admins can extend the functionality with more than 200 apps from the [Nextcloud app store][11]. Offerings include real-time communication, audio and video chat, task management, mail, and many more. - -Nextcloud is completely free of charge. On top of that, the company offers a Nextcloud Enterprise build (pre-configured, optimized, and hardened for enterprise deployments).  - -### ownCloud - -[ownCloud][12] is a file sync, share, and content collaboration software developed and maintained by ownCloud GmbH in Nuremberg, Germany. The core of the client-server software and many community apps are published under the AGPLv3. Several enterprise apps which extend the functionality are licensed under the ownCloud Commercial License (OCL). - -ownCloud is mainly a content collaboration software, including online office document editing, calendar, contact synchronization, etc. Mobile clients are available for Android and iOS, and the desktop app integrates into the native file managers in Windows, macOS, and Linux. The Web interface allows access without installing dedicated client software. ownCloud supports WebDAV, CalDAV, and CardDAV. LDAP is included, but ownCloud also connects to other Identity Providers supporting the OpenID Connect authentication standard. - -ownCloud offers integrations for Microsoft Office Online Server, Office 365, and Microsoft Teams. Plugins for Microsoft Outlook and eM Client are available. If necessary, the External Storage Feature connects to different storage providers, like Amazon S3, Dropbox, Microsoft SharePoint, Google Drive, Windows network drives (SMB), and FTP. The vendor also offers additional features for enterprise customers, like end-to-end encryption, ransomware and antivirus protection, etc. (see the [full list of features][13]). - -The Community edition is free of charge and 100% open source.   - -### OX App Suite - -[Open-Xchange][14] was founded in 2005 with headquarters in Olpe and Nuremberg, Germany. Today, OX has offices in various European countries, the USA, and Japan. The [OX App Suite][15] is a modular email, communication, and collaboration platform, mainly designed for telcos, hosting companies, and other providers delivering cloud-based services. - -The backend is released under the GPLv2, the frontend (UI) under the AGPLv3. Users can access the app suite via their preferred browser (fully customizable portal) or a mobile app (Android and iOS). Alternatively, native clients (mobile devices and desktops) are available for OX Mail and OX Drive. Thanks to CardDAV and CalDAV extensions, Exchange Active Sync, and the OX Sync App for Android, synchronization of contacts, calendars, and tasks is possible. - -OX App Suite contains apps for email, contacts, calendars, and tasks. Additional tools and extensions—some open source, some paid features—are available, including OX Documents (text documents, spreadsheets, presentations), OX Drive (manage, share, and synchronize files), OX Guard (encryption of emails and files), and more. For a complete list, please visit the OX website for [general terms and conditions][16]. - -A community edition with limited features is available at no charge.   - -### Open source email and groupware - -Email and groupware services don't have to cost (lots of) money, and there is certainly no need to settle for a proprietary solution hosted on someone else's server. If you're not too keen on the administrative responsibilities, though, all five open source Exchange alternatives are available as SaaS solutions. Alternatively, all vendors offer professional tech support, and you can run the software on-premise—always in control, but never alone. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/11/open-source-alternatives-microsoft-exchange - -作者:[Heike Jurzik][a] -选题:[lujun9972][b] -译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/hej -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/team_dev_email_chat_video_work_wfm_desk_520.png?itok=6YtME4Hj (Working on a team, busy worklife) -[2]: https://grommunio.com/ -[3]: https://opensource.com/article/20/5/open-source-video-conferencing -[4]: https://opensource.com/article/20/7/mattermost -[5]: https://opensource.com/article/21/7/owncloud-windows-files -[6]: https://grommunio.com/features/architecture/ -[7]: https://kopano.com/ -[8]: https://kopano.com/products/interoperability/ -[9]: https://kb.kopano.io/display/WIKI/Setting+up+the+Kopano+OL+Extension -[10]: https://nextcloud.com/ -[11]: https://apps.nextcloud.com/ -[12]: https://owncloud.com/ -[13]: https://owncloud.com/features/ -[14]: https://www.open-xchange.com/ -[15]: https://www.open-xchange.com/products/ox-app-suite/ -[16]: https://www.open-xchange.com/terms-and-conditions/ diff --git a/translated/tech/20211124 5 open source alternatives to Microsoft Exchange.md b/translated/tech/20211124 5 open source alternatives to Microsoft Exchange.md new file mode 100644 index 0000000000..f832eb33df --- /dev/null +++ b/translated/tech/20211124 5 open source alternatives to Microsoft Exchange.md @@ -0,0 +1,99 @@ +[#]: subject: "5 open source alternatives to Microsoft Exchange" +[#]: via: "https://opensource.com/article/21/11/open-source-alternatives-microsoft-exchange" +[#]: author: "Heike Jurzik https://opensource.com/users/hej" +[#]: collector: "lujun9972" +[#]: translator: "XiaotingHuang22" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +可以替代 Microsoft Exchange 的5个开源软件 +====== +不再将就于 Microsoft Exchange 这一专有软件,试一试这些基于 Linux 系统的电子邮件和群件服务吧。 +![在团队中工作,忙碌的工作生活][1] + +几十年来,Microsoft Exchange 一直统治着电子邮件和群件服务市场。 作为领头羊,它主宰着企业界,无处不在的 Outlook 邮件客户端已成为群件同行里的事实标准。 由于 Exchange 与 Microsoft 的 Office 产品紧密联系,无论是桌面客户端还是移动客户端,微软用户都可以轻松使用各种生产力软件和功能。 + +然而,许多公司对于将数据存储在 Microsoft 云中也心存疑虑。 在本文中,我将介绍一些开源替代产品及其优势。 这不仅有关如何不再受供应商控制和降低成本,更关乎使用具有开放标准和不同安全级别的软件——用于组件服务器本身及其背后的操作系统。 + +本文中介绍的这五个替代产品都是基于 Linux 的。 虽然 grommunio、Kopano、Nextcloud、ownCloud 和 OX App Suite 在功能上差异很大,吸引到的企业类型各不相同,但它们都提供免费版本,并可选择购买付费支持服务和附加组件。 所有产品都可以在本地或云端运行。 最重要的是,所有供应商都为其软件提供 SaaS (Software as a Service,软件即服务) 解决方案。 + +### grommunio + +[grommunio][2],以前被称为 grammm,在 AGPLv3 许可下发布的。 它由奥地利同名公司开发和支持。 与 Exchange 不同,grommunio 提供符合标准的邮件服务器以及功能齐全的群件解决方案,具有电子邮件、联系人、日历、任务、文件共享等功能。 grommunio 适用于各种开源和专有邮件客户端,如 Windows Mail、Outlook、Android、Apple Mail/iOS、Thunderbird 等,并支持旧的 RPC over HTTP 协议和 Outlook 标准协议 MAPI over HTTP。 除此之外还包含:用于移动设备的 Exchange ActiveSync 和各种标准协议,如 CalDAV(日历)、CardDAV(地址簿)、IMAP、POP3、SMTP 和 LDAP,以及 Active Directory(用于同步用户帐户)。 + +外部开源应用程序还提供了一些 Microsoft 的 API 或协议不支持的功能。 例如,开发人员合并了 [Jitsi][3](视频和音频电话软件)、[Mattermost][4](聊天软件)以及文件共享和同步([ownCloud][5])。除此之外,grommunio 还配备了基本的移动设备管理软件 (MDM)。 + +grommunio 的设计面向大量不同的用户,并且与 Exchange 一样,它支持数据库分片(数据库在多个主机之间的水平分布)。 灵活的存储后端允许管理员通过添加其他服务器或云帐户来扩展他们的设置。 grommunio 仅将 MySQL 数据库用于元数据,而所有“内容”(例如邮件和群件对象)都存储在每个用户的 SQLite 数据库中。 有关底层架构的更多信息,请查看[制造商的网站][6]。 + +社区版是免费的,其中包括所有的 grommunio 功能并支持最多五个用户帐户。 + +### Kopano + +来自德国和荷兰的软件制造商 Kopano 出品的 [Kopano][7] 也获得了 AGPLv3 许可并基于 Zarafa 软件堆栈。 与其前身不同,Kopano 的目标不只是成为 Exchange 的替代品。 相反,它提供一个完整的群件解决方案,除了电子邮件、联系人、日历、任务、笔记和文档编辑这些标准功能外,它还包括实时通信。 Kopano 与[许多其他平台][8]、应用程序和服务交互,其中一些通过插件就能轻松实现。 对于视频会议,Kopano 团队基于 WebRTC 开发了自己的开源解决方案:Kopano Meet 提供端到端加密,在 Windows、macOS、Linux、Android 和 iOS 客户端都适用。 + +Outlook 客户端通过 ActiveSync(Z-Push 库)或 [Kopano OL Extension][9] (KOE) 来同步移动数据,KOE 是已经包含的 ActiveSync 的加强版。 Kopano 提供本机 Web 客户端 (WebApp)、移动设备客户端 (Mobility) 以及支持 Windows、Linux 和 macOS 的桌面版本 (DeskApp)。 它可以通过 IMAP、CalDAV 和 CardDAV 连接其他客户端。 所有直接连接到 Kopano 服务器的应用程序都使用 SOAP(简单对象访问协议)中的 MAPI。 + +Kopano Groupware 和 Kopano ONE(Kopano Groupware 的特别版)都提供免费的社区版本。 Kopano Meet 还可以作为应用程序或容器下载。 + +### Nextcloud + +[Nextcloud][10] 在斯图加特和柏林(德国)都有办事处,已获得 AGPLv3 许可。 与 ownCloud 或 Dropbox 一样,用户可以通过桌面(Windows、Linux 和 macOS)、网络浏览器或本地应用程序(Android 和 iOS)访问软件套件。 从 18 版本开始,Nextcloud 除了拥有 Nextcloud Files(文件同步和共享)还包括了 Nextcloud Talk(通话、聊天和网络会议)和 Nextcloud Groupware(日历、联系人和邮件),并更名为 Nextcloud Hub。 + +用户和群组管理通过 OpenID 或 LDAP 进行。 Nextcloud 支持各种存储后端,例如 FTP、S3 和 Dropbox。 Nextcloud 可与多种数据库管理系统配合使用,包括 PostgreSQL、MariaDB、SQLite 和 Oracle 数据库。 管理员可以通过 [Nextcloud 应用程序商店][11] 中的 200 多个应用程序扩展功能,其中包括实时通信、音频和视频聊天、任务管理、邮件等等。 + +Nextcloud 是完全免费的。 最重要的是,该公司提供了 Nextcloud Enterprise 版本(针对企业部署进行了预配置、优化和强化) + +### ownCloud + +[ownCloud][12] 是由位于德国纽伦堡的 ownCloud GmbH 公司开发和维护的具有文件同步、共享和内容协作功能的软件。 它的客户端-服务器软件的核心和许多社区应用程序都是在 AGPLv3 下发布的。 一些扩展功能的企业应用程序获得 ownCloud 商业许可证 (OCL) 许可。 + +ownCloud主要是一款内容协作软件,包括在线办公文档编辑、日历、联系人同步等功能。移动客户端支持 Android 和 iOS,桌面应用可以和 Windows、macOS 和 Linux 的原生文件管理器结合使用。它允许访问 Web 界面,无需安装专用客户端软件。 ownCloud 支持 WebDAV、CalDAV 和 CardDAV 协定。 LDAP 协定也包含其中,但 ownCloud 同时连接到支持 OpenID Connect 身份验证标准的其他身份提供者。 + +ownCloud 可以整合 Microsoft Office Online Server、Office 365 和 Microsoft Teams,同时为Microsoft Outlook 和 eM Client 提供可用插件。 如有必要,外部存储功能可连接到不同的存储提供商,例如 Amazon S3、Dropbox、Microsoft SharePoint、Google Drive、Windows 网络驱动器 (SMB) 和 FTP。 该供应商还为企业客户提供额外的功能,如端到端加密、勒索软件和防病毒保护等(请参阅[完整功能列表][13])。 + +社区版免费且 100% 开源。 + +### OX 应用套件 + +[Open-Xchange][14] 成立于 2005 年,总部位于德国奥尔佩和纽伦堡。 今天,OX 在多个欧洲国家、美国和日本设有办事处。 [OX App Suite][15] 是一个模块化的电子邮件、通信和协作平台,主要为电信公司、托管公司和其他提供基于云的服务的提供商而设计。 + +OX 后端在 GPLv2 协议下发布,前端(UI)在 AGPLv3 下发布。 用户可以通过他们喜欢的浏览器(完全个性化的门户)或移动应用程序(Android 和 iOS)访问应用程序套件。 或者,本机客户端(移动设备和台式机)可用于 OX Mail 和 OX Drive。 得益于 CardDAV 和 CalDAV 扩展、Exchange Active Sync 和适用于 Android 的 OX Sync App,联系人、日历和任务得以同步。 + +OX 应用套件包含用于电子邮件、联系人、日历和任务的应用程序。 还有其他工具和扩展可用,其中一些是开源的,一些功能则要付费,包括 OX Documents(文本文档、电子表格、演示文稿)、OX Drive(管理、共享和同步文件)、OX Guard(电子邮件和文件加密)等等。 如需完整列表,请访问 OX 网站的[一般条款和条件][16]。 + +该应用免费提供有限功能的社区版。 + +### 开源电子邮件和群件 + +电子邮件和群件服务并不是必须花费(大量)金钱才可获得,更没有必要将就自己,(为了免费的服务而)依靠一个私人专有的、属于别人的服务器。 如果你不太热衷于管理职责,那么上述的这五个 Exchange 开源替代品都可以作为 SaaS 解决方案使用。 或者,所有供应商都提供专业技术支持,您可以在本地运行软件——一切尽在你的掌握中,但你却不会感觉自己孤军无援。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/11/open-source-alternatives-microsoft-exchange + +作者:[Heike Jurzik][a] +选题:[lujun9972][b] +译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hej +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/team_dev_email_chat_video_work_wfm_desk_520.png?itok=6YtME4Hj (Working on a team, busy worklife) +[2]: https://grommunio.com/ +[3]: https://opensource.com/article/20/5/open-source-video-conferencing +[4]: https://opensource.com/article/20/7/mattermost +[5]: https://opensource.com/article/21/7/owncloud-windows-files +[6]: https://grommunio.com/features/architecture/ +[7]: https://kopano.com/ +[8]: https://kopano.com/products/interoperability/ +[9]: https://kb.kopano.io/display/WIKI/Setting+up+the+Kopano+OL+Extension +[10]: https://nextcloud.com/ +[11]: https://apps.nextcloud.com/ +[12]: https://owncloud.com/ +[13]: https://owncloud.com/features/ +[14]: https://www.open-xchange.com/ +[15]: https://www.open-xchange.com/products/ox-app-suite/ +[16]: https://www.open-xchange.com/terms-and-conditions/ From de3370071670deffea665614e4d90dfe81a67f00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Tue, 4 Apr 2023 01:28:33 +0800 Subject: [PATCH 50/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][ne?= =?UTF-8?q?ws]:=2020230403.0=20=E2=AD=90=EF=B8=8F=20Linux=20Lite=206.4=20G?= =?UTF-8?q?ets=20Lighter=20With=20More=20Features=20like=20WebP=20Image=20?= =?UTF-8?q?Support.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... With More Features like WebP Image Support.md | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 sources/news/20230403.0 ⭐️ Linux Lite 6.4 Gets Lighter With More Features like WebP Image Support.md diff --git a/sources/news/20230403.0 ⭐️ Linux Lite 6.4 Gets Lighter With More Features like WebP Image Support.md b/sources/news/20230403.0 ⭐️ Linux Lite 6.4 Gets Lighter With More Features like WebP Image Support.md new file mode 100644 index 0000000000..4f8fe96914 --- /dev/null +++ b/sources/news/20230403.0 ⭐️ Linux Lite 6.4 Gets Lighter With More Features like WebP Image Support.md @@ -0,0 +1,111 @@ +[#]: subject: "Linux Lite 6.4 Gets Lighter With More Features like WebP Image Support" +[#]: via: "https://news.itsfoss.com/linux-lite-6-4-released/" +[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Linux Lite 6.4 Gets Lighter With More Features like WebP Image Support +====== + +Linux Lite 6.4 is a neat upgrade with a couple of new changes! + +![linux lite 6.4][1] + +![][2] + +Linux Lite is known for its lightweight and Windows-like layout that provides users with a familiar operating system experience. + +The last major release, [Linux Lite 6.2][3] saw the inclusion of various user interface tweaks/bug fixes, and now another release is here that also has various improvements on offer. + +Let me take you through the Linux Lite 6.4 release. + +### 🆕 Linux Lite 6.4: What's New? + +![a screenshot of the desktop on linux lite 6.4][4] + +Based on **[Ubuntu 22.04.2 LTS][5]**, this release has some interesting new additions, here are the highlights that you should know about: + +- **SystemD reporting via Lite System Report** +- **ZSTD Compression** +- **Better WebP Support** +- **Updated Thunderbird** +- **Xfce 4.18** + +#### SystemD reporting via Lite System Report + +![a screenshot of the systemd report on linux lite 6.4][6] + +As you know that **systemd is one of the basic building blocks of a Linux system** that starts the boot procedure for the rest of the system. + +Linux Lite 6.4 has bought about a dedicated reporting option for systemd errors. This will make it easy to pinpoint booting and general system issues via the Lite System Report tool. + +#### ZSTD Compression + +The complete Lite app suite (their in-house apps) has been repackaged using ZSTD compression for faster decompression and better compression, resulting in a **lighter storage footprint**. + +For example: Now the Lite Themes app is **76.8 MB** instead of the more hefty **91.2 MB**. + +Systems with slower processors will benefit a great deal due to the inclusion of this, resulting in significantly faster application update times. + +#### Better WebP Support + +![a screenshot of the webp thumbnail support on linux lite 6.4][7] + +The Thunar file manager has been **updated to****4.16.10** and can now show thumbnails for WebP files correctly, instead of a generic placeholder image. + +This should make it easy for you to go through your WebP files, without the need to open them one-by-one. + +#### Updated Thunderbird + +![a screenshot of thunderbird 102 running on linux lite 6.4][8] + +Linux Lite 6.4 **features Thunderbird 102** with its redesigned icons, the central spaces' toolbar, new address book, import/export wizard, matrix chat support and more. + +You can read more about it in our article to dive deeper. + +#### 🛠️ Other Changes + +Other than the above-mentioned, here are a few application suite updates that are worth mentioning: + +- **Linux Kernel 5.15.0-69** +- **Chrome 111.0** +- **LibreOffice 7.4.6.2** +- **VLC 3.0.16** +- **Gimp 2.10.30** +- **The latest [Papirus][9] icon theme set.** + +If you are curious about the latest Xfce 4.18, you can check out our separate coverage to explore the details: + +### 📥 Get Linux Lite 6.4 + +The ISO for Linux Lite 6.4 can be sourced from the [official website][10], or by clicking on the download button below. + +[Linux Lite 6.4 (OSDN)][11] + +-------------------------------------------------------------------------------- + +via: https://news.itsfoss.com/linux-lite-6-4-released/ + +作者:[Sourav Rudra][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://news.itsfoss.com/author/sourav/ +[b]: https://github.com/lkxed/ +[1]: https://news.itsfoss.com/content/images/size/w1304/2023/04/linux-lite-6-4-released.jpg +[2]: https://news.itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[3]: https://news.itsfoss.com/linux-lite-6-2-release/ +[4]: https://news.itsfoss.com/content/images/2023/04/Linux_Lite_6.4.png +[5]: https://fridge.ubuntu.com/2023/02/24/ubuntu-22-04-2-lts-released/?ref=its-foss-news +[6]: https://news.itsfoss.com/content/images/2023/04/Linux_Lite_6.4_2.png +[7]: https://news.itsfoss.com/content/images/2023/04/Linux_Lite_6.4_3.png +[8]: https://news.itsfoss.com/content/images/2023/04/Linux_Lite_6.4_4.png +[9]: https://github.com/PapirusDevelopmentTeam/papirus-icon-theme?ref=its-foss-news +[10]: https://www.linuxliteos.com/download.php?ref=its-foss-news +[11]: https://osdn.net/projects/linuxlite/storage/6.4/?ref=its-foss-news \ No newline at end of file From c771deec38fec57676f91c67f3890bfb4d0b907d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Tue, 4 Apr 2023 01:31:41 +0800 Subject: [PATCH 51/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230403.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Rust?= =?UTF-8?q?=20Basics=20Series=202=20Using=20Variables=20and=20Constants=20?= =?UTF-8?q?in=20Rust=20Programs.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ... Using Variables and Constants in Rust Programs.md | 430 ++++++++++++++++++ 1 file changed, 430 insertions(+) create mode 100644 sources/tech/20230403.1 ⭐️⭐️ Rust Basics Series 2 Using Variables and Constants in Rust Programs.md diff --git a/sources/tech/20230403.1 ⭐️⭐️ Rust Basics Series 2 Using Variables and Constants in Rust Programs.md b/sources/tech/20230403.1 ⭐️⭐️ Rust Basics Series 2 Using Variables and Constants in Rust Programs.md new file mode 100644 index 0000000000..57d0b81339 --- /dev/null +++ b/sources/tech/20230403.1 ⭐️⭐️ Rust Basics Series 2 Using Variables and Constants in Rust Programs.md @@ -0,0 +1,430 @@ +[#]: subject: "Rust Basics Series #2: Using Variables and Constants in Rust Programs" +[#]: via: "https://itsfoss.com/rust-variables/" +[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Rust Basics Series #2: Using Variables and Constants in Rust Programs +====== + +![][1] + +In the [first chapter of the series][2], I shared my thoughts on why Rust is an increasingly popular programming language. I also showed how to [write Hello World program in Rust][2]. + +Let's continue this Rust journey. In this article, I shall introduce you to variables and constants in the Rust programming language. + +On top of that, I will also cover a new programming concept called "shadowing". + +### The uniqueness of Rust's variables + +A variable in the context of a programming language (like Rust) is known as _an alias to the memory address in which some data is stored_. + +This is true for the Rust programming language too. But Rust has one unique "feature". Every variable that you declare is **immutable by default**. This means that once a value is assigned to the variable, it can not be changed. + +This decision was made to ensure that, by default, you don't have to make special provisions like _spin locks_ or _mutexes_ to introduce multi-threading. Rust **guarantees** safe concurrency. Since all variables (by default) are immutable, you do not need to worry about a thread changing a value unknowingly. + +This is not to say that variables in Rust are like constants because they are not. Variables can be explicitly defined to allow mutation. Such a variable is called a **mutable variable**. + +Following is the syntax to declare a variable in Rust: + +``` +// immutability by default +// the initialized value is the **only** value +let variable_name = value; + +// mutable variable defined by the use of 'mut' keyword +// the initial value can be changed to something else +let mut variable_name = value; +``` + +> 🚧 Though you are allowed to change the value of a mutable variable, you can not assign the value of another data type to it. + +Meaning, if you have a mutable variable of type float, you can not assign a character to it down the road. + +### High-level overview of Rust's data types + +In the previous article, you might have noticed that I mentioned that Rust is a strongly typed language. But to define a variable, you don't specify the data type, instead, you use a generic keyword `let`. + +The Rust compiler can infer the data type of a variable based on the value assigned to it. But it can be done if you still wish to be explicit with data types and want to annotate the type. Following is the syntax: + +``` +let variable_name: data_type = value; +``` + +Some of the common data types in the Rust programming language are as follows: + +- **Integer type**: `i32` and `u32` for signed and unsigned, 32-bit integers, respectively +- **Floating point type**: `f32` and `f64`, 32-bit and 64-bit floating point numbers +- **Boolean type**: `bool` +- **Character type**: `char` + +I will cover Rust's data types in more detail in the next article. For now, this should be sufficient. + +> 🚧 Rust does not have implicit typecasting. So if you assign the value `8` to a variable with a floating point data type, you will face a compile time error. What you should assign instead is the value `8.` or `8.0`. + +Rust also enforces that a variable be initialized before the value stored in it is read. + +``` +{ // this block won't compile + let a; + println!("{}", a); // error on this line + // reading the value of an **uninitialized** variable is a compile-time error +} + +{ // this block will compile + let a; + a = 128; + println!("{}", a); // no error here + // variable 'a' has an initial value +} +``` + +If you declare a variable without an initial value and use it before assigning it some initial value, the Rust compiler will throw a **compile time error**. + +Though errors are annoying. In this case, the Rust compiler is forcing you not to make one of the very common mistakes one makes when writing code: un-initialized variables. + +### Rust compiler's error messages + +Let's write a few programs where you + +- Understand Rust's design by performing "normal" tasks, which are actually a major cause of memory-related issues +- Read and understand the Rust compiler's error/warning messages + +##### Testing variable immutability + +Let us deliberately write a program that tries to modify a mutable variable and see what happens next. + +``` +fn main() { + let mut a = 172; + let b = 273; + println!("a: {a}, b: {b}"); + + a = 380; + b = 420; + println!("a: {}, b: {}", a, b); +} +``` + +Looks like a simple program so far until line 4. But on line 7, the variable `b`--an immutable variable--gets its value modified. + +Notice the two methods of printing the values of variables in Rust. On line 4, I enclosed the variables between curly brackets so that their values will be printed. On line 8, I keep the brackets empty and provide the variables as arguments, C style. Both approaches are valid. (Except for modifying the immutable variable's value, everyting in this program is correct.) + +Let's compile! You already know how to do that if you followed the previous chapter. + +``` +$ rustc main.rs +error[E0384]: cannot assign twice to immutable variable `b` + --> main.rs:7:5 + | +3 | let b = 273; + | - + | | + | first assignment to `b` + | help: consider making this binding mutable: `mut b` +... +7 | b = 420; + | ^^^^^^^ cannot assign twice to immutable variable + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0384`. +``` + +> 📋 The word 'binding' refers to the variable name. This is an oversimplification, though. + +This perfectly demonstrates Rust's robust error checking and informative error messages. The first line reads out the error message that prevents the compilation of the above code: + +``` +error[E0384]: cannot assign twice to immutable variable b +``` + +It means that the Rust compiler noticed that I was trying to re-assign a new value to the variable `b` but the variable `b` is an immutable variable. So that is causing this error. + +The compiler even identifies the exact line and column numbers where this error is found. + +Under the line that says `first assignment to `b`` is the line that provides help. Since I am mutating the value of the immutable variable `b`, I am told to declare the variable `b` as a mutable variable using the `mut` keyword. + +> 🖥️ Implement a fix on your own to better understand the problem at hand. + +##### Playing with uninitialized variables + +Now, let's look at what the Rust compiler does when an uninitialized variable's value is read. + +``` +fn main() { + let a: i32; + a = 123; + println!("a: {a}"); + + let b: i32; + println!("b: {b}"); + b = 123; +} +``` + +Here, I have two immutable variables `a` and `b` and both are uninitialized at the time of declaration. The variable `a` gets a value assigned before its value is read. But the variable `b`'s value is read before it is assigned an initial value. + +Let's compile and see the result. + +``` +$ rustc main.rs +warning: value assigned to `b` is never read + --> main.rs:8:5 + | +8 | b = 123; + | ^ + | + = help: maybe it is overwritten before being read? + = note: `#[warn(unused_assignments)]` on by default + +error[E0381]: used binding `b` is possibly-uninitialized + --> main.rs:7:19 + | +6 | let b: i32; + | - binding declared here but left uninitialized +7 | println!("b: {b}"); + | ^ `b` used here but it is possibly-uninitialized + | + = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) + +error: aborting due to previous error; 1 warning emitted + +For more information about this error, try `rustc --explain E0381`. +``` + +Here, the Rust compiler throws a compile time error and a warning. The warning says that the variable `b`'s value is never being read. + +But that's preposterous! The value of variable `b` is being accessed on line 7. But look closely; the warning is regarding line 8. This is confusing; let's temporarily skip this warning and move on to the error. + +The error message reads that `used binding `b` is possibly-uninitialized`. Like in the previous example, the Rust compiler is pointing out that the error is caused by reading the value of the variable `b` on line 7. The reason why reading the value of the variable `b` is an error is that its value is uninitialized. In the Rust programming language, that is illegal. Hence the compile time error. + +> 🖥️ This error can be easily solved by swapping the codes of lines 7 and 8. Do it and see if the error goes away. + +### Example program: Swap numbers + +Now that you are familiar with the common variable-related issues, let's look at a program that swaps the values of two variables. + +``` +fn main() { + let mut a = 7186932; + let mut b = 1276561; + + println!("a: {a}, b: {b}"); + + // swap the values + let temp = a; + a = b; + b = temp; + + println!("a: {}, b: {}", a, b); +} +``` + +Here, I have declared two variables, `a` and `b`. Both variables are mutable because I wish to change their values down the road. I assigned some random values. Initially, I print the values of these variables. + +Then, on line 8, I create an immutable variable called `temp` and assign it the value stored in `a`. The reason why this variable is immutable is because `temp`'s value will not be changed. + +To swap values, I assign the value of variable `b` to variable `a` and on the next line I assign the value of `temp` (which contains value of `a`) to variable `b`. Now that the values are swapped, I print values of variables `a` and `b`. + +When the above code is compiled and executed, I get the following output: + +``` +a: 7186932, b: 1276561 +a: 1276561, b: 7186932 +``` + +As you can see, the values are swapped. Perfect. + +### Using Unused variables + +When you have declared some variables you intend to use down the line but have not used them yet, and compile your Rust code to check something, the Rust compiler will warn you about it. + +The reason for this is obvious. Variables that will not be used take up unnecessary initialization time (CPU cycle) and memory space. If it will not be used, why have it in your program in the first place? Though, the compiler does optimize this away. But it still remains an issue in terms of readability in form of excess code. + +But sometimes, you might be in a situation where creating a variable might not be in your hands. Say when a function returns more than one value and you only need a few values. In that case, you can't tell the library maintainer to adjust their function according to your needs. + +So, in times like that, you can have a variable that begins with an underscore and the Rust compiler will no longer give you such warnings. And if you really do not need to even use the value stored in said unused variable, you can simply name it `_` (underscore) and the Rust compiler will ignore it too! + +The following program will not only not generate any output, but it will also not generate any warnings and/or error messages: + +``` +fn main() { + let _unnecessary_var = 0; // no warnings + let _ = 0.0; // ignored completely +} +``` + +### Arithmetic operations + +Since math is math, Rust doesn't innovate on it. You can use all of the arithmetic operators you might have used in other programming languages like C, C++ and/or Java. + +A complete list of all the operations in the Rust programming language, along with their meaning, can be found [here][3]. + +#### Example Program: A Rusty thermometer + +Following is a typical program that converts Fahrenheit to Celsius and vice a versa. + +``` +fn main() { + let boiling_water_f: f64 = 212.0; + let frozen_water_c: f64 = 0.0; + + let boiling_water_c = (boiling_water_f - 32.0) * (5.0 / 9.0); + let frozen_water_f = (frozen_water_c * (9.0 / 5.0)) + 32.0; + + println!( + "Water starts boiling at {}°C (or {}°F).", + boiling_water_c, boiling_water_f + ); + println!( + "Water starts freezing at {}°C (or {}°F).", + frozen_water_c, frozen_water_f + ); +} +``` + +Not much is going on here... The Fahrenheit temperature is converted to Celsius and vice a versa for the temperature in Celsius. + +As you can see here, since Rust does not allow automatic type casting, I had to introduce a decimal point to the whole numbers 32, 9 and 5. Other than that, this is similar to what you would do in C, C++ and/or Java. + +As a learning exercise, try writing a program that finds out how many digits are in a given number. + +### Constants + +With some programming knowledge, you might know what this means. A constant is a special type of variable whose value **never changes**. _It stays constant_. + +In the Rust programming language, a constant is declared using the following syntax: + +``` +const CONSTANT_NAME: data_type = value; +``` + +As you can see, the syntax to declare a constant is very similar to what we saw in declaring a variable in Rust. There are two differences though: + +- A constant name should be in `SCREAMING_SNAKE_CASE`. All uppercase characters and words separated by an undercase. +- Annotating the data type of the constant is **necessary**. + +#### Variables vs Constants + +You might be wondering, since the variables are immutable by default, why would the language also include constants? + +The following table should help alleviate your doubts. (If you are curious and want to better understand these differences, you can look at [my blog][4] which shows these differences in detail.) + +![A table that shows differences between Variables and Constants in the Rust programming language][5] + +#### Example program using constants: Calculate area of circle + +Following is a straightforward program about constants in Rust. It calculates the area and the perimeter of a circle. + +``` +fn main() { + const PI: f64 = 3.14; + let radius: f64 = 50.0; + + let circle_area = PI * (radius * radius); + let circle_perimeter = 2.0 * PI * radius; + + println!("There is a circle with the radius of {radius} centimetres."); + println!("Its area is {} centimetre square.", circle_area); + println!( + "And it has circumference of {} centimetres.", + circle_perimeter + ); +} +``` + +And upon running the code, the following output is produced: + +``` +There is a circle with the radius of 50 centimetres. +Its area is 7850 centimetre square. +And it has circumference of 314 centimetres. +``` + +### Variable shadowing in Rust + +If you are a C++ programmer, you already sort of know what I am referring to. When the programmer **declares** a new variable with the same name as an already declared variable, it is known as variable shadowing. + +Unlike C++, Rust allows you to perform variable shadowing in the same scope too! + +> 💡 When a programmer shadows an existing variable, the new variable is assigned a new memory address but is referred with the same name as the existing variable. + +Let us take a look at how it works in Rust. + +``` +fn main() { + let a = 108; + println!("addr of a: {:p}, value of a: {a}", &a); + let a = 56; + println!("addr of a: {:p}, value of a: {a} // post shadowing", &a); + + let mut b = 82; + println!("\naddr of b: {:p}, value of b: {b}", &b); + let mut b = 120; + println!("addr of b: {:p}, value of b: {b} // post shadowing", &b); + + let mut c = 18; + println!("\naddr of c: {:p}, value of c: {c}", &b); + c = 29; + println!("addr of c: {:p}, value of c: {c} // post shadowing", &b); +} +``` + +The `:p` inside curly brackets in the `println` statement is similar to using `%p` in C. It specifies that the value is in the format of a memory address (pointer). + +I take 3 variables here. Variable `a` is immutable and is shadowed on line 4. Variable `b` is mutable and is also shadowed on line 9. Variable `c` is mutable but on line 14, only it's value is mutated. It is not shadowed. + +Now, let's look at the output. + +``` +addr of a: 0x7ffe954bf614, value of a: 108 +addr of a: 0x7ffe954bf674, value of a: 56 // post shadowing + +addr of b: 0x7ffe954bf6d4, value of b: 82 +addr of b: 0x7ffe954bf734, value of b: 120 // post shadowing + +addr of c: 0x7ffe954bf734, value of c: 18 +addr of c: 0x7ffe954bf734, value of c: 29 // post shadowing +``` + +Looking at the output, you can see that not only the values of all three variables have changed, but the addresses of variables that were shadowed are are also different (check the last few hex characters). + +The memory address for the variables `a` and `b` changed. This means that mutability, or lack thereof, of a variable is not a restriction when shadowing a variable. + +### Conclusion + +This article covers variables and constants in the Rust programming language. Arithmetic operations are also covered. + +As a recap: + +- Variables in Rust are immutable by default but mutability can be introduced. +- Programmer needs to explicitly specify variable mutability. +- Constants are always immutable no matter what and require type annotation. +- Variable shadowing is declaring a _new_ variable with the same name as an existing variable. + +Awesome! Good going with Rust I believe. In the next chapter, I'll discuss Data Types in Rust. Stay Tuned. + +Meanwhile, if you have any questions, please let me know. + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/rust-variables/ + +作者:[Pratham Patel][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/pratham/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://itsfoss.com/rust-introduction/ +[3]: https://doc.rust-lang.org/book/appendix-02-operators.html?ref=itsfoss.com#operators +[4]: https://blog.thefossguy.com/posts/immutable-vars-vs-constants-rs.md?ref=itsfoss.com +[5]: https://itsfoss.com/content/images/2023/02/image.png From cef50eeb57a7e582295bfddd44bd8e768eb0fe7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Tue, 4 Apr 2023 01:33:18 +0800 Subject: [PATCH 52/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230403.2=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Hand?= =?UTF-8?q?le=20any=20type=20of=20document=20with=20this=20open=20source?= =?UTF-8?q?=20tool.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...any type of document with this open source tool.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md diff --git a/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md b/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md new file mode 100644 index 0000000000..8c783e3478 --- /dev/null +++ b/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md @@ -0,0 +1,81 @@ +[#]: subject: "Handle any type of document with this open source tool" +[#]: via: "https://opensource.com/article/23/4/open-source-collabora-online-interoperability" +[#]: author: "Heike Jurzik https://opensource.com/users/hej" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Handle any type of document with this open source tool +====== + +[Collabora Online][1] supports all sorts of files and formats. How does this open source office suite do in terms of interoperability, though? This article takes a closer look at Collabora Online's ability to exchange complex text documents and spreadsheets with different office suites such as Microsoft 365 and Google Workspace. + +[Collabora Online][2] is an open source office suite for the cloud or on-premises that protects your privacy and allows you to keep full control of your data. The software is developed by Collabora Productivity Ltd, in Cambridge, with its team working in locations worldwide. Collabora Online is based on LibreOffice Technology and is primarily licensed under the Mozilla Public License 2.0. + +Collabora Online works in any modern web browser, requiring no additional plug-ins or add-ons. It features a complete cloud-based office suite, including a word processor (Writer), spreadsheet program (Calc), presentation software (Impress), and an application for designing vector graphics (Draw). + +This article looks at some of the new Collabora Online's interoperability features, including macros, dynamic font loading, and Sparklines support for the spreadsheet application. These features extend the existing great handling of Microsoft file formats. + +### What is interoperability, and why does it matter? + +In general, interoperability refers to the ability of different devices or applications to work together and exchange data seamlessly. In the context of office suites, interoperability is mostly about file formats. Users should be able to open, edit, and save `.doc` and `.docx`, `.xls` and `.xlsx`, `.odt`, and `.ods` documents, regardless of whether they were created with Microsoft Word, Apple iWork, or LibreOffice. + +The same is true for online office suites. By ensuring that files can be exchanged between Microsoft 365, Google Workspace, and Collabora Online, interoperability helps to increase productivity and facilitate collaboration. All online office suites can save files in various formats. They can also import and export documents, spreadsheets, and presentations originally created in other office suites. + +### Managing macros and ensuring smooth document handling + +Something that often causes problems are documents with macros. They're usually developed in a programming language specific to a particular application. While recording and editing macros in Google Sheets is possible, macros implemented in Visual Basic for Applications (VBA) in Microsoft Office cannot be converted and must be re-created with Google Apps Script. Opening a Word document with VBA macros produces errors and informs users that the macros will be ignored or disabled. + +Collabora Online supports macros and runs them on the server side inside a container. The feature is disabled by default, and admins must explicitly activate it in the `coolwsd.xml` configuration file. After that, users can choose to allow macros when loading a document. There are several limitations, though. For example, it's not possible to access database sources, access other (external) documents, call external programs, use control shapes, and so on. Over the years, the amount of code and objects supported by Collabora Online has increased significantly, thanks to an active community and contributions from customers and partners. + +### Collabora Online: dynamic font loading + +Another critical aspect of interoperability in office suites is fonts. Working with documents containing fonts that aren't available on a particular platform can result in errors, unexpected formatting changes, and even the complete loss of content. + +Microsoft Office documents often use default fonts that aren't available in Google Workspace or Collabora Online. To address this issue, the office suites often suggest substituting missing fonts. That's often useful, but it sometimes leads to a bad result. + +As of version 22.05.7 (released in November 2022), Collabora Online can list missing fonts and suggest substitutions. It can also download the necessary fonts and add them to the server. Everything happens dynamically, without downtime. New fonts become available in editing sessions within minutes for optimal interoperability. + +![Fonts can introduce a surprising complexity to your document, but Collabora Online can handle it.][3] + +To achieve that, information about missing fonts is tracked down by an API while the document is being rendered. A JSON file stores the list of fonts that need to be added. The `coolwsd.xml` file (the server-side settings) points to that JSON file. It checks for modifications once every minute and downloads the missing fonts. + +### Exploring Sparklines: displaying data trends in spreadsheets + +Sparklines are tiny charts that fit inside a single cell of your worksheet, visualizing trends in data. Those miniature charts come in different styles, including lines, bars, and columns. Sparklines also support different colors and horizontal/vertical axis. Unlike larger charts that show as much data as possible and are separated from the text flow, Sparklines are reduced to the core values and typically placed next to or behind the data itself in the same cell. Sparklines are usually defined for one cell, but it's possible to group multiple Sparklines that share the same data range and properties for rendering. + +![Customize the look of Sparklines.][4] + +Sparklines are a compact reference and offer a quick way to illustrate trends, patterns, statistical anomalies, increases, and decreases, all while avoiding the complexity of a full chart. Here are some different Sparkline types: + +- Line Chart: Connects points by line segments from left to right and is particularly useful for displaying data that changes over a certain time. +- Bar Chart: A graphical representation of data using horizontally aligned bars, often used to compare numerical data. +- Column Chart: Ideal for comparing a series of values against each other; the columns are vertical, and their lengths indicate the relative size/value of the data. Column charts are often used to represent data of distinct categories or groups. + +To create a Sparkline, you first define an input data range for the function (two or more cells in a column or a row). You also decide on the cell where you want the Sparkline to appear. In most spreadsheet applications, you right-click the mini chart to adjust its properties, select the chart type, and choose the colors. Collabora Online offers a separate dialog box for this, making it easy and convenient to change the style of the miniature charts. + +Exchanging documents with Sparklines between the three online offices is possible without losing the graphs and their formatting. If you want to share spreadsheets between Microsoft 365, Google Workspace and Collabora Online, make sure to use the Microsoft format .xlsx for import and export, since Google Sheets doesn't handle .ods files very well. + +### Document exchange is easy + +Collabora Online provides several new interoperability features, making exchanging documents with other office suites easy. Macro support, dynamic font loading, and Sparklines ensure seamless document handling, avoiding unexpected formatting changes. Use Collabora Online to unify and simplify your office work. + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/4/open-source-collabora-online-interoperability + +作者:[Heike Jurzik][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/hej +[b]: https://github.com/lkxed/ +[1]: https://www.collaboraoffice.com/ +[2]: https://opensource.com/article/22/7/open%20source-collabora-online +[3]: https://opensource.com/sites/default/files/2023-03/1000020100000952000005F6266BD457E1698CC0.webp +[4]: https://opensource.com/sites/default/files/2023-03/1000020100000690000004FB490A0D79C005B60B.webp \ No newline at end of file From 335cb86be4cb14d818a0fc528e1066e8deb7ac72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Tue, 4 Apr 2023 01:33:27 +0800 Subject: [PATCH 53/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230403.3=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Open?= =?UTF-8?q?=20source=20text=20editing=20for=20your=20website=20with=20CKEd?= =?UTF-8?q?itor.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rce text editing for your website with CKEditor.md | 224 ++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 sources/tech/20230403.3 ⭐️⭐️ Open source text editing for your website with CKEditor.md diff --git a/sources/tech/20230403.3 ⭐️⭐️ Open source text editing for your website with CKEditor.md b/sources/tech/20230403.3 ⭐️⭐️ Open source text editing for your website with CKEditor.md new file mode 100644 index 0000000000..0598abecac --- /dev/null +++ b/sources/tech/20230403.3 ⭐️⭐️ Open source text editing for your website with CKEditor.md @@ -0,0 +1,224 @@ +[#]: subject: "Open source text editing for your website with CKEditor" +[#]: via: "https://opensource.com/article/23/4/website-text-editor-ckeditor" +[#]: author: "Anna Tomanek https://opensource.com/users/annatomanek" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Open source text editing for your website with CKEditor +====== + +Most applications allow users to create and add some textual content, such as a comment, a chat message, an article, a product description, or a legal document. Today, plain text isn't enough. Users format text, insert images and memes, videos, tables, and create lists and links. A developer can probably craft this rich content in HTML by hand, but there's a high chance that your users would appreciate some help. + +WYSIWYG ("What You See Is What You Get") editing allows you to see and edit rich text content in a form that resembles how it's displayed to end users. A WYSIWYG editor provides a UI that makes it easy to format the text and incorporate various elements such as images, links, or tables into your digital content. + +If you want to supply this sort of functionality in your app, you can choose to: + +- Build it yourself +- Find a WYSIWYG editor component you can reuse + +Each option has advantages and disadvantages. + +### Build it yourself... + +If your use case is simple and you don't need many features, building your own component may feel like a way to go. WYSIWYG editing sounds easy. + +It's not. + +Even when you're starting simple, requirements tend to grow over time. Content creation is such a widely accepted paradigm that users now expect it to work in your application similarly to anywhere else. They want to see a familiar feature set and UX patterns. Creating and maintaining this takes time and effort that could otherwise be spent on developing your app. + +There's a valid reason why content editing functionality is often outsourced to an external library, even in big projects with considerable engineering teams. It requires deep domain knowledge to do it well. + +Assume you decide to integrate a ready-to-use editing component or framework. There are plenty of rich text editing solutions on the market. The differences between them usually revolve around the feature set, UX, integrations with various technologies, extensibility, licensing, popularity, project health, and support options. So, similar to any external library, when you're choosing an editor, it's best to consider your use case so you can avoid a costly mistake and further migration in the future. + +Sure, there are some challenges you face when integrating a WYSIWYG editing component, but they're easy to resolve when you're using the popular open source [CKEditor 5][1]. + +### Or choose CKEditor + +CKEditor has been around for 20 years(!) as an open source project. It's backed by CKSource, a company of about 100 people who work, day in and day out, on improving the editor. The latest version, [CKEditor 5][2], is a modern, flexible, extensible, and customizable component written in pure TypeScript and JavaScript. It's built on top of a robust collaboration-ready editing framework with model-view-controller (MVC) architecture, a custom data model, and virtual DOM. + +### Running a simple editor in 3 steps with CKEditor 5 + +Here are the basics of integrating CKEditor with a simple website. + +To get up and running, load the editor script from the CDN, and call its `create()` method to create the editor: + +- In an HTML page, add an element to serve as a placeholder for a CKEditor 5 instance:`
` +- Load the editor build script (here, a so-called _classic editor_ build is loaded from the CDN):`` +- Call the [ClassicEditor.create()][3] method to display the editor.`` + +And that's it. A full web page with an embedded CKEditor 5: + +``` + + + + + CKEditor 5 – Classic editor + + + +

CKEditor 5 - cool, eh?

+
+

This is some sample content for my new WYSIWYG editor.

+
+ + + +``` + +Open it in your browser to test the WYSIWYG editor: + +![CKEditor 5 running in the browser.][4] + +### Advanced WYSIWYG editing + +Yes, there are only three steps, and it's running. But this simple example also uncovers some typical challenges faced by an integrator of an external framework. + +- It's just a simple HTML website that misses the entire context of your app. +- The UI doesn't match your design system. +- Your app is written in React/Angular/Vue, or something else. +- You don't want to serve CDN scripts, and prefer to self-host. +- The feature set of the editor isn't what you need. +- Also, some of your users prefer Markdown to HTML or WYSIWYG "magic". + +So how do you resolve some of these issues? Most editor components allow for some degree of customization that's still cheaper than writing a custom script to properly handle user content creation. + +CKEditor 5 uses a plugin-based architecture, which provides excellent customizability and extensibility. By putting in some effort, you can benefit from a stable, popular, and reliable solution set up to look and work exactly as you want. Drupal 10, for example, built CKEditor 5 into its core and enriched it with some typical CMS functionality like a media library through custom plugins. + +What are some ways you can take advantage of all these customization options? Here are five that showcase its versatility: + +### 1. Flexible UI options + +The first thing to notice when looking at a component to integrate with your application is its user interface. The CKEditor 5 framework delivers a [few different UI types][5]. For example: + +- Classic Editor, used in the first example, offers a toolbar with an editing area placed in a specific position on the page. The toolbar stays visible when you scroll down the page, and the editor automatically grows with the content. +- The Document editor provides a similar editing experience to applications such as Microsoft Word or Google Docs, with a UI that resembles a paper document. +- If you're looking for distraction-free editing, where the content is placed in its target location on the web page without the editor UI getting in your way, you have a few options. The Inline Editor, Balloon Editor, and Balloon Block Editor all come with different types of floating toolbars that appear as needed. + +Besides that, you can play with the toolbar to move the buttons around, group them into drop-downs, use a multi-line toolbar, or hide some less-frequently needed buttons in the "three dots" or "more options" menu. Or, if you wish, move the entire toolbar to the bottom. + +It may also happen that you prefer to go the headless route. Plenty of projects use the powerful editing engine of CKEditor 5 but coupled with their own UI created in, for example, React. The most notable example is Microsoft Teams, believe it or not. Yes, it's using CKEditor 5. + +![Different types of WYSIWYG editor UI.][6] + +### 2. Choose a full-featured editor or a lightweight one + +In digital content editing, there's no "one size fits all" solution. Depending on the type of content you need, the feature set differs. CKEditor 5 has a plugin-based architecture and features are implemented in a highly decoupled and granular way. + +It's easy to get lost in all the possible features, sub-features, and configuration options without some guidance. Here are some useful resources to help you build the editor that's a perfect match for your use case: + +- Try the [feature-rich editor demo][7] to test some of the most popular features. +- Look at some other editor setups [on the demo page][5]. You can find the complete source code of each demo in the [ckeditor5-demos repository][8]. +- The entire **Features** section of the [documentation][9] explains all CKEditor 5 features, possible configuration options, toolbar buttons, and API. +- [CKEditor 5 online builder][10] is a quick and easy solution to build your custom editor in 5 steps. It allows you to choose the UI type, plugins, toolbar setup, and UI language and then download a ready-to-use editor bundle. + +![A full-featured and lightweight WYSIWYG editor.][11] + +### 3. Integrations with JavaScript frameworks + +The online builder and demos are a fun playground if you want to test a few solutions in a no-code fashion, but you may need tighter integration. You can also install CKEditor 5 with npm, or bundle it with your app using webpack or Vite. CKEditor 5 is written in pure TypeScript and JavaScript, so it's compatible with every JavaScript framework available. + +Four official integrations are available for the most popular frameworks: + +- Angular +- React +- Vue.js v2 +- Vue.js v3 + +For example, to set up the Classic Editor (used in my first example) in React, you can use this one-liner: + +``` +npx create-react-app ckeditor5-classic-demo \ +--template @ckeditor/ckeditor5-classic +``` + +### 4. Markdown and HTML + +For some developers, Markdown might feel like second nature. It has its limitations, though. For example, support for tables is quite basic. Still, for many users, crafting content in Markdown is much more efficient than using the editor UI to format it. + +And here's the fun part. Thanks to CKEditor's autoformatting, you can use Markdown syntax when writing, and the editor formats the content as you type.This is a nice compromise for covering the needs of both power users and users unfamiliar with Markdown and preferring to create rich text using the WYSIWYG UI. + +![YouTube Video][11] + +### 5. Different input and output + +Autoformatting is just one aspect of Markdown support in CKEditor 5. Another is that you can configure the editor to treat Markdown as its input and output format instead of HTML. + +![Support for Markdown source in CKEditor 5.][13] + +Here's another challenge. If you allow the users to input content in your app, they can create it there but also paste it from different sources (other websites, Microsoft Word, Google Docs). They naturally expect the structure and formatting of pasted text to be preserved. This may result in some nasty styles and unwanted elements making their way to your content, and you have to clean up. Instead of trying to reconcile these two potential clashes of interest by yourself, it's better to rely on a good editor that solves this problem for you. + +In the case of CKEditor 5, the **Paste from Office** feature provides great support for pasting content from Word or Google Docs, preserving the structure, and translating the formatting into semantic content. + +The default CKEditor 5 settings also prevent users from adding or pasting elements and styles unsupported by the feature set chosen for your editor. If you, as an integrator, configure the editor to support just links, lists, and basic styles such as bold or italic, then the user can't add tables, images, or YouTube videos. + +Then again, if you would like your editor to accept content that's not covered by your feature set or even not supported by any existing CKEditor 5 features, you can achieve that thanks to the so-called **General HTML support** functionality. This is useful for loading pre-existing content created in other tools, and can make your migration to CKEditor 5 easier. + +### Building custom plugins + +No matter how great a ready-made solution is, you may still need to customize it even more. After all, thanks to reusing an advanced WYSIWYG editing component, you've saved yourself plenty of time and coding effort. You may want to get your hands dirty and polish your solution a bit, for example, by creating custom plugins. + +Here are some useful resources to get you started: + +- [Creating your own plugins][14]: Documentation for developers. +- [Package generator][15]: A handy tool that helps you set up your plugin development environment. +- [CKEditor 5 inspector][16]: Debugging tools for editor internals like model, view, and commands. + +![An editor instance examined in CKEditor 5 inspector.][17] + +### How to get CKEditor + +CKEditor 5 is licensed under the terms of GPL 2 or later, but if you are running an open source project under an OSI-approved license incompatible with GPL, the CKEditor team is [happy to support you][18] with a no-cost license. + +CKEditor 5 is a powerful modern rich text editor framework that allows developers to build upon an open source, tested, and reliable editor. Start-ups, leading brands, and software providers use it to improve both their content creation and content production workflows. If your users value those benefits, [check it out][2]! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/4/website-text-editor-ckeditor + +作者:[Anna Tomanek][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/annatomanek +[b]: https://github.com/lkxed/ +[1]: https://github.com/ckeditor/ckeditor5 +[2]: https://ckeditor.com/ckeditor-5/ +[3]: https://ckeditor.com/docs/ckeditor5/latest/api/module_editor-classic_classiceditor-ClassicEditor.html#static-function-create +[4]: https://opensource.com/sites/default/files/2023-03/100002010000063E00000138357C421E3B4E1584.webp +[5]: https://ckeditor.com/ckeditor-5/demo/ +[6]: https://opensource.com/sites/default/files/2023-03/1000020100000641000003857D449853B71C3F41.webp +[7]: https://ckeditor.com/ckeditor-5/demo/feature-rich/ +[8]: https://github.com/ckeditor/ckeditor5-demos +[9]: https://ckeditor.com/docs/ckeditor5/latest/index.html +[10]: https://ckeditor.com/ckeditor-5/online-builder/ +[11]: https://opensource.com/sites/default/files/2023-03/100002010000064100000385F7C262D126752F22.webp +[12]: https://www.youtube.com/embed/8um84htrjXQ +[13]: https://opensource.com/sites/default/files/2023-03/10000201000006410000038504C1A8A0DEA95683.webp +[14]: https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/plugins.html +[15]: https://www.npmjs.com/package/ckeditor5-package-generator +[16]: https://ckeditor.com/docs/ckeditor5/latest/framework/guides/development-tools.html#ckeditor-5-inspector +[17]: https://opensource.com/sites/default/files/2023-03/10000201000007F60000060EFCB2F92FBCC02B4E.webp +[18]: https://ckeditor.com/contact/ \ No newline at end of file From 8517d583ba125a30d3689793576ca9af2afafd7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Tue, 4 Apr 2023 01:33:47 +0800 Subject: [PATCH 54/83] =?UTF-8?q?[=E6=89=8B=E5=8A=A8=E9=80=89=E9=A2=98][te?= =?UTF-8?q?ch]:=2020230403.4=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20How?= =?UTF-8?q?=20to=20Install=20KVM=20on=20Rocky=20Linux=209=20=20AlmaLinux?= =?UTF-8?q?=209.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ow to Install KVM on Rocky Linux 9 AlmaLinux 9.md | 242 ++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md diff --git a/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md b/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md new file mode 100644 index 0000000000..b46c8cb942 --- /dev/null +++ b/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md @@ -0,0 +1,242 @@ +[#]: subject: "How to Install KVM on Rocky Linux 9 / AlmaLinux 9" +[#]: via: "https://www.linuxtechi.com/install-kvm-on-rocky-linux-almalinux/" +[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/" +[#]: collector: "lkxed" +[#]: translator: " " +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +How to Install KVM on Rocky Linux 9 / AlmaLinux 9 +====== + +In this guide, we demonstrate how to install KVM on Rocky Linux 9 / Alma Linux 9. + +KVM, short for Kernel Virtualization Machine, is an opensource virtualization platform designed for the Linux kernel. It’s a type 1 hypervisor, or commonly referred to as a bare metal hypervisor. It allows users to create and manage multiple guest machines which can be spun from either Linux or Windows operating systems. + +Like most virtualization platforms, it abstracts hardware resources such as CPU, memory, storage, network, graphics etc. and allocates them to guest machines which run independently of the host. + +##### Prerequisites + +- Pre Installed Rocky Linux 9 / AlmaLinux 9 +- Sudo User with admin rights +- Internet Connectivity + +### 1)  Verify if hardware Virtualization is Enabled + +To start off, you need to verify if your system has the virtualization feature enabled. On most modern systems, this feature comes already enabled in the BIOS. But just to be sure, you can verify if virtualization is enabled as shown. + +The command probes for the presence of vmx (Virtual Machine Extension) which is a CPU flag for Intel hardware virtualization or svm which is the flag for AMD hardware virtualization. + +``` +$ cat /proc/cpuinfo | egrep "vmx|svm" +``` + +From the following output, you can see that our system has Intel Hardware virtualization enabled. + +### 2)  Install KVM on Rocky Linux 9 / AlmaLinux 9 + +Once you have ensured that virtualization is enabled, the next step is to install KVM and management tools. To do so, run the following dnf command. + +``` +$ sudo dnf install qemu-kvm virt-manager libvirt virt-install virt-viewer virt-top bridge-utils  bridge-utils virt-top libguestfs-tools -y +``` + +Once the installation is complete, run the following command to check if the required KVM modules have been loaded. + +``` +$ lsmod | grep kvm +``` + +You should get the following output to confirm that the necessary modules have been loaded. + +### 3)  Start and Enable the libvirtd daemon + +In the next step, be sure to start the libvirtd daemon. This is a server-side daemon component that runs and manages tasks on virtualized guests. It is used to manage virtualization technologies such as Xen, KVM, and ESXi to mention a few. + +To start the libvirtd daemon, run the command: + +``` +$ sudo systemctl start libvirtd +``` + +Be sure to enable the service to start on boot time. + +``` +$ sudo systemctl enable --now libvirtd +``` + +Verify that the libvirtd daemon is running as follows. + +``` +$ sudo systemctl status libvirtd +``` + +### 4)  Setup the Bridge Interface + +So far, we have installed KVM, and all the management tools and we can, in fact, proceed to spin up a virtual machine. However, it would be nice if we can access the VMs from outside the hypervisor network. To accomplish this, we need to create a bridge interface. + +First, identify the network interfaces on your system. + +``` +$ sudo nmcli connection show +``` + +From the output, ens160 is the active network interface, be sure to take note of the interface in your case as you will use it along the way. + +To begin creating the bridge, first, delete the connection using its UUID in the following syntax. + +$ sudo nmcli connection delete UUID + +In our case, the command will be: + +``` +$ sudo nmcli connection delete 19e98123-9a84-30a6-bc59-a7134446bb26 +``` + +You will get a confirmation that the connection has successfully been deleted. + +Before proceeding any further, it would be prudent to have the following details at hand: + +- BRIDGE NAME – Preferred name of the new bridge (e.g. “br1”) +- DEVICE NAME – This is the name of your network interface. This will serve as the bridge slave (e.g., “ens160”) +- IP ADDRESS/SUBNET – The IP address and subnet for the bridge network (e.g., “192.168.2.50/24”). Note that this should correspond with your network subnet and IP addressing. +- GATEWAY – Default gateway address of your network (e.g. “192.168.2.1”) +- DNS1 and DNS2 – Preferred DNS addresses (e.g. “8.8.8.8” and “8.8.4.4”) + +Moving on, create a new bridge interface using the following syntax. + +$ sudo nmcli connection add type bridge autoconnect yes con-name BRIDGE NAME ifname BRIDGE NAME + +In our case, br1 is the preferred bridge interface name. Therefore, the command will be as shown. + +``` +$ sudo nmcli connection add type bridge autoconnect yes con-name br1 ifname br1 +``` + +In the next steps, you will modify the bridge by specifying the IP subnet, Gateway, and DNS values. + +Start off by specifying the IP subnet using the following syntax. + +$ sudo nmcli connection modify BRIDGE NAME ipv4.addresses IP ADDRESS/SUBNET ipv4.method manual + +According to our setup, the command will be. + +``` +$ sudo nmcli connection modify br1 ipv4.addresses 192.168.2.150/24 ipv4.method manual +``` + +Next, specify the gateway address using the following syntax + +$ sudo nmcli connection modify BRIDGE NAME ipv4.gateway GATEWAY + +According to our network, the command takes the following format. + +``` +$ sudo nmcli connection modify br1 ipv4.gateway 192.168.2.1 +``` + +The syntax for the  DNS address is as follows. + +$ sudo nmcli connection modify BRIDGE NAME ipv4.dns DNS1 +ipv4.dns DNS2 + +And the command takes the following format. + +``` +$ sudo nmcli connection modify br1 ipv4.dns 8.8.8.8 +ipv4.dns 8.8.4.4 +``` + +Thereafter, use the following command to add the bridge slave. + +$ sudo nmcli connection add type bridge-slave autoconnect yes con-name DEVICE NAME ifname DEVICE NAME master BRIDGE NAME + +Using our values, the command is as shown. + +``` +$ sudo nmcli connection add type bridge-slave autoconnect yes con-name ens160 ifname ens160 master br1 +``` + +You will get the following confirmation that the bridge slave was successfully added. Keep in mind that the bridge slave is your network interface or adapter. + +To confirm that the bridge was created, run the following command: + +``` +$ sudo nmcli connection show +``` + +From the output, you can see that the bridge interface is listed. + +To activate it, run the command: + +``` +$ sudo nmcli connection up br1 +``` + +In addition, you can verify this using the ip addrcommand. + +``` +$ ip addr | grep br1 +``` + +Lastly, edit the bridge configuration file. + +``` +$ sudo vi /etc/qemu-kvm/bridge.conf +``` + +Add the following line. + +``` +allow all +``` + +Then restart the virtualization daemon to apply the change + +``` +$ sudo systemctl restart libvirtd +``` + +### 5)  Create a Virtual Machine + +With KVM installed and the bridge connection configured, let’s now create a virtual machine.  Before doing, assign the necessary ownership right to the logged-in user in order to run commands without switching to root. + +``` +$ sudo chown -R $USER:libvirt /var/lib/libvirt/ +``` + +On the command line, we will create a virtual machine using Ubuntu 20.04 ISO image using the following syntax. + +``` +$ virt-install \ +--name Ubuntu \ +--ram 2048 \ +--vcpus 2 \ +--disk path=/var/lib/libvirt/images/ubuntu-20.04.img,size=15 \ +--os-variant ubuntu20.04 \ +--network bridge=br1,model=virtio \ +--graphics vnc,listen=0.0.0.0 \ +--console pty,target_type=serial \ +--cdrom /home/linuxtechi/Downloads/ubuntu-20.04.4-desktop-amd64.iso +``` + +Once the command is executed, the graphical screen session will be launched, and the installation of the guest operating system will commence. + +##### Conclusion + +This concludes our article on how to install KVM on Rocky Linux 9 / AlmaLinux 9 Your feedback s highly welcome. + +Also Read: How to Manage KVM Virtual Machines with Cockpit Web Console + +-------------------------------------------------------------------------------- + +via: https://www.linuxtechi.com/install-kvm-on-rocky-linux-almalinux/ + +作者:[Pradeep Kumar][a] +选题:[lkxed][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.linuxtechi.com/author/pradeep/ +[b]: https://github.com/lkxed/ From 24e83609c81d280b19b1407b96fbb7486037dd07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=AD=E5=BC=80=E7=AE=B1?= Date: Tue, 4 Apr 2023 01:34:58 +0800 Subject: [PATCH 55/83] =?UTF-8?q?Update=2020230403.4=20=E2=AD=90=EF=B8=8F?= =?UTF-8?q?=E2=AD=90=EF=B8=8F=20How=20to=20Install=20KVM=20on=20Rocky=20Li?= =?UTF-8?q?nux=209=20=20AlmaLinux=209.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...3.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md b/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md index b46c8cb942..6c596627aa 100644 --- a/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md +++ b/sources/tech/20230403.4 ⭐️⭐️ How to Install KVM on Rocky Linux 9 AlmaLinux 9.md @@ -225,8 +225,6 @@ Once the command is executed, the graphical screen session will be launched, and This concludes our article on how to install KVM on Rocky Linux 9 / AlmaLinux 9 Your feedback s highly welcome. -Also Read: How to Manage KVM Virtual Machines with Cockpit Web Console - -------------------------------------------------------------------------------- via: https://www.linuxtechi.com/install-kvm-on-rocky-linux-almalinux/ From d7494ff73153e6dbceca8a7259fcd3c6e62cfa8c Mon Sep 17 00:00:00 2001 From: geekpi Date: Tue, 4 Apr 2023 08:58:48 +0800 Subject: [PATCH 56/83] translating --- ... Create a ChatBot in Mattermost with Python.md | 133 ------------------ ... Create a ChatBot in Mattermost with Python.md | 133 ++++++++++++++++++ 2 files changed, 133 insertions(+), 133 deletions(-) delete mode 100644 sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md create mode 100644 translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md diff --git a/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md b/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md deleted file mode 100644 index 57beb542cc..0000000000 --- a/sources/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md +++ /dev/null @@ -1,133 +0,0 @@ -[#]: subject: "Create a ChatBot in Mattermost with Python" -[#]: via: "https://opensource.com/article/23/3/chatbot-mattermost-python" -[#]: author: "Dr. Michael J. Garbade https://opensource.com/users/drmjg" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Create a ChatBot in Mattermost with Python -====== - -ChatOps is a collaboration model that connects people, processes, tools, and automation into a transparent workflow. [Mattermost][1] is an open source, self-hosted messaging platform that enables organizations to communicate securely, effectively, and efficiently. It's a great [open source alternative][2] to Slack, Discord, and other proprietary messaging platforms. This article outlines the steps to create a ChatOps bot on Mattermost, including the necessary code examples and explanations. - -### Prerequisites - -Before starting, ensure that you have access to a Mattermost server, have [Python installed][3], and have installed the Mattermost Python driver [using pip][4]. - -### Create a bot account on Mattermost - -To create a bot account, access the Mattermost System Console, and add a bot account with appropriate access permissions. Retrieve the bot's username and password for use in the Python script. - -### Set up the Mattermost Python driver - -Install the Mattermost Python driver using `pip`, and import it in the Python script. Create a new driver instance and log in to the Mattermost server. - -### Create the ChatOps bot in Python - -Create a new Python script, define the necessary libraries to be imported, and implement the bot's functionality using the Mattermost driver's API. Write code to handle messages, commands, and other events, and use the Mattermost driver's API methods to send messages and notifications to channels and users. Finally, debug and test the ChatOps bot. - -### Example of ChatOps bot code - -Here is an example Python code for a simple ChatOps bot that responds to a user's message: - -``` -from mattermostdriver import Driver - -bot_username = 'bot_username' -bot_password = 'bot_password' -server_url = 'https://your.mattermost.server.url' - -def main(): - driver = Driver({'url': server_url, 'login_id': bot_username, 'password': bot_password, 'scheme': 'https'}) - driver.login() - team = driver.teams.get_team_by_name('team_name') - channel = driver.channels.get_channel_by_name(team['id'], 'channel_name') - - @driver.on('message') - def handle_message(post, **kwargs): - if post['message'] == 'hello': - driver.posts.create_post({ - 'channel_id': post['channel_id'], - 'message': 'Hi there!' - }) - - driver.init_websocket() - -if __name__ == '__main__': - main() -``` - -### Add features - -Once you've created a basic ChatOps bot on Mattermost, you can add more features to extend its functionality. Here are the steps: - -- **Determine the feature you want to add**: Before writing the code, you must determine the feature to add to your ChatOps bot. This can be anything from sending notifications to integrating with third-party tools. -- **Write the code**: Once you have determined the feature you want to add, you can start writing the code. The code will depend on the feature you add, but you can use the Mattermost Python driver to interact with the Mattermost API and implement the feature. -- **Test the code**: After writing the code, it's important to test it to ensure that it works as expected. Before deploying it to your production server, you can test the code on a development server or in a test channel. -- **Deploy the code**: Once you have tested it and it works as expected, you can deploy it to your production server. Follow your organization's deployment process and ensure the new code doesn't break any existing functionality. -- **Document the new feature**: It's important to document the new feature you have added to your ChatOps bot. This will make it easier for other team members to use the bot and understand its capabilities. - -One example of a ChatOps Bot feature could be integrating with a third-party tool and providing status updates on certain tasks. - -``` -from mattermostdriver import Driver -import requests - -bot_username = 'bot_username' -bot_password = 'bot_password' -server_url = 'https://your.mattermost.server.url' - -def main(): - driver = Driver({'url': server_url, 'login_id': bot_username, 'password': bot_password, 'scheme': 'https'}) - driver.login() - team = driver.teams.get_team_by_name('team_name') - channel = driver.channels.get_channel_by_name(team['id'], 'channel_name') - - @driver.on('message') - def handle_message(post, **kwargs): - if post['message'] == 'status': - # Make a request to the third-party tool API to get the status - response = requests.get('https://api.thirdpartytool.com/status') - if response.status_code == 200: - status = response.json()['status'] - driver.posts.create_post({ - 'channel_id': post['channel_id'], - 'message': f'The status is {status}' - }) - else: - driver.posts.create_post({ - 'channel_id': post['channel_id'], - 'message': 'Failed to get status' - }) - - driver.init_websocket() - -if __name__ == '__main__': - main() -``` - -In this example, the ChatOps bot listens for the command "status" and makes a request to a third-party tool API to get the current status. It then posts the status update in the Mattermost channel where the command was issued. This allows team members to quickly get updates on the status of the task without having to leave the chat platform. - -### Open source ChatOps - -In summary, creating a ChatOps bot on Mattermost is a simple process that can bring numerous benefits to your organization's communication and workflow. This article has provided a step-by-step breakdown and code examples to help you get started on creating your bot and even customize it by adding new features. Now that you know the basics, you can further explore ChatOps and Mattermost to optimize your team's collaboration and productivity. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/3/chatbot-mattermost-python - -作者:[Dr. Michael J. Garbade][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/drmjg -[b]: https://github.com/lkxed/ -[1]: https://mattermost.com/ -[2]: https://opensource.com/alternatives/slack -[3]: https://opensource.com/article/17/10/python-101 -[4]: https://opensource.com/article/20/3/pip-linux-mac-windows \ No newline at end of file diff --git a/translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md b/translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md new file mode 100644 index 0000000000..2b1744464d --- /dev/null +++ b/translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md @@ -0,0 +1,133 @@ +[#]: subject: "Create a ChatBot in Mattermost with Python" +[#]: via: "https://opensource.com/article/23/3/chatbot-mattermost-python" +[#]: author: "Dr. Michael J. Garbade https://opensource.com/users/drmjg" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +使用 Python 在 Mattermost 中创建聊天机器人 +====== + +ChatOps 是一种协作模型,它将人员、流程、工具和自动化连接到一个透明的工作流中。[Mattermost][1] 是一个开源、自托管的消息平台,使组织能够安全、有效和高效地进行通信。它是 Slack、Discord 和其他专有消息平台的绝佳[开源替代品][2]。本文概述了在 Mattermost 上创建 ChatOps 机器人的步骤,包括必要的代码示例和解释。 + +### 先决条件 + +在开始之前,请确保你可以访问 Mattermost 服务器,[安装 Python][3],并[使用 pip][4] 安装 Mattermost Python 驱动。 + +### 在 Mattermost 上创建一个机器人帐户 + +要创建机器人帐户,请访问 Mattermost 系统控制台,并添加具有适当访问权限的机器人帐户。检索机器人的用户名和密码以在 Python 脚本中使用。 + +### 设置 Mattermost Python 驱动 + +使用 pip 安装 Mattermost Python 驱动,并将其导入 Python 脚本。创建一个新的驱动实例并登录到 Mattermost 服务器。 + +### 在 Python 中创建 ChatOps 机器人 + +创建一个新的 Python 脚本,定义要导入的必要库,并使用 Mattermost 驱动的 API 实现机器人的功能。编写代码来处理消息、命令和其他事件,并使用 Mattermost 驱动的 API 方法向通道和用户发送消息和通知。最后,调试和测试 ChatOps 机器人。 + +### ChatOps 机器人代码示例 + +以下是响应用户消息的简单 ChatOps 机器人的示例 Python 代码: + +``` +from mattermostdriver import Driver + +bot_username = 'bot_username' +bot_password = 'bot_password' +server_url = 'https://your.mattermost.server.url' + +def main(): + driver = Driver({'url': server_url, 'login_id': bot_username, 'password': bot_password, 'scheme': 'https'}) + driver.login() + team = driver.teams.get_team_by_name('team_name') + channel = driver.channels.get_channel_by_name(team['id'], 'channel_name') + + @driver.on('message') + def handle_message(post, **kwargs): + if post['message'] == 'hello': + driver.posts.create_post({ + 'channel_id': post['channel_id'], + 'message': 'Hi there!' + }) + + driver.init_websocket() + +if __name__ == '__main__': + main() +``` + +### 添加功能 + +在 Mattermost 上创建基本的 ChatOps 机器人后,你可以添加更多功能来扩展其功能。以下是步骤: + +- **确定要添加的功能**:在编写代码之前,你必须确定要添加到 ChatOps 机器人的功能。可以是从发送通知到与第三方工具集成的任何事情。 +- **编写代码**:确定要添加的功能后,就可以开始编写代码了。代码将取决于添加的功能,但你可以使用 Mattermost Python 驱动与 Mattermost API 交互并实现该功能。 +- **测试代码**:编写代码后,重要的是对其进行测试以确保其按预期工作。在将其部署到生产服务器之前,你可以在开发服务器或测试通道中测试代码。 +- **部署代码**:当你对其进行了测试并且它按预期工作,你就可以将其部署到你的生产服务器。遵循你组织的部署流程并确保新代码不会破坏任何现有功能。 +- **记录新功能**:记录你添加到 ChatOps 机器人的新功能非常重要。这将使其他团队成员更容易使用该机器人并了解其功能。 + +一个 ChatOps Bot 功能示例是与第三方工具集成并提供某些任务的状态更新。 + +``` +from mattermostdriver import Driver +import requests + +bot_username = 'bot_username' +bot_password = 'bot_password' +server_url = 'https://your.mattermost.server.url' + +def main(): + driver = Driver({'url': server_url, 'login_id': bot_username, 'password': bot_password, 'scheme': 'https'}) + driver.login() + team = driver.teams.get_team_by_name('team_name') + channel = driver.channels.get_channel_by_name(team['id'], 'channel_name') + + @driver.on('message') + def handle_message(post, **kwargs): + if post['message'] == 'status': + # Make a request to the third-party tool API to get the status + response = requests.get('https://api.thirdpartytool.com/status') + if response.status_code == 200: + status = response.json()['status'] + driver.posts.create_post({ + 'channel_id': post['channel_id'], + 'message': f'The status is {status}' + }) + else: + driver.posts.create_post({ + 'channel_id': post['channel_id'], + 'message': 'Failed to get status' + }) + + driver.init_websocket() + +if __name__ == '__main__': + main() +``` + +在此示例中,ChatOps 机器人监听命令 “status” 并向第三方工具 API 发出请求以获取当前状态。然后它会在发出命令的 Mattermost 频道中发布状态更新。这使团队成员无需离开聊天平台即可快速获取任务状态的更新。 + +### 开源 ChatOps + +总之,在 Mattermost 上创建 ChatOps 机器人是一个简单的过程,可以为你组织的沟通和工作流程带来许多好处。本文提供了分步分解和代码示例,可帮助你开始创建你的机器人,甚至可以通过添加新功能对其进行自定义。现在你了解了基础知识,你可以进一步探索 ChatOps 和 Mattermost 以优化团队的协作和生产力。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/chatbot-mattermost-python + +作者:[Dr. Michael J. Garbade][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/drmjg +[b]: https://github.com/lkxed/ +[1]: https://mattermost.com/ +[2]: https://opensource.com/alternatives/slack +[3]: https://opensource.com/article/17/10/python-101 +[4]: https://opensource.com/article/20/3/pip-linux-mac-windows \ No newline at end of file From 745de1be29e969392924b259d8e8287b393ba987 Mon Sep 17 00:00:00 2001 From: geekpi Date: Tue, 4 Apr 2023 09:02:11 +0800 Subject: [PATCH 57/83] translating --- .../tech/20230324.0 ⭐️ Open source tools for mind mapping.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md b/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md index 3f4ab7054d..962e2d318b 100644 --- a/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md +++ b/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/23/3/open-source-mind-mapping" [#]: author: "Amrita https://opensource.com/users/amrita42" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 7b2b542892de8243ea94bdb1252b59f78d238e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91?= Date: Tue, 4 Apr 2023 13:53:17 +0800 Subject: [PATCH 58/83] translated --- ...️⭐️ Debian 12 Bookworm Best New Features.md | 184 ------------------ ...️⭐️ Debian 12 Bookworm Best New Features.md | 184 ++++++++++++++++++ 2 files changed, 184 insertions(+), 184 deletions(-) delete mode 100644 sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md create mode 100644 translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md diff --git a/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md b/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md deleted file mode 100644 index 5b06930b9a..0000000000 --- a/sources/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md +++ /dev/null @@ -1,184 +0,0 @@ -[#]: subject: "Debian 12 Bookworm: Best New Features" -[#]: via: "https://www.debugpoint.com/debian-12-features/" -[#]: author: "Arindam https://www.debugpoint.com/author/admin1/" -[#]: collector: "lkxed" -[#]: translator: "robsean" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Debian 12 Bookworm: Best New Features -====== - -**We give you a summary of the new features and enhancements of the Debian 12 Bookworm (upcoming) release.** - -Debian 12 has been under development for a few months and slowly moving towards a final release. As of publishing this, it is currently under the hard freeze. That means no major package changes or enhancements are expected. - -This release comes with several new features and improvements, making it an exciting release for Debian enthusiasts. In this article, we will discuss the best new features of Debian 12 Bookworm and how they can benefit users. - -Let’s take a look. - -![Debian 12 Bookworm GNOME Desktop][1] - -### Debian 12 Bookworm: New Features - -#### Linux Kernel - -This release features Linux mainline Kernel 6.1, released in December 2022. Timeline-wise, Debian 12 is only one Kernel release behind as of now. Hence, you get the latest and greatest hardware support with stable Kernel 6.1. - -Highlights features of this Kernel include initial Rust framework support, updates to Intel and AMD’s upcoming CPU/GPU line-ups, performance improvements of btrfs and other file systems and more. - -We already have a dedicated article about [Kernel 6.1 f][2][e][2][atures][2] if you want to learn more. - -#### Non-free packages in the installer - -A critical change related to the Debian ISO files arrives in Debian 12. Since the beginning, Debian has provided different ISO files for “Free” and “non-free” packages. The proprietary “non-Free” packages are part of separate ISO files. Hence, if you need driver support for your special hardware, then you can download separate ISO files for your laptop/desktop/servers. - -However, this experience makes it a little confusing for the end user to pick the correct Debian ISO. The Debian team launched a community voting last year to pick the best option to handle “non-free” packages. - -As [per the results][3], the primary ISO files now contain both free and “non-free” ISO files. - -So, what changed? - -When you try to download official Debian ISO files, you only need to choose one ISO file (DVD size) containing everything. Furthermore, the small net-installation ISO is also present, including “non-free” firmware. - -You can look at [this guide][4] regarding Debian ISO. - -#### Pipewire by default for GNOME - -If you use GNOME desktop in Debian Linux, then a piece of good news for you. - -Debian 12 with GNOME desktop [making Pipewire and Wireplumber manager by default][5] sound server, replacing Pulseaudio. The modern Pipewire is already introduced in Ubuntu, Fedora, Pop!_OS and other leading distros. - -![Pipewire in Debian 12][6] - -#### A new version of Apt (2.6) package manager - -Debian 12 is introducing the latest version of apt package manager version 2.6. [Apt 2.6][7] version specifically handles the non-free ISO image support introduced in this release. The changes include the non-free firmware will be enabled by default, and apt will show updates to the non-free packages. - -#### Desktop environments - -All the major desktop environments are now up to date in Debian 12, except GNOME. Because [GNOME 44][8] was released just a few days back, it won’t make it to Bookworm due to schedule conflicts. Debian 12 is already on hard freeze. - -Hence, in Debian 12, you get the [GNOME 43][9]version which is not that far behind compared to the latest release. Furthermore, if you are shifting from [Debian 11][10], then it will be a huge GNOME upgrade. - -Fortunately, [KDE Plasma 5.27][11] is now available in this release. KDE Plasma is the final Plasma 5 version and is likely to become LTS until Plasma 6 is ready. Hence, it was a significant upgrade. The KDE Plasma maintainers managed to pull this off. - -In addition, [Xfce 4.18][12] in Debian 12 is bringing an improved desktop experience with stunning Thunar features. Also, LXQt 1.2, MATE 1.26 and LXDE 11 are the latest versions featured in Debian 12. - -Here’s a summary: - -- GNOME 43 -- KDE Plasma 5.27 -- LXDE 11 -- LXQt 1.2 -- MATE 1.26 -- Xfce 4.18 - -#### Core modules and applications - -Most of the major applications are refreshed. Notably, Python 3.11 is included in Debian 12, which would help the developers and many use cases. In addition, LibreOffice 7.4 and Firefox 102.9 ESR are two noteworthy updates. Here’s a small list of key applications and package updates: - -- LibreOffice 7.4.4 -- Firefox 102.9 ESR -- GIMP 2.10.32 -- OpenJDK 11.6 -- PHP 8.2 -- Python 3.11+ -- Samba 4.17 - -#### Miscellaneous Updates - -- Debian 12 now detects Windows 11 while using in a dual-boot setup. -- Screen reader support is enabled by default for the Cinnamon desktop in Debian -- Automatic launching of speech synthesis after 30 seconds timeout -- Easier detection of multipath devices -- Support for multiple initrd paths -- Support for new ARM and RISC-V devices -- Experimental DMRAID support is dropped - -You can learn about additional changes [here][13]. - -#### Default theme and wallpapers - -In every release, Debian introduces some stunning artwork from the community. Debian 12 default artwork themed as “Emerald”. - -“_Elegantly polished and chiseled, or in their raw and natural state, gemstones can have an infinite number of shapes.”_ - -With the Emerald theme, the creator wanted to combine light and minerals in a clean, almost ethereal design. - -The default theme and banners are visible across the installer, animated Plymouth, wallpaper and all the places. - -Here are some of the images picked up from the [official gallery][14]. - -![Default wallpaper][15] - -![Debian 12 Plymouth][16] - -### How to Download Debian 12 - -**Note**: Debian 12 is not yet released as stable. So, try not to use it for serious work or upgrade to Bookworm from Bullseye. - -If you are running Debian 11 bullseye, you can open the `/etc/apt/sources.list` via any text editor and add the following lines. Make sure to verify the mirror URL and change the following command. - -``` -deb http://http.us.debian.org/debian bookworm main non-free contribdeb http://security.debian.org/ bookworm/updates main contrib non-freedeb http://http.us.debian.org/debian sid main non-free contrib -``` - -After adding those, refresh the apt cache: - -``` -sudo apt update -``` - -And then, run the following to get the update. - -``` -sudo apt dist-upgrade -``` - -For fresh ISO download, visit any of the below links. - -[Download Debian 12 (DVD) ISO – Alpha2][17] - -### Wrapping Up - -In conclusion, Debian 12 Bookworm is an impressive release that brings several new features and improvements. From the latest desktops to a new kernel and updated packages, this release has a lot to offer for both new and experienced Debian users. - -With its focus on stability, security, and open-source principles, Debian 12 Bookworm can be the best choice for those seeking a reliable alternative to Ubuntu and a versatile operating system. - -The final release of this version is expected by Q2 2023. - -_[Debian 12 changelog][18] (a little outdated)_ - --------------------------------------------------------------------------------- - -via: https://www.debugpoint.com/debian-12-features/ - -作者:[Arindam][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.debugpoint.com/author/admin1/ -[b]: https://github.com/lkxed/ -[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Bookworm-GNOME-Desktop.jpg -[2]: https://www.debugpoint.com/linux-kernel-6-1/ -[3]: https://lists.debian.org/debian-vote/2022/10/msg00000.html -[4]: https://www.debugpoint.com/download-debian-iso/ -[5]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1020249 -[6]: https://www.debugpoint.com/wp-content/uploads/2023/03/Pipewire-in-Debian-12.jpg -[7]: https://launchpad.net/ubuntu/+source/apt/+changelog -[8]: https://www.debugpoint.com/gnome-44/ -[9]: https://www.debugpoint.com/gnome-43/ -[10]: https://www.debugpoint.com/debian-11-features/ -[11]: https://www.debugpoint.com/kde-plasma-5-27/ -[12]: https://www.debugpoint.com/xfce-4-18-review/ -[13]: https://lists.debian.org/debian-devel-announce/2022/09/msg00004.html -[14]: https://wiki.debian.org/DebianArt/Themes/Emerald -[15]: https://www.debugpoint.com/wp-content/uploads/2023/03/Default-wallpaper.jpg -[16]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Plymouth.jpg -[17]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/ -[18]: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html diff --git a/translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md b/translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md new file mode 100644 index 0000000000..13b09c1f5a --- /dev/null +++ b/translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md @@ -0,0 +1,184 @@ +[#]: subject: "Debian 12 Bookworm: Best New Features" +[#]: via: "https://www.debugpoint.com/debian-12-features/" +[#]: author: "Arindam https://www.debugpoint.com/author/admin1/" +[#]: collector: "lkxed" +[#]: translator: "robsean" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Debian 12 Bookworm: 最好的新特色功能 +====== + +**我们将给予你们一份关于 Debian 12 Bookworm (即将到来) 发布版本的新的特色功能和增强功能的概述** + +Debian 12 已经开发了几个月了,并且正在慢慢走向最终的发布版本。截止发稿时, 它当前正处于冻结状态下。这意味着:预期着不再会有重大的软件包更改或增强。 + +这个发布版本带来一些新的特色功能和改善功能,使其成为 Debian 爱好者的一个令人兴奋的版本。在这篇文章中,我们将讨论 Debian 12 Bookworm 的最好的新的特色功能,以及它们如何使用户受益。 + +让我们来看看。 + +![Debian 12 Bookworm GNOME Desktop][1] + +### Debian 12 Bookworm: 新的特色功能 + +#### Linux 内核 + +这个发布版本以发布于2022年12月的 Linux 主线内核 Kernel 6.1 为特色。从时间线上看,到目前为止,Debian 12 的内核版本号只比最新内核的版本号落后一个。因此,你将通过使用稳定的 Linux 内核 6.1 版本来获取最新的和最好的硬件支持。 + +这个内核的亮点特色功能包括:初始支持 Rust 框架、更新支持 Intel 和 AMD 即将到来的 CPU/GPU 系列硬件、改善 btrfs 和其它文件系统系统的性能等等。 + +我们已经有一篇关于 [Kernel 6.1][2][e][2] [特色功能][2] 的特别文章,如果你想要了解更多的话。 + +#### 在安装程序中的非自由软件包 + +在 Debian 12 中出现了一个与 Debian 的 ISO 文件相关的重大更改。从一开始,Debian 就分别针对 “自由” 和 “非自由” 软件包提供了不同的 ISO 文件。专有的 “非自由” 软件包是独立的 ISO 文件的一部分。因此,如果你需要针对你特有硬件的驱动支持,那么你可以针对你的笔记本/台式机/服务器下载不同的 ISO 文件。 + +然而,这种体验使终端用户在选择恰当的 Debian 的 ISO 时感到迷惑。为此,Debian 团队去年发起一次社区投票,以选出如何处理 “非自由” 的最好的选项。 + +根据 [选出的结果][3] , 现在,基本的 ISO 文件现在包含 “自由” 和 “非自由” 的软件包。 + +那么,发生了什么变化? + +在我们尝试现在官方的 Debian 的 ISO 文件时,你只需要选择一个包含所有东西的 ISO 文件 (DVD 大小的体积) 。此外,也提供小型的网络安装的 ISO 文件,包含 “非自由” 固件。 + +你可以查看关于 Debian 的 ISO 文件的 [这篇指南][4] 。 + +#### GNOME 在默认情况下使用 Pipewire + +如果你在 Debian Linux 中使用 GNOME 桌面环境,那么,给你带来一个好消息。 + +Debian 12 和 GNOME 桌面环境 [在默认情况下,使用 Pipewire 和 Wireplumber 管理器][5] 作为声音服务器,取代了 Pulseaudio 。现代化的 Pipewire 早就已经引入 Ubuntu 、Fedora 、Pop!_OS 等其它领先的发行版。 + +![Pipewire in Debian 12][6] + +#### Apt 软件包管理器的的新版本 (2.6) + +Debian 12 引入 apt 软件包管理器的最新的版本。在这个发行版本中,特别引入 [Apt 2.6][7] 版本来具体支持的非自由 ISO 镜像。这些更改包含:默认启用非自由固件,apt 将显示非自由软件包的更新。 + +#### 桌面环境 + +在 Debian 12 中,除 GNMOE 桌面环境外,所有的主流桌面环境都是最新的。这是因为 [GNOME 44][8] 才刚刚发布,由于工作日程计划不一样,因此它没有进入 Bookworm 。Debian 12 已经处于冻结状态。 + +因此,在 Debian 12 中,你将得到 [GNOME 43][9] 版本,与最新的发布版本相比,它也没有落后多少。此外,如果你从 [Debian 11][10] 转换而来,那么,这将是一次重大的 GNOME 升级。 + +幸运的是,[KDE Plasma 5.27][11] 现在可以在这个发布版本中使用了。KDE Plasma 是 Plasma 5 的最终版本,并且在 Plasma 6 版本准备好之前,它可能会成为 LTS 。因此,它是一次重要的升级。KDE Plasma 维护人员成功地实现了这一目标。 + +另外,在 Debian 12 中的 [Xfce 4.18][12] 通过令人惊艳的Thunar 的特色功能带来了更好的桌面体验。此外,在 Debian 12 中,LXQt 1.2 、MATE 1.26 和 LXDE 11 都是最新的版本。 + +这里有一份摘要: + +- GNOME 43 +- KDE Plasma 5.27 +- LXDE 11 +- LXQt 1.2 +- MATE 1.26 +- Xfce 4.18 + +#### 核心模块和应用程序 + +大多数主要的应用程序都已经刷新版本。尤其是,Python 3.11 已经包含在 Debian 12 中,这将有助于帮助开发者和很多使用实例。此外,LibreOffice 7.4 和 Firefox 102.9 ESR 也是两个重要的更新。这里有一份关于主要应用程序和软件包升级的小列表: + +- LibreOffice 7.4.4 +- Firefox 102.9 ESR +- GIMP 2.10.32 +- OpenJDK 11.6 +- PHP 8.2 +- Python 3.11+ +- Samba 4.17 + +#### 各种各样的更新 + +- Debian 12 现在在双启动设置时会检查到 Windows 11 +- 在 Debian 和 Cinnamon 桌面环境中,默认启用支持屏幕阅读器 +- 在 30 秒超时后,自动启动语音合成 +- 更容易地检测多路径设备 +- 支持多个 initrd 路径 +- 支持新的 ARM 和 RISC-V 设备 +- 放弃实验性的 DMRAID 支持 + +你可以 [在这里][13] 学习额外的更改。 + +#### 默认的主题和墙纸 + +在每一次发布版本中,Debian 都会从引入一些来自社区的令人惊叹的艺术品。Debian 12 以 绿宝石 “Emerald” 作为默认的艺术品主题。 + +“_经过抛光和凿刻,或在它们原始和纯天然的状态下,宝石可以有无限多的形状。”_ + +通过 Emerald 主题,创建者希望将光线与矿物质以一种简洁至近乎超凡脱俗的构思结合在一起。 + +默认主题和横幅可以在安装程序、动画 Plymouth 、壁纸等所有的位置都可以看到。 + +这里是一些选自 [官方画廊][14] 的图片。 + +![Default wallpaper][15] + +![Debian 12 Plymouth][16] + +### 如何下载 Debian 12 + +**注意**: Debian 12 尚未发布稳定版本。因此,不要在正式工作中使用它,也不要从 Bullseye 升级到 Bookworm 。 + +如果你正在运行 Debian 11 bullseye ,你可以通过任意的文本编辑器来打开 `/etc/apt/sources.list` ,并添加下面的命令行。务必验证镜像 URL ,并更改下面的命令行。 + +``` +deb http://http.us.debian.org/debian bookworm main non-free contribdeb http://security.debian.org/ bookworm/updates main contrib non-freedeb http://http.us.debian.org/debian sid main non-free contrib +``` + +在添加这些命令行后,刷新 apt 缓存: + +``` +sudo apt update +``` + +接下来,运行下面的命令行来获取更新 + +``` +sudo apt dist-upgrade +``` + +下载全新的 ISO 文件,访问任意一个下面的链接。 + +[下载 Debian 12 (DVD) ISO – Alpha2][17] + +### 总结 + +总而言之,Debian 12 Bookworm 是一个令人赞叹的发布版本,带来了一些新的特色功能和改善。从最新的桌面环境到新内核和更新的软件包,这个发布版本为新用户和有经验的 Debian 用户都提供了很多东西。 + +因为它专注于稳定性、安全性和开源原则,所以,对于那些寻求替换 Ubuntu 和通用操作系统的人来说,Debian 12 Bookworm 可能是最好的选择。 + +这个版本的最终版本预期在 2023 年第二季度发布。 + +_[Debian 12 更改日志][18] (有点过时了)_ + +-------------------------------------------------------------------------------- + +via: https://www.debugpoint.com/debian-12-features/ + +作者:[Arindam][a] +选题:[lkxed][b] +译者:[robsean](https://github.com/robsean) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.debugpoint.com/author/admin1/ +[b]: https://github.com/lkxed/ +[1]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Bookworm-GNOME-Desktop.jpg +[2]: https://www.debugpoint.com/linux-kernel-6-1/ +[3]: https://lists.debian.org/debian-vote/2022/10/msg00000.html +[4]: https://www.debugpoint.com/download-debian-iso/ +[5]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1020249 +[6]: https://www.debugpoint.com/wp-content/uploads/2023/03/Pipewire-in-Debian-12.jpg +[7]: https://launchpad.net/ubuntu/+source/apt/+changelog +[8]: https://www.debugpoint.com/gnome-44/ +[9]: https://www.debugpoint.com/gnome-43/ +[10]: https://www.debugpoint.com/debian-11-features/ +[11]: https://www.debugpoint.com/kde-plasma-5-27/ +[12]: https://www.debugpoint.com/xfce-4-18-review/ +[13]: https://lists.debian.org/debian-devel-announce/2022/09/msg00004.html +[14]: https://wiki.debian.org/DebianArt/Themes/Emerald +[15]: https://www.debugpoint.com/wp-content/uploads/2023/03/Default-wallpaper.jpg +[16]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Plymouth.jpg +[17]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/ +[18]: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html From cbbf49fcea451aa58adba84b94c1533f03222d72 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 5 Apr 2023 09:29:55 +0800 Subject: [PATCH 59/83] RP @geekpi https://linux.cn/article-15693-1.html --- ... Create a ChatBot in Mattermost with Python.md | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) rename {translated/tech => published}/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md (82%) diff --git a/translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md b/published/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md similarity index 82% rename from translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md rename to published/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md index 2b1744464d..2fe100f569 100644 --- a/translated/tech/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md +++ b/published/20230327.3 ⭐️ Create a ChatBot in Mattermost with Python.md @@ -3,26 +3,30 @@ [#]: author: "Dr. Michael J. Garbade https://opensource.com/users/drmjg" [#]: collector: "lkxed" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15693-1.html" -使用 Python 在 Mattermost 中创建聊天机器人 +使用 Python 在 Mattermost 中创建 ChatOps 聊天机器人 ====== -ChatOps 是一种协作模型,它将人员、流程、工具和自动化连接到一个透明的工作流中。[Mattermost][1] 是一个开源、自托管的消息平台,使组织能够安全、有效和高效地进行通信。它是 Slack、Discord 和其他专有消息平台的绝佳[开源替代品][2]。本文概述了在 Mattermost 上创建 ChatOps 机器人的步骤,包括必要的代码示例和解释。 +![][0] + +> 用一个简单的开源机器人在你的组织中实施 ChatOps。 + +ChatOps 是一种协作模型,它将人员、流程、工具和自动化连接到一个透明的工作流中。[Mattermost][1] 是一个开源、自托管的消息平台,使组织能够安全、有效和高效地进行通信。它是 Slack、Discord 和其他专有消息平台的绝佳 [开源替代品][2]。本文概述了在 Mattermost 上创建 ChatOps 机器人的步骤,包括必要的代码示例和解释。 ### 先决条件 -在开始之前,请确保你可以访问 Mattermost 服务器,[安装 Python][3],并[使用 pip][4] 安装 Mattermost Python 驱动。 +在开始之前,请确保你可以访问 Mattermost 服务器,[安装 Python][3],并 [使用 pip][4] 安装 Mattermost Python 驱动。 ### 在 Mattermost 上创建一个机器人帐户 -要创建机器人帐户,请访问 Mattermost 系统控制台,并添加具有适当访问权限的机器人帐户。检索机器人的用户名和密码以在 Python 脚本中使用。 +要创建机器人帐户,请访问 Mattermost 系统控制台,并添加具有适当访问权限的机器人帐户。获取机器人的用户名和密码以在 Python 脚本中使用。 ### 设置 Mattermost Python 驱动 -使用 pip 安装 Mattermost Python 驱动,并将其导入 Python 脚本。创建一个新的驱动实例并登录到 Mattermost 服务器。 +使用 `pip` 安装 Mattermost Python 驱动,并将其导入 Python 脚本。创建一个新的驱动实例并登录到 Mattermost 服务器。 ### 在 Python 中创建 ChatOps 机器人 @@ -108,7 +112,7 @@ if __name__ == '__main__': main() ``` -在此示例中,ChatOps 机器人监听命令 “status” 并向第三方工具 API 发出请求以获取当前状态。然后它会在发出命令的 Mattermost 频道中发布状态更新。这使团队成员无需离开聊天平台即可快速获取任务状态的更新。 +在此示例中,ChatOps 机器人监听命令 `status` 并向第三方工具 API 发出请求以获取当前状态。然后它会在发出命令的 Mattermost 频道中发布状态更新。这使团队成员无需离开聊天平台即可快速获取任务状态的更新。 ### 开源 ChatOps @@ -121,7 +125,7 @@ via: https://opensource.com/article/23/3/chatbot-mattermost-python 作者:[Dr. Michael J. Garbade][a] 选题:[lkxed][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -130,4 +134,5 @@ via: https://opensource.com/article/23/3/chatbot-mattermost-python [1]: https://mattermost.com/ [2]: https://opensource.com/alternatives/slack [3]: https://opensource.com/article/17/10/python-101 -[4]: https://opensource.com/article/20/3/pip-linux-mac-windows \ No newline at end of file +[4]: https://opensource.com/article/20/3/pip-linux-mac-windows +[0]: https://img.linux.net.cn/data/attachment/album/202304/05/092837ab3y8zft3hhv02hr.jpg \ No newline at end of file From f3d5a64a379010d382733f04d74c547cb1c531cc Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Wed, 5 Apr 2023 11:22:28 +0800 Subject: [PATCH 60/83] RP @robsean https://linux.cn/article-15694-1.html --- ...️⭐️ Debian 12 Bookworm Best New Features.md | 73 ++++++++++--------- 1 file changed, 39 insertions(+), 34 deletions(-) rename {translated/tech => published}/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md (59%) diff --git a/translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md b/published/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md similarity index 59% rename from translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md rename to published/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md index 13b09c1f5a..ec7e6fb813 100644 --- a/translated/tech/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md +++ b/published/20230328.0 ⭐️⭐️ Debian 12 Bookworm Best New Features.md @@ -3,36 +3,38 @@ [#]: author: "Arindam https://www.debugpoint.com/author/admin1/" [#]: collector: "lkxed" [#]: translator: "robsean" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15694-1.html" -Debian 12 Bookworm: 最好的新特色功能 +Debian 12 “Bookworm” 的新功能和改进 ====== -**我们将给予你们一份关于 Debian 12 Bookworm (即将到来) 发布版本的新的特色功能和增强功能的概述** +![][0] -Debian 12 已经开发了几个月了,并且正在慢慢走向最终的发布版本。截止发稿时, 它当前正处于冻结状态下。这意味着:预期着不再会有重大的软件包更改或增强。 +> 让我们给你总结一下即将发布的 Debian 12 “Bookworm” 的新功能和改进。 -这个发布版本带来一些新的特色功能和改善功能,使其成为 Debian 爱好者的一个令人兴奋的版本。在这篇文章中,我们将讨论 Debian 12 Bookworm 的最好的新的特色功能,以及它们如何使用户受益。 +Debian 12 已经开发了几个月了,并且正在慢慢走向最终的发布版本。截止发稿时, 它当前正处于冻结状态下。这意味着预计不会有重大的软件包更改或改进。 + +这个发布版本带来一些新功能和改进,使其成为 Debian 爱好者期待的一个版本。在这篇文章中,我们将讨论 Debian 12 “Bookworm” 的最好的新功能,以及它们如何使用户受益。 让我们来看看。 ![Debian 12 Bookworm GNOME Desktop][1] -### Debian 12 Bookworm: 新的特色功能 +### Debian 12 “Bookworm” 的新功能和改进 #### Linux 内核 -这个发布版本以发布于2022年12月的 Linux 主线内核 Kernel 6.1 为特色。从时间线上看,到目前为止,Debian 12 的内核版本号只比最新内核的版本号落后一个。因此,你将通过使用稳定的 Linux 内核 6.1 版本来获取最新的和最好的硬件支持。 +这个发布版本采用了发布于 2022 年 12 月的 Linux 主线内核 6.1。从时间线上看,到目前为止,Debian 12 的内核版本号只比最新内核落后一个版本。因此,你将通过使用稳定的 Linux 内核 6.1 来获得最新的和最好的硬件支持。 -这个内核的亮点特色功能包括:初始支持 Rust 框架、更新支持 Intel 和 AMD 即将到来的 CPU/GPU 系列硬件、改善 btrfs 和其它文件系统系统的性能等等。 +这个内核的亮点功能包括:初步支持 Rust 框架、更新支持英特尔和 AMD 即将推出的 CPU/GPU 系列硬件、改善 Btrfs 和其它文件系统系统的性能等等。 -我们已经有一篇关于 [Kernel 6.1][2][e][2] [特色功能][2] 的特别文章,如果你想要了解更多的话。 +如果你想要了解更多的话,我们已经有一篇关于 [内核 6.1 特性][2] 的专题文章。 #### 在安装程序中的非自由软件包 -在 Debian 12 中出现了一个与 Debian 的 ISO 文件相关的重大更改。从一开始,Debian 就分别针对 “自由” 和 “非自由” 软件包提供了不同的 ISO 文件。专有的 “非自由” 软件包是独立的 ISO 文件的一部分。因此,如果你需要针对你特有硬件的驱动支持,那么你可以针对你的笔记本/台式机/服务器下载不同的 ISO 文件。 +在 Debian 12 中出现了一个与 Debian 的 ISO 文件有关的重大更改。最初,Debian 就分别针对 “自由” 和 “非自由” 软件包提供了不同的 ISO 文件。专有的 “非自由” 软件包是单独的 ISO 文件的一部分。因此,如果你需要针对你的特殊硬件的驱动支持,那么你可以针对你的笔记本/台式机/服务器下载不同的 ISO 文件。 然而,这种体验使终端用户在选择恰当的 Debian 的 ISO 时感到迷惑。为此,Debian 团队去年发起一次社区投票,以选出如何处理 “非自由” 的最好的选项。 @@ -40,7 +42,7 @@ Debian 12 已经开发了几个月了,并且正在慢慢走向最终的发布 那么,发生了什么变化? -在我们尝试现在官方的 Debian 的 ISO 文件时,你只需要选择一个包含所有东西的 ISO 文件 (DVD 大小的体积) 。此外,也提供小型的网络安装的 ISO 文件,包含 “非自由” 固件。 +在我们尝试现在官方的 Debian 的 ISO 文件时,你只需要选择一个包含所有东西的 ISO 文件 (DVD 大小的体积)。此外,也提供小型的网络安装的 ISO 文件,包含 “非自由” 固件。 你可以查看关于 Debian 的 ISO 文件的 [这篇指南][4] 。 @@ -52,19 +54,19 @@ Debian 12 和 GNOME 桌面环境 [在默认情况下,使用 Pipewire 和 Wirep ![Pipewire in Debian 12][6] -#### Apt 软件包管理器的的新版本 (2.6) +#### 新版本的 Apt 软件包管理器(2.6) -Debian 12 引入 apt 软件包管理器的最新的版本。在这个发行版本中,特别引入 [Apt 2.6][7] 版本来具体支持的非自由 ISO 镜像。这些更改包含:默认启用非自由固件,apt 将显示非自由软件包的更新。 +Debian 12 引入 Apt 软件包管理器的最新的版本。[Apt 2.6][7] 版本专门处理了这个版本中引入的非自由 ISO 镜像支持。这些更改包含:默认启用非自由固件,Apt 将显示非自由软件包的更新。 #### 桌面环境 -在 Debian 12 中,除 GNMOE 桌面环境外,所有的主流桌面环境都是最新的。这是因为 [GNOME 44][8] 才刚刚发布,由于工作日程计划不一样,因此它没有进入 Bookworm 。Debian 12 已经处于冻结状态。 +在 Debian 12 中,除 GNMOE 桌面环境外,所有的主流桌面环境都是最新的。这是因为 [GNOME 44][8] 才刚刚发布,由于工作日程计划不一样,因此它没有进入 “Bookworm” 。Debian 12 已经处于硬冻结状态。 因此,在 Debian 12 中,你将得到 [GNOME 43][9] 版本,与最新的发布版本相比,它也没有落后多少。此外,如果你从 [Debian 11][10] 转换而来,那么,这将是一次重大的 GNOME 升级。 幸运的是,[KDE Plasma 5.27][11] 现在可以在这个发布版本中使用了。KDE Plasma 是 Plasma 5 的最终版本,并且在 Plasma 6 版本准备好之前,它可能会成为 LTS 。因此,它是一次重要的升级。KDE Plasma 维护人员成功地实现了这一目标。 -另外,在 Debian 12 中的 [Xfce 4.18][12] 通过令人惊艳的Thunar 的特色功能带来了更好的桌面体验。此外,在 Debian 12 中,LXQt 1.2 、MATE 1.26 和 LXDE 11 都是最新的版本。 +另外,在 Debian 12 中的 [Xfce 4.18][12] 通过令人惊艳的 Thunar 的特色功能带来了更好的桌面体验。此外,在 Debian 12 中,LXQt 1.2 、MATE 1.26 和 LXDE 11 都是最新的版本。 这里有一份摘要: @@ -77,7 +79,7 @@ Debian 12 引入 apt 软件包管理器的最新的版本。在这个发行版 #### 核心模块和应用程序 -大多数主要的应用程序都已经刷新版本。尤其是,Python 3.11 已经包含在 Debian 12 中,这将有助于帮助开发者和很多使用实例。此外,LibreOffice 7.4 和 Firefox 102.9 ESR 也是两个重要的更新。这里有一份关于主要应用程序和软件包升级的小列表: +大多数主要的应用程序都已经刷新版本。尤其是,Python 3.11 已经包含在 Debian 12 中,这将有助于帮助开发者和很多使用情况。此外,LibreOffice 7.4 和 Firefox 102.9 ESR 也是两个重要的更新。这里有一份关于主要应用程序和软件包升级的小列表: - LibreOffice 7.4.4 - Firefox 102.9 ESR @@ -87,9 +89,9 @@ Debian 12 引入 apt 软件包管理器的最新的版本。在这个发行版 - Python 3.11+ - Samba 4.17 -#### 各种各样的更新 +#### 杂项更新 -- Debian 12 现在在双启动设置时会检查到 Windows 11 +- Debian 12 现在在双启动设置时可以检测到 Windows 11 - 在 Debian 和 Cinnamon 桌面环境中,默认启用支持屏幕阅读器 - 在 30 秒超时后,自动启动语音合成 - 更容易地检测多路径设备 @@ -97,15 +99,15 @@ Debian 12 引入 apt 软件包管理器的最新的版本。在这个发行版 - 支持新的 ARM 和 RISC-V 设备 - 放弃实验性的 DMRAID 支持 -你可以 [在这里][13] 学习额外的更改。 +你可以 [在这里][13] 了解更多的变化。 #### 默认的主题和墙纸 -在每一次发布版本中,Debian 都会从引入一些来自社区的令人惊叹的艺术品。Debian 12 以 绿宝石 “Emerald” 作为默认的艺术品主题。 +在每一次发布版本中,Debian 都会从引入一些来自社区的令人惊叹的艺术作品。Debian 12 以 “绿宝石Emerald” 作为默认的艺术作品主题。 -“_经过抛光和凿刻,或在它们原始和纯天然的状态下,宝石可以有无限多的形状。”_ +“_经过抛光和凿刻,或在它们原始和纯天然的状态下,宝石可以有无限的形状。”_ -通过 Emerald 主题,创建者希望将光线与矿物质以一种简洁至近乎超凡脱俗的构思结合在一起。 +通过 Emerald 主题,创建者希望将光线与矿物质以一种简洁至近乎空灵的设计结合在一起。 默认主题和横幅可以在安装程序、动画 Plymouth 、壁纸等所有的位置都可以看到。 @@ -117,21 +119,23 @@ Debian 12 引入 apt 软件包管理器的最新的版本。在这个发行版 ### 如何下载 Debian 12 -**注意**: Debian 12 尚未发布稳定版本。因此,不要在正式工作中使用它,也不要从 Bullseye 升级到 Bookworm 。 +**注意**: Debian 12 尚未发布稳定版本。因此,不要在正式工作中使用它,也不要从 Bullseye 升级到 “Bookworm” 。 -如果你正在运行 Debian 11 bullseye ,你可以通过任意的文本编辑器来打开 `/etc/apt/sources.list` ,并添加下面的命令行。务必验证镜像 URL ,并更改下面的命令行。 +如果你正在运行 Debian 11 “Bullseye” ,你可以通过任意的文本编辑器来打开 `/etc/apt/sources.list` ,并添加下面的命令行。务必验证镜像 URL ,并更改下面的命令行。 ``` -deb http://http.us.debian.org/debian bookworm main non-free contribdeb http://security.debian.org/ bookworm/updates main contrib non-freedeb http://http.us.debian.org/debian sid main non-free contrib +deb http://http.us.debian.org/debian bookworm main non-free contrib +deb http://security.debian.org/ bookworm/updates main contrib non-free +deb http://http.us.debian.org/debian sid main non-free contrib ``` -在添加这些命令行后,刷新 apt 缓存: +在添加这些命令行后,刷新 `apt` 缓存: ``` sudo apt update ``` -接下来,运行下面的命令行来获取更新 +接下来,运行下面的命令行来获取更新: ``` sudo apt dist-upgrade @@ -139,17 +143,17 @@ sudo apt dist-upgrade 下载全新的 ISO 文件,访问任意一个下面的链接。 -[下载 Debian 12 (DVD) ISO – Alpha2][17] +> **[下载 Debian 12 (DVD) ISO – Alpha2][17]** ### 总结 -总而言之,Debian 12 Bookworm 是一个令人赞叹的发布版本,带来了一些新的特色功能和改善。从最新的桌面环境到新内核和更新的软件包,这个发布版本为新用户和有经验的 Debian 用户都提供了很多东西。 +总而言之,Debian 12 “Bookworm” 是一个令人印象深刻的版本,带来了一些新的特色功能和改善。从最新的桌面环境到新内核和更新的软件包,这个发布版本为新用户和有经验的 Debian 用户都提供了很多东西。 -因为它专注于稳定性、安全性和开源原则,所以,对于那些寻求替换 Ubuntu 和通用操作系统的人来说,Debian 12 Bookworm 可能是最好的选择。 +因为它专注于稳定性、安全性和开源原则,所以,对于那些寻求替换 Ubuntu 和通用操作系统的人来说,Debian 12 “Bookworm” 可能是最好的选择。 这个版本的最终版本预期在 2023 年第二季度发布。 -_[Debian 12 更改日志][18] (有点过时了)_ +> **[Debian 12 更改日志(有点过时了)][18]** -------------------------------------------------------------------------------- @@ -158,7 +162,7 @@ via: https://www.debugpoint.com/debian-12-features/ 作者:[Arindam][a] 选题:[lkxed][b] 译者:[robsean](https://github.com/robsean) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -182,3 +186,4 @@ via: https://www.debugpoint.com/debian-12-features/ [16]: https://www.debugpoint.com/wp-content/uploads/2023/03/Debian-12-Plymouth.jpg [17]: https://cdimage.debian.org/cdimage/bookworm_di_alpha2/amd64/iso-dvd/ [18]: https://www.debian.org/releases/bookworm/amd64/release-notes/ch-whats-new.en.html +[0]: https://img.linux.net.cn/data/attachment/album/202304/05/112008tjogt4q224g49tj4.jpg \ No newline at end of file From 866ece47b24ceb4ab9d741ea26ae10d12de758ba Mon Sep 17 00:00:00 2001 From: CanYellow Date: Wed, 5 Apr 2023 23:04:20 +0800 Subject: [PATCH 61/83] finished --- ...ing-s Misappropriated REST Dissertation.md | 292 +++++++++--------- ...ware- Is There an Easy Path to Success-.md | 194 ++++++------ 2 files changed, 240 insertions(+), 246 deletions(-) diff --git a/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md b/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md index c26b86d313..e74a2bbc42 100644 --- a/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md +++ b/sources/talk/20200628 Roy Fielding-s Misappropriated REST Dissertation.md @@ -1,146 +1,146 @@ -[#]: collector: (lujun9972) -[#]: translator: (CanYellow) -[#]: reviewer: ( ) -[#]: publisher: ( ) -[#]: url: ( ) -[#]: subject: (Roy Fielding's Misappropriated REST Dissertation) -[#]: via: (https://twobithistory.org/2020/06/28/rest.html) -[#]: author: (Two-Bit History https://twobithistory.org) - -被错误应用的罗伊·菲尔丁的有关描述性状态迁移的博士论文 -====== - -TD -Roy Fielding's Misappropriated REST Dissertation -====== - -符合描述性状态迁移的 (RESTful,REST译自审定公布名词数据库) 应用程序接口 (API) 无处不在。有趣的是又有多少人真正了解“描述性状态迁移”的应有之义呢? - -DN -RESTful APIs are everywhere. This is funny, because how many people really know what “RESTful” is supposed to mean? - -大概我们中的大多数人都会跟[黑客新闻网站上的这篇公开问答][1]产生共鸣: -I think most of us can empathize with [this Hacker News poster][1]: - -> 我阅读了几篇介绍描述性状态迁移的文章,甚至包括原始论文的部分章节。然而我仍然对描述性状态迁移到底是什么只有一个相当模糊的想法。我开始认为没有人真的了解描述性状态迁移,它仅仅是一个定义相当不充分的概念。 - -DN -> I’ve read several articles about REST, even a bit of the original paper. But I still have quite a vague idea about what it is. I’m beginning to think that nobody knows, that it’s simply a very poorly defined concept. - -我曾经计划写一篇有关描述性状态迁移的博客,在里面探讨描述性状态迁移是如何成为这样一个在网络通信领域占主导地位的范式的。我通过阅读[2000年发表的罗伊·菲尔丁的博士论文][2]开始我的研究,这篇博士论文向世人介绍了描述性状态迁移的概念。在读过菲尔丁的博士论文以后,我意识到,相比之下,更引人注意的是菲尔丁的理论缘何受到如此普遍的误解。 - -DN -I had planned to write a blog post exploring how REST came to be such a dominant paradigm for communication across the internet. I started my research by reading [Roy Fielding’s 2000 dissertation][2], which introduced REST to the world. After reading Fielding’s dissertation, I realized that the much more interesting story here is how Fielding’s ideas came to be so widely misunderstood. - -(相对公平地说)很多人知道描述性状态迁移源自菲尔丁的博士论文,但并没有读过该论文。因此对于这篇博士论文的原始内容的误解才得以流行。 - -DN -Many more people know that Fielding’s dissertation is where REST came from than have read the dissertation (fair enough), so misconceptions about what the dissertation actually contains are pervasive. - -最大的误解是:这篇博士论文直接讨论了(译注:广义的)构建应用程序接口的问题,我此前一直认为描述性状态迁移从一开始就打算成为构建在超文本传输协议(HTTP)之上的网络应用程序接口(Web API)的架构模型,我相信很多人也这样认为。我猜测此前可能存在一个混乱的试验时期,开发人员采用完全错误的方式在超文本传输协议基础上开发应用程序接口,然后菲尔丁出现了并提出了将描述性状态迁移做为网络应用程序开发的正确方式。但是这种想法的时间线对不上:我们今天所熟知的网络服务的应用程序接口并非是在菲尔丁出版他的博士论文之后才出现的新生事物。 - -DN -The biggest of these misconceptions is that the dissertation directly addresses the problem of building APIs. I had always assumed, as I imagine many people do, that REST was intended from the get-go as an architectural model for web APIs built on top of HTTP. I thought perhaps that there had been some chaotic experimental period where people were building APIs on top of HTTP all wrong, and then Fielding came along and presented REST as the sane way to do things. But the timeline doesn’t make sense here: APIs for web services, in the sense that we know them today, weren’t a thing until a few years after Fielding published his dissertation. - -菲尔丁的博士论文(名为“架构风格与基于网络的软件架构设计”)(译者注,网络中文版的中文译名)不是讨论如何在超文本传输协议的基础上构建应用程序接口,而恰恰是讨论超文本协议本身菲尔丁是超文本传输协议1.0版规范的贡献者同时也是超文本传输协议1.1版的共同作者。有感于从HTTP协议的设计中获得的架构经验,他的博士论文将描述性状态迁移视为指导HTTP/1.1的标准化过程的架构原则的精华。举例而言,他拒绝了使用`MGET`和`MHEAD`方法进行批量请求的提议,因为他认为这违反了REST所定义的约束条件,尤其是在一个符合REST的系统中传递的消息应该是易于代理和缓存的约束条件。[1][3]因此,HTTP/1.1转而围绕持久性连接设计,在此基础上可以发送多个HTTP请求。(菲尔丁同时认为) -Fielding’s dissertation (titled “Architectural Styles and the Design of Network-based Software Architectures”) is not about how to build APIs on top of HTTP but rather about HTTP itself. Fielding contributed to the HTTP/1.0 specification and co-authored the HTTP/1.1 specification, which was published in 1999. He was interested in the architectural lessons that could be drawn from the design of the HTTP protocol; his dissertation presents REST as a distillation of the architectural principles that guided the standardization process for HTTP/1.1. Fielding used these principles to make decisions about which proposals to incorporate into HTTP/1.1. For example, he rejected a proposal to batch requests using new `MGET` and `MHEAD` methods because he felt the proposal violated the constraints prescribed by REST, especially the constraint that messages in a REST system should be easy to proxy and cache.[1][3] So HTTP/1.1 was instead designed around persistent connections over which multiple HTTP requests can be sent. (Fielding also felt that cookies are not RESTful because they add state to what should be a stateless system, but their usage was already entrenched.[2][4]) REST, for Fielding, was not a guide to building HTTP-based systems but a guide to extending HTTP. - -This isn’t to say that Fielding doesn’t think REST could be used to build other systems. It’s just that he assumes these other systems will also be “distributed hypermedia systems.” This is another misconception people have about REST: that it is a general architecture you can use for any kind of networked application. But you could sum up the part of the dissertation where Fielding introduces REST as, essentially, “Listen, we just designed HTTP, so if you also find yourself designing a _distributed hypermedia system_ you should use this cool architecture we worked out called REST to make things easier.” It’s not obvious why Fielding thinks anyone would ever attempt to build such a thing given that the web already exists; perhaps in 2000 it seemed like there was room for more than one distributed hypermedia system in the world. Anyway, Fielding makes clear that REST is intended as a solution for the scalability and consistency problems that arise when trying to connect hypermedia across the internet, _not_ as an architectural model for distributed applications in general. - -We remember Fielding’s dissertation now as the dissertation that introduced REST, but really the dissertation is about how much one-size-fits-all software architectures suck, and how you can better pick a software architecture appropriate for your needs. Only a single chapter of the dissertation is devoted to REST itself; much of the word count is spent on a taxonomy of alternative architectural styles[3][5] that one could use for networked applications. Among these is the Pipe-and-Filter (PF) style, inspired by Unix pipes, along with various refinements of the Client-Server style (CS), such as Layered-Client-Server (LCS), Client-Cache-Stateless-Server (C$SS), and Layered-Client-Cache-Stateless-Server (LC$SS). The acronyms get unwieldy but Fielding’s point is that you can mix and match constraints imposed by existing styles to derive new styles. REST gets derived this way and could instead have been called—but for obvious reasons was not—Uniform-Layered-Code-on-Demand-Client-Cache-Stateless-Server (ULCODC$SS). Fielding establishes this taxonomy to emphasize that different constraints are appropriate for different applications and that this last group of constraints were the ones he felt worked best for HTTP. - -This is the deep, deep irony of REST’s ubiquity today. REST gets blindly used for all sorts of networked applications now, but Fielding originally offered REST as an illustration of how to derive a software architecture tailored to an individual application’s particular needs. - -I struggle to understand how this happened, because Fielding is so explicit about the pitfalls of not letting form follow function. He warns, almost at the very beginning of the dissertation, that “design-by-buzzword is a common occurrence” brought on by a failure to properly appreciate software architecture.[4][6] He picks up this theme again several pages later: - -> Some architectural styles are often portrayed as “silver bullet” solutions for all forms of software. However, a good designer should select a style that matches the needs of a particular problem being solved.[5][7] - -REST itself is an especially poor “silver bullet” solution, because, as Fielding later points out, it incorporates trade-offs that may not be appropriate unless you are building a distributed hypermedia application: - -> REST is designed to be efficient for large-grain hypermedia data transfer, optimizing for the common case of the Web, but resulting in an interface that is not optimal for other forms of architectural interaction.[6][8] - -Fielding came up with REST because the web posed a thorny problem of “anarchic scalability,” by which Fielding means the need to connect documents in a performant way across organizational and national boundaries. The constraints that REST imposes were carefully chosen to solve this anarchic scalability problem. Web service APIs that are _public-facing_ have to deal with a similar problem, so one can see why REST is relevant there. Yet today it would not be at all surprising to find that an engineering team has built a backend using REST even though the backend only talks to clients that the engineering team has full control over. We have all become the architect in [this Monty Python sketch][9], who designs an apartment building in the style of a slaughterhouse because slaughterhouses are the only thing he has experience building. (Fielding uses a line from this sketch as an epigraph for his dissertation: “Excuse me… did you say ‘knives’?”) - -So, given that Fielding’s dissertation was all about avoiding silver bullet software architectures, how did REST become a de facto standard for web services of every kind? - -My theory is that, in the mid-2000s, the people who were sick of SOAP and wanted to do something else needed their own four-letter acronym. - -I’m only half-joking here. SOAP, or the Simple Object Access Protocol, is a verbose and complicated protocol that you cannot use without first understanding a bunch of interrelated XML specifications. Early web services offered APIs based on SOAP, but, as more and more APIs started being offered in the mid-2000s, software developers burned by SOAP’s complexity migrated away en masse. - -Among this crowd, SOAP inspired contempt. Ruby-on-Rails dropped SOAP support in 2007, leading to this emblematic comment from Rails creator David Heinemeier Hansson: “We feel that SOAP is overly complicated. It’s been taken over by the enterprise people, and when that happens, usually nothing good comes of it.”[7][10] The “enterprise people” wanted everything to be formally specified, but the get-shit-done crowd saw that as a waste of time. - -If the get-shit-done crowd wasn’t going to use SOAP, they still needed some standard way of doing things. Since everyone was using HTTP, and since everyone would keep using HTTP at least as a transport layer because of all the proxying and caching support, the simplest possible thing to do was just rely on HTTP’s existing semantics. So that’s what they did. They could have called their approach Fuck It, Overload HTTP (FIOH), and that would have been an accurate name, as anyone who has ever tried to decide what HTTP status code to return for a business logic error can attest. But that would have seemed recklessly blasé next to all the formal specification work that went into SOAP. - -Luckily, there was this dissertation out there, written by a co-author of the HTTP/1.1 specification, that had something vaguely to do with extending HTTP and could offer FIOH a veneer of academic respectability. So REST was appropriated to give cover for what was really just FIOH. - -I’m not saying that this is exactly how things happened, or that there was an actual conspiracy among irreverent startup types to misappropriate REST, but this story helps me understand how REST became a model for web service APIs when Fielding’s dissertation isn’t about web service APIs at all. Adopting REST’s constraints makes some sense, especially for public-facing APIs that do cross organizational boundaries and thus benefit from REST’s “uniform interface.” That link must have been the kernel of why REST first got mentioned in connection with building APIs on the web. But imagining a separate approach called “FIOH,” that borrowed the “REST” name partly just for marketing reasons, helps me account for the many disparities between what today we know as RESTful APIs and the REST architectural style that Fielding originally described. - -REST purists often complain, for example, that so-called REST APIs aren’t actually REST APIs because they do not use Hypermedia as The Engine of Application State (HATEOAS). Fielding himself [has made this criticism][11]. According to him, a real REST API is supposed to allow you to navigate all its endpoints from a base endpoint by following links. If you think that people are actually out there trying to build REST APIs, then this is a glaring omission—HATEOAS really is fundamental to Fielding’s original conception of REST, especially considering that the “state transfer” in “Representational State Transfer” refers to navigating a state machine using hyperlinks between resources (and not, as many people seem to believe, to transferring resource state over the wire).[8][12] But if you imagine that everyone is just building FIOH APIs and advertising them, with a nudge and a wink, as REST APIs, or slightly more honestly as “RESTful” APIs, then of course HATEOAS is unimportant. - -Similarly, you might be surprised to know that there is nothing in Fielding’s dissertation about which HTTP verb should map to which CRUD action, even though software developers like to argue endlessly about whether using PUT or PATCH to update a resource is more RESTful. Having a standard mapping of HTTP verbs to CRUD actions is a useful thing, but this standard mapping is part of FIOH and not part of REST. - -This is why, rather than saying that nobody understands REST, we should just think of the term “REST” as having been misappropriated. The modern notion of a REST API has historical links to Fielding’s REST architecture, but really the two things are separate. The historical link is good to keep in mind as a guide for when to build a RESTful API. Does your API cross organizational and national boundaries the same way that HTTP needs to? Then building a RESTful API with a predictable, uniform interface might be the right approach. If not, it’s good to remember that Fielding favored having form follow function. Maybe something like GraphQL or even just JSON-RPC would be a better fit for what you are trying to accomplish. - -_If you enjoyed this post, more like it come out every four weeks! Follow [@TwoBitHistory][13] on Twitter or subscribe to the [RSS feed][14] to make sure you know when a new post is out._ - -_Previously on TwoBitHistory…_ - -> New post is up! I wrote about how to solve differential equations using an analog computer from the '30s mostly made out of gears. As a bonus there's even some stuff in here about how to aim very large artillery pieces. -> -> — TwoBitHistory (@TwoBitHistory) [April 6, 2020][15] - - 1. Roy Fielding. “Architectural Styles and the Design of Network-based Software Architectures,” 128. 2000. University of California, Irvine, PhD Dissertation, accessed June 28, 2020, . [↩︎][16] - - 2. Fielding, 130. [↩︎][17] - - 3. Fielding distinguishes between software architectures and software architecture “styles.” REST is an architectural style that has an instantiation in the architecture of HTTP. [↩︎][18] - - 4. Fielding, 2. [↩︎][19] - - 5. Fielding, 15. [↩︎][20] - - 6. Fielding, 82. [↩︎][21] - - 7. Paul Krill. “Ruby on Rails 2.0 released for Web Apps,” InfoWorld. Dec 7, 2007, accessed June 28, 2020,  [↩︎][22] - - 8. Fielding, 109. [↩︎][23] - - - - --------------------------------------------------------------------------------- - -via: https://twobithistory.org/2020/06/28/rest.html - -作者:[Two-Bit History][a] -选题:[lujun9972][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://twobithistory.org -[b]: https://github.com/lujun9972 -[1]: https://news.ycombinator.com/item?id=7201871 -[2]: https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation_2up.pdf -[3]: tmp.Ewi4FpMIg6#fn:1 -[4]: tmp.Ewi4FpMIg6#fn:2 -[5]: tmp.Ewi4FpMIg6#fn:3 -[6]: tmp.Ewi4FpMIg6#fn:4 -[7]: tmp.Ewi4FpMIg6#fn:5 -[8]: tmp.Ewi4FpMIg6#fn:6 -[9]: https://www.youtube.com/watch?v=vNoPJqm3DAY -[10]: tmp.Ewi4FpMIg6#fn:7 -[11]: https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven -[12]: tmp.Ewi4FpMIg6#fn:8 -[13]: https://twitter.com/TwoBitHistory -[14]: https://twobithistory.org/feed.xml -[15]: https://twitter.com/TwoBitHistory/status/1247187881946275841?ref_src=twsrc%5Etfw -[16]: tmp.Ewi4FpMIg6#fnref:1 -[17]: tmp.Ewi4FpMIg6#fnref:2 -[18]: tmp.Ewi4FpMIg6#fnref:3 -[19]: tmp.Ewi4FpMIg6#fnref:4 -[20]: tmp.Ewi4FpMIg6#fnref:5 -[21]: tmp.Ewi4FpMIg6#fnref:6 -[22]: tmp.Ewi4FpMIg6#fnref:7 -[23]: tmp.Ewi4FpMIg6#fnref:8 +[#]: collector: (lujun9972) +[#]: translator: (CanYellow) +[#]: reviewer: ( ) +[#]: publisher: ( ) +[#]: url: ( ) +[#]: subject: (Roy Fielding's Misappropriated REST Dissertation) +[#]: via: (https://twobithistory.org/2020/06/28/rest.html) +[#]: author: (Two-Bit History https://twobithistory.org) + +被错误应用的罗伊·菲尔丁的有关描述性状态迁移的博士论文 +====== + +TD +Roy Fielding's Misappropriated REST Dissertation +====== + +符合描述性状态迁移的 (RESTful,REST译自审定公布名词数据库) 应用程序接口 (API) 无处不在。有趣的是又有多少人真正了解“描述性状态迁移”的应有之义呢? + +DN +RESTful APIs are everywhere. This is funny, because how many people really know what “RESTful” is supposed to mean? + +大概我们中的大多数人都会跟[黑客新闻网站上的这篇公开问答][1]产生共鸣: +I think most of us can empathize with [this Hacker News poster][1]: + +> 我阅读了几篇介绍描述性状态迁移的文章,甚至包括原始论文的部分章节。然而我仍然对描述性状态迁移到底是什么只有一个相当模糊的想法。我开始认为没有人真的了解描述性状态迁移,它仅仅是一个定义相当不充分的概念。 + +DN +> I’ve read several articles about REST, even a bit of the original paper. But I still have quite a vague idea about what it is. I’m beginning to think that nobody knows, that it’s simply a very poorly defined concept. + +我曾经计划写一篇有关描述性状态迁移的博客,在里面探讨描述性状态迁移是如何成为这样一个在网络通信领域占主导地位的范式的。我通过阅读[2000年发表的罗伊·菲尔丁的博士论文][2]开始我的研究,这篇博士论文向世人介绍了描述性状态迁移的概念。在读过菲尔丁的博士论文以后,我意识到,相比之下,更引人注意的是菲尔丁的理论缘何受到如此普遍的误解。 + +DN +I had planned to write a blog post exploring how REST came to be such a dominant paradigm for communication across the internet. I started my research by reading [Roy Fielding’s 2000 dissertation][2], which introduced REST to the world. After reading Fielding’s dissertation, I realized that the much more interesting story here is how Fielding’s ideas came to be so widely misunderstood. + +(相对公平地说)很多人知道描述性状态迁移源自菲尔丁的博士论文,但并没有读过该论文。因此对于这篇博士论文的原始内容的误解才得以流行。 + +DN +Many more people know that Fielding’s dissertation is where REST came from than have read the dissertation (fair enough), so misconceptions about what the dissertation actually contains are pervasive. + +最大的误解是:这篇博士论文直接讨论了(译注:广义的)构建应用程序接口的问题,我此前一直认为描述性状态迁移从一开始就打算成为构建在超文本传输协议(HTTP)之上的网络应用程序接口(Web API)的架构模型,我相信很多人也这样认为。我猜测此前可能存在一个混乱的试验时期,开发人员采用完全错误的方式在超文本传输协议基础上开发应用程序接口,然后菲尔丁出现了并提出了将描述性状态迁移做为网络应用程序开发的正确方式。但是这种想法的时间线对不上:我们今天所熟知的网络服务的应用程序接口并非是在菲尔丁出版他的博士论文之后才出现的新生事物。 + +DN +The biggest of these misconceptions is that the dissertation directly addresses the problem of building APIs. I had always assumed, as I imagine many people do, that REST was intended from the get-go as an architectural model for web APIs built on top of HTTP. I thought perhaps that there had been some chaotic experimental period where people were building APIs on top of HTTP all wrong, and then Fielding came along and presented REST as the sane way to do things. But the timeline doesn’t make sense here: APIs for web services, in the sense that we know them today, weren’t a thing until a few years after Fielding published his dissertation. + +菲尔丁的博士论文(名为“架构风格与基于网络的软件架构设计”)(译者注,网络中文版的中文译名)不是讨论如何在超文本传输协议的基础上构建应用程序接口,而恰恰是讨论超文本协议本身菲尔丁是超文本传输协议1.0版规范的贡献者同时也是超文本传输协议1.1版的共同作者。有感于从HTTP协议的设计中获得的架构经验,他的博士论文将描述性状态迁移视为指导HTTP/1.1的标准化过程的架构原则的精华。举例而言,他拒绝了使用`MGET`和`MHEAD`方法进行批量请求的提议,因为他认为这违反了REST所定义的约束条件,尤其是在一个符合REST的系统中传递的消息应该是易于代理和缓存的约束条件。[1][3]因此,HTTP/1.1转而围绕持久性连接设计,在此基础上可以发送多个HTTP请求。(菲尔丁同时认为) +Fielding’s dissertation (titled “Architectural Styles and the Design of Network-based Software Architectures”) is not about how to build APIs on top of HTTP but rather about HTTP itself. Fielding contributed to the HTTP/1.0 specification and co-authored the HTTP/1.1 specification, which was published in 1999. He was interested in the architectural lessons that could be drawn from the design of the HTTP protocol; his dissertation presents REST as a distillation of the architectural principles that guided the standardization process for HTTP/1.1. Fielding used these principles to make decisions about which proposals to incorporate into HTTP/1.1. For example, he rejected a proposal to batch requests using new `MGET` and `MHEAD` methods because he felt the proposal violated the constraints prescribed by REST, especially the constraint that messages in a REST system should be easy to proxy and cache.[1][3] So HTTP/1.1 was instead designed around persistent connections over which multiple HTTP requests can be sent. (Fielding also felt that cookies are not RESTful because they add state to what should be a stateless system, but their usage was already entrenched.[2][4]) REST, for Fielding, was not a guide to building HTTP-based systems but a guide to extending HTTP. + +This isn’t to say that Fielding doesn’t think REST could be used to build other systems. It’s just that he assumes these other systems will also be “distributed hypermedia systems.” This is another misconception people have about REST: that it is a general architecture you can use for any kind of networked application. But you could sum up the part of the dissertation where Fielding introduces REST as, essentially, “Listen, we just designed HTTP, so if you also find yourself designing a _distributed hypermedia system_ you should use this cool architecture we worked out called REST to make things easier.” It’s not obvious why Fielding thinks anyone would ever attempt to build such a thing given that the web already exists; perhaps in 2000 it seemed like there was room for more than one distributed hypermedia system in the world. Anyway, Fielding makes clear that REST is intended as a solution for the scalability and consistency problems that arise when trying to connect hypermedia across the internet, _not_ as an architectural model for distributed applications in general. + +We remember Fielding’s dissertation now as the dissertation that introduced REST, but really the dissertation is about how much one-size-fits-all software architectures suck, and how you can better pick a software architecture appropriate for your needs. Only a single chapter of the dissertation is devoted to REST itself; much of the word count is spent on a taxonomy of alternative architectural styles[3][5] that one could use for networked applications. Among these is the Pipe-and-Filter (PF) style, inspired by Unix pipes, along with various refinements of the Client-Server style (CS), such as Layered-Client-Server (LCS), Client-Cache-Stateless-Server (C$SS), and Layered-Client-Cache-Stateless-Server (LC$SS). The acronyms get unwieldy but Fielding’s point is that you can mix and match constraints imposed by existing styles to derive new styles. REST gets derived this way and could instead have been called—but for obvious reasons was not—Uniform-Layered-Code-on-Demand-Client-Cache-Stateless-Server (ULCODC$SS). Fielding establishes this taxonomy to emphasize that different constraints are appropriate for different applications and that this last group of constraints were the ones he felt worked best for HTTP. + +This is the deep, deep irony of REST’s ubiquity today. REST gets blindly used for all sorts of networked applications now, but Fielding originally offered REST as an illustration of how to derive a software architecture tailored to an individual application’s particular needs. + +I struggle to understand how this happened, because Fielding is so explicit about the pitfalls of not letting form follow function. He warns, almost at the very beginning of the dissertation, that “design-by-buzzword is a common occurrence” brought on by a failure to properly appreciate software architecture.[4][6] He picks up this theme again several pages later: + +> Some architectural styles are often portrayed as “silver bullet” solutions for all forms of software. However, a good designer should select a style that matches the needs of a particular problem being solved.[5][7] + +REST itself is an especially poor “silver bullet” solution, because, as Fielding later points out, it incorporates trade-offs that may not be appropriate unless you are building a distributed hypermedia application: + +> REST is designed to be efficient for large-grain hypermedia data transfer, optimizing for the common case of the Web, but resulting in an interface that is not optimal for other forms of architectural interaction.[6][8] + +Fielding came up with REST because the web posed a thorny problem of “anarchic scalability,” by which Fielding means the need to connect documents in a performant way across organizational and national boundaries. The constraints that REST imposes were carefully chosen to solve this anarchic scalability problem. Web service APIs that are _public-facing_ have to deal with a similar problem, so one can see why REST is relevant there. Yet today it would not be at all surprising to find that an engineering team has built a backend using REST even though the backend only talks to clients that the engineering team has full control over. We have all become the architect in [this Monty Python sketch][9], who designs an apartment building in the style of a slaughterhouse because slaughterhouses are the only thing he has experience building. (Fielding uses a line from this sketch as an epigraph for his dissertation: “Excuse me… did you say ‘knives’?”) + +So, given that Fielding’s dissertation was all about avoiding silver bullet software architectures, how did REST become a de facto standard for web services of every kind? + +My theory is that, in the mid-2000s, the people who were sick of SOAP and wanted to do something else needed their own four-letter acronym. + +I’m only half-joking here. SOAP, or the Simple Object Access Protocol, is a verbose and complicated protocol that you cannot use without first understanding a bunch of interrelated XML specifications. Early web services offered APIs based on SOAP, but, as more and more APIs started being offered in the mid-2000s, software developers burned by SOAP’s complexity migrated away en masse. + +Among this crowd, SOAP inspired contempt. Ruby-on-Rails dropped SOAP support in 2007, leading to this emblematic comment from Rails creator David Heinemeier Hansson: “We feel that SOAP is overly complicated. It’s been taken over by the enterprise people, and when that happens, usually nothing good comes of it.”[7][10] The “enterprise people” wanted everything to be formally specified, but the get-shit-done crowd saw that as a waste of time. + +If the get-shit-done crowd wasn’t going to use SOAP, they still needed some standard way of doing things. Since everyone was using HTTP, and since everyone would keep using HTTP at least as a transport layer because of all the proxying and caching support, the simplest possible thing to do was just rely on HTTP’s existing semantics. So that’s what they did. They could have called their approach Fuck It, Overload HTTP (FIOH), and that would have been an accurate name, as anyone who has ever tried to decide what HTTP status code to return for a business logic error can attest. But that would have seemed recklessly blasé next to all the formal specification work that went into SOAP. + +Luckily, there was this dissertation out there, written by a co-author of the HTTP/1.1 specification, that had something vaguely to do with extending HTTP and could offer FIOH a veneer of academic respectability. So REST was appropriated to give cover for what was really just FIOH. + +I’m not saying that this is exactly how things happened, or that there was an actual conspiracy among irreverent startup types to misappropriate REST, but this story helps me understand how REST became a model for web service APIs when Fielding’s dissertation isn’t about web service APIs at all. Adopting REST’s constraints makes some sense, especially for public-facing APIs that do cross organizational boundaries and thus benefit from REST’s “uniform interface.” That link must have been the kernel of why REST first got mentioned in connection with building APIs on the web. But imagining a separate approach called “FIOH,” that borrowed the “REST” name partly just for marketing reasons, helps me account for the many disparities between what today we know as RESTful APIs and the REST architectural style that Fielding originally described. + +REST purists often complain, for example, that so-called REST APIs aren’t actually REST APIs because they do not use Hypermedia as The Engine of Application State (HATEOAS). Fielding himself [has made this criticism][11]. According to him, a real REST API is supposed to allow you to navigate all its endpoints from a base endpoint by following links. If you think that people are actually out there trying to build REST APIs, then this is a glaring omission—HATEOAS really is fundamental to Fielding’s original conception of REST, especially considering that the “state transfer” in “Representational State Transfer” refers to navigating a state machine using hyperlinks between resources (and not, as many people seem to believe, to transferring resource state over the wire).[8][12] But if you imagine that everyone is just building FIOH APIs and advertising them, with a nudge and a wink, as REST APIs, or slightly more honestly as “RESTful” APIs, then of course HATEOAS is unimportant. + +Similarly, you might be surprised to know that there is nothing in Fielding’s dissertation about which HTTP verb should map to which CRUD action, even though software developers like to argue endlessly about whether using PUT or PATCH to update a resource is more RESTful. Having a standard mapping of HTTP verbs to CRUD actions is a useful thing, but this standard mapping is part of FIOH and not part of REST. + +This is why, rather than saying that nobody understands REST, we should just think of the term “REST” as having been misappropriated. The modern notion of a REST API has historical links to Fielding’s REST architecture, but really the two things are separate. The historical link is good to keep in mind as a guide for when to build a RESTful API. Does your API cross organizational and national boundaries the same way that HTTP needs to? Then building a RESTful API with a predictable, uniform interface might be the right approach. If not, it’s good to remember that Fielding favored having form follow function. Maybe something like GraphQL or even just JSON-RPC would be a better fit for what you are trying to accomplish. + +_If you enjoyed this post, more like it come out every four weeks! Follow [@TwoBitHistory][13] on Twitter or subscribe to the [RSS feed][14] to make sure you know when a new post is out._ + +_Previously on TwoBitHistory…_ + +> New post is up! I wrote about how to solve differential equations using an analog computer from the '30s mostly made out of gears. As a bonus there's even some stuff in here about how to aim very large artillery pieces. +> +> — TwoBitHistory (@TwoBitHistory) [April 6, 2020][15] + + 1. Roy Fielding. “Architectural Styles and the Design of Network-based Software Architectures,” 128. 2000. University of California, Irvine, PhD Dissertation, accessed June 28, 2020, . [↩︎][16] + + 2. Fielding, 130. [↩︎][17] + + 3. Fielding distinguishes between software architectures and software architecture “styles.” REST is an architectural style that has an instantiation in the architecture of HTTP. [↩︎][18] + + 4. Fielding, 2. [↩︎][19] + + 5. Fielding, 15. [↩︎][20] + + 6. Fielding, 82. [↩︎][21] + + 7. Paul Krill. “Ruby on Rails 2.0 released for Web Apps,” InfoWorld. Dec 7, 2007, accessed June 28, 2020,  [↩︎][22] + + 8. Fielding, 109. [↩︎][23] + + + + +-------------------------------------------------------------------------------- + +via: https://twobithistory.org/2020/06/28/rest.html + +作者:[Two-Bit History][a] +选题:[lujun9972][b] +译者:[译者ID](https://github.com/译者ID) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://twobithistory.org +[b]: https://github.com/lujun9972 +[1]: https://news.ycombinator.com/item?id=7201871 +[2]: https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation_2up.pdf +[3]: tmp.Ewi4FpMIg6#fn:1 +[4]: tmp.Ewi4FpMIg6#fn:2 +[5]: tmp.Ewi4FpMIg6#fn:3 +[6]: tmp.Ewi4FpMIg6#fn:4 +[7]: tmp.Ewi4FpMIg6#fn:5 +[8]: tmp.Ewi4FpMIg6#fn:6 +[9]: https://www.youtube.com/watch?v=vNoPJqm3DAY +[10]: tmp.Ewi4FpMIg6#fn:7 +[11]: https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven +[12]: tmp.Ewi4FpMIg6#fn:8 +[13]: https://twitter.com/TwoBitHistory +[14]: https://twobithistory.org/feed.xml +[15]: https://twitter.com/TwoBitHistory/status/1247187881946275841?ref_src=twsrc%5Etfw +[16]: tmp.Ewi4FpMIg6#fnref:1 +[17]: tmp.Ewi4FpMIg6#fnref:2 +[18]: tmp.Ewi4FpMIg6#fnref:3 +[19]: tmp.Ewi4FpMIg6#fnref:4 +[20]: tmp.Ewi4FpMIg6#fnref:5 +[21]: tmp.Ewi4FpMIg6#fnref:6 +[22]: tmp.Ewi4FpMIg6#fnref:7 +[23]: tmp.Ewi4FpMIg6#fnref:8 diff --git a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md b/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md index b9c7838853..34902ff9d6 100644 --- a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md +++ b/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md @@ -1,100 +1,94 @@ -[#]: subject: "Open Source Software: Is There an Easy Path to Success?" -[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/" -[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Open Source Software: Is There an Easy Path to Success? -====== -There’s so much that goes on behind the scenes while developing open source software. So how does one make an open source project successful? Is there a shortcut? This article indicates there isn’t one. - -![team work working together][1] - -Open source has become all the rage now. Many entrepreneurs are drawn to it by the allure of quick success. But the truth is, there is no easy path to such success. There is no one thing that you can do to get all of open source right. - -In fact, a lot of the challenges that companies face early on are not technology challenges, but are people and cultural challenges. - -There are many layers of open source that need to be worked on to build a project that can become a hit in the market. And maintaining that success is an ongoing process. But at the crux of it all lies finding the right answer to a very basic question: what exactly is open source? - -### Open source is the code - -For many new users who may not be fully aware of the layers that make open source, the answer is fairly simple: open source is software! And that is not wrong, of course, since that is how most of us are using it. But there’s just so much more to open source than merely being touted as software. - -The essence of any open source project still remains the code. It is what makes the project special and useful for the user. When you’re working in open source, the code is just as much a part of the product as the software. - -Developing a project from the ground up, or even creating a fork of an existing project, requires thousands and thousands of lines of code to be written, even while handling such a large and complex codebase. Especially in the case of creating a fork, care must be taken to remove any prior licences, marketing material, or anything that might not be useful for the user anymore. After all, it is the features of a project that attract its user base and what retains it. When end users are deciding whether to use open source software, they will read the source code, and what they see there should be something that builds their confidence. - -### Open source is the community - -How you engage with the community is also a part of the task of building a product. Building a community and maintaining a healthy relationship with it is one of the most crucial aspects of open source, but is also often the hardest for most leaders as there is very little one can do to control it. One can try to lay the foundation and can be supportive but, ultimately, it’s the people who decide whether they want to join a community. - -It is important to maintain a level of transparency with the community and keep it in the loop. The community can get involved at any step that it wants to. It’s really important that you show most of your work to the community while you are doing it, apart from things that need to be done confidentially, like setting up security, signing certificates, branding, and so on. This helps in winning its trust because, in the end, it is the community that you are liable to, and it can make or break your project. This may make the project work a lot more deliberate, slower and exposed, but it works well in the end. - -Making your work-in-progress so open can seem daunting, especially when you are worried about the repercussions of a delay in updates or having a bug. Yet, making the community members privy to your moves will not only help you build a trustful relationship with them, but also make them feel appreciated. - -However, making your workflow public will also invite scrutiny from the community members, who will often have their opinions and offer you their feedback. Taking note of this feedback is important, because that is how you can make your open source project truly for them. They are the end users and their feedback will reflect how they see your project panning out for them in the long run, and ultimately, how successful and mainstream your software becomes. - -As an example, when we are thinking about a new feature, we publish a request for comments at RFC. We get a lot of feedback, and we have to think hard about how we can incorporate it. - -Since open source is a largely collaborative work, there will be initiatives by the community to offer their support in making the project the best version possible. Not all of it will work out. But as long you are listening, the community will feel involved. - -Engaging with the community has its pitfalls too. There may be differences of opinion within the community, and also between the maintainer and the community, especially when it comes to the matter of governance. Governance is something which is really important for an open source project to have. That is why it is important to have clear documented governance practices, which also include the community. - -Community governance is a tough, but essential, nut to crack. Delegation in itself requires a lot of trust. For a project with millions of lines of code, it can be cumbersome to find someone in the community who can meaningfully lead it. But open source projects often consist of smaller sub-projects, which are better left handled by someone from the community. This helps the community to be more closely involved too. - -| - | -| :- | -| Building a community always has its highs and lows. Let me list some of the tricks that helped maintain a healthy balance between the community’s and my team’s vision. -State your principle: Especially in the early stage of the open source project when the source code is still coming together and things are not exactly going perfectly, it is hard for somebody coming from outside to really understand why you are making the decisions that you are making. Communicating the principles on which you take actions helps you to be upfront about your thought process so that the community does not interpret things incorrectly. -This practice is really helpful. It is also important to follow through and show that when you make a decision, it is guided by one of these principles. -Decide how you are going to collaborate: This may be through channels like Discord, Slack, or simply emails. But if you try to use all of them, you will immediately diffuse the community. People will be communicating with each other all over the place. Choose one or two collaboration tools, and really invest in them for synchronised communication. -Treasure the feedback: Listen to feedback from the community and act on it. Show tat you care about what the community says, even if it requires you to make tough decisions. -Maintain a code of conduct: If you interact with a community, you need to define what is going to be acceptable conduct. Having that in place helps warn people in case they go out of line. You can avoid a lot of trouble if you can just define this early on. -Think about how you will distribute your project: There may be instances when you may not be willing to make your project available to the public because you do not have a certain component in place, or you have features you may not want to make accessible to everyone. Creating distribution terms that suit your preference without compromising on what the user wants is key, so that people who want certain features can access these while those who can do without them also have the option to start using the project without having to compromise. -Avoid polls as much as you can: This is because, often, certain members vote for an option that may not be what the majority goes with. This can create a sense of failure in these members and make them feel excluded from the project. Instead, try asking them what problems they would like to be solved, and then try to invent a solution that does not involve trade-offs. | - -**State your principle:** Especially in the early stage of the open source project when the source code is still coming together and things are not exactly going perfectly, it is hard for somebody coming from outside to really understand why you are making the decisions that you are making. Communicating the principles on which you take actions helps you to be upfront about your thought process so that the community does not interpret things incorrectly. - -This practice is really helpful. It is also important to follow through and show that when you make a decision, it is guided by one of these principles. - -*Decide how you are going to collaborate:* This may be through channels like Discord, Slack, or simply emails. But if you try to use all of them, you will immediately diffuse the community. People will be communicating with each other all over the place. Choose one or two collaboration tools, and really invest in them for synchronised communication. - -*Treasure the feedback:* Listen to feedback from the community and act on it. Show tat you care about what the community says, even if it requires you to make tough decisions. - -**Maintain a code of conduct:** If you interact with a community, you need to define what is going to be acceptable conduct. Having that in place helps warn people in case they go out of line. You can avoid a lot of trouble if you can just define this early on. - -*Think about how you will distribute your project:* There may be instances when you may not be willing to make your project available to the public because you do not have a certain component in place, or you have features you may not want to make accessible to everyone. Creating distribution terms that suit your preference without compromising on what the user wants is key, so that people who want certain features can access these while those who can do without them also have the option to start using the project without having to compromise. - -*Avoid polls as much as you can:* This is because, often, certain members vote for an option that may not be what the majority goes with. This can create a sense of failure in these members and make them feel excluded from the project. Instead, try asking them what problems they would like to be solved, and then try to invent a solution that does not involve trade-offs. - -### Open source is licensing - -Open source is about giving your users autonomy over how they want to use your software, and licensing provides just that. What’s great about an open source licence is that regardless of what you as a maintainer do, all your end users and stakeholders can always maintain a certain set of forks, which are important forks. - -Licensing gives people the option to take the project into a different direction if they deem it fit. They have the right to create a fork, which results in a lot of amazing software being developed. Maintainers have more responsibility to listen to their community members and to run the project in a way that works for them. - -It’s advisable to make use of the many licences available instead of setting your own terms separately, simply because stakeholders and users are usually familiar with commonly used licences, so you do not have to waste time explaining them. This also helps you to focus your energy on the other parts of the project. - -### Finally, open source is a movement - -Open source involves many, many dimensions and people. Most importantly, it is about understanding what these people want and creating an environment that encourages collaboration and transparency. It is about building communities that help to build the open source project the way they want it to be. The more opportunity maintainers create to let them do that, the better the product is and the more successful it gets. - -Open source is all of these things and the more expansive view you take, the better you can leverage it. Think about how you can excel in every dimension of open source because, at the end of the day, there is no easy path to open source success. - --------------------------------------------------------------------------------- - -via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/ - -作者:[Jules Graybill][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.opensourceforu.com/author/jules-graybill/ -[b]: https://github.com/lkxed -[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg +[#]: subject: "Open Source Software: Is There an Easy Path to Success?" +[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/" +[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/" +[#]: collector: "lkxed" +[#]: translator: "CanYellow" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +开源软件:存在成功的捷径吗? +====== + +开发开源软件背后的工作是相当庞大的。那么我们如何保证开源项目的成功呢?存在捷径吗?本文认为是没有的。 + +![团队合作][1] + +今天,开源已经风靡世界。很多大型企业在快速成功的诱惑下被推向开源。但真实情况是世界上并不存在成功的捷径。你无法做到通过一次努力就能让所有的开源项目正常运行。 + +事实上,上述公司早期遇到的许多挑战都不是技术上的,而是人员与文化上的。 + +开发一个能够在市场上获得成功的开源项目需要同不同层级(的开源社区人员)一同工作。维护这样的项目也是一个持续的过程。所有这一切的关键在于找到以下这个非常基础的问题的正确答案:开源究竟是什么。 + +### 开源是代码 + +对于很多没有深刻认识到构成开源的不同层级(的开源社区人员)用户而言,答案相当简单:开源就是软件!这当然没有错,毕竟这就是我们多数人如何使用它的。不过,相比仅仅被视作软件而言,开源远不止这些。 + +任何开源项目的实质仍然是代码本身。代码是使一个开源项目有别于其他项目并使其对用户有益的根本。当你在开源中工作的时候,代码和软件一样都是产品自身的一部分。 + +从零开始开发一个(开源)项目或者复刻(fork)一个现有项目的分支,即便是在处理如此庞大而复杂的代码库时,也需要编写成千上万行代码。尤其是在创新一个现有项目的分支的情况下,在移除任何在先的许可证、宣传材料或者其他任何可能已经失去作用的文件时必须小心翼翼。终究是一个项目的功能吸引了它的用户群并维持项目的持续发展。当终端用户在考虑是否使用开源软件的时候,他们会阅读项目的源代码,而他们在其中所看到的应当是那些能够建立他们的信心的内容。 + +### 开源是社区 + +如何参与到社区中也是产品构建项目的一部分。创建一个社区并维护一个健康的社区关系是开源的核心之一,但对于大部分的领导者而言也往往是最坚难的任务,很少有人能很好地维护它。你可以尝试建立基金会或者提供赞助,但是最终还是人们自行决定是否想要加入社区。 + +维护一定程度的社区透明度并不断保持也是重要的。社区可以随心所欲地参与项目。除了需要秘密进行的工作之外,诸如安全设置、签发证书、注册商标等,尽可能多的将你所做的工作展示给社区是相当重要的,这有助于取得社区信任。你终究需要对社区负责,你的项目成也社区,败也社区。这可能会导致你的项目开发更谨慎、更缓慢并且向社区公开,不过项目最终会进展顺利。 + +如此地公开你正在进行的工作似乎有些令人生怯,尤其是当你担心更新推迟或者是出现漏洞的影响的时候。不过,让社区成员知悉你的进展不仅有助帮助你建立与社区之间的信任关系,而且能够让社区成员感到被认可。 + +另一方面,公开你的工作流也可以获得来自社区成员的监督,他们经常有自己的见解并向你反馈。记录这些反馈是很重要的,这使得你的开源项目如实地反映社区需求。他们是项目的末端用户,而他们的反馈则反映了他们如何看待你的项目的长期发展以及你的项目最终将有多么成功或者主流。 + +举例而言,当我们在考虑一个新功能的时候,我们在征求意见文档(RFC, Request for Comments)中发布一个征集意见的请求,我们会收到大量的反馈,我们必须认真思考应当如何吸收这些反馈。 + +因为开源是一个大型的合作项目,社区在支持开源项目成为可能的万里挑一的项目上享有主动权。并非所有的问题都要解决,但只要你有在倾听社区的呼声,社区就会有参与感。 + +参与到社区中也存在一些隐患。社区内部、项目维护与社区之间均可能存在不同意见,尤其是在涉及管理问题上。管理问题对于一个开源项目来说是相当重要的。这也就是为什么拥有一份清晰的文档化的管理条例对于项目以及社区均是如此重要。 + +社区管理是一个关键的而又难啃的骨头。社区授权本身需要相当大的信任。对于一个拥有成千上万行代码的项目,在社区中寻找能够有效领导社区的人物是不容易的。不过开源项目经常是由更小的子项目组成的,这些子项目最好由社区中的某个人进行管理。这有助于社区更紧密地参与到项目中。 + +| - | +| :- | +| 建立社区的过程不是一帆风顺的。让我列举一一些有助于维持社区与我的团队之间平衡的技巧。 + +**声明你的原则:**尤其是在开源项目的早期,在项目代码仍在完善,很多事情还不完美的时候,项目之外的人员很难真正理解你所做的决定。向他们说明你做出决定所依据的原则有助于你在思考过程上保持坦率,从而让社区不会错误地干扰你的事务。 + +这一经验非常有效,在你做出决定时坚持遵循其中一项原则并展示出来是非常重要的。 + +*确定如何进行协作:*你可以通过Discord、Slack或者邮件等途径完成这一工作。但是如果你试图同时使用他们,你将毫不意外的分散项目社区。社区人员将在所有这些途径上互相交流。选择一到两种沟通工具,投身于他们来保证社区的信息同步。 + +*珍惜反馈意见:*倾听来自社区的反馈并付诸行动。即使需要你作出艰难的决定,你也应当向社区展示你是重视社区话语的。 + +**维护一套行为准则:**如果你与社区打交道,你需要定义什么行为是可以接受的。一套落地的行为准则有助于在人们越过红线时警示他们。如果你可以提前制定这些你可以避免很多麻烦。 + +*考虑如何分发你的项目:*存在这样的情况,因为你还没有准备好某一个组件,或者是因为存在一些项目功能你不希望所有人都能够访问,所以你可能并不希望将你的项目完全向公众公开。关键是制定符合你的要求而不是向用户妥协的分发条款,如此,需要某种功能的用户可以获取所需项目的同时不需要该功能的用户也不需要做出妥协而开始使用该项目。 + +*尽可能地避免投票:*这是因为部分成员经常会赞成与大部分成员的意见相左的选项,这会使这些人产生一定程度的失望,并让他们觉得被项目所孤立。反之,尽量尝试询问他们想要解决什么问题,并尝试创造一个不需要付出代价的解决方案。 + +### 开源是许可 + +开源是给予你的用户如何使用你的软件的自由,而许可能够做到这一点。一个开源项目许可是极好的,它保证了不论你作为维护者做了什么,你的所有终端用户以及利益相关方总是可以维护一系列的项目复刻版本,这些都是重要的项目复刻版。 + +许可提供了人们可选择性,如果他们认为有必要,他们可以将项目复制到不同的路径中。他们拥有创建副本的权利,这使得许多优秀的软件能够被开发出来。维护者有责任倾听他们的社区成员的声音并以一个对项目的社区成员有利的方式运营项目。 + +我们推荐使用现有的许多可用的许可证而不是独立制作你自己的许可条款,仅仅只是因为用户以及利益相关方通常都很熟悉公共许可证,因此你不需要再花费时间在解释许可条款上。这将帮助你将你的精力集中在项目的其他部分上。 + +### 最后,开源是一项运动 + +开源包括了很多维度,也包含了很多人员。最重要的是,它是有关理解人们想要什么的,也是有关创建一个鼓励协作与透明的环境的。开源也是有关创建有利于开源项目走自己想走的道路的社区的。维护者创造越多的机会让社区自由发挥,开源产品就越好,也越发成功。 + +开源是以上这些方面,而你的视野越宽阔,你就能越好的利用它。请考虑你如何能够在开源的每一个维度上出类拔萃,因为时至今日,开源的成功之路并无捷径。 + +-------------------------------------------------------------------------------- + +via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/ + +作者:[Jules Graybill][a] +选题:[lkxed][b] +译者:[CanYellow](https://github.com/CanYellow) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.opensourceforu.com/author/jules-graybill/ +[b]: https://github.com/lkxed +[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg From 7e0522fe18ad12aaca37b44d70d11b1cb8500727 Mon Sep 17 00:00:00 2001 From: CanYellow Date: Wed, 5 Apr 2023 23:18:35 +0800 Subject: [PATCH 62/83] Delete 20220726 Open Source Software- Is There an Easy Path to Success-.md --- ...ware- Is There an Easy Path to Success-.md | 93 ------------------- 1 file changed, 93 deletions(-) delete mode 100644 sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md diff --git a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md b/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md deleted file mode 100644 index ea35405d69..0000000000 --- a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md +++ /dev/null @@ -1,93 +0,0 @@ -[#]: subject: "Open Source Software: Is There an Easy Path to Success?" -[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/" -[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/" -[#]: collector: "lkxed" -[#]: translator: "CanYellow" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -开源软件:存在成功的捷径吗? -====== - -开发开源软件背后的工作是相当庞大的。那么我们如何保证开源项目的成功呢?存在捷径吗?本文认为是没有的。 - -![团队合作][1] - -今天,开源已经风靡世界。很多大型企业在快速成功的诱惑下被推向开源。但真实情况是世界上并不存在成功的捷径。你无法做到通过一次努力就能让所有的开源项目正常运行。 - -事实上,上述公司早期遇到的许多挑战都不是技术上的,而是人员与文化上的。 - -开发一个能够在市场上获得成功的开源项目需要同不同层级(的开源社区人员)一同工作。维护这样的项目也是一个持续的过程。所有这一切的关键在于找到以下这个非常基础的问题的正确答案:开源究竟是什么。 - -### 开源是代码 - -对于很多没有深刻认识到构成开源的不同层级(的开源社区人员)用户而言,答案相当简单:开源就是软件!这当然没有错,毕竟这就是我们多数人如何使用它的。不过,相比仅仅被视作软件而言,开源远不止这些。 - -任何开源项目的实质仍然是代码本身。代码是使一个开源项目有别于其他项目并使其对用户有益的根本。当你在开源中工作的时候,代码和软件一样都是产品自身的一部分。 - -从零开始开发一个(开源)项目或者复刻(fork)一个现有项目的分支,即便是在处理如此庞大而复杂的代码库时,也需要编写成千上万行代码。尤其是在创新一个现有项目的分支的情况下,在移除任何在先的许可证、宣传材料或者其他任何可能已经失去作用的文件时必须小心翼翼。终究是一个项目的功能吸引了它的用户群并维持项目的持续发展。当终端用户在考虑是否使用开源软件的时候,他们会阅读项目的源代码,而他们在其中所看到的应当是那些能够建立他们的信心的内容。 - -### 开源是社区 - -如何参与到社区中也是产品构建项目的一部分。创建一个社区并维护一个健康的社区关系是开源的核心之一,但对于大部分的领导者而言也往往是最坚难的任务,很少有人能很好地维护它。你可以尝试建立基金会或者提供赞助,但是最终还是人们自行决定是否想要加入社区。 - -维护一定程度的社区透明度并不断保持也是重要的。社区可以随心所欲地参与项目。除了需要秘密进行的工作之外,诸如安全设置、签发证书、注册商标等,尽可能多的将你所做的工作展示给社区是相当重要的,这有助于取得社区信任。你终究需要对社区负责,你的项目成也社区,败也社区。这可能会导致你的项目开发更谨慎、更缓慢并且向社区公开,不过项目最终会进展顺利。 - -如此地公开你正在进行的工作似乎有些令人生怯,尤其是当你担心更新推迟或者是出现漏洞的影响的时候。不过,让社区成员知悉你的进展不仅有助帮助你建立与社区之间的信任关系,而且能够让社区成员感到被认可。 - -另一方面,公开你的工作流也可以获得来自社区成员的监督,他们经常有自己的见解并向你反馈。记录这些反馈是很重要的,这使得你的开源项目如实地反映社区需求。他们是项目的末端用户,而他们的反馈则反映了他们如何看待你的项目的长期发展以及你的项目最终将有多么成功或者主流。 - -举例而言,当我们在考虑一个新功能的时候,我们在征求意见文档(RFC, Request for Comments)中发布一个征集意见的请求,我们会收到大量的反馈,我们必须认真思考应当如何吸收这些反馈。 - -因为开源是一个大型的合作项目,社区在支持开源项目成为可能的万里挑一的项目上享有主动权。并非所有的问题都要解决,但只要你有在倾听社区的呼声,社区就会有参与感。 - -参与到社区中也存在一些隐患。社区内部、项目维护与社区之间均可能存在不同意见,尤其是在涉及管理问题上。管理问题对于一个开源项目来说是相当重要的。这也就是为什么拥有一份清晰的文档化的管理条例对于项目以及社区均是如此重要。 - -社区管理是一个关键的而又难啃的骨头。社区授权本身需要相当大的信任。对于一个拥有成千上万行代码的项目,在社区中寻找能够有效领导社区的人物是不容易的。不过开源项目经常是由更小的子项目组成的,这些子项目最好由社区中的某个人进行管理。这有助于社区更紧密地参与到项目中。 - -| - | -| :- | -| 建立社区的过程不是一帆风顺的。让我列举一一些有助于维持社区与我的团队之间平衡的技巧。 - -**声明你的原则:**尤其是在开源项目的早期,在项目代码仍在完善,很多事情还不完美的时候,项目之外的人员很难真正理解你所做的决定。向他们说明你做出决定所依据的原则有助于你在思考过程上保持坦率,从而让社区不会错误地干扰你的事务。 - -这一经验非常有效,在你做出决定时坚持遵循其中一项原则并展示出来是非常重要的。 - -*确定如何进行协作:*你可以通过Discord、Slack或者邮件等途径完成这一工作。但是如果你试图同时使用他们,你将毫不意外的分散项目社区。社区人员将在所有这些途径上互相交流。选择一到两种沟通工具,投身于他们来保证社区的信息同步。 - -*珍惜反馈意见:*倾听来自社区的反馈并付诸行动。即使需要你作出艰难的决定,你也应当向社区展示你是重视社区话语的。 - -**维护一套行为准则:**如果你与社区打交道,你需要定义什么行为是可以接受的。一套落地的行为准则有助于在人们越过红线时警示他们。如果你可以提前制定这些你可以避免很多麻烦。 - -*考虑如何分发你的项目:*存在这样的情况,因为你还没有准备好某一个组件,或者是因为存在一些项目功能你不希望所有人都能够访问,所以你可能并不希望将你的项目完全向公众公开。关键是制定符合你的要求而不是向用户妥协的分发条款,如此,需要某种功能的用户可以获取所需项目的同时不需要该功能的用户也不需要做出妥协而开始使用该项目。 - -*尽可能地避免投票:*这是因为部分成员经常会赞成与大部分成员的意见相左的选项,这会使这些人产生一定程度的失望,并让他们觉得被项目所孤立。反之,尽量尝试询问他们想要解决什么问题,并尝试创造一个不需要付出代价的解决方案。 - -### 开源是许可 - -开源是给予你的用户如何使用你的软件的自由,而许可能够做到这一点。一个开源项目许可是极好的,它保证了不论你作为维护者做了什么,你的所有终端用户以及利益相关方总是可以维护一系列的项目复刻版本,这些都是重要的项目复刻版。 - -许可提供了人们可选择性,如果他们认为有必要,他们可以将项目复制到不同的路径中。他们拥有创建副本的权利,这使得许多优秀的软件能够被开发出来。维护者有责任倾听他们的社区成员的声音并以一个对项目的社区成员有利的方式运营项目。 - -我们推荐使用现有的许多可用的许可证而不是独立制作你自己的许可条款,仅仅只是因为用户以及利益相关方通常都很熟悉公共许可证,因此你不需要再花费时间在解释许可条款上。这将帮助你将你的精力集中在项目的其他部分上。 - -### 最后,开源是一项运动 - -开源包括了很多维度,也包含了很多人员。最重要的是,它是有关理解人们想要什么的,也是有关创建一个鼓励协作与透明的环境的。开源也是有关创建有利于开源项目走自己想走的道路的社区的。维护者创造越多的机会让社区自由发挥,开源产品就越好,也越发成功。 - -开源是以上这些方面,而你的视野越宽阔,你就能越好的利用它。请考虑你如何能够在开源的每一个维度上出类拔萃,因为时至今日,开源的成功之路并无捷径。 - - -via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/ - -作者:[Jules Graybill][a] -选题:[lkxed][b] -译者:[CanYellow](https://github.com/CanYellow) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.opensourceforu.com/author/jules-graybill/ -[b]: https://github.com/lkxed -[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg From 8b9b8c61b4ed5b2bdf2fb51d307e7c3d000a1476 Mon Sep 17 00:00:00 2001 From: CanYellow Date: Wed, 5 Apr 2023 23:19:07 +0800 Subject: [PATCH 63/83] Add files via upload --- ...ware- Is There an Easy Path to Success-.md | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md diff --git a/translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md b/translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md new file mode 100644 index 0000000000..ea35405d69 --- /dev/null +++ b/translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md @@ -0,0 +1,93 @@ +[#]: subject: "Open Source Software: Is There an Easy Path to Success?" +[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/" +[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/" +[#]: collector: "lkxed" +[#]: translator: "CanYellow" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +开源软件:存在成功的捷径吗? +====== + +开发开源软件背后的工作是相当庞大的。那么我们如何保证开源项目的成功呢?存在捷径吗?本文认为是没有的。 + +![团队合作][1] + +今天,开源已经风靡世界。很多大型企业在快速成功的诱惑下被推向开源。但真实情况是世界上并不存在成功的捷径。你无法做到通过一次努力就能让所有的开源项目正常运行。 + +事实上,上述公司早期遇到的许多挑战都不是技术上的,而是人员与文化上的。 + +开发一个能够在市场上获得成功的开源项目需要同不同层级(的开源社区人员)一同工作。维护这样的项目也是一个持续的过程。所有这一切的关键在于找到以下这个非常基础的问题的正确答案:开源究竟是什么。 + +### 开源是代码 + +对于很多没有深刻认识到构成开源的不同层级(的开源社区人员)用户而言,答案相当简单:开源就是软件!这当然没有错,毕竟这就是我们多数人如何使用它的。不过,相比仅仅被视作软件而言,开源远不止这些。 + +任何开源项目的实质仍然是代码本身。代码是使一个开源项目有别于其他项目并使其对用户有益的根本。当你在开源中工作的时候,代码和软件一样都是产品自身的一部分。 + +从零开始开发一个(开源)项目或者复刻(fork)一个现有项目的分支,即便是在处理如此庞大而复杂的代码库时,也需要编写成千上万行代码。尤其是在创新一个现有项目的分支的情况下,在移除任何在先的许可证、宣传材料或者其他任何可能已经失去作用的文件时必须小心翼翼。终究是一个项目的功能吸引了它的用户群并维持项目的持续发展。当终端用户在考虑是否使用开源软件的时候,他们会阅读项目的源代码,而他们在其中所看到的应当是那些能够建立他们的信心的内容。 + +### 开源是社区 + +如何参与到社区中也是产品构建项目的一部分。创建一个社区并维护一个健康的社区关系是开源的核心之一,但对于大部分的领导者而言也往往是最坚难的任务,很少有人能很好地维护它。你可以尝试建立基金会或者提供赞助,但是最终还是人们自行决定是否想要加入社区。 + +维护一定程度的社区透明度并不断保持也是重要的。社区可以随心所欲地参与项目。除了需要秘密进行的工作之外,诸如安全设置、签发证书、注册商标等,尽可能多的将你所做的工作展示给社区是相当重要的,这有助于取得社区信任。你终究需要对社区负责,你的项目成也社区,败也社区。这可能会导致你的项目开发更谨慎、更缓慢并且向社区公开,不过项目最终会进展顺利。 + +如此地公开你正在进行的工作似乎有些令人生怯,尤其是当你担心更新推迟或者是出现漏洞的影响的时候。不过,让社区成员知悉你的进展不仅有助帮助你建立与社区之间的信任关系,而且能够让社区成员感到被认可。 + +另一方面,公开你的工作流也可以获得来自社区成员的监督,他们经常有自己的见解并向你反馈。记录这些反馈是很重要的,这使得你的开源项目如实地反映社区需求。他们是项目的末端用户,而他们的反馈则反映了他们如何看待你的项目的长期发展以及你的项目最终将有多么成功或者主流。 + +举例而言,当我们在考虑一个新功能的时候,我们在征求意见文档(RFC, Request for Comments)中发布一个征集意见的请求,我们会收到大量的反馈,我们必须认真思考应当如何吸收这些反馈。 + +因为开源是一个大型的合作项目,社区在支持开源项目成为可能的万里挑一的项目上享有主动权。并非所有的问题都要解决,但只要你有在倾听社区的呼声,社区就会有参与感。 + +参与到社区中也存在一些隐患。社区内部、项目维护与社区之间均可能存在不同意见,尤其是在涉及管理问题上。管理问题对于一个开源项目来说是相当重要的。这也就是为什么拥有一份清晰的文档化的管理条例对于项目以及社区均是如此重要。 + +社区管理是一个关键的而又难啃的骨头。社区授权本身需要相当大的信任。对于一个拥有成千上万行代码的项目,在社区中寻找能够有效领导社区的人物是不容易的。不过开源项目经常是由更小的子项目组成的,这些子项目最好由社区中的某个人进行管理。这有助于社区更紧密地参与到项目中。 + +| - | +| :- | +| 建立社区的过程不是一帆风顺的。让我列举一一些有助于维持社区与我的团队之间平衡的技巧。 + +**声明你的原则:**尤其是在开源项目的早期,在项目代码仍在完善,很多事情还不完美的时候,项目之外的人员很难真正理解你所做的决定。向他们说明你做出决定所依据的原则有助于你在思考过程上保持坦率,从而让社区不会错误地干扰你的事务。 + +这一经验非常有效,在你做出决定时坚持遵循其中一项原则并展示出来是非常重要的。 + +*确定如何进行协作:*你可以通过Discord、Slack或者邮件等途径完成这一工作。但是如果你试图同时使用他们,你将毫不意外的分散项目社区。社区人员将在所有这些途径上互相交流。选择一到两种沟通工具,投身于他们来保证社区的信息同步。 + +*珍惜反馈意见:*倾听来自社区的反馈并付诸行动。即使需要你作出艰难的决定,你也应当向社区展示你是重视社区话语的。 + +**维护一套行为准则:**如果你与社区打交道,你需要定义什么行为是可以接受的。一套落地的行为准则有助于在人们越过红线时警示他们。如果你可以提前制定这些你可以避免很多麻烦。 + +*考虑如何分发你的项目:*存在这样的情况,因为你还没有准备好某一个组件,或者是因为存在一些项目功能你不希望所有人都能够访问,所以你可能并不希望将你的项目完全向公众公开。关键是制定符合你的要求而不是向用户妥协的分发条款,如此,需要某种功能的用户可以获取所需项目的同时不需要该功能的用户也不需要做出妥协而开始使用该项目。 + +*尽可能地避免投票:*这是因为部分成员经常会赞成与大部分成员的意见相左的选项,这会使这些人产生一定程度的失望,并让他们觉得被项目所孤立。反之,尽量尝试询问他们想要解决什么问题,并尝试创造一个不需要付出代价的解决方案。 + +### 开源是许可 + +开源是给予你的用户如何使用你的软件的自由,而许可能够做到这一点。一个开源项目许可是极好的,它保证了不论你作为维护者做了什么,你的所有终端用户以及利益相关方总是可以维护一系列的项目复刻版本,这些都是重要的项目复刻版。 + +许可提供了人们可选择性,如果他们认为有必要,他们可以将项目复制到不同的路径中。他们拥有创建副本的权利,这使得许多优秀的软件能够被开发出来。维护者有责任倾听他们的社区成员的声音并以一个对项目的社区成员有利的方式运营项目。 + +我们推荐使用现有的许多可用的许可证而不是独立制作你自己的许可条款,仅仅只是因为用户以及利益相关方通常都很熟悉公共许可证,因此你不需要再花费时间在解释许可条款上。这将帮助你将你的精力集中在项目的其他部分上。 + +### 最后,开源是一项运动 + +开源包括了很多维度,也包含了很多人员。最重要的是,它是有关理解人们想要什么的,也是有关创建一个鼓励协作与透明的环境的。开源也是有关创建有利于开源项目走自己想走的道路的社区的。维护者创造越多的机会让社区自由发挥,开源产品就越好,也越发成功。 + +开源是以上这些方面,而你的视野越宽阔,你就能越好的利用它。请考虑你如何能够在开源的每一个维度上出类拔萃,因为时至今日,开源的成功之路并无捷径。 + + +via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/ + +作者:[Jules Graybill][a] +选题:[lkxed][b] +译者:[CanYellow](https://github.com/CanYellow) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.opensourceforu.com/author/jules-graybill/ +[b]: https://github.com/lkxed +[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg From e756147b965ac563d10e166917afbf3acc2d7501 Mon Sep 17 00:00:00 2001 From: CanYellow Date: Wed, 5 Apr 2023 23:21:56 +0800 Subject: [PATCH 64/83] 10th trans (#29038) * D * W2 * h0227 * tr1 * finished * Delete 20220726 Open Source Software- Is There an Easy Path to Success-.md * Add files via upload --- ...ware- Is There an Easy Path to Success-.md | 100 ------------------ ...ware- Is There an Easy Path to Success-.md | 93 ++++++++++++++++ 2 files changed, 93 insertions(+), 100 deletions(-) delete mode 100644 sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md create mode 100644 translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md diff --git a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md b/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md deleted file mode 100644 index 7f9aea7ab5..0000000000 --- a/sources/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md +++ /dev/null @@ -1,100 +0,0 @@ -[#]: subject: "Open Source Software: Is There an Easy Path to Success?" -[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/" -[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/" -[#]: collector: "lkxed" -[#]: translator: "CanYellow" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Open Source Software: Is There an Easy Path to Success? -====== -There’s so much that goes on behind the scenes while developing open source software. So how does one make an open source project successful? Is there a shortcut? This article indicates there isn’t one. - -![team work working together][1] - -Open source has become all the rage now. Many entrepreneurs are drawn to it by the allure of quick success. But the truth is, there is no easy path to such success. There is no one thing that you can do to get all of open source right. - -In fact, a lot of the challenges that companies face early on are not technology challenges, but are people and cultural challenges. - -There are many layers of open source that need to be worked on to build a project that can become a hit in the market. And maintaining that success is an ongoing process. But at the crux of it all lies finding the right answer to a very basic question: what exactly is open source? - -### Open source is the code - -For many new users who may not be fully aware of the layers that make open source, the answer is fairly simple: open source is software! And that is not wrong, of course, since that is how most of us are using it. But there’s just so much more to open source than merely being touted as software. - -The essence of any open source project still remains the code. It is what makes the project special and useful for the user. When you’re working in open source, the code is just as much a part of the product as the software. - -Developing a project from the ground up, or even creating a fork of an existing project, requires thousands and thousands of lines of code to be written, even while handling such a large and complex codebase. Especially in the case of creating a fork, care must be taken to remove any prior licences, marketing material, or anything that might not be useful for the user anymore. After all, it is the features of a project that attract its user base and what retains it. When end users are deciding whether to use open source software, they will read the source code, and what they see there should be something that builds their confidence. - -### Open source is the community - -How you engage with the community is also a part of the task of building a product. Building a community and maintaining a healthy relationship with it is one of the most crucial aspects of open source, but is also often the hardest for most leaders as there is very little one can do to control it. One can try to lay the foundation and can be supportive but, ultimately, it’s the people who decide whether they want to join a community. - -It is important to maintain a level of transparency with the community and keep it in the loop. The community can get involved at any step that it wants to. It’s really important that you show most of your work to the community while you are doing it, apart from things that need to be done confidentially, like setting up security, signing certificates, branding, and so on. This helps in winning its trust because, in the end, it is the community that you are liable to, and it can make or break your project. This may make the project work a lot more deliberate, slower and exposed, but it works well in the end. - -Making your work-in-progress so open can seem daunting, especially when you are worried about the repercussions of a delay in updates or having a bug. Yet, making the community members privy to your moves will not only help you build a trustful relationship with them, but also make them feel appreciated. - -However, making your workflow public will also invite scrutiny from the community members, who will often have their opinions and offer you their feedback. Taking note of this feedback is important, because that is how you can make your open source project truly for them. They are the end users and their feedback will reflect how they see your project panning out for them in the long run, and ultimately, how successful and mainstream your software becomes. - -As an example, when we are thinking about a new feature, we publish a request for comments at RFC. We get a lot of feedback, and we have to think hard about how we can incorporate it. - -Since open source is a largely collaborative work, there will be initiatives by the community to offer their support in making the project the best version possible. Not all of it will work out. But as long you are listening, the community will feel involved. - -Engaging with the community has its pitfalls too. There may be differences of opinion within the community, and also between the maintainer and the community, especially when it comes to the matter of governance. Governance is something which is really important for an open source project to have. That is why it is important to have clear documented governance practices, which also include the community. - -Community governance is a tough, but essential, nut to crack. Delegation in itself requires a lot of trust. For a project with millions of lines of code, it can be cumbersome to find someone in the community who can meaningfully lead it. But open source projects often consist of smaller sub-projects, which are better left handled by someone from the community. This helps the community to be more closely involved too. - -| - | -| :- | -| Building a community always has its highs and lows. Let me list some of the tricks that helped maintain a healthy balance between the community’s and my team’s vision. -State your principle: Especially in the early stage of the open source project when the source code is still coming together and things are not exactly going perfectly, it is hard for somebody coming from outside to really understand why you are making the decisions that you are making. Communicating the principles on which you take actions helps you to be upfront about your thought process so that the community does not interpret things incorrectly. -This practice is really helpful. It is also important to follow through and show that when you make a decision, it is guided by one of these principles. -Decide how you are going to collaborate: This may be through channels like Discord, Slack, or simply emails. But if you try to use all of them, you will immediately diffuse the community. People will be communicating with each other all over the place. Choose one or two collaboration tools, and really invest in them for synchronised communication. -Treasure the feedback: Listen to feedback from the community and act on it. Show tat you care about what the community says, even if it requires you to make tough decisions. -Maintain a code of conduct: If you interact with a community, you need to define what is going to be acceptable conduct. Having that in place helps warn people in case they go out of line. You can avoid a lot of trouble if you can just define this early on. -Think about how you will distribute your project: There may be instances when you may not be willing to make your project available to the public because you do not have a certain component in place, or you have features you may not want to make accessible to everyone. Creating distribution terms that suit your preference without compromising on what the user wants is key, so that people who want certain features can access these while those who can do without them also have the option to start using the project without having to compromise. -Avoid polls as much as you can: This is because, often, certain members vote for an option that may not be what the majority goes with. This can create a sense of failure in these members and make them feel excluded from the project. Instead, try asking them what problems they would like to be solved, and then try to invent a solution that does not involve trade-offs. | - -**State your principle:** Especially in the early stage of the open source project when the source code is still coming together and things are not exactly going perfectly, it is hard for somebody coming from outside to really understand why you are making the decisions that you are making. Communicating the principles on which you take actions helps you to be upfront about your thought process so that the community does not interpret things incorrectly. - -This practice is really helpful. It is also important to follow through and show that when you make a decision, it is guided by one of these principles. - -*Decide how you are going to collaborate:* This may be through channels like Discord, Slack, or simply emails. But if you try to use all of them, you will immediately diffuse the community. People will be communicating with each other all over the place. Choose one or two collaboration tools, and really invest in them for synchronised communication. - -*Treasure the feedback:* Listen to feedback from the community and act on it. Show tat you care about what the community says, even if it requires you to make tough decisions. - -**Maintain a code of conduct:** If you interact with a community, you need to define what is going to be acceptable conduct. Having that in place helps warn people in case they go out of line. You can avoid a lot of trouble if you can just define this early on. - -*Think about how you will distribute your project:* There may be instances when you may not be willing to make your project available to the public because you do not have a certain component in place, or you have features you may not want to make accessible to everyone. Creating distribution terms that suit your preference without compromising on what the user wants is key, so that people who want certain features can access these while those who can do without them also have the option to start using the project without having to compromise. - -*Avoid polls as much as you can:* This is because, often, certain members vote for an option that may not be what the majority goes with. This can create a sense of failure in these members and make them feel excluded from the project. Instead, try asking them what problems they would like to be solved, and then try to invent a solution that does not involve trade-offs. - -### Open source is licensing - -Open source is about giving your users autonomy over how they want to use your software, and licensing provides just that. What’s great about an open source licence is that regardless of what you as a maintainer do, all your end users and stakeholders can always maintain a certain set of forks, which are important forks. - -Licensing gives people the option to take the project into a different direction if they deem it fit. They have the right to create a fork, which results in a lot of amazing software being developed. Maintainers have more responsibility to listen to their community members and to run the project in a way that works for them. - -It’s advisable to make use of the many licences available instead of setting your own terms separately, simply because stakeholders and users are usually familiar with commonly used licences, so you do not have to waste time explaining them. This also helps you to focus your energy on the other parts of the project. - -### Finally, open source is a movement - -Open source involves many, many dimensions and people. Most importantly, it is about understanding what these people want and creating an environment that encourages collaboration and transparency. It is about building communities that help to build the open source project the way they want it to be. The more opportunity maintainers create to let them do that, the better the product is and the more successful it gets. - -Open source is all of these things and the more expansive view you take, the better you can leverage it. Think about how you can excel in every dimension of open source because, at the end of the day, there is no easy path to open source success. - --------------------------------------------------------------------------------- - -via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/ - -作者:[Jules Graybill][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://www.opensourceforu.com/author/jules-graybill/ -[b]: https://github.com/lkxed -[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg diff --git a/translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md b/translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md new file mode 100644 index 0000000000..ea35405d69 --- /dev/null +++ b/translated/talk/20220726 Open Source Software- Is There an Easy Path to Success-.md @@ -0,0 +1,93 @@ +[#]: subject: "Open Source Software: Is There an Easy Path to Success?" +[#]: via: "https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/" +[#]: author: "Jules Graybill https://www.opensourceforu.com/author/jules-graybill/" +[#]: collector: "lkxed" +[#]: translator: "CanYellow" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +开源软件:存在成功的捷径吗? +====== + +开发开源软件背后的工作是相当庞大的。那么我们如何保证开源项目的成功呢?存在捷径吗?本文认为是没有的。 + +![团队合作][1] + +今天,开源已经风靡世界。很多大型企业在快速成功的诱惑下被推向开源。但真实情况是世界上并不存在成功的捷径。你无法做到通过一次努力就能让所有的开源项目正常运行。 + +事实上,上述公司早期遇到的许多挑战都不是技术上的,而是人员与文化上的。 + +开发一个能够在市场上获得成功的开源项目需要同不同层级(的开源社区人员)一同工作。维护这样的项目也是一个持续的过程。所有这一切的关键在于找到以下这个非常基础的问题的正确答案:开源究竟是什么。 + +### 开源是代码 + +对于很多没有深刻认识到构成开源的不同层级(的开源社区人员)用户而言,答案相当简单:开源就是软件!这当然没有错,毕竟这就是我们多数人如何使用它的。不过,相比仅仅被视作软件而言,开源远不止这些。 + +任何开源项目的实质仍然是代码本身。代码是使一个开源项目有别于其他项目并使其对用户有益的根本。当你在开源中工作的时候,代码和软件一样都是产品自身的一部分。 + +从零开始开发一个(开源)项目或者复刻(fork)一个现有项目的分支,即便是在处理如此庞大而复杂的代码库时,也需要编写成千上万行代码。尤其是在创新一个现有项目的分支的情况下,在移除任何在先的许可证、宣传材料或者其他任何可能已经失去作用的文件时必须小心翼翼。终究是一个项目的功能吸引了它的用户群并维持项目的持续发展。当终端用户在考虑是否使用开源软件的时候,他们会阅读项目的源代码,而他们在其中所看到的应当是那些能够建立他们的信心的内容。 + +### 开源是社区 + +如何参与到社区中也是产品构建项目的一部分。创建一个社区并维护一个健康的社区关系是开源的核心之一,但对于大部分的领导者而言也往往是最坚难的任务,很少有人能很好地维护它。你可以尝试建立基金会或者提供赞助,但是最终还是人们自行决定是否想要加入社区。 + +维护一定程度的社区透明度并不断保持也是重要的。社区可以随心所欲地参与项目。除了需要秘密进行的工作之外,诸如安全设置、签发证书、注册商标等,尽可能多的将你所做的工作展示给社区是相当重要的,这有助于取得社区信任。你终究需要对社区负责,你的项目成也社区,败也社区。这可能会导致你的项目开发更谨慎、更缓慢并且向社区公开,不过项目最终会进展顺利。 + +如此地公开你正在进行的工作似乎有些令人生怯,尤其是当你担心更新推迟或者是出现漏洞的影响的时候。不过,让社区成员知悉你的进展不仅有助帮助你建立与社区之间的信任关系,而且能够让社区成员感到被认可。 + +另一方面,公开你的工作流也可以获得来自社区成员的监督,他们经常有自己的见解并向你反馈。记录这些反馈是很重要的,这使得你的开源项目如实地反映社区需求。他们是项目的末端用户,而他们的反馈则反映了他们如何看待你的项目的长期发展以及你的项目最终将有多么成功或者主流。 + +举例而言,当我们在考虑一个新功能的时候,我们在征求意见文档(RFC, Request for Comments)中发布一个征集意见的请求,我们会收到大量的反馈,我们必须认真思考应当如何吸收这些反馈。 + +因为开源是一个大型的合作项目,社区在支持开源项目成为可能的万里挑一的项目上享有主动权。并非所有的问题都要解决,但只要你有在倾听社区的呼声,社区就会有参与感。 + +参与到社区中也存在一些隐患。社区内部、项目维护与社区之间均可能存在不同意见,尤其是在涉及管理问题上。管理问题对于一个开源项目来说是相当重要的。这也就是为什么拥有一份清晰的文档化的管理条例对于项目以及社区均是如此重要。 + +社区管理是一个关键的而又难啃的骨头。社区授权本身需要相当大的信任。对于一个拥有成千上万行代码的项目,在社区中寻找能够有效领导社区的人物是不容易的。不过开源项目经常是由更小的子项目组成的,这些子项目最好由社区中的某个人进行管理。这有助于社区更紧密地参与到项目中。 + +| - | +| :- | +| 建立社区的过程不是一帆风顺的。让我列举一一些有助于维持社区与我的团队之间平衡的技巧。 + +**声明你的原则:**尤其是在开源项目的早期,在项目代码仍在完善,很多事情还不完美的时候,项目之外的人员很难真正理解你所做的决定。向他们说明你做出决定所依据的原则有助于你在思考过程上保持坦率,从而让社区不会错误地干扰你的事务。 + +这一经验非常有效,在你做出决定时坚持遵循其中一项原则并展示出来是非常重要的。 + +*确定如何进行协作:*你可以通过Discord、Slack或者邮件等途径完成这一工作。但是如果你试图同时使用他们,你将毫不意外的分散项目社区。社区人员将在所有这些途径上互相交流。选择一到两种沟通工具,投身于他们来保证社区的信息同步。 + +*珍惜反馈意见:*倾听来自社区的反馈并付诸行动。即使需要你作出艰难的决定,你也应当向社区展示你是重视社区话语的。 + +**维护一套行为准则:**如果你与社区打交道,你需要定义什么行为是可以接受的。一套落地的行为准则有助于在人们越过红线时警示他们。如果你可以提前制定这些你可以避免很多麻烦。 + +*考虑如何分发你的项目:*存在这样的情况,因为你还没有准备好某一个组件,或者是因为存在一些项目功能你不希望所有人都能够访问,所以你可能并不希望将你的项目完全向公众公开。关键是制定符合你的要求而不是向用户妥协的分发条款,如此,需要某种功能的用户可以获取所需项目的同时不需要该功能的用户也不需要做出妥协而开始使用该项目。 + +*尽可能地避免投票:*这是因为部分成员经常会赞成与大部分成员的意见相左的选项,这会使这些人产生一定程度的失望,并让他们觉得被项目所孤立。反之,尽量尝试询问他们想要解决什么问题,并尝试创造一个不需要付出代价的解决方案。 + +### 开源是许可 + +开源是给予你的用户如何使用你的软件的自由,而许可能够做到这一点。一个开源项目许可是极好的,它保证了不论你作为维护者做了什么,你的所有终端用户以及利益相关方总是可以维护一系列的项目复刻版本,这些都是重要的项目复刻版。 + +许可提供了人们可选择性,如果他们认为有必要,他们可以将项目复制到不同的路径中。他们拥有创建副本的权利,这使得许多优秀的软件能够被开发出来。维护者有责任倾听他们的社区成员的声音并以一个对项目的社区成员有利的方式运营项目。 + +我们推荐使用现有的许多可用的许可证而不是独立制作你自己的许可条款,仅仅只是因为用户以及利益相关方通常都很熟悉公共许可证,因此你不需要再花费时间在解释许可条款上。这将帮助你将你的精力集中在项目的其他部分上。 + +### 最后,开源是一项运动 + +开源包括了很多维度,也包含了很多人员。最重要的是,它是有关理解人们想要什么的,也是有关创建一个鼓励协作与透明的环境的。开源也是有关创建有利于开源项目走自己想走的道路的社区的。维护者创造越多的机会让社区自由发挥,开源产品就越好,也越发成功。 + +开源是以上这些方面,而你的视野越宽阔,你就能越好的利用它。请考虑你如何能够在开源的每一个维度上出类拔萃,因为时至今日,开源的成功之路并无捷径。 + + +via: https://www.opensourceforu.com/2022/07/open-source-software-is-there-an-easy-path-to-success/ + +作者:[Jules Graybill][a] +选题:[lkxed][b] +译者:[CanYellow](https://github.com/CanYellow) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://www.opensourceforu.com/author/jules-graybill/ +[b]: https://github.com/lkxed +[1]: https://www.opensourceforu.com/wp-content/uploads/2022/07/team-work-working-together-1.jpg From e249ed4e17f83a91e3fb05c2dc086ea40e1c5b99 Mon Sep 17 00:00:00 2001 From: CanYellow Date: Wed, 5 Apr 2023 23:28:22 +0800 Subject: [PATCH 65/83] request --- .../talk/20210816 What was your first programming language.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/talk/20210816 What was your first programming language.md b/sources/talk/20210816 What was your first programming language.md index 7e13d19ddb..bdaae66126 100644 --- a/sources/talk/20210816 What was your first programming language.md +++ b/sources/talk/20210816 What was your first programming language.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/8/first-programming-language" [#]: author: "Jen Wike Huger https://opensource.com/users/jen-wike" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "CanYellow [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 299e55842146183ed8cc9e6ee7934f04109e2059 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 6 Apr 2023 00:10:25 +0800 Subject: [PATCH 66/83] RP MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @XiaotingHuang22 https://linux.cn/article-15696-1.html 辛苦了! --- ...sential tips and tricks for your first tech job.md | 149 +++++++++++++++++ ...sential tips and tricks for your first tech job.md | 151 ------------------ 2 files changed, 149 insertions(+), 151 deletions(-) create mode 100644 published/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md delete mode 100644 translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md diff --git a/published/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md b/published/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md new file mode 100644 index 0000000000..eaa466df51 --- /dev/null +++ b/published/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md @@ -0,0 +1,149 @@ +[#]: subject: "Essential tips and tricks for your first tech job" +[#]: via: "https://opensource.com/article/23/2/your-first-tech-job" +[#]: author: "Fatima https://opensource.com/users/ftaj" +[#]: collector: "lkxed" +[#]: translator: "XiaotingHuang22" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15696-1.html" + +技术领域小白必不可少的工作技巧和诀窍 +====== + +> 开始一份新工作对任何人来说都让人害怕。下面是如何在你的第一份技术工作的早期阶段找到方向。 + +刚刚入职那几天确实令人害怕。 我现在依然可以清晰举出很多例子,例如在第一天上班前的晚上无法入睡,因为不知道第二天将要发生什么而内心崩溃。对于大多数人来说,开始一份新工作就像踏入未知领域。即使你已是行业的资深人士,不可否认的是,你内心可能还是会对即将发生的事情感到有点害怕。 + +可以理解的是,刚入职的时候你的事情很多。你要认识新的人,有新的项目和技术要了解,有文档要阅读,有教程要看完,还有没完没了的人事培训和要填的文件。这可能让你感觉压力山大,再加上你还面临着相当大程度的不确定性和未知数,以上种种能引起焦虑。 + +促使我写这篇文章有两个原因,首先是在我还是学生的时候,大部分讨论都围绕着如何找一份技术工作,却没有人谈论接下来发生的事情。如何在新角色中脱颖而出?现在回过头来看,我想我当时认为最困难的事情是得到一份工作,之后发生什么的一切我都可以自己弄清楚。 + +同样的,在我开始在这个行业工作之后,我发现大部分我看到的与职业相关的内容都是讨论如何从一个高级职位升到另一个高级职位。没有人真正谈论在此中间我们要做什么。实习生和初级工程师呢?他们在早期职业生涯中如何找到方向? + +在拥有了三年全职软件工程师的经验(以及之前的几次实习)之后,我将这段时间的经历进行了复盘,并整理出一份我自己在适应新技术职位时使用过的技巧和诀窍清单。我想不只局限于前面的几个月,而是优先考虑如何让这段经历帮助你实现长期的成功。 + +### 反思现有的流程和文档 + +大多数新员工一开始要么拥有一大堆文档,要么根本没有。你可以将这视为一个机会,而不是被这两种可能性中的任何一种所淹没。 + +从现有文档中找到缺口,并想想你可以怎样为下一位入职的工程师做出这方面的改进。这不仅能显示你工作的主动性,还表明你致力于改进团队中的现有流程。 + +上述两种极端情况我都遇到过。我在没有任何文档的团队中工作过,也在一些更新文档方面很勤快的团队中工作过。对于前者,你的路径非常简单直接,你可以致力于创建那些缺失的文档。对于后者,你总是可以想办法改进已有的东西。有时,过多的书面文件也会让人感到害怕,尤其是对新员工而言。有些事情可能通过其他媒介进行更好地解释,比如视频教程或截屏。 + +### 勤问问题 + +我会建议你在开始一份新工作时研究一下公司是否会为你分配搭档。这在公司中是相当普遍的做法。工作搭档的主要作用是在你入职时为你提供帮助。我发现这非常有用,因为这个人能够针对你所有的问题给出指导,你就不必为了寻找合适的人或部门而四处奔波。 + +虽然我鼓励提问,但在提问之前也有必要做功课,包括: + +- 做好调查。这包括进行网络搜索、查看论坛和阅读现有文档。使用所有可用的工具。然而,给自己设定时间规划是很重要的。你必须平衡好尽职调查与牢记手头项目截止日期和可交付成果。 +- 说出来。作为母语不是英语的人,我建议你在提问之前大声把想法说出来。根据我的经验,我经常发现自己会用一种语言(通常是我的母语)思考但不得不用另一种语言来解释,而当我在一些困难的问题中挣扎时这一现象尤为突出。有时这颇有挑战性,因为经过翻译后的想法可能没那么容易理解。 +- 组织思绪。当你在为某件事而苦苦挣扎时,可能同时有很多不同的想法在你的脑海中翻来覆去。这些想法可能对你来说都挺有道理的,但对于别人来说却不一定说得通。对此,我建议你坐下来,收集你的想法,写下来,然后大声说出来。这一做法可确保当你在解释自己的思维过程时,你能按照预期进行流畅地表达出来,听众也可以紧跟你的思路。 + +这种方法称为橡皮鸭调试法,是开发人员在调试时的常见做法。背后的概念是,有时向第三方解释你的问题非常有助于你找到解决方案,同时也证明了你出色的沟通技巧。 + +尊重别人的时间。即使你在向你的搭档求助时,也要意识到他们也有自己的日常任务要完成。 我尝试过的一些事情包括: + +- 写下我的问题,然后留出一些时间与我的导师交流,以便与他们交谈。 +- 整理问题而不是反复寻求帮助,这样导师可以在他们有空的时候着手解决。 +- 安排 15-20 分钟的快速视频聊天,特别是如果你想共享屏幕,这一方法可以很好地展示你的发现。 + +我认为这些方法是更好的选择,因为这么做你能得到对方全部的关注,而不是在他们忙着其他事情的时候每隔几分钟打扰他们一下。 + +### 深入研究你的项目 + +即使在拥有出色文档的团队中,开始你的技术项目也可能非常艰巨,因为一个项目涉及多个部分。不过,随着时间的推移,你将了解团队是如何做事的。但是,通过记下一张实用清单,这包括基本项目设置、测试要求、审查和部署流程、任务跟踪和文档,你将迅速搞清楚一切,节省了你的时间和潜在的麻烦。 + +如果你开始的项目没有文档(我就遇到过这种情况),请看看你能不能找到当前或以前的项目所有者并了解基本的项目结构,这包括设置、部署等。 + +- 确定你的团队在 IDE(集成开发环境)中的偏好。你可以自由使用你喜欢的 IDE,但使用和团队相同的 IDE 会比较好,尤其是在调试的时候,因为 IDE 的选择会影响调试。不同的 IDE 提供不同程度的调试支持。 +- 了解如何进行调试。我的意思不仅仅是使用打印语句(不是说这种方法有什么问题)。充分利用团队的经验! +- 了解测试要求。这可能取决于项目的范围和团队的一般惯例,越早弄清楚要求,你在后期推送自己的修改请求时就会越有信心。 +- 可视化部署过程。这个过程可能因团队、公司等而异。无论这个过程是非正式或正式,请确保你了解自己提交的新代码是如何被部署至新环境中、部署流水线是什么样的、如何安全地部署代码更改、在构建失败后可以怎么做,如何回滚错误的更改,以及如何在生产环境中测试你的更改。 +- 了解工单流程。了解如何记录工单以及要求的详细程度。你会由此发现每个公司各不相同。有的公司希望我们每天提交工单以显示我们的进度。有的公司可能不需要如此详细。 + +基于我刚才提到的所有内容,我建议你可以在入职头几周内做一个有益的、一体化的练习——跟随模仿另一位工程师并进行结对编码。这么做让你可以端到端地观察整个流程,从派单给工程师到部署到生产中都清清楚楚。 + +如果刚入职几周时你还没有机会亲身实践,可能你会感到沮丧。为了解决这个问题,你可以让你的经理也给你派一些初级的单子。这些通常是一些小任务,例如代码清理或添加单元测试。不过,它们允许你修补代码库,这有助于提高你的理解并给你带来成就感,这在新工作的初期是非常鼓舞人心的。 + +### 当你遇到困难时尤其要大声说出来 + +我想强调一下当你碰到困难时沟通的重要性。遇到困难总是难免的,尤其是在一份新工作的最初几个月,尽管这可能会令人沮丧,但这正是你的沟通技巧大放异彩的地方。 + +- 让工作中的阻碍和进步透明化。即使是像权限问题一样的小事(新员工常常遇到的障碍之一),也要确保你的经理知道。 +- 如果有些工作耽搁了,不要等到最后一天才向团队报告。你的项目延迟会推动许多其他事情的发展。对于一些必要的项目延迟请提前告知,以便你的经理可以与相关人员分享这一信息。 +- 不要因为匆忙而忘记全面测试代码的更改或为你的代码的写文档等事情。 + +### 获得技术大局观 + +获得技术大局观是我个人一直在努力改进的地方,并且我一直在积极改变自己对此的看法。 + +当年我开始实习时,我会非常专注于自己想学的东西。我会非常专注于我的项目,但对其他一切完全视而不见。多年后,我意识到对其他或相邻的项目视而不见可能不是最明智的。 + +首先,技术大局观会影响你对自身工作的理解。我曾经天真地以为,只要我专注于自己的项目就可以成为一名优秀的工程师。但事情并非如此。你应该花时间了解其他可能与你的项目有所交互的服务。你无需深入了解细节,但建立基本的理解也会大有帮助。 + +新员工的一个普遍经历是与公司其他人脱节,会有这种感觉很正常,尤其是在大公司。我是一个很快就会产生排斥感的人,所以当我刚到 Yelp 时 —— 这是一家比我以前的公司大得多的公司,项目规模也大得多,我优先考虑了解大局。我不仅努力建立对我的项目的理解,还认真了解了其他相邻项目。 + +在 Yelp 的头几周,我与团队中的其他各位工程师坐下来,请他们给我一个关于我将要做什么和项目的总体目标的概况。这种方法非常有用,因为我不仅根据工程师的资历和他们在项目上的工作时间得到了不同程度的解释,而且还加深了我对我将要从事的工作的理解。我参加这些会议的目的,是希望我对项目掌握的认识让我能够向街上的陌生人解释我所做的事。为此,我还请我的技术主管向我解释,当用户打开 Yelp 应用程序并搜索内容时,我的工作成果会在什么时候出现。 + +在这种情况下架构图也很有用,尤其是它能帮助你了解不同服务是如何交互的。 + +### 建立期望 + +在过去很长一段时间里,我以为自己只需要尽力而为,成为一名优秀的员工就行。只要我有在工作,达成目标,而且没有人投诉,那就足够好了,对吧?错! + +你必须对你的职业有战略眼光。你不能只是将它外包给人们的一片好心,并希望自己只要达成了目标就能得到想要的结果。 + +- 在你开始新工作的那一刻就建立明确的标准。这因公司而异,因为有些组织有非常明确的措施,而其他组织可能几乎没有。如果是后者,我建议你在头几周内找你的经理坐下来谈谈,制定并统一一个标准。 +- 确保你彻底了解公司将如何评估你以及采用什么方法进行评估。 + +我记得在我的第一份全职工作中,我对自己的第一次评估谈话一头雾水。整个谈话非常含糊不清,而且我对自己的长处、短处甚至可以如何改进都一无所知。 + +起初,我很容易地将一切都归咎于我的经理,因为作为新员工的我认为这是他们的工作,而不是我的职责。但随着时间的推移,我意识到,就我的绩效评估而言,我不能只是袖手旁观。你不能只做好工作并期望它就足够了。你必须积极参与到这些对话中。你必须确保你的努力和贡献被注意到。为了确保你的工作得到认可,你可以做很多事情,从定期参与技术设计对话到设置团建活动。 + +与建立期望相联系的还有积极寻求反馈的重要性。不要等到每三、四个月进行一次正式的绩效评估时才知道自己的表现如何。积极与你的经理建立反馈循环。虽然这听起来很可怕,但尝试定期进行寻求反馈的谈话。 + +### 在分布式团队中找到方向 + +在过去两年中我们的工作场所在不断变化,如今在远程和分布式团队中工作已成为常态,不再罕见。我列出了一些技巧,帮助你在分布式团队中快速找到工作方向: + +- 建立核心时间并将其设置在你的日历上。核心时间是你的团队一致同意的几个小时,在这段时间里,大家都明白自己应该在线并能随时响应。这样做很方便,因为会议只会安排在这个时间段,让你在计划自己一天的工作时更轻松。 +- 注意人们的时区和午餐时间。 +- 在虚拟世界中,你需要付出更大的努力来维持社交互动,而小小的心意却可以大大有助于让工作环境更加友好。 + +其中包括: + +- 开始会议时,互相寒暄并询问人们周末/一天过得如何。这有助于打破僵局,让你能够与团队成员建立更私人的、超越工作的联系。 +- 建议定期举行非正式的虚拟聚会,与团队进行一些随意的闲聊。 + +### 维持工作生活间的平衡 + +在你职业生涯刚开始的时候,你很容易认为只要投入很多时间就能成功,特别是考虑到我们全天候待命的“忙碌文化”,以及认为建立生活工作的平衡是在职业生涯下阶段才需要考虑的想法。但这些想法与事实相去甚远,因为工作与生活的平衡不会神奇地发生在你身上。你需要积极和非常勤奋地去找到个人的平衡点。 + +没有工作与生活平衡的可怕之处在于它是慢慢蔓延到你身上的。刚开始是你下班后还在查看电子邮件,然后慢慢地,你开始周末也在工作,一直感到疲惫不堪。 + +我列出了一些提示,可以帮助你避免这种情况: + +- 关闭/暂停通知和电子邮件并将自己设置为离线。 +- 不要在周末工作。刚开始是你需要在这一个周末工作,但不知不觉间,你会发现自己大部分周末都在工作。不管是什么工作,它可以等到星期一。 +- 如果你是待命的工程师,请了解公司的相关政策。一些公司提供金钱补偿,而另一些公司可能会以休假代替。利用这个时间。不使用 PTO(带薪休假)和健康日等福利确实会缩短你的工作寿命。 + +### 总结 + +毫无疑问,开始一份新工作压力很大而且很困难。我希望这些方法和技巧会让你的头几个月变得更轻松,并为你在新职位上取得巨大成功做好准备。记住,勤沟通,确立职业目标,积极主动,有效地使用公司的工具。做到这些,我相信你会做得很好! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/2/your-first-tech-job + +作者:[Fatima][a] +选题:[lkxed][b] +译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/ftaj +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/article/21/5/open-source-burnout +[0]: https://img.linux.net.cn/data/attachment/album/202304/06/000732j1ipb1whhhlwgpen.jpg \ No newline at end of file diff --git a/translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md b/translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md deleted file mode 100644 index 558384ded5..0000000000 --- a/translated/talk/20230227.1 ⭐️⭐️ Essential tips and tricks for your first tech job.md +++ /dev/null @@ -1,151 +0,0 @@ -[#]: subject: "Essential tips and tricks for your first tech job" -[#]: via: "https://opensource.com/article/23/2/your-first-tech-job" -[#]: author: "Fatima https://opensource.com/users/ftaj" -[#]: collector: "lkxed" -[#]: translator: "XiaotingHuang22" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Essential tips and tricks for your first tech job 技术领域小白必不可少的工作技巧和诀窍 -====== - -刚刚入职那几天确实令人害怕。 我现在依然可以清晰举出很多例子,例如在第一天上班前的晚上无法入睡,因为不知道第二天将要发生什么而内心崩溃。 对于大多数人来说,开始一份新工作就像踏入未知领域。 即使你已是行业的资深人士,不可否认的是,你内心可能还是会对即将发生的事情感到有点害怕。 - -可以理解的是,刚入职的时候你的事情很多。 你要认识新的人,有新的项目和技术要了解,有文档要阅读,有教程要看完,还有没完没了的人事谈话和文件要填。 这可能让你感觉压力山大,再加上你还面临着相当大程度的不确定性和未知数,以上种种能引起焦虑。 - -促使我写这篇文章有两个原因, 首先是在我还是学生的时候,大部分讨论都围绕着如何找一份技术工作,却没有人谈论接下来发生的事情。 如何在新角色中脱颖而出? 现在回过头来看,我想我当时认为最困难的事情是得到一份工作,之后发生什么的一切我都可以自己弄清楚。 - -同样的,在我开始在这个行业工作之后,我发现大部分我看到的与职业相关的内容都是讨论如何从一个高级别升到另一个高级级别职称。 没有人真正谈论在此中间我们要做什么。 实习生和初级工程师呢? 他们在早期职业生涯中如何找到方向? - -在拥有了三年全职软件工程师的经验(以及之前的几次实习)之后,我将这段时间的经历进行了复盘并整理出一份我自己在适应新技术职位时使用过的技巧和诀窍表格。我想不只局限于前面的几个月,而是优先考虑如何让这段经历帮助你实现长期的成功。 - - -### 从现有的流程和文档着手学习 - -大多数新员工一开始要么拥有一大堆文档,要么根本没有。 你可以将这视为一个机会,而不是被这两种可能性中的任何一种所淹没。 - -从现有文档中找到缺口,并想想你可以怎样为下一位入职的工程师做出这方面的改进。 这不仅能显示你工作的主动性,还表明你致力于改进团队中的现有流程。 - -上述两种极端情况我都遇到过。我在没有任何文件的团队中工作过,也在一些更新文档方面很勤快的团队中工作过。 对于前者,你的路径非常简单直接,你可以致力于创建那些缺失的文档。 对于后者,您总是可以想办法改进已经存在的东西。 有时,过多的书面文件也会让人感到害怕,尤其是对新员工而言。 有些事情可能通过其他媒介进行更好地解释,比如视频教程或截屏视频。 - -### 勤问问题 - -我会建议你在开始一份新工作时研究一下公司是否会为你分配搭档。 这在公司中是相当普遍的做法。 工作搭档的主要作用是在你入职时为你提供帮助。 我发现这非常有用,因为这个人能够针对你所有的问题给出指导,你就不必为了寻找合适的人或部门而四处奔波。 - -虽然我鼓励提问,但在提问之前也有必要做功课,包括: - -- 做好调查。 这包括进行网络搜索、查看论坛和阅读现有文档。 使用所有可用的工具。 然而,给自己设定时间规划是很重要的。 你必须平衡好尽职调查与牢记手头项目截止日期和可交付成果。 -- 说出来。 作为母语不是英语的人,我建议你在提问之前大声把想法说出来。 根据我的经验,我经常发现自己会用一种语言(通常是我的母语)思考但不得不用另一种语言来解释,而当我在一些困难的问题中挣扎时这一现象尤为突出。有时这颇有挑战性,因为经过翻译后的想法可能没那么容易理解。 -- 组织思绪。 当你在为某件事而苦苦挣扎时,可能同时有很多不同的想法在你的脑海中翻来覆去。这些想法可能对你来说都挺有道理的,但对于别人来说却不一定说得通。对此,我建议你坐下来,收集你的想法,写下来,然后大声说出来。 这一做法可确保当你在解释自己的思维过程时,你能按照预期进行流畅地表达出来,听众也可以紧跟你的思路。 - - -这种方法称为橡皮鸭调试法,是开发人员在调试时的常见做法。 背后的概念是,有时向第三方解释你的问题非常有助于你找到解决方案,同时也证明了你出色的沟通技巧。 - -尊重别人的时间。 即使你在向你的搭档求助时,也要意识到他们也有自己的日常任务要完成。 我尝试过的一些事情包括: - - -- 写下我的问题,然后留出一些时间与我的导师交流,以便与他们交谈。 -- 整理问题而不是反复寻求帮助,这样导师可以在他们有空的时候着手解决。 -- 安排 15-20 分钟的快速视频聊天,特别是如果你想共享屏幕,这一方法可以很好地展示你的发现。 - -我认为这些方法是更好的选择,因为这么做你能得到对方全部的关注,而不是在他们忙着其他事情的时候每隔几分钟打扰他们一下。 - -### 深入研究你的项目 - -即使在拥有出色文档的团队中,开始你的技术项目也可能非常艰巨,因为一个项目涉及多个部分。 不过,随着时间的推移,你将了解团队是如何做事的。 但是,通过记下一张包括基本项目设置、测试要求、审查和部署流程、任务跟踪和文档的实用清单,你将迅速搞清楚一切,节省了你的时间和潜在的麻烦。 - -如果你开始的项目没有文档(我就遇到过这种情况),请看看你能不能找到当前或以前的项目所有者并了解基本的项目结构,这包括设置、部署等。 - -- 确定你的团队在 IDE(集成开发环境)中的偏好。 你可以自由使用你喜欢的 IDE,但使用和团队相同的 IDE 会比较好,尤其是在调试的时候,因为 IDE 的选择会影响调试。 不同的 IDE 提供不同程度的调试支持。 -- 了解如何进行调试,我的意思不仅仅是使用打印语句(不是说这种方法有什么问题)。 充分利用团队的经验! -- 了解测试要求。 这可能取决于项目的范围和团队的一般惯例,越早弄清楚要求,你在后期推送自己的修改请求时就会越有信心。 -- 可视化部署过程。 这个过程可能因团队、公司等而异。无论这个过程是非正式或正式,请确保你了解自己提交的新代码是如何被部署至新环境中、部署流水线是什么样的、如何安全地部署代码更改、在构建失败后可以怎么做,如何回滚错误的更改,以及如何在生产环境中测试你的更改。 -- 了解报修流程。 了解如何记录报修以及要求的详细程度。 你会由此发现每个公司各不相同。 有的公司希望我们每天提交报修单以显示我们的进度。 有的公司可能不需要如此详细的文档。 - -基于我刚才提到的所有内容,我建议你可以在入职头几周内做一个有益的、一体化的练习——跟随模仿另一位工程师并进行同行编码。 这么做让你可以端到端地观察整个流程,从派单给工程师到部署到生产中都清清楚楚。 - -如果刚入职几周时你还没有机会亲身实践,可能你会感到沮丧。 为了解决这个问题,你可以让你的经理也给你派一些单子。 这些通常是一些小任务,例如代码清理或添加单元测试。 不过,它们允许你修补代码库,这有助于提高你的理解并给你带来成就感,这在新工作的初期是非常鼓舞人心的。 - -### 当你遇到困难时尤其要大声说出来 - -我想强调一下当你碰到困难时沟通的重要性。 遇到困难总是难免的,尤其是在一份新工作的最初几个月,尽管这可能会令人沮丧,但这正是你的沟通技巧大放异彩的地方。 - -- 让工作中的阻碍和进步透明化。 即使是像权限问题一样微不足道(新员工常常遇到的障碍之一),也要确保你的经理知道。 -- 如果有些工作耽搁了,不要等到最后一天才向团队报告。 你的项目延迟会推动许多其他事情的发展。 对于一些必要的项目延迟请提前告知,以便你的经理可以与相关人员分享这一信息。 -- 不要因为匆忙而忘记全面测试代码的更改或记录你的代码等事情。 - -### 获得技术大局观 - -获得技术大局观是我个人一直在努力改进的地方,并且我一直在积极改变自己对此的看法。 - -当年我开始实习时,我会非常专注于自己想学的东西。 我会非常专注于我的项目,但对其他一切完全视而不见。 多年后,我意识到对其他或相邻的项目视而不见可能不是最明智的。 - -首先,技术大局观会影响你对自身工作的理解。 我曾经天真地以为,只要我专注于自己的项目就可以成为一名优秀的工程师。但事情并非如此。你应该花时间了解其他可能与你的项目有所交互的服务。 你无需深入了解细节,但建立基本的理解也会大有帮助。 - -新员工的一个普遍经历是与公司其他人脱节,会有这种感觉很正常,尤其是在大公司。 我是一个很快就会产生排斥感的人,所以当我刚到 Yelp 时 —— 这是一家比我以前的公司大得多的公司,项目规模也大得多,我优先考虑了解大局。 我不仅努力建立对我的项目的理解,还认真了解了其他相邻项目。 - -在 Yelp 的头几周,我与团队中的不同工程师坐下来,请他们给我一个关于我将要做什么和项目的总体目标的概况。 这种方法非常有用,因为我不仅根据工程师的资历和他们在项目上的工作时间得到了不同程度的解释,而且还加深了我对我将要从事的工作的理解。 我参加这些会议的目的,是希望我对项目掌握的认识让我能够向街上的陌生人解释我所做的事。为此,我还请我的技术主管向我解释,当用户打开 Yelp 应用程序并搜索内容时,我的工作成果会在什么时候出现。 - -在这种情况下架构图也很有用,尤其是它能帮助你了解不同服务是如何交互的。 - -### 建立期望 - -在过去很长一段时间里,我以为自己只需要尽力而为,成为一名优秀的员工。 只要我有在工作,达成目标,而且没有人投诉,那就足够好了,对吧? 错! - -你必须对你的职业有战略眼光。 你不能只是将它外包给人们的一片好心,并希望自己只要达成了目标就能得到想要的结果。 - -- 在你开始新工作的那一刻就建立明确的标准。 这因公司而异,因为有些组织有非常明确的措施,而其他组织可能几乎没有。 如果是后者,我建议你在头几周内找你的经理坐下来谈谈,制定并统一一个标准。 -- 确保你彻底了解公司将如何评估你以及采用什么方法进行评估。 - -我记得在我的第一份全职工作中,我对自己的第一次评估会议一头雾水。 整个谈话非常含糊不清,而且我对自己的长处、短处甚至可以如何改进都一无所知。 - -起初,我很容易地将一切都归咎于我的经理,因为作为新员工的我认为这是他们的工作,而不是我的职责。 但随着时间的推移,我意识到,就我的绩效评估而言,我不能只是退居二线。 你不能只做好工作并期望它就足够了。 你必须积极参与到这些对话中。 你必须确保你的努力和贡献被注意到。 为了确保你的工作得到认可,你可以做很多事情,从定期参与技术设计对话到设置团建活动。 - -建立期望也是积极寻求反馈,这一点也十分重要。不要等到每三四个月进行一次正式的绩效评估时才知道自己的表现如何。 积极与你的经理建立反馈循环。 虽然这听起来很可怕,但尝试定期进行寻求反馈的谈话。 - -### 在分布式团队中找到方向 - -在过去两年中我们的工作场所在不断变化,如今在远程和分布式团队中工作已成为常态,不再罕见。 我列出了一些技巧,帮助你在分布式团队中快速找到工作方向: - -- 开始会议时,互相寒暄并询问人们周末/一天过得如何。 这有助于打破僵局,让你能够与团队成员建立更私人的、超越工作的联系。 -- 建议定期举行非正式的虚拟聚会,与团队进行一些随意的闲聊。 - - -- 建立核心时间并将其设置在你的日历上。 核心时间是你的团队一致同意的几个小时,在这段时间里,大家都明白自己应该在线并能随时响应。 这样做很方便,因为会议只会安排在这个时间段,让你在计划自己一天的工作时更轻松。 -- 注意人们的时区和午餐时间。 -- 在虚拟世界中,您需要付出更大的努力来维持社交互动,而小小的心意却可以大大有助于让工作环境更加友好。 其中包括: - -### 维持工作生活间的平衡 - -在你职业生涯刚开始的时候,你很容易认为只要投入很多时间就能成功,特别是考虑到我们全天候待命的“忙碌文化”以及认为建立生活工作的平衡是在职业生涯下阶段才需要考虑的想法。但这些想法与事实相去甚远,因为工作与生活的平衡不会神奇地发生在你身上。 你需要积极和非常勤奋地去找到个人的平衡点。 - -没有工作与生活平衡的可怕之处在于它是慢慢蔓延到你身上的。 刚开始是你下班后还在查看电子邮件,然后慢慢地,你开始周末也在工作,一直感到疲惫不堪。 - -**[ 相关阅读 [我是如何识别并防止自己在开源项目中感到倦怠的][1] ]** - - -我列出了一些提示,可以帮助你避免这种情况: - -- 关闭/暂停通知和电子邮件并将自己设置为离线。 -- 不要在周末工作。 刚开始是你需要在这一个周末工作,但不知不觉间,你会发现自己大部分周末都在工作。 不管是什么工作,它可以等到星期一。 -- 如果你是随叫随到的工程师,请了解公司的相关政策。 一些公司提供金钱补偿,而另一些公司可能会以休假代替。 利用这个时间。 不使用 PTO(带薪休假)和健康日等福利确实会缩短你的工作寿命。 - -### 总结 - -毫无疑问,开始一份新工作压力很大而且很困难。 我希望这些方法和技巧会让你的头几个月变得更轻松,并为你在新职位上取得巨大成功做好准备。 记住,勤沟通,确立职业目标,积极主动,有效地使用公司的工具。 做到这些,我相信你会做得很好! - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/2/your-first-tech-job - -作者:[Fatima][a] -选题:[lkxed][b] -译者:[XiaotingHuang22](https://github.com/XiaotingHuang22) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/ftaj -[b]: https://github.com/lkxed/ -[1]: https://opensource.com/article/21/5/open-source-burnout From 3bae3161d7ca94da81e3d5a5d9c6519596c40efe Mon Sep 17 00:00:00 2001 From: geekpi Date: Thu, 6 Apr 2023 09:01:53 +0800 Subject: [PATCH 67/83] translated --- ... ⭐️ Write a cute program with Emojicode.md | 192 ----------------- ... ⭐️ Write a cute program with Emojicode.md | 193 ++++++++++++++++++ 2 files changed, 193 insertions(+), 192 deletions(-) delete mode 100644 sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md create mode 100644 translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md diff --git a/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md b/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md deleted file mode 100644 index e5c9b8b7f6..0000000000 --- a/sources/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md +++ /dev/null @@ -1,192 +0,0 @@ -[#]: subject: "Write a cute program with Emojicode" -[#]: via: "https://opensource.com/article/23/4/emojicode" -[#]: author: "Jessica Cherry https://opensource.com/users/cherrybomb" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Write a cute program with Emojicode -====== - -In this article, I'll cover the greatest coding language to learn how to make anything! It's called Emojicode. Created in 2014 by Theo Belaire, Emojicode is an open source programming language that uses emoji characters to represent its syntax. When working in Emojicode, emoji are used to create variables, functions, and control structures. Because it's a statically typed language, variable types must be declared before use, but it also supports object-oriented concepts like classes and inheritance. This language can be run on every OS, and it's a super fun way to code, especially if you're a non-native English speaker. This is helpful because pictographic representations can bring us all together and allow us to speak the same language in a way similar to math. - -### Prerequisites - -In this tutorial, I'm using a Debian-based OS. My tools may be different than what your OS may require. Here's what I'm using: - -- [Geany][1], an open source IDE for Linux. -- IBus, which allows you to pick emoji and place them in your editor. The interface I'm using is called **emoji picker**. -- Debian-based Linux. -- A C++ compiler. I'm using the `g++` compiler. -- [Emojicode][2] - -I'm using a Linux OS, but you can [read the docs][3] to learn about any special steps you might need to take to use it on another OS. - -### Intall Emojicode on Linux - -There are a couple ways to install Emojicode on your computer, but they have a cool [magic install page][4] that can tell you exactly what to do. Here's what I did: - -``` -$ wget https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz -O emojicode.tar.gz \ -&& tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \ -&& cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \ -&& cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64 -``` - -This is the output of that command. - -![The emojicode installation procedure provides useful feedback along the way.][5] - -Now that you have everything installed, it's time to move on to some code! - -### How does this whole thing work? - -To start, all Emojicode file extensions end in filename.🍇 but because you can't do that in your average file name, it translates to `filename.emojic`. Here are the most important syntax elements: - -- Put 🏁 at the beginning of a line to indicate what blocks of code are meant to be executed -- Start a block of code with 🍇 -- End a block of code using 🍉 -- Want to print something? Just use 😀 🔤 `` 🔤 ❗ - -There's way more to it, so here are some practical examples. - -### Print a haiku - -First up, try printing a nice haiku for fun! I'll add a single comment in this example. See if you can identify it. - -``` -🏁🍇 -💭 This is a single line comment for fun -😀 🔤Emojicode is great,🔤 ❗ -😀 🔤Fun and expressive code,🔤 ❗ -😀 🔤no sadness, just joy.🔤 ❗ -🍉 -``` - -Now we need to save our code and run it through our compiler to make a nice executable file: - -``` -$ emojicodec haiku.emojic -$ ls -haiku haiku.emojic haiku.o -``` - -As you can see, the code has been compiled and generated two files, one of which is executable. Run the `haiku` file: - -``` -$ ./haiku -Emojicode is great, -Fun and expressive code, -no sadness, just joy. -``` - -### Math and variable manipulation - -Next up, you're going to do a couple of things at once: a little bit of math and the changing of the variable. Start by assigning a variable to 0: - -``` -0 ➡️ 🖍🆕x -``` - -You just created a new variable by using the crayon emoji, and the new emoji next to the variable name, while also assigning that variable to 0. - -Next, print a line that includes the variable using the magnets emoji: - -``` -😀 🔤The value is 🧲x🧲 🔤 ❗ -``` - -Next, change the variable using the plus sign and arrow emojis: - -``` -x ⬅️➕ 1 -``` - -Then print another line with the value. I continue this for a while and print the final value. Here's what I did: - -``` -🏁 🍇 - -💭Updating a variable using math -0 ➡️ 🖍🆕x -😀 🔤The value is 🧲x🧲 🔤 ❗ - -x ⬅️➕ 1 -😀 🔤The value is 🧲x🧲 🔤 ❗ - -x ⬅️➕ 15 -😀 🔤The value is 🧲x🧲 🔤 ❗ - -x ⬅️➖ 9 -😀 🔤The value is 🧲x🧲 🔤 ❗ - -x ⬅️➗ 2 -😀 🔤The final value is 🧲x🧲 🔤 ❗ -🍉 -``` - -Next, compile the code using `emojicodec`, and then use your executable code to see the outcome: - -``` -$ emojicodec math.emojic -$ ./math -The value is 0 -The value is 1 -The value is 16 -The value is 7 -The final value is 3 -``` - -As you can see, everything printed out as the variable was updated with the new math. You can take this even further with the many mathematic emojis available. Here are just a few more operators: - -``` -🚮 is your modulo -◀ Less than -▶ Greater than -◀🙌 less than or equal to -▶🙌 greater than or equal to -``` - -### Emojicode quirks - -While I was bouncing around the docs, I found some interesting quirks. One of those is that while grabbing input from a user, the skin tone of the ear matters due to some known compiler issue. - -The action for getting user input is this: - -``` -🆕🔡▶️👂🏼❗️ -``` - -The action for getting and assigning user input is this: - -``` -🆕🔡▶️👂🏼❗️ ➡️ inputText -``` - -I was attempting to get that to work but was having some issues with my compiler when I found that. You may also run into some small things here and there. If you do, be sure to create an [issue][6], so it has a chance of being fixed. - -### No tricks, just great code - -While I could go through so much more, I can assure you the docs behind this amazing code are very extensive. Even though I was inspired to write this article just for fun in time April Fool's Day, I have to admit this is one of the best languages ever made because it teaches you a lot about very real programming concepts. I earnestly suggest this as a fun way to teach some of your friends, kids, or maybe a classmate, who is interested in coding. Hopefully, you have a fun-filled April Fool's Day! - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/4/emojicode - -作者:[Jessica Cherry][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/cherrybomb -[b]: https://github.com/lkxed/ -[1]: https://github.com/geany/geany -[2]: https://github.com/emojicode/emojicode -[3]: https://www.emojicode.org/docs/ -[4]: https://www.emojicode.org/docs/guides/ -[5]: https://opensource.com/sites/default/files/2023-03/emoji.webp -[6]: https://github.com/emojicode/emojicode/issues diff --git a/translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md b/translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md new file mode 100644 index 0000000000..2401ca883a --- /dev/null +++ b/translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md @@ -0,0 +1,193 @@ +[#]: subject: "Write a cute program with Emojicode" +[#]: via: "https://opensource.com/article/23/4/emojicode" +[#]: author: "Jessica Cherry https://opensource.com/users/cherrybomb" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +用 Emojicode 写一个可爱的程序 +====== + +在这篇文章中,我将介绍一个最好的编码语言,学习如何制作任何东西!它叫做 Emojicode。Emojicode 由 Theo Belaire 在 2014 年创建,是一种开源的编程语言,使用 emoji 字符来表示其语法。在 Emojicode 中工作时,emoji 被用来创建变量、函数和控制结构。因为它是一种静态类型的语言,变量类型必须在使用前声明,但它也支持类和继承等面向对象的概念。这种语言可以在每个操作系统上运行,它是一种超级有趣的编码方式,特别是当你是一个非英语母语的人时。这很有帮助,因为象形图表示法可以把我们大家聚集在一起,让我们以类似数学的方式说同样的语言。 + +### 先决条件 + +在本教程中,我使用的是基于 Debian 的操作系统。我的工具可能与你的操作系统的要求不同。以下是我所使用的工具: + +- [Geany][1],一个 Linux 下的开源 IDE。 +- IBus,它允许你挑选 emoji 并把它们放在你的编辑器中。我使用的界面被称为 **emoji picker**。 +- 基于 Debian 的 Linux。 +- 一个 C++ 编译器。我使用的是 `g++` 编译器。 +- [Emojicode][2] + +我使用的是 Linux 操作系统,但你可以[阅读文档][3]了解在其他操作系统上使用它时可能需要采取的任何特殊步骤。 + +### 在 Linux 上安装 Emojicode + +有几种方法可以在你的电脑上安装 Emojicode,但他们有一个很酷的[神奇的安装页面][4],可以告诉你具体该怎么做。下面是我的做法: + +``` +$ wget https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz -O emojicode.tar.gz \ +&& tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \ +&& cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \ +&& cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64 +``` + +emojicode的安装过程提供了有用的反馈。 + +![The emojicode installation procedure provides useful feedback along the way.][5] + +现在,你已经安装好了,是时候开始编写代码了! + +### 整体是如何进行的? + +首先,所有 Emojicode 文件的扩展名都以文件名.🍇结尾,但因为你不能在一般的文件名中这样做,所以它被翻译成 `filename.emojic`。这里是最重要的语法元素: + +- 把 🏁 放在一行的开头,表示要执行哪些代码块 +- 用 🍇 开始一个代码块 +- 用 🍉 来结束一个代码块 +- 想打印什么吗?就用 😀 🔤 `` 🔤 ❗ + +还有很多其他的,所以这里有一些实际的例子。 + +### 打印一首俳句 + +首先,试着打印一首漂亮的俳句来玩玩吧! 在这个例子中,我将添加一行注释。看看你是否能识别它。 + +``` +🏁🍇 +💭 This is a single line comment for fun +😀 🔤Emojicode is great,🔤 ❗ +😀 🔤Fun and expressive code,🔤 ❗ +😀 🔤no sadness, just joy.🔤 ❗ +🍉 +``` + +现在我们需要保存我们的代码,并通过我们的编译器运行它,使之成为一个漂亮的可执行文件: + +``` +$ emojicodec haiku.emojic +$ ls +haiku haiku.emojic haiku.o +``` + +正如你所看到的,代码已经被编译并生成了两个文件,其中一个是可执行的。运行 `haiku` 文件: + + +``` +$ ./haiku +Emojicode is great, +Fun and expressive code, +no sadness, just joy. +``` + +### 数学和变量操作 + +接下来,你要同时做几件事:一点点数学和变量的改变。首先,将一个变量赋值为0: + +``` +0 ➡️ 🖍🆕x +``` + +你刚刚使用 crayon emoji 和变量名称旁边的新 emoij 创建了一个新变量,同时还将该变量赋值为 0。 + +接下来,用磁铁的 emoji 打印一行包括该变量的内容: + +``` +😀 🔤The value is 🧲x🧲 🔤 ❗ +``` + +接下来,使用加号和箭头 emoji 改变变量: + +``` +x ⬅️➕ 1 +``` + +然后打印另一行的值。我继续这样做了一会儿,然后打印出最终的数值。下面是我的做法: + +``` +🏁 🍇 + +💭Updating a variable using math +0 ➡️ 🖍🆕x +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➕ 1 +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➕ 15 +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➖ 9 +😀 🔤The value is 🧲x🧲 🔤 ❗ + +x ⬅️➗ 2 +😀 🔤The final value is 🧲x🧲 🔤 ❗ +🍉 +``` + +接下来,用 `emojicodec` 编译代码,然后用你的可执行代码来看看结果: + +``` +$ emojicodec math.emojic +$ ./math +The value is 0 +The value is 1 +The value is 16 +The value is 7 +The final value is 3 +``` + +如你所见,作为变量打印出来的所有内容都已使用新数学进行了更新。你可以用许多数学 emoji 来进一步操作。下面是一些更多的运算符: + +``` +🚮 is your modulo +◀ Less than +▶ Greater than +◀🙌 less than or equal to +▶🙌 greater than or equal to +``` + +### Emojicode 的怪癖 + +当我在文档中来回查看时,我发现了一些有趣的怪癖。其中之一是,当从用户那里抓取输入时,由于一些已知的编译器问题,耳朵的肤色很重要。 + +获取用户输入的动作是这样的: + +``` +🆕🔡▶️👂🏼❗️ +``` + +获取和分配用户输入的操作是这样的: + +``` +🆕🔡▶️👂🏼❗️ ➡️ inputText +``` + +我试图让它工作,但当我发现它时我的编译器出现了一些问题。 你也可能会在这里和那里遇到一些小问题。 如果你遇到了,请创建一个[问题][6],这样它就有可能被修复。 + +### 没有技巧,只有很棒的代码 + +虽然我可以了解更多,但我可以向你保证,这段令人惊叹的代码背后的文档非常广泛。尽管我写这篇文章只是为了赶上愚人节的乐趣,但我不得不承认这是有史以来最好的语言之一,因为它教会了你很多非常真实的编程概念。我恳切地建议把它作为一种有趣的方式来教你的一些朋友、孩子,或者是对编码感兴趣的同学。 希望你度过了一个充满乐趣的愚人节! + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/4/emojicode + +作者:[Jessica Cherry][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/cherrybomb +[b]: https://github.com/lkxed/ +[1]: https://github.com/geany/geany +[2]: https://github.com/emojicode/emojicode +[3]: https://www.emojicode.org/docs/ +[4]: https://www.emojicode.org/docs/guides/ +[5]: https://opensource.com/sites/default/files/2023-03/emoji.webp +[6]: https://github.com/emojicode/emojicode/issues From 7a7ca31830bddb65ef1da7ad00e0e4e663aef723 Mon Sep 17 00:00:00 2001 From: geekpi Date: Thu, 6 Apr 2023 09:06:10 +0800 Subject: [PATCH 68/83] translating --- sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md b/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md index 60957b8f29..ba8acd662e 100644 --- a/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md +++ b/sources/tech/20230331.2 ⭐️⭐️ Measure pi with a Raspberry Pi.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/23/3/measure-pi-raspberry-pi" [#]: author: "Jim Hall https://opensource.com/users/jim-hall" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From a725208bafb7c0da9441fdf6c6d3b70e09492625 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=91?= Date: Thu, 6 Apr 2023 10:26:48 +0800 Subject: [PATCH 69/83] Translating --- sources/tech/20210625 How to program in C on FreeDOS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210625 How to program in C on FreeDOS.md b/sources/tech/20210625 How to program in C on FreeDOS.md index 0a3f6ddeb1..c2214a7020 100644 --- a/sources/tech/20210625 How to program in C on FreeDOS.md +++ b/sources/tech/20210625 How to program in C on FreeDOS.md @@ -2,7 +2,7 @@ [#]: via: (https://opensource.com/article/21/6/program-c-freedos) [#]: author: (Jim Hall https://opensource.com/users/jim-hall) [#]: collector: (lujun9972) -[#]: translator: ( ) +[#]: translator: (robsean) [#]: reviewer: ( ) [#]: publisher: ( ) [#]: url: ( ) From 42db58f34101fc3ac9f4a2ffe76a9e899d76cf71 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 6 Apr 2023 11:07:26 +0800 Subject: [PATCH 70/83] ATRP @wxy https://linux.cn/article-15697-1.html --- ...OS Series 5 How to set up home-manager on NixOS.md | 276 +++++++++++++++++ ...OS Series 5 How to set up home-manager on NixOS.md | 285 ------------------ 2 files changed, 276 insertions(+), 285 deletions(-) create mode 100644 published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md delete mode 100644 sources/tech/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md diff --git a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md new file mode 100644 index 0000000000..e345786a0a --- /dev/null +++ b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md @@ -0,0 +1,276 @@ +[#]: subject: "NixOS Series #5: How to set up home-manager on NixOS?" +[#]: via: "https://itsfoss.com/home-manager-nixos/" +[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/" +[#]: collector: "lkxed" +[#]: translator: "wxy" +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15697-1.html" + +NixOS 系列 #5:如何在 NixOS 上设置家庭管理员? +====== + +在发表这篇文章之前,我解释了如何为一个单用户系统 [在 NixOS 中安装和删除软件包][1]。 + +但是,如果你正在供多个用户使用,有一个很好的方法来分别满足每个用户的需求。 + +在本指南中,我将指导你如何在 NixOS 上设置一个家庭管理员,以及如何使用它来安装软件包。 + +如果你是新读者,本系列中讨论的一些资源包括: + +- [使用 NixOS 的原因][2] +- [在虚拟机上安装 NixOS][3] +- [安装 NixOS 后要做的事情][4] + +### 在 NixOS 上设置家庭管理员 + +在本指南中,我将指导你通过 2 种方式来设置家庭管理员: + +- 独立的家庭管理员(使用单独的配置文件) +- 作为一个 NixOS 模块(在 `configuration.nix` 文件中使用它) + +那么,让我们从独立方式开始。 + +#### 独立安装的家庭管理员 + +如果你使用的是 NixOS 的稳定频道,你可以使用以下命令来配置家庭管理器: + +``` +nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager +``` + +在编写本指南时,稳定版是 `22.11`。 + +而 **如果你在一个不稳定的频道上**,请使用以下命令: + +``` +nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager +``` + +无论你使用稳定版还是不稳定版,下面的步骤都是一样的。 + +一旦完成,更新频道: + +``` +nix-channel --update +``` + +最后,使用下面的命令来安装家庭管理员: + +``` +nix-shell '' -A install +``` + +🛠️ 在安装时,可能会出现以下错误: + +![安装家庭管理员时出现构建错误][5] + +重新启动你的系统并再次使用安装命令,它将开始安装。 + +一旦完成,它将显示独立安装的家庭管理员的位置: + +![家庭管理器在NixOS中的位置][6] + +#### 将家庭管理员安装为 NixOS 模块 + +> ⚠️ 如果你选择将家庭管理员作为 NixOS 模块使用,你将需要 sudo 权限。 + +如果你在一个稳定的频道上(在写本文的时候,是 `22.11`),你可以使用下面的命令来添加家庭管理员的稳定频道: + +``` +sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager +``` + +而 **如果你使用的是不稳定通道或主通道**,则使用以下命令: + +``` +sudo nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager +``` + +一旦你使用上面的任何一条命令完成了添加频道的工作,就用下面的方法更新频道: + +``` +sudo nix-channel --update +``` + +接下来,用以下方法打开 `configuration.nix` 文件: + +``` +sudo nano /etc/nixos/configuration.nix +``` + +并在 `imports []` 中添加以下一行: + +``` + +``` + +![将家庭管理员安装为 NixOS 模块][7] + +现在,跳到该行的末尾,在 `}` 前添加以下内容: + +``` +home-manager.users.{username} = { pkgs, ... }: { + home.packages = [ ] ; + }; +``` + +![NixOS 配置文件中的家庭管理员模块的格式][8] + +上面这一行是为了方便安装和删除软件包而添加的,我接下来会告诉你。 + +现在,[保存修改并退出 Nano][9] 文本编辑器。 + +接下来,重建配置,并做一个切换: + +``` +sudo nixos-rebuild switch +``` + +但如果你使用的是稳定版,并使用上述命令,就会出现以下错误: + +> 🛠️ 错误: 选项 `home-manager.users.user.home.stateVersion` 被使用但没有定义: + +![错误: 选项 `home-manager.users.user.home.stateVersion` 已被使用但未被定义。][10] + +要解决这个问题,你必须在你的家庭管理器块中添加 `home.stateVersion`。 + +在写这篇文章时,我正在运行 22.11,所以整个家庭管理员块看起来像这样: + +``` +home-manager.users.{username} = { pkgs, ... }: { + home.stateVersion = "22.11"; + home.packages = [ ] ; + }; +``` + +![如何解决 `home-manager.users.user.home.stateVersion` 选项被使用但没有定义。][11] + +保存修改,按 `Ctrl+O`,按回车键和 `Ctrl+X` 退出 Nano 文本编辑器。 + +现在,试着重建配置并再次进行切换,应该可以解决问题。 + +### 如何在 NixOS 上使用家庭管理员安装软件包 + +现在你已经安装了家庭管理员,如何用它来安装软件包: + +#### 使用独立安装的家庭管理员 + +首先,用下面的方法打开配置文件: + +``` +nano /home/$USER/.config/nixpkgs/home.nix +``` + +跳到行末,在 `}` 前添加以下代码块: + +``` +home.packages = []; +``` + +现在,你所要做的就是在这两个大括号之间写上软件包的名称。 + +例如,如果我想安装 `htop`,我将得输入以下内容: + +``` +home.packages = [pkgs.htop]; +``` + +是的,你通常要在软件包的名称后面加上 `pkgs.`。 + +但是,如果你想在每次安装新包时不使用 `pkgs.`,可以改变代码块的语法,如图所示: + +``` +home.packages = with pkgs; []; +``` + +而现在,你不再需要在每次安装时使用 `pkgs.`: + +``` +home.packages = with pkgs; [htop]; +``` + +例如,在这里,我想安装 `htop`、`firefox`和 `libreoffice`,所以我的 `home` 块会看起来像这样: + +![在 NixOS 上使用家庭管理员安装多个软件包][12] + +一旦你完成了添加你喜欢的软件包,保存配置文件并使用以下命令来安装软件包: + +``` +home-manager switch +``` + +#### 使用 NixOS 模块方式 + +首先,用以下命令打开 `configuration.nix` 文件: + +``` +sudo nano /etc/nixos/configuration.nix +``` + +在配置部分,我已经添加了家庭管理员块,所以剩下的就是在 `home.packages = [ ];` 里面添加软件包的名称,格式如图所示: + +``` +home.packages = [ pkgs.package_name ] ; +``` + +> 💡我已经在上节提到软件包名称前你可以使用 `pkgs.` 。 + +例如,如果我想 [安装 htop][13]、Firefox 和 LibreOffice,那么我将添加: + +``` +pkgs.htop pkgs.firefox pkgs.libreoffice +``` + +然后我的家庭管理员块会看起来像这样: + +![作为 NixOS 模块在家庭管理员中安装多个软件包][14] + +现在,保存修改并退出文本编辑器。 + +接下来,重建配置并使用以下命令进行切换: + +``` +sudo nixos-rebuild switch +``` + +这是这样!软件包将很快被安装。 + +### 这就结束了 + +我认为你应该选择独立安装,因为你不需要使用超级用户的权限。另外,如果你运行一个有多个用户的系统,为不同的用户拥有不同的配置文件是相当方便的。 + +因此,除非你想用一个文件来实现各种目的,否则我认为没有其他理由使用模块选项。 + +就这样,我结束了 NixOS 的初学者系列。我希望它能给你一个足够好的平台来熟悉这个独特的 Linux 发行版。 + +💬 你喜欢 NixOS 系列文章吗?对于 NixOS 的初学者,我们还有什么要介绍的吗?请提供你的宝贵意见。 + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/home-manager-nixos/ + +作者:[Sagar Sharma][a] +选题:[lkxed][b] +译者:[wxy](https://github.com/wxy) +校对:[wxy](https://github.com/wxy) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/sagar/ +[b]: https://github.com/lkxed/ +[1]: https://linux.cn/article-15645-1.html +[2]: https://linux.cn/article-15606-1.html +[3]: https://linux.cn/article-15624-1.html +[4]: https://linux.cn/article-15663-1.html +[5]: https://itsfoss.com/content/images/2023/02/building-error-while-installing-home-manager.png +[6]: https://itsfoss.com/content/images/2023/02/location-of-home-manager-in-NixOS.png +[7]: https://itsfoss.com/content/images/2023/02/install-home-manager-as-NixOS-module.png +[8]: https://itsfoss.com/content/images/2023/02/syantax-for-home-manager-module-in-NixOS-config-file.png +[9]: https://linuxhandbook.com/nano-save-exit/?ref=itsfoss.com +[10]: https://itsfoss.com/content/images/2023/02/The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png +[11]: https://itsfoss.com/content/images/2023/02/how-to-solve-The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png +[12]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-using-home-manager-on-NixOS.png +[13]: https://itsfoss.com/use-htop/ +[14]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-in-home-manager-as-a-NixOS-module.png +[0]: https://img.linux.net.cn/data/attachment/album/202304/06/110641k8v9q1152hhhh114.jpg \ No newline at end of file diff --git a/sources/tech/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md b/sources/tech/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md deleted file mode 100644 index f08493191c..0000000000 --- a/sources/tech/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md +++ /dev/null @@ -1,285 +0,0 @@ -[#]: subject: "NixOS Series #5: How to set up home-manager on NixOS?" -[#]: via: "https://itsfoss.com/home-manager-nixos/" -[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -NixOS Series #5: How to set up home-manager on NixOS? -====== - -Before publishing this, I explained how to [install and remove packages in NixOS][1] for a single-user system. - -But if you are running multiple users, there is an excellent way to cater needs of every user separately. - -And in this guide, I will walk you through how you can set up a home manager on NixOS and how it can be used to install packages. - -If you are new here, some resources discussed in this series include: - -- [Reasons to use nixOS][2] -- [Installing NixOS on a virtual machine][3] -- [Things to do after installing NixOS][4] - -### Setup home-manager on NixOS - -In this guide, I will walk you through 2 ways to set up a home manager: - -- Standalone home manager (uses separate config file) -- As a nix module (using it inside `configuration.nix` file) - -So let's start with the standalone option. - -#### Standalone installation of home-manager - -If you are using a stable channel of NixOS, you can use the following command to configure the home manager: - -``` -nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager -``` - -While writing this guide, the stable release is `22.11`. - -And **if you are on an unstable channel**, use the following: - -``` -nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager -``` - -The following steps will remain the same whether you use stable or unstable. - -Once done, update the channels: - -``` -nix-channel --update -``` - -And finally, use the following command to install the home manager: - -``` -nix-shell '' -A install -``` - -🛠️ While installing, it may throw the following error: - -![building error while installing home manager][5] - -Reboot your system and use the installation command again, and it will start the installation. - -Once done, it will show the location of the standalone installation of the home manager: - -![location of home manager in NixOS][6] - -#### Installing home-manager as a NixOS module - -⚠️ - -You will need sudo privileges if you choose to use the home manager as a NixOS module. - -If you are on a stable channel (while writing, it is 22.11), you can use the following command to add the stable channel of the home manager: - -``` -sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager -``` - -And **if you are using unstable or the master channel**, use the following: - -``` -sudo nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager -``` - -Once you are done adding a channel by using any of one command shown above, update the channel using the following: - -``` -sudo nix-channel --update -``` - -Next, open the `configuration.nix` file using: - -``` -sudo nano /etc/nixos/configuration.nix -``` - -And add the following line inside the `imports []`: - -``` - -``` - -![install home-manager as NixOS module][7] - -Now, jump to the end of the line and add the following before `}`: - -``` -home-manager.users.{username} = { pkgs, ... }: { - home.packages = [ ]; - }; -``` - -![syantax for home-manager module in NixOS config file][8] - -The above line was added to facilitate installing and removing packages I will show you next. - -Now, [save changes and exit from the nano][9] text editor. - -Next, rebuild the config and make a switch: - -``` -sudo nixos-rebuild switch -``` - -But if you are using stable release and use the above command, it will throw the error saying : - -🛠️ **error: The option `home-manager.users.user.home.stateVersion' is used but not defined:** - -![error: The option `home-manager.users.user.home.stateVersion' is used but not defined.][10] - -To solve this issue, you will have to add the `home.stateVersion` in your home manager block. - -While writing, I'm running 22.11, so the whole home manager block would look like this: - -``` -home-manager.users.{username} = { pkgs, ... }: { -home.stateVersion = "22.11"; -home.packages = [ ]; - }; -``` - -![how to solve The option `home-manager.users.user.home.stateVersion' is used but not defined.][11] - -Save changes and exit from the nano text editor by pressing `Ctrl + O`, hitting enter and `Ctrl + X`. - -Now, try to rebuild the config and make the switch again, and that should solve the issue. - -### How to install packages using home-manager on NixOS - -Now that you have home-manager installed, how to install packages with it: - -#### Using a standalone install of Home-manager - -First, open the configuration file by using the following: - -``` -nano /home/$USER/.config/nixpkgs/home.nix -``` - -Jump to the end of the line and add the following code block before `}`: - -``` -home.packages = []; -``` - -Now, all you have to do is write the package's name between those two braces. - -For example, if I want to install **htop**, I will have to enter the following: - -``` -home.packages = [pkgs.htop]; -``` - -Yes, you will have to usually append the name of the package with `pkgs.` - -But if you want to get away with using `pkgs.` using every time you install a new package, change the syntax of the code block as shown: - -``` -home.packages = with pkgs; []; -``` - -And now, you are no longer required to use `pkgs.` for every installation: - -``` -home.packages = with pkgs; [htop]; -``` - -For example, here, I wanted to install **htop, firefox, and LibreOffice** so my home block would look like this: - -![install multiple packages using home-manager on NixOS][12] - -Once you are done adding your favorite packages, save the config file and use the following command to install packages: - -``` -home-manager switch -``` - -#### Using the NixOS module - -First, open the `configuration.nix` file using the following command: - -``` -sudo nano /etc/nixos/configuration.nix -``` - -In the configuration part, I've already added the home manager block, so all it is left is to add the name of the package inside `home.packages = [  ];` in the shown format: - -``` -home.packages = [ pkgs.package_name ]; -``` - -💡 - -I've mentioned how you can get away with using - -``` -pkgs. -``` - - before the package name in the above section (installing packages on the standalone home manager). - -For example, if I want to [install htop][13], Firefox, and LibreOffice, then I will add: - -``` -pkgs.htop pkgs.firefox pkgs.libreoffice -``` - -And my home manager block would look like this: - -![install multiple packages in home-manager as a NixOS module][14] - -Now, save changes and exit from the text editor. - -Next, rebuild the config and make a switch using the following command: - -``` -sudo nixos-rebuild switch -``` - -That's it! The packages will be installed in no time. - -### 'Tis the end - -I think you should go with the standalone installation, as you are not required to use the superuser privileges. Also, having separate config files for separate users is quite convenient if you run a system with multiple users. - -So unless you want one file for every purpose, I see no other reason to use the module option. - -With this, I conclude the NixOS beginner series. I hope it gets you a good enough platform to get familiar with this unique Linux distribution. - -💬 _How did you like the NixOS series? Is there something else we should cover for NixOS beginners? Please provide your valuable feedback._ - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/home-manager-nixos/ - -作者:[Sagar Sharma][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/sagar/ -[b]: https://github.com/lkxed/ -[1]: https://itsfoss.com/nixos-package-management/ -[2]: https://itsfoss.com/why-use-nixos/ -[3]: https://itsfoss.com/install-nixos-vm/ -[4]: https://itsfoss.com/things-to-do-after-installing-nixos/ -[5]: https://itsfoss.com/content/images/2023/02/building-error-while-installing-home-manager.png -[6]: https://itsfoss.com/content/images/2023/02/location-of-home-manager-in-NixOS.png -[7]: https://itsfoss.com/content/images/2023/02/install-home-manager-as-NixOS-module.png -[8]: https://itsfoss.com/content/images/2023/02/syantax-for-home-manager-module-in-NixOS-config-file.png -[9]: https://linuxhandbook.com/nano-save-exit/?ref=itsfoss.com -[10]: https://itsfoss.com/content/images/2023/02/The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png -[11]: https://itsfoss.com/content/images/2023/02/how-to-solve-The-option--home-manager.users.user.home.stateVersion--is-used-but-not-defined..png -[12]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-using-home-manager-on-NixOS.png -[13]: https://itsfoss.com/use-htop/ -[14]: https://itsfoss.com/content/images/2023/02/install-multiple-packages-in-home-manager-as-a-NixOS-module.png \ No newline at end of file From 6f126b10dd917ea1e42c3c5f0e413af35ca96e7e Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Thu, 6 Apr 2023 11:13:08 +0800 Subject: [PATCH 71/83] R --- ...1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md index e345786a0a..b97764a61f 100644 --- a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md +++ b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md @@ -69,7 +69,7 @@ nix-shell '' -A install 一旦完成,它将显示独立安装的家庭管理员的位置: -![家庭管理器在NixOS中的位置][6] +![家庭管理员在NixOS中的位置][6] #### 将家庭管理员安装为 NixOS 模块 From 5d646638b39dcd2e34d0919e0a30bd7470137033 Mon Sep 17 00:00:00 2001 From: mcfd <43702470+mcfd@users.noreply.github.com> Date: Thu, 6 Apr 2023 11:45:24 +0800 Subject: [PATCH 72/83] trans --- ...️ Rust Basics Series 1 Create and Run Your First Rust Program.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md b/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md index e9c3fba36a..441110db91 100644 --- a/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md +++ b/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md @@ -2,7 +2,7 @@ [#]: via: "https://itsfoss.com/rust-introduction/" [#]: author: "Pratham Patel https://itsfoss.com/author/pratham/" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "mcfd" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -228,4 +228,4 @@ via: https://itsfoss.com/rust-introduction/ [12]: https://play.rust-lang.org/?ref=itsfoss.com [13]: https://itsfoss.com/make-directories/ [14]: https://learnubuntu.com/install-gcc/?ref=itsfoss.com -[15]: https://itsfoss.com/run-c-program-linux/ \ No newline at end of file +[15]: https://itsfoss.com/run-c-program-linux/ From adfe8b47b8aa62d91fc0d3622d44cb175041423e Mon Sep 17 00:00:00 2001 From: mcfd <43702470+mcfd@users.noreply.github.com> Date: Thu, 6 Apr 2023 15:21:34 +0800 Subject: [PATCH 73/83] =?UTF-8?q?Update=20and=20rename=20sources/tech/2023?= =?UTF-8?q?0328.1=20=E2=AD=90=EF=B8=8F=E2=AD=90=EF=B8=8F=20Rust=20Basics?= =?UTF-8?q?=20Series=201=20Create=20and=20Run=20Your=20First=20Rust=20Prog?= =?UTF-8?q?ram.md=20to=20translated/tech/20230328.1=20=E2=AD=90=EF=B8=8F?= =?UTF-8?q?=E2=AD=90=EF=B8=8F=20Rust=20Basics=20Series=201=20Create=20and?= =?UTF-8?q?=20Run=20Your=20First=20Rust=20Program.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...Series 1 Create and Run Your First Rust Program.md | 231 ----------------- ...Series 1 Create and Run Your First Rust Program.md | 232 ++++++++++++++++++ 2 files changed, 232 insertions(+), 231 deletions(-) delete mode 100644 sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md create mode 100644 translated/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md diff --git a/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md b/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md deleted file mode 100644 index e9c3fba36a..0000000000 --- a/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md +++ /dev/null @@ -1,231 +0,0 @@ -[#]: subject: "Rust Basics Series #1: Create and Run Your First Rust Program" -[#]: via: "https://itsfoss.com/rust-introduction/" -[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/" -[#]: collector: "lkxed" -[#]: translator: " " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Rust Basics Series #1: Create and Run Your First Rust Program -====== - -![][1] - -The Rust programming language is one of the fastest adopted systems programming languages by developers and tech companies. It is also voted as one of the **most loved programming languages** by developers who use it on a daily basis. Rust has [been getting this love for][2]**[seven consecutive years][2]** now! - -It is so popular that there are now two big efforts being carried out in the Linux ecosystem: - -- Inclusion of [Rust as a secondary programming language in the Linux kernel][3] -- System76 is [writing their own desktop environment from scratch using Rust][4] - -And that is just in the Linux ecosystem. Android's Bluetooth implementation [Gabeldorsche][5] is now written in Rust. - -Do you see the rising popularity of Rust? You would probably like to learn coding in Rust. - -### Why should you consider Rust over other programming languages? - -Rust is a programming language that has an **extremely strict type system**. As a result, you are "forced" to not write bad code in the first place (well, usually). - -The Rust programming language has the following "goals": - -- **Speed**: Rust's binaries are as fast as C binaries, sometimes outpacing C++ binaries! -- **Memory safety**: Rust has a huge emphasis on memory safety. -- **Concurrency**: Focusing on memory safety eliminates a lot of race condition-like scenarios and helps you introduce concurrency in your program. - -Following are a few errors mistakes one might make in languages like C/C++ (but not with Rust): - -- Use after free -- Double free -- Accessing out-of-bound values -- Using `NULL` -- Inappropriate pointer arithmetic and/or access -- Use of uninitialized variable(s) -- Thread-unsafe multi-threading - -Have a look at the issues caused by such issues at major corporations like [Apple][6], [Microsoft][7], [Google][8], [0day][9] etc, - -Now that you know why one might want to choose the Rust programming language over any other one, let's start with the Rust language tutorial series! - -### Intended audience - -For the love of Rust, I am writing this series of Rust tutorials to help you get acquainted with the concept of Rust programming. - -This tutorial series is intended for folks already familiar with programming languages like C and C++. I assume you know basic terms like _variables_, _functions_, _loops_, etc. - -The only prerequisites that I ask from you are your time and some effort. - -### Installing the Rust compiler - -I would prefer that you have the [Rust compiler installed locally][10]. You can do so by running the following command: - -``` -curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs | sh -``` - -![Installing Rust on Ubuntu Linux][11] - -Apart from the Rust Compiler, I also recommend installing a few more tools that will help you in the development process: - -``` -rustup component add rust-src rust-analyzer rust-analysis -``` - -💡 - -If you do not wish to install the Rust compiler, no worries. You can run the Rust code directly in your browser! Just head over to the - -[Rust Playgrounds website][12] - - and paste the code discussed here. - -### Hello Rust! - -Since Dennis Ritchie and Brian Kernighan introduced the C programming language with the "Hello world" program, it has become a custom in the UNIX world to do so with any new programming language you learn. - -So let's write our Hello World program in Rust as well. - -I will [create a project directory][13] called `learn-rust-its-foss` in my home directory. In there, I create another directory called `hello-world`. Inside that, I will create a `main.rs` file: - -``` -// this code outputs the text -// "Hello world!" to `stdout` - -fn main() { - println!("Hello world!"); -} -``` - -📋 - -Just like C, C++ and Java source files have the extensions - -``` -.c -``` - -, - -``` -.cpp -``` - - and - -``` -.java -``` - - respectively, the Rust source files have the - -``` -.rs -``` - - file extension. - -As a C/C++ programmer, you might have used [gcc on Linux][14], `clang` on macOS and MSVC on Windows. But to compile Rust code, the language creators themselves provide an official `rustc` compiler. - -Running a Rust program is the same as [executing C/C++ program][15]. You compile the code to get the executable file and then run this executable to run the code. - -``` -$ ls -main.rs - -$ rustc main.rs - -$ ls -main main.rs - -$ ./main -Hello world! -``` - -Nice! - -### Deciphering Rust code - -Now that you wrote, compiled and ran your first ever Rust program, let's de-structure the "Hello world" code and understand each part. - -``` -fn main() { -} -``` - -The `fn` keyword is used to declare a function in Rust. Following it, `main` is the name of this particular function that was declared. Like many compiled programming languages, the `main` is a special function used as your program's entry point. - -Any code written inside the `main` function (between the curly brackets `{``}`) gets executed upon program start-up. - -#### println macro - -Inside the `main` function, there is one statement: - -``` -println!("Hello world!"); -``` - -Like the C language's standard library has the `printf` function, Rust language's standard library has the `println`**macro**. A macro is similar to a function but it is distinguished by the **exclamation mark**. You'll learn about macros and functions later in this series. - -The `println` macro takes in a format string and puts it to the program's output (in our case, that is terminal). Since I wish to output some text instead of a variable, I will enclose the text inside double quotes (`"`). Finally, I end this statement using a semi-colon to denote the end of the statement. - -📋 - -Just know that anything that looks like a function call but has an exclamation mark ( - -``` -! -``` - -) before the opening parentheses is a macro in the Rust programming language. - -#### Comments - -Rust follows the known commenting style of the C programming language. A single line comment starts with two forward slashes (`//`) and a multi-line comment is started by `/*` and ends with `*/`. - -``` -// this is a multi-line comment -// but nothing stops me to doing the same -// on the second or third line too! - -/* - * this is a "true" mutli-line comment - * because it is _fancy_ - */ -``` - -### Conclusion - -You just took the first step towards coding in Rust with the Hello World program. - -As a practice, perhaps you can write and execute a Rust program that prints "Yes! I did Rust". - -In the next part of the series, you'll learn to use variables in your Rust program. Stay tuned! - --------------------------------------------------------------------------------- - -via: https://itsfoss.com/rust-introduction/ - -作者:[Pratham Patel][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://itsfoss.com/author/pratham/ -[b]: https://github.com/lkxed/ -[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp -[2]: https://survey.stackoverflow.co/2022/?ref=itsfoss.com#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages -[3]: https://news.itsfoss.com/linux-kernel-6-1-release/?ref=itsfoss.com -[4]: https://news.itsfoss.com/pop-os-cosmic-rust/?ref=itsfoss.com -[5]: https://android.googlesource.com/platform//system/bt/+/83498aa554aea220fcff30b6310a0a7b4557969f/gd/rust/linux/stack/src/bluetooth.rs?ref=itsfoss.com -[6]: https://langui.sh/2019/07/23/apple-memory-safety/?ref=itsfoss.com -[7]: https://msrc-blog.microsoft.com/2019/07/18/we-need-a-safer-systems-programming-language/?ref=itsfoss.com -[8]: https://security.googleblog.com/2019/05/queue-hardening-enhancements.html?ref=itsfoss.com -[9]: https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view?ref=itsfoss.com#gid=1190662839 -[10]: https://itsfoss.com/install-rust-cargo-ubuntu-linux/ -[11]: https://itsfoss.com/content/images/2023/03/install-rust.svg -[12]: https://play.rust-lang.org/?ref=itsfoss.com -[13]: https://itsfoss.com/make-directories/ -[14]: https://learnubuntu.com/install-gcc/?ref=itsfoss.com -[15]: https://itsfoss.com/run-c-program-linux/ \ No newline at end of file diff --git a/translated/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md b/translated/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md new file mode 100644 index 0000000000..8467bdb2b6 --- /dev/null +++ b/translated/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md @@ -0,0 +1,232 @@ +[#]: subject: "Rust Basics Series #1: Create and Run Your First Rust Program" +[#]: via: "https://itsfoss.com/rust-introduction/" +[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/" +[#]: collector: "lkxed" +[#]: translator: "mcfd" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +Rust 基础系列 #1: 创建并运行你的首个 Rust 程序 +====== + +![][1] + +Rust 是被开发者和科技公司所采用最快的系统编程语言之一。它也被每天使用它的开发者评为**最受欢迎的编程语言**之一。其[已经][2]**[连续七年][2]**[受到这种欢迎了][2]! + +它是如此的受欢迎,以致于现在有两股巨大的推力将其带入 Linux 生态系统中: + +- 包括 [Rust 将作为 Linux 内核的第二支持语言][3] +- System76 [正在使用 Rust 重写他们自己的桌面环境][4] + +而这仅仅是在 Linux 生态系统中。安卓的蓝牙实现 [Gabeldorsche][5] 现在也是由 Rust 编写的。 + +你是否看到了 Rust 的流行趋势?你大概率可能想学习使用 Rust 进行编程。 + +### 为什么你要考虑 Rust 而不是其他编程语言? + +首先,Rust 是一门 **类型安全的编程语言** 并且 **拥有极其严格的编译期检查**。因此,你首先会 “被迫” 写不出不安全的代码(好吧,通常)。 + +Rust 编程语言有以下 "目标": + +- **性能**:Rust 的二进制文件和 C 语言的二进制文件一样快,有时甚至超过了 C++ 的二进制文件! +- **内存安全**:Rust 非常重视内存安全。 +- **并发**:对内存安全的关注消除了很多类似竞争的情况,并帮助你在程序中无畏并发。 + +以下是在 C/C++ 等语言中可能犯的一些错误(但不是 Rust): + +- 释放后使用 +- 双重释放 +- 越界访问 +- 使用 `NULL` +- 不适当的指针运算或访问 +- 使用未经初始化的变量 +- 线程不安全的多线程 + +看看 [Apple][6], [Microsoft][7], [Google][8], [0day][9] 等大公司因这类错误而引起的问题吧。 + +现在你可能知道了为什么要选择 Rust 语言而不是其他编程语言,让我们开始学习 Rust 语言的系列教程吧! + +### 目标受众 + +出于对 Rust 的热爱,我写了这个系列的 Rust 教程,帮助你熟悉 Rust 编程的概念。 + +这个教程系列是为已经熟悉 C 和 C++ 等编程语言的人准备的。我假设你已经知道了 _变量_、_函数_、_循环_ 等基本术语。 + +我对你的唯一要求是你不懈的坚持与努力。 + +### 安装 Rust 工具链 + +我希望你能在本地安装 [Rust 工具链][10]。你可以通过运行以下命令来做到这一点: +(LCTT 译注:如果你使用 Linux 发行版,请不要直接安装软件源里的 Rust 工具链,尽管这样看起来很便捷) + +``` +curl --proto '=https' --tlsv1.3 -sSf https://sh.rustup.rs | sh +``` + +![Installing Rust on Ubuntu Linux][11] + +除了 Rust 基本工具链,我还建议再安装一些工具,这些工具将在开发过程中帮助你: + +``` +rustup component add rust-src rust-analyzer rust-analysis +``` + +💡 + +如果你不希望在本地安装 Rust 工具链,不用担心。你还可以直接在你的浏览器中运行 Rust 代码!只要到 + +[Rust Playgrounds website][12] + + 并把所讨论的代码粘贴在此处。 + +### Hello Rust! + +自从 Dennis Ritchie 和 Brian Kernighan 用 "Hello world" 程序介绍了 C 语言后,在 UNIX 世界里,对你学习的任何新的编程语言都要这样做,这已经成为一种习惯。 + +因此,让我们也用 Rust 编写我们的 Hello World 程序。 + +我将在我的家目录里[新建一个项目目录][13]叫做 `learn-rust-its-foss`。然后,在这里我将新建一个叫 `hello-world` 的目录。最后,在里面新建 `main.rs` 文件: + +``` +// 这串代码将打印字符 +// "Hello world!" 将被打印到 `标准输出` + +fn main() { + println!("Hello world!"); +} +``` + +📋 + +就像 C、C++ 和 Java 源代码文件的扩展名是 + +``` +.c +``` + +、 + +``` +.cpp +``` + + 和 + +``` +.java +``` + + Rust 的源文件扩展名是 + +``` +.rs +``` + + 文件扩展名 + +作为一个 C/C++ 程序员,你可能已经在 [Linux 上使用 GCC][14],在 macOS 上使用 `Clang`,在 Windows 上使用 MSVC。但是为了编译 Rust 代码,该语言的创造者自己提供了一个官方的 `rustc` 编译器。 + +运行 Rust 程序和[执行 C/C++ 程序][15]是一样的。你首先编译代码,然后得到可执行文件,最后再运行这个可执行文件从而来运行代码。 + +``` +$ ls +main.rs + +$ rustc main.rs + +$ ls +main main.rs + +$ ./main +Hello world! +``` + +很好! + +### 破译 Rust 代码 + +现在你已经编写、编译并运行了你的第一个 Rust 程序,让我们对 "Hello world" 的代码进行解构并理解每一部分。 + +``` +fn main() { +} +``` + +`fn` 关键字是用来在 Rust 中声明一个函数的。在它后面 `main` 是这个被声明函数的名字。像许多编译型编程语言一样,`main` 是一个特殊的函数,用来作为你的程序的入口。 + +任何写在 `main` 函数里的代码(在大括号 `{``}` 中)将在程序被启动时运行。 + +#### println 宏 + +在 `main` 函数中, 有一个语句(LCTT 译注:语句 区别于 表达式): + +``` +println!("Hello world!"); +``` + +就像C语言的标准库有 `printf` 函数一样,Rust语言的标准库有 `println` **macro**。宏类似于函数,但它以**感叹号**来区分。你将在本系列的后面学习宏和函数的知识。 + +`println` 宏接收一个格式化的字符串,并把它放到程序的标准输出中(在我们的例子中,就是终端)。由于我希望输出一些文本而不是一个变量,我将把文本放在双引号(`"`)内。最后,我用一个分号来结束这个语句,表示语句的结束。 + +📋 + +你只需知道,任何看起来像函数调用但有感叹号的东西 + +``` +! +``` + +就是 Rust 编程语言中的一个宏。 + +#### 注释 + +Rust 遵循已知的 C 编程语言的注释风格。单行注释以两个正斜杠(`//`)开始,多行注释以 `/*` 开始,以 `*/` 结束。 + +``` +// this is a multi-line comment +// but nothing stops me to doing the same +// on the second or third line too! + +/* + * this is a "true" mutli-line comment + * because it is _fancy_ + */ +``` + +### 总结 + +你刚刚通过 Hello World 程序迈出了用 Rust 写代码的第一步。 + +作为一种练习,也许你可以编写并执行一个打印出 "Yes! I did Rust" 的 Rust 程序。 + +在本系列的下一部分中,你将学习在 Rust 程序中使用变量。敬请期待! + +-------------------------------------------------------------------------------- + +via: https://itsfoss.com/rust-introduction/ + +作者:[Pratham Patel][a] +选题:[lkxed][b] +译者:[mcfd](https://github.com/mcfd) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://itsfoss.com/author/pratham/ +[b]: https://github.com/lkxed/ +[1]: https://itsfoss.com/content/images/2023/03/linux-mega-packt.webp +[2]: https://survey.stackoverflow.co/2022/?ref=itsfoss.com#section-most-loved-dreaded-and-wanted-programming-scripting-and-markup-languages +[3]: https://news.itsfoss.com/linux-kernel-6-1-release/?ref=itsfoss.com +[4]: https://news.itsfoss.com/pop-os-cosmic-rust/?ref=itsfoss.com +[5]: https://android.googlesource.com/platform//system/bt/+/83498aa554aea220fcff30b6310a0a7b4557969f/gd/rust/linux/stack/src/bluetooth.rs?ref=itsfoss.com +[6]: https://langui.sh/2019/07/23/apple-memory-safety/?ref=itsfoss.com +[7]: https://msrc-blog.microsoft.com/2019/07/18/we-need-a-safer-systems-programming-language/?ref=itsfoss.com +[8]: https://security.googleblog.com/2019/05/queue-hardening-enhancements.html?ref=itsfoss.com +[9]: https://docs.google.com/spreadsheets/d/1lkNJ0uQwbeC1ZTRrxdtuPLCIl7mlUreoKfSIgajnSyY/view?ref=itsfoss.com#gid=1190662839 +[10]: https://itsfoss.com/install-rust-cargo-ubuntu-linux/ +[11]: https://itsfoss.com/content/images/2023/03/install-rust.svg +[12]: https://play.rust-lang.org/?ref=itsfoss.com +[13]: https://itsfoss.com/make-directories/ +[14]: https://learnubuntu.com/install-gcc/?ref=itsfoss.com +[15]: https://itsfoss.com/run-c-program-linux/ From 50d54f78c764505e2301a15e4902b06cc8261e69 Mon Sep 17 00:00:00 2001 From: "Xingyu.Wang" Date: Thu, 6 Apr 2023 15:39:00 +0800 Subject: [PATCH 74/83] Revert "trans" --- ...️ Rust Basics Series 1 Create and Run Your First Rust Program.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md b/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md index 441110db91..e9c3fba36a 100644 --- a/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md +++ b/sources/tech/20230328.1 ⭐️⭐️ Rust Basics Series 1 Create and Run Your First Rust Program.md @@ -2,7 +2,7 @@ [#]: via: "https://itsfoss.com/rust-introduction/" [#]: author: "Pratham Patel https://itsfoss.com/author/pratham/" [#]: collector: "lkxed" -[#]: translator: "mcfd" +[#]: translator: " " [#]: reviewer: " " [#]: publisher: " " [#]: url: " " @@ -228,4 +228,4 @@ via: https://itsfoss.com/rust-introduction/ [12]: https://play.rust-lang.org/?ref=itsfoss.com [13]: https://itsfoss.com/make-directories/ [14]: https://learnubuntu.com/install-gcc/?ref=itsfoss.com -[15]: https://itsfoss.com/run-c-program-linux/ +[15]: https://itsfoss.com/run-c-program-linux/ \ No newline at end of file From dd49270820c0781dbbf8b776ed41d6b3c729dba0 Mon Sep 17 00:00:00 2001 From: Drwhooooo <90264412+Drwhooooo@users.noreply.github.com> Date: Thu, 6 Apr 2023 16:08:17 +0800 Subject: [PATCH 75/83] Drwhooooo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 翻译文件申领 --- sources/tech/20210111 an even better video wharf.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20210111 an even better video wharf.md b/sources/tech/20210111 an even better video wharf.md index d42ace0d0b..e49835c6e2 100644 --- a/sources/tech/20210111 an even better video wharf.md +++ b/sources/tech/20210111 an even better video wharf.md @@ -2,7 +2,7 @@ [#]: via: "https://jao.io/blog/2021-01-11-an-even-better-video-wharf.html" [#]: author: "jao https://jao.io" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "Drwhooooo" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 9a1dad40efba77c8c19b5ed7c60bf1cd6b7558ef Mon Sep 17 00:00:00 2001 From: FYJNEVERFOLLOWS Date: Fri, 7 Apr 2023 09:35:16 +0800 Subject: [PATCH 76/83] translated --- ...5 Open source mind mapping with Draw.io.md | 110 ------------------ ...5 Open source mind mapping with Draw.io.md | 108 +++++++++++++++++ 2 files changed, 108 insertions(+), 110 deletions(-) delete mode 100644 sources/tech/20211205 Open source mind mapping with Draw.io.md create mode 100644 translated/tech/20211205 Open source mind mapping with Draw.io.md diff --git a/sources/tech/20211205 Open source mind mapping with Draw.io.md b/sources/tech/20211205 Open source mind mapping with Draw.io.md deleted file mode 100644 index 3ab483a62e..0000000000 --- a/sources/tech/20211205 Open source mind mapping with Draw.io.md +++ /dev/null @@ -1,110 +0,0 @@ -[#]: subject: "Open source mind mapping with Draw.io" -[#]: via: "https://opensource.com/article/21/12/open-source-mind-mapping-drawio" -[#]: author: "Seth Kenlon https://opensource.com/users/seth" -[#]: collector: "lujun9972" -[#]: translator: "FYJNEVERFOLLOWS " -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Open source mind mapping with Draw.io -====== -Next time you need to brainstorm, organize ideas, or plan a project, -start with Draw.io. -![Looking at a map for career journey][1] - -There's something special about maps. I remember opening the front book cover of JRR Tolkien's _The Hobbit_ when I was younger, staring at the hand-drawn map of Middle Earth, and feeling the wealth of possibility contained in the simple drawing. Aside from their obvious purpose of actually describing where things are in relation to other things, I think maps do a great job of expressing potential. You could step outside and take the road this way or that way, and if you do, just think of all the new and exciting things you'll be able to see. - -Maps don't have to be literal to be valuable and full of possibility, though. Some maps describe a thought process, plan, algorithm, or even random ideas desperately trying to fit together in a potential work of art. Call them "mind maps" or "flowcharts" or "idea boards." They're easy to make with the open source [Draw.io][2] application. - -### Install Draw.io - -Draw.io is designed as an open source online app, so you can either use it as an online application, download the [desktop version][3], or [clone the Git repository][4] and host it on your own server. - -### Mapping with Draw.io - -When you first start Draw.io, you need to choose where you want to save your data. If you're hosting Draw.io yourself, your choices depend on which API keys you have access to. You can choose from several online storage services for the online public instance, depending on what you've got an account for. If you don't want to store your data on somebody else's server, you can also choose to save your work on a local drive. If you're unsure yet, you can click **Decide later** to continue into the app without choosing anything. - -The Draw.io interface has a big workspace in the center, the main toolbar on the left, a toolbar along the top, and a properties panel on the right. - -![Draw.io interface][5] - -(Seth Kenlon, [CC BY-SA 4.0][6]) - -The workflow is simple:  - - 1. Select a shape from the left toolbar. - 2. Edit the shape in the workspace. - 3. Add another shape, and connect them. - - - -Repeat that process, and you've got a map. - -![Draw.io example][7] - -(Seth Kenlon, [CC BY-SA 4.0][6]) - -### Project planning - -When you first take on a big task, you often have a pretty clear idea of your desired outcome. Say you want to start a community project to paint a mural. Your desired outcome is a mural. It's pretty easy to define, and you can more or less picture the results in your mind's eye. - -Once you start moving toward your goal, however, you have to start figuring out the details. Where should the mural be painted? How do you get permission to paint on a public wall, anyway? What about paint? Is there a special kind of paint you ought to use? Will you apply the paint with brushes or airbrushes? What kind of specialized equipment do you need for painting? How many people and hours will it take to paint a mural? What about support services for the painters while they work? And what's the painting going to be about, anyway? A single idea can very quickly become overwhelming the closer you get to making it happen. - -This doesn't just apply to painting murals, producing a play, or making a movie. It applies to nearly any non-trivial endeavor. And it's exactly what an application like Draw.io can help map out. - -Here's how you can use Draw.io to create a project flowchart: - - 1. Start with a brainstorming session. No thoughts are too trivial or big. Make a box for every idea, and double-click the box in the Draw.io workspace to enter text. - 2. Once you have all the ideas you can possibly think of on your workspace, drag and drop them into related groups. The goal is to create little clouds, or clusters, of tasks that more or less go together because they're part of the same process. - 3. Once you've identified the clusters of related tasks, give those tasks a name. For instance, if you're painting a mural, then the tasks might be _approval_, _design_, _purchase_, _paint_, reflecting that you need to get permission from your local government first, then design the mural, then purchase the supplies, and finally paint the mural. Each task has component parts, but broadly you've now determined the workflow for your project. - 4. Connect the major tasks with arrows. Not all processes are entirely linear. For instance, after you've obtained permission from your city council, you might have to come back to them for final approval once you've designed what you intend to paint. That's normal. It's a loop, there's some back and forth, but eventually, you break out of the loop to proceed to the next stage. - 5. Armed with your flowchart, work through each task until you've reached your ultimate goal. - - - -### Mind mapping  - -Mind maps tend to be less about progress and more about maintaining a certain state or putting many ideas into perspective. For instance, suppose you've decided to reduce the amount of waste in your life. You have some ideas about what you can do, but you want to organize and preserve your ideas, so you don't forget them. - -Here's how you can use Draw.io to create a mind map: - - 1. Start with a brainstorming session. No thoughts are too trivial or big. Make a box for every idea, and double-click the box in the Draw.io workspace to enter text. You can also give boxes a background color by selecting the box and clicking a color swatch in the right properties panel. - 2. Arrange your ideas into groups or categories. - 3. Optionally, connect ideas with arrows that relate directly to one another. - - - -![Draw.io waste reduction example][8] - -(Seth Kenlon, [CC BY-SA 4.0][6]) - -### Saving your diagram - -You can save your diagram as a PNG, JPG image, Draw.io XML, or plain XML file. If you save it as XML, you can open it again in Draw.io for further editing. An exported image is great for sharing with others. - -### Use Draw.io - -There are many great diagramming applications, but I don't make diagrams often, so having Draw.io available is convenient at a moment's notice. Its interface is simple and easy to use, and the results are clean and professional. Next time you need to brainstorm, organize ideas, or plan a project, start with Draw.io. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/21/12/open-source-mind-mapping-drawio - -作者:[Seth Kenlon][a] -选题:[lujun9972][b] -译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/seth -[b]: https://github.com/lujun9972 -[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/career_journey_road_gps_path_map_520.png?itok=PpL6jJgY (Looking at a map for career journey) -[2]: http://draw.io -[3]: https://github.com/jgraph/drawio-desktop -[4]: https://github.com/jgraph/drawio -[5]: https://opensource.com/sites/default/files/uploads/draw-io-ui.png (Draw.io interface) -[6]: https://creativecommons.org/licenses/by-sa/4.0/ -[7]: https://opensource.com/sites/default/files/uploads/draw-io-example.jpg (Draw.io example) -[8]: https://opensource.com/sites/default/files/uploads/draw-io-export.jpg (Draw.io waste reduction example) diff --git a/translated/tech/20211205 Open source mind mapping with Draw.io.md b/translated/tech/20211205 Open source mind mapping with Draw.io.md new file mode 100644 index 0000000000..248d131e28 --- /dev/null +++ b/translated/tech/20211205 Open source mind mapping with Draw.io.md @@ -0,0 +1,108 @@ +[#]: subject: "Open source mind mapping with Draw.io" +[#]: via: "https://opensource.com/article/21/12/open-source-mind-mapping-drawio" +[#]: author: "Seth Kenlon https://opensource.com/users/seth" +[#]: collector: "lujun9972" +[#]: translator: "FYJNEVERFOLLOWS" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +使用开源思维导图 Draw.io +====== + +下次你需要头脑风暴、组织想法或计划项目时,不妨试试 Draw.io +![Looking at a map for career journey][1] + +地图有一些特别之处。我记得小时候打开托尔金《*霍比特人*》的封面,盯着手绘的中土世界地图,感受简单的图画中蕴含着丰富的可能性。除了描述事物与其他事物之间的关系这一明显目的外,我认为地图在表达可能性方面做得很好。你可以到户外去,沿着这条路或那条路走,如果你这样做了,去想想你将能够看到的所有新的、令人兴奋的事物。 + +尽管如此,地图并不一定是有价值和充满可能性的文字。有些地图描述了一个思维过程、计划、算法,甚至是一些随机的想法,这些想法拼命地想要组合成一件潜在的艺术作品。称之为“思维导图”、“流程图”或“创意板”。可以用开源的 [Draw.io][2] 应用程序去很容易地制作。 + +### 安装 Draw.io + +Draw.io 被设计为一个开源的在线应用程序,因此你可以将其作为在线应用程序使用,下载[桌面版本][3],或[克隆 Git 存储库][4]并将其托管在您自己的服务器上。 + +### 使用 Draw.io 进行映射 +当你第一次启动 Draw.io 时,你需要选择保存数据的位置。如果你自己托管 Draw.io,你的选择取决于你可以访问哪些 API 密钥。你可以从几个在线存储服务中为在线公共实例进行选择,这取决于你的帐户。如果你不想把你的数据存储在别人的服务器上,你也可以选择把你的工作保存在本地存储上。如果你还不确定,可以单击 ``稍后决定`` 继续进入应用程序,而无需选择任何内容。 + +Draw.io 的交互界面中间有一个很大的工作空间,左边是主工具栏,顶部是工具栏,右边是属性面板。 + +![Draw.io interface][5] + +(Seth Kenlon, [CC BY-SA 4.0][6]) + +工作流程很简单: + + 1. 从左侧工具栏中选择一个形状。 + 2. 在工作空间中编辑形状。 + 3. 添加另一个形状,并连接它们。 + + + +重复这个过程,你就得到了一张地图。 + +![Draw.io example][7] + +(Seth Kenlon, [CC BY-SA 4.0][6]) + +### 项目规划 + +当你第一次接受一项大任务时,你通常对你想要的结果有一个非常清晰的想法。假设你想开始一个社区项目来画一幅壁画。你想要的结果是一幅壁画。它很容易定义,你可以或多或少地在脑海中描绘出结果。 + +然而,一旦你开始朝着目标前进,你就必须开始弄清楚细节。壁画应该画在哪里?即便知道画在哪,你如何获得在公共墙上作画的许可的?油漆呢?你应该用一种特殊的油漆吗?你会用刷子还是喷枪涂油漆?你需要什么样的专业设备来喷漆?画一幅壁画需要多少人和多长时间?画家工作时的支持服务怎么样?最后,这幅画是关于什么的?一个想法很快就会变得势不可挡,因为你离实现它越近。 + +这不仅仅适用于绘制壁画、制作戏剧或电影。它几乎适用于任何不平凡的努力。这正是像 Draw.io 这样的应用程序可以帮助绘制的。 + +以下是如何使用 Draw.io 创建项目流程图: + 1. 从头脑风暴开始。没有什么想法是太小或太大的。为每个想法制作一个框,然后双击 Draw.io 工作空间中的框以输入文本。 + 2. 一旦在工作空间中你产生了可能想到的所有想法,就可以将它们拖放到相关的组中。我们的目标是创建一些小任务云或集群,因为它们是同一过程的一部分,所以或多或少会一起进行。 + 3. 一旦你确定了相关任务的集群,就为这些任务命名。例如,如果你正在绘制壁画,那么任务可能是 _approval_、_design_、_purchase_、_paint_,这反映出你需要首先获得当地政府的许可,然后设计壁画,然后购买用品,最后绘制壁画。每个任务都有组成部分,但大体上,你现在已经确定了项目的工作流程。 + 4. 用箭头连接主要任务。并不是所有的过程都是完全线性的。例如,在你获得市议会的许可后,一旦你设计了你打算画的东西,你可能必须回到他们那里进行最终批准。这很正常。这是一个循环,有一些来回,但最终,你会突破这个循环,进入下一阶段。 + 5. 掌握好你的流程图,完成每一项任务,直到你达到最终目标。 + +### 思维导图 + + + +思维导图往往不是关于进步,而是关于保持某种状态或对许多想法进行展望。例如,假设你已经决定减少生活中的浪费。你对自己能做什么有一些想法,但你想组织和保存你的想法,这样你就不会忘记它们。 + +以下是如何使用 Draw.io 创建思维导图: + + 1. 从头脑风暴开始。没有什么想法是太琐碎或太大的。为每个想法制作一个框,然后双击 Draw.io 工作空间中的框以输入文本。也可以通过选择框并单击右侧属性面板中的色样,为框指定背景色。 + 2. 将你的想法分组或分类。 + 3. 可以选择将想法与彼此直接相关的箭头连接起来。 + + + +![Draw.io waste reduction example][8] + +(Seth Kenlon, [CC BY-SA 4.0][6]) + +### 保存你的图表 + +你可以将图表保存为 PNG、JPG 图像、Draw.io XML 或纯 XML 文件。如果将其另存为 XML,则可以在 Draw.io 中再次打开它进行进一步编辑。导出的图像非常适合与他人共享。 + +### 使用 Draw.io + +有很多很棒的绘图应用程序,但我不经常制作图表,所以可以随时使用 Draw.io。它的界面简单易用,结果干净专业。下次当你需要头脑风暴、组织想法或计划项目时,可以试试 Draw.io。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/21/12/open-source-mind-mapping-drawio + +作者:[Seth Kenlon][a] +选题:[lujun9972][b] +译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/seth +[b]: https://github.com/lujun9972 +[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/career_journey_road_gps_path_map_520.png?itok=PpL6jJgY (Looking at a map for career journey) +[2]: http://draw.io +[3]: https://github.com/jgraph/drawio-desktop +[4]: https://github.com/jgraph/drawio +[5]: https://opensource.com/sites/default/files/uploads/draw-io-ui.png (Draw.io interface) +[6]: https://creativecommons.org/licenses/by-sa/4.0/ +[7]: https://opensource.com/sites/default/files/uploads/draw-io-example.jpg (Draw.io example) +[8]: https://opensource.com/sites/default/files/uploads/draw-io-export.jpg (Draw.io waste reduction example) From 79e0959822f754271a9736cd774fd6fe9b21ea94 Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 7 Apr 2023 10:03:30 +0800 Subject: [PATCH 77/83] translated --- ...0 ⭐️ Open source tools for mind mapping.md | 61 ------------------- ...0 ⭐️ Open source tools for mind mapping.md | 61 +++++++++++++++++++ 2 files changed, 61 insertions(+), 61 deletions(-) delete mode 100644 sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md create mode 100644 translated/tech/20230324.0 ⭐️ Open source tools for mind mapping.md diff --git a/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md b/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md deleted file mode 100644 index 962e2d318b..0000000000 --- a/sources/tech/20230324.0 ⭐️ Open source tools for mind mapping.md +++ /dev/null @@ -1,61 +0,0 @@ -[#]: subject: "Open source tools for mind mapping" -[#]: via: "https://opensource.com/article/23/3/open-source-mind-mapping" -[#]: author: "Amrita https://opensource.com/users/amrita42" -[#]: collector: "lkxed" -[#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " - -Open source tools for mind mapping -====== - -In today's world and social media, many people don't have the patience to read lengthy textual content. Visuals are a great way to capture your audience's attention span. - -Did you know that research at 3M Corporation concluded that visuals are processed 60,000 times faster than text? Visuals are more impactful than words and enhance creative thinking and memory. - -### A picture is worth a thousand words - -I looked at some of the common [Git commands][1]. I used Git commands as the main topic; each sub-topic is a Git command syntax with a definition. For this, I used Wisemapping. - -![A git command mind map][2] - -Whether you knew what a [mind map][3] was before or not, now that you've seen a mind map, you can now understand the concept.. That's the power of visuals. - -### How do you create a mind map? - -- Start with the main topic and place it in the middle of your drawing board. -- Create sub-topics and link them to the main topic. -- You can add details to each sub-topic, such as definitions, examples, etc. - -### 3 open source tools you can use to create a mind map - -Take a look at these three open source tools to create a visual of your idea: - -- [Wisemapping][4] -- [Freeplane][5] -- [Semantik][6] - -Wikipedia defines a mind map as a diagram to visually organize information into a hierarchy, showing relationships among pieces of the whole. Mind mapping starts with a central theme and then builds relations. It is a visual way to structure thoughts and create impactful presentations. - -You can use mind maps in your work. For example, I used a mind map to show a high-level overview of features planned for a project. With these excellent open source mind mapping applications, it's easy to get started visualizing your next project. Try mapping your mind with open source. - --------------------------------------------------------------------------------- - -via: https://opensource.com/article/23/3/open-source-mind-mapping - -作者:[Amrita][a] -选题:[lkxed][b] -译者:[译者ID](https://github.com/译者ID) -校对:[校对者ID](https://github.com/校对者ID) - -本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 - -[a]: https://opensource.com/users/amrita42 -[b]: https://github.com/lkxed/ -[1]: https://opensource.com/downloads/cheat-sheet-git -[2]: https://opensource.com/sites/default/files/2023-03/mindmap.jpg -[3]: https://opensource.com/article/21/12/open-source-mind-mapping-drawio -[4]: https://www.wisemapping.com/ -[5]: https://opensource.com/article/19/1/productivity-tool-freeplane -[6]: https://waf.io/semantik.html \ No newline at end of file diff --git a/translated/tech/20230324.0 ⭐️ Open source tools for mind mapping.md b/translated/tech/20230324.0 ⭐️ Open source tools for mind mapping.md new file mode 100644 index 0000000000..773ced8756 --- /dev/null +++ b/translated/tech/20230324.0 ⭐️ Open source tools for mind mapping.md @@ -0,0 +1,61 @@ +[#]: subject: "Open source tools for mind mapping" +[#]: via: "https://opensource.com/article/23/3/open-source-mind-mapping" +[#]: author: "Amrita https://opensource.com/users/amrita42" +[#]: collector: "lkxed" +[#]: translator: "geekpi" +[#]: reviewer: " " +[#]: publisher: " " +[#]: url: " " + +开源思维导图工具 +====== + +在今天的世界和社交媒体中,许多人没有耐心阅读冗长的文字内容。视觉效果是吸引受众注意力的好方法。 + +你知道吗,3M 公司的研究得出结论,视觉的处理速度是文字的 60,000 倍?视觉比文字更有冲击力,能增强创造性思维和记忆。 + +### 一张图片胜过千言万语 + +我看了一些常见的[Git命令][1]。我把 Git 命令作为主话题,每个子话题都是一个带有定义的 Git 命令语法。为此,我使用了 Wisemapping。 + +![A git command mind map][2] + +不管你以前是否知道[思维导图][3]是什么,现在你看到了思维导图,你就可以理解这个概念了。这就是视觉的力量。 + +### 如何创建一个思维导图? + +- 从主话题开始,把它放在你的画板中间。 +- 创建子话题并将它们与主话题联系起来。 +- 你可以为每个子话题添加细节,如定义、例子等。 + +### 3 个你可以用来创建思维导图的开源工具 + +看看这三个开源工具,为你的想法创建一个视觉: + +- [Wisemapping][4] +- [Freeplane][5] +- [Semantik][6] + +维基百科对思维导图的定义是:将信息直观地组织成一个层次,显示整体中各部分之间的关系。思维导图从一个中心话题开始,然后建立起关系。它是一种结构化思想和创造有影响力的演示的视觉方式。 + +你可以在工作中使用思维导图。例如,我用思维导图来展示一个项目所计划的功能的高层概述。有了这些优秀的开源思维导图应用,你很容易就能开始将你的下一个项目可视化。试试用开源的思维导图吧。 + +-------------------------------------------------------------------------------- + +via: https://opensource.com/article/23/3/open-source-mind-mapping + +作者:[Amrita][a] +选题:[lkxed][b] +译者:[geekpi](https://github.com/geekpi) +校对:[校对者ID](https://github.com/校对者ID) + +本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 + +[a]: https://opensource.com/users/amrita42 +[b]: https://github.com/lkxed/ +[1]: https://opensource.com/downloads/cheat-sheet-git +[2]: https://opensource.com/sites/default/files/2023-03/mindmap.jpg +[3]: https://opensource.com/article/21/12/open-source-mind-mapping-drawio +[4]: https://www.wisemapping.com/ +[5]: https://opensource.com/article/19/1/productivity-tool-freeplane +[6]: https://waf.io/semantik.html \ No newline at end of file From 239b91fdb95fb3da3f0f2386894d8e44cf503dc8 Mon Sep 17 00:00:00 2001 From: geekpi Date: Fri, 7 Apr 2023 10:27:39 +0800 Subject: [PATCH 78/83] translating --- ...️⭐️ Handle any type of document with this open source tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md b/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md index 8c783e3478..00bc606d51 100644 --- a/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md +++ b/sources/tech/20230403.2 ⭐️⭐️ Handle any type of document with this open source tool.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/23/4/open-source-collabora-online-interoperability" [#]: author: "Heike Jurzik https://opensource.com/users/hej" [#]: collector: "lkxed" -[#]: translator: " " +[#]: translator: "geekpi" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 2bc1b8217562fcef7e0a18dcafd60cef0c71df16 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 7 Apr 2023 11:06:59 +0800 Subject: [PATCH 79/83] R --- ...OS Series 5 How to set up home-manager on NixOS.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md index b97764a61f..8e5bf0136d 100644 --- a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md +++ b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md @@ -7,14 +7,14 @@ [#]: publisher: "wxy" [#]: url: "https://linux.cn/article-15697-1.html" -NixOS 系列 #5:如何在 NixOS 上设置家庭管理员? +NixOS 系列 #5:如何在 NixOS 上设置主目录管理器? ====== 在发表这篇文章之前,我解释了如何为一个单用户系统 [在 NixOS 中安装和删除软件包][1]。 但是,如果你正在供多个用户使用,有一个很好的方法来分别满足每个用户的需求。 -在本指南中,我将指导你如何在 NixOS 上设置一个家庭管理员,以及如何使用它来安装软件包。 +在本指南中,我将指导你如何在 NixOS 上设置一个 主目录管理器Home Manager,以及如何使用它来安装软件包。 如果你是新读者,本系列中讨论的一些资源包括: @@ -22,16 +22,16 @@ NixOS 系列 #5:如何在 NixOS 上设置家庭管理员? - [在虚拟机上安装 NixOS][3] - [安装 NixOS 后要做的事情][4] -### 在 NixOS 上设置家庭管理员 +### 在 NixOS 上设置主目录管理器 -在本指南中,我将指导你通过 2 种方式来设置家庭管理员: +在本指南中,我将指导你通过 2 种方式来设置主目录管理器: -- 独立的家庭管理员(使用单独的配置文件) +- 独立的主目录管理器(使用单独的配置文件) - 作为一个 NixOS 模块(在 `configuration.nix` 文件中使用它) 那么,让我们从独立方式开始。 -#### 独立安装的家庭管理员 +#### 独立安装的主目录管理器 如果你使用的是 NixOS 的稳定频道,你可以使用以下命令来配置家庭管理器: @@ -55,7 +55,7 @@ nix-channel --add https://github.com/nix-community/home-manager/archive/master.t nix-channel --update ``` -最后,使用下面的命令来安装家庭管理员: +最后,使用下面的命令来安装主目录管理器: ``` nix-shell '' -A install @@ -63,19 +63,19 @@ nix-shell '' -A install 🛠️ 在安装时,可能会出现以下错误: -![安装家庭管理员时出现构建错误][5] +![安装主目录管理器时出现构建错误][5] 重新启动你的系统并再次使用安装命令,它将开始安装。 -一旦完成,它将显示独立安装的家庭管理员的位置: +一旦完成,它将显示独立安装的主目录管理器的位置: -![家庭管理员在NixOS中的位置][6] +![主目录管理器在NixOS中的位置][6] -#### 将家庭管理员安装为 NixOS 模块 +#### 将主目录管理器安装为 NixOS 模块 -> ⚠️ 如果你选择将家庭管理员作为 NixOS 模块使用,你将需要 sudo 权限。 +> ⚠️ 如果你选择将主目录管理器作为 NixOS 模块使用,你将需要 sudo 权限。 -如果你在一个稳定的频道上(在写本文的时候,是 `22.11`),你可以使用下面的命令来添加家庭管理员的稳定频道: +如果你在一个稳定的频道上(在写本文的时候,是 `22.11`),你可以使用下面的命令来添加主目录管理器的稳定频道: ``` sudo nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager @@ -105,7 +105,7 @@ sudo nano /etc/nixos/configuration.nix ``` -![将家庭管理员安装为 NixOS 模块][7] +![将主目录管理器安装为 NixOS 模块][7] 现在,跳到该行的末尾,在 `}` 前添加以下内容: @@ -115,7 +115,7 @@ home-manager.users.{username} = { pkgs, ... }: { }; ``` -![NixOS 配置文件中的家庭管理员模块的格式][8] +![NixOS 配置文件中的主目录管理器模块的格式][8] 上面这一行是为了方便安装和删除软件包而添加的,我接下来会告诉你。 @@ -135,7 +135,7 @@ sudo nixos-rebuild switch 要解决这个问题,你必须在你的家庭管理器块中添加 `home.stateVersion`。 -在写这篇文章时,我正在运行 22.11,所以整个家庭管理员块看起来像这样: +在写这篇文章时,我正在运行 22.11,所以整个主目录管理器块看起来像这样: ``` home-manager.users.{username} = { pkgs, ... }: { @@ -150,11 +150,11 @@ home-manager.users.{username} = { pkgs, ... }: { 现在,试着重建配置并再次进行切换,应该可以解决问题。 -### 如何在 NixOS 上使用家庭管理员安装软件包 +### 如何在 NixOS 上使用主目录管理器安装软件包 -现在你已经安装了家庭管理员,如何用它来安装软件包: +现在你已经安装了主目录管理器,如何用它来安装软件包: -#### 使用独立安装的家庭管理员 +#### 使用独立安装的主目录管理器 首先,用下面的方法打开配置文件: @@ -192,7 +192,7 @@ home.packages = with pkgs; [htop]; 例如,在这里,我想安装 `htop`、`firefox`和 `libreoffice`,所以我的 `home` 块会看起来像这样: -![在 NixOS 上使用家庭管理员安装多个软件包][12] +![在 NixOS 上使用主目录管理器安装多个软件包][12] 一旦你完成了添加你喜欢的软件包,保存配置文件并使用以下命令来安装软件包: @@ -208,7 +208,7 @@ home-manager switch sudo nano /etc/nixos/configuration.nix ``` -在配置部分,我已经添加了家庭管理员块,所以剩下的就是在 `home.packages = [ ];` 里面添加软件包的名称,格式如图所示: +在配置部分,我已经添加了主目录管理器块,所以剩下的就是在 `home.packages = [ ];` 里面添加软件包的名称,格式如图所示: ``` home.packages = [ pkgs.package_name ] ; @@ -222,9 +222,9 @@ home.packages = [ pkgs.package_name ] ; pkgs.htop pkgs.firefox pkgs.libreoffice ``` -然后我的家庭管理员块会看起来像这样: +然后我的主目录管理器块会看起来像这样: -![作为 NixOS 模块在家庭管理员中安装多个软件包][14] +![作为 NixOS 模块在主目录管理器中安装多个软件包][14] 现在,保存修改并退出文本编辑器。 From 3213a87d33681d6b01811eff0c42b2a3c466074b Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 7 Apr 2023 11:14:38 +0800 Subject: [PATCH 80/83] R --- ...️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md index 8e5bf0136d..803ab8363e 100644 --- a/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md +++ b/published/20230321.1 ⭐️⭐️ NixOS Series 5 How to set up home-manager on NixOS.md @@ -7,7 +7,7 @@ [#]: publisher: "wxy" [#]: url: "https://linux.cn/article-15697-1.html" -NixOS 系列 #5:如何在 NixOS 上设置主目录管理器? +NixOS 系列 #5:如何在 NixOS 上设置主目录管理器 ====== 在发表这篇文章之前,我解释了如何为一个单用户系统 [在 NixOS 中安装和删除软件包][1]。 @@ -33,7 +33,7 @@ NixOS 系列 #5:如何在 NixOS 上设置主目录管理器? #### 独立安装的主目录管理器 -如果你使用的是 NixOS 的稳定频道,你可以使用以下命令来配置家庭管理器: +如果你使用的是 NixOS 的稳定频道,你可以使用以下命令来配置主目录管理器: ``` nix-channel --add https://github.com/nix-community/home-manager/archive/release-22.11.tar.gz home-manager @@ -133,7 +133,7 @@ sudo nixos-rebuild switch ![错误: 选项 `home-manager.users.user.home.stateVersion` 已被使用但未被定义。][10] -要解决这个问题,你必须在你的家庭管理器块中添加 `home.stateVersion`。 +要解决这个问题,你必须在你的主目录管理器块中添加 `home.stateVersion`。 在写这篇文章时,我正在运行 22.11,所以整个主目录管理器块看起来像这样: From dc16121a4ff6849503d8381fcbf722c6309c51a0 Mon Sep 17 00:00:00 2001 From: yjacks Date: Fri, 7 Apr 2023 12:19:29 +0800 Subject: [PATCH 81/83] Update 20211202 Edit video on Linux with Kdenlive.md --- sources/tech/20211202 Edit video on Linux with Kdenlive.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/tech/20211202 Edit video on Linux with Kdenlive.md b/sources/tech/20211202 Edit video on Linux with Kdenlive.md index ee30a6ee15..cee5a5f18e 100644 --- a/sources/tech/20211202 Edit video on Linux with Kdenlive.md +++ b/sources/tech/20211202 Edit video on Linux with Kdenlive.md @@ -2,7 +2,7 @@ [#]: via: "https://opensource.com/article/21/12/kdenlive-linux-creative-app" [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lujun9972" -[#]: translator: " " +[#]: translator: "yjacks" [#]: reviewer: " " [#]: publisher: " " [#]: url: " " From 1d3c80fcf6148898a422ff6bbc432464dfa6ccba Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 7 Apr 2023 14:14:05 +0800 Subject: [PATCH 82/83] RP @geekpi https://linux.cn/article-15699-1.html --- ... ⭐️ Write a cute program with Emojicode.md | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) rename {translated/tech => published}/20230401.2 ⭐️ Write a cute program with Emojicode.md (53%) diff --git a/translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md b/published/20230401.2 ⭐️ Write a cute program with Emojicode.md similarity index 53% rename from translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md rename to published/20230401.2 ⭐️ Write a cute program with Emojicode.md index 2401ca883a..534926435c 100644 --- a/translated/tech/20230401.2 ⭐️ Write a cute program with Emojicode.md +++ b/published/20230401.2 ⭐️ Write a cute program with Emojicode.md @@ -3,52 +3,56 @@ [#]: author: "Jessica Cherry https://opensource.com/users/cherrybomb" [#]: collector: "lkxed" [#]: translator: "geekpi" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15699-1.html" 用 Emojicode 写一个可爱的程序 ====== -在这篇文章中,我将介绍一个最好的编码语言,学习如何制作任何东西!它叫做 Emojicode。Emojicode 由 Theo Belaire 在 2014 年创建,是一种开源的编程语言,使用 emoji 字符来表示其语法。在 Emojicode 中工作时,emoji 被用来创建变量、函数和控制结构。因为它是一种静态类型的语言,变量类型必须在使用前声明,但它也支持类和继承等面向对象的概念。这种语言可以在每个操作系统上运行,它是一种超级有趣的编码方式,特别是当你是一个非英语母语的人时。这很有帮助,因为象形图表示法可以把我们大家聚集在一起,让我们以类似数学的方式说同样的语言。 +![][0] + +> 这种有趣的开源语言是学习编码真正的完美选择。 + +在这篇文章中,我将介绍一个最好的编码语言,学习如何制作任何东西!它叫做 Emojicode,是由 Theo Belaire 在 2014 年创建的,它是一种开源的编程语言,使用 emoji 字符来表示其语法。当用 Emojicode 开发时,表情符被用来创建变量、函数和控制结构。因为它是一种静态类型的语言,变量类型必须在使用前声明,但它也支持类和继承等面向对象的概念。这种语言可以在每个操作系统上运行,它是一种超级有趣的编码方式,特别是当你是一个非英语母语的人时。这很有帮助,因为象形表示可以把我们大家聚集在一起,让我们以类似数学的方式说同样的语言。 ### 先决条件 在本教程中,我使用的是基于 Debian 的操作系统。我的工具可能与你的操作系统的要求不同。以下是我所使用的工具: - [Geany][1],一个 Linux 下的开源 IDE。 -- IBus,它允许你挑选 emoji 并把它们放在你的编辑器中。我使用的界面被称为 **emoji picker**。 +- IBus,它允许你挑选表情符并把它们放在你的编辑器中。我使用的界面被称为 **emoji picker**。 - 基于 Debian 的 Linux。 - 一个 C++ 编译器。我使用的是 `g++` 编译器。 - [Emojicode][2] -我使用的是 Linux 操作系统,但你可以[阅读文档][3]了解在其他操作系统上使用它时可能需要采取的任何特殊步骤。 +我使用的是 Linux 操作系统,但你可以 [阅读文档][3] 了解在其他操作系统上使用它时可能需要采取的任何特殊步骤。 ### 在 Linux 上安装 Emojicode -有几种方法可以在你的电脑上安装 Emojicode,但他们有一个很酷的[神奇的安装页面][4],可以告诉你具体该怎么做。下面是我的做法: +有几种方法可以在你的电脑上安装 Emojicode,但它们有一个很酷的 [神奇的安装页面][4],可以告诉你具体该怎么做。下面是我的做法: ``` $ wget https://github.com/emojicode/emojicode/releases/download/v1.0-beta.2/Emojicode-1.0-beta.2-Linux-x86_64.tar.gz -O emojicode.tar.gz \ -&& tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \ -&& cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \ -&& cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64 + && tar -xzf emojicode.tar.gz && rm emojicode.tar.gz \ + && cd Emojicode-1.0-beta.2-Linux-x86_64 && ./install.sh \ + && cd .. && rm -r Emojicode-1.0-beta.2-Linux-x86_64 ``` -emojicode的安装过程提供了有用的反馈。 +Emojicode 的安装过程提供了有用的反馈。 ![The emojicode installation procedure provides useful feedback along the way.][5] 现在,你已经安装好了,是时候开始编写代码了! -### 整体是如何进行的? +### 它是怎么运作的? -首先,所有 Emojicode 文件的扩展名都以文件名.🍇结尾,但因为你不能在一般的文件名中这样做,所以它被翻译成 `filename.emojic`。这里是最重要的语法元素: +首先,所有 Emojicode 文件的扩展名都以文件名 `.🍇` 结尾,但因为你不能在一般的文件名中这样做,所以它被翻译成 `filename.emojic`。这里是最重要的语法元素: -- 把 🏁 放在一行的开头,表示要执行哪些代码块 -- 用 🍇 开始一个代码块 -- 用 🍉 来结束一个代码块 -- 想打印什么吗?就用 😀 🔤 `` 🔤 ❗ +- 把 `🏁` 放在一行的开头,表示要执行哪些代码块 +- 用 `🍇` 开始一个代码块 +- 用 `🍉` 来结束一个代码块 +- 想打印什么吗?就用 `😀 🔤 🔤 ❗` 还有很多其他的,所以这里有一些实际的例子。 @@ -75,7 +79,6 @@ haiku haiku.emojic haiku.o 正如你所看到的,代码已经被编译并生成了两个文件,其中一个是可执行的。运行 `haiku` 文件: - ``` $ ./haiku Emojicode is great, @@ -85,27 +88,27 @@ no sadness, just joy. ### 数学和变量操作 -接下来,你要同时做几件事:一点点数学和变量的改变。首先,将一个变量赋值为0: +接下来,你要同时做几件事:一点点数学和变量的改变。首先,将一个变量赋值为 0: ``` 0 ➡️ 🖍🆕x ``` -你刚刚使用 crayon emoji 和变量名称旁边的新 emoij 创建了一个新变量,同时还将该变量赋值为 0。 +你刚刚使用蜡笔(`🖍`)表情符、新建(`🆕`)表情符和变量名称创建了一个新变量,同时还将该变量赋值为 0。 -接下来,用磁铁的 emoji 打印一行包括该变量的内容: +接下来,用磁铁(`🧲`)表情符打印一行包括该变量的内容: ``` 😀 🔤The value is 🧲x🧲 🔤 ❗ ``` -接下来,使用加号和箭头 emoji 改变变量: +接下来,使用加号(`➕`)和箭头(`⬅️`)表情符改变变量: ``` x ⬅️➕ 1 ``` -然后打印另一行的值。我继续这样做了一会儿,然后打印出最终的数值。下面是我的做法: +然后打印另一行的值。如此这般,然后打印出最终的数值。如下: ``` 🏁 🍇 @@ -140,7 +143,7 @@ The value is 7 The final value is 3 ``` -如你所见,作为变量打印出来的所有内容都已使用新数学进行了更新。你可以用许多数学 emoji 来进一步操作。下面是一些更多的运算符: +如你所见,作为变量打印出来的所有内容都已使用新数学进行了更新。你可以用许多数学表情符来进一步操作。下面是一些更多的运算符: ``` 🚮 is your modulo @@ -166,11 +169,11 @@ The final value is 3 🆕🔡▶️👂🏼❗️ ➡️ inputText ``` -我试图让它工作,但当我发现它时我的编译器出现了一些问题。 你也可能会在这里和那里遇到一些小问题。 如果你遇到了,请创建一个[问题][6],这样它就有可能被修复。 +我试图让它工作,我的编译器出现了一些问题,我发现了这个问题。你也可能会在这里和那里遇到一些小问题。如果你遇到了,请创建一个 [议题][6],这样它就有可能被修复。 ### 没有技巧,只有很棒的代码 -虽然我可以了解更多,但我可以向你保证,这段令人惊叹的代码背后的文档非常广泛。尽管我写这篇文章只是为了赶上愚人节的乐趣,但我不得不承认这是有史以来最好的语言之一,因为它教会了你很多非常真实的编程概念。我恳切地建议把它作为一种有趣的方式来教你的一些朋友、孩子,或者是对编码感兴趣的同学。 希望你度过了一个充满乐趣的愚人节! +虽然我可以介绍更多内容,但我可以向你保证,这段令人惊叹的代码背后的文档非常丰富。尽管我写这篇文章只是为了赶上愚人节的乐趣,但我不得不承认这是有史以来最好的语言之一,因为它教会了你很多非常真实的编程概念。我恳切地建议把它作为一种有趣的方式来教你的一些朋友、孩子,或者是对编码感兴趣的同学。希望你度过了一个充满乐趣的愚人节! -------------------------------------------------------------------------------- @@ -179,7 +182,7 @@ via: https://opensource.com/article/23/4/emojicode 作者:[Jessica Cherry][a] 选题:[lkxed][b] 译者:[geekpi](https://github.com/geekpi) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -191,3 +194,4 @@ via: https://opensource.com/article/23/4/emojicode [4]: https://www.emojicode.org/docs/guides/ [5]: https://opensource.com/sites/default/files/2023-03/emoji.webp [6]: https://github.com/emojicode/emojicode/issues +[0]: https://img.linux.net.cn/data/attachment/album/202304/07/141230yv2s53itmiw45ots.jpg \ No newline at end of file From 0355fcc6b2b815f7ed7172b54878c0577079b600 Mon Sep 17 00:00:00 2001 From: Xingyu Wang Date: Fri, 7 Apr 2023 14:45:00 +0800 Subject: [PATCH 83/83] RP @FYJNEVERFOLLOWS https://linux.cn/article-15700-1.html --- ...5 Open source mind mapping with Draw.io.md | 42 ++++++++----------- 1 file changed, 17 insertions(+), 25 deletions(-) rename {translated/tech => published}/20211205 Open source mind mapping with Draw.io.md (77%) diff --git a/translated/tech/20211205 Open source mind mapping with Draw.io.md b/published/20211205 Open source mind mapping with Draw.io.md similarity index 77% rename from translated/tech/20211205 Open source mind mapping with Draw.io.md rename to published/20211205 Open source mind mapping with Draw.io.md index 248d131e28..5ebb760be7 100644 --- a/translated/tech/20211205 Open source mind mapping with Draw.io.md +++ b/published/20211205 Open source mind mapping with Draw.io.md @@ -3,47 +3,43 @@ [#]: author: "Seth Kenlon https://opensource.com/users/seth" [#]: collector: "lujun9972" [#]: translator: "FYJNEVERFOLLOWS" -[#]: reviewer: " " -[#]: publisher: " " -[#]: url: " " +[#]: reviewer: "wxy" +[#]: publisher: "wxy" +[#]: url: "https://linux.cn/article-15700-1.html" 使用开源思维导图 Draw.io ====== -下次你需要头脑风暴、组织想法或计划项目时,不妨试试 Draw.io -![Looking at a map for career journey][1] +> 下次你需要头脑风暴、组织想法或计划项目时,不妨试试 Draw.io。 -地图有一些特别之处。我记得小时候打开托尔金《*霍比特人*》的封面,盯着手绘的中土世界地图,感受简单的图画中蕴含着丰富的可能性。除了描述事物与其他事物之间的关系这一明显目的外,我认为地图在表达可能性方面做得很好。你可以到户外去,沿着这条路或那条路走,如果你这样做了,去想想你将能够看到的所有新的、令人兴奋的事物。 +![][0] -尽管如此,地图并不一定是有价值和充满可能性的文字。有些地图描述了一个思维过程、计划、算法,甚至是一些随机的想法,这些想法拼命地想要组合成一件潜在的艺术作品。称之为“思维导图”、“流程图”或“创意板”。可以用开源的 [Draw.io][2] 应用程序去很容易地制作。 +地图有一些特别之处。我记得小时候打开托尔金《霍比特人》的封面,盯着手绘的中土世界地图,感受简单的图画中蕴含着丰富的可能性。除了描述事物与其他事物之间的关系这一明显目的外,我认为地图在表达可能性方面做得很好。你可以到户外去,沿着这条路或那条路走,如果你这样做了,去想想你将能够看到的所有新的、令人兴奋的事物。 + +尽管如此,地图并不一定是有价值和充满可能性的文字。有些地图描述了一个思维过程、计划、算法,甚至是一些随机的想法,这些想法拼命地想要组合成一件潜在的艺术作品,它们被称之为“思维导图”、“流程图”或“创意板”。可以用开源的 [Draw.io][2] 应用程序去很容易地制作。 ### 安装 Draw.io -Draw.io 被设计为一个开源的在线应用程序,因此你可以将其作为在线应用程序使用,下载[桌面版本][3],或[克隆 Git 存储库][4]并将其托管在您自己的服务器上。 +Draw.io 是一个开源的在线应用程序,因此你可以将其作为在线应用程序使用,下载 [桌面版本][3],或 [克隆 Git 存储库][4] 并将其托管在你自己的服务器上。 -### 使用 Draw.io 进行映射 -当你第一次启动 Draw.io 时,你需要选择保存数据的位置。如果你自己托管 Draw.io,你的选择取决于你可以访问哪些 API 密钥。你可以从几个在线存储服务中为在线公共实例进行选择,这取决于你的帐户。如果你不想把你的数据存储在别人的服务器上,你也可以选择把你的工作保存在本地存储上。如果你还不确定,可以单击 ``稍后决定`` 继续进入应用程序,而无需选择任何内容。 +### 使用 Draw.io 画图 + +当你第一次启动 Draw.io 时,你需要选择保存数据的位置。如果你自己托管 Draw.io,你的选择取决于你可以访问哪些 API 密钥。你可以从几个在线存储服务中为在线公共实例进行选择,这取决于你的帐户。如果你不想把你的数据存储在别人的服务器上,你也可以选择把你的工作保存在本地存储上。如果你还不确定,可以单击 “稍后决定Decide later” 继续进入应用程序,而无需选择任何内容。 Draw.io 的交互界面中间有一个很大的工作空间,左边是主工具栏,顶部是工具栏,右边是属性面板。 ![Draw.io interface][5] -(Seth Kenlon, [CC BY-SA 4.0][6]) - 工作流程很简单: 1. 从左侧工具栏中选择一个形状。 2. 在工作空间中编辑形状。 3. 添加另一个形状,并连接它们。 - - -重复这个过程,你就得到了一张地图。 +重复这个过程,你就得到了一张图。 ![Draw.io example][7] -(Seth Kenlon, [CC BY-SA 4.0][6]) - ### 项目规划 当你第一次接受一项大任务时,你通常对你想要的结果有一个非常清晰的想法。假设你想开始一个社区项目来画一幅壁画。你想要的结果是一幅壁画。它很容易定义,你可以或多或少地在脑海中描绘出结果。 @@ -53,16 +49,15 @@ Draw.io 的交互界面中间有一个很大的工作空间,左边是主工具 这不仅仅适用于绘制壁画、制作戏剧或电影。它几乎适用于任何不平凡的努力。这正是像 Draw.io 这样的应用程序可以帮助绘制的。 以下是如何使用 Draw.io 创建项目流程图: + 1. 从头脑风暴开始。没有什么想法是太小或太大的。为每个想法制作一个框,然后双击 Draw.io 工作空间中的框以输入文本。 2. 一旦在工作空间中你产生了可能想到的所有想法,就可以将它们拖放到相关的组中。我们的目标是创建一些小任务云或集群,因为它们是同一过程的一部分,所以或多或少会一起进行。 - 3. 一旦你确定了相关任务的集群,就为这些任务命名。例如,如果你正在绘制壁画,那么任务可能是 _approval_、_design_、_purchase_、_paint_,这反映出你需要首先获得当地政府的许可,然后设计壁画,然后购买用品,最后绘制壁画。每个任务都有组成部分,但大体上,你现在已经确定了项目的工作流程。 + 3. 一旦你确定了相关任务的集群,就为这些任务命名。例如,如果你正在绘制壁画,那么任务可能是 “许可”、“设计”、“购买”、“绘制”,这反映出你需要首先获得当地政府的许可,然后设计壁画,然后购买用品,最后绘制壁画。每个任务都有组成部分,但大体上,你现在已经确定了项目的工作流程。 4. 用箭头连接主要任务。并不是所有的过程都是完全线性的。例如,在你获得市议会的许可后,一旦你设计了你打算画的东西,你可能必须回到他们那里进行最终批准。这很正常。这是一个循环,有一些来回,但最终,你会突破这个循环,进入下一阶段。 5. 掌握好你的流程图,完成每一项任务,直到你达到最终目标。 ### 思维导图 - - 思维导图往往不是关于进步,而是关于保持某种状态或对许多想法进行展望。例如,假设你已经决定减少生活中的浪费。你对自己能做什么有一些想法,但你想组织和保存你的想法,这样你就不会忘记它们。 以下是如何使用 Draw.io 创建思维导图: @@ -71,12 +66,8 @@ Draw.io 的交互界面中间有一个很大的工作空间,左边是主工具 2. 将你的想法分组或分类。 3. 可以选择将想法与彼此直接相关的箭头连接起来。 - - ![Draw.io waste reduction example][8] -(Seth Kenlon, [CC BY-SA 4.0][6]) - ### 保存你的图表 你可以将图表保存为 PNG、JPG 图像、Draw.io XML 或纯 XML 文件。如果将其另存为 XML,则可以在 Draw.io 中再次打开它进行进一步编辑。导出的图像非常适合与他人共享。 @@ -92,7 +83,7 @@ via: https://opensource.com/article/21/12/open-source-mind-mapping-drawio 作者:[Seth Kenlon][a] 选题:[lujun9972][b] 译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS) -校对:[校对者ID](https://github.com/校对者ID) +校对:[wxy](https://github.com/wxy) 本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出 @@ -106,3 +97,4 @@ via: https://opensource.com/article/21/12/open-source-mind-mapping-drawio [6]: https://creativecommons.org/licenses/by-sa/4.0/ [7]: https://opensource.com/sites/default/files/uploads/draw-io-example.jpg (Draw.io example) [8]: https://opensource.com/sites/default/files/uploads/draw-io-export.jpg (Draw.io waste reduction example) +[0]: https://img.linux.net.cn/data/attachment/album/202304/07/144214m945y0naawn5zb95.jpg \ No newline at end of file