乍暖還寒的三月天

在告別app瘋狂閃退的日子後

開發上算是比較上手了

但是專案的維運還是會比較花時間

其中比較麻煩的問題

就是App沒有更新版本

卻突然壞掉閃退

必須要查出原因

通常這種時候

大部分是api回來的資料有誤

所以就必須先猜一下是哪一道壞掉

不過公司的app在進入主畫面前

通常都必須要在登入時

拿到合法的token

才能呼叫之後的其他api

以前的作法都是用postman

把帳號密碼拿到的token

複製到其他request

再一道一道的測試每隻api

直到同事分享postman的其他功能後

才知道這樣做

根本就是在糟蹋這隻程式阿!

postman的功能還滿強大的

只是以前我都沒有認真去研究

像是最基本的建立環境

只要設定好環境變數

就可以讓同一道方法

一鍵切換打向正式或是測試機

除此之外

api回來之後

還可以用JavaScript

把參數存回環境變數

方便其他的api使用

所以就不用再把token的值

複製貼上到其他request

最後一個runner的功能

可以一次跑完所有api

加上簡單的測試

檢查回傳代碼或是回傳時間

來確認服務是否有問題

以前事倍功半的檢查方法

現在只要一顆按鈕就可以完成拉

(當然還是要先把app的api建立到postman裡面)

工欲善其事,必先利其器

以前沒有好好利用postman

真的是非常可惜

不過還好最近維運的需求沒有很多

所以可以集中時間寫翻原生的案子

也順利在月底前完成

並且上架更版

由於翻寫原生的感覺真的很不錯

於是我就向主管提出請求

用下班時間

翻寫另外一個Xamarin的專案

新專案比較麻煩的是SignalR

SignalR是微軟的一個套件

簡單的來說就是把WebSocket包上一層

SignalR裡面包含各種Hub

Hub裡面會定義發送和接送資料的方法

雖然打出去的網址不用指定port

不過實際上還是WebSocket

以前接及時資料

大部份是long polling

或是原生的WebSocket

SignalR是第一次碰到

所以接資料的時候

就花了滿長的時間

一開始進行測試

發現怎麼接都沒東西回來

還會直接在log視窗跑出例外訊息

檢查半天後

才發現是Hub的方法名稱打錯

誤把「發出」訊息的方法名稱

當作「接收」訊息的方法名稱

改正這個錯誤後

不再跑出例外

但是丟出去的請求卻是石沉大海

發出後就音訊全無

server沒有任何回應

一樣檢查半天

最後才又發現是流程上的問題

當初的server設計

是要client做完身分驗證後

才會吐資料給你

否則是不會回傳任何資料的

想說bug應該就到此為止了

又沒想到身分驗證

出來的結果永遠是False

俗話說萬事起頭難

但真沒想到會這麼一波三折

不過都已經接下這個案子

總不能遇到困難就不做了

冷靜下來思考

為什麼身分驗證會錯誤

最後才發現是向server驗證的參數帶錯了

帶到其他的AappID

所以當然就auth fail

當改回正確的AppID

驗證身分成功

請求資料收到訊息

看到log跑出資料時

真的是莫名感動

雖然現在回頭看都是小問題

但是當下還是滿緊張的

照目前的進度

大概還要再一兩個月

才能完成

不過還好這個專案比較不趕

比較有時間思考架構

最近的下班的生活

除了寫這個專案

就是看書啦

還記得面試的時候

主管問說未來三年有什麼打算

那時候的我說

想趁剛轉職的這幾年

補上資工系學生的基礎知識

現在對於工作比較上手了

下班後就比較有時間找書看

之前看過C和資料結構

就想說找看看有沒有其他科目

後來偶然在圖書館發現一本書

「作業系統」

查了一下資工系的課綱

這也是資工系的必修

就開始讀起來

一開始的章節還滿有趣的

從最早打卡式的batch

到終端機的time sharing的系統

再演進到現代的個人電腦

或是手持裝置

說明電腦的階層架構

解釋OS的重要性以及它的任務是什麼

不過到了後面幾章

開始談到user mode,kenel mode

以及interrupt還有system call

就開始看不懂了

本來以為是自己笨

但是看了三四次還是不懂在幹嘛

在圖書館也找不到相關的書籍

只好上網找看看有沒有相關的資源

最後意外在網路上看到這個

清華大學開放式課程

原汁原味講解作業系統

使用傳說中的恐龍本

課程是用中文授課

但是投影片全部都是英文

比起中文翻譯

可以更深入這些名詞的意思

加上老師談笑風生(?)的講解

才了解原來書上的內容是這個意思

但更重要的是

作業系統為什麼要這樣設計

這些設計是要解決什麼問題

是從系統角度出發還是使用者的角度出發

都講得鞭辟入理

雖然上課錄影配上PPT已經滿清楚的了

但是老師還是建議買原文書

即使是舊版的也沒關係

因為核心概念就是那樣沒有變

書的內容也改動的不多

人生中第一本資工的原文書

就獻給作業系統了

P_20190415_214421.jpg

拆開包裝

摸到封皮的那一剎那

真的有觸電的開心感覺

光是抱著就感覺coding實力大增

(像是什麼增幅法典)

於是下班後

如果沒有寫加班專案

就是在看這個開放式課程

畢竟一學期的課

全部看完還是滿花時間的

但真的是收穫滿滿

從最基礎的process 和 program 的分別

process如何透過system call

來請OS幫忙操作硬體資源

還有基本的記憶體管理

paging和segment的概念

也是上到這一章

才知道以前看到的分頁檔以及虛擬記憶體

現在才知道是怎麼一回事

以及context switch的概念

也就是導致在多執行緒程式中

資料會不一致的主因

並且了解各種process scheduling的演算法

還有各種解synchronized以及Dead lock的方法

看著前人們的智慧結晶

真的有種心曠神怡的感覺

同時也感受到自己所學

還在非常的表面頂層

要學的東西還非常的多