11月8日イケテルjruby勉強会@東京

191
Ruby Business Commons 配布資料 USBメモリでデータを配布しています データをコピーし終わったら 近くの人にUSBメモリを回して下さい USBメモリからコピーして欲しいもの ・イケテルJRuby勉強会資料.pdf ・サンプルコード(code1.txt~code21.txt) ・ruby-processingフォルダ ・サクラエディタのインストーラ 環境設定まだなんです、という人は↓もコピー ・Java(JDK1.6)とJRuby(1.1.4)のインストーラ 1 2008118日土曜日

description

RubyProcessingの説明

Transcript of 11月8日イケテルjruby勉強会@東京

Page 1: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

配布資料

USBメモリでデータを配布していますデータをコピーし終わったら 

近くの人にUSBメモリを回して下さい 

USBメモリからコピーして欲しいもの

・イケテルJRuby勉強会資料.pdf・サンプルコード(code1.txt~code21.txt) ・ruby-processingフォルダ・サクラエディタのインストーラ

 環境設定まだなんです、という人は↓もコピー 

・Java(JDK1.6)とJRuby(1.1.4)のインストーラ

12008年11月8日土曜日

Page 2: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

始まる前の環境確認

環境設定が完了しているか 確認を!    

上手くいかなかった方は 遠慮せずに手を挙げて呼んで下さいね

22008年11月8日土曜日

Page 3: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

今日必要な環境

Java ・java -versionで1.5か1.6であることを確認 JRuby ・jruby -vで1.1.3か1.1.4であることを確認       1.1.5でも構わないエディタ ・サクラエディタや秀丸など   改行コードを自動認識してくれるエディタ

32008年11月8日土曜日

Page 4: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Javaのインストール(Windows)

JRubyを動かすには先ずはJavaのインストールが必要です

下記のURLからJDKをダウンロードし

解凍して適当な場所(例えばCドライブ直下)

に置いてください

「JDK 6 Update 10のダウンロード」をクリックして下さいhttp://java.sun.com/javase/ja/6/download.html

42008年11月8日土曜日

Page 5: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Javaのインストール(Mac)

Macユーザの方はこちらのページからdmgファイルをダウンロードします

インストーラの指示に従ってインストールを行って下さい

「136.4MB」をクリックして下さい

http://www.apple.com/jp/ftp-info/reference/javaformacosx105update2.html

52008年11月8日土曜日

Page 6: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

JRubyのインストール

次はJRubyをインストールしましょう

下記のURLからJRubyをダウンロードし解凍して適当な場所

(例えばWinならCドライブ直下,Macなら/Applications以下)

に置いてください

Windowsは「jruby-bin-1.1.4.zip」を、Macは「jruby-bin-1.1.4.tar.gz」をクリックして下さい

http://dist.codehaus.org/jruby/

62008年11月8日土曜日

Page 7: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

アテンション! その1

Pathの中に日本語が入っていると 

上手く行きません>< 

JavaやJRubyを日本語フォルダの下に 

置かないように気をつけて下さい

72008年11月8日土曜日

Page 8: 11月8日イケテルjruby勉強会@東京

環境変数の設定(Windows)「スタート」 -> 「コントロールパネル」 -> 「システム」

の順にクリックし、システムのプロパティウインドウを開く

「環境変数」をクリック

82008年11月8日土曜日

Page 9: 11月8日イケテルjruby勉強会@東京

環境変数の設定(Windows)先ずはJAVA_HOME、JRUBY_HOMEの

2つを「新規」(既に存在していたら「編集」)で設定します

92008年11月8日土曜日

Page 10: 11月8日イケテルjruby勉強会@東京

環境変数の設定(Windows)

次に既存の「Path」の先頭に次の一行を追加します

%JAVA_HOME%\bin;%JRUBY_HOME%\bin;

既に書いてあったものは消さず「先頭に追記」をしてください

102008年11月8日土曜日

Page 11: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

環境変数の設定(Mac)

JAVA_HOME, JRUBY_HOME, PATHこの3つの環境変数を設定しますMac(Unix系)ならコマンドラインで

export JAVA_HOME=JDKを置いた場所 export JRUBY_HOME=JRubyを置いた場所 export PATH=$JRUBY_HOME/bin:$PATH

間違えた?と思ったらprintenvコマンドで

現在の環境変数が確認出来ます

112008年11月8日土曜日

Page 12: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

環境設定は出来ましたか?

全部出来たら一度確認をしてみましょう 

   

もし上手くいかなくてもあとでもう一度 

みんなで確認するので大丈夫ですよ

122008年11月8日土曜日

Page 13: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

132008年11月8日土曜日

Page 14: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

RBCとは

実際のビジネスに利用するRubyの

ノウハウをコモンズし、ビジネス利用に

おける生産性を高めあうことを目的とした

オープンなコミュニティ

2007年7月31日に設立

142008年11月8日土曜日

Page 15: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

今日の目標難しい理論は、いつでも学べる。

まずはやり方を覚えて、 「動いた!面白い!」 

を一緒に実感しましょう。  

今回は、ruby-processingを使って絵をぐりぐり動かして遊びます。

  明るく、楽しく。

Rubyのコーディングの楽しさをみんなで共有したい。

152008年11月8日土曜日

Page 16: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

忘れないでください

誰かが先生で、誰かが生徒というのは、決まっている訳じゃない。

全員が先生で、全員が生徒。

お互いが刺激しあい高めあえる。

それがRBCです。

162008年11月8日土曜日

Page 17: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

チームを作ろう

チームを作ります。 

人が集まっただけでは、チームではありません。 お互いが、お互いを知り、“信頼”しあってこそ、

チームになります。

まずは、チーム内で自己紹介をしてください。

172008年11月8日土曜日

Page 18: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

お願いです

このチームは、今日一日。運命共同体です。

困っている仲間がいたら、助けてください。

うまく行ったら拍手をしてください。

それがRBCのルールです。

182008年11月8日土曜日

Page 19: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

では、ボチボチ

行きましょうか

192008年11月8日土曜日

Page 20: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

円陣

202008年11月8日土曜日

Page 21: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

環境設定212008年11月8日土曜日

Page 22: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

最もつまづきやすい環境設定

逆に言えば環境設定さえ上手く行けば 

イケテルJRuby勉強会は 

もう半分以上成功したようなもの 

先ずは環境設定からはじめよう! 

222008年11月8日土曜日

Page 23: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

今日必要な環境

Java ・java -versionで1.5か1.6であることを確認 JRuby ・jruby -vで1.1.3か1.1.4であることを確認       1.1.5でも構わないエディタ ・サクラエディタや秀丸など   改行コードを自動認識してくれるエディタ

232008年11月8日土曜日

Page 24: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Java & JRuby

java version "1.6.0"jruby 1.1.4 が出た?

242008年11月8日土曜日

Page 25: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Javaのインストール(Windows)

JRubyを動かすには先ずはJavaのインストールが必要です

下記のURLからJDKをダウンロードし

解凍して適当な場所(例えばCドライブ直下)

に置いてください

「JDK 6 Update 10のダウンロード」をクリックして下さいhttp://java.sun.com/javase/ja/6/download.html

252008年11月8日土曜日

Page 26: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Javaのインストール(Mac)

Macユーザの方はこちらのページからdmgファイルをダウンロードします

インストーラの指示に従ってインストールを行って下さい

「136.4MB」をクリックして下さい

