每週分享第 5 期

阮一峰發表於2018-05-18

這裡記錄過去一週,我看到的值得分享的東西,每週五發布。

(題圖:世博公園,上海,2018)

本週,伺服器遭受攻擊,網站下線50多個小時。我一度以為,《每週分享》不能按時發了。現在,攻擊停了,但你不知道,什麼時候它還會回來。這件事情的細節,我後面會單獨寫文章,這裡只說說我的一個感受。

訊息傳出以後,許多素不相識的朋友透過各種渠道,詢問我是否需要幫助,願意提供個人或公司的資源,幫我渡過難關。阿里雲和騰訊雲都向我贈送了高防 IP。我全部牢記心中,這裡不再一一感謝了。就算攻擊最大的時候,我都沒有擔心過,因為我知道,背後有那麼多人支援,你打不垮我的,只會激發我的鬥志。

我最大的體會就是,在網際網路上做一個好人,真是一件最划算的事情。你平時無非就是網上寫寫教程,郵件回答一些問題,雖然也是盡力去幫助別人,實際上並沒有什麼了不起的付出。但是,網際網路的傳播作用使得一點點微不足道的善行,都會被許多人看到和記住。等到你有困難的時候,人們就會在網上出現,從四面八方走過來幫你,默默用眼神支援你。

相反,如果你做一個壞人,躲在黑暗的角落放冷槍,也許能夠達到那些自私的目的,攫取各種利益,但是你從此不敢相信別人,緊張兮兮活著,因為別人可能也會用同樣的手段對付你。等到你落難了,不要說有人幫,他們慶祝和復仇都來不及呢。我覺得,這種人生可恥又可悲。

新聞

1、Firefox 60 支援同域才能傳送 Cookie

本月初,Firefox 60 瀏覽器釋出。它有一個很大的亮點,我看提到的人不多,就是它解決了 CSRF 攻擊。

所謂 CSRF 攻擊,就是使用真實的 Cookie 進行惡意行為。比如,使用者訪問 B 網站,頁面上有一張來自 A 圖站的圖片,這時瀏覽器就會向 A 網站發出請求,並帶上 A 網站的 Cookie。如果這張圖片的 URL 被精心偽造過(比如是劃款請求),麻煩就來了。因為 A 網站的伺服器會以為,這個請求是真實的請求,因為 Cookie是對的,從而授權進行各種操作。

Firefox 60 按照最新的標準,為 Cookie 新增了一個 SameSite 屬性,明確規定訪問 B 網站時向 A 網站發出的請求,一律不許帶上 Cookie,這就從根本上防止了 CSRF 攻擊。

另外,Firefox 60 還預設開啟了 ES6 模組支援,至此所有瀏覽器都預設支援 ES6 模組。

2、成立僅8個月的幣安盈利超過百年德意志銀行

根據幣安官方透露,它的上一季度利潤達到2億美元,已經超過了德國最大的銀行----德意志銀行,後者在2018年第一季度的利潤為1.46億美元。

德意志銀行擁有148年的經營歷史,旗下員工超過10萬名。而8個多月前,幣安還不存在。幣安,英文名 Binance,是由CEO趙長鵬(CZ)建立的加密貨幣交易平臺。現在它已經是全球最大的加密貨幣交易所。

3、如果 CA 撤銷了你的 HTTPS 證照

加密網站都需要 HTTPS 證照,這些證照通常是由 CA(證照當局)頒發。最近,一家 CA 撤銷了 stripe.ian.sh 這個合法網站的證照,理由僅僅是瀏覽器顯示證照來自 Stripe Inc,與 stripe.com 太過相似,使用者可能會混淆。

請仔細看上圖,你會不會以為自己正在訪問 Stripe.com 官網,但是其實是另一個網站。作者提出了一個問題,CA 可以任意撤銷一個網站的證照,他們的權力是否過大?因為一旦失去了加密證照,商業網站就等同於下線了。最近開源論文網站 Sci-Hub 由於版權爭議,它的 HTTPS 證照就被 CA 吊銷了。

4、 機器寵物狗影片

索尼公司推出了新一代機器寵物狗 aibo(愛寶),根據產品主頁的介紹,它跟人的互動達到了前所未有的程度,已經很接近真實的狗。

