下班精進,第一本資工原文書
乍暖還寒的三月天
在告別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已經滿清楚的了
但是老師還是建議買原文書
即使是舊版的也沒關係
因為核心概念就是那樣沒有變
書的內容也改動的不多
人生中第一本資工的原文書
就獻給作業系統了
拆開包裝
摸到封皮的那一剎那
真的有觸電的開心感覺
光是抱著就感覺coding實力大增
(像是什麼增幅法典)
於是下班後
如果沒有寫加班專案
就是在看這個開放式課程
畢竟一學期的課
全部看完還是滿花時間的
但真的是收穫滿滿
從最基礎的process 和 program 的分別
process如何透過system call
來請OS幫忙操作硬體資源
還有基本的記憶體管理
paging和segment的概念
也是上到這一章
才知道以前看到的分頁檔以及虛擬記憶體
現在才知道是怎麼一回事
以及context switch的概念
也就是導致在多執行緒程式中
資料會不一致的主因
並且了解各種process scheduling的演算法
還有各種解synchronized以及Dead lock的方法
看著前人們的智慧結晶
真的有種心曠神怡的感覺
同時也感受到自己所學
還在非常的表面頂層
要學的東西還非常的多