2021年1月

使用我们的新电子书中的分步说明,以有趣的方式了解 Python。

 title=

Python 是目前最流行的程序设计语言之一。不管是为了工作还是娱乐为目的学习 Python,它都是一门功能强大且非常有用的编程语言。你可以创建应用程序来帮助你完成日常任务,创建你和朋友们喜欢玩的游戏,创建用于处理数据的脚本,创建用于生成或分析信息的应用程序等等。

无论你计划使用程序设计语言做什么,我们都认为通过创建游戏来学习比通过处理数字或变换字符串来学习更为有趣。然而,如果你完全是一个编程的新手,当你能看到代码在视频游戏等熟悉的环境中工作时,你会更容易理解为什么要用代码做某事。

你可能不会选择 Python 作为最好的编程语言(每个人对此都有自己的答案),但它不是一门令人恐惧的编程语言。 Python 可以使用很多关键字(例如 isis not)代替符号(例如 =!=)。它还能管理许多低级任务,因此你通常不必担心数据类型和垃圾收集之类的事情。通常,这意味着你马上就可以开始编写代码,而不会像在 CJava 那样的复杂编程语言面前遇到挫折。

为了帮助你学习 Python,我们编写了一本电子书,教你如何使用 Python 创建平台类视频游戏。在制作视频游戏的同时逐步通过课程学习 Python。另外一个好处是,你还将学习编程逻辑、语法、运算符等更多的内容。你可以在学习过程中立即看到结果,因此你学到的所有内容都会得到及时巩固。

一分钟上手 Python

Python 是一种用途广泛的编程语言,这意味着它(与大多数语言一样)提供了函数来对数字和字符做处理的“简单技巧”。Linux 操作系统用户已经安装了 Python。 Mac 操作系统用户使用的是较旧版本的 Python,但是你可以从 Python.org 网站 安装最新版本。Windows 操作系统用户可以从这篇 在 Windows 上安装 Python 的文章中学习如何安装 Python。

安装完成后,你可以启动交互式 Python Shell 进行算术运算:

$ python3
>>> 5+6
11
>>> 11/2
5.5
>>> 11//2
5
>>> 11%2
1

从该示例可以了解,需要一些特殊的符号,但学过数学的人都最熟悉不过了。也许你不喜欢数字,而更喜欢字母:

$ python3
>>> string = "hello world"
>>> print(string)
hello world
>>> print(string.upper())
HELLO WORLD
>>> print(string[0])
h
>>> print(string[1])
e
>>> print(string[2])
l
>>> print(string[3])
l
>>> print(string[4])
o

同样,相对地说基础的任务有特殊的符号表示法,但是即使没有说明,你也可能已经发现 [0][1] 符号表示法是将数据“切片”并且利用 print 函数将其中的数据显示在屏幕上。

五分钟用上 Pygame

如果你只想使用 Python 来创建一个视频游戏或任何超越基本计算的项目,这可能需要投入大量的学习、努力和时间。幸运的是,Python 诞生已有二十年了,开发者已经开发了代码库来帮助你(相对)轻松地完成典型的程序壮举。Pygame 是一套用于创建视频游戏的代码模块。它 不是唯一的这种类库,但是它是最古老的(不论好坏),因此在线上有很多文档和示例。

首先学习 推荐的 Python 虚拟环境工作流程

$ python3 -m venv mycode/venv
$ cd mycode
$ source ./venv/bin/activate
(venv)$

进入虚拟环境后,可以安全地将 Pygame 安装到项目文件夹中:

(venv)$ echo "pygame" >> requirements.txt
(venv)$ python -m pip install -r requirements.txt
[...] Installing collected packages: pygame
Successfully installed pygame-x.y.z

现在你已经安装了 Pygame,就可以创建一个简单的演示应用程序。它比你想象的要容易。Python 可以进行所谓的面向对象编程(OOP),这是一个漂亮的计算机科学术语,用于描述当代码结构化时,就像你在使用代码创建物理对象一样。然而,程序员并没有受到迷惑。他们知道在编写代码时并不是真的在制造物理对象,但是这样有助于想象,因为这样你就可以了解编程世界的局限性。

例如,如果你被困在一个荒岛上并想要一杯咖啡,那么你就必须收集一些黏土,做一个杯子,然后烘烤它。如果你足够聪明,先创建一个模具,以便每当需要另一个杯子时,都可以从模板中快速创建一个新杯子。即使每个杯子都来自相同的模板,它们在物理上也是独立的:如果一个杯子破裂,你还会有另一个杯子。你可以通过添加颜色或蚀刻使每个咖啡杯显得独一无二。

在 Pygame 和许多编程任务中,你都会使用类似的逻辑。在定义之前,它不会出现在你的编程项目中。下面是如何在 Python 和 Pygame 程序中让咖啡杯出现。

使用 Pygame 进行面向对象编程

创建一个名为 main.py 的文件,并输入以下代码用以启动 Pygame 模块,并使用 Pygame 模板创建一个窗口:

import pygame

pygame.init()

screen = pygame.display.set_mode((960,720))

就像你可能在现实生活中使用模板来创建对象一样,你也可以使用 Pygame 提供的模板来创建一个 妖精 sprite (这是 Pygame 的视觉游戏对象术语)。在面向对象的编程中,class 表示对象的模板。在你的文档中输入以下代码:

