转载

Issue 14 如果 Java 真的有 Garbage Collection 的話,大部份的程式應該在剛開始執行的時候就把自...

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從 目前的 curator 名單 中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。

你也可以瀏覽一下 前幾期的內容 ,有價值的東西是不會過時的。

本期 curators:

  • @vinta - I failed the Turing Test - 無法通過圖靈測試的程序員
  • @fukuball - ImFukuball - 最近交了一個很正的女朋友
  • @wancw - 現在跟同學聚餐只能約親子餐廳了

大家也可以 follow 一下 CodeTengu 的 Facebook 和 Twitter ,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊一聊,歡迎亂入 :japanese_goblin:

Issue 14 如果 Java 真的有 Garbage Collection 的話,大部份的程式應該在剛開始執行的時候就把自... @vinta

Best Practices for Designing a Pragmatic RESTful API

這篇文章列出了許多 RESTful APIs 的最佳實踐和慣例,因為 StreetVoice 的 API 版本號最近正好要來到 v2 了,打算趁這個機會把以前亂寫的部分好好重構,順便 follow 一下比較好的做法。

說不定之後 v3 的時候可以來玩玩 GraphQL 啊~

vinaysahni.com

What's REALLY New in Python 3

大家都知道,Python 除了惡名昭彰的 unicode 和 GIL 的問題之外,Python 2/3 的並存也是一大硬傷。但是就像在 Issue 1 提到的,Python 3 已經是大勢所趨。如果你要開始一個新的 project 或是正打算學 Python,也不用再機機歪歪了,至少可以直接上 Python 3.4 了吶!

這篇文章就幫我們整理了從 Python 3.0 到不久前才發布的 Python 3.5 所新增的特性和語法,大家感受一下。

migrateup.com

Developing with Docker

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/dash - 這個就是 IFTTT 開源的專案

ifttt.com

Storing Data with Redis

這篇文章的重點其實只有一個,因為 Redis 是 single thread 而且也不能針對個別的 database 使用不同的 config,所以建議的做法是: 不同用途的 Redis 就開不同的 instance,可以是不同的機器(或是在同一台機器上,但是監聽不同的 port,這樣反而可以更好地利用多核 CPU)

像在 StreetVoice,我們就把用來當 session backend(或 cache)的 Redis 和用來存一些 metadata 的 Redis 分別跑在不同的機器上,然後分別使用不同的 configuration,尤其是 persistence options 。

延伸閱讀:

  • Redis, another step on the road

mikeperham.com

iTerm - 让你的命令行也能丰富多彩

這篇文章提到了幾個非常實用的 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

Issue 14 如果 Java 真的有 Garbage Collection 的話,大部份的程式應該在剛開始執行的時候就把自... @fukuball

Smartcrop.js : Content aware image cropping - 一個使用愚蠢演算法的內容感知截圖程式

嚴格來說這個套件並不算是機器學習的應用,不過實在太酷了,所以我要推薦給大家!如同 Smartcrop.js 的描述所說的,它使用了一些「相當愚蠢」(fairly dumb)的影像演算法找出圖片內的「重要部份」來決定裁切圖片的最佳位置,大致演算法概觀如下:

  1. 用 laplace 偵測邊緣
  2. 利用膚色這個特徵來偵測重要區域(因為人的皮膚在圖片中都很重要嘛!)
  3. 利用高彩度這個特徵來偵測重要區域
  4. 以 sliding window 的方式產生多個候選的裁切區域
  5. 然後用一個 importance function 來評分所有候選的裁切區域(大致可以想像膚色多、高彩度部份多的候選區分數會高)
  6. 選出一個最高分的裁切區域

這樣的演算法學術上就稱之為 Heuristic Algorithm ,其實就是以人類直觀的感覺去調整演算法,讓演算法的結果可以符合我們想要的結果,有時可以接近最佳解,但無法證明這樣的演算法可以得出最佳解,也因此 Smartcrop.js 才會說自己是使用一個 fairly dumb 的演算法了!各位碼農可以看一下 線上火力展示 來感受一下究竟 dumb 不 dumb!

github.com

PDFx : Extract metadata and URLs from PDFs, and download all referenced PDFs - 下載論文所有的 Reference PDF

閱讀演算法或機器學習相關論文做研究的時候,往往需要追朔閱讀一些相關論文以補足背景知識的不足,PDFx 這個工具可以使用簡單的指令來一次下載論文中所有的 Reference PDF,可以節省不少自己手動複製、貼上、然後下載相關論文的時間!PDFx 大致提供以下特點:

  1. 萃取出論文的 Metadata 及論文中出現的連結
  2. 下載所有相關論文 PDF
  3. 可支援線上或本地端的 PDF 檔案
  4. 提供命令列工具
  5. 相容於 Python 2 及 Python 3

其實如果不用在下載論文這方面,也可以用來做成爬蟲工具抓資料,也許可以做一些研究者社會網絡相關的研究~

