diff --git a/published/20160625 Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful.md b/published/20160625 Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful.md
new file mode 100644
index 0000000000..67a78ae96f
--- /dev/null
+++ b/published/20160625 Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful.md
@@ -0,0 +1,110 @@
+Ubuntu 的 Snap、Red Hat 的 Flatpak 这种通吃所有发行版的打包方式真的有用吗?
+=================================================================================
+
+
+
+**对新一代的打包格式开始渗透到 Linux 生态系统中的深入观察**
+
+最近我们听到越来越多的有关于 Ubuntu 的 Snap 包和由 Red Hat 员工 Alexander Larsson 创造的 Flatpak (曾经叫做 xdg-app)的消息。
+
+这两种下一代打包方法在本质上拥有相同的目标和特点:即不依赖于第三方系统功能库的独立包装。
+
+这种 Linux 新技术方向似乎自然会让人脑海中浮现这样的问题:独立包的优点/缺点是什么?这是否让我们拥有更好的 Linux 系统?其背后的动机是什么?
+
+为了回答这些问题,让我们先深入了解一下 Snap 和 Flatpak。
+
+### 动机
+
+根据 [Flatpak][1] 和 [Snap][2] 的声明,背后的主要动机是使同一版本的应用程序能够运行在多个 Linux 发行版。
+
+> “从一开始它的主要目标是允许相同的应用程序运行在各种 Linux 发行版和操作系统上。” —— Flatpak
+
+> “……‘snap’ 通用 Linux 包格式,使简单的二进制包能够完美的、安全的运行在任何 Linux 桌面、服务器、云和设备上。” —— Snap
+
+说得更具体一点,站在 Snap 和 Flatpak (以下称之为 S&F)背后的人认为,Linux 平台存在碎片化的问题。
+
+这个问题导致了开发者们需要做许多不必要的工作来使他的软件能够运行在各种不同的发行版上,这影响了整个平台的前进。
+
+所以,作为 Linux 发行版(Ubuntu 和 Red Hat)的领导者,他们希望消除这个障碍,推动平台发展。
+
+但是,是否是更多的个人收益刺激了 S&F 的开发?
+
+#### 个人收益?
+
+虽然没有任何官方声明,但是试想一下,如果能够创造这种可能会被大多数发行版(即便不是全部)所采用的打包方式,那么这个项目的领导者将可能成为一个能够决定 Linux 大船航向的重要人物。
+
+### 优势
+
+这种独立包的好处多多,并且取决于不同的因素。
+
+这些因素基本上可以归为两类:
+
+#### 用户角度
+
+**+** 从 Liunx 用户的观点来看:Snap 和 Flatpak 带来了将任何软件包(软件或应用)安装在用户使用的任何发行版上的可能性。
+
+例如你在使用一个不是很流行的发行版,由于开发工作的缺乏,它的软件仓库只有很稀少的包。现在,通过 S&F 你就可以显著的增加包的数量,这是一个多么美好的事情。
+
+**+** 同样,对于使用流行的发行版的用户,即使该发行版的软件仓库上有很多的包,他也可以在不改变它现有的功能库的同时安装一个新的包。
+
+比方说, 一个 Debian 的用户想要安装一个 “测试分支” 的包,但是他又不想将他的整个系统变成测试版(来让该包运行在更新的功能库上)。现在,他就可以简单的想安装哪个版本就安装哪个版本,而不需要考虑库的问题。
+
+对于持后者观点的人,可能基本上都是使用源文件编译他们的包的人,然而,除非你使用类似 Gentoo 这样基于源代码的发行版,否则大多数用户将从头编译视为是一个恶心到吐的事情。
+
+**+** 高级用户,或者称之为 “拥有安全意识的用户” 可能会觉得更容易接受这种类型的包,只要它们来自可靠来源,这种包倾向于提供另一层隔离,因为它们通常是与系统包想隔离的。
+
+\* 不论是 Snap 还是 Flatpak 都在不断努力增强它们的安全性,通常他们都使用 “沙盒化” 来隔离,以防止它们可能携带病毒感染整个系统,就像微软 Windows 系统中的 .exe 程序一样。(关于微软和 S&F 后面还会谈到)
+
+#### 开发者角度
+
+与普通用户相比,对于开发者来说,开发 S&F 包的优点可能更加清楚。这一点已经在上一节有所提示。
+
+尽管如此,这些优点有:
+
+**+** S&F 通过统一开发的过程,将多发行版的开发变得简单了起来。对于需要将他的应用运行在多个发行版的开发者来说,这大大的减少了他们的工作量。
+
+**++** 因此,开发者能够更容易的使他的应用运行在更多的发行版上。
+
+**+** S&F 允许开发者私自发布他的包,不需要依靠发行版维护者在每一个/每一次发行版中发布他的包。
+
+**++** 通过上述方法,开发者可以不依赖发行版而直接获取到用户安装和卸载其软件的统计数据。
+
+**++** 同样是通过上述方法,开发者可以更好的直接与用户互动,而不需要通过中间媒介,比如发行版这种中间媒介。
+
+### 缺点
+
+**–** 膨胀。就是这么简单。Flatpak 和 Snap 并不是凭空变出来它的依赖关系。相反,它是通过将依赖关系预构建在其中来代替使用系统中的依赖关系。
+
+就像谚语说的:“山不来就我,我就去就山”。
+
+**–** 之前提到安全意识强的用户会喜欢 S&F 提供的额外的一层隔离,只要该应用来自一个受信任的来源。但是从另外一个角度看,对这方面了解较少的用户,可能会从一个不靠谱的地方弄来一个包含恶意软件的包从而导致危害。
+
+上面提到的观点可以说是有很有意义的,虽说今天的流行方法,像 PPA、overlay 等也可能是来自不受信任的来源。
+
+但是,S&F 包更加增加这个风险,因为恶意软件开发者只需要开发一个版本就可以感染各种发行版。相反,如果没有 S&F,恶意软件的开发者就需要创建不同的版本以适应不同的发行版。
+
+### 原来微软一直是正确的吗?
+
+考虑到上面提到的,很显然,在大多数情况下,使用 S&F 包的优点超过缺点。
+
+至少对于二进制发行版的用户,或者重点不是轻量级的发行版的用户来说是这样的。
+
+这促使我问出这个问题,可能微软一直是正确的吗?如果是的,那么当 S&F 变成 Linux 的标准后,你还会一如既往的使用 Linux 或者类 Unix 系统吗?
+
+很显然,时间会是这个问题的最好答案。
+
+不过,我认为,即使不完全正确,但是微软有些地方也是值得赞扬的,并且以我的观点来看,所有这些方式在 Linux 上都立马能用也确实是一个亮点。
+
+--------------------------------------------------------------------------------
+
+via: http://www.iwillfolo.com/ubuntus-snap-red-hats-flatpack-and-is-one-fits-all-linux-packages-useful/
+
+作者:[Editorials][a]
+译者:[Chao-zhi](https://github.com/Chao-zhi)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.iwillfolo.com/category/editorials/
+[1]: http://flatpak.org/press/2016-06-21-flatpak-released.html
+[2]: https://insights.ubuntu.com/2016/06/14/universal-snap-packages-launch-on-multiple-linux-distros
diff --git a/translated/tech/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md b/published/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md
similarity index 80%
rename from translated/tech/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md
rename to published/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md
index 1c68316953..55e867dd46 100644
--- a/translated/tech/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md
+++ b/published/20160815 Alternative System Monitor Applet For LXDE Xfce And MATE - Multiload-ng.md
@@ -7,7 +7,7 @@ LXDE、Xfce 及 MATE 桌面环境下的又一系统监视器应用:Multiload-n
Multiload-ng 的特点有:
-- 支持图形化: CPU,内存,网络,交换空间,平均负载,磁盘以及温度;
+- 支持以下资源的图形块: CPU,内存,网络,交换空间,平均负载,磁盘以及温度;
- 高度可定制;
- 支持配色方案;
- 自动适应容器(面板或窗口)的改变;
@@ -15,7 +15,7 @@ Multiload-ng 的特点有:
- 提供基本或详细的提示信息;
- 可自定义双击触发的动作。
-相比于原来的 Multiload 应用,Multiload-ng 含有一个额外的图形块(温度),更多独立的图形自定义选项,例如独立的边框颜色,支持配色方案,可根据自定义的动作对鼠标的点击做出反应,图形块的方向可以被设定为与面板的方向无关。
+相比于原来的 Multiload 应用,Multiload-ng 含有一个额外的图形块(温度),以及更多独立的图形自定义选项,例如独立的边框颜色,支持配色方案,可根据自定义的动作对鼠标的点击做出反应,图形块的方向可以被设定为与面板的方向无关。
它也可以运行在一个独立的窗口中,而不需要面板:
@@ -29,15 +29,15 @@ Multiload-ng 的特点有:

-这个应用的偏好设置窗口虽然不是非常好看,但有很多方式去改进它:
+这个应用的偏好设置窗口虽然不是非常好看,但是有计划去改进它:

Multiload-ng 当前使用的是 GTK2,所以它不能在构建自 GTK3 下的 Xfce 或 MATE 桌面环境(面板)下工作。
-对于 Ubuntu 系统而言,只有 Ubuntu MATE 16.10 使用 GTK3。但是鉴于 MATE 的系统监视器应用也是 Multiload GNOME 的一个分支,所以它们共享大多数的特点(除了 Multiload-ng 提供的额外自定义选项和温度图形块)。
+对于 Ubuntu 系统而言,只有 Ubuntu MATE 16.10 使用 GTK3。但是鉴于 MATE 的系统监视器应用也是 Multiload GNOME 的一个分支,所以它们大多数的功能相同(除了 Multiload-ng 提供的额外自定义选项和温度图形块)。
-该应用的 [愿望清单][2] 中提及到了计划支持 GTK3 的集成以及各种各样的改进,例如温度块资料的更多来源,能够显示十进制(KB, MB, GB...)或二进制(KiB, MiB, GiB...)单位等等。
+该应用的[愿望清单][2] 中提及到了计划支持 GTK3 的集成以及各种各样的改进,例如温度块资料的更多来源,能够显示十进制(KB、MB、GB……)或二进制(KiB、MiB、GiB……)单位等等。
### 安装 Multiload-ng
@@ -76,7 +76,7 @@ sudo apt install mate-multiload-ng-applet
sudo apt install multiload-ng-standalone
```
-一旦安装完毕,便可以像其他应用那样添加到桌面面板中了。需要注意的是在 LXDE 中,Multiload-ng 不能马上出现在面板清单中,除非面板被重新启动。你可以通过重启会话(登出后再登录)或者使用下面的命令来重启面板:
+一旦安装完毕,便可以像其他应用那样添加到桌面面板中了。需要注意的是在 LXDE 中,Multiload-ng 不能马上出现在面板清单中,除非重新启动面板。你可以通过重启会话(登出后再登录)或者使用下面的命令来重启面板:
```
lxpanelctl restart
@@ -85,13 +85,14 @@ lxpanelctl restart
独立的 Multiload-ng 应用可以像其他正常应用那样从菜单中启动。
如果要下载源码或报告 bug 等,请看 Multiload-ng 的 [GitHub page][3]。
+
--------------------------------------------------------------------------------
via: http://www.webupd8.org/2016/08/alternative-system-monitor-applet-for.html
作者:[Andrew][a]
译者:[FSSlc](https://github.com/FSSlc)
-校对:[校对者ID](https://github.com/校对者ID)
+校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
diff --git a/published/20160816 Accelerating Node.js applications with HTTP2 Server Push.md b/published/20160816 Accelerating Node.js applications with HTTP2 Server Push.md
new file mode 100644
index 0000000000..d2f33e24f0
--- /dev/null
+++ b/published/20160816 Accelerating Node.js applications with HTTP2 Server Push.md
@@ -0,0 +1,111 @@
+使用 HTTP/2 服务端推送技术加速 Node.js 应用
+=========================================================
+
+四月份,我们宣布了对 [HTTP/2 服务端推送技术][3]的支持,我们是通过 HTTP 的 [Link 头部](https://www.w3.org/wiki/LinkHeader)来实现这项支持的。我的同事 John 曾经通过一个例子演示了[在 PHP 里支持服务端推送功能][4]是多么的简单。
+
+
+
+我们想让现今使用 Node.js 构建的网站能够更加轻松的获得性能提升。为此,我们开发了 [netjet][1] 中间件,它可以解析应用生成的 HTML 并自动添加 Link 头部。当在一个示例的 Express 应用中使用这个中间件时,我们可以看到应用程序的输出多了如下 HTTP 头:
+
+
+
+[本博客][5]是使用 [Ghost](https://ghost.org/)(LCTT 译注:一个博客发布平台)进行发布的,因此如果你的浏览器支持 HTTP/2,你已经在不知不觉中享受了服务端推送技术带来的好处了。接下来,我们将进行更详细的说明。
+
+netjet 使用了带有定制插件的 [PostHTML](https://github.com/posthtml/posthtml) 来解析 HTML。目前,netjet 用它来查找图片、脚本和外部 CSS 样式表。你也可以用其它的技术来实现这个。
+
+在响应过程中增加 HTML 解析器有个明显的缺点:这将增加页面加载的延时(到加载第一个字节所花的时间)。大多数情况下,所新增的延时被应用里的其他耗时掩盖掉了,比如数据库访问。为了解决这个问题,netjet 包含了一个可调节的 LRU 缓存,该缓存以 HTTP 的 ETag 头部作为索引,这使得 netjet 可以非常快的为已经解析过的页面插入 Link 头部。
+
+不过,如果我们现在从头设计一款全新的应用,我们就应该考虑把页面内容和页面中的元数据分开存放,从而整体地减少 HTML 解析和其它可能增加的延时了。
+
+任意的 Node.js HTML 框架,只要它支持类似 Express 这样的中间件,netjet 都是能够兼容的。只要把 netjet 像下面这样加到中间件加载链里就可以了。
+
+```javascript
+var express = require('express');
+var netjet = require('netjet');
+var root = '/path/to/static/folder';
+
+express()
+ .use(netjet({
+ cache: {
+ max: 100
+ }
+ }))
+ .use(express.static(root))
+ .listen(1337);
+```
+
+稍微加点代码,netjet 也可以摆脱 HTML 框架,独立工作:
+
+```javascript
+var http = require('http');
+var netjet = require('netjet');
+
+var port = 1337;
+var hostname = 'localhost';
+var preload = netjet({
+ cache: {
+ max: 100
+ }
+});
+
+var server = http.createServer(function (req, res) {
+ preload(req, res, function () {
+ res.statusCode = 200;
+ res.setHeader('Content-Type', 'text/html');
+ res.end('
Hello World
');
+ });
+});
+
+server.listen(port, hostname, function () {
+ console.log('Server running at http://' + hostname + ':' + port+ '/');
+});
+```
+
+[netjet 文档里][1]有更多选项的信息。
+
+### 查看推送了什么数据
+
+
+
+访问[本文][5]时,通过 Chrome 的开发者工具,我们可以轻松的验证网站是否正在使用服务器推送技术(LCTT 译注: Chrome 版本至少为 53)。在“Network”选项卡中,我们可以看到有些资源的“Initiator”这一列中包含了`Push`字样,这些资源就是服务器端推送的。
+
+不过,目前 Firefox 的开发者工具还不能直观的展示被推送的资源。不过我们可以通过页面响应头部里的`cf-h2-pushed`头部看到一个列表,这个列表包含了本页面主动推送给浏览器的资源。
+
+希望大家能够踊跃为 netjet 添砖加瓦,我也乐于看到有人正在使用 netjet。
+
+### Ghost 和服务端推送技术
+
+Ghost 真是包罗万象。在 Ghost 团队的帮助下,我把 netjet 也集成到里面了,而且作为测试版内容可以在 Ghost 的 0.8.0 版本中用上它。
+
+如果你正在使用 Ghost,你可以通过修改 config.js、并在`production`配置块中增加 `preloadHeaders` 选项来启用服务端推送。
+
+```javascript
+production: {
+ url: 'https://my-ghost-blog.com',
+ preloadHeaders: 100,
+ // ...
+}
+```
+
+Ghost 已经为其用户整理了[一篇支持文档][2]。
+
+### 总结
+
+使用 netjet,你的 Node.js 应用也可以使用浏览器预加载技术。并且 [CloudFlare][5] 已经使用它在提供了 HTTP/2 服务端推送了。
+
+--------------------------------------------------------------------------------
+
+via: https://blog.cloudflare.com/accelerating-node-js-applications-with-http-2-server-push/
+
+作者:[Terin Stock][a]
+译者:[echoma](https://github.com/echoma)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://blog.cloudflare.com/author/terin-stock/
+[1]: https://www.npmjs.com/package/netjet
+[2]: http://support.ghost.org/preload-headers/
+[3]: https://www.cloudflare.com/http2/server-push/
+[4]: https://blog.cloudflare.com/using-http-2-server-push-with-php/
+[5]: https://blog.cloudflare.com/accelerating-node-js-applications-with-http-2-server-push/
\ No newline at end of file
diff --git a/published/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md b/published/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md
new file mode 100644
index 0000000000..c53cf1f982
--- /dev/null
+++ b/published/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md
@@ -0,0 +1,48 @@
+百度运用 FPGA 方法大规模加速 SQL 查询
+===================================================================
+
+尽管我们对百度今年工作焦点的关注集中在这个中国搜索巨头在深度学习方面的举措上,许多其他的关键的,尽管不那么前沿的应用表现出了大数据带来的挑战。
+
+正如百度的欧阳剑在本周 Hot Chips 大会上谈论的,百度坐拥超过 1 EB 的数据,每天处理大约 100 PB 的数据,每天更新 100 亿的网页,每 24 小时更新处理超过 1 PB 的日志更新,这些数字和 Google 不分上下,正如人们所想象的。百度采用了类似 Google 的方法去大规模地解决潜在的瓶颈。
+
+正如刚刚我们谈到的,Google 寻找一切可能的方法去打败摩尔定律,百度也在进行相同的探索,而令人激动的、使人着迷的机器学习工作是迷人的,业务的核心关键任务的加速同样也是,因为必须如此。欧阳提到,公司基于自身的数据提供高端服务的需求和 CPU 可以承载的能力之间的差距将会逐渐增大。
+
+
+
+对于百度的百亿亿级问题,在所有数据的接受端是一系列用于数据分析的框架和平台,从该公司的海量知识图谱,多媒体工具,自然语言处理框架,推荐引擎,和点击流分析都是这样。简而言之,大数据的首要问题就是这样的:一系列各种应用和与之匹配的具有压倒性规模的数据。
+
+当谈到加速百度的大数据分析,所面临的几个挑战,欧阳谈到抽象化运算核心去寻找一个普适的方法是困难的。“大数据应用的多样性和变化的计算类型使得这成为一个挑战,把所有这些整合成为一个分布式系统是困难的,因为有多变的平台和编程模型(MapReduce,Spark,streaming,user defined,等等)。将来还会有更多的数据类型和存储格式。”
+
+尽管存在这些障碍,欧阳讲到他们团队找到了(它们之间的)共同线索。如他所指出的那样,那些把他们的许多数据密集型的任务相连系在一起的就是传统的 SQL。“我们的数据分析任务大约有 40% 是用 SQL 写的,而其他的用 SQL 重写也是可用做到的。” 更进一步,他讲道他们可以享受到现有的 SQL 系统的好处,并可以和已有的框架相匹配,比如 Hive,Spark SQL,和 Impala 。下一步要做的事情就是 SQL 查询加速,百度发现 FPGA 是最好的硬件。
+
+
+
+这些主板,被称为处理单元( 下图中的 PE ),当执行 SQL 时会自动地处理关键的 SQL 功能。这里所说的都是来自演讲,我们不承担责任。确切的说,这里提到的 FPGA 有点神秘,或许是故意如此。如果百度在基准测试中得到了如下图中的提升,那这可是一个有竞争力的信息。后面我们还会继续介绍这里所描述的东西。简单来说,FPGA 运行在数据库中,当其收到 SQL 查询的时候,该团队设计的软件就会与之紧密结合起来。
+
+
+
+欧阳提到了一件事,他们的加速器受限于 FPGA 的带宽,不然性能表现本可以更高,在下面的评价中,百度安装了 2 块12 核心,主频 2.0 GHz 的 intl E26230 CPU,运行在 128G 内存。SDA 具有 5 个处理单元,(上图中的 300MHz FPGA 主板)每个分别处理不同的核心功能(筛选(filter),排序(sort),聚合(aggregate),联合(join)和分组(group by))
+
+为了实现 SQL 查询加速,百度针对 TPC-DS 的基准测试进行了研究,并且创建了称做处理单元(PE)的特殊引擎,用于在基准测试中加速 5 个关键功能,这包括筛选(filter),排序(sort),聚合(aggregate),联合(join)和分组(group by),(我们并没有把这些单词都像 SQL 那样大写)。SDA 设备使用卸载模型,具有多个不同种类的处理单元的加速卡在 FPGA 中组成逻辑,SQL 功能的类型和每张卡的数量由特定的工作量决定。由于这些查询在百度的系统中执行,用来查询的数据被以列格式推送到加速卡中(这会使得查询非常快速),而且通过一个统一的 SDA API 和驱动程序,SQL 查询工作被分发到正确的处理单元而且 SQL 操作实现了加速。
+
+SDA 架构采用一种数据流模型,加速单元不支持的操作被退回到数据库系统然后在那里本地运行,比其他任何因素,百度开发的 SQL 加速卡的性能被 FPGA 卡的内存带宽所限制。加速卡跨整个集群机器工作,顺便提一下,但是数据和 SQL 操作如何分发到多个机器的准确原理没有被百度披露。
+
+
+
+
+
+我们受限与百度所愿意披露的细节,但是这些基准测试结果是十分令人鼓舞的,尤其是 Terasort 方面,我们将在 Hot Chips 大会之后跟随百度的脚步去看看我们是否能得到关于这是如何连接到一起的和如何解决内存带宽瓶颈的细节。
+
+--------------------------------------------------------------------------------
+
+via: http://www.nextplatform.com/2016/08/24/baidu-takes-fpga-approach-accelerating-big-sql/
+
+作者:[Nicole Hemsoth][a]
+译者:[LinuxBars](https://github.com/LinuxBars)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.nextplatform.com/author/nicole/
+[1]: http://www.nextplatform.com/?s=baidu+deep+learning
+[2]: http://www.hotchips.org/wp-content/uploads/hc_archives/hc26/HC26-12-day2-epub/HC26.12-5-FPGAs-epub/HC26.12.545-Soft-Def-Acc-Ouyang-baidu-v3--baidu-v4.pdf
diff --git a/published/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md b/published/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md
new file mode 100755
index 0000000000..ccef2057ef
--- /dev/null
+++ b/published/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md
@@ -0,0 +1,77 @@
+QOwnNotes:一款记录笔记和待办事项的应用,集成 ownCloud 云服务
+===============
+
+[QOwnNotes][1] 是一款自由而开源的笔记记录和待办事项的应用,可以运行在 Linux、Windows 和 mac 上。
+
+这款程序将你的笔记保存为纯文本文件,它支持 Markdown 支持,并与 ownCloud 云服务紧密集成。
+
+
+
+QOwnNotes 的亮点就是它集成了 ownCloud 云服务(当然是可选的)。在 ownCloud 上用这款 APP,你就可以在网路上记录和搜索你的笔记,也可以在移动设备上使用(比如一款像 CloudNotes 的软件[2])。
+
+不久以后,用你的 ownCloud 账户连接上 QOwnNotes,你就可以从你 ownCloud 服务器上分享笔记和查看或恢复之前版本记录的笔记(或者丢到垃圾箱的笔记)。
+
+同样,QOwnNotes 也可以与 ownCloud 任务或者 Tasks Plus 应用程序相集成。
+
+ 如果你不熟悉 [ownCloud][3] 的话,这是一款替代 Dropbox、Google Drive 和其他类似商业性的网络服务的自由软件,它可以安装在你自己的服务器上。它有一个网络界面,提供了文件管理、日历、照片、音乐、文档浏览等等功能。开发者同样提供桌面同步客户端以及移动 APP。
+
+因为笔记被保存为纯文本,它们可以在不同的设备之间通过云存储服务进行同步,比如 Dropbox,Google Drive 等等,但是在这些应用中不能完全替代 ownCloud 的作用。
+
+我提到的上述特点,比如恢复之前的笔记,只能在 ownCloud 下可用(尽管 Dropbox 和其他类似的也提供恢复以前的文件的服务,但是你不能在 QOwnnotes 中直接访问到)。
+
+鉴于 QOwnNotes 有这么多优点,它支持 Markdown 语言(内置了 Markdown 预览模式),可以标记笔记,对标记和笔记进行搜索,在笔记中加入超链接,也可以插入图片:
+
+
+
+标记嵌套和笔记文件夹同样支持。
+
+代办事项管理功能比较基本还可以做一些改进,它现在打开在一个单独的窗口里,它也不用和笔记一样的编辑器,也不允许添加图片或者使用 Markdown 语言。
+
+
+
+它可以让你搜索你代办事项,设置事项优先级,添加提醒和显示完成的事项。此外,待办事项可以加入笔记中。
+
+这款软件的界面是可定制的,允许你放大或缩小字体,切换窗格等等,也支持无干扰模式。
+
+
+
+从程序的设置里,你可以开启黑夜模式(这里有个 bug,在 Ubuntu 16.04 里有些工具条图标消失了),改变状态条大小,字体和颜色方案(白天和黑夜):
+
+
+
+其他的特点有支持加密(笔记只能在 QOwnNotes 中加密),自定义键盘快捷键,输出笔记为 pdf 或者 Markdown,自定义笔记自动保存间隔等等。
+
+访问 [QOwnNotes][11] 主页查看完整的特性。
+
+### 下载 QOwnNotes
+
+如何安装,请查看安装页(支持 Debian、Ubuntu、Linux Mint、openSUSE、Fedora、Arch Linux、KaOS、Gentoo、Slackware、CentOS 以及 Mac OSX 和 Windows)。
+
+QOwnNotes 的 [snap][5] 包也是可用的,在 Ubuntu 16.04 或更新版本中,你可以通过 Ubuntu 的软件管理器直接安装它。
+
+为了集成 QOwnNotes 到 ownCloud,你需要有 [ownCloud 服务器][6],同样也需要 [Notes][7]、[QOwnNotesAPI][8]、[Tasks][9]、[Tasks Plus][10] 等 ownColud 应用。这些可以从 ownCloud 的 Web 界面上安装,不需要手动下载。
+
+请注意 QOenNotesAPI 和 Notes ownCloud 应用是实验性的,你需要“启用实验程序”来发现并安装他们,可以从 ownCloud 的 Web 界面上进行设置,在 Apps 菜单下,在左下角点击设置按钮。
+
+--------------------------------------------------------------------------------
+
+via: http://www.webupd8.org/2016/09/qownnotes-is-note-taking-and-todo-list.html
+
+作者:[Andrew][a]
+译者:[jiajia9linuxer](https://github.com/jiajia9linuxer)
+校对:[wxy](https://github.com/wxy)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.webupd8.org/p/about.html
+[1]: http://www.qownnotes.org/
+[2]: http://peterandlinda.com/cloudnotes/
+[3]: https://owncloud.org/
+[4]: http://www.qownnotes.org/installation
+[5]: https://uappexplorer.com/app/qownnotes.pbek
+[6]: https://download.owncloud.org/download/repositories/stable/owncloud/
+[7]: https://github.com/owncloud/notes
+[8]: https://github.com/pbek/qownnotesapi
+[9]: https://apps.owncloud.com/content/show.php/Tasks?content=164356
+[10]: https://apps.owncloud.com/content/show.php/Tasks+Plus?content=170561
+[11]: http://www.qownnotes.org/
diff --git a/sources/talk/20150806 Torvalds 2.0--Patricia Torvalds on computing college feminism and increasing diversity in tech.md b/sources/talk/20150806 Torvalds 2.0--Patricia Torvalds on computing college feminism and increasing diversity in tech.md
deleted file mode 100644
index 57faa7998f..0000000000
--- a/sources/talk/20150806 Torvalds 2.0--Patricia Torvalds on computing college feminism and increasing diversity in tech.md
+++ /dev/null
@@ -1,82 +0,0 @@
-Torvalds 2.0: Patricia Torvalds on computing, college, feminism, and increasing diversity in tech
-================================================================================
-
-
-Image by : Photo by Becky Svartström. Modified by Opensource.com. [CC BY-SA 4.0][1]
-
-Patricia Torvalds isn't the Torvalds name that pops up in Linux and open source circles. Yet.
-
-
-
-At 18, Patricia is a feminist with a growing list of tech achievements, open source industry experience, and her sights set on diving into her freshman year of college at Duke University's Pratt School of Engineering. She works for [Puppet Labs][2] in Portland, Oregon, as an intern, but soon she'll head to Durham, North Carolina, to start the fall semester of college.
-
-In this exclusive interview, Patricia explains what got her interested in computer science and engineering (spoiler alert: it wasn't her father), what her high school did "right" with teaching tech, the important role feminism plays in her life, and her thoughts on the lack of diversity in technology.
-
-
-
-### What made you interested in studying computer science and engineering? ###
-
-My interest in tech really grew throughout high school. I wanted to go into biology for a while, until around my sophomore year. I had a web design internship at the Portland VA after my sophomore year. And I took an engineering class called Exploratory Ventures, which sent an ROV into the Pacific ocean late in my sophomore year, but the turning point was probably when I was named a regional winner and national runner up for the [NCWIT Aspirations in Computing][3] award halfway through my junior year.
-
-The award made me feel validated in my interest, of course, but I think the most important part of it was getting to join a Facebook group for all the award winners. The girls who have won the award are absolutely incredible and so supportive of each other. I was definitely interested in computer science before I won the award, because of my work in XV and at the VA, but having these girls to talk to solidified my interest and has kept it really strong. Teaching XV—more on that later—my junior and senior year, also, made engineering and computer science really fun for me.
-
-### What do you plan to study? And do you already know what you want to do after college? ###
-
-I hope to major in either Mechanical or Electrical and Computer Engineering as well as Computer Science, and minor in Women's Studies. After college, I hope to work for a company that supports or creates technology for social good, or start my own company.
-
-### My daughter had one high school programming class—Visual Basic. She was the only girl in her class, and she ended up getting harassed and having a miserable experience. What was your experience like? ###
-
-My high school began offering computer science classes my senior year, and I took Visual Basic as well! The class wasn't bad, but I was definitely one of three or four girls in the class of 20 or so students. Other computing classes seemed to have similar gender breakdowns. However, my high school was extremely small and the teacher was supportive of inclusivity in tech, so there was no harassment that I noticed. Hopefully the classes become more diverse in future years.
-
-### What did your schools do right technology-wise? And how could they have been better? ###
-
-My high school gave us consistent access to computers, and teachers occasionally assigned technology-based assignments in unrelated classes—we had to create a website for a social studies class a few times—which I think is great because it exposes everyone to tech. The robotics club was also pretty active and well-funded, but fairly small; I was not a member. One very strong component of the school's technology/engineering program is actually a student-taught engineering class called Exploratory Ventures, which is a hands-on class that tackles a new engineering or computer science problem every year. I taught it for two years with a classmate of mine, and have had students come up to me and tell me they're interested in pursuing engineering or computer science as a result of the class.
-
-However, my high school was not particularly focused on deliberately including young women in these programs, and it isn't very racially diverse. The computing-based classes and clubs were, by a vast majority, filled with white male students. This could definitely be improved on.
-
-### Growing up, how did you use technology at home? ###
-
-Honestly, when I was younger I used my computer time (my dad created a tracker, which logged us off after an hour of Internet use) to play Neopets or similar games. I guess I could have tried to mess with the tracker or played on the computer without Internet use, but I just didn't. I sometimes did little science projects with my dad, and I remember once printing "Hello world" in the terminal with him a thousand times, but mostly I just played online games with my sisters and didn't get my start in computing until high school.
-
-### You were active in the Feminism Club at your high school. What did you learn from that experience? What feminist issues are most important to you now? ###
-
-My friend and I co-founded Feminism Club at our high school late in our sophomore year. We did receive lots of resistance to the club at first, and while that never entirely went away, by the time we graduated feminist ideals were absolutely a part of the school's culture. The feminist work we did at my high school was generally on a more immediate scale and focused on issues like the dress code.
-
-Personally, I'm very focused on intersectional feminism, which is feminism as it applies to other aspects of oppression like racism and classism. The Facebook page [Guerrilla Feminism][4] is a great example of an intersectional feminism and has done so much to educate me. I currently run the Portland branch.
-
-Feminism is also important to me in terms of diversity in tech, although as an upper-class white woman with strong connections in the tech world, the problems here affect me much less than they do other people. The same goes for my involvement in intersectional feminism. Publications like [Model View Culture][5] are very inspiring to me, and I admire Shanley Kane so much for what she does.
-
-### What advice would you give parents who want to teach their children how to program? ###
-
-Honestly, nobody ever pushed me into computer science or engineering. Like I said, for a long time I wanted to be a geneticist. I got a summer internship doing web design for the VA the summer after my sophomore year and totally changed my mind. So I don't know if I can fully answer that question.
-
-I do think genuine interest is important, though. If my dad had sat me down in front of the computer and told me to configure a webserver when I was 12, I don't think I'd be interested in computer science. Instead, my parents gave me a lot of free reign to do what I wanted, which was mostly coding terrible little HTML sites for my Neopets. Neither of my younger sisters are interested in engineering or computer science, and my parents don't care. I'm really lucky my parents have given me and my sisters the encouragement and resources to explore our interests.
-
-Still, I grew up saying my future career would be "like my dad's"—even when I didn't know what he did. He has a pretty cool job. Also, one time when I was in middle school, I told him that and he got a little choked up and said I wouldn't think that in high school. So I guess that motivated me a bit.
-
-### What suggestions do you have for leaders in open source communities to help them attract and maintain a more diverse mix of contributors? ###
-
-I'm actually not active in particular open source communities. I feel much more comfortable discussing computing with other women; I'm a member of the [NCWIT Aspirations in Computing][6] network and it's been one of the most important aspects of my continued interest in technology, as well as the Facebook group [Ladies Storm Hackathons][7].
-
-I think this applies well to attracting and maintaining a talented and diverse mix of contributors: Safe spaces are important. I have seen the misogynistic and racist comments made in some open source communities, and subsequent dismissals when people point out the issues. I think that in maintaining a professional community there have to be strong standards on what constitutes harassment or inappropriate conduct. Of course, people can—and will—have a variety of opinions on what they should be able to express in open source communities, or any community. However, if community leaders actually want to attract and maintain diverse talent, they need to create a safe space and hold community members to high standards.
-
-I also think that some community leaders just don't value diversity. It's really easy to argue that tech is a meritocracy, and the reason there are so few marginalized people in tech is just that they aren't interested, and that the problem comes from earlier on in the pipeline. They argue that if someone is good enough at their job, their gender or race or sexual orientation doesn't matter. That's the easy argument. But I was raised not to make excuses for mistakes. And I think the lack of diversity is a mistake, and that we should be taking responsibility for it and actively trying to make it better.
-
---------------------------------------------------------------------------------
-
-via: http://opensource.com/life/15/8/patricia-torvalds-interview
-
-作者:[Rikki Endsley][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]:http://opensource.com/users/rikki-endsley
-[1]:https://creativecommons.org/licenses/by-sa/4.0/
-[2]:https://puppetlabs.com/
-[3]:https://www.aspirations.org/
-[4]:https://www.facebook.com/guerrillafeminism
-[5]:https://modelviewculture.com/
-[6]:https://www.aspirations.org/
-[7]:https://www.facebook.com/groups/LadiesStormHackathons/
diff --git a/sources/talk/20160625 Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful.md b/sources/talk/20160625 Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful.md
deleted file mode 100644
index b1c955bf5b..0000000000
--- a/sources/talk/20160625 Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful.md
+++ /dev/null
@@ -1,112 +0,0 @@
-Translating by Chao-zhi
-
-Ubuntu’s Snap, Red Hat’s Flatpak And Is ‘One Fits All’ Linux Packages Useful?
-=================================================================================
-
-
-
-An in-depth look into the new generation of packages starting to permeate the Linux ecosystem.
-
-
-Lately we’ve been hearing more and more about Ubuntu’s Snap packages and Flatpak (formerly referred to as xdg-app) created by Red Hat’s employee Alexander Larsson.
-
-These 2 types of next generation packages are in essence having the same goal and characteristics which are: being standalone packages that doesn’t rely on 3rd-party system libraries in order to function.
-
-This new technology direction which Linux seems to be headed is automatically giving rise to questions such as, what are the advantages / disadvantages of standalone packages? does this lead us to a better Linux overall? what are the motives behind it?
-
-To answer these questions and more, let us explore the things we know about Snap and Flatpak so far.
-
-### The Motive
-
-According to both [Flatpak][1] and [Snap][2] statements, the main motive behind them is to be able to bring one and the same version of application to run across multiple Linux distributions.
-
->“From the very start its primary goal has been to allow the same application to run across a myriad of Linux distributions and operating systems.” Flatpak
-
->“… ‘snap’ universal Linux package format, enabling a single binary package to work perfectly and securely on any Linux desktop, server, cloud or device.” Snap
-
-To be more specific, the guys behind Snap and Flatpak (S&F) believe that there’s a barrier of fragmentation on the Linux platform.
-
-A barrier which holds back the platform advancement by burdening developers with more, perhaps unnecessary, work to get their software run on the many distributions out there.
-
-Therefore, as leading Linux distributions (Ubuntu & Red Hat), they wish to eliminate the barrier and strengthen the platform in general.
-
-But what are the more personal gains which motivate the development of S&F?
-
-#### Personal Gains?
-
-Although not officially stated anywhere, it may be assumed that by leading the efforts of creating a unified package that could potentially be adopted by the vast majority of Linux distros (if not all of them), the captains of these projects could assume a key position in determining where the Linux ship sails.
-
-### The Advantages
-
-The benefits of standalone packages are diverse and can depend on different factors.
-
-Basically however, these factors can be categorized under 2 distinct criteria:
-
-#### User Perspective
-
-+ From a Linux user point of view, Snap and Flatpak both bring the possibility of installing any package (software / app) on any distribution the user is using.
-
-That is, for instance, if you’re using a not so popular distribution which has only a scarce supply of packages available in their repo, due to workforce limitations probably, you’ll now be able to easily and significantly increase the amount of packages available to you – which is a great thing.
-
-+ Also, users of popular distributions that do have many packages available in their repos, will enjoy the ability of installing packages that might not have behaved with their current set of installed libraries.
-
-For example, a Debian user who wants to install a package from ‘testing branch’ will not have to convert his entire system into ‘testing’ (in order for the package to run against newer libraries), rather, that user will simply be able to install only the package he wants from whichever branch he likes and on whatever branch he’s on.
-
-The latter point, was already basically possible for users who were compiling their packages straight from source, however, unless using a source based distribution such as Gentoo, most users will see this as just an unworthily hassle.
-
-+ The advanced user, or perhaps better put, the security aware user might feel more comfortable with this type of packages as long as they come from a reliable source as they tend to provide another layer of isolation since they are generally isolated from system packages.
-
-* Both S&F are being developed with enhanced security in mind, which generally makes use of “sandboxing” i.e isolation in order to prevent cases where they carry a virus which can infect the entire system, similar to the way .exe files on MS Windows may. (More on MS and S&F later)
-
-#### Developer Perspective
-
-For developers, the advantages of developing S&F packages will probably be a lot clearer than they are to the average user, some of these were already hinted in a previous section of this post.
-
-Nonetheless, here they are:
-
-+ S&F will make it easier on devs who want to develop for more than one Linux distribution by unifying the process of development, therefore minimizing the amount of work a developer needs to do in order to get his app running on multiple distributions.
-
-++ Developers could therefore gain easier access to a wider range of distributions.
-
-+ S&F allow devs to privately distribute their packages without being dependent on distribution maintainers to stabilize their package for each and every distro.
-
-++ Through the above, devs may gain access to direct statistics of user adoption / engagement for their software.
-
-++ Also through the above, devs could get more directly involved with users, rather than having to do so through a middleman, in this case, the distribution.
-
-### The Downsides
-
-– Bloat. Simple as that. Flatpak and Snap aren’t just magic making dependencies evaporate into thin air. Rather, instead of relying on the target system to provide the required dependencies, S&F comes with the dependencies prebuilt into them.
-
-As the saying goes “if the mountain won’t come to Muhammad, Muhammad must go to the mountain…”
-
-– Just as the security-aware user might enjoy S&F packages extra layer of isolation, as long they come from a trusted source. The less knowledgeable user on the hand, might be prone to the other side of the coin hazard which is using a package from an unknown source which may contain malicious software.
-
-The above point can be said to be valid even with today’s popular methods, as PPAs, overlays, etc might also be maintained by untrusted sources.
-
-However, with S&F packages the risk increases since malicious software developers need to create only one version of their program in order to infect a large number of distributions, whereas, without it they’d needed to create multiple versions in order to adjust their malware to other distributions.
-
-Was Microsoft Right All Along?
-
-With all that’s mentioned above in mind, it’s pretty clear that for the most part, the advantages of using S&F packages outweighs the drawbacks.
-
-At the least for users of binary-based distributions, or, non lightweight focused distros.
-
-Which eventually lead me to asking the above question – could it be that Microsoft was right all along? if so and S&F becomes the Linux standard, would you still consider Linux a Unix-like variant?
-
-Well apparently, the best one to answer those questions is probably time.
-
-Nevertheless, I’d argue that even if not entirely right, MS certainly has a good point to their credit, and having all these methods available here on Linux out of the box is certainly a plus in my book.
-
-
---------------------------------------------------------------------------------
-
-via: http://www.iwillfolo.com/ubuntus-snap-red-hats-flatpack-and-is-one-fits-all-linux-packages-useful/
-
-作者:[Editorials][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: http://www.iwillfolo.com/category/editorials/
diff --git a/sources/talk/20160718 Tips for managing your project's issue tracker.md b/sources/talk/20160718 Tips for managing your project's issue tracker.md
deleted file mode 100644
index 1b89fe5851..0000000000
--- a/sources/talk/20160718 Tips for managing your project's issue tracker.md
+++ /dev/null
@@ -1,101 +0,0 @@
-Tips for managing your project's issue tracker
-==============================================
-
-
-
-Issue-tracking systems are important for many open source projects, and there are many open source tools that provide this functionality but many projects opt to use GitHub's built-in issue tracker.
-
-Its simple structure makes it easy for others to weigh in, but issues are really only as good as you make them.
-
-Without a process, your repository can become unwieldy, overflowing with duplicate issues, vague feature requests, or confusing bug reports. Project maintainers can become burdened by the organizational load, and it can become difficult for new contributors to understand where priorities lie.
-
-In this article, I'll discuss how to take your GitHub issues from good to great.
-
-### The issue as user story
-
-My team spoke with open source expert [Jono Bacon][1]—author of [The Art of Community][2], a strategy consultant, and former Director of Community at GitHub—who said that high-quality issues are at the core of helping a projects succeed. He says that while some see issues as merely a big list of problems you have to tend to, well-managed, triaged, and labeled issues can provide incredible insight into your code, your community, and where the problem spots are.
-
-"At the point of submission of an issue, the user likely has little patience or interest in providing expansive detail. As such, you should make it as easy as possible to get the most useful information from them in the shortest time possible," Jono Bacon said.
-
-A consistent structure can take a lot of burden off project maintainers, particularly for open source projects. We've found that encouraging a user story approach helps make clarity a constant. The common structure for a user story addresses the "who, what, and why" of a feature: As a [user type], I want to [task] so that [goal].
-
-Here's what that looks like in practice:
-
->As a customer, I want to create an account so that I can make purchases.
-
-We suggest sticking that user story in the issue's title. You can also set up [issue templates][3] to keep things consistent.
-
-
-> Issue templates bring consistency to feature requests.
-
-The point is to make the issue well-defined for everyone involved: it identifies the audience (or user), the action (or task), and the outcome (or goal) as simply as possible. There's no need to obsess over this structure, though; as long as the what and why of a story are easy to spot, you're good.
-
-### Qualities of a good issue
-
-Not all issues are created equal—as any OSS contributor or maintainer can attest. A well-formed issue meets these qualities outlined in [The Agile Samurai][4].
-
-Ask yourself if it is...
-
-- something of value to customers
-- avoids jargon or mumbo jumbo; a non-expert should be able to understand it
-- "slices the cake," which means it goes end-to-end to deliver something of value
-- independent from other issues if possible; dependent issues reduce flexibility of scope
-- negotiable, meaning there are usually several ways to get to the stated goal
-- small and easily estimable in terms of time and resources required
-- measurable; you can test for results
-
-### What about everything else? Working with constraints
-
-If an issue is difficult to measure or doesn't seem feasible to complete within a short time period, you can still work with it. Some people call these "constraints."
-
-For example, "the product needs to be fast" doesn't fit the story template, but it is non-negotiable. But how fast is fast? Vague requirements don't meet the criteria of a "good issue", but if you further define these concepts—for example, "the product needs to be fast" can be "each page needs to load within 0.5 seconds"—you can work with it more easily. Constraints can be seen as internal metrics of success, or a landmark to shoot for. Your team should test for them periodically.
-
-### What's inside your issue?
-
-In agile, user stories typically include acceptance criteria or requirements. In GitHub, I suggest using markdown checklists to outline any tasks that make up an issue. Issues should get more detail as they move up in priority.
-
-Say you're creating an issue around a new homepage for a website. The sub-tasks for that task might look something like this.
-
-
->Use markdown checklists to split a complicated issue into several parts.
-
-If necessary, link to other issues to further define a task. (GitHub makes this really easy.)
-
-Defining features as granularly as possible makes it easier to track progress, test for success, and ultimately ship valuable code more frequently.
-
-Once you've gathered some data points in the form of issues, you can use APIs to glean deeper insight into the health of your project.
-
-"The GitHub API can be hugely helpful here in identifying patterns and trends in your issues," Bacon said. "With some creative data science, you can identify problem spots in your code, active members of your community, and other useful insights."
-
-Some issue management tools provide APIs that add additional context, like time estimates or historical progress.
-
-### Getting others on board
-
-Once your team decides on an issue structure, how do you get others to buy in? Think of your repo's ReadMe.md file as your project's "how-to." It should clearly define what your project does (ideally using searchable language) and explain how others can contribute (by submitting requests, bug reports, suggestions, or by contributing code itself.)
-
-
->Edit your ReadMe file with clear instructions for new collaborators.
-
-This is the perfect spot to share your GitHub issue guidelines. If you want feature requests to follow the user story format, share that here. If you use a tracking tool to organize your product backlog, share the badge so others can gain visibility.
-
-"Issue templates, sensible labels, documentation for how to file issues, and ensuring your issues get triaged and responded to quickly are all important" for your open source project, Bacon said.
-
-Remember: It's not about adding process for the process' sake. It's about setting up a structure that makes it easy for others to discover, understand, and feel confident contributing to your community.
-
-"Focus your community growth efforts not just on growing the number of programmers, but also [on] people interested in helping issues be accurate, up to date, and a source of active conversation and productive problem solving," Bacon said.
-
---------------------------------------------------------------------------------
-
-via: https://opensource.com/life/16/7/how-take-your-projects-github-issues-good-great
-
-作者:[Matt Butler][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/mattzenhub
-[1]: http://www.jonobacon.org/
-[2]: http://www.artofcommunityonline.org/
-[3]: https://help.github.com/articles/creating-an-issue-template-for-your-repository/
-[4]: https://www.amazon.ca/Agile-Samurai-Masters-Deliver-Software/dp/1934356581
diff --git a/sources/talk/20160912 Adobe's new CIO shares leadership advice for starting a new role.md b/sources/talk/20160912 Adobe's new CIO shares leadership advice for starting a new role.md
new file mode 100644
index 0000000000..a4a962e8d2
--- /dev/null
+++ b/sources/talk/20160912 Adobe's new CIO shares leadership advice for starting a new role.md
@@ -0,0 +1,50 @@
+Adobe's new CIO shares leadership advice for starting a new role
+====
+
+
+
+I’m currently a few months into a new CIO role at a highly-admired, cloud-based technology company. One of my first tasks was to get to know the organization’s people, culture, and priorities.
+
+As part of that goal, I am visiting all the major IT sites. While In India, less than two months into the job, I was asked directly: “What are you going to do? What is your plan?” My response, which will not surprise seasoned CIOs, was that I was still in discovery mode, and I was there to listen and learn.
+
+I’ve never gone into an organization with a set blueprint for what I’ll do. I know some CIOs have a playbook for how they will operate. They’ll come in and blow the whole organization up and put their set plan in motion.
+
+Yes, there may be situations where things are massively broken and not working, so that course of action makes sense. Once I’m inside a company, however, my strategy is to go through a discovery process. I don’t want to have any preconceived notions about the way things should be or what’s working versus what’s not.
+
+Here are my guiding principles as a newly-appointed leader:
+
+### Get to know your people
+
+This means building relationships, and it includes your IT staff as well as your business users and your top salespeople. What are the top things on their lists? What do they want you to focus on? What’s working well? What’s not? How is the customer experience? Knowing how you can help everyone be more successful will help you shape the way you deliver services to them.
+
+If your department is spread across several floors, as mine is, consider meet-and-greet lunches or mini-tech fairs so people can introduce themselves, discuss what they’re working on, and share stories about their family, if they feel comfortable doing that. If you have an open-door office policy, make sure they know that as well. If your staff spreads across countries or continents, get out there and visit as soon as you reasonably can.
+
+### Get to know your products and company culture
+
+One of the things that surprised me coming into to Adobe was how broad our product portfolio is. We have a platform of solutions and services across three clouds – Adobe Creative Cloud, Document Cloud and Marketing Cloud – and a vast portfolio of products within each. You’ll never know how much opportunity your new company presents until you get to know your products and learn how to support all of them. At Adobe we use many of our digital media and digital marketing solutions as Customer Zero, so we have first-hand experiences to share with our customers
+
+### Get to know customers
+
+Very early on, I started getting requests to meet with customers. Meeting with customers is a great way to jump-start your thinking into the future of the IT organization, which includes the different types of technologies, customers, and consumers we could have going forward.
+
+### Plan for the future
+
+As a new leader, I have a fresh perspective and can think about the future of the organization without getting distracted by challenges or obstacles.
+
+What CIOs need to do is jump-start IT into its next generation. When I meet my staff, I’m asking them what we want to be three to five years out so we can start positioning ourselves for that future. That means discussing the initiatives and priorities.
+
+After that, it makes sense to bring the leadership team together so you can work to co-create the next generation of the organization – its mission, vision, modes of alignment, and operating norms. If you start changing IT from the inside out, it will percolate into business and everything else you do.
+
+Through this whole process, I’ve been very open with people that this is not going to be a top-down directive. I have ideas on priorities and what we need to focus on, but we have to be in lockstep, working as a team and figuring out what we want to do jointly.
+
+--------------------------------------------------------------------------------
+
+via: https://enterprisersproject.com/article/2016/9/adobes-new-cio-shares-leadership-advice-starting-new-role
+
+作者:[Cynthia Stoddard][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://enterprisersproject.com/user/cynthia-stoddard
diff --git a/sources/talk/20160913 Linus Torvalds reveals his favorite programming laptop.md b/sources/talk/20160913 Linus Torvalds reveals his favorite programming laptop.md
new file mode 100644
index 0000000000..9741a58fcc
--- /dev/null
+++ b/sources/talk/20160913 Linus Torvalds reveals his favorite programming laptop.md
@@ -0,0 +1,62 @@
+Linus Torvalds reveals his favorite programming laptop
+====
+
+>It's the Dell XPS 13 Developer Edition. Here's why.
+
+I recently talked with some Linux developers about what the best laptop is for serious programmers. As a result I checked out several laptops from a programmer's viewpoint. The winner in my book? The 2016 Dell XPS 13 Developer Edition. I'm in good company. Linus Torvalds, Linux's creator, agrees. The Dell XPS 13 Developer Edition, for him, is the best laptop around.
+
+
+
+Torvald's requirements may not be yours though.
+
+On Google+, Torvalds explained, "First off: [I don't use my laptop as a desktop replacement][1], and I only travel for a small handful of events each year. So for me, the laptop is a fairly specialized thing that doesn't get daily (or even weekly) use, so the main criteria are not some kind of "average daily use", but very much "travel use".
+
+Therefore, for Torvalds, "I end up caring a lot about it being fairly small and light, because I may end up carrying it around all day at a conference. I also want it to have a good screen, because by now I'm just used to it at my main desktop, and I want my text to be legible but small."
+
+The Dell's display is powered by Intel's Iris 540 GPU. In my experience it works really well.
+
+The Iris powers a 13.3 inch display with a 3,200×1,800 touchscreen. That's 280 pixels per inch, 40 more than my beloved [2015 Chromebook Pixel][2] and 60 more than a [MacBook Pro with Retina][3].
+
+However, getting that hardware to work and play well with the [Gnome][4] desktop isn't easy. As Torvalds explained in another post, it "has the [same resolution as my desktop][5], but apparently because the laptop screen is smaller, Gnome seems to decide on its own that I need an automatic scaling factor of 2, which blows up all the stupid things (window decorations, icons etc) to a ridiculous degree".
+
+The solution? You can forget about looking to the user interface. You need to go to the shell and run: gsettings set org.gnome.desktop.interface scaling-factor 1.
+
+Torvalds may use Gnome, but he's [never liked the Gnome 3.x family much][6]. I can't argue with him. That's why I use [Cinnamon][7] instead.
+
+He also wants "a reasonably powerful CPU, because when I'm traveling I still build the kernel a lot. I don't do my normal full 'make allmodconfig' build between each pull request like I do at home, but I'd like to do it more often than I did with my previous laptop, which is actually (along with the screen) the main reason I wanted to upgrade."
+
+Linus doesn't describe the features of his XPS 13, but my review unit was a high-end model. It came with dual-core, 2.2GHz 6th Generation Intel Core i7-6560U Skylake processor and 16GBs of DDR3 RAM with a half a terabyte, PCIe solid state drive (SSD). I'm sure Torvalds' system is at least that well-equipped.
+
+Some features you may care about aren't on Torvalds' list.
+
+>"What I don't tend to care about is touch-screens, because my fingers are big and clumsy compared to the text I'm looking at (I also can't handle the smudges: maybe I just have particularly oily fingers, but I really don't want to touch that screen).
+
+I also don't care deeply about some 'all day battery life', because quite frankly, I can't recall the last time I didn't have access to power. I might not want to bother to plug it in for some quick check, but it's just not a big overwhelming issue. By the time battery life is in 'more than a couple of hours', I just don't care very much any more."
+Dell claims the XPS 13, with its 56wHR, 4-Cell Battery, has about a 12-hour battery life. It has well over 10 in my experience. I haven't tried to run it down to the dregs.
+
+Torvalds also didn't have any trouble with the Intel Wi-Fi set. The non Developer Edition uses a Broadcom chip set and that has proven troublesome for both Windows and Linux users. Dell technical support was extremely helpful to me in getting this problem under control.
+
+Some people have trouble with the XPS 13 touchpad. Neither I nor Torvalds have any worries. Torvalds wrote, the "XPS13 touchpad works very well for me. That may be a personal preference thing, but it seems to be both smooth and responsive."
+
+Still, while Torvalds likes the XPS 13, he's also fond of the latest Lenovo X1 Carbon, HP Spectre 13 x360, and last year's Lenovo Yoga 900. Me? I like the XPS 13 Developer Editor. The price tag, which for the model I reviewed was $1949.99, may keep you from reaching for your credit card.
+
+Still, if you want to develop like one of the world's top programmers, the Dell XPS 13 Developer Edition is worth the money.
+
+--------------------------------------------------------------------------------
+
+via: http://www.zdnet.com/article/linus-torvalds-reveals-his-favorite-programming-laptop/
+
+作者:[Steven J. Vaughan-Nichols ][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.zdnet.com/meet-the-team/us/steven-j-vaughan-nichols/
+[1]: https://plus.google.com/+LinusTorvalds/posts/VZj8vxXdtfe
+[2]: http://www.zdnet.com/article/the-best-chromebook-ever-the-chromebook-pixel-2015/
+[3]: http://www.zdnet.com/product/apple-15-inch-macbook-pro-with-retina-display-mid-2015/
+[4]: https://www.gnome.org/
+[5]: https://plus.google.com/+LinusTorvalds/posts/d7nfnWSXjfD
+[6]: http://www.zdnet.com/article/linus-torvalds-finds-gnome-3-4-to-be-a-total-user-experience-design-failure/
+[7]: http://www.zdnet.com/article/how-to-customise-your-linux-desktop-cinnamon/
diff --git a/sources/talk/20160915 Should Smartphones Do Away with the Headphone Jack Here Are Our Thoughts.md b/sources/talk/20160915 Should Smartphones Do Away with the Headphone Jack Here Are Our Thoughts.md
new file mode 100644
index 0000000000..0bf4b144f9
--- /dev/null
+++ b/sources/talk/20160915 Should Smartphones Do Away with the Headphone Jack Here Are Our Thoughts.md
@@ -0,0 +1,54 @@
+Should Smartphones Do Away with the Headphone Jack? Here Are Our Thoughts
+====
+
+
+
+Even though Apple removing the headphone jack from the iPhone 7 has been long-rumored, after the official announcement last week confirming the news, it has still become a hot topic.
+
+For those not in the know on this latest news, Apple has removed the headphone jack from the phone, and the headphones will now plug into the lightning port. Those that want to still use their existing headphones may, as there is an adapter that ships with the phone along with the lightning headphones. They are also selling a new product: AirPods. These are wireless and are inserted into your ear. The biggest advantage is that by eliminating the jack they were able to make the phone dust and water-resistant.
+
+Being it’s such a big story right now, we asked our writers, “What are your thoughts on Smartphones doing away with the headphone jack?”
+
+### Our Opinion
+
+Derrik believes that “Apple’s way of doing it is a play to push more expensive peripherals that do not comply to an open standard.” He also doesn’t want to have to charge something every five hours, meaning the AirPods. While he understands that the 3.5mm jack is aging, as an “audiophile” he would love a new, open standard, but “proprietary pushes” worry him about device freedom.
+
+
+
+Damien doesn’t really even use the headphone jack these days as he has Bluetooth headphones. He hates that wire anyway, so feels “this is a good move.” Yet he also understands Derrik’s point about the wireless headphones running out of battery, leaving him with “nothing to fall back on.”
+
+Trevor is very upfront in saying he thought it was “dumb” until he heard you couldn’t charge the phone and use the headphones at the same time and realized it was “dumb X 2.” He uses the headphones/headphone jack all the time in a work van without Bluetooth and listens to audio or podcasts. He uses the plug-in style as Bluetooth drains his battery.
+
+Simon is not a big fan. He hasn’t seen much reasoning past it leaving more room within the device. He figures “it will then come down to whether or not consumers favor wireless headphones, an adapter, and water-resistance over not being locked into AirPods, lightning, or an adapter”. He fears it might be “too early to jump into removing ports” and likes a “one pair fits all” standard.
+
+James believes that wireless technology is progressive, so he sees it as a good move “especially for Apple in terms of hardware sales.” He happens to use expensive headphones, so personally he’s “yet to be convinced,” noting his Xperia is waterproof and has a jack.
+
+Jeffry points out that “almost every transition attempt in the tech world always starts with strong opposition from those who won’t benefit from the changes.” He remembers the flak Apple received when they removed the floppy disk drive and decided not to support Flash, and now both are industry standards. He believes everything is evolving for the better, removing the audio jack is “just the first step toward the future,” and Apple is just the one who is “brave enough to lead the way (and make a few bucks in doing so).”
+
+
+
+Vamsi doesn’t mind the removal of the headphone jack as long as there is a “better solution applicable to all the users that use different headphones and other gadgets.” He doesn’t feel using headphones via a lightning port is a good solution as it renders nearly all other headphones obsolete. Regarding Bluetooth headphones, he just doesn’t want to deal with another gadget. Additionally, he doesn’t get the argument of it being good for water resistance since there are existing devices with headphone jacks that are water resistant.
+
+Mahesh prefers a phone with a jack because many times he is charging his phone and listening to music simultaneously. He believes we’ll get to see how it affects the public in the next few months.
+
+Derrik chimed back in to say that by “removing open standard ports and using a proprietary connection too.,” you can be technical and say there are adapters, but Thunderbolt is also closed, and Apple can stop selling those adapters at any time. He also notes that the AirPods won’t be Bluetooth.
+
+
+
+As for me, I’m always up for two things: New technology and anything Apple. I’ve been using iPhones since a few weeks past the very first model being introduced, yet I haven’t updated since 2012 and the iPhone 5, so I was overdue. I’ll be among the first to get my hands on the iPhone 7. I hate that stupid white wire being in my face, so I just might be opting for AirPods at some point. I am very appreciative of the phone becoming water-resistant. As for charging vs. listening, the charge on new iPhones lasts so long that I don’t expect it to be much of a problem. Even my old iPhone 5 usually lasts about twenty hours on a good day and twelve hours on a bad day. So I don’t expect that to be a problem.
+
+### Your Opinion
+
+Our writers have given you a lot to think about. What are your thoughts on Smartphones doing away with the headphone jack? Will you miss it? Is it a deal breaker for you? Or do you relish the upgrade in technology? Will you be trying the iPhone 5 or the AirPods? Let us know in the comments below.
+
+--------------------------------------------------------------------------------
+
+via: https://www.maketecheasier.com/should-smartphones-do-away-with-the-headphone-jack/?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed%3A+maketecheasier
+
+作者:[Laura Tucker][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: https://www.maketecheasier.com/author/lauratucker/
diff --git a/sources/talk/20160915 What the rise of permissive open source licenses means.md b/sources/talk/20160915 What the rise of permissive open source licenses means.md
new file mode 100644
index 0000000000..9a17fec1e0
--- /dev/null
+++ b/sources/talk/20160915 What the rise of permissive open source licenses means.md
@@ -0,0 +1,57 @@
+What the rise of permissive open source licenses means
+====
+
+Why restrictive licenses such as the GNU GPL are steadily falling out of favor.
+
+"If you use any open source software, you have to make the rest of your software open source." That's what former Microsoft CEO Steve Ballmer said back in 2001, and while his statement was never true, it must have spread some FUD (fear, uncertainty and doubt) about free software. Probably that was the intention.
+
+This FUD about open source software is mainly about open source licensing. There are many different licenses, some more restrictive (some people use the term "protective") than others. Restrictive licenses such as the GNU General Public License (GPL) use the concept of copyleft, which grants people the right to freely distribute copies and modified versions of a piece of software as long as the same rights are preserved in derivative works. The GPL (v3) is used by open source projects such as bash and GIMP. There's also the Affero GPL, which provides copyleft to software that is offered over a network (for example as a web service.)
+
+What this means is that if you take code that is licensed in this way and you modify it by adding some of your own proprietary code, then in some circumstances the whole new body of code, including your code, becomes subject to the restrictive open source license. It was this type of license that Ballmer was probably referring to when he made his statement.
+
+But permissive licenses are a different animal. The MIT License, for example, lets anyone take open source code and do what they want with it — including modifying and selling it — as long as they provide attribution and don't hold the developer liable. Another popular permissive open source license, the Apache License 2.0, also provides an express grant of patent rights from contributors to users. JQuery, the .NET Core and Rails are licensed using the MIT license, while the Apache 2.0 license is used by software including Android, Apache and Swift.
+
+Ultimately both license types are intended to make software more useful. Restrictive licenses aim to foster the open source ideals of participation and sharing so everyone gets the maximum benefit from software. And permissive licenses aim to ensure that people can get the maximum benefit from software by allowing them to do what they want with it — even if that means they take the code, modify it and keep it for themselves or even sell the resulting work as proprietary software without contributing anything back.
+
+Figures compiled by open source license management company Black Duck Software show that the restrictive GPL 2.0 was the most commonly used open source license last year with about 25 percent of the market. The permissive MIT and Apache 2.0 licenses were next with about 18 percent and 16 percent respectively, followed by the GPL 3.0 with about 10 percent. That's almost evenly split at 35 percent restrictive and 34 percent permissive.
+
+But this snapshot misses the trend. Black Duck's data shows that in the six years from 2009 to 2015 the MIT license's share of the market has gone up 15.7 percent and Apache's share has gone up 12.4 percent. GPL v2 and v3's share during the same period has dropped by a staggering 21.4 percent. In other words there was a significant move away from restrictive licenses and towards permissive ones during that period.
+
+And the trend is continuing. Black Duck's [latest figures][1] show that MIT is now at 26 percent, GPL v2 21 percent, Apache 2 16 percent, and GPL v3 9 percent. That's 30 percent restrictive, 42 percent permissive — a huge swing from last year’s 35 percent restrictive and 34 percent permissive. Separate [research][2] of the licenses used on GitHub appears to confirm this shift. It shows that MIT is overwhelmingly the most popular license with a 45 percent share, compared to GLP v2 with just 13 percent and Apache with 11 percent.
+
+
+
+### Driving the trend
+
+What’s behind this mass move from restrictive to permissive licenses? Do companies fear that if they let restrictive software into the house they will lose control of their proprietary software, as Ballmer warned? In fact, that may well be the case. Google, for example, has [banned Affero GPL software][3] from its operations.
+
+Jim Farmer, chairman of [Instructional Media + Magic][4], a developer of open source technology for education, believes that many companies avoid restrictive licenses to avoid legal difficulties. "The problem is really about complexity. The more complexity in a license, the more chance there is that someone has a cause of action to bring you to court. Complexity makes litigation more likely," he says.
+
+He adds that fear of restrictive licenses is being driven by lawyers, many of whom recommend that clients use software that is licensed with the MIT or Apache 2.0 licenses, and who specifically warn against the Affero license.
+
+This has a knock-on effect with software developers, he says, because if companies avoid software with restrictive licenses then developers have more incentive to license their new software with permissive ones if they want it to get used.
+
+But Greg Soper, CEO of SalesAgility, the company behind the open source SuiteCRM, believes that the move towards permissive licenses is also being driven by some developers. "Look at an application like Rocket.Chat. The developers could have licensed that with GPL 2.0 or Affero but they chose a permissive license," he says. "That gives the app the widest possible opportunity, because a proprietary vendor can take it and not harm their product or expose it to an open source license. So if a developer wants an application to be used inside a third-party application it makes sense to use a permissive license."
+
+Soper points out that restrictive licenses are designed to help an open source project succeed by stopping developers from taking other people's code, working on it, and then not sharing the results back with the community. "The Affero license is critical to the health of our product because if people could make a fork that was better than ours and not give the code back that would kill our product," he says. "For Rocket.Chat it's different because if it used Affero then it would pollute companies' IP and so it wouldn't get used. Different licenses have different use cases."
+
+Michael Meeks, an open source developer who has worked on Gnome, OpenOffice and now LibreOffice, agrees with Jim Farmer that many companies do choose to use software with permissive licenses for fear of legal action. "There are risks with copyleft licenses, but there are also huge benefits. Unfortunately people listen to lawyers, and lawyers talk about risk but they never tell you that something is safe."
+
+Fifteen years after Ballmer made his inaccurate statement it seems that the FUD it generated it is still having an effect — even if the move from restrictive licenses to permissive ones is not quite the effect he intended.
+
+--------------------------------------------------------------------------------
+
+via: http://www.cio.com/article/3120235/open-source-tools/what-the-rise-of-permissive-open-source-licenses-means.html
+
+作者:[Paul Rubens ][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.cio.com/author/Paul-Rubens/
+[1]: https://www.blackducksoftware.com/top-open-source-licenses
+[2]: https://github.com/blog/1964-open-source-license-usage-on-github-com
+[3]: http://www.theregister.co.uk/2011/03/31/google_on_open_source_licenses/
+[4]: http://immagic.com/
+
diff --git a/sources/tech/20160506 Setup honeypot in Kali Linux.md b/sources/tech/20160506 Setup honeypot in Kali Linux.md
new file mode 100644
index 0000000000..cb85992389
--- /dev/null
+++ b/sources/tech/20160506 Setup honeypot in Kali Linux.md
@@ -0,0 +1,84 @@
+Setup honeypot in Kali Linux
+====
+
+The Pentbox is a safety kit containing various tools for streamlining PenTest conducting a job easily. It is programmed in Ruby and oriented to GNU / Linux, with support for Windows, MacOS and every systems where Ruby is installed. In this small article we will explain how to set up a honeypot in Kali Linux. If you don’t know what is a honeypot, “a honeypot is a computer security mechanism set to detect, deflect, or, in some manner, counteract attempts at unauthorized use of information systems.”
+
+### Download Pentbox:
+
+Simply type in the following command in your terminal to download pentbox-1.8.
+
+```
+root@kali:~# wget http://downloads.sourceforge.net/project/pentbox18realised/pentbox-1.8.tar.gz
+```
+
+
+
+### Uncompress pentbox files
+
+Decompressing the file with the following command:
+
+```
+root@kali:~# tar -zxvf pentbox-1.8.tar.gz
+```
+
+
+
+### Run pentbox ruby script
+
+Change directory into pentbox folder
+
+```
+root@kali:~# cd pentbox-1.8/
+```
+
+
+
+Run pentbox using the following command
+
+```
+root@kali:~# ./pentbox.rb
+```
+
+
+
+### Setup a honeypot
+
+Use option 2 (Network Tools) and then option 3 (Honeypot).
+
+
+
+Finally for first test, choose option 1 (Fast Auto Configuration)
+
+
+
+This opens up a honeypot in port 80. Simply open browser and browse to http://192.168.160.128 (where 192.168.160.128 is your IP Address. You should see an Access denied error.
+
+
+
+and in the terminal you should see “HONEYPOT ACTIVATED ON PORT 80” followed by “INTRUSION ATTEMPT DETECTED”.
+
+
+
+Now, if you do the same steps but this time select Option 2 (Manual Configuration), you should see more extra options
+
+
+
+Do the same steps but select port 22 this time (SSH Port). Then do a port forwarding in your home router to forward port external port 22 to this machines’ port 22. Alternatively, set it up in a VPS in your cloud server.
+
+You’d be amazed how many bots out there scanning port SSH continuously. You know what you do then? You try to hack them back for the lulz!
+
+Here’s a video of setting up honeypot if video is your thing:
+
+
+
+--------------------------------------------------------------------------------
+
+via: https://www.blackmoreops.com/2016/05/06/setup-honeypot-in-kali-linux/
+
+作者:[blackmoreops.com][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: blackmoreops.com
diff --git a/sources/tech/20160626 Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi.md b/sources/tech/20160626 Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi.md
deleted file mode 100644
index 4a5c2f1267..0000000000
--- a/sources/tech/20160626 Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi.md
+++ /dev/null
@@ -1,408 +0,0 @@
-[jiajia9linuxer translating]
-Backup Photos While Traveling With an Ipad Pro and a Raspberry Pi
-===================================================================
-
-
->Backup Photos While Traveling - Gear.
-
-### Introduction
-
-I’ve been on a quest to finding the ideal travel photo backup solution for a long time. Relying on just tossing your SD cards in your camera bag after they are full during a trip is a risky move that leaves you too exposed: SD cards can be lost or stolen, data can get corrupted or cards can get damaged in transit. Backing up to another medium - even if it’s just another SD card - and leaving that in a safe(r) place while traveling is the best practice. Ideally, backing up to a remote location would be the way to go, but that may not be practical depending on where you are traveling to and Internet availability in the region.
-
-My requirements for the ideal backup procedure are:
-
-1. Use an iPad to manage the process instead of a laptop. I like to travel light and since most of my trips are business related (i.e. non-photography related), I’d hate to bring my personal laptop along with my business laptop. My iPad, however; is always with me, so using it as a tool just makes sense.
-2. Use as few hardware devices as practically possible.
-3. Connection between devices should be secure. I’ll be using this setup in hotels and airports, so closed and encrypted connection between devices is ideal.
-4. The whole process should be sturdy and reliable. I’ve tried other options using router/combo devices and [it didn’t end up well][1].
-
-### The Setup
-
-I came up with a setup that meets the above criteria and is also flexible enough to expand on it in the future. It involves the use of the following gear:
-
-1. [iPad Pro 9.7][2] inches. It’s the most powerful, small and lightweight iOS device at the time of writing. Apple pencil is not really needed, but it’s part of my gear as I so some editing on the iPad Pro while on the road. All the heavy lifting will be done by the Raspberry Pi, so any other device capable of connecting through SSH would fit the bill.
-2. [Raspberry Pi 3][3] with Raspbian installed.
-3. [Micro SD card][4] for Raspberry Pi and a Raspberry Pi [box/case][5].
-5. [128 GB Pen Drive][6]. You can go bigger, but 128 GB is enough for my user case. You can also get a portable external hard drive like [this one][7], but the Raspberry Pi may not provide enough power through its USB port, which means you would have to get a [powered USB hub][8], along with the needed cables, defeating the purpose of having a lightweight and minimalistic setup.
-6. [SD card reader][9]
-7. [SD Cards][10]. I use several as I don’t wait for one to fill up before using a different one. That allows me to spread photos I take on a single trip amongst several cards.
-
-The following diagram shows how these devices will be interacting with each other.
-
-
->Backup Photos While Traveling - Process Diagram.
-
-The Raspberry Pi will be configured to act as a secured Hot Spot. It will create its own WPA2-encrypted WiFi network to which the iPad Pro will connect. Although there are many online tutorials to create an Ad Hoc (i.e. computer-to-computer) connection with the Raspberry Pi, which is easier to setup; that connection is not encrypted and it’s relatively easy for other devices near you to connect to it. Therefore, I decided to go with the WiFi option.
-
-The camera’s SD card will be connected to one of the Raspberry Pi’s USB ports through an SD card reader. Additionally, a high capacity Pen Drive (128 GB in my case) will be permanently inserted in one of the USB ports on the Raspberry Pi. I picked the [Sandisk Ultra Fit][11] because of its tiny size. The main idea is to have the Raspberry Pi backup the photos from the SD Card to the Pen Drive with the help of a Python script. The backup process will be incremental, meaning that only changes (i.e. new photos taken) will be added to the backup folder each time the script runs, making the process really fast. This is a huge advantage if you take a lot of photos or if you shoot in RAW format. The iPad will be used to trigger the Python script and to browse the SD Card and Pen Drive as needed.
-
-As an added benefit, if the Raspberry Pi is connected to Internet through a wired connection (i.e. through the Ethernet port), it will be able to share the Internet connection with the devices connected to its WiFi network.
-
-### 1. Raspberry Pi Configuration
-
-This is the part where we roll up our sleeves and get busy as we’ll be using Raspbian’s command-line interface (CLI) . I’ll try to be as descriptive as possible so it’s easy to go through the process.
-
-#### Install and Configure Raspbian
-
-Connect a keyboard, mouse and an LCD monitor to the Raspberry Pi. Insert the Micro SD in the Raspberry Pi’s slot and proceed to install Raspbian per the instructions in the [official site][12].
-
-After the installation is done, go to the CLI (Terminal in Raspbian) and type:
-
-```
-sudo apt-get update
-sudo apt-get upgrade
-```
-
-This will upgrade all software on the machine. I configured the Raspberry Pi to connect to the local network and changed the default password as a safety measure.
-
-By default SSH is enabled on Raspbian, so all sections below can be done from a remote machine. I also configured RSA authentication, but that’s optional. More info about it [here][13].
-
-This is a screenshot of the SSH connection to the Raspberry Pi from [iTerm][14] on Mac:
-
-##### Creating Encrypted (WPA2) Access Point
-
-The installation was made based on [this][15] article, it was optimized for my user case.
-
-##### 1. Install Packages
-
-We need to type the following to install the required packages:
-
-```
-sudo apt-get install hostapd
-sudo apt-get install dnsmasq
-```
-
-hostapd allows to use the built-in WiFi as an access point. dnsmasq is a combined DHCP and DNS server that’s easy to configure.
-
-##### 2. Edit dhcpcd.conf
-
-Connect to the Raspberry Pi through Ethernet. Interface configuration on the Raspbery Pi is handled by dhcpcd, so first we tell it to ignore wlan0 as it will be configured with a static IP address.
-
-Open up the dhcpcd configuration file with sudo nano `/etc/dhcpcd.conf` and add the following line to the bottom of the file:
-
-```
-denyinterfaces wlan0
-```
-
-Note: This must be above any interface lines that may have been added.
-
-##### 3. Edit interfaces
-
-Now we need to configure our static IP. To do this, open up the interface configuration file with sudo nano `/etc/network/interfaces` and edit the wlan0 section so that it looks like this:
-
-```
-allow-hotplug wlan0
-iface wlan0 inet static
- address 192.168.1.1
- netmask 255.255.255.0
- network 192.168.1.0
- broadcast 192.168.1.255
-# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
-```
-
-Also, the wlan1 section was edited to be:
-
-```
-#allow-hotplug wlan1
-#iface wlan1 inet manual
-# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
-```
-
-Important: Restart dhcpcd with sudo service dhcpcd restart and then reload the configuration for wlan0 with `sudo ifdown eth0; sudo ifup wlan0`.
-
-##### 4. Configure Hostapd
-
-Next, we need to configure hostapd. Create a new configuration file with `sudo nano /etc/hostapd/hostapd.conf with the following contents:
-
-```
-interface=wlan0
-
-# Use the nl80211 driver with the brcmfmac driver
-driver=nl80211
-
-# This is the name of the network
-ssid=YOUR_NETWORK_NAME_HERE
-
-# Use the 2.4GHz band
-hw_mode=g
-
-# Use channel 6
-channel=6
-
-# Enable 802.11n
-ieee80211n=1
-
-# Enable QoS Support
-wmm_enabled=1
-
-# Enable 40MHz channels with 20ns guard interval
-ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
-
-# Accept all MAC addresses
-macaddr_acl=0
-
-# Use WPA authentication
-auth_algs=1
-
-# Require clients to know the network name
-ignore_broadcast_ssid=0
-
-# Use WPA2
-wpa=2
-
-# Use a pre-shared key
-wpa_key_mgmt=WPA-PSK
-
-# The network passphrase
-wpa_passphrase=YOUR_NEW_WIFI_PASSWORD_HERE
-
-# Use AES, instead of TKIP
-rsn_pairwise=CCMP
-```
-
-Now, we also need to tell hostapd where to look for the config file when it starts up on boot. Open up the default configuration file with `sudo nano /etc/default/hostapd` and find the line `#DAEMON_CONF=""` and replace it with `DAEMON_CONF="/etc/hostapd/hostapd.conf"`.
-
-##### 5. Configure Dnsmasq
-
-The shipped dnsmasq config file contains tons of information on how to use it, but we won’t be using all the options. I’d recommend moving it (rather than deleting it), and creating a new one with
-
-```
-sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
-sudo nano /etc/dnsmasq.conf
-```
-
-Paste the following into the new file:
-
-```
-interface=wlan0 # Use interface wlan0
-listen-address=192.168.1.1 # Explicitly specify the address to listen on
-bind-interfaces # Bind to the interface to make sure we aren't sending things elsewhere
-server=8.8.8.8 # Forward DNS requests to Google DNS
-domain-needed # Don't forward short names
-bogus-priv # Never forward addresses in the non-routed address spaces.
-dhcp-range=192.168.1.50,192.168.1.100,12h # Assign IP addresses in that range with a 12 hour lease time
-```
-
-##### 6. Set up IPV4 forwarding
-
-One of the last things that we need to do is to enable packet forwarding. To do this, open up the sysctl.conf file with `sudo nano /etc/sysctl.conf`, and remove the # from the beginning of the line containing `net.ipv4.ip_forward=1`. This will enable it on the next reboot.
-
-We also need to share our Raspberry Pi’s internet connection to our devices connected over WiFi by the configuring a NAT between our wlan0 interface and our eth0 interface. We can do this by writing a script with the following lines.
-
-```
-sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
-sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
-```
-
-I named the script hotspot-boot.sh and made it executable with:
-
-```
-sudo chmod 755 hotspot-boot.sh
-```
-
-The script should be executed when the Raspberry Pi boots. There are many ways to accomplish this, and this is the way I went with:
-
-1. Put the file in `/home/pi/scripts`.
-2. Edit the rc.local file by typing `sudo nano /etc/rc.local` and place the call to the script before the line that reads exit 0 (more information [here][16]).
-
-This is how the rc.local file looks like after editing it.
-
-```
-#!/bin/sh -e
-#
-# rc.local
-#
-# This script is executed at the end of each multiuser runlevel.
-# Make sure that the script will "exit 0" on success or any other
-# value on error.
-#
-# In order to enable or disable this script just change the execution
-# bits.
-#
-# By default this script does nothing.
-
-# Print the IP address
-_IP=$(hostname -I) || true
-if [ "$_IP" ]; then
- printf "My IP address is %s\n" "$_IP"
-fi
-
-sudo /home/pi/scripts/hotspot-boot.sh &
-
-exit 0
-
-```
-
-#### Installing Samba and NTFS Compatibility.
-
-We also need to install the following packages to enable the Samba protocol and allow the File Browser App to see the connected devices to the Raspberry Pi as shared folders. Also, ntfs-3g provides NTFS compatibility in case we decide to connect a portable hard drive to the Raspberry Pi.
-
-```
-sudo apt-get install ntfs-3g
-sudo apt-get install samba samba-common-bin
-```
-
-You can follow [this][17] article for details on how to configure Samba.
-
-Important Note: The referenced article also goes through the process of mounting external hard drives on the Raspberry Pi. We won’t be doing that because, at the time of writing, the current version of Raspbian (Jessie) auto-mounts both the SD Card and the Pendrive to `/media/pi/` when the device is turned on. The article also goes over some redundancy features that we won’t be using.
-
-### 2. Python Script
-
-Now that the Raspberry Pi has been configured, we need to work on the script that will actually backup/copy our photos. Note that this script just provides certain degree of automation to the backup process. If you have a basic knowledge of using the Linux/Raspbian CLI, you can just SSH into the Raspberry Pi and copy yourself all photos from one device to the other by creating the needed folders and using either the cp or the rsync command. We’ll be using the rsync method on the script as it’s very reliable and allows for incremental backups.
-
-This process relies on two files: the script itself and the configuration file `backup_photos.conf`. The latter just have a couple of lines indicating where the destination drive (Pendrive) is mounted and what folder has been mounted to. This is what it looks like:
-
-```
-mount folder=/media/pi/
-destination folder=PDRIVE128GB
-```
-
-Important: Do not add any additional spaces between the `=` symbol and the words to both sides of it as the script will break (definitely an opportunity for improvement).
-
-Below is the Python script, which I named `backup_photos.py` and placed in `/home/pi/scripts/`. I included comments in between the lines of code to make it easier to follow.
-
-```
-#!/usr/bin/python3
-
-import os
-import sys
-from sh import rsync
-
-'''
-The script copies an SD Card mounted on /media/pi/ to a folder with the same name
-created in the destination drive. The destination drive's name is defined in
-the .conf file.
-
-
-Argument: label/name of the mounted SD Card.
-'''
-
-CONFIG_FILE = '/home/pi/scripts/backup_photos.conf'
-ORIGIN_DEV = sys.argv[1]
-
-def create_folder(path):
-
- print ('attempting to create destination folder: ',path)
- if not os.path.exists(path):
- try:
- os.mkdir(path)
- print ('Folder created.')
- except:
- print ('Folder could not be created. Stopping.')
- return
- else:
- print ('Folder already in path. Using that instead.')
-
-
-
-confFile = open(CONFIG_FILE,'rU')
-#IMPORTANT: rU Opens the file with Universal Newline Support,
-#so \n and/or \r is recognized as a new line.
-
-confList = confFile.readlines()
-confFile.close()
-
-
-for line in confList:
- line = line.strip('\n')
-
- try:
- name , value = line.split('=')
-
- if name == 'mount folder':
- mountFolder = value
- elif name == 'destination folder':
- destDevice = value
-
-
- except ValueError:
- print ('Incorrect line format. Passing.')
- pass
-
-
-destFolder = mountFolder+destDevice+'/'+ORIGIN_DEV
-create_folder(destFolder)
-
-print ('Copying files...')
-
-# Comment out to delete files that are not in the origin:
-# rsync("-av", "--delete", mountFolder+ORIGIN_DEV, destFolder)
-rsync("-av", mountFolder+ORIGIN_DEV+'/', destFolder)
-
-print ('Done.')
-```
-
-### 3. iPad Pro Configuration
-
-Since all the heavy-lifting will be done on the Raspberry Pi and no files will be transferred through the iPad Pro, which was a huge disadvantage in [one of the workflows I tried before][18]; we just need to install [Prompt 2][19] on the iPad to access the Raspeberry Pi through SSH. Once connected, you can either run the Python script or copy the files manually.
-
-
->SSH Connection to Raspberry Pi From iPad Using Prompt.
-
-Since we installed Samba, we can access USB devices connected to the Raspberry Pi in a more graphical way. You can stream videos, copy and move files between devices. [File Browser][20] is perfect for that.
-
-### 4. Putting it All Together
-
-Let’s suppose that `SD32GB-03` is the label of an SD card connected to one of the USB ports on the Raspberry Pi. Also, let’s suppose that `PDRIVE128GB` is the label of the Pendrive, also connected to the device and defined on the `.conf` file as indicated above. If we wanted to backup the photos on the SD Card, we would need to go through the following steps:
-
-1. Turn on Raspberry Pi so that drives are mounted automatically.
-2. Connect to the WiFi network generated by the Raspberry Pi.
-3. Connect to the Raspberry Pi through SSH using the [Prompt][21] App.
-4. Type the following once you are connected:
-
-```
-python3 backup_photos.py SD32GB-03
-```
-
-The first backup my take some minutes depending on how much of the card is used. That means you need to keep the connection alive to the Raspberry Pi from the iPad. You can get around this by using the [nohup][22] command before running the script.
-
-```
-nohup python3 backup_photos.py SD32GB-03 &
-```
-
-
->iTerm Screenshot After Running Python Script.
-
-### Further Customization
-
-I installed a VNC server to access Raspbian’s graphical interface from another computer or the iPad through [Remoter App][23]. I’m looking into installing [BitTorrent Sync][24] for backing up photos to a remote location while on the road, which would be the ideal setup. I’ll expand this post once I have a workable solution.
-
-Feel free to either include your comments/questions below or reach out to me. My contact info is at the footer of this page.
-
-
---------------------------------------------------------------------------------
-
-via: http://www.movingelectrons.net/blog/2016/06/26/backup-photos-while-traveling-with-a-raspberry-pi.html
-
-作者:[Editor][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: http://www.movingelectrons.net/blog/2016/06/26/backup-photos-while-traveling-with-a-raspberry-pi.html
-[1]: http://bit.ly/1MVVtZi
-[2]: http://www.amazon.com/dp/B01D3NZIMA/?tag=movinelect0e-20
-[3]: http://www.amazon.com/dp/B01CD5VC92/?tag=movinelect0e-20
-[4]: http://www.amazon.com/dp/B010Q57T02/?tag=movinelect0e-20
-[5]: http://www.amazon.com/dp/B01F1PSFY6/?tag=movinelect0e-20
-[6]: http://amzn.to/293kPqX
-[7]: http://amzn.to/290syFY
-[8]: http://amzn.to/290syFY
-[9]: http://amzn.to/290syFY
-[10]: http://amzn.to/290syFY
-[11]: http://amzn.to/293kPqX
-[12]: https://www.raspberrypi.org/downloads/noobs/
-[13]: https://www.raspberrypi.org/documentation/remote-access/ssh/passwordless.md
-[14]: https://www.iterm2.com/
-[15]: https://frillip.com/using-your-raspberry-pi-3-as-a-wifi-access-point-with-hostapd/
-[16]: https://www.raspberrypi.org/documentation/linux/usage/rc-local.md
-[17]: http://www.howtogeek.com/139433/how-to-turn-a-raspberry-pi-into-a-low-power-network-storage-device/
-[18]: http://bit.ly/1MVVtZi
-[19]: https://itunes.apple.com/us/app/prompt-2/id917437289?mt=8&uo=4&at=11lqkH
-[20]: https://itunes.apple.com/us/app/filebrowser-access-files-on/id364738545?mt=8&uo=4&at=11lqkH
-[21]: https://itunes.apple.com/us/app/prompt-2/id917437289?mt=8&uo=4&at=11lqkH
-[22]: https://en.m.wikipedia.org/wiki/Nohup
-[23]: https://itunes.apple.com/us/app/remoter-pro-vnc-ssh-rdp/id519768191?mt=8&uo=4&at=11lqkH
-[24]: https://getsync.com/
diff --git a/sources/tech/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md b/sources/tech/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md
deleted file mode 100644
index 7b79854bb7..0000000000
--- a/sources/tech/20160824 Baidu Takes FPGA Approach to Accelerating SQL at Scale.md
+++ /dev/null
@@ -1,62 +0,0 @@
-LinuxBars Translating
-LinuxBars 翻译中
-
-Baidu Takes FPGA Approach to Accelerating SQL at Scale
-===================
-
-
-
-While much of the work at Baidu we have focused on this year has centered on the Chinese search giant’s [deep learning initiatives][1], many other critical, albeit less bleeding edge applications present true big data challenges.
-
-As Baidu’s Jian Ouyang detailed this week at the Hot Chips conference, Baidu sits on over an exabyte of data, processes around 100 petabytes per day, updates 10 billion webpages daily, and handles over a petabyte of log updates every 24 hours. These numbers are on par with Google and as one might imagine, it takes a Google-like approach to problem solving at scale to get around potential bottlenecks.
-
-Just as we have described Google looking for any way possible to beat Moore’s Law, Baidu is on the same quest. While the exciting, sexy machine learning work is fascinating, acceleration of the core mission-critical elements of the business is as well—because it has to be. As Ouyang notes, there is a widening gap between the company’s need to deliver top-end services based on their data and what CPUs are capable of delivering.
-
-
-
-As for Baidu’s exascale problems, on the receiving end of all of this data are a range of frameworks and platforms for data analysis; from the company’s massive knowledge graph, multimedia tools, natural language processing frameworks, recommendation engines, and click stream analytics. In short, the big problem of big data is neatly represented here—a diverse array of applications matched with overwhelming data volumes.
-
-When it comes to acceleration for large-scale data analytics at Baidu, there are several challenges. Ouyang says it is difficult to abstract the computing kernels to find a comprehensive approach. “The diversity of big data applications and variable computing types makes this a challenge. It is also difficult to integrate all of this into a distributed system because there are also variable platforms and program models (MapReduce, Spark, streaming, user defined, and so on). Further there is more variance in data types and storage formats.”
-
-Despite these barriers, Ouyang says teams looked for the common thread. And as it turns out, that string that ties together many of their data-intensive jobs is good old SQL. “Around 40% of our data analysis jobs are already written in SQL and rewriting others to match it can be done.” Further, he says they have the benefit of using existing SQL system that mesh with existing frameworks like Hive, Spark SQL, and Impala. The natural thing to do was to look for SQL acceleration—and Baidu found no better hardware than an FPGA.
-
-
-
-These boards, called processing elements (PE on coming slides), automatically handle key SQL functions as they come in. With that said, a disclaimer note here about what we were able to glean from the presentation. Exactly what the FPGA is talking to is a bit of a mystery and so by design. If Baidu is getting the kinds of speedups shown below in their benchmarks, this is competitive information. Still, we will share what was described. At its simplest, the FPGAs are running in the database and when it sees SQL queries coming it, the software the team designed ([and presented at Hot Chips two years ago][2] related to DNNs) kicks into gear.
-
-
-
-One thing Ouyang did note about the performance of their accelerator is that their performance could have been higher but they were bandwidth limited with the FPGA. In the evaluation below, Baidu setup with a 12-core 2.0 Ghz Intel E26230 X2 sporting 128 GB of memory. The SDA had five processing elements (the 300 MHzFPGA boards seen above) each of which handles core functions (filter, sort, aggregate, join and group by.).
-
-To make the SQL accelerator, Baidu picked apart the TPC-DS benchmark and created special engines, called processing elements, that accelerate the five key functions in that benchmark test. These include filter, sort, aggregate, join, and group by SQL functions. (And no, we are not going to put these in all caps to shout as SQL really does.) The SDA setup employs an offload model, with the accelerator card having multiple processing elements of varying kinds shaped into the FPGA logic, with the type of SQL function and the number per card shaped by the specific workload. As these queries are being performed on Baidu’s systems, the data for the queries is pushed to the accelerator card in columnar format (which is blazingly fast for queries) and through a unified SDA API and driver, the SQL work is pushed to the right processing elements and the SQL operations are accelerated.
-
-The SDA architecture uses a data flow model, and functions not supported by the processing elements are pushed back to the database systems and run natively there. More than any other factor, the performance of the SQL accelerator card developed by Baidu is limited by the memory bandwidth of the FPGA card. The accelerator works across clusters of machines, by the way, but the precise mechanism of how data and SQL operations are parsed out to multiple machines was not disclosed by Baidu.
-
-
-
-
-
-We’re limited in some of the details Baidu was willing to share but these benchmark results are quite impressive, particularly for Terasort. We will follow up with Baidu after Hot Chips to see if we can get more detail about how this is hooked together and how to get around the memory bandwidth bottlenecks.
-
-
-
---------------------------------------------------------------------------------
-
-via: http://www.nextplatform.com/2016/08/24/baidu-takes-fpga-approach-accelerating-big-sql/?utm_source=dbweekly&utm_medium=email
-
-作者:[Nicole Hemsoth][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: http://www.nextplatform.com/author/nicole/
-[1]: http://www.nextplatform.com/?s=baidu+deep+learning
-[2]: http://www.hotchips.org/wp-content/uploads/hc_archives/hc26/HC26-12-day2-epub/HC26.12-5-FPGAs-epub/HC26.12.545-Soft-Def-Acc-Ouyang-baidu-v3--baidu-v4.pdf
-
-
-
-
-
-
-
diff --git a/sources/tech/20160826 Understanding Different Classifications of Shell Commands and Their Usage in Linux.md b/sources/tech/20160826 Understanding Different Classifications of Shell Commands and Their Usage in Linux.md
new file mode 100644
index 0000000000..29b3bf04da
--- /dev/null
+++ b/sources/tech/20160826 Understanding Different Classifications of Shell Commands and Their Usage in Linux.md
@@ -0,0 +1,219 @@
+Understanding Different Classifications of Shell Commands and Their Usage in Linux
+====
+
+When it comes to gaining absolute control over your Linux system, then nothing comes close to the command line interface (CLI). In order to become a Linux power user, one must understand the [different types of shell commands][1] and the appropriate ways of using them from the terminal.
+
+In Linux, there are several types of commands, and for a new Linux user, knowing the meaning of different commands enables for efficient and precise usage. Therefore, in this article, we shall walk through the various classifications of shell commands in Linux.
+
+One important thing to note is that the command line interface is different from the shell, it only provides a means for you to access the shell. The shell, which is also programmable then makes it possible to communicate with the kernel using commands.
+
+Different classifications of Linux commands fall under the following classifications:
+
+### 1. Program Executables (File System Commands)
+
+When you run a command, Linux searches through the directories stored in the $PATH environmental variable from left to right for the executable of that specific command.
+
+You can view the directories in the $PATH as follows:
+
+```
+$ echo $PATH
+/home/aaronkilik/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
+```
+
+In the above order, the directory /home/aaronkilik/bin will be searched first followed by /usr/local/sbin and so on, the order is significant in the search process.
+
+Examples of file system commands in /usr/bin directory:
+
+```
+$ ll /bin/
+```
+
+Sample Output
+
+```
+total 16284
+drwxr-xr-x 2 root root 4096 Jul 31 16:30 ./
+drwxr-xr-x 23 root root 4096 Jul 31 16:29 ../
+-rwxr-xr-x 1 root root 6456 Apr 14 18:53 archdetect*
+-rwxr-xr-x 1 root root 1037440 May 17 16:15 bash*
+-rwxr-xr-x 1 root root 520992 Jan 20 2016 btrfs*
+-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfs-calc-size*
+lrwxrwxrwx 1 root root 5 Jul 31 16:19 btrfsck -> btrfs*
+-rwxr-xr-x 1 root root 278376 Jan 20 2016 btrfs-convert*
+-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfs-debug-tree*
+-rwxr-xr-x 1 root root 245368 Jan 20 2016 btrfs-find-root*
+-rwxr-xr-x 1 root root 270136 Jan 20 2016 btrfs-image*
+-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfs-map-logical*
+-rwxr-xr-x 1 root root 245368 Jan 20 2016 btrfs-select-super*
+-rwxr-xr-x 1 root root 253816 Jan 20 2016 btrfs-show-super*
+-rwxr-xr-x 1 root root 249464 Jan 20 2016 btrfstune*
+-rwxr-xr-x 1 root root 245368 Jan 20 2016 btrfs-zero-log*
+-rwxr-xr-x 1 root root 31288 May 20 2015 bunzip2*
+-rwxr-xr-x 1 root root 1964536 Aug 19 2015 busybox*
+-rwxr-xr-x 1 root root 31288 May 20 2015 bzcat*
+lrwxrwxrwx 1 root root 6 Jul 31 16:19 bzcmp -> bzdiff*
+-rwxr-xr-x 1 root root 2140 May 20 2015 bzdiff*
+lrwxrwxrwx 1 root root 6 Jul 31 16:19 bzegrep -> bzgrep*
+-rwxr-xr-x 1 root root 4877 May 20 2015 bzexe*
+lrwxrwxrwx 1 root root 6 Jul 31 16:19 bzfgrep -> bzgrep*
+-rwxr-xr-x 1 root root 3642 May 20 2015 bzgrep*
+```
+
+### 2. Linux Aliases
+
+These are user defined commands, they are created using the alias shell built-in command, and contain other shell commands with some options and arguments. The ideas is to basically use new and short names for lengthy commands.
+
+The syntax for creating an alias is as follows:
+
+```
+$ alias newcommand='command -options'
+```
+
+To list all aliases on your system, issue the command below:
+
+```
+$ alias -p
+alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
+alias egrep='egrep --color=auto'
+alias fgrep='fgrep --color=auto'
+alias grep='grep --color=auto'
+alias l='ls -CF'
+alias la='ls -A'
+alias ll='ls -alF'
+alias ls='ls --color=auto'
+```
+
+To create a new alias in Linux, go through some below examples.
+
+```
+$ alias update='sudo apt update'
+$ alias upgrade='sudo apt dist-upgrade'
+$ alias -p | grep 'up'
+```
+
+
+
+However, the aliases we have created above only work temporarily, when the system is restarted, they will not work after the next boot. You can set permanent aliases in your `.bashrc` file as shown below.
+
+
+
+After adding them, run the command below to active.
+
+```
+$ source ~/.bashrc
+```
+
+### 3. Linux Shell Reserved Words
+
+In shell programming, words such as if, then, fi, for, while, case, esac, else, until and many others are shell reserved words. As the description implies, they have specialized meaning to the shell.
+
+You can list out all Linux shell keywords using type command as shown:
+
+```
+$ type if then fi for while case esac else until
+if is a shell keyword
+then is a shell keyword
+fi is a shell keyword
+for is a shell keyword
+while is a shell keyword
+case is a shell keyword
+esac is a shell keyword
+else is a shell keyword
+until is a shell keyword
+```
+
+Suggested Read: 10 Useful Linux Chaining Operators with Practical Examples
+
+### 4. Linux Shell Functions
+
+A shell function is a group of commands that are executed collectively within the current shell. Functions help to carry out a specific task in a shell script. The conventional form of writing shell functions in a script is:
+
+```
+function_name() {
+command1
+command2
+…….
+}
+```
+
+Alternatively,
+
+```
+function function_name {
+command1
+command2
+…….
+}
+```
+
+Let’s take a look at how to write shell functions in a script named shell_functions.sh.
+
+```
+#!/bin/bash
+#write a shell function to update and upgrade installed packages
+upgrade_system(){
+sudo apt update;
+sudo apt dist-upgrade;
+}
+#execute function
+upgrade_system
+```
+
+Instead of executing the two commands: sudo apt update and sudo apt dist-upgrade from the command line, we have written a simple shell function to execute the two commands as a single command, upgrade_system within a script.
+
+Save the file and thereafter, make the script executable. Finally run it as below:
+
+```
+$ chmod +x shell_functions.sh
+$ ./shell_functions.sh
+```
+
+
+
+### 5. Linux Shell Built-in Commands
+
+These are Linux commands that built into the shell, thus you cannot find them within the file system. They include pwd, cd, bg, alias, history, type, source, read, exit and many others.
+
+You can list or check Linux built-in commands using type command as shown:
+
+```
+$ type pwd
+pwd is a shell builtin
+$ type cd
+cd is a shell builtin
+$ type bg
+bg is a shell builtin
+$ type alias
+alias is a shell builtin
+$ type history
+history is a shell builtin
+```
+
+Learn about some Linux built-in Commands usage:
+
+- [15 ‘pwd’ Command Examples in Linux][2]
+- [15 ‘cd’ Command Examples in Linux][3]
+- [Learn The Power of Linux ‘history’ Command][4]
+
+### Conclusion
+
+As a Linux user, it is always important to know the type of command you are running. I believe, with the precise and simple-to-understand explanation above including a few relevant illustrations, you probably have a good understanding of the [various categories of Linux commands][5].
+
+You can as well get in tough through the comment section below for any questions or supplementary ideas that you would like to offer us.
+
+--------------------------------------------------------------------------------
+
+via: http://linoxide.com/firewall/pfsense-setup-basic-configuration/
+
+作者:[Aaron Kili ][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.tecmint.com/author/aaronkili/
+[1]: http://www.tecmint.com/different-types-of-linux-shells/
+[2]: http://www.tecmint.com/pwd-command-examples/
+[3]: http://www.tecmint.com/cd-command-in-linux/
+[4]: http://www.tecmint.com/history-command-examples/
+[5]: http://www.tecmint.com/category/linux-commands/
diff --git a/sources/tech/20160827 4 Best Linux Boot Loaders.md b/sources/tech/20160827 4 Best Linux Boot Loaders.md
new file mode 100644
index 0000000000..7ea63cdb94
--- /dev/null
+++ b/sources/tech/20160827 4 Best Linux Boot Loaders.md
@@ -0,0 +1,78 @@
+translating by ucasFL
+
+4 Best Linux Boot Loaders
+====
+
+When you turn on your machine, immediately after POST (Power On Self Test) is completed successfully, the BIOS locates the configured bootable media, and reads some instructions from the master boot record (MBR) or GUID partition table which is the first 512 bytes of the bootable media. The MBR contains two important sets of information, one is the boot loader and two, the partition table.
+
+### What is a Boot Loader?
+
+A boot loader is a small program stored in the MBR or GUID partition table that helps to load an operating system into memory. Without a boot loader, your operating system can not be loaded into memory.
+
+There are several boot loaders we can install together with Linux on our systems and in this article, we shall briefly talk about a handful of the best Linux boot loaders to work with.
+
+### 1. GNU GRUB
+
+GNU GRUB is a popular and probably the most used multiboot Linux boot loader available, based on the original GRUB (GRand Unified Bootlader) which was created by Eirch Stefan Broleyn. It comes with several improvements, new features and bug fixes as enhancements of the original GRUB program.
+
+Importantly, GRUB 2 has now replaced the GRUB. And notably, the name GRUB was renamed to GRUB Legacy and is not actively developed, however, it can be used for booting older systems since bug fixes are still on going.
+
+GRUB has the following prominent features:
+
+- Supports multiboot
+- Supports multiple hardware architectures and operating systems such as Linux and Windows
+- Offers a Bash-like interactive command line interface for users to run GRUB commands as well interact with configuration files
+- Enables access to GRUB editor
+- Supports setting of passwords with encryption for security
+- Supports booting from a network combined with several other minor features
+
+Visit Homepage:
+
+### 2. LILO (Linux Loader)
+
+LILO is a simple yet powerful and stable Linux boot loader. With the growing popularity and use of GRUB, which has come with numerous improvements and powerful features, LILO has become less popular among Linux users.
+
+While it loads, the word “LILO” is displayed on the screen and each letter appears before or after a particular event has occurred. However, the development of LILO was stopped in December 2015, it has a number of features as listed below:
+
+- Does not offer an interactive command line interface
+- Supports several error codes
+- Offers no support for booting from a network
+- All its files are stored in the first 1024 cylinders of a drive
+- Faces limitation with BTFS, GPT and RAID plus many more.
+
+Visit Homepage:
+
+### 3. BURG – New Boot Loader
+
+Based on GRUB, BURG is a relatively new Linux boot loader. Because it is derived from GRUB, it ships in with some of the primary GRUB features, nonetheless, it also offers remarkable features such as a new object format to support multiple platforms including Linux, Windows, Mac OS, FreeBSD and beyond.
+
+Additionally, it supports a highly configurable text and graphical mode boot menu, stream plus planned future improvements for it to work with various input/output devices.
+
+Visit Homepage:
+
+### 4. Syslinux
+
+Syslinux is an assortment of light weight boot loaders that enable booting from CD-ROMs, from a network and so on. It supports filesystems such as FAT for MS-DOS, and ext2, ext3, ext4 for Linux. It as well supports uncompressed single-device Btrfs.
+
+Note that Syslinux only accesses files in its own partition, therefore, it does not offer multi-filesystem boot capabilities.
+
+Visit Homepage:
+
+### Conclusion
+
+A boot loader allows you to manage multiple operating systems on your machine and select which one to use at a particular time, without it, your machine can not load the kernel and the rest of the operating system files.
+
+Have we missed any tip-top Linux boot loader here? If so, then let us know by using the comment form below by making suggestions of any commendable boot loaders that can support Linux operating system.
+
+
+--------------------------------------------------------------------------------
+
+via: http://linoxide.com/firewall/pfsense-setup-basic-configuration/
+
+作者:[Aaron Kili][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.tecmint.com/best-linux-boot-loaders/
diff --git a/sources/tech/20160830 Ohm JavaScript Parser that Creates a Language in 200 Lines of Code.md b/sources/tech/20160830 Ohm JavaScript Parser that Creates a Language in 200 Lines of Code.md
deleted file mode 100644
index 67c117ee0b..0000000000
--- a/sources/tech/20160830 Ohm JavaScript Parser that Creates a Language in 200 Lines of Code.md
+++ /dev/null
@@ -1,263 +0,0 @@
-Ohm: JavaScript Parser that Creates a Language in 200 Lines of Code
-===========
-
-Parsers are an incredibly useful software libraries. While conceptually simple, they can be challenging to implement and are often considered a dark art in computer science. In this blog series, I’ll show you why you don’t need to be Harry Potter to master parsers. But bring your wand just in case.
-
-We’ll explore a new open source Javascript library called Ohm that makes building parsers easy and easier to reuse. In this series, we use Ohm to recognize numbers, build a calculator, and more. By the end of this series you will have created a complete programming language in under 200 lines of code. This powerful tool will let you do things that you might have thought impossible otherwise.
-
-### Why Parsers are Hard
-
-Parsers are useful. There are lots of times you might need a parser. A new file format might come along that you need to process and no one else has written a library for it yet. Or maybe you find files in an old file format and the existing parsers aren’t built for the platform you need. I’ve seen this happen over and over. Code will come and go but data is forever.
-
-Fundamentally parsers are simple: just transform one data structure into another. So why does it feel like you need to be Dumbledore to figure them out?
-
-The challenge that parsers have historically been surprisingly difficult to write, and most of the existing tools are old and assume a fair amount of arcane computer science knowledge. If you took a compilers class in college the textbook may well have techniques from the 1970s. Fortunately, parser technology has improved a great deal since then.
-
-Typically a parser is created by defining what you want to parse using a special syntax called a formal grammar. Then you feed this into several tools like Bison and Yacc which generate a bunch of C code that you the need to modify or link into whatever programming language you are actually writing in. The other option is to manually write a parser in your preferred language, which is slow and error prone. That’s a lot of extra work before you get to actually use the parser.
-
-Imagine if your description of the thing you wanted to parse, the grammar, was also the parser? What if you could just run the grammar directly, then add hooks only where you want? That’s what Ohm does.
-
-### Introducing Ohm
-
-[Ohm][1] is a new kind of parsing system. While it resembles the grammars you may have seen in text books it’s a lot more powerful and easier to use. With Ohm you write your format definition in a very flexible syntax in a .ohm file, then attach semantic meaning to it using your host language. For this blog we will use JavaScript as the host language.
-
-Ohm is based on years of research into making parsers easier and more flexible. VPRI’s [STEPS program][2] (pdf) created many custom languages for specific tasks (like a fully parallelizable graphics renderer in 400 lines of code!) using Ohm’s precursor [OMeta][3].
-
-Ohm has many interesting features and notations, but rather than explain them all I think we should just dive in and build something.
-
-### Parsing Integers
-
-Let’s parse some numbers. It seems like this would be easy. Just look for adjacent digits in a string of text; but let’s try to handle all forms of numbers: Integers and floating point. Hex and octal. Scientific notation. A leading negative digit. Parsing numbers is easy. Doing it right is hard
-
-To build this code by hand would be difficult and buggy, with lots of special cases which sometimes conflict with each other. A regular expression could probably do it, but would be ugly and hard to maintain. Let’s do it with Ohm instead.
-
-Every parser in Ohm involves three parts: the grammar, the semantics, and the tests. I usually pick part of the problem and write tests for it, then build enough of the grammar and semantics to make the tests pass. Then I pick another part of the problem, add more tests, update the grammar and semantics, while making sure all of the tests continue to pass. Even with our new powerful tool, writing parsers is still conceptually complicated. Tests are the only way to build parsers in a reasonable manner. Now let’s dig in.
-
-We’ll start with an integer number. An integer is composed of a sequences of digits next to each other. Let’s put this into a file called grammar.ohm:
-
-```
-CoolNums {
- // just a basic integer
- Number = digit+
-}
-```
-
-This creates a single rule called Number which matches one or more digits. The + means one or more, just like in a regular expression. This rule will match if there is one digit or more than one digit. It won’t match if there are zero digits or something something other than a digit. A digit is defined as the characters for the numbers 0 to 9. digit is also a rule like Number is, but it’s one of Ohm’s built in rules so we don’t have to define it ourselves. We could override if it we wanted to but that wouldn’t make sense in this case. After all we don’t plan to invent a new form of number (yet!)
-
-Now we can read in this grammar and process it with the Ohm library.
-
-Put this into test1.js
-
-```
-var ohm = require('ohm-js');
-var fs = require('fs');
-var assert = require('assert');
-var grammar = ohm.grammar(fs.readFileSync('src/blog_numbers/syntax1.ohm').toString());
-```
-
-The ohm.grammar call will read in the file and parse it into a grammar object. Now we can add semantics. Add this to your Javascript file:
-
-```
-var sem = grammar.createSemantics().addOperation('toJS', {
- Number: function(a) {
- return parseInt(this.sourceString,10);
- }
-});
-```
-
-This creates a set of semantics called sem with the operation toJS. The semantics are essentially a bunch of functions matching up to each rule in the grammar. Each function will be called when the corresponding rule in the grammar is parsed. The Number function above will be called when the Number rule in the grammar is parsed. The grammar defines what chunks are in the language. The semantics define what to do with chunks once they’ve been parsed.
-
-Our semantics functions can do anything we want, such as print debugging information, create objects, or recursively call toJS on any sub-nodes. In this case we just want to convert the matched text into a real Javascript integer.
-
-All semantic functions have an implicit this object with some useful properties. The source property represents the part of the input text that matches this node. this.sourceString is the matched input as a string. Calling the built in JavaScript function parseInt turns this string to a number. The 10 argument to parseInt tells JavaScript that we are giving it a number in base ten. If we leave it out then JS will assume it’s base 10 anyway, but I’ve included it because later on we will support base 16 (hex) numbers, so it’s good to be explicit.
-
-Now that we have some semantics, let’s actually parse something to see if our parser works. How do we know our parser works? By testing it. Lots and lots of testing. Every possible edge case needs a test.
-
-With the standard assert API, here is a test function which matches some input then applies our semantics to it to turn it into a number, then compares the number with the expected input.
-```
- function test(input, answer) {
- var match = grammar.match(input);
- if(match.failed()) return console.log("input failed to match " + input + match.message);
- var result = sem(match).toJS();
- assert.deepEqual(result,answer);
- console.log('success = ', result, answer);
- }
-```
-
-That’s it. Now we can write a bunch of tests for different numbers. If the match fails then our script will throw an exception. If not it will print success. Let’s try it out. Add this to the script
-
-```
- test("123",123);
- test("999",999);
- test("abc",999);
-```
-
-Then run the script with node test1.js
-
-Your output should look like this:
-
-```
-success = 123 123
-success = 999 999
-input failed to match abcLine 1, col 1:
-> 1 | abc
- ^
-Expected a digit
-```
-
-Cool. The first two succeed and the third one fails, as it should. Even better, Ohm automatically gave us a nice error message pointing to the match failure.
-
-### Floating Point
-
-Our parser works, but it doesn’t do anything very interesting. Let’s extend it to parse both integers and floating point numbers. Change the grammar.ohm file to look like this:
-
-```
-CoolNums {
- // just a basic integer
- Number = float | int
- int = digit+
- float = digit+ "." digit+
-}
-```
-
-This changes the Number rule to point to either a float or an int. The | means or. We read this as “a Number is composed of a float or an int.” Then int is defined as digit+ and float is defined as digit+ followed by a period followed by another digit+. This means there must be at least one digit before the period and at least one after. If there is not a period then it won’t be a float at all, so int will match instead.
-
-Now let’s go look at our semantic actions again. Since we now have new rules we need new action functions: one for int and one for float.
-
-```
-var sem = grammar.createSemantics().addOperation('toJS', {
- Number: function(a) {
- return a.toJS();
- },
- int: function(a) {
- console.log("doing int", this.sourceString);
- return parseInt(this.sourceString,10);
- },
- float: function(a,b,c) {
- console.log("doing float", this.sourceString);
- return parseFloat(this.sourceString);
- }
-});
-```
-
-There’s two things to note here. First, int and float and Number all have matching grammar rules and functions. However, the action for Number no longer does anything interesting. It receives the child node ‘a’ and returns the result of toJS on the child. In other words the Number rule simply returns whatever its child rule matched. Since this is the default behavior of any rule in Ohm we can actually just leave the Number action out. Ohm will do it for us.
-
-Second, int has one argument a while float has three: a, b, and c. This is because of the rule’s arity. Arity means how many arguments a rule has. If we look back at the grammar, the rule for float is
-
-```
- float = digit+ "." digit+
-```
-
-The float rule is defined by three parts: the first digit+, the "." and the second digit+. All three of those parts will be passed as parameters to the action function for float. Thus float must have three arguments or else the Ohm library will give us an error. In this case we don’t care about the arguments because we will just grab the input string directly, but we still need the arguments listed to avoid compiler errors. Later on we will actually use some of these parameters.
-
-Now we can add a few more tests for our new floating point number support.
-
-```
-test("123",123);
-test("999",999);
-//test("abc",999);
-test('123.456',123.456);
-test('0.123',0.123);
-test('.123',0.123);
-```
-
-Note that the last test will fail. A floating point number must begin with a digit, even if it’s just zero. .123 is not valid, and in fact the real JavaScript language has the same rule.
-
-### Hexadecimal
-
-So now we have integers and floats but there’s a few other number syntaxes that might be good to support: hexadecimal and scientific notation. Hex numbers are integers in base sixteen. The digits can be from 0 to 9 and A to F. Hex is often used in computer science when working with binary data because you can represent 0 through 255 exactly with only two digits.
-
-In most C derived programming languages (including JavaScript) hex numbers are preceded by `0x` to indicate to the compiler that what follows is a hexadecimal number. To support hex numbers in our parser we just need to add another rule.
-
-```
- Number = hex | float | int
- int = digit+
- float = digit+ "." digit+
- hex = "0x" hexDigit+
- hexDigit := "0".."9" | "a".."f" | "A".."F"
-```
-
-I’ve actually added two rules. `hex` says that a hex number is the string `0x` followed by one or more `hexDigits`. A `hexDigit` is any letter from 0 to 9, or a to f, or A to F (covering both upper and lower case). I also modified Number to recognize hex as another possible option. Now we just need another action rule for hex.
-
-```
- hex: function(a,b) {
- return parseInt(this.sourceString,16);
- }
-```
-
-Notice that in this case we are passing `16` as the radix to `parseInt` because we want JavaScript to know that this is a hexadecimal number.
-
-I skipped over something important to notice. The rule for `hexDigit` looks like this.
-
-```
- hexDigit := "0".."9" | "a".."f" | "A".."F"
-```
-
-Notice that I used `:=` instead of `=`. In Ohm, the `:=` is used when you are overriding a rule. It turns out Ohm already has a default rule for `hexDigit`, just as it does for `digit`, `space` and a bunch of others. If I had used = then Ohm would have reported an error. This is a check so I can’t override a rule unintentionally. Since our new hexDigit rule is actually the same as Ohm’s built in rule we can just comment it out and let Ohm do it. I left the rule in just so we can see what’s really going on.
-
-Now we can add some more tests and see that our hex digits really work:
-
-```
-test('0x456',0x456);
-test('0xFF',255);
-```
-
-### Scientific Notation
-
-Finally let’s support scientific notation. This is for very large or small numbers like 1.8 x 10^3 In most programming languages numbers in scientific notation would be written as 1.8e3 for 18000 or 1.8e-3 for .0018. Let’s add another couple of rules to support this exponent notation.
-
-```
- float = digit+ "." digit+ exp?
- exp = "e" "-"? digit+
-```
-
-This adds a the exp rule to the end of the float rule with a question mark. The ? means zero or one, so exp is optional but there can’t be more than one. Adding the exp rule also changes the arity of the float rule, so we need to add another argument to the float action, even if we don’t use it.
-
-```
- float: function(a,b,c,d) {
- console.log("doing float", this.sourceString);
- return parseFloat(this.sourceString);
- },
-```
-
-And now our new tests can pass:
-
-```
-test('4.8e10',4.8e10);
-test('4.8e-10',4.8e-10);
-```
-
-### Conclusion
-
-Ohm is a great tool for building parsers because it’s easy to get started and you can incrementally add to it. It also has other great features that I didn’t cover today, like a debugging visualizer and sub-classing.
-
-So far we have used Ohm to translate character strings into JavaScript numbers, and often Ohm is used for this very purpose: converting one representation to another. However, Ohm can be used for a lot more. By putting in a different set of semantic actions you can use Ohm to actually process and calculate things. This is one of Ohm’s magic features. A single grammar can be used with many different semantics.
-
-In the next article of this series I’ll show you how to not just parse numbers but actually evaluate math expressions like `(4.8+5 * (238-68)/2)`, just like a real calculator.
-
-Bonus challenge: Can you extend the grammar with support for octal numbers? These are numbers in base 8 and can be represented with only the digits 0 to 7, preceded by a zero and the letter o. See if you are right with these test cases. Next time I’ll show you the answer.
-
-```
-test('0o77',7*8+7);
-test('0o23',0o23);
-```
-
-
-
-
---------------------------------------------------------------------------------
-
-via: https://www.pubnub.com/blog/2016-08-30-javascript-parser-ohm-makes-creating-a-programming-language-easy/?utm_source=javascriptweekly&utm_medium=email
-
-作者:[Josh Marinacci][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: https://www.pubnub.com/blog/author/josh/
-[1]: https://github.com/cdglabs/ohm
-[2]: http://www.vpri.org/pdf/tr2012001_steps.pdf
-[3]: http://tinlizzie.org/ometa/
-
-
diff --git a/sources/tech/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md b/sources/tech/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md
deleted file mode 100644
index f6f6c838a2..0000000000
--- a/sources/tech/20160905 QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD.md
+++ /dev/null
@@ -1,81 +0,0 @@
-jiajia9linuxer
-QOWNNOTES IS A NOTE TAKING AND TODO LIST APP THAT INTEGRATES WITH OWNCLOUD
-===============
-
-[QOwnNotes][1] is a free, open source note taking and todo list application available for Linux, Windows, and Mac.
-
-The application saves your notes as plain-text files, and it features Markdown support and tight ownCloud integration.
-
-
-
-What makes QOwnNotes stand out is its ownCloud integration (which is optional). Using the ownCloud Notes app, you are able to edit and search notes from the web, or from mobile devices (by using an app like [CloudNotes][2]).
-
-Furthermore, connecting QOwnNotes with your ownCloud account allows you to share notes and access / restore previous versions (or trashed files) of your notes from the ownCloud server.
-
-In the same way, QOwnNotes can also integrate with the ownCloud tasks or Tasks Plus apps.
-
-In case you're not familiar with [ownCloud][3], this is a free software alternative to proprietary web services such as Dropbox, Google Drive, and others, which can be installed on your own server. It comes with a web interface that provides access to file management, calendar, image gallery, music player, document viewer, and much more. The developers also provide desktop sync clients, as well as mobile apps.
-
-Since the notes are saved as plain text, they can be synchronized across devices using other cloud storage services, like Dropbox, Google Drive, and so on, but this is not done directly from within the application.
-
-As a result, the features I mentioned above, like restoring previous note versions, are only available with ownCloud (although Dropbox, and others, do provide access to previous file revisions, but you won't be able to access this directly from QOwnNotes).
-
-As for the QOwnNotes note taking features, the app supports Markdown (with a built-in Markdown preview mode), tagging notes, searching in tags and notes, adding links to notes, and inserting images:
-
-
-
-Hierarchical note tagging and note subfolders are also supported.
-
-The todo manager feature is pretty basic and could use some improvements, as it currently opens in a separate window, and it doesn't use the same editor as the notes, not allowing you to insert images, or use Markdown.
-
-
-
-It does allow you to search your todo items, set item priority, add reminders, and show completed items. Also, todo items can be inserted into notes.
-
-The application user interface is customizable, allowing you to increase or decrease the font size, toggle panes (Markdown preview, note edit and tag panes), and more. A distraction-free mode is also available:
-
-
-
-From the application settings, you can enable the dark mode (this was buggy in my test under Ubuntu 16.04 - some toolbar icons were missing), change the toolbar icon size, fonts, and color scheme (light or dark):
-
-
-
-Other QOwnNotes features include encryption support (notes can only be decrypted in QOwnNotes), customizable keyboard shortcuts, export notes to PDF or Markdown, customizable note saving interval, and more.
-
-Check out the QOwnNotes [homepage][11] for a complete list of features.
-
-
-### Download QOwnNotes
-
-
-For how to install QownNotes, see its [installation][4] page (packages / repositories available for Debian, Ubuntu, Linux Mint, openSUSE, Fedora, Arch Linux, KaOS, Gentoo, Slakware, CentOS, as well as Mac OSX and Windows).
-
-A QOwnNotes [snap][5] package is also available (in Ubuntu 16.04 and newer, you should be able to install it directly from Ubuntu Software).
-
-To integrate QOwnNotes with ownCloud you'll need [ownCloud server][6], as well as [Notes][7], [QOwnNotesAPI][8], and [Tasks][9] or [Tasks Plus][10] ownCloud apps. These can be installed from the ownCloud web interface, without having to download anything manually.
-
-Note that the QOenNotesAPI and Notes ownCloud apps are listed as experimental, so you'll need to enable experimental apps to be able to find and install them. This can be done from the ownCloud web interface, under Apps, by clicking on the settings icon in the lower left-hand side corner.
-
-
---------------------------------------------------------------------------------
-
-via: http://www.webupd8.org/2016/09/qownnotes-is-note-taking-and-todo-list.html
-
-作者:[Andrew][a]
-译者:[译者ID](https://github.com/译者ID)
-校对:[校对者ID](https://github.com/校对者ID)
-
-本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
-
-[a]: http://www.webupd8.org/p/about.html
-[1]: http://www.qownnotes.org/
-[2]: http://peterandlinda.com/cloudnotes/
-[3]: https://owncloud.org/
-[11]: http://www.qownnotes.org/
-[4]: http://www.qownnotes.org/installation
-[5]: https://uappexplorer.com/app/qownnotes.pbek
-[6]: https://download.owncloud.org/download/repositories/stable/owncloud/
-[7]: https://github.com/owncloud/notes
-[8]: https://github.com/pbek/qownnotesapi
-[9]: https://apps.owncloud.com/content/show.php/Tasks?content=164356
-[10]: https://apps.owncloud.com/content/show.php/Tasks+Plus?content=170561
diff --git a/sources/tech/20160911 17 tar command practical examples in Linux.md b/sources/tech/20160911 17 tar command practical examples in Linux.md
new file mode 100644
index 0000000000..d4634ef23c
--- /dev/null
+++ b/sources/tech/20160911 17 tar command practical examples in Linux.md
@@ -0,0 +1,308 @@
+17 tar command practical examples in Linux
+=====
+
+Tar (tape archive ) is the most widely used command in Unix like operating system for creating archive of multiple files and folders into a single archive file and that archive file can be further compressed using gzip and bzip2 techniques. In other words we can say that tar command is used to take backup by archiving multiple files and directory into a single tar or archive file and later on files & directories can be extracted from the tar compressed file.
+
+In this article we will discuss 17 practical examples of tar command in Linux.
+
+Syntax of tar command:
+
+```
+# tar
+```
+
+Some of the commonly used options in tar command are listed below :
+
+
+
+Note : hyphen ( – ) in the tar command options are optional.
+
+### Example: 1 Create a tar archive file
+
+Let’s create a tar file of /etc directory and ‘/root/ anaconda-ks.cfg’ file.
+
+```
+[root@linuxtechi ~]# tar -cvf myarchive.tar /etc /root/anaconda-ks.cfg
+```
+
+Above command will create a tar file with the name “myarchive” in the current folder. Tar file contains all the files and directories of /etc folder and anaconda-ks.cfg file.
+
+In the tar command ‘-c‘ option specify to create a tar file, ‘-v’ is used for verbose output and ‘-f’ option is used to specify the archive file name.
+
+```
+[root@linuxtechi ~]# ls -l myarchive.tar
+-rw-r--r--. 1 root root 22947840 Sep 7 00:24 myarchive.tar
+[root@linuxtechi ~]#
+```
+
+### Example:2 List the contents of tar archive file.
+
+Using ‘–t‘ option in tar command we can view the contents of tar files without extracting it.
+
+```
+[root@linuxtechi ~]# tar -tvf myarchive.tar
+```
+
+Listing a specific file or directory from tar file. In the below example i am trying to view whether ‘anaconda-ks.cfg’ file is there in the tar file or not.
+
+```
+[root@linuxtechi ~]# tar -tvf myarchive.tar root/anaconda-ks.cfg
+-rw------- root/root 953 2016-08-24 01:33 root/anaconda-ks.cfg
+[root@linuxtechi ~]#
+```
+
+### Example:3 Append or add files to end of archive or tar file.
+
+‘-r‘ option in the tar command is used to append or add file to existing tar file. Let’s add /etc/fstab file in ‘data.tar‘
+
+```
+[root@linuxtechi ~]# tar -rvf data.tar /etc/fstab
+```
+
+Note: In the Compressed tar file we can’t append file or directory.
+
+### Example:4 Extracting files and directories from tar file.
+
+‘-x‘ option is used to extract the files and directories from the tar file. Let’s extract the content of above created tar file.
+
+```
+[root@linuxtechi ~]# tar -xvf myarchive.tar
+```
+
+This command will extract all the files and directories of myarchive tar file in the current working directory.
+
+### Example:5 Extracting tar file to a particular folder.
+
+In case you want to extract tar file to a particular folder or directory then use ‘-C‘ option and after that specify the path of a folder.
+
+```
+[root@linuxtechi ~]# tar -xvf myarchive.tar -C /tmp/
+```
+
+### Example:6 Extracting particular file or directory from tar file.
+
+Let’s assume you want to extract only anaconda-ks.cfg file from the tar file under /tmp folder.
+
+Syntax :
+
+```
+# tar –xvf {tar-file } {file-to-be-extracted } -C {path-where-to-extract}
+
+[root@linuxtechi tmp]# tar -xvf /root/myarchive.tar root/anaconda-ks.cfg -C /tmp/
+root/anaconda-ks.cfg
+[root@linuxtechi tmp]# ls -l /tmp/root/anaconda-ks.cfg
+-rw-------. 1 root root 953 Aug 24 01:33 /tmp/root/anaconda-ks.cfg
+[root@linuxtechi tmp]#
+```
+
+### Example:7 Creating and compressing tar file (tar.gz or .tgz )
+
+Let’s assume that we want to create a tar file of /etc and /opt folder and also want to compress it using gzip tool. This can be achieved using ‘-z‘ option in tar command. Extensions of such tar files will be either tar.gz or .tgz
+
+```
+[root@linuxtechi ~]# tar -zcpvf myarchive.tar.gz /etc/ /opt/
+```
+
+Or
+
+```
+[root@linuxtechi ~]# tar -zcpvf myarchive.tgz /etc/ /opt/
+```
+
+### Example:8 Creating and compressing tar file ( tar.bz2 or .tbz2 )
+
+Let’s assume that we want to create compressed (bzip2) tar file of /etc and /opt folder. This can be achieved by using the option ( -j) in the tar command.Extensions of such tar files will be either tar.bz2 or .tbz
+
+```
+[root@linuxtechi ~]# tar -jcpvf myarchive.tar.bz2 /etc/ /opt/
+```
+
+Or
+
+```
+[root@linuxtechi ~]# tar -jcpvf myarchive.tbz2 /etc/ /opt/
+```
+
+### Example:9 Excluding particular files or type while creating tar file.
+
+Using “–exclude” option in tar command we can exclude the particular file or file type while creating tar file. Let’s assume we want to exclude the file type of html while creating the compressed tar file.
+
+```
+[root@linuxtechi ~]# tar -zcpvf myarchive.tgz /etc/ /opt/ --exclude=*.html
+```
+
+### Example:10 Listing the contents of tar.gz or .tgz file
+
+Contents of tar file with the extensions tar.gz or .tgz is viewed by using the option ‘-t’. Example is shown below :
+
+```
+[root@linuxtechi ~]# tar -tvf myarchive.tgz | more
+.............................................
+drwxr-xr-x root/root 0 2016-09-07 08:41 etc/
+-rw-r--r-- root/root 541 2016-08-24 01:23 etc/fstab
+-rw------- root/root 0 2016-08-24 01:23 etc/crypttab
+lrwxrwxrwx root/root 0 2016-08-24 01:23 etc/mtab -> /proc/self/mounts
+-rw-r--r-- root/root 149 2016-09-07 08:41 etc/resolv.conf
+drwxr-xr-x root/root 0 2016-09-06 03:55 etc/pki/
+drwxr-xr-x root/root 0 2016-09-06 03:15 etc/pki/rpm-gpg/
+-rw-r--r-- root/root 1690 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
+-rw-r--r-- root/root 1004 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Debug-7
+-rw-r--r-- root/root 1690 2015-12-09 04:59 etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-Testing-7
+-rw-r--r-- root/root 3140 2015-09-15 06:53 etc/pki/rpm-gpg/RPM-GPG-KEY-foreman
+..........................................................
+```
+
+### Example:11 Listing the contents of tar.bz2 or .tbz2 file.
+
+Contents of tar file with the extensions tar.bz2 or .tbz2 is viewed by using the option ‘-t’. Example is shown below :
+
+```
+[root@linuxtechi ~]# tar -tvf myarchive.tbz2 | more
+........................................................
+rwxr-xr-x root/root 0 2016-08-24 01:25 etc/pki/java/
+lrwxrwxrwx root/root 0 2016-08-24 01:25 etc/pki/java/cacerts -> /etc/pki/ca-trust/extracted/java/cacerts
+drwxr-xr-x root/root 0 2016-09-06 02:54 etc/pki/nssdb/
+-rw-r--r-- root/root 65536 2010-01-12 15:09 etc/pki/nssdb/cert8.db
+-rw-r--r-- root/root 9216 2016-09-06 02:54 etc/pki/nssdb/cert9.db
+-rw-r--r-- root/root 16384 2010-01-12 16:21 etc/pki/nssdb/key3.db
+-rw-r--r-- root/root 11264 2016-09-06 02:54 etc/pki/nssdb/key4.db
+-rw-r--r-- root/root 451 2015-10-21 09:42 etc/pki/nssdb/pkcs11.txt
+-rw-r--r-- root/root 16384 2010-01-12 15:45 etc/pki/nssdb/secmod.db
+drwxr-xr-x root/root 0 2016-08-24 01:26 etc/pki/CA/
+drwxr-xr-x root/root 0 2015-06-29 08:48 etc/pki/CA/certs/
+drwxr-xr-x root/root 0 2015-06-29 08:48 etc/pki/CA/crl/
+drwxr-xr-x root/root 0 2015-06-29 08:48 etc/pki/CA/newcerts/
+drwx------ root/root 0 2015-06-29 08:48 etc/pki/CA/private/
+drwx------ root/root 0 2015-11-20 06:34 etc/pki/rsyslog/
+drwxr-xr-x root/root 0 2016-09-06 03:44 etc/pki/pulp/
+..............................................................
+```
+
+### Example:12 Extracting or unzip tar.gz or .tgz files.
+
+tar files with extension tar.gz or .tgz is extracted or unzipped with option ‘-x’ and ‘-z’. Example is shown below :
+
+```
+[root@linuxtechi ~]# tar -zxpvf myarchive.tgz -C /tmp/
+```
+
+Above command will extract tar file under /tmp folder.
+
+Note : Now a days tar command will take care compression file types automatically while extracting, it means it is optional for us to specify compression type in tar command. Example is shown below :
+
+```
+[root@linuxtechi ~]# tar -xpvf myarchive.tgz -C /tmp/
+```
+
+### Example:13 Extracting or unzip tar.bz2 or .tbz2 files
+
+tar files with the extension tar.bz2 or .tbz2 is extract with option ‘-j’ and ‘-x’. Example is shown below:
+
+```
+[root@linuxtechi ~]# tar -jxpvf myarchive.tbz2 -C /tmp/
+```
+
+Or
+
+```
+[root@linuxtechi ~]# tar xpvf myarchive.tbz2 -C /tmp/
+```
+
+### Example:14 Scheduling backup with tar command
+
+There are some real time scenarios where we have to create the tar files of particular files and directories for backup purpose on daily basis. Let’s suppose we have to take backup of whole /opt folder on daily basis, this can be achieved by creating a cron job of tar command. Example is shown below :
+
+```
+[root@linuxtechi ~]# tar -zcvf optbackup-$(date +%Y-%m-%d).tgz /opt/
+```
+
+Create a cron job for above command.
+
+### Example:15 Creating compressed archive or tar file with -T and -X option.
+
+There are some real time scenarios where we want tar command to take input from a file and that file will consists of path of files & directory that are to be archived and compressed, there might some files that we would like to exclude in the archive which are mentioned in input file.
+
+In the tar command input file is specified after ‘-T’ option and file which consists of exclude list is specified after ‘-X’ option.
+
+Let’s suppose we want to archive and compress the directories like /etc , /opt and /home and want to exclude the file ‘/etc/sysconfig/kdump’ and ‘/etc/sysconfig/foreman‘, Create a text file ‘/root/tar-include’ and ‘/root/tar-exclude’ and put the following contents in respective file.
+
+```
+[root@linuxtechi ~]# cat /root/tar-include
+/etc
+/opt
+/home
+[root@linuxtechi ~]#
+[root@linuxtechi ~]# cat /root/tar-exclude
+/etc/sysconfig/kdump
+/etc/sysconfig/foreman
+[root@linuxtechi ~]#
+```
+
+Now run the below command to create and compress archive file.
+
+```
+[root@linuxtechi ~]# tar zcpvf mybackup-$(date +%Y-%m-%d).tgz -T /root/tar-include -X /root/tar-exclude
+```
+
+### Example:16 View the size of .tar , .tgz and .tbz2 file.
+
+Use the below commands to view the size of tar and compressed tar files.
+
+```
+[root@linuxtechi ~]# tar -czf - data.tar | wc -c
+427
+[root@linuxtechi ~]# tar -czf - mybackup-2016-09-09.tgz | wc -c
+37956009
+[root@linuxtechi ~]# tar -czf - myarchive.tbz2 | wc -c
+30835317
+[root@linuxtechi ~]#
+```
+
+### Example:17 Splitting big tar file into smaller files.
+
+In Unix like operating big file is divided or split into smaller files using split command. Big tar file can also be divided into the smaller parts using split command.
+
+Let’s assume we want to split ‘mybackup-2016-09-09.tgz‘ file into smaller parts of each 6 MB.
+
+```
+Syntax : split -b . “prefix-name”
+```
+
+```
+[root@linuxtechi ~]# split -b 6M mybackup-2016-09-09.tgz mybackup-parts
+```
+
+Above command will split the mybackup compressed tar file into the smaller files each of size 6 MB in current working directory and split file names will starts from mybackup-partsaa … mybackup-partsag. In case if you want to append numbers in place of alphabets then use ‘-d’ option in above split command.
+
+```
+[root@linuxtechi ~]# ls -l mybackup-parts*
+-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsaa
+-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsab
+-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsac
+-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsad
+-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsae
+-rw-r--r--. 1 root root 6291456 Sep 10 03:05 mybackup-partsaf
+-rw-r--r--. 1 root root 637219 Sep 10 03:05 mybackup-partsag
+[root@linuxtechi ~]#
+```
+
+Now we can move these files into another server over the network and then we can merge all the files into a single tar compressed file using below mentioned command.
+
+```
+[root@linuxtechi ~]# cat mybackup-partsa* > mybackup-2016-09-09.tgz
+[root@linuxtechi ~]#
+```
+
+That’s all, hope you like different examples of tar command. Please share your feedback and comments.
+
+--------------------------------------------------------------------------------
+
+via: http://www.linuxtechi.com/17-tar-command-examples-in-linux/
+
+作者:[Pradeep Kumar ][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.linuxtechi.com/author/pradeep/
diff --git a/sources/tech/20160912 15 Top Open Source Artificial Intelligence Tools.md b/sources/tech/20160912 15 Top Open Source Artificial Intelligence Tools.md
new file mode 100644
index 0000000000..56f78f84b9
--- /dev/null
+++ b/sources/tech/20160912 15 Top Open Source Artificial Intelligence Tools.md
@@ -0,0 +1,125 @@
+15 Top Open Source Artificial Intelligence Tools
+====
+
+Artificial Intelligence (AI) is one of the hottest areas of technology research. Companies like IBM, Google, Microsoft, Facebook and Amazon are investing heavily in their own R&D, as well as buying up startups that have made progress in areas like machine learning, neural networks, natural language and image processing. Given the level of interest, it should come as no surprise that a recent [artificial intelligence report][1] from experts at Stanford University concluded that "increasingly useful applications of AI, with potentially profound positive impacts on our society and economy are likely to emerge between now and 2030."
+
+In a recent [article][2], we provided an overview of 45 AI projects that seem particularly promising or interesting. In this slideshow, we're focusing in on open source artificial intelligence tools, with a closer look at fifteen of the best-known open source AI projects.
+
+
+
+Open Source Artificial Intelligence
+
+These open source AI applications are on the cutting edge of artificial intelligence research.
+
+
+
+### 1. Caffe
+
+The brainchild of a UC Berkeley PhD candidate, Caffe is a deep learning framework based on expressive architecture and extensible code. It's claim to fame is its speed, which makes it popular with both researchers and enterprise users. According to its website, it can process more than 60 million images in a single day using just one NVIDIA K40 GPU. It is managed by the Berkeley Vision and Learning Center (BVLC), and companies like NVIDIA and Amazon have made grants to support its development.
+
+
+
+### 2. CNTK
+
+Short for Computational Network Toolkit, CNTK is one of Microsoft's open source artificial intelligence tools. It boasts outstanding performance whether it is running on a system with only CPUs, a single GPU, multiple GPUs or multiple machines with multiple GPUs. Microsoft has primarily utilized it for research into speech recognition, but it is also useful for applications like machine translation, image recognition, image captioning, text processing, language understanding and language modeling.
+
+
+
+### 3. Deeplearning4j
+
+Deeplearning4j is an open source deep learning library for the Java Virtual Machine (JVM). It runs in distributed environments and integrates with both Hadoop and Apache Spark. It makes it possible to configure deep neural networks, and it's compatible with Java, Scala and other JVM languages.
+
+The project is managed by a commercial company called Skymind, which offers paid support, training and an enterprise distribution of Deeplearning4j.
+
+
+
+### 4. Distributed Machine Learning Toolkit
+
+Like CNTK, the Distributed Machine Learning Toolkit (DMTK) is one of Microsoft's open source artificial intelligence tools. Designed for use in big data applications, it aims to make it faster to train AI systems. It consists of three key components: the DMTK framework, the LightLDA topic model algorithm, and the Distributed (Multisense) Word Embedding algorithm. As proof of DMTK's speed, Microsoft says that on an eight-cluster machine, it can "train a topic model with 1 million topics and a 10-million-word vocabulary (for a total of 10 trillion parameters), on a document collection with over 100-billion tokens," a feat that is unparalleled by other tools.
+
+
+
+### 5. H20
+
+Focused more on enterprise uses for AI than on research, H2O has large companies like Capital One, Cisco, Nielsen Catalina, PayPal and Transamerica among its users. It claims to make is possible for anyone to use the power of machine learning and predictive analytics to solve business problems. It can be used for predictive modeling, risk and fraud analysis, insurance analytics, advertising technology, healthcare and customer intelligence.
+
+It comes in two open source versions: standard H2O and Sparkling Water, which is integrated with Apache Spark. Paid enterprise support is also available.
+
+
+
+### 6. Mahout
+
+An Apache Foundation project, Mahout is an open source machine learning framework. According to its website, it offers three major features: a programming environment for building scalable algorithms, premade algorithms for tools like Spark and H2O, and a vector-math experimentation environment called Samsara. Companies using Mahout include Adobe, Accenture, Foursquare, Intel, LinkedIn, Twitter, Yahoo and many others. Professional support is available through third parties listed on the website.
+
+
+
+### 7. MLlib
+
+Known for its speed, Apache Spark has become one of the most popular tools for big data processing. MLlib is Spark's scalable machine learning library. It integrates with Hadoop and interoperates with both NumPy and R. It includes a host of machine learning algorithms for classification, regression, decision trees, recommendation, clustering, topic modeling, feature transformations, model evaluation, ML pipeline construction, ML persistence, survival analysis, frequent itemset and sequential pattern mining, distributed linear algebra and statistics.
+
+
+
+### 8. NuPIC
+
+Managed by a company called Numenta, NuPIC is an open source artificial intelligence project based on a theory called Hierarchical Temporal Memory, or HTM. Essentially, HTM is an attempt to create a computer system modeled after the human neocortex. The goal is to create machines that "approach or exceed human level performance for many cognitive tasks."
+
+In addition to the open source license, Numenta also offers NuPic under a commercial license, and it also offers licenses on the patents that underlie the technology.
+
+
+
+### 9. OpenNN
+
+Designed for researchers and developers with advanced understanding of artificial intelligence, OpenNN is a C++ programming library for implementing neural networks. Its key features include deep architectures and fast performance. Extensive documentation is available on the website, including an introductory tutorial that explains the basics of neural networks. Paid support for OpenNNis available through Artelnics, a Spain-based firm that specializes in predictive analytics.
+
+
+
+### 10. OpenCyc
+
+Developed by a company called Cycorp, OpenCyc provides access to the Cyc knowledge base and commonsense reasoning engine. It includes more than 239,000 terms, about 2,093,000 triples, and about 69,000 owl:sameAs links to external semantic data namespaces. It is useful for rich domain modeling, semantic data integration, text understanding, domain-specific expert systems and game AIs. The company also offers two other versions of Cyc: one for researchers that is free but not open source and one for enterprise use that requires a fee.
+
+
+
+### 11. Oryx 2
+
+Built on top of Apache Spark and Kafka, Oryx 2 is a specialized application development framework for large-scale machine learning. It utilizes a unique lambda architecture with three tiers. Developers can use Oryx 2 to create new applications, and it also includes some pre-built applications for common big data tasks like collaborative filtering, classification, regression and clustering. The big data tool vendor Cloudera created the original Oryx 1 project and has been heavily involved in continuing development.
+
+
+
+### 12. PredictionIO
+
+In February this year, Salesforce bought PredictionIO, and then in July, it contributed the platform and its trademark to the Apache Foundation, which accepted it as an incubator project. So while Salesforce is using PredictionIO technology to advance its own machine learning capabilities, work will also continue on the open source version. It helps users create predictive engines with machine learning capabilities that can be used to deploy Web services that respond to dynamic queries in real time.
+
+
+
+### 13. SystemML
+
+First developed by IBM, SystemML is now an Apache big data project. It offers a highly-scalable platform that can implement high-level math and algorithms written in R or a Python-like syntax. Enterprises are already using it to track customer service on auto repairs, to direct airport traffic and to link social media data with banking customers. It can run on top of Spark or Hadoop.
+
+
+
+### 14. TensorFlow
+
+TensorFlow is one of Google's open source artificial intelligence tools. It offers a library for numerical computation using data flow graphs. It can run on a wide variety of different systems with single- or multi-CPUs and GPUs and even runs on mobile devices. It boasts deep flexibility, true portability, automatic differential capabilities and support for Python and C++. The website includes a very extensive list of tutorials and how-tos for developers or researchers interested in using or extending its capabilities.
+
+
+
+### 15. Torch
+
+Torch describes itself as "a scientific computing framework with wide support for machine learning algorithms that puts GPUs first." The emphasis here is on flexibility and speed. In addition, it's fairly easy to use with packages for machine learning, computer vision, signal processing, parallel processing, image, video, audio and networking. It relies on a scripting language called LuaJIT that is based on Lua.
+
+
+
+
+--------------------------------------------------------------------------------
+
+via: http://www.datamation.com/open-source/slideshows/15-top-open-source-artificial-intelligence-tools.html
+
+作者:[Cynthia Harvey][a]
+译者:[译者ID](https://github.com/译者ID)
+校对:[校对者ID](https://github.com/校对者ID)
+
+本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
+
+[a]: http://www.datamation.com/author/Cynthia-Harvey-6460.html
+[1]: https://ai100.stanford.edu/sites/default/files/ai_100_report_0906fnlc_single.pdf
+[2]: http://www.datamation.com/applications/artificial-intelligence-software-45-ai-projects-to-watch-1.html
diff --git a/sources/tech/20160912 8 best practices for building containerized applications.md b/sources/tech/20160912 8 best practices for building containerized applications.md
new file mode 100644
index 0000000000..d67ee5c473
--- /dev/null
+++ b/sources/tech/20160912 8 best practices for building containerized applications.md
@@ -0,0 +1,74 @@
+8 best practices for building containerized applications
+====
+
+
+
+Containers are a major trend in deploying applications in both public and private clouds. But what exactly are containers, why have they become a popular deployment mechanism, and how will you need to modify your application to optimize it for a containerized environment?
+
+### What are containers?
+
+The technology behind containers has a long history beginning with SELinux in 2000 and Solaris zones in 2005. Today, containers are a combination of several kernel features including SELinux, Linux namespaces, and control groups, providing isolation of end user processes, networking, and filesystem space.
+
+### Why are they so popular?
+
+The recent widespread adoption of containers is largely due to the development of standards aimed at making them easier to use, such as the Docker image format and distribution model. This standard calls for immutable images, which are the launching point for a container runtime. Immutable images guarantee that the same image the development team releases is what gets tested and deployed into the production environment.
+
+The lightweight isolation that containers provide creates a better abstraction for an application component. Components running in containers won't interfere with each other the way they might running directly on a virtual machine. They can be prevented from starving each other of system resources, and unless they are sharing a persistent volume won't block attempting to write to the same files. Containers have helped to standardize practices like logging and metric collection, and they allow for increased multi-tenant density on physical and virtual machines, all of which leads to lower deployment costs.
+
+### How do you build a container-ready application?
+
+Changing your application to run inside of a container isn't necessarily a requirement. The major Linux distributions have base images that can run anything that runs on a virtual machine. But the general trend in containerized applications is following a few best practices:
+
+- 1. Instances are disposable
+
+Any given instance of your application shouldn't need to be carefully kept running. If one system running a bunch of containers goes down, you want to be able to spin up new containers spread out across other available systems.
+
+- 2. Retry instead of crashing
+
+When one service in your application depends on another service, it should not crash when the other service is unreachable. For example, your API service is starting up and detects the database is unreachable. Instead of failing and refusing to start, you design it to retry the connection. While the database connection is down the API can respond with a 503 status code, telling the clients that the service is currently unavailable. This practice should already be followed by applications, but if you are working in a containerized environment where instances are disposable, then the need for it becomes more obvious.
+
+- 3. Persistent data is special
+
+Containers are launched based on shared images using a copy-on-write (COW) filesystem. If the processes the container is running choose to write out to files, then those writes will only exist as long as the container exists. When the container is deleted, that layer in the COW filesystem is deleted. Giving a container a mounted filesystem path that will persist beyond the life of the container requires extra configuration, and extra cost for the physical storage. Clearly defining the abstraction for what storage is persisted promotes the idea that instances are disposable. Having the abstraction layer also allows a container orchestration engine to handle the intricacies of mounting and unmounting persistent volumes to the containers that need them.
+
+- 4. Use stdout not log files
+
+You may now be thinking, if persistent data is special, then what do I do with log files? The approach the container runtime and orchestration projects have taken is that processes should instead [write to stdout/stderr][1], and have infrastructure for archiving and maintaining [container logs][2].
+
+- 5. Secrets (and other configurations) are special too
+
+You should never hard-code secret data like passwords, keys, and certificates into your images. Secrets are typically not the same when your application is talking to a development service, a test service, or a production service. Most developers do not have access to production secrets, so if secrets are baked into the image then a new image layer will have to be created to override the development secrets. At this point, you are no longer using the same image that was created by your development team and tested by quality engineering (QE), and have lost the benefit of immutable images. Instead, these values should be abstracted away into environment variables or files that are injected at container startup.
+
+- 6. Don't assume co-location of services
+
+In an orchestrated container environment you want to allow the orchestrator to send your containers to whatever node is currently the best fit. Best fit could mean a number of things: it could be based on whichever node has the most space right now, the quality of service the container is requesting, whether the container requires persistent volumes, etc. This could easily mean your frontend, API, and database containers all end up on different nodes. While it is possible to force an API container to each node (see [DaemonSets][3] in Kubernetes), this should be reserved for containers that perform tasks like monitoring the nodes themselves.
+
+- 7. Plan for redundancy / high availability
+
+Even if you don't have enough load to require an HA setup, you shouldn't write your service in a way that prevents you from running multiple copies of it. This will allow you to use rolling deployments, which make it easy to move load off one node and onto another, or to upgrade from one version of a service to the next without taking any downtime.
+
+- 8. Implement readiness and liveness checks
+
+It is common for applications to have startup time before they are able to respond to requests, for example, an API server that needs to populate in-memory data caches. Container orchestration engines need a way to check that your container is ready to serve requests. Providing a readiness check for new containers allows a rolling deployment to keep an old container running until it is no longer needed, preventing downtime. Similarly, a liveness check is a way for the orchestration engine to continue to check that the container is in a healthy state. It is up to the application creator to decide what it means for their container to be healthy, or "live". A container that is no longer live will be killed, and a new container created in its place.
+
+### Want to find out more?
+
+I'll be at the Grace Hopper Celebration of Women in Computing in October, come check out my talk: [Containerization of Applications: What, Why, and How][4]. Not headed to GHC this year? Then read on about containers, orchestration, and applications on the [OpenShift][5] and [Kubernetes][6] project sites.
+
+--------------------------------------------------------------------------------
+
+via: https://opensource.com/life/16/9/8-best-practices-building-containerized-applications
+
+作者:[Jessica Forrester ][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/jwforres
+[1]: https://docs.docker.com/engine/reference/commandline/logs/
+[2]: http://kubernetes.io/docs/getting-started-guides/logging/
+[3]: http://kubernetes.io/docs/admin/daemons/
+[4]: https://www.eiseverywhere.com/ehome/index.php?eventid=153076&tabid=351462&cid=1350690&sessionid=11443135&sessionchoice=1&
+[5]: https://www.openshift.org/
+[6]: http://kubernetes.io/
diff --git a/sources/tech/20160912 Content Security Policy, Your Future Best Friend.md b/sources/tech/20160912 Content Security Policy, Your Future Best Friend.md
new file mode 100644
index 0000000000..80f435bd4e
--- /dev/null
+++ b/sources/tech/20160912 Content Security Policy, Your Future Best Friend.md
@@ -0,0 +1,257 @@
+Content Security Policy, Your Future Best Friend
+=====
+
+A long time ago, my personal website was attacked. I do not know how it happened, but it happened. Fortunately, the damage from the attack was quite minor: A piece of JavaScript was inserted at the bottom of some pages. I updated the FTP and other credentials, cleaned up some files, and that was that.
+
+One point made me mad: At the time, there was no simple solution that could have informed me there was a problem and — more importantly — that could have protected the website’s visitors from this annoying piece of code.
+
+A solution exists now, and it is a technology that succeeds in both roles. Its name is content security policy (CSP).
+
+### What Is A CSP? Link
+
+The idea is quite simple: By sending a CSP header from a website, you are telling the browser what it is authorized to execute and what it is authorized to block.
+
+Here is an example with PHP:
+
+```
+");
+?>
+```
+
+#### SOME DIRECTIVES LINK
+
+You may define global rules or define rules related to a type of asset:
+
+```
+default-src 'self' ;
+ # self = same port, same domain name, same protocol => OK
+```
+
+The base argument is default-src: If no directive is defined for a type of asset, then the browser will use this value.
+
+```
+script-src 'self' www.google-analytics.com ;
+ # JS files on these domains => OK
+```
+
+In this example, we’ve authorized the domain name www.google-analytics.com as a source of JavaScript files to use on our website. We’ve added the keyword 'self'; if we redefined the directive script-src with another rule, it would override default-src rules.
+
+If no scheme or port is specified, then it enforces the same scheme or port from the current page. This prevents mixed content. If the page is https://example.com, then you wouldn’t be able to load http://www.google-analytics.com/file.js because it would be blocked (the scheme wouldn’t match). However, there is an exception to allow a scheme upgrade. If http://example.com tries to load https://www.google-analytics.com/file.js, then the scheme or port would be allowed to change to facilitate the scheme upgrade.
+
+```
+style-src 'self' data: ;
+ # Data-Uri in a CSS => OK
+```
+
+In this example, the keyword data: authorizes embedded content in CSS files.
+
+Under the CSP level 1 specification, you may also define rules for the following:
+
+- `img-src`
+
+valid sources of images
+
+- `connect-src`
+
+applies to XMLHttpRequest (AJAX), WebSocket or EventSource
+
+- `font-src`
+
+valid sources of fonts
+
+- `object-src`
+
+valid sources of plugins (for example, `