MeteorMeteorMeteorMeteor
Next Generation Web DevelopmentNext Generation Web DevelopmentNext Generation Web DevelopmentNext Generation Web Development
Lets check some historyLets check some history
Why next generation?Why next generation?
HistoryHistory
HistoryHistory
HistoryHistory
HistoryHistory
HistoryHistory
ArchitectureArchitecture
ArchitectureArchitecture
WebSockets
Fibers
Scaling Real-Time MongoDB queries (v0.7)
Full reactive stack: Client <—> Server <—> DB
Javascript only
Database Everywhere
So what is Meteor?So what is Meteor?
Wait, what about Wait, what about security???security???
AUTOPUBLISH
INSECURE
Wait, what about Wait, what about security???security???
$ curl https://install.meteor.com | /bin/sh
$ meteor create myapp
$ cd myapp
$ meteor
=> Meteor server running on: http://localhost:3000/
$ meteor deploy myapp.meteor.com
How it works?How it works?
if (Meteor.isServer) {
…
}
if (Meteor.isClient) {
…
}
How it works?How it works?
F****** long fileF****** long file
my_project
server (server code)
client (client code)
compatibility (js libraries)
lib (loading first)
public (static files)
private (some private data)
tests
Lets split itLets split it
<template name=“my_template”>
…
</template>
Lets start from Lets start from templatetemplate
Router.map(function() {
this.route('my_template', {
path: ‘/my_template/:_id',
renderTemplates: {
'top_bar': {to: 'top_bar'}
},
template: ‘my_template’,
data: function() {…}
}
RoutingRouting
Template.my_template.rendered = function() {…}
Template.my_template.events({
'submit .my_form’: function (event) {…}
});
Template.my_template.helpers({
locations: function () {return Session.get("locations");}
});
JavascriptJavascript
Session.get(“locations");
{{ locations }}
Session.set(“locations”, {…});
Reactive dataReactive data
Publish and subscribePublish and subscribeMeteor.publish("locations", function () {
return Locations.find({ "user._id": this.userId });
});
Meteor.subscribe("locations");
INSECURE OFFINSECURE OFFLocations = new Meteor.Collection("locations");
Locations.allow({
insert: function(userId, doc) {…},
update: function(userId, doc, fields, modifier) {…},
remove: function(userId, doc) {…}
});
ThatThat’’s all the magics all the magic
What about testing?What about testing?
Laika (http://arunoda.github.io/laika/) - Testing framework for meteor
RTD (http://rtd.xolv.io/) - Test runner for meteor
TinyTestJS (https://github.com/bennadel/) - JavaScript unit testing framework
PackagesPackages
accounts-ui
backbone
bootstrap
coffeescript
jquery
less
underscore
d3
PackagesPackages
Django Packages - 2069
Atmosphere - 794
Python Packages - 37653
Npm Packages - 51269
CommunityCommunity
The teamThe team
12 core developers
Got 11.2M$ investment in July 2012
Very large community
http://madewith.meteor.com/
Who uses meteor?Who uses meteor?
How do I start?How do I start?
http://www.meteor.com/
http://www.discovermeteor.com/
https://www.eventedmind.com/
http://madewith.meteor.com/
https://trello.com/b/hjBDflxp/meteor-roadmap
Where to read?Where to read?
http://about.me/alexarsh
http://www.slideshare.net/alexarsh/
Demo time !!!Demo time !!!