Hello World
CodeTengu Weekly 碼天狗週刊
如果命運的齒輪沒有出差錯,CodeTengu Weekly 都會在 UTC+8 時區的每個禮拜一 AM 10:00 出刊。每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。當然你也可以瀏覽一下前幾期的內容。
目前的 curator 陣容:
- @vinta - I failed the Turing Test - 科幻迷,但是最近在玩 God of War
- @saiday - Imnotyourson - 電量給我這種人用就是一種浪費
- @tzangms - Oceanic / 人生海海 - 最近真的都在玩薩爾達
- @fukuball - ImFukuball - 有新工作了,但歡迎直接挖角
- @mingderwang - Ethereum enthusiast
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - 》〉》我們要找 iOS 工程師《〈《
- @uranusjr - Smaller Things - 今年 PyCon Taiwan 在台北和高雄都有開 tutorial 喔。Shadowverse: uranusjr
- @kkdai - 態度萬歲 - Learning Deeply....
- @yhsiang
- @johnlinvc - 挑戰自動化家中電器
- @drumrick - 歡迎加入台灣 Kaggle 交流區
- @wancw
- @allanlei
你也可以關注我們的 Facebook、Twitter、GitHub 或 Open Source 專案,有很多 weekly 看不到的內容。有任何建議也歡迎來 Gitter 聊聊。
彷彿致力於解決開發者之間的資訊不對稱
@chiahsien
The Laws of Core Data
Dave Delong 最近寫了一篇文章說明要怎麼「正確」使用 Core Data,可說是字字珠璣句句血淚,在他的 Twitter 上也有一連串的討論,有在用或是打算要用 Core Data 的人一定要看看。我覺得最重要的就是第一條:「Do not use Core Data as if it were a database, Core Data is an “object graph and persistence framework”」。
話說回來,很多時候你並不需要 Core Data,或者你需要的其實是資料庫,那你就有很多其他的選擇,例如 FMDB 或是 Realm。
Dealing with Dates
除了 Core Data 之外,另一個時常困擾 iOS 開發者的難題大概就是日期處理吧。這一篇文章很詳細的說明了什麼叫做「日期」,它有哪些重要的元素,以及要如何正確的顯示、計算、傳遞日期。
Wrestling with a Monstrous Xcode Project – GO-JEK Product + Tech
如果你不知道 GO-JEK 是什麼的話,我建議你先看過這篇詳細的介紹,然後你就會明白 GO-JEK 是怎樣的一個龐然大物。因為它的業務觸角太龐大,加上日積月累的程式碼,GO-JEK 的專案編譯一次要耗掉 30 分鐘。為了解決這個讓人難以接受的問題,它們對程式碼進行重構,最終的結果讓編譯時間降低到只有三分鐘,整個架構也變得更有彈性。
Delegation in Swift — Swift by Sundell
Delegate
算是 iOS 開發最常見的設計模式之一,它定義了一個委託人與被委託人之間的一對一關係。Sundell 的這篇文章解釋了 delegate 跟 closure 各自的優缺點,最後還引進了 configuration pattern 來簡化程式碼。我推薦可以同時閱讀這篇 Swift Optional Protocol Methods,會對為什麼要引入 configuration pattern 有更深的理解。
Controlling chaos: Error Handling in Swift 4 with do, try, catch, defer, throw, throws, Error, and NSError – iOS Brain
一篇很長很長很長但很有參考價值的文章,說明在 Swift 4 該如何處理錯誤。我們寫程式時應該隨時考慮到錯誤處理,這會讓日後的維護少掉很多麻煩。
@uranusjr
Go: the Good, the Bad and the Ugly
本週的專題是抱怨 Go。不是說 Go 很差 —— 它的設計團隊裡有很多實力高超的人,設計上很漂亮,也有不少很棒的想法。它的問題是和 Google 過度耦合,使得一些根本的概念上就有偏差,並且資源過度集中在「Google 需要」的改良,而不是「讓這個語言更好」的方向。
這篇大致上就是列出了作者覺得 Go 好、不太好、很差的點。如果你對 Go,或者語言研究有興趣,文章裡的細節很值得一讀,不過我想另外講一個,就是如果你看文中列出的章節,就會覺得這些優缺點都有跡可詢。Google 想要讓員工能快速上手,學完就能做出貢獻,而且做出來的產品有一定水準,所以 Go 十分易學,強調執行速度,且有完整的標準庫,尤其對多工、檔案處理、網路處理的功能特別完整。另一方面,套件管理?不需要,因為 Google 內部是用 monolithic repository,所有函式庫都在你的 code base 裡。客制範型?不需要,因為我們有用到的都內建了,不會有其他需求。社群就是 Google,其他人? ¯\_(ツ)_/¯
Go 有許多很好的設計,但是如果你想做的事情和 Google 不完全一致,就註定要撞牆。比起例如 Rust 和 Swift 之類,雖然他們後面也是有 corporation backing,但是 Go 社群就有點孤兒感。
Go 有 Generics,只是 Google 不想給你用
最常聽到 Go 開發者和擁護者對 Go 沒有 generics 的辯護就是這是個 design choice,雖然主流語言有這個東西,但我們覺得這其實不好,所以你應該用 OOXX 取代。喔是喔,那為什麼 Google 搞到最後還是自己實作了一樣概念的東西,只是因為沒有語言支援,然後用 preprocessor hack 進去 ¯\_(ツ)_/¯
(我沒研究,不過聽說 Kubernetes 裡面也有類似的 code generation tool。)
If you look closely, those aren't angle brackets
另一個(不是 Google)用 preprocessor hack「解決」generics 問題的人。他在 Reddit 上分享了怎麼平行化 Enjarify 的文章,被問了這個問題:
不好意思,可以為我解釋一下這個 Go 語法嗎?
type ImmutableTreeListᐸElementTᐳ struct {
我以為 Go 沒有 generics?
以下回答:
確實沒有。這是一個模板檔案,我用搜尋取代來產生三個單形 Go 檔案。
如果你仔細看,那其實不是三角括弧,而是來自加拿大原住民音節文字區塊的符號,Go 允許在 identifiers 使用。以 Go 的角度而言,這就是一個很長的 identifier。
如果你為人類制定過於嚴苛的規則,只會促使讓他們發明出更糟糕的方式達到目的 ¯\_(ツ)_/¯
Notes on structured concurrency, or: Go statement considered harmful
當然 Go 也是有優點,其中 go
syntax 也是不少人會舉出來的例子。不過它似乎也不是那麼好。用一個關鍵字切換 synchronous/asynchronous 實作確實是個很好的語言特點。問題在於,Goroutine 並不只是 concurrent,而是 parallel —— 被 go
的函式會與接下來的程式平行執行,而非一般語言 async-await 的(單執行緒)異步。
在這篇文章中,Python 套件 Trio 的作者試圖解釋,為什麼它使用了一個叫做 nursery 的概念。用 Trio 的說法:
[Y]ou can’t start a child task unless you’re prepared to be a responsible parent.
go
語法加上 channels 的管理模式(順便澄清,為 channels 提供語言層面整合是優點無誤),在本質上就和 callback-based concurrency 程式一樣,是類似 goto 的概念。這代表你的程式流程會在各區塊之間跳轉,而非線性。不論是 go
還是 async-await,都是為了解決邏輯不斷跳轉而產生;在單緒異步中,因為一次還是只能做一件事,問題就此解決,但是 go
由於隱含 parallelism,就變成解決了邏輯上的線性,卻犧牲執行上的線性。
@drumrick
2018 Google I/O 發佈的 100 件事
本週 2018 Google I/O 強勢登場,如果你跟我一樣沒有熬夜看轉播沒有關係,Google 台灣官方推出懶人包,連標題都相當農場,看到有興趣的主題,再去播放清單找來看就好了。ProductHunt 的 Twitter 幽默地改了一張圖來總結這次 2018 Google I/O。
Facebook 2018 開發者大會
除了 Google,月初 Facebook 也舉辦今年的開發者大會,在人工智慧方面也有諸多進展。
- PyTorch 1.0 發佈:四月就傳出 Caffe2 併入 PyTorch,如今 PyTorch 1.0 挾著 Caffe2 以及 ONNX 登場,力求從 prototype 到 production deployment 能一條龍完成。在 production deployment 方面,一直都追不上 TensorFlow EcoSystem 也是 PyTorch 使用者一直以來心中的痛。
- PyTorch 1.0 也包含了一些語法上的變更、更好的 Windows 支援、以及開源的 ResNet3D 模型和 NLP 套件 translate。
- ELF OpenGo:ELF 是用 PyTorch 實作的強化學習遊戲框架, ELF OpenGo 實作了 DeepMind 的 AlphaGo Zero 以及 AlphaZero,在韓國舉辦測試對弈中取得 14-0 全勝的戰績。
- 另外,Facebook 用超大量的 Instagram 的圖片以及 hashtag 訓練模型,在 ImageNet 資料集上取得了成績的新高。
除了人工智慧,當然其他主題也是內容豐富,請參考相關連結
lobe:主打行動 App 的視覺化介面、自動化機器學習服務
在 MLaaS 百家爭鳴的時代,AutoML 已經是基本,從 A Neural Network Playground 開始到 Teachable Machine 已經看到視覺化編輯的可能,只是介面還是沒那麼人性化。這次看到 lobe 除了完全不用寫 Code 的介面外,還有就是主打可以輸出 TensorFlow / Keras / CoreML 的模型,直接在 App 裡做預測。目前專案在 Beta 封測的階段,可惜我申請了還沒收到邀請,後續有機會也會實測看看,先介紹給大家,有興趣的也可以申請嚐鮮。
CatBoost vs. Light GBM vs. XGBoost
這是一篇由 fast.ai 創辦人 Jeremy Howard 所推廣的廣告文,雖然我們處在 Deep Learning 稱霸的時代,但有時候 boosting 還是很好用的,它不用 GPU,而且它快。作者用 CatBoost 參加 2018 Woman in Data Science Datathon 獲得前十名,不過因為比賽已經關了,所以文中的資料是用 Kaggle 上另一個飛機延誤時間的資料集。都說是廣告文了,結論當然是 CatBoost 效果好訓練時間短,可以納入未來做 Boosting 的新選擇。
IKEA 演算法說明書
一個有趣的小網站,用 IKEA 說明書的風格,解釋演算法的過程,目前只有八個演算法,希望未來會越來越多。
工作機會
Senior Backend Developer at Swag
薪資:年薪新台幣 100 萬元以上。
基本條件:
- In-depth knowledge of Python
- Experience with Python web frameworks, ie. Flask, Django, or Tornado
- Utilized work queues for background processing
- In-depth knowledge of MongoDB, Redis, and Kubernetes
- Excellent understanding of HTTP
- Experience developing REST APIs
iOS Software Engineer at EscapeX
薪資 - 65000~100000 x 14,還可以談更高
福利 - 到職第一年即享有 7 天特休假 (依到職比例給假),到職滿一年即享 10 天特休假 - 團體保險、健康檢查、員工旅遊、公司聚餐
要求 - 熟悉 Objective-C 或 Swift - 熟悉 iOS 開發常用的 libraries 跟 tools - 三年以上工作經驗
加分 - 有想法並且能清楚表達想法 - 不用字幕可以看懂 WWDC 或其他 Conferences 的影片
This RSS feed is published on https://weekly.codetengu.com/. You can also subscribe via email.