Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu Wang 2019-07-10 22:14:41 +08:00
commit eb0a76793b
2 changed files with 240 additions and 64 deletions

View File

@ -0,0 +1,183 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Pipx Install And Run Python Applications In Isolated Environments)
[#]: via: (https://www.ostechnix.com/pipx-install-and-run-python-applications-in-isolated-environments/)
[#]: author: (sk https://www.ostechnix.com/author/sk/)
Pipx Install And Run Python Applications In Isolated Environments
======
![][1]
It is always recommended to install Python applications in Virtual Environments to avoid conflicts with one another. **Pip package manager** helps us to install Python applications in an isolated environments, using two tools namely **venv** and **virtualenv**. There is also another Python package manager named [**“Pipenv”**][2], which is recommended by Python.org, to install Python applications. Unlike Pip, Pipenv automatically creates virtual environments by default. Meaning you dont need to manually create virtual environments for your projects anymore. Today, I stumbled upon a similar tool named **“Pipx”** , a free and open source utility that allows you to install and run Python applications in an isolated virtual environments.
Using Pipx, we can easily install thousands of Python applications hosted in **PyPI** without much hassle. Good thing is you can do everything with regular user permissions. You need not to be “root” user or need not to have “sudo” permissions. It is worth mentioning that **Pipx can run a program from temporary environment** , without having to install it. This will be handy when you test multiple versions of same program often. The packages installed with Pipx can be listed, upgrade or uninstalled at any time. Pipx is a cross-platform application, so it can run on Linux, Mac OS and Windows.
### Install Pipx
**Python 3.6+** , **Pip** and **venv** module are required to install pipx. Make sure you have installed them as described in the following guide.
* [**How To Manage Python Packages Using Pip**][3]
Here, venv is needed to create virtual environments.
Next, run the following commands to install Pipx.
```
$ python3 -m pip install --user pipx
$ python3 -m userpath append ~/.local/bin
```
The default location of pipxs binary is **~/.local/bin**. You can override this with the **PIPX_BIN_DIR** environment variable. If you override **PIPX_BIN_DIR** , just make sure it is on your path by running **userpath append $PIPX_BIN_DIR**.
And the default virtual environment location of Pipx is **~/.local/pipx**. This can be overridden with the environment variable **PIPX_HOME**.
Let us go ahead and see how to install Python applications using Pipx.
### Install And Run Python Applications In Isolated Environments Using Pipx
Here are few examples to getting started with Pipx.
##### Install Python packages
To install a Python application, for example **cowsay** , globally, run:
```
$ pipx install cowsay
```
This command will automatically create virtual environments, install the package in it and put the package executable file on your **$PATH**.
**Sample output:**
```
installed package cowsay 2.0.3, Python 3.6.8
These binaries are now globally available
- cowsay
done! ✨ 🌟 ✨
```
![1][4]
Install Python Applications Using Pipx
Let us test newly installed cowsay program:
![1][5]
Here, I have taken the examples from official site. You can install/test any other Python package of your choice.
##### List Python packages
To list all installed applications using Pipx, run:
```
$ pipx list
```
Sample output:
```
venvs are in /home/sk/.local/pipx/venvs
binaries are exposed on your $PATH at /home/sk/.local/bin
package cowsay 2.0.3, Python 3.6.8
- cowsay
```
If you have not installed any packages, you will see the following output:
```
nothing has been installed with pipx 😴
```
##### Upgrade Packages
To upgrade a package, simply do:
```
$ pipx upgrade cowsay
```
To upgrade all installed packages in one go, use:
```
$ pipx upgrade-all
```
##### Run a application from temporary virtual environments
At times, you might want to run a specific python program, but not actually install it.
```
$ pipx run pycowsay moooo
```
![1][6]
Run Python Applications In Temporary Isolated Virtual Environments
This command doesnt actually install the given program, but run it from the temporary virtual environment. You can use this command for quickly testing a python application.
You can even run .py files directly as well.
```
$ pipx run https://gist.githubusercontent.com/cs01/fa721a17a326e551ede048c5088f9e0f/raw/6bdfbb6e9c1132b1c38fdd2f195d4a24c540c324/pipx-demo.py
pipx is working!
```
##### Uninstall packages
A package can be uninstalled with command:
```
$ pipx uninstall cowsay
```
To remove all installed packages:
```
$ pipx uninstall-all
```
##### Getting help
To view help section, run:
```
$ pipx --help
```
And, thats all. If youre ever looking for a safe, convenient and reliable application to install and run Python applications, Pipx might be a good choice.
**Resource:**
* [**Pipx GitHub Repository**][7]
--------------------------------------------------------------------------------
via: https://www.ostechnix.com/pipx-install-and-run-python-applications-in-isolated-environments/
作者:[sk][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.ostechnix.com/author/sk/
[b]: https://github.com/lujun9972
[1]: https://www.ostechnix.com/wp-content/uploads/2019/07/pipx-720x340.png
[2]: https://www.ostechnix.com/pipenv-officially-recommended-python-packaging-tool/
[3]: https://www.ostechnix.com/manage-python-packages-using-pip/
[4]: https://www.ostechnix.com/wp-content/uploads/2019/07/Install-Python-Applications-Using-Pipx.png
[5]: https://www.ostechnix.com/wp-content/uploads/2019/07/Test-Python-application.png
[6]: https://www.ostechnix.com/wp-content/uploads/2019/07/Run-Python-Applications-In-Isolated-Environments.png
[7]: https://github.com/pipxproject/pipx

View File

@ -1,97 +1,98 @@
学习 BASIC 像它的1983年
穿越到 1983 年学习 BASIC
======
我没有生活在1983年.我偶尔有一些遗憾。我相当遗憾我没有体验8位计算机时代的到来因为我认为第一次遇到相对简单和过于受约束的计算机的人们有超过我们的一些人的巨大的优势。
今天,(大多数)每个人知道如何使用一台计算机,但是很少有人,甚至是在计算机工业中,明白在一些单台机器内部正在发生什么的全部。现在有[如此多软件层次][1]努力来识别必不可少的部分来做如此多不同的事情。在1983年虽然家用电脑足够简单一个用功的人能学到一台特定计算机是如何工作的。现在这人可能比我通过所有堆积在硬件顶部的现代操作系统的抽象概念较少迷惑。我认为像他们采用的这些抽象概念的层次是容易一个接一个理解的今天新的程序员不得不通过自上而下的逆流时间上的工作来尝试理解它们
1983 年时还没有我,这让我偶有一些遗憾。但我特别遗憾的是,我没有经历过 8 位计算机时代的到来,因为我认为那些初次接触到还相对简单和受限的计算机的人们,拥有了超过如今的我们的巨大优势
很多著名的程序员尤其在计算机游戏工业童年在8位计算机上开始编程游戏苹果 II 和 Commodore 64。John Romero, Richard Garriott和 Chris Roberts 都是例子。如何发生是容易看到的。在8位计算机时代很多游戏仅可在计算机杂质和[书籍][2]中作为印刷的BASIC列表获得。如果你想玩这些游戏中其中一个你不得手工不键入完整的程序。不可避免的你可能得到一些错误所以你可能不得不调试你的程序。等到你获得它工作, 你充分知道程序如何起作用来开始你自己修改它。如果你是一个着迷的游戏玩家,你不可避免地也成为一个好的程序员
今天,(几乎)每个人知道如何使用计算机,但是即使是在计算机行业当中,也很少有人能明白任何一台计算机内部的所有内容。现在软件分为[如此多的层次][1],做的是如此不同的事情,没有哪个人能知道哪些是必不可少的。而在 1983 年,家用电脑足够傻大粗,努力一些的人就能了解到一台特定计算机是如何工作的。那样的一个人可能没有今天的我觉得操作系统那么神秘,因为如今的操作系统已经在硬件上叠加了太多的抽象层。我希望这些抽象层在逐一引入时易于理解;而今天,新的程序员们不得不自上而下、按时间回溯尝试理解它们
在童年我也玩电脑游戏。但是我玩的游戏在只读光盘上。我有时发现我自己不得不搜索如何修复一个崩溃的安装器,这可能涉及编辑 Windows 注册表或一些像这样的事情。这类少数的使用计算机来考虑在大学中学习计算机科学的故障诊断可能使我足够舒适。但是在大学中从不教我一些关键性的关于计算机如何工作或如何控制它们的事
很多著名的程序员,尤其在计算机游戏行业,孩童时期就在苹果 II 和 Commodore 64 这样的 8 位计算机上开始编写游戏John Romero、Richard Garriott 和 Chris Roberts 都是例子。很容易看到这是如何发生。在 8 位计算机时代,很多游戏只能在计算机杂志和[书籍][2]中以印刷的 BASIC 程序清单方式得到。如果你想玩这其中一款游戏,你必须手工键入整个程序。不可避免的,你可能遇到一些问题,所以你就得必须调试你的程序。等到你让它可以工作起来了,你就已经足够了解了程序是如何运行的,你可以开始自己修改它了。如果你是一个狂热的游戏玩家,你几乎必然会成为一名优秀的程序员
当然现在我告诉计算机为了活动而做什么。尽管如此我请不自觉地感到我缺少一些基本的仅被给予这些成长为简单编程的计算机人的深刻见解。在20世纪80年代初第一次偶然遇到计算机会是什么样子与今天使用计算机的经验相比会有怎样的不同
在我的童年时期我也玩电脑游戏。但是我玩的游戏在 CD-ROM 上的。我有时发现我自己必须得搜索如何修复崩溃的安装程序,这可能涉及编辑 Windows 注册表之类的东西。这种小故障的排除可能让我感觉很舒服,所以才考虑在大学里学习计算机科学。但是在大学中从不教我一些计算机如何工作的或如何控制它们的关键性的东西。
这篇张贴文将与通常的二位历史贴文有一点不同,因为我将为这些问题尝试设想一个答案。
当然,现在我可以告诉计算机去干什么。尽管如此,我还是不禁感到,我缺少一些基础的见解 —— 只有那些伴随着更简单的计算机编程而成长的人才有的深刻见解。我不禁在想,如果在上世纪 80 年代初就接触到计算机会是什么样子?它们与今天使用计算机的体验相比有何不同?
这篇文章将与通常的 Two-Bit History 的文章有一点不同,因为我将为这些问题尝试设想一个答案。
### 1983
仅仅是上周,你在电视上看到 [Commodore 64 广告][3] ,现在 M*A*S*H 结束了,在星期一晚上,你正在市场上采购没做过的一些东西。这个 Commodore 64 甚至看起来比 Apple II 更好,鲁迪(译者注:应该是拥有 Apple II 的人)的家人在他们的地下室。而且,广告承诺新的计算机将一会携带朋友们“击倒”你的门。你知道一些在学校的人们只要他们能在这里玩 Zork他们宁愿在你的家里过把瘾也不愿呆在鲁迪的家里
就在上周,你在电视上看到 [Commodore 64 广告][3] ,现在 M\*A\*S\*H 播完了LCTT 译注: 这是一部上世纪 70 年代初的电视剧),星期一晚上你可以找到新的事情做了。这个 Commodore 64 甚至看起来比鲁迪LCTT 译注:应该是下文中拥有 Apple II 的人)的家人放在他们家地下室的 Apple II 更好。而且,广告中吹嘘说新的计算机会让你的朋友们“挤破”你家的大门。你知道学校里的几个家伙宁愿在你家闲逛,也不愿去鲁迪的家里,只要他们能玩 Zork 就行
所以,你说服你的父母去买一台.你的妈妈说,她们可以考虑它,如果有一台家庭电脑,意味着你离开娱乐厅。你勉强同意。你的爸爸想,他可以开始在 MultiPlan (译注:电子表格程序)中跟踪家庭的资金。 MultiPlan 是他曾听到过的电子表格程序, 这是为什么计算机放在客厅的原因。然而,一年后,你将是唯一仍然使用它的人。你最终被允许把它放到你的卧室中的桌子上,正好在你的警察海报下面
所以,你得说服你的父母去买一台。你的母亲说,他们可以考虑它,只要你不去游戏厅玩街机就给你买一台家庭电脑。虽然不太情愿,但是你还是同意了。而你的父亲则想,他可以开始用 MultiPlan LCTT 译注电子表格程序跟踪家庭的资金状况MultiPlan 是他曾听说过的一个电子表格程序,这就是为什么这台计算机被放在客厅的原因。然而,一年后,你仍然是唯一使用它的人。最终,他们允许你把它搬到了你的卧室中的桌子上,正好位于你的警察海报下方
(你的姐姐抗议这个决定,但是它是在1983年并且计算机[不是给她][4]。)
(你的姐姐对这个决定表示抗议,但是,在 1983 年电脑这种东西[并不适合女孩][4]。)
父亲在从工作到回家的路上从 [ComputerLand][5] 处拿到它。你俩把盒子放置在电视机的旁边,并打开它。外包装上说“欢迎来到友好的计算机世界”。二十分钟以后,你不确信—你俩仍然试图来连接 Commodore 到电视机并且想知道是否电视机的天线电缆是75欧姆或300欧姆同轴电缆。但是你最终能够转到你的电视机到频道3并看到一个粒状的紫色的图像。
你的父亲在下班路上从 [ComputerLand][5] 那里把它捎了回来。你俩把盒子放置在电视机的旁边,并打开它。外包装上说“欢迎来到友好的计算机世界”。而二十分钟以后你就不再信这句话了 —— 你俩仍然在尝试把 Commodore 连接到电视机上,并在想电视机的天线电缆是 75 欧姆还是 300 欧姆的同轴电缆。但是,最终你把电视机调到了频道 3看到了一个颗粒状的、紫色的图像。
![Commodore 64 启动屏幕][6]
计算机报告,`READY`。你的爸爸把计算机推向你,标志着你应该第一个人来给它一个尝试。你小心翼翼地敲击每个字母,键入,`HELLO`。计算机的回应是令人困惑的。
计算机显示了一个 `READY`。你的爸爸把计算机推向了你,这意思是你是第一个尝试它的人。你小心翼翼地敲击每个字母,键入了 `HELLO`。然而计算机的回应是令人困惑的。
![Commodore 64 语法错误][7]
你尝试输入一些很少变化的不同的单词,但是回应总是相同的。你的爸爸说,你最好通读手册的剩余部分。这可能不意味着是秘籍—[随 Commodore 64 一起提供的手册][8] 是一小本书。但是这不会困住你,因为手册的引进是奇迹的预兆
你尝试输入一些稍有不同的单词,但是回应总是一样的。你父亲说,你最好仔细读一下手册的其它部分。这绝非易事,[随 Commodore 64 一起提供的手册][8] 是一本小书。但是这不会困住你,因为手册的介绍预兆着奇迹
Commodore 64它声称有“微型计算机工业中最高级的图画制作器”能允许“设计你拥有四种不同颜色的图画就像你在看到的街机电子游戏”。Commodore 64 也有“内置的音乐和声音效果,比得上很多著名的语言音响合成器”。所有的这些工具将被放到你的手上,因为手册将陪伴你贯穿它全部
它声称Commodore 64 有“微型计算机行业中最先进的图画制作器”能允许“你设计拥有四种不同颜色的图画就像你在街机视频游戏里看到的一样”。Commodore 64 也有“内置的音乐和声音效果,可以和很多著名的音乐合成器相媲美”。所有的这些工具都置身于你的手边,手册会引导你完成所有这些
> 正像与所有可用的硬件重要一样这本用户的指南将帮助你详尽阐述你的计算机的理解。它不会在这里告诉你有必要知道的关于计算机的任何事但是它将谈及你到一个关于涉及的主题的详细情报方面的种类繁多的出版物。Commodore 希望你来真正地享受你的新 COMMODORE 64 。并且来玩得开心,记住:编程不是你能在一天内就学会的一种东西。你自己要有耐心,因为你将翻阅用户指南
> 与所有提供的硬件一样重要的是这本用户指南将提高你对计算机的理解。它不能在这里告诉你有关计算机的所有信息但是它会向你推荐各种出版物以获取有关所提出主题的更多详细信息。Commodore 希望你真正喜欢你的新 COMMODORE 64。要想真正得到乐趣请记住编程不是一天就能学会的一种东西。通读这个用户指南你要有耐心
那一夜,在床上,你通读整个前三个章节—“安装”,“入门”,和“开始 BASIC 编程”—在最终抵挡不住睡意前,手册被交叉放在胸前。
那一夜,你在床上通读了整个前三个章节:“安装”、“入门”和“开始 BASIC 编程”,在最终睡着时,手册打开着放在了胸前。
### Commodore BASIC
现在是星期六早上,你急于尝试你已经学到的什么。手册教你如何做的第一件事是更改在显示器上的颜色。你仿效指令,按下 `CTRL-9` 来进入相反的情况的类型模式,然后拖住空格键来创建长行。你可以使用 `CTRL-1``CTRL-8` 在不同的颜色之间交换,在电视机屏幕上陶醉于你的突然的新的力量。
现在是星期六早上,你渴望尝试你所学到的东西。手册教给你的第一件事是如何更改在显示器上的颜色。你按照操作说明,按下 `CTRL-9` 来进入反向输入模式,然后按住空格键来创建一个长长的行。你可以使用 `CTRL-1``CTRL-8` 在不同的颜色之间交换,让你的电视机屏幕焕发出新的力量。
![Commodore 64 颜色带][9]
尽管这很酷,你意识到它不算为编程。为了编程计算机,你昨晚已经学到,你必须以一种称为 BASIC 的语言与计算机交谈。对于你BASIC 看起来像星球大战外的一些东西但是到1983年BASIC 大约二十年了。它由两位达特茅斯教授John Kemeny 和 Tom Kurtz 发明,他们想让社会科学和人文科学中的本科生可访问计算机。它在微型计算机上是普遍地可用的,并流行在大学数学课中。在比尔盖茨和保罗艾伦为 Altair 编写 MicroSoft BASIC 解释器后,在微型计算机上变成标准。但是手册没有任何解释这个,并且你很多年不会学到它。
尽管这很酷,但你觉得这不算是编程。要对计算机编程机,你昨晚已经学会了如何做,你必须以一种称为 BASIC 的语言与计算机交谈。对你来说BASIC 看起来就像星球大战中的东西一样科幻,但是,在 1983 年的时候,其实 BASIC 已经快二十岁了。它是由两位达特茅斯教授 John Kemeny 和 Tom Kurtz 发明的,他们想让社会科学和人文科学中的本科生也可以使用计算机。它广泛使用在微型计算机上,在大学的数学课上很受欢迎。在比尔盖茨和保罗艾伦为 Altair 编写了微软 BASIC 解释器后,它就成为了微型计算机上的标准。但是手册对此没有任何解释,很多年你都没有学会它。
手册建议你尝试的第一个 BASIC 命令是 `PRINT` 命令。你慢慢地键入 `PRINT "COMMODORE 64"`,因为你花费一点时间来在`2`按键上面找到引号符号。你单击 `RETURN` ,这一次,并不是抱怨,计算机准确地做你告诉它去做的事,并在下一行中显示 “COMMODORE 64” 。
手册建议你尝试的第一个 BASIC 命令是 `PRINT` 命令。你输入了 `PRINT "COMMODORE 64"`,很慢,因为你需要花费一点时间才能在按键 `2` 上面找到引号符号。你单击 `RETURN`,这一次,计算机没有抱怨,完全是按照你告诉它做的,在下一行中显示了 “COMMODORE 64” 。
现在你尝试在各种各样不同的东西上使用 `PRINT` 命令:两个数字加在一起,两个数字乘在一起,甚至几个十进制数字。你停止输入 `PRINT` ,并使用 `?` 代替,因为手册已经正式告知你 `?``PRINT` 的一个缩写,通常专业程序员使用。你感觉已经像一个专家,不过你想起你还没有看“开始 BASIC 编程”的三个章节
现在你尝试对各种不同的东西上使用 `PRINT` 命令:两个数字加在一起,两个数字乘在一起,甚至几个十进制数字。你不再输入 `PRINT` ,而是使用 `?` 代替,因为手册中告知你 `?``PRINT` 的一个缩写,通常专业程序员这么使用。你感觉自己已经像一个专家,不过你想起你还没有看第三章“开始 BASIC 编程”。
不久达到目的。该章节开始催促你来写你的第一个真正的 BASIC 程序。你输入 `NEW` 并单击 `RETURN`这给你一个干净黑板slate。然后你在其中输入你的程序:
很快就开始阅读了。该章节提示你编写你的第一个真正的 BASIC 程序。你输入 `NEW` 并单击 `RETURN`,它给了你一个干净的<ruby>黑板<rt>slate</rt></ruby>。然后你在其中输入你的程序:
```
10 ?"COMMODORE 64"
20 GOTO 10
```
手册解释,10和20是行号。它们为计算机排序语句。它们也允许程序员来引用在某系命令中程序的其它行正像你已经完成的 `GOTO` 命令, 它监督程序回到行10。“它是好的编程惯例”手册认为“以10的增量来编号行—以备你以后需要插入一些语句”。
手册里解释说 10 和 20 是行号。它们为计算机排序了语句。它们也允许程序员在某些命令中引用程序的其它行,正像你在这里使用的 `GOTO` 命令一样,它将程序回指回到行 10。“这是一个很好的编程习惯”手册认为“以 10 的增量来编号行,可以防止你以后需要插入一些语句”。
你输入 `RUN` 并盯着用“COMMODORE 64”堵塞的屏幕 ,重复的一遍又一遍
你输入 `RUN`,并凝视充满了 “COMMODORE 64” 的屏幕,它一遍又一遍的重复
![Commodore 64 显示反复打印 "Commodore 64" 的结果][10]
你不确定这不会引爆你的计算机。它花费一秒钟才想起你应该单击 `RUN/STOP` 按键来打断循环。
你不确定这不会引爆你的计算机,过了一秒钟你才想起来应该单击 `RUN/STOP` 按键来打断循环。
手册接下来的一些部分教你变量,手册告诉你变量像“在计算机中许多的暗盒,它们每个可以容纳一个数字或一个文本字符的字符串”。以一个 `%` 符号结尾的变量是一个整数,与此同时,以一个 `$` 符号结尾的变量是一个字符字符串。其余的所有变量是一些称为“浮点”变量的东西。手册警告你小心变量名称,因为计算机仅识别变量名称的前两个字母,尽管不阻止你想要的名称长度。(这并不是特别困扰你但是你可能看到今后30年这可能打击一些人像彻底地精神失常一样)。
手册接下来的一些部分向你介绍了变量,它告诉你变量像“在计算机中许多的盒子,它们每个可以容纳一个数字或一个文本字符串”。以一个 `%` 符号结尾的变量是一个整数,与此同时,以一个 `$` 符号结尾的变量是一个字符串。其余的所有变量是一些称为“浮点”变量的东西。手册警告你小心变量名称,因为计算机仅识别变量名称的前两个字母,尽管它不限制你想创建的名称有多长。(这并不没有特别让你困扰,但是要是 30 年后看,这可能会让人们感到太疯狂了)
你接着学习 `IF... THEN...``FOR... NEXT...` 结构体。有所有的这些新的工具,你感觉有能力来解决的接下来的手册扔给你的大挑战。“如果你是有野心的人”,很好,“输入下面的程序,并查看会发生什么”。该程序比你目前已经看到的程序更长、更复杂,但是,你渴望知道它将做什么:
你接着学习 `IF... THEN...``FOR... NEXT...` 结构体。有了这些新的工具,你感觉有能力来解决接下来手册丢给你的重大挑战。“如果你是有野心的人”,没错,“输入下面的程序,并查看会发生什么。”该程序比你目前为止看到的程序更长、更复杂,但是,你很想知道它做了什么:
```
10 REM BOUNCING BALL
20 PRINT "{CLR/HOME}"
25 FOR X = 1 TO 10 : PRINT "{CRSR/DOWN}" : NEXT
30 FOR BL = 1 TO 40
40 PRINT " ●{CRSR LEFT}";:REM (● is a Shift-Q)
50 FOR TM = 1 TO 5
60 NEXT TM
70 NEXT BL
75 REM MOVE BALL RIGHT TO LEFT
80 FOR BL = 40 TO 1 STEP -1
90 PRINT " {CRSR LEFT}{CRSR LEFT}●{CRSR LEFT}";
10 REM BOUNCING BALL
20 PRINT "{CLR/HOME}"
25 FOR X = 1 TO 10 : PRINT "{CRSR/DOWN}" : NEXT
30 FOR BL = 1 TO 40
40 PRINT " ●{CRSR LEFT}";:REM (● is a Shift-Q)
50 FOR TM = 1 TO 5
60 NEXT TM
70 NEXT BL
75 REM MOVE BALL RIGHT TO LEFT
80 FOR BL = 40 TO 1 STEP -1
90 PRINT " {CRSR LEFT}{CRSR LEFT}●{CRSR LEFT}";
100 FOR TM = 1 TO 5
110 NEXT TM
120 NEXT BL
130 GOTO 20
```
上面的程序利用 Commodore 64 最酷的特色之一。不可打印的命令字符,当传递到 `PRINT` 命令时,作为字符串的一部分,仅仅做它们通常执行的动作,而不是打印到屏幕。这允许你通过打印来自你程序中的字符串来重演任意的命令链。
上面的程序充分利用 Commodore 64 最酷的功能之一。当把不可打印的命令字符作为字符串的一部分传递到 `PRINT` 命令时它们会执行其操作而不是被打印到屏幕上。这允许你重新摆放你程序中打印的字符串。LCTT 译注:上述程序中如 `{CRSR LEFT}` 之类的控制字符执行类似 “在行中向左移动一个位置” 的操作,因此上述程序中利用这些字符操作了一个圆点字符四处移动,如下图。)
输入上面的程序花费很长时间。你犯一些错误,并不得不重新输入一些行。但是,你最终能够输入 `RUN` ,并看见一个杰作:
输入上面的程序花费很长时间。你犯一些错误,并不得不重新输入一些行。但是,你最终能够按下 `RUN`,并看到了一件杰作:
![Commodore 64 反弹球][11]
认为这是你见过的最酷的事是一个主要的竞争者。不过你几乎立即忘记它,因为一旦你已经学习 BASIC 的内置的函数,像 `RND` (它返回一个随机数字) 和 `CHR$` (它返回匹配一个给定数字的字符),手册向你展示一个很多年的程序,到现在仍然足够著名,能够成为一个[论文选集][12]的题目
觉得这恐怕是你见过的最酷的事了。不过你转头就几乎忘记了它,因为马上你就学到了 BASIC 的内置的函数,像 `RND`(它返回一个随机数字)和 `CHR$`(它返回与一个给定数字代码匹配的字符),这个手册向你展示一个程序,它有名到什么程度呢?直到许多年后,它仍然被当成了一个[短文选集][12]的标题:
```
10 PRINT "{CLR/HOME}"
@ -99,27 +100,27 @@ Commodore 64它声称有“微型计算机工业中最高级的图画制
40 GOTO 20
```
当运行时,上面的程序产生一个随机的迷宫:
当运行时,上面的程序产生一个随机的迷宫
![Commodore 64 迷宫程序][13]
肯定是你曾经见过最酷的事。
绝对是你曾经见过最酷的事。
### PEEK 和 POKE
你现在看过 Commodore 64 手册的前四章节,包含标题为“高级的 BASIC” 的章节, 所以你觉得你自己十分自豪。这个星期六早上,你已经学习很多东西。但是这个下午(在一个快速午餐打断后),你继续去学习一些东西,这将使这个在你的客厅中奇妙的机器变得更不神秘
现在你已经看过了 Commodore 64 手册的前四章节,包含那篇 “高级的 BASIC” 的章节,所以你感到十分自豪。在这个星期六早上,你学习到了很多东西。但是这个下午(在赶快吃了点午饭后),你将继续学习一些使这个放在你的客厅中的奇妙机器变得不再神秘的东西
在手册中的下一个章节被标题为“高级颜色和图像命令”。以通过再次讨论颜色条开始,你能够输入我们这个早上的第一件事,并向你显示你如何能够从一个程序中做相同的事。然后它教你如何更改屏幕的背景颜色。
手册中的下一个章节标题是“高级颜色和图像命令”。它从回顾你今天早上首先键入的彩色条开始,并向你展示了如何在一个程序中做同样的事。然后它教给了你如何更改屏幕的背景颜色。
为此,你需要使用最简单的 `PEEK``POKE` 命令。这些命令分别允许你来检查和写到存储器地址。Commodore 64 有一个主要背景颜色和一个边界背景颜色。每个颜色通过一个特定的内存地址控制。你可以写任何你喜欢的这些地址的颜色值到背景颜色或边界颜色。
为此,你需要使用 BASIC 的 `PEEK``POKE` 命令。这些命令分别允许你检查和写入存储器地址。Commodore 64 有一个主背景颜色和一个边框背景颜色。每个通过一个特定的内存地址控制。你可以写入任何你喜欢的颜色值到这些地址,以使用这些背景颜色和边框颜色。
手册解释:
手册中解释:
> 正像变量可以被认为在机器中的一种放置你的信息的表现形式,你也可以认为在计算机中代表特殊内存位置的一些特殊定义的“容器”。
> 正像变量可以被认为你放置信息的机器中的“盒子”一样,你也可以认为在计算机中代表特定内存位置的是一些特殊定义的“盒子”。
>
> Commodore 64 寻找这些内存位置来查看屏幕的背景和边界应该是什么样的颜色,什么样的字符能够被显示在屏幕上—在哪里—很多其它的任务。
> Commodore 64 会查看这些内存位置来了解屏幕的背景和边框应该是什么样的颜色,什么样的字符应该被显示在屏幕上,以及显示在哪里,等等其它任务。
写一个程序来循环所有可用的背景和边界的颜色的混合体
编写了一个程序来遍历所有可用的背景和边界的颜色的组合
```
10 FOR BA = 0 TO 15
@ -130,36 +131,28 @@ Commodore 64它声称有“微型计算机工业中最高级的图画制
60 NEXT BO : NEXT BA
```
虽然 `POKE` 命令,带有它们的大量的运算数,开始时看起来很吓人,现在你看到数字的真实的值不是很要紧。明显地,你不得不获取正确的数字,但是所有的数字代表的是一个 Commodore 正好出现在存储在地址53280处的“容器”。这个容器有一个特殊的用途 Commodore 使用它来决定屏幕背景应该是什么颜色。
虽然 `POKE` 命令以及它的大操作数一开始时看起来很吓人现在你看到数字的实际值其实不是很要紧。显然你必须得到正确的数字但是所有的数字代表的是一个“盒子”Commodore 只是正好存储在地址 53280 处而已。这个盒子有一个特殊的用途Commodore 使用它来确定屏幕背景应该是什么颜色。
![Commodore 64 更改背景颜色][14]
你认为这是非常有条理的. 仅仅通过写入内存中一个特殊目的的容器中,你可以控制一台计算机的基础属性。你不确定 Commodore 64 的电路系统如何使用你写图内存中的值,并更改屏幕的颜色,但是,你不知道这些也没事。至少你理解到这点的每一件事
你认为这很漂亮。只需要写入到内存中一个专用的盒子,你可以控制一台计算机的基础属性。你不确定 Commodore 64 的电路系统如何读取你写入在内存中的值并更改屏幕的颜色的,但是,你不知道这些也没事。至少你知道结果是怎么样的
### 特殊容器
那个周六,你没有读完整本手册,因为你现在开始精疲力尽。但是你终于读完它的全部。在这个过程中,你学到更多关于 Commodore 64 的特殊目的容器。它们是你可以写的容器来控制在屏幕上是什么—一个容器事实上每一个位置都可能出现一个角色f。在第六章节中“小精灵图形”你学到特殊目的容器允许你来定义能被四周移动和甚至缩放的图像。在第七章节中“创建声音”你学到你能写入的容器以便使你的 Commodore 64 歌唱 “Michael Row the Boat Ashore”。Commodore 64转到外面你可能以后学习一个称为 API 的非常有限的方法。控制 Commodore 64 大多涉及通过电路系统给定特殊意义来写到内存地址。
那个周六,你没有读完整本手册,因为你现在开始精疲力尽。但是你最终会全部读完它。在这个过程中,你学到更多关于 Commodore 64 专用的盒子。有一些盒子你可以写入来控制在屏幕上显示什么——这也是一个盒子,事实上,是控制每一个位置出现的字符。在第六章节 “精灵图形” 中,你学到可以让你定义可以移动和甚至缩放图像的特殊盒子。在第七章节 “创造声音” 中,你学到你能写入以便使你的 Commodore 64 歌唱 “Michael Row the Boat Ashore” 的盒子。Commodore 64事实证明它和你可能以后学习到的一个称为 API 的关系甚少。控制 Commodore 64 大多涉及写入到电路系统赋予特殊意义的内存地址。
最终花费很多年写到这些粘住你的特殊容器。甚至几十年后,当你发现你自己用一组大量的图形或声音 API 编程一个机器时,你知道 API ,在隐蔽物的后面, API 最终是写到这些容器或一些像它们的东西。你有时会怀疑曾经使用过 API 的年轻程序员,他们一定会好奇并思考 API 正在为他们做什么。可能他们认为 API 正在调用一些其它隐藏的 API 。但是,随后思考隐藏的 API 正在调用什么?你同情这些年轻的程序员,因为他们一定非常迷惑。
花费在这些特殊盒子的多年时光一直伴随着你。甚至几十年后,当你发现你是在一个拥有大量的图形或声音 API 的机器上编程时,你知道,在隐其背后,这些 API 最终是写入到这些盒子之类的东西里面的。你有时会好奇那些只使用过 API 的年轻程序员,好奇他们肯定是觉得 API 为他们做到的这一切。可能他们认为这些 API 调用了一些其它隐藏的 API。但是那些隐藏的 API 调用了什么?你不由得同情这些年轻的程序员,因为他们一定非常迷惑。
如果你喜欢这篇张贴文, 更喜欢它每两周出来一次在Twitter上关注 [@TwoBitHistory][15] 或订阅[ RSS 源][16]来确保你知道新的张贴文出来的时间。
先前关于TwoBitHistory…
> 你曾经好奇一个19世纪计算机程序翻译到 C 语言程序的可能的样子吗?
>
> 这周帖子: 一个详细的说明查看Ada Lovelace 的著名程序的工作,和它将尝试去做什么。<https://t.co/BizR2Zu7nt>
>
> — TwoBitHistory (@TwoBitHistory) [2018年8月19日][17]
如果你喜欢这篇文章,也喜欢它每两周发布的一篇!那么请在 Twitter 上关注 [@TwoBitHistory][15] 或订阅 [RSS 源][16]来确保你知道新的文章发布出来的时间。
--------------------------------------------------------------------------------
通过https://twobithistory.org/2018/09/02/learning-basic.html
viahttps://twobithistory.org/2018/09/02/learning-basic.html
作者:[Two-Bit History][a]
选题:[lujun9972][b]
译者:[robsean](https://github.com/robsean)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出