LOLWUT: a piece of art inside a database command

Salvatore Sanfilippo

LOLWUT:資料庫指令裡的一件藝術品

過去幾天相當激烈。關於是否該用不同詞彙取代 Redis 複寫中所使用詞彙的爭論中,其中一個論點是這樣的:去做一件不會產生任何技術成果的工作,值得嗎?

當我在修改 Redis 原始碼、盡可能去除特定詞彙時,我開始思考,無論我對自己正在做的工作抱持什麼想法,我就是那種喜歡寫沒有可衡量技術效果的程式碼的人。替換詞彙這件事本身就很煩人,即使在那其中,也還是有幾個值得一提的技術挑戰。但還有一種程式碼,我認為它具備一種叫做「hack value(駭客價值)」的特質。它或許解決不了任何技術問題,卻值得一寫。有時是因為寫程式碼的過程本身就很有收穫。有時則是因為用非常高深的技術想法去解決一個沒什麼用的問題。有時,程式碼就只是為了藝術而寫。

在某種程度上,過去幾天在 Twitter 上大多欠缺充分資訊、混亂又情緒高漲的討論,讓我覺得,此時此刻,我們已經離 60 年代最早的那批駭客非常遙遠。隨著年紀漸長,我發現要再用一種駭客視角來談論技術,變得越來越困難——那種沒有藩籬、沒有既定成見,極限就在於探索本身的視角。你說的每件事都有所謂的最佳實務。每個想法都有禁忌。對於這種新的現狀,我只想說 LOLWUT,因為我不覺得自己被它所代表,它也不代表駭客精神,至少在我心中的駭客精神不是如此。所以,我的想法是,花一點在技術上毫無用處的時間,去探索一些屬於 60 年代的事物。

我的注意力立刻被我最喜愛的電腦藝術作品之一吸引:Georg Nees(喬治·尼斯)的 Schotter(https://en.wikipedia.org/wiki/Georg_Nees)。在繪圖機和 ALGOL 程式的幫助下,尼斯探索了透過 caos(隨機性)和重複的圖樣來撰寫程式、產生藝術。Schotter 之所以引人注目,在於作品本身的簡潔,以及觀者從中所能發掘的深刻意涵。在一片完全平靜、有序的表象之下,深處卻隱藏著失序。或者,若將它上下顛倒,它就像暴風雨中的大海。無論海面看起來多麼洶湧,深海依舊平靜。

有可能把一件藝術品變成一個資料庫指令嗎?這具有挑戰性,因為 Redis 主要透過命令列介面來使用。如今的終端機當然比過去華麗許多,但要顯示像樣的圖形仍然很困難。另一方面,即時運算帶來了巨大的優勢:一件藝術品可以是動態的,每次產生時都會有所變化。

在繼續之前,我想先讓你看看最終的成果:

雖然解析度非常低,原作的精神依然存在。為了實現這一點,我使用了一個最近被多個試圖在文字主控台上顯示有趣內容的程式所採用的技巧。這涉及使用 Braille Unicode 字符集,以便建立出比主控台單一字元更密集的像素矩陣。具體來說,每個字元可以容納 2x8 的像素網格。

實驗的第二部分,是讓這件藝術品參數化:

可以透過改變方塊的數量和輸出的解析度,來產生原作的不同版本。最後,原始碼本身也想成為 literate programming(文學程式設計) 的一個範例,以更像是一份教學、說明每件事做了什麼以及為何這麼做的形式來撰寫,而不是一個晦澀難懂的產生器。你可以在這裡找到程式碼:

https://github.com/antirez/redis/blob/unstable/src/lolwut.c

LOLWUT 從 Redis 5 開始也將成為一項傳統。在 Redis 的每一個新的主要版本中,這個指令的功能都會完全改變,只有少數規則是固定的:

  1. 它不能做任何在技術上有用的事。
  2. 它做的事情應該要很快,這樣在正式環境的執行個體上呼叫 LOLWUT 才是安全的。
  3. 輸出應該在某種程度上具有娛樂性。

我為 Redis 5 寫了第一個版本,對於接下來的版本,如果我發現有人有興趣,我會請其他曾對 Redis 有貢獻的人來撰寫其他的 LOLWUT 版本,否則我就自己再寫一次(但我希望不是這樣)。LOLWUT 應該提醒我們自己,我們所做的程式設計工作,一開始並不只是為了產生有用的東西。最初,它主要是在探索各種可能性。我也希望 LOLWUT 能提醒 Redis 社群,電腦是關於人的,不可能以一種無菌的方式,只思考技術層面的影響。有人在使用系統,有人在建構系統,諸如此類。

原文由 Salvatore Sanfilippo 發布

本文章由 muse-spark-1.2-contributor 進行翻譯