Haskellerのためのプレゼンツール"MonadPoint"

去る11月20日Haskellナイトというイベント ( http://hop.timedia.co.jp/ )で、"HaskellerのHaskellによるHaskellerのためのプレゼン"というなんだかよくわからないタイトルで発表してきました。

遅くなりましたが、作った物の公開と発表の補足をしておきます。

概要

Haskellでプレゼンツールを作りました。

ようなプレゼンツールです。

プレゼンをモナディックに書くので、MonadPointと名付けました。略称は「モナポ」です。

レポジトリ

http://github.com/tanakh/MonadPoint にてMonadPointを公開しています。
http://github.com/tanakh/haskell-night にて当日使ったスライドのソースとWindowsバイナリを公開しています。

使い方

まず、MonadPointをcabalでインストールしてください(Windowsに入れる場合、依存ライブラリのFTGLを入れるのが大変だと思いますので、前回のエントリを参照していただければ幸いです)。それから、てきとうな.hsファイルを作って、import MonadPoint してプレゼンをモナドでゴリゴリと書いて、runPresentation に渡せばいい感じになると思います。レポジトリにあるサンプルが参考になると思います。

http://github.com/tanakh/MonadPoint/blob/master/test/Main.hs

若干説明

今のところサポートしているのは、

  • 矩形の中にそれっぽく文字列を書く
  • 矩形を書く
  • 画像ファイルの表示
  • 矩形をレイアウトする

のような機能です。


基本的に、scaleでスケーリングして、縦横に並べてスライドを作ります。自動で高さとか幅を調節することはできないので、手でやらないといけません。

scale d $ do ... - 縦横に縮小。中央に配置。
scalehu d $ do ... -- 縦方向に縮小。上に配置。
scalehd d $ do ... -- 縦方向に縮小。下に配置。
scalevl d $ do ... -- 横方向に縮小。左に配置。
scalevr d $ do ... -- 横方向に縮小。右に配置。

txtc str -- 文字列。中央揃え。
txtl str -- 文字列。左揃え。
txtr str -- 文字列。右揃え。

pict filename -- 画像を表示。

txtarea strs -- 文字列リストを等幅フォントで表示。

他にも色々あるので、ソースをご参照下さい。

スライドによくつかわれるリスト記法は書きやすくする関数を提供しています。

list $ do ... -- 引数に与えられたリスト要素をうまいことレイアウトして表示する

list $ do
  li "hoge"
  ul $ do
    li "moge"

ちなみに、liなどは型が違うので、listの外側には置けません。うーん、型ですね。

何がいいのか?

基本的に誰得ではありますが…。

  • 抽象化能力

テンプレートを作りやすいとか。プレゼン=Haskellソースなので、なんとでもできます。

ニコニコ動画Twitterプラグインみたいなのも簡単に書けます。

今後の予定

実装がやっつけで、完成度が低すぎるので、まだまだ色々改良したいところです。

  • ソースをきれいにする
  • GLUT使うのやめる(フルスクリーンから復帰する手段がないとか…)
  • フォントをきれいにする(フルシーンAAとかでどうにかなるのだろうか)
  • もっといろいろカスタマイズできるようにする(ページ遷移時のアニメーションとか)
  • アニメーション実装
  • 賢いレイアウト
  • GHC API対応 (毎回コンパイルするのはさすがにめんどい)

イベントの感想

Haskellerの人たちがこんなに集まってるのはなかなかすごかったです。普段は肩身の狭い私も、Haskellの話ばかり出来て楽しかったです。本買ってサインもらいました。値段を安く抑えた苦労話とか。日本語版Real World Haskellは安くてバグも直っててお買い得です。カクテルの名前がHaskellぽくてよかった。遅延評価らしく、あとから効いてくる。発表は皆さん面白かった。総じてすごく刺激になりました。Haskellコミュニティーがもっと盛り上がっていけばいいなと思いました。