2022年2月26日星期六

容錯人生

現在電腦普及,筆者相信所有機構都會運用上電腦。就算是一人公司,也會用試算表軟件來處理收支紀錄;而部份機構更完全依賴電腦以及互聯網來運作,例如網上商店,又因為互聯網除去了地域的限制,所以任何時間都會有客戶或員工需要使用這些網上系統。換句話說,現在的客戶和員工期望網上系統都是運行著的。傳統電腦系統只服務機構內的用戶,所以資訊部的員工便可以利用其他員工下班之後的時間來維護電腦系統,而現在的網站是不可能停下來的,否則,機構網站停止運作,會直接影響所有用戶,而機構的對外網站如果停止運作,是可能被傳媒報導,影響機構聲譽,以及可能有經濟上的損失。因此,資訊科技界便出現了一個「容錯」(Fault Tolerant)的概念。

一個電腦系統涉及了很多不同的部份或組件,希望電腦系統不會停止運作,不是令電腦每部份都能不斷正常運作,因為現實世界裡要求每個部份都能永久運作下去是不設實際的,所以實際的想法是反過來要假設電腦的每一個部份都是有機會發生問題,跟著便設計電腦系統在某一個部份失靈時,整個電腦系統仍能運作下去,最簡單的方法,便是電腦的每一個部份,都有一個同樣功能的後備,當該部份能正常運作,後備的便默默在等,而當該部份失靈時,後備部份便會立即代替原先的部份運作下去,整體來看,電腦系統便能繼續運作下去。

想想我們自己的身體,我們也能看到容錯的「設計」,例如我們有兩邊肺,有兩個腎,眼睛和耳朵也有一對,如果這些器官的其中一個失去功能,我們的身體也可以靠餘下來的另一個來繼續運作下去。

另外,「容錯」的概念給筆者的啟示是,要完滿的做好一件事,不是要去假設這件事的過程是很順利,反過來應該做的卻是「為最差情況打算」,假設這件事的每一個細節都有機會錯,為此我們便應先作好準備,當某一細節真的有問題,我們都有「兩手準備」,令整件事可以繼續下去。將這個概念擴大到整個人生,如果我們想人生可以順利去到最終,我們先要有人生便是有起有跌的心理準備,跟著我們在人生的每一個階段,都要有「在哪裡跌到,便在哪裡站起來」的能力。

除了我們對我們的人生和身體有容錯的想法,對於我們身邊的人和事也應抱著容錯的心態,例如當我們和別人合作,我們也應有心理準備拍檔是會出錯的,必要時我們也得預先為拍檔會出錯而作出準備。如果我們已經作為父母,我們要有接受孩子便會出錯的心理準備,當孩子出錯,不必動氣,跟著想辦法引導子女便是。

2022年2月19日星期六

信來信往

電郵,根據互聯網服務供應商的數據顯示,多年來仍是使用互聯網頻寛最多的服務。記得多年前升讀大學時,首次得到了人生中第一個電郵地址,當時主要是大學界的老師和同學才會使用電郵,因為大部份電郵都是寄給自己學校或學系的教授導師,所以我甚至可以檢查電郵是否已寄到他們電郵信箱之內,因為電郵用戶少,收到的電郵不多,而互聯網的限制很少,所以任何一部電腦都可以寄電郵到任何用戶的電郵信箱。

隨著互聯網用戶增多,電郵便被濫用於商業性宣傳,甚或作散播電郵病毒等用途,所以互聯網供應商便加強了電郵的使用,例如所有用戶只能將外發的電郵先送到互聯網供應商的電郵伺服器,再由它轉寄到目標電郵信箱,另外,電郵伺服器採用了某些電郵過濾軟件,來防止有問題的電郵送進用戶的電郵信箱之內,但是,我還發現我的電郵信箱收到了一些有問題的電郵,我在想,它是怎樣通過了這些電郵過濾軟件呢?

其中一個電郵過濾軟件經常使用的方法,便是在電郵當中找一些特別的字詞,這些字詞在過濾軟件的資料庫中被認為是有問題的字詞,這些字詞出現比例越多,該電郵是一個垃圾電郵的機會便會越高;再加上電郵軟件的白名單和黑名單,電郵軟件便能更準確認出某一電郵是否垃圾電郵。就著以問題字詞過濾軟件,那些發送垃圾電郵的人,便想到了一個破解的方法,便是在電郵內將自己想給用戶看而包括問題字詞的部份放在電郵的開始,這部份完結之後,便隔了很多空行,再加入一大段正正常常的電郵內容,因為過濾軟件只考慮問題字詞的出現比例,所以在後面的正常部份越多,問題字詞的影響便越少,最終整個電郵被認為是垃圾電郵的機會便越小。這種破解電郵過濾軟件的方法給我的啟示,是原來當我們在聽別人說話時,如果大部份都是合理正常的,我們是很難發現他某一小部份內容原來是有問題的。

