第 57 期 - 世上只有兩種程式語言:被罵得一無是處的,以及沒人在用的

本週專欄

以 Go 為例,圖解 Data Alignment 如何影響記憶體使用量

不知道大家在寫 Go 時有沒有注意過,一個 struct 所佔的空間不見得等於各個 field 加起來的空間,甚至有時把 field 宣告的順序調換一下,又會得到不同的結果(其他語言也會有類似的情況)。而今天的文章就是要從 CPU 抓資料的原理開始介紹,然後再講到 Data Structure Alignment(資料結構對齊),希望大家在看完之後能對 CPU 跟記憶體有更多認識~

好文募集

找工作必須面對的煎熬與成長 — 國外篇

雖然在 FB 跟 PTT 上三不五時就可以看到有人在分享如何進入 FLAG,但不可否認的是這些人都是強者中的強者,且很多都是名校本科系的。那如果不是這樣的人,想在美國找工作可能會遇到怎麼樣的困難?準備的方向又有什麼不同?一起來看看 Hannah 的分享吧~

前端開發

Creating React Application For Solving Every Sudoku Puzzle

該文章的作者用 React 製作了一個友善的前端介面來接其他開發者寫來解數獨的開源專案,作者沒有解釋如何刻出介面,而是分享他在打造畫面的時候思考了什麼。

Why Is {} > [] ?

你知道為什麼在 JavaScript 裡空物件會大於空陣列嗎?我真希望自己可以不需要了解這個,可惜我是個前端工程師。😭

Stop Using “data” as a Variable Name

命名絕對是最困難的事情,但即使困難也不代表可以亂取。文章講解了幾個不是很好的命名例子(也許大家都看到爛了),也提出一些比較有意義的命名前綴讓各位參考。

Computer Architecture

What is the difference between a 32-bit and 64-bit system?

如果有自己重灌過系統應該就會看過 32 bit、64 bit、x86、x64 這些關鍵字,但 32 bit 跟 64 bit 究竟是指什麼呢?為什麼 32 bit 系統只能使用 4GB 的記憶體?不太確定答案的話可以趕快看看這篇文章~

Why doesn’t C++ make the structure tighter? - Stack Overflow

在這週的專欄中有提到,Rust 編譯器在三年前就已經實作 struct field reordering,那為什麼歷史更悠久的 C/C++ 卻沒有這麼做呢?其實並不是沒有,而是因為 C/C++ 的標準規定了不可以隨便更換順序,所以預設情況下不會啟用這種最佳化,真的需要的話也可以自己套用

Optimizing Rust Struct Size: A 6-month Compiler Development Project

這篇是講 Rust 編譯器在實作 struct field reordering 的過程還有遇到的問題,內容很硬,對編譯器沒興趣的話可能會看到頭痛XD,但有興趣的話可以學到滿多東西

SEO

meta tag

HTML 中的 meta tag 一直是大家會忽略的地方,畢竟這些 tag 跟網頁整體的運作比較沒有太大的關連,但 meta tag 對於 SEO 來說就是一種識別符的概念,meta tag 下的好自然而然 SEO 的分數也會高,這篇文章介紹了幾個最常用的 meta tag 甚至還介紹了 open graph 這個用來讓社群媒體像是 Facebook、twitter、line 等等用來顯示文章連結標題、圖片、敘述等重要資訊的 tag,假如你的網站會多次分享在社群媒體上 og tag 不妨也一併加入吧!

Google SEO algorithm

俗話說的好:知己知彼方能百戰百勝,想要把 SEO 做好必須先了解 Google 背後是怎麼幫你評分,這篇文章介紹了 Google 用來進行 SEO 評分的重要演算法,而且都是用白話文來介紹,了解這些演算法的內容後日後在開發網頁也比較不會踩到會讓自己網站分數降低的地雷了。

trust rank

