本雜誌開源,歡迎投稿。另有《誰在招人》服務,釋出程式設計師招聘資訊。合作請郵件聯絡([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:陣地戰與奇襲戰
(完)