/images/avatar.png

Take notes of everything I learn

Welcome to my blog with some of my work in progress. I’ve been working on this book idea. You can read some of the chapters below.

Google I/O 2023 : Build more secure apps with Go and Google

Google I/O 2023 : Build more secure apps with Go and Google Google I/O 2023 中有個議題關於 Go 的安全性. Build more secure apps with Go and Google. 在這邊簡單做了一下筆記. What is Software Supply Chain Security 軟體供應鏈安全(Software Supply Chain Security)是指保護和確保軟體開發和分發過程的安全性。軟體供應鏈是指從軟體開發的起點到最終部署和使用的整個過程中所涉及的各個環節和相關方。軟體供應鏈安全的目標是防止或減輕軟體供應鏈中的各種風險和威脅,包括但不限於恶意軟體注入、未經授權的更改、依賴風險、開源軟體漏洞等。 軟體供應鏈安全的關鍵是確保整個供應鏈中的每個環節都具備適當的安全措施和防護措施。這包括進行供應鏈可信度驗證、實施適當的身份驗證和存取控制、進行源代碼和二進制代碼的審查和測試、使用加密技術保護敏感數據、確保第三方組件的可靠性和安全性等等。 軟體供應鏈安全是一個綜合性的問題,需要從整個開發和部署過程的角度進行考慮和管理。這包括軟體開發審計、源代碼管理、依賴管理、風險評估和監控、漏洞管理和修補等方面的工作。只有確保軟體供應鏈的安全性,才能保護軟體系統免受潛在的攻擊和風險。 如果套件的其中一包有問題 就會導致整個系統有問題, 如下圖 How_Go_solve_security_problems Code VS Code IDE Plugin Go:官方提供的Golang插件,提供了語法高亮、代碼完成、導入管理、代碼格式化等功能。 Go Test Explorer:可以在VS Code中運行和管理Golang測試,提供了方便的測試運行和結果查看。 GoLint:用於檢查和提供Go程式碼中的錯誤、風格和規範建議的Lint工具。 GoImports:用於自動處理Go程式碼中的導入項目,可以自動添加和刪除導入語句,保持代碼整潔。 GoDoc:用於在VS Code中查看Golang文檔,可以方便地瀏覽和查詢庫和函數的文檔。 Gopls:官方提供的Language Server Protocol(LSP)插件,提供了強大的代碼分析和建議功能,可以進行智能代碼完成、重構、跳轉定義等操作。 Delve:用於Golang調試的工具,可以在VS Code中啟動和管理調試會話,提供了逐步執行、設置斷點、查看變量等功能。 Dependency Management 在Golang中,可以使用以下幾種方式進行依賴管理: Go Modules:Go Modules是Go語言官方引入的依賴管理系統。它允許在專案中聲明和管理依賴關係,並且能夠自動解析和下載相應的依賴模塊。使用Go Modules可以確保專案的依賴關係的版本一致性,並且方便地進行依賴的更新和管理。 GOPATH 和 go get:在較舊的Golang版本中,使用者可以將專案代碼放在GOPATH目錄中,然後使用"go get"命令從版本控制系統(如Git)中下載依賴。這種方式適用於較簡單的專案或個人開發,但對於較大型的專案或團隊開發,建議使用Go Modules。 第三方工具:還有一些第三方工具可以用於Golang的依賴管理,例如Glide、Dep等。這些工具提供了額外的功能,例如依賴解析、版本管理、依賴鏈可視化等。然而,隨著Go Modules的引入,官方已經提供了強大的依賴管理功能,因此建議優先考慮使用Go Modules。 Build Delve Debugger Delve Debugger 是一個用於 Go 語言的強大、靈活的調試器工具。它提供了許多調試功能,可以幫助開發人員追蹤和修復 Go 程式碼中的錯誤。Delve 可以與各種開發環境和 IDE 配合使用,例如 Visual Studio Code、GoLand、Emacs 等等,並且支援各種平台,包括 Windows、Linux 和 macOS。

UML: Generailzation, Realization, Association, Dependency, Aggregation, Composition

