ラベル RubyOSA の投稿を表示しています。 すべての投稿を表示
ラベル RubyOSA の投稿を表示しています。 すべての投稿を表示

2008/02/23

rubyosa-Mail.Application

[2010-02-06 追記] RubyOSA はもはやメンテナンスされていないようで幻に包まれています。2010年2月現在においては MacRuby が熱いようです。

rubyosa からの mail.app の操作を試してみた。
メール本文のテキストの取り方が変更された様子。
# OS X 10.4 では message.content だった
rubyosa-0.3.0 :: http://www.midore.net/daybook/2007/03/1173944973.html

10.5 の Mail.app の .content はさらに階層化されててわかりづらい。
# message_viewers から辿るのではない異なるアプローチは試してない。

.content のかわりに、.properties を覗いてみるとハッシュになっておりその中に :content があるのをみつけたので
.properties[:content]
としたらうまくとれた。しかし本来 properties をみにいくのはあまりいいことではないのかもしれない。
OSA.utf8_strings = true にしていることで日本語のメール本文も正しく表示できているのだと思う。推測です。

test_1052-rubyosa-mail.rb

# this file is utf-8
# ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0] (Mac OS X 10.5.2)
# rubyosa-0.4.0
# AppleScript's version "2.0"
# Mail.Application version 3.2("919/919.2")
# 2008-02-23

require 'rbosa'

class Message < Struct.new(:subject, :postdate, :sender, :content, :messageid)
  def date(obj)
    #t = obj.date_received # Received Date
    t = obj.date_sent      # Posted Date
    t.strftime("%Y/%m/%d %H:%M:%S") # t.class is Date
  end
  def set(obj)
    # messageid
    self.messageid = obj.message_id
    # Subject
    self.subject = obj.subject
    # Date
    self.postdate = date(obj)
    # Sender
    self.sender = obj.sender
    # Message Body
    self.content = obj.properties[:content]
    ############ other items
    #obj.all_headers # String / Headers of message
    #obj.deleted_status? # FalseClass or TrueClass / message status
    #obj.message_size # Fixnum / mail size
    #obj.mail_attachments # Object /
    #obj.content # Object /
    #obj.content.paragraphs # Object /
    #obj.source # String / Message Source
    ############
  end
  def to_s
    str = ''
    self.each_pair{|k,v| str << v + "\n"}
    return str
  end
end

OSA.utf8_strings = true

mail = OSA.app('Mail')
mail.message_viewers.each{|x|
  x.selected_messages.each{|i|
    m = Message.new()
    m.set(i)
    puts m.to_s
  }
}


メールメッセージを選択してない場合のエラーなどエラーに対する処理は全て未対処。Mail.app が起動していなかった場合は下記のエラーになる。

RuntimeError: Cannot send Apple Event 'corecnte' : procNotFound (-600)


+++ memo +++
TigerLeopard(10.5) では、FileVault(システム環境)のオン<del>オン</del>オフに関係なく rubyosa 動くようになっていた。

RubyOSA
http://developer.apple.com/documentation/Cocoa/Conceptual/RubyPythonCocoa/Articles/Using%20RubyOSA.html

--imported_from
http://www.midore.net/daybook/2008/02/1203696485.html

関連する記事
"RubyOSA"ラベルがついた全ての記事

2007/09/05

RubyOSA Finder

rubyosa-0.4.0 で Finder アイテムを獲得する奴の書き直し
http://www.midore.net/daybook/2007/04/1176460414.html

require 'rbosa'
OSA.utf8_strings = true
finder = OSA.app('Finder')

def folds(fold)
  print "Folder #{fold.name}\n"
  return nil if fold.get.items.empty?
  # if fold.get.items.size >= 20

  fold.get.files.each{|i| puts "File  #{fold.name}/#{i.name}" }
  fold.get.items.each{|i| folds(i) if i.get.class.name == "OSA::Finder::Folder" }
end

def desktopitems(obj)
  obj.each{|x|
    case x.get.class.name
    when /Disk/ : print "Disk:: #{x.name}\n" # need HDD mount
    when /Folder/ : folds(x)
    when /File/ : print "File  #{x.name}\n"
    end
  }