人跟機器人做伴侶的時代真的不遠了。

5、微軟支援 Unix 換行符

文字檔案的換行符,一直不統一。Unix 平臺是 \n,Windows 平臺是 \r\n,所以 Windows 開啟其他平臺的文字檔案,都顯示為一行。

那麼多年過去了,微軟終於在今年宣佈下一次 Windows 10 更新時,Notepad 將支援 Unix 換行符(LF)、Mac 換行符(CR)。

6、Gmail 的智慧回郵功能

谷歌IO大會宣佈,Gmail 新增智慧回郵功能。也就是你寫幾個單詞,後面的句子它幫你準備好。上圖的那封郵件,每句話都是你寫兩個單詞,後面機器幫你補全。

以後你回覆郵件,只寫核心資訊就行了,人工智慧自動加上一大堆客套話。

7、Google One 儲存

谷歌將網路儲存升級成 Google One 服務,100GB是每個月2美元,200 GB是3美元,2TB是10美元。這件事情的直接後果就是,Dropbox 大概要完蛋了,它是1TB 每個月10美元。不過,這個價格還是不如百度網盤,它是免費使用者就有2TB。

JavaScript 高階前端開發課程

本期《每週分享》很高興得到了 51CTO 學院的贊助。下面介紹一下,他們最近推出了兩門新課程,都由金牌講師陳學輝主講。

1、《JavaScript 深度揭秘之高階前端開發》:適合已在職、有基礎的技術人員提升技術,挑戰更高的薪資。該課程深入探討函式、事件迴圈機制、非同步程式設計、物件導向、瀏覽器渲染、資料互動等的內部原理和高階應用,使用 ES6/ES7 語法講解,涵蓋日常開發及面試所需的技能。並且結合當下技術熱點實時更新課程。

2、《Web 前端高階開發工程師》:主要針對純小白的學員,比如在校學生、在職想轉行的人士等等,從基礎講起,並且包含了《JavaScript 深度揭秘之高階前端開發》課程的部分內容。

《Web 前端高階開發工程師》課程原價是8980元,《JavaScript 深度揭秘之高階前端開發》原價 7980 元,現在點選這個連結購買,可以享受半價!報名之後馬上開始學習,無需等待開班,並且採用授課老師、助教老師、班主任、就業指導老師四對一的服務模式,保證每一位學員都能真正掌握學習內容。

感興趣的朋友,可以點選這裡瞭解更多。

教程

1、[文章]最簡單的馬爾可夫鏈圖解(英文)

上面是最簡單的馬爾可夫鏈圖解。系統包括 A 和 B 兩個狀態。一共有四種轉化路徑:A 到 A、A 到 B、B 到 A,B 到 B。每種路徑的可能性都是 50%,就得到了隨機的運動軌跡。

一個通俗的例項是,每天有"晴天"和"下雨"兩種天氣,天氣變化的機率是50%,那麼馬爾可夫鏈就可以生成一個未來一周天氣的模型。

2、[文章] 決策樹模型入門(英文)

決策樹模型(Decision Tree)是最簡單的機器學習模型,也最容易理解。當決策受到多個因素影響時,這個模型相當有用。

3、[文章] 為什麼 go 結構是有害的?(英文)

多執行緒程式設計之中,有一種 go 結構,就是主執行緒之外分出一個執行緒,這個執行緒完成任務以後,再回到主執行緒。作者認為,這種結構是有害的。他的最精彩觀點就是:如果允許使用 go 結構,那麼所有的語言功能都可以用這種結構實現,程式很快就會亂做一團。

4、[程式碼] Elm + Rust 開發桌面應用(英文)

目前,使用 Web 技術開發桌面應用,主要透過 Electron。它的缺點是,有時你只是想要在桌面上展示一個網頁,不需要跟本地檔案系統互動,但是不得不把整個 Chromium 瀏覽器和 V8 引擎包含在這個應用裡面,導致不管邏輯是否複雜,任何一個 Electron 應用都至少有幾十MB的大小。

這個專案展示了另一種開發桌面應用的可能。它的原理是,任何作業系統都有自己的 WebView,也就是說可以在應用程式裡面呼叫 WebView 展示網頁。那麼可以使用 Rust 語言打包 WebView,而 JS 指令碼部分交給 Elm 語言生成。由於 WebView 是系統提供的,所以打包出來非常小,一般只有幾百KB,資源佔用也很少。

