280字編程挑戰(zhàn):把一條推特長(zhǎng)度的代碼玩出花
推特與計(jì)算機(jī)能擦出什么樣的火花呢?大多數(shù)人可能就想到在計(jì)算機(jī)上發(fā)推特唄。但是,有人就不這么想??釔塾?jì)算機(jī)演進(jìn)史和推特的 Dominic Pajak 創(chuàng)建了 BBC Micro Bot,它能夠?qū)⒁粭l 280 字符的推特經(jīng)過模擬處理進(jìn)而創(chuàng)建 3 秒時(shí)長(zhǎng)的視頻。
開源社區(qū)總是鼓勵(lì)人們分享代碼。近日,BBC 舉辦了這樣一個(gè)活動(dòng),名為 BBC Micro Bot。比賽要求參賽者在推特上 @BBC Micro Bot 這一賬號(hào),賬號(hào)機(jī)器人會(huì)收集推特代碼,然后在類似于 80 年代的 BBC Microcomputer 上運(yùn)行,并輸出一個(gè) 3 秒鐘的 gif 動(dòng)畫,而這一微電腦是 Basic 語言運(yùn)行的。
乍一聽并不覺得有什么難度,但我們會(huì)發(fā)現(xiàn),參賽者們?cè)谝黄铺厮拗频淖謹(jǐn)?shù)(280 字)下,會(huì)盡可能的展示出他們令人吃驚的編程技巧。這些參賽者當(dāng)中不乏有我們熟悉的大神,如 Raspberry Pi 的創(chuàng)始人 Ebon Upton 等。
該賬號(hào)的發(fā)起者 Dominic Pajak 表示,@bot 進(jìn)行輸出的帖子在短短的幾周內(nèi)達(dá)到了 1000 萬的訪問量,大約每一周運(yùn)行 1000 余個(gè) Basic 程序。
開發(fā)者的自動(dòng)程序可以按照算法繪制不同的圖案。
Upton 為 BBC Micro Bot 的原始 CPU,即 6520(8 字節(jié)微處理器)編寫了 150 字節(jié)的數(shù)據(jù)和機(jī)器代碼。同時(shí)模擬器在處理時(shí)也非常全面。然后,他利用 Base64 Binary-to-text 編碼方案將二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為 tweetable 文本,并利用具有解碼功能的 Basic 小程序?qū)?shù)據(jù)封裝起來,進(jìn)而啟動(dòng)機(jī)器代碼。之后,人們一直想用更復(fù)雜的編碼方案來封裝更多數(shù)據(jù)。
BBC Micro Bot 技術(shù)詳解及演化
BBC Micro Bot 的創(chuàng)建者 Pajak 是 Arduino 的商務(wù)拓展副總裁,他非常熱愛計(jì)算機(jī)演進(jìn)史和推特,因此創(chuàng)建了這個(gè)項(xiàng)目。Pajak 表示,將計(jì)算機(jī)和推特二者結(jié)合起來的點(diǎn)子很不錯(cuò)。此外,他選擇創(chuàng)建 Micro Bot 也有技術(shù)方面的理由,BBC Basic 主要是由 Sophie Wilson 開發(fā)的,這是目前為止最好的 Basic 實(shí)現(xiàn),其中的一些特性使得代碼「縮小」成為可能。
BBC Micro Bot 創(chuàng)建者 Dominic Pajak。
從技術(shù)層面具體來說,Bot 是由 Javascript 語言編寫的,并作為 JSbeed 模擬的前端。當(dāng) bot 發(fā)現(xiàn)一條推特,它會(huì)進(jìn)行信息過濾,然后將文本添加至模擬的 BBC Micro 鍵盤緩沖區(qū)。經(jīng)過 30 秒的模擬時(shí)間,bot 使用 ffmpeg(音視頻記錄、轉(zhuǎn)換和流處理的完整、跨平臺(tái)解決方案)創(chuàng)建 3 秒時(shí)長(zhǎng)的視頻。需要注意的是,bot 最初是在樹莓派 4 上運(yùn)行,之后遷移至了亞馬遜網(wǎng)絡(luò)服務(wù)(Amazon Web Service)上。
用戶對(duì)此有什么樣的反饋呢?Pajak 表示自己收到了很多正面的反饋。人們對(duì)首次通過推特使用 BBC BASIC 非常好奇,也發(fā)現(xiàn)了其中的很多樂趣,拉丁美洲的用戶甚至創(chuàng)造出了很多口號(hào)和表情包。
與此同時(shí),bot 程序的復(fù)雜程度也大幅提升,從簡(jiǎn)單的 Basic 程序到 Upton《生命游戲》的實(shí)現(xiàn)等等。隨著程序門檻不斷提升,Pajak 也在思考 280 字符的代碼是否真的能夠?qū)崿F(xiàn)這些功能。因此,他轉(zhuǎn)向使用 Katie Anderson Windows 3.1 logo 的搞笑編碼(tongue-in-cheek encoding),以及 Paul Malin 經(jīng)典彈力球 demo 的復(fù)現(xiàn),后者通過特殊的編碼方式將 361 個(gè) ASCII 字符代碼壓縮至 280 個(gè) Unicode 字符的推特內(nèi)容。
Katie Anderson 的 Windows 3.1 logo 搞笑編碼。
Paul Malin 經(jīng)典彈力球 demo 復(fù)現(xiàn)。
如果有人想要在 Apple II 和 Commodore 計(jì)算機(jī)上創(chuàng)建類似的 Bot,Pajak 會(huì)給出指導(dǎo)建議。此外,Pajak 正考慮在實(shí)體 BBC Micro 上執(zhí)行這些推文,并表示已經(jīng)使用 Arduino MKR1010 將 BBC Micro 聯(lián)網(wǎng)了。