Merge pull request #8 from LCTT/master

Update 2018410
This commit is contained in:
zyk 2018-04-10 18:11:11 +08:00 committed by GitHub
commit a2b3907dfb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 263 additions and 404 deletions

View File

@ -1,12 +1,13 @@
如何解决 mount.nfs失效的文件句柄错误
如何解决 “mount.nfs: Stale file handle”错误
======
了解如何解决 mount.nfsLinux 平台上的失效文件句柄错误。它是可以在客户端或者服务端解决的网络文件系统错误。
> 了解如何解决 Linux 平台上的 `mount.nfs: Stale file handle` 错误。这个 NFS 错误可以在客户端或者服务端解决。
_![][1]_
当你在你的环境中使用网络文件系统时,你一定不时看到 `mount.nfsStale file handle` 错误。此错误表示 NFS 共享无法挂载,因为自上次配置后有些东西已经更改。
无论何时你重启 NFS 服务器或某些 NFS 进程未在客户端或服务器上运行,或者共享未在服务器上正确导出,这些都可能是这个错误的原因。此外,当这个错误发生在先前挂载的 NFS 共享上时,它会令人不快。因为这意味着配置部分是正确的,因为是以前挂载的。在这种情况下,可以尝试下面的命令:
无论你重启 NFS 服务器或某些 NFS 进程未在客户端或服务器上运行,或者共享未在服务器上正确输出,这些都可能是导致这个错误的原因。此外,当这个错误发生在先前挂载的 NFS 共享上时,它会令人不快。因为这意味着配置部分是正确的,因为是以前挂载的。在这种情况下,可以尝试下面的命令:
确保 NFS 服务在客户端和服务器上运行良好。
@ -18,8 +19,6 @@ nfsd (pid 12009 12008 12007 12006 12005 12004 12003 12002) is running...
rpc.rquotad (pid 11988) is running...
```
>通过 CloudDesktopOnline.com 上的[ Windows 7 云桌面][2]在任意位置的任何设备上保持与你最喜爱的 Windows 程序的连接。从 [Apps4Rent.com][3] 获得有专家支持的 Office 365 和免费迁移。
如果 NFS 共享目前挂载在客户端上,则强制卸载它并尝试在 NFS 客户端上重新挂载它。通过 `df` 命令检查它是否正确挂载,并更改其中的目录。
```
@ -43,6 +42,7 @@ umount: /mydata_nfs: device is busy
umount2: Device or resource busy
umount: /mydata_nfs: device is busy
```
然后你可以用 `lsof` 命令来检查哪个进程或用户正在使用该挂载点,如下所示:
```
@ -57,7 +57,7 @@ bash 25040 oracle11 cwd unknown
如果你在上面的示例中看到共有 4 个 PID 正在使用该挂载点上的某些文件。尝试杀死它们以释放挂载点。完成后,你将能够正确卸载它。
有时 mount 命令会有相同的错误。接着使用下面的命令在客户端重启 NFS 服务后挂载。
有时 `mount` 命令会有相同的错误。接着使用下面的命令在客户端重启 NFS 服务后挂载。
```
# service nfs restart
@ -73,7 +73,7 @@ Starting NFS daemon: [ OK ]
另请阅读:[如何在 HPUX 中逐步重启 NFS][5]
即使这没有解决你的问题,最后一步是在 NFS 服务器上重启服务。警告!这将断开从该 NFS 服务器出的所有 NFS 共享。所有客户端将看到挂载点断开。这一步将 99 解决你的问题。如果没有,请务必检查[ NFS 配置][6],提供你修改的配置并发布你启动时看到的错误。
即使这没有解决你的问题,最后一步是在 NFS 服务器上重启服务。警告!这将断开从该 NFS 服务器出的所有 NFS 共享。所有客户端将看到挂载点断开。这一步将 99 解决你的问题。如果没有,请务必检查 [NFS 配置][6],提供你修改的配置并发布你启动时看到的错误。
上面文章中的输出来自 RHEL6.3 服务器。请将你的评论发送给我们。
@ -83,7 +83,7 @@ via: https://kerneltalks.com/troubleshooting/resolve-mount-nfs-stale-file-handle
作者:[KernelTalks][a]
译者:[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/) 荣誉推出

View File

@ -0,0 +1,81 @@
深度学习战争Facebook 支持的 PyTorch 与 Google 的 TensorFlow
======
![](https://hub.packtpub.com/wp-content/uploads/2018/03/iStock-621901930-1068x832.jpg)
有一个令人震惊的事实,即人工智能和机器学习的工具和技术在近期迅速兴起。深度学习,或者说“注射了激素的机器学习”,数据科学家和机器学习专家在这个领域有数不胜数等可用的库和框架。很多这样的框架都是基于 Python 的,因为 Python 是一个更通用,相对简单的语言。[Theano] [1]、[Keras] [2]、 [TensorFlow] [3] 是几个基于 Python 构建的流行的深度学习库,目的是使机器学习专家更轻松。
Google 的 TensorFlow 是一个被广泛使用的机器学习和深度学习框架。 TensorFlow 开源于 2015 年得到了机器学习专家社区的广泛支持TensorFlow 已经迅速成长为许多机构根据其机器学习和深度学习等需求而选择的框架。 另一方面PyTorch 是由 Facebook 最近开发的用于训练神经网络的 Python 包,改编自基于 Lua 的深度学习库 Torch。 PyTorch 是少数可用的深度学习框架之一,它使用<ruby>基于磁带的自动梯度系统<rt>tape-based autograd system</rt></ruby>,以快速和灵活的方式构建动态神经网络。
在这篇文章中,我们将 PyTorch 与 TensorFlow 进行不同方面的比较。
让我们开始吧!
### 什么编程语言支持 PyTorch 和 TensorFlow
虽然主要是用 C++ 和 CUDA 编写的,但 TensorFlow 包含一个位于核心引擎上的 Python API使得更便于被<ruby>Python 支持者<rt>Pythonistas</rt></ruby>使用。 除了 Python它还包括 C++、Haskell、Java、Go 和 Rust 等其他 API这意味着开发人员可以用他们的首选语言进行编码。
虽然 PyTorch 是一个 Python 软件包,但你也可以提供使用基本的 C/C++ 语言的 API 进行编码。 如果你习惯使用 Lua 编程语言,你也可以使用 Torch API 在 PyTorch 中编写神经网络模型。
### PyTorch 和 TensorFlow 有多么易于使用?
如果将 TensorFlow 作为一个独立的框架使用,它可能会有点复杂,并且会给深度学习模型的训练带来一些困难。 为了减少这种复杂性,可以使用位于 TensorFlow 复杂引擎之上的 Keras 封装,以简化深度学习模型的开发和训练。 TensorFlow 也支持 PyTorch 目前没有的[分布式培训] [4]。 由于包含 Python APITensorFlow 也可以在生产环境中使用,即可用于培训练和部署企业级深度学习模型。
PyTorch 由于 Torch 的复杂用 Python 重写。 这使得 PyTorch 对于开发人员更为原生。 它有一个易于使用的框架,提供最大化的灵活和速度。 它还允许在训练过程中快速更改代码而不妨碍其性能。 如果你已经有了一些深度学习的经验,并且以前使用过 Torch那么基于它的速度、效率和易用性你会更喜欢 PyTorch。 PyTorch 包含定制的 GPU 分配器,这使得深度学习模型具有更高的内存效率。 由此,训练大型深度学习模型变得更容易。 因此Pytorch
在 Facebook、Twitter、Salesforce 等大型组织广受欢迎。
### 用 PyTorch 和 TensorFlow 训练深度学习模型
PyTorch 和 TensorFlow 都可以用来建立和训练神经网络模型。
TensorFlow 工作于 SCG静态计算图包括在模型开始执行之前定义静态图。 但是,一旦开始执行,在模型内的调整更改的唯一方法是使用 [tf.session and tf.placeholder tensors][5]。
PyTorch 非常适合训练 RNN递归神经网络因为它们在 [PyTorch] [6] 中比在 TensorFlow 中运行得更快。 它适用于 DCG动态计算图可以随时在模型中定义和更改。 在 DCG 中,每个模块可以单独调试,这使得神经网络的训练更简单。
TensorFlow 最近提出了 TensorFlow Fold这是一个旨在创建 TensorFlow 模型的库,用于处理结构化数据。 像 PyTorch 一样,它实现了 DCG在 CPU 上提供高达 10 倍的计算速度,在 GPU 上提供超过 100 倍的计算速度! 在 [Dynamic Batching] [7] 的帮助下,你现在可以执行尺寸和结构都不相同的深度学习模型。
### GPU 和 CPU 优化的比较
TensorFlow 的编译时间比 PyTorch 短,为构建真实世界的应用程序提供了灵活性。 它可以从 CPU、GPU、TPU、移动设备到 Raspberry Pi物联网设备等各种处理器上运行。
另一方面PyTorch 包括<ruby>张量<rt>tensor</rt></ruby>计算,可以使用 GPU 将深度神经网络模型加速到 [50 倍或更多] [8]。 这些张量可以停留在 CPU 或 GPU 上。 CPU 和 GPU 都是独立的库, 无论神经网络大小如何PyTorch 都可以高效地利用。
### 社区支持
TensorFlow 是当今最流行的深度学习框架之一,由此也给它带来了庞大的社区支持。 它有很好的文档和一套详细的在线教程。 TensorFlow 还包括许多预先训练过的模型,这些模型托管和提供于 [GitHub] [9]。 这些模型提供给热衷于使用 TensorFlow 开发者和研究人员一些现成的材料来节省他们的时间和精力。
另一方面PyTorch 的社区相对较小,因为它最近才发展起来。 与 TensorFlow 相比,文档并不是很好,代码也不是很容易获得。 然而PyTorch 确实允许个人与他人分享他们的预训练模型。
### PyTorch 和 TensorFlow —— 力量悬殊的故事
就目前而言由于各种原因TensorFlow 显然比 PyTorch 更受青睐。
TensorFlow 很大,经验丰富,最适合实际应用。 是大多数机器学习和深度学习专家明显的选择,因为它提供了大量的功能,最重要的是它在市场上的成熟应用。 它具有更好的社区支持以及多语言 API 可用。 它有一个很好的文档库,由于从准备到使用的代码使之易于生产。 因此,它更适合想要开始深度学习的人,或者希望开发深度学习模型的组织。
虽然 PyTorch 相对较新,社区较小,但它速度快,效率高。 总之,它给你所有的优势在于 Python 的有用性和易用性。 由于其效率和速度,对于基于研究的小型项目来说,这是一个很好的选择。 如前所述Facebook、Twitter 等公司正在使用 PyTorch 来训练深度学习模型。 但是,使用它尚未成为主流。 PyTorch 的潜力是显而易见的,但它还没有准备好去挑战这个 TensorFlow 野兽。 然而考虑到它的增长PyTorch 进一步优化并提供更多功能的日子并不遥远,直到与 TensorFlow可以 比较。
作者: Savia Lobo非常喜欢数据科学。 喜欢更新世界各地的科技事件。 喜欢歌唱和创作歌曲。 相信才智上的艺术。
--------------------------------------------------------------------------------
via: https://datahub.packtpub.com/deep-learning/dl-wars-pytorch-vs-tensorflow/
作者:[Savia Lobo][a]
译者:[Wuod3n](https://github.com/Wuod3n)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://datahub.packtpub.com/author/savial/
[1]:https://www.packtpub.com/web-development/deep-learning-theano
[2]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-keras
[3]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-tensorflow
[4]:https://www.tensorflow.org/deploy/distributed
[5]:https://www.tensorflow.org/versions/r0.12/get_started/basic_usage
[6]:https://www.reddit.com/r/MachineLearning/comments/66rriz/d_rnns_are_much_faster_in_pytorch_than_tensorflow/
[7]:https://arxiv.org/abs/1702.02181
[8]:https://github.com/jcjohnson/pytorch-examples#pytorch-tensors
[9]:https://github.com/tensorflow/models

View File

@ -1,18 +1,20 @@
Linux 中的 5 个 SSH 别名例子
======
[![][1]][1]
作为一个 Linux 用户,我们常用[ ssh 命令][2] 来登入远程机器。ssh 命令你用得越多,你在键入一些重要的命令上花的时间也越多。我们可以用 [定义在你的 .bashrc 文件里的别名][3] 或函数来大幅度缩减花在命令行界面CLI的时间。但这不是最佳解决之道。最佳办法是在 ssh 配置文件中使用 **SSH-别名** 。
作为一个 Linux 用户,我们常用 [ssh 命令][2] 来登入远程机器。`ssh` 命令你用得越多,你在键入一些重要的命令上花的时间也越多。我们可以用 [定义在你的 .bashrc 文件里的别名][3] 或函数来大幅度缩减花在命令行界面CLI的时间。但这不是最佳解决之道。最佳办法是在 `ssh` 配置文件中使用 **SSH 别名** 。
这里是我们能把 ssh 命令用得更好的几个例子。
这里是我们能把 `ssh` 命令用得更好的几个例子。
ssh 到 AWS译注Amazon Web Services亚马逊公司旗下云计算服务平台实例的连接是一种痛。仅仅输入以下命令每次也完全是浪费你时间。
ssh 登入到 AWS译注Amazon Web Services亚马逊公司旗下云计算服务平台实例的连接是一种痛。仅仅输入以下命令每次也完全是浪费你时间。
```
ssh -p 3000 -i /home/surendra/mysshkey.pem ec2-user@ec2-54-20-184-202.us-west-2.compute.amazonaws.com
```
缩短到
缩短到:
```
ssh aws1
```
@ -23,26 +25,28 @@ ssh aws1
ssh -vvv the_good_user@red1.taggle.abc.com.au
```
缩短到
缩短到:
```
ssh xyz
```
在本篇中,我们将看到如何不使用 bash 别名或函数实现 ssh 命令的缩短。ssh 别名的主要优点是所有的 ssh 命令快捷方式都存储在一个单一文件,如此就易于维护。其他优点是 **对于类似于 SSH 和 SCP 的命令** 我们能用相同的别名。
在本篇中,我们将看到如何不使用 bash 别名或函数实现 `ssh` 命令的缩短。`ssh` 别名的主要优点是所有的 `ssh` 命令快捷方式都存储在一个单一文件,如此就易于维护。其他优点是 **对于类似于 SSH 和 SCP 的命令** 我们能用相同的别名。
在我们进入实际配置之前,我们应该知道 /etc/ssh/ssh_config、/etc/ssh/sshd_config 和 ~/.ssh/config 文件三者的区别。以下是对这些文件的解释。
在我们进入实际配置之前,我们应该知道 `/etc/ssh/ssh_config``/etc/ssh/sshd_config``~/.ssh/config` 文件三者的区别。以下是对这些文件的解释。
## /etc/ssh/ssh_config 和 ~/.ssh/config 间的区别
### /etc/ssh/ssh_config 和 ~/.ssh/config 间的区别
系统级别的 SSH 配置项存放在 /etc/ssh/ssh_config而用户级别的 ssh 配置项存放在 ~/.ssh/config 文件中。
系统级别的 SSH 配置项存放在 `/etc/ssh/ssh_config`,而用户级别的 SSH 配置项存放在 `~/.ssh/config` 文件中。
## /etc/ssh/ssh_config 和 /etc/ssh/sshd_config 间的区别
### /etc/ssh/ssh_config 和 /etc/ssh/sshd_config 间的区别
系统级别的 SSH 配置项是在 /etc/ssh/ssh_config 文件中,而系统级别的 SSH 服务端配置项存放在 /etc/ssh/sshd_config 文件。
系统级别的 SSH 配置项是在 `/etc/ssh/ssh_config` 文件中,而系统级别的 SSH **服务端**配置项存放在 `/etc/ssh/sshd_config` 文件。
## **在 ~/.ssh/config 文件里配置项的语法**
### 在 ~/.ssh/config 文件里配置项的语法
`~/.ssh/config` 文件内容的语法:
~/.ssh/config 文件内容的语法。
```
配置项 值
配置项 值1 值2
@ -50,7 +54,8 @@ ssh xyz
**例 1** 创建主机www.linuxnix.com的 SSH 别名
编辑 ~/.ssh/config 文件写入以下内容
编辑 `~/.ssh/config` 文件写入以下内容:
```
Host tlj
User root
@ -58,18 +63,17 @@ Host tlj
port 22
```
保存此文件
保存此文件
以上 ssh 别名用了
1. **tlj 作为一个别名的名称**
2. **root 作为将要登入的用户**
3. **18.197.176.13 作为主机的 IP 地址**
4. **22 作为访问 SSH 服务的端口。**
1. `tlj` 作为一个别名的名称
2. `root` 作为将要登入的用户
3. `18.197.176.13` 作为主机的 IP 地址
4. `22` 作为访问 SSH 服务的端口
输出:
```
sanne@Surendras-MacBook-Pro:~ > ssh tlj
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-93-generic x86_64)
@ -84,9 +88,10 @@ logout
Connection to 18.197.176.13 closed.
```
**例 2** 不用密码用 ssh 密钥登到系统要用 **IdentityFile**
**例 2** 不用密码用 ssh 密钥登到系统要用 `IdentityFile`
例:
```
Host aws
User ec2-users
@ -95,7 +100,7 @@ Host aws
port 22
```
**例 3** 对同一主机使用不同的别名。在下例中,我们对同一 IP/主机 18.197.176.13 用了 **tlj, linuxnix, linuxnix.com** 三个别名。
**例 3** 对同一主机使用不同的别名。在下例中,我们对同一 IP/主机 18.197.176.13 用了 `tlj``linuxnix`、`linuxnix.com` 三个别名。
~/.ssh/config 文件内容
```
@ -106,6 +111,7 @@ Host tlj linuxnix linuxnix.com
```
**输出:**
```
sanne@Surendras-MacBook-Pro:~ > ssh tlj
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-93-generic x86_64)
@ -147,48 +153,52 @@ Connection to 18.197.176.13 closed.
**例 4** 用相同的 SSH 别名复制文件到远程系统
语法:
```
**scp <文件名> <ssh_别名>:<位置>**
scp <文件名> <ssh_别名>:<位置>
```
例子:
```
sanne@Surendras-MacBook-Pro:~ > scp abc.txt tlj:/tmp
abc.txt 100% 12KB 11.7KB/s 00:01
sanne@Surendras-MacBook-Pro:~ >
```
若我们已经将 ssh 主机设置好一个别名,由于 ssh 和 SCP 两者用几乎相同的语法和选项SCP 用起来就轻而易举
若我们已经将 ssh 主机设置好一个别名,由于 `ssh``scp` 两者用几乎相同的语法和选项,`scp` 也可以轻易使用。
请在下面尝试从本机 scp 一个文件到远程机器。
请在下面尝试从本机 `scp` 一个文件到远程机器。
**例 5** 解决 Linux中的 SSH 超时问题。默认情况,如果你不积极地使用终端,你的 ssh 登入就会超时。
**例 5** 解决 Linux 中的 SSH 超时问题。默认情况,如果你不积极地使用终端,你的 ssh 登入就会超时
[SSH 超时问题][5] 是一个更痛的点意味着你在一段时间后不得不重新登入到远程机器。我们能在 `~/.ssh/config` 文件里边恰当地设置 SSH 超时时间来使你的会话不管在什么时间总是激活的。我们将用 2 个能保持会话存活的 SSH 选项来实现这一目的。之一是 `ServerAliveInterval` 保持你会话存活的秒数和 `ServerAliveCountMax` 在(经历了一个)给定数值的会话之后初始化会话。
[SSH 超时问题][5] 是一个更痛的点意味着你在一段时间后不得不重新登入到远程机器。我们能在 ~/.ssh/config 文件里边恰当地设置 SSH 超时时间来使你的会话不管在什么时间总是激活的。我们将用 2 个能保持会话存活的 SSH 选项来实现这一目的。之一是 ServerAliveInterval 保持你会话存活的秒数和 ServerAliveCountMax 在(经历了一个)给定数值的会话之后初始化会话。
```
**ServerAliveInterval A**
**ServerAliveCountMax B**
ServerAliveInterval A
ServerAliveCountMax B
```
**例:**
```
Host tlj linuxnix linuxnix.com
User root
HostName 18.197.176.13
port 22
ServerAliveInterval 60**
ServerAliveInterval 60
ServerAliveCountMax 30
```
在下篇中我们将会看到一些其他的退出方式。请保持访问 linuxnix.com。
在下篇中我们将会看到一些其他的退出方式。
--------------------------------------------------------------------------------
via: https://www.linuxnix.com/5-ssh-alias-examples-using-ssh-config-file/
作者:[Surendra Anne;Max Ntshinga;Otto Adelfang;Uchechukwu Okeke][a]
作者:[SURENDRA ANNE][a]
译者:[ch-cn](https://github.com/ch-cn)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,46 +1,47 @@
区块链不适用的若干场景
======
> 这三个问题可以帮你避开不实宣传。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/blocks_building.png?itok=eMOT-ire)
不错,“区块链”这个概念异常的火热。
不错,区块链这个概念异常的火热
众所周知我一直关注区块链及相关技术的成熟度发展情况思考我们是否对其评价过高了但从目前的情况来看还没有这个迹象。我在文中提到的区块链技术是广义上的包含了狭义上不属于区块链的分布式账本技术DLT。我对<ru by>私有链<rt>permissioned blockchain</rt></ruby>更感兴趣,其中私有链的定义可以参考我的文章《[区块链是安全性方面的话题吗?][1]》。简而言之,我对加密货币之外的区块链业务应用特别感兴趣^[注1](#footnote1)
众所周知我一直关注区块链及相关技术的成熟度发展情况思考其是否达到过高期望的峰值peak hype但从目前的情况来看还没有这个迹象。我在文中提到的区块链技术是广义上的包含了狭义上不属于区块链的分布式账本技术DLTs。我对私有链更感兴趣其中私有链的定义可以参考我的文章[区块链是安全性方面的话题吗?][1]。简而言之,我对加密货币之外的区块链业务应用特别感兴趣<sup>[1](#footnote1)</sup>
我们对区块链的技术成熟度的判断应该有一部分可以得到证实^[注2](#footnote2) 。如果我们判断正确,未来将会出现海量的区块链应用。这很可能会变成现实,但并不是所有的应用都是优秀的区块链应用,其中一部分很可能是非常糟糕的
我们对区块链的技术成熟度的判断应该有一部分可以得到证实<sup>[2](#footnote2)</sup>。如果我们判断正确,未来将会出现海量的区块链应用。这很可能会变成现实,但并不是所有的应用都是优秀的区块链应用,其中一部分很可能是非常糟糕的。
但区块链所处的技术成熟度意味着,大量业务将快速拥抱新技术<sup>[3](#footnote3)</sup>,但对于可能的前景却一知半解。促成这种情况的原因可以大致分为三种:
但区块链所处的技术成熟度意味着,大量业务将快速拥抱新技术^[注3](#footnote3) ,但对于可能的前景却一知半解。促成这种情况的原因可以大致分为三种:
1. 对于涉及多用户数据存储的业务应用,在投入精力的情况下,几乎都可以改造为基于区块链的版本;
2. 很多区块链相关的会议和“专家”呼吁尽快拥抱区块链,否则可能会在半年内被淘汰<sup>[4](#footnote4)</sup>
2. 很多区块链相关的会议和“专家”呼吁尽快拥抱区块链,否则可能会在半年内被淘汰^[注4](#footnote4)
3. 完全理解区块链技术是很难的,支持其在企业中落地的往往是工程师。
对于最后一条,我必须补充几句,不然很容易被引起众怒<sup>[5](#footnote5)</sup>。作为一名工程师,我显然无意贬低工程师。但工程师的天性使然,我们对见到的新鲜事物(亮点)热情澎湃,却对业务本身神交<sup>[6](#footnote6)</sup>不足,故对于新技术给业务带来的影响理解可能并不深刻。在业务领导者看来,这些影响不一定是有利的。
对于最后一条,我必须补充几句,不然很容易被引起众怒^[注5](#footnote5) 。作为一名工程师,我显然无意贬低工程师。但工程师的天性使然,我们对见到的新鲜事物(亮点)热情澎湃,却对业务本身<ruby>深入<rt>fully grok</rt></ruby>^[注6](#footnote6) 不足,故对于新技术给业务带来的影响理解可能并不深刻。在业务领导者看来,这些影响不一定是有利的。
上面提到的三种促因可能导致一种风险,即在没有充分评估利弊的情况下,将业务改造为区块链应用。在另一文([区块链:每个人都应该参与进来吗?][2])中提到几个场景,用于判断一个业务什么情况下适合采用区块链技术。这些场景是有益的,但更进一步,我坚信人们更加需要的是,业务完全不适用区块链的几种简单的场景判定。我总结了三种场景判定,如果对于其中任何一个问题你给出了肯定的回答,那么很大概率上区块链不适合你。
### 场景判定1业务是否需要集中式的管控或授权
### 场景判定 1业务是否需要集中式的管控或授权
如果你给出了肯定的回答,那么区块链不适合你。
例如,假设你是一个蒲团销售商,具有唯一的订单系统,那么对于何时发货你有唯一的授权,显然区块链不适合你。假设你是一个内容提供商,所有提供的内容都会经过唯一的编辑和发布过程,显然区块链不适合你。
例如,假设你是一个普通销售商,具有唯一的订单系统,那么对于何时发货你有唯一的授权,显然区块链不适合你。假设你是一个内容提供商,所有提供的内容都会经过唯一的编辑和发布过程,显然区块链不适合你。
经验总结:只有当任务对应的执行流程及相应的认证流程是分布于众多主体时,区块链是有价值的。
**经验总结:只有当任务对应的执行流程及相应的认证流程是分布于众多主体时,区块链是有价值的。**
### 场景判定2业务使用经典数据库是否工作良好
### 场景判定 2业务使用经典数据库是否工作良好
如果你给出了肯定的回答,那么区块链不适合你。
该场景似乎与上一个场景是强相关的,但并不总是如此。在一些应用中,处理流程是分布的,但信息存储是中心化的;在另外一些应用中,处理流程需要中心化的授权,但信息存储是分布的,即总有一个并不是分布式的。但如果业务使用经典数据库可以工作量良好的话,使用经典数据库是一个好主意。
经典数据库不仅性能良好,在设计与运营成本方面低比区块链或分布式账本,而且我们在这方面技术积累丰厚。区块链让所有人<sup>[8](#footnote8)</sup>可以查看和持有数据,但间接成本和潜在成本都比较高昂。
经典数据库不仅性能良好,在设计与运营成本方面低比区块链或分布式账本,而且我们在这方面技术积累丰厚。区块链让所有人^[注8](#footnote8) 可以查看和持有数据,但间接成本和潜在成本都比较高昂。
### 场景判定3业务采用新技术是否成本高昂或对合作伙伴有负面效果
### 场景判定 3业务采用新技术是否成本高昂或对合作伙伴有负面效果
如果你给出了肯定的回答,那么区块链不适合你。
我曾听过这种观点,即区块链会让所有人获益。但这显然是不可能的。假设你正在为某个流程设计一个应用,改变合作伙伴与你及应用的交互方式,那么你需要判断这个改变是否符合合作伙伴的兴趣。不论是否涉及区块链,可以很容易的设计并引入一个应用,虽然降低了你自己的业务阻力,但与此同时增加了合作伙伴的业务阻力。
我曾听过这种观点,即区块链会让所有人获益。但这显然是不可能的。假设你正在为某个流程设计一个应用,改变合作伙伴与你及应用的交互方式,那么你需要判断这个改变是否符合合作伙伴的想法。不论是否涉及区块链,可以很容易的设计并引入一个应用,虽然降低了你自己的业务阻力,但与此同时增加了合作伙伴的业务阻力。
假设我为汽车行业生产发动机配件那么使用区块链追溯和管理配件会让我受益匪浅。例如我可以查看购买的滚珠轴承的生产商、生产时间和钢铁材料供应商等。换一个角度假设我是滚珠轴承生产商已经为40多个客户公司建立了处理流程。为一家客户引入新的流程会涉及工作方式、系统体系、储藏和安全性标准等方面的变更这无法让我感兴趣相反这会导致复杂性和高开销。
@ -48,31 +49,24 @@
这几个场景判定用于提纲挈领,并不是一成不变的。其中数据库相关的那个场景判定更像是技术方面的,但也是紧密结合业务定位和功能的。希望这几个判定可以为区块链技术引进促因带来的过热进行降温。
<a name="footnote1">1</a>\. 请不要误解我的意思,加密货币显然是一种有趣的区块链业务应用,只是不在本文的讨论范畴而已。
<a name="footnote2">2</a>\. 知道具体是哪些部分是很有意义的,如果你知道,请告诉我好吗?
<a name="footnote3">3</a>\. 坦率的说,它其实更像是一大堆技术的集合体。
<a name="footnote4">4</a>\. 这显然是不太可能的,如果被淘汰的主体是这些会议和“专家”本身倒十分有可能。
<a name="footnote5">5</a>\. 由于比方打得有些不恰当,估计还是会引起众怒。
<a name="footnote6">6</a>\. 我太喜欢grok这个单词了我把它放在这里作为我的工程师标志<sup>[7](#footnote7)</sup>
<a name="footnote7">7</a>\. 你可能已经想到了,我读过*Stranger in a Strange Land*一书,包括删减版和原版。
<a name="footnote8">8</a>\. 在合理的情况下。
- 注 1. 请不要误解我的意思,加密货币显然是一种有趣的区块链业务应用,只是不在本文的讨论范畴而已。
- 注 2. 知道具体是哪些部分是很有意义的,如果你知道,请告诉我好吗?
- 注 3. 坦率的说,它其实更像是一大堆技术的集合体。
- 注 4. 这显然是不太可能的,如果被淘汰的主体是这些会议和“专家”本身倒十分有可能。
- 注 5. 由于比方打得有些不恰当,估计还是会引起众怒。
- 注 6. 我太喜欢 grok 这个单词了,我把它放在这里作为我的工程师标志^[注7](#footnote7) 。
- 注 7. 你可能已经想到了,我读过*Stranger in a Strange Land*一书,包括删减版和原版。
- 注 8. 在合理的情况下。
原文最初发表于[爱丽丝, 夏娃和鲍勃 一个安全性主题博客][3],已获得转载许可。
--------------------------------------------------------------------------------
原文链接: https://opensource.com/article/18/3/3-tests-not-moving-blockchain
via: https://opensource.com/article/18/3/3-tests-not-moving-blockchain
作者:[Mike Bursell][a]
译者:[pinewall](https://github.com/pinewall)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,105 +0,0 @@
translating---geekpi
Scary Linux commands for Halloween
======
With Halloween so fast approaching, it's time for a little focus on the spookier side of Linux. What commands might bring up images of ghosts, witches and zombies? Which might encourage the spirit of trick or treat?
### crypt
Well, we've always got **crypt**. Despite its name, crypt is not an underground vault or a burial pit for trashed files, but a command that encrypts file content. These days "crypt" is generally implemented as a script that emulates the older crypt command by calling a binary called **mcrypt** to do its work. Using the **mycrypt** command directly is an even better option.
```
$ mcrypt x
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
File x was encrypted.
```
Note that the mcrypt command creates a second file with an added ".nc" extension. It doesn't overwrite the file you are encrypting.
The mcrypt command has options for key size and encryption algorithm. You can specify the key as an option too, though the mcrypt command discourages this.
### kill
There's also the kill command - not exactly a reference to murder, of course, but the command that we use for terminating processes gently or with considerable force, depending on what is required to properly terminate them. And Linux doesn't stop there, of course. Instead, it has all sorts of kill commands to bloody up your command line. We've got kill, pkill, killall, killpg, rfkill, skill (read es-kill), tgkill, tkill and xkill.
```
$ killall runme
[1] Terminated ./runme
[2] Terminated ./runme
[3]- Terminated ./runme
[4]+ Terminated ./runme
```
### shred
Linux systems also support a command called **shred**. The shred command overwrites files to hide their former content and ensure that they cannot be recovered using hard drive recovery tools. Keep in mind that the rm command basically just removes a file 's reference in the directory file, but does not necessarily scrape the content off the disk or overwrite it. The **shred** command overwrites the files' content.
```
$ shred dupes.txt
$ more dupes.txt
▒oΛ▒▒9▒lm▒▒▒▒▒o▒1־▒▒f▒f▒▒▒i▒▒h^}&▒▒▒{▒▒
```
### Zombies
Although not a command, **zombies** have a strong presence on Linux systems. Zombies are basically the remains of dead processes that haven 't quite been cleaned away. Processes aren't _supposed_ to work this way - leaving dead processes wandering around instead of simply having them die and go to digital Heaven, so the presence of zombies indicates that the processes that left them behind had some kind of flaws.
One easy way to check if your system has zombie processes stumbling around is to take a look at the header lines of the top command.
```
$ top
top - 18:50:38 up 6 days, 6:36, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 171 total, 1 running, 167 sleeping, 0 stopped, 3 zombie **< ==**
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2003388 total, 250840 free, 545832 used, 1206716 buff/cache
KiB Swap: 9765884 total, 9765764 free, 120 used. 1156536 avail Mem
```
Scary! Three zombies in the above display..
### at midnight
It is sometimes said that on Halloween, the spirits of the dead wander from sunset until midnight. Linux makes it possible to track their departure with the "at midnight" command. Used to schedule jobs that will be run the next time the specified time arrives, **at** works like a one-time cron.
```
$ at midnight
warning: commands will be executed using /bin/sh
at> echo 'the spirits of the dead have left'
at> <EOT>
job 3 at Thu Oct 31 00:00:00 2017
```
### daemons
Linux systems are also highly dependent on daemons - processes that run in the background and provide a lot of the functionality of the system. Many daemon processes have names that end in "d". That "d" stands for "daemon" and is an indication that the process is one that runs all of the time and supports some important function. Others have the word "daemon" spelled out.
```
$ ps -ef | grep sshd
root 1142 1 0 Oct19 ? 00:00:00 /usr/sbin/sshd -D
root 25342 1142 0 18:34 ? 00:00:00 sshd: shs [priv]
$ ps -ef | grep daemon | grep -v grep
message+ 790 1 0 Oct19 ? 00:00:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 836 1 0 Oct19 ? 00:00:02 /usr/lib/accountsservice/accounts-daemon
```
### Happy Halloween!
Join the Network World communities on [Facebook][1] and [LinkedIn][2] to comment on topics that are top of mind.
--------------------------------------------------------------------------------
via: https://www.networkworld.com/article/3235219/linux/scary-linux-commands-for-halloween.html
作者:[Sandra Henry-Stocker][a]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.networkworld.com/author/Sandra-Henry_Stocker/
[1]:https://www.facebook.com/NetworkWorld/
[2]:https://www.linkedin.com/company/network-world

View File

@ -1,3 +1,5 @@
translating---geekpi
How to find files in Linux
======

View File

@ -1,109 +0,0 @@
深度学习战争Facebook支持的PyTorch与Google的TensorFlow
======
有一个令人震惊的事实,即人工智能和机器学习的工具和技术在近期迅速兴起。深度学习或者说“注射了激素的机器学习”是数据科学家和机器学习专家在可用的库和框架方面被宠坏的一个领域。很多这样的框架都是基于Python的因为Python是一个更通用相对简单的语言。[Theano] [1][Keras] [2] [TensorFlow] [3]是一些基于Python构建的流行的深度学习库目的是使机器学习专家更轻松。
Google的TensorFlow是一个广泛使用的机器学习和深度学习框架。 TensorFlow开源于2015年得到了机器学习专家的广泛支持TensorFlow已经迅速成长为许多机构为其机器学习和深度学习需求所选择的框架。 另一方面PyTorch最近开发的用于训练神经网络的Python包被改编自基于Lua的深度学习库Torch。 PyTorch是少数可用的DL框架之一它使用基于磁带的autograd系统tape-based autograd system以快速和灵活的方式构建动态神经网络。
在这篇文章中我们将PyTorch与TensorFlow进行不同方面的比较。
让我们开始吧!
###什么编程语言支持 PyTorch和TensorFlow
虽然主要是用C ++和CUDA编写的但Tensorflow包含一个位于核心引擎上的Python API使得更便于被Pythonistas使用。 除了Python它还包括C ++HaskellJavaGo和Rust等其他API这意味着开发人员可以用他们的首选语言进行编码。
虽然PyTorch是一个Python软件包但你也可以提供使用基本的C / C ++语言的API进行编码。 如果你习惯使用Lua编程语言你也可以使用Torch API在PyTorch中编写神经网络模型。
###PyTorch和TensorFlow有多么易于使用
如果将TensorFlow作为一个独立的框架使用它可能会有点复杂并且会给深度学习模型的训练带来一些困难。 为了减少这种复杂性可以使用位于TensorFlow复杂引擎之上的Keras封装简化深度学习模型的开发和训练。 TensorFlow也支持PyTorch目前没有的[分布式培训] [4]。 由于包含Python APITensorFlow也可以在生产环境中使用即可用于培训练和部署企业级深度学习模型。
PyTorch由于Torch的复杂而被Python重写。 这使得PyTorch对于开发人员更为原生。 它有一个易于使用的框架,提供最大化的灵活和速度。 它还允许在训练过程中快速更改代码而不妨碍其性能。 如果你已经有了一些深度学习的经验并且以前使用过Torch那么基于它的速度效率和易用性你会更喜欢PyTorch。 PyTorch包含定制的GPU分配器这使得深度学习模型具有高度的内存效率。 由此,训练大型深度学习模型变得更容易。 因此Pytorch
在FacebookTwitterSalesforce等大型组织广受欢迎。
###用PyTorch和TensorFlow训练深度学习模型
PyTorch和TensorFlow都可以用来建立和训练神经网络模型。
TensorFlow在SCG静态计算图上工作包括在模型开始执行之前定义静态图形。 但是,一旦开始执行,在模型内的调整更改的唯一方法是使用[tf.session and tf.placeholder tensors][5]。
PyTorch非常适合训练RNNs递归神经网络因为它们在[PyTorch] [6]中比在TensorFlow中运行得更快。 它适用于DCG动态计算图可以随时在模型中定义和更改。 在DCG中每个模块可以单独调试这使得神经网络的训练更简单。
TensorFlow最近提出了TensorFlow Fold这是一个旨在创建TensorFlow模型的库用于处理结构化数据。 像PyTorch一样它实现了DCGs在CPU上提供高达10倍的计算速度在GPU上提供超过100倍的计算速度 在[Dynamic Batching] [7]的帮助下,你现在可以执行尺寸和结构都不相同的深度学习模型。
###GPU和CPU优化的比较
TensorFlow的编译时间比PyTorch短为构建真实世界的应用程序提供了灵活性。 它可以从CPUGPUTPU移动设备到Raspberry Pi物联网设备等各种处理器上运行。
另一方面PyTorch包括张量tensor计算可以使用GPU将深度神经网络模型加速到[50倍或更多] [8]。 这些张量可以停留在CPU或GPU上。 CPU和GPU都是独立的库 无论神经网络大小如何PyTorch都可以高效地利用。
###社区支持
TensorFlow是当今最流行的深度学习框架之一由此也给它带来了庞大的社区支持。 它有很好的文档和一套详细的在线教程。 TensorFlow还包括许多预先训练过的模型这些模型在[github] [9]上托管和提供。 这些模型提供给热衷于使用TensorFlow开发者和研究人员一些现成的材料来节省他们的时间和精力。
另一方面PyTorch的社区相对较小因为它最近才发展起来。 与TensorFlow相比文档并不是很好代码也不是很容易获得。 然而PyTorch确实允许个人与他人分享他们的预训练模型。
### PyTorch和TensorFlow-力量悬殊的故事
就目前而言由于各种原因Tensorflow显然比PyTorch更受青睐。
Tensorflow很大经验丰富最适合实际应用。 是大多数机器学习和深度学习专家明显的选择,因为它提供了大量的功能,最重要的是它在市场上的成熟应用。 它具有更好的社区支持以及多语言API可用。 它有一个很好的文档库,由于从准备到使用的代码使之易于生产。 因此,它更适合想要开始深度学习的人,或者希望开发深度学习模型的组织。
虽然PyTorch相对较新社区较小但它速度快效率高。 总之它给你所有的优势在于Python的有用性和易用性。 由于其效率和速度,对于基于研究的小型项目来说,这是一个很好的选择。 如前所述FacebookTwitter等公司正在使用Pytorch来训练深度学习模型。 但是,使用它尚未成为主流。 PyTorch的潜力是显而易见的但它还没有准备好去挑战这个TensorFlow的野兽。 然而考虑到它的增长PyTorch进一步优化并提供更多功能的日子并不遥远直到与TensorFlow可以比较。
###Savia Lobo
非常喜欢数据科学。 喜欢更新世界各地的科技事件。 喜欢歌唱和创作歌曲。 相信才智上的艺术。
--------------------------------------------------------------------------------
via: https://datahub.packtpub.com/deep-learning/dl-wars-pytorch-vs-tensorflow/
作者:[Savia Lobo][a]
译者:[Wuod3n](https://github.com/Wuod3n)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://datahub.packtpub.com/author/savial/
[1]:https://www.packtpub.com/web-development/deep-learning-theano
[2]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-keras
[3]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-tensorflow
[4]:https://www.tensorflow.org/deploy/distributed
[5]:https://www.tensorflow.org/versions/r0.12/get_started/basic_usage
[6]:https://www.reddit.com/r/MachineLearning/comments/66rriz/d_rnns_are_much_faster_in_pytorch_than_tensorflow/
[7]:https://arxiv.org/abs/1702.02181
[8]:https://github.com/jcjohnson/pytorch-examples#pytorch-tensors
[9]:https://github.com/tensorflow/models

View File

@ -0,0 +1,103 @@
可怕的万圣节 Linux 命令
======
万圣节快到了,是时候关注一下 Linux 可怕的一面。什么命令可能会显示鬼、巫婆和僵尸的图像?这可能会鼓励伎俩或治疗的精神?哪个会鼓励“不给糖果就捣蛋”的精神?
### crypt
好吧,我们一直看到 **crypt**。尽管名称不同crypt 不是一个地窖也不是垃圾文件的埋葬坑而是一个加密文件内容的命令。现在“crypt” 通常用一个脚本实现,通过调用一个名为 **mcrypt** 的二进制文件来模拟以前的 crypt 命令来完成它的工作。直接使用 **mycrypt** 命令是更好的选择。
```
$ mcrypt x
Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
File x was encrypted.
```
请注意mcrypt 命令会创建一个扩展名为 “.nc” 的第二个文件。它不会覆盖你正在加密的文件。
mcrypt 命令有密钥大小和加密算法的选项。你也可以再选项中指定密钥,但 mcrypt 命令不鼓励这样做。
### kill
还有 kill 命令 - 当然并不是指谋杀而是用来强制和非强制地结束进程这取决于正确终止它们的要求。当然Linux 并不止于此。相反,它有各种 kill 命令来终止进程。我们有 kill、pkill、killall、killpg、rfkill、skill (读作 es-kill)、tgkill、tkill 和 xkill。
```
$ killall runme
[1] Terminated ./runme
[2] Terminated ./runme
[3]- Terminated ./runme
[4]+ Terminated ./runme
```
### shred
Linux 系统也支持一个名为 **shred** 的命令。shred 命令会覆盖文件以隐藏其以前的内容并确保使用硬盘恢复工具无法恢复它们。请记住rm 命令基本上只是删除文件在目录文件中的引用,但不一定会从磁盘上删除内容或覆盖它。**shred** 命令覆盖文件的内容。
```
$ shred dupes.txt
$ more dupes.txt
▒oΛ▒▒9▒lm▒▒▒▒▒o▒1־▒▒f▒f▒▒▒i▒▒h^}&▒▒▒{▒▒
```
### 僵尸
虽然不是命令,但**僵尸**在 Linux 系统上是很顽固的存在。僵尸基本上是没有完全清理掉的死亡进程的遗骸。进程_不应该_这样工作 - 让死亡进程四处游荡,而不是简单地让它们死亡并进入数字天堂,所以僵尸的存在表明让他们遗留的进程有一些缺陷。
一个简单的方法来检查你的系统是否有僵尸进程遗留,看看 top 命令的标题行。
```
$ top
top - 18:50:38 up 6 days, 6:36, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 171 total, 1 running, 167 sleeping, 0 stopped, 3 zombie **< ==**
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2003388 total, 250840 free, 545832 used, 1206716 buff/cache
KiB Swap: 9765884 total, 9765764 free, 120 used. 1156536 avail Mem
```
可怕!上面显示有三个僵尸进程。
### at midnight
有时会在万圣节这么说死者的灵魂从日落开始游荡直到午夜。Linux 可以通过 “at midnight” 命令跟踪它们的离开。用于安排在下次到达指定时间时运行的作业,**at** 的作用类似于一次性的 cron。
```
$ at midnight
warning: commands will be executed using /bin/sh
at> echo 'the spirits of the dead have left'
at> <EOT>
job 3 at Thu Oct 31 00:00:00 2017
```
### 守护进程
Linux 系统也高度依赖守护进程 - 在后台运行的进程,并提供系统的许多功能。许多守护进程的名称以 “d” 结尾。这个 “d” 代表“守护进程” daemon表明这个进程一直运行并支持一些重要功能。有的会将单词 “daemon” 展开。
```
$ ps -ef | grep sshd
root 1142 1 0 Oct19 ? 00:00:00 /usr/sbin/sshd -D
root 25342 1142 0 18:34 ? 00:00:00 sshd: shs [priv]
$ ps -ef | grep daemon | grep -v grep
message+ 790 1 0 Oct19 ? 00:00:01 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 836 1 0 Oct19 ? 00:00:02 /usr/lib/accountsservice/accounts-daemon
```
### 万圣节快乐!
在 [Facebook][1] 和 [LinkedIn][2] 上加入 Network World 社区来对主题进行评论。
--------------------------------------------------------------------------------
via: https://www.networkworld.com/article/3235219/linux/scary-linux-commands-for-halloween.html
作者:[Sandra Henry-Stocker][a]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.networkworld.com/author/Sandra-Henry_Stocker/
[1]:https://www.facebook.com/NetworkWorld/
[2]:https://www.linkedin.com/company/network-world

View File

@ -1,117 +0,0 @@
提升针对国际读者技术性写作的5个技巧
============================================================
![documentation](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/typewriter-801921_1920.jpg?itok=faTXFNoE "documentation")
针对国际读者用英语写作很不容易,下面这些小窍门可以记下来。[知识共享许可][2]
针对国际读者用英语写文档不需要特别考虑英语母语的人。相反更应该注意文档的语言可能不是读者的第一语言。我们看看下面这些简单的句子“加密密码用xxx命令Encrypt the password using the 'foo bar' command.)”
从语法上讲这个句子是正确的。ing形式动名词经常在英语中使用很多英语母语的人应该大概对这样造句没有疑惑。然而仔细观察这个句子有歧义单词“using”可以针对“the password”也可以针对动词“加密”。因此这个句子能够有两种不同的理解方式。
* Encrypt the password that uses the 'foo bar' command 加密这个使用xxx命令的密码.
* Encrypt the password by using the 'foo bar' command使用xxx命令加密密码.
关于这个话题密码加密或者xxx命令只要你有这方面的知识你就不会理解错误而且正确的选择第二种方式才是句子要表达的含义。但是如果你对这个知识点没有概念呢如果你仅仅是一个翻译者只有关于文章主题的一般知识而不是一个技术专家或者英语不是你的母语而且你不熟悉英语的高级语法形式呢
甚至连英语母语的人都可能需要一些训练才能写出简洁明了的技术文档。所以提升对文章适用性和潜在问题的认识是第一步。
这篇文章,基于我在[欧盟开放源码峰会][5]上的演讲,提供了几种有用的技巧。大多数技巧不仅仅针对技术文档,也可以用于日程信函的书写,如邮件或者报告之类的。
**1. 转换视角**
转换视角从你的读者出发。首先要了解你潜在的读者。如果你是作为开发人员针对用户写则从用户的视角来看待你的产品。用户画像Persona技术能够帮助你专注于目标受众而且提供关于你的受众适当的细节信息。
**2. 遵守KISSKeep it short and simple原则**
这个原则可以用于几个层次,如语法,句式或者单词。看下面的例子:
_单词:_
罕见的和长的单词会降低阅读速度而且可能会是非母语读者的障碍。使用简单点的单词,如:
“utilize” → “use”
“indicate” → “show”, “tell”, “say”
“prerequisite” → “requirement”
_语法_
最好使用最简单的时态。举个例子当提到一个动作的结果时使用一般现在时。如“Click '_OK_' . The _Printer Options_ dialog appears单击'_ok_'.就弹出_打印选项_对话框了
_句式_
一般说来,一个句子就表达一个意思。然而在我看来,把句子的长度限制到一定数量的单词是没有用的。短句子不是想着那么容易理解的(特别是一组名词的时候)。有时候把句子剪短到一定单词数量会造成歧义,相应的还会使句子更加难以理解。
**3. 当心歧义**
作为作者,我们通常没有注意到句子中的歧义。让别人审阅你的文章有助于发现这些问题。如果无法这么做,就尝试从这些不同的视角审视每个句子:
对于没有相关知识背景的读者也能看懂吗?对于语言能力有限的读者也可以吗?所有句子成分间的语法关系清晰吗?如果某个句子没有达到这些要求,重新措辞来解决歧义。
**4. 格式统一**
这个适用于对单词,拼写和标点符号的选择,也是适用于短语和结构的选择。对于列表,使用平行的语法造句。如:
Why white space is important为什么空格很重要:
* It focuses attention让读者注意力集中.
* It visually separates sections让文章章节分割更直观.
* It splits content into chunks让文章内容分割为不同块.
**5. 清除冗余**
对目标读者仅保留明确的信息。在句子层面避免填充如basically, easily和没必要的修饰。如
"already existing" → "existing"
"completely new" → "new"
##总结
你现在应该猜到了,写作就是改。好的文章需要付出和练习。但是如果你仅是偶尔写写,则可以通过专注目标读者和运用基本写作技巧来显著地提升你的文章。
文章易读性越高理解起来越容易即使针对于不同语言级别的读者也是一样。尤其在本地化翻译方面高质量的原文是非常重要的因为“错进错出原文Garbage in, garbage out"。如果原文有不足,翻译时间会更长,导致更高的成本。甚至,这种不足会在翻译过程中成倍的放大而且后面需要在多种语言版本中改正。
![Tanja Roth](https://www.linux.com/sites/lcom/files/styles/floated_images/public/tanja-roth.jpg?itok=eta0fvZC "Tanja Roth")
Tanja Roth, SUSE Linux公司-技术文档专家 [使用许可][1]
_在对语言和技术两方面兴趣的驱动下Tanja作为一名技术文章的写作者在机械工程医学技术和IT领域工作了很多年。她在2005年加入SUSE组织并且贡献了各种各样产品和项目的文章包括高可用性和云的相关话题。_
--------------------------------------------------------------------------------
via: https://www.linux.com/blog/event/open-source-summit-eu/2017/12/technical-writing-international-audience?sf175396579=1
作者:[TANJA ROTH ][a]
译者:[yizhuoyan](https://github.com/yizhuoyan)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.linux.com/users/tanja-roth
[1]:https://www.linux.com/licenses/category/used-permission
[2]:https://www.linux.com/licenses/category/creative-commons-zero
[3]:https://www.linux.com/files/images/tanja-rothjpg
[4]:https://www.linux.com/files/images/typewriter-8019211920jpg
[5]:https://osseu17.sched.com/event/ByIW
[6]:https://en.wikipedia.org/wiki/Persona_(user_experience)