Skip to content

Instantly share code, notes, and snippets.

/**
* Stack
* LIFO data structure
*/
exports.Stack = Stack;
exports.Stack1 = Stack1;
exports.Stack2 = Stack2;
exports.Stack3 = Stack3;
@nemtsov
nemtsov / testcov-package.json
Created May 1, 2013 05:05
Testing and test-coverage scripts in the package.json. Prereq: `npm --save-dev i mocha should istanbul`.
"scripts": {
"test": "mocha -r should --recursive",
"test-watch": "mocha -r should --recursive -w -G -R min",
"coverage": "istanbul cover _mocha -- -r should --recursive"
}
@nemtsov
nemtsov / quickest-static-file-server.js
Last active December 17, 2015 08:49
The quickest dependency-less working static-file server. It'll strem files for you.
var http = require('http')
, url = require('url')
, path = require('path')
, fs = require('fs')
, HTTP_PORT = (process.env.PORT || 3000)
, server;
server = http.createServer(function (req, res) {
var publicDir = path.join(__dirname, 'public');
serveStatic(publicDir, req, res);
@nemtsov
nemtsov / index.js
Last active December 20, 2015 11:59
An example of a simple server using trumpet (for html templating) and nap (for asset mgmt)
//process.env.NODE_ENV = 'production'
var express = require('express')
, fs = require('fs')
, path = require('path')
, trumpet = require('trumpet')
, nap = require('nap')
, app = express()
nap({
@nemtsov
nemtsov / connect-use-many.js
Created August 4, 2013 01:44
Connect middleware used when you need to combine multiple other middleware into one.
/**
* @param {Array} list of middleware to combine
*/
module.exports = function (list) {
return function (req, res, next) {
(function iter(i) {
var mid = list[i]
if (!mid) return next()
mid(req, res, function (err) {
@nemtsov
nemtsov / chaining.js
Created August 7, 2013 22:19
A way to give existing callback-based libraries a chainable interface.
module.exports = Lib
function Lib() {
this._queue = []
var methods = ['one', 'two', 'three']
methods.forEach(this._addMethod.bind(this))
}
Lib.prototype._addMethod = function (name) {
var self = this
@nemtsov
nemtsov / async-sparse-map.js
Created October 21, 2013 20:01
async.map that works with sparse arrays
function asyncMap(sparseArr, factory, cb) {
var completed = []
, sparseLen = sparseArr.length
, len = 0
, ctr = 0
, isDone = false
, item
, i;
function done(err, good) {
@nemtsov
nemtsov / glr
Created November 29, 2013 23:35
Recursive (1-level) git status and git pull
#!/bin/bash
function _git {
git --git-dir=$1/.git --work-tree=$1 $2
}
function _git_pull {
_git $i fetch && \
_git $i "merge origin/master" | grep -v "Already up-to-date."
}
@nemtsov
nemtsov / node_cluster_broadcast.js
Created December 17, 2013 18:19
A naïve way to broadcast a message to all workers in a cluster from another worker.
var cluster = require('cluster');
var http = require('http');
var numCPUs = 3;
var workers = [];
if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
workers.push(cluster.fork());
}
@nemtsov
nemtsov / algo_closure.js
Created December 26, 2013 18:50
A few types of recursive asynchronous algorithms.
var page = require('./page');
function getFullPage(id, cb) {
var combined = {id: id, modules: []};
_get(id, combined, cb);
}
function _get(id, combined, cb) {
function onGet(err, page) {
if (err) return cb(err);