5、[文章] 高可用的部署技巧(英文)

Netflix 公司的工程師介紹,他們如何部署程式碼,提高服務的可用性,比如使用紅黑部署、設定部署視窗等等。

6、[教程] 哈佛大學《CS109:資料科學基礎》的課程資料(英文)

1xx 編號的課程都是本科生的基礎課程,我看了一下,講的是 Python、基礎的統計學知識和數學模型,提供免費的課程影片和PPT 下載。

7、[筆記]《技術面試需要掌握的基礎知識整理》(中文)

技術面試需要掌握的基礎知識整理。

8、[資料] 網際網路公司技術架構(中文)

作者收集的國內各大網際網路公司技術架構的資料

工具

1、sonarwhal

微軟推出的開源網頁 lint 工具(原始碼倉庫),可以線上掃描網頁,提供無障礙、互通性、效能、PWA、安全五個方面的掃描結果,給出改進點。

2、IPBlade

有的網路服務限制 IP 地址,比如只有中國的 IP 地址才能使用。這個 Chrome 外掛點選一下就可以改變瀏覽器的 IP 地址,從而繞過這些限制。免費版只能改成美國的 IP 地址。

3、.gitignore 檔案的命令列生成工具

.gitignore 檔案設定了哪些檔案可以不用進入 Git 版本管理。這個命令列工具可以根據專案型別,自動生成 .gitignore 檔案。

4、jGoBoard

我在尋找圍棋軟體的時候,發現了這個生成互動式圍棋棋盤的 JavaScript 庫,覺得功能和樣式都滿足需要。另外,AlphaGo 官網也提供一個棋盤生成器, 基於 WGO.js

5、love2.io

一個收集開源書籍的網站。

6、Pyre

Facebook 推出 Python 的靜態型別檢查工具,有點像 Flowtype 對於 JS 程式碼的作用。

7、Google CTF 的試題

這個是試題庫,收集了 Google 主辦的駭客安全大賽 CTF 的題目。

文摘

1、馮象:AI 將終結資本主義

馮象是清華大學法學院教授。最近,《華爾街日報》發表了他在北京的一次演講稿(英文),他認為 AI (人工智慧)最終將導致目前的經濟模式崩潰。

AI 將無情地導致技術億萬富翁的超級富豪寡頭壟斷,這些億萬富翁收穫了機器人創造的財富,這些財富取代了人類的勞動力,從而導致大量的失業。

大規模失業的必然性和對全民福利的需求,將推動人工智慧國有化的想法。

人工智慧將會導致市場經濟的終結。隨著機器人的增多,工業發展只會導致更多的失業。除了國家的介入,沒有什麼好的選擇。

2、畢業20年依然從事本行業的比例

1998年,美國的人口普查局做了一次職業調查。

大學畢業後10年,57%的計算機主業的學生還在以程式設計師的身份工作;畢業後15年,這個比例下降到34%;畢業20年後,也就是隻有40歲出頭的年齡,下降到19%。相比之下,土木工程專業的數字是61%、52%和52%。

軟體行業罕見40歲以上的程式設計師,看來全世界都是如此。這還是20年前的調查,如今的比例應該更低了。

3、自下而上的程式設計,by Paul Graham

傳統的方法是,一個大型的程式必須分成幾塊,程式越大,它就越需要分割。你如何劃分一個程式?傳統的方法稱為自上而下的設計:程式的目的是做這七件事,那麼我把它分成七個主要的子程式,第一個子程式必須做這四件事,所以它又有四個子程式等等。這個過程一直持續到整個程式具有合適的粒度級別 - 每個部分都足夠大,可以做一些實質性的事情,但又足夠小,可以被理解為一個單元。

有經驗的Lisp程式設計師對他們的程式進行不同的劃分。除了自上而下的設計之外,他們遵循可稱為自下而上設計的原則 - 改變語言以適應問題。在Lisp中,你不僅要將程式寫入語言,還要將語言建立在程式上。當你正在編寫一個程式時,你可能會想"我希望Lisp有這樣一個運算子。" 所以你就去寫了。

