Search resumes and take the initiative to contact job applicants for higher recruiting efficiency. The Choice of Hundreds of Companies.
2014年開始以Node.js/javascript 作為主要開發語言,從前端網頁到後端REST API,以及手機Hybrid App都有開發經驗。也曾結合Node.js與樹莓派,開發客製的攜帶式裝置。2003年至2013年從事J2ME手機上的Java VM的相關開發,主要使用C語言以及Java。
從主機端到手機上的嵌入式系統,很幸運能參與過各式各樣的項目,也期許未來能在軟體開發的領域上繼續挑戰更多有趣的事物。
台北市, 台灣
五月 2014 - 七月 2021
當民眾報案,需要派遣救護車時,系統會接收消防局的派遣記錄,並在本系統上建立一個案件;而此案件中每一位傷患的救護紀錄,會由急救員使用App在平板電腦上做紀錄,即所謂的「電子化救護紀錄單」。本系統為網站式架構,有網頁介面提供案件查詢、資料維護等功能,並提供REST API讓「電子化救護紀錄單」App呼叫,以存取後端資料庫的紀錄。
「電子化救護紀錄單」App有兩個特色:
* 根據急救員填寫的資訊,按照預設規則動態呈現其他要填寫的題目,引導救護員快速且正確的填寫救護紀錄單的內容。
* 當消防局更新救護紀錄單的題目內容時,不必修改程式,只需修改題庫的設定檔
系統的Server端使用Node.js開發,以express.js框架建立主網站,提供REST API。後端使用MySQL資料庫
App使用ionic框架,採用Cordova/Phonegap為基礎的Hybrid App開發,以方便製作跨iOS與Android平台的版本,並且因為使用的技術都是javascript與HTML5,可以流用開發網站的經驗,讓不同專案的工程師可以相互支援。
針對病情嚴重需要急救的傷患,除了基本的救護記錄表之外,還需要收集現場影像及病患的心電圖、生命徵象等資訊,即時提供給遠端的指導醫師協助診斷,以增加傷患的存活機會;因此這個系統除了要開發軟體功能,還需要搭配硬體來擷取儀器的資訊並拍攝影像。
由於市面上現有的錄影器材無法從遠端直接由系統控制開始錄影/停止錄影,加上收集生命徵象的儀器無法主動上傳資料到行動急診室系統,需要有一個設備去擷取資料再即時上傳;因此自行開發了一個攜帶式的「資訊擷取盒」,提供以下功能:
* 透過USB攝影機拍攝畫面
* 在串流即時影像的同時,將影像存檔在本地端(避免網路中斷時影像丟失)
* 存檔的影片會在案件結束後自動上傳歸檔
* 可連接多種型號的儀器,擷取生命徵象資訊
* 內建鋰電池與4G訊號,可隨身攜帶
「資訊截取盒」是一個專門為專案少量生產的產品,訂單數量少無法請廠商專門為其生產電路板,因此我採用了樹莓派(Raspberry Pi 3b)開發板作為主要的零件。這個開發板可以執行Linux作業系統,比起其他的嵌入式系統提供了功能更完整,更接近個人電腦的執行環境,因此得以直接用Node.js開發擷取盒的程式,降低開發的難度。
在醫院的各種電子化系統中,大多數的應用都需要從各種儀器去擷取數據,作為醫師參考的重要依據;因此我以「行動急診室」中的「資訊擷取盒」為基礎,開發了專門接收儀器資訊的「資訊擷取盒」以及搭配的後台系統。
硬體上同樣採用樹莓派(Raspberry Pi 3b)開發板,以Node.js開發。後台的Server亦使用Node.js開發,提供REST API讓擷取盒上傳數據,以及提供前端網頁查詢。
程式上我設計了可擴充的架構,要介接新的儀器時就可以在原有的程式架構上添加與儀器溝通的邏輯,就可以支援更多不同廠牌的儀器
醫院為病患安排動手術時,是由麻醉科負責填寫許多表單,包含手術前、手術中、手術後都各自有不同的資料需要紀錄;因此麻醉科採購這個系統的目的就是將這些表單電子化。
手術前與術後填寫的表單主要是問卷的形式,因此沿用了「電子化救護紀錄單」所開發的技術,以設定檔形式定義問卷題目,方便在問券內容改版時可以不需修改程式碼。
手術中的表單就更為複雜,可以分成「人工填寫」與「自動擷取」兩大類;人工填寫的資料根據性質的不同,需要搭配個別的填寫介面,例如在手術進行中輸血或輸液時,除了要紀錄輸入的時間和品項(血漿/點滴)等等,還要紀錄輸入的部位。我們開發了圖形化的方式呈現,同時顯示出點滴裝設在病人的身體位置,以及輸入的品項與點滴的容量等資訊,讓使用者更直覺的填寫紀錄。
自動擷取的數據有的直接收集自儀器(例如心跳、血壓),也有的是來自外部的系統(如檢驗報告)。來自儀器的數據便利用了前述之「病患資料收集系統」,搭配「資訊收集盒硬體」連結手術室中的儀器,自動收集數據。以樹莓派建構的收集盒具有低耗電量、尺寸小巧的優點,可以安裝在手術室的儀器旁,不會佔用過多空間;同時樹莓派的成本低廉,比起傳統上使用個人電腦建置的系統具有相當多的優勢。
除了主要的系統之外,我也參與開發了一些子系統來協助與醫院現有的環境整合;例如RFID讀卡機的讀取程式,讓使用者可以用識別證刷卡代替輸入帳號密碼。另外還需要開發中介程式,去跟醫院的其他系統溝通;例如手術排程紀錄就是從外科部門建立,透過中介程式匯入進麻醉科的「手術麻醉紀錄單系統」。而前面提到的手術中表單當中,要從檢驗科去取得例如驗血、細菌培養等檢驗報告時,也需要透過中介程式去醫院現有的檢驗科系統查詢。
當發生重大的災害或是意外,傷患的數量超過單一消防局分隊可以負擔的容量,需要調動多個分隊,甚至需要跨縣市支援的時候,就需要一個系統去整合資訊,以協助資源的調度。
因為加入救援的人員與車輛不一定來自同一個縣市,甚至有民間的救護車會一起加入,因此無法事先對所有的車輛或分隊等造冊。能夠讓參加任務的單位快速的登記車輛代號,免去繁雜的資料登打作業,就變成是一個很重要的需求。我們採用了QR Code的方式,讓陸續抵達的救護車可以直接掃描加入;現場加入後這台救護車就可以接受分派,由上層指揮的單位登記哪些傷患由這台救護車輸送。藉由這個系統,指揮人員可以即使掌握傷患的人數,救護車的列表,以及傷患個別送往哪些醫院等資訊。
技術架構上大量傷患系統與其他的專案相同,都包含主機端的網站,搭配手機/平板的App:但是由於我們採用的各種技術框架陸陸續續都不斷的更新版本,開始有一些技術不再向下相容了。因此為了開始準備將來的專案的升級,我在這個專案中採用了新版的ionic框架,也就改用Angular/TypeScript開發。
一月 2003 - 十月 2013
在智慧型手機問世之前,J2ME是手機上面可下載的遊戲或應用程式所使用的主流技術。當時的功能型手機沒有統一的硬體平台,各家手機製造商各別採用了不同架構的晶片,因此Java的跨平台特性讓軟體開發商可以有一個統一的執行環境,讓開發出來的遊戲與應用程式可以在眾多廠牌的手機上面執行。而要讓這些不同架構的手機執行Java程式,就需要將Java VM(虛擬機器)能夠移植進這些手機平台的程式碼中。
在曜碩科技服務的期間,我參與過多個型號的手機的Java VM的移植工作;每一個移植的案子都包含以下的工作:
Java VM本身是一個函式庫,程式碼是授權自Java的開發商Sun Microsystems,保證了與J2ME相關規格的相容性;公司再根據Java VM運作需要的系統功能,制定了一個與手機平台介接用的API;而Java VM的移植工作就是將VM的函式庫整合進到整支手機的程式專案中,並按照手機平台所提供的軟體功能,撰寫程式碼來對應VM介接API所需要的功能。
例如當使用者按下手機的按鍵,手機平台要把這個事件通知到Java程式,就需要按照該手機平台的設計,撰寫程式接受到按鍵的事件,再呼叫Java VM的介接API把訊息傳進去,讓裡面執行的Java遊戲收到使用者的操作。反之,當Java遊戲要發出音效時,Java遊戲呼叫的是定義在J2ME規格的多媒體相關的標準API,Java VM再呼叫中介層定義的與音效相關的API;移植的工作就是要撰寫程式,在中介層的音效API被呼叫時按照該手機平台的規格,呼叫相對應的音效函式,就實現了Java遊戲在這個手機平台發出音效的功能。
手機平台的程式碼多為C語言撰寫,因此Java VM的移植工作主要也是使用C語言開發。使用到Java語言的時候反倒是在測試移植的正確性時,會撰寫J2ME的應用程式來檢查Java的功能是否如預期。
當年的手機平台本身並未提供使用者自行安裝程式的功能,所有手機選單上的功能都是固定不變的。因此還需要開發一個Java應用程式的管理器,整合進手機的主選單裡,以提供使用者需要的下載、安裝、執行或刪除程式等管理功能。
完成移植之後,還有一個重要的工作就是「相容性測試」,要完整執行原廠提供的整套測試用例,以確保J2ME定義的各種功能都符合規格上定義的行為。只有通過相容性測試,才能夠被原廠授權,可以宣稱與J2ME規格相容。支援測試模式需要連續自動安裝、執行測試,並收集測試結果回報給測試主機,因此在提供給使用者的介面之外,還需要為這個手機平台撰寫測試模式需要的機能,讓測試人員可以自動化的執行測試程序。
藍光光碟片除了影片內容,也有互動性的功能選單讓使用者操作,甚至可以在光碟片中放上Java程式讓使用者操作,提供功能更豐富的互動介面,這代表藍光播放機上面都會搭載Java VM,以執行互動程式。基於手機上的Java VM產品的成功經驗,公司嘗試跨入藍光播放機的Java VM市場;我參與了這個產品的初期研究,參與了以下的開發工作:
在藍光光碟規格中,規定了播放機要支援的Java API(稱之為BD-J),以提供一致的功能讓光碟片的開發商可以確保互動程式可以在任何相容的播放機上正確執行。因此如同手機上的Java VM產品,我們需要為藍光版本的Java VM設計一組中介層,方便將來移植Java VM產品到不同的硬體平台上。
為了驗證BD-J的功能,必須要有一個執行的環境讓Java VM可以實際執行,實際控制影片的播放、快進、跳到下一章節等動作,因此我們開發了一個Linux版本的藍光播放軟體作為「參考實作」;可執行BD-J的互動程式,顯示其選單畫面,並且執行基本的影片播放。
這個參考實作是在Linux上以C++開發,使用DirectFB作為畫面顯示的基礎平台,並利用GStreamer實作影片播放功能。
除了公司核心的Java VM相關產品,我也參與了公司內部系統的導入與開發,以增進工作效率。
為了將開發過程中累積的知識文件化,提供一個容易查詢也方便編輯的知識共享平台,我參與了企業知識平台的導入。選用的是Confluence這個套裝的系統,架設在公司內部的網路。這套系統支援了類似wikipedia的語法,方便員工快速撰寫格式清晰易讀的文件,文件之間也可以很簡單的建立連結,方便互相引用。
隨著公司規模成長,需要有效管理發現的bug,追蹤開發進度,我負責為公司挑選合適的issue tracking系統。最後挑選JIRA的原因主要是其自訂流程、狀態、以及設定通過條件等等客製化空間很大,可以配合團隊的工作習慣定義最適當的處理流程。
由於JIRA的客製化彈性,我也協助公司的管理部門透過自訂流程的方式,以JIRA系統來管理諸如合約簽訂這類在不同階段需要不同主管核准、放行等等需要控管的流程。
當時公司正在導入ISO 9001認證,藉由將事務的流程規則定義在JIRA系統,只要在JIRA系統上面操作就一定會符合規定的流程,每個控制點都由具有權限的人授權,自然就滿足ISO的要求,無需增加人工稽核的負擔。
每個專案開發所花的工時,都被視為公司產品的成本,在會計上必須要正確的紀錄,因此公司自己開發了一個系統專門讓工程師填寫每天在哪個專案上面花費的時間。我參與了這個系統的開發,使用Grails框架搭建網站,後台搭配MySQL資料庫。以這個框架建構的網站符合MVC的架構,並且內建了ORM來以物件導向的方式對資料庫的操作。在學習使用這個框架,以現代化的觀念搭建網站的過程中,我學到很多寶貴的經驗。
除了軟體的產品,公司也試圖跨展到IOT相關的硬體領域。當時選定藍芽模組作為家電自動化的控制核心,在試產的過程中衍生出開發測試機具的需求。我參與了測試機具的控制軟體的開發,利用Arduino開發程式來偵測測試治具的開合。當測試人員把藍芽模組放上治具,並搬動把手固定住模組,測試的接腳便會接上;此時Arduino程式偵測到治具關上,便透過serial port通知電腦上的測試軟體開始執行測試。藉由自動偵測開合,測試人員可以不需操作電腦畫面,只需手動放上模組就可以逐個進行測試,減少操作的不便並減少人工錯誤。
隨後公司推出了一些電玩搖桿的產品,我也參與了搖桿的測試工具開發,利用電腦程式呈現搖桿與按鍵讀取到的數據,讓工人檢查搖桿推到左右上下邊界時是否能讀取到正確的數字,按下搖桿按鈕時是否收到信號等等。
當時公司申請了研發替代役的名額,我曾負責安排課程培訓研發替代役招募到的員工。藉由設計有趣的題目讓新成員練習開發手機上的應用程式,熟悉J2ME的各種功能的API用法,並實際在手機上驗證執行的效果。在他們完成應用程式之後,我們舉辦了公司內部的發表會,讓成員演示自己開發的成果,也增加與各個部門同事交流的機會。其後這些成員加入專案,我負責分配工作,監督他們開發的進度,並指導他們開發上遇到的問題。
三月 2000 - 三月 2002
在2000年代網際網路萌芽的階段,公司一開始是的主要業務是製作內容網站,提供內容吸引流量將來導入網路廣告獲利;我在這間公司最早的工作便是撰寫HTML網頁,協助工讀生大量的產生網頁內容。
後續公司推出「個人網站」的服務,用電話號碼來註冊一個自己專屬的網址,(例如市話028742079,網址便是028742079.88602.com ),這個網址亦附帶個人的網頁。這些功能讓使用者可以放上個人資訊,或是放上商家的聯絡方式作為網路名片的用途,因此網頁不再是預先編輯的靜態文字,而是使用者可以修改的內容。此時我學習動態網頁製作,提供編輯的介面,並陸續增加了一些留言板、寫日記等等的功能。這段期間我見識到網路產業早年的一些發展,也是我作為軟體工程師的起點。
2002 - 2004
1997 - 2002
2014年開始以Node.js/javascript 作為主要開發語言,從前端網頁到後端REST API,以及手機Hybrid App都有開發經驗。也曾結合Node.js與樹莓派,開發客製的攜帶式裝置。2003年至2013年從事J2ME手機上的Java VM的相關開發,主要使用C語言以及Java。
從主機端到手機上的嵌入式系統,很幸運能參與過各式各樣的項目,也期許未來能在軟體開發的領域上繼續挑戰更多有趣的事物。
台北市, 台灣
五月 2014 - 七月 2021
當民眾報案,需要派遣救護車時,系統會接收消防局的派遣記錄,並在本系統上建立一個案件;而此案件中每一位傷患的救護紀錄,會由急救員使用App在平板電腦上做紀錄,即所謂的「電子化救護紀錄單」。本系統為網站式架構,有網頁介面提供案件查詢、資料維護等功能,並提供REST API讓「電子化救護紀錄單」App呼叫,以存取後端資料庫的紀錄。
「電子化救護紀錄單」App有兩個特色:
* 根據急救員填寫的資訊,按照預設規則動態呈現其他要填寫的題目,引導救護員快速且正確的填寫救護紀錄單的內容。
* 當消防局更新救護紀錄單的題目內容時,不必修改程式,只需修改題庫的設定檔
系統的Server端使用Node.js開發,以express.js框架建立主網站,提供REST API。後端使用MySQL資料庫
App使用ionic框架,採用Cordova/Phonegap為基礎的Hybrid App開發,以方便製作跨iOS與Android平台的版本,並且因為使用的技術都是javascript與HTML5,可以流用開發網站的經驗,讓不同專案的工程師可以相互支援。
針對病情嚴重需要急救的傷患,除了基本的救護記錄表之外,還需要收集現場影像及病患的心電圖、生命徵象等資訊,即時提供給遠端的指導醫師協助診斷,以增加傷患的存活機會;因此這個系統除了要開發軟體功能,還需要搭配硬體來擷取儀器的資訊並拍攝影像。
由於市面上現有的錄影器材無法從遠端直接由系統控制開始錄影/停止錄影,加上收集生命徵象的儀器無法主動上傳資料到行動急診室系統,需要有一個設備去擷取資料再即時上傳;因此自行開發了一個攜帶式的「資訊擷取盒」,提供以下功能:
* 透過USB攝影機拍攝畫面
* 在串流即時影像的同時,將影像存檔在本地端(避免網路中斷時影像丟失)
* 存檔的影片會在案件結束後自動上傳歸檔
* 可連接多種型號的儀器,擷取生命徵象資訊
* 內建鋰電池與4G訊號,可隨身攜帶
「資訊截取盒」是一個專門為專案少量生產的產品,訂單數量少無法請廠商專門為其生產電路板,因此我採用了樹莓派(Raspberry Pi 3b)開發板作為主要的零件。這個開發板可以執行Linux作業系統,比起其他的嵌入式系統提供了功能更完整,更接近個人電腦的執行環境,因此得以直接用Node.js開發擷取盒的程式,降低開發的難度。
在醫院的各種電子化系統中,大多數的應用都需要從各種儀器去擷取數據,作為醫師參考的重要依據;因此我以「行動急診室」中的「資訊擷取盒」為基礎,開發了專門接收儀器資訊的「資訊擷取盒」以及搭配的後台系統。
硬體上同樣採用樹莓派(Raspberry Pi 3b)開發板,以Node.js開發。後台的Server亦使用Node.js開發,提供REST API讓擷取盒上傳數據,以及提供前端網頁查詢。
程式上我設計了可擴充的架構,要介接新的儀器時就可以在原有的程式架構上添加與儀器溝通的邏輯,就可以支援更多不同廠牌的儀器
醫院為病患安排動手術時,是由麻醉科負責填寫許多表單,包含手術前、手術中、手術後都各自有不同的資料需要紀錄;因此麻醉科採購這個系統的目的就是將這些表單電子化。
手術前與術後填寫的表單主要是問卷的形式,因此沿用了「電子化救護紀錄單」所開發的技術,以設定檔形式定義問卷題目,方便在問券內容改版時可以不需修改程式碼。
手術中的表單就更為複雜,可以分成「人工填寫」與「自動擷取」兩大類;人工填寫的資料根據性質的不同,需要搭配個別的填寫介面,例如在手術進行中輸血或輸液時,除了要紀錄輸入的時間和品項(血漿/點滴)等等,還要紀錄輸入的部位。我們開發了圖形化的方式呈現,同時顯示出點滴裝設在病人的身體位置,以及輸入的品項與點滴的容量等資訊,讓使用者更直覺的填寫紀錄。
自動擷取的數據有的直接收集自儀器(例如心跳、血壓),也有的是來自外部的系統(如檢驗報告)。來自儀器的數據便利用了前述之「病患資料收集系統」,搭配「資訊收集盒硬體」連結手術室中的儀器,自動收集數據。以樹莓派建構的收集盒具有低耗電量、尺寸小巧的優點,可以安裝在手術室的儀器旁,不會佔用過多空間;同時樹莓派的成本低廉,比起傳統上使用個人電腦建置的系統具有相當多的優勢。
除了主要的系統之外,我也參與開發了一些子系統來協助與醫院現有的環境整合;例如RFID讀卡機的讀取程式,讓使用者可以用識別證刷卡代替輸入帳號密碼。另外還需要開發中介程式,去跟醫院的其他系統溝通;例如手術排程紀錄就是從外科部門建立,透過中介程式匯入進麻醉科的「手術麻醉紀錄單系統」。而前面提到的手術中表單當中,要從檢驗科去取得例如驗血、細菌培養等檢驗報告時,也需要透過中介程式去醫院現有的檢驗科系統查詢。
當發生重大的災害或是意外,傷患的數量超過單一消防局分隊可以負擔的容量,需要調動多個分隊,甚至需要跨縣市支援的時候,就需要一個系統去整合資訊,以協助資源的調度。
因為加入救援的人員與車輛不一定來自同一個縣市,甚至有民間的救護車會一起加入,因此無法事先對所有的車輛或分隊等造冊。能夠讓參加任務的單位快速的登記車輛代號,免去繁雜的資料登打作業,就變成是一個很重要的需求。我們採用了QR Code的方式,讓陸續抵達的救護車可以直接掃描加入;現場加入後這台救護車就可以接受分派,由上層指揮的單位登記哪些傷患由這台救護車輸送。藉由這個系統,指揮人員可以即使掌握傷患的人數,救護車的列表,以及傷患個別送往哪些醫院等資訊。
技術架構上大量傷患系統與其他的專案相同,都包含主機端的網站,搭配手機/平板的App:但是由於我們採用的各種技術框架陸陸續續都不斷的更新版本,開始有一些技術不再向下相容了。因此為了開始準備將來的專案的升級,我在這個專案中採用了新版的ionic框架,也就改用Angular/TypeScript開發。
一月 2003 - 十月 2013
在智慧型手機問世之前,J2ME是手機上面可下載的遊戲或應用程式所使用的主流技術。當時的功能型手機沒有統一的硬體平台,各家手機製造商各別採用了不同架構的晶片,因此Java的跨平台特性讓軟體開發商可以有一個統一的執行環境,讓開發出來的遊戲與應用程式可以在眾多廠牌的手機上面執行。而要讓這些不同架構的手機執行Java程式,就需要將Java VM(虛擬機器)能夠移植進這些手機平台的程式碼中。
在曜碩科技服務的期間,我參與過多個型號的手機的Java VM的移植工作;每一個移植的案子都包含以下的工作:
Java VM本身是一個函式庫,程式碼是授權自Java的開發商Sun Microsystems,保證了與J2ME相關規格的相容性;公司再根據Java VM運作需要的系統功能,制定了一個與手機平台介接用的API;而Java VM的移植工作就是將VM的函式庫整合進到整支手機的程式專案中,並按照手機平台所提供的軟體功能,撰寫程式碼來對應VM介接API所需要的功能。
例如當使用者按下手機的按鍵,手機平台要把這個事件通知到Java程式,就需要按照該手機平台的設計,撰寫程式接受到按鍵的事件,再呼叫Java VM的介接API把訊息傳進去,讓裡面執行的Java遊戲收到使用者的操作。反之,當Java遊戲要發出音效時,Java遊戲呼叫的是定義在J2ME規格的多媒體相關的標準API,Java VM再呼叫中介層定義的與音效相關的API;移植的工作就是要撰寫程式,在中介層的音效API被呼叫時按照該手機平台的規格,呼叫相對應的音效函式,就實現了Java遊戲在這個手機平台發出音效的功能。
手機平台的程式碼多為C語言撰寫,因此Java VM的移植工作主要也是使用C語言開發。使用到Java語言的時候反倒是在測試移植的正確性時,會撰寫J2ME的應用程式來檢查Java的功能是否如預期。
當年的手機平台本身並未提供使用者自行安裝程式的功能,所有手機選單上的功能都是固定不變的。因此還需要開發一個Java應用程式的管理器,整合進手機的主選單裡,以提供使用者需要的下載、安裝、執行或刪除程式等管理功能。
完成移植之後,還有一個重要的工作就是「相容性測試」,要完整執行原廠提供的整套測試用例,以確保J2ME定義的各種功能都符合規格上定義的行為。只有通過相容性測試,才能夠被原廠授權,可以宣稱與J2ME規格相容。支援測試模式需要連續自動安裝、執行測試,並收集測試結果回報給測試主機,因此在提供給使用者的介面之外,還需要為這個手機平台撰寫測試模式需要的機能,讓測試人員可以自動化的執行測試程序。
藍光光碟片除了影片內容,也有互動性的功能選單讓使用者操作,甚至可以在光碟片中放上Java程式讓使用者操作,提供功能更豐富的互動介面,這代表藍光播放機上面都會搭載Java VM,以執行互動程式。基於手機上的Java VM產品的成功經驗,公司嘗試跨入藍光播放機的Java VM市場;我參與了這個產品的初期研究,參與了以下的開發工作:
在藍光光碟規格中,規定了播放機要支援的Java API(稱之為BD-J),以提供一致的功能讓光碟片的開發商可以確保互動程式可以在任何相容的播放機上正確執行。因此如同手機上的Java VM產品,我們需要為藍光版本的Java VM設計一組中介層,方便將來移植Java VM產品到不同的硬體平台上。
為了驗證BD-J的功能,必須要有一個執行的環境讓Java VM可以實際執行,實際控制影片的播放、快進、跳到下一章節等動作,因此我們開發了一個Linux版本的藍光播放軟體作為「參考實作」;可執行BD-J的互動程式,顯示其選單畫面,並且執行基本的影片播放。
這個參考實作是在Linux上以C++開發,使用DirectFB作為畫面顯示的基礎平台,並利用GStreamer實作影片播放功能。
除了公司核心的Java VM相關產品,我也參與了公司內部系統的導入與開發,以增進工作效率。
為了將開發過程中累積的知識文件化,提供一個容易查詢也方便編輯的知識共享平台,我參與了企業知識平台的導入。選用的是Confluence這個套裝的系統,架設在公司內部的網路。這套系統支援了類似wikipedia的語法,方便員工快速撰寫格式清晰易讀的文件,文件之間也可以很簡單的建立連結,方便互相引用。
隨著公司規模成長,需要有效管理發現的bug,追蹤開發進度,我負責為公司挑選合適的issue tracking系統。最後挑選JIRA的原因主要是其自訂流程、狀態、以及設定通過條件等等客製化空間很大,可以配合團隊的工作習慣定義最適當的處理流程。
由於JIRA的客製化彈性,我也協助公司的管理部門透過自訂流程的方式,以JIRA系統來管理諸如合約簽訂這類在不同階段需要不同主管核准、放行等等需要控管的流程。
當時公司正在導入ISO 9001認證,藉由將事務的流程規則定義在JIRA系統,只要在JIRA系統上面操作就一定會符合規定的流程,每個控制點都由具有權限的人授權,自然就滿足ISO的要求,無需增加人工稽核的負擔。
每個專案開發所花的工時,都被視為公司產品的成本,在會計上必須要正確的紀錄,因此公司自己開發了一個系統專門讓工程師填寫每天在哪個專案上面花費的時間。我參與了這個系統的開發,使用Grails框架搭建網站,後台搭配MySQL資料庫。以這個框架建構的網站符合MVC的架構,並且內建了ORM來以物件導向的方式對資料庫的操作。在學習使用這個框架,以現代化的觀念搭建網站的過程中,我學到很多寶貴的經驗。
除了軟體的產品,公司也試圖跨展到IOT相關的硬體領域。當時選定藍芽模組作為家電自動化的控制核心,在試產的過程中衍生出開發測試機具的需求。我參與了測試機具的控制軟體的開發,利用Arduino開發程式來偵測測試治具的開合。當測試人員把藍芽模組放上治具,並搬動把手固定住模組,測試的接腳便會接上;此時Arduino程式偵測到治具關上,便透過serial port通知電腦上的測試軟體開始執行測試。藉由自動偵測開合,測試人員可以不需操作電腦畫面,只需手動放上模組就可以逐個進行測試,減少操作的不便並減少人工錯誤。
隨後公司推出了一些電玩搖桿的產品,我也參與了搖桿的測試工具開發,利用電腦程式呈現搖桿與按鍵讀取到的數據,讓工人檢查搖桿推到左右上下邊界時是否能讀取到正確的數字,按下搖桿按鈕時是否收到信號等等。
當時公司申請了研發替代役的名額,我曾負責安排課程培訓研發替代役招募到的員工。藉由設計有趣的題目讓新成員練習開發手機上的應用程式,熟悉J2ME的各種功能的API用法,並實際在手機上驗證執行的效果。在他們完成應用程式之後,我們舉辦了公司內部的發表會,讓成員演示自己開發的成果,也增加與各個部門同事交流的機會。其後這些成員加入專案,我負責分配工作,監督他們開發的進度,並指導他們開發上遇到的問題。
三月 2000 - 三月 2002
在2000年代網際網路萌芽的階段,公司一開始是的主要業務是製作內容網站,提供內容吸引流量將來導入網路廣告獲利;我在這間公司最早的工作便是撰寫HTML網頁,協助工讀生大量的產生網頁內容。
後續公司推出「個人網站」的服務,用電話號碼來註冊一個自己專屬的網址,(例如市話028742079,網址便是028742079.88602.com ),這個網址亦附帶個人的網頁。這些功能讓使用者可以放上個人資訊,或是放上商家的聯絡方式作為網路名片的用途,因此網頁不再是預先編輯的靜態文字,而是使用者可以修改的內容。此時我學習動態網頁製作,提供編輯的介面,並陸續增加了一些留言板、寫日記等等的功能。這段期間我見識到網路產業早年的一些發展,也是我作為軟體工程師的起點。
2002 - 2004
1997 - 2002