使用開放原始碼/自由軟體的經驗

開放原始碼運動

我是感受到開放原始碼運動得到好處的人。以前在接觸 GNU/Linux 和其他自由軟體前,只能使用非正式版本的軟體和系統。那時大家取得正式軟體的機會大概都是購買新的主機時才會隨機附上正式的系統, DOS 5.0 、Windows 3.1 等等。私下流通的軟體大部份是店家為了促銷商品而賣的大補帖,或是把大補帖當商品賣。那時剛接觸電腦的時候,以為電腦只是為了文書作業的方便性而產生的工具。只要會打字、會使用滑鼠把內容剪下、複製和貼上就當作是會使用電腦了,以後畢業後就只要會打字就好。後來漸漸的軟體越學越多,如 AutoCAD、小畫家、MS Office 95 、 97 ... ,有撥接網路之後可以上 BBS 之類的。軟體從電腦雜誌附上的光碟取得、漸漸的改從網路上取得。我記得那時 Debian/Linux 是從雜誌上的光碟安裝的,但是雜誌上有些介紹的軟體要自行從網路上下載,或是更新。那時為了學 Linux 上軟體的安裝和操作還去買了 HowTo 集合中文版,後來學著看 man (它是指令說明) ,看著鳥哥的文章學習等等。那十年的 Google 真好用。從以前要找 MS Office 的代替品、到後來的 OpenOffice 、 LibreOffice 後,我變得喜歡使用終端機作業的模式,如 bash 、 vim  和 emacs 等工具,使用 LaTex 排版、使用 Maxima 計算。以前心中想著 Excel 是我遇過最好用的軟體,除了它是微軟的產品需要用錢買使用權這個缺點之外。我可以用 Excel 連接 AutoCAD 出材料表,打圖紙框的資料或者反過來將 CAD 圖形貼在工作表上。總之我花了很多時間在找替代 Excel 的工作模式,因為我不喜歡在工作上使用盗版軟體。

採購專用軟體與開發專案

在成立工作室之後,我採購了一組電腦,一共四台電腦,一台桌機安裝 Windows 7 ,一台筆電安裝 Windows 7 ,另外二台則裝了 Debian/ Linux ,作為桌機和伺服器之用。但是文書作業工具我並沒有採購,而裝了二台 Windows 系統是因為專業軟體及 AutoCAD 也要裝在上面。專業軟體是一套名為 PV Elite ,用來計算壓力容器強度,AutoCAD 是用來繪製設計圖的。在那時 Linux 下還沒有類似 AutoCAD  的軟體,所以只好採購了 Windows 了。後來在 Linux 環境下試了試 FreeCAD 這款參數式 3D CAD ,它每年都有進步,不知不覺也用了幾年的時間;但是就 2D 圖形方面來說 還是 AutoCAD 操作上比較習慣,而且它還支援 autolisp ,可以減少一些動作。最近接了一個案子雖然以 3D 模型建立之後再拆圖把每個零件的尺寸轉成 2D 雷射加工也是可行的,只是這個案子有 80 個規格,如果一個個都是用這個流程製作會浪費很多時間。所以研究了一下拆圖後的圖形,設計了一個 autolisp 程式去製作目標,並且把要組裝的記號一起繪製完成。實際的運作時間大約二十秒左右,就把 80 個工件組合零件完成了。這並不是表示這個案子一定要使用 autolisp 來完成,而且實際包括程式設計開發時間與手工製作評估時間相當,一樣大約為 40 個小時,只是就視力保健與花費的心力來說,我認為使用 autolisp 來開發這個案子是值得的。

選擇開發工具

