Embedded JavaScript (FluentConf 2014)

60
Embedded JavaScript: The skills you have in 2014 will be all you need to make physical devices Tim Ryan, Co-Founder / Developer Technical Machine

Transcript of Embedded JavaScript (FluentConf 2014)

Page 1: Embedded JavaScript (FluentConf 2014)

Embedded JavaScript:The skills you have in 2014 will be

all you need to make physical devices

Tim Ryan, Co-Founder / Developer Technical Machine

Page 2: Embedded JavaScript (FluentConf 2014)
Page 3: Embedded JavaScript (FluentConf 2014)

Tessel is a WiFi-enabled microcontroller that runs

JavaScript.

Tim Ryan, Co-Founder / Software Developer Technical Machine

Page 4: Embedded JavaScript (FluentConf 2014)
Page 5: Embedded JavaScript (FluentConf 2014)

Embedded JavaScript

Page 6: Embedded JavaScript (FluentConf 2014)
Page 7: Embedded JavaScript (FluentConf 2014)
Page 8: Embedded JavaScript (FluentConf 2014)
Page 9: Embedded JavaScript (FluentConf 2014)
Page 10: Embedded JavaScript (FluentConf 2014)
Page 11: Embedded JavaScript (FluentConf 2014)

High-level != Developer-friendly

Page 12: Embedded JavaScript (FluentConf 2014)

Open Source Hardware

Page 13: Embedded JavaScript (FluentConf 2014)
Page 14: Embedded JavaScript (FluentConf 2014)
Page 15: Embedded JavaScript (FluentConf 2014)
Page 16: Embedded JavaScript (FluentConf 2014)

20052014

Page 17: Embedded JavaScript (FluentConf 2014)

20052003 2005

Page 18: Embedded JavaScript (FluentConf 2014)

20052003 2005

Page 19: Embedded JavaScript (FluentConf 2014)

~2010

Page 20: Embedded JavaScript (FluentConf 2014)

Microcontrollers

Page 21: Embedded JavaScript (FluentConf 2014)
Page 22: Embedded JavaScript (FluentConf 2014)

8-bit 32-bit

Page 23: Embedded JavaScript (FluentConf 2014)

We can today afford the processing power

to make developers’ lives easier.

Page 24: Embedded JavaScript (FluentConf 2014)

$4 @1K

$11 @1K

Page 25: Embedded JavaScript (FluentConf 2014)
Page 26: Embedded JavaScript (FluentConf 2014)
Page 27: Embedded JavaScript (FluentConf 2014)

Why JavaScript?

Page 28: Embedded JavaScript (FluentConf 2014)

JavaScript (and asynchronous coding) is the perfect embedded

language!

Page 29: Embedded JavaScript (FluentConf 2014)

JavaScript (and asynchronous coding) is the perfect embedded

language!—Sylvia Plath

Page 30: Embedded JavaScript (FluentConf 2014)

Ethernet

TCP

HTTP

Page 31: Embedded JavaScript (FluentConf 2014)

Ethernet

TCP

HTTP

(Packet-based)

(Stream-based)

(Packet-based)

Page 32: Embedded JavaScript (FluentConf 2014)

Ethernet

TCP

HTTP

Websockets

(Packet-based)

(Stream-based)

(Packet-based)

(Streaming…)

Page 33: Embedded JavaScript (FluentConf 2014)
Page 34: Embedded JavaScript (FluentConf 2014)
Page 35: Embedded JavaScript (FluentConf 2014)
Page 36: Embedded JavaScript (FluentConf 2014)
Page 37: Embedded JavaScript (FluentConf 2014)
Page 38: Embedded JavaScript (FluentConf 2014)

def receive_packet(): buf = sock.recv() return buf

while True: print(receive_packet())

Page 39: Embedded JavaScript (FluentConf 2014)

Future<byte[]> p =pool.submit(new Callable<byte[]>() { public byte[] call() { return socket.recv(); }}

// ... while waiting ...

p.get();

Page 40: Embedded JavaScript (FluentConf 2014)

socket.on(‘data’,function (data) { // handle data buffer});

// ... other code ...

Page 41: Embedded JavaScript (FluentConf 2014)

Inventing the Universe

Page 42: Embedded JavaScript (FluentConf 2014)
Page 43: Embedded JavaScript (FluentConf 2014)

● Chrome’s JS engine● C++● ~10mb memory

required for each instance

● POSIX/Win32 environment

Page 44: Embedded JavaScript (FluentConf 2014)

● Embeddable language

● Written in C● ~30kb memory● Highly portable

Page 45: Embedded JavaScript (FluentConf 2014)

● Embeddable language

● Written in C● ~30kb memory● Highly portable● 4x-60x slower

Page 46: Embedded JavaScript (FluentConf 2014)

JS VM

HTTP Parsing

DNS

SSL

Memory management

Filesystem Tar

JSON

Unicode

TCP/IP

Page 47: Embedded JavaScript (FluentConf 2014)

JS VM

HTTP Parsing

DNS

SSL

Memory management

Filesystem Tar

JSON

Unicode

TCP/IP

tessel/colony

wecing/utf8proc

lloyd/yajl

bagder/c-ares

dsheets/axtls

joyent/http-parser

abbrev/fatfs

colorer/dlmalloc

Page 48: Embedded JavaScript (FluentConf 2014)

(When reinventing everything, reuse as much as possible.)

Page 49: Embedded JavaScript (FluentConf 2014)
Page 50: Embedded JavaScript (FluentConf 2014)
Page 51: Embedded JavaScript (FluentConf 2014)

What Comes Next

Page 52: Embedded JavaScript (FluentConf 2014)

It’s becoming feasible to embed in every product a microcontroller

powerful enough to run a high level language.

Page 53: Embedded JavaScript (FluentConf 2014)

HTTP

Page 54: Embedded JavaScript (FluentConf 2014)

HTTP

SPI

I2C

UART

Page 55: Embedded JavaScript (FluentConf 2014)
Page 56: Embedded JavaScript (FluentConf 2014)
Page 57: Embedded JavaScript (FluentConf 2014)

Be bold! Be courageous!Be amazing!

Page 58: Embedded JavaScript (FluentConf 2014)

Be bold! Be courageous!Be amazing!Build robots!

Page 59: Embedded JavaScript (FluentConf 2014)

Be bold! Be courageous!Be amazing!Build robots!— Sylvia Plath

Page 60: Embedded JavaScript (FluentConf 2014)

[email protected] @technicalhumans

http://tessel.io