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.

Zach Holman

April 22, 2012
Tweet

More Decks by Zach Holman

Other Decks in Programming

Transcript

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

    source real good structured experimentation stealing shit
  2. WHEN OUR OFFICE GOT MISTAKEN FOR A NIGHTCLUB BECAUSE YOU

    CAN HEAR THE SPEAKERS THREE BLOCKS AWAY our neighbors hate us
  3. 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.
  4. 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
  5. 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
  6. WHEN THE FIRE DEPARTMENT RUSHED TO THE OFFICE BECAUSE OUR

    SMOKE MACHINE WENT CRAZY... also, are these kids dead? ARTIST’S RENDITION
  7. 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
  8. 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
  9. DON’T WANT MUSIC? - we have private, quiet offices, too

    - you have headphones - or just don’t go to work today
  10. hubot play daft punk hubot play next hubot volume 75

    hubot play something i’d like f HUBOT CLIENT hubot i like this song
  11. PAUSE PLAY DJ SWITCH STREAM TO CONTROLLER AUTO-RECORD DJ SET

    TIMESTAMP & LABEL SET IMPORT BACK INTO PLAY
  12. 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
  13. 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
  14. SHARED SIDE PROJECT build clients, learn new techniques, work with

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

    to keep everyone excited sometimes even “fun” work blows encourage a culture of building
  16. say thanks, help them redirect BUILD A NON-KILLER ATTITUDE sometimes

    weird features happen don’t fret, don’t shoot down
  17. 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
  18. HERE’S WHAT’S NEW IN PLAY: COCOA/RUBY BRIDGES subscribe to itunes

    in cocoa push over pusher realtime clients (including web)
  19. HERE’S WHAT’S NEW IN PLAY: NATIVE OS TECHNIQUES data-first UI

    design on windows, mac ios/mac library sharing
  20. 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
  21. 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
  22. GUIs ARE HORRIBLE TO MANAGE completely breaks the bootstrap goal

    they’re great until we can replace them BUT: