2020年2月24日 星期一

關於我的一點微小貢獻:預覽列印



新聞:發明「剪下複製貼上」的電腦科學家Larry Tesler逝世,享壽74歲

看到這則報導,忽然勾起一段塵封卅年的往事。雖說是微不足道的小發明,相對於創作者本人從業多年的豐功偉蹟,簡直不值一提。然而一項功能,居然幾十年後還有人在用,比絕大多數產品的生命週期都長得多。普羅大眾讀來可能只是花邊,但對於創作者而言,卻有股莫名的安慰。


我倒不認為自己是「預覽列印」這項創意的最初發明者,在資訊流通不易的前網路時代,或許在世界其他角落有個別工程師或科學家,做出了同樣功能,而不為人所知。至少在台灣這個小地方,應該是頭一個出現在市面上的商業應用;甚至在全世界,也不無可能拔得頭籌。這麼說基於以下兩點。

其一,當時作業系統的主流,在 PC 是 DOS,中大型電腦則各擅勝場,如 Unix 或 IBM 360 等,幾乎都是文字介面。圖形式使用者介面(GUI)在實驗室醞釀已久,Apple 和 Microsoft 的劃時代產品則尚在萌芽階段,多屬早期使用者,商業應用有限。

其二,因為當年印表機速度緩慢,文字模式作業系統的英文商業應用,重視速度遠甚於呈現效果。各家印表機廠商大都支援對應螢幕上的文字效果,如反白等,也就是印表機的文字模式;至於可以變化多端的圖形模式,支援者相對少,速度更加遠遠不及。因此在 GUI 興起之前,很難想像有「預覽列印」的實際需求。



然而在中文世界,情形大不相同。為了在以英文為主的電腦作業環境使用中文,學界業界都做了長期努力。其中最大挑戰是中文字數太多,光是編碼,一個字就花掉 16 位元,遠高於 ASCII 的 7 位元(註1),若要模仿英文系統,以 ROM 儲存字型,成本是人家的上百倍。昂貴的中大型電腦各顯神通,反正客戶不差這個錢;大眾化的 PC 產業卻顯然不符效益。慢慢有廠商發展出將字型存放在磁碟片上的純軟體產品,大幅降低成本;不過硬體方面也需要相對配合,也就是顯示卡、印表機都必須支援圖形模式。

我畢業那年,進入一家在 DOS 上開發中文系統的軟體公司,不久開始負責其中的印表機模組。前面說過,當年印表機速度緩慢,圖形模式更是有如蝸牛漫步。另一方面,印表機廠商每一家都是跨國企業,台廠也不可能像微軟一樣,要求他們自己提供驅動程式。因此所謂印表機模組的工作,主要分兩部份:其中之一是為流行的印表機寫驅動程式,建立與中文系統間的溝通橋樑;另一項工作,則是將使用者輸入的印表指令,轉化成正確的圖形,交給驅動程式,再由印表機輸出。

話說中文系統雖然運作於圖形模式,為了和大部份軟體相容,實際操作仍然是文字模式。當年在 DOS 上,並沒有像 Word 這樣「所見即所得」(WYSIWYG)的文書處理軟體,多數人用的是類似 Windows 「記事本」的文字編輯器,其中最有名的叫 PE2,走過那時代的大都用過。那種東西只能編修文字,排版功能半點沒有。倘若你想進行一些簡單排版,諸如齊中靠右,或令中文直排(這點在中文世界很重要)之類,就必須仰賴中文系統的印表指令。

例如:  ~R1;這行中文要直排~R0;

其中 ~Rn; 便是印表指令。我的工作則是將「這行中文要直排」旋轉 90 度印出去。



其實大多數基本指令,在我加入之前,早就由學長完成了。然而使用者需求是個無底洞,即使在資訊流通不易的前網路時代,永遠有經由各種管道的要求,不斷流進來。這些強化功能 (註2),寫完後必須在各種不同印表機測試,那真是漫長的等待歲月;更別提沒寫完之前的除錯階段,得找一台速度最快的印表機,反覆檢視輸出結果,直到初步正確為止。看著印表頭來回滑動,常令你懷疑人生。

有天靈機一動:只不過想看看「指令轉成圖形」的結果,何必讓它輸出到紙上?若是輸出到螢幕,豈不快上十倍不止?其實那也不難,寫下一支驅動程式,叫做「虛擬印表機」,輸出端由印表機改成螢幕就是了,只花半天不到,比口罩程式還快。自此以後不再無謂等候,寫碼效率大增,至少十倍速起跳。

某日大老闆前來巡視,發現本人螢幕出現異狀,又不似在打怪,問道這是什麼?當下得意洋洋詳加解說。老闆如獲至寶,大喜曰:「這很有用欸!省時不說,更加省紙,一定大受歡迎。」交待立刻進行產品化,加入下個版本大肆宣傳,廣告詞大約就是「印前預覽」什麼的。懶惰工程師的木牛流馬,就這麼上市了。


當然,因為只是個點子,技術上並不困難,競爭對手很快就抄上。GUI 興起後,更成為主流作業系統的基本功能。你說怎麼沒去申請個專利什麼的?一方面自己不覺得有什麼了不起,公司也不太重視這塊;另一方面,國內當年對軟體專利的申請跟不上時代,困難重重(舉例說,一定要依附某個「實體裝置」才有可能通過。註3),也就興致缺缺。

當然,從這件事也不難看出,所謂工程師的通病,往往對商業價值視而不見。若不是老闆正巧撞上,大概不可能在台灣第一個見世面賣錢。所以我從不認為自己首先發明這個點子;大有可能早就有人寫了自爽,只差沒拿出來亮相而已。當然,同樣環境下,別人要寫得打大量基礎,而我剛好在那個位置,知道門路,只花了半天功夫。順便提提前陣子媒體吹捧、所謂兩天完成的口罩程式,甚至牽拖某個特定人物的功勞。其實你若問我,大半得歸功於背後系統馬步紮實,經手的工程師熟門熟路,才有可能。軟體界有高手,但真的沒有神。

註1:附帶一提,現在仍然有人用的倉頡輸入法,當初叫倉頡組字法,本來想法是以字母表示部首、組成漢字,從而得以在 ASCII 環境傳播運用,因為很多早期通信協定都限於 7 位元的 ASCII。這項實驗後來沒有成功,只留下輸入法。時至今日,通訊儲存成本鉅幅下降,再沒有人去計較什麼 8 / 16 位元了。

註2:強化印表功能,請參考「幹嘛懂三角函數或機率?

註3:舊時代軟體專利官司,請參考「第一場智財權官司


 



《以下留言與回覆,來自 聯網

01. Olivia 隨心所欲  2020/02/24 09:55

讚啦我很喜歡用預覽列印這功能耶~尤其是在規劃旅遊行程時省了好多紙,感謝 !!

格主於 2020/02/24 23:05回覆

謝我老闆罷!當初做這功能的時候純屬偷懶,可沒想到替大夥兒省紙哩。誰理你

沒有留言:

張貼留言