28
5分で分かる Measure 村田 賢太 Kenta Murata 札幌 Ruby 会議‒01; 2008‒10‒25

5分で分かる Measure

Embed Size (px)

DESCRIPTION

5分で分かる Measure

Citation preview

Page 1: 5分で分かる Measure

5分で分かるMeasure村田 賢太Kenta Murata

札幌 Ruby 会議‒01; 2008‒10‒25

Page 2: 5分で分かる Measure

やるおは偉いからその日のうちに宿題を片付けてしまうんだお!

Page 3: 5分で分かる Measure

本日の宿題自分の身長を測ってみよう!

Page 4: 5分で分かる Measure

身長を測ってみよう!

Page 5: 5分で分かる Measure

だっておwwwwwwwバカにするのもいいかげんにして欲しいおwww

Page 6: 5分で分かる Measure

やる夫の身長は11文字

放尿は気持ちイイお!

Page 7: 5分で分かる Measure

もう宿題終わったお!今日も YourAVHost でスッキリするお!

エロギーク様々だおっ

Page 8: 5分で分かる Measure

やる夫くん、気を付けて

Page 9: 5分で分かる Measure
Page 10: 5分で分かる Measure

だ、誰だお?

Page 11: 5分で分かる Measure

やる夫くん、問題を良く見て

Page 12: 5分で分かる Measure
Page 13: 5分で分かる Measure
Page 14: 5分で分かる Measure

本日の宿題自分の身長を測ってみよう!何フィートかな?

Page 15: 5分で分かる Measure

フィートってなんだお・・・さっきは書いてなかった気がするお・・・

Page 16: 5分で分かる Measure

11文字が何フィートになるか分かんないおどうしたらいいお?

Page 17: 5分で分かる Measure

Measure

Page 18: 5分で分かる Measure

Measure ライブラリ

‣ 単位付き数値クラスを提供‣ 異なる単位間の変換を定義可能‣ 単位付き数値の簡易記法を提供

18

Page 19: 5分で分かる Measure

単位付き数値とは?

‣ 173 [cm]‣ 63 [kg]‣ 376.730 [Ω]‣ 101,325 [Pa]‣ 1.602×10‒19 [C]

19

Page 20: 5分で分かる Measure

インストール方法mrkn-macbook:~ root# gem install -r measure

Bulk updating Gem source index for: http://gems.rubyforge.org

Successfully installed measure-0.1.0

1 gem installed

Installing ri documentation for measure-0.1.0...

Installing RDoc documentation for measure-0.1.0...

mrkn-macbook:~ root#

20

Page 21: 5分で分かる Measure

使い方mrkn-macbook:~ root# irb

irb(main):001:0> require 'measure'

irb(main):002:0> Measure.define_unit :m, :length

irb(main):003:0> Measure.define_unit :cm, :length

irb(main):004:0> Measure(1, :m)

=> #<Measure:0x57d8c @unit=:m, @value=1>

irb(main):005:0> Measure(1, :cm).to_s

=> "1 [cm]"

21

Page 22: 5分で分かる Measure

単位変換irb(main):006:0> Measure.define_conversion :m, :cm => 100

irb(main):007:0> (Measure(1, :m) + Measure(1, :cm)).to_s

=> "1.01 [m]"

irb(main):008:0> Measure.define_unit :in, :length

irb(main):009:0> Measure.define_conversion :in, :cm => 2.54

irb(main):010:0> Measure.define_unit :mm, :length

irb(main):011:0> Measure.define_conversion :m, :mm => 1000

irb(main):012:0> (Measure(210, :mm) - 2*Measure(1, :in)).to_s

=> "159.2 [mm]"

22

Page 23: 5分で分かる Measure

マルチホップ変換[in] [cm]

[mm]

[m]

2.54倍

100倍

1000倍

2.54分の1

100分の1

1000倍連結な単位間での相互変換の経路を幅優先探索で発見

23

Page 24: 5分で分かる Measure

簡易記法irb(main):013:0> require 'measure/support'

irb(main):014:0> Measure.form { 1.m - 1.cm }.to_s

=> "0.99 [m]"

24

Page 25: 5分で分かる Measure

Proc による単位変換irb(main):015:0> Measure.define_unit :deg_c, :temperature

irb(main):016:0> Measure.define_unit :deg_f, :temperature

irb(main):017:0> Measure.define_conversion :deg_c, :deg_f

=> lambda {|x| 9.0*x/5.0 + 32 }

irb(main):018:0> Measure.define_conversion :deg_f, :deg_c

=> lambda {|x| 5.0*(x - 32)/9.0 }

irb(main):019:0> Measure.form { -40.deg_c.as_deg_f }.to_s

=> "-40.0 [deg_f]"

25

Page 26: 5分で分かる Measure

定義済み単位‣ measure/length を require すると次の単位が定義され相互変換可能な状態になる

m, meter pt, point, dp, didot_point in, inchcm, centi_meter bp, big_point ft, feetmm, milli_meter pc, pica yd, yardkm, kilo_meter aa, angstromum, micro_meter au, AU, astronomical_unitnm, nano_meter ly, light_year

26

Page 27: 5分で分かる Measure

Future works‣ 定義済み単位を増やす‣ 【急募】地域で定義が違う場合の対応方法‣ 多次元単位への対応‣ 1 [kg m / s2] ⇒ 1.kg.m.s(–2)‣ 複数の単位変換系をサポート‣ スレッドセーフ化

27

Page 28: 5分で分かる Measure

2008年10月25日 札幌Ruby会議にて

糸冬 了