科技愛好者週刊(第 305 期):隨機數,這是一個問題

阮一峰發表於2024-06-21

本雜誌開源,歡迎投稿。另有《誰在招人》服務,釋出程式設計師招聘資訊。合作請郵件聯絡[email protected])。

封面圖

重慶"悅來江灣"公交車站,由幾塊巨石組成,象徵當地江邊的鵝卵石。(via

隨機數,這是一個問題

今天談談,怎麼生成真正的隨機數。

這個問題超難,但有一些很有趣的內容。

首先,程式語言提供的隨機數,是偽隨機數。

V8 引擎的官網有一篇文章(下圖),特別提醒大家這一點。它內建的隨機數不是真隨機數,而是偽隨機數。

所謂偽隨機數,並非真的隨機,而是演算法得到的。只要初始的種子值相同,演算法會給出一樣的結果。

JavaScript 和許多其他語言,都有這個問題。所以,遇到特別強調隨機的場合,都不應該使用語言內建的隨機數生成器。

真隨機數需要滿足三個條件。

(2)不能重複。 每次生成的隨機數,不能是一樣的。

(3)均勻分佈。 隨機數必須平均散佈在所有區間,不能集中在某些區間。

一般來說,只有透過硬體,才能得到真隨機數,單純的軟體演算法做不到。

科學家絞盡腦汁,想出各種辦法,透過硬體生成隨機數。

著名的 Random.org 就是專門生成一個隨機數的網站。

它在全世界部署了多個無線電接收器,專門監聽大氣無線電波(即大氣噪音,可以理解成大氣的布朗運動),透過隨機的無線電訊號來生成隨機數。下圖是它的早期硬體裝置。

因為有硬體支出,使用它的隨機數,需要付費。所以,大家可以看到,真隨機數是有成本的,不是跑一下程式就可以了。

世界最大的 CDN 服務商 Cloudflare ,為了得到真隨機數,做得更絕。

它的三個辦公室,每個都有不一樣的隨機數生成裝置。

(1)舊金山總部。一進門就有一堵牆,放滿了幾十盞熔岩燈。

熔岩燈內部是融化的蠟,每時每刻都在變化著形狀。

需要隨機數的時候,就對著這堵牆拍一張照片。每張照片都是不一樣的,然後計算照片的雜湊,將其作為種子值,計算得到一個隨機數。

(2)倫敦辦公室。 那裡有一面"單擺牆",放滿了各種單擺裝置。

單擺和它們的影子,每時每刻都在擺動。每次照片的雜湊也是不一樣的,可以作為隨機數的種子值。

(3)奧斯汀辦公室。 那裡的天花板,掛了很多彩色的反光片。

這些反光片對空氣流動十分敏感,開門、關門、空調、溫度、溼度,都會讓其轉動,反射出不同顏色的光。因此,也可以用來當作隨機數的種子值。

下週五,稀土開發者大會

過去一個月,週刊一直在預熱今年的"稀土開發者大會"。

它的開幕時間就是下週五(6月28日)。

作為今年的大活動,所有日程安排現在都出來了。下圖就是主論壇和10個分論壇的 70 多場演講題目

點選看大圖,都是技術熱點和前沿領域。演講者是來自全球的技術專家和第一線的主力工程師。

另外,大會還有外場的 AI 活動,一共4個特色展區,可以接觸眾多國內頭部 AI 公司的展臺,參與各種互動小遊戲,贏取紀念品。這部分是免費的。

活動詳情可以點選這個連結,或者掃描上方海報的二維碼,購買內場演講票,或者領取免費的外場票,以及預約現場直播。

科技動態

1、Starliner 飛船

美國宇航局最近遇到了一件尷尬的事情。

波音公司的 Starliner 飛船(下圖),將兩名宇航員送入國際空間站以後,卻回不來了。

飛船發射後,出現了氦氣洩漏和推進器故障。遲遲沒有找到原因,美國宇航局就不敢用它把宇航員送回來。

本次任務原定8天,現在已經20天了。目前暫定6月26日返航,但可能再次推遲。

好在國際空間站有4個月的食物儲備,不至於有物資問題。

本次飛行是 Starliner 飛船首次執行任務,就搞成這樣。實在不行的話,只能再派一艘飛船去把人接回來。

2、澳大利亞巨型鵝

澳大利亞與其他大陸隔絕,存在著許多奇特動物。

科學家很早就知道,澳大利亞有過一種巨型鵝(下圖最右側),大小跟鴕鳥相仿,身高超過2米,體重240公斤,但是已經在45000年前滅絕了。

那時正好是第一批人類來到澳大利亞,所以科學家猜測,它的滅絕與人類有關。人類可能大規模捕殺這種鵝,畢竟它不會飛,又跑得慢。

以前,這種鵝只出土過零星的化石,最近終於出土了第一個完整頭骨。

科學家畫出它的還原像,大家看看,這種地球已經不存在的巨型鵝長什麼樣。

3、眼球監控

一位國外網友,在推特上貼出一張圖片。

他在手機上看 Youtube 影片,結果跳出了這個提示。

意思是,系統發現,他的眼球沒有注視廣告,所以重新播放一次廣告。

這張圖應該是偽造的,不過技術上很簡單。只要播放廣告時,啟動攝像頭,就能識別鏡頭前有沒有人,眼球看哪裡。

我懷疑,這種場景會變成現實。以後,付費使用者正常使用,免費使用者必須透過眼球監控,確保正在注視廣告。

4、上網籃

加沙地區由於戰爭原因,網際網路服務已經完全中斷了。

一個國際組織為了幫助那裡的人民上網,想出了一個解決辦法。

他們先在其他國家購買了一批 eSIM 卡,將引數傳給當地人。因為 eSIM 是虛擬卡,只要填入引數,就能開通,相對容易。

然後,當地人把手機連上充電寶,放在一個籃子裡,帶到邊境地區,掛在高處。

透過 eSIM 卡,手機可以連上領國的 4G 網路,這時開啟手機熱點,那麼在籃子下面的人,就都能上網了。

文章

1、AI 晶片的未來,未必是 GPU(中文)

本文認為,加速計算未必只能透過 GPU 實現,FPGA 或 ASIC 或許是更優的底層計算裝置。

2、我編寫自己的部落格引擎的10年(英文)

作者為自己寫了一個部落格引擎,堅持了10年,他講述在這個過程中學到的東西和體會。

3、CSS 的 3D 摺疊效果(英文)

本文介紹如何使用 CSS 實現 3D 的頁面摺疊動畫效果(上圖)。

4、隨機歌單的演算法(英文)

本文介紹 Spotify 生成隨機歌單的演算法,要求是同一個歌手的歌曲不能連續播放。

5、ASML 總部訪問記(英文)

作者訪問荷蘭光刻機公司 ASML 總部,在埃因霍溫市的郊區,這裡是他的見聞。

6、200行 JavaScript 程式碼實現虛擬 DOM(英文)

虛擬 DOM 是很多 JS 框架的底層基礎,本文演示怎麼自己從頭實現它。

工具

1、Postgres.js

Node.js 和 Deno 的 PostgreSQL 客戶端,類似軟體還有 Zapatos

2、OpenccLint

一個基於 OpenCC 的繁簡體中文轉換工具,支援編輯器和命令列介面。(@hddhyq 投稿)

3、BiliVideoDown

一款基於 Flutter 的桌面端 B 站影片下載器,程式碼開源。(@kangpeiqin 投稿)

4、AQChat

一款匿名的線上聊天軟體,使用者可以自由登入、建立房間、會話和傳輸檔案,體驗 demo。連結是後端程式碼,另有 Web 端移動端。(@howcodes 投稿)

5、Voicer

一個 Chrome 瀏覽器外掛,用來語音朗讀網頁文字。(@wang-jianliang 投稿)

6、易條形

一個線上的條形碼生成器。(@FZliweiliang 投稿)

7、ScienHub

LaTex 線上編輯器,提供很多實用的模板。(@tc1989tc 投稿)

8、trash.sh

rm 命令的簡單替代品,提供一個刪除檔案的回收站。(@qqAys 投稿)

9、我的字型

一個製作個人手寫字型的線上工具。(@harbor2009 投稿)

10、lingo link

一個開源的瀏覽器外掛,支援劃詞翻譯、AI 翻譯、生詞標記。(@chengfengfengwang 投稿)

AI 相關

1、Luma AI Video Generator

Luma AI 影片生成器免費線上使用。(@sunnyjingliu 投稿)

2、Stable Diffusion 3 AI 影像生成器

免費使用 Stable Diffusion 3,透過文字生成影像,無需註冊。(@ddewfrefref 投稿)

3、Generative Voice AI

一個文字轉語音的服務,支援中文,免費賬戶每月可以轉10000字(約10分鐘音訊)。

4、BrainyAI

一個開源的 Chrome 外掛,在側邊欄載入 AI 模型,是類似產品 Sider AI, Monica, Merlin, 和 MaxAI 的免費替代品。(@luyu0279 投稿)

5、Rock AI

該網站託管了一些開源 AI 模型,可以免費呼叫。(@hellokidder 投稿)

6、Chrome AI

使用 chrome 內建 AI 模型搭建的本地聊天工具。(@zengkan0703 投稿)

7、mac 電腦的本地文字總結(英文)

本文介紹如何在 mac 電腦上,架設本地的 Ollama 模型,用它建立一個快捷方式,自動對開啟的網頁進行內容總結。

資源

1、開發者必須瞭解的 Unicode 知識(2023版)

這篇長文介紹最新的 Unicode 知識。

2、loadership

該網站可以定製純 CSS 的頁面載入動畫(loader)。

3、現代 C++ 程式設計(Modern C++ Programming)

一個開源的 C++ 英文教程。

圖片

1、奇怪的環島

英國有一個奇怪的環島,分成內圈和外圈,它們之間還分佈著5個小環島。

它的內圈是逆時針方向,外圈是順時針方向。

從外圈進入內圈,或者從內圈進入外圈,都必須透過5個小環島。

下圖是當地的交通指示牌。

這個環島建於1972年,多年沒有發生過重大的交通事故。

2、易北河隧道)