class Cup(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        # image
        img = pygame.image.load('coffeecup.png').convert()
        self.image = img

        # volume
        self.rect = self.image.get_rect()
        self.rect.x = 10
        self.rect.y = 10

该代码块使用 Pygame 的 sprite 模板设计一个咖啡杯子妖精。由于 self.image 的存在,你的咖啡杯妖精有一个图像,而 self.rect 则赋予了它体积(宽度和高度)。这些是 Pygame 期望妖精拥有的属性,但是如果你要创建一个可玩的视频游戏,则可以为其指定任何其他所需的属性,例如健康点和得分。

到目前为止,你所要做的就是创建一个窗口和一个用于咖啡杯的 模板 。你的游戏实际上还没有一个杯子。

你的代码的最后一部分必须使用模板来生成杯子并将其添加到游戏世界中。如你所知,计算机运行速度非常快,因此从技术上讲,你到目前为止创建的代码只会运行一毫秒左右。编写图形计算机应用程序时,无论计算机是否认为已完成规定的任务,都必须强制其保持打开状态。程序员使用 无限循环 来执行此操作,该循环在 Python 中由 while True 语句表示(True 始终为真,因此循环永远不会结束)。

无限循环可以确保你的应用程序保持打开状态足够长的时间,以使计算机用户可以查看和使用该应用程序:

cup = Cup()

while True:
    pygame.display.update()
    screen.blit(cup.image, cup.rect)

此代码示例从模板 Cup 创建杯子,然后使用 Pygame 函数更新显示。最后,使用 Pygame 的 blit 函数在其边框内绘制杯子的图像。

获取图形

在成功运行代码之前,你需要为咖啡杯准备一个图形。你可以在 FreeSVG.org 上找到许多 公用创作 咖啡杯图形。我用了 这个。将图形保存在项目目录中,并将其命名为 coffeecup.png

运行游戏

启动应用程序:

(venv)$ python ./main.py

 title=

Pygame 是一个功能强大的框架,除了在屏幕上绘制咖啡杯之外,你还可以做更多的事情。下载我们的免费电子书 更好地了解 Pygame 和 Python。


via: https://opensource.com/article/20/10/learn-python-ebook

作者:Seth Kenlon 选题:lujun9972 译者:stevenzdg988 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Shell 是类 Unix 系统中超级好用的工具,而 Zsh 是 shell 中的佼佼者,但是现在网上一搜索 Zsh 的配置方案,遍地都是的互相复制粘贴的 oh-my-zsh 配置方案。事实上 oh-my-zsh 并不好用,严重拖慢了 Zsh 的速度,反而让你的工作并不高效。现在将我自己的使用方案分享给大家,教大家配置一个高效好用的 Zsh。

安装 Zsh

我笔记本电脑使用的是 ArchLinux,服务器使用的是 Ubuntu。主要介绍这两个发行版的配置方法,红帽系的发行版请自行尝试。

我个人喜欢尽量从发行版的源里安装。从源安装具有方便,稳定,容易维护等优点。

在 ArchLinux 安装 Zsh

终端里面输入:

sudo pacman -Sy zsh

在 Ubuntu 安装 Zsh

终端里面输入:

sudo apt-get update
sudo apt-get install zsh

安装插件

我只需要两个插件:

  • zsh-autosuggestions:这个是自动建议插件,能够自动提示你需要的命令。
  • zsh-syntax-highlighting:这个是代码高亮插件,能够使你的命令行各个命令清晰明了。

还有一个主题:

  • zsh-theme-powerlevel10k 这个主题提供漂亮的提示符,可以显示当前路径、时间、命令执行成功与否,还能够支持 git 分支显示等等。

同样是尽可能从源里面安装。

Ubuntu 20.10 的源里面是 powerlevel9k,配置好后实际使用体验和 powerlevel10k 差别不大。

在 ArchLinux 安装插件和主题

终端里面输入命令:

sudo pacman -S zsh-autosuggestions zsh-syntax-highlighting zsh-theme-powerlevel10k zsh-completions

在 Ubuntu 安装插件和主题

终端里面输入命令:

sudo apt-get install zsh-autosuggestions zsh-syntax-highlighting zsh-theme-powerlevel9k

这样插件和主题就安装好了。

更改默认 shell,并配置插件和主题

安装好了之后就是启用 Zsh,并且配置插件和主题了。

更改默认 shell

终端输入命令:

chsh -s /usr/bin/zsh

ArchLinux 和 Ubuntu 都是同样的操作,然后注销并重新登录,就启用了 Zsh。第一次进入 Zsh 会自动出现一个配置界面,这个界面可以根据需要自定义 Zsh。

在这里输入 1 就可以进入配置界面了。

配置界面中各个菜单代表的意思分别是:

  • 1:设置命令历史记录相关的选项
  • 2:设置命令补全系统
  • 3:设置热建
  • 4:选择各种常见的选项,只需要选择“On”或者“Off”
  • 0:退出,并使用空白(默认)配置
  • a:终止设置并退出
  • q:退出

这里根据提示,然后按照你自己的喜好配置就可以了。配置好后,会在你的用户目录下生成 .zshrc 文件。然后我们要去这个文件中启用插件和主题。

配置插件和主题

Zsh 的配置文件是 ~/.zshrc 文件,这个文件在你的用户目录下 ~/。删掉了这个文件,再次进入 Zsh,又会触发 Zsh 的配置界面。

在 ArchLinux 启用插件和主题

打开 ~/.zshrc 文件,将以下行代码添加到其中:

source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
在 Ubuntu 启用插件和主题

打开 ~/.zshrc 文件,将以下行代码添加到其中:

source /usr/share/powerlevel9k/powerlevel9k.zsh-theme
source /usr/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

这样就成功的启用了插件和主题,插件不需要额外的配置就很好用,有额外配置需求的可以自行研究。

powerlevel10k 主题在首次进入时,会触发一个配置界面。

然后根据提示和你的喜好一步步完成配置即可。

这里可以选择你喜欢的提示符。

配置完成后就可以愉快的使用啦!

当我工作的时候,我会一直在后台播放音乐。大多数情况下,这些音乐是以黑胶唱片的形式在转盘上旋转。但有时我不想用这种单纯的方法听音乐时,我会选择听流媒体音频应用程序的方式。然而,由于我工作在 Linux 平台上,所以我只可以使用在我的操作系统上运行良好的软件。幸运的是,对于想在 Linux 桌面听流式音频的人来说,有很多工具可以选择。

事实上,Linux 为音乐流媒体提供了许多可靠的产品,我将重点介绍我最喜欢的五种用于此任务的工具。警告一句,并不是所有的玩意都是开源的。但是如果你不介意在你的开源桌面上运行一个专有的应用程序,你有一些非常棒的选择。让我们来看看有什么可用的。

Spotify

Linux 版的 Spotify 不是那种在你启动就闪退的愚蠢的、半生不熟的应用程序,也没有阉割什么功能。事实上,Spotify 的 Linux 版本与其他平台上的版本完全相同。使用 Spotify 流媒体客户端,你可以收听音乐和播客、创建播放列表、发现新的艺术家等等。Spotify 界面(图 1)非常易于导航和使用。

 title=

图 1:Spotify 界面可以很容易地找到新的音乐和旧的收藏。

你可以使用 snap(使用 sudo snap install Spotify 命令)安装 Spotify,也可以使用以下命令从官方存储库安装 Spotify:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90
sudo echo deb http://repository.spotify.com stable non-free | sudo tee /etc/apt/sources.list.d/spotify.list
sudo apt-get update
sudo apt-get install spotify-client

一旦安装,你就可以登录你的 Spotify 帐户,这样你就可以开始听好听的音乐,以帮助激励你完成你的工作。如果你已在其他设备上安装了 Spotify(并登录到同一帐户),则可以指定音乐应该流式传输到哪个设备(通过单击 Spotify 窗口右下角附近的“可用设备”图标)。

Clementine

Clementine 是 Linux 平台上最好的音乐播放器之一。Clementine 不仅允许用户播放本地存储的音乐,还可以连接到许多流媒体音频服务,例如:

使用 Clementine 有两个注意事项。首先,你必须使用最新版本(因为某些软件库中可用的构建版本已过时,并且不会安装必要的流式处理插件)。第二,即使是最新的构建版本,一些流媒体服务也不会像预期的那样工作。例如,接入 Spotify 频道时,你只能使用最热门的曲目(而无法使用播放列表,或搜索歌曲的功能)。

使用 Clementine 互联网流媒体服务时,你会发现其中有很多你从来没有听说过的音乐家和乐队(图 2)。

 title=

图 2:Clementine 互联网广播是寻找新音乐的好方法。

Odio

Odio 是一个跨平台的专有应用程序(可用于 Linux、MacOS 和 Windows),它允许你流式传输各种类型的互联网音乐站。广播的内容是取自 www.radio-browser.info,而应用程序本身在为你呈现流方面做了令人难以置信的工作(图 3)。

 title=

图 3:Odio 接口是你能找到的最好的接口之一。

Odio 让你很容易找到独特的互联网广播电台,甚至可以把你找到并收藏的电台添加到你的库中。目前,在 Linux 上安装 Odio 的唯一方法是通过 Snap。如果你的发行版支持 snap 软件包,请使用以下命令安装此流应用程序:

sudo snap install odio

安装后,你可以打开应用程序并开始使用它。无需登录(或创建)帐户。Odio 的设置非常有限。实际上,它只提供了在设置窗口中选择暗色主题或亮色主题的选项。然而,尽管它可能功能有限,但 Odio 是在 Linux 上播放互联网广播的最佳选择之一。

StreamTuner2

Streamtuner2 是一个优秀的互联网电台 GUI 工具。使用它,你可以流式播放以下音乐:

Streamtuner2 提供了一个很好的界面(如果不是有点过时的话),可以很容易地找到和播放你喜爱的音乐。StreamTuner2 的一个警告是,它实际上只是一个用于查找你想要听到的流媒体的 GUI。当你找到一个站点时,双击它打开与流相关的应用程序。这意味着你必须安装必要的应用程序,才能播放流媒体。如果你没有合适的应用程序,你就不能播放流媒体。因此,你将花费大量的时间来确定要为某些流媒体安装哪些应用程序(图 4)。

 title=

图4:配置 Streamtuner2 需要一个坚强的心脏。

VLC

很长一段时间以来,VLC 一直被称为 Linux 最好的媒体播放工具。这是有充分理由的,因为几乎所有你丢给它的东西它都能播放。其中包括流媒体广播电台。虽然你无法让 VLC 连接到 Spotify 这样的网站,但你可以直接访问互联网广播,点击播放列表,而 VLC 毫无疑问可以打开它。考虑到目前有很多互联网广播电台,你在寻找适合自己口味的音乐方面不会有任何问题。VLC 还包括可视化工具、均衡器(图 5)等工具。

 title=

图 5:VLC 可视化工具和均衡器特性。

VLC 唯一需要注意的是,你必须有一个你希望听到的互联网广播的 URL,因为这个工具本身并不能进行管理。但是有了这些链接,你就找不到比 VLC 更好的媒体播放器了。

这些工具软件怎么来的

如果这五个工具都不太不适合你的需要,我建议你打开你发行版的应用商店,搜索一个适合你的。有很多工具可以制作流媒体音乐、播客等等,不仅可以在 Linux 上实现,而且很简单。


via: https://www.linux.com/blog/2019/2/5-streaming-audio-players-linux

作者:Jack Wallen 选题:lujun9972 译者:Chao-zhi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

代码英雄讲述了开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。

什么是《代码英雄》

代码英雄 Command Line Heroes 是世界领先的企业开源软件解决方案供应商红帽(Red Hat)精心制作的原创音频播客,讲述开发人员、程序员、黑客、极客和开源反叛者如何彻底改变技术前景的真实史诗。该音频博客邀请到了谷歌、NASA 等重量级企业的众多技术大牛共同讲述开源、操作系统、容器、DevOps、混合云等发展过程中的动人故事。

本文是《代码英雄》系列播客《代码英雄》第三季(7):与机器对话音频脚本。

导读:创造一台会思考的机器在 20 世纪 50 年代似乎是科幻小说。但 John McCarthy 决定把它变成现实。他从一种叫做 LISP 的语言开始。Colin Garvey 介绍了 McCarthy 是如何创造出第一种人工智能语言的。Sam Williams 介绍了早期人们对思考机器的兴趣是如何从学术界蔓延到商业界的,以及在某些项目没有兑现承诺之后,漫长的人工智能寒冬是如何最终到来的。Ulrich Drepper 解释说,人工智能的梦想超出了当时硬件所能提供的范围。

但硬件每天都在变得更强大。Chris Nicholson 指出,今天的机器有足够的处理能力来处理人工智能的资源需求 —— 以至于我们正处于人工智能研发的革命性复苏之中。最后,Rachel Thomas 确定了 LISP 之外的人工智能语言 —— 证明了人工智能现在正准备做的不同类型的任务。

00:00:05 - 播音员

卡斯帕罗夫非常慌乱。虽然已经拼尽全力,但是他意识到,他已经输了。

00:00:12 - Saron Yitbarek

1997 年的春天,国际象棋冠军 加里·卡斯帕罗夫 Garry Kasparov 输给了计算机程序“深蓝”。对于机器智能来说,这是历史上的关键时刻。对于某些人来说,这是一次生存危机,是对人类智慧至上的挑战。但是,对于世界上的技术专家来说,这是另一种意味上的里程碑,是 人工智能 artificial intelligence (AI)领域的一次飞跃。这表明,想要真正的智慧机器诞生,或许不是太过于疯狂的梦想。

00:00:47 - 播音员

去赋予一台机器思考的能力仍然还是梦想,距离实现梦想还需要很多年的努力。此外,还需要做出不少惊人的突破。

00:00:56 - Saron Yitbarek

我们是如何抵达这一步的?是什么导致了卡斯帕罗夫那场著名的失败?我们从哪里来,又该到哪里去?我是 Saron Yitbarek,这里是《代码英雄》,一档来自红帽的原创播客节目。在本季,我们都在探索编程语言的奥秘,揭开他们的历史和发展潜力。这一期让我们关注人工智能。你会使用什么语言,来让你的机器拥有自己的思想呢?我们的编程语言如何帮助我们抵达“深蓝时刻”,甚至是更远的地方?什么样的编程语言能最适配会思考的机器?这是我们半个多世纪以来一直在尝试解决的问题。因此,我们的故事要追溯到 1940 年代,那时,人工智能这个词汇还没有被创造出来。

00:01:59:

回顾二战结束是如何结束的,我们有这样一种感觉,那就是技术帮助同盟国赢得了战争。人们乐观地认为,科技可以成就一切。整整一代人都相信计算机的力量。在这一代人中诞生了人工智能的教父,一位出色的数学家 —— 约翰·麦卡锡 John McCarthy ,他从根本上改变了我们与机器交谈的方式。我想知道他的思想的起源,以及范式的转变是如何发生的。我的意思是,对于初学者来说,当麦卡锡和他的同事们在想象智能机器的未来时,他们到底想象了什么?

00:02:43 - Colin Garvey

哇,这是一个好问题。

00:02:46 - Saron Yitbarek

我和 Colin Garvey 聊了聊。他是 伦斯勒理工学院 Rensselaer Polytechnic Institute 科学与技术研究系的历史学家。以下是我们的一些聊天内容:

00:02:58 - Colin Garvey

麦卡锡对提出 AI 究竟是什么这件事情非常谨慎。不过,举个例子来说,他可能在他最著名但并未实现的程序中描述过(这只是一个思路),人工智能是一个 接受建议者 advice taker 。接受建议者这个说法由麦卡锡于 1960 年的名为《 具有常识的程序 Programs with Common Sense 》的论文中提出的。在开始的时候,你觉得接受建议者可能是一个会学习的机器人,这是它被发明的本意,它算是一个可以接受建议的家用机器人。你说:“不,你这样做是错误的,要那样做。”它就会明白你的意思。

00:03:44 - Saron Yitbarek

那很有帮助。

00:03:45 - Colin Garvey

可能会有帮助。那时候接受建议者要实现的目标是,从办公室导航到机场。换句话说,将从办公室去机场这个建议,正式化成接受建议者机器人能够接受的程序以达成目的,得出从办公室前往机场的一系列程序。它把人类的语言正式化为一系列的合乎逻辑的陈述,即需要根据现在的情况进行合适的抉择,以达到把当前情况转变为理想情况的目标。他将这些想法伪代码化,这实际上是 LISP 的起源。然后在接下来的几年里,LISP 作为他想法的实现,或者说实现他想法的语言出现了。

00:04:39 - Saron Yitbarek

麦卡锡的 LISP 语言改变了游戏规则。它不仅能帮助机器理解命令,还能帮助机器理解一些常识性的逻辑。麦卡锡发现,他可以编写条件表达式,即体现规则的代码,而不是仅仅是直白的命令。实际上,LISP 有一堆重大的编程突破,条件表达式、垃圾回收、递归等等。LISP 在代码和数据中都使用了列表。这是一个简单但具有深远的影响的更改。这是语言范式的转变,所有这些为麦卡锡本人称之为“人工智能”的整个领域打开了大门。想象一下,在你和机器说话的时候,并不需要把每一个细节都给编写好。你可以让那台机器自己来进行推断和推理。麦卡锡希望通过他的 LISP 语言,给机器一种智慧。好了,回到我和 Colin Garvey 的聊天。

00:05:41 - Colin Garvey

LISP 是人们编写高级计算机语言的尝试的过程中,诞生的精华。

00:05:47 - Saron Yitbarek

这很有意思。因为我的下一个问题是 LISP 和人工智能之间的关系。接受建议者第一次描述了 AI 的功能,它听起来也像是 LISP 的开始。能跟我聊聊更多 LISP 和人工智能之间的关系吗?

00:06:04 - Colin Garvey

当然。这些早期的人工智能研究人员面临着一件事,那就是他们还在使用打孔卡进行编程。也许这些早期的编程人员,知道如何进行机器码级别的编程,这是非常困难且耗时的工作。因此,你需要一个更高级的编程语言,以便你可以用更加接近人类语言的方式编程。所以,像 LISP 这样,用列表的形式给出指令的语言 —— 这也是其名称的来源,基于列表的处理(LCTT 译注,LISP 全称:“LISt Processing“)。从某种意义上来说,这样用列表给出的指令更加接近于人类语言,因为他们基本上都可以用通顺的逻辑去理解。因此,如果你可以读懂 形式逻辑 formal logic ,那么基本上可以看明白 LISP 程序,或者任何基于逻辑的编程语言的程序,并对于代码中发生的事情有着更好的了解。

00:07:10 - Saron Yitbarek

所以 LISP 真的帮了大忙……嗯,我的意思是它帮助我们将我们的想法给予人工智能,让我们能够朝着实现人工智能努力,有朝一日总能达成这个梦想。不过这也让我想知道在那个时期,“智能”到底意味着什么?所以,如果我们回到 50 年代,在那个时间点上,什么是“智能”?人们是如何定义它的?因为 LISP 最初为 IBM 704 开发的,它每次做的其实只是一件事。看起来并不是很“智能”。当时的人们是如何看待“智能”的呢?

00:07:43 - Colin Garvey

有关“智能”的定义,这自然非常有争议的。就我个人,从一个普通大众的角度而言,他们的概念是非常狭窄的。但是在当时,广泛认可的定义是:能够执行被认为有智力的举动的能力。但持这个观点的这些人实际上是数学家、逻辑学家和计算机程序员。我的意思是,说句粗俗的话,下棋的能力被认为是智力的明确标志。这一代早期的 AI 人更喜欢回避这个问题,并说,“嗯,哲学家们还没有就什么是‘智力’达成一致,但如果我们制造出一台能下棋的电脑,我想我们都同意这是‘智能’。“

00:08:40 - Saron Yitbarek

不管怎样,这是一个起点。就像婴儿的第一步。

00:08:45 - Colin Garvey

麦卡锡有一个梦想,让机器可以具有常识,并像人一样聪明。本质上来说,你可以和它们交谈。他开始创造一种程序语言来实现这个梦想。这就是 LISP。它模仿了人类思想的某些方面,尤其是逻辑思维能力,并使得利用计算机放大或扩展这些思想特征成为可能。所以从数学家的角度来看,他已经在实现智能机械的道路上走得很远了。

00:09:32 - Saron Yitbarek

Colin Garvey 是伦斯勒理工学院科学技术研究系的历史学家。

随着 LISP 的推进,发展人工智能的新机会开始出现,LISP 是这一新领域的标准语言。麦卡锡离开麻省理工学院去斯坦福大学工作后,麻省理工学院的其他工程师继续从事 LISP 工作。他们把麦卡锡的语言改进成一种叫做 Maclisp 的方言版本,甚至开发了 LISP 操作系统。看起来麦卡锡对人工智能未来的梦想正在成为现实。1968 年,麦卡锡甚至和苏格兰国际象棋大师 大卫·利维 David Levy 打赌。麦卡锡打赌,10 年后,电脑将能够在国际象棋比赛中赢过利维。但是,如果事情进展得那么顺利,那就不是《代码英雄》的故事了。那时候麦卡锡还不知道,人工智能的冬天就要来了。

00:10:45 - Saron Yitbarek

当麻省理工学院的那个基于 LISP 的操作系统,从学院衍生到公司后,情况开始发生变化。其中的一家公司 Symbolix 推出了 LISP 机器,甚至从 MIT 的 AI 实验室 AI Lab 雇用了 14 名员工,而且更不切实际的研究不再是重点。

00:11:25 - Sam Williams

这些公司原本都来自 AI 实验室。

00:11:31 - Saron Yitbarek

这是记者 Sam Williams,他写了一本名为《Arguing AI》的书。

00:11:36 - Sam Williams

Symbolix 可能是最突出的一个。它得到了最多的关注、最多的风险投资。约翰·麦卡锡和他的门徒们推动了所有的创新。我想,这只是一个案例。在 70 年代末期,人们普遍认为:“好吧,我们已经在学术界做了我们能够做到的事情,让我们在商界脱颖而出,让私营企业为我们投资。”

00:12:01 - Saron Yitbarek

这在当时的环境下可以理解。那时AI 似乎即将起飞,有利可图。

00:12:07 - Sam Williams

那时候的算力便宜到中型企业也可以购买。因此,我认为许多公司看到了一个机会:“那里有一个富有潜力的市场,我们可以进入这个市场,我们可以把关于人工智能的产出卖给那些想要具有全球竞争力的企业。”他们让投资者为这个想法大肆投资。在 80 年代初期,大量的资金涌入该领域。

00:12:29 - Saron Yitbarek

我们可以讨论一下为什么这个热潮后来干涸了。但是,我现在可以肯定的一点是,事情已经被大肆炒作了。

00:12:39 - Sam Williams

大量资金流入。人们认为市场非常成熟。

00:12:44 - Saron Yitbarek

从一定来说,大量热钱涌入人工智能领域造成的繁荣,就像世纪之交时网络泡沫的前奏。

00:12:52 - Sam Williams

这在技术发展史上并不少见,人们过度投资,但最终公司未能兑现他们的希望。所以,资金供应陷入困境。公司必须通过老式的方式赚钱 —— 去拉客户,去生产东西。

00:13:08 - Saron Yitbarek

所以那时,麦卡锡的梦想轰然崩溃,回归了现实。Williams 描述了随后的人工智能冬天。

00:13:16 - Sam Williams

你会看到像 Symbolix 这样的公司市值上升到 1 亿美元,然后短短几年后就申请破产保护。在那时候有很多这样的人:“在 10 年内,我们将做到这一点,在 5 年内,你会看到这个。5 年后,你就会看到这个。”这些家伙是投机者,或者是想要从五角大楼或任何其他地方获取更多资金的学者。因为这种危险的炒作,过度炒作,让人工智能走上歧途。

00:13:48 - Saron Yitbarek

人们对于人工智能的兴趣崩塌了。基础设施不到位,或许计算速度也不够高,这使一切努力都变成了徒然。但无论如何,这之中的指导思想是正确的,它只是生在了错误的时代。到了 80 年代末,人工智能研究日渐减少。

00:14:06 - Sam Williams

我认为人们脱离人工智能这个领域的原因是,它失去了最初吸引他们进入其中时的冒险性。它曾处于技术领域的最前沿。在西海岸,很多人的精力被吸引到制造个人电脑上。从 40 年后的今天看来,试着让电脑进入美国每个家庭,比帮助财富 1000 强的企业做出更好的决策,是一个更引人注目的概念。

00:14:39 - Saron Yitbarek

Sam Williams 是《Arguing AI》的作者。我们在这里描述的是一个计算机编程的世界,它被一分为二:一方面是约翰·麦卡锡这样的人,他们试图使用 LISP 等新型语言来探究智能的本质;另一方面,也不可避免地存在着另一群人,他们更专注于解决实际问题,试图让那些愿意为其服务付款的企业轻松一些。现实情况是,世界上的那些约翰·麦卡锡们,那些抽象的梦想家们,并没有太多机会在人工智能的可能性上进行深入探索。他们所拥有的设备甚至还比不上我们今天使用的手机。他们的愿景对于手头的硬件现实来说,真的太大了。

00:15:36 - Ulrich Drepper

当初,我们在轰轰作响的庞大计算机上工作,和数不清的人、数不清的工作组抢夺它有限的性能。

00:15:46 - Saron Yitbarek

这是红帽的杰出工程师 Ulrich Drepper。他解释了早期的人工智能梦想之所以失败,只是因为没有成功所需的基本工具。

00:15:55 - Ulrich Drepper

我们有 PDP 10,PDP 11 之类的计算机(LCTT 译注:Digital Equipment Corporation 公司的大型计算机产品),但每一台都可能有另外 20 个人在同时使用。即使没有这些人将计算力分流走,它们也是真正的低能力机器,其性能不足以在支持 LISP 系统的必要功能的同时,运行一套机能齐全的用户界面。

00:16:19 - Saron Yitbarek

随着时间的推移,新开发的硬件对 LISP 也不再友好。

00:16:26 - Ulrich Drepper

我们不仅走了台式机的道路,也走了服务器的道路。在我们今天已经习惯的处理器类型中,我们的实现的一切都是基于 8 位的处理器,而我们可能有了 16 位处理器、32 位处理器之类的。想要在这样的机器上高效实现 LISP 系统,就必须绕不少圈才能成功。

00:16:56 - Saron Yitbarek

因此,计算世界的外部现实对这个脆弱的人工智能领域产生了意想不到的抑制作用。

00:17:06 - Ulrich Drepper

和大厂商生产的 CPU 相比,定制硬件的成本极为高昂,其发展也极为缓慢。

00:17:21 - Saron Yitbarek

通过创建自定义的硬件解决方案,继续使用 LISP 朝着 AI 梦想前进并非不可能。但是,事实是,令人兴奋的新硬件将很多人的注意力推向了其他工作领域。

00:17:35 - Ulrich Drepper

你只需要等待处理器的下一个版本,那个普通的处理器获得的改进,比你自己开发硬件求解,比如说实现一个 LISP 系统,所能达到的效果和收获要大得多。最终,硬件变得越来越复杂,自行定制硬件成为了一件近乎于不可能的事。

00:18:03 - Saron Yitbarek

那么,约翰·麦卡锡的远景梦想是慢慢死去,还是只在那漫长的人工智能冬天里沉睡,等待时机?在 21 世纪的第一个十年里,约翰·麦卡锡的语言 LISP 的使用者不断地流失。但是,在同一时间,发生了一件惊人的事。尽管 LISP 本身逐渐消逝,与这门语言相连的梦想却被重新点燃了。人工智能的梦想重新活了起来。

00:18:34 - Chris Nicholson

我想说的是,这次不一样。

00:18:36 - Saron Yitbarek

这是 Chris Nicholson,开源 AI 软件公司 Skymind 的创始人兼 CEO。Chris 认为,在经历了大起大落之后,人工智能或许终于要进入一个可持续发展的长夏了。

00:18:52 - Chris Nicholson

我们正处在人工智能的夏天,许多人都对 AI 可能的应用而激动不已。但是,这种兴奋是基于研究的真正进展,而这些进展是基于其他领域的进展。我们的硬件比当初好了太多太多,人们能用 GPU 替代 CPU,也能在大规模集群中使用这些 GPU 来训练巨大的机器学习模型,从而产生真正准确的预测。为了做到这一点,他们也使用了前所未有的巨大数据集,这样的数据量在 80 年代、90 年代或者之前都是闻所未闻、见所未见的。

00:19:30 - Saron Yitbarek

对于 AI 语言,巨大的数据集的兴起是关键,因为它们代表了我们理解智能的方式的关键变化。AI 研究的重点转移到了 深度学习 deep learning 方面,而深度学习似乎成为了 AI 研究的全部。

00:19:47 - Chris Nicholson

LISP 是为了操纵符号而设计的。在 LISP 诞生的时代,AI 意味着符号推理。当时,人们认为人类的思维和智力本身就是符号的操作。现代的人工智能,也就是让我们如此着迷的人工智能,远不止于此。现在的 AI,就机器学习而言,是一种可以从非结构化数据中学习的大型数据处理机器。因此,你可以让机器学习算法一点一滴地拾起文本和图像,在这个过程中,随着时间的推移,这些算法将变得越来越智能。LISP 不是那样设计的。它被设计为仅在人工干预的基础上发展。然而,对于现在的机器学习算法而言,其中的学习部分意味着它们会根据所接触的数据进行自我调整。

00:20:40 - Saron Yitbarek

这就是让机器以它们自己的方式实现智能化。但是,你知道,不仅仅是我们的机器在学习以强大的新方式思考;开源工具也让人们提高了自己的水平。克里斯认为,开源的开发方式对防止另一个人工智能冬天的到来有很大的帮助。

00:21:03 - Chris Nicholson

人工智能冬天发生的一个原因是,当创意在放缓时,网络就会崩溃,资金就会枯竭。有了现在这些免费的开源工具,我们看到的不是创意的放缓,而是一种加速。创意得以被及时地测试,得以被迅速地分享。所以,这不仅仅是工具,而是预先训练好的机器学习模型,一个研究小组可以与另一个研究小组分享,或者与广大公众分享。而创意本身也被发表在 ARXIV 这样的平台上。ARXIV 是由 康奈尔大学 Cornell University 主办的。所有这些因素汇合在一起,加快了创意流动的速度。对我来说,这是对人工智能冬天的一种保险。这些因素的交汇使得人工智能成为一个超级令人兴奋的领域,它们意味着人工智能的发展速度比炒作更快。

00:22:03 - Saron Yitbarek

Chris Nicholson是 Skymind 的创始人兼 CEO。

所以,开源能将人工智能领域从旧的专有模式所催生的寒冬中解冻出来。AI 的新时代伴随着 GPU 的巨大改进而到来。与之一并到来的还有算法上的突破,它帮助我们训练 AI 学习数据中的模式。然后,数据本身,海量的数据集正在为今天的 AI 提供动力。这一点,比任何事情都重要,这就是为什么新语言得以继续 LISP 未能完成的征途。我们向 Fast AI 的联合创始人 Rachel Thomas 询问,哪些语言适合下一代 AI。

00:22:50 - Rachel Thomas

我们目前正在探索将 Swift 用于 TensorFlow 的可能性。Swift 是 Chris Lattner 开发的一种语言,我知道也有人在使用 Julia,他们正促进着 Julia 的开发与发展。但是,就目前而言,Python 在深度学习领域有着无可比拟的巨大优势。

00:23:03 - Saron Yitbarek

这是因为 Python 非常适合处理大型数据集。

00:23:08 - Rachel Thomas

我认为过去 20 年中发生的最重要的改变是,数据量的增长和人们对于数据的越发重视。我认为,数十年前有关 AI 的许多早期工作更多地围绕一种符号系统,即某种抽象符号系统。我要说的是,目前 AI 领域中的许多工作都围绕着数据展开,例如识别图像里的某样东西,或者辨认一条影评是褒还是贬。这些都是基于数据的问题。所以,我认为,Python 成为赢家 —— 至少是早期的赢家 —— 的原因之一,是因为 NumPy、SciPy 和 pandas 的生态系统,以及 Python 中所有数据处理用的库都足够完善。

00:24:02 - Saron Yitbarek

在约翰·麦卡锡的团队还在麻省理工学院工作时,人工智能事业确实只有世界级的精英学者才能参与。但是自那时以来,语言和计算环境已经发生了巨大的发展,时至今日,每个人都能参与到 AI 的领域中来。我们在本季的第 1 期中听说过,Python 是许多初学者的第一语言。它使新手程序员能够加入 AI 的世界。

00:24:29 - Rachel Thomas

我只想告诉大家,实际上你只需要一年的编码经验。你不需要诸如“鬼才”这样的名号,也不必具有真正的声望或权威。但是,我们需要来自各个背景的人。实际上,不同背景的人才能够为这个领域提供许多新鲜的创意,你的创意也是我们所需要的。

00:24:52 - Saron Yitbarek

Rachel Thomas 是 Fast AI 的联合创始人,也是旧金山大学数据研究所的教授。我喜欢她为我们提供的信息。

AI 的故事是发现截然不同的人们之间的共同语言的故事。这是我们真正的任务,为充满 AI 的世界开发语言解决方案,开发能使所有人共同努力以实现下一个突破的解决方案。

00:25:22 - 播音员 1

各位,你们看到了今天在这里创造的历史。AlphaGo 以伟大的风格赢得了比赛。

00:25:32 - 播音员 2

是的,它甚至向我们展示了它的代码。

00:25:34 - 发言者 7

甚至向我们展示了它的代码。我想要祝贺这个计划。

00:25:40 - Saron Yitbarek

2015 年,就在 加里·卡斯帕罗夫 Garry Kasparov 在国际象棋比赛中输给深蓝的几十年后,围棋世界冠军李世乭被谷歌的 AlphaGo 击败。深蓝显示出的智力威力大半依托于蛮力,而 AlphaGo 的胜利之所以让人感到惊讶,是因为它依靠神经网络和强化学习赢得了那场比赛。换句话说,AlphaGo 已经成功地朝着真正的智慧迈出了下一步。如果没有开源对人工智能的推动,这一切都不可能发生。新的语言正朝着麦卡锡的梦想而逐渐发展。我们的语言正越来越适合于最大限度地提高机器的智能。好消息是,在开源世界中,我们可以共同实现这份梦想,共同应对它所带来的挑战。

00:26:39 - Saron Yitbarek

《代码英雄》是红帽的原创播客节目。如果你希望更深入的了解 LISP 或者人工智能,你可以访问节目的网站 redhat.com/commandlineheroes。在这里,你也能看到每一集的额外内容。下一期将是本季的最终集。在下一期中,我们将对一门重量级语言进行探究,并揭露与之有关的许多惊人事实;这门语言对本季中迄今为止讨论过的几乎所有语言都产生过影响。这是我们对 C 的深入研究。我是 Saron Yitbarek,下期之前,编程不止。

什么是 LCTT SIG 和 LCTT LCRH SIG

LCTT SIG 是 LCTT 特别兴趣小组 Special Interest Group ,LCTT SIG 是针对特定领域、特定内容的翻译小组,翻译组成员将遵循 LCTT 流程和规范,参与翻译,并获得相应的奖励。LCRH SIG 是 LCTT 联合红帽(Red Hat)发起的 SIG,当前专注任务是《代码英雄》系列播客的脚本汉化,已有数十位贡献者加入。敬请每周三、周五期待经过我们精心翻译、校对和发布的译文。

欢迎加入 LCRH SIG 一同参与贡献,并领取红帽(Red Hat)和我们联合颁发的专属贡献者证书。


via: https://www.redhat.com/en/command-line-heroes/season-3/talking-to-machines

作者:Red Hat 选题:bestony 译者:bestony 校对:acyanbird, Northurland, wxy

本文由 LCRH 原创编译,Linux中国 荣誉推出

Rise of Nation on BSD

BSD 不只是用于服务器。人们也将其用于桌面,并执行通常任务,包括休闲游戏。为了帮助实现这一点,我们将看看一个能让你在 FreeBSD 上运行 Windows 游戏的应用。

什么是 Homura?

Homura 是一个能让你在 FreeBSD 上玩 Windows 游戏的工具。它的灵感来自于 Lutris。它允许你安装和管理多个 Windows 游戏和游戏商店启动器。它主要使用 Wine,但也附带了一些修复和变通的方法来让游戏工作。

Homura 的创建者 Alexander Vereeken 说,他创建这个应用是因为“当我开始使用 FreeBSD 时,没有能用的可以在 Wine 中安装游戏或启动器的程序,所以我自己创建了一个”。当时,Wine 是唯一的选择。Linux 版本的 Steam 并不存在。

Homura install list

以下是你可以用 Homura 安装的清单:

  • Anarchy Online
  • Arc
  • Bethesda 启动器
  • 暴雪启动器
  • 暗黑破坏神 II
  • Discord
  • 龙歌 OL
  • GOG
  • 建造乌托邦
  • 英雄联盟
  • Origin 启动器
  • PokeMMO
  • 精灵宝可梦 绿铀
  • RuneScape
  • Steam
  • 地铁跑酷
  • Teamspeak
  • 猴岛大冒险 2
  • UC 浏览器
  • 育碧
  • 战游游戏中心
  • Itch.io

Homura 是以动画 Madoka Magica 中的一个角色命名的。在创建者转移到 GitLab 之前,它最初托管在 GitHub 上。目前它被托管在 Codeberg 上。希望它现在还能留在那里。

Homura

在 BSD 上安装 Homura 游戏启动器

你可以用这个命令从 FreeBSD 仓库中安装 Homura:

pkg install games/homura

你也可以使用这个命令从 ports 构建并安装它:

cd /usr/ports/games/homura/ && make install clean

安装完成后,你可以从菜单中选择 Homura,或在命令行中输入 Homura 来运行它。(在终端中名字必须大写开头,否则将无法运行。)

如果你通过 Homura 安装 Steam,你需要从 Homura 启动它。如果你想从操作系统的菜单中启动它,它当前不会显示在那里。

Steam 的库和商店标签由内置的 Web 浏览器显示。由于某些原因,这在 FreeBSD 上是不行的。但如果你从 Homura 的菜单中启动 Steam,它将使用列表模式,工作没有问题。

体验

我在 GhostBSD 上安装了 Homura,并用它来安装 Steam。之后,我安装了几个游戏来测试它。并不是所有的游戏都能正常运行,主要是因为它们试图使用或安装一个不可用的 Windows 专用软件。然而,我能够玩我最喜欢的游戏之一,微软的“国家的崛起”,没有任何问题。(我的测试变成了几个小时的游戏。)

Homura Main Menu

我也尝试安装 GOG 启动器。由于某些原因,它对我不起作用。加载页面会弹出,但什么都不会发生。我打算提交一个议题。我没有测试过任何安装程序/启动器,因为我没有使用它们。

总结

并不是所有的东西都能顺利地与 Homura 一起使用,但我可以玩一些我最喜欢的游戏。

这款应用是一个典型的用户有了需求,并决定去填补它的案例。通过这样做,他让其他人的生活变得更轻松。希望这个应用能让人们更容易地开始使用 FreeBSD 作为他们的操作系统。


via: https://itsfoss.com/homura-game-launcher-bsd/

作者:John Paul 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

昨天发的一篇新闻点评中,提及了在 Ubuntu 21.04 中准备修复一个十多年的 Bug:将用户主目录的默认的“世界可写”权限取消,并对这条新闻吐槽了一番。

不料,这条新闻引来了一些意料之外的吐槽,大家在公众号、知乎、今日头条上看到这篇内容后,纷纷表示“世界可写”是机翻,是误读,应该翻译为“ 全局 Global ”。因此,我觉得有必要就此写点文字来说明一下。

说实话,我也是第一次看到“世界可写”这个翻译(这个翻译不是我发明的),初看之下有点诧异,但是细思之下,我认为,这个翻译还是颇有意思的。

传统的 Unix 权限 traditional Unix permissions 模型将用户分为三类:

  • 属主 Owner 用户 User 类(u):文件/目录的所有者
  • 群组 Group 类(g):除所有者之外的文件/目录所属用户组的成员
  • 其他 Other 类(o):“世界”上除以上二者外的其他人

对于 chmod 命令来说,我们有时候需要给这三类人都统一赋予一些权限,这种情况下,我们采用 a 来代表“ 全部 All ”,有时也称之为“ 世界 World ”。这在各种文献中

对于“ 世界 World ”这个词汇,除看起来有点不太寻常,但是我觉得,这是一种 Unix 的古典黑客精神的幽默,可能是隐喻 Unix 机器里面就是一个世界吧,如果你连 Unix 用户都没有,那你就不是这个世界的。

Unix 世界只是 Unix 的 世界 World ,从来不是 全球 Gloabl

最后,“世界可写”万万要不得。022 赛高!