Top Banner
Remote Media Player A Tale of a Javascript Based Application By Assaf Gannon
38

Writing a Fullstack Application with Javascript - Remote media player

May 27, 2015

Download

Technology

Tikal Knowledge

Writing apps should be fun. This is a statement I try to keep in mind when approaching any application development. When I first realized that a full stack of Javascript can be used to create an application I was very happy, since for me coding in Javascript is a lot of fun. I was soon quite eager to neglect the traditional Java server-side + Javascript client, giving up the Java server side "bliss" and the constant context switching, in favor of a full stack of Javascript whenever I could.

For the past 2+ years I have been developing a variety of applications using a pure JS stack: Games, Forex trading middleware, CRM, CMS, sophisticated proxies, and various utilities. I must admit my productivity has increased dramatically and the time-to-market of each and every project was a fraction of what it would have been using traditional Java based server side infra-structure.

On October 29th 2013 I gave a talk at the "Javascript.everywhere" meetup event, in which I presented the development route of Youtube Remote Control Application with a "slave" player using Javascript stack all over (NodeJS, Socket.IO, ExpressJS, AngularJS, MongoDB). I'm pleased to share the presentation

- See more at: http://www.tikalk.com/js/writing-fullstack-application-javascript#sthash.IjFNbQJ2.dpuf
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Writing a Fullstack Application with Javascript - Remote media player

Remote Media Player

A Tale of a Javascript Based Application

By Assaf Gannon

Page 2: Writing a Fullstack Application with Javascript - Remote media player

The Need Me Ella Ofri

Tom & Jerry on Youtube

Page 3: Writing a Fullstack Application with Javascript - Remote media player

The Solution That’s  Awesome!

Page 4: Writing a Fullstack Application with Javascript - Remote media player

Basic Application Layout

Client App (Controller)

Server

Client App (Player)

REST  API Web  Sockets

DB

JSON Micro Services

expressjs

Page 5: Writing a Fullstack Application with Javascript - Remote media player

The Ingredients •  2 Client Apps –  Controller App –  Player App

•  1 Server - Express –  REST API –  Push Notifications

•  1 DB for storage

Page 6: Writing a Fullstack Application with Javascript - Remote media player

Are we good to go?

•  Greatest idea EVER?

•  Technology stack to support it?

•  Faint concept of usability?

Page 7: Writing a Fullstack Application with Javascript - Remote media player

Scaffolding

And ta-da…

Page 8: Writing a Fullstack Application with Javascript - Remote media player

Scaffold Result Express Angular Project Angular App

Page 9: Writing a Fullstack Application with Javascript - Remote media player

Getting Started •  First Flow - Search Youtube •  Steps:

1.  Basic client view with search box

2.  Server “search” API

3.  Youtube micro service

4.  Display results on client

Page 10: Writing a Fullstack Application with Javascript - Remote media player

Client – Server (REST Communication)

Page 11: Writing a Fullstack Application with Javascript - Remote media player

1. Basic client view with search box

Page 12: Writing a Fullstack Application with Javascript - Remote media player

2. Server “search” API

Page 13: Writing a Fullstack Application with Javascript - Remote media player

3. Youtube Micro Service Youtube API

Configurations

Module Definition

Page 14: Writing a Fullstack Application with Javascript - Remote media player

4. Display results on client

Page 15: Writing a Fullstack Application with Javascript - Remote media player

What’s Next

1.  Create a basic player

2.  Pair the player with the remote

3.  Send a “Play” command to the player

Page 16: Writing a Fullstack Application with Javascript - Remote media player

The Player

Page 17: Writing a Fullstack Application with Javascript - Remote media player

Pairing Strategy •  Options: – Automatic Peer Discovery – User Based Pairing – Manual Pairing

אבאאאא!!!

Page 18: Writing a Fullstack Application with Javascript - Remote media player

Manual Pairing

Page 19: Writing a Fullstack Application with Javascript - Remote media player

Manual Pairing 1.  Player  is  assigned  a  key  

         

2.  Remote  Control  stores  the  key  and  passes  it  with  every  acFon  request

Page 20: Writing a Fullstack Application with Javascript - Remote media player

Introducing: Socket.io •  Provides the most capable transport: – WebSocket – Flash Socket – AJAX long polling – AJAX Multipart Streaming – Forever Iframe – JSONP Polling

•  Provides Client Side library

Page 21: Writing a Fullstack Application with Javascript - Remote media player

Assign a key to the player

Page 22: Writing a Fullstack Application with Javascript - Remote media player

Store the key on the player

Page 23: Writing a Fullstack Application with Javascript - Remote media player

Complete the Pairing

Page 24: Writing a Fullstack Application with Javascript - Remote media player

Almost Done.. Complete the loop: Send A “Play” command from the remote control to the player

Page 25: Writing a Fullstack Application with Javascript - Remote media player

“Play” Sequence

Page 26: Writing a Fullstack Application with Javascript - Remote media player

Some more code… Remote Controller

Express Server

Player

Page 27: Writing a Fullstack Application with Javascript - Remote media player

Best Dad EVER!!!

Page 28: Writing a Fullstack Application with Javascript - Remote media player

Going Forward: Adding Server-Side persistency

Lots of features require persistency: •  Recently played •  Saving Favorites •  Creating play lists •  Users Management •  Scheduling operations •  Gathering statistics •  Suggestions engine

Page 29: Writing a Fullstack Application with Javascript - Remote media player

Add To Favorites Client -> Express -> Playlist Micro Service -> Persistence (MongoDB)

Page 30: Writing a Fullstack Application with Javascript - Remote media player

The “Playlist“ service •  The data structure: •  Playlists “Table” (AKA Collection):

{ _id: user-id, name: playlist-name, media: [{mediaType: media-type, mediaId: XX}]

}

Page 31: Writing a Fullstack Application with Javascript - Remote media player

Introducing: MongoDB •  Document based NoSQL database •  Very easy to get started •  Uses Javascript internally for

operations such as Map/Reduce •  Shell is based on V8 engine – runs js

files. •  Good hosted solutions (with free tier)

Page 32: Writing a Fullstack Application with Javascript - Remote media player

Adding MongoDB •  My favorite: MongoJS – hIps://github.com/mafintosh/mongojs – Uses same syntax as the mongo-cli – Wraps the native driver

Page 33: Writing a Fullstack Application with Javascript - Remote media player

Persist / Query Flow

Page 34: Writing a Fullstack Application with Javascript - Remote media player

The “Playlist“ Micro Service

Page 35: Writing a Fullstack Application with Javascript - Remote media player

Add To Favorites API  

Page 36: Writing a Fullstack Application with Javascript - Remote media player

Tips and Tricks •  Keep the server

stateless •  Consider cloud

(managed) Solutions: –  AppFog –  Nodejitsu, –  Heroku –  MongoHQ, –  MongoLab, –  AWS

•  Use a Node process per core

•  Use a Load Balancing proxy

•  Nginx & HAProxy support WebSocket

Page 37: Writing a Fullstack Application with Javascript - Remote media player

Conclusion

Javascript based applications are : – Easy to set up – Easy to enhance (feature iterations) – Easy to scale (out & up) – Feature rich – Easy to deploy – Most important: It’s Fun!

Page 38: Writing a Fullstack Application with Javascript - Remote media player

Thanks for sticking around!

Assaf  Gannon  [email protected]