end

print "==Desktop's Folders and Files==\n"
desktopitems(finder.items)
print "==" 


結果
==Desktop's Folders and Files==
File finderitems.rb
File get_properties.rb
File rbosa_finder.txt
Folder xxx
File xxx/1.txt
Folder zzz
File zzz/hoge.rb
Folder ddd
File ddd/finder.rb
File ddd/untitled.rb
Folder 名称未設定フォルダ
==

++ memo ++
システム環境 セキュリティーFileVault 「切」にしていないと RubyOSA 動かない。

OS X 10.4.10 FInder.app Version

tell application "Finder"
  version
end tell

# => "10.4.7"

--imported_from
http://www.midore.net/daybook/2007/09/1188965456.html

+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2007/05/19

rubyosa-0.4.0 - iTunes

rubyosa の OSA.app('iTunes') を細分化してみた。

# Created by midore on 2007-05-16.
# 2007-04-25.rb
# ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
# rubyosa-0.4.0
# iTunes 7.11

class Song < Struct.new(:song, :name, :artist, :album, :yearr)

  def to_s
   "#{self.name} : #{self.album} (#{self.artist})_#{self.yearr}"
  end

  def self.song
    self.song
  end

end

class SongList

  def initialize(songs=Itunes.new.librarysongs)
    @songs = songs
  end

end
  
class Itunes

  def initialize
    @itunes = OSA.app('iTunes')
  end

  def librarysongs
    songs(obj_library)
  end

  def top25songs
    songs(obj_top25)
  end

  def songs(list)
    ary = Array.new
    list.tracks.each{ |song| 
      ary << Song.new(song, song.name, song.artist, song.album, song.year)
    }
    return ary
  end

  private

  def obj_library
    obj_playlists.find{ |x| x.name == "ライブラリ"}
  end

  def obj_top25
    obj_playlists.find{ |x| x.name == "トップ 25"}
  end

  def obj_playlists
    obj_sources.each { |source| return source.playlists}
    #<OSA::ObjectSpecifierList:0x326004 desired_class=OSA::ITunes::Playlist>
  end

  def obj_sources
    @itunes.sources    #OSA::ObjectSpecifierList
  end

end

require 'rbosa'
OSA.utf8_strings = true

song = Itunes.new.top25songs.first.song
puts song.name
song.play

song = Itunes.new.obj_library.first.song
とすると、
曲はスタートするがウィンドウのカレントの曲を示すアイコンが移動しない。くわえてメニューの現在の曲の情報もみられないのはなぜだろう。

--imported_from
http://www.midore.net/daybook/2007/05/1179559483.html

+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2007/04/13

RubyOSA_0.4.0_OSA::Finder::Folder

RubyOSA_0.4.0 がリリースされてたので試してみました。
http://rubyosa.rubyforge.org/

%cat README
== Requirements ==

Mac OS X 10.4.X or greater
ruby 1.8.X or greater
libxml-ruby 0.3.8 or greater


とのことなので、libxml 0.4 もインストールしてます。
http://libxml.rubyforge.org/index.html

#libxml がインストールされてない場合は、REXML を使うと確かFAQにあったようななかったような気もしつつ...

早速、RubyOSA 0.4.0 Finder用のサンプル。でもなぜか動かないです...

%cat show_desktop.rb
# Lists the content of the Finder desktop.

begin require 'rubygems'; rescue LoadError; end
require 'rbosa'

ary = OSA.app('Finder').desktop.entire_contents.get
ary.each do |x|
    next unless x.is_a?(OSA::Finder::Item)
    puts "#{x.class.name.sub(/^.+::/, '').sub(/_/, ' ').ljust(25)} #{x.name}"
end


結果

RuntimeError: application returned error: Runtime resolution of an object failed. (-1728)

method __send_event__	in rbosa.rb at line 558
method name	in rbosa.rb at line 558
at top level	in show_desktop.rb at line 9
method each	in show_desktop.rb at line 7
at top level	in show_desktop.rb at line 7

Finder::Item にアクセスして item.name をとるところで 止まる...

p finder.desktop.methods を表示してなにが使えるか探してみたら...
items があったので

