Skip to content
2016年12月1日 / masterq

とあるHaskellアプリでプレゼンする方法

この記事はHaskell Advent Calendar 2016の一日目の記事みたいです。

こんばんは。12月ですね。週末に車で旅行に行くことになっているので雪がふらないとうれしいです。なぜならウチの車、雪がつもったときの装備が貧弱だからです!

ところで、近年は草の根の勉強会がたくさん開催されています。そんな勉強会で発表される機会のある方も多いと思うんです。問題はどんなプレゼンツール使うか悩むことではないでしょうか?また、プレゼン資料を作るのにやけに時間を食ったりしないでしょうか?今日はそんなときのために便利かもしれないHaskell製のツールCarettahのご紹介です。

あと重要なことを忘れてました。本記事はLinuxユーザ向けです。WindowsやMac OS XではCarettahは使えません。これは、このアプリケーションがWiiリモコンに対応するためにcwiidというライブラリに依存していて、当該ライブラリがLinuxでしか使えないためです。

インストール手順

まずはCarettahが依存しているライブラリ群をインストールしましょう。Debian系のディストリビューションをお使いであれば以下のようにすればインストール完了するはずです。

$ sudo apt-get install libcwiid-dev fonts-noto-cjk haskell-platform libghc-gtk-dev gtk2hs-buildtools

フォントが必要なのはCarettahアプリの中でnotoフォントの使用をハードコーディングして参照しているためです。このアプリはめっさやる気がなく、「使えりゃいいだろ」思想で作られているので、そこらへんはお察っしください。。。もっとも、notoフォントはインストールしなくてもそれっぽく文字が出るらしいです。余力があったらここらへんを設定できるようにしたいところです。

これでcabalも使えるようになったので、さっそくCarettahをインストールしてみましょう。

$ cabal update
$ cabal install carettah
$ which carettah
/home/user/.cabal/bin/carettah
$ carettah

carettah version 0.5.1
Usage: carettah [OPTION...] FILE
  -w                --wiimote                 use wiimote
  -o[FILE]          --output-filename[=FILE]  output PDF_FILE
  -t[TIME(minute)]  --time[=TIME(minute)]     set presentation time with minutes
  -i                --info                    show slide infomation
  -n                --new-slide               create a new slide file and open it

やったねーですぞ。

基本的な使い方

まず最初にプレゼンスライドの雛形を作ってみましょう。どこか適当なディレクトリで”-n”オプション付きでCarettahを起動してみます。

$ mkdir new_slide
$ cd new_slide
$ carettah -n new_slide.md

すると、以下のようなウィンドウが開かないでしょうか。

new_slide

このウィンドウはまさに雛形です。「Presentation Title」と「Your Name」を書き換えれば、スライドの表紙ができそうです。

起動したcarettahプロセスはそのままにしておいて、別のコンソールを開いて”new_slide.md”ファイルの中身をちょっと見てみましょう。

$ vi new_slide.md
# Presentation Title
![background](debian.png)

Your Name
--snip--

すると、この”new_slide.md”ファイルを以下のように変えれば、スライドの表紙が変わるはず。。。ですよね。

$ vi new_slide.md
# Carettahでプレゼンしよう
![background](debian.png)

名無 権兵衛
--snip--

さっそくCarettahのウィンドウに戻って確認しましょう。Carettahのウィンドウで”r”キーを押下するとその時点での”new_slide.md”ファイルの内容が表示されているスライドに反映されます。

new_slide

やりました! これで堂々と名無 権兵衛としてプレゼンできそうです。

ところで、表紙だけではプレゼンできません。なにか中身は書けないのでしょうか?もちろんこの雛形には次のページがあります。Carettahウィンドウ上で”j”キーを押下してみましょう。

new_slide

次のページに進んで箇条書きが表示されました。このページも”new_slide.md”ファイルで記述されていて、それは以下のような形式です。

$ vi new_slide.md
--snip--
# Slide Title
* item1
* item2
* item3

![inline](turtle.png)

Haskellアプリでプレゼンするなら当然ソースコードもはりつけたくなるでしょう。”new_slide.md”ファイルの最後に以下のように新しいページを追加してみましょう。

$ vi new_slide.md
--snip--
# ソースコードの例

```haskell
qsort []     = []
qsort (p:xs) = qsort lt ++ [p] ++ qsort gteq
                 where
                   lt   = [x | x = p]
```

ファイルを保存したらCarettahウィンドウでまた”r”キーを押下してみましょう。さらに”j”キーを押下して新しいページを表示してみましょう。以下のようにハイライトされたHaskellコードが表示されるはずです。

code

つまるところ、markdownで文書を書くとCarettahはそれっぽくスライドとして表示してくれます。markdownと違うのは “![background](pngファイル名)” でスライドの背景画像を選択でき、”![inline](pngファイル名)” でスライドの該当位置に画像を貼り付けられる点だけです。(本当はまっとうなmarkdownを食えなかったりしますが見なかったことにしてくださ い。。。)

だいたいCarettahがどんなアプリなのかわかりました。一旦休憩しましょう。”q”キーを押下するとCarettahアプリケーションは終了します。もし同じ”new_slide.md”ファイルの内容をプレゼンテーションしたい場合には以下のように”-n”オプションなしでCarettahを起動するだけです。

$ carettah new_slide.md

