Skip to content

Instantly share code, notes, and snippets.

@simenbrekken
simenbrekken / cluster.js
Created August 5, 2011 08:18
Clustering algorithm
var MAX_ZOOM = 21;
var OFFSET = 268435456;
var RADIUS = 85445659.4471;
var latToY = function(value) {
return Math.round(OFFSET - RADIUS * Math.log((1 + Math.sin(value * Math.PI / 180)) / (1 - Math.sin(value * Math.PI / 180))) / 2);
};
var lngToX = function(value) {
return Math.round(OFFSET + RADIUS * value * Math.PI / 180);
var map = function() {
var completions = this.statistics.completions.total;
emit(key, {
created: {
count: 1,
length: this.length
},
completed: {
count: completions,
@simenbrekken
simenbrekken / cluster.js
Created August 22, 2011 11:18
Clustering algorithm
var clusters = [];
while (walks.length > 0) {
var walk = walks.pop();
var point = walk.startPoint;
var count = 0;
var lat = 0;
var lng = 0;
for (var i = walks.length - 1; i >= 0; i--) {
@simenbrekken
simenbrekken / app.js
Created August 24, 2011 16:09
Keep it Suntory™ DRY
var getStructure = function(req, res, next) {
db.findOne({name: req.params.name}, function(err, result) {
res.json(result);
});
}
app.get('/structure/:name', getStructure);
app.post('/structure/:name/save', function(req, res, next) {
var structure = req.body;
@simenbrekken
simenbrekken / app.js
Created August 24, 2011 16:20
Testing made easy
var routes = require('./routes');
var configure = exports.configure = function(app, callback) {
app.use(express.bodyParser());
app.use(app.router);
app.use(function(err, req, res, next) {
res.json({error: err.message}, 500);
});
@simenbrekken
simenbrekken / gist:1174082
Created August 26, 2011 18:34
Mustache :(
{{#sites}}
<table class="common-table">
<thead>
<tr>
<th>Site name</th>
<th colspan="2">Store name</th>
</tr>
</thead>
<tbody>
{{#sites}}
@simenbrekken
simenbrekken / app.js
Created August 31, 2011 12:20
Session authentication problems
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'x'}));
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
app.use(app.router);
app.use(function(req, res, next) {
if (req.session.user) {
next();
@simenbrekken
simenbrekken / gist:1218828
Created September 15, 2011 08:32
JSON error middleware
app.use(app.router);
app.use(function(err, req, res, next) {
res.json({error: err.message}, 500);
});
app.get(...)
app.requireSecureConnection = function(req, res, next) {
var err;
if (req.connection.encrypted === null) {
err = new Error('Access denied.');
}
next(err);
};
@simenbrekken
simenbrekken / mongowrap.js
Created November 16, 2011 15:03
MongoDB Native Wrapper
var mongodb = require('mongodb'),
events = require('events'),
util = require('util');
var Deferrer = function(emitter, timeoutDelay) {
var self = this;
var pending = 0;
var total = 0;
var timeout;