Quantcast
Channel: CodeTengu Weekly 碼天狗週刊
Viewing all 109 articles
Browse latest View live

CodeTengu Weekly 碼天狗週刊 - Issue 138 大家都是透過犯錯在學習,小明常常在複習,小明很棒 - Aug 20th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen Source 專案,有很多 weekly 看不到的內容。有任何建議也歡迎來 Gitter 聊聊。

彷彿致力於解決開發者之間的資訊不對稱

@saiday

Faster HLS preparation – google-exoplayer

雖然這是 ExoPlayer 的 Chunkless preparation 特性的介紹文,但其實主要都是在談 HLS 的 master playlist。
HLS playback in ExoPlayer (General good practices) 這篇可以當成是 HLS 轉檔的一個最佳實踐指標。

如果你們在 Android 是用 ExoPlayer (應該都是吧?)在播放 HLS 可以看看你們的 master playlist 是不是已經提供足夠的 CODEC 資訊,如果有的話,升級、啟動 Chunkless preparation 就可以了。

離題:最近在開發 HLS 的功能,對於要不要採用 HLS AES Encryption 實在是猶豫不決,如果有先行者願意給我建議的話,我們來聊聊嘛 (;´༎ຶД༎ຶ`)

medium.com

DVIA (Damn Vulnerable iOS App)

一個充滿了安全漏洞的 app,是一個可以合法練習入侵技巧的材料。

作者是資安專家 @prateekg147,除了提供材料之外,這一包裡面也已經涵蓋了挑戰的題目跟教學。

沒有絕對安全的程式,但如果因為沒有資安觀念把敏感資訊存在 NSUserDefaultsplist 或 DB 裡面被整包端走,那也是說不過去。

除了 iOS 外,有人也收集了 Vulnerable Apps, Servers, and Websites 這類可以練習侵入技巧的模擬環境,可惜還沒有 Android 的相關專案?

damnvulnerableiosapp.com

How does Firebase initialize on Android?

應該不是只有我在 Android 整合 Firebase 的時候疑惑過為什麼只需要把 google-services.json 擺到定位就一切就緒了吧?

原來是透過 濫用 ContentProvider 達成的。 這樣的用法完全不是你所認識的 ContentProvider。

googleblog.com

@wancw

朴素的 DevOps 价值观

常跟朋友在說:「DevOps 是一種心態而不是特定的技術」,包含架構規劃、技術選擇,都與之息息相關。文章內容沒什麼太新的東西;不過我覺得文章開頭的圖可以擺在身邊,不時翻出來自我檢視。

qq.com

7 best practices for operating containers

  • 採用原生的 log 機制,GKE 有 Stackdrive Logging、Amazon EKS
  • 確保 containers 是無狀態(stateless)、不會修改的(immutable)
  • 避免特權 containers(可直接存取 host 環境)
  • container 內的程式不要以 root 身份執行
  • 讓程式易於監控,例如使用 Prometheus client libraries
  • 提供程式的健康與就緒狀況
  • 根據你的情境,仔細挑選 image 版號。看是要用 latest 永遠用最新版或是寫死 X.Y.Z 鎖定在特定版本,人工決定更新時機。

更詳細的內容可以看 Best Practices for Operating Containers

google.com

How to Fall Asleep in 120 Seconds

據說是在軍隊裡實際使用的快速入睡法,有需要的人可以試試看。

P.S. 這是 Medium 付費會員文章

medium.com

Markov Chains explained visually

互動式圖片解說馬可夫鍊。

(好吧,我只是單純喜歡這種可自訂的互動式圖像解說

setosa.io

年過 30 想轉業該怎麼做?中年轉職來得及嗎?

最怕你永遠無法下定決心踏出第一步,那不管過多久還是會保持現狀。

不過,現狀也沒什麼不好。只要問你自己,「這是你要的嗎?」而你心甘情願繼續走下去,那就沒問題了。

花了近一年多在職場上繞來繞去最後又重作馮婦的我,看到這段真是心有戚戚焉啊。獻給有類似困惑的人。

medium.com

@lucienlee

Announcing TypeScript 3.0

【Frontend】
TypeScript 默默來到了第五個年頭,最近 release 的 3.0 ,雖然沒有什麼 breaking change,語法上導入了原本寫 JS 很習慣的 rest and spread parameter,但更重要的是錯誤訊息、JSX 支持以及 editor 快捷功能的改進,TypeScript 開發體驗變得更舒適了呢!

microsoft.com

`s` (`dotAll`) flag for regular expressions • Exploring ES2018 and ES2019

【Frontend】
很多人從沒發現每個語言的正則式其實略有不同,尤其 JS 的正則式又與其他人落差更多。在 ES 2018 中,JavaScript 終於導入了 dotAll flag,讓我們可以輕易地匹配所有符號,試著想想在現今的JS中,你會怎麼做到匹配所有字元包含換行、Emoji 呢?

exploringjs.com

ERC860: Custodian-Client Contract Standard

【Blockchain】
Ethereum ERC 860 提出了一個雙層的 smart contract 結構,可以透過 Custodian-Client 的結構來做到會員、票券系統,與 ERC 721 不同的地方在於 custodian 與 client 之間可以共享 state ,可以做到更細緻的管控。

github.com

InterviewMap

【Career】
最近恰好自己面試了幾位工程師,也跟幾位有面試新人的朋友交流發現,有許多工程師用得一手好框架,但對許多基礎知識不甚扎實。或許這些人是個能搬磚的工程師,但不代表你是個能獨當一面的工程師--能理解原理,去改造、補洞、優化自己寫的程式。希望這一份涵蓋 JS、網路、瀏覽器相關、性能優化、安全、Git、數據結構、演算法的前端面試考題集,能讓大家更好準備下一次面試。

不過當然,你是不是個好工程師,不代表你能不能賺大錢。

yuchengkai.cn

工作機會

Senior Backend Developer at Swag

薪資:年薪新台幣 100 萬元以上。

基本條件:

  1. In-depth knowledge of Python
  2. Experience with Python web frameworks, ie. Flask, Django, or Tornado
  3. Utilized work queues for background processing
  4. In-depth knowledge of MongoDB, Redis, and Kubernetes
  5. Excellent understanding of HTTP
  6. Experience developing REST APIs

104.com.tw


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.


CodeTengu Weekly 碼天狗週刊 - Issue 139 他們在 release 的前一天爆炸 - Aug 27th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen Source 專案,有很多 weekly 看不到的內容。有任何建議也歡迎來 Gitter 聊聊。

彷彿致力於解決開發者之間的資訊不對稱

@fukuball

8 resources to learn about SOLID design principles

PHP:中級 / Design Pattern:初級

有人曾經問過 Laravel 的作者 Taylor Otwell:如果想成為更棒的 PHP 工程師,你會怎麼建議?

學習出色的 Design Pattern。這不只適用在 PHP。你可以在任何程式語言使用這些 pattern。尤其是 SOLID。把這五個徹底學好,它會把你帶到新的境界,我每次寫 code 幾乎都在想這 5 點。

的確 Design Pattern 的重點心法即是在 SOLID(Single Responsibility Principle、Open Closed Principle、Least Knowledge Principle、 Interface Segregation Principle、Dependency Inversion Principle),每隔一段時間應該都要回頭檢視看看自己是否有將 SOLID 放在心中去寫 code,雖然有時趕產品開發常常會忽略掉而留下技術債,但就從回顧中去勉勵自己多看、多想、多練習。本篇文章羅列了一些平實易讀的資源,分享給大家。

barryvanveen.nl

More code comments

PHP:中級 / Programming:初級

這是作者在 Twitter 上看到一篇討論程式註解的 tweet 之後寫下的文章,重點就是在討論註解這件事,當寫下註解的時候,可以去思考如何用一個概念來說明要註解的內容,如此可能就可以不必寫下註解,例如:

if ($date->hour < 9 || $date->hour > 17) { //Off-hours?
}

可以改成

if ($this->isAnOffHour($date->hour)) {
}

如此不僅不需要註解,甚至程式碼也變得更容易閱讀了。作者基本上贊成這個 tweet,不過他也提出了自己雖然也常遵循這樣的原則,不過卻也還是常寫下程式註解,當然我想這都是不可避免的(不然幹嘛有註解這樣的設計呢?),雖然我們要遵循好的設計原則,但卻也不是就完全不能寫註解,當真的需要寫下註解的時候,還是放心地寫吧!

matthiasnoback.nl

Building a PHP Framework: Part 1 – Why? Seriously, Why?

PHP:中級 / Web Application:中級

這一系列文章作者帶著讀者一步一步搭建一個 Web Framework,或許有人會問:為何要學做一個 Web Framework 呢?直接用現成的就好了啊!

其實在搭建的過程當中可以學習到許多有關 Web Application 的知識及 Design Pattern,這可以讓自己對於 Web Application 的技術的掌握更扎實。像之前被批評的量產炮灰型 XXX Framework 工程師課程所產出的工程師其實就是少了這些基本知識,以至於只能學其一二,不能舉一反三。

個人覺得這一系列文章寫得還蠻淺顯易懂的,雖然還沒完全完成,不過可以期待後續,回想起自己以前也幹過自幹 Framework 的傻事,的確很有成就感也能學到許多,不過要用到 production 還是三思啊!

developmentmatt.com

@johnlinvc

Introduction to Terraform

應該有些人聽過 Terraform,可能也有些人用過。敝公司也正在導入。不過這玩意到底是什麼呢? 簡單來說就是用宣告式的方法來設定雲端系統 (像是 AWS, GCP, Azure 等等)。

好處是整個系統都是用程式碼定義 (Infrastructure as Code) 。並且強制使用不可修改的 instance,讓系統的可重現性大幅提高。可以減少在 staging 會動,到 production 就升天的窘境。在這種伺服器會被關掉重開的情況下,也會讓大家在設計的時候就考慮到高可用性,減少水平擴展的困難度。

terraform.io

Terratest: 雲端系統也能寫 unit test

把雲端的的設定都寫成 Code 了,再來呢?有 Code 的地方就一定會有 Bug,這是無法改變的宿命。抓 Bug 並且讓它不再出現的最好方法就是寫 Test。不過設定要怎麼寫 Test 呢?

Terratest 來拯救咧!

這個 Gruntwork 開發的開源測試工具可以把你的雲端系統整個 deploy 到一個全新的環境,再自動跑我們寫的 test case ,像是 API test, ssh 連線等等。測完之後再自動把整個測試系統砍掉。讓改 infra code 不再心驚膽顫。

github.com

Terragrunt: 把 Terraform 的設定抽到乾 (DRY)

Infra code 寫好測滿之後,再來就要開始一層一層 deploy 出去,先是寫 dev 的設定,再來寫 staging 的設定,再來寫 alpha 的設定,差不多寫到 beta 的設定就崩潰了,連 production 都還沒到。每個環境都有點像,又都有點不像。好一點的只有 scale 不一樣,慘一點的要和一大堆 legacy 奮戰。

Terragrunt 可以幫我們省很多複製貼上的工,讓每個環境都只需要訂參數,沿用一樣的設定,減少複製貼上產生錯誤的機率。也強制降低每個環境間的差異。

github.com

Why Do Keynote Speakers Keep Suggesting That Improving Security Is Possible?

一個娛樂性非常高的 talk。讓我們能夠好好想想在 Hype Driven Development 下對電腦安全造成的影響。

usenix.org

工商服務

iPlayground 2018

想聽 iOS 的最新開發技術?想聽和 Apple 奮戰的血淚談?想尋找新的工作機會?10/20 - 10/21 在台大管理學院舉辦的 iPlayground 2018 讓你三個願望一次滿足。

目前熱烈徵稿售票中。快來參與吧。

kktix.cc

工作機會

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 萬新台幣以上。

github.com


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 140 聽說新來的工程師喜歡玩密室逃脫,但是看他玩了一個下午都還沒離開 Vim 呢 - Sep 3rd 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容

目前的 curator 陣容:

你也可以關注我們的 FacebookTwitterGitHubOpen 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 模式,幫自己寫了一份筆記,複習、速查、分享各相宜。

vinta.ws

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 環境?

延伸閱讀:

youtube.com

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

延伸閱讀:

percy.io

别废话,各种 SQL 到底加了什么锁?

這個系列的文章專門在講 MySQL InnoDB 在各種情況下會使用的各種 lock,作者寫得非常淺顯易懂,最喜歡讀這種技術文章了~

延伸閱讀:

qq.com

@kako0507

React Fire: Modernizing React DOM

React DOM 目前有許多不經過大改很難修復的 known problems

團隊希望可以刪除一些 event system 的 abstraction ,是造成系統複雜以及 bundle size 變大的原因。

React Fire 計畫的大致方向:

github.com

How I built a mood changing animation using CSS masks

本文透過表情動畫的例子學習 CSS 遮罩 mask-image 以及切換 mask-position 的效果。

freecodecamp.org

Improve your motion

在使用 CSS 轉場動畫時,使用 transition-duration 取代 transition-delay 達到更順暢的效果,透過文內的 timeline 可以更理解這兩者之間的效果差異。

medium.com

透過 WebAssambly 執行 Windows 2000

透過瀏覽器也可以執行 Windows 2000 !

QEMU 的作者 Fabrice Bellard 在 2011 年就實作了這套 PC/x86 的模擬器 - JSLinux , 為了提升效能,先是利用 asm.js 來改寫,後期更透過 Emscripten 將 C code 轉為 JavaScript 執行,而最近又更進一步支援 WebAssembly 。

bellard.org

@kkdai

Go on Twitter: 🎉 Go 1.11 is released!

令人期待(?)的 Go 1.11 正式版出來了。包括兩個新功能:

  1. Golang module support (vgo experimental migration)
  2. WebAssembly port

整理一下其他相關消息:

Go 1.11 可能的問題:

Go 1.11 之後 github.com/nsf/gocode 會爆炸喔… 各家 IDE 已經開始換 github.com/mdempsky/gocode

twitter.com

securego/gosec: Golang security checker

一個很有趣的專案,透過 AST 的解析來分析你的 golang source code 是否有任何安全上漏洞.包括了:

  • SQL Query
  • File permission
  • Random number security

github.com

My Favorite Go 2 Proposals

這篇文章的作者一直在關心 Golang 2.0 (Go++?) 的發展.. 他列出了幾個有趣的 proposal ,大家可以看看

  1. Interface literals: 可以讓你寫 interface 更精簡
  2. Add collect statements to the language: 讓你處理 error 可以更 “漂亮”

當然還有更多有趣的 proposal 正在進行.. 大家喜歡的是哪個?

dev.to

在 Kubernetes 上面透過 Go 開發 gRPC service 可能遇到的問題

這幾週調整一下 gRPC service ,所以有這篇心得文.裡面解決了幾個問題:

  1. 如何 streaming request
  2. 如何調整 gRPC request timeout
  3. 如何調整 gRPC request size

裡面也有一個簡單的範例給大家參考一下.

更新:放了 Dockerfile 跟 Kubernetes yaml 在裡面

evanlin.com

工作機會

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 萬新台幣以上。

github.com

Otaku is the New Sexy

TeePublic

上禮拜發現的一個專門賣 T-shirt 的網站,重點是上面賣的 T-shirt 都!超!宅!它甚至有一個叫做 Programmer 的分類,或是你也可以隨便拿幾個你喜歡的電影、遊戲或動漫畫作品的名字去搜尋看看,保證有驚喜。我看到的第一天就買了八件。推薦各位臭宅去感受一下。

@vinta 分享!

teepublic.com


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 141 醫師:「不要用你 Google 到的結果質疑我的醫學知識」;軟體工程師:「不要用你 Google 到的結果質疑我 Google 到的結果」 - Sep 10th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 FacebookTwitterGitHub。有任何建議也歡迎來 Gitter 聊聊。

目前的 curator 陣容:

本週標題出處

彷彿致力於解決開發者之間的資訊不對稱

@uranusjr

Wkhtmltopdf Considered Harmful

wkhtmltopdf 是一個頗有名氣的小工具,主要用途是把一個 HTML 檔轉成 PDF;它有一個姊妹 wkhtmltoimage 是轉成影像,有時候兩者也被合稱 wkhtmltox。如名稱所示,這個工具的基礎技術是基於 WebKit——實際上是 Qt 的 WebKit 函式庫 QtWebKit,以 headless 方式渲染 HTML 後,再轉換成目標格式。

這個工具很簡單易用,所以在很多專案都被用上,我自己也在工作上用它處理 PDF 輸出。但是這篇文章指出它的幾個問題,並建議用 WeasyPrint 取代。主要的重點是:

  • 難以編譯。Qt 與 WebKit 兩者都是很肥的函式庫。官方有釋出 binary,但是基於很舊的版本。
  • 效能不好。QtWebKit 本質上還是用來做 web view 的,達成 headless 的方式其實是 off-screen rendering,浪費不少資源。
  • 功能不齊、字體支援很差。這個有用過的大概都知道,想知道詳細就看原文吧。

文中沒提到,但是還有另一個問題也困擾我很久:授權。Qt 是 GPL/LGPL 雙授權,所以如果你不是把它當成 standalone binary 使用,你的程式在授權上就很受限。當然 LGPL 可以用 dynamic linking 避開,但是這又回到 Qt 和 WebKit 都非常大一包,而且 wkhtmltox 有對 Qt 打 patch(印象中是為了支援 header footer),所以即使你的程式本來就用了 Qt,也要另外帶一包給它。這真的很不行。

WeasyPrint 本身是 BSD 授權,所以很多問題都直接不見了。如果你有預算,原文也提到了其他的商業選擇;我一個都沒用過,不過應該不錯吧。另外如果你的環境保證有 Google Chrome,或許 Headless Chrome 也是個好選擇。另外別忘了 macOS 也可以使用內建的 WebKit binding。

rebased.pl

CLI: improved

這篇文章列出了一些「現代」的 CLI 工具,用來取代大家熟悉的選擇。引用 Ubuntu 宣布把 ifconfig 從預設安裝拿掉時的文章副標

世界在演進

你熟悉的工具們仍然能夠做好他們該做的事情,但是如果能把握一些新的技術發展,在比較特定的狀況下,肯定更能事半功倍。

對了,這裡面有很多工具是使用 Rust 和 Go,感覺這類替代工具很常都有這個傾向。這些語言相比 C 與 C++ 等等傳統的系統語言,有更完善的標準函式庫與現代的編譯器支援(例如 LLVM),所以還有個附加好處是跨平台更方便,而不會像 POSIX 家族那樣難以移植,不同平台還可能有微妙的差異還分 GNU 和 BSD 系什麼的。最近因為常用 Windows,也在研究用 Rust 移植一些簡單指令(touch 之類的),感覺這很有搞頭啊。

remysharp.com

Where Vim Came From

從 Ken Thompson 為 Unix 寫的行編輯器 ed 開始,解釋為什麼 Vim 會長成現在這樣——為什麼拷貝叫 yanking?那個 command mode 到底是怎麼回事?為什麼切換模式要用遙遠的 ESC?這一切都有理由。我對這種講古文毫無抵抗力。

其實這類講古聽多了,大部分好像也都是走同一個套路:Thompson/Richie/Joy/etc. 覺得某個東西很讚,想在自己的系統上也用,所以就抄了一個;之後這東西慢慢長手長腳,就成了我們現在看到的樣子。真美好。

這類故事給我最大的啟發是,當你發現自己在抱怨某樣東西怎麼這麼難用時,首先要做的其實是把自己放到作者的角度,思考他當初設計的理由。Stallman 為什麼會把 Emacs 快捷鍵弄得一堆 C-x 讓大家小指殘廢——因為它最初的實作機器是把 CTRL 放在現在 WIN/CMD 的位置啊!作者並不是白痴,只是考量的需求和你不同罷了。

軟體作者不會永遠正確,但是他們背後都有各自的理由。不要隨便假設只有你自己看得到真相,其他人都是笨蛋;在絕大多數狀況中,你的自信源於自己的無知。共勉。

另外,你知道 Vim 幾乎只靠一個人(Bram Moolenaar)寫出來,而且他獨自維護這個軟體超過 30 年,還堅持不斷更新嗎?這真是太驚人了。如果你有用 Vim,是不是該支持他一下。一個人 10 歐元,拿得出來吧?

twobithistory.org

@allanlei

Testing in Production

Testing in production is not always a bad thing, though it should probably never be the only testing. It offers scenarios where its difficult to replicate in a non-production environment. In the end, the test environment is a trade-off between confidence, reality and risk.

medium.com

Feature Flags

Feature flags are great at controlling the release of features for purpose of canaries, AB testing, etc. Though conceptually very simple (essentially just a if/else), it is a very powerful tool for products.

featureflags.io

Wireguard

Built to be faster, simpler, leaner, and more useful compared to some other popular solutions like IPSec and OpenVPN. It has also received some high praise from Linus Torvalds "it's a work of art".

wireguard.com

Redis Extreme

Redis (X) Streams will be available in 5.0. Similar to Kafka, it is a append only log like structure with support for consumer groups. While it probably will not draw users away from Kakfa, it offers a low operation overhead to get a pubsub like service up and running.

redis.io

@theJian

Why Flutter Uses Dart

在寻找 React Native 替代品的你可能已经把目光转向了 Flutter. 对于一个跨端 UI 框架, Flutter 却选择了一门在 mobile 开发者或者 Web 开发者中都不流行的语言 Dart. 撇开 Dart 本身有利于客户端开发的特性, 对于很多开发者来说, 也许如何和现有的生态更好的集成是更多人关心的问题.

hackernoon.com

Progressive enhancement with CSS Grid

在考虑使用新的 CSS 特性的时候, 很大一个不使用的原因就是浏览器兼容性. 为了使用新特性而对历史代码进行大规模的重写的代价实在太大了! 对于这个问题, 你现在可以使用 feature query 来解决, 仅在支持的浏览器上使用新的特性. 而对于老旧的浏览器, 回退到之前的代码.

freecodecamp.org

An OAuth 2.0 introduction for beginners

解释 OAuth 2.0 的工作原理以及各种认证流程下的实现.

itnext.io


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 142 投資虛擬貨幣讓我學會了相當現實的理財觀念 - Sep 17th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 FacebookTwitterGitHub。有任何建議也歡迎來 Gitter 聊聊。

目前的 curator 陣容:

本週標題出處

彷彿致力於解決開發者之間的資訊不對稱

@saiday

Password and Credential Management in 2018 🔒

If a database leak happens, we don’t want the attacker …
… to somehow regain access to our user’s plain text password
… to be able to use the credentials to authenticate against the service

這篇文章就是在講密碼跟 credentials 的處理跟保存。

有個細節很有趣,如果是給用戶保存的 credentials (recovery code),作者建議用 base32 來 encode 過再切成字段,這樣在抄寫或紀錄過程比較不會出錯。

medium.com

What is the XY problem? How do I avoid it?

XY 問題:

  1. 遇到了一個問題 X,不知道怎麼解決
  2. 想試著用 Y 方法來解決 X 問題,同樣地,也不知道怎麼實作 Y 方法
  3. 向其他人提問 Y 方法要怎麼執行,並沒有提到問題 X

可能在大家花了很多時間討論 Y 方法之後,這並不能解決問題 X,或其實存在著更好的方法。

如果你是提問的人,無論有多確定問題的價值都應該提供想問這個問題的原因。如果你是被提問的人,只要你感覺到這可能是 XY 問題,你就應該問「為什麼要用方法 Y?」

延伸:How To Ask Questions The Smart Way

stackexchange.com

RxJava 沉思录(一):你认为 RxJava 真的好用吗?

Android 開發者都或多或少用過 RxJava 這個框架,這是一系列有思考含量的文章,值得一讀。

大多数我看到的有关 RxJava 的技术文章举例说明的所谓 “逻辑简洁” 或者是 “随着程序逻辑的复杂性提高,依然能够保持简洁” 的例子大多数都是不恰当的。一方面他们仅仅停留在 Callback 的维度,举那种依次执行的异步任务的例子,完全没有点到 RxJava 对处理问题的维度的提升这一点;二是举的那些例子实在难以令人信服,至少我并没有觉得那些例子用了 RxJava 相比 Callback 有多么大的提升。

我對 RxJava 的理解就是 Event driven。非同步、線程管理、Rx Operators 都是為了搭建 Event driven framework 而生。用 Observable 對事件做封裝,有了統一的介面,我們就可以對事件做加工或清洗(業務邏輯),然後得到結果。

延伸:Introducing MvRx: Android on Autopilot
Airbnb 釋出內部搭建在 RxJava 上的 Android 基礎架構,Kotlin only

github.io

@fukuball

Ethereum 開發筆記

Blockchain、Ethereum:初級

之前一直有在關注 Blockchain、Ethereum,寫過 Smart Contract 也寫過 Dapp,但邊看網路上散落的文章邊學習總有些見樹不見林之感,狠下心來決定從頭到尾來把 Ethereum 開發摸一遍,順便將自己學習到的記錄下來寫成筆記,之後會陸續發佈新內容,大家跟我一起來受苦吧!

medium.com

區塊鏈乾貨 Samson's Blog

Blockchain:初級

這幾天查 Blockchain 相關資料看到的部落格,滿滿 Blockchain 相關乾貨,蠻值得一看的!尤其作者用詞精準且嚴謹,這讓閱讀的人可以更容易釐清文章所要傳達的知識,這樣的寫作態度令人佩服也值得學習,相比之下我用詞就有點太不嚴謹了,總之,分享給大家!

samsonhoi.com

RSA 算法原理

Cryptography:初級

以前有明明有聽過、學過,但卻不是很記得其中的原理了,明明工作上常常用到卻忘記其中的原理豈不是很弔詭,阮一峰這兩篇文章(第二篇)寫得蠻清楚的啊,看完推導過程就會情不自禁對發明這個算法的人感到肅然起敬!

ruanyifeng.com

@mingderwang

Kubernetes Ingress 101: NodePort, Load Balancers, and Ingress Controllers

如果你想當一個 DevOps 工程師,少不了自己裝一個 k8s,來實驗自動部署的環境。不管你是用 AWS、GCP、或是 Azure,甚至其他雲端或本地架設主機,都少了要自己決定怎麼部署你的 ingress。所謂 k8s ingress 就是外面進來的請求,要怎麼 routing 到 k8s 裡正確的 services。其實方法很多種,本文介紹你如何挑選。

getambassador.io

The Rise of Cloud Native Programming Languages

市面上已經有那麼多種電腦語言,為何還要學 cloud native 程式語言呢?這跟我説會 VM 就好,為何還要學 docker 是一樣的道理。對 DevOps 團隊來説,如果能簡單的再把程式跟架構結合在一起,還能同時對架構做測試,cloud native 也許是個可行的方法。

hackernoon.com

Packaging Applications for Docker and Kubernetes: Metaparticle vs Pulumi vs Ballerina

有興趣對 cloud native 語言寫法一窺究竟的人,可以看這篇文章。它簡單地利用 hello world 範例來展示如何利用 MetaparticleBallerina、或 Pulumi 包裝的應用程式,能直接在 kubernetes 裡執行。

infoq.com

Random Cool Stuff

Google Dataset Search

Dataset 是做資料科學或機器學習最重要的一環,最近 Google 推出了 Dataset Search Beta,這絕對是研究者的一大福音!

google.com


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 143 Roses Are Red. Violets Are Blue. Unexpected '{' on Line 32. - Oct 1st 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 FacebookTwitterGitHub。有任何建議也歡迎來 Gitter 聊聊。

目前的 curator 陣容:

本週標題出處

彷彿致力於解決開發者之間的資訊不對稱

@chiahsien

Private properties in protocols

Swift 的 Protocol 是個很好用的概念,但它還在不斷的完善中,也還有不少限制存在,例如不能在 Protocol 裡頭宣告 private property。

作者舉了一個蠻常見的場景說明為什麼這會是個問題,如果是我們自己專案裡頭遇到,或許我們可以跟團隊成員說好「這些 property 不能亂動」,但是一來這樣實在太不保險,而來如果我們是在開發一個 library 給其他人用的話,我們也無法保證其他人會怎麼用它。

所以要怎麼在 Protocol 宣告 private property 呢?作者提供了一個小技巧:用一個中間物件把它包起來。蠻取巧的一個作法,或許你正好需要!

github.io

NSFWDetector: A NSFW (aka porn) detector with CoreML

利用 CoreML 做機器學習,讓程式可以辨識出不雅的圖片。我想到可以用在一個場景:如果你的 app 允許使用者上傳圖片的話,可以用這個套件在上傳前先檢查,節省後續人工檢查每一則發文的成本。

如果你好奇它的訓練資料的話,這裡也有提供 XD

github.com

Access Control Management with Swift

當你的產品功能跟使用者權限有關的時候,你或許一開始會先用粗暴有用的做法,在 User model 裡頭加入一堆 boolean property,然後在業務邏輯的地方判斷 if (user.propertyA) { doSomething(); }

隨著產品逐步變大,你會發現 User model 裡頭的 boolean property 越加越多,業務邏輯要判斷的東西也越來越多,更有可能這一堆權限判斷會散落在各個不同檔案裡。

想想就覺得可怕,是吧?(或許你正在面對這一坨可怕的邏輯?😨)本文作者提供了一個處理使用者存取權限的思路,或許會對你現在或將來有幫助!

medium.com

Swift & Fika 2018

Swift & Fika 是一個在斯德哥爾摩舉辦的 Swift Conference,今年的場次剛結束不久,新鮮的影片就上 Youtube 了,只能說主辦單位真的很有心,不知道中午吃便當的時候要看什麼的話,就來看看 Swift 吧。

youtube.com

@wancw

Don't talk CRUD

CRUD 是資料操作、framework 的基本操作,但它們不應該直接被用在 API、URL 乃至於使用者介面上。

應該盡量採用客戶、使用者的慣用語,也就是所謂的 Domain-driven design。畢竟解決(客戶、使用者的)問題才是開發程式的重點。

codecoding.net

Redis 系列 -- Redis 4.0 深入持久化

網路上能找到的 Redis persistence 文件,多半只介紹 RDB 與 AOF 兩種形式和比較。這篇是少數仔細地介紹了 4.0 新增的 AOF 混合 RDB 形式的文章,而且對 3 種 persistence 形式的使用與運作都有清楚說明。

Redis 4.0 之 RDB-AOF 混合持久化 則進一步從 source code 分析了這種新的 persistence 形式。

cnblogs.com

Towards Natural Language Semantic Code Search

GitHub 已經能做到以文字語意搜尋程式碼了,以後除了 Stack Overflow 又多了一個地方可以找範例程式 來抄襲 了。

懶得看文章的,也可以直接在 這裡 試試看目前的效果。

githubengineering.com

保護專注力

進入專注狀態(或所謂 Flow)是很難的事情,參考一下 othree 如何確保自己的專注力吧。

裡面提到 AshWu 的 如何在 Context Switch 間維持自己的生產力 也是很有參考價值,特別是 管理精力 一段:

調整你的生活作息,讓自己有良好的睡眠品質;養成固定運動的習慣,增強體力;將精力最好的時段保留下來給自己,其他的時間給別人;藉由建立儀式性的行為,讓自己能快速進入高專注的狀態;找到能讓自己快速回復精力的活動;避免把自己燃燒殆盡、而是追求能快速的充電完畢,重返工作。

othree.net

微前端的那些事儿 | microfrontends

我離網頁前端開發的世界已遠,沒想到類似微服務的架構也在前端發生了。

果然 IT 人員就是在不同領域、用不同語言不斷地重複同樣的事情啊

microfrontend.cn

@lucienlee

Use React in Cycle.js and vice-versa

[Frontend]

Cycle.js 是個 functional 及 reactive 的前端框架。第一次聽到他的朋友,你可以暫且非常粗略地把它想像成是個有 view layer 的 RxJS。
Cycle.js 過去以學習門檻高、整合困難而導致少有應用在大型項目的案例。原因在於要開始使用前你必須先掌握 reactive 事件流的思維;而與現有專案整合上,因為他有自己的開發方式/范式,讓你一但使用 Cycle.js ,你就得接受 Reactive for everything 這件事,較難與 react 跟 vue 這樣 view layer 框架直接整合。

作者 André Staltz 16年曾經公開 diss 過 React ,但考量到工程成本與社群發展上,能相互借用對方的積累對整個開發生態是更好的,而如今由於 React 16.4 ContextforwardRef API 的成熟,Cycle.js 與 React 能更無痛地整合在一起,或許是個可以嘗試將 Cycle.js 試在 production 的好時機,因為遇到實在不行的狀況,你還是能借用龐大的 react 社群中各種輪子解決問題。

#工程化的成本包含忍受隔壁的同事說求不更新,學不動了

staltz.com

A comparison between Angular and React and their core languages

[Frontend]

雖然原文主旨談的是 Angular 與 React 的比較,但我其實覺得文中與討論串 JavaScript VS TypeScript 與 Statically and Dynamically-typed languages 的爭論才是全文的亮點。有趣的是,文中提到一篇靜態、動態型別對於開發速度影響的論文。裡頭提到,靜態型別反而有機會因為花時間在修復 type error 而導致開發速度比較慢,從論文中開發時間的分佈圖來看,可以猜想工程師的經驗會影響靜態型別是否拖慢開發速度。

從我個人使用 TypeScript 的經驗來看,的確去熟悉第三方套件內部的型別會需要花更多時間預讀、TypeScript 對多層泛型跟多層 HOC 中的 type error report 目前十分不好讀,容易花許多時間在 trace error 邵,另外在資料 pipe 處理中,如果有結構上的變化,很多時候得很囉嗦地宣告只差一點點的型別。但不得不說,透過靜態型別能提昇程式可讀性,因為型別為封裝的元件提供了接口聲明,能讓工程師整合起來比較方便,重構上也比較不容易寫出預期不一樣的錯誤。

題外話,上文中的 André Stalt 也是堅定的靜態型別派,他也有寫過文章討論過這件事,有興趣可以一起讀一讀

#戰型別語言絕對是百年戰爭, #但還是希望大家寫套件能行個方便補個 .d.ts

freecodecamp.org

Basic Primer: Blockchain Consensus Protocol

[Blockchain]

區塊鏈中最重要的概念在於--如何創造共識,不管是證明價值轉移、資料不被竄改或是合約被公正執行,其背後的概念都是我們如何用技術手段,創造一個取得共識的方法。也因此了解區塊鏈中各種共識方案,是入門的基礎之基礎,這篇文章快速介紹了幾個常見的共識算法,包含 POW, POS, DPOS, dBFT ,有興趣可以延伸了解一下其他沒提到的共識算法

blockgeeks.com

Finite and Infinite Games

[Life]

Finite and Infinite Games / 有限與無限的遊戲,是最近影響我最多的一本哲學書,裡邊提到了世界上只有兩種遊戲--「有限遊戲」與「無限遊戲」,進而引領大家思考世界上各種互動的本質是什麼。這裡擷取幾個片段,讓大家感受一下什麼是有限與無限遊戲:

世界上只有兩種類型的「遊戲」,「有限的遊戲」和「無限的遊戲」。 有限的遊戲,其目的在於贏得勝利;無限的遊戲,卻旨在讓遊戲永遠進行下去。 有限的遊戲在邊界內玩,無限的遊戲玩的就是邊界。 有限的遊戲具有一個確定的開始和結束,擁有特定的贏家,規則的存在就是為了保證遊戲會結束。 無限的遊戲既沒有確定的開始和結束,也沒有贏家,它的目的在於將更多的人帶入到遊戲本身中來,從而延續遊戲。


無限遊戲參與者放眼未來,並不著眼於勝利,而是著眼於繼續比賽,過去將需要被不斷地重新解讀。無限遊戲參與者並不對抗他人的行動,而是發起自己的行動,使得他人能夠發起自己的行動進行回應。


姑且說有限遊戲參與者為了權力(power)而參賽,無限遊戲參與者憑借力量(strength)參賽。

往大的說,這本書能讓你對社會上的競爭博奕有另一種思考;往小地說,你能以一個新的角度來看待隔壁小明遇到的職場鬥爭。而我自己則是從區塊鏈、新創競爭、組織管理上得到許多印鑑的想法,祝大家能認清自己正在玩什麼樣的遊戲,並成為自己想要的玩家。

連結附上的是 Wired 雜誌創辦人 Kevin Kelly 的推薦,有興趣的人可以在買實體書或是網路上找到神祕的 pdf 來看看。

#說起來割韭菜是個有限還是無限遊戲呢?😜

kk.org

工作機會

Senior Backend Engineer at Swag

To apply, please send your resume to vinta@swag.live.

Requirements

  • In-depth knowledge of Python or Node.js
  • Experience with Python web frameworks (i.e., Flask, Django, or 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

Plus

  • Worked with Python asyncio
  • Experience developing in Go
  • Event-driven architecture
  • Experience working with cluster environments and containers (i.e., Kubernetes and Docker)
  • Development flow utilizing CI/CD 
  • Experience working with distributed systems 
  • Experience working with real-time APIs 

薪資範圍

  • 年薪 100 萬新台幣以上。

github.com


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 144 軟體工程師的三大美德:懶惰、急躁和傲慢 - Oct 8th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 FacebookTwitterGitHub。有任何建議也歡迎來 Gitter 聊聊。

目前的 curator 陣容:

本週標題出處

彷彿致力於解決開發者之間的資訊不對稱

@johnlinvc

Enhancing String Literals Delimiters in Swift 5

大家應該常常遇到需要在寫死的字串裡面放雙引號或是反斜線的經驗吧,特別是處理 JSON 時特別容易遇到。 預計年底推出的 Swift 5 使用了 #"hello world"# 來處理,相當優雅且有效。 裡面列出了主流語言處理 raw string 的方法 ,可以看到每個語言的異同之處,相當有趣。

github.com

What Every Programmer Should Know About Floating-Point Arithmetic

1 + 2 = 3 ,相信大家都同意。 那 0.1 + 0.2 呢? 答案是 0.30000000000000004。 😂

還不知道為什麼的人可以看看這個網站,裡面解釋了為什麼會有這樣的結果。 要處理任何不能出錯的數字的工程師們也可以看一看。

floating-point-gui.de

Git worktree: 同時開多個工作目錄

相信大家都有遇到需要在同一個 git repo 裡同時修改不同 branch 的情景。像是同事還在Code Review A branch, 但是需要用的 A 的 branch B 已經開始開發了。每次 A 有任何修改就要切branch 和 pull ,相當麻煩。

用了 Worktree 就可以讓同一個 repo 有超過一份的 working copy。減少切 branch 的麻煩。

ihower.tw

@allanlei

D-Wave Quantum Computing

Seems like a great way to get people excited in quantum computing. It's also great to see the first language of choice is Python!

dwavesys.com

Detecting XFS support on GKE hosts

This demonstrates how to execute commands on the host from a pod for the purpose of XFS support detection, useful for services like mongo.

medium.com

Memcache extstore

RAM is expensive. Compared to SSD/nvme, it is at least 2x. Using fast disk to extend the capacity for caching warm keys can greatly reduce server costs.

Redis also has something similar, but alas, it is under their Enterprise offering.

memcached.org

@hwchiu

GLB: GitHub’s open source load balancer 閱讀分析

Github 於2018/08/08 發表了一篇名為 GLB 的文章,並且將 Github 內部使用的 Layer4 Load Balancer 給開源出來,並且針對其設計架構,理念以及實作細節都進行了一番探討與講解,仔細琢磨後甚至可以發現還使用了 DPDK 等 Kernel-Bypass 的技術來達到更高速的封包處理。

本文的作者針對 Github 公開的文章進行了詳細的閱讀,並且嘗試用更簡易的方式跟大家分享該 Layer4 Load Balancer 的架構,非常適合對網路架構以及系統設計有興趣人的閱讀學習

medium.com

如何透過 Cert-Manager 輕鬆簡單管理 Kubernetes 中的 HTTPS 憑證

在這個資訊安全意識稍微抬頭的世代,網站配有 HTTPS 可說是個基本標配。同時因為 Let's Encrypt 的出現,讓 TLS 憑證的申請變得簡單且容易上手。然而使用 Let's Encrypt 本身還是有一些限制要處理,譬如需要定期更新憑證,以及如何驗證申請者目標網域的擁有者,這部分的操作都有對應的腳本來處理。然而在 Kubernetes 叢集之中,除了手動去運行這些腳本之外,有沒有更方便的方式可以整合這一切。本文要介紹一個叫做 Cert-Manager 的解決方案,透過其原理的理解,以及實際操作的步驟來學習如何更方便的在 kubernetes 叢集內管理憑證

hwchiu.com

Debug a Go Application in Kubernetes from IDE

隨者微服務化概念以及容器技術的普及,愈來愈多的應用程式都會打包成容器印象檔案並且部屬在相關的容器管理平台,譬如 docker-compose, kubernetes, mesos. 這種架構在部屬與服務上雖然能夠帶來好處,但是對開發者來說,其實也無形了增加除錯的複雜度。舉例來說,當開發的應用程式打包成 Docker 格式並且部屬於 Kubernetes 叢集上,這時候若想要進行除錯就變得相對麻煩。該應用程式運行的環境已經不是開發者的本地環境,而是 Docker 內的簡易環境,同時若要直接存取該 Docker 容器內的實際環境,也有網路連線的問題要處理,這些對於應用程式的開發者來說都是額外的問題。

本文使用 Golang 應用程式與 Kubernetes 當作案例,介紹如何透過本地端的 IDE 來偵錯於 Kubernetes 叢集中運行的 Golang 應用程式,只要能掌握這個概念與流程,相信要切換到任何類型的程式語言都能夠如魚得水般輕鬆,從此整個開發,偵錯的流程能夠更加順利。

itnext.io

NetDevOps: The Next Frontier in Agile Enterprise Automation?

DevOps 的概念與文化這幾年席捲整個資訊產業,此外 CI/CD 的實踐更是被許多工程師以及業界視為良藥,期盼能夠為整個軟體的開發帶來穩健也強壯的生態。

現在除了軟體開者外,網路管理這邊也掀起了一股風潮,稱之為 Networking DevOps (NetDevOps)。 網路管理相對於單純的軟體開發流程,多了些許硬體交換機的管理,這些管理包含了設定及部屬。

本文介紹了 NetDevOps 相關概念以及探討什麼樣的環境與企業會需要 NetDevOps 這種流程。 最後引申閱讀的部分也有許多跟 NetDevOps 相關的文章,有興趣的都可以多加閱讀來瞭解看看在非純軟的業界與開發流程上, DevOps 的文化帶來了什麼樣的衝擊

thenewstack.io

工作機會

Senior Backend Engineer at Swag

To apply, please send your resume to hr@swag.live.

Requirements

  • In-depth knowledge of Python or Node.js
  • Experience with Python web frameworks (i.e., Flask, Django, or 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

Plus

  • Worked with Python asyncio
  • Experience developing in Go
  • Event-driven architecture
  • Experience working with cluster environments and containers (i.e., Kubernetes and Docker)
  • Development flow utilizing CI/CD 
  • Experience working with distributed systems 
  • Experience working with real-time APIs 

薪資範圍

  • 年薪 100 萬新台幣以上。

github.com


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

CodeTengu Weekly 碼天狗週刊 - Issue 145 小明最近升職了,他的新職稱是 Senior Over-Engineer - Oct 29th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 FacebookTwitterGitHub。有任何建議也歡迎來 Gitter 聊聊。

目前的 curator 陣容:

本週標題出處

彷彿致力於解決開發者之間的資訊不對稱

@mingderwang

Building a React Native Game with RxJS 5

開發 HTML5 簡易手遊,應該會是一種獨立遊戲開發的趨勢,由於 react-native for web 以及微軟大力推薦自家 reactXP 的加持下,我覺得手機版跟 web 版遊戲合用一套原始碼的概念,可能會更容易被接受。繪圖的部分也許可以用 PIXI,至於控制的部分是否能用 RxJS 來寫,更加方便且跨平台,就看大家的個人喜好了。

medium.com

ICO 不求人

docker run mingder78/create-erc20-token 0x66ee73086134f147745be72335153bf780499e2e,CodetenguToken,COT,8,100000000000000

註:執行以上指令,將 0x66ee73086134f147745be72335153bf780499e2e 改成你自己的 Ethereum (Ropsten TestNet) address,產生的 Tokens 就是你的了。詳細說明,請參考 Solidity Weekly #14

CodeTengu Weekly

@johnlinvc

Upcase: 程式學習平台從現在開始免費

著名的 Ruby on Rails 公司 throughtbot 宣布旗下的程式學習平台 Upcase 從現在開始免費! 裡面提供了許多進階的教學。還有每週 30 分鐘的各種程式新知,像是新語言和框架,或是探討各種設計模式。有興趣的人可以去挖挖寶。

thoughtbot.com

@theJian

JavaScript engine fundamentals: optimizing prototypes

来自 v8 团队的一篇文章. CodeTengu 前几期有分享过前篇关于 Shapes 和 Inline Cache 机制的介绍. 本篇延续着上次的内容, 着重谈了 v8 对于 prototypes 查询所做的不同于 object 的特殊优化. 没看过前篇的读者可以先看前篇偏于理解本篇的内容.

mathiasbynens.be

Reduce JavaScript Payloads with Code Splitting

在编写复杂的 web 应用时, 随着前端代码量的增加, 打开网页所需要传输的数据量会逐渐成为整个页面的性能瓶颈. 这不仅仅指的是网络传输所需要的耗时, 更重要的是浏览器 parse JavaScript 代码是需要时间的, 特别是在 mobile 设备上这块耗时有可能会比较长. 幸运的是有很多好用的工具都支持把整个项目打包为多个 JavaScript 文件. 这样我们就可以利用好 Cache 以及按需加载来进一步优化 web 应用.

但是还是那句老话: Premature optimization is the root of all evil. 先衡量再优化.

google.com

GraphQL Design Tutorial

来自 Shopify 的一篇关于如何设计 GraphQL API 的入门. 设计 REST API 与 GraphQL API 的原则是很不同的, 不要把设计 REST API 的习惯带到 GraphQL 里来.

github.com

190 universities just launched 600 free online courses

一份来自 190 个大学的 600 个免费在线课程的清单.

qz.com

Confessions of a Flawed Designer

作者用漫画的形式列举了一些自己认为需要修正的习惯与心态. 其实大家在工作生活中应该都会有这些问题吧! 对吧?

还是说只是我有这些问题. 但是认为大家都有确实会让我不那么自责 :)

thedesignteam.io

@hwchiu

使用 Podman 來取代 Docker 指令吧!

隨者這幾年容器應用的蓬勃發展, Docker 一詞幾乎已經變成容器化的代言人。然而實際上還有許許多多能夠提供類似功能的容器技術也在不停的發展,特別是當現在有愈來愈多容器化管理平台的出現,譬如 Kubernetes 等平台。

在這些平台之中,要如何選擇底層的容器技術就是一個開放式的選項,使用者能夠針對自己的需求選擇自己想要使用的底層容器技術, Docker 只會是其中一個選項而不是一個必備的選擇。 伴隨者 OCI 標準以及 Kubernetes 採用的 CRI 介面的發展,目前整個容器的世界有一股風向正在努力地將 Docker 從容器化的代言人位置移除,就如同 Replacing Docker with Podman 中所提到的一段話語

I promise
To say container registries rather than docker registries
I promise
To say container images rather than docker images
I promise
To say containers or OCI containers rather than docker containers

也許不久的未來, Docker 這詞會慢慢被 Container 給取代

igene.tw

Maglev: A Fast and Reliable Software Network Load Balancer

Google 這家公司每次只要發表新論文的時候,通常都是一個已經在內部長期運行且有獲得良好效益的系統,舉凡 MapReduce, B4, Quic, Borg 等系統架構都是如此。

本文仔細研讀了 Google 於 2016 發表的 Software Network Load Balancer, Maglev 的相關論文,從該篇論文中可以看到 Maglev 的發展由來,到底希望解決什麼問題,本來的架構有什麼缺失以及新的設計是如何解決該問題。

除了基本的架構設計外,論文中也有效能評比的部分,譬如透過 Kernel By Pass 的理念來設計相關的應用程式,跳脫 Kernel 的框架能夠大幅度的提升軟體處理封包的效能。

此外對於 Maglev 內部的 Consistent Hashing 有興趣想要了解的話,也可以參考[論文中文導讀] Maglev : A Fast and Reliable Software Network Load Balancer (using Consistent Hashing) 來學習該 Load Balancer 內部更深層的設計

hwchiu.com

Travis CI 詳解,一次搞懂 Step, Job 以及 Stage 的差異及用法

隨者 CI/CD (Continuous Integration, Continuous Deployment) 概念的普及,愈來愈多的開發者會對自己的 Projects 套用這類型相關的工具。這部分相關的工具與服務有非常多種,譬如 TravisCI, CirlcleCI, Drone 以及 Jenkins.

該文章基於 TravisCI 介紹其測試流程,除了大家最常使用的 Step 外還介紹了更進階的概念, Job 以及 Stage. 開發者可以仔細地根據自己的需求去設計這些執行流程,藉由這些流程不但能夠更清楚的拆分每一個步驟,同時也可以滿足平行與相關依賴性的需求,讓整體專案的 CI/CD 流程更加視覺化及清楚明瞭。

hwchiu.com

Skopeo: 管理 Container 映像檔及倉庫的方式

有使用 Docker 習慣的人一定對於 Docker Hub 感到不陌生,特別是能夠跟 Github 整合並且整合出 Autobuild 功能實在好用。然後再一些 Offline 的情境下,我們需要一個 private 的容器倉庫,這時候就沒有辦法使用 Docker Hub 了。 而此時如果又有一些需求需要再不同的容器倉庫之間進行容器映像檔的轉移或是複製,以往就是要不停地透過 docker 指令來 image pull, tag, push 非常繁瑣。

現在這些步驟都可以透過 Skopeo 來幫忙處理了,透過這個工具可以讓你管理容器映像檔以及容器倉庫都可以更順手也更簡單,能加將時間專注在其餘跟商業邏輯有關的部分。

pichuang.com.tw


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.


CodeTengu Weekly 碼天狗週刊 - Issue 146 When in doubt, open an issue on GitHub. - Nov 23rd 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

如果命運的齒輪沒有出差錯,CodeTengu Weekly 會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。或是關注我們的 FacebookTwitterGitHub。有任何建議也歡迎來 Gitter 聊聊。

目前的 curator 陣容:

本週標題出處

致力於解決開發者之間的資訊不對稱

@vinta

KubeCon + CloudNativeCon China 2018 - YouTube

上禮拜去了上海參加今年的 KubeCon + CloudNativeCon China 2018,沒想到這次這麼快就有錄影可以看了,沒有去現場的朋友可以看看影片過過癮。


題外話,有些讀者可能有注意到,因為命運的齒輪出了差錯,近期咱們 CodeTengu Weekly 出刊的頻率實在有點不穩定,週刊都不週刊了,在這裡得跟讀者說聲抱歉,怠慢了。

不過話說回來,這個週刊從 2015/08/03 的第一期到現在,也經營了三年多了啊,但是就像上班久了,難免會遇到工作倦怠嘛(攤手),而且每位 curator 其實也都各有全職工作和家庭要顧,仔細想想,這個完全無酬、全靠興趣在支撐的 weekly 能夠存活這麼久真的是挺了不起的啊,在這裡真的要跟各位 curator 說聲由衷的感謝。另外,如果大家不嫌麻煩的話,也想請各位讀者可以在 TwitterGitter 上跟你喜歡的 curator 說聲辛苦啦或是任何的反饋都行,畢竟除了我三不五時偷懶之外,其他的 curator 可都是非常用心地準備每一期的分享啊。

最後,為了讓這個 weekly 能夠盡量持續下去,我們目前的運作方式勢必是得做些調整了,雖然我也還沒想清楚確切的方向,不過最近應該會在 CodeTengu 的 GitHub 上跟大家討論一下。所以呢,在有定論之前,可能也還是會像最近這樣不定期休刊,還望各位讀者多多包涵了。

youtube.com

Container Native Load Balancing on GKE

Google Cloud 前陣子推出了 Container Native Load Balancing,可以直接 target 到實際的 containers,每個 connection 直接從 load balancer 到 backend pods,不再有 iptables magic 了。

這個影片很清楚地說明了 Kubernetes 原本的 networking 機制,然後又介紹了新的 Load Balancing 是如何運作的;影片的後半段也講到了 GKE 上的 Custom Resource BackendConfig,基本上就是讓你只需要在 Service 加上幾個 annotation 就可以配置許多 L7 的網路設定,例如 CDN、Security Policy,帥氣。

我們團隊在公司的一個新產品上正好試用了一下這個新功能,嗯,只能說想嚐鮮的人其實可以等這個功能成熟一點再用到 production。

延伸閱讀:

youtube.com

MongoDB Change Streams

前陣子學到一個新詞 Change Data Capture (CDC),基本上就是資料庫提供了一個機制,讓你能夠即時監聽所有數據的 insert、update、delete 等修改。當然你也可以透過解析資料庫底層的 replication logs(例如 MySQL 的 binlog)來做到同樣的事,差別在於某些資料庫直接提供了一套高階而且安全的 API,例如本文提到的 MongoDB 的 Change Streams,然後你就可以用這些 data change event 去更新 cache、search index 或是另一個資料庫,炫炮一點也可以丟進 Kafka,變成一個更通用的 stream processing 系統,峰峰相連到天邊。

不過類似的功能 Microsoft SQL Server 在 10 年前就已經提供了啊,太陽底下果真沒有新鮮事。

延伸閱讀:

mongodb.com

mitmproxy: proxy any network traffic through your local machine

mitmproxy 和 Charles 一樣,都是用來攔截 network traffic 的工具,硬派一點的還有 tcpdump 和 wireshark。不過 mitmproxy 最棒的是它自帶一套完善的 Python API(畢竟 mitmproxy 就是用 Python 寫的嘛),這樣一來可以玩的東西可就多了呢~

這篇文章簡單地介紹了 mitmproxy 的幾個用法,例如把 remote server 的 requests 導到你的 local server 和怎麼對付 certificate pinning(當然前提是你有當初綁定的那個 certificate)。

延伸閱讀:

vinta.ws

caolan/async - Async utilities for node and the browser

目前公司裡的不少 Node.js 專案都用到了 async.js 這個 library,裡頭有很多既好用又魔性的 utility functions,例如 autoInjectcargo,大家感受一下。

延伸閱讀:

github.io

@saiday

The Reality of Migrating to AndroidX

Android support library 已經被整併到 Jetpack aka AndroidX 了,往後也只會更新 Jetpack 裡的 support library,所以,我們必須轉換。

對一個行之有年的專案來說這個轉換很辛苦,有許多的 support library 依賴要處理。
作者使用 Android Studio 帶的 Migrate to AndroidX 會有非預期的更動,所以他自己提供了一個最簡單版本的 script 來改舊的 support library 的 import path,這個實用!


因為這個週刊(?)不是只給 Android developer 看的,所以跟大家分享一下,在這種依賴轉移的案例上 Google 在 Gradle (build tool) 上面加了一個 flag android.enableJetifier,當值是 true 的時候會在 build time 的時候直接改第三方套件的 binary 採用新的 library,有創意!

danlew.net

The power of key paths in Swift

我本來對 Swift 的 KeyPath 想像就是拿來做簡單的 KVC,但這篇文利用 KeyPath 語言特性做了 function composition。

大概像是這樣:
loader.load(setter(for: self, keyPath: \.items))

對呢,把 KeyPath 當成 function argument 就可以設計出有動態特性的的 APIs。現在的靜態語言真是不得了。

swiftbysundell.com

@uranusjr

Ownership Explained with Python

用 Python (主要是 iterator 行為) 解釋 Rust 的 ownership 概念,以及它為什麼好用。

Python 的 iterator 行為一直很困擾我。它在概念上很棒,但是如果你的介面需要接受任何 iterables,怎麼設計和實作防呆就是個大問題。如果你接受所有可以 iterate 的類型,就得注意實作裡不能跑它複數次,或者記得先 copy,以防使用者傳 iterator 進來。但是如果你永遠 copy,又代表你會浪費不必要的資源和時間。如果你堅決只接受 collection types,實作就會簡單一些,但是一來你必須在文件寫明,二來 API 在很多時候會十分彆扭,而且最重要的是,你還是沒辦法保證使用者不會犯錯。

Rust 的 ownership system 代表你可以放心的使用任何一種設計,讓編譯器負責剩下的事情。如果你接受 iterators,它會發現你有沒有不小心重複 iterate;如果你接 Vec 之類的類型,它也會阻止使用者亂搞。我還在思考 Python(和其他動態語言)有什麼好方法可以借鑑這個特性,希望能想出個合理的解答。如果你有什麼好想法,也麻煩跟我說一聲。

paulkernfeld.com

When does white space matter in HTML?

如果我剛學做網頁的時候就有這篇文章該有多好。

medium.com

工商服務

企業數據搜索分析利器:Elastic 大解密(台中場)

常常 on-call 被公司叫回去救火? 還是老闆說了想要發展大數據轉頭就把擔子丟給你?或是工作太久想要吸收新知?以上疑難雜症,就交給 CloudMile 萬里雲的講座吧!

我們即將於 11 月下旬陸續舉辦不同講座,希望能讓身為攻城師的你少一點為問題煩心,多一些經歷可以專注在開發:)

講座連發:

accupass.com

Two Legs Bad

投票指南

減少盲目投票,讓民主社會的台灣更進步!

g0v.tw


This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.

Viewing all 109 articles
Browse latest View live