Ubuntu Weekly Recipe

第408回 Ubuntuで現代芸術を体感する

この記事を読むのに必要な時間:およそ 5 分

秋といえば芸術の季節です。秋には各地で芸術祭や展覧会が開催されることから「芸術の秋」なんて言われたりもします。現在は秋の気配どころか立春が過ぎたばかりではありますが,今回は芸術の話です。

なぜに芸術?

現在,六本木の国立新美術館などで平成27年度[第19回]文化庁メディア芸術祭受賞作品展が開催されています(2月14日まで)。これは昨年秋に発表された平成27年度[第19回]文化庁メディア芸術祭の受賞作品を展示する展覧会です。その一つの「アート部門」の大賞が,CHUNG Waiching Bryanさんによる,50. Shades of Greyと題した「プログラムのソースコード」だったのです※1)。

※1
タイトルの元ネタは官能小説なので,Googleで検索する時は注意してください。

そのコンセプトとか芸術性とか受賞理由は,公式サイトを参照してください。プログラムのソースコードをどのように「展示」しているかというと,「プリントアウトして額縁に入れて展示」だとか。すごいアナログです。

Ubuntuが関わってくるのはここからです。プログラムのソースコードですから,もちろん実行環境が必要です。この作品は「作者と同年生まれのBASICから2000年のActionScriptまで」の6種類の言語それぞれで,「黒から白への50階調のグラデーションを表示」するソースコードを記述しています※2)。つまり6種類の言語の実行環境が必要になるわけです。

※2
本記事におけるソースコードはActionScript2を除いてすべて,作品の作者であるCHUNG Waiching Bryanさんのサイトからの引用です。作品の正確なソースコードを確認する際はそちらを参照してください。

その言語は,「BASIC」「Fortran」「Pascal」「Lisp」「Lingo」「ActionScript」の6種類です。作者が過去に触ったことのある郷愁を感じる言語ということなので,若干偏っているかもしれません。作者のサイトの作品ページを見るとわかるのですが,このうち4つについてはUbuntu上で実行しています。実際,作品展でも実行結果の展示にUbuntuが使われているようです。

ということで,実際にUbuntuで試して現代の「メディア芸術」に触れてみることにしましょう。

「BASIC」

「BASIC」は初心者向けに開発されたプログラミング言語であり,さまざまな環境に移植された言語です。今回はグラデーションを表示しなくてはならないので,SDLを使ってゲーム開発関連の機能を充実させた 「sdlBasicを利用します。

$ sudo apt-get install sdlbasic

desktopファイルもインストールされますので,たとえばUnityならアプリレンズを開いて「sdlbasic」と 入力して表示されるsdlBasicのアイコンをクリックして起動しましょう。作者のサイトにある以下のコードを入力して,保存します。ファイル名の拡張子は「.sdlbas」としてください。

width=800:height=800:shades=50
inc=width/shades
setdisplay(width,height,32,1)
paper(rgb(255,255,255))
cls
setautoback(25)

for i=1 to shades
    c=i*255/shades
    ink(rgb(c,c,c))
    bar((i-1)*inc,0,i*inc,height)
next

waitkey(k_escape)

図1 ごくごくシンプルなエディタ画面

画像

保存が完了したら,画面右上の再生ボタン(Goボタン)を押してください。

図2 sdlBasicによる「50. Shades of Grey」

画像

コードのうち,setdisplay()でウィンドウを作成し,peper()とrgb()で背景色を白に設定し,clsで画面をクリアし,setautoback()でダブルバッファリングのために画面を切り替える時間を設定しています。

forブロックでは,黒から白へとRGBの値を50段階で変化させたペンをinc()で作成し,bar()で縦長の長方形を描画することを繰り替えします。最後のwaitkey()では,エスケープキーの入力を待ってプログラムを終了しています。

ちなみにここで出てきた関数はすべてsdlBasic由来のものです。つまり他のBASIC実装ではおそらく動きません。

「Fortran」

FortranはBASICよりも歴史が古いながらも,今でも仕様の更新が続いているプログラミング言語です。Fortranは数値科学計算が主な用途であり,組み込みのGUI機能がありません。グラデーションを表示させるためにGNUFOR2というGnuplotと連携するモジュールを使います。

$ sudo apt-get install gfortran gnuplot-x11

GNUFOR2からGnuplotを実行するため,gnuplot-x11もインストールしています。Qt4版のgnuplot-qtでもかまいません。

Fortranのコードを記述し,fifty.f90として保存します。

program grey
use gnufor2
implicit none

integer, parameter  :: Nm = 800
integer             :: rgb(3, Nm, Nm)
integer             :: i, j, k
integer             :: shades
integer             :: step
integer             :: c

shades = 50
step = Nm/shades

do i = 1, shades
     c = (i-1)*255/shades
     do j = (i-1)*step, i*step
          do k = 1, Nm
               rgb(1,j,k) = c
               rgb(2,j,k) = c
               rgb(3,j,k) = c
           end do
     end do
end do

call image(rgb, pause=-1.0, persist='no')
end program grey

fifty.f90と同じディレクトリにGNUFOR2モジュールをダウンロードして,コンパイルし,実行します。

$ wget http://www.math.yorku.ca/~akuznets/gnufor2/gnufor2.f90
$ gfortran gnufor2.f90 fifty.f90 -o fifty.out
$ ./fifty.out

図3 Fortran+Gnuplotによる「50. Shades of Grey」

画像

こちらはBASICの時と違って,Fortran 90をサポートする実装であればほぼそのまま動くでしょう。GNUFOR2の中ではsystem関数越しにgnuplotコマンドを実行しているため,あらかじめgnuplotをインストールしておく必要はあります。

コードの前半はごく普通のFortranです。縦横800ドットにそれぞれRGB値を格納する三次元配列rgbを作成して,そこに一つずつ色の値を放り込んでいます。それをGNUFOR2が提供しているimage()関数に渡しているだけです。「pause=-1.0」はリターンキーを押すまでプロセスの終了を待ち,「persist='no'」はgnuplotコマンドが実行されたら 直ちに描画することを意味します。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入