mrubyを使った クラウド連携
DESCRIPTION
TRANSCRIPT
![Page 1: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/1.jpg)
mrubyを使ったクラウド連携
1
たろサ(山本三七男)
![Page 2: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/2.jpg)
2
自己紹介
「スクリプトでハードウェアを簡単に制御する」
をテーマに色々やっています。
![Page 3: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/3.jpg)
3
ServerWifi
ネットワーク上からスクリプトをダウンロード
ロボットが動作
スクリプトを選択
ABC2012Spring
![Page 4: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/4.jpg)
4
GR-SAKURAに対応
MakeFairTokyo2012
サリーダ桜(SaridaSAKURA)
![Page 5: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/5.jpg)
5
MakeFairTokyo2012
さくるあ(SakuLua)発表
![Page 6: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/6.jpg)
6
Android からGR-KURIMIをLuaやmrubyスクリプトで制御
Firmata Lua/mruby
![Page 7: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/7.jpg)
7
FM3にLua移植
SAKURAボードユーザ会で報告
![Page 8: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/8.jpg)
8
GR-SAKURAにmruby移植
SakuRuby
![Page 9: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/9.jpg)
mrubyはLightweight言語
9
![Page 10: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/10.jpg)
10
mrubyはLL言語
Lightweight 言語とは、
日本において、
スクリプト言語を指す和製英語で、
取り回しに優れ、
コードの作成や修正が容易
と見なされるプログラミング言語のことを
指す。
ウィキペディアより
![Page 11: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/11.jpg)
11
mrubyはLL言語
Lightweight 言語とは、
日本ではおおむね以下のようなスクリプト
言語を指す。
AWK、JavaScript、JScript、Lua、Perl、
PHP、Python、Ruby、シェルスクリプト
(bash、csh など)、Tcl、VBScript
ウィキペディアより
![Page 12: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/12.jpg)
12
mrubyは組み込み言語
12
![Page 13: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/13.jpg)
13
組み込み言語とは
C言語と親和性が良く、
自作開発アプリでの拡張言語として 使用できる言語
代表的なもの
Lua、mruby、PyMite、squirrel
Cで描かれているプログラム
組み込み言語
言語処理系も全て親プログラムの中で
動いている
![Page 14: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/14.jpg)
14
mrubyとは
まつもとゆきひろさんが開発した「Ruby」を、組込みシステム等の幅広い分野への適用、およびそれらのシステム開発効率の向上を目標に新たに開発されたプログラミング言語
福岡CSKサイトより引用http://www.csk.com/fukuoka/services/mruby/index.html
mrubyのソフトウェア構成
![Page 15: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/15.jpg)
15
mrubyとは
まつもとゆきひろさんが開発した「Ruby」を、組込みシステム等の幅広い分野への適用、およびそれらのシステム開発効率の向上を目標に新たに開発されたプログラミング言語
福岡CSKサイトより引用http://www.csk.com/fukuoka/services/mruby/index.html
mrubyのソフトウェア構成
組み込み言語を、
組み込み機器に
使えるようにした
![Page 16: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/16.jpg)
16
GR-SAKURAにmrubyを移植
16
![Page 17: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/17.jpg)
17
特 徴
SakuRuby
・言語がRuby
・プログラムの変更が容易
・単独でインターネット接続できる
![Page 18: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/18.jpg)
18
何がしたいか
M2M や IoT でいわれている
デバイスがクラウドにつながり
まくる
デバイス
クラウドサーバークラウドサーバー
そんな世の中を見たい!
![Page 19: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/19.jpg)
19
何で、mrubyなの?
19
![Page 20: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/20.jpg)
20
どんな世の中
デバイス開発も、Web
アプリ開発に近い体制
になるのでは?クラウドサーバークラウドサーバー
O S
ライブラリはCなどでしっかり作っている
Node.js / Java / PHP / Ruby
H / W
ライブラリはCなどでしっかり作っている
mruby / js / pymiteリアルタイム
処理
![Page 21: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/21.jpg)
21
どんな世の中
デバイス開発も、Web
アプリ開発に近い体制
になるのでは?クラウドサーバークラウドサーバー
O S
ライブラリはCなどでしっかり作っている
Node.js / Java / PHP / Ruby
H / W
ライブラリはCなどでしっかり作っている
mruby / js / pymiteリアルタイム
処理
![Page 22: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/22.jpg)
22
先ずは作ってみた
SakuRuby
★ファーストステップ
サーバーと直接通信する仕組みを実装
![Page 23: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/23.jpg)
23
ファーストステップ
23
![Page 24: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/24.jpg)
24
GR-SAKURAの課題
ハード仕様
FlashROM:1Mバイト
RAM:128Kバイト
このRAM容量では、コードを実行バイナリに変換する
ためのメモリが不足
![Page 25: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/25.jpg)
25
GR-SAKURAの課題
PC上でコンパイル
$ mrbc test.rb$ lstest.mrb test.rb
$
mrbcでコンパイルして、mrbファイルをSAKURAに持っていく。
デバイスへ
![Page 26: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/26.jpg)
26
GR-SAKURAの課題
PC上でコンパイル
$ mrbc test.rb$ lstest.mrb test.rb
$
mrbcでコンパイルして、mrbファイルをSAKURAに持っていく。
デバイスへ
クラウド連携として、これをサーバにやってもらう
![Page 27: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/27.jpg)
27
Web-mrbcコンパイラ
公開中、誰でも使えます。
http://www16278ui.sakura.ne.jp/mrbc
Ruby on Railsで書いています
![Page 28: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/28.jpg)
28
クラウド連携
実行プログラムが
スクリプトコードの場合、
Webコンパイラに接続して
自分でコンパイルし、
mrbバイナリを取得して実行
します。
クラウドサーバークラウドサーバー
![Page 29: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/29.jpg)
29
SakuRuby
端末から直接Rubyコードの入力も可能
デモ動画 http://www.youtube.com/watch?v=Iuc2h99D0oM
![Page 30: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/30.jpg)
30
run.rb
直接入力プログラムもrubyで書かれている## Multi Lines Rundef lineinput() k=0 while(k>=0) k=Serial.read() end m="" while(true)do k=0 while(k<=0) k = Serial.read() delay(50) end if(k==13 || k==10)then break end if(k==8)then m=m[0,m.length-1] else m=m+k.chr end Serial.print(k.chr) end return mend def multiinput() k=0 begin k=Serial.read() end until (k<0) Serial.println("\r\nInput end with [Ctrl-z]")
m="" while(true)do k=0 begin k = Serial.read() delay(50) end until (k>0) if(k==26)then break end if(k==8)then m=m[0,m.length-1] else m=m + k.chr end Serial.print(k.chr) end return mend
fm=""Serial.print("\r\nFilename>")fm = lineinput()m=""m=multiinput()
Serial.println(" ")Serial.println("OK")
SD.open( 0, fm, 2 )SD.write(0, m, m.length)SD.close(0) Sys.setrun(fm)
![Page 31: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/31.jpg)
31
作ってみた感想
31
![Page 32: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/32.jpg)
32
クラウドの課題
・Rubyの勉強不足
・Ruby on Railsの勉強不足
Webプログラムの基本的なことが分かっていない。
・1人でやっているのはきつい。
クラウドサーバークラウドサーバー
対 策
Wakayama.rb設立 . . .和歌山でRoRに詳しい人が見つからない → あかんやん
![Page 33: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/33.jpg)
33
デバイスの課題
3Gシールドが高価
3Gシールドがバイナリを通さない
1人でやっているのはきつい。
対 策
安い3Gボードを自作できないかな? そうすると、通信のファームも自分で書ける。
H/Wに興味のあるRubyスト | | Rubyに興味があるH/W屋さんを探す。
![Page 34: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/34.jpg)
34
今後、デバイス-クラウド分散処理系の実装
34
クラスとか、まだ、原案段階です
![Page 35: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/35.jpg)
35
クラウド分散
デバイス側の処理負荷
をクラウドに持っていく
クラウドサーバークラウドサーバー
・CloudManege Class・Channel Classの実装
![Page 36: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/36.jpg)
36
CloudManage Class
分散処理サーバに登録するプログラムの管理を行うクラス
initialize( user, passwd ) コンストラクタ 引数 分散サーバへのユーザID、パスワード
upload( calss_name, file_name ) 分散サーバにmrubyのクラスプログラムをファイルから読み込んで送信します。 引数 サーバに登録するクラス名、送信するクラスコードのファイル名 戻り値 登録ができればtrueが戻る。
uploadb( calss_name, binary ) 分散サーバにmrubyのクラスプログラムを送信します。 引数 サーバに登録するクラス名、送信するクラスコード 戻り値 登録ができればtrueが戻る。
delete( class_name ) 分散サーバからmrubyクラスコードを削除します。 引数 サーバに登録したクラス名
戻り値 削除ができればtrueが戻る。
list() 分散サーバに登録したクラスを一覧します。 戻り値 クラス名一覧が戻る。
ready() 分散サーバに接続しているかどうかを調べます。 戻り値 接続していればtrueが戻る。
dispose() 分散サーバとの接続を切ります。
![Page 37: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/37.jpg)
37
Channel Class
サーバに対して分散処理を行うクラス 分散処理はチャンネルで管理されます。
initialize( user, passwd ) コンストラクタ 引数 分散サーバへのユーザID、パスワード
make( class_name, arg ) サーバ側でクラスのインスタンスを生成します。そして、そのインスタンスに対するチャンネル番号を返します。 引数 クラス名、インスタンス生成時の引数 戻り値 インスタンスのチャンネル番号が戻ります。
send( channel, method_name, arg ) サーバ側に生成したクラスのメソッドを実行させます。 引数 クラスのチャンネル番号、メソッド名、メソッドの引数 戻り値 処理が開始できればtrueが戻ります。
recv( channel, method_name ) サーバ側で実行したメソッドの計算結果を受け取ります。 計算結果はオブジェクト配列でもどります。 引数 クラスのチャンネル番号、メソッド名 戻り値 計算結果
close( channel ) サーバ側で生成したクラスのインスタンスを破棄します。 引数 クラスのチャンネル番号
ready() 分散サーバに接続しているかどうかを調べます。 戻り値 接続していればtrueが戻る。
dispose() 分散サーバとの接続を切ります。
![Page 38: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/38.jpg)
38
分散処理イメージ
#チャネルインスタンスの生成channel = Channel.new("userID", "passwd")
#分散クラウドにチャネルを通してFooクラスのインスタンス生成arg = [10,2] #クラス生成時の引数num = channel.make(“Foo”, arg )
#分散クラウドのFoo.method(arg)メソッドを実行するarg = [1,2,3]channel.send( num,“method”, arg )
#分散クラウドからの結果を待つ・・・分散の意味がないですが(^^;res = nilwhile(res == nil)do res = channel.recv( num,“meth”)end#チャネルを閉じるchannel.close( num )channel.dispose()
mrubyプログラム
![Page 39: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/39.jpg)
39
ま と め
興味のある方、募集します。
・面白そうなので、一緒にやりたいな ・mrubyの組み込みやりたいな ・デバイスのクラウド分散処理やりたいな
Wakayama.rb 第5回勉強会 2014/1/19(日) 13:00~17:00 和歌山市東部コミュニティセンター
![Page 40: mrubyを使った クラウド連携](https://reader034.vdocuments.site/reader034/viewer/2022050720/5463d89fb4af9f583f8b46fa/html5/thumbnails/40.jpg)
ご清聴ありがとうございました
40