Notebooks 2.0 is here.

Published
Edited
Sep 13, 2021
3 stars
Hello, A5Hello, PGLiteINSEE ParquetHello, apcachDruidJS workerHello, OrbitWord Tour: 40k words and their friendsHello, spectral.jsHello, petite-vueHello, @thi.ng/grid-iteratorsHello, thumbhashHello, SwissGLHello, QOI (and glitches)Hello, orbHello, cosmographHello, TabulatorUsing d3.blur with PlotMath.cbrtHello debounceColorcetHello, gliiHello, Open MeteoHello, PyWaveletsHello, typesenseHello, libgifHello, kmeans-engineHappy anniversary, Project Gutenberg!Hello, fflateHello, ArchieML!Hello, d3-bboxCollideHello, jsgeoda!Hello, EDTF!Hello, protovis!Hello, placekeyHello, fuse.jsHello, Reorder.jsHello, shadow DOMjszipHello, procedural-glHello, qhullHello, genetic-jsDruidJSHello, Tippy.jsHello, paintWorkletBig πHello, AutoencoderHello, Shakespearean UUIDsHello, ccwt.jsHello, constrainautorHello, talismanHello, polygon-offsetHello p-queueHello async-poolHello rollup-plugin-asciiHello, algebra.jsHello, pixi.jsHello, d3-renderHello zip/unzipCumulative Wikipedia DonationsHTML <details>regl textureHello, npyjsHello protobufHello, pencil touchHello, LOESSHello html2canvaslegra mapscolor2cssHello, ecsy2D point distributionsHello, delatinThe gpu.js loopDijkstra’s shortest-path treeHello nojacko/Dijkstras-jsHello, tcort/dijkstrajsHello, lambdabaa/dijkstraHello, gpu.js v2Hello jsqrHello qrcode
Hello SharedArrayBuffer
Hello GamePad APIHello vtk.jsHello nd4jsHello BiofabricTravelling with a self-organizing mapHello glitchHello UMAP-jsHello pandemoniumHello iocaneHello JSON-editorHello d3-griddingHello mljs/knnWorkerHello lalolibImage to GPU.jsImage to blink.jsTissot's indicatrixVega projectionsHello WebCLGLUsing d3-inertia with observableVideo contouring 3ngraph: pagerank, louvain…Union-FindPerceptron (simple statistics)mljsHello h3-jsEmoji FlagsHello, poisson-disk-sampling
Also listed in…
Meta
Insert cell
Insert cell
sharedBuffer = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT * 1e7) // 4 bytes per item in a Float32Array
Insert cell
import {worker} from "@fil/worker"
Insert cell
Insert cell
C = navigator.hardwareConcurrency || 4
Insert cell
runWorkers = {
launchWorkers;
const seed = Math.random(),
time = performance.now();
await Promise.all(
Array.from(
{ length: C },
(_, start) =>
new Promise(notify =>
worker(compute, { seed, sharedBuffer, start, n: 1000, C })(notify)
)
)
);
return performance.now() - time;
}
Insert cell
(runWorkers, new Float32Array(sharedBuffer))
Insert cell
function compute(options) {
const sharedArray = new Float32Array(options.sharedBuffer),
n = options.n || 1000,
C = navigator.hardwareConcurrency || 4;
for (let i = options.start; i < sharedArray.length; i += C) {
for (
let a = 0;
a < n;
a++ // make it slow :D
)
sharedArray[i] = Math.cos(i / 100 + options.seed);
}
return "anything"; // a message saying we're done
}
Insert cell
Insert cell
Insert cell
normal = {
if (!launchNormal) return;
const seed = Math.random(),
time = performance.now();
for (let start = 0; start < C; start++)
compute({ seed, sharedBuffer, start, n: 1000, C });
return performance.now() - time;
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more