當你自下而上工作時,你通常會得到一個不同的程式。你得到的不是一個單一的,整體的程式,而是一個更大的語言、更多的抽象運算子,以及一個更小的程式。

4、為什麼中文如此難學?

中文不但對我們英語人士來說很難,它在絕對意義上也是難的。這意味著對於中國人來說,中文也很難。如果你不信,隨便問個中國人。絕大多數中國人都會高興地承認他們的語言很難,可能是地球上最難的。(實際上很多人以此為傲,就好象實際上有些紐約人以居住在美國最不宜居的城市為傲一樣。)

我有一次和北京大學中文系的三個博士生吃午飯,他們三個都是中國人(一個來自香港)。我那天正好感冒,打算給一個朋友寫個紙條取消我們一個約會。我發現自己想不起來怎麼寫"噴嚏"中的"嚏"了。於是我問那三位該怎麼寫。結果嚇我一跳,他們仨都尷尬而難為情地聳聳肩。誰都不能正確地寫這個字兒。各位同學!北京大學常常被認為是中國的哈佛啊。你能想象三個哈佛大學英文系的博士生不會寫"sneeze"(噴嚏)?然而這種情況在中國絕不少見。

5、天空中有多少顆星星?

肉眼可見的恆星亮度等級,最低為+6.5。符合這個標準,地球上可見的星星一共有9,096顆。由於在任何時刻只能看到一半的天空,我們必須將這個數字除以二得到4,548顆星星(視季節而定),那是來自你能想象到的最黑暗的天空。

大城市的郊區,只能看到亮度為+4的星星,那隻剩下900顆,任一時刻你還只能看到其中的一半。如果我們將城市市區的亮度等級設為+2(與北斗星亮度相似),那麼全球只剩下70顆星,或者說從芝加哥市中心或波士頓可以看到35顆星。

6、寫一本 O'Reilly 書籍是什麼體驗?

作者回顧了他為 O'Reilly 寫書的整個歷程。看過美國的技術書籍作者,收入也不是想象的那麼高。

這本書原計劃250頁,定價59.99美元。完成時,它只有160頁,定價39.99美元。由於我們兩個作者合寫了這本書,我們每個人可以拿到每本書收入的5%,電子書是12.5%(個別作者可以拿到10%和25%)。這相當於我們每個人從實體書得到0.99美元,從電子書得到0.46美元。

從2017年12月到2018年3月,這本書售出了1337份。截止2018年4月份,我已經賺取了11,554.15美元。

本週圖片

1、堆積如山的廢棄共享腳踏車

共享腳踏車的流行,一大原因是它轉嫁了停車成本。堆積如山的公共腳踏車已經成了城市問題,誰來管理?成本誰出?

這裡還有另外一組圖集

2、安卓的錯誤 Emoji 圖案

今年的谷歌 I/O 大會,谷歌的 CEO 特別提到他們修正了兩個錯誤的 Emoji。一個是芝士在牛排下面,另一個半空的啤酒杯卻有泡沫溢位。

本週金句

1、

非洲的人口 = 美洲 + 澳洲 = 歐洲 + 中東 = 亞洲 / 4 (@MaxCRoser

2、

程式的功能單位不宜過大,太大的函式容易掩蓋錯誤,就像一個大城市隱藏著逃犯一樣。這樣的軟體很難閱讀,很難測試,也很難除錯。(《自下而上的程式設計》,by Paul Graham)

3、

記者問了100個90後,"你們為什麼不願意打電話呢?"有人表示,只有陌生人才打電話。最陌生的人最常打電話:快遞、外賣、騙子、你老闆。(新京報

4、

Facebook 公司推出Pyre,用來檢查Python程式的靜態型別錯誤,下面是一個網友的評論

十多年前,Java的繁瑣讓很多人仇恨型別系統,他們改用Python、Ruby等動態型別語言,這使我們能夠快速而鬆散地完成工作。經過大約十年的熱血程式設計,我們最終發現,動態語言編寫的巨大單體專案是非常脆弱的。

歡迎訂閱

這個專欄每週五發布,同步更新在我的個人網站微信公眾號語雀

微信搜尋"阮一峰的網路日誌"或者掃描二維碼,即可訂閱。

image | left

(完)