LOLWUT: a piece of art inside a database command

Salvatore Sanfilippo

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

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

Redisのソースコードから特定の言葉を取り除く作業を進めながら、自分はどう考えているのだろうかと考え始めました。私が何を思おうと、私は技術的に計測可能な成果を生まないコードを書くことを楽しむタイプの人間なのです。用語の置き換えは、ただ面倒なだけです。もちろん、そこにも取り組む価値のある技術的な課題はいくつかありましたが。それとは別に、私が「ハックバリュー」と呼ぶ質を備えたコードというものがあります。何の技術的な問題も解決しないのに、書く価値があるコードです。書く過程そのものが報いになることもあれば、極めて高度な技術的アイデアを、役に立たない問題を解くために使うこともあります。単に芸術的な理由で書かれるコードもあるのです。

ある意味で、この数日間のTwitterでの議論は、ほとんどが情報不足で、混沌とし、ヒートアップしたものでしたが、それを見て、今の私たちは60年代の最初のハッカーたちからずいぶん遠く離れてしまったと感じました。年を重ねるにつれ、ハッキングという視点から技術を語ることがどんどん難しくなっていると感じます。壁も、出来合いの考えもなく、限界は探求そのものであるという視点です。今では、何を言ってもベストプラクティスがあり、あらゆるアイデアにタブーがあります。この新しい状況に対して、私はLOLWUTと言いたいと思います。そこに自分が代表されているとは感じませんし、少なくとも私の考えるハッキングを代表してもいないからです。そこで、技術的には無駄な時間をあえて使って、60年代の何かを探求してみようと思い立ったのです。

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

アート作品をデータベースのコマンドに変えることはできるでしょうか。これは難しい課題でした。Redisは主にコマンドラインインターフェースから使われるからです。今日のターミナルは昔に比べれば確かに洗練されていますが、それでもまともなグラフィックスを表示するのは困難です。一方で、リアルタイムに計算できるという大きな利点もあります。生成されるたびに変化する、ダイナミックなアート作品にできるのです。

先に進む前に、最終的な結果をお見せします。

解像度は非常に低いものの、オリジナルの作品が持つアイデアはそこに残っています。これを実現するために、最近テキストコンソールで面白いものを表示しようとするいくつものプログラムが使っていたトリックを用いました。点字のUnicode文字セットを使い、コンソールの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用の最初のバージョンは私が書きました。次のバージョンについては、関心を持ってくれる人がいれば、Redisに貢献してきた誰か別の人に次のLOLWUTを書いてもらおうと思っています。もし見つからなければ、自分でまた書くつもりです(ただ、そうならないことを願っています)。LOLWUTは、私たち自身に思い出させるためのものです。私たちが行っているプログラミングという仕事は、何か役に立つものを生み出すためだけに始まったのではない、ということを。当初、それは可能性を探求することそのものだったのです。LOLWUTが、Redisコミュニティに対しても、コンピュータは人間のためのものであり、技術的な意味合いだけを考えて無菌的に物事を論じることはできない、ということを思い出させてくれることを願っています。システムを使う人がいて、システムを作る人がいて、そうやって成り立っているのですから。

原文は Salvatore Sanfilippo により に公開されました。

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