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

CodeTengu Weekly 碼天狗週刊 - Issue 61 大家都喜歡高測試覆蓋率,只是剛好大家都討厭寫測試 - Sep 26th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每個 curator 各自負責不同的領域。如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容

以下是目前的 curator 陣容:

大家也可以關注我們的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

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

@saiday

Testing, for people who hate testing

這一篇文章的目標族群是不喜歡寫測試的人,內容涵蓋你討厭測試的原因跟改善的方法、你應該對什麼樣的東西做測試、測試的道理。

我覺得 Hating testing less 這個段落寫得還不錯。

從這個段落做延伸,很多人在測試這件事上就是卡在連第一步都啟動不了,覺得值得測試的 module 完全是一個很難寫測試的狀態,說要測那些比較容易被測試的 module 嘛,卻又覺得測它一點意義都沒有。
我會覺得第一個測試從你覺得重要的 module 開始會比較好,即便要改寫的東西很多,但也因此才能比較好地感受測試的方法、道理跟好處。

工作了好幾年,總覺得習慣寫測試的工程師的程式風格大概就是一種樣子,而不習慣寫測試的工程師們卻有各式各樣的程式風格。

以寫不寫測試來評斷一個軟體工程師的優劣是不精準的,但我相信好的工程師都可以掌握測試帶來的優點跟影響。

PS. 王垠前陣子也寫了一篇批判測試形式主義的文章 测试的道理,風格還是一如往常地激烈,當然所有的形式主義都應該被討厭,但還是有很多人可以把測試這個工具發揮地很好的。

eev.ee

Immutable models and data consistency in our iOS App

Pinterest 分享他們將 iOS app 重新設計成 immutable models (entities) 的經驗。
主要動機是想要 models 可以 thread safe。

文章也揭露他們在 API response 跟 model initialization 之中還擋了一層 model cache,這樣的優點是可以從多個都不完整的 API response 合成出一個包含全部最新資料的 model。

重新設計後得到的 immutability object 也影響以往他們是用 KVO 來處理資料的更新,現在得改用 NSNotificationCenter 來發送特定 model 需要更新的 event。

PS. 在 app 擋一層 persistence layer 可以讓 remote API 的設計更有彈性,可以像 Pinterest 一樣塞到 cache 裡,或者是 app 自己維護一份 client 的 DB。

pinterest.com

openURL Deprecated in iOS10

iOS 9 開始,我們就必須要把 app 會使用到的所有 openURL: 的 scheme 加到白名單裡面,關於這件事,可以參考一年前的這篇 Quick Take on iOS 9 URL Scheme Changes

而這次 iOS 10 更是直接棄用了 openURL: 改以非同步的 openURL:options:completionHandler: 代替。
相信這個改動會影響大多數 iOS 的開發者。

useyourloaf.com

Make your build.gradle great again

一些 build.gradle 的小技巧,列了一些可以透過 build.gradle 處理那些能在 build time 做的事情、將那些獨立的 task 拆成不同的 scripts 再用 apply 讓主要的 build.gradle 保持精簡跟閱讀性。

有一些比較有意思的技巧:

  • Android library 庫用 jcenter 會比 mavenCentral 來得反應速度更快,作者建議大家唯一使用 jcenter
  • 如果 app 的 minSdkVersion 小於 21,可以只在 debug 的時候將 minSdkVersion 指到 21,這是 build tools 優化的一個 API level 分水嶺,可以讓 build 的速度變快

medium.com

拆轮子系列:拆 RxJava

我用過不少種的 Reactive framework,但其實一直都不明白它從 Observable 開始到我最喜歡的 onNext 中間是怎麼設計的,這篇文章對我來說是一個很好的觀念引導。

作者從最間單的 Observable.just().subscribe() 開始觀察 justsubscribe 的實作,再慢慢加入 mapobserveOnsubscribeOn

piasy.com

@kako0507

Is Your JavaScript Function Actually Pure?

本篇文章探討 JavaScript 的 Purity 、 Referential Transparency ,最簡單的解釋方式就是,將同樣的參數給同個 function 或 expression 可以保證獲得相同結果。 文內舉了一個簡單的 sum 例子探討該 function 內的行為是 pure 或 impure ,最後的答案是不確定的,必須依據 runtime 的行為,而大部分人之所以認為該例子是 pure 的,是因為對該 function 有了一些假設(如 sum 是用來加總數字的,其餘參照內文),而 functional programming 和 JavaScript 相比的好處就是讓你很容易把這些假設變成限制,進而讓行為更可預測。

staltz.com

You Might Not Need Redux

