mrubyを使った クラウド連携

3,109 views
2,870 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,109
On SlideShare
0
From Embeds
0
Number of Embeds
52
Actions
Shares
0
Downloads
6
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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 ご清聴ありがとう ございました

×