@m_seki の

I like ruby tooから引っ越し

toRuby 4thの告知をするスクリーンセーバー

RubyKaigiの咳のセッションの前後に使った、OSXで動作するスクリーンセーバーです。toRubyの告知をしてくれます。
QuartzComposerで作られているので改造して遊べます。

RSSの生成はrss/makerを使った小さなスクリプトで行なってます。いんちきRDを喰わせると嘘っぽいRSSを出力するものです。以下にソースを載せますので、いんちきっぷりに驚いて下さい。

あっ。これでLL魂に出場しちゃえばよかったかなあ。

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)
rss = make_rss(t)
puts rss