mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-13 22:30:37 +08:00
Merge remote-tracking branch 'LCTT/master'
This commit is contained in:
commit
631f27d37a
@ -1,28 +1,28 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-12856-1.html)
|
||||
[#]: subject: (How to Install Google Chrome on Fedora [Beginner’s Tutorial])
|
||||
[#]: via: (https://itsfoss.com/install-google-chrome-fedora/)
|
||||
[#]: author: (Dimitrios Savvopoulos https://itsfoss.com/author/dimitrios/)
|
||||
|
||||
如何在 Fedora 上安装 Google Chrome 浏览器(入门教程)
|
||||
如何在 Fedora 上安装 Google Chrome 浏览器
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202011/25/094346ig44av4l4lzh1v7t.jpg)
|
||||
|
||||
Fedora 的默认网页浏览器是 Firefox。尽管它是一个优秀的网络浏览器,你可能更喜欢流行的 Google Chrome 浏览器。
|
||||
|
||||
如果你想知道如何在 Fedora 上安装 Google Chrome 浏览器,让我告诉你两种安装 Google Chrome 浏览器的方法:图形化法和命令行法。
|
||||
如果你想知道如何在 Fedora 上安装 Google Chrome 浏览器,让我告诉你两种安装 Google Chrome 浏览器的方式:图形化方式和命令行方式。
|
||||
|
||||
* [图形化方法 1:通过启用 Fedora 第三方仓库从软件中心安装 Chrom e浏览器][1] 。
|
||||
* [图形化方法 2:从谷歌浏览器网站下载 RPM 文件][2]
|
||||
* [命令行方法:从 Fedora 第三方仓库安装 Chrome,一切使用命令(与 GUI 方法 1 相同)][3]。
|
||||
* [图形化方式 1:通过启用 Fedora 第三方仓库从软件中心安装 Chrome 浏览器][1]
|
||||
* [图形化方式 2:从谷歌浏览器网站下载 RPM 文件][2]
|
||||
* [命令行方式:从 Fedora 第三方仓库安装 Chrome,一切使用命令(与 GUI 方式 1 相同)][3]
|
||||
|
||||
这全取决于你喜欢哪种方式。你在 [Fedora][4] 上的 Google Chrome 浏览器都将通过这三种方式的系统更新获取定期更新。
|
||||
|
||||
|
||||
这全取决于你喜欢哪种方法。你在 [Fedora][4] 上的 Google Chrome 浏览器都将通过这三种方法的系统更新获取定期更新。
|
||||
|
||||
### 方法 1:在 Fedora 中从软件中心安装 Google Chrome
|
||||
### 方式 1:在 Fedora 中从软件中心安装 Google Chrome
|
||||
|
||||
Fedora 提供了一个第三方仓库,其中包含了一些流行的专有软件、图形驱动程序。Google Chrome 就是其中之一。
|
||||
|
||||
@ -38,16 +38,15 @@ Fedora 提供了一个第三方仓库,其中包含了一些流行的专有软
|
||||
|
||||
![Step 3: Install Chrome Fedora][7]
|
||||
|
||||
Can it be any easier than this? I don’t think either :)
|
||||
还有比这更简单的吗?我不这么认为 :)
|
||||
还有比这更简单的吗?我觉得没有。
|
||||
|
||||
### 方法 2:在 Fedora 上从 Chrome 网站安装 Google Chrome
|
||||
### 方式 2:在 Fedora 上从 Chrome 网站安装 Google Chrome
|
||||
|
||||
如果你不想启用第三方仓库,也没关系。你不必这样做。你可以从 Chrome 的网站上下载 RPM 文件,双击并安装它。
|
||||
|
||||
访问 Google Chrome 的网站,点击下载按钮。
|
||||
|
||||
[Get Google Chrome][8]
|
||||
- [获取 Google Chrome][8]
|
||||
|
||||
![][9]
|
||||
|
||||
@ -59,11 +58,11 @@ Can it be any easier than this? I don’t think either :)
|
||||
|
||||
![][11]
|
||||
|
||||
这是超级简单的,对吧?让我们来看看有点复杂的方法(如果你不是一个终端爱好者)。
|
||||
这是超级简单的,对吧?让我们来看看有点复杂的方式(如果你不是一个终端爱好者)。
|
||||
|
||||
### 方法 3:使用命令行在 Fedora 上安装 Chrome
|
||||
### 方式 3:使用命令行在 Fedora 上安装 Chrome
|
||||
|
||||
首先,你需要添加额外的 Fedora 仓库(你在方法 1 中看到的):
|
||||
首先,你需要添加额外的 Fedora 仓库(你在方式 1 中看到的):
|
||||
|
||||
```
|
||||
sudo dnf install fedora-workstation-repositories
|
||||
@ -83,20 +82,18 @@ sudo dnf config-manager --set-enabled google-chrome
|
||||
sudo dnf install google-chrome-stable
|
||||
```
|
||||
|
||||
你会看到一个导入 GPG 密钥的警告,输入 y 继续。
|
||||
你会看到一个导入 GPG 密钥的警告,输入 `y` 继续。
|
||||
|
||||
![][13]
|
||||
|
||||
你正在添加 Google Chrome 仓库。这个软件包来自这个仓库,它直接来自 Google。
|
||||
|
||||
#### 总结
|
||||
### 总结
|
||||
|
||||
即使你使用命令行,在 Fedora 上安装 Google chrome 也相当简单。除了第三方仓库的部分,这和[在 Ubuntu 上安装 Chrome][14] 差不多。
|
||||
|
||||
现在你已经安装好了,你可能会想[查看我们的 Google Chrome 键盘快捷键列表][15]来更快地使用浏览器。
|
||||
|
||||
不要忘记订阅,获取关于 Fedora 的最新消息和教程,如果你有任何问题,请在下方留言。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-google-chrome-fedora/
|
||||
@ -104,7 +101,7 @@ via: https://itsfoss.com/install-google-chrome-fedora/
|
||||
作者:[Dimitrios Savvopoulos][a]
|
||||
选题:[lujun9972][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/) 荣誉推出
|
||||
|
@ -1,30 +1,32 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-12858-1.html)
|
||||
[#]: subject: (LazPaint: A Free & Open Source Paint.NET Alternative)
|
||||
[#]: via: (https://itsfoss.com/lazpaint/)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
LazPaint:一个免费和开源的 Paint.NET 替代品
|
||||
LazPaint:一个自由开源的 Paint.NET 替代品
|
||||
======
|
||||
|
||||
_**简介:LazPaint 是一款开源 Paint.NET 替代品,支持跨平台。它是一个轻量级的程序,拥有一堆快速编辑图像的基本选项。下面是 LazPaint 的概述。**_
|
||||
![](https://img.linux.net.cn/data/attachment/album/202011/25/120828b330z4cem3i030tl.jpg)
|
||||
|
||||
> LazPaint 是一款开源 Paint.NET 替代品,支持跨平台。它是一个轻量级的程序,拥有一堆快速编辑图像的基本选项。下面是 LazPaint 的概述。
|
||||
|
||||
### LazPaint:Linux 下的开源 Paint.NET 替代品
|
||||
|
||||
![][1]
|
||||
|
||||
如果你喜欢使用工具来快速编辑和处理图像和截图,你可能听说过 [Paint.NET][2],它只适用于 Windows 系统。
|
||||
如果你喜欢使用工具来快速编辑和处理图像和截图,你可能听说过 [Paint.NET][2],但它只适用于 Windows 系统。
|
||||
|
||||
它是一个流行的小工具,可以完成很多基本的编辑任务,同时还有一堆可用的选项。你可能知道一些[图像编辑工具][3],但 Paint.NET 是一个相当受欢迎的选择,因为对于一个普通用户来说,它易于使用,且没有任何臃肿的功能。
|
||||
|
||||
[LazPaint][4]成为了 Linux、Windows 和 macOS 上 Paint.NET 的令人印象深刻的开源替代品。它提供了操作图像所需的大部分基本功能,同时又易于使用。
|
||||
[LazPaint][4]作为 Linux、Windows 和 macOS 上 Paint.NET 的令人印象深刻的开源替代品而出现。它提供了操作图像所需的大部分基本功能,同时又易于使用。
|
||||
|
||||
![][5]
|
||||
|
||||
由于它是跨平台的应用,即使你不使用 Linux 系统,你仍然可以使用它作为免费的开源工具。 现在,让我们看一下它提供的一些功能。
|
||||
由于它是跨平台的应用,即使你不使用 Linux 系统,你仍然可以以自由开源工具使用它,这并非没有意义。现在,让我们看一下它提供的一些功能。
|
||||
|
||||
### LazPaint 的功能
|
||||
|
||||
@ -32,14 +34,14 @@ _**简介:LazPaint 是一款开源 Paint.NET 替代品,支持跨平台。它
|
||||
|
||||
正如我前面提到的,LazPaint 提供了一堆必要的功能。在这里,我将列出关键的部分,这可以帮助你决定是否需要它。然而,我建议你去探索它,以了解更多关于它的信息。
|
||||
|
||||
* 支持所有主要的文件格式(包括分层 Bitmap 和 3D 文件)
|
||||
* 选区工具、裁剪选区、选区笔、反转选区。
|
||||
* 支持导出到 [Krita][7]。
|
||||
* 用各种质量设置对图像进行重新采样
|
||||
* 运动模糊、自定义模糊、径向模糊和像素化工具。
|
||||
* 可以移除透明度和扁平化图像。
|
||||
* 支持所有主要的文件格式(包括分层位图和 3D 文件)
|
||||
* 选区工具、裁剪选区、选区笔、反转选区
|
||||
* 支持导出到 [Krita][7]
|
||||
* 以各种质量设置对图像进行重新采样
|
||||
* 运动模糊、自定义模糊、径向模糊和像素化工具
|
||||
* 可以移除透明度和扁平化图像
|
||||
* 旋转和翻转图像
|
||||
* 将图像转换为底片
|
||||
* 将图像转换为负片
|
||||
* 能够调整画布的大小
|
||||
* 变形工具(透视)
|
||||
* 高级绘图工具
|
||||
@ -54,17 +56,17 @@ _**简介:LazPaint 是一款开源 Paint.NET 替代品,支持跨平台。它
|
||||
|
||||
### 在 Linux 上安装 LazPaint
|
||||
|
||||
你应该可以在你的官方软件仓库中找到它,通过你的默认软件包管理器来安装它,但要获得最新版本,你需要下载 .**deb** 文件,或者在非 Debian 的发行版上从源码编译它。
|
||||
你应该可以在你的官方软件仓库中找到它,通过你的默认软件包管理器来安装它,但要获得最新版本,你需要下载 .deb 文件,或者在非 Debian 的发行版上从源码编译它。
|
||||
|
||||
我希望有一个 Flatpak 可以在每个 Linux 发行版上获得最新的版本,但目前还没有。
|
||||
我希望有一个可以在每个 Linux 发行版上获得最新的版本的 Flatpak 软件包,但目前还没有。
|
||||
|
||||
它也适用于 Windows 和 macOS。你会发现 Windows 还有一个便携版,可以派上用场。
|
||||
|
||||
[LazPaint][4]
|
||||
- [LazPaint][4]
|
||||
|
||||
### 关于 LazPaint 的总结
|
||||
|
||||
我发现它真的很容易使用,各种质量设置来重新采样(或调整大小)图像绝对是一个加分。如果你已经安装了它,你一定注意到,它不需要大量的存储空间,总体上是一个轻量级的程序。
|
||||
我发现它真的很容易使用,以各种质量设置来重新采样(或调整大小)图像绝对是一个加分项。如果你已经安装了它,你一定注意到,它不需要大量的存储空间,总体上是一个轻量级的程序。
|
||||
|
||||
它的速度很快,我在快速测试中的大部分功能都相当好用,没有任何问题。
|
||||
|
||||
@ -77,7 +79,7 @@ via: https://itsfoss.com/lazpaint/
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][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/) 荣誉推出
|
||||
|
182
sources/tech/20200508 Metaphors in man pages.md
Normal file
182
sources/tech/20200508 Metaphors in man pages.md
Normal file
@ -0,0 +1,182 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Metaphors in man pages)
|
||||
[#]: via: (https://jvns.ca/blog/2020/05/08/metaphors-in-man-pages/)
|
||||
[#]: author: (Julia Evans https://jvns.ca/)
|
||||
|
||||
Metaphors in man pages
|
||||
======
|
||||
|
||||
This morning I was watching a [great talk by Maggie Appleton][1] about metaphors. In the talk, she explains the difference between a “figurative metaphor” and a “cognitive metaphor”, and references this super interesting book called [Metaphors We Live By][2] which I immediately got and started reading.
|
||||
|
||||
Here’s an example from “Metaphors We Live By” of a bunch of metaphors we use for ideas:
|
||||
|
||||
* ideas as **food**: “_raw_ facts”, “_half-baked_ ideas”, “_swallow_ that claim”, “_spoon-feed_ our students”, “_meaty_ part of the paper”, “that idea has been _fermenting_ for years”
|
||||
* ideas as **people**: “the theory of relativity _gave birth_ to an enormous number of ideas”, “whose _brainchild_ was that”, “those ideas _died off_ in the middle ages”, “cognitive psychology is in its _infancy_“
|
||||
* ideas as **products**: “we’ve _generated_ a lot of ideas this week”, “it needs to be _refined_”, “his _intellectual productivity_ has decreased in recent years”
|
||||
* ideas as **commodities**: “he won’t _buy_ that”, “that’s a _worthless_ idea”, “she has _valuable_ ideas”
|
||||
* ideas as **resources**: “he _ran out_ of ideas”, “let’s _pool_ our ideas”, “that idea will _go a long way_“
|
||||
* ideas as **cutting instruments**: “that’s an _incisive_ idea”, “that _cuts right to the heart_ of the matter”, “he’s _sharp_“
|
||||
* ideas as **fashions**: “that idea _went out of style_ years ago”, “marxism is _fashionable_ in western europe”, “berkeley is a center of _avant-garde_ thought”, “semiotics has become quite _chic_“
|
||||
|
||||
|
||||
|
||||
There’s a [long list of more English metaphors here][3], including many metaphors from the book.
|
||||
|
||||
I was surprised that there were so many different metaphors for ideas, and that we’re using metaphors like this all the time in normal language.
|
||||
|
||||
### let’s look for metaphors in man pages!
|
||||
|
||||
Okay, let’s get to the point of this blog post, which is just a small fun exploration – there aren’t going to be any Deep Programming Insights here.
|
||||
|
||||
I went through some of the examples of metaphors in Metaphors To Live By and grepped all the man pages on my computer for them.
|
||||
|
||||
### processes as people
|
||||
|
||||
This is one of the richer categories – a lot of different man pages seem to agree that processes are people, or at least alive in some way.
|
||||
|
||||
* Hangup detected on controlling terminal or **death** of controlling process (`man 7 signal`)
|
||||
* can access the local **agent** through the forwarded connection (`man ssh_config`)
|
||||
* If the exit of the process causes a process group to become **orphaned** (`man exit`)
|
||||
* If a parent process terminates, then its **“zombie” children** (if any) (`man wait`)
|
||||
* … send SIGHUP to the **parent** process of the client (`man tmux`)
|
||||
* Otherwise, it **“runs” to catch up** or waits (`man mplayer`)
|
||||
* However, Git does not (and it should not) change tags **behind users back** (`man git-tag`)
|
||||
* will **listen** forever for a connection (`man nc_openbsd`)
|
||||
* this monitor scales badly with the number of files being **observed** (`man fswatch`)
|
||||
* If you try to use the **birth** time of a reference file (`man file`)
|
||||
* a program **died** due to a fatal signal (`man xargs`)
|
||||
* protocol version in the TLS **handshake** (`man curl`)
|
||||
* it will **look for** a debug object at… (`man valgrind`)
|
||||
|
||||
|
||||
|
||||
### data as food
|
||||
|
||||
* “Apparently some digital cameras get **indigestion** if you feed them a CF card) (`man mkfs`)
|
||||
* “Send packets using **raw** ethernet frames or IP packets” (`man nmap`)
|
||||
* “the above example can be thought of as a maximizing repeat that must **swallow** everything it can” (`man pcrepattern`)
|
||||
* “This will allow you to **feed** newline-delimited name=value pairs to the script on’ (`man CGI`)
|
||||
|
||||
|
||||
|
||||
### data as objects
|
||||
|
||||
* Kill the tmux server and clients and **destroy** all sessions (`tmux`)
|
||||
* Each command will produce one **block** of output on standard output. (`man tmux`)
|
||||
* “HTTPS guarantees that the password will not **travel** in the clear” (`man Net::SSLeay`)
|
||||
* “way to **pack** more than one certificate into an ASN.1 structure” (`man gpgsm`)
|
||||
|
||||
|
||||
|
||||
### processes as machines/objects
|
||||
|
||||
* “This is **fragile**, subject to change, and thus should not be relied upon” (`man ps`)
|
||||
* “This is useful if you have to use **broken** DNS” (`man aria2c`)
|
||||
* “This provides good safety measures, but **breaks down** when” (`man git-apply`)
|
||||
* “debugfs is a debugging tool. It has **rough edges**!” (`man debugfs`)
|
||||
|
||||
|
||||
|
||||
### containers
|
||||
|
||||
There are LOTS of containers: directories, files, strings, caches, queues, buffers, etc.
|
||||
|
||||
* can exploit that to **get out** of the chroot directory (`man chroot`)
|
||||
* “The file **containing** the RFC 4648 Section 5 base64url encoded 128-bit secret key”
|
||||
* “Keys must start with a lowercase character and **contain** only hyphens”
|
||||
* “just specify an **empty** string” (`man valgrind`)
|
||||
* “the cache is **full** and a new page that isn’t cached becomes visible” (`man zathurarc`)
|
||||
* “Number of table **overflows**” (`man lnstat`)
|
||||
* “likely **overflow** the buffer” (`man g++`)
|
||||
|
||||
|
||||
|
||||
### resources
|
||||
|
||||
There are also lots of kinds of resources: bandwidth, TCP sockets, session IDs, stack space, memory, disk space.
|
||||
|
||||
* This is not recommended and **wastes** bitrate (`man bitrate`)
|
||||
* corruption or **lost** data if the system crashes (`man btree`)
|
||||
* you don’t want Wget to **consume** the entire available bandwidth (`man wget`)
|
||||
* Larger values will be slower and cause x264 to **consume** more memory (`man mplayer`)
|
||||
* the resulting file can **consume** some disk space (`man socat`)
|
||||
* attempting to **reuse** SSL session-ID (`man curl`)
|
||||
* This option controls stack space **reuse** (`man gcc`)
|
||||
* Keep the TCP socket open between queries and **reuse** it rather than creating a new TCP socket (`man dig`)
|
||||
* the maximum value will easily **eat up** three extra gigabytes or so of memory (`man valgrind`)
|
||||
|
||||
|
||||
|
||||
### orientation (up, down, above, below)
|
||||
|
||||
* Send the escape character to the **frontend** (`man qemu-system`)
|
||||
* Note that TLS 1.3 is only supported by a subset of TLS **backends** (`man curl`)
|
||||
* This option may be useful if you are **behind** a router (`man mplayer`)
|
||||
* When a file that exists on the **lower** layer is renamed (`man rename`)
|
||||
* Several of the socket options should be handled at **lower** levels (`man getsockopt`)
|
||||
* while still performing such **higher** level functionality (`man nmap`)
|
||||
* This is the same string passed **back to** the front end (`man sudo_plugin`)
|
||||
* On Linux, `futimens` is a library function implemented **on top** of the `utimensat` system call (`man futimens`)
|
||||
|
||||
|
||||
|
||||
### buildings
|
||||
|
||||
Limits as rooms/buildings (which have floors, and ceilings, which you hit) are kind of fun:
|
||||
|
||||
* the kernel places a **floor** of 32 pages on this size limit (`man execve`)
|
||||
* This specifies a **ceiling** to which the process’s nice value can be raised (`man getrlimit`)
|
||||
* If this limit is **hit** the search is aborted (`man gcc`)
|
||||
* these libraries are used as the **foundation** for many of the libraries (`man Glib`)
|
||||
|
||||
|
||||
|
||||
### money / wealth
|
||||
|
||||
* This is a very **expensive** operation for large projects, so use it with caution (`man git-log`)
|
||||
* Note that since this operation is very I/O **expensive** (`man git-filter-branch`)
|
||||
* provides a **rich** interface for scripts to print disk layouts (`man fdisk`)
|
||||
* The number of times the softirq handler function terminated per second because its **budget** was consumed (`man sar.sysstat`)
|
||||
* the extra **cost** depends a lot on the application at hand (`man valgrind`)
|
||||
|
||||
|
||||
|
||||
### more miscellaneous metaphors
|
||||
|
||||
here are some more I found that didn’t fit into any of those categories yet.
|
||||
|
||||
* when a thread is created under glibc, just one **big** lock is used for all thread setup (`man valgrind`)
|
||||
* will likely **drop** the connection (`man x11vnc`)
|
||||
* on all **paths** from the load to the function entry (`man gcc`)
|
||||
* it is a very good idea to **wipe** filesystem signatures, data, etc. before (`man cryptsetup`)
|
||||
* they will be **embedded** into the document
|
||||
* the client should automatically **follow** referrals returned
|
||||
* even if there exist mappings that **cover** the whole address space requested (`man mremap`)
|
||||
* when a network interface **disappears** (`man systemd-resolve`)
|
||||
|
||||
|
||||
|
||||
### we’re all using metaphors all the time
|
||||
|
||||
I found a lot more metaphors than I expected, and most of them are just part of how I’d normally talk about a program. Interesting!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2020/05/08/metaphors-in-man-pages/
|
||||
|
||||
作者:[Julia Evans][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://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.youtube.com/watch?v=K8MF3aDg-bM&feature=youtu.be&t=14991
|
||||
[2]: https://www.goodreads.com/book/show/34459.Metaphors_We_Live_By
|
||||
[3]: https://metaphor.icsi.berkeley.edu/pub/en/index.php/Category:Metaphor
|
236
sources/tech/20200617 What happens when you update your DNS.md
Normal file
236
sources/tech/20200617 What happens when you update your DNS.md
Normal file
@ -0,0 +1,236 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (What happens when you update your DNS?)
|
||||
[#]: via: (https://jvns.ca/blog/how-updating-dns-works/)
|
||||
[#]: author: (Julia Evans https://jvns.ca/)
|
||||
|
||||
What happens when you update your DNS?
|
||||
======
|
||||
|
||||
I’ve seen a lot of people get confused about updating their site’s DNS records to change the IP address. Why is it slow? Do you really have to wait 2 days for everything to update? Why do some people see the new IP and some people see the old IP? What’s happening?
|
||||
|
||||
So I wanted to write a quick exploration of what’s happening behind the scenes when you update a DNS record.
|
||||
|
||||
### how DNS works: recursive vs authoritative DNS servers
|
||||
|
||||
First, we need to explain a little bit about DNS. There are 2 kinds of DNS servers: **authoritative** and **recursive**.
|
||||
|
||||
**authoritative** DNS servers (also known as **nameservers**) have a database of IP addresses for each domain they’re responsible for. For example, right now an authoritative DNS server for github.com is ns-421.awsdns-52.com. You can ask it for github.com’s IP like this;
|
||||
|
||||
```
|
||||
dig @ns-421.awsdns-52.com github.com
|
||||
```
|
||||
|
||||
**recursive** DNS servers, by themselves, don’t know anything about who owns what IP address. They figure out the IP address for a domain by asking the right authoritative DNS servers, and then cache that IP address in case they’re asked again. 8.8.8.8 is a recursive DNS server.
|
||||
|
||||
When people visit your website, they’re probably making their DNS queries to a recursive DNS server. So, how do recursive DNS servers work? Let’s see!
|
||||
|
||||
### how does a recursive DNS server query for github.com?
|
||||
|
||||
Let’s go through an example of what a recursive DNS server (like 8.8.8.8) does when you ask it for an IP address (A record) for github.com. First – if it already has something cached, it’ll give you what it has cached. But what if all of its caches are expired? Here’s what happens:
|
||||
|
||||
**step 1**: it has IP addresses for the root DNS servers hardcoded in its source code. You can see this in [unbound’s source code here][1]. Let’s say it picks `198.41.0.4` to start with. Here’s the [official source][2] for those hardcoded IP addresses, also known as a “root hints file”.
|
||||
|
||||
**step 2**: Ask the root nameservers about `github.com`.
|
||||
|
||||
We can roughly reproduce what happens with `dig`. What this gives us is a new authoritative nameserver to ask: a nameserver for `.com`, with the IP `192.5.6.30`.
|
||||
|
||||
```
|
||||
$ dig @198.41.0.4 github.com
|
||||
...
|
||||
com. 172800 IN NS a.gtld-servers.net.
|
||||
...
|
||||
a.gtld-servers.net. 172800 IN A 192.5.6.30
|
||||
...
|
||||
```
|
||||
|
||||
The details of the DNS response are a little more complicated than that – in this case, there’s an authority section with some NS records and an additional section with A records so you don’t need to do an extra lookup to get the IP addresses of those nameservers.
|
||||
|
||||
(in practice, 99.99% of the time it’ll already have the address of the `.com` nameservers cached, but we’re pretending we’re really starting from scratch)
|
||||
|
||||
**step 3**: Ask the `.com` nameservers about `github.com`.
|
||||
|
||||
```
|
||||
$ dig @192.5.6.30 github.com
|
||||
...
|
||||
github.com. 172800 IN NS ns-421.awsdns-52.com.
|
||||
ns-421.awsdns-52.com. 172800 IN A 205.251.193.165
|
||||
...
|
||||
```
|
||||
|
||||
We have a new IP address to ask! This one is the nameserver for `github.com`.
|
||||
|
||||
**step 4**: Ask the `github.com` nameservers about `github.com`.
|
||||
|
||||
We’re almost done!
|
||||
|
||||
```
|
||||
$ dig @205.251.193.165 github.com
|
||||
|
||||
github.com. 60 IN A 140.82.112.4
|
||||
```
|
||||
|
||||
Hooray!! We have an `A` record for `github.com`! Now the recursive nameserver has `github.com`’s IP address and can return it back to you. And it could do all of this by only hardcoding a few IP addresses: the addresses of the root nameservers.
|
||||
|
||||
### how to see all of a recursive DNS server’s steps: `dig +trace`
|
||||
|
||||
When I want to see what a recursive DNS server would do when resolving a domain, I run
|
||||
|
||||
```
|
||||
$ dig @8.8.8.8 +trace github.com
|
||||
```
|
||||
|
||||
This shows all the DNS records that it requests, starting at the root DNS servers – all the 4 steps that we just went through.
|
||||
|
||||
### let’s update some DNS records!
|
||||
|
||||
Now that we know the basics of how DNS works, let’s update some DNS records and see what happens.
|
||||
|
||||
When you update your DNS records, there are two main options:
|
||||
|
||||
1. keep the same nameservers
|
||||
2. change nameservers
|
||||
|
||||
|
||||
|
||||
### let’s talk about TTLs
|
||||
|
||||
We’ve forgotten something important though! TTLs! You know how we said earlier that the recursive DNS server will cache records until they expire? The way it decides whether the record should expire is by looking at its **TTL** or “time to live”.
|
||||
|
||||
In this example, the TTL for the A record github’s nameserver returns for its DNS record is `60`, which means 60 seconds:
|
||||
|
||||
```
|
||||
$ dig @205.251.193.165 github.com
|
||||
|
||||
github.com. 60 IN A 140.82.112.4
|
||||
```
|
||||
|
||||
That’s a pretty short TTL, and _in theory_ if everybody’s DNS implementation followed the [DNS standard][3] it means that if Github decided to change the IP address for `github.com`, everyone should get the new IP address within 60 seconds. Let’s see how that plays out in practice
|
||||
|
||||
### option 1: update a DNS record on the same nameservers
|
||||
|
||||
First, I updated my nameservers (Cloudflare) to have a new DNS record: an A record that maps `test.jvns.ca` to `1.2.3.4`.
|
||||
|
||||
```
|
||||
$ dig @8.8.8.8 test.jvns.ca
|
||||
test.jvns.ca. 299 IN A 1.2.3.4
|
||||
```
|
||||
|
||||
This worked immediately! There was no need to wait at all, because there was no `test.jvns.ca` DNS record before that could have been cached. Great. But it looks like the new record is cached for ~5 minutes (299 seconds).
|
||||
|
||||
So, what if we try to change that IP? I changed it to `5.6.7.8`, and then ran the same DNS query.
|
||||
|
||||
```
|
||||
$ dig @8.8.8.8 test.jvns.ca
|
||||
test.jvns.ca. 144 IN A 1.2.3.4
|
||||
```
|
||||
|
||||
Hmm, it seems like that DNS server has the `1.2.3.4` record still cached for another 144 seconds. Interestingly, if I query `8.8.8.8` multiple times I actually get inconsistent results – sometimes it’ll give me the new IP and sometimes the old IP, I guess because 8.8.8.8 actually load balances to a bunch of different backends which each have their own cache.
|
||||
|
||||
After I waited 5 minutes, all of the `8.8.8.8` caches had updated and were always returning the new `5.6.7.8` record. Awesome. That was pretty fast!
|
||||
|
||||
### you can’t always rely on the TTL
|
||||
|
||||
As with most internet protocols, not everything obeys the DNS specification. Some ISP DNS servers will cache records for longer than the TTL specifies, like maybe for 2 days instead of 5 minutes. And people can always hardcode the old IP address in their /etc/hosts.
|
||||
|
||||
What I’d expect to happen in practice when updating a DNS record with a 5 minute TTL is that a large percentage of clients will move over to the new IPs quickly (like within 15 minutes), and then there will be a bunch of stragglers that slowly update over the next few days.
|
||||
|
||||
### option 2: updating your nameservers
|
||||
|
||||
So we’ve seen that when you update an IP address without changing your nameservers, a lot of DNS servers will pick up the new IP pretty quickly. Great. But what happens if you change your nameservers? Let’s try it!
|
||||
|
||||
I didn’t want to update the nameservers for my blog, so instead I went with a different domain I own and use in the examples for the [HTTP zine][4]: `examplecat.com`.
|
||||
|
||||
Previously, my nameservers were set to dns1.p01.nsone.net. I decided to switch them over to Google’s nameservers – `ns-cloud-b1.googledomains.com` etc.
|
||||
|
||||
When I made the change, my domain registrar somewhat ominiously popped up the message – “Changes to examplecat.com saved. They’ll take effect within the next 48 hours”. Then I set up a new A record for the domain, to make it point to `1.2.3.4`
|
||||
|
||||
Okay, let’s see if that did anything
|
||||
|
||||
```
|
||||
$ dig @8.8.8.8 examplecat.com
|
||||
examplecat.com. 17 IN A 104.248.50.87
|
||||
```
|
||||
|
||||
No change. If I ask a different DNS server, it knows the new IP:
|
||||
|
||||
```
|
||||
$ dig @1.1.1.1 examplecat.com
|
||||
examplecat.com. 299 IN A 1.2.3.4
|
||||
```
|
||||
|
||||
but 8.8.8.8 is still clueless. The reason 1.1.1.1 sees the new IP even though I just changed it 5 minutes ago is presumably that nobody had ever queried 1.1.1.1 about examplecat.com before, so it had nothing in its cache.
|
||||
|
||||
### nameserver TTLs are much longer
|
||||
|
||||
The reason that my registrar was saying “THIS WILL TAKE 48 HOURS” is that the TTLs on NS records (which are how recursive nameservers know which nameserver to ask) are MUCH longer!
|
||||
|
||||
The new nameserver is definitely returning the new IP address for `examplecat.com`
|
||||
|
||||
```
|
||||
$ dig @ns-cloud-b1.googledomains.com examplecat.com
|
||||
examplecat.com. 300 IN A 1.2.3.4
|
||||
```
|
||||
|
||||
But remember what happened when we queried for the `github.com` nameservers, way back?
|
||||
|
||||
```
|
||||
$ dig @192.5.6.30 github.com
|
||||
...
|
||||
github.com. 172800 IN NS ns-421.awsdns-52.com.
|
||||
ns-421.awsdns-52.com. 172800 IN A 205.251.193.165
|
||||
...
|
||||
```
|
||||
|
||||
172800 seconds is 48 hours! So nameserver updates will in general take a lot longer to expire from caches and propagate than just updating an IP address without changing your nameserver.
|
||||
|
||||
### how do your nameservers get updated?
|
||||
|
||||
When I update the nameservers for `examplecat.com`, what happens is that he `.com` nameserver gets a new `NS` record with the new domain. Like this:
|
||||
|
||||
```
|
||||
dig ns @j.gtld-servers.net examplecat.com
|
||||
|
||||
examplecat.com. 172800 IN NS ns-cloud-b1.googledomains.com
|
||||
```
|
||||
|
||||
But how does that new NS record get there? What happens is that I tell my **domain registrar** what I want the new nameservers to be by updating it on the website, and then my domain registrar tells the `.com` nameservers to make the update.
|
||||
|
||||
For `.com`, these updates happen pretty fast (within a few minutes), but I think for some other TLDs the TLD nameservers might not apply updates as quickly.
|
||||
|
||||
### your program’s DNS resolver library might also cache DNS records
|
||||
|
||||
One more reason TTLs might not be respected in practice: many programs need to resolve DNS names, and some programs will also cache DNS records indefinitely in memory (until the program is restarted).
|
||||
|
||||
For example, AWS has an article on [Setting the JVM TTL for DNS Name Lookups][5]. I haven’t written that much JVM code that does DNS lookups myself, but from a little Googling about the JVM and DNS it seems like you can configure the JVM so that it caches every DNS lookup indefinitely. (like [this elasticsearch issue][6])
|
||||
|
||||
### that’s all!
|
||||
|
||||
I hope this helps you understand what’s going on when updating your DNS!
|
||||
|
||||
As a disclaimer, again – TTLs definitely don’t tell the whole story about DNS propagation – some recursive DNS servers definitely don’t respect TTLs, even if the major ones like 8.8.8.8 do. So even if you’re just updating an A record with a short TTL, it’s very possible that in practice you’ll still get some requests to the old IP for a day or two.
|
||||
|
||||
Also, I changed the nameservers for `examplecat.com` back to their old values after publishing this post.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/how-updating-dns-works/
|
||||
|
||||
作者:[Julia Evans][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://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://github.com/NLnetLabs/unbound/blob/6e0756e819779d9cc2a14741b501cadffe446c93/iterator/iter_hints.c#L131
|
||||
[2]: https://www.iana.org/domains/root/files
|
||||
[3]: https://tools.ietf.org/html/rfc1035
|
||||
[4]: https://wizardzines.com/zines/http/
|
||||
[5]: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-jvm-ttl.html
|
||||
[6]: https://github.com/elastic/elasticsearch/issues/16412
|
@ -0,0 +1,93 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to rebase to Fedora 33 on Silverblue)
|
||||
[#]: via: (https://fedoramagazine.org/how-to-rebase-to-fedora-33-on-silverblue/)
|
||||
[#]: author: (Michal Konečný https://fedoramagazine.org/author/zlopez/)
|
||||
|
||||
How to rebase to Fedora 33 on Silverblue
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
Silverblue is [an operating system for your desktop built on Fedora][2]. It’s excellent for daily use, development, and container-based workflows. It offers [numerous advantages][3] such as being able to roll back in case of any problems. If you want to update to Fedora 33 on your Silverblue system, this article tells you how. It not only shows you what to do, but also how to revert things if something unforeseen happens.
|
||||
|
||||
Prior to actually doing the rebase to Fedora 33, you should apply any pending updates. Enter the following in the terminal:
|
||||
|
||||
```
|
||||
$ rpm-ostree update
|
||||
```
|
||||
|
||||
or install updates through GNOME Software and reboot.
|
||||
|
||||
### Rebasing using GNOME Software
|
||||
|
||||
The GNOME Software shows you that there is new version of Fedora available on the Updates screen.
|
||||
|
||||
![Fedora 33 is available][4]
|
||||
|
||||
First thing you need to do is to download the new image, so click on the _Download_ button. This will take some time and after it’s done you will see that the update is ready to install.
|
||||
|
||||
![Fedora 33 is ready for installation][5]
|
||||
|
||||
Click on the _Install_ button. This step will take only a few moments and then you will be prompted to restart your computer.
|
||||
|
||||
![Restart is needed to rebase to Fedora 33 Silverblue][6]
|
||||
|
||||
Click on _Restart_ button and you are done. After restart you will end up in new and shiny release of Fedora 33. Easy, isn’t it?
|
||||
|
||||
### Rebasing using terminal
|
||||
|
||||
If you prefer to do everything in a terminal, than this next guide is for you.
|
||||
|
||||
Rebasing to Fedora 33 using terminal is easy. First, check if the 33 branch is available:
|
||||
|
||||
```
|
||||
$ ostree remote refs fedora
|
||||
```
|
||||
|
||||
You should see the following in the output:
|
||||
|
||||
```
|
||||
fedora:fedora/33/x86_64/silverblue
|
||||
```
|
||||
|
||||
Next, rebase your system to the Fedora 33 branch.
|
||||
|
||||
```
|
||||
$ rpm-ostree rebase fedora:fedora/33/x86_64/silverblue
|
||||
```
|
||||
|
||||
Finally, the last thing to do is restart your computer and boot to Fedora 33.
|
||||
|
||||
### How to roll back
|
||||
|
||||
If anything bad happens—for instance, if you can’t boot to Fedora 33 at all—it’s easy to go back. Pick the previous entry in the GRUB menu at boot, and your system will start in its previous state before switching to Fedora 33. To make this change permanent, use the following command:
|
||||
|
||||
```
|
||||
$ rpm-ostree rollback
|
||||
```
|
||||
|
||||
That’s it. Now you know how to rebase Silverblue to Fedora 33 and roll back. So why not do it today?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/how-to-rebase-to-fedora-33-on-silverblue/
|
||||
|
||||
作者:[Michal Konečný][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://fedoramagazine.org/author/zlopez/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2020/02/fedora-silverblue-logo.png
|
||||
[2]: https://docs.fedoraproject.org/en-US/fedora-silverblue/
|
||||
[3]: https://fedoramagazine.org/give-fedora-silverblue-a-test-drive/
|
||||
[4]: https://fedoramagazine.org/wp-content/uploads/2020/10/Screenshot-from-2020-10-29-12-53-37-1024x725.png
|
||||
[5]: https://fedoramagazine.org/wp-content/uploads/2020/10/Screenshot-from-2020-10-29-13-00-15-1024x722.png
|
||||
[6]: https://fedoramagazine.org/wp-content/uploads/2020/10/Screenshot-from-2020-10-29-13-01-32-1024x727.png
|
@ -0,0 +1,181 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Communication by example: Which methods do high-performing open source communities use?)
|
||||
[#]: via: (https://www.linux.com/news/communication-by-example-which-methods-do-high-performing-open-source-communities-use/)
|
||||
[#]: author: (Linux.com Editorial Staff https://www.linux.com/author/linuxdotcom/)
|
||||
|
||||
Communication by example: Which methods do high-performing open source communities use?
|
||||
======
|
||||
|
||||
#### ![][1]
|
||||
|
||||
#### _“Good words are worth much, and cost little.”_ _George Herbert_
|
||||
|
||||
Although effective communication is an essential life skill, it is the most critical element in any business [2]. Lack of accurate communication is the common cause of any organization’s issues, causing conflicts, reducing client relationships, team effectiveness, and profitability [2]. According to the Project Management Institute (PMI), ineffective communication is the main contributor to project failure one-third of the time. It has a negative impact on project success more than half of the time [1].
|
||||
|
||||
In open source projects where there is a diverse and world spread community, effective communication is the key to projects’ success. Using the right technology is crucial for that. So, which tools do open source communities use for communication?
|
||||
|
||||
### Open Source community communication by example
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
The Ubuntu community uses [**mailing lists**][2] for _development_ and _team coordination._ The mailing lists are split into announcements and news, support, development, testing and quality assurance, and general (such as translation, marketing, and documentation) [3]. Despite the mailing lists, [**IRC (Internet Relay Chat) channels**][3] are used for informal daily chats and short-term coordination tasks [3]. If someone wants to know what is going on on Ubuntu, but doesn’t want to subscribe to the high traffic mailing list, the [**web forum**][4] can be used to get support and discuss the future of Ubuntu. Finally, [Ask Ubuntu][5] can be used to ask technical questions.
|
||||
|
||||
#### Linux Kernel
|
||||
|
||||
**Mailing lists** are the main communication channels in the Linux Kernel. For newcomers that would like to learn more about the Linux kernel development, there is the [**kernelnewbies**][6] resource and #kernelnewbies IRC channel on OFTC. This online resource provides information on basic kernel development questions. Additionally, the **kernelnewbies ** **IRC channel** is a vehicle for contributors to ask questions in real-time and get help from experts in the kernel community. The [Linux Kernel Mailing List (LKML)][7] is where most development discussions and announcements are made. Kernel developers send patches to the mailing lists as outlined in the [Submitting patches: the essential guide to getting your code into the kernel][8]. The archives from each mailing list can be found at <https://lore.kernel.org/lists.html>.
|
||||
|
||||
Shuah Khan, a Linux Fellow, mentioned in an interview [4] that before contributing to the Linux Kernel, it’s important to subscribe to the kernel-related mailing lists _“to understand the dynamics.”_ Khan said, _“The process works like this: you walk into a room. People are gathering in small groups and are talking to each other. You have to break into one of these conversations. That is the process of watching the mailing lists, watching the interaction, and learning from that before you start sending out a patch.”_
|
||||
|
||||
#### OpenStack
|
||||
|
||||
OpenStack has many communication channels such as [IRC channels][9] for both public meetings and projects as well as [mailing lists][10]. The mailing lists are used to asynchronously communicate and share information, team communication, and cross-project communication. Additionally, mailing lists in OpenStack are used to communicate with non-developer community members of OpenStack [5].
|
||||
|
||||
#### GNOME
|
||||
|
||||
[IRC channels][11] are one of the most important communication methods in Gnome. They are a google place to know what the community is talking about and also ask for help. There are many channels on [Discourse][12], including discussions about Gnome’s sub-projects, community-related topics, internationalization, etc. Similar to other communities, [mailing lists][13] can be used for discussing specific topics. Finally, [PlanetGnome][14] and [GnomeNews][15] can be used to follow the latest news of the project.
|
||||
|
||||
So, where does communication occur in open source projects?
|
||||
|
||||
As observed in our previous discussion, _mailing lists_ seem to be the _most_ used communication method. Previous work has also found that _“mailing lists are the bread and butter of project communications”_ [11] and that _“the developer mailing list is the primary communication channel for an OSS project”_ [12]_._ However, as we have previously mentioned, mailing lists are not the _only_ communication channel used in OSS. Other channels (such as IRC channels and forums) also play an important role.
|
||||
|
||||
Guzzy et. al [10] mention that when more than one communication repository exists, the policy of most OSS is to transfer all official decisions and useful discussions to the mailing lists, so that they can later be _retrieved._ Thus, traceability and transparency of information is an important matter here.
|
||||
|
||||
The benefit of using mailing lists is that it is an asynchronous form of communication, and it is an easy resource to share information with the entire community. Additionally, mailing lists allow people that are in different timezones to engage, as well as people that have different levels of English proficiency, may better manage it in text messages [5].
|
||||
|
||||
However, mailing lists might also have their disadvantages. Previous work [10] found that developers have problems maintaining awareness of each other’s work when discussing on the mailing lists. Additionally, recovering traceability links among different communication repositories might help researchers and community members to have a more complete picture of the development process.
|
||||
|
||||
#### What are the common DOs and DON’Ts when using OSS mailing lists?
|
||||
|
||||
Given that mailing lists are one of the common ways to communicate in open source projects, it is worth knowing how to communicate in mailing lists. Although each project has its own set of rules, certain conventions should be followed.
|
||||
|
||||
##### **DOs**
|
||||
|
||||
**Subject**
|
||||
|
||||
* * * _**Prefix the subject**_ with topic tags in square brackets. This makes email threads easier for readers to categorize and decide what they should read quickly. For example, OpenStack has documentation [13] establishing how to prefix the subject, i.e., community members should use **[docs]** to address any kind of documentation discussions that are cross-projects and so on.
|
||||
|
||||
|
||||
* * * Sometimes it’s appropriate to _**change the subject**_ rather than start a new thread.
|
||||
* **Exceptions:** Linux Kernel mailing lists use “bottom post” protocol (writing the message below the original text) rather than “top post” (writing the message above the original text of an email, which is what most mail clients are set to do by default.)
|
||||
|
||||
|
||||
|
||||
**Formating**
|
||||
|
||||
* * * **Plain text:** Send your email as plain text only! Please, don’t send HTML emails.
|
||||
* **Line wrapping:** Lines should be wrapped at 72 characters or fewer.
|
||||
|
||||
|
||||
|
||||
**Replies**
|
||||
|
||||
* * * Always use [**inline replies**][16], i.e., break the original message by replying to each specific part of the message.
|
||||
* When replying to long discussions, [**trim**][17] your message and leave only the relevant parts to the reply.
|
||||
|
||||
|
||||
|
||||
##### **DON’Ts**
|
||||
|
||||
* * * _**Avoid cross-posting**_, i.e., posting the same message to many mailing lists at the same time.
|
||||
* **Exceptions:** The Linux Kernel maintains mailing lists for each subsystem, and patches are often sent to multiple mailing lists for review and discussion. However, avoid “top posting” on a Linux Kernel mailing list.
|
||||
|
||||
|
||||
* * * Avoid sending the _**wrong topic**_ to the _**wrong mailing list**_. Make sure that your topic is the topic of the mailing list.
|
||||
|
||||
|
||||
|
||||
#### Setting up your email client
|
||||
|
||||
The Linux Kernel has great [documentation][18] on setting different email clients according to the rules mentioned above.
|
||||
|
||||
#### How to minimize the harm caused by conflicts?
|
||||
|
||||
Even if the code of conduct is applied, conflicts might exist. Many actions can be taken in case of dispute, and here are some examples:
|
||||
|
||||
##### Gather information about the situation
|
||||
|
||||
If someone has violated the code of conduct, you should carefully analyze the situation according to the experience working with that person [6]. It is essential to read the past comments and interactions with that person to have an unbiased perspective about what happened. Stephanie Zvan [7] has mentioned that the best way to avoid a conflict is not to get pulled into an argument. It is important to focus on what you need to do instead of getting sidetracked into dealing with others’ behaviors.
|
||||
|
||||
##### Take appropriate actions
|
||||
|
||||
Two ways to respond to the code of conduct violation is that the moderator of the community (i) in a thoughtful way explain in public how the person’s behavior affected the community, or (ii) privately reach out to the person and explain how that behavior was negative [6].
|
||||
|
||||
#### _“A code of conduct that isn’t (or can’t be) enforced is worse than no code of conduct at all: it sends the message that the values in the code of conduct aren’t actually important or respected in your community.”_ [_Ada Initiative_][19]
|
||||
|
||||
#### General tips
|
||||
|
||||
* Open source projects are, in large part, successful due to the collaborative nature of projects. Thus, **start conversations that lead to collaboration.** That means, give feedback, support each other’s communication, and share your ideas.
|
||||
* There is no additional cost to being transparent and authentic with your community. In that way, it is easy to keep your team informed, empowered, and focused on one specific goal or task.
|
||||
|
||||
|
||||
|
||||
***About the author: ***
|
||||
|
||||
_Isabella Ferreira is an Advocate at TARS Foundation,_ a cloud-native open-source microservice foundation under the Linux Foundation*.*
|
||||
|
||||
**References:**
|
||||
|
||||
[1]<https://www.pmi.org/-/media/pmi/documents/public/pdf/learning/thought-leadership/pulse/the-essential-role-of-communications.pdf>
|
||||
|
||||
[2]<https://www.orangescrum.org/articles/communication-challenges-in-project-management-how-to-overcome.html>
|
||||
|
||||
[3] <https://wiki.ubuntu.com/ContributeToUbuntu#Community_Communication>
|
||||
|
||||
[4] <https://thenewstack.io/how-to-begin-your-journey-as-a-contributor-to-the-linux-kernel/>
|
||||
|
||||
[5] <https://docs.openstack.org/project-team-guide/open-community.html>
|
||||
|
||||
[6] <https://opensource.guide/code-of-conduct/#:~:text=A%20code%20of%20conduct%20is,just%20your%20participants%2C%20but%20yourself.>
|
||||
|
||||
[7]
|
||||
|
||||
<https://the-orbit.net/almostdiamonds/2014/04/10/so-youve-got-yourself-a-policy-now-what/>
|
||||
|
||||
[9] <https://www.forbes.com/sites/forbescommunicationscouncil/2019/11/22/open-source-software-a-model-for-transparent-organizational-communication/#1b834e0d32c4>
|
||||
|
||||
[10] Guzzi, Anja, et al. “Communication in open source software development mailing lists.” 2013 10th Working Conference on Mining Software Repositories (MSR). IEEE, 2013.
|
||||
|
||||
[11] Fogel, Karl. _Producing open source software: How to run a successful free software project_. ” O’Reilly Media, Inc.”, 2005.
|
||||
|
||||
[12] Gutwin, Carl, Reagan Penner, and Kevin Schneider. “Group awareness in distributed software development.” _Proceedings of the 2004 ACM conference on Computer supported cooperative work_. 2004.
|
||||
|
||||
[13] <https://docs.openstack.org/project-team-guide/open-community.html#mailing-lists>
|
||||
|
||||
_This Linux Foundation Platinum Sponsor content was contributed by Tencent._
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linux.com/news/communication-by-example-which-methods-do-high-performing-open-source-communities-use/
|
||||
|
||||
作者:[Linux.com Editorial Staff][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://www.linux.com/author/linuxdotcom/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.linux.com/wp-content/uploads/2019/08/email2git-linux-kernel.jpg
|
||||
[2]: https://lists.ubuntu.com/
|
||||
[3]: https://help.ubuntu.com/community/InternetRelayChat
|
||||
[4]: https://ubuntuforums.org/index.php
|
||||
[5]: https://askubuntu.com/
|
||||
[6]: https://kernelnewbies.org
|
||||
[7]: https://lore.kernel.org/lkml/
|
||||
[8]: https://www.kernel.org/doc/html/latest/process/submitting-patches.html
|
||||
[9]: https://docs.openstack.org/project-team-guide/glossary.html#term-IRC
|
||||
[10]: http://lists.openstack.org/cgi-bin/mailman/listinfo
|
||||
[11]: https://wiki.gnome.org/Community/GettingInTouch/IRC
|
||||
[12]: https://discourse.gnome.org/
|
||||
[13]: https://mail.gnome.org/mailman/listinfo/
|
||||
[14]: https://planet.gnome.org/
|
||||
[15]: https://www.gnome.org/news/
|
||||
[16]: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
|
||||
[17]: https://en.wikipedia.org/wiki/Posting_style#Trimming_and_reformatting
|
||||
[18]: https://www.kernel.org/doc/html/v4.10/process/email-clients.html
|
||||
[19]: https://adainitiative.org/2014/02/18/howto-design-a-code-of-conduct-for-your-community/
|
Loading…
Reference in New Issue
Block a user