Peter Hoddie's keynote for IEEE at CES 2016. He explores upcoming trends for developers in the IoT space, scriptable IoT leading us to the right standards, and JavaScript for the IoT.
2. @kinoma
Overview
• Looking ahead five years, based on what is happening
today.
• What does the code we program need to do?
• How will we be writing that code?
• Who will be doing the programming?
5. @kinoma
Consumer expectations
• These things are better than their predecessors
• Do more
• More configurable
• More reliable
• These things can work together with other things to
do even more useful stuff
6. @kinoma
Two kinds of standards
• To underpin markets
where massive
investment needed
• DVD (manufacturing
factories)
• 5G (cell towers)
• Wi-Fi (chips)
• MPEG compression
(silicon, software,
toolchain)
• To formalize (and
clean-up) existing
practice
• HTTP
• JSON
• JavaScript
• HTML
• MPEG-4 file format
7. @kinoma
Standards in IoT
• Industry impulse is to
create a new standard
• Define boundaries of
new product
categories
• Ensure interoperability
9. @kinoma
Too much. Too soon.
• It isn’t obvious what we want to do in the big picture
• Trying to create “underpinning” standards
• Not necessary for this market – investment level is
already unbelievably high
• Leading to bad standards
• Too much functionality
• Allow for too many possible futures
• Too big and complex to be practical
10. @kinoma
IoT needs time to evolve
• Experiments to discover what is possible
• Experience to know what works in the real world
• Too early for new standards
• Plenty of existing standards to build on
11. • Many suggest sending everything through the cloud
• Cloud acts as intermediary between devices and services
• Problems
• Too much data
• Internet isn’t always available
• Who’s cloud?
• Security – moving data around unnecessarily @kinoma
The cloud
12. • Devices must be able to communicate directly with
• Any cloud service
• Any other IoT device
• Any mobile app
@kinoma
Direct
15. The Killer App for IoT is the same as the
Killer App for PC and mobile:
The ability to run the apps you choose.
@kinoma
No single killer app
16. @kinoma
User-installed apps on IoT devices?
• Devices aren’t powerful enough.
• Too difficult for anyone but the most experienced
embedded programmers.
• It won’t be reliable.
• A security nightmare.
Insanity!
18. @kinoma
Let’s use a standard to help
• JavaScript is the closest thing we have to a
universal programming language
Web (Desktop)
Mobile (Apps and Web)
Server
Embedded
19. @kinoma
High level programming languages
on embedded systems
Relatedly, writing software to control drones,
vending machines, and dishwashers has become
as easy as spinning up a website. Fast, efficient
processors … are turning JavaScript into a
popular embedded programming language—
unthinkable less than a decade ago.
20. JavaScript for IoT
@kinoma
• JSON built in – de facto data format of the
web
• Exceptionally portable – OS independent
• Helps eliminate memory leaks so devices
can run for a very long time – garbage
collector
21. Secure foundation
@kinoma
• Sandbox
• Core language provides no access to network, files, hardware,
screen, audio, etc.
• Scripts can only see and do what the system designer chooses
to provide
• Secure – many classes of security flaws in native code are
nonexistent
• Uninitialized memory
• Stack overflow
• Buffer overruns
• Mal-formed data injection
22. First truly major enhancements to the language.
ES6 contains more than 400 individual changes
including:
• Classes – familiar tool for inheritance
• Promises – clean, consistent asynchronous
operation
• Modules – reusable code libraries
• ArrayBuffer – work with binary data
JavaScript 6th Edition – Features for IoT
@kinoma
23. @kinoma
How small a system can run
JavaScript?
• 512 KB RAM
• 200 MHz ARM Cortex M4
• Wi-Fi b/g
• Most complete ES6 implementation anywhere
• Open source
25. @kinoma
HTTP Client
let HTTPClient = require("HTTPClient");
let http = new HTTPClient(url);
http.onTransferComplete = function(status) {
trace(`Transfer complete : ${status}n`);
};
http.onDataReady = function(buffer) {
trace(String.fromArrayBuffer(buffer));
};
http.start();
26. @kinoma
HTTP Server
let HTTPServer = require("HTTPServer");
let server = new HTTPServer({port: 80});
server.onRequest = function(request) {
trace(`new request: url = ${request.url}n`);
request.addHeader("Connection", "close");
request.response();
};
27. @kinoma
I2C Accelerometer
let accel = new I2C(1, 0x53);
let id = accel.readChar(0x00);
if (0xE5 != id)
throw new Error(`unrecognized id: ${id}`);
accel.write(0x2d, [0x08]);
accel.write(0x38, [(0x01 << 6) | 0x1f]);
let status = accel.readByte(0x39);
let tmp = accel.readByte(0x32);
let x = (tmp << 8) | accel.readByte(0x33);
tmp = accel.readByte(0x34);
let y = (tmp << 8) | accel.readByte(0x35);
tmp = accel.readByte(0x36);
let z = (tmp << 8) | accel.readByte(0x37);
28. @kinoma
Adding ES6 to your product
• Just a few steps to get the basics working
• Get XS6 from GitHub
• Build it with your product
• Entirely ANSI C – likely builds as-is
• All host OS dependencies in three files
xs6Host.c, xs6Platform.h, and xs6Platform.6
• Update as needed for your host OS / RTOS
31. Reading environment variables
To allow a script to do this trace(getenv("XS6") + "n");
trace(getenv("XSBUG_HOST") + "n");
xsResult = xsNewHostFunction(xs_getenv, 1);
xsSet(xsGlobal, xsID("getenv"), xsResult);
void xs_getenv(xsMachine* the)
{
xsStringValue result = getenv(xsToString(xsArg(0)));
if (result)
xsResult = xsString(result);
}
Implement xs_getenv in C
Add getenv function to
the virtual machine
32. Going deeper
• JavaScript is also great for building the
product
• App logic
• Communication
• Network protocols
• Hardware
@kinoma
33. @kinoma
Why use JavaScript to build your
product?
• Get it working faster
• Iterate incredibly fast
• Leverage code and techniques
developed by other JS developers
• Hardware independent; easy to re-use
in your next generation
• Re-use JavaScript code with Node.js cloud
service, mobile apps, and web pages
• Much easier to find JavaScript
programmers
34. Avoid the “100% pure” trap
• It doesn’t make sense to code
everything in script
• Native code is great
• Fast
• Access to native functionality
• Access to hardware functions
• Re-use of proven, reliable code
• Secure
35. @kinoma
But, you may say
JavaScript isn’t type
safe. My manager
insists….
JavaScript isn’t good
for big projects.
Google told me… Modules
JavaScript
isn’t fast
41. @kinoma
Scriptable is scalable
• Your organization can’t implement everything itself
• Interactions with other devices
• Mobile experience
• Interactions with cloud service
• Building partnerships directly is slow, expensive, and limited
• Opening your product to Apps let’s individuals and
companies integrate your product with theirs
• Brings new abilities, new customers, access to new
markets
42. @kinoma
Scriptable IoT will lead us to the
right standards
• New “standard objects” for IoT to augment JavaScript built-
ins
• Common programming models
• Modules / libraries that are common across devices
• Perhaps enhancements to JavaScript for needs of IoT
43. @kinoma
Scriptable will realize potential of IoT
• We can’t organize to connect all
these devices and services
together
• This is not a central design /
control problem
• Organic exploration and growth
• Consumers will get the magic they
expect, just as the mobile app
ecosystem snapped into place
Programmer
I lead an engineering team. I don’t manage.
You are have probably run my code.
Apple TrueType (!)
Apple QuickTime
MPEG-4
Palm phones (lots of them)
Sony cameras
Sony Reader
HP Printers (I think we can safely mention that here, without going into depth)
You are likely using the standards work I helped with on MPEG-4 daily.
You may well have some with you now
And I’m probably running your code. And since this is IEEE, at this moment, I’m probably using standards some of you helped create.
For purposes of this presentation - any thing with a CPU and radio.
Halo Smoke Alarm
ADT with LG security
iDevices Light Socket
Essence WeRHome alarm system
Hunter Signal fan
Most recently, Jon Bruner wrote in the O'Reilly Hardware Newsletter looking ahead to 2016 wrote "High level programming languages on embedded systems" was one of the top 4 trends this year, saying:
..writing software to control drones, vending machines, and dishwashers
has become as easy as spinning up a website. Fast, efficient processors
like those on the Raspberry Pi are turning JavaScript into a popular
embedded programming language—unthinkable less than a decade ago.
Most recently, Jon Bruner wrote in the O'Reilly Hardware Newsletter looking ahead to 2016 wrote "High level programming languages on embedded systems" was one of the top 4 trends this year, saying:
..writing software to control drones, vending machines, and dishwashers
has become as easy as spinning up a website. Fast, efficient processors
like those on the Raspberry Pi are turning JavaScript into a popular
embedded programming language—unthinkable less than a decade ago.