Ubuntu Weekly Recipe

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

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

「Lisp」

Lispも歴史あるプログラミング言語の一つです。今でもEmacsの設定を行う際にLispのコードを 書いているEmacsユーザーも多いことと思います。今回はCommon Lispの実行環境であるSBCLとEmacs上でCommon Lispを編集できるSLIMEを利用します。またCommon LispライブラリをロードするためにQuicklispもあわせてインストールしておきましょう。

$ sudo apt-get install slime cl-quicklisp
$ sbcl --load /usr/share/cl-quicklisp/quicklisp.lisp \
       --eval '(quicklisp-quickstart:install)'       \
       --eval '(ql:add-to-init-file)'                \
       --eval '(quit)'

sdlBasicと同様にdesktopファイルもインストールされますので,たとえばUnityならアプリレンズを開いて「emacs」と 入力して表示されるEmacsのアイコンをクリックして起動しましょう。次に「M-x slime」⁠Alt+x」のあとに「slime」と入力)を入力した上で「CL-USER>」と表示されたら,次のコードを入力します。

(ql:quickload :lispbuilder-sdl)
(defvar *SIZE* 800)
(defvar *SHADES* 50)
(defvar *STEP* (/ *SIZE* *SHADES*))
(defvar *COL* 0)
(defun box(n)
   (cond ((>= n *SHADES*) nil)
         ((< n *SHADES*) (progn
                     (setq *COL* (/ (* n 255) *SHADES*))
                     (sdl:draw-box-* (* *STEP* n) 0 *STEP* *SIZE*
                         :color (sdl:color :r *COL* :g *COL* :b *COL*))
                     (box (+ n 1))))))

(sdl:with-init()
   (sdl:window *SIZE* *SIZE* :title-caption "50 . Shades of Grey")
   (setf (sdl:frame-rate) 60)

   (sdl:with-events ()
      (:quit-event () t)
      (:key-down-event () (sdl:push-quit-event))
      (:idle ()
         (sdl:clear-display sdl:*black*)
         (box 0)
         (sdl:update-display))))

SDLのライブラリをインストールするため,実行完了までしばらく時間がかかります。

図6 Lisp on Emacsによる「50. Shades of Grey」

画像

SDLを使って800x800のウィンドウを作成し,縦長の長方形を色を変えながら書き込むところは同じです。また,何かキー入力があればウィンドウを閉じて終了します。

「Lingo」

LingoはAdobe Systemsが開発するAdobe Directorで採用されているプログラミング言語です。残念ながらUbuntu上でLingoをビルドする方法は見つけられなかったため,今回はスキップします。

「ActionScript」

ActionScriptはAdobe Flashで採用されているスクリプト言語です。名前から推測されるとおり,その文法はECMAScriptに似ています。ActionScriptにはActionScript2とActionScript3が存在します。基本的な文法は似通ってはいるのですが,フレームワークの使い方や型の扱いが変わっているなど,ほぼ別の言語と思ったほうが良いでしょう。

作者のコードはActionScript3を採用しています。UbuntuでActionScript3のコンパイラと言えば,Haxeがあります。ただ試してみた限り,基本的なサンプルからしてコンパイルできない状態でした。そこで今回は作者のコードをActionScript2に移植した上で,ActionScript2に対応したコンパイラであるMTASCを 使うことにします。

まずはmtascパッケージに加えて,FlashファイルのスタンドアローンプレイヤーであるGnashもインストールします。

$ sudo apt-get install mtasc gnash

以下のソースコードをfifty.asという名前で保存します。

class Fifty {
  static var app:Fifty;
  static var shades:Number = 50;
  static var width:Number = 400;
  static var height:Number = 300;
  var step:Number = 256 / shades;
  var w:Number = width / shades;

  function Fifty() {
    var fig = _root.createEmptyMovieClip("fig", 1);

    for (var i=0; i<shades; i++) {
      var color = (i*step << 16) | (i*step << 8) | (i*step);
      fig.lineStyle(0, color, 100);
      fig.beginFill(color, 100);
      fig.moveTo(i*w, 0);
      fig.lineTo(i*w, height);
      fig.lineTo((i+1)*w, height);
      fig.lineTo((i+1)*w, 0);
      fig.moveTo(i*w, 0);
      fig.endFill();
    }
  }

  static function main(mc) {
    app = new Fifty();
  }
}

このファイルをmtascでコンパイルして,fifty.swfとして保存します。

$ mtasc -swf fifty.swf -main -header 400:300:30 fifty.as

あとはGnashで実行するだけです。GnashはUnity上では表示されませんので,ファイルブラウザーから fifty.swfを右クリックした上で,⁠別のアプリで開く」「Gnash SWFビューア」を選択してください。

図7 ActionScriptによる「50. Shades of Grey」

画像

「あなたの言語」

さていかがだったでしょうか。少しは秋の息吹を感じたり,⁠ヴィオロンのためいき」「ひたぶ」れたりしましたでしょうか。冒頭でも述べたように,今回出てきたプログラミング言語は少々偏っています。せっかくなので,最初に触ったプログラミング言語など各個人の思い入れのある言語で「50. Shades of Grey」を実現してみるのも いいかもしれませんね。

著者プロフィール

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

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