IoC 在 TypeScript 中的實作

預估閱讀時間: 6 分鐘
event 2022/5/21
work 程式
turned_in 中篇
turned_in IoC
turned_in TypeScript
turned_in DI
turned_in Design Pattern
turned_in 心得
turned_in 進階
以一個有名的開源專案為例子,整理出幾個 IoC 不錯的用法,以及基本應該遵守的規則。
最近為新專案導入 Inversion of Control (IoC) container,發現 Container Libraries 中,大部分都只有和自己相關的教學文件,比較少有實際實作的範例,這邊文章以一個有名的開源專案為例子,整理出幾個不錯的用法,以及基本應該遵守的規則。 IoC Containers 現在有很多很棒的 Containers 供大家使用,如果您使用 Angular 或是 Nest.js 之類的 Framework,本身也有內建 Container/DI 的功能,這邊列出幾個比較多人使用的 Container: * InversifyJS (本篇使用的 Conta

Bastion Host - Teleport 介紹

預估閱讀時間: 4 分鐘
event 2021/7/20
work 程式
work 雲端
turned_in 中篇
turned_in K8S
turned_in 工具
最近公司內部使用 Teleport 作為 Bastion Host,使用起來非常方便,寫篇文章簡單介紹一下它。
什麼是堡壘機 Bastion Host 通常我們會把內部的服務像是 Databases 或應用程式放在 Private Subnets,這些機器不能直接由 Public IP 存取,而是藉由 Load Balancers (ALB, ELB) 將流量導向內部的機器,這樣可以保護我們的服務不受外部攻擊,只讓真正需要對外的服務能夠被存取。如下圖所示(通常 Applications 和 Databases 不會放在同一個 Subnet): 不過我們偶爾還是需要 SSH 進去 Private Subnets 中的機器進行部署或診斷,這時候就需要額外的「跳板」讓我們連進機器了,這台機器就稱為 Bast

中繼憑證設定遺失問題

預估閱讀時間: 3 分鐘
event 2021/5/4
work 程式
work 雲端
turned_in 短篇
簡單解釋中繼憑證以及未正確設定時會發生的問題。
甚麼是中繼憑證 一般來說,證書頒發機構 (certificate authority, CA) 不會用真正的根憑證 (Root Certificate) 來簽發給使用者的憑證,畢竟終端使用者這麼多,放在線上每天簽屬風險太大。相對的,CA 會使用根憑證先簽發一張憑證,再用這張憑證來簽發給大家的憑證,這張憑證就稱為「中繼憑證」(或中間憑證,Intermediate Certificate)。 比如說著名的 Let’s Encrypt,目前 (2021 五月) 使用的根憑證是 DST Root CA X3,用來簽發的憑證則是 R3: Let's Encrypt 憑證,圖片來自 https://l

Kubernetes 上的 ExternalTrafficPolicy

預估閱讀時間: 16 分鐘
event 2020/11/15
work 程式
work 雲端
turned_in K8S
turned_in Azure
turned_in 進階
turned_in 長篇
在 Kubernetes 中 Pod 接收到的流量來源 IP 通常會是內部 (Node) IP,若想保留原始的來源位址的話必需修改 Service ,這篇文章粗略的介紹 kube proxy 如何處理流量以及說明 ExternalTrafficPolicy 的不同模式
前言 最近公司改用 Nginx ingress controller 配合一個 L4 Load Balancer 來處理進站流量,取代過去使用 Application Gateway,在部屬時發現官方預設在 Service 上設定 ExternalTrafficPolicy = Local (Ingress-nginx Azure deploy.yaml),AKS 文件上也提到如果想保留客戶端來源 IP 的話,必須要這樣設定。 經果一番探索後,發現和 Kube-proxy 如何處理進進站流量有關,也算是解答了我對 Service 實作的問題,這篇文章來記錄一下研究成果 🎉 Kube Pr

使用 Clasp 開發 Apps Script

預估閱讀時間: 2 分鐘
event 2020/8/28
work 程式
work 工具
turned_in 短篇
turned_in 入門
turned_in Apps Script
以前會寫一點 Google Apps Script 來協助更新 Google Sheet,前幾天突然發現她終於使用 V8 啦,甚至可以使用 Typescript 來撰寫,這篇文章來介紹實作這些功能的工具 Clasp。
Apps Script 以前會寫少少的 Apps Script 來協助操作 Google Sheet 或其他 Google 服務,就是直接從 Google Sheet 裡面的指令碼編輯器直接進到 Script 編輯畫面。 比如說利用 doPost() 來當作 Webhook 塞資料進到表格中之類的簡單功能。 不過這個東西真的不是很好寫,因為是使用 Rhino 的關係,只能寫 ES5 語法,沒有 Class、沒有 Arrow Function … 😂 而且必須使用線上 IDE 的關係,也沒有辦法做版控 … Clasp 還好現在 Apps Script 已經支援 V8 Runtime 了

Kubernetes 上的保留資源

預估閱讀時間: 3 分鐘
event 2020/8/22
work 程式
work 雲端
turned_in K8S
turned_in 短篇
turned_in Azure
turned_in AWS
最近發現我們在 Azure Kubernetes Service (AKS) 上的 Pod 很容易被驅逐,查了一下才發現原來我們不能用盡 Node 上的所有資源,這篇文章就來看看我們必須留下多少資源給系統吧。
最近發現我們在 Azure Kubernetes Service (AKS) 上的 Pod 很容易被驅逐,查了一下才發現原來我們不能用盡 Node 上的所有資源,這篇文章就來看看我們必須留下多少資源給系統吧。 Node Capacity 在 Kubernetes 上執行 Pod 的時候,我們可以指定 Resource Request/Limit 來告訴 K8S 我們的程式需要多少的資源來運行,K8S 會自動幫我們安排到符合條件的節點上,像下面這樣: resources: requests: memory: "64Mi" cpu: "250m" limits:

Kubernetes cluster autoscaler 介紹

預估閱讀時間: 9 分鐘
event 2020/5/10
work 程式
work 雲端
turned_in 中篇
turned_in K8S
turned_in Azure
turned_in AWS
turned_in CA
在一般的開發我們很少會處理到群集的伸縮,整個產品中可能就會研究一次,所以我稱這次工作上難得處理到 K8S Cluster autoscaler,趕快記錄下來,也和大家分享。
甚麼是 Cluster Autoscaler (CA) Cluster Autoscaler (以下簡稱 CA) 是 Kubernetes 官方出的一個工具,讓你的 Cluster 依照需求伸縮,簡單來說就是幫你開/關雲端上的機器。通常會配合上 Horizontal Pod Autoscaler (以下簡稱 HPA) 一起使用,當 Pod 記憶體/CPU 或其他指標達到一定標準後,擴展 Pod,當沒有足夠的機器 (Node) 來執行 Pod 時,CA 就會幫你擴展機器。相反的需求下降時,HPA 降低 Pod 數量,CA 也會關閉不需要的機器,如此一來就可以節省成本又可以達到同樣的運算能力。

使用 Azure user delegation SAS 來簽署 Blob 權限

預估閱讀時間: 3 分鐘
event 2020/4/19
work 程式
work 雲端
turned_in 短篇
turned_in Azure
turned_in Blob
最近在把原本使用 AWS S3 的服務轉往 Azure storage,需要實作類似 S3 中 Presigned URL 的功能,順便寫點筆記紀錄一下,這篇文章我會使用微軟建議的 User delegation SAS 來增加安全性。
最近在把原本使用 AWS S3 的服務轉往 Azure storage,需要實作類似 S3 中 Presigned URL 的功能,順便寫點筆記紀錄一下。 Presigned URL 在 AWS S3 中有個稱為 Presigned URL 的功能,簡單來說你可以產生一個專用的網址給 Client 端,裡面限定權限和使用期限之類的訊息,Client 端拿到這個網址後就可以直接對資源發出請求,例如下載/上傳檔案之類的事情。你可以完全管理權限,流量又不必經由伺服器再到客戶端,在處理大檔案的時候非常實用。 Azure SAS 在 Azure Blob storage (類似 S3 的服務)中也有

VS Code 起始中斷點問題

預估閱讀時間: 2 分鐘
event 2020/4/7
work 程式
turned_in 短篇
turned_in 問題
turned_in 已解決
使用 Typescript 配合 VS Code 的 debugger 時,時常會自動停在程式的第一行,這篇文章解釋了一個可能的原因和解決方法。
問題 使用 Typescript 配合 VS Code 的 debugger 開發很方便,配合上 ts-node 的 register 就可以在 typescript 順暢的使用中斷點功能了。 不過最近在開發的時候好幾的專案都有同樣的問題,就是每次執行的時候總會在第一行自動停止,必須手動按下繼續,像下圖這樣; 沒有下任何中斷點的情況下會自動暫停,而且是在專案變大之後才會發生,這是我的 launch config { "name": "Node Inspector", "type": "node", "request": "launch",

Typescript Overview

預估閱讀時間: 9 分鐘
event 2019/6/16
work 程式
work typescript
turned_in 入門
turned_in 長篇
我第一個使用的前端框架是 Angular,自然也接觸了 Typescript,當時並不太能體會它的好處,只覺得增加了些學習門檻罷了。後來發現習慣以後,再也沒有辦法回到原本的 JS 了 ...,就算換了框架、使用 Node,都還是以 TS 為主,這篇文章來簡單介紹 TS 基本用法,回顧看看他到底為甚麼這麼令人著迷。
我第一個使用的前端框架是 Angular,自然也接觸了 Typescript,當時並不太能體會它的好處,只覺得增加了些學習門檻罷了。後來發現習慣以後,再也沒有辦法回到原本的 JS 了 …,就算換了框架、使用 Node,都還是以 TS 為主,這篇文章來簡單介紹 TS 基本用法,回顧看看他到底為甚麼這麼令人著迷。 Typescript 是甚麼 TypeScript is a typed superset of Javascript that complies to plain JavaScript 這是官網上的簡介,TS 其實就是 JS 的超集,JS 有的所有語法在 TS 中都可以使用,也就是

Goofy's blog

Hi, 這是一個沒有技術的工程師的部落格,會寫些技術筆記、旅遊紀錄以及大量的廢話,歡迎拍打餵食。
有任何建議都可以在文章下方留言或是到 Github 上開 Issue 😃