#ary = OSA.app('Finder').desktop.entire_contents.get
ary = OSA.app('Finder').desktop.items.get


に、したら動いた.

# =>
Disk          tiger
Disk          midori
Folder       rubyosa


items.get の .get がないと Disk も Folder も全てのアイテムは Itemクラス になってしまうのね。.get 要注意。
それにしても entire_contents は使われてないという意味なのだろうか?。

とりあえず理解を深めるためにもデスクトップをターゲットに頑張ってほりさげて...

デスクトップフォルダ以下全てのフォルダ名とファイル名の取得

# ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
# rubyosa-0.4.0

require 'rbosa'
OSA.utf8_strings = true
finder = OSA.app('Finder')

def getfiles(obj)
  print "Folder::#{obj.url.gsub("file://localhost",'').scan(/\/Desktop.*/)}\n"
  obj.items.each{|i|
    case i.get.class.name
    when "OSA::Finder::DocumentFile"
      puts "File:: #{obj.name}/#{i.name}"
    end
  }
  my_index(obj.folders)
end

def my_index(obj)
  obj.each{|x|
  case x.get.class.name
  when "OSA::Finder::Disk": puts "Disk:: #{x.name}"
  when "OSA::Finder::Folder": getfiles(x)
  when "OSA::Finder::DocumentFile": puts "File:: #{x.name}"
  end
  }
end
my_index(finder.folders)


結果

Disk:: tiger
Disk:: hd
Folder::/Desktop/rbosa/
File:: rbosa/rbosa_test.rb
File:: rbosa/名称未設定.txt
Folder::/Desktop/rbosa/memo/
File:: memo/memo.rb
File:: memo/memo_in_ruby_2.zip
Folder::/Desktop/rbosa/memo/data/
File:: data/data.txt

なんとか再帰的にとれました。
#entire_contents を利用する方法はわからずじまい。
x.get.class.name っていうところはちょっとはまりました。やっぱり .get 要注意。

OSA::Finder::Folder クラスに属するオブジェクト

require 'rbosa'
OSA.utf8_strings = true
finder = OSA.app('Finder')

finder.desktop.folders.each{|i| p i.name}
puts "-----\n"

finder.desktop.folders.each{|i| p i.name if i.kind =~ /ボリューム/}
# i.kind => ボリューム or フォルダ

finder.desktop.folders.each{|i| p i.name if i.properties[:class].name =~ /Folder/ } 
# i.properties[:class].name => "OSA::Finder::Disk" or "OSA::Finder::Folder"

--telop
曇り

--imported_from
http://www.midore.net/daybook/2007/04/1176460414.html


+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2007/03/16

Ruby v1.8.6 and OS X 10.4.9

Mac OS X 10.4.9 にアップデートした。その後 Ruby 1.8.6 をインストールしてみた。configure オプション指定方法(Tiger)は下記を参考にした。

http://hivelogic.com/narrative/articles/ruby-rails-mongrel-mysql-osx
make test は成功だったのでインストールした。

標準ライブラリのディレクトリに
/usr/local/lib/ruby/1.8/i686-darwin8.9.1
/usr/local/lib/ruby/1.8/i686-darwin8.8.1
があり、i686-darwin8.8.1は ruby 1.8.5のライブラリ(ロードされていない)で
i686-darwin8.9.1の方には今回インストールされたライブラリがあるということのようだ。
/usr/local/lib/ruby/site_ruby/1.8/ にも同様にインストールされていた。

%ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-darwin8.9.1]
% uname -prsv
Darwin 8.9.1 Darwin Kernel Version 8.9.1: Thu Feb 22 20:55:00 PST 2007; root:xnu-792.18.15~1/RELEASE_I386 i386

irbを動かしてみた。

irb(main):001:0> require 'date'
=> true
irb(main):002:0> require 'time'
=> true
irb(main):003:0> require 'find'
=> true
irb(main):004:0> require 'nkf'
=> false


なぜか、nkf がないと言われてしまった。nkf はnkfという名前じゃなくなったとかそういうこと?違うよな。例えば簡単ななにかを動かしてみると問題なく動いているようにみえるのが不思議。