http://www.apple.com/jp/ftp-info/reference/javaformacosx105update2.html

262008年11月8日土曜日

Page 27: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

JRubyのインストール

次はJRubyをインストールしましょう

下記のURLからJRubyをダウンロードし解凍して適当な場所

(例えばWinならCドライブ直下,Macなら/Applications以下)

に置いてください

Windowsは「jruby-bin-1.1.4.zip」を、Macは「jruby-bin-1.1.4.tar.gz」をクリックして下さい

http://dist.codehaus.org/jruby/

272008年11月8日土曜日

Page 28: 11月8日イケテルjruby勉強会@東京

環境変数の設定(Windows)「スタート」 -> 「コントロールパネル」 -> 「システム」

の順にクリックし、システムのプロパティウインドウを開く

「環境変数」をクリック

282008年11月8日土曜日

Page 29: 11月8日イケテルjruby勉強会@東京

環境変数の設定(Windows)先ずはJAVA_HOME、JRUBY_HOMEの

2つを「新規」(既に存在していたら「編集」)で設定します

292008年11月8日土曜日

Page 30: 11月8日イケテルjruby勉強会@東京

環境変数の設定(Windows)

次に既存の「Path」の先頭に次の一行を追加します

%JAVA_HOME%\bin;%JRUBY_HOME%\bin;

既に書いてあったものは消さず「先頭に追記」をしてください

302008年11月8日土曜日

Page 31: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

環境変数の設定(Mac)

JAVA_HOME, JRUBY_HOME, PATHこの3つの環境変数を設定しますMac(Unix系)ならコマンドラインで

export JAVA_HOME=JDKを置いた場所 export JRUBY_HOME=JRubyを置いた場所 export PATH=$JRUBY_HOME/bin:$PATH

間違えた?と思ったらprintenvコマンドで

現在の環境変数が確認出来ます

312008年11月8日土曜日

Page 32: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

環境設定は出来ましたか?

全部出来たらもう一度確認をしてみましょう

    

上手くいかなかったら遠慮なく手を上げて呼んで下さいね

322008年11月8日土曜日

Page 33: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

配布データはコピーしましたか?

先ほどUSBメモリでデータを配布しました 

自分のパソコンに以下のデータが揃っていることを確認して下さい

 配布データ一覧

・イケテルJRuby勉強会資料.pdf・サンプルコード(code1.txt~code21.txt) 

・ruby-processingフォルダ・サクラエディタのインストーラ

332008年11月8日土曜日

Page 34: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

準備、出来ましたか?

拍手!拍手! 

それじゃあさっそく 

楽しくruby-processingを 

はじめましょう! 

342008年11月8日土曜日

Page 35: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Processingとは?

もともとはJavaで開発されたProcessing

 イメージやアニメーション、サウンドの

プログラミングをしたい! 

そんな人のためのオープンソースのプログラミング言語

そして開発環境を指します

352008年11月8日土曜日

Page 36: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ではRuby-processingとは?

JRubyを活かしてRubyからProcessingを

利用出来るようにしたのが 

Ruby-processing 

今日みんなで使って遊ぶのはこちらの「Ruby-processing」です 

362008年11月8日土曜日

Page 37: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

もっと詳しく知りたい!

Processingについて詳しく知りたい方はこちらを参照して下さい

http://github.com/jashkenas/ruby-processing/wikis 

例えばインタラクティブミラーのように国内外のアーティストによる作品も多数発表されています

http://www.haque.co.uk/  

オープンソースかつマルチプラットフォームであることから

教育現場での利用も・・・

372008年11月8日土曜日

Page 38: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

最初に開発スペースを用意

先ほどUSBメモリで配布したruby-processingフォルダを

Cドライブ直下にコピーして下さい (Macの方は/Users/ユーザ名/の下にでも)

 そしてコピーした

ruby-processingフォルダの中に 「rbcフォルダ」を新しく作成します

 このrbcフォルダが

今日の開発スペースになります 

382008年11月8日土曜日

Page 39: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

rbcフォルダを作る

ここですよー

392008年11月8日土曜日

Page 40: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

アテンション! その2

Pathの中に日本語が入っているとやっぱり上手く行きません><

 あとこの先はCドライブ直下に 

ruby-processingフォルダを置いた前提で説明が進んで行きます

 他の場所に置いた方は間違えないように

注意して下さいね

402008年11月8日土曜日

Page 41: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

今回はUSBメモリで配りましたが

ウェブからダウンロードする場合はgithubのruby-processingのwikiページから

        

 「Download It!」をクリックしますhttp://github.com/jashkenas/ruby-processing/wikis 

 412008年11月8日土曜日

Page 42: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

rbcフォルダ出来ましたか?

今日の勉強会が終わるころには 今は空っぽなrbcフォルダの中に 自分で作ったRubyのプログラムがたーくさん入っている予定です 楽しみですね

422008年11月8日土曜日

Page 43: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

作った開発スペースまで移動

コマンドプロンプトを開いて 

いま用意したruby-processingフォルダまで 

移動してみましょう

cd C:¥ruby-processing

dirするとrbcフォルダがありましたか?

432008年11月8日土曜日

Page 44: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ここですよー

rbcフォルダがあった

442008年11月8日土曜日

Page 45: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ファイルを作成する

区切りは半角スペースです 

この資料からコピーして実行すると 余計な全角空白が混ざって

失敗することがあるので直打ち推奨です

C:\ruby-processing>jruby script/generate rbc/rotate_rectangles.rb 400 400

452008年11月8日土曜日

Page 46: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

rbcフォルダの中を見て下さい

rotate_rectangles.rb 

というファイルが出来ているはずです 

どうですか?ありましたか? 

ではエディタで開いて 

中身を見てみてください 

462008年11月8日土曜日

Page 47: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなファイルがありましたか?

このソースは「code1.txt」として配布されています

472008年11月8日土曜日

Page 48: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

1. 「足場」はもう完成しました

自動生成された「足場」となるソースを実際に読んでみましょう

require 'ruby-processing'

class RotateRectangles < Processing::App

def setup

end

def draw

end

end

RotateRectangles.new :title => "Rotate Rectangles", :width => 400, :height => 400

これがProcessingのお約束!初期処理(setup)と描画(draw)を

行うメソッドだよ

482008年11月8日土曜日

Page 49: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

アテンション! その3

Windowsのメモ帳で開いている方!正常に改行されてませんよね?

generateで自動生成したファイルの改行コードはWin環境の改行コードCR+LFではなく、 LFです

今日は秀丸やサクラエディタなどの改行コードを自動認識してくれる

エディタを使って下さい

492008年11月8日土曜日

Page 50: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

今のjrubyコマンドで何が起きたの?

コマンドプロンプトで実行した

C:\ruby-processing> jruby script/generate rbc/rotate_rectangles.rb 400 400

という一文で 

400x400ピクセルのキャンバスと

そこにスケッチするプログラムの

ひな形ができました

502008年11月8日土曜日

Page 51: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

generateってなに?

generateコマンドは「目的に応じたリソース(プログラム)を自動生成してくれるジェネレータ」を起動するためのコマンドです

つまり「script/generate rbc/rotate_rectangles.rb」は

ということを表していたんです

ジェネレータを起動して、rbcフォルダにrotate_rectangles.rbというプログラムを作って! 

512008年11月8日土曜日

Page 52: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

生成されたファイルを実行してみる

