Hello World
CodeTengu Weekly 碼天狗週刊
CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一 AM 10:00 出刊,每期會由三位不同的 curator 負責當期的內容,每個 curator 有各自擅長的領域,如果你在這一期沒有看到自已感興趣的東西,可能下一期就會有了。你也可以瀏覽一下前幾期的內容。
目前的 curator 陣容:
- @vinta - I failed the Turing Test - 科幻迷,最近在讀 The Forever War
- @saiday - Imnotyourson - 最近在看禪與摩托車維修的藝術
- @tzangms - Oceanic / 人生海海 - 衝動型購物
- @fukuball - ImFukuball - 徵會寫 HTML & CSS 的網頁設計師
- @mingderwang - Ethereum enthusiast
- @kako0507 - 熱愛嘗試新事物的前端工程師
- @chiahsien
- @hiroshiyui - 沒有人是一座孤島
- @uranusjr - Smaller Things - 不愛談技術的技術人,最近對做菜很有興趣
- @kkdai - 態度萬歲 - 喜歡 Golang 的略懂工程師,最近在學機器學習 (疑?)
- @yhsiang
你也可以關注我們的 Facebook、Twitter、GitHub 或微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入。
@vinta
推荐系统实践
已經八百年沒讀過中文的技術書了,最近終於讀完項亮的「推荐系统实践」,果然中文書讀起來還是親切啊。作者項亮之前就是在 Hulu 開發推薦系統,偶爾也會在 ResysChina 看到他的文章。
跟其他書不同,這本書特別著重在談 implicit feedbacks。畢竟你在真實世界裡能夠得到的絕大部分數據都會是隱式反饋,不管你的用戶量有多大。這本書主要在講 Collaborative Filtering 和 Matrix Factorization,雖然有點舊了(2012 年出版,現在所有人都跑去搞 Deep Learning 了),但是旁徵博引了不少正統方式之外的改良做法(例如對熱門物品的懲罰、考慮時間對用戶偏好的影響或是如何針對隱式反饋選擇負樣本),而且非常強調模型的評估。不過如果這本書可以再版的話,期待作者可以在「推荐系统实例」的章節多說一點啊。
延伸閱讀:
- Hulu's Recommendation System
- Recommender Systems Handbook (2015) 最近才發現這本書出了第二版!
P.S. 然後雖然跟主題無關,但是說到 Hulu,忍不住想提一下我前陣子剛看完的日本 Hulu 製作的日劇「住住」。嗯是的,其實我就是為了說這件事才在上面硬是提到 Hulu 的。主演是二階堂富美和搞笑藝人笨蛋主義、若林(奧黛麗裡不壯的那個),他們在劇中飾演自己,故事基本上就是同住在一棟公寓裡的三人互相串門子的超普通日常,不是開玩笑真的超普通,但是重點是竟然出乎意料的好看!負責編劇的笨蛋主義真的太有才華啦。
A Gentle Introduction to Recommender Systems with Implicit Feedback
這篇文章非常詳盡地介紹了 ALS (Alternating Least Squares) 這個在推薦系統中常用的演算法,屬於矩陣分解的一種(也正是降維),也被稱為 Latent Factor Model。例如在 Spark ML 中關於推薦系統的部分也(只)實作了這個演算法,因為 ALS 天生就適合並行運算。
除了說明適用顯式數據的 ALS 演算法之外,這篇文章大部分的篇幅都在講來自 Collaborative Filtering for Implicit Feedback Datasets 這篇論文的針對隱式數據的改良做法(已經看過八百多篇文章和簡報提到這篇論文啦),雖然計算方式大同小異,不過這兩者對模型的假設差異挺大的。除此之外,作者也提到了一般機器學習中常見的把 dataset 隨機拆分成 traning/testing sets 的做法對 ALS 這種模型會有什麼問題。
延伸閱讀:
Evaluating recommender systems
所有機器學習的問題中,除了 data 和 algorithm 之外,最重要的一件事可能就是如何評估你的模型的好壞。針對不同的問題或模型,適合的評估方式也不同,例如你總不好用 RMSE 來評估 classifier 或是對一個只有正樣本的 dataset 使用 AUC。
大部分的推薦系統最終呈現的方式都是推薦給用戶 K 個他最可能感興趣的東西,是所謂的 Top-K recommendation 問題,而不是為了預測他究竟會對某個物品打幾分。這篇文章就介紹了專門針對 Top-K 推薦排序問題的評估方式:MAP (Mean Average Precision) 和 NDCG (Normalized Discounted Cumulative Gain),來自 Learning to rank 領域。
延伸閱讀:
Django Apps Checklist
在發佈你的 Django app 之前非常適合參考的 checklist,推薦給所有打算(或已經)open source 你的 Django app 的人。掃了一下這份清單,忍不住會想如果每一個第三方的 libraries 都能夠做到這樣就好啦,雖然自己的 app 可能連一半的勾都打不上。
順帶一提,Django 1.11 在前陣子發佈了,這可是最後一個支援 Python 2 的版本啦,歷史的巨輪完全沒有要停止的意思,大家好自為之。
延伸閱讀:
@kako0507
ES6 modules support lands in browsers: is it time to rethink bundling?
<script type=module>
已經在 Edge 和 Safari Technology Preview 上實作,未來可以直接在瀏覽器使用 import 與 export 語法,而 nomodule
attribute (目前只有 Safari Technology Preview 支援) 則可以讓瀏覽器識別為是 fallback script,避免重複執行同樣邏輯。
而 module 和原本 script 的差別有:
- module 預設就是 strict mode
- 每個 module 都是一個 local scope
- module 會在 browser parse HTML 完成後才被載入執行
Sometimes undefined is defined
JavaScript 中,和 null
、true
、false
這些 keywords 不同,undefined
是 global object 的一個 property ,本篇文章透過幾個不同的 trick ,將 undefined
設為 local variable ,而在需要使用 undefined
時,也可以考慮使用較安全的 void 0
來取代。
Preload, Prefetch And Priorities in Chrome
本篇文章介紹 Prefetch 以及 Preload 在 Chrome 的差異以及載入的優先權, Prefetch 的作用在於通知瀏覽器在閒置時期預先載入可能會使用到的資源, Preload 則是用在強制載入極可能在當下頁面使用的資源,並且不會 block window 的 onload event ,以達到減少(加快) Time to Interactive (TTI ,指的是載入到可以互動所需的時間) 的效果。
6 Reasons Why JavaScript’s Async/Await Blows Promises Away
Node.js 在 7.6 版開始支援 async/await 語法,文中會從和 Promise 的比較來探討使用 async/await 的幾個理由:
- clean: 不需要透過 promise 的 then ,寫出來的邏輯也比較容易讀懂
- Error handling: try catch 即可處理透過 async/await 產生的 asynchronous errors
- Conditionals: async/await 的寫法減少很多巢狀的層次,當需要處理非同步資料的時候比較不容易產生混淆
- Intermediate values: 透過 await 可以非常簡單的取得非同步資料
- Error stacks: 在較複雜的邏輯更簡單的呈現錯誤產生的地方
- Debugging: 這裡指的是利用直接 return value 的 arrow function 的情況,因為沒有 block statement ,透過 await 方式可以更容易下 breakpoint
@yhsiang
Setting up a Web API for Success
一篇關於怎樣才算是成功的 Web API。從 5 個方面來說:
- 嚴肅地開發每個 API
- 淺顯易懂
- 自動文件化
- 相信 Acceptance Tests
- Log, Monitor and Alert
其實是一篇老生常談了,但是要真正五項都做到是相當困難,若你有那一項沒做到,來參考 Salesforce 工程師的意見吧。
React is Slow, React is Fast: Optimizing React Apps in Practice
有在寫 React 的朋友,不管熟不熟 React 如何優化都建議看看這篇,很詳細的一篇介紹。
What are Container Queries?
作者提出 Element Query 跟 Container Query 來解決 Scoped style 的問題。對於 CSS methodology 、CSS in JS 或 CSS modules 有研究的朋友,建議可以看看這篇。