CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從 目前的 curator 名單 中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。
你也可以瀏覽一下 前幾期的內容 ,有價值的東西是不會過時的。
本期 curators:
大家也可以 follow 一下 CodeTengu 的 Facebook 和 Twitter ,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 :japanese_goblin:
這篇文章列出了許多 RESTful APIs 的最佳實踐和慣例,因為 StreetVoice 的 API 版本號最近正好要來到 v2 了,打算趁這個機會把以前亂寫的部分好好重構,順便 follow 一下比較好的做法。
說不定之後 v3 的時候可以來玩玩 GraphQL 啊~
vinaysahni.com
大家都知道,Python 除了惡名昭彰的 unicode 和 GIL 的問題之外,Python 2/3 的並存也是一大硬傷。但是就像在 Issue 1 提到的,Python 3 已經是大勢所趨。如果你要開始一個新的 project 或是正打算學 Python,也不用再機機歪歪了,至少可以直接上 Python 3.4 了吶!
這篇文章就幫我們整理了從 Python 3.0 到不久前才發布的 Python 3.5 所新增的特性和語法,大家感受一下。
migrateup.com
IFTTT 開源了一個簡單的專案,能夠讓他們的 developers 在 Mac 上迅速地把整個開發環境跑起來,主要使用了 Ansible、VirtualBox、Docker Machine、Docker Compose,做法之漂亮,非常具有參考價值。作者除了說明這個專案的技術細節之外,也提到了幾個用 Docker 當開發環境會遇到的問題和對應的解法,對於想把環境 container 化的人,這篇算是個很好的起步。
我原本是用 Vagrant 和 SaltStack 來架開發環境,但是因為這陣子 SaltStack 每次更新就弄我一次,所以最近打算連同公司的專案也都順便改成 Docker,剛好就看到這篇文章用 Ansible 來設定 Mac 開發環境的做法,還挺聰明的。畢竟我們都有 configuration management 這種工具了,實在沒有道理要寫一堆 shell script 啊,雖然 Dockerfile 說穿了也就是一堆 shell script。
P.S. Ansible 前陣子被 Red Hat 收購啦!
延伸閱讀:
ifttt.com
這篇文章的重點其實只有一個,因為 Redis 是 single thread 而且也不能針對個別的 database 使用不同的 config,所以建議的做法是: 不同用途的 Redis 就開不同的 instance,可以是不同的機器(或是在同一台機器上,但是監聽不同的 port,這樣反而可以更好地利用多核 CPU) 。
像在 StreetVoice,我們就把用來當 session backend(或 cache)的 Redis 和用來存一些 metadata 的 Redis 分別跑在不同的機器上,然後分別使用不同的 configuration,尤其是 persistence options 。
延伸閱讀:
mikeperham.com
這篇文章提到了幾個非常實用的 iTerm2 小技巧,例如 Command + F
可以搜尋螢幕上的任意字串然後按一下 Tab 鍵就直接複製,唔!差點都要嚇到尿褲子了。我建議大家直接用 iTerm2 的 Test Release ,不要用殺小 Stable Releases,尤其最近 Test 版新增了一個在每一行指令的右邊顯示 timestamp 的功能,超貼心。
至於他提到的 system-wide hotkey 的功能,我是用 Manico 直接綁定 F1、F2、F3、F4 一鍵開啟 Chrome、Evernote、Sublime Text 3 和 iTerm2,這樣更方便。
P.S. 自從升級到 OS X El Capitan 之後, XtraFinder 就壞掉了,作者到底什麼時候才要更新啊!
swiftcafe.io嚴格來說這個套件並不算是機器學習的應用,不過實在太酷了,所以我要推薦給大家!如同 Smartcrop.js 的描述所說的,它使用了一些「相當愚蠢」(fairly dumb)的影像演算法找出圖片內的「重要部份」來決定裁切圖片的最佳位置,大致演算法概觀如下:
這樣的演算法學術上就稱之為 Heuristic Algorithm ,其實就是以人類直觀的感覺去調整演算法,讓演算法的結果可以符合我們想要的結果,有時可以接近最佳解,但無法證明這樣的演算法可以得出最佳解,也因此 Smartcrop.js 才會說自己是使用一個 fairly dumb 的演算法了!各位碼農可以看一下 線上火力展示 來感受一下究竟 dumb 不 dumb!
github.comPDFx : Extract metadata and URLs from PDFs, and download all referenced PDFs - 下載論文所有的 Reference PDF
閱讀演算法或機器學習相關論文做研究的時候,往往需要追朔閱讀一些相關論文以補足背景知識的不足,PDFx 這個工具可以使用簡單的指令來一次下載論文中所有的 Reference PDF,可以節省不少自己手動複製、貼上、然後下載相關論文的時間!PDFx 大致提供以下特點:
其實如果不用在下載論文這方面,也可以用來做成爬蟲工具抓資料,也許可以做一些研究者社會網絡相關的研究~
metachris.com
各位碼農大概都有這樣的經驗,當系統搬上雲端的時候,檔案系統存取這部分的程式碼難免會有修改的必要。如果檔案選擇存到 AWS S3,那就需要使用 AWS 提供的 API 來存取檔案。在 AWS PHP SDK 2.3.0 之後的版本提供了 PHP Stream Wrapper 這樣的機制,讓 PHP 開發者可以直接使用原本 PHP 檔案處理的相關函式來存取 S3 上面的檔案,支援包含 fopen()
、 file_get_contents()
、 filesize()
等函式,更多可用函式可看 這邊 ,這樣幾乎就可以無痛將檔案系統搬到 AWS S3 了啊!不過如果為了未來可能會有轉換檔案儲存解決方案的一天,建議還是使用多一層中介軟體來處理相關程式,比如在 PHP 可以使用 Flysystem ,這樣未來就可以任意切換存到 Flysystem 有支援的檔案系統而不用改到任何程式碼。
身在碼農界,總是會覺得自己所學還不足,尤其看到身邊的強者,無論年長的或年輕的,就會激發自己想再變強的欲望。但實際上要怎麼做呢?本篇文章提出了一些論點:
這些論點平心而論是有道理的,但最終自己可以做到幾點呢?心法終究是心法,勞苦功高的碼農們還是要動手做下去執行才能真正體會囉~
延伸閱讀:
jianshu.com
SoundCloud 的工程師 Fernando Cejas ( @fernando_cejas ) 介紹 Clean Architecture 基礎概念以及如何套用在 Android App 上。作者在 後續的文章 裡進一步說明了一些實作上的細節與(當代流行)技術:
Coursera 的 Android 工程師 @rich123 以 MVC 為起點逐步 演化 、逐一整理不同元件的角色與責任,然後歸結到 Clean Architecture 的全貌。適合有點 MVC 基礎或喜歡從實作理解概念的人。
speakerdeck.comTL;DR 簡單扼要地介紹 Flux 架構,開發任何前端平台都可以參考。
作者覺得以 Web App 為出發點的 Clean Architecture 對 Mobile App 來說太複雜了;Mobile App 通常沒有 Web 後端這麼複雜的業務邏輯,需要的只是一個清楚的 code 組織方式。而 Facebook 提出的 Flux 是一個不錯的選項。
作者還提及了一般 Flux 文章比較少提的「API call (或其他 async 操作)該由誰處理?」問題:
lgvalle.xyz
列舉 JavaScript 常見的不良寫法、說明原因並提供檢測工具(或規則)。可以直接拿來當團隊開發指南的基礎。
其中列出的不良寫法,包括:Convoluted Code、Copy Paste Code、Switch Statement、The This Abyss、Crisp Concatenation、jQuery Inquiry、Tempermental Timer、Repeat Reassign、Inappropriate Intelligence、Incessant Interaction、Anonymous Algorithm、Unconfirmed Code、Two Way Data Binding。
elijahmanor.com
作者比較了 Node.js 處理背景工作(像是寄信)的幾種方式,不過主要還是要推廣 resque 和 node-resque :