易北河流經德國漢堡市中心。

1911年,漢堡市政府在河底挖了一條426米的隧道,方便兩岸的交通。

這條隧道的奇特之處,就是沒有引道。行人和車輛必須使用升降機,進入和離開隧道。下圖兩側的黃色垂直通道,就是升降機。

下圖是車輛升降機的入口。

這個隧道直到今天還在使用,甚至還在裡面開過音樂會。下圖是在升降機底部仰望出口。

文摘

1、程式語言應該多大?

程式語言有小有大。

一些語言只提供最核心的功能,另一些語言無所不包。

還有一些語言,開始時很小,後來不斷新增功能,變得越來越大,甚至龐大到難以使用。

Python 語言的初始版本很小,前幾個版本故意保持這種特色,新增功能的建議都被明確拒絕,理由是它們會使語言太大。

某個時刻(也許是在 Python 1.6 和 Python 2.0 之間),事情發生了變化:功能建議不會因為使語言變大而被拒絕,只會因為沒有解決重要問題而被拒絕。

從此以後,Python 就走向了龐大語言的道路。

在我看來,一旦語言的設計者不再擔心語言的大小,這種語言的無限制增長是不可避免的。

很多語言都是如此。儘管 Java 從來都不是小型語言,但在泛型新增到 Java 1.5 之前,它的變化相當小。泛型似乎是 Java 大型語言之旅的起點。

