57
えっ、なにそれこわい オブジェクト倶楽部 2010 夏イベント 2010/07/16 国立オリンピック記念青少年総合センター ぴちぴち若人トラック 白土 @kei_s

えっ、なにそれこわい

Embed Size (px)

DESCRIPTION

オブジェクト倶楽部2010夏イベントぴちぴち若人トラックhttp://www.objectclub.jp/event/2010summer/

Citation preview

Page 1: えっ、なにそれこわい

えっ、なにそれこわい

オブジェクト倶楽部2010夏イベント2010/07/16 国立オリンピック記念青少年総合センターぴちぴち若人トラック

白土 慧 @kei_s

Page 2: えっ、なにそれこわい

自己紹介

白土 慧 (シラツチ ケイ)

サイジニア株式会社

id:kei-s, @kei_s

RubyKaigi2010 実行委員

Page 3: えっ、なにそれこわい

サイエンスとエンジニアリング

Page 4: えっ、なにそれこわい

自己紹介

白土 慧 (シラツチ ケイ)

サイジニア株式会社

id:kei-s, @kei_s

RubyKaigi2010 実行委員

Page 5: えっ、なにそれこわい

自己紹介

I like ...Ruby

JavaScript

電子音楽 ( Squarepusher )

小説 ( 舞城王太郎 )

Page 6: えっ、なにそれこわい

今日のお話

前半 : テクニカルなおはなし私の毎日のコーディングの中で、「えっ」と感じた「ちいさなつまづき」について、ご紹介します。

Page 7: えっ、なにそれこわい

今日のお話

後半 : スピリチュアルなおはなし私の毎日の生活の中で、「なにそれこわい」と思うような「感情」について、お話します。

Page 8: えっ、なにそれこわい

Ruby と JavaScript

一緒にコーディングする機会が多い

サーバサイドで Ruby を、クライアントサイドで JavaScript を書く

Ajax でデータをポスト、Ruby でデータ格納

Page 9: えっ、なにそれこわい

Ruby と JavaScript

けっこう似てる!

けど、

似てるが故にはまりやすい!

Ruby と JavaScript を並行して書いているときのあるあるネタ

Page 10: えっ、なにそれこわい

例1. Ajax データ処理

Page 11: えっ、なにそれこわい

JavaScript ( with jQuery )

var user = {name: ‘kei_s’};

user.age = 26;

$.post(‘/user’, {data: user});

Page 12: えっ、なにそれこわい

Ruby ( with Sinatra )

post ‘/user’ do

user = params

puts user.age

‘ok’

end

#=>

Page 13: えっ、なにそれこわい

Ruby ( with Sinatra )

post ‘/user’ do

user = params

puts user.age

‘ok’

end

#=> NoMethodError: undefined method `age'

Page 14: えっ、なにそれこわい

えっ

Page 15: えっ、なにそれこわい

Ruby ( with Sinatra )

post ‘/user’ do

user = params

puts user.age

‘ok’

end

#=> NoMethodError: undefined method `age'

Page 16: えっ、なにそれこわい

Ruby ( with Sinatra )

post ‘/user’ do

user = params

# puts user.age

puts user[‘age’]

‘ok’

end

#=> 26

Page 17: えっ、なにそれこわい

ハッシュアクセスの違いJavaScript

hash.key //=> value

hash[‘key’] //=> value

Ruby

hash.key #=> key メソッド

hash[‘key’] #=> value

Page 18: えっ、なにそれこわい

例2. 繰り返し処理

Page 19: えっ、なにそれこわい

Rubyusers = [

{'age'=>22},{'age'=>26},{'age'=>31}

]

users.select{|user|

user[‘age’] < 30

}.size

#=> 2

Page 20: えっ、なにそれこわい

JavaScriptvar users = [

{'age': 22},{'age': 26},{'age': 31}

];

users.filter(function(user){

user.age < 30;

}).length;

//=>

Page 21: えっ、なにそれこわい

JavaScriptvar users = [

{'age': 22},{'age': 26},{'age': 31}

];

users.filter(function(user){

user.age < 30;

}).length;

//=> 0

Page 22: えっ、なにそれこわい

えっ

Page 23: えっ、なにそれこわい

JavaScriptvar users = [

{'age': 22},{'age': 26},{'age': 31}

];

users.filter(function(user){

user.age < 30;

}).length;

//=> 0

Page 24: えっ、なにそれこわい

JavaScriptvar users = [

{'age': 22},{'age': 26},{'age': 31}

];

users.filter(function(user){

//user.age < 30;

return user.age < 30;

}).length; //=> 2

