1. 程式人生 > 程式設計 >我在一本技術書裡放置的十個彩蛋

我在一本技術書裡放置的十個彩蛋

Flask Web 開發實戰》已經出版一年多,書裡面的一些彩蛋也不知道有多少被人發現了。再不公開,我可能都要忘了。所以就趁著出版一週年這個契機整理一下吧。

這些彩蛋大都是關於電影的一些雙關和文字遊戲,有一些說是彩蛋可能會有些勉強。比較正式的一共有 10 個,分別對應十部電影。也就是第三章介紹模板引擎時的例項程式電影清單裡列出來的十部電影。

下面按照出現順序一一劇透。

阿甘正傳(Forrest Gump)

P14 第一章:初識 Flask 1.3

這一節介紹執行 Flask,章節標題是「Run,Flask,Run!」。

阿甘正傳裡,當阿甘被欺負的時候,珍妮總會喊「Run,Forrest,Run!」。

紅白藍三部曲(Three Colours trilogy)

P36 第二章:Flask 和 HTTP 2.2.3.3

介紹 URL 規則的 any 轉換器時使用的示例如下:

@app.route('/colors/<any(blue,white,red):color>')
def three_colors(color):
    return '<p>Love is patient and kind. Love is not jealous or boastful or proud or rude.</p>'複製程式碼

這個並沒有什麼特殊含義,就是列了三個顏色作為 URL 選項,返回的都是聖經裡的那句話。

電影清單

P76 第三章:模板

第三章在示例程式裡的填充資料是整本書所有彩蛋相關的十部電影,作為一個足夠顯眼的線索。

movies = [
    {'name': 'My Neighbor Totoro','year': '1988'},{'name': 'Three Colours trilogy','year': '1993'},{'name': 'Forrest Gump','year': '1994'},{'name': 'Perfect Blue','year': '1997'},{'name': 'The Matrix','year': '1999'},{'name': 'Memento','year': '2000'},{'name': 'The Bucket list','year': '2007'},{'name': 'Black Swan','year': '2010'},{'name': 'Gone Girl','year': '2014'},{'name': 'CoCo','year': '2017'},]複製程式碼

另外這個電影清單也有現實版:IMDb映象豆列

尋夢環遊記(CoCo)

P105 第四章:模板

這一章一開始給出了一個 HTML 登入表單的示例,示例程式碼和渲染後的畫面(圖 4-1)中,使用者名稱輸入框的佔位文字是 Héctor Rivera,密碼輸入框的佔位文字是 19001130,勾選了記住登入狀態的「記住我(Remember me)」選項。

Héctor Rivera 是電影裡小男孩在亡靈世界裡遇到的死去的爸爸,他的生日是 1900 年 11 月 30 日,勾選了「Remember me」,他就會被人記住,所以就不會消失了……

消失的愛人(Gone Girl)

P139 第五章:資料庫

第一小節介紹關係型資料庫的時候給出了一個示例表格(表 5-1),如下:

這兩條資料分別對應《消失的愛人》裡的男女主角。

記憶碎片(Memento)

同樣在第五章,這一章寫了一個用來記筆記的示例程式,分別使用了三條筆記內容作為示例演示 CRUD 操作,即:

這三條筆記均是《記憶碎片》裡男主角記在各處的筆記。

中國發出的第一封電子郵件

P178 第六章:電子郵件

第六章介紹電子郵件使用的示例郵件正文是「Across the Great Wall we can reach every corner in the world.」。這是 1987 年從中國發出的第一封電子郵件正文。

本來是想把 Wall 換成另一個單詞以便反映現狀的,但是出於安全考慮,沒那麼做。不過這句話原版現在來看已經是夠諷刺的了。

黑客帝國(The Matrix)

P246 第八章:個人部落格

介紹自定義 flash 訊息樣式的時候,給出了下面的自定義 CSS 類示例:

.alert-matrix {
    color: #66ff66;
    background-color: #000000;
    border-color: #ebccd1; /* 這一行好像沒用 */
}複製程式碼

呼叫示例如下:

flash('Knock,knock,Neo.','matrix')複製程式碼

實際的顯示效果如下所示:

模擬了電影原圖:

《未麻的部屋》(Perfect Blue)和《黑天鵝》(Black Swan)

P236 第八章:個人部落格

這一章的示例部落格名字叫做 Bluelog,模仿了《未麻的部屋》裡記錄未麻生活的網站,初始化賬戶的資訊如下:

def fake_admin():
    admin = Admin(
        username='admin',blog_title='Bluelog',blog_sub_title="No,I'm the real thing.",name='Mima Kirigoe',about='Um,l,Mima Kirigoe,had a fun time as a member of CHAM...'
    )
    ...複製程式碼

另外介紹部落格的主題地方提供了藍色和黑色兩個主題,主題名分別是「Perfect Blue」和「Black Swan」,對應《未麻的部屋》和《黑天鵝》兩部電影的英文名(後者致敬了前者)。

龍貓(My Neighbor Totoro)

P260 第八章:個人部落格

這個算不上彩蛋……在介紹生成英文標題 slug 的 slugify 函式的時候,實際呼叫的示例使用了龍貓的幾種名字作為輸入資料:

>>> slugify(u'My Neighbor Totoro')
u'my-neighbor-totoro'
>>> slugify(u'鄰家的豆豆龍')
u'lin-jia-de-dou-dou-long'
>>> slugify(u'となりのトトロ')
u'tonarinototoro'複製程式碼

遺願清單(The Bucket List)

P421 第十章:待辦事項程式

這個彩蛋是刻意加的,因為這一章的示例程式是一個 Todo List 程式,所以要找一個和清單相關的電影。示例程式裡的幾條待辦事項就是電影裡的一些遺願。當時還沒看過這個電影,特意去看了一遍,感覺一般。

應該就這些了,如果還有其他的,歡迎補充。

那麼放置這些彩蛋的目的是?沒目的……僅僅就是為了好玩。同時為了能讓發現彩蛋的人也會覺得好玩。