研究完《長安12時(shí)辰》的望樓系統(tǒng),我魔怔了
最近大熱的《長安12時(shí)辰》你看了嗎?筆者研究完其中的望樓系統(tǒng)后,陷入了無盡的思考中……
豆瓣8.6分的《長安12時(shí)辰》,害人不淺啊!
是的,我已經(jīng)消失一個(gè)月了,就因?yàn)槲胰プ穭×恕臻e時(shí)間都沒了,真的。(才不是因?yàn)槲覒校?/p>
終于,這劇今天完結(jié),我也可以恢復(fù)更新了!
作為劇粉 + 科技宅,我今天,就給你深挖一下,這個(gè)劇里的通訊設(shè)定—— 望樓。
它在第一集里就出現(xiàn)了。
「這是望樓,今日于你有大用」這是檀棋交代張小敬的第一件事。
其實(shí)就是通訊系統(tǒng),在長安城里傳遞消息。
城內(nèi)每300步就有一個(gè)望樓,消息轉(zhuǎn)瞬,即可傳遍整個(gè)長安城。
我一看到這兒,就興奮了!
誒?這不就是一個(gè),12位比特的通訊系統(tǒng)么!
你看,他有上下兩排,一共12格,每個(gè)格子可以點(diǎn)亮或熄滅。如果點(diǎn)亮是1,熄滅是0,那下面這個(gè)圖,12位就可以表示成:
101011 101100。
有了二進(jìn)制碼之后,我們就可以編碼譯碼了,也就是把「碼」和「字」對(duì)應(yīng)起來。
現(xiàn)代計(jì)算機(jī)里,最基本的,就是用ASCII碼了,下面是一個(gè)對(duì)照表:可以表示字母,數(shù)字和符號(hào)。
比如O就是0100 1111,M就是01001101, G就是0100 0111。
那么,李佳琦的口頭禪,用二進(jìn)制表示就是:0100 1111~ 01001101~ 0100 0111~
其實(shí)有12位bit已經(jīng)很多了,上面的ASCII碼,其實(shí)只要7位。(看上去是8位,但第一位都是0)
那么12位,其實(shí)可以表示2的12次方,也就是4096個(gè)漢字了。
按照咱中國1988年出版的《現(xiàn)代漢語常用字表》,常用漢字一共也就3500個(gè),可以涵蓋99.48%的日常所需,所以12位完全足夠了。
當(dāng)今計(jì)算機(jī)的漢字編碼,比較常用的,比如有Unicode,下面是一個(gè)對(duì)照表。
在我仔細(xì)研究《十二時(shí)辰》之后,我發(fā)現(xiàn),劇中其實(shí)有大小兩種望樓!
一種是上面的小望樓,兩排12格那種,還有一種是3*3的9宮格大望樓。
誒?為什么有兩套系統(tǒng)?
我個(gè)人猜測:這是通訊系統(tǒng)Infra 2.0版,工程師正在逐步遷移(Migration),還沒有完全結(jié)束,小的還沒有完全棄用(Deprecated),所以得兩套共存。
而且,兩套系統(tǒng)還可以對(duì)接。
我去,居然還做了向下兼容(Backward Compatibility)。
你可能會(huì)說,9宮格,那豈不是降低成9bit了?反而性能下降?
No No No,它其實(shí)四周還有8片花辮,可以分別收起和放出,這樣就多了8位。
加起來,就有9 + 8 = 17比特了。
哦對(duì)了,畢竟白天和晚上的需求不同,它還分為“日用”和“夜用”兩種模式。
長安百姓,真是夜里也安心呢~
你可能會(huì)問,12bit已經(jīng)夠用了,為啥要17bit呢?
除了可以傳遞更多內(nèi)容以外,還有大用:糾錯(cuò)。
你知道,信息傳遞很容易出錯(cuò),如果這12位里,有一個(gè)地方壞了,比如燈不亮了,或者接收方看走眼了,這咋辦。
你看,這12個(gè)格子太難讀了,你得一個(gè)一個(gè)數(shù),眼睛都要瞎了,隨便一抖,就錯(cuò)了。
然而,改成9宮格之后,一眼就能看對(duì)并記住,用戶體驗(yàn)直線上升,錯(cuò)誤率下降。
當(dāng)然,多出來的5個(gè)bit,還有更高級(jí)的用法。
這就是:計(jì)算機(jī)通訊里,兩個(gè)經(jīng)典手段:糾錯(cuò)碼,和,冗余。
先來看糾錯(cuò)碼。
最簡單的方法,就是“奇偶校驗(yàn)法”,也就是你多傳1位,這位表示前面幾位里面,應(yīng)該有奇數(shù)還是偶數(shù)個(gè)1。
如果接收的時(shí)候,你發(fā)現(xiàn),最后一位告訴你,前面應(yīng)該有偶數(shù)個(gè)1,結(jié)果前面是奇數(shù)個(gè)1,那就說明這數(shù)據(jù)有問題了,你得讓對(duì)方再傳一遍。
如果,你有很多位可以用來糾錯(cuò),比如大望樓多出了5位,那就可以用更高級(jí)的方法了,比如循環(huán)冗余校驗(yàn)法。
這里有點(diǎn)復(fù)雜,但說白了就是,信息位和糾錯(cuò)位,兩組數(shù),進(jìn)行運(yùn)算,如果得出的值不對(duì),那就驗(yàn)證失敗。
這玩意說深了就是研究生課程了,收。
除了糾錯(cuò)碼,還有冗余。有冗余,這本身就能糾錯(cuò)。
比如,你規(guī)定,傳遞的一個(gè)數(shù),必須所有數(shù)字,都是一樣的才有效。
那么,當(dāng)你收到了比如6668666,那你就知道:哦,那個(gè)8絕對(duì)打錯(cuò)了,本來想說的應(yīng)該是6666666。
你知道,咱們?nèi)说腄NA就有非常大的冗余,很多密碼子貌似沒啥信息,去掉了也完全沒影響。
這些“冗余”密碼子的作用,一直有很多猜測,一種解釋就是:這是防止,基因在自我復(fù)制時(shí)失誤,釀成大錯(cuò)。
好了,以上都是我的腦洞。
在看了官方公布的資料以后,證明我完全是想多了。
根據(jù)官微@北斗北工作室,小望樓這12個(gè)框,其實(shí)只能代表3位,十進(jìn)制數(shù)…
每四個(gè)一組,分別代表百位,十位,個(gè)位,0~9分別有不同的圖案。
比如,下面這個(gè)就代表序號(hào)900。
當(dāng)然了,阿拉伯?dāng)?shù)字這種標(biāo)記法要到近代才被中國人熟練使用,所以當(dāng)年使用的都是算籌表示法:
那么900,其實(shí)就是:
在編碼之后,就可以翻譯了,過程也很簡單,就是查表。
靖安司官員們,有這么一個(gè)袋子,作為密碼本。
而上面的900號(hào),代表的就是“狼”,你看就在這里。
按照這個(gè)規(guī)律,其實(shí)能傳遞很多信息了,比如「張小敬」就是這樣的:
怎么樣,學(xué)會(huì)了嗎?
來來來,咱們做一下課后小練習(xí)。
練習(xí)題1:請(qǐng)翻譯下圖。
練習(xí)題2:請(qǐng)翻譯下圖。
練習(xí)題3: 熟讀靖安司密碼本,并背誦全文。(參考答案見文末)
以上,都是“靖安司公務(wù)員考試”送分題哦。
對(duì)了,別忘了還有:大望樓。
本質(zhì)上也是編碼成十進(jìn)制的3位數(shù)。
9宮格的空間,用來表示個(gè)位。
左邊的4個(gè)花瓣位,用來表示十位。
右邊的4個(gè)花瓣位,用來表示百位。
當(dāng)然,什么都不出現(xiàn),就表示0。
那么,下面這個(gè),就表示的是701。
不過,我很快發(fā)現(xiàn)了這個(gè)大望樓系統(tǒng)的兩個(gè)Bug。
- Bug-1:四宮格表示0~9我還能記住,可這九宮格,也太隨意了,編碼的人瘋了。
- Bug-2:為什么左邊是高位起,右邊是低位?
反人性嗎?
難道不應(yīng)該:左邊是百位嗎?
大望樓那邊,左邊的花瓣是十位,右邊是百位,這是要弄死我。
你看這個(gè)“狼”,很容易讀成900啊,喂。
反正,這么差的用戶體驗(yàn),一般人絕對(duì)懵了。
怪不得,只有我賓哥這種人肉計(jì)算機(jī),才可以瞬間看懂。
這么說來,望樓可以傳遞0到999,一共1000個(gè)子信息。
可以說,雖然是12位比特的承載量,而現(xiàn)有的望樓系統(tǒng),只用了四分之一,有75%的冗余量待開發(fā),或者就是為了糾錯(cuò)的故意留下的。
妙?。?/p>
經(jīng)過我再仔細(xì)研究,劇中還有另一種編碼方式:八卦法。
因?yàn)樨韵笫侨械穆?,這么一看,我大概知道為啥劇組想用大望樓了。
傳輸?shù)臅r(shí)候,要傳兩遍,分別組成上下兩組八卦。
整合以后,就是一個(gè),額,現(xiàn)代計(jì)算機(jī)叫:Index(索引)。
譯碼時(shí),用的則是開元20年,孫愐所修的音韻書籍《唐韻》,按照卷、韻、字,三個(gè)等級(jí),依次索引。
可是,這部分似乎沒有在劇中用上?或者說用的不多?我咋沒發(fā)現(xiàn)呢。
莫非,這只是設(shè)想的一個(gè)方案,因?yàn)樘珡?fù)雜了,后來就沒用上,官方放出來裝x的?
厲害厲害厲害。
對(duì)了,上面這套編碼規(guī)范,可不是鬧著玩的,它被切切實(shí)實(shí),用在了劇中拍出來的。
根據(jù)官微@北斗北工作室,劇中望樓每一個(gè)鏡頭都是對(duì)的。
比如:「張都尉為民捉狼。全城武侯、不良人隨時(shí)聽張都尉號(hào)令」
這句話,是這么傳遞的。
先是跟電報(bào)一樣,人工對(duì)信息進(jìn)行壓縮,并分割成最小信息元:
張(263)都尉(197)捉(134)狼(121) 全城(20) 武職(217) 聽令(152)
于是,信息就從原來的22個(gè)漢字,縮短為7組信息,只需變換七次。
按照每秒傳兩個(gè),全部傳完只需3.5秒。
不過,如果遇到復(fù)雜信息,就有點(diǎn)蛋疼,比如下面這個(gè)。
一共48個(gè)信息元…
估計(jì)接收方人腦的內(nèi)存,是不夠的吧。
而可憐的美術(shù)老師,也只能小心地寫上“內(nèi)容精簡待商榷”……
我真的要對(duì)這部良心劇豎大拇指,太強(qiáng)了。
好了,以上就是望樓系統(tǒng)的全部了。
最后,給你送上一個(gè)雞湯:
無論遇到任何困難,都要迎難直上,不退。
「彩蛋」
其實(shí),我還有一個(gè)腦洞(已經(jīng)魔怔)。
這套系統(tǒng)的安全性其實(shí)不行,畢竟密碼本這種辦法,還是最簡單的加密手段。
一旦密碼本被賊人所用,安全性盡失,周全無望。(額,我怎么開始了文言文)。
反正是傳數(shù)字嘛,那當(dāng)年完全可以用現(xiàn)在流行的RSA加密了,也就是:設(shè)定一個(gè)很大的素?cái)?shù)p和q,然后傳遞這個(gè)乘積,解密的時(shí)候,再做mod運(yùn)算by (p-1)(q-1)……
練習(xí)題參考答案
- 進(jìn)入(701)
- 西市(843)
- (略)
#專欄作家#
Han,著有《硅谷思維》一書,微信公眾號(hào):涵的硅谷成長筆記(ID:HanGrowth),人人都是產(chǎn)品經(jīng)理專欄作家。硅谷一線工程師,專注電商、零售、社交、商業(yè)化、人工智能等領(lǐng)域。
本文由 @Han 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議
我想說的是,望樓這種即時(shí)通訊設(shè)施,第一要求就是快,根本沒必要整這么完備的編碼。最優(yōu)的應(yīng)該是設(shè)定一些常用符號(hào)馬上能夠打出來的
關(guān)于個(gè)十百順序的問題,你忘了,古代寫字都是從右往左寫的嗎?你說的不習(xí)慣,只是現(xiàn)代人不習(xí)慣而已
導(dǎo)演說,我沒這么想
讓我想到無間道里的摩斯密碼
狼人
這篇文章讓我明白,為什么產(chǎn)品的十二時(shí)辰這么火了
這哪里難了,不就是大學(xué)時(shí)候?qū)W習(xí)的通信知識(shí)嘛
不過對(duì)于非專業(yè)人士來說卻是要花點(diǎn)時(shí)間看看
真相了
牛批!
你太牛逼了?。。。?/p>
0100 1111~ 01001101~ 0100 0111~牛~
哈哈哈,看得懂,才怪…
看得懂的都是人才
贊 有心了
本來想一大早看看清醒清醒,看完更是糊涂了
你是個(gè)鬼才
哈哈哈,二進(jìn)制太現(xiàn)代啦,會(huì)被噴的
鼓掌鼓掌,通過現(xiàn)象看本質(zhì),我也喜歡看歷史,去研究本質(zhì)
艘發(fā),你這個(gè)腦洞大開啊