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