JavaScript 本來是一個週末設計出來的小型語言,現在變成了一種相當龐大的語言。

Rust 是一種已經很大的語言,但它正在考慮新增更多功能,變得更大。

為什麼那麼多語言都走上了變大的道路?

我的看法是,因為沒有一種程式語言是完美的,總有不能很好支援的用例。許多情況下,新增新功能有助於更好地支援這些用例。

由於潛在用例是無限的,因此我們總是加入新的設計,讓語言變得"更好",副作用就是每次都讓語言變得更大一點。

言論

1、

拉斯維加斯正在舉行一年一度的電子表格 Excel 世界錦標賽,它有一個其他比賽都沒有的特點,那就是毫無趣味。

-- 《Excel 世界錦標賽》

2、

哈勃望遠鏡確定,宇宙的準確年齡是138億年。那就是我們這個世界的起源,在這之前是什麼,沒人知道。

--《韋伯望遠鏡提供的新線索》

3、

農活忙不過來。

-- @dylanaraps,Kiss Linux 的創始人,他的 GitHub 主頁上只留了這一句話,專案已經兩年多不更新了

4、

我不記得讀過的書,就像不記得吃過的飯一樣;即便如此,它們還是造就了我。

-- 愛默生

5、

早期,民航客機的駕駛艙最多有五名成員。由於導航和通訊的自動化,導航員和無線電操作員率先被淘汰。然後,飛行工程師也被淘汰了,只剩下兩名飛行員。

隨著飛行員成本的飆升,航空公司開始要求,只有一個飛行員的窄體飛機,副駕駛員被淘汰只是時間問題。

最終,僅剩的一個飛行員也會被淘汰,以後的飛機主要靠自動駕駛,再配上一名能夠有限控制飛機的地面操作員。

-- 《最後的飛行員》

往年回顧

2023:卡馬克的貓

2022:晉升制度的問題

2021:內容渠道的貶值

2020:陣地戰與奇襲戰

(完)

相關文章