Google trust rank 簡單來說就是讓你的網站或者是網域信任度提升,只要你的網站越可靠、越被大家信任自然而然 SEO 分數也會高,提升網站信任度最簡單的幾個方法不外乎就是加入聯絡我們頁面、隱私權條款頁面、取用 cookie 按鈕等等,甚至還要有 SSL 憑證以及易讀的網址,這些都是 Google 會拿來評分的條件,這篇文章整理了幾個最簡單而且必做的信任度設定,讓你的網域信任度分數可以越來越高。

DevOps

Technologies & Tools to Watch in 2021

一轉眼 2020 年就要過完了,來瞧瞧看 2021 年 DevOps Engineer 和 SRE 們應該要特別留意的技術有哪一些吧?!

  • 透過 Kubernetes CRD 來管理公有雲上的資源:目前三朵雲都已經有提供對應的解決方案 AWS: ACK (AWS Controllers for Kubernetes), Azure: Azure Service Operator,GCP: Config Connector,這些工具跟既有的 IaC 解決方案好像有點牴觸,例如 Terrform, Pulumi,不過優點在於開發者使用同樣的工具除了可以管理 K8s 資源之外,也可以一起管理公有雲的雲端資源

  • Pulumi: 今年獲得 $37.5 million Series B 的融資來挑戰 Terraform 的霸主地位,跟其他 IaC 工具比較不同的地方在於他可以使用一般的程式語言來做開發撰寫 (例如 Go, Python, Javascript),所以程式語言本來的既有工具也都可以直接拿來做使用,不過有一點要注意的是目前他的社群比 Terraform 還要小得多

  • Terragrunt & TFSEC: Terragrunt 是 Terraform 的 wrapper,很多 Terraform 的最佳使用守則都是從中而來,而且他最近也宣布的商業支援方案,讓大企業可以用起來更簡單,而 TFSEC 則是針對 Terraform 的 Policy as Code 開源工具,利用靜態分析 IaC 程式碼來找出潛藏的資安威脅,在越來越多人接納 DevSecOps 觀念的當下,類似工具在未來的重要性會越來越高

  • Tekton: CI/CD 市場上有比較老牌成熟的 Jenkins 和 Spinnaker 當然還有最近比較火熱的 Cloud Native 工具例如 ArgoCD, 而 Tekton 算是剛進入這個領域的新玩家,主要聚焦於 K8s,並且使用 K8s CRD 來定義 Pipeline,這讓 Pipeline 擁有 K8s 的原生功能 (例如 rollback) 之外,也可以跟既有的 K8s 工具整合在一起例如 Jenkins X 或是 ArgoCD,這樣一來就可以達成 E2E 的 CI/CD Pipeline

  • Trivy: 容器的 Vulnerability 掃描功能在 CI/CD Pipeline 中的重要性越來越高,在這個市場也有其他的開源工具,例如 Docker Bench for Security, ClairAnchore Engine (文章中有些不屬於這個領域的被我移除掉了),而 Trivy 除了掃描 Container 以外,在程式碼中使用的 Package 也會一併檢查,結合屬於同一家公司 Aqua Security 的 kube-bench,就可以讓組織將 Security 更方便地融合在應用程式的開發之中

  • ShellCheck: 雖然有大量用來改善架構的工具,不過 Shell Script 在各種 Workflow 中依然很適合解決簡單的問題,而 ShellCheck 是 Shell Script 的靜態分析工具,可以像程式語言的 Lint 工具,找出語法有問題或是常犯的錯誤,而 ShellCheck 可以運行在 Web, Terminal 或是 CI,當然還可以整合在你最喜愛的文字編輯器中,例如 Vim, Sublime, Atom, VS Code

  • Pitest/Stryker: Pitest (Java) 和 Stryker (Javascript, C#, Scala) 兩個都是用來對特定語言做 Mutation Testing 的工具,Mutation Testing 透過在測試中注入錯誤來看看測試是否還是可以通過的方式來衡量測試的品質,當 Mutation 發生時,一個好的 Unit Testing 應該要失敗才對, 透過 Mutation Testing 來檢查沒有測試到或是測試不足的程式碼,藉以提高 Test Coverage

  • Litmus: Netflix 在 2011 年提出伴隨著 Chaos Monkey 提出 Chaos Engineering 的概念,而在 K8s 的生態系中也有很多 Chaos Engineering 的工具,例如 chaoskube, kube-monkey, PowerfulSeal 還有商用服務 Gremlin,而在這邊想要特別強調 Litmus,因為他是一個成熟且易於使用的 Chaos Engineering 解決方案,Litmus 是一個輕量級的 Kubernetes Operator,裡面有 ChaosEngine, ChaosExperiment 和 ChaosResult 三個主要元件所組成,Litmus 支援細緻的測試,不只是隨機地把 Namespace 中的 Pod 給砍掉而已,而是透過 ChaosResult CRD 將結果給呈現出來,不會直接要使用者花時間去觀察測試結果

Karpenter

Karpenter 是以 Metric 驅動來打造的 Kubernetes Autoscaler,可以運行在任何的 K8s 叢集中,它具有高性能與擴展性,目標為自動縮放運行於 K8s 中的任何使用 Scale Subresource 定義的資源,例如 ReplicationController 和 Deployment,Karpenter 定義了三種客製化的資源來控制 Autoscale 的行為

  • HorizontalAutoscalers: 用來定義 Autoscaling 的政策,或許大家會想到 HorizontalPodAutoscaler, 不過他應該是發生在 HorizontalPodAutoscaler 被觸發之後,才去幫忙加 K8s 叢集節點的角色,除此之外 Karpenter 可以透過多種不同的資源來做 Scale,因為他深度整合 Prometheus,直接使用 promql 來計算出自己想要的閥值

  • MetricsProducers: 用來建立 autoscaling 所需要 Prometheus Metric,不過假如已經有既有存在的 Metric 可以用的話,就不需要再使用 MetricsProducers 另外定義

  • ScalableNodeGroups: 用來定義控制 K8s Node Group 的 API,因為原生的 K8s 並沒有這種抽象的概念,而 Cloud Provider 提供的 Node Group API 又跟 K8s 其實不一樣,所以使用 ScalableNodeGroups 來當作中間的溝通橋樑,不過假如有用 Kops or Cluster API 就可以不用使用 ScalableNodeGroups

Cloud Native Nov 2020 Security Whitepaper

一個不小心就撿到了 Cloud Native Nov 2020 的 Security Whitepaper,內容從 Cloud Native 本身的開發流程,以及部署,執行環境內的各種細節 (Compute, Storage, Access),還有大企業比較在意的 Security Assurance 跟 Compliance 都包含在其中,有興趣的人可以下載來看看

StarBugs Weekly

StarBugs Weekly 由一群不寫文章就會想要亂花錢,但是又沒有那麼多錢,只好繼續寫文章的開發者所創立。
內容包含 Web 前端、中端、後端、DevOps、產品開發、精實創業,一切跟產品有關的知識,都是我們的守備範圍!

Writers:

  • @HannahLin - 從台灣到矽谷,熱愛前端的工程師女孩。
  • @Kyle老莫 - 無法忍受自己一天不進步的熱血社會菜雞。
  • @Airwaves - Hi~我是 Airwaves,熱愛研究如何造輪子的前端工程師。
  • @Jenny - 我不寫 CSS。

Curators:

  • @Andy - 目標成為用嘴巴工作的工程師,專長為網頁開發以及 K8s。

Maintainers:

  • @GQSM - Hi!我是神 Q 超人,一個先衝再說的男人。
  • @Larry850806 - 我是 Larry,傳說中的 0.1 倍工程師!
  • @LukaJoJo - 一名全身都是死角的工程師。
  • @smalltown - 熱愛鑽研各種可以提升雲端服務品質及增進團隊開發效率的開源技術。

Feedback

本週呈現主題方式做了一些改變,希望讓讀者能夠更快速精準的找到自己要的資訊。也加入社群活動這個區塊,每週更新社群活動的資訊。如果有任何建議,歡迎私訊 星巴哥技術週刊 FB 粉絲專頁 與我們聯繫。