Hello World
CodeTengu Weekly 碼天狗週刊
CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。
你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。
以下是目前的 curator 陣容:
- @vinta - I failed the Turing Test - 喜歡科幻小說,最近在讀「平面國」
- @saiday - Imnotyourson - 捷運飲食推廣委員會
- @tzangms - Oceanic / 人生海海 - 衝動型購物
- @fukuball - ImFukuball - 徵 Android 工程師,意者內洽
- @wancw - 繼續寫 LeetCode 可能會生出一套 Unit Test 框架
- @adamp33 - 看棒球才是正職,副業是前端工程師
- @mingderwang
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - Nelson
- @hiroshiyui - 非典型司書
- @uranusjr - Smaller Things - 聽說這是技術週刊,可是我不愛談技術怎麼辦
- @kkdai - 態度萬歲 - 喜歡 Golang 的略懂工程師
大家也可以 follow 一下 CodeTengu 的 Facebook、Twitter 或 GitHub,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 👺
致力於解決開發者之間的資訊不對稱
@wancw
OrmHate
上期的副標讓我想起這篇文章,ORM 派與(半)手刻 SQL 派的爭論一直是 IT 界不停歇的週期性熱門話題。但到底為什麼 SQL/ORM 這麼難用?不如讓我們重溫一下大師的看法。
Martin Fowler 認為 Database(Relational) ↔ Memory(Object) 間的雙向對映本身就是一個非常複雜的問題。當你希望一套工具可以適用各種狀況時,自然會得到一個龐大肥腫的 ORM 工具。例如同樣解決雙向同步的 MVC 框架亦常有類似問題;更何況因為跨越系統邊界而更複雜難解的 object-realtional 問題。
關於要不要用 ORM,大師的建議如下:
- 原則上 不要自己刻 ORM。畢竟這問題太複雜,沒必要讓自己再深陷泥沼。
- 或是分離資料庫讀/寫,把雙向同步問題轉成單向資料流、需要的時候直接使用 SQL。這部分可以參考 Command Query Responsibility Segregation 模式。 (是否覺得把 雙向同步問題 轉成 單向資料流 這方法有點熟悉?這正是 Flux 的特點)
衍伸閱讀:
Java 8 in Android N Preview
各位,我們終於可以在 Android 上用 Java 8 啦!
這篇是實際在 Android N Preview 上使用 Java 8 的心得文。
不多說,各位自己看吧。
Valve/fingerprintjs2: Modern & flexible browser fingerprinting library
從本期開始我想介紹一些個人覺得有趣的專案。
(順便清一下自己的 study list)
fingerprintJS 根據瀏覽器特性(User-Agent、螢幕解析度、安裝的 plug-in 等等)算出 hash 值,不透過 cookie 就可以識別不同的使用者。(但由於手機瀏覽器的特性,很容易得到接近的 fingerprint 值)
P.S. 本來要介紹的是 Fingerprintjs,剛剛才發現已經被 Fingerprintjs2 取代了。
Head Hunter不會告訴你的事情!
工作一段時間之後,工作機會的來源幾乎都是靠朋友跟 Head Hunter 介紹。不像朋友介紹,Head Hunter 其實只是在商言商的仲介,先搞清楚這點才不至於吃虧。
作者建議如下:
對 Head Hunter 的認知:
- 別把 Head Hunter 當媽,先清楚他們的服務內容
- 顧問費用是建立在年薪的計算基準
- 在他們與公司的合作契約中,大多不會討論勞動條件
透過 Head Hunter 找工作時,仍應:
- 個人對這公司先做研究
- 列一份勞動條件問題表:工作時間、加班補休、請假規則、賠償條款、合約終止注意事項
(其實這些是去任何公司面試時都該做的事前準備)
延伸閱讀:
- 不是有期限的合約就是定期契約喔,不要被呼攏了。請看 一年一簽很無聊,懂嗎?那統統叫不定期契約啦!

