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
- @wancw - 求職中的 Full-stack Developer,意者內洽
- @adamp33 - 看棒球才是正職,副業是前端工程師
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien - Nelson
- @mingderwang
大家也可以 follow 一下 CodeTengu 的 Facebook、Twitter 或 GitHub,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 👺
致力於解決開發者之間的資訊不對稱
@saiday
How I Start. Go RESTful API backend
身為一個職業的 Mobile app developer 在工作之餘做自己的 side projects 常常會需要 backend service 的輔助,許多人選擇 Parse 當作 app 依賴的後端,Parse 很好,高效又快速還提供很多實用工具。
不過像我這樣的閒人,我是選擇學 Go 自己寫 backend,會做這個選擇是因為反正 side project 也賺不了錢,那不如利用實際專案來學點東西,而且 Go 用來寫一個 API backend 建置上非常簡單能犯的錯誤也相對少,因為是靜態語言 deploy 到 server 上也是簡單粗暴。
這篇教學簡單且算是詳細,有許多一個 Go 新手透過 net/http package 寫 API backend 應該知道的資訊。
如果你還沒寫過 Go,對岸有一位網友整理了他的學習筆記 《Go 学习笔记》,裡面完全沒有廢話,只要熟練一個以上程式語言的人看起來應該都沒有問題。最近又有人將 《Go 学习笔记》 整合 wide [1] 整理成可以直接在 web 上編寫執行的版本 Go 边看边练 -《Go 学习笔记》。
註:wide 是中國開發者開發的 Web-based IDE,超秋的
Higher-order functions in Swift
當一個 function 傳入的參數也是 function 時我們就可以說它是 higher-order function,這篇文介紹 Swift 的標準庫中最常被使用的 higher-order functions: reduce
, filter
, map
, flatMap
。
Swift 引入了不少 Functional Programming 的理念,說到這個,Functional Swift 在近期已經將內容更新到 Swift 2 了。
Server-side Swift - Perfect
One language to rule them all.
終於出現啦!在 Swift 宣布開源的那天,就開始幻想用 Swift 寫 backend 並且跑在 linux 機器上。 而現在 Perfect framework 已經支持跑在 ubuntu 15.10 上面了,看了一下他們的 samples 目前還在超早期的階段,比較完整的專案是 Tap Tracker,可以看出 server-side 設計的方式。
這是一個值得關注的專案。
Android’s multidex slows down app startup
因為 Android 開發上有 65k 方法數上限,如果 code base 大到這個程度的話,最終我們得在 Gradle 設置啟動 multidex 來解決,但這篇文指出開啟了 multidex 的 app 啟動時間會變慢並提供了作者的解決方案:在 app 結束前掃一次 main dex 以外的 dex file,手動把在啟動時期需要的 class 搬到 main dex,實在是很土炮很聰明!
中文翻譯版本:Android的multidex帶來的性能問題-減慢app啟動速度
The build.gradle ubiquity
Genymotion 的技術部落格介紹了他們內部專案使用 Gradle 的方式,在 build.gradle
用 apply from:
來整理跟採用對應的 Gradle scripts、在開發機器上使用 local.properties
存敏感資訊、在 CI server 上透過設定 gradle.properties
來存敏感資訊。
@mingderwang
A 101 Noob Intro to Programming Smart Contracts on Ethereum
這篇介紹新手寫 Ethereum 的應用程式, 可以說幾乎是一個完整的入門介紹。
它從基本概念, 什麼是 cryptocurrency, 什麼是 Proof of Work 教起, 到介紹所有 Ethereum 的專有名詞, 包括 Ether, Wei, Gas, DApp 等。進而教你如何利用 go-ethereum (geth), python (pyethereum), 或 C++ (cpp-ethereum) 等版本的 client 端程式, 在你的電腦上開一個 node 來與整個 ethereum 網串連起來。開始可以寫 code...
之所以類似 Ethereum 的網路能得以運作, 要靠一些人願意用 Proof of Work, 也就是所謂的 "挖礦" (mining) 的方式, 來保持運作所需要的動能。因此在每個 Ethereum 虛擬主機 (也就是 node) 上執行每一個儲存或指令, 都會消耗掉一些能量, 也就是要付出一些代價, 我們可以用 Gas 之類的東西來支付。這個網路就會不斷的幫我們執行這些交易或所謂的 Smart Contract, 也就是一種 DApp。
文章中, 也完整的介紹了如何用一種類似 JavaScript 的語言 "Solidity", 來開發 DApp 程式, 進而用 solc 編譯器, 先把程式編譯成二進位碼, 再透由 web3.js API 也就是 geth 的 JavaScipt Console 裡執行 Web3 指令, 送至網路中, 讓別人使用。
如果你只想測試你的程式, 也可以用 testrpc 自成一網, 就不需要花 Gas 或真的 Ether (虛擬幣) 來執行。最終, 你也能將 Ethereum 網路程式應用整合到你網頁裡, 讓使用者更容易使用你的 Smart Contracts。
Introducing a generic dynamic mapping template for ElasticSearch
天龍書局終於看到介紹 ELK 的書了, 雖然是簡體版, 但可以看出它在國外已經大量被使用了, 才有人開始出書。這裡介紹一篇使用 Elasticsearch 的小技巧, 也就是如何使用 dynamic mapping template 來改變 Elasticsearch 自動 mapping 的規則。
如果還沒裝 ELK 的人, 可以參考 DO 的 安裝 ELK 教學 先安裝好 ELK, 再做 mapping template 的測試。如果想了解爲何要學 ELK, 可以看 Building for Production: Web Applications — Centralized Logging。
Kubernetes 如何使用 NFS Volume 之範例
2015 年你已經學會了最夯的 docker, 2016 年你一定想如何管理你的 dockers, 如何跨平臺使用你建好的 dockerized projects, 甚至於如何應用到 production 上。
替自己或公司蓋一個 kubernetes 1.1 的環境, 應該是最好的開始。但你第一個會碰到的問題就是 docker 的 volumes 在 kubernetes 跨主機的環境該如何使用? 這 kubernetes 手冊介紹最簡單的方法, 就是用一個 NFS 來讓目錄可以共享。
當然, NFS 不是唯一的解, 還有 Persistent Volumes, Ceph Volumes, GlusterFS, iSCSI , hostPath, downloadAPI 等, 當然使用雲端 container engine, 各家所提供自家的儲存方式就各有不同 volumes。但最基本的 Persistent Volume 或 NFS 應該都有。切記, 你 containers 可能跨到別臺主機, 所以最好不要用 hostPath, 因爲當 containers 被自動分配到別臺主機執行時, 就看不到原來那臺主機的目錄了。
@kako0507
React Components, Elements, and Instances
相信很多有玩過 React 的朋友可能會對 Components, Elements 與 Instances 有些混淆,這篇文章詳細介紹了它們之間的關係:
- Component: 分為 function 和 class 兩種方式,不過目前使用 class 實作才可以簡單享有 React 強大的 lifecycle 。
- Element: 是用來告知 React 如何來畫畫面,必須帶入 element 的 type 與 properties ,是輕量的 Object, 可以很容易的 traverse,一旦被創建,將不可更改。
- Instances: 最後產生的 DOM element,撰寫 React 並不需要處理 Instance,所以文章內並沒有探討太多。
Flexibility: 在 IE 8 也可以使用 CSS3 flexbox
在做 CSS 排版的時候, flexbox 在處理同樣的問題時可以更簡單的呈現 Layout , 但因為是 CSS3 的特性, 如果需要處理 IE 相容性,可能就需要放棄這強大的功能, Flexibility 是一個 CSS polyfill ,利用 IE 的 currentStyle 實作,讓開發者可以簡單的在 IE 上使用 flexbox 。
Introducing Background Sync
Background Sync 是一個新的 Web API,用來延遲使用者行為,直到網絡連線穩定。這樣可以保證實際發送的資料就是用戶想要發送的。
使用者在瀏覽網頁時,常常浪費時間再等待 Request ,不佳的網路環境常常會影響使用者體驗,如果手機與平板的使用者發送 Request , 就必須要停留在瀏覽器等待 Server 回應,這時候有了 Background Sync ,就可以解決需要再同個頁面等待的問題。
Background sync demo in Chrome
Lebab: Transpile ES5 code into ES6 live!
最近很多前端人都喜歡使用 Babel 把 ES6 code compile 到 ES5 版本以提高瀏覽器的支援度, Lebab 則是個有趣的工具,剛好像反,它會將舊的 code compile 到 ES6 ,這裡有線上版本。
JavaScript block scope 變數宣告: let 與 const
JavaScript 在 ECMAScript 5 之前並不支援 block scope ,若想得到類似 block scope 的效果, 常常都需要透過 Immediately-invoked function 來達成,且因為 hoisting 的特性,會讓程式的順序產生混淆,所以在 ECMAScript 6 版本,除了 global variable 外,都建議改為 let 與 const 宣告。
Two Legs Bad
立委投票指南
1 月 16 日就要選舉啦,我相信大家對於要投給哪一組總統候選人,心裡都應該已經有個底了。不過,如果你是那種「完全不想投給民進黨,卻又覺得想投給國民黨的自己似乎有點可恥,所以乾脆把票投給宋楚瑜好了(可是心裡還是有點掙扎)」的人,這裡告訴你一個解套的辦法:那你就投廢票啊。
至於立委選舉,如果你也還沒決定要投給誰,你可以參考看看這一份由 g0v 製作的「立委投票指南」。你可以在上面看到每一位立委對於各個法案的表決,哪些人反對、哪些人贊成。例如底下的這兩項表決,大家可以點進去感受一下:
2016 各政黨重視勞工權益評分表
這一次的選舉你會有三張選票,一張投總統、一張投立委、一張投政黨。如果你還沒決定要把政黨票投給哪一個政黨,你可以看看這一份「前三大政黨資產比較表」和「2016 各政黨重視勞工權益評分表」,然後深切地感受一下自己無產階級的身份、每個加班但是沒有加班費的夜晚和那些你知道你這輩子都不可能買得起的房子,再來好好地決定你要投給哪一個政黨。
以上來自 @vinta 的分享。
This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.