【CSDN 編者按】PCalc 開發(fā)者 James Thomson 表示,只要還能編寫代碼,我就會(huì)一次又一次地重寫 PCalc。
原文鏈接:https://pcalc.com/mac/thirty.html
現(xiàn)在,很多人都在各色設(shè)備上使用 PCalc,卻沒有意識(shí)到這款蘋果應(yīng)用的年齡遠(yuǎn)比他們想象中長得多。對(duì)于有些人來說,這款應(yīng)用甚至比自己還要年長。
截止到 2022 年 12 月 23 日,PCalc 就 30 歲了,所以我想借此機(jī)會(huì)回顧一下過去三十年中這款應(yīng)用的發(fā)展歷程。
起源
PCalc 誕生于 1992 年,但實(shí)際上最初它是為中央供暖控制面板設(shè)計(jì)的。
當(dāng)時(shí)我是英國格拉斯哥大學(xué)的一名學(xué)生,就讀于計(jì)算機(jī)科學(xué)專業(yè)。我選了一門人機(jī)交互課程,學(xué)習(xí)如何構(gòu)建良好的用戶界面。這門課程的一個(gè)項(xiàng)目是為中央供暖系統(tǒng)設(shè)計(jì)一個(gè)模擬控制面板,可用于控制溫度、單獨(dú)開關(guān)暖氣和熱水等等。我們需要使用 HyperCard(為蘋果 Mac 和 Apple IIGS 電腦開發(fā)的應(yīng)用程序和編程工具)技術(shù)來實(shí)現(xiàn)這個(gè)應(yīng)用。可悲的是,如今該技術(shù)已經(jīng)銷聲匿跡了,但我的設(shè)計(jì)幾近無可挑剔。
我認(rèn)為,用戶界面看上去必須真實(shí),所以我手工制作了一套 1 位的黑白界面來模擬 LCD 數(shù)字和一些可以按下去的小按鈕??梢姺轮破窂暮茉缫郧熬陀辛?。
大概在同一時(shí)期,我們開始使用 THINK Pascal 編程,我也開始利用業(yè)余時(shí)間探索 Macintosh 編程 API。最終,我發(fā)現(xiàn)自己并不會(huì)成為下一個(gè) Jean-Michel Jarre(法國著名電子音樂藝術(shù)家,電子音樂先鋒),但與舊款的 Atari 的相比,我更喜歡Mac的用戶界面。所以,我賣掉了所有的合成器(比如 Roland Juno-106)和 Atari ST,然后買了一臺(tái)最新的 Mac 經(jīng)典款——4 兆內(nèi)存、40 兆硬盤和 512x342 分辨率的 1-bit 顯示器。
于是,我開始尋找一個(gè)小項(xiàng)目來學(xué)習(xí)如何在這臺(tái)新的 Mac 機(jī)器上編程。后來,我想起了以前為控制面板設(shè)計(jì)的圖形界面,我認(rèn)為我也可以設(shè)計(jì)一款相同的計(jì)算器。
當(dāng)時(shí),Mac OS 內(nèi)置的計(jì)算器非常簡陋,所以我決定編寫一款能夠執(zhí)行二進(jìn)制和十六進(jìn)制運(yùn)算的計(jì)算器,用以輔助我編程。而這正是 PCalc 誕生的契機(jī)。我買了《Inside Macintosh》這本書的 1~3 冊(cè),然后坐下來認(rèn)真研讀。那時(shí),我們還沒有互聯(lián)網(wǎng),所以這幾本書就是我所有的資料。最終,我編寫好了內(nèi)部邏輯,并圍繞著這段邏輯構(gòu)建了一個(gè)用戶界面。由于當(dāng)時(shí) System 7 還很新,所以我又買了厚厚的第六冊(cè),想看看系統(tǒng)究竟又哪些變化。我覺得我不需要中間的 4~5 冊(cè)。
接下來,我需要給這款應(yīng)用程序起個(gè)名字,最后我選用了 PCalc,即 Programmers’ Calculator 的縮寫。事實(shí)上,這確實(shí)是一款面向程序員的計(jì)算器。而那個(gè)程序員就是我。我根據(jù)自己的需求編寫了這款應(yīng)用程序。后來,我將這款應(yīng)用程序分享給了課上的幾個(gè)朋友,并在接下來的六個(gè)月里慢慢改進(jìn)它,直到它變得越來越實(shí)用,而不僅僅是輔助編程。另外,我還添加了一個(gè)彩色界面,盡管我的 Mac 機(jī)器還無法顯示顏色。
有關(guān)原始版本的更多屏幕截圖,請(qǐng)參見此處(
https://pcalc.com/mac/screens.html)。原版的《Read Me》在這里(
https://s3.amazonaws.com/tlasystems/PCalc%20-%20Read%20Me%20First.pdf)。
1992 年 12 月 23 日,我決定將它作為禮物,免費(fèi)發(fā)布給全世界。
當(dāng)時(shí)是 1992 年,F(xiàn)TP 站點(diǎn)非常熱門。我們班發(fā)現(xiàn)了一款名叫 Fetch 的應(yīng)用程序——當(dāng)時(shí)這款應(yīng)用程序的傳播速度非常快,我們都利用它來下載其他應(yīng)用程序。很快,我發(fā)現(xiàn)有一個(gè)名叫 Info-Mac Archive 的全球鏡像站點(diǎn),我可以將自己的應(yīng)用發(fā)送到這個(gè)網(wǎng)站,然后就能自動(dòng)傳播到全世界,供所有人下載。于是,我仔細(xì)閱讀了傳送指南,并打包上傳了 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]
后來,我收到了很多非常不錯(cuò)的反饋,在之后的一年里我不斷優(yōu)化 PCalc。1993 年版本 1.0.2 發(fā)布,公告如下:
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 ;-)
的確,我真的應(yīng)該將《Inside Mac》的 4~5 冊(cè)買下來,學(xué)習(xí)如何處理顏色。
至于公告中提到的彩蛋(easter eggs),其中之一是如果你將 42 放入三個(gè)特定的內(nèi)存寄存器,然后點(diǎn)擊屏幕,就會(huì)播放 Douglas Adams(英國廣播劇作家和音樂家,尤以《銀河系漫游指南》系列作品出名)的一段錄音:“Don't Panic!”(不要驚慌!),同時(shí)屏幕上還會(huì)顯示我最喜歡的《銀河系漫游指南》中的 一句臺(tái)詞:
順便說一句,不久之后,Douglas 成為了我的另一個(gè)應(yīng)用程序 DragThing 的 Beta 測(cè)試員。不過,我從來沒有問過他如何看待我在 PCalc 發(fā)布公告中引用他的臺(tái)詞。PCalc 的圖標(biāo)中總是有一個(gè) 42,每次截屏?xí)r,我都會(huì)在屏幕上顯示一個(gè) 42,因?yàn)?42 是《銀河系漫游指南》中的“終極答案”。我曾有幸在 WWDC 上與 Douglas 握過手,他也認(rèn)出了我并示以微笑。我本來計(jì)劃在下一次的 WWDC 中再次與他見面,但他卻在這之前便匆匆離世了,就在幾周前,我們還互發(fā)過郵件,這件事對(duì)我的打擊很大。這就是 PCalc 的圖標(biāo)中總是有一個(gè) 42 的原因——為的是向他致敬。我不太了解他,但他總是對(duì)我的工作充滿熱情,這對(duì)于他的一個(gè)忠實(shí)粉絲來說,可謂意義非凡。
不管怎么說,在我攻讀學(xué)位期間,PCalc 已經(jīng)走向了全世界。在那之后,我一直忙于其他事情,首先是編寫 DragThing,后來又在蘋果找了一份工作,負(fù)責(zé) OS X 的 Finder 和 Dock 的開發(fā),當(dāng)然那又是另一個(gè)故事了。
2000年,我回到了格拉斯哥,又開始尋找另一個(gè)小項(xiàng)目來學(xué)習(xí)新的Metrowerks CodeWarrior 開發(fā)環(huán)境以及 PowerPlant 應(yīng)用框架。盡管 PCalc 已經(jīng)七年未曾更新,但我仍然會(huì)收到 PCalc 的反饋郵件,而且這個(gè)項(xiàng)目的大小非常適合快速構(gòu)建實(shí)用的東西。于是,PCalc 2 誕生了。我將核心的 Pascal 運(yùn)算代碼轉(zhuǎn)換成了 C,并用 C++ 編寫了一個(gè)新的用戶界面。PCalc 2 仍然可以在老式的 68K 機(jī)器上運(yùn)行,而且不僅能在 PowerPC 機(jī)器上運(yùn)行,還可以在經(jīng)典款的 Mac OS 和新的 OS X 上運(yùn)行,而且兩者都有合適的用戶界面。
此外,鑒于 Dragthing 備受好評(píng),我決定 PCalc 或許應(yīng)該收取一點(diǎn)費(fèi)用。過去七年中,我一直未更新 PCalc,原因之一就是因?yàn)槌跏及姹就耆敲赓M(fèi)的,也許向用戶收取費(fèi)用將成為我不斷更新 PCalc 的動(dòng)力。
在 2001 年的 WWDC 上,我把名片塞到了一個(gè)新面孔 Phil Schiller 的手中,并向他介紹了 PCalc。之后,我記得他的助手給我發(fā)了一封電子郵件,索要PCalc 的序列號(hào),我很高興地發(fā)給了她。后來,我了解到史蒂夫·喬布斯使用了 PCalc,并據(jù)稱并不是特別討厭它。Steve Wozniak 當(dāng)年也買了很多份 PCalc。
直到 2002 一月,蘋果的 OS X 還是未能推出一款像樣的計(jì)算器(可能有人會(huì)說即便是現(xiàn)在也沒有),而新的 iMac G4s 即將面世,蘋果聯(lián)系到了我,并要我授權(quán)在美國發(fā)售的 iMac 上加入 PCalc。雖然我們達(dá)成協(xié)議每份 PCalc 只收取很小的一筆版權(quán)費(fèi),但哪怕是再小的數(shù)字乘以近百萬份也是非常可觀的!
遺憾的是,這種合作并沒有持續(xù)多久,Mac OS 10.2 就發(fā)布了,隨之而來的是一個(gè)蘋果新編寫的科學(xué)計(jì)算器。有傳言說,蘋果公司的某個(gè)高層得知他們向一位未曾蒙面的前蘋果員工支付了版權(quán)費(fèi)。但是,我無法證實(shí)這一點(diǎn)。但不管怎樣, PCalc 沒有再被捆綁出售,這件事也就告一段落了。
重寫 PCalc
2005年,我再次重寫了 PCalc。這一次的目的是學(xué)習(xí)了新的 Carbon HIToolbox API,這是一種完全不同的編程方式,有點(diǎn)像 PowerPlant,只不過是蘋果出品的。
PCalc 3 擁有當(dāng)時(shí)風(fēng)靡一時(shí)的拉絲金屬外觀,深受大家喜愛。此外,還有一個(gè)全新的 Dashboard Widget,雖然核心代碼相同,但用戶界面是用 HTML 和 JavaScript 編寫的。Widget 在那個(gè)年代可是代表著未來。
不過,此次更新我并沒有收費(fèi),因?yàn)楹芫脹]有發(fā)布新版本,我有點(diǎn)愧疚。
時(shí)值 2006 年,我想到 PCalc 3 的項(xiàng)目規(guī)模非常適合移植到英特爾機(jī)器上,而且我還可以順便學(xué)習(xí)如何移植。我拿到了一臺(tái)英特爾的 Mac 原型機(jī),構(gòu)建了一個(gè)英特爾和 PowerPC 通用的可執(zhí)行文件,等準(zhǔn)備在一月中旬推出。在隨后的幾年中,Mac 版推出了許多更新。
但隨著 2007 年 iPhone 誕生,以及 2008 年蘋果應(yīng)用商店的推出,你猜猜看這個(gè)新平臺(tái)上推出的理想應(yīng)用是哪款?
我在 PCalc Dashboard Widget 版代碼的基礎(chǔ)之上,花了一兩天的時(shí)間就在 iPhone 跑通了。以此為起點(diǎn),我又使用 Cocoa 構(gòu)建了一個(gè)全新的界面。PCalc 搖身變成了一款觸屏便攜式設(shè)備的完美應(yīng)用,它從一款在屏幕上用鼠標(biāo)點(diǎn)擊按鈕來操作的模擬計(jì)算器,變成了你手中的一臺(tái)近乎真實(shí)的計(jì)算器,感覺再也不像是假的了。
PCalc 在英特爾 Mac 發(fā)布后的第一天就入駐了蘋果商店,同一天大約有 400 多款應(yīng)用同時(shí)推出,而它的表現(xiàn)非常優(yōu)秀。最終,我們的大部分收入均來自 PCalc,而不是 DragThing,而且主要來自 iOS 而不是 Mac OS,所以我們后續(xù)的很多工作都優(yōu)先 iOS 版本,然后再移植回 Mac。我甚至將 Mac 上的 DragThing 主題引擎移植到了 iPhone 版的 PCalc 上。將一個(gè)在 Mac Pro 上運(yùn)行的繪圖引擎放入手掌大小的界面中,這在當(dāng)時(shí)看來是一件不可思議的事情。
當(dāng)然,5318008-gate(
https://tla.systems/blog/2009/09/30/pcalc-prevents-iphone-profanity/)是一個(gè)小意外,大家見諒。
后來 iPad、視網(wǎng)膜顯示屏、更多 iPad、更高版本的 iPhone,以及其他眾多設(shè)備陸續(xù)推出,而我們的 PCalc 不僅在 Mac 應(yīng)用商店中推出,而且還支持視網(wǎng)膜顯示屏,以及 iOS 版本的許多功能。
事實(shí)上,PCalc 4 在 2014 年在 Mac 應(yīng)用商店中獨(dú)家推出。
在 Mac Catalyst 出現(xiàn)之前,這個(gè)新版本實(shí)際上是基于 iOS 源代碼的,這降低了開發(fā)難度,因?yàn)槲也槐胤磸?fù)編寫所有代碼。此外,我將核心代碼分解成了一個(gè)單獨(dú)的可移植塊,這樣就可以在其他地方使用了。
第一個(gè)使用這個(gè)新的計(jì)算引擎的是 iOS 和 macOS 通知中心的迷你計(jì)算器,你可以使用它進(jìn)行快速計(jì)算。
這個(gè)小部件被蘋果推薦,而且沒有發(fā)生任何不愉快的事情。那段時(shí)間我的壓力很大,在宣傳的影響下,銷售額大增,所以我花大手筆買了一臺(tái) Retina 5K iMac,并度過一個(gè)愉快的假期。
第二次使用是 2015 年歷史上最小的 PCalc。
蘋果手表版的 PCalc 是一次有趣的練習(xí),嘗試如何在如此小的屏幕上嵌入完整的計(jì)算器界面。當(dāng)然,80 年代我有一塊計(jì)算器手表,所以我就自己制作。
相比之下,同年我還推出了歷史上最大的 PCalc,這一次是在蘋果電視上。
雖然我不清楚是否有人要求在電視上安裝計(jì)算器,但當(dāng)時(shí)我決定凡是蘋果允許的地方,我都將裝上 PCalc,只是出于固執(zhí)。
2016 年,蘋果增加了一個(gè)功能,允許 iOS 應(yīng)用提供替代圖標(biāo),于是我開啟了一個(gè)小項(xiàng)目來制作一些新圖標(biāo)。那段時(shí)間里,我做了很多這樣的項(xiàng)目來讓自己保持理智,至少可以分散注意力。
到目前為止,我已經(jīng)制作了 50 多個(gè)圖標(biāo),包括十幾個(gè)驕傲的旗幟。那一年,我了解了很多不同驕傲旗幟的起源!
升級(jí)為應(yīng)用
與此同時(shí),關(guān)于蘋果制造 AR/VR 耳機(jī)的謠言四起,我決心學(xué)習(xí) 3D 圖形學(xué)。大學(xué)時(shí)期,我曾修過一門課程,但在接下來的 22 年里,情況發(fā)生了一些變化。
不管怎樣,PCalc 的 About 頁面開始有點(diǎn)失控了。最初只是一個(gè) 3D 物理玩具,你可以向 PCalc 圖標(biāo)扔香蕉,最終變成了一個(gè)小型駕駛游戲,榮登全球排行榜,甚至還有一個(gè)物理獎(jiǎng)杯。
如今,這款游戲已變大變強(qiáng),成為一個(gè)單獨(dú)的應(yīng)用。
2017年,PCalc 獲得了一個(gè)吉祥物和一套 iMessage 貼紙——David Lanham 用 Pascal 繪制了一個(gè)可愛的熊貓。
有一段時(shí)間,我很喜歡 David 在 Facebook 發(fā)布的各種貼紙。不過他從來沒有畫過熊貓(除了上面的紅色熊貓),我覺得我可以花錢讓 David 為我制作一套貼紙,然后放入 PCalc。
你可能會(huì)注意到,About 頁面的屏幕截圖中有一些骰子。2019 年,我也在網(wǎng)上玩 D&D,我的好朋友 Jason Snell 建議我應(yīng)該為 iPhone 做一個(gè)骰子應(yīng)用。于是,PCalc 的第一個(gè)衍生產(chǎn)品誕生了!
Dice by PCalc 從動(dòng)手到在應(yīng)用商店發(fā)布,我花了兩周的時(shí)間,并借鑒了 PCalc 的 About 頁面上的大量代碼和概念。
雖說是只花了兩周的時(shí)間,但我并沒有就此止步。后來,整個(gè)項(xiàng)目不僅過度設(shè)計(jì),而且大幅拖延。我設(shè)計(jì)了五十多套骰子,如今甚至有拍照模式。無需多說,如今 Mac、蘋果手表和蘋果電視上都有這款游戲。這也成為了我探索蘋果新技術(shù)(比如 Mac Catalyst 和 SwiftUI)的試驗(yàn)臺(tái),同時(shí)也讓我看到將來 PCalc 該如何發(fā)展。
我們說回 PCalc。2020 年,蘋果的 iOS 和 Mac 上推出了一種新型的小部件——非交互式小部件。這意味著我不能使用這種技術(shù)構(gòu)建計(jì)算器了。難道是因?yàn)槲业脑騿??或許吧。如今, iOS 上仍然保留了舊的小部件,但 Mac 上已經(jīng)完全消失了。所以我需要將整個(gè)小部件移到別處,并將所有代碼移植到菜單欄中。
以上就是迄今為止我們付出過的所有努力。2022 年 PCalc 內(nèi)部進(jìn)行了很多改動(dòng),添加了在多個(gè)窗口中支持多個(gè)計(jì)算器,該功能首先在 iPadOS 上推出,并有望很快登陸 Mac。但是許多核心的數(shù)學(xué)代碼仍然與我在 1992 年編寫的第一個(gè)版本非常相似。
我敢說,只要還能編寫代碼,我就會(huì)一次又一次地重寫 PCalc。我希望你也能像我一樣,在過去幾十年中一直很喜歡 PCalc!