First presented at DevConf.ru, this presentation makes the case for Node.js as the best platform for user engagement, and discusses Cloud9 IDE's open-source platform for Node apps, Architect.
2. What is Cloud9 IDE?
• Full-blooded IDE in the browser
• BitBucket and Github
• FTP
• Deploy your apps
• Run and debug Node.js (stepper, call
stack, watchers, live execute)
• Basic autocomplete and JavaScript
validation
5. “You have to start with the
customer experience and work
backwards to the technology.”
- Steve Jobs
6. The User
• Web apps aren’t the only use for Node, but...
• Web apps have the most potential to effect change
• Why? It’s about people
• The old metric was speed
• The new metric is engagement
10. Cloud9. Powered by node.js.
• What does a user look like to Cloud9?
• Cloning codebases
• Debugging node.js apps
• Running “pwd”, “mkdir”, “npm”, “git”, “hg” in the CLI
• Deploying an application
11. A great user experience requires:
non-blocking execution
&
bi-directional communication
17. Architect
• A simple yet powerful plugin system for large-scale
node apps
• A plugin may provide one or more services
• A plugin’s services is exposed via register
• Each plugin can communicate with other plugins
18. Architect : A Simple Example
1. Config.js specifies plugins & options
module.exports = [
{ packagePath: "architect-http", port: 8080 },
{ packagePath: "architect-http-static", root:
"www" },
"./plugins/calculator",
"./plugins/db",
"./plugins/auth"
]
2. Application entry point (server.js) initiates architect
var path = require('path');
var architect = require("architect");
var configPath = path.join(__dirname, "config.js");
var config = architect.loadConfig(configPath);
architect.createApp(config, function (err, app) {});
19. Architect : A Simple Example
3. Auth plugin registers its interface
module.exports = function setup(options, imports, register) {
// "database" was a service this plugin consumes
var db = imports.database;
register(null, {
// "auth" is a service this plugin provides
auth: {
users: function (callback) {
db.keys(callback);
},
authenticate: function (username, password, callback) {
db.get(username, function (user) {
if (!(user && user.password === password)) {
return callback();
}
callback(user);
});
}
}
});
};
20. Architect : What’s so great?
• Plugin system creates a pool of shared resources
Adds to the pool
Draws from the pool
• Plugins are reusable
• Plugins can be either in the repo or as NPM packages
• All your existing uses for Node are still in tact
21. Wrap-Up
• Node.js is brilliant for modern web apps
• If your most important metric is user engagement, choose node for at
least one part of your app
• github.com/c9/architect for your next node application
• Check out c9.io for major updates coming at the end of the month