Slide 1

Slide 1 text

Rails with Node.js a Reese’s Moment Monday, September 26, 11

Slide 2

Slide 2 text

Me Monday, September 26, 11

Slide 3

Slide 3 text

In a Nutshell Monday, September 26, 11

Slide 4

Slide 4 text

In a Nutshell • Framework for building network apps Monday, September 26, 11

Slide 5

Slide 5 text

In a Nutshell • Framework for building network apps • First class evented I/O Monday, September 26, 11

Slide 6

Slide 6 text

In a Nutshell • Framework for building network apps • First class evented I/O • Built on top of V8 Monday, September 26, 11

Slide 7

Slide 7 text

What it ain’t Monday, September 26, 11

Slide 8

Slide 8 text

What it ain’t • NOT a browser side Javascript library Monday, September 26, 11

Slide 9

Slide 9 text

What it ain’t • NOT a browser side Javascript library • NOT a full fledged webapp framework Monday, September 26, 11

Slide 10

Slide 10 text

A Simple Example Monday, September 26, 11

Slide 11

Slide 11 text

A Simple Example (1..3).each do |i| contents = File.read('presentation.key') puts "#{i}. Finished reading file" puts "#{i}. doing something important..." end Monday, September 26, 11

Slide 12

Slide 12 text

A Simple Example 1. Finished reading file 1. doing something important... 2. Finished reading file 2. doing something important... 3. Finished reading file 3. doing something important... Monday, September 26, 11

Slide 13

Slide 13 text

A Simple Example var fs = require('fs'); for (var i=1; i<=3; i++) { fs.readFile('presentation.key', function(err, data) { console.log(i + ". Finished reading file"); }); console.log(i + ". doing something important..."); } Monday, September 26, 11

Slide 14

Slide 14 text

A Simple Example var fs = require('fs'); for (var i=1; i<=3; i++) { fs.readFile('presentation.key', function(err, data) { console.log(i + ". Finished reading file"); }); console.log(i + ". doing something important..."); } Monday, September 26, 11

Slide 15

Slide 15 text

A Simple Example 1. doing something important... 2. doing something important... 3. doing something important... 4. Finished reading file 4. Finished reading file 4. Finished reading file Monday, September 26, 11

Slide 16

Slide 16 text

Trust Callbacks Monday, September 26, 11

Slide 17

Slide 17 text

Trust Callbacks • Async programming is trickier Monday, September 26, 11

Slide 18

Slide 18 text

Trust Callbacks • Async programming is trickier • ...But it doesn’t block your other code Monday, September 26, 11

Slide 19

Slide 19 text

Go to Jail “Node jails you into this evented- style programming. You can’t do things in a blocking way, you can’t write slow programs.” - Ryan Dahl Monday, September 26, 11

Slide 20

Slide 20 text

Some Real Examples Monday, September 26, 11

Slide 21

Slide 21 text

Some Real Examples • Real-time dashboards and analytics Monday, September 26, 11

Slide 22

Slide 22 text

Some Real Examples • Real-time dashboards and analytics • Push notifications Monday, September 26, 11

Slide 23

Slide 23 text

Some Real Examples • Real-time dashboards and analytics • Push notifications • Fast file uploads Monday, September 26, 11

Slide 24

Slide 24 text

Dashboards + Analytics https://github.com/etsy/statsd Monday, September 26, 11

Slide 25

Slide 25 text

Dashboards + Analytics http://hummingbirdstats.com/ Monday, September 26, 11

Slide 26

Slide 26 text

Push Notifications https://github.com/mape/node-wargames Monday, September 26, 11

Slide 27

Slide 27 text

File Uploaders Monday, September 26, 11

Slide 28

Slide 28 text

File Uploaders • Slow to parse the encoded upload body Monday, September 26, 11

Slide 29

Slide 29 text

File Uploaders • Slow to parse the encoded upload body • Post-processing & background jobs Monday, September 26, 11

Slide 30

Slide 30 text

File Uploaders require 'sinatra' # curl -F "[email protected]" http://localhost:4567/upload post '/upload' do # already written to params[:data][:tempfile] "" end Monday, September 26, 11

Slide 31

Slide 31 text

Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1 Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Monday, September 26, 11

Slide 32

Slide 32 text

Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1 Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Monday, September 26, 11

Slide 33

Slide 33 text

Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1 Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11

Slide 34

Slide 34 text

Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1 Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11

Slide 35

Slide 35 text

Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1 Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11

Slide 36

Slide 36 text

Upload Benchmarks MRI Ruby 1.8.7 and 1.9.2 with Sinatra 1.2.1 Node 0.5.0 2.66 GHz i7 2000 iterations on a 295 byte file Ruby 67 minutes 3.5 seconds Node 23.9 seconds Monday, September 26, 11

Slide 37

Slide 37 text

No Silver Bullet Monday, September 26, 11

Slide 38

Slide 38 text

No Silver Bullet • Not a replacement for Ruby Monday, September 26, 11

Slide 39

Slide 39 text

No Silver Bullet • Not a replacement for Ruby • Use where it makes sense Monday, September 26, 11

Slide 40

Slide 40 text

No Silver Bullet • Not a replacement for Ruby • Use where it makes sense • Doesn’t guarantee scalability Monday, September 26, 11

Slide 41

Slide 41 text

Wrapup Monday, September 26, 11

Slide 42

Slide 42 text

Wrapup • Server side Javascript rules! Monday, September 26, 11

Slide 43

Slide 43 text

Wrapup • Server side Javascript rules! • Event driven style of programming Monday, September 26, 11

Slide 44

Slide 44 text

Wrapup • Server side Javascript rules! • Event driven style of programming • Good for specific problems Monday, September 26, 11

Slide 45

Slide 45 text

Thanks! Questions? [email protected] @whatcodecraves http://whatcodecraves.com Monday, September 26, 11