Skip to content

Instantly share code, notes, and snippets.

View wanderview's full-sized avatar

Ben Kelly wanderview

View GitHub Profile
@wanderview
wanderview / index.html
Last active December 13, 2015 18:49
cmx.io starting point
<!DOCTYPE html>
<meta charset="utf-8">
<link rel="stylesheet" href="http://cmx.io/v/0.1/cmx.css"/>
<script src="http://cmx.io/v/0.1/cmx.js"></script>
<style>.cmx-user-scene4 .cmx-text-border .cmx-path {stroke: orange}</style>
<body>
<div style="max-width:900px; -webkit-transform:rotate(0deg);">
<scene id="scene1">
<actor t="translate(75,88)">
@wanderview
wanderview / README.md
Last active December 14, 2015 09:08
Composable Object Streams

Composable Object Streams

Rationale

Streams work together through two mechanisms:

  1. Their programmatic API, such as read(), write(), on('data'), etc.
  2. The format of the data being operated on.

Traditional streams operate on a simple stream of bytes. Ordering matters,

@wanderview
wanderview / gist:6166371
Created August 6, 2013 16:58
enterSelectMode() idea
// ids being exported by a timer loop
var exporting = [];
var gotSomeIds = function(ids) {
if (!ids) {
// selection done... we can finalize export
}
Array.prototype.push.apply(exporting, ids);
};
@wanderview
wanderview / gist:6177669
Created August 7, 2013 19:33
onClickHandler() proposal
function onClickHandler(evt) {
var target = evt.target;
var dataset = target.dataset || {};
var parentDataset = target.parentNode ?
(target.parentNode.dataset || {}) : {};
var uuid = dataset.uuid;
var node = target;
if (!uuid) {
uuid = parentDataset.uuid;
node = target.parentNode;
@wanderview
wanderview / gist:7046437
Created October 18, 2013 19:02
mozilla-central for-of usage
./b2g/chrome/content/shell.js: for (let crashid of pending) {
./b2g/chrome/content/dbg-browser-actors.js: for (let [browser, actor] of this._actorByBrowser) {
./js/examples/jorendb.js: for (var cmd of commandArray) {
./js/src/devtools/rootAnalysis/CFG.js: for (var xbody of functionBodies) {
./js/src/devtools/rootAnalysis/CFG.js: for (var edge of body.PEdge) {
./js/src/devtools/rootAnalysis/CFG.js: for (var edge of body.PEdge) {
./js/src/devtools/rootAnalysis/CFG.js: for (var e of predecessors[edge.Index[0]])
./js/src/devtools/rootAnalysis/CFG.js: for (var nedge of successors[point]) {
./js/src/devtools/rootAnalysis/computeCallgraph.js: for (var entry of index[name]) {
./js/src/devtools/rootAnalysis/computeCallgraph.js: for (var field of csu.FunctionField) {
@wanderview
wanderview / median.py
Last active January 2, 2016 09:49
Python Median Test
import numpy
import scipy
from scipy import stats
def median_test(samples1, samples2):
median = numpy.median(samples1 + samples2)
below1, above1 = count_partition(samples1, median)
below2, above2 = count_partition(samples2, median)
@wanderview
wanderview / gist:86a39a886d8653c4a208
Last active August 29, 2015 14:04
ServiceWorker Cache Gecko Data Flows
//
// Example uses of a ServiceWorker Cache to discuss how data flows
// within gecko. See comments below
//
addEventListener('fetch', function(event) {
event.respondWith(
event.default().then(function(response) {
caches.get('content').then(function(cache) {
var cacheResponse = response.clone();
// Transfers data from network->parent process->disk
@wanderview
wanderview / gist:7799767a67f4481904aa
Last active August 29, 2015 14:16
channel to InternalResponse body
nsCOMPtr<nsIInputStream> reader;
nsCOMPtr<nsIOutputStream> writer;
nsresult rv = NS_NewPipe(getter_AddRefs(reader), getter_AddRefs(writer),
0, UINT32_MAX, // unlimited size to avoid writer WOULD_BLOCK case
true, true); // non-blocking reader/writer
NS_ENSURE_SUCCESS(rv, rv);
nsRefPtr<InternalResponse> ir = new InternalResponse();
ir->SetBody(reader);
@wanderview
wanderview / gist:ac6052184c62d2f165ee
Created April 6, 2015 18:23
Request body writing as a stream
var req = new Request('https://example.com' { bodyAsWriter: true });
// throws because writer is not set yet
req.bodyWriter.write(/*...*/);
// fetch calls setWriter
fetch(req).then(/*...*/);
req.bodyWriter.write(/*...*/)
myStream.read(function handleChunk(chunk) {
if (!chunk) {
processDone();
return;
}
processChunk(chunk);
myStream.read(handleChunk);
});