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

CodeTengu Weekly 碼天狗週刊 - Issue 122 整天都在網路上看人家的文件,但還沒有自己寫過 - 文件就像是青春期的性愛幻想 - Apr 9th 2018

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

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

目前的 curator 陣容:

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

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

@saiday

APIs as infrastructure: future-proofing Stripe with versioning

Stripe 分享設計 REST API 版本的經驗跟方法。

其中最有趣的部分是 Stripe 不再主要地採用 URL 夾帶 API 版本 (v1/endpoint) 而是採用日期 (2018-04-01) 的 API 版本化方式。其原因是大版本 API 升級是痛苦的,對 API developer 跟 client developer 來說都是。

他們透過一套自己的 DSL 來描述每一個 endpoint、撰寫 version change (包含與上一版的相容轉換方法)、紀錄 version changes list。
當一個舊版的 API request 進來會從最新版的實作開始,透過 version changes list 一步一步退版本直到符合這個 request 的 API 版本。
這樣的方法就像是 DB 的 migration,只是他是倒過來的、針對的是你的 API endpoint。

有兩個很明顯的好處,不用管舊版的實作可以快速滾動升級,跟做完之後就有免費的 changelog。

stripe.com

Who will steal Android from Google?

Steve Yegge 換工作了,對前公司正常能量釋放中。開頭就來了這句:

Android’s dev stack is the world’s biggest poo sandwich.

當然,他在 Google 並不是開發 Android 的,但他對 Android 生態的觀察還是滿犀利的。特別是 Flutter 的部分:

“Oh yeah? Well you can’t compete with us, because we’re going to compete with us!” and they launched Flutter, which is a 100% serious Android development stack that competes with native Android.

結論是想要在他的新公司嘗試用 Reactive Native,畢竟這種大公司大 app 總是為了 build time 所苦。然後他也鼓勵有後端經驗的開發者學習 mobile 開發,因為現在這種全端人才實在太少了,奇貨可居。

Steve Yegge 的文筆還是那麼流暢,如果懷念他的憤怒可以看這篇的上一篇 Why I left Google to join Grab

medium.com

Nullability annotations 之亂!

最近用 Kotlin 調用 Android SDK,明明看到它的 .java 有 @Nullable 的標註,但 Kotlin 的類型推導卻給了我 Platform Type,檢查發現在 bytecode @Nullable 就被抽掉了。原因是 Android SDK 用的是 android.annotation.Nullable,這個 annotation 並不是公開的 API (AOSP Nullable)

那問題就來了,如果我要重新做人在 Java code 裡標註 nullability,我應該用哪套 package 的 @Nullable?JetBrains 的 org.jetbrains.annotations.Nullable 、 JDK 的 javax.annotation.Nullable 還是 Android 的 android.support.annotation.Nullable

先講結論,寫 Android 用 android.support.annotation.Nullable 因為 Android Studio 的 Lint 只認這個。不是寫 Android 的話就看你的 nullness analysis 工具用哪一套。

Kotlin 開發過程也苦惱過同樣的問題,Kotlin 的 null-safety types 跟對 Java 的兼容性就是魚與熊掌。務實如 Kotlin 這個語言嘗試了很多做法,最後妥協在什麼 package 的 nullness annotation 都參考,如果沒有標註,就 infer Platform Type 給你,你自己管吧。 (More Null-safety for Java 是他們不斷嘗試解決的過程)

是說,為什麼會有這麼多套的 nullness annotations?
啊,沒有錯啦,因為大家都不相容嘛哈哈哈哈

Python,你到底是在__底線__什麼啦!

Python 在變數上有許多 underscore (_) 的語法跟命名習慣,這篇解釋了這四種形式:

  • foo_
  • _foo
  • __foo__
  • __foo

對我這個剛學習的人有很大幫助。

aji.tw

@chiahsien

Technical Note TN2387: In-App Purchase Best Practices

