+```
+
+#### 轮廓
+
+我们刚才看了使用了边缘和原始形状的 SVG。另外一种矢量化图像的方式是 “描绘” 它们。在几天前 [Mikael Ainalem][47] 分享了一个 [codepen][48] 代码,展示了怎么去使用两色轮廓作为一个占位符。结果非常漂亮:
+
+
+
+SVG 在这种情况下是手工绘制的,但是,这种技术可以用工具快速生成并自动化处理。
+
+* [Gatsby][13],一个用 React 支持的描绘 SVG 的静态网站生成器。它使用 [一个 potrace 算法的 JS 移植][14] 去矢量化图像。
+* [Craft 3 CMS][15],它也增加了对轮廓的支持。它使用了 [一个 potrace 算法的 PHP 移植][16]。
+* [image-trace-loader][17],一个使用了 potrace 算法去处理图像的 Webpack 加载器。
+
+如果感兴趣,可以去看一下 Emil 的 webpack 加载器 (基于 potrace) 和 Mikael 的手工绘制 SVG 之间的比较。
+
+这里我假设该输出是使用默认选项的 potrace 生成的。但是可以对它们进行优化。查看 [图像描绘加载器的选项][49],[传递给 potrace 的选项][50]非常丰富。
+
+### 总结
+
+我们看到了从图像中生成 SVG 并使用它们作为占位符的各种不同的工具和技术。与 [WebP 是一个用于缩略图的奇妙格式][51] 一样,SVG 也是一个用于占位符的有趣格式。我们可以控制细节的级别(和它们的大小),它是高可压缩的,并且很容易用 CSS 和 JS 进行处理。
+
+#### 额外的资源
+
+这篇文章上到了 [Hacker News 热文][52]。对此以及在该页面的评论中分享的其它资源的链接,我表示非常感谢。下面是其中一部分。
+
+* [Geometrize][18] 是用 Haxe 写的 Primitive 的一个移植。也有[一个 JS 实现][19],你可以直接 [在你的浏览器上][20]尝试它。
+* [Primitive.js][21],它也是 Primitive 在 JS 中的一个移植,[primitive.nextgen][22],它是使用 Primitive.js 和 Electron 的 Primitive 的桌面版应用的一个移植。
+* 这里有两个 Twitter 帐户,里面你可以看到一些用 Primitive 和 Geometrize 生成的图像示例。访问 [@PrimitivePic][23] 和 [@Geometrizer][24]。
+* [imagetracerjs][25],它是在 JavaScript 中的光栅图像描绘器和矢量化程序。这里也有为 [Java][26] 和 [Android][27] 提供的移植。
+
+--------------------------------------------------------------------------------
+
+via: https://medium.freecodecamp.org/using-svg-as-placeholders-more-image-loading-techniques-bed1b810ab2c
+
+作者:[José M. Pérez][a]
+译者:[qhwdw](https://github.com/qhwdw)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://medium.freecodecamp.org/@jmperezperez?source=post_header_lockup
+[1]:https://medium.com/@jmperezperez/how-medium-does-progressive-image-loading-fd1e4dc1ee3d
+[2]:https://medium.com/@jmperezperez/using-webp-to-create-tiny-preview-images-3e9b924f28d6
+[3]:https://medium.com/@jmperezperez/more-examples-of-progressive-image-loading-f258be9f440b
+[4]:https://github.com/fraser-hemp/gradify
+[5]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square.jpg
+[6]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square-10.svg
+[7]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square-100.svg
+[8]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-618463-square.jpg
+[9]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-618463-square-10.svg
+[10]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-618463-square-100.svg
+[11]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square-sqip.svg
+[12]:https://jmperezperez.com/svg-placeholders/%28/assets/images/posts/svg-placeholders/pexels-photo-618463-square-sqip.svg
+[13]:https://www.gatsbyjs.org/
+[14]:https://www.npmjs.com/package/potrace
+[15]:https://craftcms.com/
+[16]:https://github.com/nystudio107/craft3-imageoptimize/blob/master/src/lib/Potracio.php
+[17]:https://github.com/EmilTholin/image-trace-loader
+[18]:https://github.com/Tw1ddle/geometrize-haxe
+[19]:https://github.com/Tw1ddle/geometrize-haxe-web
+[20]:http://www.samcodes.co.uk/project/geometrize-haxe-web/
+[21]:https://github.com/ondras/primitive.js
+[22]:https://github.com/cielito-lindo-productions/primitive.nextgen
+[23]:https://twitter.com/PrimitivePic
+[24]:https://twitter.com/Geometrizer
+[25]:https://github.com/jankovicsandras/imagetracerjs
+[26]:https://github.com/jankovicsandras/imagetracerjava
+[27]:https://github.com/jankovicsandras/imagetracerandroid
+[28]:https://medium.com/@jmperezperez/lazy-loading-images-on-the-web-to-improve-loading-time-and-saving-bandwidth-ec988b710290
+[29]:https://www.youtube.com/watch?v=szmVNOnkwoU
+[30]:https://medium.com/@jmperezperez/drawing-images-using-edge-detection-and-svg-animation-16a1a3676d3
+[31]:https://medium.com/@jmperezperez/drawing-images-using-edge-detection-and-svg-animation-16a1a3676d3
+[32]:https://medium.com/@jmperezperez/drawing-images-using-edge-detection-and-svg-animation-16a1a3676d3
+[33]:https://jmperezperez.com/cssconfau16/#/45
+[34]:https://jmperezperez.com/renderconf17/#/46
+[35]:https://en.wikipedia.org/wiki/Delaunay_triangulation
+[36]:https://github.com/possan/polyserver
+[37]:https://github.com/technopagan/sqip
+[38]:https://github.com/fogleman/primitive
+[39]:https://github.com/technopagan/cjpeg-dssim
+[40]:https://en.wikipedia.org/wiki/Structural_similarity
+[41]:https://github.com/technopagan/sqip
+[42]:https://github.com/fogleman/primitive
+[43]:https://github.com/svg/svgo
+[44]:https://medium.com/@jmperezperez/how-medium-does-progressive-image-loading-fd1e4dc1ee3d
+[45]:https://medium.com/@jmperezperez/more-examples-of-progressive-image-loading-f258be9f440b
+[46]:http://www.w3.org/2000/svg
+[47]:https://twitter.com/mikaelainalem
+[48]:https://codepen.io/ainalem/full/aLKxjm/
+[49]:https://github.com/EmilTholin/image-trace-loader#options
+[50]:https://www.npmjs.com/package/potrace#parameters
+[51]:https://medium.com/@jmperezperez/using-webp-to-create-tiny-preview-images-3e9b924f28d6
+[52]:https://news.ycombinator.com/item?id=15696596
diff --git a/translated/tech/20171107 GitHub welcomes all CI tools.md b/published/20171107 GitHub welcomes all CI tools.md
similarity index 77%
rename from translated/tech/20171107 GitHub welcomes all CI tools.md
rename to published/20171107 GitHub welcomes all CI tools.md
index a20d164014..ef86f5a82b 100644
--- a/translated/tech/20171107 GitHub welcomes all CI tools.md
+++ b/published/20171107 GitHub welcomes all CI tools.md
@@ -1,70 +1,55 @@
-GitHub 欢迎所有 CI 工具
+GitHub 欢迎一切 CI 工具
====================
-
[][11]
-持续集成([CI][12])工具可以帮助你在每次提交时执行测试,并将[报告结果][13]提交到合并请求,从而帮助维持团队的质量标准。结合持续交付([CD][14])工具,你还可以在多种配置上测试你的代码,运行额外的性能测试,并自动执行每个步骤[直到产品][15]。
+持续集成([CI][12])工具可以帮助你在每次提交时执行测试,并将[报告结果][13]提交到合并请求,从而帮助维持团队的质量标准。结合持续交付([CD][14])工具,你还可以在多种配置上测试你的代码,运行额外的性能测试,并自动执行每个步骤,[直到进入产品阶段][15]。
-有几个[与 GitHub 集成][16]的 CI 和 CD 工具,其中一些可以在 [GitHub Marketplace][17] 中点击几下安装。有了这么多的选择,你可以选择最好的工具 - 即使它不是与你的系统预集成的工具。
+有几个[与 GitHub 集成][16]的 CI 和 CD 工具,其中一些可以在 [GitHub Marketplace][17] 中点击几下安装。有了这么多的选择,你可以选择最好的工具 —— 即使它不是与你的系统预集成的工具。
最适合你的工具取决于许多因素,其中包括:
* 编程语言和程序架构
-
* 你计划支持的操作系统和浏览器
-
* 你团队的经验和技能
-
* 扩展能力和增长计划
-
* 依赖系统的地理分布和使用的人
-
* 打包和交付目标
-当然,无法为所有这些情况优化你的 CI 工具。构建它们的人需要选择哪些情况服务更好,何时优先考虑复杂性而不是简单性。例如,如果你想测试针对一个平台的用特定语言编写的小程序,那么你就不需要那些可在数十个平台上测试,有许多编程语言和框架的,用来测试嵌入软件控制器的复杂工具。
+当然,无法为所有这些情况优化你的 CI 工具。构建它们的人需要选择哪些情况下服务更好,何时优先考虑复杂性而不是简单性。例如,如果你想测试针对一个平台的用特定语言编写的小程序,那么你就不需要那些可在数十个平台上测试,有许多编程语言和框架的,用来测试嵌入软件控制器的复杂工具。
-如果你需要一些灵感来挑选最好使用哪个 CI 工具,那么看一下[ Github 上的流行项目][18]。许多人在他们的 README.md 中将他们的集成的 CI/CD 工具的状态显示为徽章。我们还分析了 GitHub 社区中超过 5000 万个仓库中 CI 工具的使用情况,并发现了很多变化。下图显示了根据我们的 pull 请求中使用最多的[提交状态上下文][19],GitHub.com 使用的前 10 个 CI 工具的相对百分比。
+如果你需要一些灵感来挑选最好使用哪个 CI 工具,那么看一下 [Github 上的流行项目][18]。许多人在他们的 README.md 中将他们的集成的 CI/CD 工具的状态显示为徽章。我们还分析了 GitHub 社区中超过 5000 万个仓库中 CI 工具的使用情况,并发现了很多变化。下图显示了根据我们的拉取请求中使用最多的[提交状态上下文][19],GitHub.com 使用的前 10 个 CI 工具的相对百分比。
_我们的分析还显示,许多团队在他们的项目中使用多个 CI 工具,使他们能够发挥它们最擅长的。_
- [][20]
+[][20]
如果你想查看,下面是团队中使用最多的 10 个工具:
* [Travis CI][1]
-
* [Circle CI][2]
-
* [Jenkins][3]
-
* [AppVeyor][4]
-
* [CodeShip][5]
-
* [Drone][6]
-
* [Semaphore CI][7]
-
* [Buildkite][8]
-
* [Wercker][9]
-
* [TeamCity][10]
这只是尝试选择默认的、预先集成的工具,而没有花时间根据任务研究和选择最好的工具,但是对于你的特定情况会有很多[很好的选择][21]。如果你以后改变主意,没问题。当你为特定情况选择最佳工具时,你可以保证量身定制的性能和不再适合时互换的自由。
准备好了解 CI 工具如何适应你的工作流程了么?
-[浏览 GitHub Marketplace][22]
+- [浏览 GitHub Marketplace][22]
--------------------------------------------------------------------------------
via: https://github.com/blog/2463-github-welcomes-all-ci-tools
-作者:[jonico ][a]
+作者:[jonico][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/) 荣誉推出
diff --git a/translated/tech/20171116 Introducing security alerts on GitHub.md b/published/20171116 Introducing security alerts on GitHub.md
similarity index 63%
rename from translated/tech/20171116 Introducing security alerts on GitHub.md
rename to published/20171116 Introducing security alerts on GitHub.md
index b8f0afba17..3f39606f7a 100644
--- a/translated/tech/20171116 Introducing security alerts on GitHub.md
+++ b/published/20171116 Introducing security alerts on GitHub.md
@@ -1,8 +1,7 @@
介绍 GitHub 上的安全警报
====================================
-
-上个月,我们用依赖关系图让你更容易跟踪你代码依赖的的项目,目前支持 Javascript 和 Ruby。如今,超过 75% 的 GitHub 项目有依赖,我们正在帮助你做更多的事情,而不只是关注那些重要的项目。在启用依赖关系图后,当我们检测到你的依赖中有漏洞或者来自 Github 社区中建议的已知修复时通知你。
+上个月,我们用依赖关系图让你更容易跟踪你代码依赖的的项目,它目前支持 Javascript 和 Ruby。如今,超过 75% 的 GitHub 项目有依赖,我们正在帮助你做更多的事情,而不只是关注那些重要的项目。在启用依赖关系图后,当我们检测到你的依赖中有漏洞时会通知你,并给出来自 Github 社区中的已知修复。
[][1]
@@ -10,33 +9,33 @@
无论你的项目时私有还是公有的,安全警报都会为团队中的正确人员提供重要的漏洞信息。
-启用你的依赖图
+**启用你的依赖图:**
公开仓库将自动启用依赖关系图和安全警报。对于私人仓库,你需要在仓库设置中添加安全警报,或者在 “Insights” 选项卡中允许访问仓库的 “依赖关系图” 部分。
-设置通知选项
+**设置通知选项:**
启用依赖关系图后,管理员将默认收到安全警报。管理员还可以在依赖关系图设置中将团队或个人添加为安全警报的收件人。
-警报响应
+**警报响应:**
-当我们通知你潜在的漏洞时,我们将突出显示我们建议更新的任何依赖关系。如果存在已知的安全版本,我们将使用机器学习和公开数据中选择一个,并将其包含在我们的建议中。
+当我们通知你潜在的漏洞时,我们将突出显示我们建议更新的任何依赖关系。如果存在已知的安全版本,我们将通过机器学习和公开数据选择一个,并将其包含在我们的建议中。
### 漏洞覆盖率
-有 [CVE ID][2](公开披露的[国家漏洞数据库][3]中的漏洞)的漏洞将包含在安全警报中。但是,并非所有漏洞都有 CVE ID,甚至许多公开披露的漏洞也没有。随着安全数据的增长,我们将继续更好地识别漏洞。如需更多帮助来管理安全问题,请查看我们的[ GitHub Marketplace 中的安全合作伙伴][4]。
+有 [CVE ID][2]([国家漏洞数据库][3]公开披露的漏洞)的漏洞将包含在安全警报中。但是,并非所有漏洞都有 CVE ID,甚至许多公开披露的漏洞也没有。随着安全数据的增长,我们将继续更好地识别漏洞。如需更多帮助来管理安全问题,请查看我们的 [GitHub Marketplace 中的安全合作伙伴][4]。
这是使用世界上最大的开源数据集的下一步,可以帮助你保持代码安全并做到最好。依赖关系图和安全警报目前支持 JavaScript 和 Ruby,并将在 2018 年提供 Python 支持。
-[了解更多关于安全警报][5]
+- [了解更多关于安全警报][5]
--------------------------------------------------------------------------------
via: https://github.com/blog/2470-introducing-security-alerts-on-github
-作者:[mijuhan ][a]
+作者:[mijuhan][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/) 荣誉推出
diff --git a/published/20171117 System Logs Understand Your Linux System.md b/published/20171117 System Logs Understand Your Linux System.md
new file mode 100644
index 0000000000..0fd33f43e4
--- /dev/null
+++ b/published/20171117 System Logs Understand Your Linux System.md
@@ -0,0 +1,59 @@
+用系统日志了解你的 Linux 系统
+============
+
+本文摘自为 Linux 小白(或者非资深桌面用户)传授技巧的系列文章。该系列文章旨在为 LinuxMagazine 发布的第 30 期特别版 “[Linux 入门][2]” (基于 [openSUSE Leap][3] )提供补充说明。
+
+本文作者是 Romeo S.,她是一名基于 PDX 的企业 Linux 专家,专注于为创新企业提供富有伸缩性的解决方案。
+
+Linux 系统日志非常重要。后台运行的程序(通常被称为守护进程或者服务进程)处理了你 Linux 系统中的大部分任务。当这些守护进程工作时,它们将任务的详细信息记录进日志文件中,作为它们做过什么的“历史”信息。这些守护进程的工作内容涵盖从使用原子钟同步时钟到管理网络连接。所有这些都被记录进日志文件,这样当有错误发生时,你可以通过查阅特定的日志文件来看出发生了什么。
+
+
+
+*Photo by Markus Spiske on Unsplash*
+
+在你的 Linux 计算机上有很多不同的日志。历史上,它们一般以纯文本的格式存储到 `/var/log` 目录中。现在依然有很多日志这样做,你可以很方便的使用 `less` 来查看它们。
+
+在新装的 openSUSE Leap 42.3 以及大多数现代操作系统上,重要的日志由 `systemd` 初始化系统存储。 `systemd`这套系统负责启动守护进程,并在系统启动时让计算机做好被使用的准备。由 `systemd` 记录的日志以二进制格式存储,这使得它们消耗的空间更小,更容易被浏览,也更容易被导出成其他各种格式,不过坏处就是你必须使用特定的工具才能查看。好在这个工具已经预安装在你的系统上了:它的名字叫 `journalctl`,而且默认情况下,它会将每个守护进程的所有日志都记录到一个地方。
+
+只需要运行 `journalctl` 命令就能查看你的 `systemd` 日志了。它会用 `less` 分页器显示各种日志。为了让你有个直观的感受, 下面是 `journalctl` 中摘录的一条日志记录:
+
+```
+Jul 06 11:53:47 aaathats3as pulseaudio[2216]: [pulseaudio] alsa-util.c: Disabling timer-based scheduling because running inside a VM.
+```
+
+这条独立的日志记录以此包含了记录的日期和时间、计算机名、记录日志的进程名、记录日志的进程 PID,以及日志内容本身。
+
+若系统中某个程序运行出问题了,则可以查看日志文件并搜索(使用 `/` 加上要搜索的关键字)程序名称。有可能导致该程序出问题的错误会记录到系统日志中。 有时,错误信息会足够详细到让你能够修复该问题。其他时候,你需要在 Web 上搜索解决方案。 Google 就很适合来搜索奇怪的 Linux 问题。不过搜索时请注意你只输入了日志的实际内容,行首的那些信息(日期、主机名、进程 ID) 对搜索来说是无意义的,会干扰搜索结果。
+
+解决方法一般在搜索结果的前几个连接中就会有了。当然,你不能只是无脑得运行从互联网上找到的那些命令:请一定先搞清楚你要做的事情是什么,它的效果会是什么。据说,搜索系统日志中的特定条目要比直接描述该故障通用关键字要有用的多。因为程序出错有很多原因,而且同样的故障表现也可能由多种问题引发的。
+
+比如,系统无法发声的原因有很多,可能是播放器没有插好,也可能是声音系统出故障了,还可能是缺少合适的驱动程序。如果你只是泛泛的描述故障表现,你会找到很多无关的解决方法,而你也会浪费大量的时间。而专门搜索日志文件中的实际内容,你也许会查询出其它人也有相同日志内容的结果。
+
+你可以对比一下图 1 和图 2。
+
+
+
+图 1 搜索系统的故障表现只会显示泛泛的,不精确的结果。这种搜索通常没什么用。
+
+
+
+图 2 搜索特定的日志行会显示出精确的,有用的结果。这种搜索通常很有用。
+
+也有一些系统不用 `journalctl` 来记录日志。在桌面系统中最常见的这类日志包括用于记录 openSUSE 包管理器的行为的 `/var/log/zypper.log`; 记录系统启动时消息的 `/var/log/boot.log` ,开机时这类消息往往滚动的特别快,根本看不过来;`/var/log/ntp` 用来记录 Network Time Protocol (NTP)守护进程同步时间时发生的错误。 另一个存放硬件故障信息的地方是 “Kernel Ring Buffer”(内核环状缓冲区),你可以输入 `demesg -H` 命令来查看(这条命令也会调用 `less` 分页器来查看)。“Kernel Ring Buffer” 存储在内存中,因此会在重启电脑后丢失。不过它包含了 Linux 内核中的重要事件,比如新增了硬件、加载了模块,以及奇怪的网络错误.
+
+希望你已经准备好深入了解你的 Linux 系统了! 祝你玩的开心!
+
+--------------------------------------------------------------------------------
+
+via: https://www.suse.com/communities/blog/system-logs-understand-linux-system/
+
+作者:[chabowski]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[1]:https://www.suse.com/communities/blog/author/chabowski/
+[2]:http://www.linux-magazine.com/Resources/Special-Editions/30-Getting-Started-with-Linux
+[3]:https://en.opensuse.org/Portal:42.3
+[4]:http://www.linux-magazine.com/
diff --git a/published/20171118 Language engineering for great justice.md b/published/20171118 Language engineering for great justice.md
new file mode 100644
index 0000000000..3ae564dba3
--- /dev/null
+++ b/published/20171118 Language engineering for great justice.md
@@ -0,0 +1,59 @@
+ESR:程序语言设计的要诣和真谛
+============================================================
+
+当你真正掌握了整体化的工程设计思维时,你就会发现高屋建瓴的工程设计已经远远超越了技术优化的层面。我们的每一件创造都催生于人类活动的大背景下,被这种人类活动赋予了广泛的经济学意义、社会学意义,甚至于具有了奥地利经济学家所称的“人类行为学意义”。而这种人类行为学意义则是明确的人类行为所能达到的最高层次。
+
+对我来说这并不只是一种抽象的理论。当我在撰写关于开源项目开发的文章时,文章的内容正是关于人类行为学的 —— 这些文章并不涉及哪个具体的软件技术或者话题,而是在讨论科技所服务的人类行为。从人类行为学角度对科技进行更深入的理解,可以帮助我们重塑科技,并且提升我们的生产力和成就感。这种提升并不总是因为我们有了更新的工具,而更多的是因为我们改变了使用现有工具的思路,提升了我们对这些工具的驾驭能力。
+
+在这个思路之下,我的随笔文章的第三篇中谈到了 C 语言的衰退和正在到来的巨大改变,而我们也确实能够感受到系统级别编程的新时代的到来。在这里,我会把我的统观见解总结成更具体的、更实用的对计算机语言设计的分析。例如总结出为什么一些语言会成功,另一些语言会失败。
+
+在我最近的一篇文章中,我写道:所有计算机语言的设计都是对机器资源和程序员人力成本的相对权衡的结果;是对一种相对价值主张的体现。而这些设计思路都是在硬件算力成本不断下降,程序员人力成本相对稳定且可能不减反增的背景下产生的。我还强调了语言设计在实现了一些原有的权衡方案之后,其未来的转化和演变成本在这种语言的成败中所要扮演的一些额外角色。在文中我也阐述了编程语言设计者是如何为当前和可见的未来寻找新的最优设计方案的。
+
+现在我要集中讲解一下我在上面段落里最后提到的那个概念,即语言设计工程师们其实可以在多个方面来改进和提高现阶段编程语言的设计水准。比如输入系统的优化,GC (垃圾回收机制) 和手动内存分配的权衡,命令导向、函数导向和面向对象导向的混合和权衡。但是站在人类行为学的角度去考量,我认为设计师们一定会做出更简单的设计权衡,即针对近景问题还是针对远景问题来优化一种语言的设计。
+
+所谓的“远”、“近”之分,是指随着硬件成本的逐渐降低,软件复杂程度的上升和由现有语言向其他语言转化的成本的增加,根据这些因素的变化曲线所做出的判断。近景问题是编程人员眼下看到的问题,远景问题则是指可预见的,但未必会很快到来的一系列情况。针对近景问题的解决方案可以被很快部署下去,且能够在短期内非常有效,但随着情况的变化和时间的推移,这种方案可能很快就不适用了。而远景的解决方案可能因为其自身的复杂和超前性而夭折,或是因其代价过高无法被接受和采纳。
+
+在计算机刚刚面世的时候, FORTRAN 就是一个近景设计方案, LISP 语言的设计则是针对远景问题;汇编语言多是近景设计方案,很好的阐明了这类设计很适用于非通用语言,同样的例子还包括 ROFF 标记语言。PHP 和 Javascript 则是我们后来看到的采用了近景设计思维的语言。那么后来的远景设计方案有哪些例子呢? Oberon、Ocaml、ML、XML-Docbook 都是它的例子。学术研究中设计出的语言多倾向于远景设计,因为在学术研究领域,原创性以及大胆的假设与想法是很重要的。这和学术研究的动机以及其奖励机制很有关系(值得注意的是,在学术研究中,倾向于远景设计的本源动机并非出于技术方面的原因,而是出自于人类行为,即标新立异才能在学术上有成绩)。学术研究中设计出的编程语言是注定会失败的;因为学术研究的产物常常有高昂的转入成本,无人问津的设计。这类语言也因为在社区中不够流行而不能得到主流的采纳,具有孤立性,且常常被搁置成为半成品。(如上所述的问题正是对 LISP 历史的精辟总结,而且我是以一个对 LISP 语言有深入研究,并深深喜爱它的使用者的身份来评价 LISP 的)。
+
+一些近景设计的失败案例则更加惨不忍睹。对这些案例来说,我们能够期待的最好的结果就是这种语言可以消亡的相对体面一些,被一种新的语言设计取而代之。如果这些近景设计导向的语言没有死亡而是一直被沿用下去(通常是因为转化成本过高),那么我们则会看到不断有新的特性和功能在这些语言原来的基础之上堆积起来,以保持它们的可用性和有效性。直到这种堆积把这些语言变得越来越复杂,变的危若累卵且不可理喻。是的,我说的就是 C++ 。当然, 还有 Javascript。Perl 也不例外,尽管它的设计者 Larry Walls 有不错的设计品味,避免了很多问题,让这种语言得以存活了很多年。但也正是因为 Larry Walls 的好品味,让他在最终对 Perl 的固有问题忍无可忍之后发布了全新的 Perl 6。
+
+从这种角度去思考程序语言,我们则可以把语言设计中需要侧重的目标重新归纳为两部分: (1)以时间的远近为轴,在远景设计和近景设计之间选取一个符合预期的最佳平衡点;(2)降低由一种或多种语言转化为这种新语言的转入成本,这样就可以更好地吸纳其它语言的用户群。接下来我会讲讲 C 语言是怎样占领全世界的。
+
+在整个计算机发展史中,没有谁能比 C 语言在选择远景和近景设计的平衡点的时候做的更完美。事实胜于雄辩,作为一种实用的主流语言,C 语言有着很长的寿命,它目睹了无数个竞争者的兴衰,但它的地位仍旧不可取代。从淘汰它的第一个竞争者到现在已经过了 35 年,但看起来 C 语言的终结仍旧不会到来。
+
+当然,你可以把 C 语言的持久存在归功于文化惰性,但那是对“文化惰性”这个词的曲解,C 语言一直得以延续的真正原因是因为目前还没有人能提供另一种足够好的语言,可以抵消取代 C 语言所需要的转化成本!
+
+相反的,C 语言低廉的内向转化成本(转入成本)并未引起大家应有的重视,C 语言几乎是唯一的一个极其多样和强大的编程工具,以至于从它漫长统治时期的初期开始,它就可以适用于多种语言如 FORTRAN、Pascal、汇编语言和 LISP 的编程习惯。在一九八零年代我就注意到,我常常可以根据一个 C 语言新人的编码风格判断出他之前在使用什么语言,这也从另一方面证明了 C 语言可以轻松的被其它语言的使用者所接受,并吸引他们加入进来。
+
+C++ 语言同样胜在它低廉的转化成本。很快,大部分新兴的语言为了降低自身的转入成本,都纷纷参考了 C 语言的语法。值得注意的是这给未来的语言设计带来了一种影响:即新语言的设计都在尽可能的向 C 的语法靠拢,以便这种新语言可以有很低的内向转化成本(转入成本),使其他语言的使用者可以欣然接受并使用这种新语言。
+
+另一种降低转入成本的方法则是把一种编程语言设计的极其简单并容易入手,让那些即使是没有编程经验的人都可以轻松学会。但做到这一点并非易事。我认为只有一种语言 —— Python —— 成功的做到了这一点,即通过易用的设计来降低内向转化成本。对这种程序语言的设计思路我在这里一带而过,因为我并不认为一种系统级别的语言可以被设计的像 Python 一样傻瓜易用,当然我很希望我的这个论断是错的。
+
+而今我们已经来到 2017 年末尾,你一定猜测我接下来会向那些 Go 语言的鼓吹者一样对 Go 大加赞赏一番,然后激怒那些对 Go 不厌其烦的人群。但其实我的观点恰恰相反,我认为 Go 本身很有可能在许多方面遭遇失败。Go 团队太过固执独断,即使几乎整个用户群体都认为 Go 需要做出某些方面的改变了,Go 团队也无动于衷,这是个大问题。目前,Go 语言的 GC 延迟问题以及用以平衡延迟而牺牲掉的吞吐量,都可能会严重制约这种语言的适用范围。
+
+即便如此,在 Go 的设计中还是蕴含了一个让我颇为认同的远大战略目标。想要理解这个目标,我们需要回想一下如果想要取代 C 语言,要面临的短期问题是什么。正如我之前提到的,这个问题就是,随着软件工程项目和系统的不断扩张,故障率也在持续上升,这其中内存管理方面的故障尤其多,而内存管理故障一直是导致系统崩溃和安全漏洞的主要元凶。
+
+我们现在已经认清,一种语言要想取代 C 语言,它的设计就必须遵循两个十分重要准则:(1)解决内存管理问题;(2)降低由 C 语言向本语言转化时所需的转入成本。从人类行为学的角度来纵观编程语言的历史,我们不难发现,作为 C 语言的准替代者,如果不能有效解决转入成本过高这个问题,那设计者所做的其它部分做得再好都不算数。相反的,如果一种 C 的替代语言把转入成本过高这个问题解决地很好,即使它在其他部分做的不是最好的,人们也不会对这种语言吹毛求疵。
+
+而 Go 正是遵循了上述两点设计思路,虽然这个思路并不是一种完美无瑕的设计理论,也有其局限性。比如,目前 GC 延迟的问题就限制了 Go 的推广。但是 Go 目前选择了照搬 Unix 下 C 语言的传染战略,把其自身设计成一种易于转入,便于传播的语言。这样它的广泛和快速的传播就会使其迅速占领市场,从而打败那些针对远景设计的看起来更好的语言。
+
+没错,我所指的这个远景设计方案就是 Rust。而 Rust 的自身定位也正是一种远景和长期的 C 语言替代方案。我曾经在之前的一些文章中解释过我为什么认为 Rust 还没有做好和 Go 展开竞争的准备。TIBOE 和 PYPL 的语言评价指数榜也很好的证明了我的对于 Rust 的这个观点。在 TIBOE 上 Rust 从来没有进过前 20 名。而在 TIBOE 和 PYPL 两个指数榜上, Rust 都要比 Go 的表现差很多。
+
+五年后的 Rust 会发展的怎样还未可知。但如果 Rust 社区的开发人员对这种语言的设计抱着认真投入的态度,并愿意倾听,那么我建议他们要特别重视转入成本的问题。以我个人经历来说,目前由 C 语言转入 Rust 语言的壁垒很高,使人望而却步。如果 Corrode 之类的 Code-lifting 工具只是把 C 语言映射为不安全的 Rust 语言,那么 Corrode 这类工具也是不能解决这种转入壁垒的。或者如果有更简单的方法能够自动注释代码的所有权或生命周期,那么编译器就能把 C 代码直接映射到 Rust,人们也不再需要 Corrode 这一类工具了。目前我还不知道这个问题要如何解决,但我觉得 Rust 社区最好能够找到一种解决方案来代替 Corrode 和其同类工具。
+
+在最后我想强调一下,Ken Thompson 曾经有过语言设计的辉煌历史。他设计的一些语言虽然看起来只是为了解决近景问题,实际上却具有很高的质量和开放程度,让这些语言同样非常适合远景问题,非常易于被提高和拓展。当然 Unix 也是这样的, 这让我不禁暗自揣测,那些我认为的 Go 语言中乍看上去不利于其远景发展的一些令人担忧烦扰的设计(例如缺乏泛型)也许并没有我想象的那样糟糕。如果确如我所认为的那样,即这些设计会影响 Go 的远景发展,那么恐怕我真的是比 Ken 还要聪明有远见了。但是我并不认为我有那么高明。Go 的前途我们还是只能拭目以待。
+
+--------------------------------------------------------------------------------
+
+via: http://esr.ibiblio.org/?p=7745
+
+作者:[Eric Raymond][a]
+译者:[Valoniakim](https://github.com/Valoniakim),[yunfengHe](https://github.com/yunfengHe)
+校对:[yunfengHe](https://github.com/yunfengHe),[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://esr.ibiblio.org/?author=2
+[1]:http://esr.ibiblio.org/?author=2
+[2]:http://esr.ibiblio.org/?p=7711&cpage=1#comment-1913931
+[3]:http://esr.ibiblio.org/?p=7745
diff --git a/published/20171120 Useful GNOME Shell Keyboard Shortcuts You Might Not Know About.md b/published/20171120 Useful GNOME Shell Keyboard Shortcuts You Might Not Know About.md
new file mode 100644
index 0000000000..2ca35529bd
--- /dev/null
+++ b/published/20171120 Useful GNOME Shell Keyboard Shortcuts You Might Not Know About.md
@@ -0,0 +1,73 @@
+你或许不知道的实用 GNOME Shell 快捷键
+=======================================
+
+
+
+由于 Ubuntu 在 17.10 发行版本中转移到了 GNOME Shell,许多用户可能对那些实用的快捷键以及创建自己的快捷键感兴趣。这篇文章就是介绍这两方面的。
+
+### 已有的便捷的 GNOME Shell 快捷键
+
+如果你希望 GNOME 有成百上千种快捷键,你会失望地发现,情况并非如此。快捷键的列表不会太长,而且并不是全部都对你有用,但仍然会有许多快捷键可以用得上的。
+
+![gnome-shortcuts-01-settings][1]
+
+可以通过菜单“设置 -> 设备 -> 键盘”访问快捷方式列表。以下是一些不太流行但实用的快捷方式。
+
+* `Ctrl` + `Alt` + `T` - 这是一个用来启动终端的快捷键组合,你可以在 GNOME 的任何地方使用它。
+
+我个人经常使用的两个快捷键是:
+
+* `Alt` + `F4` - 关闭最顶层端口
+* `Alt` + `F8` - 调整窗口大小
+
+大多数人都知道如何用 `Alt` + `Tab` 在打开的应用程序窗口之间,但是你可能不知道可以使用 `Alt` + `Shift` + `Tab` 在应用程序窗口之间进行反方向切换。
+
+在切换窗口界面时,另一个有用的组合键是 `Alt` + `~` (`tab` 键上面的一个键)。
+
+要是你想显示活动概览,你可以用快捷键 `Alt` + `F1`。
+
+有很多跟工作台有关的快捷键。如果你像我那样不经常使用多个工作台的话,这些快捷键对来说是没用的。尽管如此,以下几个快捷键还是值得留意的:
+
+* `Super` + `PageUp` (或者 `PageDown` )移动到上方或下方的工作台
+* `Ctrl` + `Alt` + `Left` (或 `Right` )移动到左侧或右侧的工作台
+
+如果在这些快捷键中加上 `Shift` ,例如 `Shift` + `Ctrl` + `Alt` + `Left`,则可以把当前窗口移动到其他工作区。
+
+另一个我最喜欢是辅助功能中的调整文字大小的快捷键。你可以用 `Ctrl` + `+` (或 `Ctrl` + `-` )快速缩放字体大小。在某些情况下,这个快捷键可能默认是禁用的,所以在尝试之前请先检查一下。
+
+上述是一些鲜为人知但是十分实用的键盘快捷键。如果你想知道更多实用的快捷键,可以查看[官方 GNOME Shell 快捷键列表][2]。
+
+### 如何创建自己的 GNOME Shell 快捷键
+
+如果默认的快捷键不符合您的喜好,可以更改它们或创建新的快捷键。你同样可以通过菜单“设置 -> 设备 -> 键盘“完成这些操作。当你选择想更改的快捷键条目时,下面的对话框就会弹出。
+
+![gnome-shortcuts-02-change-shortcut][3]
+
+输入你想要的键盘快捷键组合。
+
+![gnome-shortcuts-03-set-shortcut][4]
+
+如果这个快捷键已经被使用,你会得到一个消息。如果没有,只需点击设置,就完成了。
+
+如果要添加新快捷键而不是更改现有快捷键,请向下滚动,直到看到 “+” 标志,单击它,在出现的对话框中输入新键盘快捷键的名称和快捷键组合。
+
+![gnome-shortcuts-04-add-custom-shortcut][5]
+
+GNOME 默认情况下并没有提供大量的 shell 快捷键,上面列出的是一些比较实用的快捷键。如果这些快捷键对你来说不够,你可以随时创建自己的快捷键。
+
+--------------------------------------------------------------------------------
+
+via: https://www.maketecheasier.com/gnome-shell-keyboard-shortcuts/
+
+作者:[Ada Ivanova][a]
+译者:[imquanquan](https://github.com/imquanquan)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.maketecheasier.com/author/adaivanoff/
+[1]:https://www.maketecheasier.com/assets/uploads/2017/10/gnome-shortcuts-01-settings.jpg (gnome-shortcuts-01-settings)
+[2]:https://wiki.gnome.org/Projects/GnomeShell/CheatSheet
+[3]:https://www.maketecheasier.com/assets/uploads/2017/10/gnome-shortcuts-02-change-shortcut.png (gnome-shortcuts-02-change-shortcut)
+[4]:https://www.maketecheasier.com/assets/uploads/2017/10/gnome-shortcuts-03-set-shortcut.png (gnome-shortcuts-03-set-shortcut)
+[5]:https://www.maketecheasier.com/assets/uploads/2017/10/gnome-shortcuts-04-add-custom-shortcut.png (gnome-shortcuts-04-add-custom-shortcut)
diff --git a/translated/tech/20171124 An introduction to the Django ORM.md b/published/20171124 An introduction to the Django ORM.md
similarity index 55%
rename from translated/tech/20171124 An introduction to the Django ORM.md
rename to published/20171124 An introduction to the Django ORM.md
index 789640441b..5fd64fff94 100644
--- a/translated/tech/20171124 An introduction to the Django ORM.md
+++ b/published/20171124 An introduction to the Django ORM.md
@@ -1,19 +1,19 @@
Django ORM 简介
============================================================
-### 学习怎么去使用 Python 的 web 框架中的对象关系映射与你的数据库交互,就像你使用 SQL 一样。
+> 学习怎么去使用 Python 的 web 框架中的对象关系映射与你的数据库交互,就像你使用 SQL 一样。

-Image by : [Christian Holmér][10]. Modified by Opensource.com. [CC BY-SA 4.0][11]
+
你可能听说过 [Django][12],它是一个被称为“完美主义者的最后期限” 的 Python web 框架。它是一匹 [可爱的小矮马][13]。
-Django 的其中一个强大的功能是它的对象关系映射(ORM),它允许你去和你的数据库交互,就像你使用 SQL 一样。事实上,Django 的 ORM 就是创建 SQL 去查询和维护数据库的一个 Python 的方法,并且在一个 Python 方法中获取结果。 我说 _就是_ 一种方法,但实际上,它是一项非常聪明的工程,它利用了 Python 中比较复杂的部分,使得开发过程更容易。
+Django 的一个强大的功能是它的对象关系映射(ORM),它允许你就像使用 SQL 一样去和你的数据库交互。事实上,Django 的 ORM 就是创建 SQL 去查询和操作数据库的一个 Python 式方式,并且获得 Python 风格的结果。 我说的_是_一种方式,但实际上,它是一种非常聪明的工程方法,它利用了 Python 中一些很复杂的部分,而使得开发者更加轻松。
-在我们开始去了解 ORM 是怎么工作的之前,我们需要一个去操作的数据库。和任何一个关系型数据库一样,我们需要去定义一堆表和它们的关系(即,它们相互之间联系起来的方式)。让我们使用我们熟悉的东西。比如说,我们需要去建立一个有博客文章和作者的博客。每个作者有一个名字。一位作者可以有很多的博客文章。一篇博客文章可以有很多的作者、标题、内容和发布日期。
+在我们开始去了解 ORM 是怎么工作之前,我们需要一个可以操作的数据库。和任何一个关系型数据库一样,我们需要去定义一堆表和它们的关系(即,它们相互之间联系起来的方式)。让我们使用我们熟悉的东西。比如说,我们需要去建模一个有博客文章和作者的博客。每个作者有一个名字。一位作者可以有很多的博客文章。一篇博客文章可以有很多的作者、标题、内容和发布日期。
-在 Django-ville 中,这个文章和作者的概念可以被称为博客应用。在这个语境中,一个应用是一个自包含一系列描述我们的博客行为和功能的模型和视图。用正确的方式打包,以便于其它的 Django 项目可以使用我们的博客应用。在我们的项目中,博客正是其中的一个应用。比如,我们也可以有一个论坛应用。但是,我们仍然坚持我们的博客应用的原有范围。
+在 Django 村里,这个文章和作者的概念可以被称为博客应用。在这个语境中,一个应用是一个自包含一系列描述我们的博客行为和功能的模型和视图的集合。用正确的方式打包,以便于其它的 Django 项目可以使用我们的博客应用。在我们的项目中,博客正是其中的一个应用。比如,我们也可以有一个论坛应用。但是,我们仍然坚持我们的博客应用的原有范围。
这是为这个教程事先准备的 `models.py`:
@@ -36,23 +36,11 @@ class Post(models.Model):
return self.title
```
-更多的 Python 资源
+现在,看上去似乎有点令人恐惧,因此,我们把它分解来看。我们有两个模型:作者(`Author`)和文章(`Post`)。它们都有名字(`name`)或者标题(`title`)。文章有个放内容的大的文本字段,以及用于发布时间和日期的 `DateTimeField`。文章也有一个 `ManyToManyField`,它同时链接到文章和作者。
-* [Python 是什么?][1]
+大多数的教程都是从头开始的,但是,在实践中并不会发生这种情况。实际上,你会得到一堆已存在的代码,就像上面的 `model.py` 一样,而你必须去搞清楚它们是做什么的。
-* [最好的 Python IDEs][2]
-
-* [最好的 Python GUI 框架][3]
-
-* [最新的 Python 内容][4]
-
-* [更多的开发者资源][5]
-
-现在,看上去似乎有点令人恐惧,因此,我们把它分解来看。我们有两个模型:作者和文章。它们都有名字或者标题。文章为内容设置一个大文本框,以及为发布的时间和日期设置一个 `DateTimeField`。文章也有一个 `ManyToManyField`,它同时链接到文章和作者。
-
-大多数的教程都是从 scratch—but 开始的,但是,在实践中并不会发生这种情况。实际上,它会提供给你一堆已存在的代码,就像上面的 `model.py` 一样,而你必须去搞清楚它们是做什么的。
-
-因此,现在你的任务是去进入到应用程序中去了解它。做到这一点有几种方法,你可以登入到 [Django admin][14],一个 Web 后端,它有全部列出的应用和操作它们的方法。我们先退出它,现在我们感兴趣的东西是 ORM。
+因此,现在你的任务是去进入到应用程序中去了解它。做到这一点有几种方法,你可以登入到 [Django admin][14],这是一个 Web 后端,它会列出全部的应用和操作它们的方法。我们先退出它,现在我们感兴趣的东西是 ORM。
我们可以在 Django 项目的主目录中运行 `python manage.py shell` 去访问 ORM。
@@ -74,13 +62,13 @@ Type "help", "copyright", "credits" or "license" for more information.
它导入了全部的博客模型,因此,我们可以玩我们的博客了。
-首先,我们列出所有的作者。
+首先,我们列出所有的作者:
```
>>> Author.objects.all()
```
-我们将从这个命令取得结果,它是一个 `QuerySet`,它列出了所有我们的作者对象。它不会充满我们的整个控制台,因为,如果有很多查询结果,Django 将自动截断输出结果。
+我们将从这个命令取得结果,它是一个 `QuerySet`,它列出了我们所有的作者对象。它不会充满我们的整个控制台,因为,如果有很多查询结果,Django 将自动截断输出结果。
```
>>> Author.objects.all()
@@ -88,7 +76,7 @@ Type "help", "copyright", "credits" or "license" for more information.
\n"; +print "\n"; +``` + +Run this program from the command line and view the results. It should display the HTML code it will generate. + +Now view the index.cgi in your browser. Well, all you get is the contents of the file. Browsers really need to have this delivered as CGI content. Apache does not really know that it needs to run the file as a CGI program unless the Apache configuration for the web site includes the "ScriptAlias" definition as shown above. Without that bit of configuration Apache simply send the data in the file to the browser. If you have access to a web server, you could try this out with your executable index files in the /var/www/cgi-bin directory. + +To see what this would look like in your browser, run the program again and redirect the output to a new file. Name it whatever you want. Then use your browser to view the file that contains the generated content. + +The above CGI program is still generating static content because it always displays the same output. Add the following line to your CGI program immediately after the "Hello World" line. The Perl "system" command executes the commands following it in a system shell, and returns the result to the program. In this case, we simply grep the current RAM usage out of the results from the free command. + +``` +system "free | grep Mem\n"; +``` + +Now run the program again and redirect the output to the results file. Reload the file in the browser. You should see an additional line so that displays the system memory statistics. Run the program and refresh the browser a couple more times and notice that the memory usage should change occasionally. + +### Using Bash + +Bash is probably the simplest language of all for use in CGI scripts. Its primary strength for CGI programming is that it has direct access to all of the standard GNU utilities and system programs. + +Rename the existing index.cgi to Perl.index.cgi and create a new index.cgi with the following content. Remember to set the permissions correctly to executable. + +``` +#!/bin/bash +echo "Content-type: text/html" +echo "" +echo '' +echo '
' +echo '' +echo '' +echo 'Using Bash
'
+free | grep Mem
+echo ''
+echo ''
+exit 0
+```
+
+Execute this program from the command line and view the output, then run it and redirect the output to the temporary results file you created before. Then refresh the browser to view what it looks like displayed as a web page.
+
+## Conclusion
+
+It is actually very simple to create CGI programs that can be used to generate a wide range of dynamic web pages. This is a trivial example but you should now see some of the possibilities.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/cgi-scripts
+
+作者:[David Both][a]
+译者:[译者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/dboth
+[1]:http://december.com/html/4/element/html.html
+[2]:http://december.com/html/4/element/head.html
+[3]:http://december.com/html/4/element/title.html
+[4]:http://december.com/html/4/element/body.html
+[5]:http://december.com/html/4/element/h1.html
+[6]:https://en.wikipedia.org/wiki/Common_Gateway_Interface
+[7]:http://perldoc.perl.org/functions/system.html
diff --git a/sources/tech/20171219 How to set GNOME to display a custom slideshow.md b/sources/tech/20171219 How to set GNOME to display a custom slideshow.md
new file mode 100644
index 0000000000..7b74de82c5
--- /dev/null
+++ b/sources/tech/20171219 How to set GNOME to display a custom slideshow.md
@@ -0,0 +1,101 @@
+How to set GNOME to display a custom slideshow
+======
+A very cool, yet lesser known, feature in GNOME is its ability to display a slideshow as your wallpaper. You can select a wallpaper slideshow from the background settings panel in the [GNOME Control Center][1]. Wallpaper slideshows can be distinguished from static wallpapers by a small clock emblem displayed in the lower-right corner of the preview.
+
+Some distributions come with pre-installed slideshow wallpapers. For example, Ubuntu includes the stock GNOME timed wallpaper slideshow, as well as one of Ubuntu wallpaper contest winners.
+
+What if you want to create your own custom slideshow to use as a wallpaper? While GNOME doesn't provide a user interface for this, it's quite simple to create one using some simple XML files in your home directory. Fortunately, the background selection in the GNOME Control Center honors some common directory paths, which makes it easy to create a slideshow without having to edit anything provided by your distribution.
+
+### Getting started
+
+Using your favorite text editor, create an XML file in `$HOME/.local/share/gnome-background-properties/`. Although the filename isn't important, the directory name matters (and you'll probably have to create the directory). For my example, I created `/home/ken/.local/share/gnome-background-properties/osdc-wallpapers.xml `with the following content:
+```
+
+
+
-```
-
-#### 轮廓
-
-我们刚才看了使用了边缘和 primitive 形状的 SVG。另外一种可能是去矢量化图像以 “tracing” 它们。[Mikael 动画][47] 分享的 [a codepen][48],在几天前展示了怎么去使用两色轮廓作为一个占位符。结果非常漂亮:
-
-
-
-
-SVGs 在这种情况下是手工绘制的,但是,这种技术可以用工具快速生成并自动化处理。
-
-* [Gatsby][13],一个 React 支持的描绘 SVGs 的静态网站生成器。它使用 [一个 potrace 算法的 JS 端口][14] 去矢量化图像。
-
-* [Craft 3 CMS][15],它也增加了对轮廓的支持。它使用 [一个 potrace 算法的 PHP 端口][16]。
-
-
-* [image-trace-loader][17],一个使用了 Potrace 算法去处理图像的 Webpack 加载器。
-
-
-如果感兴趣,可以去看一下 Emil 的 webpack 加载器 (基于 potrace) 和 Mikael 的手工绘制 SVGs 之间的比较。
-
-
-假设我使用一个默认选项的 potrace 生成输出。但是,有可能对它们进行调整。查看 [the options for image-trace-loader][49],它非常漂亮 [the ones passed down to potrace][50]。
-
-### 总结
-
-我们看到有不同的工具和技术去从图像中生成 SVGs,并且使用它们作为占位符。与 [WebP 是一个奇妙格式的缩略图][51] 方式相同,SVG 也是一个用于占位符的有趣的格式。我们可以控制细节的级别(和它们的大小),它是高可压缩的,并且很容易用 CSS 和 JS 进行处理。
-
-#### 额外的资源
-
-这篇文章发表于 [the top of Hacker News][52]。我非常感谢它,并且,在页面上的注释中的其它资源的全部有链接。下面是其中一部分。
-
-* [Geometrize][18] 是用 Haxe 写的 Primitive 的一个端口。这个也是,[一个 JS 实现][19],你可以直接 [在你的浏览器上][20]尝试。
-
-* [Primitive.js][21],它也是在 JS 中的一个 Primitive 端口,[primitive.nextgen][22],它是使用 Primitive.js 和 Electron 的 Primitive 的桌面版应用的一个端口。
-
-* 这里有两个 Twitter 帐户,里面你可以看到一些用 Primitive 和 Geometrize 生成的图像示例。访问 [@PrimitivePic][23] 和 [@Geometrizer][24]。
-
-* [imagetracerjs][25],它是在 JavaScript 中的光栅图像跟踪和矢量化程序。这里也有为 [Java][26] 和 [Android][27] 提供的端口。
-
---------------------------------------------------------------------------------
-
-via: https://medium.freecodecamp.org/using-svg-as-placeholders-more-image-loading-techniques-bed1b810ab2c
-
-作者:[ José M. Pérez][a]
-译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://medium.freecodecamp.org/@jmperezperez?source=post_header_lockup
-[1]:https://medium.com/@jmperezperez/how-medium-does-progressive-image-loading-fd1e4dc1ee3d
-[2]:https://medium.com/@jmperezperez/using-webp-to-create-tiny-preview-images-3e9b924f28d6
-[3]:https://medium.com/@jmperezperez/more-examples-of-progressive-image-loading-f258be9f440b
-[4]:https://github.com/fraser-hemp/gradify
-[5]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square.jpg
-[6]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square-10.svg
-[7]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square-100.svg
-[8]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-618463-square.jpg
-[9]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-618463-square-10.svg
-[10]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-618463-square-100.svg
-[11]:https://jmperezperez.com/assets/images/posts/svg-placeholders/pexels-photo-281184-square-sqip.svg
-[12]:https://jmperezperez.com/svg-placeholders/%28/assets/images/posts/svg-placeholders/pexels-photo-618463-square-sqip.svg
-[13]:https://www.gatsbyjs.org/
-[14]:https://www.npmjs.com/package/potrace
-[15]:https://craftcms.com/
-[16]:https://github.com/nystudio107/craft3-imageoptimize/blob/master/src/lib/Potracio.php
-[17]:https://github.com/EmilTholin/image-trace-loader
-[18]:https://github.com/Tw1ddle/geometrize-haxe
-[19]:https://github.com/Tw1ddle/geometrize-haxe-web
-[20]:http://www.samcodes.co.uk/project/geometrize-haxe-web/
-[21]:https://github.com/ondras/primitive.js
-[22]:https://github.com/cielito-lindo-productions/primitive.nextgen
-[23]:https://twitter.com/PrimitivePic
-[24]:https://twitter.com/Geometrizer
-[25]:https://github.com/jankovicsandras/imagetracerjs
-[26]:https://github.com/jankovicsandras/imagetracerjava
-[27]:https://github.com/jankovicsandras/imagetracerandroid
-[28]:https://medium.com/@jmperezperez/lazy-loading-images-on-the-web-to-improve-loading-time-and-saving-bandwidth-ec988b710290
-[29]:https://www.youtube.com/watch?v=szmVNOnkwoU
-[30]:https://medium.com/@jmperezperez/drawing-images-using-edge-detection-and-svg-animation-16a1a3676d3
-[31]:https://medium.com/@jmperezperez/drawing-images-using-edge-detection-and-svg-animation-16a1a3676d3
-[32]:https://medium.com/@jmperezperez/drawing-images-using-edge-detection-and-svg-animation-16a1a3676d3
-[33]:https://jmperezperez.com/cssconfau16/#/45
-[34]:https://jmperezperez.com/renderconf17/#/46
-[35]:https://en.wikipedia.org/wiki/Delaunay_triangulation
-[36]:https://github.com/possan/polyserver
-[37]:https://github.com/technopagan/sqip
-[38]:https://github.com/fogleman/primitive
-[39]:https://github.com/technopagan/cjpeg-dssim
-[40]:https://en.wikipedia.org/wiki/Structural_similarity
-[41]:https://github.com/technopagan/sqip
-[42]:https://github.com/fogleman/primitive
-[43]:https://github.com/svg/svgo
-[44]:https://medium.com/@jmperezperez/how-medium-does-progressive-image-loading-fd1e4dc1ee3d
-[45]:https://medium.com/@jmperezperez/more-examples-of-progressive-image-loading-f258be9f440b
-[46]:http://www.w3.org/2000/svg
-[47]:https://twitter.com/mikaelainalem
-[48]:https://codepen.io/ainalem/full/aLKxjm/
-[49]:https://github.com/EmilTholin/image-trace-loader#options
-[50]:https://www.npmjs.com/package/potrace#parameters
-[51]:https://medium.com/@jmperezperez/using-webp-to-create-tiny-preview-images-3e9b924f28d6
-[52]:https://news.ycombinator.com/item?id=15696596
diff --git a/translated/tech/20171112 Love Your Bugs.md b/translated/tech/20171112 Love Your Bugs.md
new file mode 100644
index 0000000000..9203cf52bb
--- /dev/null
+++ b/translated/tech/20171112 Love Your Bugs.md
@@ -0,0 +1,303 @@
+热爱你的 Bug
+============================================================
+
+十月初的时候我在贝洛奥里藏特的[巴西 Python 大会][1]上做了主题演讲。这是稍加改动过的演讲文稿。你可以在[这里][2]观看演讲视频。
+
+### 我爱 bug
+
+我目前是 [Pilot.com][3] 的一位高级工程师,负责给创业公司提供自动记账服务。在此之前,我曾是 [Dropbox][4] 的桌面客户端组的成员,我今天将分享关于我当时工作的一些故事。更早之前,我是 [Recurse Center][5] 的导师,给身在纽约的程序员提供临时的训练环境。在成为工程师之前,我在大学攻读天体物理学并在金融界工作过几年。
+
+但这些都不重要——关于我你唯一需要知道的是,我爱 bug。我爱 bug 因为它们有趣。它们富有戏剧性。调试一个好的 bug 的过程可以非常迂回曲折。一个好的 bug 像是一个有趣的笑话或者或者谜语——你期望看到某种结果,但却事与愿违。
+
+在这个演讲中我会给你们讲一些我曾经热爱过的 bug,解释为什么我如此爱 bug,然后说服你们也同样去热爱 bug。
+
+### Bug 1 号
+
+好,让我们直接来看第一个 bug。这是我在 Dropbox 工作时遇到的一个 bug。你们或许听说过,Dropbox 是一个将你的文件从一个电脑上同步到云端和其他电脑上的应用。
+
+
+
+```
+ +--------------+ +---------------+
+ | | | |
+ | METASERVER | | BLOCKSERVER |
+ | | | |
+ +-+--+---------+ +---------+-----+
+ ^ | ^
+ | | |
+ | | +----------+ |
+ | +---> | | |
+ | | CLIENT +--------+
+ +--------+ |
+ +----------+
+```
+
+
+这是个极度简化的 Dropbox 架构图。桌面客户端在你的电脑本地运行,监听文件系统的变动。当它检测到文件改动时,它读取改变的文件,并把它的内容 hash 成 4 MB 大小的文件块。这些文件块被存放在后端一个叫做块服务器的巨大的键值对数据库中。
+
+当然,我们想避免多次上传同一个文件块。可以想见,如果你在编写一份文档,你应该大部分时候都在改动文档最底部——我们不想一遍又一遍地上传开头部分。所以在上传文件块到块服务器之前之前,客户端会先和一个负责管理元数据和权限等等的服务器沟通。客户端会询问这个元数据服务器它是需要这个文件块,还是已经见过这个文件块了。元数据服务器会返回每一个文件块是否需要上传。
+
+所以这些请求和响应看上去大概是这样:客户端说“我有一个改动过的文件,分为这些文件块,它们的 hash 是 `'abcd,deef,efgh'`。服务器响应说“我有前两块,但需要你上传第三块”。然后客户端会把那个文件块上传到块服务器。
+
+```
+ +--------------+ +---------------+
+ | | | |
+ | 元数据服务器 | | 块服务器 |
+ | | | |
+ +-+--+---------+ +---------+-----+
+ ^ | ^
+ | | '有, 有, 无' |
+'abcd,deef,efgh' | | +----------+ | efgh: [内容]
+ | +---> | | |
+ | | 客户端 +--------+
+ +--------+ |
+ +----------+
+```
+
+这是问题的背景。下面是 bug。
+
+```
+ +--------------+
+ | |
+ | 块服务器 |
+ | |
+ +-+--+---------+
+ ^ |
+ | | '???'
+'abcdldeef,efgh' | | +----------+
+ ^ | +---> | |
+ ^ | | 客户端 +
+ +--------+ |
+ +----------+
+```
+
+有时候客户端会提交一个奇怪的请求:每个 hash 值应该包含 16 个字母,但它却发送了 33 个字母——所需数量的两倍加一。服务器不知道该怎么处理它,于是会抛出一个异常。我们收到这个异常的报告,于是去查看客户端的记录文件,然后会看到非常奇怪的事情——客户端的本地数据库损坏了,或者 python 抛出 MemoryError,没有一个合乎情理的。
+
+如果你以前没见过这个问题,可能会觉得毫无头绪。但当你见过一次之后,你以后每次看到都能轻松地认出它来。给你一个提示:在那些 33 个字母的字符串中,`l` 经常会代替逗号出现。其他经常出现的字符是:
+
+```
+l \x0c < $ ( . -
+```
+
+英文逗号的 ASCII 码是44。`l` 的 ASCII 码是 108。它们的二进制表示如下:
+
+```
+bin(ord(',')): 0101100
+bin(ord('l')): 1101100
+```
+
+你会注意到 `l` 和逗号只差了一位。问题就出在这里:发生了位反转。桌面客户端使用的内存中的一位发生了错误,于是客户端开始向服务器发送错误的请求。
+
+这是其他经常代替逗号出现的字符的 ASCII 码:
+
+```
+, : 0101100
+l : 1101100
+\x0c : 0001100
+< : 0111100
+$ : 0100100
+( : 0101000
+. : 0101110
+- : 0101101
+```
+
+
+### 位反转是真的!
+
+我爱这个 bug 因为它证明了位反转是可能真实发生的事情,而不只是一个理论上的问题。实际上,它在某些情况下会比平时更容易发生。其中一种情况是用户使用的是低配或者老旧的硬件,而运行 Dropbox 的电脑很多都是这样。另外一种会造成很多位反转的地方是外太空——在太空中没有大气层来保护你的内存不受高能粒子和辐射的影响,所以位反转会十分常见。
+
+你大概非常在乎在宇宙中运行的程序的正确性——你的代码或许事关国际空间站中宇航员的性命,但即使没有那么重要,也还要考虑到在宇宙中很难进行软件更新。如果你的确需要让你的程序能够处理位反转,有很多硬件和软件措施可供你选择,Katie Betchold 还关于这个问题做过一个[非常有意思的讲座][6]。
+
+在刚才那种情况下,Dropbox 并不需要处理位反转。出现内存损坏的是用户的电脑,所以即使我们可以检测到逗号字符的位反转,但如果这发生在其他字符上我们就不一定能检测到了,而且如果从硬盘中读取的文件本身发生了位反转,那我们根本无从得知。我们能改进的地方很少,于是我们决定无视这个异常并继续程序的运行。这种 bug 一般都会在客户端重启之后自动解决。
+
+### 不常见的 bug 并非不可能发生
+
+这是我最喜欢的 bug 之一,有几个原因。第一,它提醒我注意不常见和不可能之间的区别。当规模足够大的时候,不常见的现象会以值得注意的频率发生。
+
+### 覆盖面广的 bug
+
+这个 bug 第二个让我喜欢的地方是它覆盖面非常广。每当桌面客户端和服务器交流的时候,这个 bug 都可能悄然出现,而这可能会发生在系统里很多不同的端点和组件当中。这意味着许多不同的 Dropbox 工程师会看到这个 bug 的各种版本。你第一次看到它的时候,你 _真的_ 会满头雾水,但在那之后诊断这个 bug 就变得很容易了,而调查过程也非常简短:你只需找到中间的字母,看它是不是个 `l`。
+
+### 文化差异
+
+这个 bug 的一个有趣的副作用是它展示了服务器组和客户端组之间的文化差异。有时候这个 bug 会被服务器组的成员发现并展开调查。如果你的 _服务器_ 上发生了位反转,那应该不是个偶然——这很可能是内存损坏,你需要找到受影响的主机并尽快把它从集群中移除,不然就会有损坏大量用户数据的风险。这是个事故,而你必须迅速做出反应。但如果是用户的电脑在破坏数据,你并没有什么可以做的。
+
+### 分享你的 bug
+
+如果你在调试一个难搞的 bug,特别是在大型系统中,不要忘记跟别人讨论。也许你的同事以前就遇到过类似的 bug。若是如此,你可能会节省很多时间。就算他们没有见过,也不要忘记在你解决了问题之后告诉他们解决方法——写下来或者在组会中分享。这样下次你们组遇到类似的问题时,你们都会早有准备。
+
+### Bug 如何帮助你进步
+
+### Recurse Center
+
+在加入 Dropbox 之前,我曾在 Recurse Center 工作。它的理念是建立一个社区让正在自学的程序员们聚到一起来提高能力。这就是 Recurse Center 的全部了:我们没有大纲、作业、截止日期等等。唯一的前提条件是我们都想要成为更好的程序员。参与者中有的人有计算机学位但对自己的实际编程能力不够自信,有的人已经写了十年 Java 但想学 Clojure 或者 Haskell,还有各式各样有着其他的背景的参与者。
+
+我在那里是一位导师,帮助人们更好地利用这个自由的环境,并参考我们从以前的参与者那里学到的东西来提供指导。所以我的同事们和我本人都非常热衷于寻找对成年自学者最有帮助的学习方法。
+
+### 刻意练习
+
+在学习方法这个领域有很多不同的研究,其中我觉得最有意思的研究之一是刻意练习的概念。刻意练习理论意在解释专业人士和业余爱好者的表现的差距。它的基本思想是如果你只看内在的特征——不论先天与否——它们都无法非常好地解释这种差距。于是研究者们,包括最初的 Ericsson、Krampe 和 Tesch-Romer,开始寻找能够解释这种差距的理论。他们最终的答案是在刻意练习上所花的时间。
+
+他们给刻意练习的定义非常精确:不是为了收入而工作,也不是为了乐趣而玩耍。你必须尽自己能力的极限,去做一个和你的水平相称的任务(不能太简单导致你学不到东西,也不能太难导致你无法取得任何进展)。你还需要获得即时的反馈,知道自己是否做得正确。
+
+这非常令人兴奋,因为这是一套能够用来建立专业技能的系统。但难点在于对于程序员来说这些建议非常难以实施。你很难知道你是否处在自己能力的极限。也很少有即时的反馈帮助你改进——有时候你能得到任何反馈都已经算是很幸运了,还有时候你需要等几个月才能得到反馈。对于在 REPL 中做的简单的事情你可以很快地得到反馈,但如果你在做一个设计上的决定或者技术上的选择,你在很长一段时间里都无法得到反馈。
+
+但是在有一类编程工作中刻意练习是非常有用的,它就是 debug。如果你写了一份代码,那么当时你是理解这份代码是如何工作的。但你的代码有 bug,所以你的理解并不完全正确。根据定义来说,你正处在你理解能力的极限上——这很好!你马上要学到新东西了。如果你可以重现这个 bug,那么这是个宝贵的机会,你可以获得即时的反馈,知道自己的修改是否正确。
+
+像这样的 bug 也许能让你学到关于你的程序的一些小知识,但你也可能会学到一些关于运行你的代码的系统的一些更复杂的知识。我接下来要讲一个关于这种 bug 的故事。
+
+### Bug 2 号
+
+这也是我在 Dropbox 工作时遇到的 bug。当时我正在调查为什么有些桌面客户端没有像我们预期的那样持续发送日志。我开始调查客户端的日志系统并且发现了很多有意思的 bug。我会挑一些跟这个故事有关的 bug 来讲。
+
+和之前一样,这是一个非常简化的系统架构。
+
+
+```
+ +--------------+
+ | |
+ +---+ +----------> | 日志服务器 |
+ |日志| | | |
+ +---+ | +------+-------+
+ | |
+ +-----+----+ | 200 ok
+ | | |
+ | 客户端 | <-----------+
+ | |
+ +-----+----+
+ ^
+ +--------+--------+--------+
+ | ^ ^ |
+ +--+--+ +--+--+ +--+--+ +--+--+
+ | 日志 | | 日志 | | 日志 | | 日志 |
+ | | | | | | | |
+ | | | | | | | |
+ +-----+ +-----+ +-----+ +-----+
+```
+
+桌面客户端会生成日志。这些日志会被压缩、加密并写入硬盘。然后客户端会间歇性地把它们发送给服务器。客户端从硬盘读取日志并发送给日志服务器。服务器会将它解码并存储,然后返回 200。
+
+如果客户端无法连接到日志服务器,它不会让日志目录无限地增长。超过一定大小之后,它会开始删除日志来让目录大小不超过一个最大值。
+
+最初的两个 bug 本身并不严重。第一个 bug 是桌面客户端向服务器发送日志时会从最早的日志而不是最新的日志开始。这并不是很好——比如服务器会在客户端报告异常的时候让客户端发送日志,所以你可能最在乎的是刚刚生成的日志而不是在硬盘上的最早的日志。
+
+第二个 bug 和第一个相似:如果日志目录的大小达到了上限,客户端会从最新的日志而不是最早的日志开始删除。同理,你总是会丢失一些日志文件,但你大概更不在乎那些较早的日志。
+
+第三个 bug 和加密有关。有时服务器会无法对一个日志文件解码(我们一般不知道为什么——也许发生了位反转)。我们在后端没有正确地处理这个错误,而服务器会返回 500。客户端看到 500 之后会做合理的反应:它会认为服务器停机了。所以它会停止发送日志文件并且不再尝试发送其他的日志。
+
+对于一个损坏的日志文件返回 500 显然不是正确的行为。你可以考虑返回 400,因为问题出在客户端的请求上。但客户端同样无法修复这个问题——如果日志文件现在无法解码,我们后也永远无法将它解码。客户端正确的做法是直接删除日志文件然后继续运行。实际上,这正是客户端在成功上传日志文件并从服务器收到 200 的响应时的默认行为。所以我们说,好——如果日志文件无法解码,就返回 200。
+
+所有这些 bug 都很容易修复。前两个 bug 出在客户端上,所以我们在 alpha 版本修复了它们,但大部分的客户端还没有获得这些改动。我们在服务器代码中修复了第三个 bug 并部署了新版的服务器。
+
+### 📈
+
+突然日志服务器集群的流量开始激增。客服团队找到我们并问我们是否知道原因。我花了点时间把所有的部分拼到一起。
+
+在修复之前,这四件事情会发生:
+
+1. 日志文件从最早的开始发送
+
+2. 日志文件从最新的开始删除
+
+3. 如果服务器无法解码日志文件,它会返回 500
+
+4. 如果客户端收到 500,它会停止发送日志
+
+一个存有损坏的日志文件的客户端会试着发送这个文件,服务器会返回 500,客户端会放弃发送日志。在下一次运行时,它会尝试再次发送同样的文件,再次失败,并再次放弃。最终日志目录会被填满,然后客户端会开始删除最新的日志文件,而把损坏的文件继续保留在硬盘上。
+
+这三个 bug 导致的结果是:如果客户端在任何时候生成了损坏的日志文件,我们就再也不会收到那个客户端的日志了。
+
+问题是,处于这种状态的客户端比我们想象的要多很多。任何有一个损坏文件的客户端都会像被关在堤坝里一样,无法再发送日志。现在这个堤坝被清除了,所有这些客户端都开始发送它们的日志目录的剩余内容。
+
+### 我们的选择
+
+好的,现在文件从世界各地的电脑如洪水般涌来。我们能做什么?(当你在一个有 Dropbox 这种规模,尤其是这种桌面客户端的规模的公司工作时,会遇到这种有趣的事情:你可以非常轻易地对自己造成 DDOS 攻击)。
+
+当你部署的新版本发生问题时,第一个选项是回滚。这是非常合理的选择,但对于这个问题,它无法帮助我们。我们改变的不是服务器的状态而是客户端的——我们删除了那些出错文件。将服务器回滚可以防止更多客户端进入这种状态,但它并不能解决根本问题。
+
+那扩大日志集群的规模呢?我们试过了——然后因为处理能力增加了,我们开始收到更多的请求。我们又扩大了一次,但你不可能一直这么下去。为什么不能?因为这个集群并不是独立的。它会向另一个集群发送请求,在这里是为了处理异常。如果你的一个集群正在被 DDOS,而你持续扩大那个集群,你最终会把它依赖的集群也弄坏,然后你就有两个问题了。
+
+我们考虑过的另一个选择是减低负载——你不需要每一个日志文件,所以我们可以直接无视一些请求。一个难点是我们并没有一个很好的方法来区分好的请求和坏的请求。我们无法快速地判断哪些日志文件是旧的,哪些是新的。
+
+我们最终使用的是一个 Dropbox 里许多不同场合都用过的一个解决方法:我们有一个自定义的头字段,`chillout`,全世界所有的客户端都遵守它。如果客户端收到一个有这个头字段的响应,它将在字段所标注的时间内不再发送任何请求。很早以前一个英明的程序员把它加到了 Dropbox 客户端里,在之后这些年中它已经不止一次地起了作用。
+
+### 了解你的系统
+
+这个 bug 的第一个教训是要了解你的系统。我对于客户端和服务器之间的交互有不错的理解,但我并没有考虑到当服务器和所有这些客户端同时交互的时候会发生什么。这是一个我没有完全搞懂的层面。
+
+### 了解你的工具
+
+第二个教训是要了解你的工具。如果出了差错,你有哪些选项?你能撤销你做的迁移吗?你如何知道事情出了差错,你又如何发现更多信息?所有这些事情都应该在危机发生之前就了解好——但如果你没有,你会在危机发生时学到它们并不会再忘记。
+
+### 功能开关 & 服务器端功能控制
+
+第三个教训是专门针对移动端和桌面应用开发者的:_你需要服务器端功能控制和功能开关_。当你发现一个问题时如果你没有服务器端的功能控制,你可能需要几天或几星期来推送新版本或者提交新版本到应用商店中,然后问题才能得到解决。这是个很糟糕的处境。Dropbox 桌面客户端不需要经过应用商店的审查过程,但光是把一个版本推送给上千万的用户就已经要花很多时间。相比之下,如果你能在新功能遇到问题的时候在服务器上翻转一个开关:十分钟之后你的问题就已经解决了。
+
+这个策略也有它的代价。加入很多的功能开关会大幅提高你的代码的复杂度。而你的测试代码更是会成指数地复杂化:要考虑 A 功能和 B 功能都开启,或者仅开启一个,或者都不开启的情况——然后每个功能都要相乘一遍。让工程师们在事后清理他们的功能开关是一件很难的事情(我自己也有这个毛病)。另外,桌面客户端会同时有好几个版本有人使用,也会加大思考难度。
+
+但是它的好处——啊,当你需要它的时候,你真的是很需要它。
+
+# 如何去爱 bug
+
+我讲了几个我爱的 bug,也讲了为什么要爱 bug。现在我想告诉你如何去爱 bug。如果你现在还不爱 bug,我知道唯一一种改变的方法,那就是要有成长型心态。
+
+社会学家 Carol Dweck 做了很多关于人们如何看待智力的研究。她找到两种不同的看待智力的心态。第一种,她叫做固定型心态,认为智力是一个固定的特征,人类无法改变自己智力的多寡。另一种心态叫做成长型心态。在成长型心态下,人们相信智力是可变的而且可以通过努力来增强。
+
+Dweck 发现一个人看待智力的方式——固定型还是成长型心态——可以很大程度地影响他们选择任务的方式、面对挑战的反应、认知能力、甚至是他们的诚信度。
+
+【我在新西兰 Kiwi Pycon 会议所做的主题演讲中也讨论过成长型心态,所以在此只摘录一部分内容。你可以在[这里][7]找到完整版的演讲稿】
+
+关于诚信的发现:
+
+> 在这之后,他们让学生们给笔友写信讲这个实验,信中说“我们在学校做了这个实验,这是我得的分数”。他们发现 _因智力而受到表扬的学生中几乎一半人谎报了自己的分数_ ,而因努力而受表扬的学生则几乎没有人不诚实。
+
+关于努力:
+
+> 数个研究发现有着固定型心态的人会不愿真正去努力,因为他们认为这意味着他们不擅长做他们正努力去做的这件事情。Dweck 写道,“如果每当一个任务需要努力的时候你就会怀疑自己的智力,那么你会很难对自己的能力保持自信。”
+
+关于面对困惑:
+
+> 他们发现有成长型心态的学生大约能理解 70% 的内容,不论里面是否有难懂的段落。在有固定型心态的学生中,那些被分配没有难懂段落的手册的学生同样可以理解大约 70%。但那些看到了难懂段落的持固定型心态的学生的记忆则降到了 30%。有着固定型心态的学生非常不擅长从困惑中恢复。
+
+这些发现表明成长型心态对 debug 至关重要。我们必须从从困惑中重整旗鼓,诚实地面对我们理解上的不足,并时不时地在寻找答案的路上努力奋斗——成长型心态会让这些都变得更简单而且不那么痛苦。
+
+### 热爱你的 bug
+
+我在 Recurse Center 工作时会直白地欢迎挑战,我就是这样学会热爱我的 bug 的。有时参与者会坐到我身边说“唉,我觉得我遇到了个奇怪的 Python bug”,然后我会说“太棒了,我 _爱_ 奇怪的 Python bug!” 首先,这百分之百是真的,但更重要的是,我这样是在对参与者强调,找到让自己觉得困难的事情是一种成就,而他们做到了这一点,这是件好事。
+
+像我之前说过的,在 Recurse Center 没有截止日期也没有作业,所以这种态度没有任何成本。我会说,“你现在可以花一整天去在 Flask 里找出这个奇怪的 bug 了,多令人兴奋啊!”在 Dropbox 和之后的 Pilot,我们有产品需要发布,有截止日期,还有用户,于是我并不总是对在奇怪的 bug 上花一整天而感到兴奋。所以我对有截止日期的现实也是感同身受。但是如果我有 bug 需要解决,我就必须得去解决它,而抱怨它的存在并不会帮助我之后更快地解决它。我觉得就算在截止日期临近的时候,你也依然可以保持这样的心态。
+
+如果你热爱你的 bug,你可以在解决困难问题时获得更多乐趣。你可以担心得更少而更加专注,并且从中学到更多。最后,你可以和你的朋友和同事分享你的 bug,这将会同时帮助你自己和你的队友们。
+
+### 鸣谢!
+
+在此向给我的演讲提出反馈以及给我的演讲提供其他帮助的人士表示感谢:
+
+* Sasha Laundy
+
+* Amy Hanlon
+
+* Julia Evans
+
+* Julian Cooper
+
+* Raphael Passini Diniz 以及其他的 Python Brasil 组织团队成员
+
+--------------------------------------------------------------------------------
+
+via: http://akaptur.com/blog/2017/11/12/love-your-bugs/
+
+作者:[Allison Kaptur ][a]
+译者:[yixunx](https://github.com/yixunx)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://akaptur.com/about/
+[1]:http://2017.pythonbrasil.org.br/#
+[2]:http://www.youtube.com/watch?v=h4pZZOmv4Qs
+[3]:http://www.pilot.com/
+[4]:http://www.dropbox.com/
+[5]:http://www.recurse.com/
+[6]:http://www.youtube.com/watch?v=ETgNLF_XpEM
+[7]:http://akaptur.com/blog/2015/10/10/effective-learning-strategies-for-programmers/
diff --git a/translated/tech/20171115 Security Jobs Are Hot Get Trained and Get Noticed.md b/translated/tech/20171115 Security Jobs Are Hot Get Trained and Get Noticed.md
new file mode 100644
index 0000000000..5834271731
--- /dev/null
+++ b/translated/tech/20171115 Security Jobs Are Hot Get Trained and Get Noticed.md
@@ -0,0 +1,58 @@
+安全工作热门:受到培训并获得注意
+============================================================
+
+
+来自 Dice 和 Linux 基金会的“开源工作报告”发现,未来对具有安全经验的专业人员的需求很高。[经许可使用][1]
+
+对安全专业人员的需求是真实的。在 [Dice.com][4] 中,超过 75,000 个职位中有 15% 是安全职位。[Forbes][6] 中称:“根据网络安全数据工具 [CyberSeek][5],在美国每年有 4 万个信息安全分析师的职位空缺,雇主正在努力填补其他 20 万个与网络安全相关的工作。”我们知道,安全专家的需求正在快速增长,但兴趣水平还很低。
+
+### 安全是要关注的领域
+
+根据我的经验,很少有大学生对安全工作感兴趣,所以很多人把安全视为利基。入门级技术专家对业务分析师或系统分析师感兴趣,因为他们认为,如果想学习和应用核心 IT 概念,就必须坚持分析师工作或者更接近产品开发的工作。事实并非如此。
+
+事实上,如果你有兴趣领先于商业领导者,那么安全是要关注的领域 - 作为一名安全专业人员,你必须端到端地了解业务,你必须看大局来给你的公司优势。
+
+### 无所畏惧
+
+分析师和安全工作并不完全相同。公司出于必要继续合并工程和安全工作。企业正在以前所未有的速度进行基础架构和代码的自动化部署,从而提高了安全作为所有技术专业人士日常生活的一部分的重要性。在我们的[ Linux 基金会的开源工作报告][7]中,42% 的招聘经理表示未来对有安全经验的专业人士的需求很大。
+
+在安全方面从未有过更激动人心的时刻。如果你随时掌握最新的技术新闻,就会发现大量的事情与安全相关 - 数据泄露、系统故障和欺诈。安全团队正在不断变化,快节奏的环境中工作。真正的挑战在于在保持甚至改进最终用户体验的同时,积极主动地进行安全性,发现和消除漏洞。
+
+### 增长即将来临
+
+在技术的任何方面,安全将继续与云一起成长。企业越来越多地转向云计算,这暴露出比组织过去更多的安全漏洞。随着云的成熟,安全变得越来越重要。
+
+条例也在不断完善 - 个人身份信息(PII)越来越广泛。许多公司都发现他们必须投资安全来保持合规,避免成为头条新闻。由于面临巨额罚款,声誉受损以及行政工作安全,公司开始越来越多地为安全工具和人员安排越来越多的预算。
+
+### 培训和支持
+
+即使你不选择一个特定的安全工作,你也一定会发现自己需要写安全的代码,如果你没有这个技能,你将开始一场艰苦的战斗。如果你的公司提供在工作中学习的话也是鼓励的,但我建议结合培训、指导和不断实践。如果你不使用安全技能,你将很快在快速进化的恶意攻击的复杂性中失去它们。
+
+对于那些寻找安全工作的人来说,我的建议是找到组织中那些在工程、开发或者架构领域最为强大的人员 - 与他们和其他团队进行交流,做好实际工作,并且确保在心里保持大局。成为你的组织中一个脱颖而出的人,一个可以写安全的代码,同时也可以考虑战略和整体基础设施健康状况的人。
+
+### 游戏最后
+
+越来越多的公司正在投资安全性,并试图填补他们的技术团队的开放角色。如果你对管理感兴趣,那么安全是值得关注的地方。执行领导希望知道他们的公司正在按规则行事,他们的数据是安全的,并且免受破坏和损失。
+
+明治地实施和有战略思想的安全是受到关注的。安全对高管和消费者之类至关重要 - 我鼓励任何对安全感兴趣的人进行培训和贡献。
+
+ _现在[下载][2]完整的 2017 年开源工作报告_
+
+--------------------------------------------------------------------------------
+
+via: https://www.linux.com/blog/os-jobs-report/2017/11/security-jobs-are-hot-get-trained-and-get-noticed
+
+作者:[ BEN COLLEN][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.linux.com/users/bencollen
+[1]:https://www.linux.com/licenses/category/used-permission
+[2]:http://bit.ly/2017OSSjobsreport
+[3]:https://www.linux.com/files/images/security-skillspng
+[4]:http://www.dice.com/
+[5]:http://cyberseek.org/index.html#about
+[6]:https://www.forbes.com/sites/jeffkauflin/2017/03/16/the-fast-growing-job-with-a-huge-skills-gap-cyber-security/#292f0a675163
+[7]:http://media.dice.com/report/the-2017-open-source-jobs-report-employers-prioritize-hiring-open-source-professionals-with-latest-skills/
diff --git a/translated/tech/20171117 System Logs Understand Your Linux System.md b/translated/tech/20171117 System Logs Understand Your Linux System.md
deleted file mode 100644
index dceea12a63..0000000000
--- a/translated/tech/20171117 System Logs Understand Your Linux System.md
+++ /dev/null
@@ -1,68 +0,0 @@
-### 系统日志: 了解你的Linux系统
-
-
- By: [chabowski][1]
-
-本文摘自教授Linux小白(或者非资深桌面用户)技巧的系列文章. 该系列文章旨在为由LinuxMagazine基于 [openSUSE Leap][3] 发布的第30期特别版 “[Getting Started with Linux][2]” 提供补充说明.
-
-本文作者是 Romeo S. Romeo, 他是一名 PDX-based enterprise Linux 专家,转为创新企业提供富有伸缩性的解决方案.
-
-Linux系统日志非常重要. 后台运行的程序(通常被称为守护进程或者服务进程)处理了你Linux系统中的大部分任务. 当这些守护进程工作时,它们将任务的详细信息记录进日志文件中,作为他们做过什么的历史信息. 这些守护进程的工作内容涵盖从使用原子钟同步时钟到管理网络连接. 所有这些都被记录进日志文件,这样当有错误发生时,你可以通过查阅特定的日志文件来看出发生了什么.
-
-
-
-Photo by Markus Spiske on Unsplash
-
-有很多不同的日志. 历史上, 他们一般以纯文本的格式存储到 `/var/log` 目录中. 现在依然有很多日志这样做, 你可以很方便的使用 `less` 来查看它们.
-在新装的 `openSUSE Leap 42.3` 以及大多数现代操作系统上,重要的日志由 `systemd` 初始化系统存储. `systemd`这套系统负责启动守护进程并在系统启动时让计算机做好被使用的准备。
-由 `systemd` 记录的日志以二进制格式存储, 这使地它们消耗的空间更小,更容易被浏览,也更容易被导出成其他各种格式,不过坏处就是你必须使用特定的工具才能查看.
-好在, 这个工具已经预安装在你的系统上了: 它的名字叫 `journalctl`,而且默认情况下, 它会将每个守护进程的所有日志都记录到一个地方.
-
-只需要运行 `journalctl` 命令就能查看你的 `systemd` 日志了. 它会用 `less` 分页器显示各种日志. 为了让你有个直观的感受, 下面是`journalctl` 中摘录的一条日志记录:
-
-```
-Jul 06 11:53:47 aaathats3as pulseaudio[2216]: [pulseaudio] alsa-util.c: Disabling timer-based scheduling because running inside a VM.
-```
-
-这条独立的日志记录以此包含了记录的日期和时间, 计算机名, 记录日志的进程名, 记录日志的进程PID, 以及日志内容本身.
-
-若系统中某个程序运行出问题了, 则可以查看日志文件并搜索(使用 “/” 加上要搜索的关键字)程序名称. 有可能导致该程序出问题的错误会记录到系统日志中.
-有时,错误信息会足够详细让你能够修复该问题. 其他时候, 你需要在Web上搜索解决方案. Google就很适合来搜索奇怪的Linux问题.
-
-不过搜索时请注意你只输入了日志的内容, 行首的那些信息(日期, 主机名, 进程ID) 是无意义的,会干扰搜索结果.
-
-解决方法一般在搜索结果的前几个连接中就会有了. 当然,你不能只是无脑得运行从互联网上找到的那些命令: 请一定先搞清楚你要做的事情是什么,它的效果会是什么.
-据说, 从系统日志中查询日志要比直接搜索描述故障的关键字要有用的多. 因为程序出错有很多原因, 而且同样的故障表现也可能由多种问题引发的.
-
-比如, 系统无法发声的原因有很多, 可能是播放器没有插好, 也可能是声音系统出故障了, 还可能是缺少合适的驱动程序.
-如果你只是泛泛的描述故障表现, 你会找到很多无关的解决方法,而你也会浪费大量的时间. 而指定搜索日志文件中的内容, 你只会查询出他人也有相同日志内容的结果.
-你可以对比一下图1和图2.
-
-
-
-图 1 搜索系统的故障表现只会显示泛泛的,不精确的结果. 这种搜索通常没什么用.
-
-
-
-图 2 搜索特定的日志行会显示出精确的,有用的结果. 这种搜索通常很有用.
-
-也有一些系统不用 `journalctl` 来记录日志. 在桌面系统中最常见的这类日志包括用于 `/var/log/zypper.log` 记录openSUSE包管理器的行为; `/var/log/boot.log` 记录系统启动时的消息,这类消息往往滚动的特别块,根本看不过来; `/var/log/ntp` 用来记录 Network Time Protocol 守护进程同步时间时发生的错误.
-另一个存放硬件故障信息的地方是 `Kernel Ring Buffer`(内核环状缓冲区), 你可以输入 `demesg -H` 命令来查看(这条命令也会调用 `less` 分页器来查看).
-`Kernel Ring Buffer` 存储在内存中, 因此会在重启电脑后丢失. 不过它包含了Linux内核中的重要事件, 比如新增了硬件, 加载了模块, 以及奇怪的网络错误.
-
-希望你已经准备好深入了解你的Linux系统了! 祝你玩的开心!
-
---------------------------------------------------------------------------------
-
-via: https://www.suse.com/communities/blog/system-logs-understand-linux-system/
-
-作者:[chabowski]
-译者:[lujun9972](https://github.com/lujun9972)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[1]:https://www.suse.com/communities/blog/author/chabowski/
-[2]:http://www.linux-magazine.com/Resources/Special-Editions/30-Getting-Started-with-Linux
-[3]:https://en.opensuse.org/Portal:42.3
-[4]:http://www.linux-magazine.com/
diff --git a/translated/tech/20171118 Language engineering for great justice.md b/translated/tech/20171118 Language engineering for great justice.md
deleted file mode 100644
index fc116e2e18..0000000000
--- a/translated/tech/20171118 Language engineering for great justice.md
+++ /dev/null
@@ -1,59 +0,0 @@
-ESR:最合理的语言工程模式
-============================================================
-
-当你熟练掌握一体化工程技术时,你就会发现它逐渐超过了技术优化的层面。我们制作的每件手工艺品都在一个大环境背景下,在这个环境中,人类的行为逐渐突破了经济意义、社会学意义,达到了奥地利经济学家所称的“人类行为学”,这是目的明确的人类行为所能达到的最大范围。
-
-对我来说这并不只是抽象理论。当我在开源开发项目中编写论文时,我的行为就十分符合人类行为学的理论,这行为不是针对任何特定的软件技术或某个客观事物,它指的是在开发科技的过程中人类行为的背景环境。从人类行为学角度对科技进行的解读不断增加,大量的这种解读可以重塑科技框架,带来人类生产力和满足感的极大幅度增长,而这并不是由于我们换了工具,而是在于我们改变了掌握它们的方式。
-
-在这个背景下,我的计划之外的文章系列的第三篇中谈到了 C 语言的衰退和正在到来的巨大改变,而我们也确实能够感受到系统编程的新时代的到来,在这个时刻,我决定把我之前有的大体的预感具象化为更加具体的、更实用的想法,它们主要是关于计算机语言设计的分析,例如为什么它们会成功,或为什么它们会失败。
-
-在我最近的一篇文章中,我写道:所有计算机语言都是对机器资源的成本和程序员工作成本的相对权衡的结果,和对其相对价值的体现。这些都是在一个计算能力成本不断下降但程序员工作成本不减反增的背景下产生的。我还强调了转化成本在使原有交易主张适用于当下环境中的新增角色。在文中我将编程人员描述为一个寻找今后最适方案的探索者。
-
-现在我要讲一讲最后一点。以现有水平为起点,一个语言工程师有极大可能通过多种方式推动语言设计的发展。通过什么系统呢? GC 还是人工分配?使用何种配置,命令式语言、函数程式语言或是面向对象语言?但是从人类行为学的角度来说,我认为它的形式会更简洁,也许只是选择解决长期问题还是短期问题?
-
-所谓的“远”、“近”之分,是指硬件成本的逐渐降低,软件复杂程度的上升和由现有语言向其他语言转化的成本的增加,根据它们的变化曲线所做出的判断。短期问题指编程人员眼下发现的问题,长期问题指可预见的一系列情况,但它们一段时间内不会到来。针对近期问题所做出的部署需要非常及时且有效,但随着情况的变化,短期解决方案有可能很快就不适用了。而长期的解决方案可能因其过于超前而夭折,或因其代价过高无法被接受。
-
-在计算机刚刚面世的时候, FORTRAN 是近期亟待解决的问题, LISP 是远期问题,汇编语言是短期解决方案。说明这种分类适用于非通用语言,还有 roff 标记语言。随着计算机技术的发展,PHP 和 Javascript 逐渐参与到这场游戏中。至于长期的解决方案? Oberon、Ocaml、ML、XML-Docbook 都可以。 它们形成的激励机制带来了大量具有突破性和原创性的想法,事态蓬勃但未形成体系,那个时候距离专业语言的面世还很远,(值得注意的是这些想法的出现都是人类行为学中的因果,并非由于某种技术)。专业语言会失败,这是显而易见的,它的转入成本高昂,让大部分人望而却步,因此不能达到能够让主流群体接受的水平,被孤立,被搁置。这也是 LISP 不为人知的的过去,作为前 LISP 管理层人员,出于对它深深的爱,我为你们讲述了这段历史。
-
-如果短期解决方案出现故障,它的后果更加惨不忍睹,最好的结果是期待一个相对体面的失败,好转换到另一个设计方案。(通常在转化成本较高时)如果他们执意继续,通常造成众多方案相互之间藕断丝连,形成一个不断扩张的复合体,一直维持到不能运转下去,变成一堆摇摇欲坠的杂物。是的,我说的就是 C++ 语言,还有 Java 描述语言,(唉)还有 Perl,虽然 Larry Wall 的好品味成功地让他维持了很多年,问题一直没有爆发,但在 Perl 6 发行时,他的好品味最终引爆了整个问题。
-
-这种思考角度激励了编程人员向着两个不同的目的重新塑造语言设计: (1)以远近为轴,在自身和预计的未来之间选取一个最适点,然后(2)降低由一种或多种语言转化为自身语言的转入成本,这样你就可以吸纳他们的用户群。接下来我会讲讲 C 语言是怎样占领全世界的。
-
-在整个计算机发展史中,没有谁能比 C 语言完美地把握最适点的选取了,我要做的只是证明这一点,作为一种实用的主流语言, C 语言有着更长的寿命,它目睹了无数个竞争者的兴衰,但它的地位仍旧不可取代。从淘汰它的第一个竞争者到现在已经过了 35 年,但看起来C语言的终结仍旧不会到来。
-
-当然,如果你愿意的话,可以把 C 语言的持久存在归功于人类的文化惰性,但那是对“文化惰性”这个词的曲解, C 语言一直得以延续的真正原因是没有人提供足够的转化费用!
-
-相反的, C 语言低廉的内部转化成本未得到应有的重视,C 语言是如此的千变万化,从它漫长统治时期的初期开始,它就可以适用于多种语言如 FORTRAN、Pascal 、汇编语言和 LISP 的编程习惯。在二十世纪八十年代我就注意到,我可以根据编程人员的编码风格判断出他的母语是什么,这也从另一方面证明了C 语言的魅力能够吸引全世界的人使用它。
-
-C++ 语言同样胜在它低廉的转化成本。很快,大部分新兴的语言为了降低自身转化成本,纷纷参考 C 语言语法。请注意这给未来的语言设计环境带来了什么影响:它尽可能地提高了类 C 语言的价值,以此来降低其他语言转化为 C 语言的转化成本。
-
-另一种降低转入成本的方法十分简单,即使没接触过编程的人都能学会,但这种方法很难完成。我认为唯一使用了这种方法的 Python 就是靠这种方法进入了职业比赛。对这个方法我一带而过,是因为它并不是我希望看到的,顺利执行的系统语言战略,虽然我很希望它不是那样的。
-
-今天我们在 2017 年底聚集在这里,下一项我们应该为某些暴躁的团体发声,如 Go 团队,但事实并非如此。 Go 这个项目漏洞百出,我甚至可以想象出它失败的各种可能,Go 团队太过固执独断,即使几乎整个用户群体都认为 Go 需要做出改变了,Go 团队也无动于衷,这是个大问题。 一旦发生故障, GC 发生延迟或者用牺牲生产量来弥补延迟,但无论如何,它都会严重影响到这种语言的应用,大幅缩小这种语言的适用范围。
-
-即便如此,在 Go 的设计中,还是有一个我颇为认同的远大战略目标,想要理解这个目标,我们需要回想一下如果想要取代 C 语言,要面临的短期问题是什么。同我之前提到的,随着项目计划的不断扩张,故障率也在持续上升,这其中内存管理方面的故障尤其多,而内存管理一直是崩溃漏洞和安全漏洞的高发领域。
-
-我们现在已经知道了两件十分重要的紧急任务,要想取代 C 语言,首先要先做到这两点:(1)解决内存管理问题;(2)降低由 C 语言向本语言转化时所需的转入成本。纵观编程语言的历史——从人类行为学的角度来看,作为 C 语言的准替代者,如果不能有效解决转入成本过高这个问题,那他们所做的其他部分做得再好都不算数。相反的,如果他们把转入成本过高这个问题解决地很好,即使他们其他部分做的不是最好的,人们也不会对他们吹毛求疵。
-
-这正是 Go 的做法,但这个理论并不是完美无瑕的,它也有局限性。目前 GC 延迟限制了它的发展,但 Go 现在选择照搬 Unix 下 C 语言的传染战略,让自身语言变成易于转入,便于传播的语言,其繁殖速度甚至快于替代品。但从长远角度看,这并不是个好办法。
-
-当然, Rust 语言的不足是个十分明显的问题,我们不应当回避它。而它,正将自己定位为适用于长远计划的选择。在之前的部分中我已经谈到了为什么我觉得它还不完美,Rust 语言在 TIBOE 和PYPL 指数上的成就也证明了我的说法,在 TIBOE 上 Rust 从来没有进过前 20 名,在 PYPL 指数上它的成就也比 Go 差很多。
-
-五年后 Rust 能发展的怎样还是个问题,如果他们愿意改变,我建议他们重视转入成本问题。以我个人经历来说,由 C 语言转入 Rust 语言的能量壁垒使人望而却步。如果编码提升工具比如 Corrode 只能把 C 语言映射为不稳定的 Rust 语言,但不能解决能量壁垒的问题;或者如果有更简单的方法能够自动注释所有权或试用期,人们也不再需要它们了——这些问题编译器就能够解决。目前我不知道怎样解决这个问题,但我觉得他们最好找出解决方案。
-
-在最后我想强调一下,虽然在 Ken Thompson 的设计经历中,他看起来很少解决短期问题,但他对未来有着极大的包容性,并且这种包容性还在不断提升。当然 Unix 也是这样的, 它让我不禁暗自揣测,让我认为 Go 语言中令人不快的地方都其实是他们未来事业的基石(例如缺乏泛型)。如果要确认这件事是真假,我需要比 Ken 还要聪明,但这并不是一件容易让人相信的事情。
-
---------------------------------------------------------------------------------
-
-via: http://esr.ibiblio.org/?p=7745
-
-作者:[Eric Raymond][a]
-译者:[Valoniakim](https://github.com/Valoniakim)
-校对:[wxy](https://github.com/wxy)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://esr.ibiblio.org/?author=2
-[1]:http://esr.ibiblio.org/?author=2
-[2]:http://esr.ibiblio.org/?p=7711&cpage=1#comment-1913931
-[3]:http://esr.ibiblio.org/?p=7745
diff --git a/translated/tech/20171119 10 Best LaTeX Editors For Linux.md b/translated/tech/20171119 10 Best LaTeX Editors For Linux.md
new file mode 100644
index 0000000000..9b4650ac97
--- /dev/null
+++ b/translated/tech/20171119 10 Best LaTeX Editors For Linux.md
@@ -0,0 +1,184 @@
+针对 Linux 平台的 10 款最好 LaTeX 编辑器
+======
+**简介:一旦你克服了 LaTeX 的学习曲线,就没有什么比得上 LaTeX 了。下面介绍的是针对 Linux 和其他平台的最好的 LaTeX 编辑器。**
+
+## LaTeX 是什么?
+
+[LaTeX][1] 是一个文档制作系统。与纯文本编辑器不同,在 LaTeX 编辑器中你不能只写纯文本,为了组织文档的内容,你还必须使用一些 LaTeX 命令。
+
+![LaTeX 示例][2]![LaTeX 示例][3]
+
+LaTeX 编辑器一般用在出于学术目的的科学研究文档或书籍的出版,最重要的是,当你需要处理包含众多复杂数学符号的文档时,它能够为你带来方便。当然,使用 LaTeX 编辑器是很有趣的,但它也并非总是很有用,除非你对所要编写的文档有一些特别的需求。
+
+## 为什么你应当使用 LaTeX?
+
+好吧,正如我前面所提到的那样,使用 LaTeX 编辑器便意味着你有着特定的需求。为了捣腾 LaTeX 编辑器,并不需要你有一颗极客的头脑。但对于那些使用一般文本编辑器的用户来说,它并不是一个很有效率的解决方法。
+
+假如你正在寻找一款工具来精心制作一篇文档,同时你对花费时间在格式化文本上没有任何兴趣,那么 LaTeX 编辑器或许正是你所寻找的那款工具。在 LaTeX 编辑器中,你只需要指定文档的类型,它便会相应地为你设置好文档的字体种类和大小尺寸。正是基于这个原因,难怪它会被认为是 [给作家的最好开源工具][4] 之一。
+
+但请务必注意: LaTeX 编辑器并不是自动化的工具,你必须首先学会一些 LaTeX 命令来让它能够精确地处理文本的格式。
+
+## 针对 Linux 平台的 10 款最好 LaTeX 编辑器
+
+事先说明一下,以下列表并没有一个明确的先后顺序,序号为 3 的编辑器并不一定比序号为 7 的编辑器优秀。
+
+### 1\. LyX
+
+![][2]
+
+![][5]
+
+LyX 是一个开源的 LaTeX 编辑器,即是说它是网络上可获取到的最好的文档处理引擎之一。LyX 帮助你集中于你的文章,并忘记对单词的格式化,而这些正是每个 LaTeX 编辑器应当做的。LyX 能够让你根据文档的不同,管理不同的文档内容。一旦安装了它,你就可以控制文档中的很多东西了,例如页边距,页眉,页脚,空白,缩进,表格等等。
+
+假如你正忙着精心撰写科学性的文档,研究论文或类似的文档,你将会很高兴能够体验到 LyX 的公式编辑器,这也是其特色之一。 LyX 还包括一系列的教程来入门,使得入门没有那么多的麻烦。
+
+[LyX][6]
+
+### 2\. Texmaker
+
+![][2]
+
+![][7]
+
+Texmaker 被认为是 GNOME 桌面环境下最好的 LaTeX 编辑器之一。它呈现出一个非常好的用户界面,带来了极好的用户体验。它也被冠以最实用的 LaTeX 编辑器之一。假如你经常进行 PDF 的转换,你将发现 TeXmaker 相比其他编辑器更加快速。在你书写的同时,你也可以预览你的文档最终将是什么样子的。同时,你也可以观察到可以很容易地找到所需要的符号。
+
+Texmaker 也提供一个扩展的快捷键支持。你有什么理由不试着使用它呢?
+
+[Texmaker][8]
+
+### 3\. TeXstudio
+
+![][2]
+
+![][9]
+
+假如你想要一个这样的 LaTeX 编辑器:它既能为你提供相当不错的自定义功能,又带有一个易用的界面,那么 TeXstudio 便是一个完美的选择。它的 UI 确实很简单,但是不粗糙。 TeXstudio 带有语法高亮,自带一个集成的阅读器,可以让你检查参考文献,同时还带有一些其他的辅助工具。
+
+它同时还支持某些酷炫的功能,例如自动补全,链接覆盖,书签,多游标等等,这使得书写 LaTeX 文档变得比以前更加简单。
+
+TeXstudio 的维护很活跃,对于新手或者高级写作者来说,这使得它成为一个引人注目的选择。
+
+[TeXstudio][10]
+
+### 4\. Gummi
+
+![][2]
+
+![][11]
+
+Gummi 是一个非常简单的 LaTeX 编辑器,它基于 GTK+ 工具箱。当然,在这个编辑器中你找不到许多华丽的选项,但如果你只想能够立刻着手写作, 那么 Gummi 便是我们给你的推荐。它支持将文档输出为 PDF 格式,支持语法高亮,并帮助你进行某些基础的错误检查。尽管在 GitHub 上它已经不再被活跃地维护,但它仍然工作地很好。
+
+[Gummi][12]
+
+### 5\. TeXpen
+
+![][2]
+
+![][13]
+
+TeXpen 是另一个简洁的 LaTeX 编辑器。它为你提供了自动补全功能。但其用户界面或许不会让你感到印象深刻。假如你对用户界面不在意,又想要一个超级容易的 LaTeX 编辑器,那么 TeXpen 将满足你的需求。同时 TeXpen 还能为你校正或提高在文档中使用的英语语法和表达式。
+
+[TeXpen][14]
+
+### 6\. ShareLaTeX
+
+![][2]
+
+![][15]
+
+ShareLaTeX 是一款在线 LaTeX 编辑器。假如你想与某人或某组朋友一同协作进行文档的书写,那么这便是你所需要的。
+
+它提供一个免费方案和几种付费方案。甚至来自哈佛大学和牛津大学的学生也都使用它来进行个人的项目。其免费方案还允许你添加一位协作者。
+
+其付费方案允许你与 GitHub 和 Dropbox 进行同步,并且能够记录完整的文档修改历史。你可以为你的每个方案选择多个协作者。对于学生,它还提供单独的计费方案。
+
+[ShareLaTeX][16]
+
+### 7\. Overleaf
+
+![][2]
+
+![][17]
+
+Overleaf 是另一款在线的 LaTeX 编辑器。它与 ShareLaTeX 类似,它为专家和学生提供了不同的计费方案。它也提供了一个免费方案,使用它你可以与 GitHub 同步,检查你的修订历史,或添加多个合作者。
+
+在每个项目中,它对文件的数目有所限制。所以在大多数情况下如果你对 LaTeX 文件非常熟悉,这并不会为你带来不便。
+
+[Overleaf][18]
+
+### 8\. Authorea
+
+![][2]
+
+![][19]
+
+Authorea 是一个美妙的在线 LaTeX 编辑器。当然,如果考虑到价格,它可能不是最好的一款。对于免费方案,它有 100 MB 的数据上传限制和每次只能创建一个私有文档。而付费方案则提供更多的额外好处,但如果考虑到价格,它可能不是最便宜的。你应该选择 Authorea 的唯一原因应该是因为其用户界面。假如你喜爱使用一款提供令人印象深刻的用户界面的工具,那就不要错过它。
+
+[Authorea][20]
+
+### 9\. Papeeria
+
+![][2]
+
+![][21]
+
+Papeeria 是在网络上你能够找到的最为便宜的 LaTeX 在线编辑器,如果考虑到它和其他的编辑器一样可信赖的话。假如你想免费地使用它,则你不能使用它开展私有项目。但是,如果你更偏爱公共项目,它允许你创建不限数目的项目,添加不限数目的协作者。它的特色功能是有一个非常简便的画图构造器,并且在无需额外费用的情况下使用 Git 同步。假如你偏爱付费方案,它赋予你创建 10 个私有项目的能力。
+
+[Papeeria][22]
+
+### 10\. Kile
+
+![Kile LaTeX 编辑器][2]
+
+![Kile LaTeX 编辑器][23]
+
+位于我们最好 LaTeX 编辑器清单的最后一位是 Kile 编辑器。有些朋友对 Kile 推崇备至,很大程度上是因为其提供某些特色功能。
+
+Kile 不仅仅是一款编辑器,它还是一款类似 Eclipse 的 IDE 工具,提供了针对文档和项目的一整套环境。除了快速编译和预览功能,你还可以使用诸如命令的自动补全,插入引用,按照章节来组织文档等功能。你真的应该使用 Kile 来见识其潜力。
+
+Kile 在 Linux 和 Windows 平台下都可获取到。
+
+[Kile][24]
+
+### 总结
+
+所以上面便是我们推荐的 LaTeX 编辑器,你可以在 Ubuntu 或其他 Linux 发行版本中使用它们。
+
+当然,我们可能还遗漏了某些可以在 Linux 上使用并且有趣的 LaTeX 编辑器。如若你正好知道它们,请在下面的评论中让我们知晓。
+
+
+--------------------------------------------------------------------------------
+
+via: https://itsfoss.com/LaTeX-editors-linux/
+
+作者:[Ankush Das][a]
+译者:[FSSlc](https://github.com/FSSlc)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://itsfoss.com/author/ankush/
+[1]:https://www.LaTeX-project.org/
+[2]:data:image/gif;base64,R0lGODdhAQABAPAAAP///wAAACwAAAAAAQABAEACAkQBADs=
+[3]:https://itsfoss.com/wp-content/uploads/2017/11/LaTeX-sample-example.jpeg
+[4]:https://itsfoss.com/open-source-tools-writers/
+[5]:https://itsfoss.com/wp-content/uploads/2017/10/LyX_LaTeX_editor.jpg
+[6]:https://www.LyX.org/
+[7]:https://itsfoss.com/wp-content/uploads/2017/10/texmaker_LaTeX_editor.jpg
+[8]:http://www.xm1math.net/texmaker/
+[9]:https://itsfoss.com/wp-content/uploads/2017/10/tex_studio_LaTeX_editor.jpg
+[10]:https://www.texstudio.org/
+[11]:https://itsfoss.com/wp-content/uploads/2017/10/gummi_LaTeX_editor.jpg
+[12]:https://github.com/alexandervdm/gummi
+[13]:https://itsfoss.com/wp-content/uploads/2017/10/texpen_LaTeX_editor.jpg
+[14]:https://sourceforge.net/projects/texpen/
+[15]:https://itsfoss.com/wp-content/uploads/2017/10/shareLaTeX.jpg
+[16]:https://www.shareLaTeX.com/
+[17]:https://itsfoss.com/wp-content/uploads/2017/10/overleaf.jpg
+[18]:https://www.overleaf.com/
+[19]:https://itsfoss.com/wp-content/uploads/2017/10/authorea.jpg
+[20]:https://www.authorea.com/
+[21]:https://itsfoss.com/wp-content/uploads/2017/10/papeeria_LaTeX_editor.jpg
+[22]:https://www.papeeria.com/
+[23]:https://itsfoss.com/wp-content/uploads/2017/11/kile-LaTeX-800x621.png
+[24]:https://kile.sourceforge.io/
diff --git a/translated/tech/20171120 Adopting Kubernetes step by step.md b/translated/tech/20171120 Adopting Kubernetes step by step.md
new file mode 100644
index 0000000000..3e9015d155
--- /dev/null
+++ b/translated/tech/20171120 Adopting Kubernetes step by step.md
@@ -0,0 +1,90 @@
+一步步采用 Kubernetes
+============================================================
+
+为什么选择 Docker 和 Kubernetes 呢?
+
+容器允许我们构建,发布和运行分布式应用。他们使应用程序摆脱了机器限制,让我们以一定的方式创建一个复杂的应用程序。
+
+使用容器编写应用程序可以使开发,QA 更加接近生产环境(如果你努力这样做的话)。通过这样做,可以更快地发布修改,并且可以更快地测试整个系统。
+
+[Docker][1] 可以使软件独立于云提供商的容器化平台。
+
+但是,即使使用容器,移植应用程序到任何一个云提供商(或私有云)所需的工作量也是非常重要的。应用程序通常需要自动伸缩组,持久远程光盘,自动发现等。但是每个云提供商都有不同的机制。如果你想使用这些功能,很快你就会变的依赖于云提供商。
+
+这正是 [Kubernetes][2] 登场的时候。它是一个容器编排系统,它允许您以一定的标准管理,缩放和部署应用程序的不同部分,并且成为其中的重要工具。它抽象出来以兼容主要云的提供商(Google Cloud,Amazon Web Services 和 Microsoft Azure 都支持 Kubernetes)。
+
+通过一个方法来想象一下应用程序,容器和 Kubernetes 。应用程序可以视为一条身边的鲨鱼,它存在于海洋中(在这个例子中,海洋就是您的机器)。海洋中可能还有其他一些宝贵的东西,但是你不希望你的鲨鱼与小丑鱼有什么关系。所以需要把你的鲨鱼(你的应用程序)移动到一个密封的水族馆中(容器)。这很不错,但不是特别的健壮。你的水族馆可能会打破,或者你想建立一个通道连接到其他鱼类生活的另一个水族馆。也许你想要许多这样的水族馆,以防需要清洁或维护... 这正是应用 Kubernetes 集群的地方。
+
+
+Evolution to Kubernetes
+
+Kubernetes 由云提供商提供支持,从开发到生产,它使您和您的团队能够更容易地拥有几乎相同的环境。这是因为 Kubernetes 不依赖专有软件,服务或另外一些基础设施。
+
+事实上,您可以在您的机器中使用与生产环境相同的部件启动应用程序,从而缩小了开发和生产环境之间的差距。这使得开发人员更了解应用程序是如何构建在一起的,尽管他们可能只负责应用程序的一部分。这也使得在开发流程中的应用程序更容易的快速完成测试。
+
+如何使用 Kubernetes 工作?
+
+随着更多的人采用 Kubernetes,新的问题出现了;应该如何针对基于集群环境开发?假设有 3 个环境,开发,质量保证和生产, 如何适应 Kubernetes?这些环境之间仍然存在着差异,无论是在开发周期(例如:在正在运行的应用程序中看到修改代码所花费的时间)还是与数据相关的(例如:我不应该在我的质量保证环境中测试生产数据,因为它里面有敏感信息)
+
+那么,我是否应该总是在 Kubernetes 集群中编码,构建映像,重新部署服务?或者,我是否不应该尽力让我的开发环境也成为一个 Kubernetes 集群的其中之一(或一组集群)呢?还是,我应该以混合方式工作?
+
+
+Development with a local cluster
+
+如果继续我们之前的比喻,使其保持在一个开发集群中的同时侧面的通道代表着修改应用程序的一种方式。这通常通过[volumes][4]来实现
+
+一个 Kubernetes 系列
+
+Kubernetes 系列资源是开源的,可以在这里找到:
+
+### [https://github.com/red-gate/ks][5]
+
+我们写这个系列作为练习以不同的方式构建软件。我们试图约束自己在所有环境中都使用 Kubernetes,以便我们可以探索这些技术对数据和数据库的开发和管理造成影响。
+
+这个系列从使用 Kubernetes 创建基本的React应用程序开始,并逐渐演变为能够覆盖我们更多开发需求的系列。最后,我们将覆盖所有应用程序的开发需求,并且理解在数据库生命周期中如何最好地迎合容器和集群。
+
+以下是这个系列的前 5 部分:
+
+1. ks1: 使用 Kubernetes 构建一个React应用程序
+
+2. ks2: 使用 minikube 检测 React 代码的更改
+
+3. ks3: 添加一个提供 API 的 Python Web 服务器
+
+4. ks4: 使 minikube 检测 Python 代码的更改
+
+5. ks5: 创建一个测试环境
+
+本系列的第二部分将添加一个数据库,并尝试找出最好的方式来发展我们的应用程序。
+
+
+通过在所有环境中运行 Kubernetes,我们被迫在解决新问题的时候也尽量保持开发周期。我们不断尝试 Kubernetes,并越来越习惯它。通过这样做,开发团队都可以对生产环境负责,这并不困难,因为所有环境(从开发到生产)都以相同的方式进行管理。
+
+下一步是什么?
+
+我们将通过整合数据库和练习来继续这个系列,以找到使用 Kubernetes 获得数据库生命周期的最佳体验方法。
+
+这个 Kubernetes 系列是由 Redgate 研发部门的 Foundry 提供。我们正在努力使数据和容器的管理变得更加容易,所以如果您正在处理数据和容器,我们希望听到您的意见,请直接联系我们的开发团队。 [_foundry@red-gate.com_][6]
+* * *
+
+我们正在招聘。您是否有兴趣开发产品,创建[未来技术][7] 并采取类似创业的方法(没有风险)?看看我们的[软件工程师 - 未来技术][8]的角色吧,并阅读更多关于在 [英国剑桥][9]的 Redgate 工作的信息。
+--------------------------------------------------------------------------------
+
+via: https://medium.com/ingeniouslysimple/adopting-kubernetes-step-by-step-f93093c13dfe
+
+作者:[santiago arias][a]
+译者:[aiwhj](https://github.com/aiwhj)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://medium.com/@santiaago?source=post_header_lockup
+[1]:https://www.docker.com/what-docker
+[2]:https://kubernetes.io/
+[3]:https://www.google.co.uk/search?biw=723&bih=753&tbm=isch&sa=1&ei=p-YCWpbtN8atkwWc8ZyQAQ&q=nemo+fish&oq=nemo+fish&gs_l=psy-ab.3..0i67k1l2j0l2j0i67k1j0l5.5128.9271.0.9566.9.9.0.0.0.0.81.532.9.9.0....0...1.1.64.psy-ab..0.9.526...0i7i30k1j0i7i10i30k1j0i13k1j0i10k1.0.FbAf9xXxTEM
+[4]:https://kubernetes.io/docs/concepts/storage/volumes/
+[5]:https://github.com/red-gate/ks
+[6]:mailto:foundry@red-gate.com
+[7]:https://www.red-gate.com/foundry/
+[8]:https://www.red-gate.com/our-company/careers/current-opportunities/software-engineer-future-technologies
+[9]:https://www.red-gate.com/our-company/careers/living-in-cambridge
diff --git a/translated/tech/20171123 Why microservices are a security issue.md b/translated/tech/20171123 Why microservices are a security issue.md
new file mode 100644
index 0000000000..e0a5b3a078
--- /dev/null
+++ b/translated/tech/20171123 Why microservices are a security issue.md
@@ -0,0 +1,111 @@
+为什么微服务是一个安全问题
+============================================================
+
+### 你可能并不想把所有的遗留应用全部分解为微服务,或许你可以考虑开始一段安全之旅。
+
+
+
+Image by : Opensource.com
+
+我为这篇文章起个标题,使出 “洪荒之力”,也很担心这会遇到 “好奇心点击”。如果你点击它,是因为激起了你的好奇,那么(我)表示抱歉。[1][5] 我是希望你留下来的 [2][6]:这里有有趣的观点以及很多 [3][7] 注解。我不是故意提出微服务会导致安全问题——尽管如同很多组件一样(都有安全问题)。当然,这些微服务是那些涉及安全(人员)的趣向所在,最佳对象。
+
+为什么这样说?好(问题),对于我们这些有[系统安全][16] (的人来说),此时这个世界才是一个有趣的地方。我们看到分布式系统的增长,带宽便宜了并且延迟低了。加上
+"轻松上云"(部署到云的便利性在增加),越来越多的架构师们开始意识到应用是可以分解的。他们可以分解应用程序而不只是多个层,并且层内还能分为多个组件。当然均衡负载,对一个层次内的各个组件协同一个任务有帮助。但是增长揭露不同的服务作为小附件已经导致架构的增长,以及实施微服务的部署。
+
+更多关于微服务
+
+* [如何向你的 CEO 首席执行官 解释微服务][1]
+
+* [免费电子书:微服务与面向服务的体系架构][2]
+
+* [为微服务的 DevOps 保驾护航][3]
+
+所以,[什么是微服务][23]?我同意[维基百科的定义][24],尽管有趣的关于安全性没有提起。[4][17]我喜欢微服务的一点是,精心设计符合 Peter H. Salus 描述的 [UNIX 哲学][25] 的前俩点:
+
+1. 程序应该只关注一个目标,并尽可能把它做好。
+2. 让程序能够互相协同工作。
+3. 应该让程序处理文本数据流,因为这是一个通用的接口。
+
+三者中最后一个小小的不相关,因为 UNIX 哲学 通常被用来指代独立应用,它常有一个命令实例化。但是,它确实包含了微服务的基本要求之一:必须具有定义 "明确" 的接口。
+
+明确下,我指的不仅仅是很多外部 API 访问的方法,还有正常的微服务输入输出操作——以及,如果有任何副作用。就像我之前的文章描述的,“[五个特征良好的系统架构][18]”,如果你能设计一个系统,数据和描述主体是至关重要的。这里,在我们的微服务描述上,我们得到查看为什么这些是很重要的。因为对我来说,微服务架构的关键未来定义是可分解性。如果你要分解 [5][8] 你的架构,你必须非常非常非常的清楚 "bits"
+组件要做什么。
+
+在这里,安全的要来了。准确描述特定组件应该做什么以允许你:
+
+* 查看您的样图
+* 确保您的实现符合描述
+* 提出可重用测试单元来审查功能
+* 跟踪实施中的错误并纠正错误
+* 测试意料外的产出
+* 监视不当行为
+* 审核未来可能的真实行为
+
+现在,这些东西(微服务)可能都在一个大架构里了吗?是的。但如果实体是在更复杂的配置中链接或组合在一起,他们会随着越来越难。为确保正确的实施和贯彻,当你有小块一起工作。以及如果你不能确定单个组件正在做他们应正在工作的,那么衍生出复杂系统运行状况和不正确行为就困难的多了。
+
+不管怎样,它不止于此。由于我已经在许多[以往场合][19]提过,写足够安全的代码是困难的,[7][9] 证实它应该做的更加困难。因此,有理由限制特定安全要求的代码——密码检测、加密、加密密钥管理、授权、等等。——变的小,明确的快。然后你可以执行上面提到所有事情,以确定正确完成。
+
+以及还有更多。我们都知道并不是每个人都擅长于编写与安全相关的代码。通过分解你的体系架构,你得到机会去把最棒的安全人员去限制 J. 随机编码器 [8][10] 会把一些关键的安全控制措施绕过或降级的危险。
+
+它可以作为学校的机会:它总能够指向 设计/实现/测试/监视元组 并且说:“听,读,标记,学习,内在消化。这是应该做的。[9][11] ”
+
+是否应该将所有遗留应用程序分解为微服务? 你可能可能不会。 但是考虑到所有的好处,你可以考虑从安全功能开始。
+
+* * *
+
+1、有一点——有读者总是好的。
+
+2、我知道他们的意义:我写下了他们。
+
+3、可能不那么使人着迷。
+
+4、在写这篇文章时。我或你们中的一个可能会去编辑改变它。
+
+5、这很有趣,听起来想一个园艺术语。并不是说我很喜欢园艺,但仍然... [6][12]
+
+6、有趣地,我首先写了 “如果你要分解你的架构....” 这听起来想是一个 IT 主题的谋杀电影标题。
+
+7、定期的读者可能会记得提到的优秀电影 “The Thick of It”
+
+8、其他存在的常规人物:请随便选择。
+
+9、不是加密摘要:我不认同原作者的想法。
+
+这篇文章最初出在[爱丽丝与鲍伯](https://zh.wikipedia.org/zh-hans/%E6%84%9B%E9%BA%97%E7%B5%B2%E8%88%87%E9%AE%91%E4%BC%AF)——一个安全博客上,并被许可转载。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/11/microservices-are-security-issue
+
+作者:[Mike Bursell ][a]
+译者:[erlinux](https://itxdm.me)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/mikecamel
+[1]:https://blog.openshift.com/microservices-how-to-explain-them-to-your-ceo/?intcmp=7016000000127cYAAQ&amp;amp;amp;amp;amp;amp;src=microservices_resource_menu1
+[2]:https://www.openshift.com/promotions/microservices.html?intcmp=7016000000127cYAAQ&amp;amp;amp;amp;amp;amp;src=microservices_resource_menu2
+[3]:https://opensource.com/business/16/11/secured-devops-microservices?src=microservices_resource_menu3
+[4]:https://opensource.com/article/17/11/microservices-are-security-issue?rate=GDH4xOWsgYsVnWbjEIoAcT_92b8gum8XmgR6U0T04oM
+[5]:https://opensource.com/article/17/11/microservices-are-security-issue#1
+[6]:https://opensource.com/article/17/11/microservices-are-security-issue#2
+[7]:https://opensource.com/article/17/11/microservices-are-security-issue#3
+[8]:https://opensource.com/article/17/11/microservices-are-security-issue#5
+[9]:https://opensource.com/article/17/11/microservices-are-security-issue#7
+[10]:https://opensource.com/article/17/11/microservices-are-security-issue#8
+[11]:https://opensource.com/article/17/11/microservices-are-security-issue#9
+[12]:https://opensource.com/article/17/11/microservices-are-security-issue#6
+[13]:https://aliceevebob.com/2017/10/31/why-microservices-are-a-security-issue/
+[14]:https://opensource.com/user/105961/feed
+[15]:https://opensource.com/tags/security
+[16]:https://aliceevebob.com/2017/03/14/systems-security-why-it-matters/
+[17]:https://opensource.com/article/17/11/microservices-are-security-issue#4
+[18]:https://opensource.com/article/17/10/systems-architect
+[19]:https://opensource.com/users/mikecamel
+[20]:https://opensource.com/users/mikecamel
+[21]:https://opensource.com/users/mikecamel
+[22]:https://opensource.com/article/17/11/microservices-are-security-issue#comments
+[23]:https://opensource.com/resources/what-are-microservices
+[24]:https://en.wikipedia.org/wiki/Microservices
+[25]:https://en.wikipedia.org/wiki/Unix_philosophy
diff --git a/translated/tech/20171128 Why Python and Pygame are a great pair for beginning programmers.md b/translated/tech/20171128 Why Python and Pygame are a great pair for beginning programmers.md
new file mode 100644
index 0000000000..63414a6573
--- /dev/null
+++ b/translated/tech/20171128 Why Python and Pygame are a great pair for beginning programmers.md
@@ -0,0 +1,140 @@
+为什么说 Python 和 Pygame 最适合初学者
+============================================================
+
+### 我们有三个理由来说明 Pygame 对初学编程者是最好的选择。
+
+
+
+ 图片来源: [opensource.com](https://opensource.com)
+
+上个月,[Scott Nesbitt][10] 发表了一篇标题为[ Mozilla 支出 50 万美元来支持开源项目][11]的文章。其中 Phaser,一个基于 HTML/JavaScript 的游戏平台项目,获得了 50,000 美元的奖励。整整一年里,我都在使用 Phaser 平台来教我的小女儿,用来学习的话,它是最简单也是最好的 HTML 游戏开发平台。然而,对于初学者来说,使用[ Pygame ][13]也许效果更好。原因如下:
+
+### 1\. 小段代码块
+
+Pygame,基于 Python,[在介绍计算机课程中最流行的语言][14]。Python 非常适合用一小段代码来实现我们的想法,孩子们可以从单个文件和单个代码块起开始学习,在掌握函数 (function) 或类 (class) 对象之前,就可以写出意大利面条似的代码。 很像手指画,所想即所得。
+
+更多 Python 资源链接
+
+* [Python 是什么?][1]
+
+* [最热门 Python IDEs][2]
+
+* [最热门 Python GUI 框架][3]
+
+* [最新 Python 话题][4]
+
+* [更多开发资源][5]
+
+以这样的方式来学习,当编写的代码越来越难于管理的时候,孩子们很自然就的就会把代码分解成函数模块和类模块。在学习函数之前就学习了 Python 语言的语法,学生将掌握基本的编程知识,对了解全局作用域和局部作用域起到更好的作用。
+
+大多数 HTML 游戏在一定程度上会将结构、样式和编程逻辑分为 HTML、CSS和JavaScript,并且需要 CSS 和 HTML 的知识。从长远来看,虽然拆分更好,但对初学者来说是个障碍。一旦孩子们发现他们可以用 HTML 和 CSS 快速构建网页,很有可能就会被颜色、字体和图形的视觉刺激分散注意力。即使有仅仅只专注于 JavaScript 代码的,也需要学习基本的文档结构模型,以使 JavaScript 代码能够嵌入进去。
+
+### 2\. 全局变量更清晰
+
+Python 和 JavaScript 都使用动态类型变量,这意味着变量只有在赋值才能确定其类型为一个字符串、一个整数或一个浮点数,其中 JavaScript 更容易出错。类似于类型变量,JavaScript 和 Python 都有全局变量和局部变量之分。Python 中,如果在函数块内要使用全局变量,就会以 `global` 关键字区分出来。
+
+要理解在 Phaser 上教授编程初学者所面临的挑战的话,让我们以基本的[制作您的第一个 Phaser 游戏教程][15]为例子,它是由 Alvin Ourrad 和 Richard Davey 开发制作的。在 JavaScript 中,程序中任何地方都可以访问的全局变量很难追踪调试,常常引起 Bug 且很难解决。因为 Richard 和 Alvin 是专业程序员,所以在这儿特意使用全局变量以使程序简洁。
+
+```
+var game = new Phaser.Game(800, 600, Phaser.AUTO, '', { preload: preload, create: create, update: update });
+
+function preload() {
+
+ game.load.image('sky', 'assets/sky.png');
+
+}
+
+var player;
+var platforms;
+
+function create() {
+ game.physics.startSystem(Phaser.Physics.ARCADE);
+…
+```
+
+在他们的 Phaser 编程手册 [《Interphase》][16] 中,Richard Davey 和 Ilija Melentijevic 解释说:在很多 Phaser 项目中通常都会使用全局变量,原因是使用它们完成任务更容易、更快捷。
+
+> “如果您开发过游戏,只要代码量到一定规模,那么(使用全局变量)这种做法会使您陷入困境的,可是我们为什么还要这样做?原因很简单,仅仅只是要使我们的 Phaser 项目容易完成,更简单而已。”
+
+针对一个 Phaser 应用程序,虽然可以使用局部变量和拆分代码块来达到关注点隔离这些手段来重构代码,但要使第一次学习编程的小孩能理解,显然很有难度的。
+
+如果您想教你的孩子学习 JavaScript,或者如果他们已经知道怎样使用像 Python 来编程的话,有个好的 Phaser 课程推荐: [完整的手机游戏开发课程] [17],是由 [ Pablo Farias Navarro ] [18] 开发制作的。虽然标题看着是移动游戏,但实际是关于 JavaScript 和 Phaser 的。JavaScript 和 Phaser 移动应用开发已经转移到 [PhoneGap][19] 话题去了。
+
+### 3\. Pygame 无依赖要求
+
+由于 [Python Wheels][20] 的出现,Pygame 超级[容易安装][21]。在 Fedora/Red Hat 系统下也可使用 **yum** 包管理器来安装:
+
+```
+sudo yum install python3-pygame
+```
+
+更多消息请参考官网[Pygame 安装说明文档][22]。
+
+相比来说,虽然 Phaser 本身更容易安装,但需要掌握更多的知识。前面提到的,学生需要在 HTML 文档中组装他们的 JavaScript 代码,同时还需要些 CSS。除了这三种语言(HTML、CSS、JavaScript),还需要使用火狐或谷歌开发工具和编辑器。JavaScript 最常用的编辑器有 Sublime、Atom、VS Code(按使用多少排序)等。
+
+由于[浏览器同源策略][23]的原因,如果您直接在浏览器中打开 HTML 文件的话,Phaser 应用是不会运行的。您必须运行 Web 服务,并通过服务访问这些文件。还好,对于大多数工程项目,可以不用在本地运行 Apache 服务,只需要运行一些轻量级的服务就可以,比如 [httpster][24]。
+
+### Phaser 和 JavaScript 的优势
+
+JavaScript 和 Phaser 有着种种的不好,为什么我还继续教授他们?老实说,我考虑了很长一段时间,我在担心着学生学习变量申明提升和变量作用域的揪心。所有我开发出基于 Pygame 和 Python 的课程,随后也开发出一涛基于 Phaser 的。最终,我决定使用 Pablo 预先制定的课程作为起点。
+
+我转用 JavaScript 有两个原因。首先,JavaScript 已经成为正式应用的正式语言。除了 Web 应用外,也可使用于移动和服务应用方面。JavaScript 无处不在,其广泛应用于孩子们每天都能看到的应用中。如果他们的朋友使用 Javascript 来编程,他们很可能也会受影响而使用之。正如我看到了 JavaScript 背后的动力,所以深入研究了可编译成 JavaScript 的替代语言,主要是 Dart 和 TypeScript 两种。虽然我不介意额外的转换步骤,但还是最喜欢 JavaScript。
+
+最后,我选择使用 Phaser 和 JavaScript 的组合,是因为我意识到上面那些问题在 JavaScript 可以被解决,仅仅只是一些工作量而已。高质量的调试工具和一些大牛们的人的工作使得 JavaScript 成为教育孩子编码的可用和有用的语言。
+
+### 最后话题: Python 对垒 JavaScript
+
+当家长问我使用的什么语言作为孩子的入门语言时,我会立即推荐 Python 和 Pygame。因为有成千上万的课程可选,而且大多数都是免费的。我为我的儿子选择了 Al Sweigart 的 [使用 Python 和 Pygame 开发游戏][25] 课程,同时也在使用 Allen B. Downey 的 [Python 编程思想:如何像计算机科学家一样思考][7]。在 Android 手机上可以使用 [ Tom Rothame ][27]的[ PAPT Pyame][26] 来安装 Pygame 游戏。
+
+那是好事。JavaScript 是一门成熟的编程语言,有很多很多辅助工具。但有多年的帮助大儿子使用 Python 创建炫酷游戏经历的我,依然钟情于 Python 和 Pygame。
+
+### About the author
+
+ [][28]
+
+ Craig Oda - First elected president and co-founder of Tokyo Linux Users Group. Co-author of "Linux Japanese Environment" book published by O'Reilly Japan. Part of core team that established first ISP in Asia. Former VP of product management and product marketing for major Linux company. Partner at Oppkey, developer relations consulting firm in Silicon Valley.[More about me][8]
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/11/pygame
+
+作者:[Craig Oda ][a]
+译者:[runningwater](https://github.com/runningwater)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/codetricity
+[1]:https://opensource.com/resources/python?intcmp=7016000000127cYAAQ
+[2]:https://opensource.com/resources/python/ides?intcmp=7016000000127cYAAQ
+[3]:https://opensource.com/resources/python/gui-frameworks?intcmp=7016000000127cYAAQ
+[4]:https://opensource.com/tags/python?intcmp=7016000000127cYAAQ
+[5]:https://developers.redhat.com/?intcmp=7016000000127cYAAQ
+[6]:https://opensource.com/article/17/11/pygame?rate=PV7Af00S0QwicZT2iv8xSjJrmJPdpfK1Kcm7LXxl_Xc
+[7]:http://greenteapress.com/thinkpython/html/index.html
+[8]:https://opensource.com/users/codetricity
+[9]:https://opensource.com/user/46031/feed
+[10]:https://opensource.com/users/scottnesbitt
+[11]:https://opensource.com/article/17/10/news-october-14
+[12]:https://www.patreon.com/photonstorm/posts
+[13]:https://www.pygame.org/news
+[14]:https://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-u-s-universities/fulltext
+[15]:http://phaser.io/tutorials/making-your-first-phaser-game
+[16]:https://phaser.io/interphase
+[17]:https://academy.zenva.com/product/the-complete-mobile-game-development-course-platinum-edition/
+[18]:https://gamedevacademy.org/author/fariazz/
+[19]:https://phonegap.com/
+[20]:https://pythonwheels.com/
+[21]:https://pypi.python.org/pypi/Pygame
+[22]:http://www.pygame.org/wiki/GettingStarted#Pygame%20Installation
+[23]:https://blog.chromium.org/2008/12/security-in-depth-local-web-pages.html
+[24]:https://simbco.github.io/httpster/
+[25]:https://inventwithpython.com/makinggames.pdf
+[26]:https://github.com/renpytom/rapt-pygame-example
+[27]:https://github.com/renpytom
+[28]:https://opensource.com/users/codetricity
+[29]:https://opensource.com/users/codetricity
+[30]:https://opensource.com/users/codetricity
+[31]:https://opensource.com/article/17/11/pygame#comments
+[32]:https://opensource.com/tags/python
+[33]:https://opensource.com/tags/programming
diff --git a/translated/tech/20171129 10 OPEN SOURCE TECHNOLOGY TRENDS FOR 2018_CN.md b/translated/tech/20171129 10 OPEN SOURCE TECHNOLOGY TRENDS FOR 2018_CN.md
new file mode 100644
index 0000000000..ab5e952bf7
--- /dev/null
+++ b/translated/tech/20171129 10 OPEN SOURCE TECHNOLOGY TRENDS FOR 2018_CN.md
@@ -0,0 +1,146 @@
+2018 年开源技术 10 大发展趋势
+============================================================
+
+### 你是否关注过开源技术的发展趋势?
+
+
+
+图片来源:[Mitch Bennett][10]. [Opensource.com][31] 修改
+
+科技一直在发展,诸如OpenStack,PWAs,Rust,R,认知云,人工智能(AI),物联网等一些新技术正在颠覆我们对世界的固有认知。以下是 2018 年最可能成为主流的开源技术纲要。
+
+### 1\. OpenStack 认可度持续高涨
+
+[OpenStack][12] 本质上是一个云操作平台(系统),它为管理员提供直观友好的控制面板,以便对大量的计算、存储和网络资源进行配置和监管。
+
+目前,很多企业运用 OpenStack 平台搭建和管理云计算系统。得益于其灵活的生态系统、透明度和运行速度,OpenStack 越来越流行。相比其他替代方案,OpenStatic 只需更少的花费便能轻松支持任务关键型应用程序。
+但是,复杂的结构以及其对虚拟化、服务器、额外网络资源的严重依赖使得其它一些企业对使用 OpenStack 心存顾虑。另外,想要用好 OpenStack,好的硬件支持和高水平的员工二者缺一不可。
+
+OpenStack 基金会一直在致力于完善他们的产品。不管发布与否的一些小的功能创新,都会解决 OpenStack 的潜在问题。随着其结构复杂性降低,OpenStack 将获取更大认可。加之众多大型软件开发和托管公司以及成千上万会员的支持, OpenStack 在云计算时代前途光明。
+
+### 2\. PWA 或将大热
+
+PWA,即 [增强型网页应用][13],是技术、设计和网络应用程序接口(web APIs)的集合,它能够在移动浏览器上提供类似应用程序的体验
+
+传统的网页有许多与生俱来的缺点。虽然应用程序提供了一个比网页更加个性化、用户参与度更高的体验,但是却要占用大量的系统资源;并且要想使用应用,你还必须提前下载安装。PWA 则扬长避短,它为浏览器、可变引擎搜索框和其他一些操作作出响应,为用户提供应用程序般的体验。PWA 也能像应用程序一样自动更新显示最新的信息,基于网页的 HTTPS 模式又让其更加安全。PWA 运行于标准容器中,无须安装,只要输入 URL 即可。
+
+现在的移动用户看重便利性和参与度,PWAs 的特性完美契合这一需求,所以 PWA 成为主流是必然趋势。
+
+### 3\. Rust 成开发者新宠
+
+大多数的编程语言都在安全性和控制二者之间折衷,[Rust][14] 是一个例外。Rust 使用广泛的编译时间检查进行 100% 的控制而不影响程序安全性。上一次 [Pwn2Own][15] 竞赛找出了 Firefox C++ 底层实现的许多严重漏洞。如果 Firefox 是用 Rust 编写的,这些漏洞在产品发布之前的编译阶段就会被发现并解决。
+
+Rust 独特的内建单元测试方法使开发者们考虑将其作为首选开源语言。它是 C 和 Python 等其他编程语言有效的替代方案,Rust 可以在不丢失程序可读性的情况下写出安全的代码。总之,Rust 前途光明。
+
+### 4\. R 用户群在壮大
+
+[R][16] 编程语言,是一个与统计计算和图像呈现相关的 [*GUN* 项目][32]。它提供了大量的统计和图形技术,并且可扩展引导。它是 [S][17] 语言的延续。S 语言早已成为统计方法学的首选工具,R 为数据操作、计算和图形显示提供了开源选择。R 语言的另一个优势是对细节的把控和对细微差别的关注。
+
+和 Rust 一样,R 语言也处于上升期。
+
+### 5\. 广义的 XaaS
+
+XaaS 是 ”一切都是服务“ 的缩写,是通过网络提供的各种线上服务的总称。XaaS 的外延正在扩大,软件服务(SaaS),基础设施服务(IaaS) 和平台服务(PaaS)等观念已深入人心,新兴的基于云的服务如网络服务(NaaS),存储服务(SaaS 或StaaS),监控服务(MaaS)以及通信服务(CaaS)等概念也正在普及。我们正在迈向一个 ”一切都是服务“ 的世界。
+
+现在,XaaS 的概念已经延伸到实体企业。著名的例子有 Uber 、Lyft 和 Airbnb,前二者利用新科技提供交通服务,后者提供住宿服务。
+
+高速网络和服务器虚拟化使得强大的计算能力成为可能,这加速了XaaS的发展,2018 年可能是 ”XaaS 年‘’。XaaS 无与伦比的灵活性、可扩展性将推动 XaaS 进一步发展。
+
+### 6\. 容器技术越来越受欢迎
+
+[容器技术][28],是用标准化方法打包代码的技术,它使得代码能够在任意环境中快速地 ”接入和运行“。容器技术使企业削减花费、更快运行程序。尽管容器技术在 IT 基础结构改革方面的潜力已经表现的很明显,事实上,运用好容器技术仍然是一个难题。
+
+容器技术仍在发展中,技术复杂性随着各方面的进步在下降。最新的技术让容器使用起来像使用智能手机一样简单、直观,更不用说现在的企业需求:速度和灵活性往往能决定业务成败。
+
+### 7\. 机器学习和人工智能的更广泛应用
+
+[机器学习和人工智能][18] 指在没有程序员给出明确的编码指令的情况下,机器具备自主学习并且积累经验自我改进的能力。
+
+随着一些开源技术利用机器学习和人工智能实现尖端服务和应用,这两项技术已经深入人心。
+
+[Gartner][19] 预测,2018 年机器学习和人工智能的应用会更广。其他一些领域诸如数据准备、集成、算法选择、方法选择、模块制造等随着机器学习的加入将会取得很大进步。
+
+全新的智能开源解决方案将改变人们和系统交互的方式,转变由来已久的工作观念。
+
+* 机器交互,像[自助语音聊天程序][29]这样的对话平台,提供“问与答”的体验——用户提出问题,对话平台作出回应。
+* 无人驾驶和无人机现在已经家喻户晓了,2018年将会更司空见惯。
+* 沉浸式体验的应用不再仅仅局限于视频游戏,在真实的生活场景比如设计、培训和可视化过程中都能看到沉浸式体验的身影。
+
+### 8. 数据区块链将成为主流
+
+自比特币应用数据区块链技术以来,其已经取得了重大进展,并且已广泛应用在金融系统、保密选举、学历验证、等领域中。未来几年,区块链会在医疗、制造业、供应链物流、政府服务等领域中大展拳脚。
+
+数据区块链分布式存储数据信息,这些数据信息依赖于数百万个共享数据库的节点。数据区块不被任意单一所有者控制,并且单个损坏的节点不影响其正常运行,数据区块链的这两个特性让它异常健康、透明、不可破坏。同时也规避了有人从中篡改数据的风险。数据区块链强大的先天优势足够支撑其成为将来主流技术。
+
+### 9.认知云粉墨登场
+
+认识技术,如前所述的机器学习和人工智能,用于为多行业提供简单化和个性化服务。一个典型例子是金融行业的游戏化应用,其为投资者提供严谨的投资建议,降低投资模块的复杂程度。数字信托平台使得金融机构的身份认证过程较以前精简80%,提升了协议遵守率,降低了诈骗率。
+
+认知云技术现在正向云端迁移,借助云,它将更加强大。[IBM Watson][33] 是认知云应用最知名的例子。IBM 的 UIMA 架构是开源的,由 Apache 负责维护。DARPA(美国国防高级研究计划局) 的 DeepDive 项目借鉴 Watson 的机器学习能力,通过不断学习人类行为来增强决断能力。另一个开源平台 [OpenCog][34] ,为开发者和数据科学家开发人工智能应用程序提供支撑。
+
+考虑到实现先进的、个性化的用户体验风险较高,这些认知云平台决定来年时机成熟,再粉墨登场。
+
+### 10.物联网智联万物
+
+物联网(IoT)的核心在于建立小到嵌入式传感器、大至计算机设备的相互连接,让其(“事物”)相互之间可以收发数据。毫无疑问,物联网将会是科技届的下一个 “搅局者”,但物联网本身处于一个不断变化的状态。
+
+物联网最广为人知的产品就是 IBM 和三星合力打造的去中心化P2P自动遥测系统([ADEPT][20])。它运用和区块链类似的技术来构建一个去中心化的物联网。没有中央控制设备,”事物“ 之间通过自主交流来进行升级软件、处理bug、管理电源等等一系列操作。
+
+### 开源推动技术创新
+
+[数字中断][30]是当今以科技为中心的时代的常态。在技术领域,开放源代码正在逐渐普及,其在2018将年成为大多数科技创新的驱动力。
+
+此榜单对开源技术趋势的预测有遗漏?在评论区告诉我们吧!
+
+*文章标签:* [ `商业` ][25] [ `年鉴` ][26] [ `2017开源年鉴` ][27]
+
+### 关于作者
+
+
+
+[**Sreejith Omanakuttan**][21] - 自 2000 年开始编程,2007年开始从事专业工作。目前在 [Fingent][6] 领导开源团队,工作内容涵盖不同的技术层面,从“无聊的工作”(?)到前沿科技。有一套 “构建—修复—推倒重来” 工作哲学。在领英上关注我:https://www.linkedin.com/in/futuregeek/
+
+--------------------------------------------------------------------------------
+
+原文链接: https://opensource.com/article/17/11/10-open-source-technology-trends-2018
+
+作者:[Sreejith ][a]
+译者:[wangy325](https://github.com/wangy25)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/sreejith
+[1]:https://opensource.com/resources/what-is-openstack?intcmp=7016000000127cYAAQ
+[2]:https://opensource.com/resources/openstack/tutorials?intcmp=7016000000127cYAAQ
+[3]:https://opensource.com/tags/openstack?intcmp=7016000000127cYAAQ
+[4]:https://www.rdoproject.org/?intcmp=7016000000127cYAAQ
+[5]:https://opensource.com/article/17/11/10-open-source-technology-trends-2018?rate=GJqOXhiWvZh0zZ6WVTUzJ2TDJBpVpFhngfuX9V-dz4I
+[6]:https://www.fingent.com/
+[7]:https://www.linkedin.com/in/futuregeek/
+[9]:https://opensource.com/user/185026/feed
+[10]:https://www.flickr.com/photos/mitchell3417/9206373620
+[11]:https://creativecommons.org/licenses/by-sa/4.0/
+[12]:https://www.openstack.org/
+[13]:https://developers.google.com/web/progressive-web-apps/
+[14]:https://www.rust-lang.org/
+[15]:https://en.wikipedia.org/wiki/Pwn2Own
+[16]:https://en.wikipedia.org/wiki/R_(programming_language)
+[17]:https://en.wikipedia.org/wiki/S_(programming_language)
+[18]:https://opensource.com/tags/artificial-intelligence
+[19]:https://sdtimes.com/gartners-top-10-technology-trends-2018/
+[20]:https://insights.samsung.com/2016/03/17/block-chain-mobile-and-the-internet-of-things/
+[21]:https://opensource.com/users/sreejith
+[22]:https://opensource.com/users/sreejith
+[23]:https://opensource.com/users/sreejith
+[24]:https://opensource.com/article/17/11/10-open-source-technology-trends-2018#comments
+[25]:https://opensource.com/tags/business
+[26]:https://opensource.com/tags/yearbook
+[27]:https://opensource.com/yearbook/2017
+[28]:https://www.techopedia.com/2/31967/trends/open-source/container-technology-the-next-big-thing
+[29]:https://en.wikipedia.org/wiki/Chatbot
+[30]:https://cio-wiki.org/home/loc/home?page=digital-disruption
+[31]:https://opensource.com/
+[32]:https://en.wikipedia.org/wiki/GNU_Project
+[33]:https://en.wikipedia.org/wiki/Watson_(computer)
+[34]:https://en.wikipedia.org/wiki/OpenCog
\ No newline at end of file
diff --git a/translated/tech/20171129 Someone Tries to Bring Back Ubuntus Unity from the Dead as an Official Spin.md b/translated/tech/20171129 Someone Tries to Bring Back Ubuntus Unity from the Dead as an Official Spin.md
deleted file mode 100644
index 6bbb37ae57..0000000000
--- a/translated/tech/20171129 Someone Tries to Bring Back Ubuntus Unity from the Dead as an Official Spin.md
+++ /dev/null
@@ -1,41 +0,0 @@
-有人试图将 Ubuntu Unity 非正式地从死亡带回来
-============================================================
-
-
-
-> Ubuntu Unity Remix 将支持九个月
-
-Canonical 在七年之后突然决定抛弃它的 Unity 用户界面影响了许多 Ubuntu 用户,看起来有人现在试图非正式地把它从死亡中带回来。
-
-长期 [Ubuntu][1] 成员 Dale Beaudoin 上周在官方的 Ubuntu 论坛上[进行了一项调查][2]来了解社区,看看他们是否对明年发布的 Ubuntu 18.04 LTS(Bionic Beaver)的 Ubuntu Unity Remix 感兴趣,它将支持 9 个月或 5 年。
-
-有 30 人进行了投票,其中 67% 的人选择了所谓的 Ubuntu Unity Remix 的 LTS(长期支持)版本,33% 的人投票支持 9 个月的支持版本。它也看起来像即将到来的 Ubuntu Unity Spin [看起来会成为官方版本][3],但这不意味着开发它的承诺。
-
-Dale Beaudoin 表示:“最近的一项民意调查显示,2/3 的人支持 Ubuntu Unity 成为 LTS 发行版,我们应该尝试这个循环,假设它将是 LTS 和官方的风格。“我们将尝试使用当前默认的 Ubuntu Bionic Beaver 18.04 的每日版本作为平台每周或每 10 天发布一次更新的 ISO。”
-
-### Ubuntu Unity 是否会卷土重来?
-
-默认情况下,最后一个带有 Unity 的 Ubuntu 版本是 Ubuntu 17.04(Zesty Zapus),它将在 2018 年 1 月终止支持。当前流行操作系统的稳定版本 Ubuntu 17.10(Artful Artful),是今年早些时候 Canonical CEO [宣布][4]之后第一个默认使用 GNOME 桌面环境的版本,Unity 将不再开发。
-
-然而,Canonical 仍然从官方软件仓库提供 Unity 桌面环境,所以如果有人想要安装它,只需点击一下即可。但坏消息是,它们支持到 2018 年 4 月发布 Ubuntu 18.04 LTS(Bionic Beaver)之前,所以 Ubuntu Unity Remix 的开发者们将不得不在独立的仓库中继续支持。
-
-另一方面,我们不相信 Canonical 会改变主意,接受这个 Ubuntu Unity Spin 成为官方的风格,这意味着他们无法继续开发 Unity,现在只有一小部分人可以做到这一点。最有可能的是,如果对 Ubuntu Unity Remix 的兴趣没有很快消失,那么,这可能会是一个由怀旧社区支持的非官方版本。
-
-问题是,你会对 你会对Ubuntu Unity Spin 感兴趣么,官方或者非官方?
-
---------------------------------------------------------------------------------
-
-via: http://news.softpedia.com/news/someone-tries-to-bring-back-ubuntu-s-unity-from-the-dead-as-an-unofficial-spin-518778.shtml
-
-作者:[Marius Nestor ][a]
-译者:[geekpi](https://github.com/geekpi)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://news.softpedia.com/editors/browse/marius-nestor
-[1]:http://linux.softpedia.com/downloadTag/Ubuntu
-[2]:https://community.ubuntu.com/t/poll-unity-7-distro-9-month-spin-or-lts-for-18-04/2066
-[3]:https://community.ubuntu.com/t/unity-maintenance-roadmap/2223
-[4]:http://news.softpedia.com/news/canonical-to-stop-developing-unity-8-ubuntu-18-04-lts-ships-with-gnome-desktop-514604.shtml
-[5]:http://news.softpedia.com/editors/browse/marius-nestor
diff --git a/translated/tech/20171201 How to find a publisher for your tech book.md b/translated/tech/20171201 How to find a publisher for your tech book.md
new file mode 100644
index 0000000000..4f27cba2b7
--- /dev/null
+++ b/translated/tech/20171201 How to find a publisher for your tech book.md
@@ -0,0 +1,74 @@
+如何为你的科技书籍找到出版商
+============================================================
+
+> 想去写一本科技书籍是一个好的想法,但你还需要去了解一下出版业的运作过程。
+
+
+
+你有一个写本科技书籍的想法,那么祝贺你!就像徒步旅行,或者是去学做一种甜点心,写一本书就像人们说的那些事情一样,但是却都只停留在思考的初级阶段。那是可以理解的,因为失败的几率是很高的。要想实现它你需要在把你的想法阐述给出版商,去探讨是否已经准备充分去写成一本书。要去实现这一步是相当困难的,但最困难的是你缺少如何完成它的足够信息。
+
+如果你想和一个传统的出版商合作,你需要在他们面前推销你的书籍以期望能够得到出版的机会。我是 [Pragmatci Bookshelf][4] 的编辑主管,所以我经常看到很多的提案,也去帮助作者提议更好的主意。有些是好的,有些则不然,但我经常会看到许多不符合我们出版社风格的文稿。我会帮助你去选择最适合的出版商,来让你的想法得到认可。
+
+### 鉴别出你的目标
+
+你的第一步是要找出最适合你的想法的出版商。你可以从你较喜欢购买的书籍的出版商开始,你的书会被像你自己一样的人喜欢的几率是很高的,所以从你自己最喜欢的出版商开始将会大大缩小你的搜索范围。如果你自己所买的书籍并不多。你可以去书店逛逛,或者在亚马逊网站上看看。 列一个你自己喜欢的的出版商的清单出来
+
+下一步,挑选出你期望的,尽管大多数技术类出版商看起来没什么差别,但他们通常各有不同的读者群体。有些出版商会选择广受欢迎的话题,如 C++ 或者 Java。你以 Elixir 为主题的书籍就可能不适合那个出版商。如果你的书是关于教授小孩学习编程的,你可能就不想让学术出版商来出版。
+
+一旦你已经鉴别出一些目标,在他们自己的网站或者亚马逊上对他们进行深一步的调查。 去寻找他们有哪些书籍是和你的思想是相符的。如果他们能有一本和你自己的书籍的主题一样或很相近的书,你将会很难说服他们和你签约。但那并不意味着你已经可以把这样的出版商从你的列表中划掉。你可以将你的书籍的主题进行适当的修改以将它和已经发行的书区别开来:比如定位于不同的读者群体,或者不同层次的技能水平。也许已发行的那本书已经过时了,你就可以专注于在该技术领域里的新方法。确保你的书籍能够弥补现有书的不足,更加完善,而不只是去写完这本书。
+
+如果你锁定的出版商没有出版过类似的书籍,也许这将会是个好的机遇,但也许也会很糟糕。有时候一些供应商不会选择去出版一些专业技术方面的书籍,或者是因为他们认为他们的读者不会感兴趣,还可能是因为他们曾经在这块领域遇到过麻烦。新的语言或者类库一直在不停的涌现出来,出版商们不得不去琢磨什么样的书籍内容将会吸引他们的读者群体。他们的评估标准可能和你的是不一样的。唯一的途径是通过投稿来试探。
+
+### 建立起你自己的网络
+
+鉴别出一家出版商是第一步;现在你首先需要去建立联系。不幸的是,出版业你认识的人却往往不是你所需要找的人。你需要认识的那个人是一个去发现新市场、新作者和新选题的组稿编辑。如果你认识某个和出版商有关系的人,请他帮你介绍认识一位组稿编辑。这些组稿编辑往往负责一个专题板块,尤其是在较大的出版商,但你不必一定要找到符合你的书的专题板块的编辑。任何板块的编辑通常会很乐意将你介绍给符合你的主题的编辑。
+
+有时候你也许能够在一个技术论坛展会上找到一个组稿编辑,特别是出版商是赞助商,而且还有一个展台时。即使在当时并没有一个组稿编辑在场,在展台的其他员工也能够帮你和组稿编辑建立联系。 如果论坛不符合你的主题思想,你需要利用你的社交网络来获得别人的推荐。使用 LinkedIn,或者其他非正式的联系方式,去和一个编辑建立联系。
+
+对于小型的出版商,如果你很幸运的话,你可以在他们的公司网站上获得组稿编辑的联系方式。如果找不到联系方式的话,在推特上搜寻出版商的名字,试试能否找到他们的组稿编辑的信息,在社交媒体上去寻找一位陌生的人然后把自己的书推荐给他也许会让你有些紧张担心,但是你真的不必去担心这些,建立联系也是组稿编辑的工作之一。最坏的结果只不过是他们忽视你而已。
+
+一旦你建立起联系,组稿编辑将会协助你进行下一步。他们可能会很快对你的书稿给予反馈,或者在他们考虑你的书之前想让你根据他们的指导来修改你的文章,当你经过努力找到了一名组稿编辑后,多听从他们的建议,因为他们比你更熟悉出版商的运作系统。
+
+### 如果其它的方法都失败了
+
+如果你无法找到一名组稿编辑,出版商通常会有一个书稿盲投的方式,通常是 `proposals@[publisher].com` 的格式。 查找他们网站的介绍找到如何去发送书稿;有的出版商是有特殊的要求的。遵循他们的要求,如果把你不这样做的话,你的书将会被丢弃,不会被任何人阅读。如果你有疑问,或者不确定出版商的意图,你需要再尝试着去找一名组稿编辑进一步的沟通,因为书稿并不能回答那些问题。整理他们对你的要求(一篇独立的主题文章),发给他们,然后就去期望能够得到满意的答复。
+
+### 然后就是……等待
+
+无论你和一个出版商有着多么密切的联系,你也得等待着。如果你已经投递了书稿,也许要过一段时间才有人去处理你的稿件,特别是在一些大公司。即使你已经找了一位组稿编辑去处理你的投稿,你可能也只是他同时在处理的潜在目标之一,所以你可能不会很快得到答复。几乎所有的出版商都会在最终确认之前召开一次组委会来决定接受哪个稿件,所以即使你的书稿已经足够的优秀可以出版了,你也任然需要等待组委会的最后探讨。你可能需要等待几周的时间,甚至是一个月的时间。
+
+几周过后,你可以和编辑联系一下看看他们是否需要更多的信息。在邮件中你要表现出足够的礼貌;如果他们仍然回复,也许是因为他们有太多的投稿需要处理,即使你不停的催促也不会让你的稿件被提前处理。一些出版商有可能永远不会回复你,也不会去发一份退稿的通知给你,但那种情况并不常见。在这种情况系你除了耐心的等待也没有别的办法,如果几个月后也没有人回复你邮件,你完全可以去接触另一个出版商或者干脆考虑自己来出版。
+
+### 好运气
+
+如果这个过程看起来让你感觉有些混乱和不科学,这是很正常的。能够得到出版要依靠合适的地方、合适的时间,和合适的人探讨,而且还要期待他们此时有好的心情。你无法去控制这些不确定的因素,但是对出版社运作过程的熟悉,了解出版商们的需求,能够帮助你做出一个自己能掌控的最佳选择。
+
+寻找一个出版商只是万里长征的第一步。你需要提炼你的想法并创建提案,以及其他方面的考虑。在今年的 SeaGLS 上,我对整个过程的介绍指导有个[演讲][5]。去看看那个[视频][6]获得更多的细节信息。
+
+### 关于作者
+
+[][7]
+
+麦克唐纳先生现在是 Pragmatic Bookshelf 的主管编辑。在过去的 20 年里,在技术出版领域,他是一名编辑、一名作者、偶尔还去客串演讲者或者讲师。他现在把大量的时间都用来去和新作者探讨如何更好的表达出他们的想法。你可以关注他的推特@bmac_editor。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/how-find-publisher-your-book
+
+作者:[Brian MacDonald][a]
+译者:[FelixYFZ](https://github.com/FelixYFZ)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/bmacdonald
+[1]:https://opensource.com/article/17/12/how-find-publisher-your-book?rate=o42yhdS44MUaykAIRLB3O24FvfWxAxBKa5WAWSnSY0s
+[2]:https://opensource.com/users/bmacdonald
+[3]:https://opensource.com/user/190176/feed
+[4]:https://pragprog.com/
+[5]:https://archive.org/details/SeaGL2017WritingTheNextGreatTechBook
+[6]:https://archive.org/details/SeaGL2017WritingTheNextGreatTechBook
+[7]:https://opensource.com/users/bmacdonald
+[8]:https://opensource.com/users/bmacdonald
+[9]:https://opensource.com/users/bmacdonald
+[10]:https://opensource.com/article/17/12/how-find-publisher-your-book#comments
diff --git a/translated/tech/20171203 Best Network Monitoring Tools For Linux.md b/translated/tech/20171203 Best Network Monitoring Tools For Linux.md
deleted file mode 100644
index 8fc2cd25e3..0000000000
--- a/translated/tech/20171203 Best Network Monitoring Tools For Linux.md
+++ /dev/null
@@ -1,127 +0,0 @@
-Linux 中最佳的网络监视工具
-===============================
-
-保持对我们的网络的管理,防止任何程序过度使用网络、导致整个系统操作变慢,对管理员来说是至关重要的。对不同的系统操作,这是有几个网络监视工具。在这篇文章中,我们将讨论从 Linux 终端中运行的 10 个网络监视工具。它对不使用 GUI 而希望通过 SSH 来保持对网络管理的用户来说是非常理想的。
-
-### Iftop
-
- [][2]
-
-与 Linux 用户经常使用的 Top 是非常类似的。这是一个系统监视工具,它允许我们知道在我们的系统中实时运行的进程,并可以很容易地管理它们。Iftop 与 Top 应用程序类似,但它是专门监视网络的,通过它可以知道更多的关于网络的详细情况和使用网络的所有进程。
-
-我们可以从 [这个链接][3] 获取关于这个工具的更多信息以及下载必要的包。
-
-### Vnstat
-
- [][4]
-
-**Vnstat** 是一个缺省包含在大多数 Linux 发行版中的网络监视工具。它允许我们在一个用户选择的时间周期内获取一个实时管理的发送和接收的流量。
-
-我们可以从 [这个链接][5] 获取关于这个工具的更多信息以及下载必要的包。
-
-### Iptraf
-
- [][6]
-
-**IPTraf** 是一个 Linux 的、基于控制台的、实时网络监视程序。(IP LAN) - 收集经过这个网络的各种各样的信息作为一个 IP 流量监视器,包括 TCP 标志信息、ICMP 详细情况、TCP / UDP 流量故障、TCP 连接包和 Byne 报告。它也收集接口上全部的 TCP、UDP、…… 校验和错误、接口活动等等的详细情况。
-
-我们可以从 [这个链接][7] 获取这个工具的更多信息以及下载必要的包。
-
-### Monitorix - 系统和网络监视
-
- [][8]
-
-Monitorix 是一个轻量级的免费应用程序,它设计用于去监视尽可能多的 Linux / Unix 服务器的系统和网络资源。一个 HTTP web 服务器可以被添加到它里面,定期去收集系统和网络信息,并且在一个图表中显示它们。它跟踪平均的系统负载、内存分配、磁盘健康状态、系统服务、网络端口、邮件统计信息(Sendmail、Postfix、Dovecot、等等)、MySQL 统计信息以及其它的更多内容。它设计用于去管理系统的整体性能,以及帮助检测故障、瓶颈、异常活动、等等。
-
-下载及更多 [信息在这里][9]。
-
-### Dstat
-
- [][10]
-
-这个监视器相比前面的几个知名度低一些,但是,在一些发行版中已经缺省包含了。
-
-我们可以从 [这个链接][11] 获取这个工具的更多信息以及下载必要的包。
-
-### Bwm-ng
-
- [][12]
-
-这是最简化的工具中的一个。它允许你去从交互式连接中取得数据,并且,为了便于其它设备使用,在取得数据的同时,能以某些格式导出它们。
-
-我们可以从 [这个链接][13] 获取这个工具的更多信息以及下载必要的包。
-
-### Ibmonitor
-
- [][14]
-
-与上面的类似,它显示连接接口上过滤后的网络流量,并且,从接收到的流量中明确地区分区开发送流量。
-
-我们可以从 [这个链接][15] 获取这个工具的更多信息以及下载必要的包。
-
-### Htop - Linux 进程跟踪
-
- [][16]
-
-Htop 是一个更高级的、交互式的、实时的 Linux 进程跟踪工具。它类似于 Linux 的 top 命令,但是有一些更高级的特性,比如,一个更易于使用的进程管理接口、快捷键、水平和垂直的进程视图、等更多特性。Htop 是一个第三方工具,它不包含在 Linux 系统中,你必须使用 **YUM** 或者 **APT-GET** 或者其它的包管理工具去安装它。关于安装它的更多信息,读[这篇文章][17]。
-
-我们可以从 [这个链接][18] 获取这个工具的更多信息以及下载必要的包。
-
-### Arpwatch - 以太网活动监视器
-
- [][19]
-
-Arpwatch 是一个设计用于在 Linux 网络中去管理以太网通讯的地址解析的程序。它持续监视以太网通讯并记录 IP 地址和 MAC 地址的变化。在一个网络中,它们的变化同时伴随记录一个时间戳。它也有一个功能是当一对 IP 和 MAC 地址被添加或者发生变化时,发送一封邮件给系统管理员。在一个网络中发生 ARP 攻击时,这个功能非常有用。
-
-我们可以从 [这个链接][20] 获取这个工具的更多信息以及下载必要的包。
-
-### Wireshark - 网络监视工具
-
- [][21]
-
-**[Wireshark][1]** 是一个免费的应用程序,它允许你去捕获和查看前往你的系统和从你的系统中返回的信息,它可以去深入到通讯包中并查看每个包的内容 – 分开它们来满足你的特殊需要。它一般用于去研究协议问题和去创建和测试程序的特别情况。这个开源分析器是一个被公认的分析器商业标准,它的流行是因为纪念那些年的荣誉。
-
-最初它被认识是因为 Ethereal,Wireshark 有轻量化的、易于去理解的界面,它能分类显示来自不同的真实系统上的协议信息。
-
-### 结论
-
-在这篇文章中,我们看了几个开源的网络监视工具。由于我们从这些工具中挑选出来的认为是“最佳的”,并不意味着它们都是最适合你的需要的。例如,现在有很多的开源监视工具,比如,OpenNMS、Cacti、和 Zennos,并且,你需要去从你的个体情况考虑它们的每个工具的优势。
-
-另外,还有不同的、更适合你的需要的不开源的工具。
-
-你知道的或者使用的在 Linux 终端中的更多网络监视工具还有哪些?
-
---------------------------------------------------------------------------------
-
-via: http://www.linuxandubuntu.com/home/best-network-monitoring-tools-for-linux
-
-作者:[LinuxAndUbuntu][a]
-译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://www.linuxandubuntu.com
-[1]:https://www.wireshark.org/
-[2]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/iftop_orig.png
-[3]:http://www.ex-parrot.com/pdw/iftop/
-[4]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/edited/vnstat.png
-[5]:http://humdi.net/vnstat/
-[6]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/iptraf_orig.gif
-[7]:http://iptraf.seul.org/
-[8]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/monitorix_orig.png
-[9]:http://www.monitorix.org
-[10]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/dstat_orig.png
-[11]:http://dag.wiee.rs/home-made/dstat/
-[12]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/bwm-ng_orig.png
-[13]:http://sourceforge.net/projects/bwmng/
-[14]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/ibmonitor_orig.jpg
-[15]:http://ibmonitor.sourceforge.net/
-[16]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/htop_orig.png
-[17]:http://wesharethis.com/knowledgebase/htop-and-atop/
-[18]:http://hisham.hm/htop/
-[19]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/arpwatch_orig.png
-[20]:http://linux.softpedia.com/get/System/Monitoring/arpwatch-NG-7612.shtml
-[21]:http://www.linuxandubuntu.com/uploads/2/1/1/5/21152474/how-to-use-wireshark_1_orig.jpg
-
-
diff --git a/translated/tech/20171205 7 rules for avoiding documentation pitfalls.md b/translated/tech/20171205 7 rules for avoiding documentation pitfalls.md
new file mode 100644
index 0000000000..596997b8cb
--- /dev/null
+++ b/translated/tech/20171205 7 rules for avoiding documentation pitfalls.md
@@ -0,0 +1,69 @@
+防止文档陷阱的 7 条准则
+======
+英语是开源社区的通用语言。为了减少翻译成本,很多团队都改成用英语来写他们的文档。 但奇怪的是,为国际读者写英语并不一定就意味着英语为母语的人就占据更多的优势。 相反, 他们往往忘记了写文档用的语言可能并不是读者的母语。
+
+我们以下面这个简单的句子为例: "Encrypt the password using the `foo bar` command。" 语法上来说,这个句子是正确的。 鉴于动名词的 '-ing' 形式在英语中很常见,大多数的母语人士都认为这是一种优雅的表达方式, 他们通常会很自然的写出这样的句子。 但是仔细观察, 这个句子存在歧义因为 "using" 可能指的宾语 ("the password") 也可能指的动词 ("encrypt")。 因此这个句子有两种解读方式:
+
+ * "加密使用了 `foo bar` 命令的密码。"
+ * "使用命令 `foo bar` 来加密密码。"
+
+如果你有相关的先验知识 (密码加密或这 `foo bar` 命令),你可以消除这种不确定性并且明白第二种方式才是真正的意思。 但是若你没有足够深入的知识怎么办呢? 如果你并不是这方面的专家,而只是一个拥有泛泛相关知识的翻译者而已怎么办呢? 再或者,如果你只是个非母语人士且对像动名词这种高级语法不熟悉怎么办呢?
+
+即使是英语为母语的人也需要经过训练才能写出清晰直接的技术文档。训练的第一步就是提高对文本可用性以及潜在问题的警觉性, 下面让我们来看一下可以帮助避免常见陷阱的 7 条规则。
+
+### 1。了解你的目标读者并代入其中。
+
+如果你是一名开发者,而写作的对象是终端用户, 那么你需要站在他们的角度来看这个产品。 文档的结构是否反映了用户的目标? [人格面具 (persona) 技术][1] 能帮你专注于目标受众并为你的读者提供合适层次的细节。
+
+### 2。准训 KISS 原则--保持文档简短而简单
+
+这个原则适用于多个层次,从语法,句子到单词。 比如:
+
+ * 使用合适的最简单时态。比如, 当提到一个动作的结果时使用现在时:
+ * " ~~Click 'OK。' The 'Printer Options' dialog will appear。~~" -> "Click 'OK。' The 'Printer Options' dialog appears。"
+ * 按经验来说,一个句子表达一个主题; 然而, 短句子并不一定就容易理解(尤其当这些句子都是由名词组成时)。 有时, 将句子裁剪过度可能会引起歧义,而反过来太多单词则又难以理解。
+ * 不常用的以及很长的单词会降低阅读速度,而且可能成为非母语人士的障碍。 使用更简单的替代词语:
+ * " ~~utilize~~ " -> "use"
+ * " ~~indicate~~ " -> "show," "tell," or "say"
+ * " ~~prerequisite~~ " -> "requirement"
+
+### 3。不要干扰阅读流
+
+将虚词和较长的插入语移到句子的首部或者尾部:
+
+ * " ~~They are not,however, marked as installed。~~ " -> "However, they are not marked as installed。"
+
+将长命令放在句子的末尾可以让自动/半自动的翻译拥有更好的断句。
+
+### 4。区别对待两种基本的信息类型
+
+描述型信息以及任务导向型信息有必要区分开来。描述型信息的一个典型例子就是命令行参考, 而 how-to 则是属于基于任务的信息; 然而, 技术写作中都会涉及这两种类型的信息。 仔细观察, 就会发现许多文本都同时包含了两种类型的信息。 然而如果能够清晰地划分这两种类型的信息那必是极好的。 为了跟好地区分他们,可以对他们进行分别标记(For better orientation, label them accordingly)。 标题应该能够反应章节的内容以及信息的类型。 对描述性章节使用基于名词的标题(比如"Types of Frobnicators"),而对基于任务的章节使用口头表达式的标题(例如"Installing Frobnicators")。 这可以让读者快速定位感兴趣的章节而跳过他无用的章节。
+
+### 5。考虑不同的阅读场景和阅读模式
+
+有些读者在转向阅读产品文档时会由于自己搞不定而感到十分的沮丧。他们也在一个嘈杂的环境中工作,很难专注于阅读。 同时,不要期望你的读者会一页一页的进行阅读,很多人都是快速浏览文本搜索关键字或者通过表格,索引以及全文搜索的方式来查找主题。 请牢记这一点, 从不同的角度来看待你的文字。 通常需要妥协才能找到一种适合多种情况的文本结构。
+
+### 6。将复杂的信息分成小块。
+
+这会让读者更容易记住和吸收信息。例如, 过程不应该超过 7 到 10 个步骤(根据认知心理学中的 [Miller's Law][2])。 如果需要更多的步骤, 那么就将任务分拆成不同的过程。
+
+### 7。形式遵循功能
+
+根据以下问题检查你的文字: 某句话/段落/章节的 _目的_ (功能)是什么?比如, 它是一个指令呢?还是一个结果呢?还是一个警告呢?如果是指令, 使用主动语气: "Configure the system。" 被动语气可能适合于进行描述: "The system is configured automatically。" 将警告放在危险操作的 _前面_ 。 专注于目的还有助于发现冗余的内容,可以清除类似 "basically" 或者 "easily" 这一类的填充词,类似 " ~~already~~ existing " or " ~~completely~~ new" 这一类的不必要的修改, 以及任何与你的目标大众无关的内容。
+
+你现在可能已经猜到了,写作就是一个不断重写的过程。 好的写作需要付出努力和练习。 即使你只是偶尔写点东西, 你也可以通过关注目标大众并遵循上述规则来显著地改善你的文字。 文字的可读性越好, 理解就越容易, 这一点对不同语言能力的读者来说都是适合的。 尤其是当进行本地化时, 高质量的原始文本至关重要: "垃圾进, 垃圾出"。 如果原始文本就有缺陷, 翻译所需要的时间就会变长, 从而导致更高的成本。 最坏的情况下, 翻译会导致缺陷成倍增加,需要在不同的语言版本中修正这个缺陷。
+
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/7-rules
+
+作者:[Tanja Roth][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com
+[1]:https://en.wikipedia.org/wiki/Persona_(user_experience)
+[2]:https://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two
diff --git a/translated/tech/20171205 Ubuntu 18.04 – New Features.md b/translated/tech/20171205 Ubuntu 18.04 – New Features.md
new file mode 100644
index 0000000000..7c91177850
--- /dev/null
+++ b/translated/tech/20171205 Ubuntu 18.04 – New Features.md
@@ -0,0 +1,159 @@
+Ubuntu 18.04 – 新功能,发行日期和更多信息
+============================================================
+
+
+我们一直都在翘首以盼 - 新的 Ubuntu 的 LTS 版本 - 18.04。了解有关新功能,发行日期以及更多信息。
+
+> 提示:我们将经常在这篇文章中更新新的信息,所以请为此页面添加书签,然后再回来查看。
+
+### 关于 Ubuntu 18.04 的基本信息
+
+让我们以一些基本信息开始。
+
+* 这是一个新的 LTS(Long Term Support)版本。所以你得到了对桌面版和服务器版 5 年的支持。
+
+* 被命名为“Bionic Beaver”(仿生狐狸)。Canonical 的创始人 Mark Shuttleworth 解释了这个名字背后的含义。吉祥物是一个海狸,因为它充满活力,勤劳,并且是一个很棒工程师 - 这完美地描述了一个典型的 Ubuntu 用户,以及新的 Ubuntu 发行版本身。使用“Bionic”(仿生)这个形容词是由于在 Ubuntu Core 上运行的机器人数量的增加。
+
+### Ubuntu 18.04 发行日期和日程
+
+如果你是 Ubuntu 的新手,你可能并不熟悉实际的版本号意味着什么。它指的是官方发行的年份和月份。所以 Ubuntu 18.04 正式发布将在 2018 年的第 4 个月。Ubuntu 17.10 于 2017 年发布,也就是今年的第 10 个月。
+
+对进一步的细节,这里是有关 Ubuntu 18.04 LTS 的重要日期和需要知道的:
+
+* 2017 年 11 月 30 日 - 功能定义冻结。
+
+* 2018 年 1 月 4 日 - 第一个 Alpha 版本。所以,如果您选择接收新的 Alpha 版本,那么您将在这天获得 Alpha 1 更新。
+
+* 2018 年 2 月 1 日 - 第二个 Alpha 版本。
+
+* 2018 年 3 月 1 日 - 功能冻结。将不会引入或发布新功能。所以开发团队只会在改进现有功能和修复错误上努力。当然也有例外。如果您不是开发人员或有经验的用户,但仍想尝试新的 Ubuntu ASAP,那么我个人建议从此版本开始。
+
+* 2018 年 3 月 8 日 - 第一次 Bata 版本。如果您选择接收 Bata 版更新,则会在当天得到更新。
+
+* 2018 年 3 月 22 日 - 用户界面冻结。这意味着不会对实际的用户界面做进一步的更改或更新,因此,如果您编写文档,[教程][1],并使用屏幕截图,那时启动是安全的。
+
+* 2018 年 3 月 29 日 - 文档字符串冻结。将不会有任何编辑或新的东西(字符串)添加到文档中,所以翻译者可以开始翻译文档。
+
+* 2018 年 4 月 5 日 - 最终 Beta 版本。这也是开始使用新版本的好日子。
+
+* 2018 年 4 月 19 日 - 最终冻结。现在一切都已经完成了。版本的图像被创建和分发,并且可能不会有任何更改。
+
+* 2018 年 4 月 26 日 - 官方最终版本的 Ubuntu 18.04。每个人都应该从今天开始使用它,即使在生产服务器上。我们建议从[Vultr][2]获得 Ubuntu 18.04 服务器并测试新功能。[Vultr][3]的服务器每月起价为 2.5 美元。
+
+### Ubuntu 18.04 的新功能
+
+在 Ubuntu 18.04 LTS 上的所有新功能:
+
+### 彩色表情符号现已支持
+
+在以前的版本中,Ubuntu 只支持单色(黑和白)表情符号,坦白地说,它看起来不是太好。Ubuntu 18.04 将使用[Noto Color Emoji font][7]来支持彩色表情符号。随着 18.04,你可以在任何地方轻松查看和添加颜色表情符号。他们是本地支持的 - 所以你可以使用它们,而不使用第三方应用程序或安装/配置任何额外的东西。你可以随时通过删除字体来禁用彩色表情符号。
+
+### GNOME 桌面环境
+
+ [][8]
+
+Ubuntu 从 Ubuntu 17.10 开始使用的 GNOME 桌面环境,而不是默认的 Unity 环境。Ubuntu 18.04 将继续使用 GNOME。这是 Ubuntu 的一个重要的变化。
+
+### Ubuntu 18.04 桌面将有一个新的默认主题
+
+Ubuntu 18.04 正在用新的 GTK 主题以告别旧的默认主题 “Ambience”。如果你想帮助新的主题,看看一些截图甚至更多,去[这里][9]。
+
+到目前为止,有人猜测 Suru 将成 为 Ubuntu 18.04 的[新默认图标主题][10]。这里有一个截图:
+
+ [][11]
+
+> 值得注意的是:Ubuntu 16.10,17.04 和 17.10 中的所有新功能都将滚动到 Ubuntu 18.04 中。所以更新像右边的窗口按钮,更好的登录屏幕,改进的蓝牙支持等将推出到Ubuntu 18.04。我们不会包含一个特殊的部分,因为它对 Ubuntu 18.04 本身并不新鲜。如果您想了解更多关于从 16.04 到 18.04 的所有变化,请谷歌搜索它们之间的每个版本。
+
+### 下载 Ubuntu 18.04
+
+首先,如果你已经使用 Ubuntu,你可以升级到 Ubuntu 18.04。
+
+如果你需要下载 Ubuntu 18.04:
+
+在最终发布之后,请进入[官方 Ubuntu 下载页面][12]。
+
+对于每日构建(alpha,beta 和 non-final 版本),请转到[这里][13]。
+
+### 常见问题解答
+
+现在是一些经常被问到的问题(附带答案),这应该能给你关于这一切的更多信息。
+
+### 什么时候切换到 Ubuntu 18.04 是安全的?
+
+当然是在正式的最终发布日期。但是,如果您等不及,请开始使用 2018 年 3 月 1 日的桌面版本,并在 2018 年 4 月 5 日开始测试服务器版本。但是为了确保安全,您需要等待最终发布,甚至更长时间,使得您正在使用的第三方服务和应用程序经过测试,并在新版本上进行良好运行。
+
+### 如何将我的服务器升级到 Ubuntu 18.04?
+
+这个过程相当简单,但潜在风险很大。我们可能会在不久的将来发布一个教程,但你基本上需要使用‘do-release-upgrade’。同样,升级你的服务器也有潜在的风险,并且如果在生产服务器上,我会在升级之前再三考虑。特别是如果你在 16.04 上剩有几年的支持。
+
+### 我怎样才能帮助 Ubuntu 18.04?
+
+即使您不是一个经验丰富的开发人员和 Ubuntu 用户,您仍然可以通过以下方式提供帮助:
+
+* 宣传它。让人们了解Ubuntu 18.04。在社交媒体上的一个简单的分享也有点帮助。
+
+* 使用和测试版本。开始使用该版本并进行测试。同样,您不必是一个开发人员。您仍然可以查找和报告错误,或发送反馈。
+
+* 翻译。加入翻译团队,开始翻译文档或应用程序。
+
+* 帮助别人。加入一些在线 Ubuntu 社区,并帮助其他人解决他们对 Ubuntu 18.04 的问题。有时候人们需要帮助,一些简单的事如“我在哪里可以下载 Ubuntu?”
+
+### Ubuntu 18.04 对其他发行版如 Lubuntu 意味着什么?
+
+所有基于 Ubuntu 的发行版都将具有相似的新功能和类似的发行计划。你需要检查你的发行版的官方网站来获取更多信息。
+
+### Ubuntu 18.04 是一个 LTS 版本吗?
+
+是的,Ubuntu 18.04 是一个 LTS(Long Term Support)版本,所以你将得到 5 年的支持。
+
+### 我能从 Windows/OS X 切换到 Ubuntu 18.04 吗?
+
+当然可以!你很可能也会体验到性能的提升。从不同的操作系统切换到 Ubuntu 相当简单,有相当多的相关教程。你甚至可以设置一个双引导,来使用多个操作系统,所以 Windows 和 Ubuntu 18.04 你都可以使用。
+
+### 我可以尝试 Ubuntu 18.04 而不安装它吗?
+
+当然。你可以使用像[VirtualBox][14]这样的东西来创建一个“虚拟桌面” - 你可以在你的本地机器上安装它,并且使用 Ubuntu 18.04 而不需要真正地安装 Ubuntu。
+
+或者你可以在[Vultr][15]上以每月 2.5 美元的价格尝试 Ubuntu 18.04 服务器。如果你使用一些[免费账户(free credits)][16],那么它本质上是免费的。
+
+### 为什么我找不到 Ubuntu 18.04 的 32 位版本?
+
+因为没有 32 位版本。Ubuntu的 17.10 版本放弃了 32 位版本。如果你使用的是旧硬件,那么最好使用不同的[轻量级Linux发行版][17]而不是 Ubuntu 18.04。
+
+### 还有其他问题吗?
+
+在下面留言!分享您的想法,我们会非常激动,并且一旦有新信息发布,我们就会更新这篇文章。敬请期待,耐心等待!
+
+--------------------------------------------------------------------------------
+
+via: https://thishosting.rocks/ubuntu-18-04-new-features-release-date/
+
+作者:[ thishosting.rocks][a]
+译者:[kimii](https://github.com/kimii)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:thishosting.rocks
+[1]:https://thishosting.rocks/category/knowledgebase/
+[2]:https://thishosting.rocks/go/vultr/
+[3]:https://thishosting.rocks/go/vultr/
+[4]:https://thishosting.rocks/category/knowledgebase/
+[5]:https://thishosting.rocks/tag/ubuntu/
+[6]:https://thishosting.rocks/2017/12/05/
+[7]:https://www.google.com/get/noto/help/emoji/
+[8]:https://thishosting.rocks/wp-content/uploads/2017/12/ubuntu-17-10-gnome.jpg
+[9]:https://community.ubuntu.com/t/call-for-participation-an-ubuntu-default-theme-lead-by-the-community/1545
+[10]:http://www.omgubuntu.co.uk/2017/11/suru-default-icon-theme-ubuntu-18-04-lts
+[11]:https://thishosting.rocks/wp-content/uploads/2017/12/suru-icon-theme-ubuntu-18-04.jpg
+[12]:https://www.ubuntu.com/download
+[13]:http://cdimage.ubuntu.com/daily-live/current/
+[14]:https://www.virtualbox.org/
+[15]:https://thishosting.rocks/go/vultr/
+[16]:https://thishosting.rocks/vultr-coupons-for-2017-free-credits-and-more/
+[17]:https://thishosting.rocks/best-lightweight-linux-distros/
+
+
+
+
+
diff --git a/sources/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md b/translated/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
similarity index 61%
rename from sources/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
rename to translated/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
index 3e82106ade..6d7d3d0edd 100644
--- a/sources/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
+++ b/translated/tech/20171207 Cheat – A Collection Of Practical Linux Command Examples.md
@@ -1,46 +1,37 @@
-Cheat – A Collection Of Practical Linux Command Examples
+Cheat - 一个实用 Linux 命令示例集合
======
-Many of us very often checks **[Man Pages][1]** to know about command switches
-(options), it shows you the details about command syntax, description,
-details, and available switches but it doesn 't has any practical examples.
-Hence, we are face some trouble to form a exact command format which we need.
+我们中的许多人经常查看 **[ man 页面][1]** 来了解命令开关(选项),它会显示有关命令语法、说明、细节和可用的选项,但它没有任何实际的例子。因此,在组合成一个完整的我们需要的命令时会遇到一些麻烦。
-Are you really facing the trouble on this and want a better solution? i would
-advise you to check about cheat utility.
+你确实遇到这个麻烦而想要一个更好的解决方案吗?我会建议你试一下 cheat。
-#### What Is Cheat
+#### Cheat 是什么
-[Cheat][2] allows you to create and view interactive cheatsheets on the
-command-line. It was designed to help remind *nix system administrators of
-options for commands that they use frequently, but not frequently enough to
-remember.
+[cheat][2] 允许你在命令行中创建和查看交互式 cheatsheet。它旨在帮助提醒 *nix 系统管理员
+他们经常使用但还没频繁到会记住的命令的选项。
-#### How to Install Cheat
+#### 如何安装 Cheat
-Cheat package was developed using python, so install pip package to install
-cheat on your system.
+cheat 是使用 python 开发的,所以用 pip 来在你的系统上安装 cheat。
-For **`Debian/Ubuntu`** , use [apt-get command][3] or [apt command][4] to
-install pip.
+对于 **`Debian/Ubuntu`** 用户,请使用[ apt-get 命令][3]或[ apt 命令][4]来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo apt install python-pip python-setuptools
- [For Python3]
+ [对于 Python3]
$ sudo apt install python3-pip
```
-pip doesn't shipped with **`RHEL/CentOS`** system official repository so,
-enable [EPEL Repository][5] and use [YUM command][6] to install pip.
+**`RHEL/CentOS`** 官方仓库中没有 pip,因此使用[ EPEL 仓库][5],并使用[ YUM 命令][6]安装 pip。
```
@@ -48,62 +39,61 @@ enable [EPEL Repository][5] and use [YUM command][6] to install pip.
```
-For **`Fedora`** system, use [dnf Command][7] to install pip.
+对于 **`Fedora`** 系统,使用[ dnf 命令][7]来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo dnf install python-pip
- [For Python3]
+ [对于 Python3]
$ sudo dnf install python3
```
-For **`Arch Linux`** based systems, use [Pacman Command][8] to install pip.
+对于基于 **`Arch Linux`** 的系统,请使用[ Pacman 命令][8] 来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo pacman -S python2-pip python-setuptools
- [For Python3]
+ [对于 Python3]
$ sudo pacman -S python-pip python3-setuptools
```
-For **`openSUSE`** system, use [Zypper Command][9] to install pip.
+对于 **`openSUSE`** 系统,使用[ Zypper 命令][9]来安装 pip。
```
- [For Python2]
+ [对于 Python2]
$ sudo pacman -S python-pip
- [For Python3]
+ [对于 Python3]
$ sudo pacman -S python3-pip
```
-pip is a python module bundled with setuptools, it's one of the recommended
-tool for installing Python packages in Linux.
+pip 是一个与 setuptools 捆绑在一起的 Python 模块,它是在 Linux 中安装 Python 包推荐的工具之一。
```
@@ -111,10 +101,9 @@ tool for installing Python packages in Linux.
```
-#### How to Use Cheat
+#### 如何使用 Cheat
-Run `cheat` followed by corresponding `command` to view the cheatsheet, For
-demonstration purpose, we are going to check about `tar` command examples.
+运行 `cheat`,然后按相应的`命令`来查看 cheatsheet,作为例子,我们要来看下 `tar` 命令的例子。
```
@@ -156,7 +145,7 @@ demonstration purpose, we are going to check about `tar` command examples.
```
-Run the following command to see what cheatsheets are available.
+运行下面的命令查看可用的 cheatsheet。
```
@@ -164,7 +153,7 @@ Run the following command to see what cheatsheets are available.
```
-Navigate to help page for more details.
+进入帮助页面获取更多详细信息。
```
@@ -178,7 +167,7 @@ Navigate to help page for more details.
via: https://www.2daygeek.com/cheat-a-collection-of-practical-linux-command-examples/
作者:[Magesh Maruthamuthu][a]
-译者:[译者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/) 荣誉推出
diff --git a/translated/tech/20171208 Overcoming challenges when building great global communities.md b/translated/tech/20171208 Overcoming challenges when building great global communities.md
new file mode 100644
index 0000000000..679670f025
--- /dev/null
+++ b/translated/tech/20171208 Overcoming challenges when building great global communities.md
@@ -0,0 +1,70 @@
+构建全球社区带来的挑战
+======
+
+
+今天的开源组织参与人员来自于全世界。你能预见到组建在线社区可能遇到哪些困难吗?有没有什么办法能够克服这些困难呢?
+
+为开源社区贡献力量的人共同合作推动软件的开发和发展 (People contributing to an open source community share a commitment to the software they're helping to develop)。在过去,人们是面对面或者通过邮件和电话来交流的。今天,科技孕育出了在线交流--人们只需要进入一个聊天室或消息渠道就能一起工作了。比如,你可以早上跟摩洛哥的人一起工作,到了晚上又跟夏威夷的人一起工作。
+
+## 全球社区的三个挑战
+
+任何一个团队合作过的人都知道意见分歧是很难被克服的。对于在线社区来说,语言障碍,不同的时区,以及文化差异也带来了新的挑战。
+
+### 语言障碍
+
+英语是开源社区中的主流语言,因此英语不好的人会很难看懂文档和修改意见。为了克服这个问题,吸引其他地区的社区成员,你需要邀请双语者参与到社区中来。问问周围的人--你会发现意想不到的精通其他语言的人。社区的双语成员可以帮助别人跨越语言障碍,并且可以通过翻译软件和文档来扩大项目的受众范围。
+
+人们使用的编程语言也不一样。你可能喜欢用 Bash 而其他人则可能更喜欢 Python,Ruby,C 等其他语言。这意味着,人们可能由于编程语言的原因而难以为你的代码库做贡献。项目负责人为项目选择一门被软件社区广泛认可的语言至关重要。如果你选择了一门偏门的语言,则很少人能够参与其中。
+
+### 不同的时区
+
+时区为开源社区带来了另一个挑战。比如,若你在芝加哥,想与一个在伦敦的成员安排一次视频会议,你需要调整 8 小时的时差。根据合作者的地理位置,你可能要在深夜或者清晨工作。
+
+肉体转移 (Physical sprints),让你的团队在同一个时区工作可以帮助克服这个挑战,但这中方法只有极少数社区才能够负担的起。我们还可以定期举行虚拟会议讨论项目,建立一个固定的时间和地点以供所有人来讨论未决的事项,即将发布的版本等其他主题。
+
+不同的时区也可以成为你的优势,因为团队成员可以全天候的工作。若你拥有一个类似 IRC 这样的实时交流平台,用户可以在任意时间都能找到人来回答问题。
+
+### 文化差异
+
+文化差异是开源组织面临的最大挑战。世界各地的人都有不同的思考方式,计划以及解决问题的方法。政治环境也会影响工作环境并影响决策。
+
+作为项目负责人,你应该努力构建一种能包容不同看法的环境。文化差异可以鼓励社区沟通。建设性的讨论总是对项目有益,因为它可以帮助社区成员从不同角度看待问题。不同意见也有助于解决问题。
+
+要成功开源,团队必须学会拥抱差异。这不简单,但多样性最终会使社区收益。
+
+## 加强在线沟通的其他方法
+
+**本地化:** 在线社区成员可能会发现位于附近的贡献者--去见个面并组织一个本地社区。只需要两个人就能组建一个社区了。可以邀请其他当地用户或雇员参与其中; 他们甚至还能为以后的聚会提供场所呢。
+
+**组织活动:** 组织活动是构建本地社区的好方法,而且费用也不高。你可以在当地的咖啡屋或者啤酒厂聚会,庆祝最新版本的发布或者某个核心功能的实现。组织的活动越多,人们参与的热情就越高(即使只是因为单纯的好奇心)。最终,可能会找到一家公司为你提供聚会的场地,或者为你提供赞助。
+
+**保持联系:** 每次活动后,联系本地社区成员。收起电子邮箱地址或者其他联系方式并邀请他们参与到你的交流平台中。邀请他们为其他社区做贡献。你很可能会发现很多当地的人才,运气好的话,甚至可能发现新的核心开发人员!
+
+**分享经验:** 本地社区是一种非常有价值的资源,对你,对其他社区来说都是。与可能受益的人分享你的发现和经验。如果你不清楚(译者注:这里原文是说 sure,但是根据上下文,这里应该是 not sure) 如何策划一场活动或会议,可以咨询其他人的意见。也许能找到一些有经验的人帮你走到正轨。
+
+**关注文化差异:** 记住,文化规范因地点和人口而异,因此在清晨安排某项活动可能适用于一个地方的人,但是不合适另一个地方的人。当然,你可以--也应该--利用其他社区的参考资料来更好地理解这种差异性,但有时你也需要通过试错的方式来学习。不要忘了分享你所学到的东西,让别人也从中获益。
+
+**检查个人观点:** 避免在工作场合提出带有很强主观色彩的观点(尤其是与政治相关的观点)。这会抑制开放式的沟通和问题的解决。相反,应该专注于鼓励与团队成员展开建设性讨论。如果你发现陷入了激烈的争论中,那么后退一步,冷静一下,然后再从更加积极的角度出发重新进行讨论。讨论必须是有建设性的,从多个角度讨论问题对社区有益。永远不要把自己的主观观念放在社区的总体利益之前。
+
+**尝试异步沟通:** 这些天,实时通讯平台已经引起了大家的关注,但除此之外还别忘了电子邮件。如果没有在网络平台上找到人的话,可以给他们发送一封电子邮件。有可能你很快就能得到回复。考虑使用那些专注于异步沟通的平台,比如 [Twist][1],也不要忘了查看并更新论坛和维基。
+
+**使用不同的解决方案:** 并不存在一个单一的完美的解决方法,学习最有效的方法还是通过经验来学习。从反复试验中你可以学到很多东西。不要害怕失败; 你慧聪失败中学到很多东西从而不停地进步。
+
+## 社区需要营养
+
+将社区想象成是一颗植物的幼苗。你需要每天给它浇水,提供阳光和氧气。社区也是一样:倾听贡献者的声音,记住你在与活生生的人进行互动,他们需要以合适的方式进行持续的交流。如果社区缺少了人情味,人们会停止对它的贡献。
+
+最后,请记住,每个社区都是不同的,没有一种单一的解决方法能够适用于所有社区。坚持不断地从社区中学习并适应这个社区。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/working-worldwide-communities
+
+作者:[José Antonio Rey][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/jose
+[1]:https://twistapp.com
diff --git a/translated/tech/20171208 The Biggest Problems With UC Browser.md b/translated/tech/20171208 The Biggest Problems With UC Browser.md
new file mode 100644
index 0000000000..636adf2b99
--- /dev/null
+++ b/translated/tech/20171208 The Biggest Problems With UC Browser.md
@@ -0,0 +1,65 @@
+UC 浏览器最大的问题
+======
+在我们开始谈论缺点之前,我要確定的事实是过去 3 年来,我一直是一个忠实的 UC 浏览器用户。我真的很喜欢它的下载速度,超时尚的用户界面和工具上引人注目的图标。我一开始是 Android 上的 Chrome 用户,但我在朋友的推荐下开始使用 UC。但在过去的一年左右,我看到了一些东西让我重新思考我的选择,现在我感觉我要重新回到 Chrome。
+
+### 不需要的 **通知**
+
+我相信我不是唯一一个每几个小时内就收到这些不需要的通知的人。这些欺骗点击文章真的很糟糕,最糟糕的部分是你每隔几个小时就会收到一次。
+
+[![uc browser's annoying ads notifications][1]][1]
+
+我试图从通知设置里关闭他们,但它们仍然以一个更低频率出现。
+
+### **新闻主页**
+
+另一个不需要的部分是完全无用的。我们完全理解 UC 浏览器是免费下载,可能需要资金,但并不应该这么做。这个主页上的新闻文章是非常让人分心且不需要的。有时当你在一个专业或家庭环境中的一些诱骗点击甚至可能会导致尴尬。
+
+[![uc browser's embarrassing news homepage][2]][2]
+
+而且他们甚至有这样的设置。将 **UC** **新闻显示打开/关闭**。我也试过,猜猜看发生了什么。在下图中,左侧你可以看到我的尝试,右侧可以看到结果。
+
+[![uc browser homepage settings][3]][3]
+
+而且不止诱骗点击新闻,他们已经开始添加一些不必要的功能。所以我也列出它们。
+
+### UC **音乐**
+
+UC 浏览器在浏览器中集成了一个**音乐播放器**来播放音乐。它只是能用,没什么特别的东西。那为什么还要呢?有什么原因呢?谁需要浏览器中的音乐播放器?
+
+[![uc browser adds uc music player][4]][4]
+
+它甚至不是在后台直接播放来自网络的音频。相反,它是一个播放离线音乐的音乐播放器。所以为什么要它?我的意思是,它甚至不够好到作为主要音乐播放器。即使它是,它不能独立于 UC 浏览器运行。所以为什么会有人运行将他/她的浏览器只是为了使用你的音乐播放器?
+
+### **快速**访问栏
+
+我已经看到平均有 90% 的用户在通知区域挂着这栏,因为它默认安装,并且它们不知道如何摆脱它。右侧的设置可以摆脱它。
+
+[![uc browser annoying quick access bar][5]][5]
+
+但是我还是想问一下,“为什么它是默认的?”。这让大多数用户很头痛。如果我们需要它,就会去启用它。为什么要强迫用户。
+
+### 总结
+
+UC 浏览器仍然是最大的玩家之一。它提供了一个最好的体验,但是,我不知道 UC 通过在浏览中打包进将越来越多的功能并强迫用户使用它们是要证明什么。
+
+我喜欢 UC 的速度和设计。但最近的体验导致我再次考虑我的主要浏览器。
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.theitstuff.com/biggest-problems-uc-browser
+
+作者:[Rishabh Kandari][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.theitstuff.com/author/reevkandari
+[1]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-6.png
+[2]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-1-1.png
+[3]:http://www.theitstuff.com/wp-content/uploads/2017/12/uceffort.png
+[4]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-3-1.png
+[5]:http://www.theitstuff.com/wp-content/uploads/2017/10/Untitled-design-4-1.png
+
diff --git a/translated/tech/20171212 Asynchronous decision-making- Helping remote teams succeed.md b/translated/tech/20171212 Asynchronous decision-making- Helping remote teams succeed.md
new file mode 100644
index 0000000000..8731c2c084
--- /dev/null
+++ b/translated/tech/20171212 Asynchronous decision-making- Helping remote teams succeed.md
@@ -0,0 +1,56 @@
+异步决策:帮助远程团队走向成功
+======
+异步决策能够让地理和文化上分散的软件团队更有效率地做出决策。本文就将讨论一下实现异步决策所需要的一些原则和工具。
+
+同步决策,要求参与者实时地进行互动,而这对那些需要大块完整时间工作 ([Maker's Schedule][1]) 的人来说代价非常大,而且对于远程团队来说这也不现实。我们会发现这种会议最后浪费的时间让人难以置信。
+
+相比之下,异步决策常应用于大型开源项目中(比如我常参与的像 Apache Software Foundation (ASF))。它为团队提供了一种尽可能少开会的有效方法。很多开源项目每年只开很少的几次会议(有的甚至完全没开过会),然而开发团队却始终如一地在生产高质量的软件。
+
+怎样才能异步决策呢?
+
+## 所需工具
+
+### 中心化的异步沟通渠道
+
+异步决策的第一步就是构建一个中心化的异步沟通渠道。你所使用的技术必须能让所有的团队成员都获得同样的信息,并能进行线索讨论 (threaded discussions),也就是说你要既能对一个主题进行发散也要能封禁其他主题的讨论。想一想 marine 广播,其中广播渠道的作用只是为了引起特定人员的注意,这些人然后再创建一个子渠道来进行详细的讨论。
+
+很多开源项目依旧使用邮件列表 (mailing lists) 作为中心渠道,不过很多新一代的软件开发者可能会觉得这个方法又古老有笨拙。邮件列表需要遵循大量的准则才能有效的管理热门项目,比如你需要进行有意义的引用,每个 thead 只讨论一个主题,保证 [标题与内容相吻合 ][2]。虽然这么麻烦,但使用得当的话,再加上一个经过索引的归档系统,邮件列表依然在创建中心渠道的工具中占据绝对主导的地位。
+
+公司团队可以从一个更加现代化的协作工具中收益,这类工具更易使用并提供了更加强大的多媒体功能。不管你用的是哪个工具,关键在于要创建一个能让大量的人员有效沟通并异步地讨论各种主题的渠道。要创建一个一致而活跃的社区,使用一个 [繁忙的渠道要好过建立多个渠道 ][3] to create a consistent and engaged community。
+
+### 构建共识的机制
+
+第二个工具是一套构建共识的机制,这样你才不会陷入死循环从而确保能做出决策。做决策最理想的情况就是一致同意,而次佳的就是达成共识,也就是 "有决策权的人之间广泛形成了一致的看法"。强求完全一致的赞同或者允许一票否决都会阻碍决策的制定,因此 ASF 中只在非常有限的决策类似中允许否决权。[ASF 投票制度 ][4] 为类似 ASF 这样没有大老板的松散组织构建了一个久经考验的,用于达成共识的好方法。当共识无法自然产生时也可以使用该套制度。
+
+### 案例管理系统
+
+如上所述,我们通常在项目的中心渠道中构建共识。但是在讨论一些复杂的话题时,使用案例管理系统这一第三方的工具很有意义。小组可以使用中心渠道专注于非正式的讨论和头脑风暴上,当讨论要转变成一个决策时将其转到一个更加结构化的案例管理系统中去。
+
+案例管理系统能够更精确地组织决策。小型团队不用做太多决策可以不需要它,但很多团队会发现能有一个相对独立的地方讨论决策的细节并保存相关信息会方便很多。
+
+案例管理系统不一定就是个很复杂的软件; 在 ASF 中我们所使用的只是简单的问题跟踪软件而已,这些给予 web 的系统原本是创建来进行软件支持和 bug 管理的。每个案例列在一个单独的 web 页面上,还有一些历史的注释和动作信息。该途径可以很好的追踪决策是怎么制定出来的。比如,某些非紧急的决策或者复杂的决策可能会花很长时间才会制定出来,这时有一个地方能够了解这些决策的历史就很有用了。新来的团队成员也能很快地了解到最近做出了哪些决策,哪些决策还在讨论,每个决策都有那些人参与其中,每个决策的背景是什么。
+
+## 成功的案例
+
+ASF 董事会中的九名懂事在每个月的电话会议上只做很少的一些决策,耗时不超过 2 个小时。在准备这些会议之前大多数的决策都预先通过异步的方式决定好了。这使得我们可以在会议上集中讨论复杂和难以确定的问题,而不是他论那些已经达成普遍/部分共识的问题上。
+
+软件世界外的一个有趣的案例是 [瑞士联邦委员会的周会 ][5],它的运作方式跟 ASF 很类似。团队以异步决策构建共识的方式来准备会议。会议议程由一组不同颜色编码的列表组成,这些颜色标识了那些事项可以很快通过批准,那些事项需要进一步的讨论,哪些事项特别的复杂。这使得只要 7 个人就能每年忙完超过 2500 项决策,共 50 个周会,每个周会只需要几个小时时间。我觉得这个效率已经很高了。
+
+就我的经验来看,异步决策带来的好处完全值得上为此投入的时间和工具。而且它也能让团队成员更快乐,这也是成功的关键因素之一。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/article/17/12/asynchronous-decision-making
+
+作者:[Bertrand Delacretaz][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com
+[1]:http://www.paulgraham.com/makersschedule.html
+[2]:https://grep.codeconsult.ch/2017/11/10/large-mailing-lists-survival-guide/
+[3]:https://grep.codeconsult.ch/2011/12/06/stefanos-mazzocchis-busy-list-pattern/
+[4]:http://www.apache.org/foundation/voting.html
+[5]:https://www.admin.ch/gov/en/start/federal-council/tasks/decision-making/federal-council-meeting.html
diff --git a/translated/tech/20171212 How to Search PDF Files from the Terminal with pdfgrep.md b/translated/tech/20171212 How to Search PDF Files from the Terminal with pdfgrep.md
new file mode 100644
index 0000000000..75aae3b97e
--- /dev/null
+++ b/translated/tech/20171212 How to Search PDF Files from the Terminal with pdfgrep.md
@@ -0,0 +1,64 @@
+如何使用 pdfgrep 从终端搜索 PDF 文件
+======
+诸如 [grep][1] 和 [ack-grep][2] 之类的命令行工具对于搜索匹配指定[正则表达式][3]的纯文本非常有用。但是你有没有试过使用这些工具在 PDF 中搜索模板?不要这么做!由于这些工具无法读取PDF文件,因此你不会得到任何结果。他们只能读取纯文本文件。
+
+顾名思义,[pdfgrep][4] 是一个小的命令行程序,可以在不打开文件的情况下搜索 PDF 中的文本。它非常快速 - 比几乎所有 PDF 浏览器提供的搜索更快。grep 和 pdfgrep 的区别在于 pdfgrep 对页进行操作,而 grep 对行操作。grep 如果在一行上找到多个匹配项,它也会多次打印单行。让我们看看如何使用该工具。
+
+对于 Ubuntu 和其他基于 Ubuntu 的 Linux 发行版来说,这非常简单:
+```
+sudo apt install pdfgrep
+```
+
+对于其他发行版,只要将 `pdfgrep` 作为[包管理器][5]的输入,它就应该能够安装。万一你想浏览代码,你也可以查看项目的[ GitLab 页面][6]。
+
+现在你已经安装了这个工具,让我们去测试一下。pdfgrep 命令采用以下格式:
+```
+pdfgrep [OPTION...] PATTERN [FILE...]
+```
+
+ **OPTION** 是一个额外的属性列表,给出诸如 `-i` 或 `--ignore-case` 这样的命令,这两者都会忽略匹配正则中的大小写。
+
+ **PATTERN** 是一个扩展的正则表达式。
+
+ **FILE** 如果它在相同的工作目录或文件的路径,这是文件的名称。
+
+我根据官方文档用 Python 3.6 运行命令。下图是结果。
+
+![pdfgrep search][7]
+
+![pdfgrep search][7]
+
+红色高亮显示所有遇到单词 “queue” 的地方。在命令中加入 `-i` 选项将会匹配单词 “Queue”。请记住,当加入 `-i` 时,大小写并不重要。
+
+pdfgrep 有相当多的有趣的选项。不过,我只会在这里介绍几个。
+
+
+ * `-c` 或者 `--count`:这会抑制匹配的正常输出。它只显示在文件中遇到该单词的次数,而不是显示匹配的长输出,
+ * `-p` 或者 `--page-count`:这个选项打印页面上匹配的页码和页面上的模式出现次数
+ * `-m` 或者 `--max-count` [number]:指定匹配的最大数目。这意味着当达到匹配次数时,该命令停止读取文件。
+
+
+
+支持的选项的完整列表可以在 man 页面或者 pdfgrep 在线[文档][8]中找到。以防你在处理一些批量文件,不要忘记,pdfgrep 可以同时搜索多个文件。可以通过更改 GREP_COLORS 环境变量来更改默认的匹配高亮颜色。
+
+下一次你想在 PDF 中搜索一些东西。请考虑使用 pdfgrep。该工具会派上用场,并且节省你的时间。
+
+--------------------------------------------------------------------------------
+
+via: https://www.maketecheasier.com/search-pdf-files-pdfgrep/
+
+作者:[Bruno Edoh][a]
+译者:[geekpi](https://github.com/geekpi)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.maketecheasier.com
+[1] https://www.maketecheasier.com/what-is-grep-and-uses/
+[2] https://www.maketecheasier.com/ack-a-better-grep/
+[3] https://www.maketecheasier.com/the-beginner-guide-to-regular-expressions/
+[4] https://pdfgrep.org/
+[5] https://www.maketecheasier.com/install-software-in-various-linux-distros/
+[6] https://gitlab.com/pdfgrep/pdfgrep
+[7] https://www.maketecheasier.com/assets/uploads/2017/11/pdfgrep-screenshot.png (pdfgrep search)
+[8] https://pdfgrep.org/doc.html
diff --git a/translated/tech/20171212 Internet protocols are changing.md b/translated/tech/20171212 Internet protocols are changing.md
deleted file mode 100644
index afbc568ed9..0000000000
--- a/translated/tech/20171212 Internet protocols are changing.md
+++ /dev/null
@@ -1,178 +0,0 @@
-因特网协议正在发生变化
-============================================================
-
-
-
-
-在上世纪九十年代,当因特网开始被广泛使用的时候,大部分的通讯只使用几个协议:IPv4 路由包,TCP 转发这些包到连接上,SSL(后来的 TLS)加密连接,DNS 命名连接上的主机,HTTP 是最常用的应用程序协议。
-
-多年以来,这些核心的因特网协议的变化几乎是可以忽略的;HTTP 增加了几个新的报文头和方法,TLS 缓慢地进行了一点小修改,TCP 调整了拥塞控制,而 DNS 引入了像 DNSSEC 这样的特性。这些协议本身在很长一段时间以来都面向相同的 “线上(on the wire)” 环境(除了 IPv6,它已经引起网络运营商们的大量关注)。
-
-因此,网络运营商、供应商、和政策制定者们,他们想去了解(并且有时是想去管理),因特网基于上面的这些协议的“影响(footpring)”已经采纳了的大量的实践 — 是否打算去调试问题、改善服务质量、或者强制实施策略。
-
-现在,核心因特网协议的重要改变已经开始了。虽然它们的目的是与因特网兼容(因为,如果不兼容的话,它们不会被采纳),但是它们可以破坏那些在协议方面进行非法使用的人的自由,或者假设那些事件不会改变。
-
-#### 为什么我们需要去改变因特网
-
-那里有大量的因素推动这些变化。
-
-首先,核心因特网协议的限制越来越明显,尤其是考虑到性能的时候。由于在应用程序和传输协议方面的结构上的问题,网络不能被高效地使用,导致终端用户感受到性能问题(特别是,延迟)。
-
-这就转化成进化或者替换这些协议的强烈的动机,因为有 [大量的经验表明,即便是很小的性能改善也会产生影响][14]。
-
-第二,有能力去进化因特网协议 — 在任何层面上 — 随着时间的推移会变得更加困难,很大程度上要感谢上面所讨论的网络带来的意想不到的使用。例如,尝试去压缩响应的 HTTP 代理,使的部署一个新的压缩技术更困难;中间设备中的 TCP 优化使得部署一个对 TCP 的改善越来越困难。
-
-最后,[我们正处在一个更多地使用加密技术的因特网变化中][15],首次激起这种改变的事件是,2015 的 Edward Snowden 披露的信息(译者注:指的是美国中情局雇员斯诺登的事件)。那是一个单独讨论的话题,但是它的意义是,我们为确保协议可以进化,加密是其中一个很好的工具。
-
-让我们来看一下都发生了什么,接下来会出现什么,它对网络有哪些影响,和它对网络协议的设计有哪些影响。
-
-#### HTTP/2
-
-[HTTP/2][16](基于 Google 的 SPDY) 是第一个发生重大变化的 — 在 2015 年被标准化,它多路传输多个请求到一个 TCP 连接中,因此可以在客户端上不阻塞任何一个其它请求的情况下避免了请求队列。它现在已经被广泛部署,并且被所有的主流浏览器和 web 服务器支持。
-
-从一个网络的角度来看,HTTP/2 的一些显著变化。首先,适合一个二进制协议,因此,任何假定它是 HTTP/1.1 的设备都会被中断。
-
-中断是在 HTTP/2 中另一个大的变化的主要原因;它有效地请求加密。这种改变的好处是避免了来自伪装的 HTTP/1.1 的中间人攻击,或者一些更狡滑的比如 “脱衣攻击” 或者阻止新的协议扩展 — 协议上的这两种情况都在工程师的工作中出现过,给他们带来了很明显的支持问题。
-
-[当它被加密时,HTTP/2 也请求使用 TLS/1.2][17],并且 [黑名单][18] 密码组合已经被证明不安全 — 它只对暂时的密钥有效果。关于潜在的影响可以去看 TLS 1.3 的相关章节。
-
-最终,HTTP/2 允许多于一个主机的请求去被 [合并到一个连接上][19],通过减少页面加载所使用的连接(和拥塞管理上下文)数量去提升性能。
-
-例如,你可以为 www.example.com 有一个连接,也可以用这个连接去为 images.example.com 的请求所使用。[未来协议的扩展也可以允许另外的主机去被添加到连接][20],即便它们没有在最初的 TLS 证书中被列为可以使用。因此,假设连接上的通讯被限制了用途,那么在这种情况下它就不能被使用了。
-
-值得注意的是,尽管存在这些变化,HTTP/2 并没有出现明显的互操作性问题或者来自网络的冲突。
-
-#### TLS 1.3
-
-[TLS 1.3][21] 仅通过了标准化的最后过程,并且已经被一些实现所支持。
-
-不要被它只增加了版本号的名字所欺骗;它实际上是一个新的 TLS 版本,修改了很多 “握手”,它允许应用程序数据去从开始流出(经常被称为 ‘0RTT’)。新的设计依赖短暂的密钥交换,因此,排除了静态密钥。
-
-这引起了一些网络运营商和供应商的担心 — 尤其是那些需要清晰地知道那些连接中发生了什么的人。
-
-例如,假设一个对可视性有监管要求的银行数据中心,通过在网络中嗅探通讯包并且使用他们的服务器上的静态密钥解密它,它们可以记录合法通讯和识别有害通讯,是否是一个来自外部的攻击,或者员工从内部去泄露数据。
-
-TLS 1.3 并不支持那些窃听通讯的特定技术,因此,它也可以 [以短暂的密钥来防范一种形式的攻击][22]。然而,因为他们有监管要求去使用更现代化的加密协议并且去监视他们的网络,这些使网络运营商处境很尴尬。
-
-关于是否规定要求静态密钥、替代方式是否有效、并且为了相对较少的网络环境而减弱整个因特网的安全是否是一个正确的解决方案有很多的争论。确实,仍然有可能对使用 TLS 1.3 的通讯进行解密,但是,你需要去访问一个短暂的密钥才能做到,并且,按照设计,它们不可能长时间存在。
-
-在这一点上,TLS 1.3 似乎不会去改变来适应这些网络,但是,关于去创建另外的协议去允许第三方去偷窥通讯内容 — 或者做更多的事情 — 对于这种使用情况,网络上到处充斥着不满的声音。
-
-#### QUIC
-
-在 HTTP/2 工作期间,可以很明显地看到 TCP 是很低效率的。因为 TCP 是一个按顺序发送的协议,丢失的包阻止了在缓存中的后面等待的包被发送到应用程序。对于一个多路协议来说,这对性能有很大的影响。
-
-[QUIC][23] 是尝试去解决这种影响而在 UDP 之上重构的 TCP 语义(属于 HTTP/2 的流模型的一部分)像 HTTP/2 一样,它作为 Google 的一项成果被发起,并且现在已经进入了 IETF,它最初是作为一个 HTTP-over-UDP 的使用案例,并且它的目标是在 2018 年成为一个标准。但是,因为 Google 在 Chrome 浏览器和它的网站上中已经部署了 QUIC,它已经占有了因特网通讯超过 7% 的份额。
-
-阅读 [关于 QUIC 的答疑][24]
-
-除了大量的通讯(以及隐含的可能的网络调整)从 TCP 到 UDP 的转变之外,Google QUIC(gQUIC)和 IETF QUIC(iQUIC)都要求完全加密;这里没有非加密的 QUIC。
-
-iQUIC 使用 TLS 1.3 去为一个会话创建一个密码,然后使用它去加密每个包。然而,因为,它是基于 UDP 的,在 QUIC 中许多会话信息和元数据在加密后的 TCP 包中被公开。
-
-事实上,iQUIC 当前的 [‘短报文头’][25] — 被用于除了握手外的所有包 — 仅公开一个包编号、一个可选的连接标识符、和一个状态字节,像加密密钥转换计划和包字节(它最终也可能被加密)。
-
-其它的所有东西都被加密 — 包括 ACKs,以提高 [通讯分析][26] 攻击的门槛。
-
-然而,这意味着被动估算 RTT 和通过观察连接的丢失包将不再变得可能;因为这里没有足够多的信息了。在一些运营商中,由于缺乏可观测性,导致了大量的担忧,它们认为像这样的被动测量对于他们调试和了解它们的网络是至关重要的。
-
-为满足这一需求,它们有一个提议是 ‘[Spin Bit][27]‘ — 在报文头中的一个 bit,它是一个往返的开关,因此,可能通过观察它来估算 RTT。因为,它从应用程序的状态中解耦的,它的出现并不会泄露关于终端的任何信息,也无法实现对网络位置的粗略估计。
-
-#### DOH
-
-可以肯定的即将发生的变化是 DOH — [DNS over HTTP][28]。[大量的研究表明,对网络实施策略的一个常用手段是通过 DNS 实现的][29](是否代表网络运营商或者一个更大的权威)。
-
-使用加密去规避这种控制已经 [讨论了一段时间了][30],但是,它有一个不利条件(至少从某些立场来看)— 它可能从其它的通讯中被区别对待;例如,通过利用它的端口号被阻止访问。
-
-DOH 将 DNS 通讯稍带在已经建立的 HTTP 连接上,因此,消除了任何的鉴别器。一个网络希望去阻止访问,仅需要去阻止 DNS 解析就可以做到阻止对特定网站的访问。
-
-例如,如果 Google 在 www.google.com 上部署了它的 [基于 DOH 的公共 DNS 服务][31] 并且一个用户配置了它的浏览器去使用它,一个希望(或被要求的)被停止的网络,它将被 Google 有效的全部阻止(向他们提供的服务致敬!)。
-
-DOH 才刚刚开始,但它已经引起很多人的兴趣和一些部署的声音。通过使用 DNS 来实施策略的网络(和政府机构)如何反应还有待观察。
-
-阅读 [IETF 100, Singapore: DNS over HTTP (DOH!)][1]
-
-#### 骨化和润滑
-
-让我们返回到协议变化的动机,其中一个主题是吞吐量,协议设计者们遇到的越来越多的问题是怎么去假设关于通讯的问题。
-
-例如,TLS 1.3 有一个使用旧版本协议的中间设备的最后结束时间的问题。gQUIC 黑名单控制网络的 UDP 通讯,因为,它们认为那是有害的或者是低优先级的通讯。
-
-当一个协议因为已部署而 “冻结” 它的可扩展点导致不能被进化,我们称它为 _已骨化_ 。TCP 协议自身就是一个严重骨化的例子,因此,很中间设备在 TCP 上做了很多的事情 — 是否阻止有无法识别的 TCP 选项的数据包,或者,优化拥塞控制。
-
-有必要去阻止骨化,去确保协议可以被进化,以满足未来因特网的需要;否则,它将成为一个 ”公共的悲剧“,它只能是满足一些个别的网络行为的地方 — 虽然很好 — 但是将影响整个因特网的健康发展。
-
-这里有很多的方式去阻止骨化;如果被讨论的数据是加密的,它并不能被任何一方所访问,但是持有密钥的人,阻止了干扰。如果扩展点是未加密的,但是在一种可以打破应用程序可见性(例如,HTTP 报头)的方法被常规使用后,它不太可能会受到干扰。
-
-协议设计者不能使用加密的地方和一个不经常使用的扩展点、人为发挥的可利用的扩展点;我们称之为 _润滑_ 它。
-
-例如,QUIC 鼓励终端在 [版本协商][32] 中使用一系列的诱饵值,去避免它永远不变化的假定实现(就像在 TLS 实现中经常遇到的导致重大问题的情况)。
-
-#### 网络和用户
-
-除了避免骨化的愿望外,这些变化也反映出了网络和它们的用户之间的进化。很长时间以来,人们总是假设网络总是很仁慈好善的 — 或者至少是公正的 — 这种情况是不存在的,不仅是 [无孔不入的监视][33],也有像 [Firesheep][34] 的攻击。
-
-因此,因特网用户的整体需求和那些想去访问流经它们的网络的用户数据的网络之间的关系日益紧张。尤其受影响的是那些希望去对它们的用户实施策略的网络;例如,企业网络。
-
-在一些情况中,他们可以通过在它们的用户机器上安装软件(或一个 CA 证书,或者一个浏览器扩展)来达到他们的目的。然而,在网络不是所有者或者能够访问计算机的情况下,这并不容易;例如,BYOD 已经很常用,并且物联网设备几乎没有合适的控制接口。
-
-因此,在 IETF 中围绕协议开发的许多讨论,是去接触企业和其它的 ”叶子“ 网络之间偶尔的需求竞争,并且这对因特网的整体是有好处的。
-
-#### 参与
-
-为了让因特网在以后工作的更好,它需要为终端用户提供价值、避免骨化、并且允许网络去控制。现在发生的变化需要去满足所有的三个目标,但是,我们需要网络运营商更多的投入。
-
-如果这些变化影响你的网络 — 或者没有影响 — 请在下面留下评论,或者更好用了,通过参加会议、加入邮件列表、或者对草案提供反馈来参与 [IETF][35] 的工作。
-
-感谢 Martin Thomson 和 Brian Trammell 的评论。
-
- _Mark Nottingham 是因特网架构委员会的成员和 IETF 的 HTTP 和 QUIC 工作组的共同主持人。_
-
---------------------------------------------------------------------------------
-
-via: https://blog.apnic.net/2017/12/12/internet-protocols-changing/
-
-作者:[Mark Nottingham][a]
-译者:[qhwdw](https://github.com/qhwdw)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:https://blog.apnic.net/author/mark-nottingham/
-[1]:https://blog.apnic.net/2017/11/17/ietf-100-singapore-dns-http-doh/
-[2]:https://blog.apnic.net/author/mark-nottingham/
-[3]:https://blog.apnic.net/category/tech-matters/
-[4]:https://blog.apnic.net/tag/dns/
-[5]:https://blog.apnic.net/tag/doh/
-[6]:https://blog.apnic.net/tag/guest-post/
-[7]:https://blog.apnic.net/tag/http/
-[8]:https://blog.apnic.net/tag/ietf/
-[9]:https://blog.apnic.net/tag/quic/
-[10]:https://blog.apnic.net/tag/tls/
-[11]:https://blog.apnic.net/tag/protocol/
-[12]:https://blog.apnic.net/2017/12/12/internet-protocols-changing/#comments
-[13]:https://blog.apnic.net/
-[14]:https://www.smashingmagazine.com/2015/09/why-performance-matters-the-perception-of-time/
-[15]:https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46197.pdf
-[16]:https://http2.github.io/
-[17]:http://httpwg.org/specs/rfc7540.html#TLSUsage
-[18]:http://httpwg.org/specs/rfc7540.html#BadCipherSuites
-[19]:http://httpwg.org/specs/rfc7540.html#reuse
-[20]:https://tools.ietf.org/html/draft-bishop-httpbis-http2-additional-certs
-[21]:https://datatracker.ietf.org/doc/draft-ietf-tls-tls13/
-[22]:https://en.wikipedia.org/wiki/Forward_secrecy
-[23]:https://quicwg.github.io/
-[24]:https://blog.apnic.net/2016/08/30/questions-answered-quic/
-[25]:https://quicwg.github.io/base-drafts/draft-ietf-quic-transport.html#short-header
-[26]:https://www.mjkranch.com/docs/CODASPY17_Kranch_Reed_IdentifyingHTTPSNetflix.pdf
-[27]:https://tools.ietf.org/html/draft-trammell-quic-spin
-[28]:https://datatracker.ietf.org/wg/doh/about/
-[29]:https://datatracker.ietf.org/meeting/99/materials/slides-99-maprg-fingerprint-based-detection-of-dns-hijacks-using-ripe-atlas/
-[30]:https://datatracker.ietf.org/wg/dprive/about/
-[31]:https://developers.google.com/speed/public-dns/
-[32]:https://quicwg.github.io/base-drafts/draft-ietf-quic-transport.html#rfc.section.3.7
-[33]:https://tools.ietf.org/html/rfc7258
-[34]:http://codebutler.com/firesheep
-[35]:https://www.ietf.org/
-
-
diff --git a/translated/tech/20171213 Creating a blog with pelican and Github pages.md b/translated/tech/20171213 Creating a blog with pelican and Github pages.md
new file mode 100644
index 0000000000..bf3b31857f
--- /dev/null
+++ b/translated/tech/20171213 Creating a blog with pelican and Github pages.md
@@ -0,0 +1,158 @@
+使用 pelican 和 Github pages 来搭建博客
+===============================
+
+今天我将谈一下这个博客是如何搭建的。在我们开始之前,我希望你熟悉使用 Github 并且可以搭建一个 Python 虚拟环境来进行开发。如果你不能做到这些,我推荐你去学习一下 [Django Girls 教程][2],它包含以上和更多的内容。
+这是一篇帮助你发布由 Github 来托管个人博客的教程。为此,你需要一个正常的 Github 用户账户 (不是一个工程账户)。
+你要做的第一件事是创建一个放置代码的 Github 仓库。如果你想要你的博客仅仅指向你的用户名 (比如 rsip22.github.io) 而不是一个子文件夹 (比如 rsip22.github.io/blog),你必须创建一个带有全名的仓库。
+
+![][3]
+*Github 截图,打开了创建新仓库的菜单,正在以'rsip22.github.io'名字创建一个新的仓库*
+
+我推荐你使用 README,Python 版的 .gitignore 和 [一个免费的软件 license][4] 初始化你的仓库。如果你使用一个免费的软件 license,你仍然拥有代码,但是你要确保他人将从中受益,允许他们学习和复用,并且更重要的是允许他们享有代码。
+既然仓库已经创建好了,那我们就克隆到本机中将用来保存代码的文件夹下:
+```
+$ git clone https://github.com/YOUR_USERNAME/YOUR_USERNAME.github.io.git
+```
+并且切换到新的目录:
+```
+ $ cd YOUR_USERNAME.github.io
+```
+因为 Github Pages 偏好的运行的方式是从 master 分支提供文件,你必须将你的源代码放到新的分支,保护为输出 Pelican 产生的静态文件的"master"分支。为此,你必须创建一个名为"source"的分支。
+```
+$ git checkout -b source
+```
+在你的系统中创建一个带有 Pyhton 3 版本的虚拟环境。
+在 GNU/Linux 系统中,命令可能如下:
+```
+ $ python3 -m venv venv
+```
+或者像这样:
+```
+$ virtualenv --python=python3.5 venv
+```
+并且激活它:
+```
+ $ source venv/bin/activate
+```
+在虚拟环境里,你需要安装 pelican 和它的依赖包。你也应该安装 ghp-import (来帮助我们发布到 Github 上) 和 Markdown (为了使用 markdown 语法来写文章)。它运行如下:
+```
+(venv)$ pip install pelican markdown ghp-import
+```
+一旦这些完成,你就可以使用 pelican-quickstart 开始创建你的博客了:
+```
+(venv)$ pelican-quickstart
+```
+这将会提示我们一系列的问题。在回答它们之前,请看一下如下我的答案:
+```
+ > Where do you want to create your new web site? [.] ./
+ > What will be the title of this web site? Renata's blog
+ > Who will be the author of this web site? Renata
+ > What will be the default language of this web site? [pt] en
+ > Do you want to specify a URL prefix? e.g., http://example.com (Y/n) n
+ > Do you want to enable article pagination? (Y/n) y
+ > How many articles per page do you want? [10] 10
+ > What is your time zone? [Europe/Paris] America/Sao_Paulo
+ > Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) Y **# PAY ATTENTION TO THIS!**
+ > Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) n
+ > Do you want to upload your website using FTP? (y/N) n
+ > Do you want to upload your website using SSH? (y/N) n
+ > Do you want to upload your website using Dropbox? (y/N) n
+ > Do you want to upload your website using S3? (y/N) n
+ > Do you want to upload your website using Rackspace Cloud Files? (y/N) n
+ > Do you want to upload your website using GitHub Pages? (y/N) y
+ > Is this your personal page (username.github.io)? (y/N) y
+ Done. Your new project is available at /home/username/YOUR_USERNAME.github.io
+```
+关于时区,应该指定为 TZ 时区 (这里是全部列表: [tz 数据库时区列表][5])。
+现在,继续往下走并开始创建你的第一篇博文!你可能想在你喜爱的代码编辑器里打开工程目录并且找到里面的"content"文件夹。然后创建一个新文件,它可以被命名为 my-first-post.md (别担心,这只是为了测试,以后你可以改变它)。内容应该以元数据开始,这些元数据标识题目,日期,目录和更多主题之前的文章内容,像下面这样:
+```
+ .lang="markdown" # DON'T COPY this line, it exists just for highlighting purposes
+ Title: My first post
+ Date: 2017-11-26 10:01
+ Modified: 2017-11-27 12:30
+ Category: misc
+ Tags: first , misc
+ Slug: My-first-post
+ Authors: Your name
+ Summary: What does your post talk about ? Write here.
+
+ This is the *first post* from my Pelican blog. ** YAY !**
+```
+让我们看看它长什么样?
+进入终端,产生静态文件并且启动服务器。要这么做,使用下面命令:
+```
+(venv)$ make html && make serve
+```
+当这条命令正在运行,你应该可以在你喜爱的 web 浏览器地址栏中键入 localhost:8000 来访问它。
+
+![][6]
+*博客主页的截图。它有一个带有 Renata's blog 标题的头部,第一篇博文在左边,文章的信息在右边,链接和社交在底部*
+
+相当简洁,对吧?
+现在,如果你想在文章中放一张图片,该怎么做呢?好,首先你在放置文章的内容目录里创建一个目录。为了引用简单,我们将这个目录命名为'image'。现在你必须让 Pelican 使用它。找到 pelicanconf.py 文件,这个文件是你配置系统的地方,并且添加一个包含你的图片目录的变量:
+```
+ .lang="python" # DON'T COPY this line, it exists just for highlighting purposes
+ STATIC_PATHS = ['images']
+```
+保存它。打开文章并且以如下方式添加图片:
+```
+ .lang="markdown" # DON'T COPY this line, it exists just for highlighting purposes
+ 
+```
+你可以在终端中随时按下 CTRL+C 来中断服务器。但是你应该再次启动它并检查图片是否正确。你能记住怎么样做吗?
+```
+(venv)$ make html && make serve
+```
+在你代码完工之前的最后一步:你应该确保任何人都可以使用 ATOM 或 RSS feeds 来读你的文章。找到 pelicanconf.py 文件,这个文件是你配置系统的地方,并且编辑关于 feed 产生的部分:
+```
+ .lang="python" # DON'T COPY this line, it exists just for highlighting purposes
+ FEED_ALL_ATOM = 'feeds/all.atom.xml'
+ FEED_ALL_RSS = 'feeds/all.rss.xml'
+ AUTHOR_FEED_RSS = 'feeds/%s.rss.xml'
+ RSS_FEED_SUMMARY_ONLY = False
+```
+保存所有,这样你才可以将代码上传到 Github 上。你可以通过添加所有文件,使用一个信息 ('first commit') 来提交它,并且使用 git push。你将会被问起你的 Github 登录名和密码。
+```
+ $ git add -A && git commit -a -m 'first commit' && git push --all
+```
+And... remember how at the very beginning I said you would be preserving the master branch for the output of the static files generated by Pelican? Now it's time for you to generate them:
+还有...记住在最开始的时候,我给你说的怎样保护为输出 Pelican 产生的静态文件的 master 分支。现在对你来说是时候产生它们了:
+```
+$ make github
+```
+你将会被再次问及 Github 登录名和密码。好了!你的新博客应该创建在 `https://YOUR_USERNAME.github.io`。
+
+如果你在过程中任何一步遇到一个错误,请重新读一下这篇手册,尝试并看看你是否能发现错误发生的部分,因为这是调试的第一步。有时甚至一些简单的东西比如一个错字或者 Python 中错误的缩进都可以给我们带来麻烦。说出来并向网上或你的团队求助。
+
+对于如何使用 Markdown 来写文章,你可以读一下 [Daring Fireball Markdown 指南][7]。
+
+为了获取其它主题,我建议你访问 [Pelican 主题][8]。
+
+这篇文章改编自 [Adrien Leger 的使用一个 Bottstrap3 主题来搭建由 Github 托管的 Pelican 博客][9]。
+
+-----------------------------------------------------------
+
+via: https://rsip22.github.io/blog/create-a-blog-with-pelican-and-github-pages.html
+
+作者:[rsip22][a]
+译者:[liuxinyu123](https://github.com/liuxinyu123)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://rsip22.github.io
+[1]:https://rsip22.github.io/blog/category/blog.html
+[2]:https://tutorial.djangogirls.org
+[3]:https://rsip22.github.io/blog/img/create_github_repository.png
+[4]:https://www.gnu.org/licenses/license-list.html
+[5]:https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
+[6]:https://rsip22.github.io/blog/img/blog_screenshot.png
+[7]:https://daringfireball.net/projects/markdown/syntax
+[8]:http://www.pelicanthemes.com/
+[9]:https://a-slide.github.io/blog/github-pelican
+
+
+
+
+
+
diff --git a/translated/tech/20171213 How To Allow-Permit User To Access A Specific File or Folder In Linux Using ACL.md b/translated/tech/20171213 How To Allow-Permit User To Access A Specific File or Folder In Linux Using ACL.md
new file mode 100644
index 0000000000..794c813e15
--- /dev/null
+++ b/translated/tech/20171213 How To Allow-Permit User To Access A Specific File or Folder In Linux Using ACL.md
@@ -0,0 +1,259 @@
+使用ACL设置用户访问指定文件/目录的权限
+======
+当提到文件和目录的权限时,你的第一反应可能是 owner/group/others 权限。 这些权限可以通过 chmod, chown, 等命令来修改。
+
+文件和目录都有 owner (文件所有者 ),group (所属组) 以及 others 权限,这些权限构成一个集合。 然而这些权限集合有它的局限性,无法做到为不同的用户设置不同的权限。
+
+Linux 对文件和目录有以下默认权限。
+
+`文件` -> 644 -> -rw-r-r- (所有者有读写权限,组成员有只读权限, 其他人也只有读权限)
+`目录` -> 755 -> drwxr-xr-x (所有者有读,写和执行权限, 组成员有读和执行的权限, 其他人也有读和执行的权限)
+
+比如: 默认情况下,所有者可以访问和编辑他们自己用户主目录中的文件, 也可以访问相关同组人的文件,但他们不能修改这些文件,因为组成员没有写权限,而且让组成员有写权限也是不明智的。 基于同样的原因,他/她也不能修改其他人的文件。 然而在某些情况下,多个用户想要修改同一个文件, 那该怎么办呢?
+
+假设有个名叫 `magi` 的用户,他想要修改 `httpd.conf` 文件怎么办呢? 这个文件是归 root 用户所有的,这样如何授权呢? 为了解决这种情况, Access Control Lists (ACLs) 诞生了。
+
+### 什么是 ACL?
+
+ACL 表示 Access Control List (ACL),它为文件系统提供了附加的,更具有弹性的权限机制。 它被设计来为补充 UNIX 文件权限机制。 ACL 允许你赋予任何某用户/组访问某项资源的权限。 setfacl 与 getfacl 命令会帮助你管理 ACL 而不会有任何麻烦。
+
+### 什么是 setfacl?
+
+setfacl 用于设置文件和目录的访问控制列表 (Access Control Lists) (ACLs)。
+
+### 什么 getfacl?
+
+getfacl - 获取文件访问控制列表。对于每个文件, getfacl 都会显示文件名, 文件所有者, 所属组, 以及访问控制列表 (ACL)。 如果一个目录有一个默认的 ACL, getfacl 也会显示这个默认的 ACL。
+
+### 如何确认是否启用了 ACL?
+
+运行 `tune2fs` 命令来检查是否启用了 ACL。
+```
+# tune2fs -l /dev/sdb1 | grep options
+Default mount options: (none)
+
+```
+
+上面的输出很明显第说明 `/dev/sdb1` 分区没有启用 ACL。
+
+如果结果中没有列出 acl,则你需要在挂载选项中加上 acl。 为了让它永久生效, 修改 `/etc/fstab` 中 `/app` 这一行成这样:
+```
+# more /etc/fstab
+
+UUID=f304277d-1063-40a2-b9dc-8bcf30466a03 / ext4 defaults 1 1
+/dev/sdb1 /app ext4 defaults,acl 1 1
+
+```
+
+或者,你也可以使用下面命令将 acl 添加道文件系统的超级块中:
+```
+# tune2fs -o +acl /dev/sdb1
+
+```
+
+现在,通过运行以下命令来动态修改选项:
+```
+# mount -o remount,acl /app
+
+```
+
+再次运行 tune2fs 命令来看选项中是否有 acl 了
+```
+# tune2fs -l /dev/sdb1 | grep options
+Default mount options: acl
+
+```
+
+嗯,现在 `/dev/sdb1` 分区中有 ACL 选项了。
+
+### 如何查看默认的 ACL 值
+
+要查看文件和目录默认的 ACL 值,可以使用 `getfacl` 命令后面加上 `文件路径` 或者 `目录路径`。 注意, 当你对非 ACL 文件/目录运行 getfacl 命令时, 则不会显示附加的 user 和 mask 参数值。
+```
+# getfacl /etc/apache2/apache2.conf
+
+# file: etc/apache2/apache2.conf
+# owner: root
+# group: root
+user::rw-
+group::r--
+other::r--
+
+```
+
+### 如何为文件设置 ACL
+
+以下面格式运行 setfacl 命令可以为指定文件设置 ACL。在下面的例子中,我们会给 `magi` 用户对 `/etc/apache2/apache2.conf` 文件 `rwx` 的权限。
+```
+# setfacl -m u:magi:rwx /etc/apache2/apache2.conf
+
+```
+
+**仔细分析起来:**
+
+ * **`setfacl:`** 命令
+ * **`-m:`** 修改文件的当前 ACL(s)
+ * **`u:`** 指明用户
+ * **`magi:`** 用户名称
+ * **`rwx:`** 想设置的权限
+ * **`/etc/apache2/apache2.conf:`** 文件名称
+
+再查看一次新的 ACL 值:
+```
+# getfacl /etc/apache2/apache2.conf
+
+# file: etc/apache2/apache2.conf
+# owner: root
+# group: root
+user::rw-
+user:magi:rwx
+group::r--
+mask::rwx
+other::r--
+
+```
+
+注意: 若你发现文件或目录权限后面有一个加号 (+),就表示设置了 ACL。
+```
+# ls -lh /etc/apache2/apache2.conf
+-rw-rwxr--+ 1 root root 7.1K Sep 19 14:58 /etc/apache2/apache2.conf
+
+```
+
+### 如何为目录设置 ACL
+
+以下面格式运行 setfacl 命令可以递归第为指定目录设置 ACL。在下面的例子中,我们会将 `/etc/apache2/sites-available/` 目录中的 `rwx` 权限赋予 `magi` 用户。
+```
+# setfacl -Rm u:magi:rwx /etc/apache2/sites-available/
+
+```
+
+**其中 :**
+
+ * **`-R:`** 递归到子目录中
+
+
+再次查看一下新的 ACL 值。
+```
+# getfacl /etc/apache2/sites-available/
+
+# file: etc/apache2/sites-available/
+# owner: root
+# group: root
+user::rwx
+user:magi:rwx
+group::r-x
+mask::rwx
+other::r-x
+
+```
+
+现在 `/etc/apache2/sites-available/` 中的文件和目录都设置了 ACL。
+```
+# ls -lh /etc/apache2/sites-available/
+total 20K
+-rw-rwxr--+ 1 root root 1.4K Sep 19 14:56 000-default.conf
+-rw-rwxr--+ 1 root root 6.2K Sep 19 14:56 default-ssl.conf
+-rw-rwxr--+ 1 root root 1.4K Dec 8 02:57 mywebpage.com.conf
+-rw-rwxr--+ 1 root root 1.4K Dec 7 19:07 testpage.com.conf
+
+```
+
+### 如何为组设置 ACL
+
+以下面格式为指定文件运行 setfacl 命令。在下面的例子中,我们会给 `appdev` 组赋予 `/etc/apache2/apache2.conf` 文件的 `rwx` 权限。
+```
+# setfacl -m g:appdev:rwx /etc/apache2/apache2.conf
+
+```
+
+**其中:**
+
+ * **`g:`** 指明一个组
+
+
+
+对多个用户和组授权,只需要用 `逗号` 区分开,就像下面这样。
+```
+# setfacl -m u:magi:rwx,g:appdev:rwx /etc/apache2/apache2.conf
+
+```
+
+### 如何删除 ACL
+
+以下面格式运行 setfacl 命令会删除文件对指定用户的 ACL。这只会删除用户权限而保留 `mask` 的值为只读。
+```
+# setfacl -x u:magi /etc/apache2/apache2.conf
+
+```
+
+**其中:**
+
+ * **`-x:`** 从文件的 ACL(s) 中删除
+
+
+
+再次查看 ACl 值。在下面的输出中我们可以看到 `mask` 的值还是只读。
+```
+# getfacl /etc/apache2/apache2.conf
+
+# file: etc/apache2/apache2.conf
+# owner: root
+# group: root
+user::rw-
+group::r--
+mask::r--
+other::r--
+
+```
+
+使用 `-b` 来删除文件中所有的 ACLs。
+```
+# setfacl -b /etc/apache2/apache2.conf
+
+```
+
+**其中:**
+
+ * **`-b:`** 删除所有的 ACL 条目
+
+
+再次查看删掉后的 ACl 值就会发现所有的东西都不见了,包括 mask 的值也不见了。
+```
+# getfacl /etc/apache2/apache2.conf
+
+# file: etc/apache2/apache2.conf
+# owner: root
+# group: root
+user::rw-
+group::r--
+other::r--
+
+```
+
+### 如何备份并还原 ACL
+
+下面命令可以备份和还原 ACL 的值。要制作备份, 需要进入对应的目录然后这样做(假设我们要备份 `sites-available` 目录中的 ACL 值)。
+
+```
+# cd /etc/apache2/sites-available/
+# getfacl -R * > acl_backup_for_folder
+
+```
+
+还原的话,则运行下面命令
+```
+# setfacl --restore=/etc/apache2/sites-available/acl_backup_for_folder
+```
+
+--------------------------------------------------------------------------------
+
+via: https://www.2daygeek.com/how-to-configure-access-control-lists-acls-setfacl-getfacl-linux/
+
+作者:[Magesh Maruthamuthu;Steven M. Dupuis][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.2daygeek.com
diff --git a/translated/tech/20171214 A step-by-step guide to building open culture.md b/translated/tech/20171214 A step-by-step guide to building open culture.md
new file mode 100644
index 0000000000..d6674c4286
--- /dev/null
+++ b/translated/tech/20171214 A step-by-step guide to building open culture.md
@@ -0,0 +1,43 @@
+手把手教你构建开放式文化
+======
+我们于 2015 年发表 `开放组织 (Open Organization)` 后,很对各种类型不同大小的公司都对“开放式”文化究竟意味着什么感到好奇。甚至当我跟别的公司谈论我们产品和服务的优势时,也总是很快就从谈论技术转移到人和文化上去了。几乎所有对推动创新和保持行业竞争优势有兴趣的人都在思考这个问题。
+
+不是只有高级领导团队 (Senior leadership teams) 才对开放式工作感兴趣。[红帽公司最近一次调查 ][1] 发现 [81% 的受访者 ][2] 同意这样一种说法:"拥有开放式的组织文化对我们公司非常重要。"
+
+然而要注意的是。同时只有 [67% 的受访者 ][3] 认为:"我们的组织有足够的资源来构建开放式文化。"
+
+这个结果与我从其他公司那交流所听到的相吻合:人们希望在开放式文化中工作,他们只是不知道该怎么做。对此我表示同情,因为组织的行事风格是很难捕捉,评估,和理解的。在 [Catalyst-In-Chief][4] 中,我将其称之为 "组织中最神秘莫测的部分。"
+
+开放式组织之所以让人神往是因为在这个数字化转型有望改变传统工作方式的时代,拥抱开放文化是保持持续创新的最可靠的途径。当我们在书写本文的时候,我们所关注的是描述在红帽公司中兴起的那种文化--而不是编写一本如何操作的书。我们并不会制定出一步步的流程来让其他组织采用。
+
+这也是为什么与其他领导者和高管谈论他们是如何开始构建开放式文化的会那么有趣。在创建开发组织时,很多高管会说我们要"改变我们的文化"。但是文化并不是一项输入。它是一项输出--它是人们互动和日常行为的副产品。
+
+告诉组织成员"更加透明地工作","更多地合作",以及 "更加包容地行动" 并没有什么作用。因为像 "透明," "合作," and "包容" 这一类的文化特质并不是行动。他们只是组织内指导行为的价值观而已。
+
+纳入要如何才能构建开放式文化呢?
+
+在过去的两年里,Opensource.com 设计收集了各种以开放的精神来进行工作,管理和领导的最佳实践方法。现在我们在新书 [The Open Organization Workbook][5] 中将之分享出来,这是一本更加规范的引发文化变革的指引。
+
+要记住,任何改变,尤其是巨大的改变,都需要许诺 (commitment),耐心,以及努力的工作。我推荐你在通往伟大成功的大道上先使用这本工作手册来实现一些微小的,有意义的成果。
+
+通过阅读这本书,你将能够构建一个开放而又富有创新的文化氛围,使你们的人能够茁壮成长。我已經迫不及待想听听你的故事了。
+
+本文摘自 [Open Organization Workbook project][6]。
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/open-organization/17/12/whitehurst-workbook-introduction
+
+作者:[Jim Whitehurst][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://opensource.com/users/jwhitehurst
+[1]:https://www.redhat.com/en/blog/red-hat-releases-2017-open-source-culture-survey-results
+[2]:https://www.techvalidate.com/tvid/923-06D-74C
+[3]:https://www.techvalidate.com/tvid/D30-09E-B52
+[4]:https://opensource.com/open-organization/resources/catalyst-in-chief
+[5]:https://opensource.com/open-organization/resources/workbook
+[6]:https://opensource.com/open-organization/17/8/workbook-project-announcement
diff --git a/translated/tech/20171214 Bash Scripting- Learn to use REGEX (Basics).md b/translated/tech/20171214 Bash Scripting- Learn to use REGEX (Basics).md
new file mode 100644
index 0000000000..83e9514054
--- /dev/null
+++ b/translated/tech/20171214 Bash Scripting- Learn to use REGEX (Basics).md
@@ -0,0 +1,151 @@
+Bash 脚本:学习使用正则表达式(基础)
+======
+正则表达式(简写为 regex 或者 regexp)基本上是定义一种搜索模式的字符串,可以被用来执行“搜索”或者“搜索并替换”操作,也可以被用来验证像密码策略等条件。
+
+正则表达式是一个我们可利用的非常强大的工具,并且使用正则表达式最好的事情是它能在几乎所有计算机语言中被使用。所以如果你使用 Bash 脚本或者创建一个 python 程序时,我们可以使用正则表达式或者也可以写一个单行搜索查询。
+
+在这篇教程中,我们将会学习一些正则表达式的基本概念,并且学习如何在 Bash 中使用‘grep’时使用它们,但是如果你希望在其他语言如 python 或者 C 中使用它们,你只能使用正则表达式部分。那么让我们通过正则表达式的一个例子开始吧,
+
+ **Ex-** 一个正则表达式看起来像
+
+ **/t[aeiou]l/**
+
+但这是什么意思呢?它意味着所提到的正则表达式将寻找一个词,它以‘t’开始,在中间包含字母‘a e i o u’中任意一个,并且字母‘l’最为最后一个字符。它可以是‘tel’,‘tal’或者‘til’,匹配可以是一个单独的词或者其它单词像‘tilt’,‘brutal’或者‘telephone’的一部分。
+
+ **grep 使用正则表达式的语法是**
+
+ **$ grep "regex_search_term" file_location**
+
+如果头脑中没有想法,不要担心,这只是一个例子,来展示可以利用正则表达式获取什么,并且相信我这是最简单的例子。我们可以从正则表达式中获取更多。现在我们将从正则表达式基础的开始。
+
+ **(推荐阅读: [你应该知道的有用的 linux 命令][1])**
+
+## **基础的正则表示式**
+
+现在我们开始学习一些被称为元字符(MetaCharacters)的特殊字符。他们帮助我们创建更复杂的正则表达式搜索项。下面提到的是基本元字符的列表,
+
+ **. or Dot** 将匹配任意字符
+
+ **[ ]** 将匹配范围内字符
+
+ **[^ ]** 将匹配除了括号中提到的那个之外的所有字符
+
+ ***** 将匹配零个或多个前面的项
+
+ **+** 将匹配一个或多个前面的项
+
+ **? ** 将匹配零个或一个前面的项
+
+ **{n}** 将匹配‘n’次前面的项
+
+ **{n,}** 将匹配‘n’次或更多前面的项
+
+ **{n m} ** 将匹配在‘n’和‘m’次之间的项
+
+ **{ ,m}** 将匹配少于或等于‘m’次的项
+
+ **\ ** 是一个转义字符,当我们需要在我们的搜索中包含一个元字符时使用
+
+现在我们将用例子讨论所有这些元字符。
+
+### **. or Dot**
+
+它用于匹配出现在我们搜索项中的任意字符。举个例子,我们可以使用点如
+
+ **$ grep "d.g" file1**
+
+这个正则表达式意味着我们在‘file_name’文件中正查找的词以‘d’开始,以‘g’结尾,中间可以有任意字符。同样,我们可以使用任意数量的点作为我们的搜索模式,如
+
+ **T ……h**
+
+这个查询项将查找一个词,以‘T’开始,以‘h’结尾,并且中间可以有任意 6 个字符。
+
+### **[ ]**
+
+方括号用于定义字符的范围。 例如,我们需要搜索一些特别的单词而不是匹配任何字符,
+
+ **$ grep "N[oen]n" file2**
+
+这里,我们正寻找一个单词,以‘N’开头,以‘n’结尾,并且中间只能有‘o’,‘e’或者‘n’中的一个。 在方括号中我们可以提到单个到任意数量的字符。
+
+我们在方括号中也可以定义像‘a-e’或者‘1-18’作为匹配字符的列表。
+
+### **[^ ]**
+
+这就像正则表达式的 not 操作。当使用 [^ ] 时,它意味着我们的搜索将包括除了方括号内提到的所有字符。例如,
+
+ **$ grep "St[^1-9]d" file3**
+
+这意味着我们可以拥有所有这样的单词,它们以‘St’开始,以字母‘d’结尾,并且不得包含从1到9的任何数字。
+
+到现在为止,我们只使用了仅需要在中间查找单个字符的正则表达式的例子,但是如果我们需要看的更多该怎么办呢。假设我们需要找到以一个字符开头和结尾的所有单词,并且在中间可以有任意数量的字符。这就是我们使用乘数(multiplier)元字符如 + * & ? 的地方。
+
+{n},{n. m},{n , } 或者 { ,m} 也是可以在我们的正则表达式项中使用的其他乘数元字符。
+
+### * (星号)
+
+以下示例匹配字母k的任意出现次数,包括一次没有:
+
+ **$ grep "lak*" file4**
+
+它意味着我们可以匹配到‘lake’,‘la’或者‘lakkkk’
+
+### +
+
+以下模式要求字符串中的字母k至少被匹配到一次:
+
+ **$ grep "lak+" file5**
+
+这里k 在我们的搜索中至少需要发生一次,所以我们的结果可以为‘lake’或者‘lakkkk’,但不能是‘la’。
+
+### **?**
+
+在以下模式匹配中
+
+ **$ grep "ba?b" file6**
+
+字符串 bb 或 bab,使用‘?’乘数,我们可以有一个或零个字符的出现。
+
+### **非常重要的提示:**
+
+当使用乘数时这是非常重要的,假设我们有一个正则表达式
+
+ **$ grep "S.*l" file7**
+
+我们得到的结果是‘small’,‘silly’,并且我们也得到了‘Shane is a little to play ball’。但是为什么我们得到了‘Shane is a little to play ball’,我们只是在搜索中寻找单词,为什么我们得到了整个句子作为我们的输出。
+
+这是因为它满足我们的搜索标准,它以字母‘s’开头,中间有任意数量的字符并以字母‘l’结尾。那么,我们可以做些什么来纠正我们的正则表达式来只是得到单词而不是整个句子作为我们的输出。
+
+我们在正则表达式中需要增加 ? 元字符,
+
+ **$ grep "S.*?l" file7**
+
+这将会纠正我们正则表达式的行为。
+
+### **\ or Escape characters**
+
+\ 是当我们需要包含一个元字符或者对正则表达式有特殊含义的字符的时候来使用。例如,我们需要找到所有以点结尾的单词,所以我们可以使用
+
+ **$ grep "S.*\\." file8**
+
+这将会查找和匹配所有以一个点字符结尾的词。
+
+通过这篇基本正则表达式教程,我们现在有一些关于正则表达式如何工作的基本概念。在我们的下一篇教程中,我们将学习一些高级的正则表达式的概念。同时尽可能多地练习,创建正则表达式并试着尽可能多地在你的工作中加入它们。如果有任何疑问或问题,您可以在下面的评论区留言。
+
+--------------------------------------------------------------------------------
+
+via: http://linuxtechlab.com/bash-scripting-learn-use-regex-basics/
+
+作者:[SHUSAIN][a]
+译者:[kimii](https://github.com/kimii)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:http://linuxtechlab.com/author/shsuain/
+[1]:http://linuxtechlab.com/useful-linux-commands-you-should-know/
+
+
+
+
+
diff --git a/translated/tech/20171214 How to squeeze the most out of Linux file compression.md b/translated/tech/20171214 How to squeeze the most out of Linux file compression.md
new file mode 100644
index 0000000000..66a6ab980a
--- /dev/null
+++ b/translated/tech/20171214 How to squeeze the most out of Linux file compression.md
@@ -0,0 +1,115 @@
+如何优雅的使用大部分的 Linux 文件压缩
+=======
+ 如果你对 linux 系统下的对文件压缩命令或操作的有效性有任何疑问 ,你应该看一下 **apropos compress** 这个命令的输出 ;如果你有机会这么做 ,你会惊异于有如此多的的命令来进行压缩文件和解压缩文件 ;还有许多命令来进行压缩文件的比较 ,检验 ,并且能够在压缩文件中的内容中进行搜索 ,甚至能够把压缩文件从一个格式变成另外一种格式 ( *.z 格式变为 *.gz 格式 ) 。
+ 你想在所有词目中寻找一组 bzip2 的压缩命令 。包括 zip ,gzip ,和 xz 在内 ,你将得到一个有意思的操作。
+
+```
+$ apropos compress | grep ^bz
+ bzcat (1) - decompresses files to stdout
+ bzcmp (1) - compare bzip2 compressed files
+ bzdiff (1) - compare bzip2 compressed files
+ bzegrep (1) - search possibly bzip2 compressed files for a regular expression
+ bzexe (1) - compress executable files in place
+ bzfgrep (1) - search possibly bzip2 compressed files for a regular expression
+ bzgrep (1) - search possibly bzip2 compressed files for a regular expression
+ bzip2 (1) - a block-sorting file compressor, v1.0.6
+ bzless (1) - file perusal filter for crt viewing of bzip2 compressed text
+ bzmore (1) - file perusal filter for crt viewing of bzip2 compressed text
+```
+
+ 在我的Ubuntu系统上 ,列出了超过 60 条命令作为 apropos compress 命令的返回 。
+
+## 压缩算法
+ 压缩并没有普适的方案 ,某些压缩工具是有损耗的压缩 ,例如能够使 mp3 文件减小大小而能够是听者有接近聆听原声的音乐感受 。但是 Linux 命令行能够用算法使压缩文件或档案文件能够重新恢复为原始数据 ,换句话说 ,算法能够使压缩或存档无损 。
+
+ 这是如何做到的 ?300 个相同的在一行的相同的字符能够被压缩成像 “300x” 。但是这种算法不会对大多数的文件产生有效的益处 。因为文件中完全随机的序列要比相同字符的序列要多的多 。 压缩算法会越来越复杂和多样 ,所以在 Unix 早期 ,压缩是第一个被介绍的 。
+
+## 在 Linux 系统上的压缩命令
+ 在 Linux 系统上最常用的压缩命令是 zip ,gzip ,bzip2 ,xz 。 前面提到的常用压缩命令以同样的方式工作 。会权衡文件内容压缩程度 ,压缩花费的时间 ,压缩文件在其他你需要使用的系统上的兼容性 。
+ 一些时候压缩一个文件并不会花费很多时间和性能 。在下面的例子中 ,被压缩的文件会比原始文件要大 。当在一个不是很普遍的情况下 ,尤其是在文件内容达到一定等级的随机度 。
+
+```
+$ time zip bigfile.zip bigfile
+ adding: bigfile (default 0% )
+real 0m0.055s
+user 0m0.000s
+sys 0m0.016s
+$ ls -l bigfile*
+-rw-r--r-- 1 root root 0 12月 20 22:36 bigfile
+-rw------- 1 root root 164 12月 20 22:41 bigfile.zip
+```
+ 注意压缩后的文件 ( bigfile.zip ) 比源文件 ( bigfile ) 要大 。如果压缩增加了文件的大小或者减少的很少的百分比 ,那就只剩下在线备份的好处了 。如果你在压缩文件后看到了下面的信息 。你不会得到太多的益处 。
+ ( defalted 1% )
+
+ 文件内容在文件压缩的过程中有很重要的作用 。在上面文件大小增加的例子中是因为文件内容过于随机 。压缩一个文件内容只包含 0 的文件 。你会有一个相当震惊的压缩比 。在如此极端的情况下 ,三个常用的压缩工具都有非常棒的效果 。
+
+```
+-rw-rw-r-- 1 shs shs 10485760 Dec 8 12:31 zeroes.txt
+-rw-rw-r-- 1 shs shs 49 Dec 8 17:28 zeroes.txt.bz2
+-rw-rw-r-- 1 shs shs 10219 Dec 8 17:28 zeroes.txt.gz
+-rw-rw-r-- 1 shs shs 1660 Dec 8 12:31 zeroes.txt.xz
+-rw-rw-r-- 1 shs shs 10360 Dec 8 12:24 zeroes.zip
+```
+ 你不会喜欢为了查看文件中的 50 个字节的而将 10 0000 0000 字节的数据完全解压 。这样是及其不可能的 。
+ 在更真实的情况下 ,大小差异是总体上的不同 -- 不是重大的效果 -- 对于一个小的公正的 jpg 的图片文件 。
+
+```
+-rw-r--r-- 1 shs shs 13522 Dec 11 18:58 image.jpg
+-rw-r--r-- 1 shs shs 13875 Dec 11 18:58 image.jpg.bz2
+-rw-r--r-- 1 shs shs 13441 Dec 11 18:58 image.jpg.gz
+-rw-r--r-- 1 shs shs 13508 Dec 11 18:58 image.jpg.xz
+-rw-r--r-- 1 shs shs 13581 Dec 11 18:58 image.jpg.zip
+```
+
+ 在压缩拉的文本文件时 ,你会发现重要的不同 。
+```
+$ ls -l textfile*
+ -rw-rw-r-- 1 shs shs 8740836 Dec 11 18:41 textfile
+ -rw-rw-r-- 1 shs shs 1519807 Dec 11 18:41 textfile.bz2
+ -rw-rw-r-- 1 shs shs 1977669 Dec 11 18:41 textfile.gz
+ -rw-rw-r-- 1 shs shs 1024700 Dec 11 18:41 textfile.xz
+ -rw-rw-r-- 1 shs shs 1977808 Dec 11 18:41 textfile.zip
+```
+
+ 在这种情况下 ,XZ 相较于其他压缩文件有效的减小了文件的大小 ,对于第二的 bzip2 命令也有很大的提高
+
+## 查看压缩文件
+
+ 以 more 结尾的命令能够让你查看压缩文件而不解压文件 。
+
+```
+bzmore (1) - file perusal filter for crt viewing of bzip2 compressed text
+lzmore (1) - view xz or lzma compressed (text) files
+xzmore (1) - view xz or lzma compressed (text) files
+zmore (1) - file perusal filter for crt viewing of compressed text
+```
+ 这些命令在大多数工作中被使用 ,自从不得不使文件解压缩而只为了显示给用户 。在另一方面 ,留下被解压的文件在系统中 。这些命令简单的使文件解压缩 。
+
+```
+$ xzmore textfile.xz | head -1
+ Here is the agenda for tomorrow's staff meeting:
+```
+
+## 比较压缩文件
+ 许多的压缩工具箱包含一个差异命令 ( 例如 :xzdiff ) 。这些工具通过这些工作来进行比较和差异而不是做算法指定的比较 。例如 ,xzdiff 命令比较 bz2 类型的文件和比较 xz 类型的文件一样简单 。
+
+## 如何选择最好的 Linux 压缩工具
+ 如何选择压缩工具取决于你工作 。在一些情况下 ,选择取决于你所压缩的数据内容 。在更多的情况下 ,取决你你组织的惯例 ,除非你对磁盘空间有着很高的敏感度 。下面是一般的建议 :
+ zip :文件需要被分享或者会在 Windows 系统下使用 。
+ gzip :文件在 Unix/Linux 系统下使用 。长远来看 ,bzip2 是普遍存在的 。
+ bzip2 :使用了不同的算法 ,产生比 gzip 更小的文件 ,但是花更长的时间 。
+ xz :一般提供做好的压缩率 ,但是也会花费相当的时间 。比其他工具更新 ,可能在你工作的系统上不存在 。
+
+## 注意
+ 当你在压缩文件时,你有很多选择 ,在极少的情况下 ,会产生无效的磁盘存储空间。
+
+--------------------------------------------------------------------------------
+via: https://www.networkworld.com/article/3240938/linux/how-to-squeeze-the-most-out-of-linux-file-compression.html
+
+作者 :[ Sandra Henry-Stocker ][1] 译者:[ singledp ][2] 校对:校对者ID
+
+本文由 [ LCTT ][3]原创编译,Linux中国 荣誉推出
+
+[1]:https://www.networkworld.com
+[2]:https://github.com/singledo
+[3]:https://github.com/LCTT/TranslateProject
\ No newline at end of file
diff --git a/translated/tech/20171214 The Most Famous Classic Text-based Adventure Game.md b/translated/tech/20171214 The Most Famous Classic Text-based Adventure Game.md
new file mode 100644
index 0000000000..17dfb304a6
--- /dev/null
+++ b/translated/tech/20171214 The Most Famous Classic Text-based Adventure Game.md
@@ -0,0 +1,115 @@
+最有名的经典文字冒险游戏
+======
+**巨洞冒险**,又名 **ADVENT**、**Clossal Cave** 或 **Adventure**,是八十年代初到九十年代末最受欢迎的基于文字的冒险游戏。这款游戏还作为史上第一款“互动小说”类游戏而闻名。在 1976 年,一个叫 **Will Crowther** 的程序员开发了这款游戏的一个早期版本,之后另一位叫 **Don Woods** 的程序员改进了这款游戏,为它添加了许多新元素,包括计分系统以及更多的幻想角色和场景。这款游戏最初是为 **PDP-10** 开发的,这是一个历史悠久的大型计算机。后来,它被移植到普通家用台式电脑上,比如 IBM PC 和 Commodore 64。游戏的最初版使用 Fortran 开发,之后在八十年代初它被微软加入到 MS-DOS 1.0 当中。
+
+
+
+1995 年发布的最终版本 **Adventure 2.5** 从来没有可用于现代操作系统的安装包。它已经几乎绝版。万幸的是,在多年之后身为开源运动提倡者的 **Eric Steven Raymond** 得到了原作者们的同意之后将这款经典游戏移植到了现代操作系统上。他把这款游戏开源并将源代码以 **”open-adventure“** 之名托管在 GitLab 上。
+
+你在这款游戏的主要目标是找到一个传言中藏有大量宝藏和金子的洞穴并活着离开它。玩家在这个虚拟洞穴中探索时可以获得分数。一共可获得的分数是 430 点。这款游戏的灵感主要来源于原作者 **Will Crowther** 丰富的洞穴探索的经历。他曾经积极地在洞穴中冒险,特别是肯塔基州的猛犸洞。因为游戏中的洞穴结构大体基于猛犸洞,你也许会注意到游戏中的场景和现实中的猛犸洞的相似之处。
+
+### 安装巨洞冒险
+
+Open Adventure 在 [**AUR**][1] 上有面对 Arch 系列操作系统的安装包。所以我们可以在 Arch Linux 或者像 Antergos 和 Manjaro Linux 等基于 Arch 的发行版上使用任何 AUR 辅助程序安装这款游戏。
+
+使用 [**Pacaur**][2]:
+```
+pacaur -S open-adventure
+```
+
+使用 [**Packer**][3]:
+```
+packer -S open-adventure
+```
+
+使用 [**Yaourt**][4]:
+```
+yaourt -S open-adventure
+```
+
+在其他 Linux 发行版上,你也许需要经过如下步骤来从源代码编译并安装这款游戏。
+
+首先安装依赖项:
+
+在 Debian 和 Ubuntu 上:
+```
+sudo apt-get install python3-yaml libedit-dev
+```
+
+在 Fedora 上:
+```
+sudo dnf install python3-PyYAML libedit-devel
+```
+
+你也可以使用 pip 来安装 PyYAML:
+```
+sudo pip3 install PyYAML
+```
+
+安装好依赖项之后,用以下命令从源代码编译并安装 open-adventure:
+```
+git clone https://gitlab.com/esr/open-adventure.git
+```
+```
+make
+```
+```
+make check
+```
+
+最后,运行 ‘advent’ 程序开始游戏:
+```
+advent
+```
+
+在 [**Google Play store**][5] 上还有这款游戏的安卓版。
+
+### 游戏说明
+
+要开始游戏,只需在终端中输入这个命令:
+```
+advent
+```
+
+你会看到一个欢迎界面。按 “y” 来查看教程,或者按 “n“ 来开始冒险之旅。
+
+![][6]
+
+游戏在一个小砖房前面开始。玩家需要使用由一到两个简单的英语单词单词组成的命令来控制角色。要移动角色,只需输入 **in**、 **out**、**enter**、**exit**、**building**、**forest**、**east**、**west**、**north**、**south**、**up** 或 **down** 等指令。
+
+比如说,如果你输入 **”south“** 或者简写 **”s“**,游戏角色就会向当前位置的南方移动。注意每个单词只有前五个字母有效,所以当你需要输入更长的单词时需要使用缩写,比如要输入 **northeast** 时,只需输入 NE(大小写均可)。要输入 **southeast** 则使用 SE。要捡起物品,输入 **pick**。要进入一个建筑物或者其他的场景,输入 **in**。要从任何场景离开,输入 **exit**,诸如此类。当你遇到危险时你会受到警告。你也可以使用两个单词的短语作为命令,比如 **”eat food“**、**”drink water“**、**”get lamp“**、**”light lamp“**、**”kill snake“** 等等。你可以在任何时候输入 **”help“** 来显示游戏帮助。
+
+![][8]
+
+我花了一整个下午来探索这款游戏。天哪,这真是段超级有趣、激动人心又紧张刺激的冒险体验!
+
+![][9]
+
+我打通了许多关卡并在路上探索了各式各样的场景。我甚至找到了金子,还被一条蛇和一个矮人袭击过。我必须承认这款游戏真是非常让人上瘾,简直是最好的时间杀手。
+
+如果你安全地带着财宝离开了洞穴,你会取得游戏胜利,并获得财宝全部的所有权。你在找到财宝的时候也会获得部分的奖励。要提前离开你的冒险,输入 **”quit“**。要暂停冒险,输入 **”suspend“**(或者 ”pause“ 或 ”save“)。你可以在之后继续冒险。要看你现在的进展如何,输入 **”score“**。记住,被杀或者退出会导致丢分。
+
+祝你们玩得开心!再见!
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.ostechnix.com/colossal-cave-adventure-famous-classic-text-based-adventure-game/
+
+作者:[SK][a]
+译者:[yixunx](https://github.com/yixunx)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.ostechnix.com/author/sk/
+[1]:https://aur.archlinux.org/packages/open-adventure/
+[2]:https://www.ostechnix.com/install-pacaur-arch-linux/
+[3]:https://www.ostechnix.com/install-packer-arch-linux-2/
+[4]:https://www.ostechnix.com/install-yaourt-arch-linux/
+[5]:https://play.google.com/store/apps/details?id=com.ecsoftwareconsulting.adventure430
+[6]:https://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-2.png
+[7]:http://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-2.png
+[8]:http://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-3.png
+[9]:http://www.ostechnix.com/wp-content/uploads/2017/12/Colossal-Cave-Adventure-1.png
diff --git a/translated/tech/20171216 Saving window position in Xfce session.md b/translated/tech/20171216 Saving window position in Xfce session.md
new file mode 100644
index 0000000000..e57a667ccb
--- /dev/null
+++ b/translated/tech/20171216 Saving window position in Xfce session.md
@@ -0,0 +1,68 @@
+在 Xfce 会话中保存窗口的位置
+======
+摘要:如果你发现 Xfce session 不能保存窗口的位置,那么启用 `save on logout` 然后登出再进来一次,可能就能修复这个问题了 (permanently, if you like keeping the same session and turn saving back off again)。 下面是详细内容。
+
+我用 Xfce 作桌面有些年头了,但是每次重启后进入之前保存的 session 时总会有问题出现。 登陆后, 之前 session 中保存的应用都会启动, 但是所有的工作区和窗口位置数据会丢失, 导致所有应用都堆在默认工作区中,乱糟糟的。
+
+多年来,很多人都报道过这个问题( Ubuntu, Xfce, 以及 Red Hat 的 bug 追踪系统中都有登记这个 bug)。 虽然 Xfce4.10 中已经修复过了一个相关 bug, 但是我用的 Xfce4.12 依然有这个问题。 如果不是我的其中一个系统能够正常的回复各个窗口的位置,我几乎都要放弃找出问题的原因了(事实上我之前已经放弃过很多次了)。
+
+今天,我深入对比了两个系统的不同点,最终解决了这个问题。 我现在就把结果写出来, 以防有人也遇到相同的问题。
+
+提前的一些说明:
+
+ 1。由于这个笔记本只有我在用,因此我几乎不登出我的 Xfce session。 我一般只是休眠然后唤醒,除非由于要对内核打补丁才进行重启, 或者由于某些改动损毁了休眠镜像导致系统从休眠中唤醒时卡住了而不得不重启。 另外,我也很少使用 Xfce 工具栏上的重启按钮重启; 一般我只是运行一下 `reboot`。
+
+ 2。我会使用 xterm 和 Emacs, 这些 X 应用写的不是很好,无法记住他们自己的窗口位置。
+
+Xfce 将 sessions 信息保存到主用户目录中的 `.cache/sessions` 目录中。在经过仔细检查后发现,在正常的系统中有两类文件存储在该目录中,而在非正常的系统中,只有一类文件存在该目录下。
+
+其中一类文件的名字类似 `xfce4-session-hostname:0` 这样的,其中包含的内容类似下面这样的:
+```
+Client9_ClientId=2a654109b-e4d0-40e4-a910-e58717faa80b
+Client9_Hostname=local/hostname
+Client9_CloneCommand=xterm
+Client9_RestartCommand=xterm,-xtsessionID,2a654109b-e4d0-40e4-a910-e58717faa80b
+Client9_Program=xterm
+Client9_UserId=user
+
+```
+
+这个文件记录了所有正在运行的程序。如果你进入 Settings -> Session and Startup 并清除 session 缓存, 就会删掉这种文件。 当你保存当前 session 时, 又会创建这种文件。 这就是 Xfce 知道要启动哪些应用的原因。 但是请注意,上面并没有包含任何窗口位置的信息。 (我还曾经以为可以根据 session ID 来找到其他地方的一些相关信息,但是失败了)。
+
+正常工作的系统在目录中还有另一类文件,名字类似 `xfwm4-2d4c9d4cb-5f6b-41b4-b9d7-5cf7ac3d7e49.state` 这样的。 其中文件内容类似下面这样:
+```
+[CLIENT] 0x200000f
+ [CLIENT_ID] 2a9e5b8ed-1851-4c11-82cf-e51710dcf733
+ [CLIENT_LEADER] 0x200000f
+ [RES_NAME] xterm
+ [RES_CLASS] XTerm
+ [WM_NAME] xterm
+ [WM_COMMAND] (1) "xterm"
+ [GEOMETRY] (860,35,817,1042)
+ [GEOMETRY-MAXIMIZED] (860,35,817,1042)
+ [SCREEN] 0
+ [DESK] 2
+ [FLAGS] 0x0
+
+```
+
+注意这里的 geometry 和 desk 记录的正是我们想要的窗口位置以及工作区号。因此不能保存窗口位置的原因就是因为缺少这个文件。
+
+继续深入下去,我发现当你明确地手工保存 sessino 时,智慧保存第一个文件而不会保存第二个文件。 但是当登出保存 session 时则会保存第二个文件。 因此, 我进入 Settings -> Session and Startup 中,在 Genral 标签页中启用登出时自动保存 session, 然后登出后再进来, 然后 tada, 第二个文件出现了。 再然后我又关闭了登出时自动保存 session。( 因为我一般在排好屏幕后就保存一个 session, 但是我不希望做出的改变也会影响到这个保存的 session, 如有必要我会明确地手工进行保存), 现在 我的窗口位置能够正常的回复了。
+
+这也解释了为什么有的人会有问题而有的人没有问题: 有的人可能一直都是用登出按钮重启,而有些人则是手工重启(或者仅仅是由于系统漰溃了才重启)。
+
+顺带一提,这类问题, 以及为解决问题而付出的努力正是我赞同为软件存储的状态文件编写 man 页或其他类似文档的原因。 为用户编写文档,不仅能帮助别人深入挖掘产生奇怪问题的原因, 也能让软件作者注意到软件中那些奇怪的东西, 比如将 session 状态存储到两个独立的文件中去。
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.eyrie.org/~eagle/journal/2017-12/001.html
+
+作者:[J. R. R. Tolkien][a]
+译者:[lujun9972](https://github.com/lujun9972)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]:https://www.eyrie.org
diff --git a/translated/tech/20171218 How to Create a .Desktop File For Your Application in Linux.md b/translated/tech/20171218 How to Create a .Desktop File For Your Application in Linux.md
new file mode 100644
index 0000000000..f6291f722c
--- /dev/null
+++ b/translated/tech/20171218 How to Create a .Desktop File For Your Application in Linux.md
@@ -0,0 +1,89 @@
+为你的 Linux 应用创建 .Desktop 文件
+======
+在 Linux 中,一个 .desktop 文件就是一个用来运行程序的快捷方式。没有 .desktop 的话,你的应用就不会在应用菜单中显示了,也无法使用像 Synapse 和 Albert 这样的第三方启动起启动了。
+
+大多数应用在安装后都会自动创建 .desktop 文件,并将自己放入应用菜单中以方便访问。然而,如果是你自己从源代码中编译的程序或者自己下载的压缩格式的应用,那就不会做这些事情了,每次你都需要打开终端来执行它的二进制文件。显然这个过程很无聊也很麻烦。
+
+本文将会告诉你如何为应用创建 .desktop 文件,从而让你能在应用菜单中启动该应用。
+
+ **相关阅读**:[How to Add App Drawers to Unity Launcher in Ubuntu][1]
+
+### 如何创建桌面启动器
+".desktop" 文件基本上就是一个包含程序信息的纯文本文件,通常根据是自己可见还是所有用户可见的不同而放在 "~/.local/share/applications" 或者 "/usr/share/applications/" 目录中。你在文件管理器中访问这两个目录,都会看到很多系统中已安装应用对应的 ".desktop" 文件存在。
+
+为了演示,我将会为 Super Tux Kart 创建一个 .desktop 文件,这是一个我很喜欢玩的卡丁车竞赛游戏。Ubuntu 仓库中带了这个游戏,但版本一般不新。
+
+要获得最新的版本就需要下载 tar 包,解压并执行其中的游戏启动文件。
+
+你可以仿照这个步骤来为任何程序创建启动器。
+
+ **注意**:下面步骤假设程序压缩包放在 "Downloads" 目录下。
+
+1。跳转到存放压缩包的目录,右击然后选择 "Extract here"。
+
+![application-launcher-5][2]
+
+2。解压后,进入新创建的目录然后找到可执行的文件。之后右击文件选择 "Run" 来启动程序,确定程序运行正常。
+
+![application-launcher-6][3]
+
+3。有时候,你在右键菜单中找不到 "Run" 选项。这通常是因为这个可执行文件是一个文本文件。你可以在终端中执行它,如果你使用 GNOME 的话,可以点击上面菜单栏中的 Files 菜单,然后选择 "Preferences"。
+
+![application-launcher-linux-1][4]
+
+4。选择 "Behavior" 标签页然后选择 "Executable Text Files" 下的 "Run them"。现在右击可执行文本文件后也能出现 "Run" 选项了。
+
+![application-launcher-31][5]
+
+5。确认应用运行正常后,就可以退出它了。然后运行你的文本编辑器并将下面内容粘贴到空文本文件中:
+```
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Exec=/path/to/executable
+Name=Name of Application
+Icon=/path/to/icon
+```
+
+你需要更改 "Exec" 域的值为可执行文件的路径并且将 "Name" 域的值改成应用的名称。大多数的程序都在压缩包中提供了一个图标,不要忘记把它也填上哦。在我们这个例子中,Super Tux Kart 的启动文件看起来是这样的:
+
+![application-launcher-supertuxkart][6]
+
+6。将文件以 "application-name.desktop" 为名保存到 "~/.local/share/applications" 目录中。".local" 目录位于你的 Home 目录下,是一个隐藏目录,你需要启用 "Show Hidden Files" 模式才能看到它。如果你希望这个应用所有人都能访问,则在终端中运行下面命令:
+```
+sudo mv ~/.local/share/applications/