想起程式

人是一根會思考的蘆葦

Apple CryptoKit 學習筆記

在做生物辨識的功能時遇到的學習筆記

生物辨識主要的目標是取代像是 OTP,可以做一個可信任的身份認證。 服務的流程大致上是: APP 先產生 private/public key APP 將 public key 傳到 BE 當要使用身份認證時 APP 打 API 取得一個 BE 產生的 nonce-1 APP 產生一個 nonce-2 APP 用 nonce-1 + nonce-2 + 講好的規則 用 private ......

Flutter 學習筆記

筆記,起步走

稍微看 Flutter 有一段時間了。 也蠻認同一個想法, 雖然跨平台語言不能解決平台上實作細節的差異, 但就考慮純粹「功能邏輯」或「商業邏輯」的共用, 似乎就有蠻大的效益! 原本想要直接研究 iOS 和 Flutter 之間的轉接。 但發現好像不先搞懂 Flutter 的設計邏輯,確實寫作起來有點綁手綁腳。 安裝 這部分我忘了紀錄,但目前應該在網路上都還容易找到文章。 開專案 同上。(......

重構與泛型 Generic

Generic 在重構上能幫什麼忙呢?

2020 年初我在一個專案中,要做一件麻煩的事情。 需求是 要把原本一頁式的頁面 (Single UINavigationController) 換成 TabBarController 的樣式。 看似平凡無奇的描述中,因為 Legacy code 和 跨區域開發者 的組成,產生了不少惡魔。但是也因此,讓我對於 Generic 有了新解。 表象問題 這種「頁面架構」的需求變換,通常伴隨著一......

重啟

一年後的適應,重新尋找自我的時間

看到一年的文章,還被我放在 draft 中,也就順手想把他 publish 了。 在 ShopBack 一年來,有許多新的體驗,工作也比較上手了; 在小孩與家人的時間分配上,可能因為他們長大了吧,也有獲得比較好的平衡。 所以,看看每天是不是可以在抽點時間,再多紀錄分享有趣的程式寫作(笑) 想到有想分享的題目: 重構實務!當遇到一個隕石般的坑洞 溝通無用!當有人可以在 GitHub 上 co......

就在今天,我將成為了兩天的無業人士

如何描述這五年的旅程? 因緣際會下學習了 iOS app 的撰寫,輾轉進入了這家台灣新創的龍頭! 學習了對於產品、服務的創造,體驗了人與人相處的歡樂與心酸,交織成這 5 年的血淚。 工作 和大家一起工作的時光很快樂,當產品上架,當看到使用者大量下載,當看到 IAP、AD 的錢開始往上攀升,努力終於獲得了些許回報。 1y: 最早的使用者體驗 God feeling 真的,以現在的角度看......

11. DIP: 依賴反向原則

反著走,是為了走更長遠的路

DIP: 依賴反向原則 最靈活的系統是「原始碼的依賴關係只涉及抽象不涉及具體」的那些系統 最理想,是沒有具體的東西該被依賴,像是使用 use, import, include 之類的,只有抽象的介面被包含進來。但是如果「全」照這個想法去做,是不切實際的,因為軟體系統必須依賴許多具體的機制,例如 Swift 中的 String, Int … 試圖將它變成抽象的,是不切實際的,也是不可避免的......

10. 介面隔離原則

不要在包包內放你不需要的東西

介面隔離原則 ISP (Interface Segregation Principle) 假設 User1 只用了 op1()、User2 只用了 op2()、User3 只用了 op3() 在目前這樣的依賴且是靜態語言的狀況下,User1 並不使用 op2() & op3(),但是在原始碼上卻依賴的他們。所以當修改了 op2() 時,仍然需要重新編譯 User1,儘管 op1()......

9. LSP: Liskov 替換原則

替身!影分身之術!

LSP: Liskov 替換原則 在 1988 年, Brabara Liskov 寫下子型態的定義: 若對型態 S 的每一個物件 O1,都存在一個型態為 T 的物件 O2,使得在所有針對 T 編寫的程式 P 中,用 O1 替換 O2 後,程式 P 的行為功能不變,則 S 是 T 的子型態。 指導繼承的使用 此設計符合 LSP,要計算授權費用時,不會以任何方式依賴於他使用的兩個子型態(......

創業者?自由工作者!

創業者?自由工作者! 早上看到 aPo 老闆的文章,不禁讓我反思一些事情。 前幾天跟一個朋友聊,其中他問了我一個問題 「你喜歡 Team work 還是自己工作?」他問 「我應該會選擇 Team work 吧!團隊能做的事情會比較多,比較大,可以有不同觀感或面向…」我這樣回答著 其實我沒有覺得回答得很好,應該說,我沒有想過這個問題,當下就直接依照目前的狀況講了出來。 直到我看到了破老闆的心得......

8. OCP 開放-封閉原則

一個軟體製品應該對於擴展是開放的,但對於修改是封閉的

OCP: 開放-封閉原則 軟體的行為應該是可以擴展的,而且在擴充功能的同時,是沒有必要修改原來的地方 簡單的想法是,當增加新功能時, git diff 不會有或僅一兩行的「減少」行數,剩下都是增加行數 一個構想實驗 試想一下,有一個財務系統,要在網頁上顯示資料,而後來利益相關者需要此系統也能將資訊印出來做報告。顯然增加了新的功能,那需要修改修改多少舊程式碼呢? 首先透過應用 SRP,可以導......