學習 Redux 前可以先評估自己是否真的需要用到這樣的 framework ,在使用 Redux 時有很多限制:

  • 使用 plain objects 或 arrays 來組成 application state
  • 使用 plain objects 來描述 state change
  • 處理程式邏輯和 state change 都必須透過 pure functions

不過不論是否使用 React ,上面這些限制都不是必要的。 如果你剛接觸 React , 應該先去搞懂 think in React ,等真的需要了,再來使用 Redux。

然而就算你沒有使用 Redux ,你也可以自己將它的精神實作出來, Redux 把「發生了什麼」與「怎麼發生的」完整的 decouple ,但每次都需要這樣做嗎?或許應該自己先權衡利弊。

medium.com

Descartes, Berkeley and Functional Reactive Programming

本篇文章從兩個西洋哲學家的理念,來探討 functional reactive programming,一開始先從一個思想實驗轉換成兩種不同的程式實作,再和 René DescartesGeorge Berkeley 的哲理一一對應,算是一個有趣的(?)切入點,有興趣可以看看。

freecodecamp.com

@kkdai

我的社群之路: 參加,參與,受到啟發與啟發別人的道路

又到了 Curator 自肥時間. 來分享一下我的研討會與社群心得給大家.

在參與研討會的演講中,其實我們會遇到很多熱情的讀者.有的甚至會來感謝講者,不過其實身為講者受到這些人的感謝.自己往往感謝最多.

很多時候,當你啟發別人的時候.其實,最受到啟發的將會是你自己.

evanlin.com

Go + Docker = ♥

Docker 界的大大 jpetazzo 寫了篇講解如何透過 Docker 而不安裝 Golang 的方式來編譯,執行甚至是跨平台編譯的相關指令. 但是有些地方需要注意:

  1. cgo 與 net : 使用 Docker-Golang 來編譯與執行 Golang 程式碼,需要注意到是否有使用到 netcgo 的部分,如果有你的 base image 可能要換成 from debian 雖然會比較大,但是就比較不會有平台上的問題.
  2. 關於使用 ssl : 處理 SSL certificate 一直都是很麻煩的事情,這裡建議透過 alpine 來安裝 root certificate
FROM alpine:3.4
RUN apk add --no-cache ca-certificates apache2-utils

github.io

gravitational/teleconsole: UNIX shell broadcasting tool

類似 tmate 有自己帶網路伺服器的 SSH console sharing 小工具.

透過一個自己建立的 SSH Public 伺服器,甚至可以提供防火牆內的使用者來分享自己的終端器介面.

此外,補充一下 原來不需要 tmate , tmux 跟 screen 就可以。

github.com

使用 gofmt 與 golint 將 snake_case 換成 camelCase

由於 Golang 還算新,所以許多人原本都是從 java 或是 python 來學 GO . 就容易在程式碼裡面看出一些蛛絲馬跡 ( 使用 python 的 snake_case 或是 使用 foo().bar().do() 這樣類似的用法.

這個工具可以幫你把 GO 程式碼裡面所有的 python snake_case 轉換成 camelCase.

golint |
   awk '/should be/{printf("gofmt -w -r %c%s -> %s%c .\n", 39, $9, $12, 39)}' |
   sh

github.com

[Podcast] Rust with Steve Klabnik

Podcast 分享 Software Engineer Daily Podcast: 由 Steve Klabnik 介紹 Rust 透過淺顯易懂的方式來介紹 Rust ,並且介紹三大 Goal:

  • Safety
  • Speed
  • Concurrency

如果你還在觀看 Rust ,針對以下三個角色講者也提出一些 Rust 會吸引你的地方:

  • 如果你是 C/C++ 的使用者
  • 如果你是 FP 的使用者
  • 如果你是 Web App 的使用者 ( Python/Ruby)

並且有介紹為何 Rust 沒有 GC 與 使用 LLVM 的優點,也有介紹到 LLVM 與其優點. 蠻適合新手聽聽看

雖然本人是熱愛 Golang 的,但是 Rust 的許多優點也是我們要好好重視的.

延伸閱讀: 王垠: 对 Rust 语言的分析

softwareengineeringdaily.com

Random Cool Stuff

fogleman/primitive: Reproducing images with geometric primitives.

這是一個用 Go 寫出來的工具,用 geometric primitives 來繪製輸入的圖像,效果蠻好的。

可以研究他的演算法或是直接拿來做一些圖片的效果。 它有一個 Twitter 帳號 @PrimitivePic 每 30 分鐘會上傳一張作品。

@saiday 提供

github.com


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


Viewing all articles
Browse latest Browse all 109

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>