互聯網的電郵信箱運作,近似我們在郵局租一個郵政信箱,如果有信寄到電郵信箱,就算電郵用戶沒有上網,電郵還是暫存在電郵伺服器內,就好像郵局把信放在郵政信箱之內,到用戶上網檢查電郵,便像我們走到郵局去看看郵政信箱有沒有信一樣。以前,任何一部電腦,都可以直接寄出電郵到收信者的電郵伺服器內,就像我們走到收信人的郵政信箱的郵局去放低信在收信人的郵政信箱,但是自從有濫發電郵的問題出現後,當電郵伺服器收到電郵,便會查一查寄出的伺服器是否列在一個合法發電郵的電郵伺服器,即是每當我們發電郵時,電郵必定要先經自己的互聯網服務供應公司的電郵伺服器,再由這個電郵伺服器寄到收信者的電郵伺服器,換句話說,就好像我們現在不能直接到收信者的郵局放低信,而是必須先交給自己的郵局,再由這郵局轉寄到收信者的郵局。可見互聯網上的電郵運作其實和現實中的郵局分别不大。

就算是經過電郵伺服器來寄電郵,解決了任何電腦都可以亂寄電郵的問題,但仍有一個問題還未解決,便是電郵的發信者是可以冒充的,想想現實世界我們怎樣解決?其實方法很簡單,如果信上有發信者的簽名,我便會相信這信便是由該發信人所寄出。同樣,原來在互聯網上的電郵,也可以這樣做,便是運用發信者的私人數碼證書來簽署這個電郵,到收信者收到電郵時,便可以核實電郵中的數碼簽署。

總結以上,電郵給我們的啟示是原來「魔鬼是在細節裡」是對的,當大部份資料是對,我們便很容易相信所有內容都是對的。而電郵的運作,原來和我們日常的郵政運作差不多,遇上難題,我們只要想想現實世界有否相似問題,如果有,我們便可以從現實世界的解決方法,想出解決手上的問題的方法了。

2022年2月12日星期六

問題人生

有否聽過這樣的說話:「易的問題由我來解決,難的問題由你來解決,至於決定一個問題是易是難,則是由我來決定。」原來在電腦科學界,也有相似的問題。當科學家或電腦專家利用電腦處理不同的問題時,開始發現有些問題是有特定方法來解答,而有些問題,則只有很快的方法來證明解答是否正確,但是卻找不到有效的方法來找尋解答;換句話說,有些問題是已有有效的方法來解答,有些問題則沒有有效的方法來解答。再簡單的說,有些問題易,有些問題沒有解答。至於某一個問題是否有快捷方法來解答,對於電腦科學家來說,已經是一個難題了。

例如,我們要找出兩個數字的最大公因數,電腦科學家(或數學家)已找到很快捷的方法來解決,但是另一個問題,在一組數字內(包括正負數字),其中有否某幾個數字加起來是零,要解答這個問題,除了將這組數字內不同組合的數字加起來,試試總和是否零之外,沒有其他可行而快捷的解答方法了。

對於已有解答的問題,我們只須跟著已有解答跟著來編寫程式,便可以解決。但是對於沒有有效解答的問題,我們只能編寫程式來驗證某一答案是否對,但那一個答案才是對,則要將所有可能的解答逐一去試。電腦科學家告訴我們,對於沒有快捷解答的問題,取而代之的,我們只能找到快捷的方法去盡量找到最接近的答案。例如以前提及的數字總和為零的問題,如果改為找到一組數字的總和「接近」零,則可以很快捷找到解答。

其實想一想,我們的人生也面對著不同的問題,有些問題是有解答的,但是有些問題則沒有方法找到最好的解答。例如問題是在哪裡可以以最平的價錢買到某一型號的手機,我們只雖要上格價網站找找,再打個電話證實一下,便可以真的去那商鋪去買了。

和電腦問題相比,人生問題更是不可以重來,選擇了某個方法去做,時間過了,後果便已出現,我們不可能好像電腦一般,由頭重新試過,另外,有些做法是不可能逐一去試。所以,正如以前所說,這些問題,我們最多只可以找到一個接近最好的答案或做法,我們的人生不容許我們將所有可能性都去驗證一下。例如,如果問題是某一個家長在思考那一間學校最適合自己的子女,他根本不可能要子女把這些學校逐一去試,不論家長怎樣思考,也未必想到最好的選擇,所以,家長極其量只能靠所能收集到的資料作出判斷而已。

