Skip to content

Instantly share code, notes, and snippets.

Jason Crawford jasoncrawford

Block or report user

Report or block jasoncrawford

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
jasoncrawford / pwdgen.js
Created Nov 5, 2016
XKCD-style password generator
View pwdgen.js
// Generates “correct horse battery staple”-style password:
// Usage: node pwdgen.js <file>
// File should contain common words, one per line.
// Params:
var minWordLength = 4;
var desiredEntropyBits = 30;
var fs = require('fs');
var crypto = require('crypto');
jasoncrawford / appError.js
Last active Nov 18, 2015
JS custom errors
View appError.js
var util = require('util');
var extendable = require('./extendable');
// AppError is an error constructor that inherits from Error but is more easily extendable.
// You can inherit from it using 'extend' just like with Backbone constructors:
// var SpecialError = AppError.extend({
// name: 'SpecialError',
// initialize: function (foo, bar) {
// this.message = foo + " " + bar + "!";
View asteroidWatcher.js
var fs = require('fs');
var _ = require('underscore');
var csv = require('csv');
var Twitter = require('twitter');
function die(error) {
console.error('fatal error');
if (error) console.error('error', error);
if (error.stack) console.error('stacktrace', error.stack);
View gist:4243e656851287c1d8c2
Verifying that +jasoncrawford is my openname (Bitcoin username).

Keybase proof

I hereby claim:

  • I am jasoncrawford on github.
  • I am jasoncrawford ( on keybase.
  • I have a public key whose fingerprint is 4AAB 4EB9 28FB 0CF1 045B 8BCC 5491 0264 6F74 0339

To claim this, I am signing this object:

jasoncrawford / routing.js
Last active Nov 23, 2018
Backbone flash mechanism
View routing.js
var Backbone = require('backbone');
// Flash ///////////////////////////////////////////////////////////////////////////////////////////
// The flash is a way for one controller to pass a small amount of information to the next
// controller, through a navigation event.
// The flash holds arbitrary parameters, and is cleared by the router after each navigation event.
var flash = exports.flash = {
params: {},
jasoncrawford / model.js
Last active Sep 5, 2016
Simple relations for Backbone models. Not as full-featured as Backbone-relational ( or Supermodel (, but pretty lightweight and concise. Disclaimer: I excerpted this from some other code I wrote and haven't tested it independently. Use at your own risk
View model.js
var relationEvents = ['add', 'change', 'remove', 'reset', 'sort', 'destroy', 'request', 'sync'];
var Model = exports.Model = Backbone.Model.extend({
hasMany: {
// Subclasses can override to set relations like this:
// key: function () { return new Collection([], options); },
hasOne: {
jasoncrawford / console.js
Last active Dec 24, 2015
Node REPL that doesn't clobber _
View console.js
var repl = require('repl')
var vm = require('vm');
var _;
var server = repl.start({
eval: function (cmd, context, filename, callback) {
try {
var match = cmd.match(/^\((.*)\n\)$/);
var code = match ? match[1] : cmd;
jasoncrawford / gist:5873309
Created Jun 27, 2013
Augment Mongoose with Q promises. In some cases the method is an alternative to an existing promise-returning methods, like `qexec` vs. Mongoose's native `exec`. In other cases it's providing an operation that Mongoose doesn't give promises for, such as `qsave` and `qcreate`.
View gist:5873309
var mongoose = require('mongoose');
// Workaround for the fact that chai-as-promised isn't working with Mongoose promises:
mongoose.Query.prototype.qexec = function () {
return Q.npost(this, 'exec', arguments);
mongoose.Model.qcreate = function () {
return Q.npost(this, 'create', arguments);
jasoncrawford / client.js
Last active Dec 18, 2015
Start of a simple promise-based HTTP client, based on Q-IO and inspired by SuperAgent
View client.js
var http = require('q-io/http');
var BufferStream = require('q-io/buffer-stream');
// Response
function Response(promise) {
this.promise = promise;
this.status = this.promise.get('status');
You can’t perform that action at this time.