Rabbit on Sinatra

: subtitle

プレゼン用PDF作成ツールrab2pdf

: author

横山昌史

: institution

Rabbitショッカー

: content-source

勉強会@Sinatra札幌

: date

2013/11/24

: allotted-time

20m

: theme

nyankosakana

自己紹介

* ソフトウェア開発者
  * Webアプリの主戦場はSinatra
* Rabbitショッカー
  * 札幌でRabbitを使っている
* Rabbitコミッター
  * 札幌でRabbitにコミットしている

宣伝

プロパティ

:as_large_as_possible

true

札幌市中央区Ruby会議01 2014年2月8日(土)

# image
# src = http://myokoym.net/public/chuork01-ss.png
# relative_height = 100
# reflect_ratio = 0.1

プロパティ

:enable-title-on-image

true

話すこと

* Rabbitを
* Sinatraで動かした話

話すこと

* ((*Rabbitを*))
* Sinatraで動かした話

Powered by

# image
# src = https://raw.github.com/rabbit-shocker/rabbit/master/sample/lavie.png
# relative_height = 100

プロパティ

:enable-title-on-image

false

Rabbitとは

# blockquote
Rubyで書かれた((*プログラマー向け*))のプレゼンテーションツール

Rabbitの特徴

* 文章はテキストで記述
  * RD、Wiki、Markdownなど
* 装飾(テーマ)はRubyで記述
  * RubyGemsで簡単に追加
* バージョン管理しやすい

((‘del:昨日’))((*機能*))((‘sub:が’))((‘tag:italic:豊富’))

# RT
caption = キーバインドの一部

一覧, 情報, メニュー

i(小文字), I(大文字), 右クリック

((‘note:rabbit-shocker.org/ja/sample/rd/rabbit.html’))

インストールも簡単

gem install rabbit

だけど、インストールするn前に試してみたいとか

プロパティ

:as_large_as_possible

false

借りたPCで、そもそもnRubyが入ってないとか、nそんなとき

プロパティ

:as_large_as_possible

false

話すこと

* Rabbitを
* ((*Sinatraで動かした話*))

Rabbit + Sinatra = rab2pdf

# image
# src = http://myokoym.net/public/rab2pdf-ss.png
# relative_height = 100
# reflect_ratio = 0.1

プロパティ

:enable-title-on-image

true

rab2pdfとは

* Webアプリケーション
* RabbitのPDF生成機能を活用
  * テキストからプレゼン用PDFを作成

サーバーの仕事

* Rabbitはインストール済み
* リクエストはSinatraで処理
* SinatraからRabbitを実行
  * PDFを生成

余談

RabbitはGUIアプリケーションですが、 GUI環境がなくても動くように工夫されています。

なので、Webアプリケーションのバックグラウンド としても使うことができます。

本題

# image
# src = http://d3j5vwomefv46c.cloudfront.net/photos/large/757398619.jpg
# relative_height = 100
# reflect_ratio = 0.1

プロパティ

:enable-title-on-image

true

作り方

(1) テキストを書く
(2) rab2pdfに送信
(3) PDFをダウンロード

1. テキストを書く

* 現在はRD形式のみ対応
  * RabbitはWikiやMarkdownに対応
  * rab2pdfでも対応したい

2. rab2pdfに送信

* 普通のフォーム
  * 普通のテキストエリア
  * 普通の送信ボタン

3. PDFをダウンロード

* ダウンロードリンクが表示される
* PDFはしばらくサーバーに残る

隠し機能

: Gitリポジトリ指定機能

ローカルテーマや画像に対応

 http://myokoym.net/rab2pdf/git?url=https://github.com/user/repo

デモ

((‘tag:center’)) ((‘note:myokoym.net/rab2pdf/’))

使えるテーマ

* Rabbit組み込みのテーマ
* RubyGems.orgに\n公開されているテーマ

ソースコード

* オープンソース(GPLv2+)
* GitHubで公開
  * (('note:https://github.com/myokoym/rab2pdf'))

トップページ

# coderay ruby

get "/" do
  @params ||= {}
  @params[:source] = slide_source
  haml :index
end

slide_source

# coderay ruby

= TITLE

: author
Your Name
: date
#{Time.now.strftime("%Y/%m/%d")}

= FIRST SLIDE

* ITEM 1
* ITEM 2

フォーム(Haml)

# coderay ruby

%form{:action => url("/convert", false, true),
      :method => "post"}
  %p
    %textarea{:name => "source",
              :cols => 50,
              :rows => 10}= @params[:source]
  %p
    %input{:type  => "text",
           :name  => "filename",
           :size  => 30,
           :value => @params[:filename]}
  %p
    %input{:type => "submit"}

PDF生成

# coderay ruby

post "/convert" do
  @download_url = convert(params[:source],
                          params[:filename])
  @params = params
  haml :index
end

Rabbit.run

# coderay ruby

def convert(source, filename)
  ...
  Tempfile.open(["rab2pdf", ".rab"]) do |tempfile|
    tempfile.puts(source)
    tempfile.flush
    Rabbit::Command::Rabbit.run("--print",
                                "--output-filename",
                                pdf_path,
                                tempfile.path)
  end
  ...
end

Thank you

rab2pdfはあくまで入門用&緊急用のツールなので、 機能が少ないです。可能ならRabbitをインストール して使うことをおすすめします。 :-)

((‘note:rabbit-shocker.org/’))