Merge pull request #1 from LCTT/master

更新
This commit is contained in:
Lv Feng 2016-10-03 23:16:25 +08:00 committed by GitHub
commit a9275fe09d
67 changed files with 470 additions and 455 deletions

View File

@ -0,0 +1,59 @@
什么是 Copyleft
=============
如果你在开源项目中花费了很多时间的话,你可能会看到使用的术语 “copyleft”GNU 官方网站上的释义:[中文][1][英文][2])。虽然这个术语使用比较普遍,但是很多人却不理解它。软件许可是一个至少不亚于文件编辑器和打包格式的激烈辩论的主题。专家们对 copyleft 的理解可能会充斥在好多书中,但是这篇文章可以作为你理解 copyleft 启蒙之路的起点。
### 什么是 copyright
在我们可以理解 copyleft 之前,我们必须先介绍一下 copyright 的概念。copyleft 并不是一个脱离于 copyright 的法律框架copyleft 存在于 copyright 规则中。那么,什么是 copyright
它的准确定义随着司法权的不同而不同但是其本质就是作品的作者对于作品的复制copying因此这个术语称之为 “copyright”copy right、表现等有一定的垄断性。在美国其宪法明确地阐述了美国国会的任务就是制定版权法律来“促进科学和实用艺术的进步”。
不同于以往,版权会立刻附加到作品上——而且不需要注册。默认情况下,所有的权力都是保留的。也就是说,没有经过作者的允许,没有人可以重新出版、表现或者修改作品。这种“允许”就是一种许可,可能还会附加有一定的条件。
如果希望得到对于 copyright 更彻底的介绍Coursera 上的[教育工作者和图书管理员的著作权](https://www.coursera.org/learn/copyright-for-education)是一个非常优秀的课程。
### 什么是 copyleft
先不要着急,在我们讨论 copyleft 是什么之前还有一步。首先让我们解释一下开源open source意味着什么。所有的开源许可协议按照[开源倡议的定义Open Source Inititative's definition](https://opensource.org/osd)(规定),除其他形式外,必须以源码的形式发放。获得开源软件的任何人都有权利查看并修改源码。
copyleft 许可和所谓的 “自由permissive” 许可不同的地方在于,其衍生的作品中,也需要相同的 copyleft 许可。我倾向于通过这种方式来区分两者不同: 自由permissive许可向直接下游的开发者提供了最大的自由包括能够在闭源项目中使用开源代码的权力而 copyleft 许可则向最终用户提供最大的自由。
GNU 项目为 copyleft 提供了这个简单的定义([中文][3][英文][4]):“规则就是当重新分发该程序时,你不可以添加限制来否认其他人对于[自由软件]的自由。the rule that when redistributing the program, you cannot add restrictions to deny other people the central freedoms [of free software].)”这可以被认为权威的定义,因为 [GNU 通用许可证GNU General Public LicenseGPL](https://www.gnu.org/licenses/gpl.html)的各种版本的依然是最广泛使用的 copyleft 许可。
### 软件中的 copyleft
GPL 家族是最出名的 copyleft 许可,但是它们并不是唯一的。[Mozilla 公共许可协议Mozilla Public LicenseMPL](https://www.mozilla.org/en-US/MPL/)和[Eclipse 公共许可协议( Eclipse Public LicenseEPL](https://www.eclipse.org/legal/epl-v10.html)也很出名。很多[其它的 copyleft 许可](https://tldrlegal.com/licenses/tags/Copyleft) 也有较少的采用。
就像之前章节介绍的那样,一个 copyleft 许可意味着下游的项目不可以在软件的使用上添加额外的限制。这最好用一个例子来说明。如果我写了一个名为 MyCoolProgram 的程序,并且使用 copyleft 许可来发布,你将有使用和修改它的自由。你可以发布你修改后的版本,但是你必须让你的用户拥有我给你的同样的自由。(但)如果我使用 “自由permissive” 许可,你将可以将它自由地合并到一个不提供源码的闭源软件中。
对于我的 MyCoolProgram 程序,和你必须能做什么同样重要的是你必须不能做什么。你不必用和我完全一样的许可协议,只要它们相互兼容就行(但一般的为了简单起见,下游的项目也使用相同的许可)。你不必向我贡献出你的修改,但是你这么做的话,通常被认为一个很好的形式,尤其是这些修改是 bug 修复的话。
### 非软件中的 copyleft
虽然copyleft 的概念起始于软件世界,但是它也存在于之外的世界。“做你想做的,只要你保留其他人也有做同样的事的权力”的概念是应用于文字创作、视觉艺术等方面的知识共享署名许可([中文][5][英文][6]的一个显著的特点CC BY-SA 4.0 是贡献于 Opensource.com 默认的许可,也是很多开源网站,包括 [Linux.cn][7] 在内所采用的内容许可协议)。[GNU 自由文档许可证](https://www.gnu.org/licenses/fdl.html)是另一个非软件协议中 copyleft 的例子。在非软件中使用软件协议通常不被建议。
### 我是否需要选择一种 copyleft 许可?
关于项目应该使用哪一种许可可以用已经有了成篇累牍的文章在阐述。我的建议是首先将许可列表缩小以满足你的哲学信条和项目目标。GitHub 的 [choosealicense.com](http://choosealicense.com/) 是一种查找满足你的需求的许可协议的好方法。[tl;drLegal](https://tldrlegal.com/)使用平实的语言来解释了许多常见和不常见的软件许可。而且也要考虑你的项目所在的生态系统,围绕一种特定语言和技术的项目经常使用相同或者相似的许可。如果你希望你的项目可以运行的更出色,你可能需要确保你选择的许可是兼容的。
关于更多 copyleft 的信息,请查看 [copyleft 指南](https://copyleft.org/)。
--------------------------------------------------------------------------------
via: https://opensource.com/resources/what-is-copyleft
作者:[Ben Cotton][a]
译者:[yangmingming](https://github.com/yangmingming)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://opensource.com/users/bcotton
[1]: https://www.gnu.org/licenses/copyleft.zh-cn.html
[2]: https://www.gnu.org/licenses/copyleft.en.html
[3]: https://www.gnu.org/philosophy/free-sw.zh-cn.html
[4]: https://www.gnu.org/philosophy/free-sw.en.html
[5]: https://creativecommons.org/licenses/by-sa/4.0/deed.zh
[6]: https://creativecommons.org/licenses/by-sa/4.0/
[7]: https://linux.cn/

View File

@ -0,0 +1,66 @@
零配置部署 React
========================
你想使用 [React][1] 来构建应用吗?“[入门][2]”是很容易的,可是接下来呢?
React 是一个构建用户界面的库而它只是组成一个应用的一部分。应用还有其他的部分——风格、路由器、npm 模块、ES6 代码、捆绑和更多——这就是为什么使用它们的开发者不断流失的原因。这被称为 [JavaScript 疲劳][3]。尽管存在这种复杂性,但是使用 React 的用户依旧继续增长。
社区应对这一挑战的方法是共享[模版文件][4]。这些模版文件展示出开发者们架构选择的多样性。官方的“开始入门”似乎离一个实际可用的应用程序相去甚远。
### 新的,零配置体验
受开发者来自 [Ember.js][5] 和 [Elm][6] 的经验启发Facebook 的人们想要提供一个简单、直接的方式。他们发明了一个[新的开发 React 应用的方法][10] `create-react-app`。在初始的公开版发布的三个星期以来,它已经受到了极大的社区关注(超过 8000 个 GitHub 粉丝)和支持(许多的拉取请求)。
`create-react-app` 是不同于许多过去使用模板和开发启动工具包的尝试。它的目标是零配置的[惯例-优于-配置][7],使开发者关注于他们的应用的不同之处。
零配置一个强大的附带影响是这个工具可以在后台逐步成型。零配置奠定了工具生态系统的基础,创造的自动化和喜悦的开发远远超越 React 本身。
### 将零配置部署到 Heroku 上
多亏了 create-react-app 中打下的零配置基础,零配置的目标看起来快要达到了。因为这些新的应用都使用一个公共的、默认的架构,构建的过程可以被自动化,同时可以使用智能的默认项来配置。因此,[我们创造这个社区构建包来体验在 Heroku 零配置的过程][8]。
#### 在两分钟内创造和发布 React 应用
你可以免费在 Heroku 上开始构建 React 应用。
```
npm install -g create-react-app
create-react-app my-app
cd my-app
git init
heroku create -b https://github.com/mars/create-react-app-buildpack.git
git add .
git commit -m "react-create-app on Heroku"
git push heroku master
heroku open
```
[使用构建包文档][9]亲自试试吧。
### 从零配置出发
create-react-app 非常的新(目前版本是 0.2),同时因为它的目标是简洁的开发者体验,更多高级的使用情景并不支持(或者肯定不会支持)。例如,它不支持服务端渲染或者自定义捆绑。
为了支持更好的控制create-react-app 包括了 npm run eject 命令。Eject 将所有的工具(配置文件和 package.json 依赖库)解压到应用所在的路径,因此你可以按照你心中的想法定做。一旦被弹出,你做的改变或许有必要选择一个特定的用 Node.js 或静态的构建包来布署。总是通过一个分支/拉取请求来使类似的工程改变生效因此这些改变可以轻易撤销。Heroku 的预览应用对测试发布的改变是完美的。
我们将会追踪 create-react-app 的进度,当它们可用时,同时适配构建包来支持更多的高级使用情况。发布万岁!
--------------------------------------------------------------------------------
via: https://blog.heroku.com/deploying-react-with-zero-configuration
作者:[Mars Hall][a]
译者:[zky001](https://github.com/zky001)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://blog.heroku.com/deploying-react-with-zero-configuration
[1]: https://facebook.github.io/react/
[2]: https://facebook.github.io/react/docs/getting-started.html
[3]: https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4
[4]: https://github.com/search?q=react+boilerplate
[5]: http://emberjs.com/
[6]: http://elm-lang.org/
[7]: http://rubyonrails.org/doctrine/#convention-over-configuration
[8]: https://github.com/mars/create-react-app-buildpack
[9]: https://github.com/mars/create-react-app-buildpack#usage
[10]: https://github.com/facebookincubator/create-react-app

View File

@ -0,0 +1,76 @@
Instagram 基于 Python 语言的 Web Service 效率提升之道
===============================================
Instagram 目前部署了世界上最大规模的 Django Web 框架(该框架完全使用 Python 编写)。我们最初选用 Python 是因为它久负盛名的简洁性与实用性这非常符合我们的哲学思想——“先做简单的事情”。但简洁性也会带来效率方面的折衷。Instagram 的规模在过去两年中已经翻番,并且最近已突破 5 亿用户,所以急需最大程度地提升 web 服务效率以便我们的平台能够继续顺利地扩大。在过去的一年我们已经将效率计划efficiency program提上日程并在过去的六个月我们已经能够做到无需向我们的 Django 层Django tiers添加新的容量来维持我们的用户增长。我们将在本文分享一些由我们构建的工具以及如何使用它们来优化我们的日常部署流程。
### 为何需要提升效率?
Instagram正如所有的软件受限于像服务器和数据中心能源这样的物理限制。鉴于这些限制在我们的效率计划中有两个我们希望实现的主要目标
1. Instagram 应当能够利用持续代码发布正常地提供通信服务,防止因为自然灾害、区域性网络问题等造成某一个数据中心区丢失。
2. Instagram 应当能够自由地滚动发布新产品和新功能,不必因容量而受阻。
想要实现这些目标我们意识到我们需要持续不断地监控我们的系统并与回归regressions进行战斗。
### 定义效率
Web services 的瓶颈通常在于每台服务器上可用的 CPU 时间。在这种环境下,效率就意味着利用相同的 CPU 资源完成更多的任务也就是说每秒处理更多的用户请求requests per second, RPS。当我们寻找优化方法时我们面临的第一个最大的挑战就是尝试量化我们当前的效率。到目前为止我们一直在使用“每次请求的平均 CPU 时间”来评估效率,但使用这种指标也有其固有限制:
1. **设备多样性**。使用 CPU 时间来测量 CPU 资源并非理想方案,因为它同时受到 CPU 型号与 CPU 负载的影响。
2. **请求影响数据**。测量每次请求的 CPU 资源并非理想方案因为在使用每次请求测量per-request measurement方案时添加或移除轻量级或重量级的请求也会影响到效率指标。
相对于 CPU 时间来说CPU 指令是一种更好的指标,因为对于相同的请求,它会报告相同的数字,不管 CPU 型号和 CPU 负载情况如何。我们选择使用了一种叫做“每个活动用户per active user”的指标而不是将我们所有的数据关联到每个用户请求上。我们最终采用“每个活动用户在高峰期间的 CPU 指令CPU instruction per active user during peak minute”来测量效率。我们建立好新的度量标准后下一步就是通过对 Django 的分析来更多的了解一下我们的回归。
### Django web services 分析
通过分析我们的 Django web services我们希望回答两个主要问题
1. CPU 回归会发生吗?
2. 是什么导致了 CPU 回归发生以及我们该怎样修复它?
想要回答第一个问题,我们需要追踪”每个活动用户的 CPU 指令CPU-instruction-per-active-user“指标。如果该指标增加我们就知道已经发生了一次 CPU 回归。
我们为此构建的工具叫做 Dynostats。Dynostats 利用 Django 中间件以一定的速率采样用户请求,记录关键的效率以及性能指标,例如 CPU 总指令数、端到端请求时延、花费在访问内存缓存memcache和数据库服务的时间等。另一方面每个请求都有很多可用于聚合的元数据metadata例如端点名称、HTTP 请求返回码、服务该请求的服务器名称以及请求中最新提交的哈希值hash。对于单个请求记录来说有两个方面非常强大因为我们可以在不同的维度上进行切割那将帮助我们减少任何导致 CPU 回归的原因。例如,我们可以根据它们的端点名称聚合所有请求,正如下面的时间序列图所示,从图中可以清晰地看出在特定端点上是否发生了回归。
![](https://d262ilb51hltx0.cloudfront.net/max/800/1*3iouYiAchYBwzF-v0bALMw.png)
CPU 指令对测量效率很重要——当然它们也很难获得。Python 并没有支持直接访问 CPU 硬件计数器CPU 硬件计数器是指可编程 CPU 寄存器,用于测量性能指标,例如 CPU 指令的公共库。另一方面Linux 内核提供了 `perf_event_open` 系统调用。通过 Python `ctypes` 桥接技术能够让我们调用标准 C 库的系统调用函数 `syscall`,它也为我们提供了兼容 C 的数据类型,从而可以编程硬件计数器并从它们读取数据。
使用 Dynostats我们已经可以找出 CPU 回归,并探究 CPU 回归发生的原因,例如哪个端点受到的影响最多,谁提交了真正会导致 CPU 回归的变更等。然而,当开发者收到他们的变更已经导致一次 CPU 回归发生的通知时,他们通常难以找出问题所在。如果问题很明显,那么回归可能就不会一开始就被提交!
这就是为何我们需要一个 Python 分析器,(一旦 Dynostats 发现了它)从而使开发者能够使用它找出回归发生的根本原因。不同于白手起家,我们决定对一个现成的 Python 分析器 cProfile 做适当的修改。cProfile 模块通常会提供一个统计集合来描述程序不同的部分执行时间和执行频率。我们将 cProfile 的定时器timer替换成了一个从硬件计数器读取的 CPU 指令计数器,以此取代对时间的测量。我们在采样请求后产生数据并把数据发送到数据流水线。我们也会发送一些我们在 Dynostats 所拥有的类似元数据,例如服务器名称、集群、区域、端点名称等。
在数据流水线的另一边我们创建了一个消费数据的尾随者tailer。尾随者的主要功能是解析 cProfile 的统计数据并创建能够表示 Python 函数级别的 CPU 指令的实体。如此,我们能够通过 Python 函数来聚合 CPU 指令,从而更加方便地找出是什么函数导致了 CPU 回归。
### 监控与警报机制
在 Instagram我们[每天部署 30-50 次后端服务][1]。这些部署中的任何一个都能发生 CPU 回归的问题。因为每次发生通常都包含至少一个差异diff所以找出任何回归是很容易的。我们的效率监控机制包括在每次发布前后都会在 Dynostats 中扫描 CPU 指令,并且当变更超出某个阈值时发出警告。对于长期会发生 CPU 回归的情况,我们也有一个探测器为负载最繁重的端点提供日常和每周的变更扫描。
部署新的变更并非触发一次 CPU 回归的唯一情况。在许多情况下新的功能和新的代码路径都由全局环境变量global environment variablesGEV控制。 在一个计划好的时间表上,给一部分用户发布新功能是很常见事情。我们在 Dynostats 和 cProfile 统计数据中为每个请求添加了这个信息作为额外的元数据字段。按这些字段将请求分组可以找出由全局环境变量GEV改变导致的可能的 CPU 回归问题。这让我们能够在它们对性能造成影响前就捕获到 CPU 回归。
### 接下来是什么?
Dynostats 和我们定制的 cProfile以及我们建立的支持它们的监控和警报机制能够有效地找出大多数导致 CPU 回归的元凶。这些进展已经帮助我们恢复了超过 50% 的不必要的 CPU 回归,否则我们就根本不会知道。
我们仍然还有一些可以提升的方面,并很容易将它们地加入到 Instagram 的日常部署流程中:
1. CPU 指令指标应该要比其它指标如 CPU 时间更加稳定但我们仍然观察了让我们头疼的差异。保持“信噪比signal:noise ratio”合理地低是非常重要的这样开发者们就可以集中于真实的回归上。这可以通过引入置信区间confidence intervals的概念来提升并在信噪比过高时发出警报。针对不同的端点变化的阈值也可以设置为不同值。
2. 通过更改 GEV 来探测 CPU 回归的一个限制就是我们要在 Dynostats 中手动启用这些比较的日志输出。当 GEV 的数量逐渐增加,开发了越来越多的功能,这就不便于扩展了。相反,我们能够利用一个自动化框架来调度这些比较的日志输出,并对所有的 GEV 进行遍历,然后当检查到回归时就发出警告。
3. cProfile 需要一些增强以便更好地处理封装函数以及它们的子函数。
鉴于我们在为 Instagram 的 web service 构建效率框架中所投入的工作,所以我们对于将来使用 Python 继续扩展我们的服务很有信心。我们也开始向 Python 语言本身投入更多,并且开始探索从 Python 2 转移 Python 3 之道。我们将会继续探索并做更多的实验以继续提升基础设施与开发者效率,我们期待着很快能够分享更多的经验。
本文作者 Min Ni 是 Instagram 的软件工程师。
--------------------------------------------------------------------------------
via: https://engineering.instagram.com/web-service-efficiency-at-instagram-with-python-4976d078e366#.tiakuoi4p
作者:[Min Ni][a]
译者:[ChrisLeeGit](https://github.com/chrisleegit)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://engineering.instagram.com/@InstagramEng?source=post_header_lockup
[1]: https://engineering.instagram.com/continuous-deployment-at-instagram-1e18548f01d1#.p5adp7kcz

View File

@ -0,0 +1,140 @@
15 个开源的顶级人工智能工具
=========
人工智能artificial intelligence, AI是科技研究中最热门的方向之一。像 IBM、谷歌、微软、Facebook 和亚马逊等公司都在研发上投入大量的资金、或者收购那些在机器学习、神经网络、自然语言和图像处理等领域取得了进展的初创公司。考虑到人们对此感兴趣的程度,我们将不会惊讶于斯坦福的专家在[人工智能报告][1]中得出的结论:“越来越强大的人工智能应用,可能会对我们的社会和经济产生深远的积极影响,这将出现在从现在到 2030 年的时间段里。”
在最近的一篇[文章][2]中,我们概述了 45 个十分有趣或有前途的人工智能项目。在本文中,我们将聚焦于开源的人工智能工具,详细的了解下最著名的 15 个开源人工智能项目。
![](http://www.datamation.com/imagesvr_ce/5668/00AI.jpg)
*开源人工智能*
以下这些开源人工智能应用都处于人工智能研究的最前沿。
### 1. Caffe
![](http://www.datamation.com/imagesvr_ce/8922/01Caffe.JPG)
它是由[贾扬清][3]在加州大学伯克利分校的读博时创造的,[Caffe][4] 是一个基于表达体系结构和可扩展代码的深度学习框架。使它声名鹊起的是它的速度,这让它受到研究人员和企业用户的欢迎。根据其网站所言,它可以在一天之内只用一个 NVIDIA K40 GPU 处理 6000 万多个图像。它是由伯克利视野和学习中心BVLC管理的并且由 NVIDIA 和亚马逊等公司资助来支持它的发展。
### 2. CNTK
![](http://www.datamation.com/imagesvr_ce/1232/02CNTK.JPG)
它是计算网络工具包Computational Network Toolkit的缩写[CNTK][5] 是一个微软的开源人工智能工具。不论是在单个 CPU、单个 GPU、多个 GPU 或是拥有多个 GPU 的多台机器上它都有优异的表现。微软主要用它做语音识别的研究,但是它在机器翻译、图像识别、图像字幕、文本处理、语言理解和语言建模方面都有着良好的应用。
### 3. Deeplearning4j
![](http://www.datamation.com/imagesvr_ce/2901/03Deeplearning4j.JPG)
[Deeplearning4j][6] 是一个 java 虚拟机JVM的开源深度学习库。它运行在分布式环境并且集成在 Hadoop 和 Apache Spark 中。这使它可以配置深度神经网络,并且它与 Java、Scala 和 其他 JVM 语言兼容。
这个项目是由一个叫做 Skymind 的商业公司管理的,它为这个项目提供支持、培训和一个企业的发行版。
### 4. DMTK
![](http://www.datamation.com/imagesvr_ce/7269/04DMLT.JPG)
[DMTK][7] 是分布式机器学习工具Distributed Machine Learning Toolkit的缩写和 CNTK 一样是微软的开源人工智能工具。作为设计用于大数据的应用程序它的目标是更快的训练人工智能系统。它包括三个主要组件DMTK 框架、LightLDA 主题模型算法和分布式(多义)字嵌入算法。为了证明它的速度,微软声称在一个八集群的机器上,它能够“用 100 万个主题和 1000 万个单词的词汇表(总共 10 万亿参数)训练一个主题模型,在一个文档中收集 1000 亿个符号,”。这一成绩是别的工具无法比拟的。
### 5. H20
![](http://www.datamation.com/imagesvr_ce/2890/05H2O.JPG)
相比起科研,[H2O][8] 更注重将 AI 服务于企业用户,因此 H2O 有着大量的公司客户比如第一资本金融公司、思科、Nielsen Catalina、PayPal 和泛美都是它的用户。它声称任何人都可以利用机器学习和预测分析的力量来解决业务难题。它可以用于预测建模、风险和欺诈分析、保险分析、广告技术、医疗保健和客户情报。
它有两种开源版本:标准版 H2O 和 Sparking Water 版,它被集成在 Apache Spark 中。也有付费的企业用户支持。
### 6. Mahout
![](http://www.datamation.com/imagesvr_ce/1127/06Mahout.JPG)
它是 Apache 基金会项目,[Mahout][9] 是一个开源机器学习框架。根据它的网站所言,它有着三个主要的特性:一个构建可扩展算法的编程环境、像 Spark 和 H2O 一样的预制算法工具和一个叫 Samsara 的矢量数学实验环境。使用 Mahout 的公司有 Adobe、埃森哲咨询公司、Foursquare、英特尔、领英、Twitter、雅虎和其他许多公司。其网站列了出第三方的专业支持。
### 7. MLlib
![](http://www.datamation.com/imagesvr_ce/4038/07MLlib.JPG)
由于其速度Apache Spark 成为一个最流行的大数据处理工具。[MLlib][10] 是 Spark 的可扩展机器学习库。它集成了 Hadoop 并可以与 NumPy 和 R 进行交互操作。它包括了许多机器学习算法如分类、回归、决策树、推荐、集群、主题建模、功能转换、模型评价、ML 管道架构、ML 持久、生存分析、频繁项集和序列模式挖掘、分布式线性代数和统计。
### 8. NuPIC
![](http://www.datamation.com/imagesvr_ce/839/08NuPIC.JPG)
由 [Numenta][11] 公司管理的 [NuPIC][12] 是一个基于分层暂时记忆Hierarchical Temporal Memory, HTM理论的开源人工智能项目。从本质上讲HTM 试图创建一个计算机系统来模仿人类大脑皮层。他们的目标是创造一个 “在许多认知任务上接近或者超越人类认知能力” 的机器。
除了开源许可Numenta 还提供 NuPic 的商业许可协议,并且它还提供技术专利的许可证。
### 9. OpenNN
![](http://www.datamation.com/imagesvr_ce/99/09OpenNN.JPG)
作为一个为开发者和科研人员设计的具有高级理解力的人工智能,[OpenNN][13] 是一个实现神经网络算法的 c++ 编程库。它的关键特性包括深度的架构和快速的性能。其网站上可以查到丰富的文档包括一个解释了神经网络的基本知识的入门教程。OpenNN 的付费支持由一家从事预测分析的西班牙公司 [Artelnics][14] 提供。
### 10. OpenCyc
![](http://www.datamation.com/imagesvr_ce/4168/10OpenCyc.JPG)
由 Cycorp 公司开发的 [OpenCyc][15] 提供了对 Cyc 知识库的访问和常识推理引擎。它拥有超过 239,000 个条目,大约 2,093,000 个三元组和大约 69,000 owl这是一种类似于链接到外部语义库的命名空间。它在富领域模型、语义数据集成、文本理解、特殊领域的专家系统和游戏 AI 中有着良好的应用。该公司还提供另外两个版本的 Cyc一个免费的用于科研但是不开源和一个提供给企业的但是需要付费。
### 11. Oryx 2
![](http://www.datamation.com/imagesvr_ce/9761/11Oryx2.JPG)
构建在 Apache Spark 和 Kafka 之上的 [Oryx 2][16] 是一个专门针对大规模机器学习的应用程序开发框架。它采用一个独特的三层 λ 架构。开发者可以使用 Orys 2 创建新的应用程序,另外它还拥有一些预先构建的应用程序可以用于常见的大数据任务比如协同过滤、分类、回归和聚类。大数据工具供应商 Cloudera 创造了最初的 Oryx 1 项目并且一直积极参与持续发展。
### 12. PredictionIO
![](http://www.datamation.com/imagesvr_ce/7423/12.%20PredictionIO.JPG)
今年的二月Salesforce 收购了 [PredictionIO][17],接着在七月,它将该平台和商标贡献给 Apache 基金会Apache 基金会将其列为孵育计划。所以当 Salesforce 利用 PredictionIO 技术来提升它的机器学习能力时,成效将会同步出现在开源版本中。它可以帮助用户创建带有机器学习功能的预测引擎,这可用于部署能够实时动态查询的 Web 服务。
### 13. SystemML
![](http://www.datamation.com/imagesvr_ce/6886/13SystemML.JPG)
最初由 IBM 开发, [SystemML][18] 现在是一个 Apache 大数据项目。它提供了一个高度可伸缩的平台,可以实现高等数学运算,并且它的算法用 R 或一种类似 python 的语法写成。企业已经在使用它来跟踪汽车维修客户服务、规划机场交通和连接社会媒体数据与银行客户。它可以在 Spark 或 Hadoop 上运行。
### 14. TensorFlow
![](http://www.datamation.com/imagesvr_ce/5742/14TensorFlow.JPG)
[TensorFlow][19] 是一个谷歌的开源人工智能工具。它提供了一个使用数据流图进行数值计算的库。它可以运行在多种不同的有着单或多 CPU 和 GPU 的系统,甚至可以在移动设备上运行。它拥有深厚的灵活性、真正的可移植性、自动微分功能,并且支持 Python 和 c++。它的网站拥有十分详细的教程列表来帮助开发者和研究人员沉浸于使用或扩展他的功能。
### 15. Torch
![](http://www.datamation.com/imagesvr_ce/9018/15Torch.JPG)
[Torch][20] 将自己描述为:“一个优先使用 GPU 的拥有机器学习算法广泛支持的科学计算框架”,它的特点是灵活性和速度。此外,它可以很容易的通过软件包用于机器学习、计算机视觉、信号处理、并行处理、图像、视频、音频和网络等方面。它依赖一个叫做 LuaJIT 的脚本语言,而 LuaJIT 是基于 Lua 的。
--------------------------------------------------------------------------------
via: http://www.datamation.com/open-source/slideshows/15-top-open-source-artificial-intelligence-tools.html
作者:[Cynthia Harvey][a]
译者:[Chao-zhi](https://github.com/Chao-zhi)
校对:[校对者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
[3]: http://daggerfs.com/
[4]: http://caffe.berkeleyvision.org/
[5]: https://www.cntk.ai/
[6]: http://deeplearning4j.org/
[7]: http://www.dmtk.io/
[8]: http://www.h2o.ai/
[9]: http://mahout.apache.org/
[10]: https://spark.apache.org/mllib/
[11]: http://numenta.com/
[12]: http://numenta.org/
[13]: http://www.opennn.net/
[14]: https://www.artelnics.com/
[15]: http://www.cyc.com/platform/opencyc/
[16]: http://oryx.io/
[17]: https://prediction.io/
[18]: http://systemml.apache.org/
[19]: https://www.tensorflow.org/
[20]: http://torch.ch/

View File

@ -0,0 +1,50 @@
一个漂亮的 Linux 桌面 REST 客户端Insomnia 3.0
=====
![](http://www.omgubuntu.co.uk/wp-content/uploads/2016/09/insomnia-app-screenshot.png)
正在为 Linux 桌面端找一个免费的 REST 客户端? 别睡不着觉了!试试 [Insomnia][1]。
这个应用是跨平台的,可以工作在 Linux、macOS、Windows。开发者 Gregory Schier 告诉我们他创造这个应用是为了“帮助开发者处理和 [REST API][2] 的通信”
他还说Insomnia 已经有大约10000 个活跃用户9% 使用着 Linux.
“目前来说Linux用户的反馈是非常积极的因为类似的应用反正不怎么样通常不支持 Linux。”
Insomnia 的目标是“加速你的 API 测试工作流”,通过一个简洁的接口让你组织、运行、调试 HTTP 请求。
这款应用还包含一些其他的高级功能比如 Cookie 管理、全局环境、SSL 验证和代码段生成。
由于我不是一个开发者,没有办法第一时间的评价这款应用,也没办法告诉你的它的特性或指出任何比较重大的不足之处。
但是我将这款应用告诉你让你自己决定它如果你正在寻找一个有着顺滑的用户界面的替代命令行工具比如HTTPie它可能是值得一试的。
### 下载 Linux 版 Insomnia 3.0
Insomnia 3.0 现在可以用在 Windows、macOS、Linux 上(不要和只能在 Chrome 上使用的 Insomnia v2.0 混淆)。
- [下载 Insomnia 3.0][4]
对于 Ubuntu 14.04 LTS 或更高版本,有一个安装包,它是一个跨发行版的安装包:
- [下载 Insomnia 3.0 (.AppImage)][5]
如果你想跟进这个应用的步伐,你可以在 [Twitter][6] 上关注它。
--------------------------------------------------------------------------------
via: http://www.omgubuntu.co.uk/2016/09/insomnia-3-is-free-rest-client-for-linux
作者:[JOEY-ELIJAH SNEDDON][a]
译者:[Bestony](https://github.com/Bestony)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://plus.google.com/117485690627814051450/?rel=author
[1]: http://insomnia.rest/
[2]: https://en.wikipedia.org/wiki/Representational_state_transfer
[3]: https://github.com/jkbrzt/httpie
[4]: https://insomnia.rest/download/
[5]: https://builds.insomnia.rest/downloads/linux/latest
[6]: https://twitter.com/GetInsomnia

View File

@ -1,17 +1,19 @@
如何使用 Awk 语言写脚本 - Part 13
awk 系列:如何使用 awk 语言编写脚本
====
从 Awk 系列开始直到第 12 部分,我们都是在命令行或者脚本文件写一些简短的 Awk 命令和程序。
![](http://www.tecmint.com/wp-content/uploads/2016/08/Write-Shell-Scripts-in-Awk.png)
然而 Awk 和 Shell 一样也是一个解释语言。通过从开始到现在的一系列的学习,你现在能写可以执行的 Awk 脚本了
从 awk 系列开始直到[第 12 部分][1],我们都是在命令行或者脚本文件里写一些简短的 awk 命令和程序
和写 shell 脚本差不多Awk 脚本以下面这一行开头:
然而 awk 和 shell 一样也是一个解释型语言。通过从开始到现在的一系列的学习,你现在能写可以执行的 awk 脚本了。
和写 shell 脚本差不多awk 脚本以下面这一行开头:
```
#! /path/to/awk/utility -f
```
例如在我的系统上,Awk 工具安装在 /user/bin/awk 目录,所以我的 Awk 脚本以如下内容作为开头:
例如在我的系统上,awk 工具安装在 /user/bin/awk 目录,所以我的 awk 脚本以如下内容作为开头:
```
#! /usr/bin/awk -f
@ -19,13 +21,11 @@
上面一行的解释如下:
```
#! 称为 Shebang指明使用那个解释器来执行脚本中的命令
/usr/bin/awk –解释器
-f 解释器选项,用来指定读取的程序文件
```
- `#!` ,称为[释伴Shebang][2],指明使用那个解释器来执行脚本中的命令
- `/usr/bin/awk` ,即解释器
- `-f` ,解释器选项,用来指定读取的程序文件
说是这么说,现在从下面的简单例子开始,让我们深入研究一些可执行的 Awk 脚本。使用你最喜欢的编辑器创建一个新文件,像下面这样:
说是这么说,现在从下面的简单例子开始,让我们深入研究一些可执行的 awk 脚本。使用你最喜欢的编辑器创建一个新文件,像下面这样:
```
$ vi script.awk
@ -35,7 +35,7 @@ $ vi script.awk
```
#!/usr/bin/awk -f
BEGIN { printf "%s\n","Writing my first Awk executable script!" }
BEGIN { printf "%s\n","Writing my first awk executable script!" }
```
保存文件后退出,然后执行下面命令,使得脚本可执行:
@ -53,10 +53,10 @@ $ ./script.awk
输出样例:
```
Writing my first Awk executable script!
Writing my first awk executable script!
```
一个严格的程序员一定会问:“注释呢?”。是的,你可以在 Awk 脚本中包含注释。在代码中写注释是一种良好的编程习惯。
一个严格的程序员一定会问:“注释呢?”。是的,你可以在 awk 脚本中包含注释。在代码中写注释是一种良好的编程习惯。
它有利于其它程序员阅读你的代码,理解程序文件或者脚本中每一部分的功能。
@ -64,20 +64,20 @@ Writing my first Awk executable script!
```
#!/usr/bin/awk -f
#This is how to write a comment in Awk
#using the BEGIN special pattern to print a sentence
BEGIN { printf "%s\n","Writing my first Awk executable script!" }
# 这是如何在 awk 中写注释的示例
# 使用特殊模式 BEGIN 来输出一句话
BEGIN { printf "%s\n","Writing my first awk executable script!" }
```
接下来我们看一个读文件的例子。我们想从帐号文件 /etc/passwd 中查找一个叫 aaronkilik 的用户,然后像下面这样打印用户名,用户的 ID用户的 GID (译者注:组 ID)
接下来我们看一个读文件的例子。我们想从帐号文件 /etc/passwd 中查找一个叫 aaronkilik 的用户,然后像下面这样打印用户名、用户的 ID、用户的 GID LCTT译注组 ID
下面是我们脚本文件的内容,文件名为 second.awk。
```
#! /usr/bin/awk -f
#use BEGIN sepecial character to set FS built-in variable
# 使用 BEGIN 指定字符来设定 FS 内置变量
BEGIN { FS=":" }
#search for username: aaronkilik and print account details
# 搜索用户名 aaronkilik 并输出账号细节
/aaronkilik/ { print "Username :",$1,"User ID :",$3,"User GID :",$4 }
```
@ -88,13 +88,13 @@ $ chmod +x second.awk
$ ./second.awk /etc/passwd
```
输出样例
输出样例
```
Username : aaronkilik User ID : 1000 User GID : 1000
```
在下面最后一个例子中,我们将使用 do while 语句来打印数字 0-10
在下面最后一个例子中,我们将使用 `do while` 语句来打印数字 0-10
下面是我们脚本文件的内容,文件名为 do.awk。
@ -138,22 +138,24 @@ $ ./do.awk
### 总结
我们已经到达这个精彩的 Awk 系列的最后,我希望你从整个 13 部分中学到了很多知识,把这些当作你 Awk 编程语言的入门指导。
我们已经到达这个精彩的 awk 系列的最后,我希望你从整个 13 个章节中学到了很多知识,把这些当作你 awk 编程语言的入门指导。
我一开始就提到过,Awk 是一个完整的文本处理语言,所以你可以学习很多 Awk 编程语言的其它方面,例如环境变量,数组,函数(内置的或者用户自定义的),等等。
我一开始就提到过,awk 是一个完整的文本处理语言,所以你可以学习很多 awk 编程语言的其它方面,例如环境变量、数组、函数(内置的或者用户自定义的),等等。
Awk 编程还有其它内容需要学习和掌握,所以在文末我提供了一些重要的在线资源的链接,你可以利用他们拓展你的 Awk 编程技能。但这不是必须的,你也可以阅读一些关于 Awk 的书籍。
awk 编程还有其它内容需要学习和掌握,所以在文末我提供了一些重要的在线资源的链接,你可以利用他们拓展你的 awk 编程技能。但这不是必须的,你也可以阅读一些关于 awk 的书籍。
如果你任何想要分享的想法或者问题,在下面留言。记得保持关注 Tecmint,会有更多的精彩内容。
如果你任何想要分享的想法或者问题,在下面留言。记得保持关注我们,会有更多的精彩内容。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/write-shell-scripts-in-awk-programming/
作者:[Aaron Kili |][a]
作者:[Aaron Kili][a]
译者:[chunyang-wen](https://github.com/chunyang-wen)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: http://www.tecmint.com/author/aaronkili/
[1]: https://linux.cn/article-7723-1.html
[2]: https://linux.cn/article-3664-1.html

View File

@ -1,7 +1,7 @@
如何使用 Awk 中的流控制语句 - part12
awk 系列:如何在 awk 中使用流控制语句
====
回顾从 Awk 系列最开始到现在我们所讲的所有关于 Awk 的例子,你会发现不同例子中的所有命令都是顺序执行的,也就是一个接一个的执行。但是在某些场景下,我们可能希望根据一些条件来执行一些文本过滤,这个时候流控制语句就派上用场了。
回顾从 Awk 系列,从最开始到现在我们所讲的所有关于 Awk 的例子,你会发现不同例子中的所有命令都是顺序执行的,也就是一个接一个的执行。但是在某些场景下,我们可能希望根据一些条件来执行一些[文本过滤操作][1],这个时候流控制语句就派上用场了。
![](http://www.tecmint.com/wp-content/uploads/2016/08/Use-Flow-Control-Statements-in-Awk.png)
@ -17,7 +17,7 @@ Awk 包含很多的流控制语句,包括:
- nextfile 语句
- exit 语句
但是在这个系列中我们将详细解释if-elseforwhiledo-while 语句。关于如何使用 next 语句,如果你们记得的话,我们已经在 Awk 系列的第6部分介绍过了。
但是在这个系列中,我们将详细解释:`if-else``for``while``do-while` 语句。关于如何使用 `next` 语句,如果你们记得的话,我们已经在 [Awk 系列的第6部分][2]介绍过了。
### 1. if-else 语句
@ -36,7 +36,7 @@ actions2
当 condition1 满足时,意味着它的值是 true此时会执行 actions1if 语句退出否则译注condition1 为 false执行 actions2。
if 语句可以扩展成如下的 if-else_if-else
if 语句可以扩展成如下的 `if-else_if-else`
```
if (condition1){
@ -52,7 +52,7 @@ actions3
上面例子中,如果 condition1 为 true执行 actions1if 语句退出;否则对 condition2 求值,如果值为 true那么执行 actions2if 语句退出。然而如果 condition2 是 false那么会执行 actions3 退出 if语句。
下面是一个使用 if 语句的例子,我们有一个存储用户和他们年龄列表的文件users.txt。
下面是一个使用 if 语句的例子,我们有一个存储用户和他们年龄列表的文件 users.txt。
我们想要打印用户的名字以及他们的年龄是大于 25 还是小于 25。
@ -85,7 +85,7 @@ $ chmod +x test.sh
$ ./test.sh
```
输出样例
输出样例
```
User Sarah L is more than 25 years old
@ -96,7 +96,7 @@ User Kili Seth is more than 25 years old
### 2. for 语句
如果你想循环执行一些 Awk 命令,那么 for 语句十分合适,它的语法如下:
如果你想循环执行一些 Awk 命令,那么 `for` 语句十分合适,它的语法如下:
这里只是简单的定义一个计数器来控制循环的执行。首先你要初始化那个计数器 counter然后根据某个条件判断是否执行如果该条件为 true 则执行,最后增加计数器。当计数器不满足条件时则终止循环。
@ -106,7 +106,7 @@ actions
}
```
下面的 Awk 命令利用打印数字 0-10 来说明 for 语句是怎么工作的。
下面的 Awk 命令利用打印数字 0-10 来说明 `for` 语句是怎么工作的。
```
$ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
@ -130,7 +130,7 @@ $ awk 'BEGIN{ for(counter=0;counter<=10;counter++){ print counter} }'
### 3. while 语句
传统的 while 语句语法如下:
传统的 `while` 语句语法如下:
```
while ( condition ) {
@ -138,7 +138,7 @@ actions
}
```
上面的 condition 是 Awk 表达式actions 是当 condition 为 true 时执行的 Awk命令。
上面的 condition 是 Awk 表达式actions 是当 condition 为 true 时执行的 Awk 命令。
下面是仍然用打印数字 0-10 来解释 while 语句的用法:
@ -159,8 +159,7 @@ $ chmod +x test.sh
$ ./test.sh
```
输出样例
Sample Output
输出样例:
```
0
@ -178,7 +177,7 @@ Sample Output
### 4. do-while 语句
这个是上面的 while 语句语法的一个变化,其语法如下:
这个是上面的 `while` 语句语法的一个变化,其语法如下:
```
do {
@ -187,7 +186,7 @@ actions
while (condition)
```
二者的区别是,在 do-while 中Awk 的命令在条件求值前先执行。我们使用 while 语句中同样的例子来解释 do-while 的使用,将 test.sh 脚本中的 Awk 命令做如下更改:
二者的区别是,在 `do-while`Awk 的命令在条件求值前先执行。我们使用 `while` 语句中同样的例子来解释 `do-while` 的使用,将 test.sh 脚本中的 Awk 命令做如下更改:
```
#!/bin/bash
@ -238,10 +237,11 @@ via: http://www.tecmint.com/use-flow-control-statements-with-awk-command/
作者:[Aaron Kili][a]
译者:[chunyang-wen](https://github.com/chunyang-wen)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: http://www.tecmint.com/author/aaronkili/
[1]: http://www.tecmint.com/use-linux-awk-command-to-filter-text-string-in-files/
[2]: http://www.tecmint.com/use-next-command-with-awk-in-linux/

View File

@ -1,3 +1,10 @@
Translating by WangYueScream
============================================================================
Should Smartphones Do Away with the Headphone Jack? Here Are Our Thoughts
====

View File

@ -1,3 +1,5 @@
Translating by Yinr
The cost of small modules
====

View File

@ -1,3 +1,4 @@
ucasFL 翻译中
Using webpack with the Amazon Cognito Identity SDK for JavaScript
=====

View File

@ -1,3 +1,4 @@
wcnnbdk1 Translating
Content Security Policy, Your Future Best Friend
=====

View File

@ -1,3 +1,5 @@
translating by Chao-zhi
4 big ways companies benefit from having open source program offices
====

View File

@ -1,53 +0,0 @@
translating by Bestony
Insomnia 3.0 Is a Slick Desktop REST Client for Linux
=====
![](http://www.omgubuntu.co.uk/wp-content/uploads/2016/09/insomnia-app-screenshot.png)
Looking for a free REST client for the Linux desktop? Dont lose sleep: get [Insomnia][1].
The app is cross-platform and works on Linux, macOS and Windows. Its developer, Gregory Schier, told us that he created the app “to help developers communicate with [REST APIs][2].”
He also told that Insomnia already has around 10,000 active users — 9% of which are on Linux.
“So far, the feedback from Linux users has been very positive because similar applications (not nice ones anyway) arent usually available for Linux.”
Insomnia aims to speed up your API testing workflow, by letting you organise, run and debug HTTP requests through a cleanly designed interface.
The app also includes advanced features like cookie management, global environments, SSL validation, and code snippet generation.
As I am not a developer I cant evaluate this app first-hand, nor tell you why it rocks or highlight any major feature deficiencies.
But I thought Id bring the app to your attention and let you decide for yourself. If youve been hunting for a slickly designed GUI alternative to command-line tools like HTTPie, it might be well worth giving it a whirl.
### Download Insomnia 3.0 for Linux
Insomnia 3.0 (not to be confused with Insomnia v2.0 which is only available on Chrome) is available to download for Windows, macOS and Linux.
[Download Insomnia 3.0][4]
An installer is available for Ubuntu 14.04 LTS and up, as is a cross-distro AppImage:
[Download Insomnia 3.0 (.AppImage)][5]
If you want to keep pace with development of the app you can follow [Insomnia on Twitter][6].
--------------------------------------------------------------------------------
via: http://www.omgubuntu.co.uk/2016/09/insomnia-3-is-free-rest-client-for-linux?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+d0od+%28OMG%21+Ubuntu%21%29
作者:[JOEY-ELIJAH SNEDDON ][a]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://plus.google.com/117485690627814051450/?rel=author
[1]: http://insomnia.rest/
[2]: https://en.wikipedia.org/wiki/Representational_state_transfer
[3]: https://github.com/jkbrzt/httpie
[4]: https://insomnia.rest/download/
[5]: https://builds.insomnia.rest/downloads/linux/latest
[6]: https://twitter.com/GetInsomnia

View File

@ -1,78 +0,0 @@
Instagram Web 服务效率与 Python
===============================================
Instagram 目前是世界上最大规模部署 Django web 框架(该框架完全使用 Python 编写)的主角。我们最初选用 Python 是因为它久负盛名的简洁性与实用性这非常符合我们的哲学思想——“先做简单的事情”。但简洁性也会带来效率方面的折衷。Instagram 的规模在过去两年中已经翻番,并且最近已突破 5 亿用户,所以急需最大程度地提升 web 服务效率以便我们的平台能够继续顺利地扩大。在过去的一年我们已经将效率计划efficiency program提上日程并在过去的六个月我们已经能够做到无需向我们的 Django 层Django tiers添加新的容量来维护我们的用户增长。我们将在本文分享一些由我们构建的工具以及如何使用它们来优化我们的日常部署流程。
### 为何需要提升效率?
Instagram正如所有的软件受限于像服务器和数据中心能源这样的样物理限制。鉴于这些限制在我们的效率计划中有两个我们希望实现的主要目标
1. Instagram 应当能够利用持续代码发布提供正常地通信服务,防止因为自然灾害、区域性网络问题等造成某一个数据中心区丢失。
2. Instagram 应当能够自由地滚动发布新产品和新功能,不必因容量而受阻。
想要实现这些目标我们意识到我们需要持续不断地监控我们的系统并在战斗中回归battle regression
### 定义效率
Web 服务器的瓶颈通常在于每台服务器上可用的 CPU 时间。在这种环境下,效率就意味着利用相同的 CPU 资源完成更多的任务也就是说每秒处理更多的用户请求requests per second, RPS。当我们寻找优化方法时我们面临的第一个最大的挑战就是尝试量化我们当前的效率。到目前为止我们一直在使用“每次请求的平均 CPU 时间”来评估效率,但使用这种指标也有其固有限制:
1. 设备多样性。使用 CPU 时间来测量 CPU 资源并非理想方案,因为它同时受到 CPU 模型与 CPU 负载影响。
1. 请求影响数据。测量每次请求的 CPU 资源并非理想方案因为在使用每次请求测量per-request measurement方案时添加或移除轻量级或重量级的请求也会影响到效率指标。
相对于 CPU 时间来说CPU 指令是一种更好的指标,因为对于相同的请求,它会报告相同的数字,不管 CPU 模型和 CPU 负载情况如何。我们选择使用了一种叫做”每个活动用户per active user“的指标而不是将我们所有的数据链接到每个用户请求上。我们最终采用”每个活动用户在高峰期间的 CPU 指令CPU instruction per active user during peak minute“来测量效率。我们建立好新的度量标准后下一步就是通过对 Django 的分析来学习更多关于我们的回归our regressions
### Django 服务分析
通过分析我们的 Django web 服务,我们希望回答两个主要问题:
1. 一次 CPU 回归会发生吗?
2. 是什么导致了 CPU 回归问题发生以及我们该怎样修复它?
想要回答第一个问题,我们需要追踪”每个活动用户的 CPU 指令CPU-instruction-per-active-user“指标。如果该指标增加我们就知道一次 CPU 回归已经发生了。
我们为此构建的工具叫做 Dynostats。Dynostats 利用 Django 中间件以一定的速率采样用户请求,记录键效率以及性能指标,例如 CPU 总指令数、端到端请求时延、花费在访问内存缓存memcache和数据库服务的时间等。另一方面每个请求都有很多可用于聚合的元数据metadata例如端点名称、HTTP 请求返回码、服务该请求的服务器名称以及请求中最新提交的哈希值hash。对于单个请求记录来说有两个方面非常强大因为我们可以在不同的维度上进行切割那将帮助我们减少任何导致 CPU 回归的原因。例如,我们可以根据他们的端点名称聚合所有请求,正如下面的时间序列图所示,从图中可以清晰地看出在特定端点上是否发生了回归。
![](https://d262ilb51hltx0.cloudfront.net/max/800/1*3iouYiAchYBwzF-v0bALMw.png)
CPU 指令对测量效率很重要——当然它们也很难获得。Python 并没有支持直接访问 CPU 硬件计数器CPU 硬件计数器是指可编程 CPU 寄存器,用于测量性能指标,例如 CPU 指令的公共库。另一方面Linux 内核提供了 `perf_event_open` 系统调用。通过 Python ctypes 桥接技术能够让我们调用标准 C 库编写的系统调用函数,它也为我们提供了兼容 C 的数据类型,从而可以编程硬件计数器并从它们读取数据。
使用 Dynostats我们已经可以找出 CPU 回归,并探究 CPU 回归发生的原因,例如哪个端点受到的影响最多,谁提交了真正会导致 CPU 回归的变更等。然而,当开发者收到他们的变更已经导致一次 CPU 回归发生的通知时,他们通常难以找出问题所在。如果问题很明显,那么回归可能就不会一开始就被提交!
这就是为何我们需要一个 Python 分析器,从而使开发者能够使用它找出回归(一旦 Dynostats 发现了它)发生的根本原因。不同于白手起家,我们决定对一个现成的 Python 分析器 cProfile 做适当的修改。cProfile 模块通常会提供一个统计集合来描述程序不同的部分执行时间和执行频率。我们将 cProfile 的定时器timer替换成了一个从硬件计数器读取的 CPU 指令计数器,以此取代对时间的测量。我们在采样请求后产生数据并把数据发送到数据流水线。我们也会发送一些我们在 Dynostats 所拥有的类似元数据,例如服务器名称、集群、区域、端点名称等。
在数据流水线的另一边我们创建了一个消费数据的尾随者tailer。尾随者的主要功能是解析 cProfile 的统计数据并创建能够表示 Python 函数级别的 CPU 指令的实体。如此,我们能够通过 Python 函数来聚集 CPU 指令,从而更加方便地找出是什么函数导致了 CPU 回归。
### 监控与警报机制
在 Instagram我们 [每天部署 30-50 次后端服务][1]。这些部署中的任何一个都能发生 CPU 回归的问题。因为每次发生通常都包含至少一个区别diff所以找出任何回归是很容易的。我们的效率监控机制包含在每次发布前后都会在 Dynostats 中哦了过扫描 CPU 指令,并且当变更超出某个阈值时发出警告。对于长期会发生 CPU 回归的情况,我们也有一个探测器为负载最繁重的端点提供日常和每周的变更扫描。
部署新的变更并非触发一次 CPU 回归的唯一情况。在许多情况下新的功能和新的代码路径都由全局环境变量global environment variables, GEV控制。 在一个计划好的时间表上,给一个用户子集发布新功能有一些非常一般的实践。我们在 Dynostats 和 cProfile 统计数据中为每个请求添加了这个信息作为额外的元数据字段。来自这些字段的组请求通过转变全局环境变量GEV从而暴露出可能的 CPU 回归问题。这让我们能够在它们对性能造成影响前就捕获到 CPU 回归。
### 接下来是什么?
Dynostats 和我们定制的 cProfile以及我们建立去支持它们的监控和警报机制能够有效地找出大多数导致 CPU 回归的元凶。这些进展已经帮助我们恢复了超过 50% 的不必要的 CPU 回归,否则我们就根本不会知道。
我们仍然还有一些可以提升的方面并可以更加便捷将它们地加入到 Instagram 的日常部署流程中:
1. CPU 指令指标应该要比其它指标如 CPU 时间更加稳定但我们仍然观察了让我们头疼的差异。保持信号“信噪比noise ratio”合理地低是非常重要的这样开发者们就可以集中于真实的回归上。这可以通过引入置信区间confidence intervals的概念来提升并在信噪比过高时发出警报。针对不同的端点变化的阈值也可以设置为不同值。
2. 通过更改 GEV 来探测 CPU 回归的一个限制就是我们要在 Dynostats 中手动启用这些比较的日志输出。当 GEV 逐渐增加,越来越多的功能被开发出来,这就不便于扩展了。
作为替代,我们能够利用一个自动化框架来调度这些比较的日志输出,并对所有的 GEV 进行遍历,然后当检查到回归时就发出警告。
3. cProfile 需要一些增强以便更好地处理装饰器函数以及它们的子函数。
鉴于我们在为 Instagram 的 web 服务构建效率框架中所投入的工作,所以我们对于将来使用 Python 继续扩展我们的服务很有信心。
我们也开始向 Python 语言自身投入更多,并且开始探索从 Python 2 转移 Python 3 之道。我们将会继续探索并做更多的实验以继续提升基础设施与开发者效率,我们期待着很快能够分享更多的经验。
--------------------------------------------------------------------------------
via: https://engineering.instagram.com/web-service-efficiency-at-instagram-with-python-4976d078e366#.tiakuoi4p
作者:[Min Ni][a]
译者:[ChrisLeeGit](https://github.com/chrisleegit)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://engineering.instagram.com/@InstagramEng?source=post_header_lockup
[1]: https://engineering.instagram.com/continuous-deployment-at-instagram-1e18548f01d1#.p5adp7kcz

View File

@ -1,54 +0,0 @@
copyleft 是什么?
=============
如果你在开源项目中花费很多时间的话,你可能会看到使用的术语 “copyleft”。虽然这个术语使用比较普遍但是很多人却不理解它。软件许可是一个至少不亚于文件编辑器和打包格式的激烈辩论的学科。专家的理解可能会充斥在好多书中但是这篇文章可以作为你理解 copyleft 道路的起点。
## 什么是 copyright
在我们可以理解 copyleft 之前,我们必须先介绍一下 copyright 的概念。copyleft 并不是一个脱离于 copyright 的独立的法律框架copyleft 存在于 copyright 规则中。那么,什么是 copyright
准确的定义随着地域的不同而不同,但是其本质就是:作品的作者对于作品的仿制【注:英文为 copying】因此成为 “copyright”、性能等有有限的垄断权。在美国宪法明确地阐述了美国国会的任务就是制定版权法律来“促进科学和实用艺术的进步”。
不同于以往,版权会立马附加到作品上——而且不需要注册。默认的,所有的权力都是保留的。也就是说,没有经过作者的允许,没有人可以出版、执行或者修改作品。这种允许就是一种许可,可能还会附加一定的条件。
如果希望得到对于 copyright 更彻底的介绍Coursera 上的[教育工作者和图书管理员的著作权](https://www.coursera.org/learn/copyright-for-education)是一个非常优秀的课程。
## 什么是 copyleft
先不要着急,在我们讨论 copyleft 是什么之前,还有一步。首先,让我们解释一下开源意味着什么。所有的开源许可协议,通过[开源 Inititative ](https://opensource.org/osd)定义,除其他形式外,必须以源码的形式发放。获得源码的任何人都有权利查看并修改源码。
copyleft 许可和所谓的 “permissive” 许可不同的地方在于,其衍生的作品中,也需要相同的 copyleft 许可。我倾向于通过这种方式来讨论两者不同: permissive 许可向直接下游的开发者提供了最大的自由(包括闭源项目中使用开源代码的权力),而 copyleft 许可则向最终用户提供最大的自由。
GNU 项目为 copyleft 提供了这个[简单的定义](https://www.gnu.org/philosophy/free-sw.en.html):规则就是当重新编辑程序时,你不可以添加限制来拒绝其他人对于[免费软件]的自由。这可以被认为典型的定义,自从不同版本的 GNU 通用许可证GPL依然是最广泛使用的 copyleft 许可。
## 软件中的 Copyleft
GPL 家族是最出名的 copyleft 许可,但是它们并不是唯一的。[Mozilla 公共许可协议]和[Eclipse 公共许可协议]也很出名。很多[其他的 copyleft 许可](https://tldrlegal.com/licenses/tags/Copyleft) 则存在于很小的脚注那儿。
就像之前章节介绍的那样,一个 copyleft 许可意味着下游的项目不可以在软件的使用上添加额外的限制。这最好用一个例子来说明。如果我写了一个很酷的程序,并且使用 copyleft 许可来发布,你将有使用和修改它的自由。你可以发布你修改后的版本,但是你必须让你的用户有我给你同样的自由。如果我使用 “permissive” 许可,你将可以自由的合并到一个不提供源码的软件中。
对于我的很酷的程序和你必须要做什么同样重要的是你必须不能做什么。你不必用和我完全一样的许可协议只要它们相互兼容就行一般的为了简单起见下游的项目使用相同的许可。你不必向我共享出你的修改但是你这么做的话通常被认为一个很好的形式尤其是一些修改是为了bug的修复。
## 非软件中的 Copyleft
虽然copyleft 起始于软件世界但是它也存在之外的世界。“做你想做的只要你保留其他人也有做同样的事的权力”的概念是应用于文字创作、视觉艺术等的知识共享署名许可的一个显著的特点CC BY-SA 4.0 是贡献于 Opensource.com 默认的许可)。[GNU 自由文档许可证](https://www.gnu.org/licenses/fdl.html)是另一个非软件协议中 copyleft 的例子。在非软件中使用软件协议通常不被建议。
## 我是否需要选择一种 copyleft 许可?
文章可以并且已经写一个项目应该使用哪一种许可。我的建议是首先缩小满足你项目的哲学和目标的许可列表。GitHub 的[choosealicense.com](http://choosealicense.com/) 是一种查找满足你的需求的许可协议的好方法。[tldrLegal](https://tldrlegal.com/)使用纯语言说明许多相同和不同的软件许可。而且研究了你的项目所在的生态系统。围绕一种特定语言和技术的项目经常使用相同或者相似的许可。如果你希望你的项目可以运行的更出色,你可能需要确保你选择的许可是兼容的。
关于更多 copyleft 的信息,请查看 [copyleft 指南](https://copyleft.org/)。
--------------------------------------------------------------------------------
via: http://linoxide.com/firewall/pfsense-setup-basic-configuration/
作者:[Ben Cotton][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/bcotton

View File

@ -1,74 +0,0 @@
使用Zero配置开发React
========================
你想使用[React][1]来构建应用吗?"[入门][2]"是很容易的,可是接下来呢?
React是一个构建用户界面的库用户界面是组成一个应用的一部分。取决于所有其他的部分风格路由器npm模块ES6代码捆绑和更多然后指出如何使用它们对开发者来说是很浪费的。
这被称为[JavaScript疲劳][3]。尽管存在这种复杂性但是使用React的用户依旧继续增长。
社区应对这一挑战的方法是共享样板文件。这些[样板文件][4]展示出架构师必须在缤纷的选项中做出选择。
官方的“开始入门”似乎是离现实的一个可操作的应用程序如此远。
### 新的Zero-configuration体验
由[Ember.js][5]和[Elm][6]有凝聚力的开发经验的启发,Facebook的人们想要提供一个简单直接的方式。他们发明了一个新的开发React应用的方法`create-react-app`。在初始的公开版发布的三个星期以来,它已经收到了极大的社区关注(超过8,000个GitHub梦想家)和支持(许多的拉请求)。
`create-react-app`是不同意许多过去使用模板和开发启动工具包的尝试。它的目标是零配置[[惯例-优于-配置]][7],使开发者关注于他们的应用的不同之处。
zero configuration一个强大的附带影响是这个工具可以在后台逐步成型。零配置奠定了工具生态系统的基础创造的自动化和喜悦的开发远远超越React本身。
### 将Zero-configuration部署到Heroku上
多亏了create-react-app的zero-config功能zero-config的点子看起来才快要达到了。因为这些新的应用都使用一个公共的默认的架构构建的过程可以被自动化同时可以使用智能的默认项来配置。因此[我们创造这个社区构建包来体验在Heroku零配置的过程][8]。
#### 在两分钟内创造和发布React应用
你可以在Heroku上免费开始构建React应用。
```
npm install -g create-react-app
create-react-app my-app
cd my-app
git init
heroku create -b https://github.com/mars/create-react-app-buildpack.git
git add .
git commit -m "react-create-app on Heroku"
git push heroku master
heroku open
```
[使用构建包文档][9]亲自试试吧。
### 从零配置出发
create-react-app是非常的新(目前版本是0.2)同时因为它的目标是简洁的开发者体验,更多高级的使用情景并不支持(或者许多从来不被支持)。例如,它不支持服务端渲染或者自定义捆绑。
为了支持更好的控制create-react-app包括了npm run eject命令。Eject将所有的工具(配置文件和package.json依赖库)解压到应用所在的路径因此你可以按照你心中的想法定做。一旦被弹出你做的改变或许有必要选择一个特定的用Node.js和或静态的构建包来布署。总通过一个分支/拉请求来使类似的工程改变生效,因此这些改变可以轻易撤销。Heroku的预览应用对测试发布的改变是完美的。
我们将会追踪create-react-app的进度同时适配构建包来支持更多的高级使用情况当这些是可得到之时。发布万岁
--------------------------------------------------------------------------------
via: https://blog.heroku.com/deploying-react-with-zero-configuration?c=7013A000000NnBFQA0&utm_campaign=Display%20-%20Endemic%20-Cooper%20-Node%20-%20Blog%20-%20Zero-Configuration&utm_medium=display&utm_source=cooperpress&utm_content=blog&utm_term=node
作者:[Mars Hall][a]
译者:[译者ID](https://github.com/zky001)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://blog.heroku.com/deploying-react-with-zero-configuration?c=7013A000000NnBFQA0&utm_campaign=Display%20-%20Endemic%20-Cooper%20-Node%20-%20Blog%20-%20Zero-Configuration&utm_medium=display&utm_source=cooperpress&utm_content=blog&utm_term=node
[1]: https://facebook.github.io/react/
[2]: https://facebook.github.io/react/docs/getting-started.html
[3]: https://medium.com/@ericclemmons/javascript-fatigue-48d4011b6fc4
[4]: https://github.com/search?q=react+boilerplate
[5]: http://emberjs.com/
[6]: http://elm-lang.org/
[7]: http://rubyonrails.org/doctrine/#convention-over-configuration
[8]: https://github.com/mars/create-react-app-buildpack
[9]: https://github.com/mars/create-react-app-buildpack#usage

View File

@ -1,126 +0,0 @@
排名前 15 的开源人工智能工具
====
人工智能artificial intelligence, AI是科技研究中最热门的方向之一。像 IBM、谷歌、微软、Facebook 和 亚马逊等公司都在研发上投入大量的资金、或者收购那些在机器学习、神经网络、自然语言和图像处理等领域取得了进展的初创公司。考虑到人们对此感兴趣的程度,我们将不会惊讶于斯坦福的专家在[人工智能报告][1]中得出的结论“越来越强大的人工智能应用可能会对我们的社会和经济产生深远的积极影响这将出现在从现在到2030年的时间段里。”
在最近的一篇[文章][2]中我们概述了45个十分有趣或有前途的人工智能项目。在本文中我们将聚焦于开源的人工智能工具详细的了解下最著名的15个开源人工智能项目。
![](http://www.datamation.com/imagesvr_ce/5668/00AI.jpg)
开源人工智能
以下这些开源人工智能应用都处于人工智能研究的最前沿。
![](http://www.datamation.com/imagesvr_ce/8922/01Caffe.JPG)
### 1. Caffe
它是由[贾扬清][3]在加州大学伯克利分校的读博时创造的Caffe 是一个基于表达体系结构和可扩展代码的深度学习框架。使它声名鹊起的是它的速度,这让它受到研究人员和企业用户的欢迎。根据其网站所言,它可以在一天之内处理 6000 万多个图像而只用一个 NVIDIA K40 GPU。它是由伯克利视野和学习中心BVLC管理的并且由 NVIDIA 和亚马逊等公司资助来支持它的发展。
![](http://www.datamation.com/imagesvr_ce/1232/02CNTK.JPG)
### 2. CNTK
计算网络工具包Computational Network Toolkit的缩写CNIK 是一个微软的开源人工智能工具。不论是在单个 CPU、单个 GPU、多个 GPU 或是拥有多个 GPUs 的多台机器上它都有优异的表现。微软主要用它做语音识别的研究,但是它在机器翻译、图像识别、图像字幕、文本处理、语言理解和语言建模方面都有着良好的应用。
![](http://www.datamation.com/imagesvr_ce/2901/03Deeplearning4j.JPG)
### 3. Deeplearning4j
Deeplearning4j 是一个 java 虚拟机JVM的开源深度学习库。它运行在分布式环境并且集成在 Hadoop 和 Apache Spark 中。这使它可以配置深度神经网络,并且它与 Java、Scala 和 其他 JVM 语言兼容。
这个项目是由一个叫做 Skymind 的商业公司管理的,它为这个项目提供支持、培训和一个企业的发行版。
![](http://www.datamation.com/imagesvr_ce/7269/04DMLT.JPG)
### 4. Distributed Machine Learning Toolkit分布式机器学习工具
和 CNTK 一样分布式机器学习工具Distributed Machine Learning Toolkit, DMTK是微软的开源人工智能工具。作为设计用于大数据的应用程序它的目标是更快的训练人工智能系统。它包括三个主要组件DMTK 框架、LightLDA 主题模型算法和分布式(多义)字嵌入算法。为了证明它的速度,微软声称在一个 8 集群的机器上,他能够 “用 100 万个主题和 1000 万个单词的词汇表(总共 10 万亿参数)训练一个主题模型,在一个文档中收集 1000 亿个符号,”。这一成绩是别的工具无法比拟的。
![](http://www.datamation.com/imagesvr_ce/2890/05H2O.JPG)
### 5. H20
相比起科研H2O 更注重将 AI 服务于企业用户,因此 H2O 有着大量的公司客户比如第一资本金融公司、思科、Nielsen Catalina、PayPal 和泛美都是他的用户。它声称任何人都可以利用机器学习和预测分析的力量来解决业务难题。它可以用于预测建模、风险和欺诈分析、保险分析、广告技术、医疗保健和客户情报。
它有两种开源版本:标准版 H2O 和 Sparking Water 版,他被集成在 Apache Spark 中。也有付费的企业用户支持。
![](http://www.datamation.com/imagesvr_ce/1127/06Mahout.JPG)
### 6. Mahout
它是 Apache 基金项目,是一个开源机器学习框架。根据它的网站所言,它有着三个主要的特性:一个构建可扩展算法的编程环境、像 Spark 和 H2O 一样的预制算法工具和一个叫 Samsara 的矢量数学实验环境。使用 Mahout 的公司有 Adobe、埃森哲咨询公司、Foursquare、英特尔、领英、Twitter、雅虎和其他许多公司。其网站列了出第三方的专业支持。
![](http://www.datamation.com/imagesvr_ce/4038/07MLlib.JPG)
### 7. MLlib
由于其速度Apache Spark 成为一个最流行的大数据处理工具。MLlib 是 Spark 的可扩展机器学习库。它集成了 Hadoop 并可以与 NumPy 和 R 进行交互操作。它包括了许多机器学习算法如分类、回归、决策树、推荐、集群、主题建模、功能转换、模型评价、ML管道架构、ML持续、生存分析、频繁项集和序列模式挖掘、分布式线性代数和统计。
![](http://www.datamation.com/imagesvr_ce/839/08NuPIC.JPG)
### 8. NuPIC
由 Numenta 公司管理的 NuPIC 是一个基于分层暂时记忆Hierarchical Temporal Memory, HTM理论的开源人工智能项目。从本质上讲HTM 试图创建一个计算机系统来模仿人类大脑皮层。他们的目标是创造一个 “在许多认知任务上接近或者超越人类认知能力” 的机器。
除了开源许可Numenta 还提供 NuPic 的商业许可协议,并且它还提供技术专利的许可证。
![](http://www.datamation.com/imagesvr_ce/99/09OpenNN.JPG)
### 9. OpenNN
作为一个为开发者和科研人员设计的具有高级理解力的人工智能OpenNN 是一个实现神经网络算法的 c++ 编程库。它的关键特性包括深度的架构和快速的性能。其网站上可以查到丰富的文档包括一个解释了神经网络的基本知识的入门教程。OpenNN 的付费支持由一家从事预测分析的西班牙公司 Artelnics 提供。
![](http://www.datamation.com/imagesvr_ce/4168/10OpenCyc.JPG)
### 10. OpenCyc
由 Cycorp 公司开发的 OpenCyc 提供了对 Cyc 知识库的访问和常识推理引擎。它拥有超过 239,000 个条目,大约 2,093,000 个三元组和大约 69,000 owl一种类似于链接到外部语义库的命名空间。它在富领域模型、语义数据集成、文本理解、特殊领域的专家系统和游戏 AI 中有着良好的应用。该公司还提供另外两个版本的 Cyc一个免费的用于科研但是不开源和一个提供给企业的但是需要付费。
![](http://www.datamation.com/imagesvr_ce/9761/11Oryx2.JPG)
### 11. Oryx 2
构建在 Apache Spark 和 Kafka 之上的 Oryx 2 是一个专门针对大规模机器学习的应用程序开发框架。它采用一个独特的三层 λ 架构。开发者可以使用 Orys 2 创建新的应用程序,另外它还拥有一些预先构建的应用程序可以用于常见的大数据任务比如协同过滤、分类、回归和聚类。大数据工具供应商 Cloudera 创造了最初的 Oryx 1 项目并且一直积极参与持续发展。
![](http://www.datamation.com/imagesvr_ce/7423/12.%20PredictionIO.JPG)
### 12. PredictionIO
今年的二月, Salesforce 买下 PredictionIO接着在七月他将该平台和商标贡献给 Apache 基金会Apache 基金会将其列为孵育计划。所以当 Salesforce 利用 PredictionIO 技术来发展他的机器学习性能工作将会同步出现在开源版本中。它可以帮助用户创建有机器学习功能的预测引擎这可用于部署能够实时动态查询的Web服务。
![](http://www.datamation.com/imagesvr_ce/6886/13SystemML.JPG)
### 13. SystemML
首先由 IBM 开发 SystemML 现在是一个 Apache 大数据项目。它提供了一个高度可伸缩的平台,可以实现高等数学运算,并且他的算法用 R 或类似 python 的语法写成。企业已经在使用它来跟踪汽车维修客户服务、规划机场交通和连接社会媒体数据与银行客户。他可以在 Spark 或 Hadoop 上运行。
![](http://www.datamation.com/imagesvr_ce/5742/14TensorFlow.JPG)
### 14. TensorFlow
TensorFlow 是一个谷歌的开源人工智能工具。它提供了一个使用数据流图进行数值计算的库。它可以运行在多种不同的有着单或多 CPUs 和 GPUs 的系统,甚至可以在移动设备上运行。它拥有深厚的灵活性、真正的可移植性、自动微分功能并且支持 Python 和 c++。它的网站拥有十分详细的教程列表来帮助开发者和研究人员沉浸于使用或扩展他的功能。
![](http://www.datamation.com/imagesvr_ce/9018/15Torch.JPG)
### 15. Torch
Torch 将自己描述为:“一个优先使用 GPUs 的拥有机器学习算法广泛支持的科学计算框架”,他的特点是灵活性和速度。此外,它可以很容易的运用机器学习、计算机视觉、信号处理、并行处理、图像、视频、音频和网络的包。他依赖一个叫做 LuaJIT 的脚本语言,而 LuaJIT 是基于 Lua 的。
--------------------------------------------------------------------------------
via: http://www.datamation.com/open-source/slideshows/15-top-open-source-artificial-intelligence-tools.html
作者:[Cynthia Harvey][a]
译者:[Chao-zhi](https://github.com/Chao-zhi)
校对:[校对者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
[3]: http://daggerfs.com/

View File

@ -3,35 +3,35 @@
如果你正在运行 Swarm 模式的集群,或者只运行单台 Docker你都会有下面的疑问
>我如何才能监控到它们都在干些什么?
> 我如何才能监控到它们都在干些什么?
这个问题的答案是“很不容易”。
你需要监控下面的参数:
1. 容器的数量和状态。
2. 一台容器是否已经移到另一个点了,如果是,那是在什么时候,移动到哪个节点?
3. 一个结点上运行着的容器数量。
2. 一台容器是否已经移到另一个点了,如果是,那是在什么时候,移动到哪个节点?
3. 给定节点上运行着的容器数量。
4. 一段时间内的通信峰值。
5. 孤儿卷和网络LCTT 译注:孤儿卷就是当你删除容器时忘记删除它的卷,这个卷就不会再被使用,但会一直占用资源)。
6. 回收磁盘空间,回收结点
7. 容器数量与连接在 docker0 和 docker_gwbridge 上的虚拟网卡数量不一致LCTT 译注当docker启动时它会在宿主机器上创建一个名为docker0的虚拟网络接口
6. 可用磁盘空间、可用 inode 数
7. 容器数量与连接在 docker0 和 docker_gwbridge 上的虚拟网卡数量不一致LCTT 译注:当 docker 启动时,它会在宿主机器上创建一个名为 docker0 的虚拟网络接口)。
8. 开启和关闭 Swarm 节点。
9. 收集并集中处理日志。
本文的目标是介绍 [Elasticsearch][1] + [Kibana][2] + [cAdvisor][3] 的用法,使用它们来收集 Docker 容器的参数,分析数据并产生可视化报表。
阅读本文后你会发现有一个报表会显示上述9个参数的部分内容如果简单使用 cAdvisor有些参数就无法显示出来比如 Swarm 模式的节点。
阅读本文后你可以发现有一个监控仪表盘能够部分解决上述列出的问题。但如果只是使用 cAdvisor有些参数就无法显示出来比如 Swarm 模式的节点。
如果你的一些 cAdvisor 或其他工具无法提供的特殊需求,我建议你开发自己的数据收集器和数据处理器(比如 [Beats][4]),请注意我不会演示如何使用 Elasticsearch 来收集 Docker 容器的日志。
如果你有一些 cAdvisor 或其他工具无法解决的特殊需求,我建议你开发自己的数据收集器和数据处理器(比如 [Beats][4]),请注意我不会演示如何使用 Elasticsearch 来集中收集 Docker 容器的日志。
>[“你要如何才能监控到 Swarm 模式集群里面发生了什么事情?要做到这点很不容易。” 作者 @fntlnz][5]
> [“你要如何才能监控到 Swarm 模式集群里面发生了什么事情?要做到这点很不容易。” —— @fntlnz][5]
### 我们为什么要监控容器?
想象一下这个经典场景:你在管理一台或多台虚拟机,你把 tmux 工具用得很溜,用各种 session 事先设定好了所有基础的东西,包括监控。然后生产环境出问题了,你使用 top htop iotop jnettop 各种 top 来排查,然后你准备好修复故障。
想象一下这个经典场景:你在管理一台或多台虚拟机,你把 tmux 工具用得很溜,用各种 session 事先设定好了所有基础的东西,包括监控。然后生产环境出问题了,你使用 `top`、`htop`、`iotop`、`jnettop` 各种 top 来排查,然后你准备好修复故障。
现在重新想象一下你有3个节点包含50台容器你需要在一个地方查看整洁的历史数据知道问题出在哪个地方而不是把你的生命浪费在那些字符界面来赌你可以找到问题点。
现在重新想象一下你有 3 个节点,包含 50 台容器,你需要在一个地方查看整洁的历史数据,这样你知道问题出在哪个地方,而不是把你的生命浪费在那些字符界面来赌你可以找到问题点。
### 什么是 Elastic Stack
@ -44,32 +44,31 @@ Elastic Stack 就一个工具集,包括以下工具:
我们会使用其中一部分工具,比如使用 Elasticsearch 来分析基于 JSON 格式的文本,以及使用 Kibana 来可视化数据并产生报表。
另一个重要的工具是 Beats但在本文中我们还是把精力放在容器上官方的 Beats 工具不支持 Docker所以我们选择原生兼容 Elasticsearch 的 cAdvisor。
另一个重要的工具是 [Beats][4],但在本文中我们还是把精力放在容器上,官方的 Beats 工具不支持 Docker所以我们选择原生兼容 Elasticsearch 的 cAdvisor。
cAdvisor 工具负责收集、整合容器数据,并导出报表。在本文中,这些报表被到入到 Elasticsearch 中。
[cAdvisor][3] 工具负责收集、整合正在运行的容器数据,并导出报表。在本文中,这些报表被到入到 Elasticsearch 中。
cAdvisor 有两个比较酷的特性:
- 它不只局限于 Docker 容器。
- 它有自己的 web 服务器,可以简单地显示当前节点的可视化报表。
- 它有自己的 Web 服务器,可以简单地显示当前节点的可视化报表。
### 设置测试集群,或搭建自己的基础架构
和我以前的文章一样,我习惯提供一个简单的脚本,让读者不用花很多时间就能部署好和我一样的测试环境。你可以使用以下(非生产环境使用的)脚本来搭建一个 Swarm 模式的集群,其中一个容器运行着 Elasticsearch。
> 如果你有充足的时间和经验,你可以搭建自己的基础架构。
和我[以前的文章][9]一样,我习惯提供一个简单的脚本,让读者不用花很多时间就能部署好和我一样的测试环境。你可以使用以下(非生产环境使用的)脚本来搭建一个 Swarm 模式的集群,其中一个容器运行着 Elasticsearch。
> 如果你有充足的时间和经验,你可以搭建自己的基础架构 (Bring Your Own InfrastructureBYOI)。
如果要继续阅读本文,你需要:
- 一个或多个节点,运行 Docker 进程docker 版本号大于等于 1.12)。
- 运行 Docker 进程的一个或多个节点docker 版本号大于等于 1.12)。
- 至少有一个独立运行的 Elasticsearch 节点(版本号 2.4.X
重申一下,此 Elasticsearch 集群环境不能放在生产环境中使用。生产环境也不推荐使用单节点集群,所以如果你计划安装一个生产环境,请参考 [Elastic guidelines][6]。
重申一下,此 Elasticsearch 集群环境不能放在生产环境中使用。生产环境也不推荐使用单节点集群,所以如果你计划安装一个生产环境,请参考 [Elastic 指南][6]。
### 对喜欢尝鲜的用户的友情提示
我就是一个喜欢尝鲜的人(当然我也已经在生产环境中使用了 alpha 版本),但是在本文中,我不会使用最新的 Elasticsearch 5.0.0 alpha 版本,我还不是很清楚这个版本的功能,所以我不想成为那个引导你们出错的关键。
我就是一个喜欢尝鲜的人(当然我也已经在生产环境中使用了最新的 alpha 版本),但是在本文中,我不会使用最新的 Elasticsearch 5.0.0 alpha 版本,我还不是很清楚这个版本的功能,所以我不想成为那个引导你们出错的关键。
所以本文中涉及的 Elasticsearch 版本为最新稳定版 2.4.0。
@ -184,18 +183,12 @@ via: https://blog.codeship.com/monitoring-docker-containers-with-elasticsearch-a
作者:[Lorenzo Fontana][a]
译者:[bazz2](https://github.com/bazz2)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://blog.codeship.com/author/lorenzofontana/
[1]: https://github.com/elastic/elasticsearch
[2]: https://github.com/elastic/kibana
[3]: https://github.com/google/cadvisor
@ -204,3 +197,4 @@ via: https://blog.codeship.com/monitoring-docker-containers-with-elasticsearch-a
[6]: https://www.elastic.co/guide/en/elasticsearch/guide/2.x/deploy.html
[7]: https://docs.docker.com/machine/install-machine/
[8]: https://cloud.digitalocean.com/settings/api/tokens/new
[9]: https://blog.codeship.com/nginx-reverse-proxy-docker-swarm-clusters/