Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Stories From a Music-Fueled Distributed Streaming Bender

Stories From a Music-Fueled Distributed Streaming Bender

So we built an employee-driven, geographically-distributed, multi-client, HTML5-based, API-centric, bathroom-enabled, buzzword-embracing music server for the GitHub offices. It's been a fun project to explore company culture, CSS frameworks, JavaScript methodologies, native clients, outside contributions, and to discover who gets really angry when Garth Brooks starts singing on the speakers. It's one of those projects that ended up far more nutty than the original idea. Come steal some ideas for your own projects.

78b475797a14c84799063c7cd073962f?s=128

Zach Holman

April 22, 2012
Tweet

Transcript

  1. stories from a music-fueled distributed streaming bender PLAY

  2. MUSIC

  3. music keeps your RIGHT BRAIN happy LEFT BRAIN works while

    your
  4. my company is a pretty musical company

  5. None
  6. WE BUILT an employee-driven, geographically-distributed, multi-client, HTML5-based, API-centric, bathroom- enabled,

    buzzword- embracing music server
  7. THIS ISN’T AN AD i hate talks like that

  8. THIS IS ABOUT building open source

  9. THIS IS ABOUT improving your company

  10. TODAY: what is play company side project culture doing open

    source real good structured experimentation stealing shit
  11. @HOLMAN

  12. None
  13. we talkin’ about WHAT

  14. PLAY a shared music server at github’s office GITHUB.COM/PLAY/PLAY

  15. MAC MINI all of our music QUEUE songs, artists, albums,

    stars >
  16. STEP ONE get a potentially empty office MARCH 2010

  17. STEP TWO get some big speakers MAY 2010

  18. STEP THREE get work done MAY 2010

  19. MUSIC LEADS TO STORIES! LIKE...

  20. WHEN OUR OFFICE GOT MISTAKEN FOR A NIGHTCLUB BECAUSE YOU

    CAN HEAR THE SPEAKERS THREE BLOCKS AWAY our neighbors hate us
  21. 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.
  22. 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
  23. 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
  24. WHEN THE FIRE DEPARTMENT RUSHED TO THE OFFICE BECAUSE OUR

    SMOKE MACHINE WENT CRAZY... also, are these kids dead? ARTIST’S RENDITION
  25. 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
  26. 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
  27. i was going somewhere with this, i forget

  28. ANYWAY, MUSIC HAS BEEN A FUN PART OF GITHUB

  29. WE’VE SINCE EXPANDED IT.

  30. ⽄ ⽄ ̇ ̇ ⽄ ̇ APRIL 2012

  31. WEB queuing and searching

  32. None
  33. WEB BACKEND itunes, applescript, sinatra, redis, pusher

  34. WEB FRONTEND coffeescript, mustache, scss, pusher, html5

  35. API the web is just another client

  36. SPEAKERS airport express, music everywhere >

  37. 60’S ROOM >

  38. ⽄ ̇ ̇

  39. ⽄ ̇ POOL TABLE >

  40. ⽄ ̇ SITUATION ROOM >

  41. ⽄ ̇ MEN’S ROOM >

  42. None
  43. DON’T WANT MUSIC? - we have private, quiet offices, too

    - you have headphones - or just don’t go to work today
  44. STREAMING music really everywhere

  45. consume everywhere CLIENTS f

  46. DISPLAYS f

  47. hubot play daft punk hubot play next hubot volume 75

    hubot play something i’d like f HUBOT CLIENT hubot i like this song
  48. f OS X CLIENT

  49. f IPHONE CLIENT

  50. f IPAD CLIENT

  51. f WINDOWS CLIENT

  52. f ANDROID CLIENT

  53. LIVE DJ BOOTH dj! spin that shit ~

  54. ~ LIVE DJ BOOTH

  55. PAUSE PLAY DJ SWITCH STREAM TO CONTROLLER AUTO-RECORD DJ SET

    TIMESTAMP & LABEL SET IMPORT BACK INTO PLAY
  56. 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
  57. ECOSYSTEM lots got built, lots to build

  58. together, right now COME

  59. PLAY builds culture

  60. KEEP YOUR EMPLOYEES HAPPY

  61. A SOURCE OF UNHAPPINESS? BEING EXCLUSIONARY

  62. THIS IS ESPECIALLY DIFFICULT FOR REMOTE WORKERS

  63. PLAY IS ONE WAY WE GET GITHUBBERS SHARING EXPERIENCES

  64. 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
  65. THIS IS HOW WE KNOW WHO LOVES GARTH BROOKS (scott)

  66. THIS IS HOW WE KNOW WHO HATES GARTH BROOKS (everyone

    else)
  67. THIS IS HOW WE SHARE COMMON EXPERIENCES

  68. SHARED SIDE PROJECT build clients, learn new techniques, work with

    coworkers you wouldn’t normally work with
  69. GITHUB SIDE PROJECTS we build things like play and hubot

    to keep everyone excited sometimes even “fun” work blows encourage a culture of building
  70. FIND SOMETHING YOU CAN ALL HACK ON TOGETHER

  71. collaborate and listen STOP

  72. BUILD SOCIALLY that means be a good teammate

  73. ZOMG TELL EVERYONE EVERYTHING README INLINE DOCUMENTATION CLEAN TESTS LONG-FORM

    DOCUMENTATION OPEN ISSUES
  74. PLAY WAS DISCOVERED months before it shipped

  75. USE GITHUB to find free slave labor open new issues

    add todos detail your plans
  76. PEOPLE WILL SURPRISE YOU and build things you didn’t expect.

    it’s awesome.
  77. CONTRIBUTORS helped shape play without being asked

  78. detail your setup BUILD A KILLER README readme-driven development explain

    your plans
  79. setup development fixtures BUILD A KILLER BOOTSTRAP install with a

    one-liner dependency management
  80. say thanks, help them redirect BUILD A NON-KILLER ATTITUDE sometimes

    weird features happen don’t fret, don’t shoot down
  81. EXPERIMENT

  82. MAKE A PROJECT specifically to fuck around with new things

  83. HERE’S WHAT ISN’T IN PLAY foundation backbone.js ember.js WE GAINED

    A LOT FROM TRYING A LOT macruby
  84. GO OUT OF YOUR WAY TO TRY NEW TECHNIQUES

  85. 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
  86. HERE’S WHAT’S NEW IN PLAY: COCOA/RUBY BRIDGES subscribe to itunes

    in cocoa push over pusher realtime clients (including web)
  87. HERE’S WHAT’S NEW IN PLAY: LIVE DJ SETS applescript agains

    gets us around GUIs
  88. HERE’S WHAT’S NEW IN PLAY: NATIVE OS TECHNIQUES data-first UI

    design on windows, mac ios/mac library sharing
  89. WHEN THE WHOLE PURPOSE IS EXPERIMENTATION, YOU CAN TAKE RISKS

  90. WHAT WERE RISKS THEN BECOME NORMAL PRACTICES AND YOU’RE BETTER

    OFF
  91. STEAL shit

  92. PLAY HAS LOTS OF MOVING PARTS

  93. 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
  94. GO LEVERAGE EXISTING THINGS

  95. INTERNET STREAMING AIRPORT STREAMING MUSIC STATE nicecast airfoil itunes DJ

    SOFTWARE traktor
  96. BUILDING ALL THAT OURSELVES WOULD HAVE SUCKED

  97. 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
  98. GUIs ARE HORRIBLE TO MANAGE completely breaks the bootstrap goal

    they’re great until we can replace them BUT:
  99. EMBRACE HACKY SOLUTIONS THEY’RE THE PINNACLE OF PROGRAMMING

  100. PLAY

  101. PLAY NOT WITH MY PROJECT, PLAY WITH YOUR PROJECT

  102. PLAY EXPERIMENT COLLABORATE

  103. PLAY GITHUB.COM/PLAY

  104. THANKS

  105. None
  106. ZACH HOLMAN @HOLMAN