實際上手體驗 Golang DI Framework 之 Uber Dig
Uber/dig uber/dig 是一套基於 reflection 的 Dependency Injection Framework 意思是我們不需要手動指定依賴,而是透過 reflection 來幫我們自動找出依賴,依靠框架管理
Uber/dig uber/dig 是一套基於 reflection 的 Dependency Injection Framework 意思是我們不需要手動指定依賴,而是透過 reflection 來幫我們自動找出依賴,依靠框架管理
Preface 這個議題我覺的是軟體工程師的必經之路啦 本篇文章基本上就是紀錄我目前學到的一些東西以及方法
Preface 1 2 3 4 5 6 7 8 9 10 (() => { setTimeout(() => { console.log(1) }) Promise.resolve().then(() => { console.log(2) }) consol...
Polling polling 輪詢是最為簡單的一種作法 其核心概念為定時的發出 request 確認
Preface ref: Damn you floating point binary addition, you’ve caused me tons of bugs over the years
Preface 前陣子為了其他系列的部落格文章的 lab,在練習一個簡單的 REST-ful API 的專案 途中遇到不少的困難,想說寫起來紀錄一下
Preface 對於一個無時無刻都想寫 code 的工程師來說 如果能用手機,平板等等的設備開發,豈不美哉
Preface 在了解 Channel 之前,我們需要先了解一些基本的概念 如果你已經很熟悉這些概念,可以直接跳到 Introduction to Golang Channel 部分
Process, Thread and Coroutine Process Process 是跑起來的 Program, 它擁有自己的 memory space, system resources 以及 system state 在系統開機之初,init process(pid 1) 被建立之後,就可以透過 fo...
Multi System 多系統對於一般非資訊專業人士而言,基本上是一個不需要了解的知識 但是身為一個資訊專業人士,在某些情況下你可能會需要多開系統,比如說
PGP, OpenPGP and GPG - What’s The Difference Pretty Good Privacy - PGP 是 Philip R. Zimmermann 在 1991 年創造的對稱式加密法,其目的正是為了能夠在 BBS 上安全的儲存訊息以及檔案所創造的 之後在 1997 年,IE...
What is GitHub Pages GitHub 提供了一個免費的服務 - Github Pages,可以讓開發者建立屬於自己的專屬部落格網站 沒錯 是完全免費!
Preface 要如何提高系統的高可用性以及高效能,最常想到的應該就是分散式系統了 基本上你可以發現,不論是哪一段的系統架構,他們通常都會是使用分散式架構以達到高可用性
Brief Large Object Storage System 檔案儲存在現今電腦服務中一直扮演著相當重要的角色 舉例來說,你的大頭貼會需要一個地方儲存 我記得我在學校學習的時候一般來說有兩種做法 上傳到伺服器當中的檔案系統內做儲存,資料庫內寫入存放路徑即可 直接以二進位的方式存入資料庫中
Preface 雖然說只要有錢都好辦事,但多數情況下我們都是沒錢的 因此學習如何最佳化是相對重要的事情 那麼有哪些是我們可以透過內部盡量去優化的呢?
Unstable Network 在分散式系統中,每個節點多為使用網路互相連接起來的 然而網路實際上是不可靠的
Preface 資料搬遷,在現代軟體服務當中屬於較為常見的一種需求 不論是單純的機器之間的搬資料抑或者是因應商業邏輯而需要做的資料搬遷 都是屬於 Data Migration
Preface message queue 顧名思義他是一個 queue,用來存放 message 的 你可以用 Inter-Process Communication 的概念去思考它 基本上就是提供一個空間或是,讓兩個 process 進行通訊
Introduction to Fuzzy Search 就是字串匹配,只不過它即使是沒有完全的把字拼對,也可以找的到
Preface 作為用了 MySQL 五年之久的我,原本以為同為 SQL 在語法上的差異不會影響到太多 實際上手之後,發現還是有點差異
Distributed System Scale Out(Horizontal Scale) 的概念是利用多台電腦組成一個龐大的網路,進行運算提供服務 這個網路,稱為 cluster
Pagination Mechanism 相信一般做開發的,尤其是網頁相關 當資料量太大的時候,我們多半會選擇將資料切成多個部份傳輸 也就是分頁的機制
Speed up Search In Large Data
Introduction to SQL N + 1 Problem 在使用 ORM 套件下,開發程式的過程中 你可能會不小心踩到所謂的 SQL N + 1 問題 假設你在開發一個社群網站 使用者可以發佈文章 現在你要實作一個功能 是要撈出所有符合條件的文章以及作者資訊(假設你想知道點讚數超過 10 的所有文章) ...
Transaction 根據 google translate 的結果我們可以得知,transaction 就是交易 那麼 交易 本身需要有什麼樣的特性呢?
Cache Cache 快取是在計算機當中最重要的概念 作為當今最有效加速的手段之一,其重要程度在作業系統、網頁伺服器以及資料庫當中都可以看到他的身影
Define Observable System 服務其實不太可能是完全穩定的,總會有一些問題發生 不論是 application 自身的 bug 還是因為 cloud provider 主機異常掉線 這些問題都會對服務造成影響
Preface 之前我們看過可以使用 Kueue 這類工具達成某種程度的控制,但是它比較是資源傾向的 像是 docker 有提供 $ docker pause 之類的指令,能夠允許你做到 pause and resume 的操作 更進階的需求就會是控制 container 的執行順序
Extend Kubernetes Resource Kubernetes 有許多內建的 Resource,像是 Pod, Deployment, Service 等等 但開發者的需求總是不斷的增加,有時候內建的 Resource 並不能滿足商業需求 假設你需要表達一個很複雜的資源,現有的其實寫起來會很複雜
Kubernetes Application Testing 軟體工程裡面測試應用程式是一個很重要的環節,開發 Cloud Native 應用程式的時候也一樣 常見的就是使用 Kubernetes 進行開發,建立 Pod 跑東西之類的 所以很明顯這種邏輯也是需要進行測試覆蓋的
Introduction to Kueue 你可以在 Kubernetes 裡面塞入任一數量的 job,但這只是理論上 實務上會因為硬體資源的限制,你只可以執行有限數量的 job Kueue 這個工具可以根據這些 限制,允許有限數量的 job 同時執行 它可以做到一些基礎的排程機制,如 Job 要不要等待,...
Kubernetes Object Kubernetes object 並不是指 Pod 或者是 Deployment 這種 Resource 複習一下,Resource 是所有你可以透過 Kubernetes 使用的物件(操作 kubectl 或Kubernetes API) 而 object 是這些 Reso...
Introduction to Helm Controller 如果你是使用 Helm chart 來管理你的 Kubernetes 資源 一個常見的需求會是,你可能會需要更新你的 chart 不管是 image version 還是一些設定檔的更新
Abstraction over Container Pod 其實是為了更好的管理 Container 而生的一層抽象層 所以他同時也是最小的部署單位(注意到不是 Container)
Development Obstacles in Kubernetes 不知道你有沒有這種感覺,Kubernetes 對本地開發來說真的挺不友善的(至少以我來說) 除了你要架設一個本地的 Kubernetes Cluster 之外,還要不斷地手動更新 image
Preface 現今網頁服務由於 container 的興起,大幅度的改變了整個 web 的生態系,一切都圍繞著 container 雖然說 container 改變了開發者的工作流程,使得大部分得以簡化,但是仍有一些問題依然存在
Brief Permission Management 權限管理在現今的網頁系統中是個很重要的議題 拿你我都熟悉的社群軟體來說,其實你無意中已經接觸過權限管理了
Introduction to Logging log 對於現今電腦系統來說是一個至關重要的資訊檔案 救援回復以及修 bug 其實都離不開 log
Preface 我最初遇到 CORS 的問題是在我的個人部落格上面,因為我引用了其他網站的圖片 某一天我突然發現圖片跑不出來了? 思來想去我應該也沒有改到程式碼才對 後來看了一下發現好像是 CORS 的問題 所以今天要來講講 CORS
Authorization 開發 API 的過程當中,我們提供了很多功能,其中可能包含較為隱私的功能(比如說,修改密碼,查詢個人資料等等的) 這個時候,你不會希望別人隨便修改你的密碼對吧? 所以就必須要驗證你的身份
RPC RPC(Remote Procedure Call) 是一種通信協定, 它能夠 允許本機電腦程式呼叫遠端電腦程式 聽起來好像還好? 重點是它能夠以 類似於呼叫本地 function 般輕鬆(稱為 location transparency)
What is API API - Application Programming Interface 是一種 介面,他高度抽象化了背後的實作原理 使得呼叫端可以透過簡單的呼叫達成一件相對複雜的事情
Preface 動態規劃一直是我覺的不容易掌握的演算法技巧,它不像其他演算法技巧有一個固定的模式,而是一種思維方式 題目的靈活性高,不太容易掌握
Preface 還記得之前上演算法的時候,最看不懂的東西就是貪婪法了 不過其實他的核心概念很簡單,寫起來也簡單 趁著還記得細節的時候,把它紀錄起來
Algorithm Brainstorming 直接看題目比較快,LeetCode 93. Restore IP Addresses 根據題目要求,給定一個只有數字的字串,找出所有合法的 ip address 的組合
Preface 千言萬語都比不上一個真實的範例
Binary Indexed Tree 又名 Fenwick Tree, 是一種特殊資料結構,適用於需要大範圍的紀錄更新資料 像是下圖,假設我想要知道,達到 20% 採購率有哪些國家,達到 50% 的又有哪些 一般的作法是我可能開一個 map 去紀錄對吧 看起來會像以下這樣
Subarray Definition subarray 為一個 array 的連續子集合 subarray 不可為空,subarray sum 則為這個子陣列的和
Preface 在 DevOps - 從 GitHub Actions 初探 CI/CD | Shawn Hsu 裡面有提到,你可以使用自架的 local runner 執行你的 GitHub Action 原因不外乎是因為 private repo 沒辦法免費的使用 GitHub 提供的 runner 所以你可...
Infrastructure 當軟體開發完成之後,Infra 對於整體運作來說是很重要的 沒有基礎設施,如網路,電腦以及儲存空間,我們將沒辦法提供服務
Introduction to Integration Test 光是擁有 unit test,其實是不夠的 因為 unit test 測試的範圍只有 function 本身 跨 function 之間的整合,是沒有涵蓋到的
Introduction to Testing 在軟體開發的過程當中,QA 測試其實是很重要的一個環節 有了 QA 驗證,可以確保程式不會因為不當的輸入而產生不如預期的結果
CI/CD Continuous Integration - CI 是現今軟體開發流程當中的一種 best practice 開發的過程當中,我們有可能在實作中不小心改壞了一個東西,又剛好 QA 沒有測出來直上 production 這時候出問題就比較麻煩了對吧?
Preface 加密貨幣涉及了很多密碼學相關的知識 其中錢包這裡佔了滿多部份的 這篇文章會盡量的用簡單的方式來說明 跟我一起看看吧
How does Blockchain Works 複習一下 blockchain 是如何運作的 blockchain 是由多個節點所組成的分散式計算網路 每個節點都嚴格遵循共識機制,共同維護區塊鏈上的資料
Why do we need to Scale Blockchain Ethereum blockchain 仰賴著共識機制,同時也深受共識機制帶來的效能影響 由於要求所有 node 都執行計算 transaction 正確性,導致同一筆交易會被驗算數次 進而消耗整體網路資源
Introduction to Blockchain Blockchain 技術的概念,始於 2009 年 由 Satoshi Nakamoto 建立的 Bitcoin 根據 Bitcoin 白皮書 中所述 A purely peer-to-peer version of electronic cash w...
Introduction to Hardhat ref: NomicFoundation/hardhat
Recall the Basics 1.3 Getting Started - What is Git?
Introduce to Git Reset 開發者最喜歡 Git 的其中一個很大的原因就是即使你做錯了 仍然可以重來 使用 git reset 可以幾乎拯救所有 “不小心的操作”(只要 .git 資料夾還存在的情況下)
Introduce to Git Rebase Rebase 顧名思義,即更改目前的 base(分支基礎) rebase 在很多地方都很有用,包含像是更改 commit message, re-order commits, squash commits 以及 pull base branch 的 changes
What Is Git Hook 在開發過程當中,我們常常會遇到需要手動進行測試以及 format 程式碼等等的事情,那就會讓我思考 有沒有一種自動化的工具可以執行這些任務呢?
Why Do we Need to Minimize Image Image 的大小對開發本身來說有很大的影響嗎? 考慮到要 deploy, pull image 這件事情來說,如果遇到網路速度慢的情況下 等個幾分鐘對於開發者來說真的會大幅度的拖慢進度 因此,如果 image 大小能維持在幾 MB, 是在好不過得...
Virtualization Docker 身為一個容器化技術的代表,與傳統 virtual machine 不同 Docker 擁有更快的啟動速度、對系統資源的極低要求以及輕量化的優點,既然同為 虛擬化技術,那麼他與傳統的 virtual machine 又有甚麼不一樣的地方呢?
容器化技術 隨著 microservice 的發展,容器化技術在近幾年受到了廣大的歡迎 相較於傳統的虛擬機器(virtual machine), container 擁有著輕量,快速等特性 隨即受到了開發者們的喜愛 而其中最廣為人知的便是 Docker 本文並不會贅述 Docker 工具的使用,我們將以其探討 c...
本篇文章是備份自我之前上 Jserv 老師的課程作業內容 並加以修改排版內容 完整內容在 2021q1 Homework1 (quiz1)
Introduce to namespaces namespaces 是 linux kernel 的一種資源隔離機制,用以防止不同 process 看到不同資源
Hardware and System Clock Linux 的世界裡,有兩種時鐘,他們分別為
DNS - Domain Name System Domain Name System 是一個分散式的系統,用於紀錄網域名稱和 IP 位址之間的關聯 基本上現今我們在瀏覽網站的時候,多半是使用所謂的 domain name 上網的 比方說 google.com, facebook.com
Introduction 在 1989 年,Tim Berners-Lee 提出了跨網路交換超文本資料的初始架構 它包含了以下 超文本資料: HTML 傳輸協議: HTTP Client 以及 Server 直到 1990, 以上規範大致上都完成了 1991 年世界上第一台 server 正式開始啟...
Introduction OSI 七層模型是由 國際電信聯盟電信標準化部門 - ITU-T 與 國際標準組織 - ISO 於 1989 年制定的 開放式系統互聯模型 標準的部份目前我有看到兩個版本 ISO/IEC 7498 - 1989 第一版 ISO/IEC 7498 - 1994 第二版
Distributed Transaction with 2PC 在 microservices 的架構下,分散式交易是必須面對的問題 我們學過,2PC(Two-Phase Commit) 是其中一種解決方式 透過一個中心化的協調者(coordinator)與所有其他參與交易的服務進行溝通與決策
Benchmark Time Elapsed 讓我們先從簡單的一個例子看起 ```python import grpc import time from proto import echo_pb2 from proto import echo_pb2_grpc
Observer Pattern 程式設計中,時常會需要處理到所謂的 “事件” 這些的事件的出現是 隨機的, 亦即你沒辦法判定何時何地會突然有一個事件送進來
Information Storage 相較於直接操作 bits,使用 bytes(8 bits) 會顯得方便得多。以 machine-level 來看待記憶體就會是一連串的 byte 陣列,每個 bytes 都有一個獨立的 id(address),對於所有可能的 address 稱之為 virtual addr...
Information Is Bits + Context ```c // hello.c
How Frontend Application Run in Real Life ref: [javascript]如何用chrome,ie去debug javascript
Why do we Need Lifecycle Hook Angular 在一開始初始化 component,他的生命週期就開始了 為了使 component 更人性化一點,舉例來說我們希望在特定的時間做特定的事情 當資料改變的時候,我們希望重新 render 畫面,這時候 lifecycle hook 就很好...