Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

DAHO.AM 2015 - Abusing phones to make the internet of things

1.862 visualizaciones

Publicado el

Presentation I gave June 2015 at DAHO.AM in Munich

Publicado en: Internet
  • Proof Of REAL Growth. Women Lie: Size DOES Matter, They HATE It When It's Small. Don't Disapoint Her With Your Little Guy. ★★★ https://tinyurl.com/yaygh4xh
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Is Your EX Still Secretly In Love With You? Make him beg you to take him back. click here now... ●●● http://tinyurl.com/y4b2om2w
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • How to use "The Scrambler" ot get a girl obsessed with BANGING you... ■■■ https://tinyurl.com/unlockherlegss
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Nice !! Download 100 % Free Ebooks, PPts, Study Notes, Novels, etc @ https://www.ThesisScientist.com
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

DAHO.AM 2015 - Abusing phones to make the internet of things

  1. 1. abusing phones DAHO.AM 12 June 2015 to make the internet of things @janjongboom
  2. 2. abusing phones DAHO.AM 12 June 2015 to make the internet of things @janjongboom
  3. 3. @janjongboom Telenor R&D Mozilla things
  4. 4. I hate JavaScript!
  5. 5. VBScript <3 <3 <3
  6. 6. Before mobile revolution… Limited input methods
  7. 7. Vibration sensor?
  8. 8. Accelerometer?
  9. 9. Accelerometer?
  10. 10. Proximity Accelerometer Ambient Light Magnetometer Gyroscope Humidity Ambient Temperature Pressure Battery Cameras
  11. 11. Bend sensor
  12. 12. Internet of Things
  13. 13. Moves IHR SleepCycle
  14. 14. BORING!
  15. 15. Device Light Real purpose: adjust brightness
  16. 16. Music Theremin is instrument Use device light as tone frequency Wave your hands and magic!
  17. 17. Music Theremin is instrument Use device light as tone frequency Wave your hands and magic!
  18. 18. 1 var context = new AudioContext(); 2 var oscillator = context.createOscillator(); 3 oscillator.connect(context.destination); 4 oscillator.start(0); 5 6 window.addEventListener('devicelight', function(e) { 7 oscillator.frequency.value = e.value * 10; 8 }); Music
  19. 19. Gyroscope Real purpose: rotate screen
  20. 20. Gyroscope Real purpose: rotate screen
  21. 21. Track real life movement Draw 3D model of phones Measure gyroscope data Show real life state on screen
  22. 22. Track real life movement 1 var front = new THREE.MeshBasicMaterial({ map: loadTexture('front.jpg') }); 2 var back = new THREE.MeshBasicMaterial({ map: loadTexture('back.jpg') }); 3 var border = new THREE.MeshBasicMaterial({ color: 0xffe04526 }); 4 5 var materials = [ border, border, border, 6 border, front, back ]; 7 8 var geometry = new THREE.BoxGeometry(2, 4, 0.3); 9 var cube = new THREE.Mesh(geometry, 10 new THREE.MeshFaceMaterial(materials)); 11 scene.add(cube);
  23. 23. Track real life movement 1 window.addEventListener('deviceorientation', function(e) { 2 cube.rotation.x = e.beta / 60; 3 cube.rotation.y = e.gamma / 60; 4 cube.rotation.z = e.alpha / 60; 5 });
  24. 24. Accelerometer Real purpose: Turn to mute
  25. 25. Juggling visualizer Measure z-forces on device Plot it in graph over time Juggle with multiple devices
  26. 26. Juggling visualizer 1 window.addEventListener('devicemotion', function(e) { 2 var serie = getGraphSerieForDevice(e.data.deviceId); 3 serie.addPoint([ e.data.timestamp, Math.abs(e.data.z) ]); 4 });
  27. 27. Weight scale
  28. 28. Computer generated music
  29. 29. http://gibber.mat.ucsb.edu/
  30. 30. 1 a = Drums('x*o*x*o-') Gibber
  31. 31. 1 a = Drums('x*o*x*o-') Gibber
  32. 32. Gibber 1 a = Drums('x*o*x*o-') 2 a.pitch = 0.5
  33. 33. Gibber 1 a = Drums('x*o*x*o-') 2 a.pitch = 0.5
  34. 34. Gibber 1 a = Drums('x*o*x*o-') 2 3 speak = Speak({ pitch: 70, wordgap:5 }) 4 .say.seq( 5 ['Mu', 'nich', 'Mu', 'Mu', 'nich'], 6 [1/2, 1/2, 1/4, 1/4, 1/2] 7 ) 8 9 speak.pitch.seq( [1,.8,1.2].rnd() ) 10 Clock.bpm = 120;
  35. 35. Gibber 1 a = Drums('x*o*x*o-') 2 3 speak = Speak({ pitch: 70, wordgap:5 }) 4 .say.seq( 5 ['Mu', 'nich', 'Mu', 'Mu', 'nich'], 6 [1/2, 1/2, 1/4, 1/4, 1/2] 7 ) 8 9 speak.pitch.seq( [1,.8,1.2].rnd() ) 10 Clock.bpm = 120;
  36. 36. Gibber 1 a = Drums('x*o*x*o-') 2 3 speak = Speak({ pitch: 70, wordgap:5 }) 4 .say.seq( 5 ['Mu', 'nich'], 6 [1/4, 1/4, 1/4, 1/2].rnd() 7 ) 8 9 speak.pitch.seq( [1,.8,1.2].rnd() ) 10 Clock.bpm = 120;
  37. 37. Gibber 1 a = Drums('x*o*x*o-') 2 3 speak = Speak({ pitch: 70, wordgap:5 }) 4 .say.seq( 5 ['Mu', 'nich'], 6 [1/4, 1/4, 1/4, 1/2].rnd() 7 ) 8 9 speak.pitch.seq( [1,.8,1.2].rnd() ) 10 Clock.bpm = 120;
  38. 38. Gibber 1 a = Drums('x*o*x*o-') 2 3 speak = Speak({ pitch: 70, wordgap:5 }) 4 .say.seq( 5 ['Mu', 'nich'], 6 [1/4, 1/4, 1/4, 1/2].rnd() 7 ) 8 9 speak.pitch.seq( [1,.8,1.2].rnd() ) 10 Clock.bpm = 120;
  39. 39. So much phones!
  40. 40. Gibber
  41. 41. Gibber 1 a = Drums('x*o*x*o-') 2 a.pitch = Phone.X https://github.com/janjongboom/jsconf-us/blob/master/gibber/gibber-phone.js
  42. 42. Gibber 1 a = Drums('x*o*x*o-') 2 a.pitch = Phone.X https://github.com/janjongboom/jsconf-us/blob/master/gibber/gibber-phone.js
  43. 43. Getting data out of the real world
  44. 44. Bluetooth beacons Broadcasting their existence
  45. 45. Bluetooth beacons Long battery life Cheap URLs, sensor values, etc.
  46. 46. Coming to a web browser near you https://bugzilla.mozilla.org/show_bug.cgi?id=1063444
  47. 47. Coming to a web browser near you https://bugzilla.mozilla.org/show_bug.cgi?id=1063444
  48. 48. Scanning beacons 1 var adapter = navigator.mozBluetooth.defaultAdapter 2 adapter.startLeScan([]).then(handle => { 3 handle.ondevicefound = e => { 4 // handle e.scanRecord 5 } 6 7 setTimeout(() => { 8 adapter.stopLeScan(handle) 9 }, 5000) 10 }, err => console.error(err))
  49. 49. Scanning beacons 1 var adapter = navigator.mozBluetooth.defaultAdapter 2 adapter.startLeScan([]).then(handle => { 3 handle.ondevicefound = e => { 4 // handle e.scanRecord 5 } 6 7 setTimeout(() => { 8 adapter.stopLeScan(handle) 9 }, 5000) 10 }, err => console.error(err))
  50. 50. Scanning beacons 1 var adapter = navigator.mozBluetooth.defaultAdapter 2 adapter.startLeScan([]).then(handle => { 3 handle.ondevicefound = e => { 4 // handle e.scanRecord 5 } 6 7 setTimeout(() => { 8 adapter.stopLeScan(handle) 9 }, 5000) 10 }, err => console.error(err))
  51. 51. Scanning beacons 1 var adapter = navigator.mozBluetooth.defaultAdapter 2 adapter.startLeScan([]).then(handle => { 3 handle.ondevicefound = e => { 4 // handle e.scanRecord 5 } 6 7 setTimeout(() => { 8 adapter.stopLeScan(handle) 9 }, 5000) 10 }, err => console.error(err))
  52. 52. Scanning beacons 1 var adapter = navigator.mozBluetooth.defaultAdapter 2 adapter.startLeScan([]).then(handle => { 3 handle.ondevicefound = e => { 4 // handle e.scanRecord 5 } 6 7 setTimeout(() => { 8 adapter.stopLeScan(handle) 9 }, 5000) 10 }, err => console.error(err))
  53. 53. JavaScript baby monitor Tag your baby with a phone Get three beacons Some math
  54. 54. JavaScript baby monitor Tag your baby with a phone Get three beacons Some math
  55. 55. Linux Kernel
  56. 56. Linux Kernel Gecko
  57. 57. Linux Kernel Gecko HTML5 UI
  58. 58. Linux Kernel Gecko HTML5 UI Has all phone APIs in JS
  59. 59. Linux Kernel Gecko Has all phone APIs in JS
  60. 60. First screwdriver ever!
  61. 61. Booting / flashing
  62. 62. Linux Kernel Gecko Has all phone APIs in JS
  63. 63. Linux Kernel Gecko JanOS Has all phone APIs in JS
  64. 64. Linux Kernel Gecko JanOS Has all phone APIs in JS
  65. 65. JanOS Fork of Firefox OS For phones & Rpi Runs without display
  66. 66. 1 var conn = navigator.mozMobileConnections[0]; 2 conn.addEventListener('voicechange', function vc() { 3 if (conn.voice.connected) { 4 conn.removeEventListener('voicechange', vc); 5 6 var req = navigator.mozMobileMessage 7 .send('+31612345678', 'Hello from JanOS!'); 8 req.onsuccess = function() { 9 console.log('Message sent successfully'); 10 }; 11 req.onerror = function() { 12 console.error('Could not send SMS', req.error); 13 }; 14 } 15 });
  67. 67. 1 var conn = navigator.mozMobileConnections[0]; 2 conn.addEventListener('voicechange', function vc() { 3 if (conn.voice.connected) { 4 conn.removeEventListener('voicechange', vc); 5 6 var req = navigator.mozMobileMessage 7 .send('+31612345678', 'Hello from JanOS!'); 8 req.onsuccess = function() { 9 console.log('Message sent successfully'); 10 }; 11 req.onerror = function() { 12 console.error('Could not send SMS', req.error); 13 }; 14 } 15 });
  68. 68. 1 var conn = navigator.mozMobileConnections[0]; 2 conn.addEventListener('voicechange', function vc() { 3 if (conn.voice.connected) { 4 conn.removeEventListener('voicechange', vc); 5 6 var req = navigator.mozMobileMessage 7 .send('+31612345678', 'Hello from JanOS!'); 8 req.onsuccess = function() { 9 console.log('Message sent successfully'); 10 }; 11 req.onerror = function() { 12 console.error('Could not send SMS', req.error); 13 }; 14 } 15 });
  69. 69. 1 var conn = navigator.mozMobileConnections[0]; 2 conn.addEventListener('voicechange', function vc() { 3 if (conn.voice.connected) { 4 conn.removeEventListener('voicechange', vc); 5 6 var req = navigator.mozMobileMessage 7 .send('+31612345678', 'Hello from JanOS!'); 8 req.onsuccess = function() { 9 console.log('Message sent successfully'); 10 }; 11 req.onerror = function() { 12 console.error('Could not send SMS', req.error); 13 }; 14 } 15 });
  70. 70. 1 var conn = navigator.mozMobileConnections[0]; 2 conn.addEventListener('voicechange', function vc() { 3 if (conn.voice.connected) { 4 conn.removeEventListener('voicechange', vc); 5 6 var req = navigator.mozMobileMessage 7 .send('+31612345678', 'Hello from JanOS!'); 8 req.onsuccess = function() { 9 console.log('Message sent successfully'); 10 }; 11 req.onerror = function() { 12 console.error('Could not send SMS', req.error); 13 }; 14 } 15 });
  71. 71. -
  72. 72. -
  73. 73. Get hacking! Grab a phone that has latest Chrome / Firefox Use that sensor data Think outside the box Or buy a ZTE Open C for 60 euro's and break it!
  74. 74. Thank you! http://janjongboom.com janos.io github.com/janjongboom/(jsconf-asia|jsconf-us)

×