require 'nkf'
str = '簡単ななにか'
s_str = NKF.nkf('-s', str)
p s_str
puts NKF.nkf('-w', str)
=>
"\212\310\222P\202\310\202\310\202\311\202\251"
簡単ななにか


ロードしているパスをみると
% ruby -e 'p $LOAD_PATH'
["/usr/local/lib/ruby/site_ruby/1.8", "/usr/local/lib/ruby/site_ruby/1.8/i686-darwin8.9.1", "/usr/local/lib/ruby/site_ruby", "/usr/local/lib/ruby/1.8", "/usr/local/lib/ruby/1.8/i686-darwin8.9.1", "."]

となっていて、nkf ライブラリもちゃんとあるみたい。

-rw-r--r--   1 root  wheel  343884 Mar 15 01:34 /usr/local/lib/ruby/1.8/i686-darwin8.9.1/nkf.bundle

nkf ライブラリというのは nkf.bundle 1つでそれが全てなのかどうかは調べてみないとわからない。。どいうことなんだろう。

次にRubyOSA0.3.0 を インストール。 gem は使ってない。
インストール方法はREADMEの通り。下記のディレクトリにインストールされた。

/usr/local/lib/ruby/site_ruby/1.8/rbosa.rb
/usr/local/lib/ruby/site_ruby/1.8/rbosa_properties.rb
/usr/local/lib/ruby/site_ruby/1.8/i686-darwin8.9.1/osa.bundle

begin require 'rubygems'; rescue LoadError; end
require 'rbosa'
finder =  OSA.app('Finder')
p finder.finder_windows.size
exit
=>1

ちゃんと動いた!。よかった
でも RubyOSA0.1の頃のものはちょっと書き直す必要ありそう。

--imported_from
http://www.midore.net/daybook/2007/03/1174019673.html


+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2007/03/15

rubyosa-0.3.0

rubyosa 0.3.0が公開されていた。(2007-03-03付け)
付属していたサンプルに「get_selected_mail.rb」というのがあったので試してみた。
Mail.app の受信メールメッセージを選択している時にこのスクリプトを動かすとテキストエディットが起動し選択していたメール本文内容がテキストエディットの本文に表示されるものだった。問題なく動いた。が、若干問題があった。
試したサンプル「get_selected_mail.rb」の中身。

%cat get_selected_mail.rb

# Retrieve and show every selected message content in Mail into new TextEdit documents. 

begin require 'rubygems'; rescue LoadError; end
require 'rbosa'

OSA.utf8_strings = true
textedit = OSA.app('TextEdit')
mailApp = OSA.app('Mail')
viewers = mailApp.message_viewers
viewers.each do |viewer|
  viewer.selected_messages.each do |message|
    textedit.make(OSA::TextEdit::Document).text = message.content
  end
end


英語の場合は全く問題ないけれど日本語で書かれたメール(Content-Type: text/plain; charset="ISO-2022-JP")の時は文字化けする。
OSA.utf8_strings = true となっているが効力を発揮していないようだ。発揮しているけれど途中経過で打ち消されているのかもしれない。

仕方ないので下記のように書き換えてみたところ文字化けが解消された。一旦 Shift-jis にしてからTextEditorに渡すようにしてみた。TextEditor 側の環境設定はデフォルト状態でも大丈夫だしUTF-8で「開く」「保存」となっていても問題なかった。
※ utf-8 で保存しておきたい場合は環境設定を変更しておくなり、テキスト保存時にutf-8を選択する必要がある。文字によってはここで保存できない場合もあるのかもしれない。

これをAppleScriptから呼び出すようにしAppleScript側でtry-on error -end にしてエラー処理を行うようにしたので Ruby側ではbegin...endをしていない。
また、サンプルにはない機能だが表示するテキストに引用府をつけ受信時刻と受信日付送信者の情報を付け足してみた。

#  j_get_selected_mail.rb
#  encoding: utf-8
#  ruby 1.8.5 

begin require 'rubygems'; rescue LoadError; end
require 'rbosa'

