Skip to content

Instantly share code, notes, and snippets.

@bjouhier
bjouhier / requestBug.js
Created May 27, 2011 21:37
Compiled version of requestBug_.js
/*** Generated by streamline 0.1.22 - DO NOT EDIT ***/
var __global = typeof global !== 'undefined' ? global : window;
function __cb(_, fn) { var ctx = __global.__context; return function(err, result) { __global.__context = ctx; if (err) return _(err); try { return fn(null, result); } catch (ex) { return __propagate(_, ex); } } }
function __future(fn, args, i) { var done, err, result; var cb = function(e, r) { done = true; err = e, result = r; }; args = Array.prototype.slice.call(args); args[i] = function(e, r) { cb(e, r); }; fn.apply(this, args); return function(_) { if (done) _.call(this, err, result); else cb = _.bind(this); }.bind(this); }
function __propagate(_, err) { try { _(err); } catch (ex) { __trap(ex); } }
function __trap(err) { if (err) { if (__global.__context && __global.__context.errorHandler) __global.__context.errorHandler(err); else console.error("UNCAUGHT EXCEPTION: " + err.message + "\n" + err.stack); } }
(function(_) {
var __then = (_ = (_ || __trap));
/* 1
@bjouhier
bjouhier / requestBug_.js
Created May 27, 2011 21:41
Demonstrates problem when more than 4 HTTP client requests are sent in parallel
var streams = require("streamline/lib/streams/streams");
var flows = require("streamline/lib/util/flows");
var port = 3001;
// if you remove last element, test will pass!
var values = [1,2,3,4,5];
function send(_, path, val){
return streams.httpRequest({
method: "put",
url: "http://localhost:" + port + path
@bjouhier
bjouhier / rimraf.js
Created August 8, 2011 06:34 — forked from laverdet/rimraf.js
rimraf with futures
/*** Generated by streamline 0.1.35 - DO NOT EDIT ***/
var __global = typeof global !== 'undefined' ? global : window;
function __cb(_, fn){ var ctx = __global.__context; return function(err, result){ __global.__context = ctx; if (err) return _(err); try { return fn(null, result); } catch (ex) { return __propagate(_, ex); } } }
function __future(fn, args, i){ var done, err, result; var cb = function(e, r){ done = true; err = e, result = r; }; args = Array.prototype.slice.call(args); args[i] = function(e, r){ cb(e, r); }; fn.apply(this, args); return function(_){ if (done) _.call(this, err, result); else cb = _.bind(this); } .bind(this); }
function __nt(_, fn){ var i = 0; var cb = __cb(_, fn); var safeCb = function(){ try { cb(); } catch (ex) { __propagate(cb, ex); } }; if (typeof process != "undefined" && typeof process.nextTick == "function") return function(){ if (++i % 20 == 0) process.nextTick(safeCb); else cb(); }; else return function(){ if (++i % 20 == 0) setTimeout(safeCb); else cb(); }; }
function _
@bjouhier
bjouhier / jsurlbench.js
Created November 6, 2011 13:27
jsurl bench
"use strict";
var JSURL = require("jsurl");
function bench(name, count, fn) {
var t0 = Date.now();
for (var i = 0; i < count; i++)
fn();
console.log(name + ": " + (Date.now() - t0));
}
@bjouhier
bjouhier / callrepro
Created December 17, 2011 14:20
fstreamline bug repro with fn.call
"use strict";
if (!require('streamline/module')(module)) return;
function foo(_, i) {
return 2 * i;
}
function bar(_, f, i) {
return f.call(null, _, i);
}
@bjouhier
bjouhier / tryCatchTrampo.js
Created December 18, 2011 12:09
Callback wrapper that implements trampoline with try/catch
// callback wrapper for trampoline
var depth = 0;
var maxDepth = 100;
var marker = {};
function trampo(cb) {
return function(e, r) {
var d = depth++;
try {
if (depth === maxDepth)
@bjouhier
bjouhier / gist:1535403
Created December 29, 2011 18:19
my first ace test
#!/usr/bin/env node-streamline
"use strict";
require('coffee-script')
var test = require("ace/src/lib/ace");
test(1, function(_) {
function Foo(x, _) {
process.nextTick(_);
this.x = x;
@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++) {
@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 / 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;
}