Nerusi ruby メタプログラミング
Upcoming SlideShare
Loading in...5
×
 

Nerusi ruby メタプログラミング

on

  • 548 views

 

Statistics

Views

Total Views
548
Views on SlideShare
528
Embed Views
20

Actions

Likes
1
Downloads
3
Comments
0

2 Embeds 20

http://www.slideee.com 12
http://s.deeeki.com 8

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

Nerusi ruby メタプログラミング Nerusi ruby メタプログラミング Presentation Transcript

  • 家電とRubyの最高にいい関係 CACAnet Fukuoka/近畿大学 山崎重一郎
  • mrubyボードで p 家電につぶやき機能 p 日本の電力問題にアプローチ p エンドユーザプログラミング
  • p  OSのオーバーヘッドなしてにハードを直接触れる p  家電にhttpアクセス機能がつく AI搭載家電 http http mrubyボード mrubyボード搭載家電 寝室の掃除 終わったなっしー
  • 掃除機のつぶやきビッグデータ 寝室の掃除終 わったし 居間を 掃除中 キッチンに 到着したし 何かにから まったし 寝室のドアが閉 まっているし 日本中のルンバのつぶやきを集める 太郎の部屋に 入れないし
  • ねるし 仮想発電所 効果的節電=発電 ねるし ねるし ねるし ねるし ねるし 今は寝ないで! 近畿大学/福岡CSK 電力需給 フクオカRuby大賞奨励賞
  • スマートグリッドとは p 目的(電力の同時同量制御) 電力需給バランス調は需要側の協力が重要 p 方法 電力網を情報技術で制御 莫大な投資が必要
  • スマートグリッドの問題 p でも 電力需要自体はどうやって制御するの?
  • スマートグリッドなんてなくても p 最下流の家電が インターネットに情報を上げ リアルタイムに家電を制御できれば それでいいんじゃない? インターネット
  • p  利用者に伝えるだけでも効果がある p  充電機能付きにすると逆制御も可能 日本中のエレベータがつぶやけば 2階なら階 段使えば 一人かあ 今電力足り てないし 7人かあ 一人かあ 2人かあ
  • 今は寝ないで! 今は寝ないで! ぎざぎざが大きいほど、発電効率が悪い プラス側だと、消費電力が増加中 仮想発電所
  • mruby p  組込みデバイス用Ruby p  httpアクセスが1行で書ける SimpleHttp.new("157.13.59.2",80){¦h¦h.get("/robots/1/tweets/1", {})} p  OSが無いので、リアルタイム処理が軽い p  センサー、アクチュエータ関連ライブラリ豊富 シリアル通信、I2C、SPI、サーボのPWM制御
  • ルンバはAPIを公開している GND Rx Tx 16V
  • Roomba Serial Command Interface (SCI) p  移動 前進、後退、回転、... p  歌う p  センサー 崖、壁、ドックを探す、ゴミ検出、モータ異常、... p  制御関係 電圧、電流、充電状況、温度
  • 3Dプリンタで作成したルンバケース p  mrubyボードenziを搭載し、ルンバをhttp通信可能に p  無線LANでつぶやけるようにした
  • ECHONET規格家電 p  panasonic、東芝、SONY、デンソー、日立、京 セラ、シャープ、NEC、富士通、...
  • 洗濯乾燥機API p  蓋が閉じてるか p  洗濯コース p  水流設定 p  脱水回転設定 p  すすぎ回数 p  乾燥度設定 p  つけおき工程設定 p  ...
  • 洗濯乾燥機API p  蓋が閉じてるか p  洗濯コース p  水流設定 p  脱水回転設定 p  すすぎ回数 p  乾燥度設定 p  つけおき工程設定 p  ...
  • ドメイン指向言語(DSL) p RubyはDSLが作りやすい言語 Ruby on Rails Rake RSpec ... p メタプログラミングが得意
  • エンドユーザプログラミング p 設計方針 ドメイン指向言語 学習不用(直感的にだいたいわかる) 心理的バリアを注意深く除去する
  • 学習不用(?) p テンプレートの修正型 p 例を見ると文法がなんとなくわかる p 改造の方法の例もわかる p 自分の意図がちゃんと伝わればいい
  • まずロボットに名前をつける =インスタンス生成 p  デフォルトの提示(変更可能箇所の表示) p  ユーザ定義の例 p  結果 Robotクラスのインスタンスが生成され     「るん太」メソッドで呼び出せる ロボットの名前 "るんば" ロボットの名前 "るん太" るん太 =>Robotクラスのインスタンスが返ってくる
  • define_methodで ロボットの名前メソッドを動的に生成 実際のプログラム class Robot attr :name def initialize(name) @name=name end end def ロボットの名前(name) define_method(name) {Robot.new(name)} end
  • p  ベースステーションからの道順を記憶する リビング 子供部屋 寝室 ダイニング るん太.部屋を教える "寝室" (1) リビングにルンバを置く (2) 上記の設定プログラム実行 (3) ルンバの復帰経路の逆順が リビングへの経路 ベースステーション ロボットに部屋をおぼえさせる るん太.部屋を教える "リビング"
  • プログラム ユーザが書く部分 class Robot attr :name, :route def initialize(name) @name=name @route={} end def 部屋を教える(room) puts "#{room}とベースステーションとの道順をおぼえるなっしー" @route[room]=[] #実際には、ここでロボットからの道順を得る end end def ロボットの名前(name) define_method(name) {Robot.new(name)} end るん太.部屋を教える "リビング"
  • p  時刻になると掃除を開始する リビング 子供部屋 寝室 ダイニング るん太.時 16 do 掃除する "リビング" 掃除する "寝室" end ベースステーション ロボットに時刻起動 るん太.時 17 do 掃除する "ダイニング" 掃除する "寝室" 掃除する "子供部屋" 掃除する "リビング" end
  • ブロックをcallする class Robot attr :name, :route def initialize(name) @name=name @route={} end def 時(time, &b) b.call(time) end end def 掃除する(room) puts "#{room}掃除終わったなっしー" end def ロボットの名前(name) define_method(name) {Robot.new(name)} end るん太.時 14 do 掃除する "リビング" end
  • 修飾語の文法 るん太.金曜日.時 16 do 掃除する "リビング" 掃除する "寝室" end p 条件、繰り返しなど るん太.毎日.時 16 do 掃除する "リビング" 掃除する "寝室" end
  • 洗濯機 p 洗濯機の名前をつけて ロボットの名前 "あらいくまもん" p 設定を教える 洗剤 "粉" 注水 "多め" 浸け置き分 20 洗い.弱め分 3 洗い.普通分 6 ためすすぎ回 2 脱水分 6 浸け置き 終わったモン
  • 当然ですが、 複雑なことをするには複雑な文法になる p でも、テンプレートは助けになる p 変更できる場所、選択肢はわかる p 辞書は事前に整備できる p 制御構造は、副詞、形容詞、時制に p 仮定法の表現も、物語風に(?)
  • 学習不用な言語にむけて p テンプレートの修正型 p 例を見ると文法がなんとなくわかる p 改造の方法の例もわかる p 自分の意図がちゃんと伝わればいい
  • エンド・ユーザ・プログラミング p 人工知能搭載家電の発展 p どうやって家電とお話するか? p Siriみたいな自然言語? p 簡易プログラミング言語の方が気持ちい いんじゃない?