require 'nkf'
require 'time'
OSA.utf8_strings = true
textedit = OSA.app('TextEdit')
mailApp = OSA.app('Mail')
viewers = mailApp.message_viewers
viewers.each do |viewer|
  viewer.selected_messages.each do |message|
    # case rubyosa v2.0
    #mesdate = message.properties['alhe'].scan(/Date.*?\n/).to_s.gsub(/Date:\s/,'').chomp
    # rubyosa v3.0
    mesdate = Time.parse(message.source.scan(/Date.*?\n/).to_s.gsub(/Date:\s/,'').chomp)#
    mes_time = mesdate.strftime("%X")
    mes_date = mesdate.strftime("%y-%m-%d")
    # Message Body
    mes_body = NKF.nkf("-s", message.content)
    # Message Sender
    mes_sender = NKF.nkf("-s", message.sender)
    # Message Body
    res_str = "On #{mes_date}, at #{mes_time}, #{mes_sender} wrote:\n\n" + ">"  + mes_body.gsub("\n", "\n>")
    # Mail Contents send 'TextEdit.App'
    textedit.make(OSA::TextEdit::Document).text = res_str
  end
end


アップルスクリプト 側

 --j_get_selected_mail.scpt
 --2007-03-05
 --AppleScript's version "1.10.7"
 --RubyOSA ver 0.3.0[2007-03-03]
 --Mail.app バージョン 2.1.1(752.3)

try
  set myrubypath to "/usr/local/bin/ruby"
  set mypath to "/Users/midori/rubyosa3/j_get_selected_mail.rb"
  
  tell application "Mail"
    activate
  end tell
  
  set response to do shell script myrubypath & "  " & mypath
  if ("error") is in (response as Unicode text) then
    display dialog "Please select message(s) of Mail.app " buttons {"OK"} default button 1
    tell application "Mail"
      activate
    end tell
    return
  else
    tell application "TextEdit"
      activate
    end tell
    return
  end if
on error
  tell application "Finder"
    activate
    display dialog "error: Please select message(s) of Mail.app.
    or your ruby path exist?
    or your mypath  exist?
    or your Applescript's Version is old?
    or your RubyOSA is old? 
    or  something error... 
    " buttons {"OK"} default button 1
    return
  end tell
end try


--telop
曇時々雨

--imported_from
http://www.midore.net/daybook/2007/03/1173944973.html

+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2006/11/11

RubyOSA Safari を試す

いま開いている Safari のロケーションから
body 要素を取り出しソースとテキストを表示してみました。

require 'rbosa'
require 'nkf'
app = OSA.app('Safari')

if app.documents.size > 0
  # Get HTML Source
  source = app.documents[0].source
  # Get Body
  body = source.split('<body>')[1].split('</body>')[0]
  puts '------ html source \n'
  puts NKF.nkf('-w -Lu', body)
  puts '------ text \n'
  # HTML タグの除去 - >かなりな大雑把版。それに Source が UTF8だと決めつけてます。
  print NKF.nkf('-w -Lu', body.gsub(/\<.*?\>|<\/|>|<script.*?\>/m, ''))
else
 # 空白ページが開かれていたら終わる.これ以外のエラーには未対処。
  puts 'no doc'
end


--imported_from
http://www.midore.net/daybook/2006/11/1163227004.html

+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2006/11/08

RubyOSA 0.1 のFinderを試す

# Finder をアクティブにする

tell the application 'Finder' to activate

は、RubyOSA だと

OSA.app('Finder').activate

#home 以下全フォルダ名の取得 --get all folder's name of path to home

tell the application 'Finder'
  return name of folders of home
end tell

は、RubyOSA だと

OSA.app('Finder').home.folders.to_a.each{ |folder| puts folder.name }

#Desktop 上の全ファイル名の取得

tell the application 'Finder' to name of every document file in the desktop

は、RubyOSA だと

require 'nkf'
OSA.app('Finder').document_files.each{ |file| puts NKF.nkf('-w -Lu', file.name)}

end

--imported_from
http://www.midore.net/daybook/2006/11/1162972588.html


+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2006/11/02

iTunes ライブラリの曲

rubyosa を使って iTunes ライブラリの曲(全曲)を次から次へと再生する試み。
sleep 3で3秒を指定しています。

