磊 發(fā)自 凹非寺
量子位 | 公眾號(hào) QbitAI
程序員要“肛”起來,真是沒誰了。
事情還得從前幾天國際象棋界曝出的驚天丑聞?wù)f起。
當(dāng)時(shí),世界冠軍Magnus Carlsen(老卡哥)直播對(duì)戰(zhàn)19歲新秀Hans Niemann(小漢斯),結(jié)果敗了。
隨后老卡哥選擇退出比賽,并發(fā)推文暗指小漢斯在比賽過程中作弊。
而小漢斯在此之前確實(shí)有過線上比賽的作弊史,于是網(wǎng)絡(luò)上“靠肛珠作弊”的聲音甚囂塵上。
就連馬斯克也一度參與到討論中,暗有所指地來了句“it’s in ur butt”。
然后這件事引發(fā)了一位荷蘭程序員Ron Sijm(西姆哥)極大的興趣:“這丑聞,我一直在follow”。
于是在周末閑暇之余,西姆哥就研究起了“肛珠作弊”,竟然還把代碼給開源了!
項(xiàng)目名曰“ButtFish”:
把國際象棋走法的摩斯密碼,輕松送進(jìn)你的屁股里。
這可真是硬核“煉肛”的節(jié)奏啊……
西姆哥煉肛,第一步做的就是在GitHub上搜尋是否有可以借鑒的項(xiàng)目。
不幸的是,他并沒有找到可以直接拿來可以用的,倒是有個(gè)較為接近項(xiàng)目,叫SockFish。
這個(gè)項(xiàng)目我們之前有聊到過,大致就是用樹莓派連上鞋墊做成一個(gè)作弊器:
輸入要靠鞋里安裝的壓力傳感器,輸出則靠振動(dòng)馬達(dá),溝通靠的就是摩斯密碼。
雖然原理上有點(diǎn)那味兒了,但西姆哥認(rèn)為這東西想塞進(jìn)屁屁里是不太現(xiàn)實(shí)的。
于是乎,他又搜尋了一圈,發(fā)現(xiàn)有個(gè)叫Buttplug.io的開源項(xiàng)目,同樣也可以通過震動(dòng)來產(chǎn)生摩斯密碼。
至于震動(dòng)的“介質(zhì)”是個(gè)啥,咱們就不深聊了,大家可以自行腦補(bǔ)(好羞好羞)……
在做好調(diào)研工作之后,西姆哥還深入思考了一個(gè)問題——誰會(huì)去搞這么個(gè)“智能肛珠”。
在他看來,研究“智能肛珠”的人需得滿足下面這三個(gè)條件:
你得對(duì)屁屁相關(guān)的東西感興趣吧,得會(huì)下國際象棋吧,最關(guān)鍵的你還得會(huì)編程,是吧?
西姆哥覺得能滿足這三個(gè)條件的人微乎其微,所以他一咬牙、一跺腳:
這個(gè)“天選之子”,放著我來!
簡單來說,西姆哥的方法主要分為三個(gè)步驟。
首先,通過讀取棋盤FEN字符串,來確定下一步棋的最佳走法。
其次,把最佳走法編碼成摩斯密碼。
最后,摩斯密碼發(fā)送到連接的設(shè)備。
由于西姆哥沒有找到非常合適的肛珠,所以他在演示的過程中,用自家的球形大燈來代替——燈泡閃爍一次相當(dāng)于肛珠震一次。
(也是相當(dāng)有那個(gè)味道了)
至于智能肛珠產(chǎn)生的震動(dòng),如何聯(lián)動(dòng)使用者作弊,接下來我們淺談一下。
國際象棋8x8的格子一般橫向編為小寫的a-h、縱向編為1-8,棋子則根據(jù)英文單詞首字母命名,如后(Queen)就是大寫Q,象(Bishop)就是大寫B(tài),另外小寫x代表吃子。
這樣一來,每一步棋都可以寫成類似“Bxg2”(把象移動(dòng)到g2格子并吃子)的簡短編碼形式,這也是一種通用的國際象棋記譜方法。
……
不過有一說一,西姆哥也表態(tài)說,目前還沒有確鑿的證據(jù)表明小漢斯是通過智能肛珠來作弊,所以這個(gè)項(xiàng)目也只是他興趣使然。
關(guān)于這場(chǎng)智能肛珠作弊的風(fēng)波,老卡哥在這兩天發(fā)表了一項(xiàng)最新聲明。
在這份聲明中,老卡哥直言道:
小漢斯(Hans Niemann)作弊的次數(shù)比他公開承認(rèn)的次數(shù)還要多。
如果沒有小漢斯的明確允許,我能公開發(fā)言的內(nèi)容是有限的。我只能通過我的行動(dòng)來表明,我不愿意和他下棋。
不管這件事的結(jié)果是什么,我都希望真相可以公之于眾。
這份聲明之下,網(wǎng)友們的評(píng)論也是觀點(diǎn)不一。
有人認(rèn)為老卡的做法是在毀了一個(gè)19歲少年的大好前程:
如果你有證據(jù)證明這孩子作弊了,那就把證據(jù)亮出來。
也有網(wǎng)友認(rèn)為,官方需要在比賽之前,對(duì)選手做一個(gè)TSA身體掃描,檢查一下是否有智能肛珠這樣的作弊設(shè)備:
總之,國際象棋界的這場(chǎng)智能肛珠作弊風(fēng)波目前尚未有明確的結(jié)果,事件還需靜候進(jìn)一步的發(fā)展。
這位煉肛大師名叫Ron Sijm,是一位來自荷蘭的程序員。
據(jù)個(gè)人主頁信息顯示,他通常在一家IT解決方案公司DotNet工作,不過目前Appical公司擔(dān)任程序開發(fā)人員。
還記得剛才咱們提到的那個(gè)妙不可言的網(wǎng)站吧?
西姆哥現(xiàn)在一直在和上面的用戶積極交流,希望能夠找到擁有設(shè)備,還想嘗試一下他軟件的那位“天選之子”。
Emmmm……有點(diǎn)意思。
參考鏈接:
[1]https://github.com/RonSijm/ButtFish
[2]https://incoherency.co.uk/blog/stories/sockfish.html
[3]https://buttplug.io/
[4]https://www.vice.com/en/article/5d3w9z/did-hans-neimann-cheat-at-chess-with-a-sex-toy-this-coder-is-attempting-to-find-out
[5]https://gizmodo.com/chess-cheating-magnus-carlsen-hans-niemann-chess24-1849585332
— 完 —
量子位 QbitAI · 頭條號(hào)簽約
關(guān)注我們,第一時(shí)間獲知前沿科技動(dòng)態(tài)
了軟硬件和網(wǎng)絡(luò)通訊協(xié)議上的漏洞,近年來我們還見到了各種稀奇古怪的 PC 數(shù)據(jù)竊取方案,比如通過芯片工作時(shí)的電磁波、或人耳難以察覺的揚(yáng)聲器 / 麥克風(fēng)方案來泄露數(shù)據(jù)。近日,以色列本·古里安大學(xué)的研究人員更是突發(fā)奇想,演示了如何通過風(fēng)扇振動(dòng)和智能手機(jī),成功地從 PC 上竊取數(shù)據(jù)。
即便是物理上相互隔離、且沒有接入到互聯(lián)網(wǎng),這套被稱作 AiR-ViBeR 的方案,還是能夠以人們難以察覺的方式來泄露數(shù)據(jù)。
理論上,我們可以將 CPU、GPU、機(jī)箱風(fēng)扇等機(jī)電組件的振動(dòng)模式與特殊的惡意軟件結(jié)合使用,以直接操控風(fēng)扇的轉(zhuǎn)速。
AiR ViBeR Exfiltrating Data from Air-Gapped Computers(via)
概念驗(yàn)證期間,研究人員使用了一部和計(jì)算機(jī)放在同一張桌面上的智能機(jī)。盡管兩者之間沒有物理和常見的無線連接,但手機(jī)仍可通過加速度計(jì)來記錄振動(dòng)的變化。
三星 Galaxy S10 等高端設(shè)備,其內(nèi)置的傳感器已擁有足夠的精確度,分辨率達(dá)到了 0.0023956299 m / s2 。
這種方式的另一個(gè)優(yōu)點(diǎn),就是攻擊者無需破解任何移動(dòng)設(shè)備 —— 無需在 Android / iOS 設(shè)備上啟用特殊的權(quán)限,即可在后臺(tái)神不知鬼不覺地讀取加速度計(jì)的數(shù)據(jù)。
相關(guān)代碼甚至可以借助 Web 瀏覽器的 JavaScript 腳本來實(shí)現(xiàn),不過目前這項(xiàng)研究的最遠(yuǎn)傳輸距離也只有 1.5 米、且速度相當(dāng)緩慢,因此大家沒必要太過擔(dān)心。
迎來到我的CSS3專題系列文章,更多精彩內(nèi)容持續(xù)更新中,歡迎關(guān)注 :)
CSS3 3D在大多的項(xiàng)目中應(yīng)用還是挺廣泛的,今天我將繼續(xù)為大家分享一個(gè)新的3D交互效果。
先來看我們今天要實(shí)現(xiàn)的效果吧!看似好復(fù)雜,1招教你搞定它,沒錯(cuò),就是通過關(guān)鍵幀動(dòng)畫來搞,我們一步步的來分析看
一個(gè)3D翻轉(zhuǎn)的圖集
老規(guī)矩,先布局,這個(gè)就比較簡單了。一個(gè)容器里面放N個(gè)div,依次絕對(duì)定位,使其所有的圖片疊在一起!
然后讓它們的父級(jí)設(shè)置為3D空間,并設(shè)置景深。
值得注意的是,不要忘了設(shè)置旋轉(zhuǎn)基點(diǎn)為底部。
絕對(duì)定位后,我們還要設(shè)置每一張圖片的層級(jí),倒序
從gif圖中可以看出來。每張圖片都會(huì)有一個(gè)倒影的效果。在CSS3中我們是采用的box-reflect來實(shí)現(xiàn)倒影效果
box-reflect:none | <direction> <offset>? <mask-box-image>
第一個(gè)參數(shù)為:我們要設(shè)置的倒影的方向,它的取值有:
第二個(gè)參數(shù)offset是用來設(shè)置生成倒影與對(duì)象(原圖)之間的間距,其取值可以是固定的像素值,也可以是百分比值
第三個(gè)參數(shù)是用來設(shè)置倒影的遮罩效果,可以是背景圖片,也可以是漸變生成的背景圖像
來看一個(gè)示例:
demo中設(shè)置是的10px ,gif圖中是0
注意:box-reflect屬性并不是一個(gè)標(biāo)準(zhǔn)的css3屬性,所以我們需要加上webkit內(nèi)核前綴。不加的話,效果出不來。
圖中的動(dòng)畫效果我是采用的CSS3的幀動(dòng)畫來完成的,我們先來看看幀動(dòng)畫的語法。
要想使用幀動(dòng)畫,首先我們得先定義一個(gè)動(dòng)畫幀,我們通過@keyframes關(guān)鍵字來定義它
語法:
@kyeframes 動(dòng)畫名稱{ 0%{ ... } 10%{ } 100%{ //.. } }
我們?cè)趧?dòng)畫幀函數(shù)里面可以精準(zhǔn)的定義動(dòng)畫的每一幀的變化情況。我們可以使用百分比的形式,也可以使用關(guān)鍵字,from to
定義完成后,我們可以在元素身上設(shè)置動(dòng)畫相關(guān)的屬性
animation:動(dòng)畫名稱 動(dòng)畫時(shí)間 延遲時(shí)間 動(dòng)畫運(yùn)動(dòng)形式 ...
我們先來實(shí)現(xiàn)一個(gè)簡單的demo看看
運(yùn)動(dòng)一次,運(yùn)動(dòng)完成后,又回到了第一幀,一般來說,我們希望它停留在動(dòng)畫的最后一幀。我們一般在animation上再加一個(gè)forwards即可。
當(dāng)我們點(diǎn)擊下一張的時(shí)候,當(dāng)前的圖片向前翻轉(zhuǎn)消失,下一張出現(xiàn),所以我們需要定義兩個(gè)幀動(dòng)畫效果。
當(dāng)下一張圖片出現(xiàn)后,圖片本身一個(gè)輕微的振動(dòng)效果,這里我們也是通過多定義幾個(gè)動(dòng)畫幀來實(shí)現(xiàn)的具體的代碼如下:
最后我們來實(shí)現(xiàn)點(diǎn)擊的邏輯。當(dāng)我們點(diǎn)擊下一張的時(shí)候,我們需要將當(dāng)前的一張的動(dòng)畫設(shè)置成hide,下一張圖片設(shè)置成show
這里我使用的是iNow變量來表示當(dāng)前是第幾張圖片。
源碼請(qǐng)私信我
效果完成。
這里是【暢哥聊技術(shù)】CSS3專題的系列文章,更多精彩內(nèi)容持續(xù)更新中……
未完待續(xù)。。。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。