adventurous merb

86
hi

Upload: matt-todd

Post on 18-May-2015

2.435 views

Category:

Technology


0 download

DESCRIPTION

My talk at MerbCamp in San Diego. I'll apologize up front. ;)

TRANSCRIPT

Page 1: Adventurous Merb

hi

Page 2: Adventurous Merb

ExpandingOur Vision With

MERB

Page 3: Adventurous Merb

Advanced

MERB

Page 4: Adventurous Merb

Advanced

MERB

Page 5: Adventurous Merb

Adventurous

MERB

Page 6: Adventurous Merb

INTRODUCTION

Page 7: Adventurous Merb

Matt Todd

Page 8: Adventurous Merb

mtoddhttp://github.com/mtodd/

Halcyon

Highgroove Studios

Developer & OSS Architecthttp://highgroove.com

Page 9: Adventurous Merb
Page 10: Adventurous Merb

SWEETNECTAROF THEGODS

Page 11: Adventurous Merb

EXPECTATIONS

Page 12: Adventurous Merb

I AM NOTAN EXPERT

Page 13: Adventurous Merb

WARNING

code for:PROBLEMS& examples

Page 14: Adventurous Merb

lack of imagination

Page 15: Adventurous Merb
Page 16: Adventurous Merb

TheForeground

Page 17: Adventurous Merb

“forefront, prominent or important position”

Page 18: Adventurous Merb

meh

Page 19: Adventurous Merb
Page 20: Adventurous Merb

not as interestingas the background

Page 21: Adventurous Merb
Page 22: Adventurous Merb

:o

Page 23: Adventurous Merb
Page 24: Adventurous Merb

TheBackground

Page 25: Adventurous Merb

DBsCachesBackground ProcessesWeb ServicesEmbedded ComponentsDistributed Grid/Mesh AppsAJAXRack

Page 26: Adventurous Merb

DBs xCaches xBackground Processes √Web Services √Embedded Components √Distributed Grid/Mesh Apps √AJAX xRack √

Page 27: Adventurous Merb

BackgroundProcesses

Page 28: Adventurous Merb

rake tasks

Page 29: Adventurous Merb

namespace(:nodes) do desc "Purge inactive nodes." task :purge => [:merb_env] do Node.inactive.purge end desc "Scan for nodes" task :scan => [:merb_env] do

Node.detach_and_scan(Node.first) end end

Page 30: Adventurous Merb

render_then_callrun_later

Page 31: Adventurous Merb

render_then_call do Node.inactive.purgeend

### OR

run_later do Node.scan(Node.first)endrender

Page 32: Adventurous Merb

we’ll talk later

Page 33: Adventurous Merb

WebServices

Page 34: Adventurous Merb

“software system designed to support interoperable

machine-to-machine interaction over a network”

Page 35: Adventurous Merb

a serviceover the webjust for apps

Page 36: Adventurous Merb

JSON isREALLYAwesome

Page 37: Adventurous Merb

JSON isFUCKINGAwesome

Page 38: Adventurous Merb

{“foo”:“bar”}

Page 39: Adventurous Merb

RESTful

Page 40: Adventurous Merb

/objects.json/objects.json/objects/1.json/objects/1.json/objects/1.json

GETPUTGETDELETEPOST

indexcreateshowdeleteupdate

Page 41: Adventurous Merb

Merb’s Way

Page 42: Adventurous Merb

providesrenderdisplay

Page 43: Adventurous Merb

provides

Page 44: Adventurous Merb

class Posts < Application provides :json def show @post = Post.get(params[:id]) display @post endend

1.

Page 45: Adventurous Merb

GIMME XML!

NO BITCH!

Page 46: Adventurous Merb

GET /posts/1.xml

406 Not Acceptable

Page 47: Adventurous Merb

display

Page 48: Adventurous Merb

class Posts < Application provides :json def show @post = Post.get(params[:id]) display @post endend

1.

2.

Page 49: Adventurous Merb

respond_to do |format| format.html { render } format.json { @post.to_json }end

case content_typewhen :html renderwhen :json display @postend

RailsMerbvs

Page 50: Adventurous Merb
Page 51: Adventurous Merb

even better:

Page 52: Adventurous Merb

provides :json, :xml@post = Post.get(params[:id])display @post

renders XML, JSON, and HTML

AUTOMATICALLYfuck yeah!

Page 53: Adventurous Merb

EmbeddedComponents

Page 54: Adventurous Merb
Page 55: Adventurous Merb

<script type=“text/javascript”src=“/comments.js”></script>

Page 56: Adventurous Merb

document.write( ‘<div id=“comments”></div>’);

$(function(){ <% @comments.each do |c| c = $(“<p><%=c.body%></p>”); c.attr(‘id’,“comment-<%=c.id%>”); c.appendTo(‘#comments’); <% end %>});

Page 58: Adventurous Merb

glorified JS& AJAX

Page 59: Adventurous Merb

DistributedGrid/Mesh

Apps

Page 60: Adventurous Merb
Page 61: Adventurous Merb
Page 62: Adventurous Merb

M

S

S

SS

S

Centralized

Page 63: Adventurous Merb

N

N

NN

N

Distributed

Page 64: Adventurous Merb

M

S

N

slave

master

node

{

Page 65: Adventurous Merb

`

N

Foreground

Background

/sites

[{id:1,url:“http://github.com/”,created_at:...},...]/sites.json

[{id:1,rating:1,created_at:...},...]/sites/n/reports.json

Page 67: Adventurous Merb

Rack

Page 68: Adventurous Merb
Page 69: Adventurous Merb
Page 70: Adventurous Merb
Page 71: Adventurous Merb
Page 72: Adventurous Merb
Page 73: Adventurous Merb
Page 74: Adventurous Merb
Page 75: Adventurous Merb
Page 76: Adventurous Merb

AWESOME

Page 77: Adventurous Merb

Framework’sFramework

Page 78: Adventurous Merb

Mongrel

Merb

Rack

Middleware

Request

Response

Page 79: Adventurous Merb

mongrelthinebbwebricketc

Page 80: Adventurous Merb

class YourApp def call(env) [ 200, {‘Content-Type’=>‘text/plain’}, “OK” ] endend

Page 81: Adventurous Merb

Middleware

Page 82: Adventurous Merb

mini appsmodifies envavoid passing through

Page 83: Adventurous Merb

class RackMiddlewareExample def initialize(app) @app = app end def call(env) # voodoo @app.call(env) endend

Page 85: Adventurous Merb

Fin.

Page 86: Adventurous Merb

HAHA