• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
RubyによるMac OS Xデスクトップアプリケーション開発入門--Snow Leopard対応版
 

RubyによるMac OS Xデスクトップアプリケーション開発入門--Snow Leopard対応版

on

  • 14,108 views

Rubyを使ったMacのデスクトップアプリケーション開発の概要を説明します。また、Mac OS X ...

Rubyを使ったMacのデスクトップアプリケーション開発の概要を説明します。また、Mac OS X 10.6で導入されたGCDの概要とMacRubyからどのように使うのかを説明します。

Statistics

Views

Total Views
14,108
Views on SlideShare
13,478
Embed Views
630

Actions

Likes
7
Downloads
51
Comments
0

10 Embeds 630

http://d.hatena.ne.jp 550
http://hihu.tumblr.com 34
http://www.slideshare.net 34
http://paper.li 3
http://us-w1.rockmelt.com 2
http://ssr.minidns.net 2
http://a0.twimg.com 2
http://webcache.googleusercontent.com 1
http://cache.yahoofs.jp 1
https://twimg0-a.akamaihd.net 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    RubyによるMac OS Xデスクトップアプリケーション開発入門--Snow Leopard対応版 RubyによるMac OS Xデスクトップアプリケーション開発入門--Snow Leopard対応版 Presentation Transcript

    • Ruby Mac OS X による デスクトップアプリケーション開発入門 -- Snow Leopard対応版 関西Ruby会議02 ­ 2009年11月7日 ネットワーク応用通信研究所 研究員 高尾 宏治<kouji@netlab.jp>2009年11月8日日曜日
    • Ruby Mac OS X による デスクトップアプリケーション開発入門 -- Snow Leopard対応版 関西Ruby会議02 ­ 2009年11月7日 ネットワーク応用通信研究所 研究員 高尾 宏治<kouji@netlab.jp>2009年11月8日日曜日
    • Ruby Mac OS X による デスクトップアプリケーション開発入門 -- Snow Leopard対応版 関西Ruby会議02 ­ 2009年11月7日 ネットワーク応用通信研究所 研究員 高尾 宏治<kouji@netlab.jp>2009年11月8日日曜日
    • RubyとMac2009年11月8日日曜日
    • RubyとMac2009年11月8日日曜日
    • RubyとMac OS X 10.2 Ruby 1.6.7 20022009年11月8日日曜日
    • RubyとMac OS X 10.2 Ruby 1.6.7 2005 2002 OS X 10.4 Ruby 1.8.22009年11月8日日曜日
    • RubyとMac OS X 10.5 Ruby 1.8.6 OS X 10.2 RubyCocoa Ruby 1.6.7 Rails 2005 2002 2007 OS X 10.4 Ruby 1.8.22009年11月8日日曜日
    • RubyとMac OS X 10.5 Ruby 1.8.6 OS X 10.2 RubyCocoa Ruby 1.6.7 Rails 2005 2009 2002 2007 OS X 10.4 OS X 10.6 Ruby 1.8.2 Ruby 1.8.7 RubyCocoa Rails2009年11月8日日曜日
    • RubyistとMacユーザ2009年11月8日日曜日
    • RubyistとMacユーザ Rubyは世界ランク10位 1位はJava http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html2009年11月8日日曜日
    • RubyistとMacユーザ Rubyは世界ランク10位 1位はJava Macの世界シェアは10%以下 90%以上がWindows http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html2009年11月8日日曜日
    • RubyistとMacユーザ Rubyは世界ランク10位 1位はJava Macの世界シェアは10%以下 90%以上がWindows 海外のRubyist≒Macユーザ Ruby Conf 2008に出席したある人の感想 http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html2009年11月8日日曜日
    • RubyistとMacユーザ Rubyは世界ランク10位 1位はJava Macの世界シェアは10%以下 90%以上がWindows 海外のRubyist≒Macユーザ Ruby Conf 2008に出席したある人の感想 NaClのMacユーザ=Rubyist http://www.tiobe.com/index.php/paperinfo/tpci/Ruby.html2009年11月8日日曜日
    • RubyによるMacアプリ開発2009年11月8日日曜日
    • RubyによるMacアプリ開発2009年11月8日日曜日
    • RubyによるMacアプリ開発 標準の開発ツール(Xcode)がRuby対応 ただし、Mac OS X 10.5だけ...2009年11月8日日曜日
    • RubyによるMacアプリ開発 標準の開発ツール(Xcode)がRuby対応 ただし、Mac OS X 10.5だけ... Rubyを使ってMacアプリを開発できる RubyとRubyCocoa MacRuby2009年11月8日日曜日
    • RubyによるMacアプリ開発 標準の開発ツール(Xcode)がRuby対応 ただし、Mac OS X 10.5だけ... Rubyを使ってMacアプリを開発できる RubyとRubyCocoa MacRuby とにかくGUI2009年11月8日日曜日
    • 開発ツール:Xcode2009年11月8日日曜日
    • 開発ツール:Xcode グループ2009年11月8日日曜日
    • 開発ツール:Xcode ファイル一覧 グループ2009年11月8日日曜日
    • 開発ツール:Xcode ファイル一覧 グループ エディタ2009年11月8日日曜日
    • 開発ツール:Interface Builder2009年11月8日日曜日
    • 開発ツール:Interface Builder メインウインドウ2009年11月8日日曜日
    • 開発ツール:Interface Builder メインウインドウ プロパティ2009年11月8日日曜日
    • 開発ツール:Interface Builder GUI部品 メインウインドウ プロパティ2009年11月8日日曜日
    • 公式開発言語:Objective-C2009年11月8日日曜日
    • 公式開発言語:Objective-C Macアプリの公式開発言語2009年11月8日日曜日
    • 公式開発言語:Objective-C Macアプリの公式開発言語 C言語にオブジェクト指向機能を追加 C言語の上位互換言語2009年11月8日日曜日
    • 公式開発言語:Objective-C Macアプリの公式開発言語 C言語にオブジェクト指向機能を追加 C言語の上位互換言語 C++とは異なるオブジェクトシステム Smalltalk由来 参考画像:CちゃんとSqueakのコラボ、絶妙なバランス http://www.limo.fumi2kick.com/forum/glang/glang17.jpg2009年11月8日日曜日
    • 公式開発言語:Objective-C Macアプリの公式開発言語 C言語にオブジェクト指向機能を追加 C言語の上位互換言語 C++とは異なるオブジェクトシステム Smalltalk由来 Cocoa:Objective-C用のライブラリ 参考画像:CちゃんとSqueakのコラボ、絶妙なバランス http://www.limo.fumi2kick.com/forum/glang/glang17.jpg2009年11月8日日曜日
    • RubyとObjective-C Ruby Objective-C self.width [self width];2009年11月8日日曜日
    • RubyとObjective-C Ruby Objective-C self.width [self width]; オブジェクトシステムはSmalltalk由来2009年11月8日日曜日
    • RubyとObjective-C Ruby Objective-C self.width [self width]; オブジェクトシステムはSmalltalk由来 相性は抜群 『RubyとCocoa(Objective-C)は、非常に幸運な組み合わせだったと言えるでしょう』                            -- 中川智史:RHC本より2009年11月8日日曜日
    • RubyとObjective-C Ruby Objective-C self.width [self width]; オブジェクトシステムはSmalltalk由来 相性は抜群 『RubyとCocoa(Objective-C)は、非常に幸運な組み合わせだったと言えるでしょう』                            -- 中川智史:RHC本より Rubyが理解できていればObjective-Cの理解は早い ただし、C言語の知識があることが前提2009年11月8日日曜日
    • RubyとObjective-C Ruby Objective-C self.width [self width]; オブジェクトシステムはSmalltalk由来 相性は抜群 『RubyとCocoa(Objective-C)は、非常に幸運な組み合わせだったと言えるでしょう』                            -- 中川智史:RHC本より Rubyが理解できていればObjective-Cの理解は早い ただし、C言語の知識があることが前提2009年11月8日日曜日
    • RubyとObjective-C Ruby Objective-C self.width [self width]; オブジェクトシステムはSmalltalk由来 相性は抜群 『RubyとCocoa(Objective-C)は、非常に幸運な組み合わせだったと言えるでしょう』                            -- 中川智史:RHC本より Rubyが理解できていればObjective-Cの理解は早い ただし、C言語の知識があることが前提2009年11月8日日曜日
    • RubyCocoaとMacRuby2009年11月8日日曜日
    • RubyCocoaとMacRuby RubyCocoa RubyとObjective-Cの橋渡しを行うライブラリ2009年11月8日日曜日
    • RubyCocoaとMacRuby RubyCocoa RubyとObjective-Cの橋渡しを行うライブラリ MacRuby Macに特化したRubyの処理系 http://www.macruby.org/2009年11月8日日曜日
    • RubyCocoaとMacRuby RubyCocoa RubyとObjective-Cの橋渡しを行うライブラリ MacRuby Macに特化したRubyの処理系 http://www.macruby.org/2009年11月8日日曜日
    • MacRubyの特徴 http://www.macruby.org/2009年11月8日日曜日
    • MacRubyの特徴 http://www.macruby.org/ CRuby 1.9ベース、100%互換を目標2009年11月8日日曜日
    • MacRubyの特徴 http://www.macruby.org/ CRuby 1.9ベース、100%互換を目標 LLVMで再実装されたVM2009年11月8日日曜日
    • MacRubyの特徴 http://www.macruby.org/ CRuby 1.9ベース、100%互換を目標 LLVMで再実装されたVM Rubyスクリプトをコンパイル可能2009年11月8日日曜日
    • MacRubyの特徴 http://www.macruby.org/ CRuby 1.9ベース、100%互換を目標 LLVMで再実装されたVM Rubyスクリプトをコンパイル可能 Mac OS Xにプリインストールされる(かも?) メイン開発者のLaurent Sansonetti氏はAppleの社員2009年11月8日日曜日
    • MacRubyのデモ class AppController attr_accessor :textField def hello(sender) @textField.stringValue = "Hello,MacRuby!" end end2009年11月8日日曜日
    • MacRubyの情報源2009年11月8日日曜日
    • MacRubyの情報源2009年11月8日日曜日
    • MacRubyの情報源2009年11月8日日曜日
    • MacRubyの情報源 『RubyによるMac OS Xデスクトップアプリケーション開発入門』 通称RHC本 ISBN: 978-4839931780 9月25日発売 3,570円(税込み)2009年11月8日日曜日
    • MacRubyの情報源 『RubyによるMac OS Xデスクトップアプリケーション開発入門』 通称RHC本 ISBN: 978-4839931780 9月25日発売 3,570円(税込み) MacRuby:世界に1冊2009年11月8日日曜日
    • MacRubyの情報源 『RubyによるMac OS Xデスクトップアプリケーション開発入門』 通称RHC本 ISBN: 978-4839931780 9月25日発売 3,570円(税込み) MacRuby:世界に1冊 RubyCocoa:日本に1冊2009年11月8日日曜日
    • MacRubyの情報源 『RubyによるMac OS Xデスクトップアプリケーション開発入門』 通称RHC本 ISBN: 978-4839931780 9月25日発売 3,570円(税込み) MacRuby:世界に1冊 RubyCocoa:日本に1冊 6F展示会場にてサイン会2009年11月8日日曜日
    • Macアプリの配布 Bodega:Macアプリ版AppStore2009年11月8日日曜日
    • Mac OS X 10.62009年11月8日日曜日
    • Mac OS X 10.6 http://www.apple.com/jp/macosx/uptodate/2009年11月8日日曜日
    • Mac OS X 10.6 2009/8/28リリース Snow Leopard:雪 http://www.apple.com/jp/macosx/uptodate/2009年11月8日日曜日
    • Mac OS X 10.6 2009/8/28リリース Snow Leopard:雪 GCD(Grand Central Dispatch) http://www.apple.com/jp/macosx/uptodate/2009年11月8日日曜日
    • Mac OS X 10.6 2009/8/28リリース Snow Leopard:雪 GCD(Grand Central Dispatch) OpenCL http://www.apple.com/jp/macosx/uptodate/2009年11月8日日曜日
    • Mac OS X 10.6 2009/8/28リリース Snow Leopard:雪 GCD(Grand Central Dispatch) OpenCL http://www.apple.com/jp/macosx/uptodate/2009年11月8日日曜日
    • GCDとは http://www.apple.com/jp/macosx/technology/2009年11月8日日曜日
    • GCDとは 並列処理を行うためのライブラリ http://www.apple.com/jp/macosx/technology/2009年11月8日日曜日
    • GCDとは 並列処理を行うためのライブラリ C言語の拡張とランタイム http://www.apple.com/jp/macosx/technology/2009年11月8日日曜日
    • GCDとは 並列処理を行うためのライブラリ C言語の拡張とランタイム MacRuby 0.5以降で利用できる http://www.apple.com/jp/macosx/technology/2009年11月8日日曜日
    • GCDのサンプル 素数の数を求める処理をGCDを使って実装する # 整数numが素数かどうかを判定する # 戻り値がtrueであれば素数 def prime?(num) (2...num).each do |i| return false if num % i == 0 end return true end2009年11月8日日曜日
    • GCDのサンプル # 10_000_000から10_000_299までの素数の数を求める prime = [] for i in 0...300 n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) $ time macruby count-prime.rb 14 macruby count-prime.rb 14.86s user 0.12s system 93% cpu 16.016 total2009年11月8日日曜日
    • GCDのサンプル # 10_000_000から10_000_299までの素数の数を求める prime = [] for i in 0...300 n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • GCDのサンプル # 10_000_000から10_000_299までの素数の数を求める prime = [] for i in 0...300 ループの並列処理 n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • GCDのサンプル # 10_000_000から10_000_299までの素数の数を求める prime = [] for i in 0...300 ループの並列処理 n = i + 10_000_000 prime << n if prime?(n) ロック end puts(prime.length) #=> 142009年11月8日日曜日
    • ループの並列処理 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q.apply(300) do |i| n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • ループの並列処理 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent 並列処理用のオブジェクトの取得 prime = [] q.apply(300) do |i| n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • ループの並列処理 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent 並列処理用のオブジェクトの取得 prime = [] q.apply(300) do |i| 並列ループ n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • グローバルディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 処理(ブロック)をディスパッチキューに登録 FIFO CPUのコア数などを考慮して自動で並列処理2009年11月8日日曜日
    • グローバルディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 10000000 素数? 処理(ブロック)をディスパッチキューに登録 FIFO CPUのコア数などを考慮して自動で並列処理2009年11月8日日曜日
    • グローバルディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 10000000 10000001 素数? 素数? 処理(ブロック)をディスパッチキューに登録 FIFO CPUのコア数などを考慮して自動で並列処理2009年11月8日日曜日
    • ループの並列処理の詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q.apply(300) do n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • ループの並列処理の詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent グローバルディスパッチキューの取得 prime = [] q.apply(300) do n = i + 10_000_000 prime << n if prime?(n) end puts(prime.length) #=> 142009年11月8日日曜日
    • ループの並列処理の詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent グローバルディスパッチキューの取得 prime = [] q.apply(300) do n = i + 10_000_000 prime << n if prime?(n) end ブロックをグローバルディスパッチキューに登録 puts(prime.length) #=> 142009年11月8日日曜日
    • ロック # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) end q_prime.dispatch(true) { puts(prime.length) }2009年11月8日日曜日
    • ロック # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") ロック用のオブジェクトの取得 q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) end q_prime.dispatch(true) { puts(prime.length) }2009年11月8日日曜日
    • ロック # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") ロック用のオブジェクトの取得 q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) ロック end q_prime.dispatch(true) { puts(prime.length) }2009年11月8日日曜日
    • ロック # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") ロック用のオブジェクトの取得 q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) ロック end q_prime.dispatch(true) { puts(prime.length) } 処理完了待ち2009年11月8日日曜日
    • プライベートディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 10000200 素数? プライベートディスパッチキュー 10000019 配列に追加 10000079 配列に追加 10000103 配列に追加 … ディスパッチキューに登録した順に1つずつ処理 プライベートキューは何個でも生成可能 ワーカースレッドはグローバルとプライベートで共通2009年11月8日日曜日
    • プライベートディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 10000019 10000200 配列に追加 素数? プライベートディスパッチキュー 10000019 配列に追加 10000079 配列に追加 10000103 配列に追加 … ディスパッチキューに登録した順に1つずつ処理 プライベートキューは何個でも生成可能 ワーカースレッドはグローバルとプライベートで共通2009年11月8日日曜日
    • プライベートディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 プライベートディスパッチキュー … 10000019 10000079 10000103 10000271 素数の 配列に追加 配列に追加 配列に追加 配列に追加 数を出力 ディスパッチキューに登録した順に1つずつ処理 プライベートキューは何個でも生成可能 ワーカースレッドはグローバルとプライベートで共通2009年11月8日日曜日
    • プライベートディスパッチキュー グローバルディスパッチキュー 10000000 素数? 10000001 素数? 10000002 素数? … 10000299 素数? ワーカースレッド1 ワーカースレッド2 10000103 配列に追加 プライベートディスパッチキュー … 10000019 10000079 10000103 10000271 素数の 配列に追加 配列に追加 配列に追加 配列に追加 数を出力 ディスパッチキューに登録した順に1つずつ処理 プライベートキューは何個でも生成可能 ワーカースレッドはグローバルとプライベートで共通2009年11月8日日曜日
    • ロックの詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) end q_prime.dispatch(true) { puts(prime.length) }2009年11月8日日曜日
    • ロックの詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") プライベートディスパッチキューの生成 q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) end q_prime.dispatch(true) { puts(prime.length) }2009年11月8日日曜日
    • ロックの詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") プライベートディスパッチキューの生成 q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) 配列への要素追加をキューに登録(非同期) end q_prime.dispatch(true) { puts(prime.length) }2009年11月8日日曜日
    • ロックの詳細 # 10_000_000から10_000_299までの素数の数を求める q = Dispatch::Queue.concurrent prime = [] q_prime = Dispatch::Queue.new("com.example.prime") プライベートディスパッチキューの生成 q.apply(300) do n = i + 10_000_000 q_prime.dispatch { prime << n } if prime?(n) 配列への要素追加をキューに登録(非同期) end q_prime.dispatch(true) { puts(prime.length) } 素数の数の出力をキューに登録(同期)2009年11月8日日曜日
    • 使用したGCDのメソッド2009年11月8日日曜日
    • 使用したGCDのメソッド Dispatch::Queue.concurrent(priority = :default) 並列処理用のグローバルディスパッチキューを取得する2009年11月8日日曜日
    • 使用したGCDのメソッド Dispatch::Queue.concurrent(priority = :default) 並列処理用のグローバルディスパッチキューを取得する Dispatch::Queue#apply(amount_size) 並列ループを実行する2009年11月8日日曜日
    • 使用したGCDのメソッド Dispatch::Queue.concurrent(priority = :default) 並列処理用のグローバルディスパッチキューを取得する Dispatch::Queue#apply(amount_size) 並列ループを実行する Dispatch::Queue.new(label) シリアル処理用のプライベートディスパッチキューを生成する2009年11月8日日曜日
    • 使用したGCDのメソッド Dispatch::Queue.concurrent(priority = :default) 並列処理用のグローバルディスパッチキューを取得する Dispatch::Queue#apply(amount_size) 並列ループを実行する Dispatch::Queue.new(label) シリアル処理用のプライベートディスパッチキューを生成する Dispatch::Queue#dispatch(synchronicity = false) ディスパッチキューにブロックを登録する2009年11月8日日曜日
    • GCD vs. Thread 無駄に複数のスレッドを起動せずOS(中央)が制御 ロック不要 デッドロックが発生しない スレッド直接を使った方が効率がよいアプリが書けるが... 高い技術力やスレッドに関する知識が必要2009年11月8日日曜日
    • まとめ2009年11月8日日曜日
    • まとめ RubyとMac Rubyist≒Macユーザ2009年11月8日日曜日
    • まとめ RubyとMac Rubyist≒Macユーザ RubyによるMacアプリ開発 MacRubyを使おう2009年11月8日日曜日
    • まとめ RubyとMac Rubyist≒Macユーザ RubyによるMacアプリ開発 MacRubyを使おう Mac OS X 10.6 GCDは並列処理を行うライブラリ2009年11月8日日曜日
    • 質疑・応答 RHC本サポート:http://www.takao7.net/rhcbk/ kouji@takao7.net、@takaokouji、id:kouji0625 Pokenでハイホー! RHC本のサイン&販売会はこのあとすぐ!! 関西Ruby会議02 ­ 2009年11月7日 ネットワーク応用通信研究所 研究員 高尾 宏治<kouji@netlab.jp>2009年11月8日日曜日