spacebrew: the overview
TRANSCRIPT
![Page 1: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/1.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew
![Page 2: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/2.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew Basics
![Page 3: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/3.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Obligatory hype video!
![Page 4: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/4.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew…• is a service and toolkit for choreographing interactive spaces
• makes it easy to connect interactive things to one another
• was developed to support prototyping-driven design efforts
![Page 5: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/5.jpg)
Spacebrew at SFPC - Brett Renfer
Spacebrew is supported by a group of amazing people.
![Page 6: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/6.jpg)
Arduino Day - NYU ITP - Brett Renfer & Julio TerraRemote Presence Experiments Havas Madsci Lab
Whispering Stairs, Shu Yang Lin
Next Round Gustavo Faria, Bernardo Schorr and Stephanie Burgess
Forget Me Not Remote Flower Watering, Lucy Matchett, Joselyn McDonald, Nicole Messier
![Page 7: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/7.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
“Landing Page”, Mountain View, CA, 2010with LAB at Rockwell Group
![Page 8: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/8.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
JS
LibrariesSpacebrew aims to be implementation agnostic.We want to use the right tools at the right time!
![Page 9: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/9.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Why?• We’ve used a lot of “glue” languages/toolkits in the past, but there wasn’t one that was truly cross-platform/cross-toolkit.
• Wanted to build a toolkit with a low floor and a high ceiling: easy for speed prototypes, advanced enough to handle commercial applications.
![Page 10: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/10.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
client app
client app
client app
client app
Client-Server ModelEach client can feature one or more publishers and subscribers. The server can be hosted online or run on a local network (more on that later).
![Page 11: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/11.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
client app
client app
client app
client app
Client-Server ModelClients communicate with the server via WebSockets. All data is formatted as JSON
![Page 12: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/12.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Client-Server ModelThe server routes all publishers and subscribers. Routes can be edited via a switchboard-like interface
![Page 13: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/13.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Data TypesThree standard types allow for quick and easy routing. Custom types are also supported
= true or false
= 0-1023
= “some text”
![Page 14: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/14.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Publishers + SubscribersEach client announces its publishers and subscribers to the server when it launches
client app
Publishers: ...Subscribers: ...
![Page 15: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/15.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Publishers + SubscribersThis announcement includes the name and type of each, allowing for semantic relationships and automatic routing between different apps (respectively!)
client app
Publishers
Subscribers
CUSTOM
BOOLEAN
RANGE
RANGE
STRING
![Page 16: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/16.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Publishers + SubscribersNames of publishers and subscribers can be anything.We try to make them make some sort of sense…
client app
Publishers
Subscribers
“TEXT”
“MOVING”
“COLOR”
“TONE”
“POINT”
![Page 17: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/17.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
MessagesApps send Messages out on a publisher route. Each Message contains the name and value.
Messages of a custom type also include their type.
client app Name: “MOVING” Value: FALSE
![Page 18: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/18.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
MessagesApps receive Messages from the Spacebrew server on a subscribers route. Each Message contains the name and value matching a route in the app.
Messages of a custom type also include their type.
client appName: “TEXT” Value: “Hey!”
![Page 19: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/19.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Messages, Illustrated
client app A
client app B
App with boolean publisher “MOVING”
Route between A:”MOVING” and B:”BG ON”
App with boolean subscriber “BG ON”
![Page 20: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/20.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Messages, Illustrated
client app A
Name: “MOVING” Value: FALSE
Name: “BG ON” Value: FALSE
client app B
![Page 21: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/21.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Using Spacebrew
![Page 22: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/22.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew LibrariesEach Spacebrew library: • Connects to a Spacebrew server via WebSockets • Has an API to declare its publisher(s) and subscriber(s)
• Receives messages from Spacebrew and dispatches events accordingly
![Page 23: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/23.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew LibrariesConnecting to Spacebrew in each Library • Create a Spacebrew Object • Tell your object the IP or hostname of the Spacebrew server
• Declare any publishers and subscribers • Connect
![Page 24: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/24.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew + Processing• spacebrewP5 is a Spacebrew-supported library
• install the library fromspacebrewP5/dist/spacebrew to ~/Documents/Processing/libraries (make the folder if it doesn’t exist!)
• restart Processing if it was open
• open the spacebrew_base example to get started!
![Page 25: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/25.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Thinking About Apps• We try to silo apps whenever possible • Create specialized apps that are easy to re-use • Allows for multiple languages for each need • Quickly and easily move between machines/networks when necessary
• Allows for easy prototypes in the future!
![Page 26: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/26.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew + Javascript• spacebrew.js is a stand-alone script that can run in any browser that supports WebSockets
• this includes: Chrome (OS X, Windows, Android, iOS), Safari (OS X, iOS), Firefox, Opera, IE 10
• open the spacebrew slider example in your text editor
• open http://bit.ly/sbslide on your smartphone
• also try http://bit.ly/sbaccel
![Page 27: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/27.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew + Javascript• spacebrew.js uses query strings to dynamically pass in the name, server, and description:http://YOUR_APP.com/index.html?name=NAME&server=SERVER
• The first query string always starts with “?” and the rest with “&”. They follow the format &NAME=VALUE
• Any app that uses spacebrew.js can do this!
![Page 28: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/28.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew + openFrameworks• ofxSpacebrew connects to Spacebrew via ofxLibwebsockets
• once you have both installed, you can create ofxSpacebrew projects via the OF project generator
• let’s look at example_button
![Page 29: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/29.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Spacebrew + Arduino• Two routes:
• the easy road: use Processing + Serial or Firmata
• the road less travelled: Spacebrew Arduino libhttp://github.com/labatrockwell/spacebrew-arduino-library
• requires Arduino Ethernet shield • notoriously difficult to debug!
![Page 30: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/30.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Questions?
![Page 31: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/31.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Lunch O’Clock
![Page 32: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/32.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Custom Types
![Page 33: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/33.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Custom Types• Spacebrew supports arbitrary type names and data (anything that reads as valid JSON will work)
• Similar to built-in types, you can only route to matching types
• Example: “float” cannot route to “number”
![Page 34: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/34.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
![Page 35: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/35.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Example: Ultrabook Tree• Each input station sent a custom “bloom” object: • Which image (id) • Number of laptops • Radius • Relative position (x,y) • Velocity • Rotation
![Page 36: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/36.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Custom Type Demo 1• Break free of the tyranny of the int: let’s send some floats!
![Page 37: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/37.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Custom Types: Basics• Set up Spacebrew pub + sub as usual,but use any name (e.g. float)
• Add the onCustomMessage function to listen
• When you send, do two things: 1. Make sure you use your custom type! 2. Cast your custom data to a string
![Page 38: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/38.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Custom Type Demo 2• JSON in Processing
• Why JSON? • It’s a simple way to send arbitrary objects
• Spacebrew uses it, so all libs have some sort of JSON library included (if there isn’t one built in)
![Page 39: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/39.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Quick JSON primer• JSON is a simple way to write out objects • JSON is made up of name-value pairs • Names are strings (in quotes!) • Values can be numbers, strings, booleans, arrays, null (empty), or objects
![Page 40: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/40.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Quick JSON primer• { = start an object • } = end an object • : = between all names and their value • , = between all name-value pairs{ “x”:0, “y”:0 }
![Page 41: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/41.jpg)
Spacebrew Collab - Parsons D + T - Brett Renfer & Julio TerraSpacebrew Workshop - NYU ITP - Brett Renfer
Quick JSON primer{ "name":"cool object", "position":{ "x":0, "y":0 }, "candy I like":[ "twizzlers", "ginger snaps" ] }
![Page 42: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/42.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
You Got Served
![Page 43: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/43.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Running Your Own Server• Why?
• sandbox.spacebrew.cc is on the slowest AWS tier
• Running over the internet introduces some level of latency
• Running a local server OR a remote server allows a level of control: only people you choose can route/reroute, break your routes, etc
• Allows you to customize the server code if you choose!
![Page 44: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/44.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Running Your Own Server• How?
• Setup! Only needs to be done once
• Download and install nodejs: www.nodejs.org
• Install node dependencies:
• npm install ws • npm install forever-monitor
![Page 45: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/45.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Running Your Own Server• How?
• Run! What you’ll do every time:
• In terminal, cd to the spacebrew directory
• Run: node node_server_forever.js
![Page 46: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/46.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Running Your Own Server Online• How?
• If you want to set up your own remote server, we recommend this tutorial (by fellow ITPers!):https://vimeo.com/60001410
![Page 47: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/47.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Persistence• Another advantage of running your own server is you can use the persistent admin
• The persistent admin is a separate service that lets you edit, save, load, and persist routes
• It allows you to specify specific app routings:coolApp -> coolPub to lameApp -> lameSub
• It also allows for powerful wild card routings: .* -> coolPub to .* -> lameSub
• This routes any app that publishes “coolPub” to any other app that subscribes to “lameSub”
![Page 48: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/48.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Persistence• You can run the persistent admin from the spacebrew directory: node node_persistent_admin.js
• From the command line, you can list, add, remove, load, and save routes:
• list: ls
• add: add client1Name,pub,client2Name,sub • use .* to create a wildcard
• remove: remove [index] • you can find an index after add or by listing
• save / load (just that!) • load is called on start automatically
![Page 49: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/49.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Binary• A bleeding-edge feature of Spacebrew is sending binary data
• The sandbox server does not allow you to send binary data, but your own server does!
• Let’s check out the javascript and openFrameworks image examples
![Page 50: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/50.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
Admin
![Page 51: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/51.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
The Admin API• You don’t just have to use our web interface!
• Javascript, openFrameworks and Cinder (Processing soon) support the Admin API
• The Admin API subscribes to Spacebrew similar to a client, firing events each time a client connects/disconnects or changes its pub/sub map
• It allows you to view, edit, and add any and all routes in real time!
• This allows for apps like the Admin Randomizer from the Zip! Zap! Zow! exercise
![Page 52: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/52.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
The Admin API• Try it out: http://bit.ly/sbslider-admin
• Let’s look at the Admin API in Javascript
![Page 53: Spacebrew: The Overview](https://reader034.vdocuments.net/reader034/viewer/2022051414/55b570b2bb61ebcb508b4756/html5/thumbnails/53.jpg)
Spacebrew Workshop - NYU ITP - Brett Renfer
The End@robotconscience