kevinhamiltonsmith / RedditInsight

Reddit Analytics

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Reddit Insight - Reddit Analytics Build Status

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: "alan@test.com"
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);

About

Reddit Analytics


Languages

Language:JavaScript 99.3%Language:Erlang 0.6%Language:Shell 0.0%Language:Ruby 0.0%