Upload
minao-yamamoto
View
2.532
Download
1
Embed Size (px)
DESCRIPTION
Citation preview
mrubyを使ったクラウド連携
1
たろサ(山本三七男)
2
自己紹介
「スクリプトでハードウェアを簡単に制御する」
をテーマに色々やっています。
3
ServerWifi
ネットワーク上からスクリプトをダウンロード
ロボットが動作
スクリプトを選択
ABC2012Spring
4
GR-SAKURAに対応
MakeFairTokyo2012
サリーダ桜(SaridaSAKURA)
5
MakeFairTokyo2012
さくるあ(SakuLua)発表
6
Android からGR-KURIMIをLuaやmrubyスクリプトで制御
Firmata Lua/mruby
7
FM3にLua移植
SAKURAボードユーザ会で報告
8
GR-SAKURAにmruby移植
SakuRuby
mrubyはLightweight言語
9
10
mrubyはLL言語
Lightweight 言語とは、
日本において、
スクリプト言語を指す和製英語で、
取り回しに優れ、
コードの作成や修正が容易
と見なされるプログラミング言語のことを
指す。
ウィキペディアより
11
mrubyはLL言語
Lightweight 言語とは、
日本ではおおむね以下のようなスクリプト
言語を指す。
AWK、JavaScript、JScript、Lua、Perl、
PHP、Python、Ruby、シェルスクリプト
(bash、csh など)、Tcl、VBScript
ウィキペディアより
12
mrubyは組み込み言語
12
13
組み込み言語とは
C言語と親和性が良く、
自作開発アプリでの拡張言語として 使用できる言語
代表的なもの
Lua、mruby、PyMite、squirrel
Cで描かれているプログラム
組み込み言語
言語処理系も全て親プログラムの中で
動いている
14
mrubyとは
まつもとゆきひろさんが開発した「Ruby」を、組込みシステム等の幅広い分野への適用、およびそれらのシステム開発効率の向上を目標に新たに開発されたプログラミング言語
福岡CSKサイトより引用http://www.csk.com/fukuoka/services/mruby/index.html
mrubyのソフトウェア構成
15
mrubyとは
まつもとゆきひろさんが開発した「Ruby」を、組込みシステム等の幅広い分野への適用、およびそれらのシステム開発効率の向上を目標に新たに開発されたプログラミング言語
福岡CSKサイトより引用http://www.csk.com/fukuoka/services/mruby/index.html
mrubyのソフトウェア構成
組み込み言語を、
組み込み機器に
使えるようにした
16
GR-SAKURAにmrubyを移植
16
17
特 徴
SakuRuby
・言語がRuby
・プログラムの変更が容易
・単独でインターネット接続できる
18
何がしたいか
M2M や IoT でいわれている
デバイスがクラウドにつながり
まくる
デバイス
クラウドサーバークラウドサーバー
そんな世の中を見たい!
19
何で、mrubyなの?
19
20
どんな世の中
デバイス開発も、Web
アプリ開発に近い体制
になるのでは?クラウドサーバークラウドサーバー
O S
ライブラリはCなどでしっかり作っている
Node.js / Java / PHP / Ruby
H / W
ライブラリはCなどでしっかり作っている
mruby / js / pymiteリアルタイム
処理
21
どんな世の中
デバイス開発も、Web
アプリ開発に近い体制
になるのでは?クラウドサーバークラウドサーバー
O S
ライブラリはCなどでしっかり作っている
Node.js / Java / PHP / Ruby
H / W
ライブラリはCなどでしっかり作っている
mruby / js / pymiteリアルタイム
処理
22
先ずは作ってみた
SakuRuby
★ファーストステップ
サーバーと直接通信する仕組みを実装
23
ファーストステップ
23
24
GR-SAKURAの課題
ハード仕様
FlashROM:1Mバイト
RAM:128Kバイト
このRAM容量では、コードを実行バイナリに変換する
ためのメモリが不足
25
GR-SAKURAの課題
PC上でコンパイル
$ mrbc test.rb$ lstest.mrb test.rb
$
mrbcでコンパイルして、mrbファイルをSAKURAに持っていく。
デバイスへ
26
GR-SAKURAの課題
PC上でコンパイル
$ mrbc test.rb$ lstest.mrb test.rb
$
mrbcでコンパイルして、mrbファイルをSAKURAに持っていく。
デバイスへ
クラウド連携として、これをサーバにやってもらう
27
Web-mrbcコンパイラ
公開中、誰でも使えます。
http://www16278ui.sakura.ne.jp/mrbc
Ruby on Railsで書いています
28
クラウド連携
実行プログラムが
スクリプトコードの場合、
Webコンパイラに接続して
自分でコンパイルし、
mrbバイナリを取得して実行
します。
クラウドサーバークラウドサーバー
29
SakuRuby
端末から直接Rubyコードの入力も可能
デモ動画 http://www.youtube.com/watch?v=Iuc2h99D0oM
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)
31
作ってみた感想
31
32
クラウドの課題
・Rubyの勉強不足
・Ruby on Railsの勉強不足
Webプログラムの基本的なことが分かっていない。
・1人でやっているのはきつい。
クラウドサーバークラウドサーバー
対 策
Wakayama.rb設立 . . .和歌山でRoRに詳しい人が見つからない → あかんやん
33
デバイスの課題
3Gシールドが高価
3Gシールドがバイナリを通さない
1人でやっているのはきつい。
対 策
安い3Gボードを自作できないかな? そうすると、通信のファームも自分で書ける。
H/Wに興味のあるRubyスト | | Rubyに興味があるH/W屋さんを探す。
34
今後、デバイス-クラウド分散処理系の実装
34
クラスとか、まだ、原案段階です
35
クラウド分散
デバイス側の処理負荷
をクラウドに持っていく
クラウドサーバークラウドサーバー
・CloudManege Class・Channel Classの実装
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() 分散サーバとの接続を切ります。
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() 分散サーバとの接続を切ります。
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プログラム
39
ま と め
興味のある方、募集します。
・面白そうなので、一緒にやりたいな ・mrubyの組み込みやりたいな ・デバイスのクラウド分散処理やりたいな
Wakayama.rb 第5回勉強会 2014/1/19(日) 13:00~17:00 和歌山市東部コミュニティセンター
ご清聴ありがとうございました
40