UML: Generailzation, Realization, Association, Dependency, Aggregation, Composition 筆記記錄如何用UML標示物件導向 各種關係的強弱順序為 泛化=實現>組合>聚集>關聯>依賴 箭頭 比較表 範例 綜合比較 來源 : https://www.cnblogs.com/scevecn/archive/2016/07/12/5663369.html 1.聚集與組合 聚集 - 雁群與大雁 組合 - 鳥與翅膀 聚集與組合都是一種結合關係,只是額外具有整體-部分的意涵。 部件的生命周期不同 聚集關係中,整件不會擁有部件的生命周期,所以整件刪除時,部件不會被刪除。再者多個整件可以共用同一個部件。 組合關係中,整件擁有部件的生命周期,所以整件刪除時,部件一定會跟著刪除。而且多個整件不可以同時間共用同一個部件。 聚集關係是"has-a"關係, 組合關係是"contains-a"關係。 2.關聯和聚集 關聯 - 企鵝與氣候 表現在代碼層面,和關聯關係是一致的,只能從語義級別來區分。 關聯和聚集的區別主要在語義上,關聯的兩個對象之間一般是平等的,例如你是我的朋友,聚集則一般不是平等的。 關聯是一種結構化的關係,指一種對象和另一種對象有聯繫。 關聯和聚集是視問題域而定的,例如在關心汽車的領域裡, 輪胎是一定要組合在汽車類中的,因為它離開了汽車就沒有意義了。 但是在賣輪胎的店鋪業務裡,就算輪胎離開了汽車,它也是有意義的,這就可以用聚集了。 3.關聯和依賴 依賴 - 動物與氧氣 關聯關係中,體現的是兩個類、或者類與介面之間語義級別的一種強依賴關係,比如我和我的朋友;這種關係比依賴更強、不存在依賴關係的偶然性、關係也不是臨時性的,一般是長期性的,而且雙方的關係一般是平等的。 依賴關係中,可以簡單的理解,就是一個類A使用到了另一個類B,而這種使用關係是具有偶然性的、臨時性的、非常弱的,但是B類的變化會影響到A。 4.綜合比較 這幾種關係都是語義級別的,所以從代碼層面並不能完全區分各種關係;但總的來說,後幾種關係所表現的強弱程度依次為: 泛化=實現>組合>聚集>關聯>依賴 Reference https://www.cnblogs.com/scevecn/archive/2016/07/12/5663369.html https://www.twblogs.net/a/5c1200cabd9eee5e4183c38d

Install GitLab Runner on Windows

Install GitLab Runner on Windows 來源: https://docs.gitlab.com/runner/install/windows.html Windows 建立 Runner 的 folder , ex.: C:\GitLab-Runner 下載執行檔 64-bit or 32-bit . You can download a binary for every available version as described in Bleeding Edge - download any other tagged release. 可以將下載的檔案改名成 gitlab-runner-windows-amd64.exe –> gitlab-runner.exe 安裝GitLab Runner Install GitLab Runner as a service and start it. You can either run the service using the Built-in System Account (recommended) or using a user account.

[Note] Go Optimizations101 : Value Copy Costs and Samll-size Type Values

[Note] Go Optimizations101 : Value Copy Costs and Samll-size Type Values Go Optimizations101 筆記. 複製值的成本大致與值的大小成正比。 實際上,CPU 緩存、CPU 指令和編譯器優化也可能影響價值複製成本。 為了獲得較高的代碼執行性能,如果可能的話,我們應該盡量避免在 copying a large quantity of large-size values in a loop. copying very-large-size arrays and structs. Copy 9 elements vs 10 in Array/Struct Some types in Go belong to small-size types. Copying their values is specially optimized by the official standard Go compiler so that the copy cost is always small. But what are small-size types?

Set up zsh command line in MacOS

Set up zsh command line in MacOS ZSH https://github.com/ohmyzsh/ohmyzsh 安裝 oh-my-zsh 安裝 zsh theme: powerlevel9k 設定 powerlevel9k 1. 安裝 iTerm2 1 2 3 4 # 如果你從來沒有用過 brew cask 的話需要先跑這行 brew tap caskroom/cask # 安裝 iTerm2 brew cask instal iterm2 2. 修改 iTerm2 的 color scheme 將 Report Terminal Type 設為 xterm-256color, 才有顏色 設定路徑:Preferences > Profiles > Colors > Color Presets 內建不是很好看可以到 mbadolato/iTerm2-Color-Schemes clone repo. 然後到此設定選 import 到 iTerm2 Status Bar Component https://iterm2.

mTLS in Go

mTLS in Go https://venilnoronha.io/a-step-by-step-guide-to-mtls-in-go mTLS是指在服務器端和客戶端之間使用雙向加密通道。如今,mTLS是確保雲原生應用程序中微服務之間的通信安全的首選協議。 What is mutual TLS (mTLS)? https://www.cloudflare.com/zh-tw/learning/access-management/what-is-mutual-tls/ Mutual TLS,簡稱mTLS,是一種相互認證的方法(mutual authentication)。 mTLS 通過驗證他們都擁有正確的私鑰來確保網絡連接的每一端的各方都是他們聲稱的身份。它們各自的 TLS 證書(TLS certificates)中的信息提供了額外的驗證。 mTLS 通常用於零信任(Zero Trust)安全框架,以驗證組織內的用戶、設備和服務器。它還可以幫助保持 API 的安全。 零信任意味著默認情況下不信任任何用戶、設備或網絡流量,這種方法有助於消除許多安全​​漏洞。 原文 : https://www.cloudflare.com/zh-tw/learning/access-management/what-is-mutual-tls/ Mutual TLS, or mTLS for short, is a method for mutual authentication. mTLS ensures that the parties at each end of a network connection are who they claim to be by verifying that they both have the correct private key. The information within their respective TLS certificates provides additional verification.