【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

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

  1. 基于Android平台下的科学计算器

    作者:hinsxu,时间:2011-8-12 大概在半年前应公司的需要学习了android的相关方面的内容,以便后续在做GPL33000(A8内核架构)技术Support/Project打下基础.在w ...

  2. 2015上半年全国P2P网贷平台“百强榜”

    2015上半年全国P2P网贷平台"百强榜" 发布时间:2015-07-08 18:26:20 来源:网贷之家 作者:牧晨 收藏 摘要:近日,网贷之家联合盈灿咨询对外发布了<2 ...

  3. Electron 遭封杀,Web 开发者在苹果平台上举步维艰!

    在苹果平台上使用Web技术的难度越来越大,开发人员不得不作罢. 作者 | Owen Williams 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 构建W ...

  4. 网络购车平台哪家强?

    网络购车平台哪家强? 随着电商时代的迅速发展和人们消费观念的转变,网上购物已成了一种趋势和潮流,今天小编就带领大 家来分析和比较一下最近比较有名的几个网络售车平台. 首先是最近名气较大以租代购模式的网 ...

  5. 开发者要变现,广告平台哪家强?

    移动互联网用户大盘增长放缓的大环境难免会给人一种移动互联网已过高潮的错觉.有投资人在高呼移动互联网的泡沫来了大家准备好过冬,并开始在O2O.智能硬件.互联网与传统行业结合等新兴领域寻找机会.在移动互联 ...

  6. 有刘海儿的MacBook Pro,苹果迄今最强芯片,风雨无阻的AirPods 3,这场发布会够“炸”吗?

    整理 | 祝涛 出品 | CSDN(ID:CSDNnews) "苹果不是才刚开过发布会吗?" 是的,9月15日凌晨,苹果首席执行官蒂姆·库克从加州"来电",开启 ...

  7. 亚马逊、谷歌、苹果云端宕机背后的故事

    亚马逊.谷歌.苹果云端宕机背后的故事 发表于 19小时前|  2117次阅读| 来源 AWS Gigaom|  6 条评论| 作者 王鹏 Amazon Google iCloud 摘要:上周一,AWS ...

  8. 专访最强夫妻店:“神庙逃亡2”开发背后的故事

    摘要:Imangi近期发布了Temple Run 2,上架仅数小时即登顶App Store榜单.在做第一款游戏时Imangi只有三人,为了做出更好的游戏,不仅新添两名成员,更舍弃自家的游戏引擎,转投U ...

  9. 高德强推顺风车背后,不满足只做导航工具

    据媒体报道,高德顺风车不久前已经在广东.武汉两地开启小规模测试.据悉,高德公益顺风车此前已经在武汉和广东省开启车主招募. 高德顺风车开启小规模测试 自去年滴滴顺风车停摆后,顺风车市场一直处于波澜不惊的 ...

最新文章

  1. windows time 服务无法启动 错误1058 解决方法
  2. springMVC中Dispatcher中的/和/*的区别
  3. 数据库中范式的理解1NF、2NF、3NF
  4. springboot和kafka集成
  5. think php a方法,PHP_ThinkPHP之A方法实例讲解,ThinkPHP的A方法用于在内部实例 - phpStudy...
  6. 运营商与SP再次博弈手机广告
  7. rootca.pem 微信支付api 秘钥验证
  8. PaperNotes(4)-高质量图像生成-CGAN-StackGAN-Lapgan-Cyclegan-Pix2pixgan
  9. Mint-UI 报错提示缺少“raf.js / vue-lazyload / vue-popup” - 解决办法
  10. 软件测试缺陷定义和管理
  11. nginx基本配置与参数说明-【转】
  12. 浏览器内核(navigator.appName显示的不是内核信息!!)。
  13. Windows下效率必备软件
  14. 阵列信号处理学习小结
  15. Android经典项目开发之天气APP实例分享
  16. 修改Git提交历史中的author,email和name等信息
  17. 在github上下载的.md文件怎么打开
  18. Java面向对象总结
  19. 设顺序表va中的数据元素递增有序。先实现将x插入到顺序表的适当位置上,保存该表的有序性。
  20. Linux命令(5):pwd

热门文章

  1. 阿⾥云Apsara Clouder云计算专项技能认证:云服务器ECS⼊门【 个⼈所得税年度应纳税额抵扣 3600(0成本)】
  2. 数据分析行业的发展前景怎么样? 未来关于十年数据分析行业的5种预测
  3. 介于上海与江苏的地铁小户型
  4. 【报告分享】淘宝直播2021年度报告-淘榜单淘宝直播(附下载)
  5. SEO站群优化排名用哪里的服务器比较好
  6. 如何看待并夕夕公司离职员工在脉脉上疯狂吐槽前公司?
  7. 18年ACM赛后总结
  8. Qt中Qchart插件实现PMW3901迷你光流模块上位机(串口通信)
  9. 机器视觉照明技术与装置实验研究(论文纪要)
  10. NB-IoT与OneNET平台HTTP通信