Hello World
CodeTengu Weekly 碼天狗週刊
如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。
目前的 curator 陣容:
- @vinta - I failed the Turing Test - 科幻迷,最近在讀 Blindsight
- @saiday - Imnotyourson - 有什麼意見進來 Runtime 講啊
- @tzangms - Oceanic / 人生海海 - 最近真的都在玩薩爾達
- @fukuball - ImFukuball - 有新工作了,但歡迎直接挖角
- @mingderwang - Ethereum enthusiast,最近在研究區塊鏈遊戲
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - 我們公司在徵人
- @uranusjr - Smaller Things - Pinkoi 少了個棒球記者現在去應徵前端應該有機會
- @kkdai - 態度萬歲 - Learning Deeply....
- @yhsiang - AMIS / MAICOIN 徵才中,歡迎聯繫!
- @johnlinvc - 挑戰自動化家中電器
- @drumrick - 歡迎加入台灣 Kaggle 交流區
- @wancw
- @allanlei
- @theJian
- @lucienlee - 🦌
你也可以關注我們的 Facebook、Twitter、GitHub 或 Open Source 專案,有很多 weekly 看不到的內容。有任何建議也歡迎來 Gitter 聊聊。
不時致力於解決開發者之間的資訊不對稱
@vinta
MongoDB cookbook: Queries and Aggregations
在 Issue 130 有提到,MongoDB 的 Aggregation 其實很強大,尤其搭配 $elemMatch
、$project
、$let
、$unwind
和 $facet
等功能,可以直接完成很多複雜的業務邏輯,不需要多寫一行 code,雖然哪些事應該讓 DB 做、哪些事得在 API server 做,這就見仁見智啦。
不過 MongoDB Aggregation 寫起來的阿雜程度實在也跟 Elasticsearch 的 Query DSL 不遑多讓了(Thanks JSON),因為老是記不起來各種 operators 的用法和限制,所以就遵循之前提過的 Cookbook 模式,幫自己寫了一份筆記,複習、速查、分享各相宜。
Kubernetes Best Practices with Sandeep Dinesh (Google)
這個影片是 Google 的工程師在講使用 Kubernetes 和 containers 時的最佳實踐,影片的後半段則是 Weaveworks 的人在講他們搭建自己的 Kubernetes cluster 時遇到的各種挑戰和解法。
雖然前半段的內容有不少在 Kubernetes 和 GKE 的官方文件裡都有提到,但是有人貼心地幫你整理好還是挺棒的(就像你訂閱的這個 weekly 一樣),畢竟 Kubernetes 的文件實在多到靠北,看完都已經是 YAML 的形狀了。不過我對於越來越多人都推薦 Helm 這點還是不太能領略,總覺得 Helm 對一般使用者的意義好像不大啊(又不是 PaaS),我還不如直接幹一份 Chart 回來自己維護,之後要升級或客製化也比較方便,畢竟也就是一堆 YAML 檔。比較可行的用途似乎是團隊共用一套 Chart 來部署 production、staging 或 dev 環境?
延伸閱讀:
Tuning NGINX behind Google Cloud Platform HTTP(S) Load Balancer
因為 Google Cloud HTTP Load Balancing 的某些特性,如果你在 Google Kubernetes Engine 裡面跑 NGINX(或 OpenResty)的話,會有一些額外的 config 需要設定,尤其是 keepalive_timeout 620s;
。
題外話,Google Cloud 的 Load Balancer 也是很強啊,除了支援 QUIC 之外,更是默認啟用 TCP BBR。
延伸閱讀:
别废话,各种 SQL 到底加了什么锁?
這個系列的文章專門在講 MySQL InnoDB 在各種情況下會使用的各種 lock,作者寫得非常淺顯易懂,最喜歡讀這種技術文章了~
延伸閱讀:
@kako0507
React Fire: Modernizing React DOM
React DOM 目前有許多不經過大改很難修復的 known problems 。
團隊希望可以刪除一些 event system 的 abstraction ,是造成系統複雜以及 bundle size 變大的原因。
React Fire 計畫的大致方向:
- Stop reflecting input values in the value attribute
- 原生 DOM 的行為,鍵入字串改變 input 的 value 時瀏覽器並不會更新 DOM attribute 之 value 的值, React 也不該這麼做,雖然這樣做對一些依賴 CSS Selector 的 code 有幫助,但是也產生了一些未修復的 bug 。
- Attach events at the React root rather than the document
- React 嵌入到更大的系统中時,將 event handlers 綁定在 document 上,會造成一些與 stopPropagation 相關的問題。
- Migrate from onChange to onInput and don’t polyfill it for uncontrolled components
- React 使用和原生不同的事件名稱來表示 input event 會造成混淆。
- Drastically simplify the event system
- 自 2013 初始版本以來, React event system 幾乎沒有變化。它的許多 polyfills 對於現代瀏覽器來說是不需要的,並且可能會產生更多的問題,也佔據了 React DOM 很大部分的 bundle size 。
- className → class
How I built a mood changing animation using CSS masks
本文透過表情動畫的例子學習 CSS 遮罩 mask-image 以及切換 mask-position 的效果。
Improve your motion
在使用 CSS 轉場動畫時,使用 transition-duration 取代 transition-delay 達到更順暢的效果,透過文內的 timeline 可以更理解這兩者之間的效果差異。
透過 WebAssambly 執行 Windows 2000
透過瀏覽器也可以執行 Windows 2000 !
QEMU 的作者 Fabrice Bellard 在 2011 年就實作了這套 PC/x86 的模擬器 - JSLinux , 為了提升效能,先是利用 asm.js 來改寫,後期更透過 Emscripten 將 C code 轉為 JavaScript 執行,而最近又更進一步支援 WebAssembly 。
@kkdai
Go on Twitter: 🎉 Go 1.11 is released!
令人期待(?)的 Go 1.11 正式版出來了。包括兩個新功能:
- Golang module support (vgo experimental migration)
- WebAssembly port
整理一下其他相關消息:
Go 1.11 可能的問題:
Go 1.11 之後 github.com/nsf/gocode
會爆炸喔… 各家 IDE 已經開始換 github.com/mdempsky/gocode
securego/gosec: Golang security checker
一個很有趣的專案,透過 AST 的解析來分析你的 golang source code 是否有任何安全上漏洞.包括了:
- SQL Query
- File permission
- Random number security
My Favorite Go 2 Proposals
這篇文章的作者一直在關心 Golang 2.0 (Go++?) 的發展.. 他列出了幾個有趣的 proposal ,大家可以看看
- Interface literals: 可以讓你寫 interface 更精簡
- Add collect statements to the language: 讓你處理 error 可以更 “漂亮”
當然還有更多有趣的 proposal 正在進行.. 大家喜歡的是哪個?
在 Kubernetes 上面透過 Go 開發 gRPC service 可能遇到的問題
這幾週調整一下 gRPC service ,所以有這篇心得文.裡面解決了幾個問題:
- 如何 streaming request
- 如何調整 gRPC request timeout
- 如何調整 gRPC request size
裡面也有一個簡單的範例給大家參考一下.
更新:放了 Dockerfile 跟 Kubernetes yaml 在裡面
工作機會
Senior Backend Engineer at Swag
必備
- In-depth knowledge of Python, NodeJS
- Experience with Python web frameworks ie. Flask/Django/Tornado
- Utilized work queues for background processing
- In-depth knowledge of MongoDB and Redis
- Excellent understanding of HTTP
- Experience developing REST APIs
- Designed for modular systems
- Cloud environment experience
- Excellent communication and organizational skills
加分
- Worked with Python
asyncio
- Experience developing in Go
- Event-driven architecture
- Experience working with cluster environments and/or containers. ie. Kubernetes, Docker
- Development flow utilizing CI/CD
- Experience working with distributed systems
- Experience working with real-time APIs
薪資範圍
- 年薪 100 萬新台幣以上。
Otaku is the New Sexy
TeePublic
上禮拜發現的一個專門賣 T-shirt 的網站,重點是上面賣的 T-shirt 都!超!宅!它甚至有一個叫做 Programmer 的分類,或是你也可以隨便拿幾個你喜歡的電影、遊戲或動漫畫作品的名字去搜尋看看,保證有驚喜。我看到的第一天就買了八件。推薦各位臭宅去感受一下。
由 @vinta 分享!
This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.