hello ruby

36
Hello, Ruby! 2012/06/23 NSEG feat. Kosenconf @crimsonwoods

Upload: takahiro-kurebayashi

Post on 12-Nov-2014

5.607 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Hello Ruby

Hello, Ruby!

2012/06/23 NSEG feat. Kosenconf

@crimsonwoods

Page 2: Hello Ruby

About Me

Name: 紅林 隆浩(@crimsonwoods)

Age : 28 (Generation 83)

From: Silent Hill / Tokyo

Job : Freelance Software Engineer

Hobby: Bicycle / Photo / Alcohol etc.

Technology:

Android / Linux / Windows

MPU / FPGA

C / C++ / C# / Java

Page 3: Hello Ruby

Kosenconf in Numazu / Photo:@earth2001y(Daichi, OBINATA)

Page 4: Hello Ruby

NSEG 勉強会

feat.

高専カンファレンス

Page 5: Hello Ruby
Page 6: Hello Ruby
Page 7: Hello Ruby

Which Ruby?

CRuby?

JRuby?

Page 8: Hello Ruby

Which Ruby?

mruby

Page 9: Hello Ruby

About mruby

Lightweight Ruby implementation

for

Embedded Platform

Page 10: Hello Ruby

About mruby

- Open Source (MIT license) - ISO Compliant - C Language

Page 11: Hello Ruby

About mruby

News http://itpro.nikkeibp.co.jp/article/NEWS/20120420/392541/ http://el.jibun.atmarkit.co.jp/rails/2012/04/rubymruby-2004.html

Github https://github.com/mruby/mruby

Page 12: Hello Ruby

Getting started mruby.

1st step: make

required: make, gcc, bison

$ git clone https://github.com/mruby/mruby.git $ cd mruby $ make $ export PATH=$PATH:$(pwd)/mruby/bin $ mruby --help

Page 13: Hello Ruby

Getting started mruby.

2nd step: run $ mruby –e ‘p “Hello, mruby!”’ "Hello, mruby!" $ echo 'p "Hello, mruby!"' > hello.rb $ mruby –v hello.rb "Hello, mruby!"

Page 14: Hello Ruby

Getting started mruby.

3rd step: compile $ mrbc hello.rb –ohello.mrb $ mruby –b hello.mrb "Hello, mruby!"

Page 15: Hello Ruby

Getting started mruby.

もっと難しいコードは?

Rubyistじゃないので書けません。

Page 16: Hello Ruby

Getting started mruby.

制限いろいろ

-Bignumありません -Threadありません -Processありません -Fileありません -Signalありません -他にもいろいろありません

Page 17: Hello Ruby

mruby on Android

mruby +

Android

Page 18: Hello Ruby

mruby on Android

Androidからmrubyを使うには

1. Android用にbuildしたmrubyをAPKに含める

2. mrubyをlibraryとして

Android用にbuildし、JNIを通じてlinkする

Page 19: Hello Ruby

mruby on Android

mruby into APK

1. assetsにmrubyを配置 2. 実行時にassetsからmrubyを展開 3. Rubyスクリプトをコマンドライン

or 一時ファイルとして実行 4. 標準入出力をリダイレクトして結

果を取得

Page 20: Hello Ruby

mruby on Android

mruby into APK

Page 21: Hello Ruby

mruby on Android

mruby as JNI library

1. mrubyをlibraryとしてbuild 2. JNI用のラッパーコードを書く 3. ラッパーコードをbuildして

mrubyをlinkする 4. Javaから直接JNI経由でmrubyが

使える!

Page 22: Hello Ruby

mruby on Android

Features: mruby in APK

1. mrubyのビルドだけなのでお手軽 2. mrubyがcrashしてもJVMが死なない 3. mrubyとJVMが分離されているので、

プロセス単位のメモリ制限に 引っかかりにくい

4. mrubyをinteractiveに 実行できない

Page 23: Hello Ruby

mruby on Android

Features: mruby as JNI library

1. ビルドが大変 2. mrubyがcrashするとJVMも死ぬ 3. メモリ制限にひっかかりやすくなる

4. JNI書くのめんどくさい 5. mrubyをきめ細かく制御できる 6. RubyとJavaの連携が可能

Page 24: Hello Ruby

Java-Ruby bridge

Jamruby (Java mruby bridge)

作りました

Page 25: Hello Ruby

Java-Ruby bridge

Github https://github.com/crimsonwoods/jamruby https://github.com/jamruby/jamruby * 将来はjamrubyアカウントに統合する予定

ソースコード

Page 26: Hello Ruby

Java-Ruby bridge

できること

-RiteVM(mrubyのVM)の起動 -VM標準入出力のリダイレクト -RubyからJavaのメソッドコール -Javaの例外をRubyの例外に変換 -mruby APIのJavaラッパー提供

Page 27: Hello Ruby

Java-Ruby bridge

今後の予定

-Javaの機能呼び出し文法簡略化 -相互型変換のサポート拡張 -Androidの機能をサポート -VM内部のメソッドフックサポート -Android以外のプラットフォームサポート

Page 28: Hello Ruby

Java-Ruby bridge

課題

-JavaクラスのRubyへのExport -Javaのメソッドオーバーロード解決 -Rubyの例外ハンドリング -64bit整数型サポート

etc.

Page 29: Hello Ruby

Java-Ruby bridge

準備1: mrubyをNDK-Buildする

$ git clone https://github.com/mruby/mruby.git $ git clone https://github.com/jamruby/jamruby.git $ cd mruby $ git clone https://github.com/jamruby/mruby_ndk-build.git android $ make $ cd android/jni $ ndk-build $ cd ../../../jamruby

* 予めAndroid NDKを環境中に配置し、 ”ndk-build”コマンドが使用可能になっている前提

Page 30: Hello Ruby

Java-Ruby bridge

準備2: JamrubyをNDK-Buildする

$ cd jni $ ndk-build $ cd ../ $ ls libs/*/*.so libs/armeabi/libjamruby.so libs/armeabi-v7a/libjamruby.so libs/x86/libjamruxy.so $ cd ../

Page 31: Hello Ruby

Java-Ruby bridge

準備3: Jamrubyをbuildする

jamrubyからImport

NDK-Buildしたもの

Page 32: Hello Ruby

Java-Ruby bridge

準備4: JamrubyAppを取得する

$ git clone https://github.com/jamruby/JamrubyApp.git

git cloneした後は、EclipseへのImportを行います。 EclipseでのAndroid Applicationのビルドには、 Android SDKとADT Pluginが必要になります。 <下記参照> http://developer.android.com/sdk/installing/index.html http://developer.android.com/sdk/installing/installing-adt.html

Page 33: Hello Ruby

Java-Ruby bridge

本番: JamrubyAppを実行する

Page 34: Hello Ruby

Java-Ruby bridge

本番: JAVAの関数を呼び出す

Page 35: Hello Ruby

Java-Ruby bridge

競合

-Ruboto (JRuby: Java + Ruby) -Rhodes (Ruby + HTML/CSS/JS) -MobiRuby (Ruby + Obj-C|Java)

Page 36: Hello Ruby

Fin.

About Jamruby

URL: http://jamruby.org/ Mail: jamruby(at)jamruby.org Twitter: @jamruby_org

コンテンツはまだ用意できていません。 ごめんなさい(´;ω;`)