差點毀掉谷歌吃豆人塗鴉遊戲的 bug

2021-02-25 程式設計師的那些事

(點擊上方藍字,快速關注我們)

編譯:伯樂在線/精算狗

如有好文章投稿,請點擊 → 這裡了解詳情

【伯樂在線導讀】:2010 年 5 月 21 日吃豆人遊戲 30 周年,Google 首頁在上午 9 點上線了一個可交互的塗鴉遊戲。幾個小時內,這個遊戲就讓全世界都為之瘋狂。不過塗鴉團隊開始陸續收到一個詭異 Bug 的報告。作者在本文中分享了這個 Bug 背後的有趣故事。

2010 年 5 月 21 日的那個周五對大多數人來說,可能都只是一個普通的周五而已。但對我來說,那一天可以說是最不同尋常的周五了。

那天我的推特癱瘓了。那天我跟我父親說了最後一句話。那天我讓數億人體驗了我做的東西。但是這裡的故事跟所有這些都沒有關係。本文講述了我是怎樣讓一些人覺得他們瘋了的。

2010 年我在 Google 工作,並被拉進了吃豆人塗鴉遊戲的研究和編程工作中。吃豆人塗鴉遊戲是 Google 為了慶祝這款經典電子遊戲誕生 30 周年而推出的,而且會放在 Google 的主頁上。在那天之前,我花了幾個月時間從頭寫完了所有的代碼(沒有任何效仿)。周五早上,太平洋時間 9 點,我們像全世界揭開了它的面紗。

這是首款像樣的交互型塗鴉,也是第一個能真正跟 Google 搜索框爭奪注意力的東西。所以,在眾多設計決策中,我們需要注意的是如何在推廣這款塗鴉遊戲和便於人們完成搜索並繼續他們的生活之間達到平衡。

在一番深思熟慮之後,我們做出了以下幾個決定:

如果訪客打開 Google 主頁超過了 10 秒鐘就自動開始遊戲(當然啦,如果他們點擊這個塗鴉,或者按下特別的「投幣」按鈕就能提前開始玩了)

來勢洶洶?可能吧。我們主頁上的可是吃豆人啊!我們對此感到非常驕傲,而且希望人們——他們還不習慣可以玩的 Google 主頁——能注意到它,能玩得開心。

即使在發布之前,那天已經像個不尋常的周五了。我們之前從未做過像個塗鴉一樣的東西。我和團隊裡的一些人通宵拍了照,還準備了一個吃豆人的內部比賽版本。就我個人而言,我還是嚇壞了。我是用戶體驗團隊的一名設計師。誠然,我的代碼通過了所有適當的審查,但是我還是不敢相信它能——一字不差地——出現在 Google 最有價值的資產上。

我們在上午 9 點打開開關。幾個小時內吃豆人遊戲就讓全世界都為之瘋狂。很快,我收到了如山洪般的反饋,以致於我根本不可能跟得上收到反饋的速度。我還突然被要求去參加新聞採訪。上面提到「我的推特癱瘓了」,其實可能是我把事情自私地過度簡化了(如果沒有整個優秀的團隊支持著我,這一切都不會發生),但是我也不認為有誇張的成分在裡面。一個小時內,隨著越來越多關於 Google 吃豆人的推特消息湧進來,推特開始向我們發送這樣的消息:

「推特過載了」

但是在所有的興奮之中——興奮的感覺被缺覺加強了,我們開始收到一個奇怪問題的報告。即,即使有些人沒有在玩吃豆人,也能聽到它的聲音。

我們最初忽略了這些投訴——「告訴他們關掉 Google 主頁就好了」——但是這麼做並沒有用。在四處研究、絞盡腦汁之後,我們發現罪魁禍首比我們想像得複雜,而且更迷人。

2010 年是火狐最好的一年。使用火狐瀏覽器的一部分人安裝了一個叫 CoolPreviews 的擴展,這樣將滑鼠懸停在連結上就可以快速預覽網頁。

在火狐瀏覽器打開的同時,該擴展就會啟動。並且在用戶不知情的情況下,它會立即在後臺打開一個隱形網頁,也就是 Google 主頁。

你很可能已經把事情發生的經過串起來了。在那個周五,google.com 自動打開有聲音的吃豆人塗鴉遊戲。如果你使用了裝有 CoolPreviews 的火狐瀏覽器,該插件就會在你啟動瀏覽器的時候,消無聲息地在後臺打開 Google 主頁,10 秒鐘之後……會莫名其妙地出現遊戲聲音。

想像一下,你在周五早上坐下來,打開電腦。對你來說,這個周五本沒有什麼異常的地方。你打開遊覽器;但可能並不了解 CoolPreviews,甚至是插件或者擴展的概念;不需要使用 Google,或者根本不知道 Google;可能也不知道用了什麼瀏覽器——或者什麼是瀏覽器。事實上,你甚至可能都沒在用瀏覽器;有可能它最小化了,默默地縮在屏幕下方的工具欄裡。可能你正在查看郵箱,或者為今天的第一輪紙牌遊戲熱身。

你幹什麼都無所謂。十秒鐘之後,你會從電腦的揚聲器中——知道怎麼調整音量嗎?知道電腦有揚聲器嗎?——聽到聲音。

這是一個隱形吃豆人遊戲的警報聲,它以最不尋常的方式滲透到你的電腦裡了。

重複。

可能你經歷過被朋友或者家庭成員用電腦問題糾纏的情況。他們不如你懂技術,再簡單不過的方法都能解決這些問題。你可能會輕蔑地問「你確定連上滑鼠了嗎?」、「老天,試試關掉大寫鎖定。」

現在來想像一下:如果他們其中之一在那個周五告訴你,他們的電腦莫名其妙發出警報一樣的聲音,你會怎麼說?

你會告訴他們,他們瘋了。他們可能也想過自己一定是瘋了。這全都怪我的代碼。

我不太記得我們到底是怎麼弄明白的。但是一個小時內,我們編寫了代碼並立即發布了一個雙重修復:

我們添加了一個可見的聲音開關,允許隨意開啟或者關閉遊戲的聲音:

前後對比。注意左下角的聲音按鈕。

/**

* Process a new Pac-Man direction requested by player

* using arrow keys or touch.

* @param {number} newDir New direction.

*/