本期 IG - GUNDAMSTAGRAM (@gundamstagram)
雖然食色性也,但也不能一直貼美女照片。這次分享一下不同調性的 Instagram 帳號。
這個帳號專門貼鋼彈模型照片,造一台鋼彈應該是每個工程師的夢想吧?!(握拳)
@mingderwang
21st-century cowrie shells - 21世紀的"貝"幣
智能合約 (smart contract) 與數位代幣 (token) 的應用, 會從少數人開始使用, 比如說是開發者, 進而在公司內部開始應用, 例如年終獎金, 只發比特幣, 不再發現金了, 最後還是會變成每個人都能發行自己的 tokens; 就像網站一樣, 一開始政府與研究單位先有, 再來才是各行各業, 最後演進到部落格, 每個人都可以很簡單的架設自己的網頁。
但網頁是在 1993 NCSA 發明了 Mosaic 瀏覽器之後, 才讓一般人開始對 Internet 覺得好用而感到興趣, 也才有今天所有的一切, smart phones, web apps 等等, 但卻花了 20 年以上的時間才被所有人類接受。不過智能合約或許不必那麼久, 大概只要兩三年的時間, 就會被廣泛應用。所以當年 web 瀏覽器可以說是 killer app, 改變了人類的生活; 而 2016 的今天, 下一個 killer app 是什麼?我覺得是 Wallet ” 電子錢包“, 它是你跟未來數位生活的介面, 就跟瀏覽器是你跟 Internet 的介面一樣, 你可以研發一個萬用的“電子錢包", 可以跟當年 Netscape 公司一樣, 再一次改變世界!
但切記, 當有了 smart contracts 的應用, 你的錢包就不只是錢包, 就像 web 瀏覽器不再只是拿來瀏覽網頁。
CodeTengu Weekly
Using 2 factor authentication for SSH
想讓你的 servers 更安全一些嗎? 最有效果的方法是把 ssh login 再增加一個 2FA (two-factor authentication) 認證 。本連結教你如何利用 Android 或 iOS 手機上的 Google Authenticator 軟體幫你每一分鐘產生一次新密碼, 再加上你原本 ssh 的 password 就更加安全了。
同樣這個 2FA 方法也可以用在 Amazon AWS 帳號認證 , 還有常被用來當 數位錢包的身份確認, 當然 Google 的帳號也可以用 Google Authenticator 來做 2 - 步確認。所以同一個 2FA 軟體, 到處都可以使用。
什麼是 DC/OS ?
全名是 Datacenter Operating System, 也就是 "資料中心的作業系統"。雖然名稱好像是用在 Datacenter, 但我們也可以套用在自己的公司裡, 來執行 docker containers, big data 或傳統的應用程式。它其實就是 Mesos + Dockers + GUI + CLI, 就像我以前用 Vagrant 玩 Hadoop, 或 Mesos + Marathon (用 Playa Mesos), 我們也可以用 Vagrant 來安裝 DC/OS, 瞭解它的原理之後, 再考慮是否可以導入公司資訊中心。
@kako0507
React Native: A year in review
Facebook 在今年的 F8 - Facebook Developer Conference 上宣布 Microsoft 正將 React Native 加入 Windows 生態系,讓開發者可以使用 React Native 開發 Windows PC 、 Windows Phone 、 Xbox 軟體,也會提供一些開源的工具如 Visual Studio Code 和 Code Push 上的 React Native extension ,另外, Samsung 也在實作自家平台 Tizen 的 React Native porting。
React Native 雖然是新的一套開發方式,但在短短一年內已累積龐大的生態系與許多實際上架 App。
不同於以往 "Write Once, Run Everywere" 的概念,React Native 並不是真的跨平台, 而是希望能在維持 native code 的效能下,使用同一套開發方式去實作不同平台的 App,達到 "Learn Once, Write Everywere" 的精神,而因為程式邏輯方面可以利用 JavaScript 實作,在實際開發時,iOS 與 Android App 都可以達到蠻高程度的 code sharing 。
Webpack — The Confusing Parts
自從 Webpack 出現後,Gulp 和 Grunt 漸漸地被 Npm + Webpack 取代,因為 Webpack 功能強大,本篇文章探討幾個容易讓開發者混淆的點:
Development Vs Production
- Webpack 有很多功能,有些屬於 Development ,有些屬於 Production ,有些則是共用,所以在實作上通常會分成兩個 config 檔,透過 npm 的 scripts 來 run webpack 。
webpack CLI Vs webpack-dev-server
- webpack CLI 較適合 production build
- webpack-dev-server 為 Node.js server ,支援一些方便開發的功能,如: Hot Module Replacement (HMR)
“entry” — String Vs Array Vs Object
- 光是 app 的 entry point ,就有很多種設定方式,因為支援多個 bundle file,所以可以透過 array 與 object 來指定 entry。
output — “path” Vs “publicPath”
- path 表示儲存 result 的路徑
- publicPath 用於讓 Webpack’s plugins update CSS, HTML 檔案內的 URL 。
Loaders And Chaining Loaders
- 各種不同的 loaders 使 webpack 可以 import 各個相對應格式的 file ,有些 file 需要透過多個 loader 來多次轉換才能 import 。
Loaders Themselves Can Be Configured
- loader 可以透過 queryset 的方式來設定參數
The .babelrc file
- 當 babel-loader 需要設定較多參數時,可以另外寫個 .babelrc , babel-loader 會自動讀取來設定參數。
Plugins
- Plugin 可以對產出的 bundle file 再做進一步的處理。
Loaders Vs Plugins
- Loaders 在 bundle 產生之前運作
- Plugin 則在 bundle 產生過程後運作
Resolving File Extensions
- 在 resolve extensions 加入空字串,是為了可以 import 沒有 extension 的 file 。
Functional Reactive Game Programming – RxJS Breakout
越來越多人利用 Reactive Programming 概念來撰寫 UI 程式, 本篇作者利用 Reactive Extension 實作出類似 Atari Breakout 的遊戲。
Reactive Programming 可以將任何 Event 視為 Stream 從而簡單的做操作,如果對這個領域還不熟悉,可以看看 André Staltz 的介紹
Introducing React Storybook
在開發 React 時常會將一個大的 Component 分割成許多小的 Component , React Storybook 可以讓開發者不需執行 App 獨立開發各個 Component ,直接顯示在 Storybook 上,只要簡單的步驟就可以將 Component 設定好並執行,且不會污染原有的環境,有簡潔風格的 UI 介面,支援 Hot Module Reloading ,可在各種 React App 下執行。
Random Cool Stuff
Uptime Funk - (Uptown Funk parody) - YouTube
Don’t reboot it just patch!
由 @saiday 提供
This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.