2017年1月25日 星期三

台大觀察與心得(三):大一暑假

這篇主要是描述大一下學期到暑假期間的心路歷程。

約莫大一下學期,我還在大氣系,寒假時有當志工,幫林博雄教授做觀測。期間認識石恩,石恩學物理的,聊得挺投機。後來林博雄需要找學生幫忙寫軟體,石恩那時在教授那邊工作,於是石恩介紹我給教授,我一直都有在接觸程式,那時的我程度真的只是比一般人好一點。不過不管,勇於接受挑戰才能更上一層樓。那時候稍微覺得對程式編寫沒問題。這又要往回說。

高中時我有寫 C++,那時有點喜歡資訊競賽的樂趣,不過後來覺得沒天分就放棄了。學測後有做一個科展,用 Python 做模擬,也是自己做好玩的。現在回來看,那段期間的程式能力真的不怎樣。大一寒假左右,指導我高三做科展的辜鉅璋學長的公衛系教授要找學生做軟體,學長問我有沒有興趣,有興趣的話他會帶我入門,有人願意教當然太好了!大一下就跟學長重新練了程式能力,是從網頁技術開始練起,主要還是著重在 JavaScript 學習上。

後來公衛系那邊不了了之,於是我暑假開始加進大氣系林博雄教授 COOK 團隊,整個大一暑假除了經過兩周集思論壇,剩下時間都在實驗室打程式。教授一開始交給我的任務是做探空氣球的視覺化軟體,由於我先前都在練網頁,所以就採用網頁的方式開發。網頁前端只能呈現數據,若是要處理檔案就必須有後端,所以必須要建立一個 local server,那時候聽到 Node.js 很紅,且也是 JavaScript 於是就選 Node.js了!

實際開始做了之後才發現我會的都是皮毛,根本做不了一個專案。那時我只學會了一點物件導向的概念,以及知道如何使用 D3.js 而已。於是開始讀一堆文獻,學如何建構前端與後端。前端比較容易,套用 Bootstrap 很容易把版面弄好,一些邏輯也只是 JavaScript 操作而已。那時候一開始卡最久的是怎麼建立後端,Node.js 建立 Server 後來採用最多人用的 Express,不久也知道怎麼呼叫 API 了,卡在上傳檔案,因為探空氣球的數據檔要先上傳給後端做數據處理,再傳回前端。如何寫出可以上傳檔案的 code,也是花了不少時間,後來終於找到可以用的範本。

此外教授希望氣球視覺化可以有 3D 的呈現,後來我找到 Cesium.js 這套開源的 3D 地球模擬程式庫,更棒的是他可以用在前端。總之花了一個月,把 3D 路徑圖、2D 路徑圖、方位圖、協溫圖、X-Y各種參數的作圖都完成了。這份專案是我實戰的第一份作品,教授要求的功能我都做到了,教授本來沒有要我畫協溫圖,但大氣科學中協溫圖太重要了,要是沒畫出來這份專案的完成度只有一半,於是我後來又花了不少時間弄出協溫圖。協溫圖是採用另一個科學家的開源碼,但是他讀取的數格式我一直無法理解,但網路上又只有這唯一的開源碼,後來去翻 commit 的紀錄,發現他在很久以前採用的數據格式我看得懂,於是就拿他古老的版本,終於把協溫圖的部分搞定了!

在完成第一份專案之後,我對於前端後端有比較了解了,但其實仍然只是個菜鳥。在我作第一份專案的時候,實驗室有另外一個外國短期來台的學生,負責開發 APP,這是一個微氣象觀測的計畫,教授買了一堆可以插在手機上的氣象小感應器,可以用手機來當作小型氣象站,然後教授將感應器發送給志工,志工就可以拿者手機來測量大氣數據,而這個操作需要一個 APP 作輔助,那個學生就是在開發 APP

我完成第一專案的時候,那個外國學生剛好也要回國了,於是 APP 專案就到我手上。APP 是直接採用 Hybrid App,就是由 IOS  Android 的框架底,在上面用網頁開發技術。這樣開發的好處是,我學期的網頁技術又可以直接拿來開發 APP,不用再學怎樣用 Java Swift 開發 APP

這個專案到我手上之後,我幾乎把原本的程式改寫了 80%,外加後來加上的種種功能,原本的 code 大概殘留的不多。這樣說起來其實對那個同學很抱歉,他花了一個月時間作的東西,後來也被我改掉得差不多。這樣說起來,還不如一開始給我直接作,會導致這樣的原因是,我們開發軟體的模式沒有一個標準的模式,大家各做各的,只要接手就會很棘手,也很難維護,接手者只好把不好處理的部分都砍掉重練。在外面商業公司開發軟體都會遵照一定的規範,確保軟體可維護,也容易擴展。不過總之我們那時候沒這觀念,且我那時候根本來不知道外界都是怎麼做的。

實作 APP 的過程跟開發網站很像,因為採用 Hybrid App 的緣故,不過有些功能還是只有手機才辦的到,比方說手機的羅盤、藍芽等等裝置。此外 APP 也會需要呼叫 API,這次我就是用實驗室的 Server,過程中學會操作 MySQLPHPPHP 後來有用來作氣象資訊的爬蟲,還有我也用資料庫作使用者帳號的實現。

開發到快十月,APP終於上線了,後來陸續一直加新功能,但難度都不高,主要都是複雜或麻煩。比方說一開始我沒有作多語言系統,後來要加入可以切換語言就真的很麻煩。第二個專案是作 APP,透過這個專案我更熟悉開發網頁的方式,同時也對後端操作更加了解,此外也學會如何建立一個手機 APP。最後就是把 APP 放到 Google Play 上,需要辦開發者帳號,還要付一筆錢辦帳號。終於 APP 也告一段落,事實上 APP 一直都有在更新,因為教授一直有想加入的功能,所以到現在都還沒真正的結束這個專案。

大一暑假就個都在寫程式中度過了,我同學們可是在環島呢!不過這是一個很重要的時期,我軟體開發的最初經驗都在暑假中培養,對我後來很有幫助。當然也有壞處啦,我近視好像加深了QQ

探空氣球 Github
螢火蟲微氣象網 Github
螢火蟲微氣象網 APP

歡迎大家 Fork ~

沒有留言:

張貼留言