stories from a
music-fueled distributed
streaming bender
PLAY
Slide 2
Slide 2 text
MUSIC
Slide 3
Slide 3 text
music keeps your
RIGHT
BRAIN
happy
LEFT
BRAIN
works
while your
Slide 4
Slide 4 text
my company is a pretty musical company
Slide 5
Slide 5 text
No content
Slide 6
Slide 6 text
WE BUILT
an employee-driven,
geographically-distributed,
multi-client, HTML5-based,
API-centric, bathroom-
enabled, buzzword-
embracing music server
Slide 7
Slide 7 text
THIS ISN’T AN AD
i hate talks like that
Slide 8
Slide 8 text
THIS IS ABOUT
building open source
Slide 9
Slide 9 text
THIS IS ABOUT
improving your company
Slide 10
Slide 10 text
TODAY:
what is play
company side project culture
doing open source real good
structured experimentation
stealing shit
Slide 11
Slide 11 text
@HOLMAN
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
we talkin’ about
WHAT
Slide 14
Slide 14 text
PLAY
a shared music server at github’s office
GITHUB.COM/PLAY/PLAY
Slide 15
Slide 15 text
MAC MINI
all of our music
QUEUE
songs, artists,
albums, stars
>
Slide 16
Slide 16 text
STEP ONE
get a potentially empty office
MARCH 2010
Slide 17
Slide 17 text
STEP TWO
get some big speakers
MAY 2010
Slide 18
Slide 18 text
STEP THREE
get work done
MAY 2010
Slide 19
Slide 19 text
MUSIC LEADS TO STORIES!
LIKE...
Slide 20
Slide 20 text
WHEN OUR
OFFICE GOT
MISTAKEN FOR
A NIGHTCLUB
BECAUSE YOU
CAN HEAR THE
SPEAKERS
THREE BLOCKS
AWAY
our neighbors hate us
Slide 21
Slide 21 text
WHEN NINE OF
US GOT TO CALL
MC HAMMER...
how did we get fired up?
by blasting hammertime in the
office all morning.
true story.
Slide 22
Slide 22 text
WHEN THE FIRE
DEPARTMENT
RUSHED TO THE
OFFICE BECAUSE
OUR SMOKE
MACHINE WENT
CRAZY...
what were we playing?
i don’t know but it
must have been one
hell of a song ARTIST’S RENDITION
Slide 23
Slide 23 text
WHEN THE FIRE
DEPARTMENT
RUSHED TO THE
OFFICE BECAUSE
OUR SMOKE
MACHINE WENT
CRAZY...
we don’t try to use
the smoke machine
anymore
ARTIST’S RENDITION
Slide 24
Slide 24 text
WHEN THE FIRE
DEPARTMENT
RUSHED TO THE
OFFICE BECAUSE
OUR SMOKE
MACHINE WENT
CRAZY...
also, are these kids dead?
ARTIST’S RENDITION
Slide 25
Slide 25 text
WHEN THE FIRE
DEPARTMENT
RUSHED TO THE
OFFICE BECAUSE
OUR SMOKE
MACHINE WENT
CRAZY...
also this kid definitely
set the place on fire
ARTIST’S RENDITION
Slide 26
Slide 26 text
WHEN THE FIRE
DEPARTMENT
RUSHED TO THE
OFFICE BECAUSE
OUR SMOKE
MACHINE WENT
CRAZY...
no seriously he
was like, laughing
last frame
ARTIST’S RENDITION
kid creeps me out
Slide 27
Slide 27 text
i was going somewhere with
this, i forget
Slide 28
Slide 28 text
ANYWAY,
MUSIC HAS BEEN
A FUN PART OF
GITHUB
Slide 29
Slide 29 text
WE’VE SINCE EXPANDED IT.
Slide 30
Slide 30 text
⽄
⽄
̇
̇
⽄
̇
APRIL 2012
Slide 31
Slide 31 text
WEB
queuing and searching
Slide 32
Slide 32 text
No content
Slide 33
Slide 33 text
WEB BACKEND
itunes, applescript, sinatra, redis, pusher
Slide 34
Slide 34 text
WEB FRONTEND
coffeescript, mustache, scss, pusher, html5
Slide 35
Slide 35 text
API
the web is just another client
Slide 36
Slide 36 text
SPEAKERS
airport express, music everywhere
>
Slide 37
Slide 37 text
60’S ROOM
>
Slide 38
Slide 38 text
⽄
̇
̇
Slide 39
Slide 39 text
⽄ ̇
POOL TABLE
>
Slide 40
Slide 40 text
⽄
̇
SITUATION ROOM
>
Slide 41
Slide 41 text
⽄
̇
MEN’S ROOM
>
Slide 42
Slide 42 text
No content
Slide 43
Slide 43 text
DON’T WANT MUSIC?
- we have private, quiet offices, too
- you have headphones
- or just don’t go to work today
Slide 44
Slide 44 text
STREAMING
music really everywhere
Slide 45
Slide 45 text
consume everywhere
CLIENTS
f
Slide 46
Slide 46 text
DISPLAYS
f
Slide 47
Slide 47 text
hubot play daft punk
hubot play next
hubot volume 75
hubot play something i’d like
f HUBOT CLIENT
hubot i like this song
Slide 48
Slide 48 text
f OS X CLIENT
Slide 49
Slide 49 text
f IPHONE CLIENT
Slide 50
Slide 50 text
f IPAD CLIENT
Slide 51
Slide 51 text
f WINDOWS CLIENT
Slide 52
Slide 52 text
f ANDROID CLIENT
Slide 53
Slide 53 text
LIVE DJ BOOTH
dj! spin that shit
~
Slide 54
Slide 54 text
~ LIVE DJ BOOTH
Slide 55
Slide 55 text
PAUSE PLAY
DJ
SWITCH STREAM TO CONTROLLER
AUTO-RECORD DJ SET
TIMESTAMP & LABEL SET
IMPORT BACK INTO PLAY
Slide 56
Slide 56 text
MOST OF US HAVEN’T DJED BEFORE
IT’S LIKE PROGRAMMING BUT FRESH
AND NEW
EVERYONE FEELS LIKE A GENIUS FOR MIXING
“ALL MY FRIENDS” AND “WE ARE YOUR
FRIENDS” FOR THE 462TH TIME
guise it’s like two songs about friends whoaaa
Slide 57
Slide 57 text
ECOSYSTEM
lots got built, lots to build
Slide 58
Slide 58 text
together, right now
COME
Slide 59
Slide 59 text
PLAY
builds culture
Slide 60
Slide 60 text
KEEP YOUR
EMPLOYEES
HAPPY
Slide 61
Slide 61 text
A SOURCE OF UNHAPPINESS?
BEING EXCLUSIONARY
Slide 62
Slide 62 text
THIS IS ESPECIALLY DIFFICULT FOR
REMOTE WORKERS
Slide 63
Slide 63 text
PLAY IS ONE WAY WE GET GITHUBBERS
SHARING EXPERIENCES
Slide 64
Slide 64 text
PLAY HAS BEEN STREAMED:
ON SAN FRANCISCO MUNI
IN SOUTH AFRICA OVER MOBILE TETHERING
IN VIRGINIA IN A CAR OVER BLUETOOTH
IN JAPAN ON A HIGH-SPEED TRAIN
Slide 65
Slide 65 text
THIS IS HOW WE KNOW WHO
LOVES GARTH BROOKS
(scott)
Slide 66
Slide 66 text
THIS IS HOW WE KNOW WHO
HATES GARTH BROOKS
(everyone else)
Slide 67
Slide 67 text
THIS IS HOW WE
SHARE COMMON EXPERIENCES
Slide 68
Slide 68 text
SHARED SIDE PROJECT
build clients, learn new techniques, work
with coworkers you wouldn’t normally
work with
Slide 69
Slide 69 text
GITHUB SIDE PROJECTS
we build things like play and hubot to
keep everyone excited
sometimes even “fun” work blows
encourage a culture of building
USE GITHUB
to find free slave labor
open new issues
add todos
detail your plans
Slide 76
Slide 76 text
PEOPLE WILL SURPRISE YOU
and build things you didn’t expect. it’s awesome.
Slide 77
Slide 77 text
CONTRIBUTORS
helped shape play without being asked
Slide 78
Slide 78 text
detail your setup
BUILD A
KILLER
README
readme-driven development
explain your plans
Slide 79
Slide 79 text
setup development fixtures
BUILD A
KILLER
BOOTSTRAP
install with a one-liner
dependency management
Slide 80
Slide 80 text
say thanks, help them redirect
BUILD A
NON-KILLER
ATTITUDE
sometimes weird features happen
don’t fret, don’t shoot down
Slide 81
Slide 81 text
EXPERIMENT
Slide 82
Slide 82 text
MAKE A PROJECT
specifically to fuck around with new things
Slide 83
Slide 83 text
HERE’S WHAT ISN’T IN PLAY
foundation
backbone.js
ember.js
WE GAINED A LOT
FROM TRYING A LOT
macruby
Slide 84
Slide 84 text
GO OUT OF YOUR WAY TO
TRY NEW TECHNIQUES
Slide 85
Slide 85 text
HERE’S WHAT’S NEW IN PLAY:
WEB AS API CLIENT
“twitter-style”
all clients use the endpoints same as web
more stable, more dogfooding
Slide 86
Slide 86 text
HERE’S WHAT’S NEW IN PLAY:
COCOA/RUBY BRIDGES
subscribe to itunes in cocoa
push over pusher
realtime clients (including web)
Slide 87
Slide 87 text
HERE’S WHAT’S NEW IN PLAY:
LIVE DJ SETS
applescript agains gets us around GUIs
Slide 88
Slide 88 text
HERE’S WHAT’S NEW IN PLAY:
NATIVE OS TECHNIQUES
data-first UI design on windows, mac
ios/mac library sharing
Slide 89
Slide 89 text
WHEN THE WHOLE PURPOSE IS
EXPERIMENTATION,
YOU CAN TAKE RISKS
Slide 90
Slide 90 text
WHAT WERE RISKS THEN BECOME
NORMAL PRACTICES
AND YOU’RE BETTER OFF
Slide 91
Slide 91 text
STEAL
shit
Slide 92
Slide 92 text
PLAY HAS
LOTS OF MOVING PARTS
Slide 93
Slide 93 text
PLAY
( MAC MINI )
AIRFOIL
NICECAST
PUSHER
>
RESTROOMS
>
POOL TABLE
f
OS X CLIENT
WINDOWS CLIENT
IPHONE CLIENT
c
CONTROLLED BY CAMPFIRE
( CHAT ROOM )
IPAD CLIENT
TV SCREENS
ANDROID CLIENT
>
60’S ROOM
>
DESKS
~ LIVE DJ BOOTH
Slide 94
Slide 94 text
GO LEVERAGE EXISTING THINGS
Slide 95
Slide 95 text
INTERNET STREAMING
AIRPORT STREAMING
MUSIC STATE
nicecast
airfoil
itunes
DJ SOFTWARE
traktor
Slide 96
Slide 96 text
BUILDING ALL THAT
OURSELVES WOULD
HAVE SUCKED
Slide 97
Slide 97 text
PLAY 1.0 MANAGED PLAY STATE
TURNS OUT, DIFFICULT PROBLEM
reliability, simplicity
PLAY-NEXT LETS ITUNES DJ HANDLE IT
free itunes client browsing, remote.app, queueing
redis, separate player process
Slide 98
Slide 98 text
GUIs ARE HORRIBLE TO MANAGE
completely breaks the bootstrap goal
they’re great until we can replace them
BUT:
Slide 99
Slide 99 text
EMBRACE HACKY SOLUTIONS
THEY’RE THE PINNACLE OF PROGRAMMING