2017–02–24 雜項心得

平日碎碎念資源回收再利用!

AWIND的故事 從負債五千萬開始到被外商高價併購的故事

三年前看過這個故事,三年後再看收獲與感觸更多。作者在 2014 年農曆年間過世了。年紀增長後,想法逐漸轉變,覺得健康和家人的重要性逐漸提高。

和 AWIND 類似的產品是如今的 iPhone + Apple TV + AirPlay 和 Android + Android TV/Chromecast + Mirracast/Chromecast。AWIND 在 2008 年已有可 demo 的產品,AirPlay 是 2010 年出的,可說是領先了一些時間。如今光是手機投影到電視還不夠,已邁入用手機網路直播的時代,大小公司都在這塊上血拼,技術演進真是日新月異。

C++11 的 inner class 是 outer class 的 friend

在 C++11 之前 GCC 默認這規則, 也許其它家也會用一樣的規則

Sequential Lock

這裡有 x86/x86–64 架構下簡單的 sequential lock 實作。天生不用擔心 load-load 或 store-store reording 真方便。

觀察巴哈動畫瘋分數有感

觀察巴哈動畫瘋的作品分數,發現一個不尋常的地方。作品分數普遍很高,滿分10分,多數作品9.x,8.x已算低了且很少見。

一個可能是巴哈編輯選作品能力很好。除此之外,我覺得還有一個更重要的因素:大家滿懷感謝的使用這少見的服務。和人渣文本分析《為什麼A片討論區總是一片祥和?》類似,大家會小心和善地維護「聖地」。所以即使看到不好看的作品,也不會留一顆星。大不了看別的就好。

話說回來,App Store, Google Play 的情況完全不是這麼一回事。免費的 app 只要稍有看不順眼的地方,就可以留一顆星加負評。只能說免費軟體太多,太容易取得,對使用者來說太沒有價值了。

麥肯錫的效果

我相信麥肯錫的員工相當聰明、努力、有拼勁,不過我覺得這些因素無法超越公司在專有領域累積十年甚至數十年的經驗。假設麥肯錫的顧問費確實值得,可能還有其它因素,比方說麥肯錫在相關領域或近似領域公司累積的經驗,或是旁觀者清。

Hype Driven Development

務實且中肯。

Pyston 的啟示

* We spent much more time than we expected on compatibility
* We similarly had to spend more time on memory usage due to it being a bigger concern than expected
* Dropbox has increasingly been writing its performance-sensitive code in other languages, such as Go

從 PL 的角度思考 thread 代表的功能

看了《对 Go 语言的综合评价》,得知從 PL 的觀點看,thread 是實現 continuation 的方法,所以 system thread 或 green thread 是不同的角色實現 continuation :

每个理解程序语言理论的人都知道 goroutine 其实就是一些用户级的 “continuation”。系统级的 continuation 通常被叫做“进程”或者“线程”。Continuation 是函数式语言专家们再了解不过的东西了,比如我的前导师 Amr Sabry 就是关于 continuation 的顶级专家之一。
Node.js 那种 “callback hell”,其实就是函数式语言里面常用的一种手法,叫做 continuation passing style (CPS)。而我在 Friedman 课上写的那“40行代码”就是用来实现从普通程序到 CPS 程序的转化的。由于 Scheme 有 call/cc,所以从理论上讲,它可以不通过 CPS 样式的代码而实现大并发。

從這個角度來看,忽然想通別處看到「multi-thread 和 multi-core 程式設計是不同的東西」。continuation 和 multi-thread programming 相近,但 multi-core programming 則是將單一工作拆到不同 CPU,藉此縮短單一工作的完成時間。嚴格說起來,這兩者是不同的技能。

為何我們總是迴避問題核心,儘做些無關緊要的事?

要時常拿這提醒自己。

用大量 thread 達到 C10K 連線

雖說以 epoll 為核心處理 C10K 是目前的主流, 用 thread pool 硬幹 C10K 也是沒有問題的!

C10M

大意是盡量針對這類特定應用,盡量由應用程式自己處理, 減少 Linux kernel 代勞, 不錯的摘要。

比方說 Linux kernel 的目的是一般用途, 在這限制之下處理 packet 的速度有所局限。藉由 bypass kernel, 直接從網卡取得 raw packet 傳到應用程式, 可以大幅提升效能 (10x 以上), 但是得自己處理 full TCP stack 的事, 多數情況開發成本太高了。《Why we use the Linux kernel’s TCP stack》有相關討論。

Show your support

Clapping shows how much you appreciated fcamel’s story.