PacManActor.prototype.processRequestedDirection = function(newDir) {

  // Enable sound as long as the user hasn’t previously

  // disabled it by clicking the sound icon.

  if (!pacMan.userDisabledSound && !google.pacManSound) {

    google.pacManSound = true;

    pacMan.updateSoundIcon();

  }

無論什麼時候遇到 bug,試著回答以下四個簡單的問題是很自然的:

發生了什麼?

怎麼修復它?

怎樣避免它再次發生?

責任人是誰?

這一次,前三個問題很容易:我們弄清楚、打好補丁、把這次的快速修復作為未來每一個塗鴉的最佳做法。

就最後一個問題來說…「責任人是誰?」很少是個好問題,但是一起來考慮一下:

這是我們的錯。我們本應該預見到這個問題的,對吧?但是看看所有這些巧合的聯繫:一個特定的瀏覽器,一個特定的異常插件,音量開啟,要等 10 秒問題才會發生。要想預見到這個問題需要多少想像力?

顯然,CoolPreviews 有一些拙劣的編程做法!我其實不確定他們為什麼要通過在後臺打開 Google 主頁來啟動——可能僅僅是隨機的默認項?或者是一種檢測網絡連接的方法?但是再次聲明, Google 主頁能承受很大的流量;並且關鍵地是,它之前從來不會發出任何聲音。所以假設在後臺打開 Google 主頁沒有任何風險並不離譜。

一開始安裝 CoolPreviews 是用戶的錯。如果一個問題是由於插件導致的,那卸載這個插件是用戶的責任。但是,你覺得一個人能意識到,導致電腦發出聲音的罪魁禍首是一個隨機的預覽擴展嗎?

瀏覽器開發商不該允許插件做類似瘋狂的事情。最近一段時間,瀏覽器很可能都能做到這一點。但是當時,網絡要更開放一點……畢竟,這個 bug 並不會威脅到你的隱私或者數據安全。

針對「責任人是誰?」這個問題,我能想到的最好答案是:網絡的複雜性。網絡已經出現了一段時間,涉及了很多利益相關者。網絡的開放性和寬容性,以及它的某些特點就這樣……自然而然地產生了。

想要因為網絡的複雜性而懲罰它,就像 Xerxes 因為大海吞沒了他差勁的橋就鞭打大海一樣。遠離網絡轉向本國客戶可能就是用一組問題來交換另一組問題。想要降低網絡的複雜性……事實上,很多聰明人把它作為工作或者閒暇時的消遣。

無論怎樣,都需要修復 bug。

修復 bug 的一種方式是建立複雜的機制,來提前識別問題並避免它們發生。當然,有時候你別無選擇,這是唯一的方法。任何與用戶數據、隱私、安全或者金融信息相關的事物都是禁區——需要謹慎地檢查並控制它們,沒有商量的餘地。

但是還有我們正在討論的這類情況。我已經在 Medium 上寫過其他奇怪的 bug,比如消失的 Polish S,以及 25 歲的系統字體從它的像素化墳墓中復活……現在是在小部分電腦上出現吃豆人的奇怪噪音。你無法完全預見那些遠不是在你的伺服器上發生的 bug,那些後果不是很嚴重的 bug。你可以試著阻止這些 bug 發生,但是假設這些 bug 會發生,並把精力用在建設基礎設施來進行 bug 的捕捉和儘快修復上會更容易。

我認為,修復吃豆人 bug 的真正成就是兩個緊湊循環:第一,支持團隊和產品部門的交流……第二,有預見能力的「熱點推送」基礎設施能讓我們的修復在幾分鐘內迅速實施,這對 Google 這種規模的公司來說是非常驚人的。

2010 年的這個周五對我來說是非同尋常的,但是我也知道我的工作讓這一天對許多其他人變得非同尋常。有些人想起了他們在 80 年代早期玩吃豆人的時光。有些人對 HTML 的可能性感到興奮。有些人只是玩得很開心然後繼續生活。

我對那一天最喜歡的反應之一是——我們將我小時候喜愛的那種遊戲廳精神帶到了 2010 年的 48 小時當中。

「我在這個咖啡店裡同時聽到了三個吃豆人的聲音。我有點愛你, Google 。」

我希望你不是遇到這個 bug 的人之一。如果你遇到了,而且我的代碼把你嚇壞了,抱歉。但是只要我還在寫代碼,總會有 bug 需要解決,無論是我的還是別人的。識別 bug、將它們按重要性排序,以及在發布之前(需要時間)或者發布之後(對人們產生影響)排除這些 bug ,在這三者之中找到一個平衡點將仍然是我面臨的更大挑戰之一。

2010 年另外一個有趣的部分是,我還得重新介紹吃豆人原作代碼的一個 bug……不過那是另一篇完全不同的文章了。

同時,我也想聽聽你的 bug 故事。在你需要負一部分責任的 bug 中,最奇怪、最意外、最酷的是哪個?把這類事情當做最好要修復和忘掉錯誤或者失敗很難。但是他們也告訴了我們一些事實,關於我們所創造的這個世界的事實,以及加強了其基礎的、奇妙的、瘋狂的複雜性。

感謝 Ryan Germick 和 Kris Hom 在這個塗鴉項目上的合作。想了解 Google 吃豆人的更多秘密?請觀看 Google I/O 2011 的一個訪談。創造一個不可能預測的情景需要多少情形交織在一起?如果你想要閱讀一篇相關的好故事,看看 Stanisław Lem 傑出的小說《機會鏈》(The Chain of Chance)。

這篇文章裡的照片拍攝於發布前的那個通宵。感謝 Dan Pupius 和 Jamie Talbot 對這篇文章提供的幫助。

看完本文有收穫?請轉發分享給更多人

關注「程式設計師的那些事」,提升編程技能

淘口令:複製以下紅色內容,再打開手淘即可購買

範品社,使用¥極客T恤¥搶先預覽(長按複製整段文案,打開手機淘寶即可進入活動內容)

相關焦點

  • 長文| 吃豆人創作者口述史:世界上最受歡迎的遊戲之一是如何誕生的?
    那當時最成功的遊戲就是吃豆人,所以我們想要為吃豆人做一套增強套件。Golson:吃豆人遊戲在日本和遠東地區大受歡迎,我們知道這勢頭不容小覷。Macrae:我們有一個專供玩吃豆人的遊戲機,我們一遍又一遍地玩,試圖找出它的弱點,也會問我們會不會覺得無聊了?為什麼這個遊戲我們能玩這麼長時間?我們意識到,吃豆人有跟 Missile Command 同樣的問題。
  • 長文|吃豆人創作者口述史:世界上最受歡迎的遊戲之一是如何誕生的?
    那當時最成功的遊戲就是吃豆人,所以我們想要為吃豆人做一套增強套件。Golson:吃豆人遊戲在日本和遠東地區大受歡迎,我們知道這勢頭不容小覷。Macrae:我們有一個專供玩吃豆人的遊戲機,我們一遍又一遍地玩,試圖找出它的弱點,也會問我們會不會覺得無聊了?為什麼這個遊戲我們能玩這麼長時間?我們意識到,吃豆人有跟 Missile Command 同樣的問題。
  • 怪獸級別的遊戲!《吃豆人》網頁版體驗
    網頁遊戲對於各位玩家來說想必一定不會陌生。不論國外還是國內,近年來網頁遊戲都處於一個告訴發展的階段,各種產品層出不窮,玩家們自然也是應接不暇。
  • Namco針對NES的DemakesXbox360吃豆人遊戲
    Namco下周將在日本為Switch發布一系列新的復古遊戲。所有遊戲均為Nintendo Entertainment System(NES)標題,但有一個例外:有一款額外的Xbox 360遊戲已移植到NES。
  • 吃豆人遊戲「40歲」了 與披薩品牌共同推出「缺角」披薩
    還記得小時候玩的那個吃豆人PAC-MAN街機遊戲嗎?今年12月7日正值該IP迎來40歲生日。當天,該IP的擁有者萬代南夢宮與披薩瑪尚諾PizzaMarzano攜手,共同在上海瑞虹天地PizzaMarzano餐廳推出了獨家聯名快閃店。
  • 一代經典遊戲吃豆人成為網頁版遊戲 將於6月登陸Twitch
    萬代南夢宮和亞馬遜遊戲今天宣布,將從今年6月開始在Twitch上推出《吃豆人》可玩遊戲,具體名稱是《吃豆人直播室》。 要玩Twitch版的遊戲,你只需要在遊戲上線後進入專門的Twitch頻道,在網頁瀏覽器上玩這款遊戲。
  • 2020年紐埃《吃豆人》遊戲發行40周年系列紀念幣欣賞
    現在,紐埃發行了一系列金銀硬幣,以紀念這一最具標誌性的遊戲《吃豆人》40周年,由25歲的巖谷徹設計。做一個吃豆人硬幣並不難。有力的角色和運動場很適合放置在硬幣上的有限空間上,硬幣挑選了我們最了解的角色來展示這款遊戲。我們來看一下硬幣背面的圖案。
  • 萬代與亞馬遜合作 推出《吃豆人》線上版本全新遊戲
    本文轉自【3DMGame】;為慶祝經典遊戲《吃豆人》誕生30周年,萬代南夢宮宣布與亞馬遜遊戲工作室合作,推出一款全新的線上版本吃豆人遊戲《PAC-MAN LIVE STUDIO(吃豆人:直播工作室)》。
  • 小時候玩的第一款遊戲吃豆人主角是缺一角的圓餅!還記得嗎?
    小時候玩的第一款遊戲吃豆人主角是缺一角的圓餅!還記得嗎?亦因為該遊戲風靡全球,假面騎士系列將在電影《假面騎士平成Generations_Dr.Pac-Man對EX-AID&Ghost_with_傳說騎士》首次與遊戲角色吃豆人合作。
  • 吃豆人博物館——懷舊合集重現經典
    相信吃豆人這個系列對於所有遊戲玩家來說都不陌生,雖然在小編的記憶裡吃豆人並沒有像瑪麗兄弟和冒險島那樣讓我廢寢忘食,不過吃豆人的經典程度絕對也是數一數二的。而給小編留下最深刻印象的就是吃豆人中那些行動敏捷的小怪獸,他們似乎有著比人類還要快速的反應,讓我們感覺自己弱爆了。
  • 紀念《吃豆人》40周年!3款復古《吃豆人》專用迷你遊戲機公開
    40年前,一款經典遊戲《吃豆人》問世,以輕鬆操作卻又節奏緊張吸引了無數玩家的喜愛,6月10日今天,3款復古《吃豆人》專用迷你遊戲機公開,既有街機版又有口袋版,全都可愛復古。·《吃豆人》(Pac-Man)是一部由同名街機遊戲移植至Atari 2600平臺的遊戲,最早由南夢宮公司於1980年在街機上推出,後由雅達利公司於1982年3月中旬發售Atari 2600版。Pac-Man最早的藝名叫Pakkuman,paku-paku表示嘴巴一張一合的動作和聲音,形象描繪了「我吃,故我在」的生活態度。
  • 《吃豆人聚會3D》大量遊戲情報放出 活力十足
    萬代南夢宮預定於2012年3月22日發售的任天堂3DS遊戲《吃豆人聚會3D》又有新情報。   本作是2010年Wii上發布的《吃豆人聚會》系列全新作品,這次要給大家帶來的情報是關於「聚會模式」、「故事模式」、「經典模式」以及「成就模式」的內容,還會介紹一部分「迷你遊戲」的內容。
  • 一起探東京池袋MAZARIA,《太鼓達人》《吃豆人》等遊戲大揭曉!
    《福音戰士 VR The 魂之座:暴走》《高達VR:臺場強襲》《高達獨角戰VR激戰:臺場上空》《哥斯拉VR》《VR瘋狂射擊Galaga Fever》《吃豆人最新加入的熱門VR遊戲——《吃豆人》、《太鼓達人》體驗大揭秘!《吃豆人》 體驗使用的是Oculus Quest,每次可支持1-2個玩家可以進入吃豆人的世界。遊戲規則和原版《吃豆人》一樣,在不被幽靈碰到的同時,吃到更多的餅乾。
  • 《吃豆人 鬼魅大冒險2》正式發布宣傳片--人民網遊戲_最權威中文...
    日前BNGI(Bandai Namco Games Inc.)公司正式公開了《吃豆人:鬼魅大冒險》的續作《吃豆人:鬼魅大冒險2(Pac-Man and the Ghostly Adventures)》,確認這款系列最新作將登陸PS3、XBOX 360、WiiU和3DS平臺。
  • 披薩瑪尚諾 X 吃豆人:今年聖誕重磅驚喜!
    寒冬帶不走美食與遊戲的熱愛!兩大知名IP從現在開始,一次性帶你體驗意式美食和童年經典遊戲帶來的純粹快樂!   2020年12月8日,用了55年時間在全球開設600+家門店,把新鮮手工義大利美食分享到全世界的比薩瑪尚諾PizzaMarzano,與80年代最經典的街機遊戲之一的吃豆人PAC-MAN聯合啦!聯名定製款新品全國同步上新!
  • 谷歌情人節塗鴉「熱戀的穿山甲」:籲保護瀕危動物
    中新網2月14日電 據外媒報導,在2月14日情人節來臨之際,谷歌在其搜索主頁上推出了一系列的情人節主題塗鴉(Doodles)。這次塗鴉的主角是一對熱戀的穿山甲。谷歌藉此機會呼籲人們關注和保護瀕臨滅絕的穿山甲。
  • 智能吃豆人的誕生之Q-Learning篇
    在進行第一輪遊戲時,我們可以默認所有狀態的得分U(s』)都為0,這樣經過多次遊戲多次迭代之後,就可以得到每一步的得分了。假設現在經過三輪遊戲後,已經獲得到了每個狀態的得分情況(如下圖),每一步的損耗R(s)設置為-0.04。
  • 忘不了這個老紳士 《吃豆人》必知的20件事
    兒童節剛過,你有沒有想起小時候玩過的遊戲呢?小編今次就跟大家說一說吃豆人這麼一款遊戲,相信大部分玩家的童年都曾有他的陪伴而來。現在,有請已經步入中年的《吃豆人(Pac-Man)》先生。算上今年的話,吃豆人先生已經35歲了,這部遊戲首先是在1980年於日本地區發售,隨後西方市場也開始風靡。簡單的玩法,簡單的造型,讓這個吃豆人先生在全球範圍流行至今。
  • 比薩瑪尚諾X吃豆人聖誕聯名來了!
    吃豆人阿爾巴比薩丨吃豆人牛油果雞肉沙拉丨吃豆人繽紛鮮莓撻 …... 作為最經典的街機遊戲,吃豆人今年已經40周年了!比薩瑪尚諾聯名了吃豆人,推出了限定款!簡直是回憶殺,只想感嘆一句爺青回。
  • 吃豆人限時免費送!
    平臺:steam1·《吃豆人冠軍版2》經典街機遊戲吃豆人的正統續作,喜歡吃豆人系列的朋友們千萬不要錯過了。(另外,各位也可以去其他伺服器的微軟商城領取XBOX版和PSN商城免費領取主機版)2·《Tennis World Tour》的三款DLC《Tennis World Tour》是一款網球模擬類遊戲,它的三款DLC目前可以免費領取。