Hello World
CodeTengu Weekly 碼天狗週刊
CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 都各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。
本期 curators:
- @vinta - I failed the Turing Test - 無法通過圖靈測試的程序員
- @saiday - Imnotyourson - 捷運飲食推廣員
- @fukuball - ImFukuball - 最近交了一個很正的女朋友,大家都很生氣
至於挑選出 curator 的方式從疊疊樂、脫衣麻將、電椅大風吹到俄羅斯輪盤都有可能,在可預見的未來,我們的 curator 人數應該會越來越少,所以希望各位不怕死的朋友們可以考慮來當當看 curator。
大家也可以 follow 一下 CodeTengu 的 Facebook 和 Twitter,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 👺
@vinta
Safari Books Online
Safari 是 O'Reilly Media(歐萊禮)旗下的電子書平台,包含 O'Reilly、Addison-Wesley、Apress、Manning、Packt 這幾家常見的出版社的書在上面都有。每個月 39 美金吃到飽,全站的書(包含很多 Early Release 的書)都可以看到爽,除了可以在網站上閱讀之外,也可以下載到 iOS 和 Android 裝置上看。如果你像我一樣只看電子書的話,根本找不到理由不用這個服務,因為實在太划算了。畢竟在 Amazon 上隨便買本書就不只 39 美金了。
第一次註冊的帳號有 10 天的 free trial,功能跟付費用戶完全一樣,大家可以去感受一下。它最棒的功能就是可以對網站上「所有的書」的內容做全文檢索,點進去就是直接到那本書的那個段落,整個體驗好到尿褲子。
另外,Packt 最近也有個 Python Week 2015 的活動,很多 Python 的書都在大特價。
Writing Idiomatic Python Book
這是一本教你如何寫出更加 Pythonic 程式碼(還會告訴你為什麼這麼寫比較好)的電子書,建議大家直接買 Python 3 的版本,因為其實你完全可以在 Python 2.7 使用絕大部份 Python 3 的新語法和新特性。當然,如果是 Python 3.5 才新增的 %
和 async/await
的話,那就沒辦法了。
這本書的作者就是 Jeff Knupp,知名的 Python developer,他的部落格也有很多高質量的技術文章,非常推薦。
P.S. 值得一提的是,雖然這本電子書才賣 $9.99 美元,但是作者說如果你真的負擔不起這個價錢,你就發個 email 跟他說,他就免費送你一本,完全是在做功德啊。
延伸閱讀:
- Intermediate Python - @tzangms 之前有提到過這本書
CAP 理论十二年回顾:"规则" 变了
有人說「CAP 定理」就像是分散式系統的相對論,每個人都聽過,但是能夠給出一個精確解釋的人卻不多(更不要提什麼是 Paxos 了),但是你看完這篇文章一定就會懂了。本文的作者正是當年提出 CAP 理論的 Eric Brewer。
基本上在一個分散式(分布式)的系統裡,P 是無可避免的,所以真正的問題是:一旦發生了 P,到底 C 還是 A 對你來說比較重要?作者有提到一個從 ATM 領錢的例子,我們都會直覺地認為 Consistency 對這種跟錢有關的業務是最重要的,所以 ATM 的網路一旦中斷了,就不應該讓用戶提款。但是實際上銀行還是選擇了 Availability 讓用戶能夠提款(但是限制提款金額,降低風險),然後透過事後的審計消除這個問題。
延伸閱讀:
关于 Web 安全,99% 的网站都忽略了这些
這是一篇講 web 資訊安全的科普文章,概略地介紹了 XSS、CSRF 等在瀏覽器中常見的攻擊手法,而一個主要的預防方式就是正確地使用 HTTP headers,這個部分的資訊在 DEVCORE 的技術專欄中有更詳細的解說,值得一讀。
P.S. 本文作者所任職的是一家做 BaaS(Backend as a Service,類似 Parse)服務的 startup,但是有趣的是這家公司竟然還辦了一個搖滾音樂節。
延伸閱讀:
大家都用 Docker 來幹麻?
這是我前陣子在 DevOps Taiwan 的 AMA repo 上問的問題,一直覺得很好奇,希望有相關經驗的程序員們可以來分享一下在大小團隊裡針對 Docker 的 use cases。
AMA 就是 Ask Me Anything 的縮寫,典故來自 Reddit 的一個討論版,上面會不定期地有名人或擁有特殊經歷的人現身讓網友問他或她任何問題。然後不知道從什麼時候開始,有一些知名的程序員也在他們自己的 GitHub 上開了一個 AMA repo,讓大家問他們任何問題,最近也開始有一些組織開設了 AMA。
P.S. 我越來越相信所有關於 developers 的事情最終都可以在 GitHub 上解決了。
延伸閱讀:
@saiday
Fragmented - An Android Developer Podcast
這是一個專門在聊 Android development 的 Podcast 頻道,內容很充實錄音的品質也很好。討論內容主要是針對 Android 開發上的知識、架構、工具,我聽了幾集很是驚喜。主持人是經驗豐富的 Android 開發者,可以舉出很多實際上的例子然後分析討論或是給出一些 Android 開發的 best practice。
如果不知道要從哪一集先開始聽,我覺得這兩集都很不錯:
- The Fowler Road to a Clean Architecture
- Becoming a Better Developer and Creating Successful Open Source Projects
聽說通勤的時間最適合拿來聽 Podcast 了,大家可以試試看,雖然我都是在睡覺前聽。
给 Android 开发者的 RxJava 详解
RxJava 熱大概也好一陣子了,這篇是我看過最完整的中文介紹。從基本的介紹到與 Retrofit 的結合、RxBinding 的擴充,滿滿的實戰味道。
作者文末的寫作動機我覺得有必要引言給大家參考:
與兩三年前的境況不同,中國現在已經不缺初級 Android 工程師,但中級和高級工程師嚴重供不應求。因此我決定從今天開始不定期地發佈我的技術分享,只希望能夠和大家共同提升,通過我們的成長來解決一點點國內互聯網公司人才稀缺的困境,也提升各位技術黨的收入。
Minimum Viable iOS Engineer
雖然標題是 Minimum Viable iOS Engineer,但是內容跟 iOS 沒什麼關係,只剛好因為作者是一個 iOS 工程師。作者是一個曾經會因為要學的新東西太多而焦慮的工程師最後坦然接受「是啊,我不可能學會所有的東西」並且提出他的建議「如果你有想做的事情要做而你一個人無法全部做完,那就找其他人一起幫忙」。
如果你想學的東西一直學不起來,就表示目前的你實際上沒有那麼需要它。通常上把想學的東西放到你公司的工作中是最快的方式,說到這個我就想說大家知道為什麼 RestKit 後來都不太更新了嗎,因為作者說他現在的工作沒有整 RestKit,幹!
We have reached a point with the platform where we can’t know everything. Don't feel bad if you are struggling to keep up. We all are!
How To Create an Xcode Plugin
這禮拜 @nelson 推薦了他自己寫的 Xcode plugin AutoHighlightSymbol ,一個可以高光標示 cursor 所在位置的其他 symbols 的外掛。我決定也要研究一下試著自己寫一個 plugin 看看。
大家的好朋友 Apple 是沒有關於 Xcode plugin 官方文件的,真不上道啊。這份 Ray Wenderlich 的教學是目前看來比較完整的,然後還有這份 Xcode-Plugin-Template 是一個基本 plugin 的樣板。
註:大家也可以試試看 AppCode,它的編輯器功能跟 refactor 真的很棒,還可以檢查你沒有使用到的 import,我不知道為什麼 Xcode 都出到 7 了還是沒有這麼基本的功能,而且如果你同時也開發 Android 的話不用記兩套 IDE 的快捷鍵也是一個好處。
Vim Videos - Flarfnoogins
以前我沒有 VIM 基礎,記得當時在 Xcode 裝了 XVim 之後幾度很挫折的刪了又裝刪了又裝。直到我後來習慣看 screencast 學新東西,看到那些人操作編輯器行雲流水談笑間指標滑來滑去一下選一下刪,我就會把他們的動作記起來然後去查他們是怎麼做到的,就這樣慢慢學起了一些 VI 的基本操作。
這個網站的作者也是用 screencast 的方式教你學 VIM,而且分成初階、中階、進階,大家應該都能從中學到一些東西。
@fukuball
A Tour of Machine Learning Algorithms - 機器學習演算法導覽
各位剛接觸機器學習的碼農們一定都感覺得到機器學習的演算法真的是他媽的多,所以常常讓人不知道要從哪裡開始。本篇文章建議我們可以用這些演算法的結構相似性或學習方法來分類各個演算法,如果各位碼農沒有時間仔細讀,那可以看看 TL;DR:
- Regression: linear regression, logistic regression and stepwise regression.
- Instance-based Methods: k-nearest neighbor, learning vector quantization and self-organizing map.
- Decision Tree Learning: C4.5, CART and ID3.
- Kernel Methods: support vector machine, radial basis network and linear discriminant analysis.
- Artificial Neural Networks: perceptron, hopfield and back-propagation.
了解各個機器學習演算法的結構相似性或學習方法可以幫助我們選擇對的演算法來解決問題,其實這跟 Issue 7 的 林軒田教授機器學習基石 Machine Learning Foundations 第三講 學習筆記 及 Issue 4 的 Machine Learning Map: Choosing the right estimator 這兩篇的概念很類似喔!可以複習一下~
林軒田教授機器學習基石 Machine Learning Foundations 第五講學習筆記
在第四講中我們了解了在有限假設集合的情況下機器學習是可能的,而第五講就是想要將有限假設集合可以推廣出去,讓我們在無限的假設集合裡也可以透過一些理論慢慢收斂到一個多項式集合,如此我們就可以放心的利用機器學習來解決我們所面對的一些問題。
我們目前只學到 PLA 演算法,接下來都是在證明 PLA 這樣的機器學習方法的確有理論的支持證明學習到的技巧將來會有效,需要一堆數學理論與證明,想學機器學習真的不是那麼好混的!
How to write unmaintainable PHP code - 如何寫出無法維護的 PHP 程式碼
時機歹歹,其實現在失業率一直是居高不下的,尤其是年輕人更是淒慘,根據報導今年 6 月 20 至 24 歲青年失業率高達 12.27%,所以各位碼農們如何保住自己的飯碗也是個很重要的課題。本篇文章介紹了一個永遠保住工作的暗黑兵法,那就是寫出別人無法維護的 PHP 程式碼!我真的沒想到我會在 CodeTengu Weekly 唆使別人寫出無法維護的程式碼,哈哈,換個角度想,如果知道如何寫出無法維護的程式碼,那我們其實也可以反過來避免寫出無法維護的程式碼啊!
The Beginner's Guide to Contributing to a GitHub Project - 初學者要如何參與貢獻 GitHub Project
取之於開源碼,用之於開源碼,貢獻於開源碼,我們都從開源專案中得到許多,因此也希望能為開源專案貢獻自己的一份心力。本篇文章介紹了初學者要如何參與貢獻 GitHub Project,雖然這些準則是基於 Zend Framework、Slim Framework 等開源專案整理出來,但其實都可以應用在其他的開源專案中,但記得還是要讀一下開源專案的 README 看看有沒有什麼要特別注意的地方。如果各位碼農沒有時間仔細讀,那可以看看 TL;DR:
- Fork the project & clone locally.
- Create an upstream remote and sync your local copy before you branch.
- Branch for each separate piece of work.
- Do the work, write good commit messages, and read the CONTRIBUTING file if there is one.
- Push to your origin repository.
- Create a new PR in GitHub.
- Respond to any code review feedback.
New in PHP 7: null coalesce operator - PHP 7 的新玩意:null coalesce operator
在 PHP 5 各位碼農們可以使用三元運算子來做一些判斷運算,比如 echo $count ? $count : 10; // outputs 10
,在 PHP 7 有一個新的 ??
運算子可以使用,這個運算子就叫做 null coalesce operator
,本篇文章用一個簡單的例子來說明 ??
運算子如何使用。
Random Cool Stuff

Anime in History (@AniHistory)
這個 Twitter 帳號所發佈的內容都是來自傳說中的 US National Anime Archives(美國國家檔案館的 Anime 部門)的珍貴歷史照片,在目前所揭露出來的影像紀錄中,你可能會在看到一張愛因斯坦與碇源堂的合照,或是在一張充滿歷史感的埃及金字塔的照片中發現空條承太郎與他快樂的夥伴們、在 1947 年的可口可樂的廣告文宣中看到干物妹小埋,也可能在一幅 40 年代的拉斯維加斯的街景裡看到一旁的大樓上閃著的是笑臉男的霓虹燈。
這下子我們終於可以確定,歷史上第一位獨自飛越大西洋的女飛行員 Amelia Mary Earhart 的真實身份其實就是風之谷的娜烏西卡。
由 @vinta 分享。