接下來有段時間可以重新整理某專案裡頭的 IAP 相關程式碼與流程,所以找了不少參考資料,最權威的當然就是蘋果自家的文件囉。除了這個之外,底下這些也很適合參考:

我也打算把 StoreKit 包起來,讓其他地方的程式碼可以更優雅地使用它,所以也參考了其他 library 的做法,看起來這幾個算是做得滿漂亮的。

apple.com

Release 1.0.0.alpha.1 - First fastlane.ci alpha

之前曾經提過的 fastlane.ci 已經按照進度推出 1.0.0 alpha 了,它跟 fastlane 完美的整合,打從一開始就是為了 iOS/Android 開發流程打造,並且 100% 採用 MIT 授權開放原始碼,你可以自架伺服器來運行它。雖然只是 alpha 版,但已經算是堪用了,有興趣的可以玩玩看。

github.com

iOS Developers Ship 29% Fewer Apps In 2017, The First Ever Decline – And More Trends To Watch

除了標題講的那樣之外,這篇文章也提供了一些其他數據,例如使用 non-native 開發的比重有多少,以及最多人選擇的 non-native 開發方式等等。蠻有趣的一篇觀察,有些數據或許可以做為你下一個 app 開發方向的參考依據。

appfigures.com

GitHub - shuaiwang007/RAC: RAC 的常用用法,提高开发效率

在我們公司的專案裡頭,ReactiveObjC 佔了蠻重要的一個角色,所以熟悉 RAC 的各種用法是很重要的(當然不會 RAC 也沒關係啦,我們會教你!)。前幾天在亂逛網路時,發現了這個 repo,裡頭把最常用的 RAC 功能都詳細解說了一遍,不管是當作速查表或是當作新手上工補充教材,都非常合適啊!

順便追加一個速查表,裡頭包含了 ReactiveObjC / ReactiveSwift / RxSwift。

github.com

Tips to become a better Swift (iOS) Developer

很多人推崇 Swift 的一個理由是它比較簡單,但我一直認為這是一個假象。我覺得 Swift 好上手,但它易學難精,一個不小心就會寫出不優雅或是效能不夠好的程式碼。這篇文章裡頭透過大量的程式碼片段說明如何成為更好的 Swift 工程師,值得初學者參考。

developerinsider.in

SwiftTips: A collection of Swift tips & tricks that I've shared on Twitter

看完之後或許你會懷疑這真的是你平常在寫的 Swift 嗎?恩..... 真的是易學難精 Orz

github.com

@allanlei

Mastering Chaos

Josh Evans (of Netflix at the time) gave a great talk of Netflix's road to where they are now. He talks through problems they've experienced creating large distributed systems, what microservices are and are not, and how embracing chaos can affect design decisions.

youtube.com

Storing Redis values with msgpack

It's like JSON. but fast and small.

When there is a need to store data structures in Redis, the go to way is to serialize in JSON. For those cases, why not use msgpack?

Critics of msgpack, including the author themself, says it is still not as good as JSON+Compression, but for the use case of redis, there wouldn't (normally) be compression.

Seems like a straight-forward method to save on resource with limited drawbacks.

msgpack.org

ZStandard for better Compression of REST APIs

A lossless compression algorithm by Yann Collet at Facebook (also the worked on lz4) that aims to offer faster compressions and at higher ratio compared to current libraries like zlib.

The special feature in ZStandard I think will be very beneficial is the use of a pre-train dictionary aimed for the use of small payloads where the data is normally too small to generate any valuable compression context. JSON payloads from REST APIs fit this use case pretty well having many small payloads <100KB.

Having run a very simple test against our own APIs, I was looking at 20% better compression compared to gzip using a pre-train dictionary. Don't take my word for it, try it out for yourself!

github.io

工作機會

Senior Frontend Developer at Swag

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

能力需求:

  1. 精通 JavaScript、CSS 與 HTML
  2. 相容主流瀏覽器的前端整合開發經驗
  3. 前端 framework / library 的使用經驗
  4. 熟悉 React
  5. 模組化開發經驗

github.com


This RSS feed is published on https://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>