metachris.com

Amazon S3 PHP Stream Wrapper - 使用 Amazon S3 PHP Stream Wrapper 處理 S3 檔案存取

各位碼農大概都有這樣的經驗,當系統搬上雲端的時候,檔案系統存取這部分的程式碼難免會有修改的必要。如果檔案選擇存到 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 有支援的檔案系統而不用改到任何程式碼。

amazon.com

怎样成为技术达人

身在碼農界,總是會覺得自己所學還不足,尤其看到身邊的強者,無論年長的或年輕的,就會激發自己想再變強的欲望。但實際上要怎麼做呢?本篇文章提出了一些論點:

  1. 10000 個小時法則:依據 Anders Ericsson 教授的論文研究,暢銷書作家 Malcolm Gladwell 提出要成為專家至少要練習超過 10000 小時,這就是著名的 10000 小時法則。
  2. 愛是眾妙之門:為了將事情做好,首先你得喜歡做這件事,而不是喜歡這件事情的結果,那僅僅是第二位。
  3. 編碼編到吐:持續編碼的結果有兩個,一個是達到質變,水平不斷提升;一個是重複重複再重複最終麻木。想得到質變,那下一個步驟就很重要。
  4. 回顧與思考:要想質變與提升,必須有目的地停下編碼!然後思考與分析以前與現在自己編碼的不同,來了解自己是否有在進步,或如何突破。
  5. 多學一點點:對於用過的技術,最好在當時,項目的間隙或者項目結束時,抽時間了解它的背景、長處、機理,讓自己對用到的技術都有相當程度的了解。
  6. 溝通:解決問題才是程序員的職責。要解決問題,離不開溝通。
  7. 找到你的小伙伴:程序員幹的是技術活,找到一個談得來的小伙伴很重要,可以相互促進,消除登頂路上的寂寞。可能你需要在不同的階段找不同的伙伴,最好是找某方面比你牛的人一起研究技術,這樣可以學到東西。
  8. 分享:分享很重要,文章沒有寫太多,但其實透過分享不僅可以幫助別人,還可以得到別人的回饋修正自己的錯誤。

這些論點平心而論是有道理的,但最終自己可以做到幾點呢?心法終究是心法,勞苦功高的碼農們還是要動手做下去執行才能真正體會囉~

延伸閱讀:

  1. 程序员的八种境界
  2. 如何才能成为一个好的技术领导者?

jianshu.com

Issue 14 如果 Java 真的有 Garbage Collection 的話,大部份的程式應該在剛開始執行的時候就把自... @wancw

Architecting Android… The clean way?

SoundCloud 的工程師 Fernando Cejas ( @fernando_cejas ) 介紹 Clean Architecture 基礎概念以及如何套用在 Android App 上。作者在 後續的文章 裡進一步說明了一些實作上的細節與(當代流行)技術:

  • 用 RxJava 寫成 Reactive 形式
  • 用 Dagger 2 做 Dependency Injection
  • 用 Retrolambda 引入 Lambda 語法 → 弊多於利,不建議
  • 組織 package 與 gradlefile 的方法
fernandocejas.com

Effective Android Architecture - MWDC

Coursera 的 Android 工程師 @rich123 以 MVC 為起點逐步 演化 、逐一整理不同元件的角色與責任,然後歸結到 Clean Architecture 的全貌。適合有點 MVC 基礎或喜歡從實作理解概念的人。

speakerdeck.com

Flux Architecture on Android

TL;DR 簡單扼要地介紹 Flux 架構,開發任何前端平台都可以參考。

作者覺得以 Web App 為出發點的 Clean Architecture 對 Mobile App 來說太複雜了;Mobile App 通常沒有 Web 後端這麼複雜的業務邏輯,需要的只是一個清楚的 code 組織方式。而 Facebook 提出的 Flux 是一個不錯的選項。

作者還提及了一般 Flux 文章比較少提的「API call (或其他 async 操作)該由誰處理?」問題:

  • Store 只負責記錄 App 的狀態、不負責呼叫 API 或查詢 DB
  • 呼叫 API、查詢 DB 應該由 Actions Creator 負責

lgvalle.xyz

Eliminate JavaScript Code Smells

列舉 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

Background Jobs + NodeJS

作者比較了 Node.js 處理背景工作(像是寄信)的幾種方式,不過主要還是要推廣 resque 和 node-resque :

  • Foreground → 一般寫法、用 callback 等待結果
  • Parallel (threaded-ish) → 射後不理,不給 callback
  • Local Messages (fork-ish) → 折衷方案,用 Node.js 內建的 cluster 傳送 message。缺點是仍然綁在一台機器上
  • Remote Messages → 把 Local Messages 改成 client/server 架構,不如直接用 Remote Queue
  • Remote Queues (Resque-ish) → 用 Resque (Redis) 來管理背景工作
  • Event Bus (Kafka-ish)
speakerdeck.com
正文到此结束
Loading...