查看原文
其他

经历多次重写,苹果平台最强科学计算器PCalc背后的故事

CSDN 2023-05-23


【CSDN 编者按】PCalc 开发者 James Thomson 表示,只要还能编写代码,我就会一次又一次地重写 PCalc。

原文链接https://pcalc.com/mac/thirty.html

未经允许,禁止转载!

者 | James Thomson  译者 | 弯月 
责编 | 王子彧 
出品 | CSDN(ID:CSDNnews)
PCalc 二十周年之际,我曾写过一篇文章(https://pcalc.com/mac/twenty.html),一眨眼又过去了十年,如今 PCalc 已经三十周岁了!

现在,很多人都在各色设备上使用 PCalc,却没有意识到这款苹果应用的年龄远比他们想象中长得多。对于有些人来说,这款应用甚至比自己还要年长。

截止到 2022 年 12 月 23 日,PCalc 就 30 岁了,所以我想借此机会回顾一下过去三十年中这款应用的发展历程。

起源


PCalc 诞生于 1992 年,但实际上最初它是为中央供暖控制面板设计的。

当时我是英国格拉斯哥大学的一名学生,就读于计算机科学专业。我选了一门人机交互课程,学习如何构建良好的用户界面。这门课程的一个项目是为中央供暖系统设计一个模拟控制面板,可用于控制温度、单独开关暖气和热水等等。我们需要使用 HyperCard(为苹果 Mac 和 Apple IIGS 电脑开发的应用程序和编程工具)技术来实现这个应用。可悲的是,如今该技术已经销声匿迹了,但我的设计几近无可挑剔。

我认为,用户界面看上去必须真实,所以我手工制作了一套 1 位的黑白界面来模拟 LCD 数字和一些可以按下去的小按钮。可见仿制品从很早以前就有了。

大概在同一时期,我们开始使用 THINK Pascal 编程,我也开始利用业余时间探索 Macintosh 编程 API。最终,我发现自己并不会成为下一个 Jean-Michel Jarre(法国著名电子音乐艺术家,电子音乐先锋),但与旧款的 Atari 的相比,我更喜欢Mac的用户界面。所以,我卖掉了所有的合成器(比如 Roland Juno-106)和 Atari ST,然后买了一台最新的 Mac 经典款——4 兆内存、40 兆硬盘和 512x342 分辨率的 1-bit 显示器。

于是,我开始寻找一个小项目来学习如何在这台新的 Mac 机器上编程。后来,我想起了以前为控制面板设计的图形界面,我认为我也可以设计一款相同的计算器。

当时,Mac OS 内置的计算器非常简陋,所以我决定编写一款能够执行二进制和十六进制运算的计算器,用以辅助我编程。而这正是 PCalc 诞生的契机。我买了《Inside Macintosh》这本书的 1~3 册,然后坐下来认真研读。那时,我们还没有互联网,所以这几本书就是我所有的资料。最终,我编写好了内部逻辑,并围绕着这段逻辑构建了一个用户界面。由于当时 System 7 还很新,所以我又买了厚厚的第六册,想看看系统究竟又哪些变化。我觉得我不需要中间的 4~5 册。

接下来,我需要给这款应用程序起个名字,最后我选用了 PCalc,即 Programmers’ Calculator 的缩写。事实上,这确实是一款面向程序员的计算器。而那个程序员就是我。我根据自己的需求编写了这款应用程序。后来,我将这款应用程序分享给了课上的几个朋友,并在接下来的六个月里慢慢改进它,直到它变得越来越实用,而不仅仅是辅助编程。另外,我还添加了一个彩色界面,尽管我的 Mac 机器还无法显示颜色。

有关原始版本的更多屏幕截图,请参见此处(https://pcalc.com/mac/screens.html)。原版的《Read Me》在这里(https://s3.amazonaws.com/tlasystems/PCalc%20-%20Read%20Me%20First.pdf)。

1992 年 12 月 23 日,我决定将它作为礼物,免费发布给全世界。

当时是 1992 年,FTP 站点非常热门。我们班发现了一款名叫 Fetch 的应用程序——当时这款应用程序的传播速度非常快,我们都利用它来下载其他应用程序。很快,我发现有一个名叫 Info-Mac Archive 的全球镜像站点,我可以将自己的应用发送到这个网站,然后就能自动传播到全世界,供所有人下载。于是,我仔细阅读了传送指南,并打包上传了 PCalc。

下面是我打包上传 PCalc 后收到的电子邮件:

Date: Wed, 23 Dec 92 17:41:10 GMT

From: thomsonj <thomsonj@dcs.gla.ac.uk>

Subject: [*] PCalc 1.0 Submission

Enclosed is a binhex file containing a submission for your archives.

PCalc is a neat simulation of a programmable scientific calculator.

Please note that it *requires* System 7.x.x.

If you use System 6.0.x or earlier, here is what you are missing:

Programmable functions via a simple mini language.

System 7.x.x savvy:

Can be controlled & programmed via Apple Events.

Balloon Help for every button, menu & dialog item.

Resolves Aliases.

32-bit clean.

Multifinder aware.

Large 16+3 digit display.

Hierarchical menu of user functions.

Includes many functions for converting between different weights and measures.

Quick, one click, conversion between decimal, hexadecimal and binary numbers.

AND, OR, NOT, XOR, ROL, ROR and other extra functions in hex and binary mode.

30 named user constants, 10 for each mode.

'Undo' of any action.

Enhanced graphics when viewed on a 256 colour or 16 gray (or better) screen.

Colour graphics and help screens are stored in separate plug-in extensions.

Runs on any Mac with System 7.x.x or greater, with or without Color Quickdraw.

And of course it's freeware. If you only download one calculator this year, give this a try...

[Archived as /info-mac/app/pcalc-10.hqx; 122K]

后来,我收到了很多非常不错的反馈,在之后的一年里我不断优化 PCalc。1993 年版本 1.0.2 发布,公告如下:

Version 1.0.2 fixes some bugs that caused problems on colour macs, notably

those with 16 and 24-bit displays. Vast speed increases too on some 8-bit

screens. Shouldn't turn bright orange at inconvenient moments either. Some

other silent bug-fixes and support for the ',' key as a decimal separator.

(More importantly, there are a ton of new easter eggs ;-)

的确,我真的应该将《Inside Mac》的 4~5 册买下来,学习如何处理颜色。

至于公告中提到的彩蛋(easter eggs),其中之一是如果你将 42 放入三个特定的内存寄存器,然后点击屏幕,就会播放 Douglas Adams(英国广播剧作家和音乐家,尤以《银河系漫游指南》系列作品出名)的一段录音:“Don't Panic!”(不要惊慌!),同时屏幕上还会显示我最喜欢的《银河系漫游指南》中的 一句台词:

顺便说一句,不久之后,Douglas 成为了我的另一个应用程序 DragThing 的 Beta 测试员。不过,我从来没有问过他如何看待我在 PCalc 发布公告中引用他的台词。PCalc 的图标中总是有一个 42,每次截屏时,我都会在屏幕上显示一个 42,因为 42 是《银河系漫游指南》中的“终极答案”。我曾有幸在 WWDC 上与 Douglas 握过手,他也认出了我并示以微笑。我本来计划在下一次的 WWDC 中再次与他见面,但他却在这之前便匆匆离世了,就在几周前,我们还互发过邮件,这件事对我的打击很大。这就是 PCalc 的图标中总是有一个 42 的原因——为的是向他致敬。我不太了解他,但他总是对我的工作充满热情,这对于他的一个忠实粉丝来说,可谓意义非凡。

不管怎么说,在我攻读学位期间,PCalc 已经走向了全世界。在那之后,我一直忙于其他事情,首先是编写 DragThing,后来又在苹果找了一份工作,负责 OS X 的 Finder 和 Dock 的开发,当然那又是另一个故事了。

2000年,我回到了格拉斯哥,又开始寻找另一个小项目来学习新的Metrowerks CodeWarrior 开发环境以及 PowerPlant 应用框架。尽管 PCalc 已经七年未曾更新,但我仍然会收到 PCalc 的反馈邮件,而且这个项目的大小非常适合快速构建实用的东西。于是,PCalc 2 诞生了。我将核心的 Pascal 运算代码转换成了 C,并用 C++ 编写了一个新的用户界面。PCalc 2 仍然可以在老式的 68K 机器上运行,而且不仅能在 PowerPC 机器上运行,还可以在经典款的 Mac OS 和新的 OS X 上运行,而且两者都有合适的用户界面。

外,鉴于 Dragthing 备受好评,我决定 PCalc 或许应该收取一点费用。过去七年中,我一直未更新 PCalc,原因之一就是因为初始版本完全是免费的,也许向用户收取费用将成为我不断更新 PCalc 的动力。

在 2001 年的 WWDC 上,我把名片塞到了一个新面孔 Phil Schiller 的手中,并向他介绍了 PCalc。之后,我记得他的助手给我发了一封电子邮件,索要PCalc 的序列号,我很高兴地发给了她。后来,我了解到史蒂夫·乔布斯使用了 PCalc,并据称并不是特别讨厌它。Steve Wozniak 当年也买了很多份 PCalc。

直到 2002 一月,苹果的 OS X 还是未能推出一款像样的计算器(可能有人会说即便是现在也没有),而新的 iMac G4s 即将面世,苹果联系到了我,并要我授权在美国发售的 iMac 上加入 PCalc。虽然我们达成协议每份 PCalc 只收取很小的一笔版权费,但哪怕是再小的数字乘以近百万份也是非常可观的!

遗憾的是,这种合作并没有持续多久,Mac OS 10.2 就发布了,随之而来的是一个苹果新编写的科学计算器。有传言说,苹果公司的某个高层得知他们向一位未曾蒙面的前苹果员工支付了版权费。但是,我无法证实这一点。但不管怎样, PCalc 没有再被捆绑出售,这件事也就告一段落了。


重写 PCalc


2005年,我再次重写了 PCalc。这一次的目的是学习了新的 Carbon HIToolbox API,这是一种完全不同的编程方式,有点像 PowerPlant,只不过是苹果出品的。

PCalc 3 拥有当时风靡一时的拉丝金属外观,深受大家喜爱。此外,还有一个全新的 Dashboard Widget,虽然核心代码相同,但用户界面是用 HTML 和 JavaScript 编写的。Widget 在那个年代可是代表着未来。

过,此次更新我并没有收费,因为很久没有发布新版本,我有点愧疚。

时值 2006 年,我想到 PCalc 3 的项目规模非常适合移植到英特尔机器上,而且我还可以顺便学习如何移植。我拿到了一台英特尔的 Mac 原型机,构建了一个英特尔和 PowerPC 通用的可执行文件,等准备在一月中旬推出。在随后的几年中,Mac 版推出了许多更新。

但随着 2007 年 iPhone 诞生,以及 2008 年苹果应用商店的推出,你猜猜看这个新平台上推出的理想应用是哪款?

我在 PCalc Dashboard Widget 版代码的基础之上,花了一两天的时间就在 iPhone 跑通了。以此为起点,我又使用 Cocoa 构建了一个全新的界面。PCalc 摇身变成了一款触屏便携式设备的完美应用,它从一款在屏幕上用鼠标点击按钮来操作的模拟计算器,变成了你手中的一台近乎真实的计算器,感觉再也不像是假的了。

PCalc 在英特尔 Mac 发布后的第一天就入驻了苹果商店,同一天大约有 400 多款应用同时推出,而它的表现非常优秀。最终,我们的大部分收入均来自 PCalc,而不是 DragThing,而且主要来自 iOS 而不是 Mac OS,所以我们后续的很多工作都优先 iOS 版本,然后再移植回 Mac。我甚至将 Mac 上的 DragThing 主题引擎移植到了 iPhone 版的 PCalc 上。将一个在 Mac Pro 上运行的绘图引擎放入手掌大小的界面中,这在当时看来是一件不可思议的事情。

当然,5318008-gate(https://tla.systems/blog/2009/09/30/pcalc-prevents-iphone-profanity/)是一个小意外,大家见谅。

后来 iPad、视网膜显示屏、更多 iPad、更高版本的 iPhone,以及其他众多设备陆续推出,而我们的 PCalc 不仅在 Mac 应用商店中推出,而且还支持视网膜显示屏,以及 iOS 版本的许多功能。

事实上,PCalc 4 在 2014 年在 Mac 应用商店中独家推出。

在 Mac Catalyst 出现之前,这个新版本实际上是基于 iOS 源代码的,这降低了开发难度,因为我不必反复编写所有代码。此外,我将核心代码分解成了一个单独的可移植块,这样就可以在其他地方使用了。

第一个使用这个新的计算引擎的是 iOS 和 macOS 通知中心的迷你计算器,你可以使用它进行快速计算。

这个小部件被苹果推荐,而且没有发生任何不愉快的事情。那段时间我的压力很大,在宣传的影响下,销售额大增,所以我花大手笔买了一台 Retina 5K iMac,并度过一个愉快的假期。

第二次使用是 2015 年历史上最小的 PCalc。

苹果手表版的 PCalc 是一次有趣的练习,尝试如何在如此小的屏幕上嵌入完整的计算器界面。当然,80 年代我有一块计算器手表,所以我就自己制作。

相比之下,同年我还推出了历史上最大的 PCalc,这一次是在苹果电视上。

虽然我不清楚是否有人要求在电视上安装计算器,但当时我决定凡是苹果允许的地方,我都将装上 PCalc,只是出于固执。

2016 年,苹果增加了一个功能,允许 iOS 应用提供替代图标,于是我开启了一个小项目来制作一些新图标。那段时间里,我做了很多这样的项目来让自己保持理智,至少可以分散注意力。

到目前为止,我已经制作了 50 多个图标,包括十几个骄傲的旗帜。那一年,我了解了很多不同骄傲旗帜的起源!


升级为应用


与此同时,关于苹果制造 AR/VR 耳机的谣言四起,我决心学习 3D 图形学。大学时期,我曾修过一门课程,但在接下来的 22 年里,情况发生了一些变化。

不管怎样,PCalc 的 About 页面开始有点失控了。最初只是一个 3D 物理玩具,你可以向 PCalc 图标扔香蕉,最终变成了一个小型驾驶游戏,荣登全球排行榜,甚至还有一个物理奖杯。

今,这款游戏已变大变强,成为一个单独的应用。

2017年,PCalc 获得了一个吉祥物和一套 iMessage 贴纸——David Lanham 用 Pascal 绘制了一个可爱的熊猫。

 

有一段时间,我很喜欢 David 在 Facebook 发布的各种贴纸。不过他从来没有画过熊猫(除了上面的红色熊猫),我觉得我可以花钱让 David 为我制作一套贴纸,然后放入 PCalc。

你可能会注意到,About 页面的屏幕截图中有一些骰子。2019 年,我也在网上玩 D&D,我的好朋友 Jason Snell 建议我应该为 iPhone 做一个骰子应用。于是,PCalc 的第一个衍生产品诞生了!

Dice by PCalc 从动手到在应用商店发布,我花了两周的时间,并借鉴了 PCalc 的 About 页面上的大量代码和概念。

虽说是只花了两周的时间,但我并没有就此止步。后来,整个项目不仅过度设计,而且大幅拖延。我设计了五十多套骰子,如今甚至有拍照模式。无需多说,如今 Mac、苹果手表和苹果电视上都有这款游戏。这也成为了我探索苹果新技术(比如 Mac Catalyst 和 SwiftUI)的试验台,同时也让我看到将来 PCalc 该如何发展。

我们说回 PCalc。2020 年,苹果的 iOS 和 Mac 上推出了一种新型的小部件——非交互式小部件。这意味着我不能使用这种技术构建计算器了。难道是因为我的原因吗?或许吧。如今, iOS 上仍然保留了旧的小部件,但 Mac 上已经完全消失了。所以我需要将整个小部件移到别处,并将所有代码移植到菜单栏中。

以上就是迄今为止我们付出过的所有努力。2022 年 PCalc 内部进行了很多改动,添加了在多个窗口中支持多个计算器,该功能首先在 iPadOS 上推出,并有望很快登陆 Mac。但是许多核心的数学代码仍然与我在 1992 年编写的第一个版本非常相似。

我敢说,只要还能编写代码,我就会一次又一次地重写 PCalc。我希望你也能像我一样,在过去几十年中一直很喜欢 PCalc!

推荐阅读:

为什么大型工程团队要在 Kubernetes 上进行测试?

突发!沉痛悼念技术大牛左耳朵耗子(陈皓)

突发!OPPO 关停“造芯”业务 ZEKU:近 3000 名员工“原地失业”,赔偿 N+3

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存