An analytics suite for Reddit.com using their public API, combined with real-time data analysis and graphic visualizations of historical data. A five person team, with varying areas of expertise working together to build an analytics platform on top of the Firehose that is Reddit. Technologies used include JavaScript, Backbone.js, Node.js, Handlebars, d3, Express, MongoDB, Mongoose, and Python scripts.
Team:
Patrick Stapleton @gdi2290 - app architecture, front-end
Alex Gaputin - pulled all the data, back-end
Kevin Smith kevinhamiltonsmith.com - front-end architecture, realtime data capture, lauyout and styling
Elle Beal - d3, front-end and project management
Bill Shelton - data munging, data visualization and machine learning with Python, D3 and R
Chris Sita - d3 Interaction scatter plot
Logo - Alex Trimpe http://alextrimpe.com/
=== Requirements:
npm nodemon
Installing Reddit Insight:
$ npm install -g nodemon
$ npm start
$ git clone https://github.com/gdi2290/RedditInsight.git
$ cd RedditInsight
$ npm install
===
#Debug Helpers
####Global Debug
Debug.[Controller/Router].[action].[view].[model/collection].[method]
=== ####Handlebars epoch
Handlebars.registerHelper("epoch", function(epoch) { var d = new Date(0); // The 0 there is the key, which sets the date to the epoch d.setUTCSeconds(epoch); return d; });
####Handlebars debugger
Handlebars.registerHelper("debug", function(optionalValue) { console.log("=====-Current-Context-====="); console.log(this); if (optionalValue) { console.log("==========-Value-=========="); console.log(optionalValue); console.log("==========================="); } else { console.log("==========================="); } });
You could then use that helper in any template like:
{{debug}}
or
{{debug someValue}}
You’ll see output in the JavaScript console letting you know what’s going on:
=====-Current-Context-===== email: "[email protected]" first_name: "Alan" last_name: "Johnson" member_since: "Mar 25, 2011" phone: "1234567890" stripeClass: "even" __proto__: Object ==========-Value-========== Alan ===========================
=== Handlebars Compare
{{#compare}}
Handlebars.registerHelper('compare', function (lvalue, operator, rvalue, options) {
var operators, result;
if (arguments.length < 3) {
throw new Error("Handlerbars Helper 'compare' needs 2 parameters");
}
if (options === undefined) {
options = rvalue;
rvalue = operator;
operator = "===";
}
operators = {
'==': function (l, r) { return l == r; },
'===': function (l, r) { return l === r; },
'!=': function (l, r) { return l != r; },
'!==': function (l, r) { return l !== r; },
'<': function (l, r) { return l < r; },
'>': function (l, r) { return l > r; },
'<=': function (l, r) { return l <= r; },
'>=': function (l, r) { return l >= r; },
'typeof': function (l, r) { return typeof l == r; }
};
if (!operators[operator]) {
throw new Error("Handlerbars Helper 'compare' doesn't know the operator " + operator);
}
result = operators[operator](lvalue, rvalue);
if (result) {
return options.fn(this);
} else {
return options.inverse(this);
}
});
####jQuery Handlebars overwrite
$('#content').handlebars($('#template'), { name: "Alan" });
(function($) { var compiled = {}; $.fn.handlebars = function(template, data) { if (template instanceof jQuery) { template = $(template).html(); } compiled[template] = Handlebars.compile(template); this.html(compiled[template](data)); }; })(jQuery);