Page 25: えっ、なにそれこわい

返り値の違い

JavaScript

function(){ v; } //=> undefined

function(){ return v; } //=> v

Ruby

def func() v; end #=> v

def func() return v; end #=> v

Page 26: えっ、なにそれこわい

例3. イベント処理

Page 27: えっ、なにそれこわい

JavaScript ( with jQuery )

$.get(‘/user.json’,

function(response){

console.log( response );

}

);

Page 28: えっ、なにそれこわい

Ruby ( with Typhoeus )hydra = Typhoues::Hydra.new

request= Typhoeus::Request.new(‘/user.json’)

request.on_complete do |response|

puts response.body

end

hydra.queue request

hydra.run

Page 29: えっ、なにそれこわい

JavaScript ( with jQuery )

$.get(‘/user.json’,

function(response){

console.log( response );

}

);

Page 30: えっ、なにそれこわい

JavaScript ( with jQuery )

Users.prototype.store = function(response) { this.responses.push(response);};

var users = new Users();$.get(‘/user1.json’,users.store);$.get(‘/user2.json’,users.store);

Page 31: えっ、なにそれこわい

Ruby ( with Typhoeus )def Users.store(response) @responses << responseendusers = Users.newrequest1 = Typhoeus::Request.new(‘/user1.json’)request2 = Typhoeus::Request.new(‘/user2.json’)

request1.on_complete(users.store)request2.on_complete(users.store)hydra.queue request1hydra.queue request2hydra.run

#=>

Page 32: えっ、なにそれこわい

Ruby ( with Typhoeus )def Users.store(response) @responses << responseendusers = Users.newrequest1 = Typhoeus::Request.new(‘/user1.json’)request2 = Typhoeus::Request.new(‘/user2.json’)

request1.on_complete(users.store)request2.on_complete(users.store)hydra.queue request1hydra.queue request2hydra.run

#=> ArgumentError: wrong number of arguments (0 for 1)

Page 33: えっ、なにそれこわい

えっ

Page 34: えっ、なにそれこわい

Ruby ( with Typhoeus )

request.on_complete(users.store)

#=> Users#store を引数なしで実行

#=> ArgumentError: wrong number of arguments (0 for 1)

Page 35: えっ、なにそれこわい

Ruby ( with Typhoeus )

def Users.store(response)

@responses << response

end

users = Users.new

request.on_complete do |response|

users.store(response)

end #=> OK

Page 36: えっ、なにそれこわい

Ruby ( with Typhoeus )def Users.store(response)

@responses << response

end

users = Users.new

request.on_complete &users.method(:store)

#=> OK

request.on_complete = users.method(:store)

#=> OK (only for Typhoeus::Request)

Page 37: えっ、なにそれこわい

関数オブジェクトの違いJavaScript

object.func //=> Functionオブジェクト

Ruby

object.method(:func)#=> Methodオブジェクト

object.method(:func).to_proc#=> Procオブジェクト

Page 38: えっ、なにそれこわい

Ruby と JavaScript

けっこう似てる!

けど、

似てるが故にはまりやすい!

「えっ」となる感情は、なんなんだろう?=> 後半へつづく

Page 39: えっ、なにそれこわい

えっ、

Page 40: えっ、なにそれこわい

なにそれこわい

Page 43: えっ、なにそれこわい

楽しいhttp://www.flickr.com/photos/midgley/3687327166/

Page 44: えっ、なにそれこわい

http://www.flickr.com/photos/hand-nor-glove/563554215/

不安はやってくる

Page 45: えっ、なにそれこわい

A Jedi Master said ...

Page 46: えっ、なにそれこわい

http://twitpic.com/22iyix

Page 47: えっ、なにそれこわい

“Control, control.You must learn control.”

Page 48: えっ、なにそれこわい
Page 49: えっ、なにそれこわい
Page 50: えっ、なにそれこわい

“Control, control.You must learn control.”

Page 51: えっ、なにそれこわい

“Control, control.You must learn control.”

Page 52: えっ、なにそれこわい

不安を学ぶhttp://www.flickr.com/photos/fazen/427962176/

Page 53: えっ、なにそれこわい

http://www.flickr.com/photos/hand-nor-glove/626648592/

不安と向きあう

Page 54: えっ、なにそれこわい

なにそれこわい

Page 56: えっ、なにそれこわい

“Control, control.You must learn control.”

Page 57: えっ、なにそれこわい

ご清聴ありがとうございました

“恐怖から逃れたければ、できるだけ早く、熊の場所【恐怖の根源】に帰らなくてはならない。