Skip to content

Instantly share code, notes, and snippets.

View postspectacular's full-sized avatar
🎉
Celebrating 25 years of building open source tools

Karsten Schmidt postspectacular

🎉
Celebrating 25 years of building open source tools
View GitHub Profile
@postspectacular
postspectacular / 00-sigmoid-approx.ts
Last active November 2, 2019 20:31
Sigmoid versions (AssemblyScript)
// uses Math.exp() approximation from:
// https://www.musicdsp.org/en/latest/Other/222-fast-exp-approximations.html
// @ts-ignore: decorator
@inline
function fastexp9(x: f64): f64 {
// prettier-ignore
return (362880+x*(362880+x*(181440+x*(60480+x*(15120+x*(3024+x*(504+x*(72+x*(9+x)))))))))*2.75573192e-6;
}
@postspectacular
postspectacular / accessors.ts
Last active October 14, 2019 15:25
Super slow numeric property accessors - why is [0] / [1] access 110x slower than .x/.y?
import { bench } from "@thi.ng/bench";
import { map, range } from "@thi.ng/transducers";
export class Vec2 {
buf: Float32Array;
constructor(buf: ArrayBuffer, off: number) {
this.buf = new Float32Array(buf, off, 2);
}
@postspectacular
postspectacular / tokenizer.js
Created September 10, 2019 20:47
S-expr tokenizer
function tokenizeSexpr(src) {
let curr = "";
const scopes = [[]];
const $word = () => {
if (curr) {
scopes[scopes.length - 1].push(curr);
curr = "";
}
};
for(let i = 0; i < src.length; i++) {
import {
area,
centroid,
clipConvex,
convexHull,
points,
polygon,
rect,
scatter,
withAttribs
@postspectacular
postspectacular / hello-ast.js
Last active June 14, 2019 02:15
@thi.ng/shader-ast WIP codegen example w/ multiple output targets (GLSL & JS)
// // // //
// ///// // //// // //// ///// //// ///// //////
// // ///// // ///// // // // // ////// // // //
// //// // // ///// // // ////// // ///// //// //
// // // // // // // // // // // // // //
// ///// // // ///// ///// //// // ///// ///// ///
//
// Head over to thi.ng/shader-ast for more details
const ast = require("@thi.ng/shader-ast");
// deform code
vector4 planes[] = point(1, "planes", @id);
foreach(vector4 plane; planes) {
vector n = set(plane.x, plane.y, plane.z);
float d = dot(n, @P) + plane.w;
// check if point is "above" intersection plane
// since the plane normal always points away from each sphere's center
// this will select all points intersecting a neighbor sphere
if (d > 0) {
@postspectacular
postspectacular / sdf-svg-heatmap.ts
Last active June 23, 2020 16:43
Shroomania: SDF SVG heatmap
import { DisjointSet } from "@thi.ng/adjacency";
import { cosineColor, GRADIENTS } from "@thi.ng/color";
import { identity, partial } from "@thi.ng/compose";
import { serialize } from "@thi.ng/hiccup";
import { rect, svg, text } from "@thi.ng/hiccup-svg";
import { fitClamped, wrap } from "@thi.ng/math";
import { IRandom, Smush32 } from "@thi.ng/random";
import {
buildKernel2d,
comp,
@postspectacular
postspectacular / wolfram.js
Created March 10, 2019 15:18
Transducer based, branch-less 1D Wolfram automata (textmode)
const tx = require("@thi.ng/transducers");
const txb = require("@thi.ng/transducers-binary");
// ANSI clear screen esc seq
const CLEAR = "\x1b[2J\x1b[;H";
// CA dimensions
const WIDTH = 72;
const HEIGHT = 24;
@postspectacular
postspectacular / rulegen.ts
Last active March 4, 2018 19:25
@thi.ng/hiccup-css example to generate tachyons.css width & height rules incl. their media query versions
import * as fs from "fs";
import * as css from "@thi.ng/hiccup-css";
const mediaQueries = [
[""],
["-ns", "--breakpoint-no-small"],
["-m", "--breakpoint-medium"],
["-l", "--breakpoint-large"]
];

Keybase proof

I hereby claim:

  • I am postspectacular on github.
  • I am toxi (https://keybase.io/toxi) on keybase.
  • I have a public key ASChmJFjwANWhFE5SMqUl6TX65dPobiDLv4CtgE0WgIxIQo

To claim this, I am signing this object: