SlideShare a Scribd company logo
1 of 30
Download to read offline
Mecha-Mozilla
              赤塚大典




12年8月21日火曜日
Firefox の灯
12年8月21日火曜日
Mecha-Mozilla
              Web x ?


12年8月21日火曜日
var blink = function(value) {
                  var arduino =
              document.arduino;
                  arduino.analogWrite(8,
              value);
                  setTimeout(blink, 1000,
              value == 0 ? 255 : 0);
              }

              $(document).ready(function() {
                   var arduino =
              document.arduino;
                   arduino.open("/dev/
              cu.usbmodemfa131");
                   arduino.pinMode(8, true);
                   //start blinking
                   blink(0);
              });




                                    arduino.js
12年8月21日火曜日
• ウェブを
               実世界に取り出してみる


              • ウェブブラウザでできないコトを
               実世界で補填してみる


              • ウェブと実世界の良いところを併せた
               コンテンツ/体験を模索してみる


12年8月21日火曜日
通天閣
12年8月21日火曜日
re-finder
12年8月21日火曜日
weburret
12年8月21日火曜日
• ウェブを
      実世界に取り出してみる


 • ウェブブラウザでできないコトを
      実世界で補填してみる


 • ウェブと実世界の良いところを併せた
      コンテンツ/体験を模索してみる


12年8月21日火曜日
デモ




12年8月21日火曜日
arduino.js




12年8月21日火曜日
arduino.js

              //JavaScript
              var blink = function(value)
              {
                  var arduino =
              document.arduino;
                  arduino.analogWrite(8,
              value);
                  setTimeout(blink, 1000,
              value == 0 ? 255 : 0);
              }

              $
              (document).ready(function()
              {
                   var arduino =
              document.arduino;
                   arduino.open("/dev/
              cu.usbmodemfa131");
                   arduino.pinMode(8,
              true);
                   //start blinking
                   blink(0);
              });




12年8月21日火曜日
arduino.js : ソフトウェア構成

                      Addon
          User’s     js-ctypes
        JavaScript
                        c        Arduino




12年8月21日火曜日
User’s JavaScript



                                  アプリケーション
                                   Arduino を
                                   JavaScript から制御




12年8月21日火曜日
Addon構成


                        libArduinoBridge.lib
                         ネイティブ
                        arduino.js
                         Cとの接続ライブラリ
                        main.js
                         Addonメイン




12年8月21日火曜日
Addon : main.js



                                Addon エントリポイント
                                 arduinoライブラリを
                                 読み込み
                                 各ドキュメントから
                                 触れるようにする




12年8月21日火曜日
Addon : arduino.js




                               Addon用ライブラリ
                                js-ctypes を利用して
                                Cネイティブと接続




12年8月21日火曜日
ネイティブ : ArduinoBridge.h




                           Header
                            js-ctypes はこれにあわせる




12年8月21日火曜日
js-ctypes と header の比較
                      js-ctypes                                                header

  var openArduino = dylib.declare(
                  "openArduino",        /* function name */
                  ctypes.default_abi, /* ABI type */
                  ctypes.int32_t,      /* return type */
                  ctypes.char.ptr, /* parameter */
                  new ctypes.PointerType(ctypes.char.ptr)
                  );
                                                              int openArduino(char* portname, char** error);
  exports.open = function(portname) {
    var err = ctypes.char.ptr();
    if ( -1 == openArduino(portname, err.address()) ) {
        throw err.readString();
    }
  }




12年8月21日火曜日
ネイティブ : ArduinoBridge.m




                          実装
                           Arduino のコマンドを送る




12年8月21日火曜日
Arduino




                        コマンドをUSB経由で
                        受け付け実行




12年8月21日火曜日
packege.json
     {
              "name": "arduino.js",
              "license": "MPL 1.1/GPL 2.0/LGPL 2.1",
              "author": "Daisuke Akatsuka",
              "version": "0.1",
              "fullName": "arduino.js",
              "id": "",
              "description": "arduino.js core",
              "unpack":"true"
     }


12年8月21日火曜日
今後の展開




         • バリエーションを増やす



12年8月21日火曜日
kiinect.js
12年8月21日火曜日
kinect.js

              //JavaScript
              next: function() {

              Main.kinect.getDepthTo(Main.bu
              ffer);
                var depthBuffer =
              Main.buffer;
                for (var i = 0, n =
              depthBuffer.length; i < n; i+
              +) {
                   var depth =
              depthBuffer[i];
                   var color = 255-
              Math.floor(depth/
              MAX_DEPTH*255);
                   var index = i * 4;
                   Main.imagedata.data[index
              +1] = color;
                     }

              Main.context.putImageData(Main
              .imagedata, 0, 0);
                setTimeout(Main.next, 10);
              }




12年8月21日火曜日
kinect.js            : ソフトウェア構成


                      Addon
          User’s     js-ctypes
        JavaScript
                       c++
                       open
                       kinect




12年8月21日火曜日
デモ




12年8月21日火曜日
ネイティブの配列
         •    js-ctypes の配列をそのまま使うと遅い
              ※JITコンパイラが効かない
              •   JavaScript の配列にコピーして利用する
         •    XPCOM で実装しても速度は変わらない
              ※JSAPI の JS_SetElement が遅い??
         •    XPCOM で予め配列のメモリを確保しても
              それを返す実装はできない
              ※XPCOMで返した配列のメモリが破棄される
         •    極力配列数を少なくする
              •   ビット演算を使って圧縮するなど
12年8月21日火曜日
今後の展開




              • Tangible Webmaker



12年8月21日火曜日
Mecha-Mozilla

   http://www.mecha-mozilla.org
  http://mecha-mozilla.tumblr.com

 毎週金曜日にMecha-Mozillaミーティング

12年8月21日火曜日

More Related Content

Viewers also liked

【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove
【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove
【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 DevloveKazuaki Takemoto
 
オレオレPHPのつくり方
オレオレPHPのつくり方オレオレPHPのつくり方
オレオレPHPのつくり方Ryusuke Sekiyama
 
20140419 kawajiri m1gp
20140419 kawajiri m1gp20140419 kawajiri m1gp
20140419 kawajiri m1gpRyoma Kawajiri
 
PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半Ohsawa Goodfellow
 
アジャイルカルチャーが組織に根付くまでの挑戦
アジャイルカルチャーが組織に根付くまでの挑戦アジャイルカルチャーが組織に根付くまでの挑戦
アジャイルカルチャーが組織に根付くまでの挑戦Yoh Nakamura
 
Android BLEのつらみを予防するTips
Android BLEのつらみを予防するTipsAndroid BLEのつらみを予防するTips
Android BLEのつらみを予防するTipsTaisuke Oe
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Viewers also liked (13)

【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove
【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove
【18-E-7】 デブサミオフィシャルコミュニティから選出のLT大会 Devlove
 
Virtual Park Tumucumaque
Virtual Park TumucumaqueVirtual Park Tumucumaque
Virtual Park Tumucumaque
 
オレオレPHPのつくり方
オレオレPHPのつくり方オレオレPHPのつくり方
オレオレPHPのつくり方
 
Jetpack Reboot 20100403
Jetpack Reboot 20100403Jetpack Reboot 20100403
Jetpack Reboot 20100403
 
20140419 kawajiri m1gp
20140419 kawajiri m1gp20140419 kawajiri m1gp
20140419 kawajiri m1gp
 
20131023 intersection
20131023 intersection20131023 intersection
20131023 intersection
 
Fism kdd2
Fism kdd2Fism kdd2
Fism kdd2
 
PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半PRML上巻勉強会 at 東京大学 資料 第1章後半
PRML上巻勉強会 at 東京大学 資料 第1章後半
 
初めてのParse.com
初めてのParse.com初めてのParse.com
初めてのParse.com
 
アジャイルカルチャーが組織に根付くまでの挑戦
アジャイルカルチャーが組織に根付くまでの挑戦アジャイルカルチャーが組織に根付くまでの挑戦
アジャイルカルチャーが組織に根付くまでの挑戦
 
Android BLEのつらみを予防するTips
Android BLEのつらみを予防するTipsAndroid BLEのつらみを予防するTips
Android BLEのつらみを予防するTips
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

Similar to Mecha-Mozilla

JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+Hiroaki Okubo
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてTomo Fujita
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶHiroshi Oyamada
 
JDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングJDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングGo Hayakawa
 
Chromium androidビルド
Chromium androidビルドChromium androidビルド
Chromium androidビルドHiroshi Sakate
 
社会ネットワーク分析第7回
社会ネットワーク分析第7回社会ネットワーク分析第7回
社会ネットワーク分析第7回Satoru Mikami
 
プログラミング勉強会0721
プログラミング勉強会0721プログラミング勉強会0721
プログラミング勉強会0721nallpo
 
第一回Miim勉強会
第一回Miim勉強会第一回Miim勉強会
第一回Miim勉強会Yuri Kawamoto
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたYukimitsu Izawa
 
ICT ERA + ABC 2012 Tohoku
ICT ERA + ABC 2012 TohokuICT ERA + ABC 2012 Tohoku
ICT ERA + ABC 2012 TohokuTakashi EGAWA
 
JS開発におけるTDDと自動テストツール利用の勘所
JS開発におけるTDDと自動テストツール利用の勘所JS開発におけるTDDと自動テストツール利用の勘所
JS開発におけるTDDと自動テストツール利用の勘所Koji Nakamura
 
Sugarcubeをはじめよう
SugarcubeをはじめようSugarcubeをはじめよう
SugarcubeをはじめようEihiro Saishu
 
Windows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 TipsWindows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 TipsFujio Kojima
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDEdcubeio
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operationTatsuhiko Kubo
 
-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろうnico0927
 
Unity3.5と4.0の違い
Unity3.5と4.0の違いUnity3.5と4.0の違い
Unity3.5と4.0の違いKeigo Ando
 

Similar to Mecha-Mozilla (20)

JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+JavaScriptをまじめに考えました+
JavaScriptをまじめに考えました+
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについて
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 
JDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングJDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミング
 
R新機能抄出
R新機能抄出R新機能抄出
R新機能抄出
 
Aiming study#6pdf
Aiming study#6pdfAiming study#6pdf
Aiming study#6pdf
 
Chromium androidビルド
Chromium androidビルドChromium androidビルド
Chromium androidビルド
 
社会ネットワーク分析第7回
社会ネットワーク分析第7回社会ネットワーク分析第7回
社会ネットワーク分析第7回
 
プログラミング勉強会0721
プログラミング勉強会0721プログラミング勉強会0721
プログラミング勉強会0721
 
第一回Miim勉強会
第一回Miim勉強会第一回Miim勉強会
第一回Miim勉強会
 
MacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみたMacRubyとHotCocoaでMacのアプリを作ってみた
MacRubyとHotCocoaでMacのアプリを作ってみた
 
ICT ERA + ABC 2012 Tohoku
ICT ERA + ABC 2012 TohokuICT ERA + ABC 2012 Tohoku
ICT ERA + ABC 2012 Tohoku
 
JS開発におけるTDDと自動テストツール利用の勘所
JS開発におけるTDDと自動テストツール利用の勘所JS開発におけるTDDと自動テストツール利用の勘所
JS開発におけるTDDと自動テストツール利用の勘所
 
Sugarcubeをはじめよう
SugarcubeをはじめようSugarcubeをはじめよう
Sugarcubeをはじめよう
 
Windows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 TipsWindows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 Tips
 
React Native GUIDE
React Native GUIDEReact Native GUIDE
React Native GUIDE
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operation
 
-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう
 
Unity3.5と4.0の違い
Unity3.5と4.0の違いUnity3.5と4.0の違い
Unity3.5と4.0の違い
 
Rpscala2011 0601
Rpscala2011 0601Rpscala2011 0601
Rpscala2011 0601
 

Mecha-Mozilla

  • 1. Mecha-Mozilla 赤塚大典 12年8月21日火曜日
  • 3. Mecha-Mozilla Web x ? 12年8月21日火曜日
  • 4. var blink = function(value) { var arduino = document.arduino; arduino.analogWrite(8, value); setTimeout(blink, 1000, value == 0 ? 255 : 0); } $(document).ready(function() { var arduino = document.arduino; arduino.open("/dev/ cu.usbmodemfa131"); arduino.pinMode(8, true); //start blinking blink(0); }); arduino.js 12年8月21日火曜日
  • 5. • ウェブを 実世界に取り出してみる • ウェブブラウザでできないコトを 実世界で補填してみる • ウェブと実世界の良いところを併せた コンテンツ/体験を模索してみる 12年8月21日火曜日
  • 9. • ウェブを 実世界に取り出してみる • ウェブブラウザでできないコトを 実世界で補填してみる • ウェブと実世界の良いところを併せた コンテンツ/体験を模索してみる 12年8月21日火曜日
  • 12. arduino.js //JavaScript var blink = function(value) { var arduino = document.arduino; arduino.analogWrite(8, value); setTimeout(blink, 1000, value == 0 ? 255 : 0); } $ (document).ready(function() { var arduino = document.arduino; arduino.open("/dev/ cu.usbmodemfa131"); arduino.pinMode(8, true); //start blinking blink(0); }); 12年8月21日火曜日
  • 13. arduino.js : ソフトウェア構成 Addon User’s js-ctypes JavaScript c Arduino 12年8月21日火曜日
  • 14. User’s JavaScript アプリケーション  Arduino を  JavaScript から制御 12年8月21日火曜日
  • 15. Addon構成 libArduinoBridge.lib  ネイティブ arduino.js  Cとの接続ライブラリ main.js  Addonメイン 12年8月21日火曜日
  • 16. Addon : main.js Addon エントリポイント  arduinoライブラリを  読み込み  各ドキュメントから  触れるようにする 12年8月21日火曜日
  • 17. Addon : arduino.js Addon用ライブラリ  js-ctypes を利用して  Cネイティブと接続 12年8月21日火曜日
  • 18. ネイティブ : ArduinoBridge.h Header  js-ctypes はこれにあわせる 12年8月21日火曜日
  • 19. js-ctypes と header の比較 js-ctypes header var openArduino = dylib.declare( "openArduino", /* function name */ ctypes.default_abi, /* ABI type */ ctypes.int32_t, /* return type */ ctypes.char.ptr, /* parameter */ new ctypes.PointerType(ctypes.char.ptr) ); int openArduino(char* portname, char** error); exports.open = function(portname) { var err = ctypes.char.ptr(); if ( -1 == openArduino(portname, err.address()) ) { throw err.readString(); } } 12年8月21日火曜日
  • 20. ネイティブ : ArduinoBridge.m 実装  Arduino のコマンドを送る 12年8月21日火曜日
  • 21. Arduino コマンドをUSB経由で 受け付け実行 12年8月21日火曜日
  • 22. packege.json { "name": "arduino.js", "license": "MPL 1.1/GPL 2.0/LGPL 2.1", "author": "Daisuke Akatsuka", "version": "0.1", "fullName": "arduino.js", "id": "", "description": "arduino.js core", "unpack":"true" } 12年8月21日火曜日
  • 23. 今後の展開 • バリエーションを増やす 12年8月21日火曜日
  • 25. kinect.js //JavaScript next: function() { Main.kinect.getDepthTo(Main.bu ffer); var depthBuffer = Main.buffer; for (var i = 0, n = depthBuffer.length; i < n; i+ +) { var depth = depthBuffer[i]; var color = 255- Math.floor(depth/ MAX_DEPTH*255); var index = i * 4; Main.imagedata.data[index +1] = color; } Main.context.putImageData(Main .imagedata, 0, 0); setTimeout(Main.next, 10); } 12年8月21日火曜日
  • 26. kinect.js : ソフトウェア構成 Addon User’s js-ctypes JavaScript c++ open kinect 12年8月21日火曜日
  • 28. ネイティブの配列 • js-ctypes の配列をそのまま使うと遅い ※JITコンパイラが効かない • JavaScript の配列にコピーして利用する • XPCOM で実装しても速度は変わらない ※JSAPI の JS_SetElement が遅い?? • XPCOM で予め配列のメモリを確保しても それを返す実装はできない ※XPCOMで返した配列のメモリが破棄される • 極力配列数を少なくする • ビット演算を使って圧縮するなど 12年8月21日火曜日
  • 29. 今後の展開 • Tangible Webmaker 12年8月21日火曜日
  • 30. Mecha-Mozilla http://www.mecha-mozilla.org http://mecha-mozilla.tumblr.com 毎週金曜日にMecha-Mozillaミーティング 12年8月21日火曜日