作者:阮一峰
隨機數,這是一個問題
今天談談,怎么生成真正的隨機數。
這個問題超難,但有一些很有趣的內容。
首先,編程語言提供的隨機數,是偽隨機數。
V8 引擎的官網有一篇文章(下圖),特別提醒大家這一點。它內置的隨機數不是真隨機數,而是偽隨機數。
所謂偽隨機數,并非真的隨機,而是算法得到的。只要初始的種子值相同,算法會給出一樣的結果。
JavaScript 和許多其他語言,都有這個問題。所以,遇到特別強調隨機的場合,都不應該使用語言內置的隨機數生成器。
真隨機數需要滿足三個條件。
- (1)無法預測。隨機數不能被猜到,所以必須非常大,否則會被暴力破解。
- (2)不能重復。每次生成的隨機數,不能是一樣的。
- (3)均勻分布。隨機數必須平均散布在所有區間,不能集中在某些區間。
一般來說,只有通過硬件,才能得到真隨機數,單純的軟件算法做不到。
科學家絞盡腦汁,想出各種辦法,通過硬件生成隨機數。
著名的Random.org就是專門生成一個隨機數的網站。
它在全世界部署了多個無線電接收器,專門監聽大氣無線電波(即大氣噪音,可以理解成大氣的布朗運動),通過隨機的無線電信號來生成隨機數。下圖是它的早期硬件設備。
因為有硬件支出,使用它的隨機數,需要付費。所以,大家可以看到,真隨機數是有成本的,不是跑一下程序就可以了。
世界最大的 CDN 服務商 Cloudflare ,為了得到真隨機數,做得更絕。
它的三個辦公室,每個都有不一樣的隨機數生成裝置。
(1)舊金山總部。一進門就有一堵墻,放滿了幾十盞熔巖燈。
熔巖燈內部是融化的蠟,每時每刻都在變化著形狀。
需要隨機數的時候,就對著這堵墻拍一張照片。每張照片都是不一樣的,然后計算照片的哈希,將其作為種子值,計算得到一個隨機數。
(2)倫敦辦公室。那里有一面"單擺墻",放滿了各種單擺裝置。
單擺和它們的影子,每時每刻都在擺動。每次照片的哈希也是不一樣的,可以作為隨機數的種子值。
(3)奧斯汀辦公室。那里的天花板,掛了很多彩色的反光片。
這些反光片對空氣流動十分敏感,開門、關門、空調、溫度、濕度,都會讓其轉動,反射出不同顏色的光。因此,也可以用來當作隨機數的種子值。
科技動態
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、
早期,民航客機的駕駛艙最多有五名成員。由于導航和通信的自動化,導航員和無線電操作員率先被淘汰。然后,飛行工程師也被淘汰了,只剩下兩名飛行員。
隨著飛行員成本的飆升,航空公司開始要求,只有一個飛行員的窄體飛機,副駕駛員被淘汰只是時間問題。
最終,僅剩的一個飛行員也會被淘汰,以后的飛機主要靠自動駕駛,再配上一名能夠有限控制飛機的地面操作員。
--《最后的飛行員》
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.