Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@bjouhier
bjouhier / binding.gyp
Created November 4, 2013 18:43
exception broken in osx addon
{
"targets": [
{
"conditions": [
["OS=='mac'", {
"xcode_settings": {
"GCC_ENABLE_CPP_EXCEPTIONS": "YES"
}
}],
],
@bjouhier
bjouhier / fibo.js
Last active December 26, 2015 23:19
paris.js 30-10-2013
require('colors');
function* genFibo() {
var f1 = 0, f2 = 1;
while (true) {
console.log(("genFibo loop: " + f1).green)
yield f1;
var f = f1 + f2;
f1 = f2;
f2 = f;
@bjouhier
bjouhier / fiboCrash.js
Last active December 17, 2015 05:08
Demonstrates crash with V8 generators
function isGenerator(val) {
return Object.prototype.toString.call(val) === "[object Generator]";
}
var PENDING = {};
function run(fn, args, idx) {
var cb = args[idx],
g;
@bjouhier
bjouhier / fiboBench.js
Created May 10, 2013 12:46
First bench to compare raw callbacks and the 3 streamline modes: callbacks, fibers and generators
var fs = require('fs');
function fib(n) {
return n <= 1 ? 1 : fib(n - 1) + fib(n - 2);
}
function rawBench(n, loop, modulo, asyncFn, callback) {
var count = 0;
var l = loop;
@bjouhier
bjouhier / testgen._js
Created May 9, 2013 20:23
streamlined harmony generators example based on https://gist.github.com/creationix/5544019
var fs = require('fs');
function testgen(_) {
console.log(fs.readFile(__filename, _));
console.log("Sleeping for 2000ms...");
setTimeout(_, 2000);
console.log("Done");
}
testgen(_);
// Wrapping asynchronous functions
// This wrapper is implemented with callbacks
// i is the index of the callback in the parameter list
// isFuture is a reserved parameter - do not pass it
function wrapper1(fn, i, isFuture) {
return function wrapped() {
var cb = arguments[i];
if (!isFuture) console.log("WRAPPER1 BEFORE CALL: " + fn.name);
if (cb == null) return wrapper1(fn.apply(this, arguments), 0, true);
arguments[i] = function(err, result) {
@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 = {};