ここでCarettahウィンドウで使えるキーの機能をまとめておきます。

  • “f”: Carettahウィンドウをフルスクリーンに
  • “F”: Carettahウィンドウを(フルスクリーンではない)通常のウィンドウに
  • “q”: アプリケーションを終了する
  • “j”: 次のページのスライドを表示する
  • “k”: 前のページのスライドを表示する
  • “g”: スライドの先頭ページを表示する
  • “G”: スライドの最後のページを表示する
  • “r”: markdownファイルを読み直してスライドを更新する

Wiiリモコンを使ってみよう

k0000157211

もしWiiiリモコンを持っていたら、Carettahを当該リモコンでリモートコントロールできます。広い会場で大きなパフォーマンスをしながらプレゼンするにはリモコンが必要ですよね。そして一家に一台はWiiリモコンはあるものです。

Wiiリモコンを用意したら以下のように”-w”オプション付きでCarettahを起動してください。

$ carettah -w new_slide.md
Put Wiimote in discoverable mode now (press 1+2)...

言われたまんまなのですが、ここでWiiリモコンの”1″ボタンと”2″ボタンを同時に押下してください。するとコンソールには以下のように表示さえて、先程と同じスライドが表示されるはずです。

found!

この時認識されたWiiリモコンの4つのLEDの内、右端と左端のLEDが点灯し、中央の2つのLEDは消灯しているはずです。これで準備は整いました。

前章で紹介したキー操作とほとんど同じことがWiiリモコンからできます。

  • Aボタン: 次のページのスライドを表示する
  • Bボタン: 前のページのスライドを表示する
  • 十字キー上ボタン: スライドの先頭ページを表示する
  • 十字キー下ボタン: スライドの最後のページを表示する
  • プラスボタン: Carettahウィンドウをフルスクリーンに
  • マイナスボタン: Carettahウィンドウを(フルスクリーンではない)通常のウィンドウに
  • ホームボタン: markdownファイルを読み直してスライドを更新する

プレゼン時間の設定

さあスライドもできたし操作方法もわかりました。さっそくプレゼンの練習をしてみましょう。

ところでプレゼンには時間が決まってますよね。ライトニングトークなら5分。通常の発表だと30分ぐらいでしょうか。学会でしゃべるときなどは60分にも及ぶかもしれません。そんなときペース配分に困ったりしないでしょうか?

そんな状況のためにCarettahにはプレゼンのペース配分をサポートする機能があります。例えば30分の発表をしたいのであれば”-t30″オプション付きでCarettahを起動しましょう。”-t”と”30″の間にスペースを入れないでください。

$ git clone git@github.com:master-q/carettah.git
$ cd carettah/sample
$ carettah -t30 sample.md

いつものようにCarettahが起動します。じーっと待っていると下側に黒い”>”がだんだん右側につらなって表示されないでしょうか。また、スライドのページを進めると下にいる亀が左から右に向かって進むと思います。

module

上図において亀と”>”はそれぞれ以下を表わしています。

  • 亀の位置は、現在表示しているスライドのページ数
  • “>”の先頭位置は、経過時間

そのため”>”に亀が追い抜かれたら、プレゼンを巻きで進める必要があります。理想的には亀と”>”が同じ位置になるようなペースで話をするのが良さそうです。

PDF化

やれやれ。プレゼンは終わりました。プレゼン資料を後日見たい方もいるかもしれないので、slideshareあたりに資料をアップロードしましょう。

しかしCarettahのファイルはmarkdownのテキストファイルです。slideshareにはPDF形式に変換する必要があります。もちろんCarettahにはmarkdownのファイルをPDF化するオプションがあります。

$ carettah -o new_slide.md
$ file output.pdf
output.pdf: PDF document, version 1.5

この”output.pdf”をslideshareにアップロードすれば良さそうですね。

そもそもなんでこんなツール作ったの?

むかーしむかーし2011年。スタートHaskellというイベントが当時ニフティにいた小川さんの主動の元に開かれたことがありました。その最初の会にはなんと100人を超える人が集りました! 僕はそこでLTすることになっていました。僕は「あまりHaskellに向いていないアプリ例があると聴衆の興味を引けるんじゃないか。たとえばGUIでなにか、、、そうだ! そもそもプレゼンツールをHaskellで作ってそのプレゼンツールでLTすれば面白いんじゃないか」と考えて1日で基本設計をして4日で詳細設計をでっちあげたのでした。なのでCarettahのコードはそれはそれはひどいものだと思います。

それ以降、僕が講演する際のスライドは全てこのCarettahを使って作って、プレゼンしています。それらのスライドはここから見ることができ、またそのmarkdownファイルはここから入手できます。

最後にどうしても触れたいことなのですが、Carettahの使い勝手はRabbitというRuby製のプレゼンツールから強く影響を受けています。Carettahを作る前はこのRabbitを使って作っていました。今のCarettahはRabbitの持っている多くの機能(テーマなど)を持っていません。それには(実装がめんどうだなどの)理由がたくさんありますが、一番の理由は僕が以下のような手順でプレゼン資料を作るからです。

  1. プレゼンで話す内容を箇条書きにする => これがスライドのページタイトルになる
  2. 1つ1つのスライドのページで話したいことを箇条書きにする => これがページの箇条書きになる
  3. 必要なら図をLibreOfficeDiaで描いてMakefileでpngにする
  4. 最後にプレゼンの雰囲気を作るためにFlickrから画像をひろってきてスライドの背景に差し込む

このようなスライドの作成方法をCarettahは上手くサポートしてくれます。その意味ではRabbitの1ユーザであった僕の使い勝手だけに特化させたプレゼンツールがCarettahであるとも言えます。僕のプレゼン形式のベースを作ってくださったRabbitの作者である須藤 功平さんに感謝いたします。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。