在壓力容器設計文件製作的經驗,我把 PV Elite 出的報告轉成了 LaTex 格式,使用了 Perl 的正規表示式 (Regular Expressions) 來把其報告分割出來。並經由 LaTex 依照各個強度計算書排版出正式的文件。在這個搭配了 Makefile 來確認正式的文件與 PV Elite 輸出文件的一致性。比較其他同事的作業流程,在第一次排版完成的強度計算書所花的開發時間與同事使用 Word 排版的時間一致,但是由於在沒有配合「使用者計需求表」的那個時候,計算書的內容會變更五到八次左右,我們輸出正式文件給文管的次數也隨之增加。在後續的修改計算書內容的時間,我的作業流程所花費的時間幾乎是同事的十分之一,以輸出計算書文件而言。我省下了在 Word 中流連,滑鼠的移動、複製與剪貼。為了研究 Perl ,我還請我朋友在大學圖書館幫我借了外面已經絕版的書,自己也買了三本現行的書回來自我學習。至於我沒有去學 Python ,是因為那時 Perl 與 Python 二者的理念不同。我比較喜歡 Perl 語言中心思想的  TMTOWTDI」(There's More Than One Way To Do It.) (不只一種方法來做一件事。);Python 開發者的方法論是「用一種方法,最好是只有一種方法來做一件事」。

 使用 Perl 作為工具時,選擇了 YAML 作為專案設定案的格式。它可以讓人對於要準備的設計文件一目了然。後來在精進 YAML & Perl 的過程中,我看到了一個詞 「LISP」,它在網路上的介紹中形容它可以是一般的程式碼也可以是一個設定檔,也可以比 XML 的精簡和更合適的標籤語言等等。剛好我那時持續在關注 autolisp ,知道一點語法,所以想要更了解 Lisp 。上網查了一些資料才知道 Lisp 是第二老的程式語言,第一老的是 Fortran。Lisp 有很多方言,SchemeCommon Lisp和新近的Clojure。在當時市面上我找到了介紹 Autocad 的 autolisp ,和一本《駭客與畫家》介紹 common lisp 。而在網路上很多文章在檢討 lisp 的優點和缺點,但是因為買了《駭客與畫家》這本書,所以選擇相信作者的論點,開始研究 common lisp 。在 IRC 上的朋友說過, common lisp 是一種只有個人開發的語言,因為太冷門了,找不到其他使用者去討論。事實上起先試者用 common lisp 重寫壓力容器設計文件的排版程序時,真的遇到很大的困難。從語法、專有名稱到設計理念和 Perl 有很大的不同。一般來說寫過 c 再來寫 perl 有一些共同的語彙及形容詞,所以比較好上手。而 lisp 與 c 就是不一樣。在寫 common lisp 時一直沒有很好的成就感,後來慢慢的接觸 Emacs 後,了解它的操作模式,以及 slime-mode 協助開發 common lisp 才漸漸習慣「REPL」的開發模式。以前寫 Perl 時使用 Vim 這個編輯軟體,它可以讓雙手不用離開鍵盤。網路上也有 Emacs VS VI 之爭,有句話是這麼說: Vi 是神的編輯器,Emacs 是編輯器之神。在網路上搜尋 common lisp 看看有什應用時,我看到了 Maxima 這個軟體。它可以編寫程式用來計算及推演數學函數。我試著寫一些壓力容器相關的應用,例如端板的容積計算,它是用端板的曲線函數對 x 軸做旋轉積分而成,我在 《計算碟形端板的內容積》有介紹,並把源碼放在網上了。

自己對開放原始碼的想法

林納斯定律:足夠多的眼睛,就可讓所有問題浮現(given enough eyeballs, all bugs are shallow)。

雖然對於開放原始碼的運動的幫助,我有很大的收獲。但是自己在開發軟體時,常常覺得自己花了很多時間,我要不要把原碼放出來。前面我提到我為了正版軟體花費了很多金錢,而且每年要一筆不少的維護費。我開發了很有效率的工作模式,但是目前止於專案工作。心裡常在想,如果把自己開發的程式碼放在市場上是否有人會買單。對於軟體發售商業模式沒有什麼概念,因為工作室用來收入的模式就是提供壓力容器的強度計算及其他機構設計計算方面的服務。如果要減少對於專用軟體的依賴,應該要自己開發,但是開發完後想要推出來販售,又擔心被人整碗端走,就像以前大補帖一樣。後來我把一個自己覺得很厲害的源碼以 GPL V3 放在了 github 上,並寫了一則 blog (就是 《計算碟形端板的內容積》 啦!)。它是目前我的 blog 中點閱率最高的文章,它有一個連結是轉到我放原始碼的位置,在其說明檔中有提到這個程式不只能計算 10:1 (SD)碟形端板容積,它還可以計算 2:1 (SE) 半橢圓形端板的容積。但是在後台看看那個原始碼瀏覽的人數,與 blog 文章的瀏覽數不成比例。所以我以為自豪的程式會有人要,但是其實還好,除非人們知道它的用途。在開發軟體上,我適合 Lisp  的開發模式,「讀取-求值-輸出」循環(英語:Read-Eval-Print Loop,簡稱REPL)。在議題上也期待讀者對於文章有任何回饋和討論。

 

各申機械設計工作室; Each Application Mechanical Design Studio 

相關資炓

壓力容器設計 各申機械設計工作室

 

留言