Michael Holroyd
Computer Graphics Ph.D.
CV.js, June 19 2013
Michael Holroyd

 
node.js
server-side event-driven javascript
    
express
a minimialist web-framework for node.js
    
mongodb
a schemaless document database
This simple web server written in node responds with "Hello World" for every request.
    
         1 var http = require('http');
 2 http.createServer(function (req, res) {
 3   res.writeHead(200, {'Content-Type': 'text/plain'});
 4   res.end('Hello World\n');
 5 }).listen(1337, '127.0.0.1');
        
 1 var express = require('express');
 2 var app = express();
 3 app.get('/', function(req, res){
 4   res.send('Hello World');
 5 });
 6 app.listen(1337);
            
    var allowCrossDomain = function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
  // intercept OPTIONS method
  if ('OPTIONS' === req.method) { res.send(200); }
  else { next(); }
};
app.configure(function(){
  app.use(express.logger());
  app.use(allowCrossDomain);
});
        
var mongo = require('mongodb');
mongo.connect(mongoUri,{auto_reconnect:true},function(err, db){ app.get('/firehose', function(req, response) { db.collection('twists', function(err, twists) { twists.find({}).sort({"created_at":-1}).toArray(function(err, twistArray) { response.send(twistArray); }); }); }); }
var r = db.twists.aggregate({ $group: { _id: "$identifier", twistsPerDevice: { $sum: 1 }, twhandle: { $max: "$twhandle" } } });
r.result.map(function(o){ if (o.twhandle) { db.twists.update( { identifier: o._id }, { twhandle: o.twhandle } ); } });
var view = {
  title: "Joe",
  calc: function () {
    return 2 + 4;
  }
};
var output = mustache.render("{{title}} spends {{calc}}", view);
    
var mustacheTwist = mustache.compile(fs.readFileSync("twist.html",'utf8'));
app.get('/:id', function(req, response) {
  db.collection('twists', function(err, twists) {
    var c = twists.find({_id: req.params.id});
    c.nextObject(function(err,twist){
      var view = {
        server: "focustwist.com",
        twist_id: req.params.id,
        created_at: moment(twist.created_at).fromNow(),
        twhandle: twist.twhandle,
      };
      response.send(mustacheTwist(view));
    });
  });
});
app.configure(function(){
    app.use(express.logger());
    app.use(express.bodyParser());
    app.use(allowCrossDomain);
    app.use(express.static(__dirname + "/public"));
  });

 
 ~1,200 simultaneous users
    ~500 hits per second
    (read-heavy workload)
By Michael Holroyd