由此可知,我們人生所遇到的問題或難關,未必必定有答案,我們所應做的,便是盡量去搜集資料,找有相關經驗的人來咨詢,之後,我們便要以我們所知的資訊來作出決定,跟著便努力去做,期間不斷的去反覆驗證方向是否正確,最初做決定時的假設,包括所處的人和事有否明顯改變。如果不斷的去思考和期望能找到最好答案,可能會令自己走進了「死胡同」,既做不到決定,問題一點也沒有改善,問題只會越來越難解決,或人生只會原地踏步,這實質和找不到答案,消極面對並沒有什何分別了。

2022年2月5日星期六

先緩輕重

計算機科學(Computer Sciences)的其中一個學科便是作業系統(Operating System),而所學的作業系統便是直接控制電腦硬件的軟件,簡單來說,便是微軟視窗(Microsoft Windows)和Linux。在我就讀大學時,這是必修科,可惜近年這學科在很多大學變成了選修科目,也許是因為在香港是沒有任何作業系統的開發;但筆者卻會覺得,這學科所學的東西是很基本的理論,在其他範疇也可以應用,當中有些甚至是可以應用在生活之中。

作業系統管理著電腦內所有正在運作的工序,以現在電腦的運算能力,一部普通的電腦同時間便會有過千個工序在運作之中,那麼電腦應怎樣執行這些工序呢?這便是作業系統其中一個重要範疇,scheduling。不同的scheduling模式,便給我們一些提示,看看我們能否好像電腦一般執行我們的任務。以下是其中幾種常見的scheduling模式。

第一個模式為First in first out(或First come, first served),電腦將所有工序以他們出現的先後排序,順序一個一個工序執行。作業系統的知識告訴我們,這個做法簡單,但是如果當中有些需時頗長的工序,便會令其他某些工序需要長時間等候,如果現時的工序不能完成,即其他所有工序都不會開始執行。在生活裡,這便類似是我們工作枱上的In-tray和out-tray,我們將In-tray上的文件一份一份的完成,有時如果某一文件所需時間很長,In-tray的文件便只會不斷增加。

第二個模式名為Shortest job next,做法是電腦完成了現時的工序,下一個要執行的工序便是最短的那一個工序。作業系統的知識告訴我們,這種做事模式的好處是就所有工序來看,平均工序所需完成時間為最短,但是那些需時較長的工序,可能會永遠不被執行。因此,如果我們在生活中做事的先後為先完成需時較少的工作,之後才做需要較長的,這便類似我們從In-tray選一份文件來做時,永遠選預算所需時間最短的那一份來做,表面看來是很有效率,能完成很多工作,但是因為每每只做需時較短的工作,換句話說,便是做了很多「小事」,而大事便從來不會開始來做。

Priority-based scheduling是較之前兩種模式較為複雜,做法是將所有工序預先分重要性,重要性高的一類工序先執行,而執行時可能便將同重要性的工序以First in first out或shortest job next等其他模式來處理。這種模式的好處是重要的工序會先執行,但問題是重要性低的工序可能永遠都不會被執行。這模式便類似我們工作枱上有數個不同重要性的In-tray,我們永遠先處理重要性高的那一個In-tray的文件,當完成重要性高In-tray的文件之後,才會開始做重要性中再跟著重要性低的那些文件。

作業系統這學科告訴我們,沒有單一scheduling模式是適合所有電腦,電腦設計者須要考慮電腦的用途和期望的效能來設計所需的scheduling模式。在這些較複雜的scheduling模式當中,有一個模式給我的啟發最深。這個模式的做法是,將每個工序分重要性,之後以重要性先後來執行,但重要性低的工序在等候的時候,電腦同時會將他們的重要性提高,即是等得越久,重要性便變得越高,最後它的重要性甚至高於其他工序,電腦須即時執行。

在我們的生活裡,我們會覺得某些事比其他事重要,例如工作便比探望朋友重要。如果我們只是以重要性來決定做什麼事,我們的人生便只有工作,永遠也不會去探望我們的朋友。但是剛剛提及的模式提醒我,就算是一件不甚重要的事,如果是閒置了很久都沒有去做的,我們便得更重視它,就算是它本身重要性多低,我們也得放下手上重要的工作,把它完成。

說到底,作業系統的scheduling是一套教電腦如何系統地處理大量工作的模式,它可以給我們啟示,但人們真的不能像電腦一般活得像個機械人。找時間,去做一些很久沒有做而表面看來很無聊的事吧。

千言萬語

 電腦這個詞語,給我們的感覺是一件像我們人類腦袋的東西,擁有記憶,懂得思考,但是在英文原字Computer,其實只指是一部懂得運算的設備而已,能令一部只懂得運算的設備變成一部像我們人類般思考,懂得完成無數的工作,是隨著電腦發展而被研發出來的程式語言。到了今天,已經有數以千計的程式...