require 'rbosa'
require 'nkf'
itunes = OSA.app('iTunes')
itunes_libray = itunes.sources[0].playlists[0]
#=> ['ライブラリ']
itunes_libray.play

until itunes.current_track.name.nil?
  puts NKF.nkf('-w -Lu', itunes.current_track.name ) #current_track.name.toutf8
  sleep 3
  itunes.next_track
end


itunes_libray = itunes.sources[0].playlists[0] ここの数字を変えるとライブラリじゃなくて自分で作成したプレイリストを指定できた。
でも自分で作ったプレイリストを指定したいときはダイアログから名前を指定できるといいのかなと、OSA.app('Finder').display dialogの命令を探してみたんですがわからなかった。。。

--imported_from
http://www.midore.net/daybook/2006/11/1162440770.html

+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事

2006/11/01

rubyosa-0.1のインストール

Introduction to Ruby for Mac OS X

MacOSXでRubyお奨めするチュートリアルを読んでみました。
http://www.io.com/~jimm/writing/Intro_to_Ruby.html
翻訳ページの力を借りて。http://translate.google.com/translate_t

最後のチュートリアルは AppleScript との連携でした。標準外のRubyのライブラリーが必要とありまして
http://www.fobj.com/rubyaeosa/INDEX.ja.html
↑ここをへてrubyosa-0.1へ。
http://rubyosa.rubyforge.org/

rubyaeosa の後継はrubyosa というらしい (いまはAppleの人が作っているのかな!?) 早速、rubyosa-0.1のインストール。
いきなりサンプルにある TextEdit_hello_world.rb を実行!してみるとあえなくエラー。

インストールしたばかりの /usr/local/lib/ruby/site_ruby/1.8/rbosa.rb
の31 行目をみてみると
>begin require 'rubygems' rescue LoadError end
このマシンには rubygems をまだインストールしていなかったんでした。なので、サンプルが動きませんでした。
rubygems をインストールしてない人は論外と...逆に言うとソースからインストールした場合でも rubygems がありさえすればサンプル動かしてあげる、と。
ひょとして!新しいOSXには gems が標準で入っているということ?勝手なことを考えます。

ここで素直に gems をインストールすべきなんでしょうがこの行だけをコメントアウトするという選択もあるので...ちょっと#を付け足したてみたら サンプルにある TextEdit_hello_world.rb は無事動き、TextEditorが起動して新しいファイルを作り一行目に hellow word を書き出してくれました。

試しに日本語をいれてみたら(utf-8 でエンコーディングしたファイル)TextEditorは起動したものの文字は空白でだめでした。が sjis化 すれば大丈夫でした。
日本語 utf-8 を投げるのは無理みたいです。なんか方法あるのかしら。

str = 'はろー'
OSA.app('TextEdit').make(OSA::TextEdit::Document).text = str.tosjis

iTunesのサンプルは、ずらずらっと曲名と名前を列挙してくれるサンプルなんかが入っていて、iTunesに話しかける言葉をいろいろ用意してるから rdoc でドキュメント作るスクリプトを動かしてドキュメント作って読んでね!ということでした。なぜかこのスクリプトを動かすとエラーで途中で止まってしまったですが、/tmp/iTumes.rb というファイルができました。それをもとにドキュメントを作れました。 
で、safari さわってみました。

safari = OSA.app('Safari')
p safari.properties
p safari.version
safari.make(OSA::Safari::Document).url = 'http://google.com'
=> {'pnam'=>'Safari', 'pisf'=>false, 'pcls'=>#<OSA::Safari::Application:0x529248>, 'vers'=>'2.0.4'}
'2.0.4'

わーぃ。tell application 'Safari' get properties end tell っていう気持ちがそのまま通じたのでちょっとうれしかった。ただ、だんだん頭が混乱してゆくかもー。
str = 'hoge' としたくて set str to 'hoge' としたりして、どうしてエラーなの?と悩んでいそうな...

--imported_from
http://www.midore.net/daybook/2006/11/1162346274.html


+++ 追記 +++
2010-02-06

関連する記事
"RubyOSA"ラベルがついた全ての記事