LOLWUT: a piece of art inside a database command

Salvatore Sanfilippo

LOLWUT:データベースコマンドの中のアート作品

原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する

ここ数日はかなり激しい日々だった。Redisのレプリケーションで使われている用語を別の言葉に置き換えるかどうかをめぐる論争の中で、こんな主張があった。技術的な成果を何も生み出さない作業に取り組む価値はあるのか、というものだ。

可能な限り特定の単語を取り除くためにRedisのソースコードを書き換えているうちに、ふと考えた。自分がその作業についてどう考えているにせよ、私は本質的に、目に見える技術的な効果が何もないコードを書くことを楽しむタイプの人間なのだ、と。単語の置き換えはただ面倒なだけだ。もちろん、そこにも取り組む価値のある技術的な課題がいくつかあったとしても。だが、私が「ハック的価値(hack value)」と呼ぶ性質を持った、別の種類のコードがあると私は思っている。何の技術的問題も解決しないかもしれないが、それでも書く価値はある。書く過程そのものが報いとなることもある。非常に高度な技術的アイデアを使って、役に立たない問題を解くこともある。単に芸術的な理由で書かれるコードもあるのだ。

ある意味、この数日間のTwitterでの議論――ほとんどが不勉強で、混乱し、熱狂的なものだった――を見て、僕たちはもはや60年代の最初のハッカーたちから遠く離れてしまったのだと感じた。年を重ねるにつれ、ハッキングという視点からテクノロジーを語ることがどんどん難しくなっていると感じる。そこでは壁も出来合いの考えもなく、限界は探求そのものだった。今では、何を言ってもベストプラクティスがある。どんなアイデアにもタブーがある。そんな新しい状況に対して、私はLOLWUTと言う。そこに自分が代表されているとは感じないし、それは少なくとも私の考えるハッキングを体現してもいないからだ。だから、60年代の何かを探求するために、あえて技術的には無駄な時間を過ごしてみようと思ったのだ。

すぐに思い浮かんだのは、私が最も愛するコンピュータアート作品の一つ、ゲオルク・ネース(Georg Nees)の『Schotter』だった(https://en.wikipedia.org/wiki/Georg_Nees)。ネースはプロッタとALGOLプログラムを用いて、カオス(ランダム性)と反復するパターンを利用してアートを生成するプログラムを探求した。『Schotter』が傑出しているのは、そのシンプルさと、鑑賞者がそこに見出せる深い意味にある。完全に穏やかで秩序立った表面の下に、奥深くでは無秩序が潜んでいる。あるいは、上下をひっくり返せば嵐の海のようになる。表面がどれほど激しく見えようとも、深海は静まり返っているのだ。

アート作品をデータベースのコマンドに変えることは可能なのだろうか? Redisは主にコマンドラインインターフェースで使われるため、これは挑戦的な課題だった。今日のターミナルは昔のものより確かに高性能になっているが、それでもまともなグラフィックを表示するのは難しい。一方で、リアルタイムに計算できるという大きな利点もある。アート作品を動的にし、生成されるたびに変化させることができるのだ。

話を続ける前に、まずは最終的な結果をお見せしよう。

解像度は非常に低いものの、オリジナルの作品のコンセプトはそこに残っている。これを実現するために、最近テキストコンソールで面白いものを表示しようとする複数のプログラムでも使われているトリックを用いた。点字のUnicode文字セットを使い、コンソールの1文字1文字よりも高密度なピクセルマトリクスを作り出すというものだ。具体的には、1文字あたり2×8ピクセルのグリッドを収めることができる。

実験の後半は、このアート作品をパラメトリックにすることだった。

四角の数や出力解像度を変えることで、オリジナルのさまざまなバリエーションを生成できる。最後に、ソースコードは文芸的プログラミング(literate programming)の一例となることを意図した。不透明なジェネレーターというよりは、何をどのように、なぜそうするのかを説明するチュートリアルのような形で書かれている。コードはここで見ることができる。

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

LOLWUTは、Redis 5から始まる伝統にもなる予定だ。Redisの新しいメジャーバージョンごとに、このコマンドがやることは完全に変わる。ただ、いくつかのルールだけは固定される。

  1. 技術的に役に立つことは何もしてはならない。
  2. 何をするにしても高速でなければならない。本番環境のインスタンスでLOLWUTを呼び出しても安全なように。
  3. 出力は何らかの意味で楽しめるものでなければならない。

Redis 5用の最初のLOLWUTは私が書いた。次のバージョンについては、もし興味を持ってくれる人がいれば、Redisに貢献してくれた誰かに次のLOLWUTを書いてもらうつもりだ。そうでなければまた自分で書くことになるが、そうならないことを願っている。LOLWUTは、私たちの仕事であるプログラミングが、そもそも何か役に立つものを作るためだけに始まったのではないことを思い出させてくれるはずだ。当初、それは主に可能性を探求することだったのだ。LOLWUTが、Redisコミュニティに対しても、コンピュータは人間のためのものであり、技術的な影響だけを考えて無菌的に物事を考えることはできないということを思い出させてくれることを願っている。システムを使う人々がいて、システムを作る人々がいる、といった具合に。

この記事は「muse-spark-1.2-contributor」を使用して翻訳されました。

コメント