Merge branch 'master' of github.com:LCTT/TranslateProject

This commit is contained in:
GHLandy 2016-09-21 05:00:31 +00:00
commit 69d4aa3660
15 changed files with 581 additions and 581 deletions

View File

@ -0,0 +1,134 @@
使用 Python 和 Asyncio 来编写在线多人游戏(三)
=================================================================
![](https://7webpages.com/media/cache/17/81/178135a6db5074c72a1394d31774c658.gif)
> 在这个系列中,我们基于多人游戏 [贪吃蛇][1] 来制作一个异步的 Python 程序。上一篇文章聚焦于[编写游戏循环][2]上,而本系列第 1 部分则涵盖了如何[异步化][3]。
- 代码戳[这里][4]
### 4、制作一个完整的游戏
![](https://7webpages.com/static/img/14chs7.gif)
#### 4.1 工程概览
在此部分,我们将回顾一个完整在线游戏的设计。这是一个经典的贪吃蛇游戏,增加了多玩家支持。你可以自己在 <http://snakepit-game.com> 亲自试玩。源码在 GitHub 的这个[仓库][5]。游戏包括下列文件:
- [server.py][6] - 处理主游戏循环和连接。
- [game.py][7] - 主要的 `Game` 类。实现游戏的逻辑和游戏的大部分通信协议。
- [player.py][8] - `Player` 类,包括每一个独立玩家的数据和蛇的展现。这个类负责获取玩家的输入并相应地移动蛇。
- [datatypes.py][9] - 基本数据结构。
- [settings.py][10] - 游戏设置,在注释中有相关的说明。
- [index.html][11] - 客户端所有的 html 和 javascript代码都放在一个文件中。
#### 4.2 游戏循环内窥
多人的贪吃蛇游戏是个用于学习十分好的例子,因为它简单。所有的蛇在每个帧中移动到一个位置,而且帧以非常低的频率进行变化,这样就可以让你就观察到游戏引擎到底是如何工作的。因为速度慢,对于玩家的按键不会立马响应。按键先是记录下来,然后在一个游戏循环迭代的最后计算下一帧时使用。
> 现代的动作游戏帧频率更高,而且通常服务端和客户端的帧频率是不相等的。客户端的帧频率通常依赖于客户端的硬件性能,而服务端的帧频率则是固定的。一个客户端可能根据一个游戏“嘀嗒”的数据渲染多个帧。这样就可以创建平滑的动画,这个受限于客户端的性能。在这个例子中,服务端不仅传输物体的当前位置,也要传输它们的移动方向、速度和加速度。客户端的帧频率称之为 FPS每秒帧数frames per second服务端的帧频率称之为 TPS每秒滴答数ticks per second。在这个贪吃蛇游戏的例子中二者的值是相等的在客户端显示的一帧是在服务端的一个“嘀嗒”内计算出来的。
我们使用类似文本模式的游戏区域,事实上是 html 表格中的一个字符宽的小格。游戏中的所有对象都是通过表格中的不同颜色字符来表示。大部分时候,客户端将按键的码发送至服务端,然后每个“滴答”更新游戏区域。服务端一次更新包括需要更新字符的坐标和颜色。所以我们将所有游戏逻辑放置在服务端,只将需要渲染的数据发送给客户端。此外,我们通过替换通过网络发送的数据来减少游戏被破解的概率。
#### 4.3 它是如何运行的?
这个游戏中的服务端出于简化的目的,它和例子 3.2 类似。但是我们用一个所有服务端都可访问的 `Game` 对象来代替之前保存了所有已连接 websocket 的全局列表。一个 `Game` 实例包括一个表示连接到此游戏的玩家的 `Player` 对象的列表(在 `self._players` 属性里面),以及他们的个人数据和 websocket 对象。将所有游戏相关的数据存储在一个 `Game` 对象中,会方便我们增加多个游戏房间这个功能——如果我们要增加这个功能的话。这样,我们维护多个 `Game` 对象,每个游戏开始时创建一个。
客户端和服务端的所有交互都是通过编码成 json 的消息来完成。来自客户端的消息仅包含玩家所按下键码对应的编号。其它来自客户端消息使用如下格式:
```
[command, arg1, arg2, ... argN ]
```
来自服务端的消息以列表的形式发送,因为通常一次要发送多个消息 (大多数情况下是渲染的数据):
```
[[command, arg1, arg2, ... argN ], ... ]
```
在每次游戏循环迭代的最后会计算下一帧,并且将数据发送给所有的客户端。当然,每次不是发送完整的帧,而是发送两帧之间的变化列表。
注意玩家连接上服务端后不是立马加入游戏。连接开始时是观望者spectator模式玩家可以观察其它玩家如何玩游戏。如果游戏已经开始或者上一个游戏会话已经在屏幕上显示 “game over” (游戏结束),用户此时可以按下 “Join”参与来加入一个已经存在的游戏或者如果游戏没有运行没有其它玩家则创建一个新的游戏。后一种情况下游戏区域在开始前会被先清空。
游戏区域存储在 `Game._field` 这个属性中,它是由嵌套列表组成的二维数组,用于内部存储游戏区域的状态。数组中的每一个元素表示区域中的一个小格,最终小格会被渲染成 html 表格的格子。它有一个 `Char` 的类型,是一个 `namedtuple` ,包括一个字符和颜色。在所有连接的客户端之间保证游戏区域的同步很重要,所以所有游戏区域的更新都必须依据发送到客户端的相应的信息。这是通过 `Game.apply_render()` 来实现的。它接受一个 `Draw` 对象的列表,其用于内部更新游戏区域和发送渲染消息给客户端。
> 我们使用 `namedtuple` 不仅因为它表示简单数据结构很方便,也因为用它生成 json 格式的消息时相对于 `dict` 更省空间。如果你在一个真实的游戏循环中需要发送复杂的数据结构,建议先将它们序列化成一个简单的、更短的格式,甚至打包成二进制格式(例如 bson而不是 json以减少网络传输。
`Player` 对象包括用 `deque` 对象表示的蛇。这种数据类型和 `list` 相似,但是在两端增加和删除元素时效率更高,用它来表示蛇很理想。它的主要方法是 `Player.render_move()`,它返回移动玩家的蛇至下一个位置的渲染数据。一般来说它在新的位置渲染蛇的头部,移除上一帧中表示蛇的尾巴的元素。如果蛇吃了一个数字变长了,在相应的多个帧中尾巴是不需要移动的。蛇的渲染数据在主类的 `Game.next_frame()` 中使用,该方法中实现所有的游戏逻辑。这个方法渲染所有蛇的移动,检查每一个蛇前面的障碍物,而且生成数字和“石头”。每一个“嘀嗒”,`game_loop()` 都会直接调用它来生成下一帧。
如果蛇头前面有障碍物,在 `Game.next_frame()` 中会调用 `Game.game_over()`。它后通知所有的客户端那个蛇死掉了 (会调用 `player.render_game_over()` 方法将其变成石头),然后更新表中的分数排行榜。`Player` 对象的 `alive` 标记被置为 `False`,当渲染下一帧时,这个玩家会被跳过,除非他重新加入游戏。当没有蛇存活时,游戏区域会显示 “game over” (游戏结束)。而且,主游戏循环会停止,设置 `game.running` 标记为 `False`。当某个玩家下次按下 “Join” (加入)时,游戏区域会被清空。
在渲染游戏的每个下一帧时也会产生数字和石头,它们是由随机值决定的。产生数字或者石头的概率可以在 `settings.py` 中修改成其它值。注意数字的产生是针对游戏区域每一个活的蛇的,所以蛇越多,产生的数字就越多,这样它们都有足够的食物来吃掉。
#### 4.4 网络协议
从客户端发送消息的列表:
命令 | 参数 |描述
:-- |:-- |:--
new_player | [name] |设置玩家的昵称
join | |玩家加入游戏
从服务端发送消息的列表:
命令 | 参数 |描述
:-- |:-- |:--
handshake |[id] |给一个玩家指定 ID
world |[[(char, color), ...], ...] |初始化游戏区域(世界地图)
reset_world | |清除实际地图,替换所有字符为空格
render |[x, y, char, color] |在某个位置显示字符
p_joined |[id, name, color, score] |新玩家加入游戏
p_gameover |[id] |某个玩家游戏结束
p_score |[id, score] |给某个玩家计分
top_scores |[[name, score, color], ...] |更新排行榜
典型的消息交换顺序:
客户端 -> 服务端 |服务端 -> 客户端 |服务端 -> 所有客户端 |备注
:-- |:-- |:-- |:--
new_player | | |名字传递给服务端
|handshake | |指定 ID
|world | |初始化传递的世界地图
|top_scores | |收到传递的排行榜
join | | |玩家按下“Join”游戏循环开始
| |reset_world |命令客户端清除游戏区域
| |render, render, ... |第一个游戏“滴答”,渲染第一帧
(key code) | | |玩家按下一个键
| |render, render, ... |渲染第二帧
| |p_score |蛇吃掉了一个数字
| |render, render, ... |渲染第三帧
| | |... 重复若干帧 ...
| |p_gameover |试着吃掉障碍物时蛇死掉了
| |top_scores |更新排行榜(如果需要更新的话)
### 5. 总结
说实话,我十分享受 Python 最新的异步特性。新的语法做了改善,所以异步代码很容易阅读。可以明显看出哪些调用是非阻塞的,什么时候发生 greenthread 的切换。所以现在我可以宣称 Python 是异步编程的好工具。
SnakePit 在 7WebPages 团队中非常受欢迎。如果你在公司想休息一下,不要忘记给我们在 [Twitter][12] 或者 [Facebook][13] 留下反馈。
--------------------------------------------------------------------------------
via: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/
作者:[Kyrylo Subbotin][a]
译者:[chunyang-wen](https://github.com/chunyang-wen)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/
[1]: http://snakepit-game.com/
[2]: https://linux.cn/article-7784-1.html
[3]: https://linux.cn/article-7767-1.html
[4]: https://github.com/7WebPages/snakepit-game
[5]: https://github.com/7WebPages/snakepit-game
[6]: https://github.com/7WebPages/snakepit-game/blob/master/server.py
[7]: https://github.com/7WebPages/snakepit-game/blob/master/game.py
[8]: https://github.com/7WebPages/snakepit-game/blob/master/player.py
[9]: https://github.com/7WebPages/snakepit-game/blob/master/datatypes.py
[10]: https://github.com/7WebPages/snakepit-game/blob/master/settings.py
[11]: https://github.com/7WebPages/snakepit-game/blob/master/index.html
[12]: https://twitter.com/7WebPages
[13]: https://www.facebook.com/7WebPages/

View File

@ -0,0 +1,88 @@
适用于所有发行版的 Linux 应用程序——是否真的有好处呢?
============================================================================
![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/06/Bundled-applications.jpg)
让我们回顾一下 Linux 社区最新的愿景——推动去中心化的应用来解决发行版的碎片化。
继上周的文章:“[Snap、Flatpak 这种通吃所有发行版的打包方式真的有用吗?][1]” 之后,一系列新观点浮出水面,其中可能包含关于这样应用是否有用的重要信息。
### 缺点
就这个话题在[这里][2]的评论,一个叫 Till 的 [Gentoo][3] 使用者,对于上一次我们未能完全解释的问题给出了一些新的观点。
对于上一次我们选择仅仅称之为膨胀的的东西Till 从另一方面做了剖析膨胀将来的发展,这可以帮助我们更好的理解它的组成和其影响。
这些被称之为“捆绑应用”的应用程序能够工作在所有发行版上的机制是——将它依赖的库都包含在它们的应用软件之中Till 说:
> “捆绑应用装载了大量的并不被应用开发者所维护的软件。如果其中的某个函数库被发现了一个安全问题而需要更新的话,你得为每一个独立的应用程序安装更新来确保你的系统安全。”
本质上Till 提出了一个**重要的安全问题**。但是它并不仅仅与安全有关系,它还关系到许多方面,比如说系统维护、原子更新等等。
此外,如果我们进一步假设:依赖的开发者们也许会合作,将他们的软件与使用它的应用程序一起发布(一种理想状况),但这将导致整个平台的开发整体放缓。
另一个将会导致的问题是**透明的依赖关系变得模糊**,就是说,如果你想知道一个应用程序捆绑了哪些依赖关系,你必须依靠开发者发布这些数据。
或者就像 Till 说的:“比如说像某某包是否已经包含了更新的某函数库这样的问题将会是你每天需要面对的。”
与之相反,对于 Linux 现行的标准的包管理方法(包括二进制包和源码包),你能够很容易的注意到哪些函数库已经在系统中更新了。
并且,你也可以很轻松的知道其它哪些应用使用了这个函数库,这就将你从繁琐的单独检查每一个应用程序的工作中解救了出来。
其他可能由膨胀导致的缺点包括:**更大的包体积**(每一个应用程序捆绑了依赖),**更高的内存占用**(没有共享函数库),并且,**少了一个包过滤机制**来防止恶意软件:发行版的包维护者也充当了一个在开发者和用户之间的过滤者,他保障了用户获得高质量的软件。
而在捆绑应用中就不再是这种情况了。
最后一点Till 声称,尽管在某些情况下很有用,但是在大多数情况下,**捆绑应用程序将弱化自由软件在发行版中的地位**(专有软件供应商将被能够发布他们的软件而不用把它放到公共软件仓库中)。
除此之外,它引出了许多其他问题。很多问题都可以简单归结到开发人员身上。
### 优点
相比之下,另一个名叫 Sven 的人的评论试图反驳目前普遍反对使用捆绑应用程序的观点,从而证明和支持使用它。
“浪费空间”——Sven 声称在当今世界我们有**很多其他事情在浪费磁盘空间**,比如电影存储在硬盘上、本地安装等等……
最终,这些事情浪费的空间要远远多于仅仅“ 100 MB 而你每天都要使用的程序。……因此浪费空间的说法实在很荒谬。”
“浪费运行内存?”——主要的观点有:
- **共享库浪费的内存要远远少于程序的运行时数据所占用的**
- 而今运行**内存已经很便宜**了。
“安全梦魇”——不是每个应用程序的运行**真正的要注重安全**。
而且,**许多应用程序甚至从来没有过任何安全更新**,除非在“滚动更新的发行版”。
除了 Sven 这种从实用出发的观点以外Till 其实也指出了捆绑应用在一些情况下也有着其优点:
- 专有软件的供应商想要保持他们的代码游离于公共仓库之外将更加容易。
- 没有被你的发行版打包进去的小众应用程序将变得更加可行。
- 在没有 Beta 包的二进制发行版中测试应用将变得简单。
- 将用户从复杂的依赖关系中解放出来。
### 最后的思考
虽然关于此问题有着不同的想法,但是有一个被大家共同接受的观点是:**捆绑应用对于填补 Linux 生态系统有着其独到的作用。**
虽然如此,它的定位,不论是主流的还是边缘的,都变得愈发清晰,至少理论上是这样。
想要尽可能优化其系统的用户,在大多数情况下应该要避免使用捆绑应用。
而讲究易用性、尽可能在维护系统上少费劲的用户,可能应该会感觉这种新应用十分舒爽。
--------------------------------------------------------------------------------
via: http://www.iwillfolo.com/linux-applications-that-works-on-all-distributions-are-they-any-good/
作者:[Liron][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]: https://linux.cn/article-7783-1.html
[2]: http://www.proli.net/2016/06/25/gnulinux-bundled-application-ramblings/
[3]: http://www.iwillfolo.com/5-reasons-use-gentoo-linux/

View File

@ -0,0 +1,63 @@
Linus Torvalds 透露他编程最喜欢使用的笔记本
=================
> 是戴尔 XPS 13 开发者版。下面就是原因。
我最近和一些 Linux 开发者讨论了对于严谨的程序员来说,最好的笔记本是什么样的问题。结果,我从这些程序员的观点中筛选出了多款笔记本电脑。那么依我之见赢家是谁呢?就是戴尔 XPS 13 开发者版。和我观点一样的大有人在。Linux的缔造者 Linus Torvalds 也认同这个观点。对于他来说,戴尔 XPS 13 开发者版大概是最好的笔记本电脑了。
![Linus Torvalds new favorite laptop is the Dell XPS 13 Developer Edition.](http://zdnet3.cbsistatic.com/hub/i/r/2016/07/18/702609c3-db38-4603-9f5f-4dcc3d71b140/resize/770xauto/50a8ba1c2acb1f0994aec2115d2e55ce/2016-dell-xps-13.jpg)
Torvalds 的需求可能和你的不同。
在 Google+ 上Torvalds 解释道,“第一:[我从来不把笔记本当成台式机的替代品][1],并且,我每年旅游不了几次。所以对于我来说,笔记本是一个相当专用的东西,并不是每日(甚至每周)都要使用,因此,主要的标准不是那种“差不多每天都使用”的标准,而是非常适合于旅游时使用。”
因此,对于 Torvalds 来说,“我最后比较关心的一点是它是相当的小和轻,因为在会议上我可能一整天都需要带着它。我同样需要一个好的屏幕,因为到目前为止,我主要是在桌子上使用它,我希望文字的显示小而且清晰。”
戴尔的显示器是由 Intel's Iris 540 GPU 支持的。在我的印象中,它表现的非常的不错。
Iris 驱动了 13.3 英寸的 3200×1800 的显示屏。每英寸有 280 像素,比我喜欢的 [2015 年的 Chromebook Pixel][2] 多了 40 个像素,比 [Retina 屏的 MacBook Pro][3] 还要多 60 个像素。
然而,要让上面说的硬件配置在 [Gnome][4] 桌面上玩好也不容易。正如 Torvalds 在另一篇文章解释的那样,它“[和我的桌面电脑有一样的分辨率][5]但是显然因为笔记本的显示屏更小Gnome 桌面似乎自己做了个艰难的决定,认为我需要 2 倍的自动缩放比例,这简直愚蠢到炸裂(例如窗口显示,图标等)。”
解决方案?你不用想着在用户界面里面找了。你需要在 shell下运行`gsettings set org.gnome.desktop.interface scaling-factor 1`。
Torvalds 或许使用 Gnome 桌面,但是他不是很喜欢 Gnome 3.x 系列。这一点上我跟他没有不同意见。这就是为什么我使用 [Cinnamon][7] 来代替。
他还希望“一个相当强大的 CPU因为当我旅游的时候我依旧需要编译 Linux 内核很多次。我并不会像在家那样每次 pull request 都进行一次完整的“make allmodconfig”编译但是我希望可以比我以前的笔记本多编译几次实际上也包括屏幕应该是我想升级的主要原因。”
Linus 没有描述他的 XPS 13 的细节,但是我测评过的那台是一个高端机型。它带有双核 2.2GHz 的第 6 代英特尔的酷睿 i7-6550U Skylake 处理器16GBs DDR3 内存,以及一块半 TB 500GB的 PCIe 固态硬盘SSD。我可以肯定Torvalds 的系统至少是精良装备。”
一些你或许会关注的特征没有在 Torvalds 的清单中:
> “我不会关心的是触摸屏,因为我的手指相对于我所看到的文字是又大又笨拙(我也无法处理污渍:也许我的手指特别油腻,但是我真的不想碰那些屏幕)。
> 我并不十分关心那些“一整天的电池寿命”,因为坦率的讲,我不记得上次没有接入电源时什么时候了。我可能着急忙慌而忘记插电,但它不是一个天大的问题。现在电池的寿命“超过两小时”,我只是不那么在乎了。”
戴尔声称XPS 13搭配 56 瓦小时的 4 芯电池,拥有 12 小时的电池寿命。以我的使用经验它已经很好的用过了 10 个小时。我从没有尝试过把电量完全耗完是什么状态。
Torvalds 也没有遇到 Intel 的 Wi-Fi 设备问题。非开发者版使用 Broadcom 的芯片设备,已经被 Windows 和 Linux 用户发现了一些问题。戴尔的技术支持对于我来解决这些问题非常有帮助。
一些用户在使用 XPS 13 触摸板的时候遇到了问题。Torvalds 和我都几乎没有什么困扰。Torvalds 写到“XPS13 触摸板对于我来说运行的非常好。这可能只是个人喜好,但它操作起来比较流畅,响应比较快。”
不过,尽管 Torvalds 喜欢 XPS 13他同时也钟情于最新版的联想 X1 Carbon、惠普 Spectre 13 x360和去年的联想 Yoga 900。至于我我喜欢 XPS 13 开发者版。至于价钱,我以前测评过的型号是 $1949.99,可能刷你的信用卡就够了。
因此如果你希望像世界上顶级的程序员之一一样开发的话Dell XPS 13 开发者版对得起它的价格。
--------------------------------------------------------------------------------
via: http://www.zdnet.com/article/linus-torvalds-reveals-his-favorite-programming-laptop/
作者:[Steven J. Vaughan-Nichols][a]
译者:[yangmingming](https://github.com/yangmingming)
校对:[wxy](https://github.com/wxy)
本文由 [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/

View File

@ -0,0 +1,85 @@
如何在 Ubuntu 16.04 和 Fedora 22-24 上安装最新的 XFCE 桌面?
==========================
Xfce 是一款针对 Linux 系统的现代化[轻型开源桌面环境][1],它在其他的类 Unix 系统上,比如 Mac OS X、 Solaries、 *BSD 以及其它几种上也能工作得很好。它非常快并以简洁而优雅的用户界面展现了用户友好性。
在服务器上安装一个桌面环境有时还是有用的,因为某些应用程序可能需要一个桌面界面,以便高效而可靠的管理。 Xfce 的一个卓越的特性是其内存消耗等系统资源占用率很低,因此,如果服务器需要一个桌面环境的话它会是首选。
### XFCE 桌面的功能特性
另外,它的一些值得注意的组件和功能特性列在下面:
- Xfwm 窗口管理器
- Thunar 文件管理器
- 用户会话管理器:用来处理用户登录、电源管理之类
- 桌面管理器:用来设置背景图片、桌面图标等等
- 应用管理器
- 它的高度可连接性以及一些其他次要功能特性
Xfce 的最新稳定发行版是 Xfce 4.12,它所有的功能特性和与旧版本的变化都列在了[这儿][2]。
#### 在 Ubuntu 16.04 上安装 Xfce 桌面
Linux 发行版,比如 Xubuntu、Manjaro、OpenSUSE、Fedora Xfce Spin、Zenwalk 以及许多其他发行版都提供它们自己的 Xfce 桌面安装包,但你也可以像下面这样安装最新的版本。
```
$ sudo apt update
$ sudo apt install xfce4
```
等待安装过程结束,然后退出当前会话,或者你也可以选择重启系统。在登录界面,选择 Xfce 桌面,然后登录,截图如下:
![](http://www.tecmint.com/wp-content/uploads/2016/09/Select-Xfce-Desktop-at-Login.png)
![](http://www.tecmint.com/wp-content/uploads/2016/09/XFCE-Desktop.png)
#### 在 Fedora 22-24 上安装 Xfce 桌面
如果你已经有一个安装好的 Linux 发行版 Fedora想在上面安装 xfce 桌面,那么你可以使用如下所示的 yum 或 dnf 命令。
```
-------------------- 在 Fedora 22 上 --------------------
# yum install @xfce
-------------------- 在 Fedora 23-24 上 --------------------
# dnf install @xfce-desktop-environment
```
安装 Xfce 以后,你可以从会话菜单选择 Xfce 登录或者重启系统。
![](http://www.tecmint.com/wp-content/uploads/2016/09/Select-Xfce-Desktop-at-Fedora-Login.png)
![](http://www.tecmint.com/wp-content/uploads/2016/09/Install-Xfce-Desktop-in-Fedora.png)
如果你不再想要 Xfce 桌面留在你的系统上,那么可以使用下面的命令来卸载它:
```
-------------------- 在 Ubuntu 16.04 上 --------------------
$ sudo apt purge xfce4
$ sudo apt autoremove
-------------------- 在 Fedora 22 上 --------------------
# yum remove @xfce
-------------------- 在 Fedora 23-24 上 --------------------
# dnf remove @xfce-desktop-environment
```
在这个简单的入门指南中,我们讲解了如何安装最新版 Xfce 桌面的步骤,我相信这很容易掌握。如果一切进行良好,你可以享受一下使用 xfce —— 这个[ Linux 系统上最佳桌面环境][1]之一。
此外,如果你再次回来,你可以通过下面的反馈表单和我们始终保持联系。
--------------------------------------------------------------------------------
via: http://www.tecmint.com/install-xfce-desktop-in-ubuntu-fedora/
作者:[Aaron Kili][a]
译者:[ucasFL](https://github.com/ucasFL)
校对:[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/best-linux-desktop-environments/
[2]: https://www.xfce.org/about/news/?post=1425081600

View File

@ -1,3 +1,5 @@
translating by ucasFL
# Scientific Audio Processing, Part II - How to make basic Mathematical Signal Processing in Audio files using Ubuntu with Octave 4.0

View File

@ -1,82 +0,0 @@
Spark comparison: AWS vs. GCP
===========
>Tianhui Michael Li and Ariel Mndange-Pfupfu will lead a hands-on online course Oct 10, 12, and 14, 2016: Distributed Computing with Spark for Beginners. Instruction includes building functioning applications from end-to-end and mastering critical tooling around Spark.
Theres little doubt that cloud computing will play an important role in data science for the foreseeable future. The flexible, scalable, on-demand computing power available is an important resource, and as a result, theres a lot of competition between the providers of this service. Two of the biggest players in the space are [Amazon Web Services (AWS)][1] and [Google Cloud Platform (GCP)][2].
This article includes a short comparison of distributed Spark workloads in AWS and GCP—both in terms of setup time and operating cost. We ran this experiment with our students at The Data Incubator, [a big data training organization][3] that helps companies hire top-notch data scientists and train their employees on the latest data science skills. Even with the efficiencies built into Spark, the cost and time of distributed workloads can be substantial, and we are always looking for the most efficient technologies so our students are learning the best and fastest tools.
### Submitting Spark jobs to the cloud
Spark is a popular distributed computation engine that incorporates MapReduce-like aggregations into a more flexible, abstract framework. There are APIs for Python and Java, but writing applications in Sparks native Scala is preferable. That makes job submission simple, as you can package your application and all its dependencies into one JAR file.
Its common to use Spark in conjunction with HDFS for distributed data storage, and YARN for cluster management; this makes Spark a perfect fit for AWSs Elastic MapReduce (EMR) clusters and GCPs Dataproc clusters. Both EMR and Dataproc clusters have HDFS and YARN preconfigured, with no extra work required.
### Configuring cloud services
Managing data, clusters, and jobs from the command line is more scalable than using the web interface. For AWS, this means installing and using the command-line interface (cli). Youll have to set up your credentials beforehand as well as make a separate keypair for the EC2 instances that are used under the hood. Youll also need to set up roles—basically permissions—for both users (making sure they have sufficient rights) and EMR itself (usually running aws emr create-default-roles in the cli is good enough to get started).
For GCP the process is more straightforward. If you install the Google Cloud SDK and sign in with your Google account, you should be able to do most things right off the bat. The thing to remember here is to enable the relevant APIs in the API Manager: Compute Engine, Dataproc, and Cloud Storage JSON.
Once you have things set up to your liking, the fun part begins! Using commands like aws s3 cp or gsutil cp you can copy your data into the cloud. Once you have buckets set up for your inputs, outputs, and anything else you might need, running your app is as easy as starting up a cluster and submitting the JAR file. Make sure you know where the logs are kept—it can be tricky to track down problems or bugs in a cloud environment.
### You get what you pay for
When it comes to cost, Googles service is more affordable in several ways. First, the raw cost of purchasing computing power is cheaper. Running a Google Compute Engine machine with 4 vCPUs and 15 GB of RAM will run you $0.20 every hour, or $0.24 with Dataproc. An identically-specced AWS instance will cost you $0.336 per hour running EMR.
The second factor to consider is the granularity of the billing. AWS charges by the hour, so you pay the full rate even if your job takes 15 minutes. GCP charges by the minute, with a 10-minute minimum charge. This ends up being a huge difference in cost in a lot of use cases.
Both services have various other discounts. You can effectively bid on spare cloud capacity with AWSs spot instances or GCPs preemptible instances. These will be cheaper than dedicated, on-demand instances, but theyre not guaranteed to be available. Discounted rates are available on GCP if your instances live for long periods of time (25% to 100% of the month). On AWS, paying some of the costs upfront or buying in bulk can save you some money. The bottom line is, if youre a power user and you use cloud computing on a regular or even constant basis, youll need to delve deeper and perform your own calculations.
Lastly, the costs for new users wanting to try out these services are lower for GCP. They offer a 60-day free trial with $300 in credit to use however you want. AWS only offers a free tier where certain services are free to a certain point or discounted, so you will end up paying to run Spark jobs.This means that if you want to test out Spark for the first time, youll have more freedom to do what you want on GCP without worrying about price.
### Performance comparison
We set up a trial to compare the performance and cost of a typical Spark workload. The trial used clusters with one master and five core instances of AWSs m3.xlarge and GCPs n1-standard-4. They differ slightly in specification, but the number of virtual cores and amount of memory is the same. In fact, they behaved almost identically when it came to job execution time.
The job itself involved parsing, filtering, joining, and aggregating data from the publicly available Stack Exchange Data Dump. We ran the same JAR on a ~50M subset of the data (Cross Validated) and then on the full ~9.5G data set.
![](https://d3ansictanv2wj.cloudfront.net/1400_img_1_AWS_GCP-25ed6069029112a8439d89999796be18.jpg)
>Figure 1. Credit: Michael Li and Ariel M'ndange-Pfupfu.
![](https://d3ansictanv2wj.cloudfront.net/1400_img_2_AWS_GCP-448714718896b21e32f8b47d4657fc8c.jpg)
>Figure 2. Credit: Michael Li and Ariel M'ndange-Pfupfu.
The short job clearly benefited from GCPs by-the-minute billing, being charged only for 10 minutes of cluster time, whereas AWS charged for a full hour. But even the longer job was cheaper on GPS both because of fractional-hour billing and a lower per-unit time cost for comparable performance. Its also worth noting that storage costs werent included in this comparison.
### Conclusion
AWS was the first mover in the space, and this shows in the API. Its ecosystem is vast, but its permissions model is a little dated, and its configuration is a little arcane. By contrast, Google is the shiny new entrant in this space and has polished off some of the rough edges. It is missing some features on our wishlist, like an easy way to auto-terminate clusters and detailed billing information broken down by job. Also, for managing tasks programmatically in Python, the API client library isnt as full-featured as AWSs Boto.
If youre new to cloud computing, GCP is easier to get up and running, and the credits make it a tempting platform. Even if you are already used to AWS, you may still find the cost savings make switching worth it, although the switching costs may not make moving to GCP worth it.
Ultimately, its difficult to make sweeping statements about these services because theyre not just one entity; theyre entire ecosystems of integrated parts, and both have pros and cons. The real winners are the users. As an example, at The Data Incubator, our Ph.D. data science fellows really appreciate the cost reduction as they learn about distributed workloads. And while our big data corporate training clients may be less price sensitive, they appreciate being able to crunch enterprise data faster, while holding price constant. Data scientists can now enjoy the multitude of options available, and the benefits of having a competitive cloud computing market.
--------------------------------------------------------------------------------
via: https://www.oreilly.com/ideas/spark-comparison-aws-vs-gcp?utm_source=dbweekly&utm_medium=email
作者:[Michael Li][a] [Ariel M'Ndange-Pfupfu][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.oreilly.com/people/76a5b-michael-li
[b]: https://www.oreilly.com/people/Ariel-Mndange-Pfupfu
[1]: https://aws.amazon.com/
[2]: https://cloud.google.com/
[3]: https://www.thedataincubator.com/training.html?utm_source=OReilly&utm_medium=blog&utm_campaign=AWSvsGCP

View File

@ -1,127 +0,0 @@
translating by Chao-zhi
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.
![](http://www.datamation.com/imagesvr_ce/5668/00AI.jpg)
Open Source Artificial Intelligence
These open source AI applications are on the cutting edge of artificial intelligence research.
![](http://www.datamation.com/imagesvr_ce/8922/01Caffe.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/1232/02CNTK.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/2901/03Deeplearning4j.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/7269/04DMLT.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/2890/05H2O.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/1127/06Mahout.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/4038/07MLlib.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/839/08NuPIC.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/99/09OpenNN.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/4168/10OpenCyc.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/9761/11Oryx2.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/7423/12.%20PredictionIO.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/6886/13SystemML.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/5742/14TensorFlow.JPG)
### 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.
![](http://www.datamation.com/imagesvr_ce/9018/15Torch.JPG)
### 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

View File

@ -1,3 +1,4 @@
jiajia9linuxer
Down and dirty with Windows Nano Server 2016
====

View File

@ -1,3 +1,4 @@
翻译中 by runningwater
NitroShare Easily Share Files Between Multiple Operating Systems on Local Network
====
@ -90,7 +91,7 @@ Thats it for now, if you have any issues regarding Nitroshare, you can share
via: http://linoxide.com/firewall/pfsense-setup-basic-configuration/
作者:[Aaron Kili][a]
译者:[译者ID](https://github.com/译者ID)
译者:[runningwater](https://github.com/runningwater)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,87 +0,0 @@
适用于所有发行版的 Linux 应用程序——是否真的有好处呢?
============================================================================
![](http://www.iwillfolo.com/wordpress/wp-content/uploads/2016/06/Bundled-applications.jpg)
让我们回顾一下 Linux 社区最初的愿景——促进应用程序的分发来解决发行版的碎片化。
继上周的文章:[Ubuntus Snap, Red Hats Flatpak And Is One Fits All Linux Packages Useful?][1] 之后,一系列新观点浮出水面,他们可能包含关于这些应用程序有效性的重要信息。
### 缺点
就这个话题在[这里][2]的评论,一个叫 Till 的 [Gentoo][3] 使用者,对于上一次我们未能完全解释的问题给出了一些新的观点。
对于上一次我们选择仅仅称之为膨胀的的东西Till 在这里进行了深入的剖析,这帮助我们更好的理解它的组成和其影响。
这些被称之为“捆绑应用”的应用程序能够工作在所有发行版的机制是——将它依赖的库都包含在它们的应用软件之中Till 说:
>“捆绑应用装载了大量的并不被应用开发者所维护的软件。如果其中的函数库X被发现了一个安全问题你得为每一个独立的应用程序安装更新来确保你的系统安全。”
本质上Till 提出了一个重要的安全问题。但是它并不仅仅与安全有关系,它还关系到许多方面,比如说系统维护,原子更新等等。
此外,如果我们进一步假设:依赖开发者们也许会合作,将他们的软件与使用它的应用程序一起发布(一个乌托邦的情况),这将导致整个平台的开发整体放缓。
另一个将会导致的问题是依赖关系变得模糊,就是说,如果你想知道一个应用程序捆绑了哪些依赖关系,你必须依靠开发者发布这些数据。
或者就像 Till 说的“比如说像包XY是否包含了函数库Z的更新这样的问题将会是你每天需要面对的”
与之相反,对于 Linux 现行的标准的包管理方法(包括二进制包和源码包),你能够很容易的注意到哪些函数库已经在系统中更新了。
并且,你也可以很轻松的知道哪些应用使用了这个函数库,这就将你从繁琐的单独检查每一个应用程序的工作中解救了出来。
其他可能由膨胀导致的缺点包括:更大的包体积(每一个应用程序捆绑了依赖),更高的内存占用(没有分享函数库),并且,少了一个包过滤机制来防止恶意软件:发行版的包维护者也充当了一个在开发者和用户之间的过滤者,他保障了用户获得高质量的软件。而捆绑应用中就不再是这种情况了。
最后一点Till 声称,尽管在某些情况下很有用,但是在大多数情况下,捆绑应用程序将消弱自由软件在发行版中的地位(专有的供应商将被允许发布他们的软件而不在公共储存库中分享它)。
除此之外,它引出了许多其他问题。很多问题仅仅只与开发人员有关。
### 优点
相比之下,另一个名叫 Sven 的人的评论试图反驳目前普遍反对使用捆绑应用程序的观点,从而证明和支持使用它。
“浪费空间?”——斯文声称在当今世界我们有很多其他事情在浪费磁盘空间,比如电影存储在硬盘上、本地安装等等……
最终,这些事情浪费的空间要远远多于仅仅 100 MB 而你每天都要使用的程序。因此浪费空间的说法实在很荒谬。
“浪费运行内存?”——主要的观点有:
- 共享库浪费的内存要远远少于程序运行时产生的数据
- 而今运行内存已经很便宜了
“安全梦魇”——不是每个应用程序的运行真正上要注重安全。
而且,许多应用程序甚至从来没有看到任何安全更新,除非在“滚动更新的发行版”。
除了 Sven 这种从实用出发的观点以外Till 其实也指出了捆绑应用在一些情况下也有着其优点:
- 专有的供应商想要保持他们的代码游离于公共存储库之外将更加容易。
- 不被你的发行版打包的小生态的应用程序将变得更加可行。
- 在没有Beta包的二进制发行版中测试应用将变得简单。
- 将用户从复杂的依赖关系中解放出来。
### 最后的思考
虽然关于此问题有着不同的想法,但是有一个被大家共同接受的观点是:捆绑应用对于填补 Linux 生态系统有着其独到的作用。
虽然如此,它的定位,不论是主流的还是边缘的,都变得愈发清晰,至少理论上是这样。
想要尽可能优化其系统的用户,在大多数情况下应该要避免使用捆绑应用。
而讲究易用性、尽可能在维护系统上少费劲的用户,可能应该会感觉这种新应用十分舒爽。
--------------------------------------------------------------------------------
via: http://www.iwillfolo.com/linux-applications-that-works-on-all-distributions-are-they-any-good/
作者:[Editorials][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.iwillfolo.com/category/editorials/
[1]: http://www.iwillfolo.com/ubuntus-snap-red-hats-flatpack-and-is-one-fits-all-linux-packages-useful/
[2]: http://www.proli.net/2016/06/25/gnulinux-bundled-application-ramblings/
[3]: http://www.iwillfolo.com/5-reasons-use-gentoo-linux/

View File

@ -1,63 +0,0 @@
Linus Torvalds 透漏他最喜欢的编程使用的笔记本
====
>是戴尔 XPS 13 开发版。下面就是原因。
我最近和一些 Linux 开发者讨论了对于严谨的程序员来说,最好的笔记本是什么样的问题。结果,我从这些程序员的观点中筛选出了多款笔记本电脑。在我的书上的赢家是谁呢?就是戴尔 XPS 13 开发版。我在一家好的公司。Linus Torvalds —— Linux的缔造者 —— 也认同这个观点。对于他来说,戴尔 XPS 13 开发版是他周围最好的笔记本电脑了。
![](http://zdnet3.cbsistatic.com/hub/i/r/2016/07/18/702609c3-db38-4603-9f5f-4dcc3d71b140/resize/770xauto/50a8ba1c2acb1f0994aec2115d2e55ce/2016-dell-xps-13.jpg)
Torvald's 的说法,可能和你的想法不同。
在 Google+ 上Torvalds解释道“第一[我从来不把笔记本当成台式机的替代品][1],并且,我每年旅游不了几次。对于我来说,笔记本是有专门用途的,而不是每日(或者每周)都要使用,因此,主要的标准不是类似于“平均每天使用”,而是非常适合于旅游时使用。
因此,对于 Torvalds 来说,“我最后比较关心的一点是它是相当的小和轻,因为在会议上我可能一整天都需要带着它。我同样需要一个好的屏幕,因为到目前为止,我主要是在桌子上使用它,我希望文字的显示,小而且清晰。”
戴尔的显示器是由 Intel's Iris 540 GPU 提供的。在我的印象中这款GPU非常的不错。
Iris 提供了 13.3 英寸的 3,200×1,800 的显示屏。每英寸有280像素比我喜欢的[2015年的 Chromebook Pixel][2]多了40个像素比[MacBook Pro with Retina][3]多了60个像素。
然而,有了上面说的硬件配置,在[Gnome][4]桌面上玩好也不容易。正如 Torvalds 在另一篇文章解释的那样,它“[和我的桌面电脑有一样的分辨率][5]但是显然因为笔记本的显示屏更小Gnome 桌面似乎自己做决定所以我需要2倍的自动缩放因子这样才避免所有愚蠢的事情例如窗口显示图标等
解决方案你可以忘掉对于用户界面的期待。你需要在shell下运行gsettings 设置 org.gnome.desktop.interface 的缩放因子为1。
Torvalds 或许使用 Gnome 桌面,但是他不是很喜欢 Gnome 3.x 系列。我不是很赞同他。这就是为什么我使用 [Cinnamon][7] 来代替。
他还希望“一个相当强大的 CPU因为当我旅游的时候我依旧需要多次编译 Linux 内核。我并不需要像在家那样每次 pull request 都进行一次完整的“make allmodconfig”编译但是我希望可以比我以前的笔记本多编译几次实际上也包括屏幕应该是我想升级的主要原因。
Linus 没有描述他的 XPS 13 的细节,但是我审查单位一个高端机型。它是双核 2.2GHz 的第 6 代英特尔的酷睿 i7-6550U处理器搭载 Skylake 架构,并且 16GBs DDR3 内存和一个半兆兆位【注约500M】的PCIe固态硬盘SSD。我可以肯定Torvalds 的系统至少是精良装备。
一些你或许会关注的特征,不在 Torvalds 给出的列表中。
>“我不倾向于关心是触摸屏,因为我的手指相对于我所看到的文字是有大有笨拙(我也无法处理污迹:也许我有特别油腻的手指,但是我真的不想触摸屏幕)。
>我并不十分关心一些“一整天电池寿命”,因为坦率的讲,我不记得上次没有接入电源时什么时候了。我可能不会为了快速检查而打扰它在那儿充电,但它不是一个压倒一切的大问题。等到电池的寿命“超过两小时”,我只是不那么在乎了。
戴尔声称XPS 13搭配 56wHR4 芯电池拥有12小时的电池寿命。它已经很好的超过了我印象中10个小时电池寿命。我从没有尝试过把电量完全耗完是什么状态。
Torvalds 也不需要担心 Intel 的 Wi-Fi 设置。非开发版使用 Broadcom 的芯片设置,已经被 Windows 和 Linux 用户发现了一些问题。戴尔的技术支持对于我来控制这些问题非常有帮助。
一些用户在使用 XPS 13 触摸板的时候遇到了问题。Torvalds 和我都几乎没有什么困扰。Torvalds 写到“XPS13 触摸板对于我来说运行的非常好。这可能只是个人喜好,但它操作起来比较流畅,响应比较快。”
不过,尽管 Torvalds 喜欢 XPS 13,他同时也钟情于最新版的联想 X1 Carbon,惠普 Spectre 13 x360,和去年联想 Yoga 900。至于我我喜欢 XPS 13 开发版,至于价钱,我以前见到的模型是 $1949.99,可能使用你的信用卡就可以了。
因此如果你希望像世界上顶级的程序员之一一样开发的话Dell XPS 13 开发版对得起它的价格。
--------------------------------------------------------------------------------
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/

View File

@ -1,137 +0,0 @@
使用 Python 和 asyncio 来编写在线多人游戏 - 第3部分
=================================================================
![](https://7webpages.com/media/cache/17/81/178135a6db5074c72a1394d31774c658.gif)
在这个系列中,我们基于多人游戏 [贪吃蛇][1] 来制作一个异步的 Python 程序。前一篇文章聚焦于[编写游戏循环][2]上而本系列第1部分涵盖了 [异步化][3]。
代码戳[这里][4]
### 4. 制作一个完整的游戏
![](https://7webpages.com/static/img/14chs7.gif)
#### 4.1 工程概览
在此部分,我们将回顾一个完整在线游戏的设计。这是一个经典的贪吃蛇游戏,增加了多玩家支持。你可以自己在 (<http://snakepit-game.com>) 亲自试玩。源码在 Github的这个[仓库][5]。游戏包括下列文件:
- [server.py][6] - 处理主游戏循环和连接服务器。
- [game.py][7] - 主要 `Game` 类。实现游戏的逻辑和游戏的大部分通信协议。
- [player.py][8] - `Player` 类,包括每一个独立玩家的数据和蛇的表示。这个类负责获取玩家的输入以及根据输入相应地移动蛇。
- [datatypes.py][9] - 基本数据结构。
- [settings.py][10] - 游戏设置,在注释中有相关的说明。
- [index.html][11] - 一个文件中包括客户端所有的 html 和 javascript代码。
#### 4.2 游戏循环内窥
多人的贪吃蛇游戏是个十分好的例子,因为它简单。所有的蛇在每个帧中移动到一个位置,而且帧之间的变化频率较低,这样你就可以一探一个游戏引擎到底是如何工作的。因为速度慢,对于玩家的按键不会立马响应。按键先是记录下来,然后在一个游戏迭代的最后计算下一帧时使用。
> 现代的动作游戏帧频率更高,而且服务端和客户端的帧频率不相等。客户端的帧频率通常依赖于客户端的硬件性能,而服务端的帧频率是固定的。一个客户端可能根据一个游戏嘀嗒的数据渲染多个帧。这样就可以创建平滑的动画,这个受限于客户端的性能。在这个例子中,服务器不仅传输物体的当前位置,也要传输他们的移动方向,速度和加速度。客户端的帧频率称之为 FPS(frames per second),服务端的帧频率称之为 TPS(ticks per second)。在这个贪吃蛇游戏的例子中,二者的值是相等的,客户端帧的展现和服务端的嘀嗒是同步的。
我们使用文本模式一样的游戏区域,事实上是 html 表格中的一个字符宽的小格。游戏中的所有对象都是通过表格中的不同颜色字符来表示。大部分时候,客户端将按键码发送至服务器,然后每个 tick 更新游戏区域。服务端一次更新包括需要更新字符的坐标和颜色。所以我们将所有游戏逻辑放置在服务端,只将需要渲染的数据发送给客户端。此外,我们通过替换网络上发送的数据来最小化游戏被破解的概率。
#### 4.3 它是如何运行的?
这个游戏中的服务端出于简化的目的,它和例子 3.2 类似。但是我们用一个所有服务器都可访问的 Game 对象来代替之前保存所有已连接 websocket 的全局列表。一个 Game 实例包括玩家的列表 (self._players),表示连接到此游戏的玩家,他们的个人数据和 websocket 对象。将所有游戏相关的数据存储在一个 Game 对象中,会方便我们增加多个游戏房间这个功能。这样的话,我们只要维护多个 Game 对象,每个游戏开始时创建相应的 Game 对象。
客户端和服务端的所有交互都是通过编码成 json 的消息来完成。来自客户端的消息仅包含玩家所按下键对应的编码。其它来自客户端消息使用如下格式:
```
[command, arg1, arg2, ... argN ]
```
来自服务端的消息以列表的形式发送,因为通常一次要发送多个消息 (大多数情况下是渲染的数据):
```
[[command, arg1, arg2, ... argN ], ... ]
```
在每次游戏循环迭代的最后会计算下一帧,并且将数据发送给所有的客户端。当然,每次不是发送完整的帧,而是发送两帧之间的变化列表。
注意玩家连接上服务器后不是立马加入游戏。连接开始时是观望者 (spectator) 模式,玩家可以观察其它玩家如何玩游戏。如果游戏已经开始或者上一个游戏会话已经在屏幕上显示 "game over" (游戏结束),用户此时可以按下 "Join" (参与),加入一个已经存在的游戏或者如果游戏不在运行(没有其它玩家)则创建一个新的游戏。后一种情况,游戏区域在开始前会被先清空。
游戏区域存储在 `Game._field` 这个属性中,它是二维的嵌套列表,用于内部存储游戏区域的状态。数组中的每一个元素表示区域中的一个小格,最终小格会被渲染成 html 表格的格子。如果它的类型是 Char它是一个 `namedtuple` ,包括一个字符和颜色。在所有连接的客户端之间保证游戏区域的同步很重要,所以所有游戏区域的更新都必须依据发送到客户端的相应的信息。这是通过 `Game.apply_render()` 来实现的。它接受一个 `Draw` 对象的列表,其用于内部更新游戏区域和发送渲染消息给客户端。
我们使用 `namedtuple` 不仅因为它表示简单数据结构很方便,也因为用它生成 json 格式的消息时相对于字典更省空间。如果你在一个真实的游戏循环中需要发送完整的数据结构,建议先将它们序列化成一个简单的,更短的格式,甚至打包成二进制格式(例如 bson而不是 json),以减少网络传输。
`ThePlayer` 对象包括用双端队列表示的蛇。这种数据类型和列表相似,但是在两端增加和删除元素时效率更高,用它来表示蛇很理想。它的主要方法是 `Player.render_move()`,它返回移动玩家蛇至下一个位置的渲染数据。一般来说它在新的位置渲染蛇的头部,移除上一帧中表示蛇的尾巴元素。如果蛇吃了一个数字,需要增长,在相应的多个帧中尾巴是不需要移动的。蛇的渲染数据在主要类的 `Game.next_frame()` 中使用,该方法中实现所有的游戏逻辑。这个方法渲染所有蛇的移动,检查每一个蛇前面的障碍物,而且生成数字和石头。每一个嘀嗒,`game_loop()` 都会直接调用它来生成下一帧。
如果蛇头前面有障碍物,在 `Game.next_frame()` 中会调用 `Game.game_over()`。所有的客户端都会收到那个蛇死掉的通知 (会调用 `player.render_game_over()` 方法将其变成石头),然后更新表中的分数排行榜。`Player` 的存活标记被置为 `False`,当渲染下一帧时,这个玩家会被跳过,除非他重新加入游戏。当没有蛇存活时,游戏区域会显示 "game over" (游戏结束) 。而且,主游戏循环会停止,设置 `game.running` 标记为 `False`。当某个玩家下次按下 "Join" (加入) 时,游戏区域会被清空。
在渲染游戏的每个下一帧时都会产生数字和石头,他们是由随机值决定的。产生数字或者石头的概率可以在 settings.py 中修改。注意数字是针对游戏区域每一个活的蛇产生的,所以蛇越多,产生的数字就越多,这样他们都有足够的食物来消费。
#### 4.4 网络协议
#### 4.4 Network protocol
从客户端发送消息的列表:
Command | Parameters |Description
:-- |:-- |:--
new_player | [name] |Setting player's nickname
join | |Player is joining the game
从服务端发送消息的列表
Command | Parameters |Description
:-- |:-- |:--
handshake |[id] |Assign id to a player
world |[[(char, color), ...], ...] |Initial play field (world) map
reset_world | |Clean up world map, replacing all characters with spaces
render |[x, y, char, color] |Display character at position
p_joined |[id, name, color, score] |New player joined the game
p_gameover |[id] |Game ended for a player
p_score |[id, score] |Setting score for a player
top_scores |[[name, score, color], ...] |Update top scores table
典型的消息交换顺序
Client -> Server |Server -> Client |Server -> All clients |Commentaries
:-- |:-- |:-- |:--
new_player | | |Name passed to server
|handshake | |ID assigned
|world | |Initial world map passed
|top_scores | |Recent top scores table passed
join | | |Player pressed "Join", game loop started
| |reset_world |Command clients to clean up play field
| |render, render, ... |First game tick, first frame rendered
(key code) | | |Player pressed a key
| |render, render, ... |Second frame rendered
| |p_score |Snake has eaten a digit
| |render, render, ... |Third frame rendered
| | |... Repeat for a number of frames ...
| |p_gameover |Snake died when trying to eat an obstacle
| |top_scores |Updated top scores table (if updated)
### 5. 总结
说实话,我十分享受 Python 最新的异步特性。新的语法很友善,所以异步代码很容易阅读。可以明显看出哪些调用是非阻塞的,什么时候发生 greenthread 的切换。所以现在我可以宣称 Python 是异步编程的好工具。
SnakePit 在 7WebPages 团队中非常受欢迎。如果你在公司想休息一下,不要忘记给我们在 [Twitter][12] 或者 [Facebook][13] 留下反馈。
更多详见:
--------------------------------------------------------------------------------
via: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/
作者:[Saheetha Shameer][a]
译者:[chunyang-wen](https://github.com/chunyang-wen)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-part-3/
[1]: http://snakepit-game.com/
[2]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-and-asyncio-writing-game-loop/
[3]: https://7webpages.com/blog/writing-online-multiplayer-game-with-python-asyncio-getting-asynchronous/
[4]: https://github.com/7WebPages/snakepit-game
[5]: https://github.com/7WebPages/snakepit-game
[6]: https://github.com/7WebPages/snakepit-game/blob/master/server.py
[7]: https://github.com/7WebPages/snakepit-game/blob/master/game.py
[8]: https://github.com/7WebPages/snakepit-game/blob/master/player.py
[9]: https://github.com/7WebPages/snakepit-game/blob/master/datatypes.py
[10]: https://github.com/7WebPages/snakepit-game/blob/master/settings.py
[11]: https://github.com/7WebPages/snakepit-game/blob/master/index.html
[12]: https://twitter.com/7WebPages
[13]: https://www.facebook.com/7WebPages/

View File

@ -0,0 +1,80 @@
AWS和GCP Spark技术哪家强
===========
>Tianhui Michael Li 和Ariel Mndange-Pfupfu将在今年10月10、12和14号组织一个在线经验分享课程Spark分布式计算入门。该课程的内容包括创建端到端的运行应用程序和精通Spark关键工具。
毋庸置疑云计算将会在未来数据科学领域扮演至关重要的角色。弹性可扩展性和按需分配的计算能力作为云计算的重要资源直接导致云服务提供商集体火拼。其中最大的两股势力正是亚马逊网络服务AWS)【1】和谷歌云平台GCP)【2】。
本文依据构建时间和运营成本对AWS和GCP的Spark工作负载作一个简短比较。实验由我们的学生在数据孵化器进行数据孵化器【3】是一个大数据培训组织专门为公司招聘顶尖数据科学家并为公司职员培训最新的大数据科学技能。尽管内置的Spark效率惊人分布式工作负载的时间和成本亦然可以大到不能忽略不计。因此我们一直努力寻求更高效的技术我们的学生也因此能够学习到最好和最快的工具。
###提交Spark任务到云
Spark是一个类MapReduce但是比MapReduce更灵活、更抽象的并行计算框架。Spark提供Python和Java 编程接口但它更愿意用户使用原生的Scala语言进行应用程序开发。Scala可以把应用程序和依赖文件打包在一个JAR文件从而使Spark任务提交变得简单。
通常情况下Sprark结合HDFS应用于分布式数据存储而与YARN协同工作则应用于集群管理这种堪称完美的配合使得Spark非常适用于AWS的弹性MapReduce(EMR)集群和GCP的Dataproc集群。这两种集群都已有HDFS和YARN预配置不需要额外进行配置。
通过命令行比通过网页接口管理数据、集群和任务具有更高的可扩展性。对AWS而言这意味着客户需要安装CLI。客户必须获得证书并为每个EC2实例创建独立的密钥对。除此之外客户还需要为EMR用户和EMR本身创建规则主要是准入许可规则从而使EMR用户获得足够多的权限。
相比而言GCP的处理流程更加直接。如果客户选择安装Google Cloud SDK并且使用其Google账号登录那么客户即刻可以使用GCP的几乎所有功能而无需其他任何配置。唯一需要提醒的是不要忘记通过API管理器使能计算引擎、Dataproc和云存储JSON的API。
AWS就是这样实现自己喜欢的应用一旦火力全开根本停不下来比如可以通过“aws s3 cp”或者“gsutil cp”命令拷贝客户的数据到云端。再比如客户可以创建自己的输入、输出或者任何其他需要的bucket如此运行一个应用就像创建一个集群或者提交JAR文件一样简单。请确定日志存放的地方毕竟在云环境下跟踪问题或者调试bug有点诡异。
###一分钱一分货
谈及成本Google的服务在以下几个方面更有优势。首先购买计算能力的原始成本更低。4个vCPU和15G RAM的Google计算引擎服务每小时只需0.20美元如果运行Dataproc每小时也只需区区0.24美元。相比之下同等的云配置AWS EMR则需要每小时0.336美元。
其次计费方式。AWS按小时计费即使客户只使用15分钟也要付足1小时的费用。GCP按分钟计费最低计费10分钟。在诸多用户案例中资费方式的不同直接导致成本的巨大差异。
两种云服务都有其他多种定价机制。客户可以使用Sport Instance或Preemptible Instance竞价AWS或GCP的空闲云计算能力。这些服务比专有的、按需服务便宜缺点是不能保证随时有可用的云资源提供服务。在GCP上如果客户长时间每月的25%至100%使用服务可以获取更多折扣。在AWS上预付费或者一次购买大批量服务可以节省不少费用。底线是如果你是一个超级用户并且使用云计算已经成为一种常态那么最好深入研究云计算自建云计算服务。
最后新手在GCP上体验云服务的费用较低。新手只需300美元信用担保就可以免费试用60天GCP提供的全部云服务。AWS只免费提供特定服务的特定试用层级如果运行Spark任务需要付费。这意味着初次体验SparkGCP具有更多选择也少了精打细算和讨价还价的烦恼。
###性能比拼
我们通过实验检测一个典型Spark工作负载的性能与开销。实验分别选择AWS的m3.xlarg和GCP的n1-standard-4它们都是由一个Master和5个核心实例组成的集群。除了规格略有差别虚拟核心和费用都相同。实际上它们在Spark任务的执行时间上也表现的惊人相似。
测试Spark任务包括对数据的解析、过滤、合并和聚合这些数据来自堆栈交换数据转储。通过运行相同的JAR我们首先对大约50M的数据子集进行交叉验证然后将验证扩大到大约9.5G的数据集。
![](https://d3ansictanv2wj.cloudfront.net/1400_img_1_AWS_GCP-25ed6069029112a8439d89999796be18.jpg)
>Figure 1. Credit: Michael Li and Ariel M'ndange-Pfupfu.
![](https://d3ansictanv2wj.cloudfront.net/1400_img_2_AWS_GCP-448714718896b21e32f8b47d4657fc8c.jpg)
>Figure 2. Credit: Michael Li and Ariel M'ndange-Pfupfu.
结果表明短任务在GCP 上具有明显的成本优势这是因为GCP以分钟计费并最终扣除了10分钟的费用而AWS则收取了1小时的费用。但是即使长任务因为计费方式占优GPS仍然具有相当优势。同样值得注意的是存储成本并不包括在此次比较当中。
###结论
AWS是云计算的先驱这甚至体现在API中。AWS拥有巨大的生态系统但其准入模型已略显陈旧配置管理也有些晦涩难解。相比之下Google是云计算领域的新星并且抛光了云计算中一些粗糙的边缘问题。但是GCP缺少一些便捷的功能比如通过简单方法自动结束集群和详细的任务计费信息分解。另外其Python编程接口也不像AWS的Boto那么全面。
如果你初次使用云计算GCP因简单易用别具魅力。即使你已在使用AWS你也许会发现迁移到GCP可能更划算尽管真正从AWS迁移到GCP的代价可能得不偿失。
当然,现在对两种云服务作一个全面的总结还非常困难,因为它们都不是单一的实体,而是由多个实体整合而成的完整生态系统,并且各有利弊。真正的赢家是用户。一个例证就是在数据孵化器,我们的博士数据科学研究员在学习过程中真正体会到成本的下降。虽然我们的大数据企业培训客户可能对价格不那么敏感,他们很欣慰能够更快速地处理企业数据,同时保持价格不增加。数据科学家现在可以享受大量的可选服务,这些都是从竞争激烈的云计算市场得到的实惠。
--------------------------------------------------------------------------------
via: https://www.oreilly.com/ideas/spark-comparison-aws-vs-gcp?utm_source=dbweekly&utm_medium=email
作者:[Michael Li][a] [Ariel M'Ndange-Pfupfu][b]
译者:[firstadream](https://github.com/firstadream)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.oreilly.com/people/76a5b-michael-li
[b]: https://www.oreilly.com/people/Ariel-Mndange-Pfupfu
[1]: https://aws.amazon.com/
[2]: https://cloud.google.com/
[3]: https://www.thedataincubator.com/training.html?utm_source=OReilly&utm_medium=blog&utm_campaign=AWSvsGCP

View File

@ -0,0 +1,126 @@
排名前 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

@ -1,84 +0,0 @@
如何在 Ubuntu 16.04 和 Fedora 22-24 上安装最新的 XFCE 桌面?
====
Xfce 是一款针对 Linux 系统的现代化轻型开源桌面环境,它在其他的类 Unix 系统上,比如 Mac OS X, Solaries, *BSD plus, 也能工作得很好。它非常快并且因具有一个简单而优雅的用户界面很好地体现出了用户友好性。
在服务器上安装一个桌面环境有时被证明是很有用的,因为确切的运用程序可能需要一个桌面界面来高效和可靠的管理。 Xfce 一个卓越的性能是它的系统资源占用率很低,比如内存消耗很低,因此,如果服务器需要一个桌面环境的话它会是首选。
### XFCE 桌面的功能特性
另外,它的一些显著的组成部分和功能特性列在下面:
- Xfwm 窗口管理器
- Thunar 文件管理器
- 用户会话管理器:用来处理用户登录,电源管理及以后
- 桌面管理器:用来设置背景图片,桌面头像等更多操作
- 运用管理器
- 它的高度可连接性也增加了一些其他次要功能特性
Xfce 的最新稳定发行版是 Xfce 4.12, 它所有的功能特性和区别于旧版本的变化都列在了这儿。
#### 在Ubuntu 16.04 上安装 Xfce 桌面
Linux 分支比如 Xubuntu, Manjaro, OpenSUSE, Fedora Xfce Spin, Zenwalk 等许多其他版本的都提供它们自己的 Xfce 桌面安装包,但你也可以像下面这样安装最新的版本。
```
$ sudo apt update
$ sudo apt install xfce4
```
等待安装进程结束,然后退出当前会话或者你也可以选择重启系统。在登录界面,选择 Xfce 桌面,然后在像下面的频幕截图这样登录:
![](http://www.tecmint.com/wp-content/uploads/2016/09/Select-Xfce-Desktop-at-Login.png)
![](http://www.tecmint.com/wp-content/uploads/2016/09/XFCE-Desktop.png)
#### 在 Fedora 22-24 上安装 Xfce 桌面
如果你想在现存 Linux 分支 Fedora 上安装 xfce 桌面,那么你可以使用下面展示的 yum 或 dnf 命令。
```
-------------------- 在 Fedora 22 上 --------------------
# yum install @xfce
-------------------- 在 Fedora 23-24 上 --------------------
# dnf install @xfce-desktop-environment
```
安装 Xfce 以后,你可以从会话菜单选择 xfce 登录或者重启系统。
![](http://www.tecmint.com/wp-content/uploads/2016/09/Select-Xfce-Desktop-at-Fedora-Login.png)
![](http://www.tecmint.com/wp-content/uploads/2016/09/Install-Xfce-Desktop-in-Fedora.png)
如果你不再想要 Xfce 桌面留在你的系统上,那么可以使用下面的命令来卸载它:
```
-------------------- 在 Ubuntu 16.04 上 --------------------
$ sudo apt purge xfce4
$ sudo apt autoremove
-------------------- 在 Fedora 22 上 --------------------
# yum remove @xfce
-------------------- 在 Fedora 23-24 上 --------------------
# dnf remove @xfce-desktop-environment
```
在这个简单的入门指南中,我们讲解了如何安装最新版 Xfce 桌面的步骤,我相信这很容易掌握。如果一切进行良好,你可以享受一下使用 xfce, 作为其中一个 [best desktop environments for Linux systems][1].
然而,如果想再次和我们联系,你可以通过下面的反馈环节并且记得始终和 Tecmint 保持联系。
--------------------------------------------------------------------------------
via: http://linoxide.com/firewall/pfsense-setup-basic-configuration/
作者:[Aaron Kili ][a]
译者:[译者ucasFL](https://github.com/ucasFL)
校对:[校对者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/best-linux-desktop-environments/