C:\ruby-processing>jruby rbc/rotate_rectangles.rb

先ほどと同じく区切りは半角スペースです 

どうですか? 

何か起きましたか? 

522008年11月8日土曜日

Page 53: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなウィンドウ出ましたか?

OSによって多少見た目は異なりますが 

こんなウィンドウが出ましたか?

532008年11月8日土曜日

Page 54: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

400x400のキャンバス

... def setup #キャンバスの色を決めたりなどの #スケッチの準備

end

def draw #ここにスケッチするプログラムを書きますend...

スケッチ

ひな形

裏側でこんなことが起きていました

542008年11月8日土曜日

Page 55: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ではrotate_rectangles.rbを開いて

これからこのファイルに自分たちでコードを追加していきます

 

 

   

準備はいいですか? 

552008年11月8日土曜日

Page 56: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

2. 四角形をいくつか表示してみよう

def setup color_mode HSB, 100 background 0 no_stroke end def draw 5.times do |i| i += 1 fill 30, i*20, 99 sz = 60 - i*10 rect 0, 0, sz, sz end end

rotate_rectangles.rbに黒い部分のコードを追記して下さい

562008年11月8日土曜日

Page 57: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

アテンション! その4 この資料(PDF)からソースをコピーすると

半角スペースが全角スペースになってしまうことがあり

これがエラーの原因になりやすいです

参考となる「完成品」のソースコードはUSBメモリでお配りしてあります

「ここは手が書かずにコピーして実行したい」という場合はそちらのテキストファイルから

コピーしてください

572008年11月8日土曜日

Page 58: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう

特にここの「end」を忘れないように!

このソースは「code2.txt」として配布されています

582008年11月8日土曜日

Page 59: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

追記したファイルを実行してみる

C:\ruby-processing>jruby rbc/rotate_rectangles.rb

592008年11月8日土曜日

Page 60: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなウィンドウが出たら成功

四角形を5つ表示しましたデフォルトの表示位置はウィンドウ左上です

602008年11月8日土曜日

Page 61: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

四角形出ましたか?

上手くいっていない人が居たら

先に出来た人が助けてあげてください

四角形が出たら拍手!

上手く出ない人はrotate_rectangles.rbをもう一度確認してみましょう

612008年11月8日土曜日

Page 62: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

さっき書き足したソースの解説を

しようと思ったけれども

この先、第2部まで通して

コーディングしていくうちに

徐々に分かってくるところが多いので

簡単に。

622008年11月8日土曜日

Page 63: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

これがないと始まりません -> require 'ruby-processing'

C:\ruby-processing>jirb -r irb/completionirb(main):001:0> Dir.pwd=> "C:/ruby-processing"irb(main):002:0> require 'pp'=> trueirb(main):003:0> pp $LOAD_PATH["C:/jruby-1.1.4/lib/ruby/site_ruby/1.8", "C:/jruby-1.1.4/lib/ruby/site_ruby", "C:/jruby-1.1.4/lib/ruby/1.8", "C:/jruby-1.1.4/lib/ruby/1.8/java", "lib/ruby/1.8", "."]=> nil

$LOAD_PATHの"."(カレントディレクトリ) にある、ruby-processing.rbをLOAD

Pretty Print!

C:\ruby-processing\ruby-processing.rb をロードしてます。

632008年11月8日土曜日

Page 64: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

x.times{|i|....}

C:\ruby-processing>jirb -r irb/completion

irb(main):001:0> 5.times {|i| p i }01234=> 5

irb(main):002:0>

整数オブジェクトに対する、ブロック付きのメソッド(times)呼び出し

642008年11月8日土曜日

Page 65: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

3. 図形の表示位置を移動してみよう

def draw translate width/2, height/2 5.times do |i| i += 1 fill 30, i*20, 99 sz = 60 - i*10 rect 0, 0, sz, sz end end

さっきのコードでは四角形が左上にありました場所を真ん中に動かしてみましょう

 黒い部分のコードを追記して下さい 

652008年11月8日土曜日

Page 66: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう

このソースは「code3.txt」として配布されています

662008年11月8日土曜日

Page 67: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

この状態でプロンプトから実行

C:\ruby-processing>jruby rbc/rotate_rectangles.rb

672008年11月8日土曜日

Page 68: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

でたー!

5つの四角形の場所が左上から中央に変わりましたね

682008年11月8日土曜日

Page 69: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

四角形の位置は変わった?

左上にあった四角形が 

中央辺りに移動していたら拍手! 

みんなの四角形の位置が動いたら 

次はぐるっとまわしてみましょうか

692008年11月8日土曜日

Page 70: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

4. キャンバスを45°回転させてみよう

今度は四角形が描かれているキャンバスをぐるっと回転させてみましょう

 黒い部分のコードを追記して下さい 

def draw translate width/2, height/2 rotate radians(45) 5.times do |i| i += 1 fill 30, i*20, 99 sz = 60 - i*10 rect 0, 0, sz, sz end end

まだradiansメソッドを作っていないので実行は待ってね

702008年11月8日土曜日

Page 71: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

もしここで実行したら?

