Hello World
CodeTengu Weekly 碼天狗週刊
CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每週會由三位 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到感興趣的東西,可能下一期就有了。你也可以瀏覽一下前幾期的內容。
目前的 curator 陣容:
- @vinta - I failed the Turing Test - 科幻迷,最近在讀 Wool
- @saiday - Imnotyourson - 徵 Android Developer!救我!
- @tzangms - Oceanic / 人生海海 - 靠, 買比特幣了啊!!!
- @fukuball - ImFukuball - 有新工作了,但歡迎直接挖角
- @mingderwang - Ethereum enthusiast
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - 徵有經驗的 Objective-C 工程師,快來 Twitter 私訊我
- @hiroshiyui - 歧路亡羊與中年危機的典範
- @uranusjr - Smaller Things - 我要成為錯字王
- @kkdai - 態度萬歲 Learning Deeply....
- @yhsiang
- @johnlinvc - 挑戰自動化家中電器
- @drumrick - 歡迎加入台灣 Kaggle 交流區
- @wancw
你也可以關注我們的 Facebook、Twitter、GitHub 或 Open Source 專案,有很多 weekly 看不到的內容。有任何建議也歡迎來 Gitter 聊聊。
@saiday
CocoaPods 的 use_framework! 是在 use 什麼 framework?
最近跟朋友聊到 CocoaPods 的 use_framework! attribute 時驚覺自己不清楚為什麼要用 Framework 才能讓 CocoaPods 整合 Swift project。
考察之後對 Framework 跟 Static Library 這兩種 Cocoa Touch 支援的依賴引入方式更認識了一點,跟大家分享一下。
CocoaPods 以往預設是會把依賴編譯成 Static Library,當時 Swift 不支援編譯 Static Library 所以就得用 Framework 的方式來引入,不支援的原因就是 iOS 版本沒有 Swift runtime,詳細可以參考 CocoaPods 0.36 release notes。
Framework 跟 Static Library 是兩種不同的依賴引用方式,沒有誰比較先進的問題,取決於使用情境。
但以 app 開發者來說,要特別注意 Dynamic Framework 會使你的 app 啟動時間變長,因為在 app 啟動時才由 dyld 載入 framework (參考:How we cut our iOS app’s launch time in half),開發中也需要花時間去 compile 這些依賴,如果是 Static Library 或 Static Framework 就沒這些問題。
CocoaPods 已經支援 Static Framework,也在做 Static Library 相關支援 了,用 Swift 及 CocoaPods 開發的人可以關注一下。
fastred/Optimizing-Swift-Build-Times: Collection of advice on optimizing compile times of Swift projects.
「看看我!看看我!我身體裡的怪物已經長得這麼大了哦」
Swift project 的 build time 會隨著 project 變大指數型的成長,這幾年越來越常看到大家在 building 的時候跑到 SNS 上放風。
這篇文章收錄 build time 優化的事項、介紹跟參考文章,推薦大家看一下。
裡面有提到一篇 Regarding Swift build time optimizations,大家可以感受一下 Swift compiler 在很多常見的寫法下出現的巨大效能落差。
補充一個我覺得很實用的 Xcode plugin https://github.com/RobertGummesson/BuildTimeAnalyzer-for-Xcode,讓你知道你的 functions 的 build time。
Video Processing on Android
App 的影片製作是很少看到的分享主題,這段針對 Android 的影片製作 talk 給了很好的技術選擇參考。
Android 不像 iOS 可以直接使用 AVFoundation 來處理影像編輯,除了 MediaCodec, MediaExtractor 可以幫到一些前期的忙之外,大部分的事情都要自己幹,在這種情況下,所謂的技術選擇就很重要,因為會有很多取捨。
剛好我在工作上 (StreetVoice) 也做過類似的事情,我的做法大致上跟這個 talk 提到的很接近,不一樣的地方是我多用了 OpenGL ES 畫 surface 再 encode 成影片後才做 layering, muxing。
工商:如果你有興趣的話,StreetVoice 正在徵 Android developer,趕快應徵的話還來得及把相關的功能留一部分給你做! (StreetVoice 影片製作的結果)
Diving deep into Kotlin Coroutines
Coroutine 是 Kotlin 1.1 加入的重要特性,官方的 Coroutines Tutorials 寫得很完整,建議先看一下。
而本篇文章介紹了 Coroutines 這個語言特性的實作方式,簡單說明了 compiler 的參與機制到使用的狀態機架構。
我同意 這篇文章下面留言 的說法: Kotlin 的 Coroutine 可以跟 RxJava 這類 Reactive 框架做分工,把 Threading 的事情都交給 Coroutine 做,因為它寫出來的程式碼表達力更好。把那些真正需要 pipeline 的事情再交給 Rx 就好。
補充:Anko Coroutines 是相關的 Kotlin 工具,那個產生 weak reference 的 asReference() 是個方便的 method。
如果你想要再確定 Coroutine 跟 Thread 的差異:One can think of a coroutine as a light-weight thread ...
@fukuball
林軒田教授機器學習技法 Machine Learning Techniques 第 14 講學習筆記
Machine Learning:中級
上一講介紹了深度學習神經網路,基本上神經網路林軒田老師只說明了兩講,這一講將進入一個新的 Machine Learning 演算法 Radial Basis Function Network(我個人不太覺得這個是神經網路演算法),並延伸介紹了其中會使用到的 K-means 分群演算法,RBF Network 基本上就是透過訓練資料各群中心點的距離公式對資料進行投票的一個算法。
How Adversarial Attacks Work
Machine Learning:中級
之前 Google Brain 曾經揭示任何分類(或者辨識)機器學習模型都可以用一些技巧來讓模型的辨識能力失效,這個問題在 AI 應用越來越廣泛的未來可能會成為一個嚴重的資安問題,駭客可以用這些技巧來攻擊 AI 應用,這些攻擊又可分為 Non-targeted Attack(單純讓機器學習模型失效)或是 Targeted Attack(讓機器學習模型辨識成特定結果,讓駭客可以裝成某人),本篇文章淺顯地說明了這些攻擊,目前也越來越多關於這個問題的研究了,值得了解一下。
Colorizing B&W Photos with Neural Networks
Machine Learning:中級
前一陣子有位演算法工程師 Amir Avni 在 reddit /r/Colorization 看板(這個看板是一個分享將黑白照片 photoshop 成彩色照片的看板)發表了他用 Neural Networks 訓練出來的黑白照片自動著色模型,震驚了這個看板的所有成員,包含了本文作者 Emil Wallner,於是他也照著相關論文的方法實作一遍,並把過程記錄下來。
我對他使用的 FloydHub 服務還蠻感興趣的(看起來他在那邊工作?業配文?),標榜是 Deep Learning 的 Heroku,還有 GPU 可以用,感覺很不錯啊!
How to Deploy With Deployer
PHP、DevOps:初級
應該不少人使用 Ansible 這個工具來做 deploy 吧!個人覺得真的蠻好用的。而在我看到 Deployer 時有種看到 Ansible 的既視感,也是一樣簡單易用,設定好環境之後只要下 dep deploy 就可以 deploy 了,如果發生錯誤只要下 dep rollback 就能回復上一版本,蠻酷的。
如果你的專案是用 PHP 寫的,那的確可以試試看 Deployer,至於改用 Deployer 的理由我也幫忙想好怎麼說服團隊了:
- Deployer 是完全用 PHP 寫的,不用再裝其他東西
- Deployer 文件比起 Ansible 簡單易懂多了,如果還沒導入 deploy 工具,那就先試試 Deployer
@mingderwang
Parity 錢包合約漏洞
Peter Lai 在這篇文章裡,介紹為何 Parity 多人簽章錢包 1.5+ 版有漏洞,是什麼樣的錯誤寫法,造成 7 月時被駭客偷走等值 3 千萬美金的以太幣。
其中,最近又發現另一個寫得不好的地方,就是把副程式庫的地址寫死在地址 0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4,5 天前原程式部署人卻又意外的把這副程式 kill 掉,也就是所謂智能合約的 suicide (自殺)。因此,其他用這程式的錢包,執行上都會有問題,當然錢也領不出來了。
有興趣研究或撰寫智能合約的朋友們,值得仔細研讀。也不妨自行部署一個有問題的程式,親身體驗一下錢拿不出來的感覺。
Ten interesting features from various modern languages
喜歡研究電腦語言的人,一定會喜歡 Kasper Peulen 這篇文章。
他利用幾種新語言,例如 Reason、Kotlin、Dart、以及 Apple 的 Swift,來介紹幾種特殊且有趣的程式寫法,例如 pipeline、cascade、以及 currying 等。
雖然這些語言都有點新,但這些寫法可能早在 Lisp (1958),Smalltalk (1972),Objective-C (1984),Haskell (1990) 或 OCaml (1996) 的語言裡,早已經都有了。