rss/makerとQuartz Composer

Quartz Composer

Quartz Composerを使ってRSS表示するスクリーンセーバを作ることができます。 んで、これを使ってスライドをスクリーンセーバ化する実験をしました。

必要なものは

  • Ruby
  • Tiger
  • Quartz Composer

http://www.druby.org/ilikeruby/qtz1.jpg

rss/maker

RDFを生成するスクリプト。

箇条書きしか扱えないTiny Tiny RDを読んでRSSっぽいのを出力する習作。

Tiny RDの例

= Tiny RDについて
* 箇条書き
* 箇条書き
* 箇条書き

まあ、こんな感じ。

# rss_maker.rb
require 'rss/maker'

class TinyRD
  include Enumerable
  def initialize(str)
    @src = str
    @slide = []
    make_slide
  end
  attr_reader :slide

  def make_slide
    @src.each do |line|
      line = line.chomp
      if /^=+?s*(?S.*)/ =~ line
        add_page($1)
      elsif /^(?*?s*)?(?S.*)/ =~ line
        add_item($2)
      end
    end
  end

  def add_page(title)
    @slide.push([title, ""])
  end

  def add_item(desc)
    @slide[-1][1].concat('<p>' + desc + '</p>')
  end

  def each(&block)
    @slide.each(&block)
  end
end

def make_rss(slide)
  RSS::Maker.make('1.0') do |maker|
    maker.channel.about = 'http://www.druby.org/fake_index.rdf'
    maker.channel.title = 'I like Ruby.'
    maker.channel.description = 'fake'
    maker.channel.link = 'http://www.druby.org'

    slide.each_with_index do |page, index|
      item = maker.items.new_item
      item.link = 'http://www.druby.org/fake/' + index.to_s 
      item.title = page[0]
      item.description = page[1]
      item.date = Time.now - 3600 * index
    end
  end
end

t = TinyRD.new($<.read)
puts make_rss(t)

qtz

Quartz Composerで"Mac OS X RSS Screen Saver"プロジェクトを生成します。 んで、"RSS Feed"パッチのInput ParametersのURIを適切に設定するとさっき作った RDFを表示することができます。

http://www.druby.org/ilikeruby/qtz2.jpg

http://www.druby.org/ilikeruby/qtz3.jpg

参考資料