Error while running applet.rbc/rotate_rectangles.rb:13:in `draw': 

 こんなエラーが発生します 

 なぜならばradiansという

「存在していないメソッド」を使おうとしているからです

 なのでradiansメソッドを作りましょう 

712008年11月8日土曜日

Page 72: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

radiansメソッドを作ります

require 'ruby-processing'

class RotateRectangles < Processing::App include Math def radians(x) return x*(PI/180) end

先ずはMathモジュールをインクルードそしてラジアンを求めるメソッドを作ります

 黒い部分のコードを追記して下さい 

(ラジアンとは、円の半径と同じ長さの円弧を1単位とする角度の表現。  0度~360度がラジアンでは0~2πに対応しています)

「PI」はぴーあいですぴーえるやぴーいちと

間違えないでね

722008年11月8日土曜日

Page 73: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう

このソースは「code4.txt」として配布されています

732008年11月8日土曜日

Page 74: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

radianが書けたら実行してみます

C:\ruby-processing>jruby rbc/rotate_rectangles.rb

キャンバスの位置はどうなりましたか?

近くの人がエラーになっていたら

声をかけて助けてあげて下さいね

742008年11月8日土曜日

Page 75: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

四角形がピラミッドになった!

5つの四角形がぐるんっと回ってきれいに45°回転しています

752008年11月8日土曜日

Page 76: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

無事動いたところで解説を

いきなりinclude Mathと書きましたが

インクルードってなんでしょう?

あとradianメソッドは

いったい何を

してくれているんでしょう?

762008年11月8日土曜日

Page 77: 11月8日イケテルjruby勉強会@東京

require と include

http://qwik.rubybizcommons.jp/518.html より抜粋、

1)requireは、Ruby ライブラリ(Ruby スクリプト (*.rb) か拡張ライブラリ (*.so) )をロードパス($LOAD_PATH、$:)から 探して、同じライブラリがロードされていなかったときのみロードする。勉強会では、require 'ruby-processing'を実行し、「class Xxx < Proces~」とすることで、継承をおこなっていました。

2)includeは指定されたモジュールの性質(メソッドや定数、クラス変数)を追加します。Rubyは多重継承をサポートしていないため、使用するクラスがすでにあるクラスを継承している場合、モジュールをインクルードすることで多重継承に相当するMix-inを実現します。ちなみに、勉強会で使用したMathモジュールは組み込みモジュールであるため、includeすることでMathモジュールの定数(PI)を使用することができました。組み込みでないモジュールは予め「require」しておく必要があります。

モジュールはインスタンスを作れません。クラスはincludeすることができません。

772008年11月8日土曜日

Page 78: 11月8日イケテルjruby勉強会@東京

Q&A窓口あります

http://groups.google.com/group/rbc-incubator

782008年11月8日土曜日

Page 79: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

5. もう少し派手にしてみよう

def draw translate width/2, height/2

rotate radians(45) 5.times do |i| i += 1 fill 30, i*20, 99 sz = 60 - i*10 rect 0, 0, sz, sz end end

黒い部分のコードを追記または編集して下さい  def draw translate width/2, height/2 ary = (0..11).map{|a| a*30} ary.each do |r2| push_matrix rotate radians(r2) translate 50, 0 h = random 100 5.times do |i| i += 1 fill h, i*20, 99, 80 sz = 60 - i*10 rect 0, 0, sz, sz end pop_matrix end end

792008年11月8日土曜日

Page 80: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう

このソースは「code5.txt」として配布されています

802008年11月8日土曜日

Page 81: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ちょっと多かったけど書けたら実行!

C:\ruby-processing>jruby rbc/rotate_rectangles.rb

きらきら眩しい絵が表示されましたか? 

 コードの量が多いので 

ちょっとしたタイプミスに注意!

812008年11月8日土曜日

Page 82: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ピラミッドから今度は・・・

四角形がきらきら回って輪っかを作っています

822008年11月8日土曜日

Page 83: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

よく分かる輪っかの説明

ary = (0..11).map{|a| a*30}ってなに?

ary.each do |r2|って何をしてるの?

push_martixってなに?

今書いたばかりのコードを

ちょっぴり説明します

832008年11月8日土曜日

Page 84: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

 (0..11).map{|a| a * 30}

C:\>jirb -r irb/completion

irb(main):001:0> ary = (0..11).map{|a| a * 30}

=> [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330]

irb(main):002:0> ary = (0..11).inject([]){ |a,n| a << n*30 } => [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330]

こんな風にも書けるけど・・・

842008年11月8日土曜日

Page 85: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

6. さらに派手にして風車にする

def draw translate width/2, height/2 ary = (0..11).map{|a| a*30}

ちょっと長いので2ページに分けて書きます

 黒い部分のコードを追記または編集して下さい 

def draw translate width/2, height/2 ary = (0..11).map{ |a| a *30 } ary.each do |r1| push_matrix rotate radians(r1) translate 100, 0 h = random 100

852008年11月8日土曜日

Page 86: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

6. さらに派手に・・・の続き

ary.each do|r2| push_matrix rotate radians(r2) translate 50, 0 h= random 100 5.times do |i| i += 1 fill h, i*20, 99, 80 sz = 60 - i*10 rect 0, 0, sz, sz end pop_matrix

end end

黒い部分のコードを追記または編集して下さい 

ary.each do |r2| push_matrix rotate radians(r2) translate 50, 0 5.times do |i| i += 1 fill h, i*20, 99, 80 sz = 60 - i*10 rect 0, 0, sz, sz end pop_matrix end pop_matrix end end

862008年11月8日土曜日

Page 87: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう

このソースは「code6.txt」として配布されています

872008年11月8日土曜日

Page 88: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

では実行してみましょう

C:\ruby-processing>jruby rbc/rotate_rectangles.rb

882008年11月8日土曜日

Page 89: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

とうとう風車になりました

ちょっと目がちかちかしますね892008年11月8日土曜日

Page 90: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

よく分かる風車の説明

ちょっとネストが多かったですが

さっきの「輪っか」と

本質的には一緒です

チーム全員、無事に動きましたか?

お疲れさまでした 

902008年11月8日土曜日

Page 91: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

第一部はこんなことをやりました

‒ 1. rotate_rectangles.rbを自動生成する‒ 2. 四角形をいくつか表示する‒ 3. その四角形を真ん中に移動する‒ 4. キャンパスを45°回転させる‒ 5. ちょっと派手な輪っかにする‒ 6. さらに派手な風車にする

第二部はまた新しいコードを

自動生成するところから始めます 

午前中を振り返る

912008年11月8日土曜日

Page 92: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

第一部と同じく「コードを書く」

「コマンドプロンプトで実行」「結果を確かめる」「ちょこっと解説」

というループで進んでいきますよ

ではもう一度コマンドプロンプトを開いてcd C:¥ruby-processing

開発スペースまで移動

922008年11月8日土曜日

Page 93: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ここですよー

rbcフォルダありますねか? 

932008年11月8日土曜日

Page 94: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ファイルを作成する

C:\ruby-processing>jruby script/generate rbc/movable_dot.rb 300 300

区切りは半角スペースです 

第二部はこのファイルを使ってマウスをクリックしたらなんか起きる!

表示する図形をオブジェクトとして表現!みたいなことをやっていきます

942008年11月8日土曜日

Page 95: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

rbcフォルダの中を見て下さい

movable_dot.rb 

というファイルが出来ているはずです 

どうですか?ありましたか? 

ではエディタで開いて 

中身を見てみてください 

952008年11月8日土曜日

Page 96: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなファイルがありましたか?

ウィンドウサイズも指定したとおり300×300になっています

 

このソースは「code10.txt」として配布されています

962008年11月8日土曜日

Page 97: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

10. 「足場」のコードが出来ました

require 'ruby-processing'

class MovableDot < Processing::App

def setup end def draw end end

MovableDot.new :title => "Movable Dot", :width => 300, :height => 300

972008年11月8日土曜日

Page 98: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

実行すると・・・

第一部で最初にgenerateした時と同じで何もない空っぽのウィンドウが出ます

なので実行せずに先に進んじゃいますね

982008年11月8日土曜日

Page 99: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

それではmovable_dot.rbを開いて

これからこのファイルに自分たちでコードを追加していきます

 

 

   

準備はいいですか? 

992008年11月8日土曜日

Page 100: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

require 'ruby-processing'

class Positionendclass Rectangle < Positionendclass Dotendclass MovableDot < Processing::App

class MovableDot...よりも前に追加していきます

11. 3つのクラスを準備するmovable_dot.rbに3つのクラス

Position、Rectangle、Dotを作ります

黒い部分のコードを追記して下さい

1002008年11月8日土曜日

Page 101: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみ・・・ません!

このソースは「code11.txt」として配布されています

1012008年11月8日土曜日

Page 102: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

だって実行しても・・・

ウィンドウ上ではまだ何の変化もないんです

なので実行せずに先に進みます

1022008年11月8日土曜日

Page 103: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

さてここからは

12. Positionクラスの中身を書く 13. Rectangleクラスの中身を書く

14. Dotクラスの中身を書く 

15. 作った3つのクラスをMovableDotクラスから呼び出して使う

 という順番で進みます

 なのでちょっと長いですが

15が終わるまでは「実行」は待って下さいね

1032008年11月8日土曜日

Page 104: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

12. Positionクラスに色々追加する

movable_dot.rbのPositionクラスに先ずは「アクセッサ」を追加します

黒い部分のコードを追記して下さい

       

Positionクラスへの追記は次のページに続きます

require 'ruby-processing' class Position attr_accessor :x, :yend

class Rectangle < Positionend

1042008年11月8日土曜日

Page 105: 11月8日イケテルjruby勉強会@東京

12. Positionクラス・・・の続き「アクセッサ」の次は

「initialize」を追加します

黒い部分のコードを追記して下さい

       

Positionクラスへの追記はさらに続きます

class Position attr_accessor :x, :y

def initialize(x = 0, y = 0, &block) move_to(x, y, &block) end

end

1052008年11月8日土曜日

Page 106: 11月8日イケテルjruby勉強会@東京

12. Positionクラス・・・の続き「アクセッサ」「initialize」に続いて

最後は「move_toメソッド」を追加します

黒い部分のコードを追記して下さい

class Position attr_accessor :x, :y

def initialize(x = 0, y = 0, &block) move_to(x, y, &block) end

def move_to(x, y) @x = block_given? ? yield(x) : x @y = block_given? ? yield(y) : y endend

1062008年11月8日土曜日

Page 107: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

画面は変わりませんが実行してみますか?

このソースは「code12.txt」として配布されています

1072008年11月8日土曜日

Page 108: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

変化ないことは知ってるけど実行!

C:\ruby-processing>jruby rbc/movable_dot.rb

特にエラーが出なければ 

問題ありません 

空っぽのウィンドウが表示されるはず 

どうですか? 

1082008年11月8日土曜日

Page 109: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

変化ないですね・・・

取りあえずタイプミスがないことは確認出来ました!

 それでは今書いたコードについて

ちょっと説明をします

1092008年11月8日土曜日

Page 110: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

アクセッサってなに?

Positionクラスに最初に書いた 

attr_accessor :x, :y 

この「アクセッサ」って 

いったいなんでしょう?

1102008年11月8日土曜日

Page 111: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

アクセッサって?インスタンスフィールドに対する

ライター(セッター)/リーダー(ゲッター)を定義

irb(main):003:0> class Fooirb(main):004:1> attr_accessor :nameirb(main):005:1> end=> nil

irb(main):006:0> foo = Foo.new=> #<Foo:0x12ddfe4>

irb(main):007:0> foo.name = "Bar"=> "Bar"

irb(main):008:0> puts foo.nameBar=> nil

attr_accessorというメソッドに、引数:nameを渡している

1112008年11月8日土曜日

Page 112: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

:name とか :x, :y って?

SymbolっていうStringと似ているオブジェクトです。お互いに変換可能。

irb(main):001:0> "foo".to_s=> "foo"irb(main):002:0> "foo".to_sym=> :fooirb(main):003:0> :foo.to_sym=> :fooirb(main):004:0> :foo.to_s=> "foo"

ちなみにこれらに継承関係はないですよirb(main):005:0> "foo".is_a?(Symbol)=> falseirb(main):006:0> :foo.is_a?(String)=> false

1122008年11月8日土曜日

Page 113: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Symbol その1

Symbolは文字列と違ってプログラム中で一度作られたら、同じ意味のものは2度と作られません。

irb(main):001:0> "foo".object_id=> 285710irb(main):002:0> "foo".object_id=> 278950# さっきと違う番号、つまり違うオブジェクトirb(main):003:0> :foo.object_id=> 145858irb(main):004:0> :foo.object_id=> 145858# さっきと同じ番号、つまり同じオブジェクト# メモリの節約です

1132008年11月8日土曜日

Page 114: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Symbol その2

使えるメソッドの違い

irb(main):026:0> "foo".methods.size=> 153irb(main):027:0> :foo.methods.size=> 46

文字列 "foo" は << とか、downcaseとか色々メソッドが使えるけど、シンボル:fooではほとんど使えません。

どんなメソッドがあるのかは、上の .size を外して実行してみれば分かりますよ。

1142008年11月8日土曜日

Page 115: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Symbol その3

irb(main):001:0> hash = {:x => 100, :y => 200}=> {:x=>100, :y=>200}irb(main):002:0> hash[:x]=> 100irb(main):002:0> hash[:y]=> 200irb(main):002:0> hash[:z]=> nil

という風にHash(連想配列。キーと値の組み合わせを持つデータ)のキーに使ったり・・・

1152008年11月8日土曜日

Page 116: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Symbol その4

irb(main):013:0> def foo(options = {})irb(main):014:1> options[:bar]irb(main):015:1> end=> nilirb(main):016:0> foo(:bar => 1)=> 1irb(main):017:0> foo(:hoge => 2)=> nil

という風に指定しなくてもいい引数(を表すHash)の名前(キー)として使います。

1162008年11月8日土曜日

Page 117: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Symbolその5def foo(t, x) case x when 1 then t.strftime("%Y/%m/%d") when 2 then t.strftime("%H:%M:%S") endendfoo(Time.now, 1)foo(Time.now, 2)

だと、1とか2の意味が分かりにくいので、シンボルで意味を表すようにします。

def foo(t, x) case x when :date then t.strftime("%Y/%m/%d") when :time then t.strftime("%H:%M:%S") endendfoo(Time.now, :time)foo(Time.now, :date)

1172008年11月8日土曜日

Page 118: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

initializeってなに?

2つめに書いた 

 はいったい何をしているのか?

def initialize(x = 0, y = 0, &block) move_to(x, y, &block)end

1182008年11月8日土曜日

Page 119: 11月8日イケテルjruby勉強会@東京

new --> initializeirb(main):001:0> class Fooirb(main):002:1> attr_accessor :x, :yirb(main):003:1> def initialize(x = 0, y = 0)irb(main):004:2> @x, @y = x, yirb(main):005:2> endirb(main):006:1> end

irb(main):007:0> foo = Foo.new=> #<Foo:0x1c8b884 @y=0, @x=0>irb(main):008:0> foo.x=> 0irb(main):009:0> foo.y=> 0

irb(main):010:0> bar = Foo.new(1, 2)=> #<Foo:0x1a9883d @y=2, @x=1>irb(main):011:0> bar.x=> 1irb(main):012:0> bar.y=> 2

1192008年11月8日土曜日

Page 120: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

move_toメソッドは何をしている?

3つめのmove_toメソッド

 「? ?」や「yield」は

 何を表しているのでしょう?

  def move_to(x, y)    @x = block_given? ? yield(x) : x    @y = block_given? ? yield(y) : y  end

1202008年11月8日土曜日

Page 121: 11月8日イケテルjruby勉強会@東京

3項演算子

irb(main):026:0> num = 1=> 1irb(main):027:0> num % 2 == 0 ? "even" : "odd"=> "odd"

irb(main):028:0> num = 2=> 2irb(main):029:0> num % 2 == 0 ? "even" : "odd"=> "even"

1212008年11月8日土曜日

Page 122: 11月8日イケテルjruby勉強会@東京

yield その1

irb(main):050:0> block_1 = Proc.new {|x, y| puts x + y}=> #<Proc:0x13a8eb1@(irb):51>

irb(main):051:0> block_2 = proc {|x, y| puts x + y}=> #<Proc:0x15200be@(irb):52>

irb(main):052:0> block_3 = lambda {|x, y| puts x + y}=> #<Proc:0x11b50a1@(irb):53>

1222008年11月8日土曜日

Page 123: 11月8日イケテルjruby勉強会@東京

yield その2

irb(main):053:0> block_1.call(1, 2)3=> nilirb(main):054:0> block_1[1, 2]3=> nilirb(main):055:0> block_2[1, 2]3=> nilirb(main):056:0> block_3[1, 2]3=> nil

タイプ数が少なくてすむから、こっちを採用

1232008年11月8日土曜日

Page 124: 11月8日イケテルjruby勉強会@東京

yield その3

irb(main):062:0> block_1[1, 2, 3]3=> nil

irb(main):063:0> block_2[1, 2, 3]ArgumentError: wrong number of arguments(3 for 2)・・・

irb(main):064:0> block_3[1, 2, 3]ArgumentError: wrong number of arguments(3 for 2)・・・

1242008年11月8日土曜日

Page 125: 11月8日イケテルjruby勉強会@東京

yield その4

irb(main):071:0> def multiple(a, b, &block)irb(main):072:1> block[a, b]irb(main):073:1> end=> nilirb(main):074:0> multiple(1, 2){|x, y| puts x + y}3=> nilirb(main):075:0> def multiple(a, b)irb(main):076:1> yield a, birb(main):077:1> end=> nilirb(main):078:0> multiple(1, 2){|x, y| puts x + y}3=> nil

1252008年11月8日土曜日

Page 126: 11月8日イケテルjruby勉強会@東京

yield その5

irb(main):079:0> def multiple(a, b, &block)irb(main):080:1> block[a, b, 3]irb(main):081:1> end=> nilirb(main):082:0> multiple(1, 2){|x, y| puts x + y}3=> nilirb(main):083:0> def multiple(a, b)irb(main):084:1> yield a, b, 3irb(main):085:1> end=> nilirb(main):086:0> multiple(1, 2){|x, y| puts x + y}3=> nil

1262008年11月8日土曜日

Page 127: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

13. Rectangleクラスを実装する今度はPositionクラスを継承する

Rectangleクラスを作っていきますよ

黒い部分のコードを追記して下さい

class Rectangle < Position attr_accessor :width, :height def initialize(x, y, width, height) super(x, y) @width, @height = width, height end

def to_a [@x, @y, @width, @height] endend

このクラスはPositionで保持する位置情報に加えて幅と高さの情報も持っています

1272008年11月8日土曜日

Page 128: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

まだまだ実行しても画面は変わりません

このソースは「code13.txt」として配布されています

1282008年11月8日土曜日

Page 129: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

クラスを2つも実装したのに・・・

ウィンドウ上ではまだまだ変化がありません 

実行せずに先に進んでしまいましょう

1292008年11月8日土曜日

Page 130: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

あ、さっき見たばかりのアクセッサ

Positionクラスで書いたアクセッサが Rectangleクラスにもいましたね

 attr_accessor :width, :height 

1302008年11月8日土曜日

Page 131: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

14. Dotクラスを実装する3つめのDotクラスを作ります

黒い部分のコードを追記して下さいclass Dot include Math

DEFAULT_SIZE = 10 DEFAULT_MARGIN = 2

def initialize(position, w = DEFAULT_SIZE , h = DEFAULT_SIZE) @app = Processing::App.current @rect = Rectangle.new(position.x, position.y, w, h) end

def display c1 = @app.color(255, 255, 255, 255) @app.fill c1 @app.rect(*@rect.to_a) endend

後で実行するときにアスタリスクの有無で

出力結果がどう変わるか比較してみよう

1312008年11月8日土曜日

Page 132: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

余裕のある人だけ実行してみましょうか?

このソースは「code14.txt」として配布されています1322008年11月8日土曜日

Page 133: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

変化ないことは知ってるけど実行!

C:\ruby-processing>jruby rbc/movable_dot.rb

今回も特にエラーが 

出なければ問題ありません 

空っぽのウィンドウが表示されるはず 

どうですか? 

1332008年11月8日土曜日

Page 134: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

うん、変化ないですね・・・

取りあえずタイプミスがないことは確認出来ました!

 お隣の人の進み具合はどうですか?

 ではコードについてちょっと説明します

1342008年11月8日土曜日

Page 135: 11月8日イケテルjruby勉強会@東京

@app.rect(*@rect.to_a)★rectメソッドのパラメータ指定例  @app.rect(x座標, y座標, 幅, 高さ)

irb(main):001:0> def to_airb(main):002:1> [100, 200, 300, 400]irb(main):003:1> end

irb(main):004:0> def foo(a, b=nil, c=nil, d=nil)irb(main):005:1> p airb(main):006:1> p birb(main):007:1> p cirb(main):008:1> p dirb(main):009:1> end

irb(main):010:0> foo(to_a) irb(main):011:0> foo(*to_a)

アスタリスクの有無で、出力結果を比較してみよう

1352008年11月8日土曜日

Page 136: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

進み具合をちょっと確認

12. Positionクラスの中身を書く 13. Rectangleクラスの中身を書く

14. Dotクラスの中身を書く 

まではチーム全員、完了しましたか? 

それではいよいよ上記3つのクラスを使う MovableDotクラスを実装します

 これが終わるとやっと

画面に変化が現れますよ!

1362008年11月8日土曜日

Page 137: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

15. MovableDotクラスを書くちょっと長いので2ページに分けますね

黒い部分のコードを追記して下さいclass MovableDot < Processing::App

THE_NUM_OF_DOT = 20

def setup @dots = [] dot_size, dot_margin = Dot::DEFAULT_SIZE, Dot::DEFAULT_MARGIN

THE_NUM_OF_DOT.times do |i| initial_position = Position.new(width, height) do |wh_value| i * (dot_size + dot_margin) + wh_value/2 - THE_NUM_OF_DOT * ((dot_size + dot_margin)/2) end @dots << Dot.new(initial_position) end end

「i * (dot」から「margin)/2)」までは実際は一行です

1372008年11月8日土曜日

Page 138: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

15. MovableDotクラス・・・の続き

 黒い部分のコードを追記して下さい

       

これでmovable_dot.rbに 

4つのクラスが実装出来ました

def draw background 0 @dots.each {|dot| dot.display} endend MovableDot.new :title => "Movable Dot", :width => 300, :height => 300

1382008年11月8日土曜日

Page 139: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう!

このソースは「code15.txt」として配布されています

1392008年11月8日土曜日

Page 140: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

実行すると今度こそウィンドウに変化

C:\ruby-processing>jruby rbc/movable_dot.rb

どうですか? 

やっと画面に変化がでましたか? 

エラーが出たら焦らずに 

4つのクラスを見直してみましょう

1402008年11月8日土曜日

Page 141: 11月8日イケテルjruby勉強会@東京

わー、ぱちぱち!

たくさんの四角が出たら大成功!コードについてちょっと解説しますね 

1412008年11月8日土曜日

Page 142: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

複数の変数への代入を1行で

irb>> foo, bar = 1, 2=> [1, 2]irb>> p foo1irb>> p bar2 irb>> foo, bar = [5,6]=> [5, 6]irb>> p foo5irb>> p bar6

1422008年11月8日土曜日

Page 143: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

16. Dotをカラフルに動かしてみよう

白だけだったDotに色をつけます 

movable_dot.rbのDotクラスにあるdisplayメソッドを一行だけ変更します

 黒い部分のコードを編集して下さい 

def display c1 = @app.color(255, 255, 255, 255) @app.fill c1 @app.rect(*@rect.to_a) end

def display c1 = @app.color(*(0..3).map{rand(255)}) @app.fill c1 @app.rect(*@rect.to_a)end

1432008年11月8日土曜日

Page 144: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

たった一行で何が変わるのでしょう?

このソースは「code16.txt」として配布されています

1442008年11月8日土曜日

Page 145: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

実行してカラフルなDotを見よう

C:\ruby-processing>jruby rbc/movable_dot.rb

ちかちか眩しい! 

たった一行しか変えていないのに 

こんなに変わるんですね 

動いたら拍手!拍手!

1452008年11月8日土曜日

Page 146: 11月8日イケテルjruby勉強会@東京

動いたー、ぱちぱち!

四角の色がちかちか変わりますでは今の変更についてちょこっと解説します

1462008年11月8日土曜日

Page 147: 11月8日イケテルjruby勉強会@東京

*(0..3).map{rand(255)}

irb(main):005:0> p (0..3).map{rand(255)}[36, 185, 183, 242]=> nil

irb(main):006:0> p *(0..3).map{rand(255)}98322788=> nil

1472008年11月8日土曜日

Page 148: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

17. Dotをネオンにしてみる

ちかちか光るDotを今度はネオンっぽくしてみましょう

MovableDotクラスにある

setupメソッドの先頭に一行だけ追加します 

黒い部分のコードを編集して下さい class MovableDot < Processing::App

THE_NUM_OF_DOT = 20 def setup frame_rate 1 @dots = []

1秒につき何回「drawメソッド」を実行するか指定していますちなみにデフォルトは

60回

1482008年11月8日土曜日

Page 149: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

フレームレートが60から1になるとどうなるんだろう?

このソースは「code17.txt」として配布されています

1492008年11月8日土曜日

Page 150: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ネオンなDotを実行してみよう

C:\ruby-processing>jruby rbc/movable_dot.rb

フレームレートが変わると 

こうなるんですね 

ちかちかが少しゆっくりになって 

ネオンらしくなりました 

1502008年11月8日土曜日

Page 151: 11月8日イケテルjruby勉強会@東京

ネオンが表示されました

四角の色がゆっくり変わります

1512008年11月8日土曜日

Page 152: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

18. 続いてDotを大きくしてみよう

今度はDotのサイズを変えてみます

Dotクラスにあるdiplayメソッドにstrokeメソッドを追加します

 黒い部分のコードを編集して下さい 

def display c1 = @app.color(*(0..3).map{rand(255)}) @app.fill c1 @app.stroke c1 @app.rect(*@rect.to_a) end

1522008年11月8日土曜日

Page 153: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

strokeメソッドが書けたら実行してみましょう

このソースは「code18.txt」として配布されています

1532008年11月8日土曜日

Page 154: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Dotの大きさを変えて実行してみよう

C:\ruby-processing>jruby rbc/movable_dot.rb

Dotはどれくらいの 

サイズになりましたか? 

これで大きさの変え方は 

もう完璧ですね 

1542008年11月8日土曜日

Page 155: 11月8日イケテルjruby勉強会@東京

大粒のネオンになった

ひとつひとつのDotが大きくなっています

1552008年11月8日土曜日

Page 156: 11月8日イケテルjruby勉強会@東京

ちょっと休憩

最初は真っ白だったDotを 

カラフルにして 

ネオンみたいにして 

大きさも変えてみました 

みなさん上手く行きましたか?  

さて次はどうしましょう?

1562008年11月8日土曜日

Page 157: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

19. もっとたくさんのDotを作ろう

Dotの量をうんと増やしてみましょうMovableDotクラスにあるsetupメソッドに黒い部分のコードを追加して下さい 

@dots = [] dot_size, dot_margin = Dot::DEFAULT_SIZE, Dot::DEFAULT_MARGIN

THE_NUM_OF_DOT.times do THE_NUM_OF_DOT.times do |i| initial_position = Position.new(width, height) do |wh_value| i * (dot_size + dot_margin) + wh_value/2 - THE_NUM_OF_DOT * ((dot_size + dot_margin)/2) end @dots << Dot.new(initial_position) end end end

THE_NUM_OF_DOTのループが二重になった

1572008年11月8日土曜日

Page 158: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

ではループが二重になった状態で実行してみましょう 

このソースは「code19.txt」として配布されています

1582008年11月8日土曜日

Page 159: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

では実行してみましょう

C:\ruby-processing>jruby rbc/movable_dot.rb

20×20で400になってるはずだニャ!

1592008年11月8日土曜日

Page 160: 11月8日イケテルjruby勉強会@東京

Dotが400個になった!

では増やしたDotをぐりぐり動かしましょう

さっきの実行結果とちょっと似ていますがこの後Dotを動かすと数が増えたことがよーく分かります

1602008年11月8日土曜日

Page 161: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

20. Dotを動かしてみよう

それではDotを動かすために、これから4つのクラスを書きます

1. 新しくLoopQueueクラスを作る2. Positionクラスを編集3. Dotクラスを編集

4. MovavleDotクラスを編集

 という順番で進めていきますよ

 movable_dot.rbの準備はいいですか? 

1612008年11月8日土曜日

Page 162: 11月8日イケテルjruby勉強会@東京

require 'ruby-processing'

class LoopQueue def initialize(*items) @items = items @index = 0 end

def next @index += 1 @index = 0 if @index == @items.length current end

def current @items[@index] endend

LoopQueueはDotの表示パターンを保持するクラスです

先ずはLoopQueueクラスを作る

Dotを動かすための準備をします黒い部分のコードを追加して下さい 

1622008年11月8日土曜日

Page 163: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

みなさん書けましたか?続けてPositionクラスを編集します

1632008年11月8日土曜日

Page 164: 11月8日イケテルjruby勉強会@東京

def move_to(x, y) @x = block_given? ? yield(x, :x, @x) : x @y = block_given? ? yield(y, :y, @y) : y end

def move_by(dx, dy) @x += block_given? ? yield(dx, :x, @x) : dx @y += block_given? ? yield(dy, :y, @y) : dy endend class Rectangle < Position

次にPositionクラスを編集

黒い部分のコードを編集、追加して下さい 

yieldの引数も変更

1642008年11月8日土曜日

Page 165: 11月8日イケテルjruby勉強会@東京

def initialize(position, w = DEFAULT_SIZE , h = DEFAULT_SIZE) @app = Processing::App.current @rect = Rectangle.new(position.x, position.y, w, h) @original_position = position.dup @@dot_count ||= 0 @dot_num = (@@dot_count += 1) @speed = 0.05 @next = Position.new end

Dotクラスも編集

3箇所に追記をします先ずはinitializeメソッドから

 黒い部分のコードを追加して下さい 

@nextにパターン変更後の位置情報を保持設定はまた後で!

1652008年11月8日土曜日

Page 166: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

Numeric(Fixnum, Float)irb(main):001:0> 10 / 3=> 3 irb(main):002:0> 10 / 3.0=> 3.3333333333333335irb(main):003:0> 10.0 / 3=> 3.3333333333333335irb(main):004:0> (10/3).class=> Fixnumirb(main):005:0> (10/0.3).class=> Floatirb(main):006:0> (10.0/3).class=> Floatirb(main):007:0> (10/3).to_f=> 3.0

1662008年11月8日土曜日

Page 167: 11月8日イケテルjruby勉強会@東京

def move case @app.patterns.current when :line @next.move_to(@original_position.x, @original_position.y) when :circle @next.move_to(@app.width, @app.height) do |wh_value, attr| val, sin_or_cos = (attr == :x) ? [10, 'sin'] : [20, 'cos'] (wh_value/2-val) * self.__send__(sin_or_cos, radians(@dot_num * 360/@@dot_count)) + wh_value/2 end else raise NameError, "Unsupported pattern: #{@app.patterns.current.inspect}" end @rect.move_by(@rect.x - @next.x, @rect.y - @next.y) do |value, attr| -(value * @speed) end end

Dotクラスも編集・・・の続きinitializeメソッドの下に

新しくmoveメソッドを作ります 

1672008年11月8日土曜日

Page 168: 11月8日イケテルjruby勉強会@東京

end end def radians(x) x * (PI/180) end def display c1 = @app.color(*(0..3).map{rand(255)})

Dotクラスも編集・・・の続きさらにmoveメソッドの下に

新しくradiansメソッドを作ります 

黒い部分のコードを追加して下さい  

1682008年11月8日土曜日

Page 169: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

1692008年11月8日土曜日

Page 170: 11月8日イケテルjruby勉強会@東京

(wh_value/2-val) * self.__send__(sin_or_cos, radians(@dot_num * 360/@@dot_count)) + wh_value/2

x座標=

円の半径*sin(ラジアン値の角度) + ウィンドウの幅/2

y座標=円の半径*cos(ラジアン値の角度) + ウィンドウの高さ/2

今書いたコードをちょこっと解説

Dotを円状に配置するためさきほどDotクラスのmoveメソッドに

こんなコードを書きました

1702008年11月8日土曜日

Page 171: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

caseirb(main):002:0> def case_test(o)irb(main):003:1> case oirb(main):004:2> when String : "This is String."irb(main):005:2> when Fixnum : "This is Fixnum."irb(main):006:2> when Array : "This is Array."irb(main):007:2> endirb(main):008:1> end=> nilirb(main):009:0> case_test(1)=> "This is Fixnum."irb(main):010:0> case_test([1,2])=> "This is Array."irb(main):011:0> case_test("RBC")=> "This is String."irb(main):012:0>

Attention!!Ruby1.9ではコロン(:)

使用不可、thenを

1712008年11月8日土曜日

Page 172: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

send その1

irb(main):001:0> t = Time.now=> Wed Nov 08 00:07:41 +0900 2008irb(main):002:0> t.year=> 2008irb(main):003:0> t.month=> 11irb(main):004:0> t.day=> 8irb(main):005:0> t.send(:year)=> 2008irb(main):006:0> t.send(:month)=> 11irb(main):007:0> t.send(:day)=> 8

sendを使って呼び出すメソッド名を動的に変更することも可能になります。

1722008年11月8日土曜日

Page 173: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

send その2

irb(main):001:0> t = Time.now=> Wed Nov 08 00:07:41 +0900 2008irb(main):002:0> t.strftime('%Y/%m/%d %H:%M:%S')=> "2008/11/05 00:07:41"irb(main):003:0> t.send(:strfrime, '%Y/%m/%d %H:%M:%S')=> "2008/11/05 00:07:41"

引数が必要なメソッドでもメソッド名の後にそのメソッドへの引数を書けばOK

1732008年11月8日土曜日

Page 174: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

send その3irb(main):001:0> class Fooirb(main):002:1> attr_accessor :bar irb(main):003:1> end=> nilirb(main):004:0> foo = Foo.new=> #<Foo:0x7e1596>irb(main):005:0> foo.bar = "AAA"=> "AAA"irb(main):006:0> foo.send(:bar=, "BBB")=> "BBB"irb(main):007:0> foo.bar=> "BBB"

代入だってsendで呼び出すことができちゃうよ

1742008年11月8日土曜日

Page 175: 11月8日イケテルjruby勉強会@東京

class MovableDot < Processing::App

attr_accessor :patterns THE_NUM_OF_DOT = 20

def setup frame_rate 5 @patterns = LoopQueue.new(:line, :circle) @dots = []

最後にMovableDotクラスを編集

2箇所に追記、編集をします先ずはLoopQueueインスタンスの生成から

 黒い部分のコードを追加して下さい 

frame_rateの数も変更

1752008年11月8日土曜日

Page 176: 11月8日イケテルjruby勉強会@東京

def draw background 0 @dots.each {|dot| dot.display; dot.move} end def mouse_pressed @patterns.next end

MovableDotクラス・・・の続き

次にイベントリスナーを用意しますこれによりマウスがクリックされると・・・ 

 黒い部分のコードを追加して下さい 

1762008年11月8日土曜日

Page 177: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

このソースは「code20.txt」として配布されています

1772008年11月8日土曜日

Page 178: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

ここまで長かった・・・いざ実行!

C:\ruby-processing>jruby rbc/movable_dot.rb

上手くいかないと空っぽのウィンドウとエラーメッセージが出てしまいます

期待通りのウィンドウが出た人は 

画面をクリックしてみましょう!

1782008年11月8日土曜日

Page 179: 11月8日イケテルjruby勉強会@東京

クリックするたびに・・・

1792008年11月8日土曜日

Page 180: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

21. Dotを動かすパターンを増やす

さらに違う動きを足してみましょう Dotクラスのmoveメソッドに

 黒い部分のコードを追記して下さい 

val, sin_or_cos = (attr == :x) ? [10, 'sin'] : [20, 'cos'] (wh_value/2-val) * self.__send__(sin_or_cos, radians(@dot_num * 360/@@dot_count)) + wh_value/2 end when :center @next.move_to(@app.width/2, @app.height/2) when :random @next.move_by(@app.width/8, @app.height/8) do |value, attr| @app.random(-value, value) end else raise NameError, "Unsupported pattern: #{@app.patterns.current.inspect}"

1802008年11月8日土曜日

Page 181: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

21. Dotを動かすパターン・・・の続き

MovableDotクラスのsetupメソッドにも 黒い部分のコードを追記して下さい

def setup frame_rate 5 @patterns = LoopQueue.new(:line, :circle, :center, :random) @dots = []

これで今日書くコードはすべておしまいです 

さあ自分自身で書いたコードを実行して 

絵をぐりぐりして遊びましょう!

1812008年11月8日土曜日

Page 182: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

こんなソースになりました

それでは実行してみましょう

このソースは「code21.txt」として配布されています

1822008年11月8日土曜日

Page 183: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

動きの増えたDotを実行します

C:\ruby-processing>jruby rbc/movable_dot.rb

無事実行されましたか? 

進みの速い人は 

チームの人や近くの困っている人を 

助けてあげて下さいね

1832008年11月8日土曜日

Page 184: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

400個のDotが重なり合いながら整列  

最初はこんな形ですが・・・

1842008年11月8日土曜日

Page 185: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

クリックするたび

まるーくなっていったり・・・

1852008年11月8日土曜日

Page 186: 11月8日イケテルjruby勉強会@東京

さらにクリックすると

真ん中に集まっていったり・・・

1862008年11月8日土曜日

Page 187: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

もう一回、クリックすると

ばらばらに広がっていったり・・・自分で書いたコードが自在に動いています

1872008年11月8日土曜日

Page 188: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

やったー!!!

1882008年11月8日土曜日

Page 189: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

つづきは、懇親会で・・・

1892008年11月8日土曜日

Page 190: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

RBCへの入会はこちら

Rubyビジネス・コモンズへの参加は

メーリング・リストへ

参加することで行われます

http://qwik.rubybizcommons.jp/members/2.html

今後の勉強会の告知もこのメーリング・リストで行われます

1902008年11月8日土曜日

Page 191: 11月8日イケテルjruby勉強会@東京

Ruby Business Commons

1912008年11月8日土曜日