Skip to content

Instantly share code, notes, and snippets.

View Appolonius.html
<!DOCTYPE html>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex, nofollow">
View wuline.html
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
canvas {
border: 1px solid black;
Breton / decompose-matrix.js
Last active May 16, 2016
Decompose a 2D transform matrix into [rotate scale rotate translate]
View decompose-matrix.js
function decomposeMatrix(m) {
var t,r,s,k,E,F,G,H,Q,R,sx,sy,a1,a2,theta,phi,sqrt=Math.sqrt,atan2=Math.atan2;
// It works wonderfully! Thanks.
// The input matrix is transposed though,
// so let me spell the solution out.
View canvas-skeleton.html
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8">
canvas {
border: 1px solid black;
View Notable hypercard stacks
hypercard stacks
electronic whole earth catalog
Time Table of History
Cosmic Osmo and the Worlds Beyond the Mackerel
The Computer Lab's Beyond Cyberpunk (
Breton / Gruntfile.js
Created Apr 29, 2016
reusable Gruntfile that loads external JSON.
View Gruntfile.js
module.exports = function (grunt) {
function to_entries (object,prefix){
// convert object to array of key/value objects, emulating jq.
// for working around mustache limitation
// for heirarchical objects, flatten
// into key.subkey/value form, until a string, number or boolean is encountered
// this is super convenient for rendering json to shtml variables
var a=[];
View rgbdiff.js
define("rgbdiff", [], function () {
function rgbdiff(a, b) {
// Convert RGB to XYZ
function rgbToXyz(tuple) {
var _r = (tuple[0] / 255);
var _g = (tuple[1] / 255);
var _b = (tuple[2] / 255);
if (_r > 0.04045) {
_r = Math.pow(((_r + 0.055) / 1.055), 2.4);
Breton / RLE.js
Last active May 5, 2016
Run Length Encoding and Decoding for JS number arrays, with Delta Encoding and Delta Decoding.
View RLE.js
function RLEencode(array) {
// output an array of values
// consisting of alternating "rips" and "runs"
// a rip begins with a negative count followed by a
// cooresponding number of non-repeating values
// a run begins with a positive count, followed by
// the value to be repeated by the count.
var newArray=[];
View wuline.js
// integer part of x
function ipart(x) {
return Math.floor(x);
function round(x) {
return Math.round(x);
// fractional part of x
You can’t perform that action at this time.