Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
1

mrubyを使った
クラウド連携
たろサ
(山本三七男)
2

自己紹介

「スクリプトでハードウェアを
簡単に制御する」
をテーマに色々やっています。
3

ABC2012Spring

Wifi
Server

スクリプトを選択

ネットワーク上から
スクリプトをダウンロード
ロボットが動作
4

MakeFairTokyo2012
GR-SAKURAに対応

サリーダ桜
(SaridaSAKURA)
5

MakeFairTokyo2012

さくるあ(SakuLua)発表
6

Firmata Lua/mruby
Android からGR-KURIMIを
Luaやmrubyスクリプトで制御
7

FM3にLua移植
SAKURAボードユーザ会で報告
8

GR-SAKURAにmruby移植

SakuRuby
9

mrubyは
Lightweight言語
10

mrubyはLL言語
Lightweight 言語とは、

ウィキペディアより

日本において、
 スクリプト言語を指す和製英語で、
  取り回しに優れ、
  コードの作成や修正が容易
と見なされるプログラミング言語のことを
指す。
11

mrubyはLL言語
Lightweight 言語とは、

ウィキペディアより

日本ではおおむね以下のようなスクリプト
言語を指す。
AWK、JavaScript、JScript、Lua、Perl、
PHP、Python、Ruby、シ...
12

mrubyは
組み込み言語
13

組み込み言語とは
C言語と親和性が良く、
  自作開発アプリでの拡張言語として
 使用できる言語

代表的なもの
 Lua、mruby、PyMite、squirrel
Cで描かれているプログラム
組み込み言語

言語処理系も全て
親プロ...
14

mrubyとは
まつもとゆきひろさんが開発した「Ruby」を、組
込みシステム等の幅広い分野への適用、および
それらのシステム開発効率の向上を目標に新
たに開発されたプログラミング言語

mrubyのソフトウェア構成
福岡CSKサイトよ...
15

mrubyとは
まつもとゆきひろさんが開発した「Ruby」を、組
込みシステム等の幅広い分野への適用、および
それらのシステム開発効率の向上を目標に新
たに開発されたプログラミング言語
を、
言語 に
み 機器 た
み込 み うにし
組...
16

GR-SAKURAに
mrubyを移植
17

特   徴

・言語がRuby
・プログラムの変更
が容易
・単独でインター
ネット接続できる

SakuRuby
18

何がしたいか
クラウドサーバー

M2M や IoT でいわれている
デバイスがクラウドにつながり
まくる

そんな世の中を見たい!
デバイス
19

何で、
mrubyなの?
20

どんな世の中
デバイス開発も、Web
アプリ開発に近い体制
になるのでは?

クラウドサーバー
Node.js / Java / PHP / Ruby
ライブラリはCなどでしっかり作っている
OS

mruby / js / pymit...
21

どんな世の中
デバイス開発も、Web
アプリ開発に近い体制
になるのでは?

クラウドサーバー
Node.js / Java / PHP / Ruby
ライブラリはCなどでしっかり作っている
OS

mruby / js / pymit...
22

先ずは作ってみた

★ファーストステップ
 サーバーと直接通信
する仕組みを実装

SakuRuby
23

ファーストステップ
24

GR-SAKURAの課題

ハード仕様
FlashROM:1Mバイト
RAM:128Kバイト

このRAM容量では、
コードを実行バイナリに変換する
ためのメモリが不足
25

GR-SAKURAの課題
PC上でコンパイル

デバイスへ

$ mrbc test.rb
$ ls
test.mrb test.rb
$

mrbcでコンパイルして、
mrbファイルをSAKURAに持って
いく。
26

GR-SAKURAの課題
PC上でコンパイル
$ mrbc test.rb
$ ls
test.mrb test.rb

デバイスへ
クラウド連携として、
これをサーバに
やってもらう

$

mrbcでコンパイルして、
mrbファイル...
27

Web-mrbcコンパイラ

Ruby on Railsで書いています
http://www16278ui.sakura.ne.jp/mrbc

公開中、誰でも使えます。
28

クラウド連携
クラウドサーバー

実行プログラムが
スクリプトコードの場合、
Webコンパイラに接続して
自分でコンパイルし、
mrbバイナリを取得して実行
します。
29

SakuRuby
端末から直接Rubyコードの入力も可能

デモ動画 http://www.youtube.com/watch?v=Iuc2h99D0oM
30

run.rb
直接入力プログラムもrubyで書かれている
## Multi Lines Run
def lineinput()
k=0
while(k>=0)
k=Serial.read()
end
m=""
while(true)do...
31

作ってみた感想
32

クラウドの課題
クラウドサーバー
・Rubyの勉強不足
・Ruby on Railsの勉強不足
 Webプログラムの基本的なことが分かっていない。
・1人でやっているのはきつい。

対 策
Wakayama.rb設立
. . .和歌山で...
33

デバイスの課題
3Gシールドが高価
3Gシールドがバイナリを通さない
1人でやっているのはきつい。
対 策
安い3Gボードを自作できないかな?
 そうすると、通信のファームも自分で書ける。
H/Wに興味のあるRubyスト | | Rub...
34

今後、
デバイス-クラウド
分散処理系の実装
クラ

、まだ
とか
ス

です
段階
原案
、
35

クラウド分散
クラウドサーバー

デバイス側の処理負荷
をクラウドに持っていく
・CloudManege Class
・Channel Class
の実装
36

CloudManage Class
 分散処理サーバに登録するプログラムの管理
を行うクラス
 initialize( user, passwd )
  コンストラクタ
   引数  分散サーバへのユーザID、パス
ワード

 dele...
37

Channel Class
 サーバに対して分散処理を行うクラス
 分散処理はチャンネルで管理されます。
 initialize( user, passwd )
  コンストラクタ
   引数  分散サーバへのユーザID、パス
ワード
...
38

分散処理イメージ
mrubyプログラム
#チャネルインスタンスの生成
channel = Channel.new("userID", "passwd")
#分散クラウドにチャネルを通してFooクラスのインスタンス生成
arg = [10...
39

ま と め

興味のある方、募集します。
 ・面白そうなので、一緒にやりたいな
 ・mrubyの組み込みやりたいな
 ・デバイスのクラウド分散処理やりた
いな
Wakayama.rb 第5回勉強会
 2014/1/19(日) 13:00...
40

ご清聴ありがとう
ございました
Upcoming SlideShare
Loading in …5
×

mrubyを使った クラウド連携

3,227 views

Published on

Published in: Technology
  • Be the first to comment

mrubyを使った クラウド連携

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

×