Shrink to grow
-
Upload
daniel-bovensiepen -
Category
Technology
-
view
115 -
download
1
description
Transcript of Shrink to grow
![Page 1: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/1.jpg)
Daniel BovensiepenShrink To Grow
![Page 2: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/2.jpg)
mruby
![Page 3: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/3.jpg)
m for ...
![Page 4: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/4.jpg)
m for ...minimal
![Page 5: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/5.jpg)
Binary Size< 100kB
![Page 6: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/6.jpg)
Memory Footprint< 40kB RAM
![Page 7: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/7.jpg)
m for ...
![Page 8: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/8.jpg)
m for ...embedded
![Page 9: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/9.jpg)
https://github.com/matsumoto-r/mod_mruby
mod_mruby
![Page 10: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/10.jpg)
LoadModule mruby_module modules/mod_mruby.soAddHandler mruby-script .rb
backends = [ "http://192.168.0.101:8888/", "http://192.168.0.102:8888/", "http://192.168.0.103:8888/", "http://192.168.0.104:8888/",]
# write balancing algorithm here.
r = Apache::Request.new()
r.handler = "proxy-server"r.proxyreq = Apache::PROXYREQ_REVERSEr.filename = "proxy:" + backends[rand(backends.length)] + r.uri
Apache::return(Apache::OK)
https://github.com/matsumoto-r/mod_mruby
mod_mruby
![Page 11: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/11.jpg)
https://github.com/spiritloose/sqlite3ext-mruby
sqlite3ext-mruby
![Page 12: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/12.jpg)
$ cat test.rb
def fib(n) n < 2 ? n : fib(n - 1) + fib(n - 2)end
create_function :fib do |n| fib(n)end
$ LD_LIBRARY_PATH=. sqlite3
sqlite> .load libsqlite3ext_mruby.so.1.0.0;sqlite> SELECT mrb_load('test.rb');sqlite> SELECT fib(30);832040sqlite>
https://github.com/spiritloose/sqlite3ext-mruby
sqlite3ext-mruby
![Page 13: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/13.jpg)
EmbedArangoDB , Redis,
mobiruby, Android, SMC
ArangoDB: http://www.arangodb.org Redis: https://github.com/antirez/redis/pull/848mobiruby (iOS): http://mobiruby.orgAndroid: http://podtynnyi.com/2012/11/29/build-mruby-for-android/SMC: http://www.secretmaryo.org, https://github.com/Quintus/SMC
![Page 14: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/14.jpg)
m for ...
![Page 15: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/15.jpg)
m for ...modular
![Page 16: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/16.jpg)
Add/Remove Features(i.e. Fiber, stdio, ObjectSpace, etc.)
Standard Library
![Page 17: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/17.jpg)
$ ./bin/mirb mirb - Embeddable Interactive Ruby Shell
This is a very early version, please test and report errors.Thanks :)
> ThreadNameError: uninitialized constant Thread> FiberNameError: uninitialized constant Fiber> eval "puts 'hello world'"NotImplementedError: eval not implemented> print "Test"NotImplementedError: print not available> ObjectSpaceNameError: uninitialized constant ObjectSpace> require 'file'NoMethodError: undefined method 'require' for main
Add/Remove Features(i.e. Fiber, stdio, ObjectSpace, etc.)
Standard Library
![Page 18: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/18.jpg)
RegExpOniguruma & Henry Spencer Engine
Overview: http://blog.mruby.sh/201302190729.htmlOniguruma: http://www.geocities.jp/kosako3/oniguruma/Henry Spencer Engine: http://www.arglist.com/regex
![Page 19: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/19.jpg)
Howis this possible?
![Page 20: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/20.jpg)
Implementationrewritten in C99
![Page 21: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/21.jpg)
ImplementationISO 30170:2012
![Page 22: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/22.jpg)
EXECUTING RUBY CODE
Five Ways to execute mruby: http://blog.mruby.sh/201207020720.html
mrbc, mruby and mirb
![Page 23: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/23.jpg)
Build SystemMakefile, cmake and ...
![Page 24: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/24.jpg)
Rake
Build System
![Page 25: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/25.jpg)
MRuby::Build.new do |conf| # load specific toolchain settings toolchain :gcc
# include the default GEMs conf.gembox 'default'end
# Define cross build settingsMRuby::CrossBuild.new('32bit') do |conf| toolchain :gcc conf.cc.flags << "-m32" conf.linker.flags << "-m32"end
Rake
Build System
![Page 26: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/26.jpg)
mrbgems
![Page 27: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/27.jpg)
mrbgemsmgem is like RubyGem but incompatible
![Page 28: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/28.jpg)
mrbgems
![Page 29: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/29.jpg)
mrbgems
mruby.c CC mruby
![Page 30: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/30.jpg)
mrbgems
mruby.c CC mrubymgem activate+mgem +Fiber(i.e. Fiber)
![Page 31: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/31.jpg)
What can we do now?
![Page 32: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/32.jpg)
mruby on Arduino
![Page 33: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/33.jpg)
C++ Code
Arduino
![Page 34: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/34.jpg)
C++ Code
Arduino
// Pin 13 has an LED connected on most Arduino boards.// give it a name:int led = 13;
// the setup routine runs once when you press reset:void setup() { // initialize the digital pin as an output. pinMode(led, OUTPUT); }
// the loop routine runs over and over again forever:void loop() { digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(led, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second}
![Page 35: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/35.jpg)
Workflow
Arduino
![Page 36: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/36.jpg)
Workflow
Arduino
code.cpp
![Page 37: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/37.jpg)
Workflow
Arduino
code.cpp a.binCross-CC
![Page 38: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/38.jpg)
Workflow
Arduino
code.cpp a.binCross-CC .Upload
![Page 39: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/39.jpg)
Cross-Compile
![Page 40: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/40.jpg)
Atmel SAM3X8E (ARM Cortex-M3 based)
Cross-Compile
![Page 41: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/41.jpg)
Atmel SAM3X8E (ARM Cortex-M3 based)
Cross-CompileMRuby::CrossBuild.new("Arduino Due") do |conf| toolchain :gcc
ARDUINO_PATH = '/home/daniel/Downloads/arduino-1.5.2' BIN_PATH = "#{ARDUINO_PATH}/hardware/tools/g++_arm_none_eabi/bin" SAM_PATH = "#{ARDUINO_PATH}/hardware/arduino/sam" TARGET_PATH = "#{SAM_PATH}/variants/arduino_due_x"
conf.cc do |cc| cc.command = "#{BIN_PATH}/arm-none-eabi-gcc" cc.include_paths = ["#{SAM_PATH}/system/libsam -I#{SAM_PATH}/system/CMSIS/CMSIS/Include/", "#{SAM_PATH}/system/CMSIS/Device/ATMEL/", "#{SAM_PATH}/cores/arduino -I#{TARGET_PATH}", "#{MRUBY_ROOT}/include"] cc.flags << '-Os -w -ffunction-sections -fdata-sections -nostdlib ' + '--param max-inline-insns-single=500 -Dprintf=iprintf ' + '-mcpu=cortex-m3 -DF_CPU=84000000L -DARDUINO=152 ' + '-D__SAM3X8E__ -mthumb -DUSB_PID=0x003e -DUSB_VID=0x2341 -DUSBCON' cc.compile_options = "%{flags} -o %{outfile} -c %{infile}" end
conf.archiver do |archiver| archiver.command = "#{BIN_PATH}/arm-none-eabi-ar" archiver.archive_options = 'rcs %{outfile} %{objs}' end
conf.bins = []end
![Page 42: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/42.jpg)
Arduino Ecosystem
Embed
![Page 43: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/43.jpg)
Arduino Ecosystem
Embed
#include "Arduino.h"#include "../mruby_src/include/mruby.h"
mrb_state *mrb;
/* Init phase of Microcontroller */voidsetup() { }
/* Process Loop */voidloop() { mrb = mrb_open();
/* Use mruby here */
mrb_close(mrb);}
![Page 44: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/44.jpg)
Arduino Ecosystem (API)
Embed
![Page 45: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/45.jpg)
Arduino Ecosystem (API)
Embed
/* ... */
mrb_valuemrb_ar(mrb_state *mrb, mrb_value self) { mrb_int pin; mrb_get_args(mrb, "i", &pin); return mrb_fixnum_value(analogRead(pin));}
/* ... */
/* Integrate into mruby */ RClass *am = mrb_define_module(mrb, "Arduino"); mrb_define_module_function(mrb, am, "analog_read", mrb_ar, ARGS_REQ(1));
/* ... */
![Page 46: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/46.jpg)
Shrink
![Page 47: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/47.jpg)
available 96kB SRAM and 512kB Flash
Shrink
![Page 48: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/48.jpg)
available 96kB SRAM and 512kB Flash
Shrink
0
16000
32000
48000
64000
80000
96000
112000
128000
144000
160000
nothing mrb_open wrd box nan box flt seglist heap khash mrblib ALL (-flt -wrd) ALL (-nan)
Image (bytes) Free Memory (bytes) Execution Time (µs)
![Page 49: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/49.jpg)
Shrink96kB SRAM available (~31kB used)512kb Flash available (~86kB used)
![Page 50: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/50.jpg)
Workflow (mruby)
Arduino
![Page 51: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/51.jpg)
Workflow (mruby)
Arduino
mruby.c
![Page 52: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/52.jpg)
Workflow (mruby)
Arduino
mruby.c mruby¹(host)cc
![Page 53: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/53.jpg)
Workflow (mruby)
Arduino
mruby.c mruby¹(host)cc
mruby²(target)cross-cc
![Page 54: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/54.jpg)
Workflow (mruby)
Arduino
code.rb
mruby.c mruby¹(host)cc
mruby²(target)cross-cc
![Page 55: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/55.jpg)
Workflow (mruby)
Arduino
code.rbarray.c(Array)
mruby.c mruby¹(host)cc
mruby²(target)cross-cc
mrbc¹
![Page 56: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/56.jpg)
Workflow (mruby)
Arduino
code.rbarray.c(Array) code.cpp
mruby.c mruby¹(host)cc
mruby²(target)cross-cc
mrbc¹ integrate
![Page 57: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/57.jpg)
Workflow (mruby)
Arduino
code.rbarray.c(Array) code.cpp
mruby.c mruby¹(host)cc
mruby²(target)
code.cpp+
mruby²
cross-cc
mrbc¹ integrate
![Page 58: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/58.jpg)
Workflow (mruby)
Arduino
code.rbarray.c(Array) code.cpp
mruby.c mruby¹(host)cc
mruby²(target)
code.cpp+
mruby²a.bin
cross-cc
mrbc¹ integrate
cross-cc
![Page 59: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/59.jpg)
Workflow (mruby)
Arduino
code.rbarray.c(Array) code.cpp
mruby.c mruby¹(host)cc
mruby²(target)
code.cpp+
mruby²a.bin .
cross-cc
mrbc¹ integrate
cross-cc upload
![Page 60: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/60.jpg)
Workflow (mruby)
Arduino
code.rbarray.c(Array) code.cpp
mruby.c mruby¹(host)cc
mruby²(target)
code.cpp+
mruby²a.bin .
cross-cc
mrbc¹ integrate
cross-cc uploadOMG
![Page 61: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/61.jpg)
Port mirb to Arduino Due
Arduino
![Page 62: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/62.jpg)
Port mirb to Arduino Due
Arduino
.enter .rb
![Page 63: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/63.jpg)
Interactive Arduino Shell (LED Switch)
Arduino
![Page 64: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/64.jpg)
Interactive Arduino Shell (3D Printer)
Arduino
![Page 65: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/65.jpg)
Coming Next“Webruby”
byXuejie Xiao
![Page 66: Shrink to grow](https://reader033.fdocuments.us/reader033/viewer/2022051210/54c8457e4a7959c51c8b4574/html5/thumbnails/66.jpg)
THX
@bovensiepen
http://mruby.sh