Skip to content

Instantly share code, notes, and snippets.

@bjouhier
bjouhier / demo1-original.js
Created July 4, 2012 20:53
equivalence between event-oriented and callback-oriented stream API
"use strict";
var wrappers = require('./wrappers');
var http = require('http');
var zlib = require('zlib');
var util = require('util');
var fs = require('fs');
http.createServer(function(request, response) {
response.writeHead(200, {
'Content-Type': 'text/plain; charset=utf8',
@bjouhier
bjouhier / hackGlobal.js
Created June 2, 2012 12:18
Wrapping a function to hack a global temporarily
var g = 3;
function hackGlobal(fn) {
return function() {
var saveG = g;
try {
g = 5;
fn.apply(this, arguments);
} finally {
g = saveG;
@bjouhier
bjouhier / benchNextTick.js
Created May 29, 2012 20:53
Benching setTimeout against process.nextTick
"use strict";
var count = 1000000;
function bench(fn, cb) {
var total = 0;
function loop(i) {
if (i === count) {
cb(null, total);
} else {
@bjouhier
bjouhier / asyncgen.js
Created May 18, 2012 17:24
Asynchronous hello world with JS generators
(function() {
var GENERATOR_PROTO = Object.getPrototypeOf((function() {
yield;
})());
function isGenerator(val) {
return typeof val === 'object' && Object.getPrototypeOf(val) === GENERATOR_PROTO;
}
var PENDING = {};
@bjouhier
bjouhier / doesnotexit.js
Created May 6, 2012 17:03
luvmonkey program that does not exit
var Timer = require('uv').Timer;
function foo() {
var timer = new Timer();
timer.start(1000, 0, function(err) {
f.send("ok");
f.close();
})
var r = yield;
print("got " + r);
@bjouhier
bjouhier / primes.js
Created April 28, 2012 14:30
Primes generator
exports.generator = function() {
var found = [];
function isPrime(p) {
for (var i = 0; i < found.length; i++) {
var q = found[i];
if (p % q === 0) return false;
if (q * q > p) return true;
}
return true;
@bjouhier
bjouhier / benchCallbacks.js
Created April 11, 2012 20:01
streamline vs. callbacks bench
"use strict";
var fs = require('fs');
var cache = {}, hit = 0, missed = 0;
function load(name, cb) {
var res = cache[name];
if (res) {
process.nextTick(function() {
hit++;
cb(null, res);
@bjouhier
bjouhier / needsTrampoline.js
Created March 9, 2012 21:12
Simple code that breaks without trampoline
if (!require('streamline/module')(module)) return;
function fibo(_, n) {
return n > 1 ? fibo(_, n - 1) + fibo(_, n - 2) : 1;
}
function fibo2(_, n) {
return n > 1 ? trampo(this, 0, fibo2, _, n - 1) + trampo(this, 0, fibo2, _, n - 2) : 1;
}
@bjouhier
bjouhier / bench.js
Created February 13, 2012 08:16
Simple bench of basic JS constructs
function bench(name, fn) {
var result;
// 2 passes to let V8 optimize
for (var pass = 2; pass >= 0; pass--) {
var count = 1;
while (true) {
var t0 = Date.now();
fn(count);
dt = (Date.now() - t0);
if (dt > 100) {
@bjouhier
bjouhier / chomp.js
Created February 2, 2012 10:45
Streamlined function to concatenate several input files into one output file
"use strict";
if (!require('streamline/module')(module)) return;
var fs = require('fs');
var streams = require('streamline/lib/streams/server/streams');
// cat ins > out
exports.chomp = function(ins, out, _) {
streams.usingWritable(_, fs.createWriteStream(out), function(_, outStream) {
for (var i = 0; i < ins.length; i++) {