Skip to content

Instantly share code, notes, and snippets.

@Pomax
Pomax / download.py
Last active June 3, 2025 20:49
A script for automatically downloading all your Glitch projects, and their associated CDN assets
import sys, os, shutil, json, subprocess
from http.client import InvalidURL
from urllib.request import Request, urlopen, urlretrieve, URLError
from urllib.parse import quote, unquote
from time import time, sleep
print("\nWelcome to the Glitch.com bulk project downloader.")
# Verify that we have tar available, otherwise thing
bypass_tar = False
#include "Adafruit_seesaw.h"
#include <seesaw_neopixel.h>
#include <Joystick.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SS_SWITCH 24 // this is the pin on the encoder that connects to the momentary switch
#define SEESAW_BASE_ADDR 0x36 // I2C address, starts with 0x36
#define SCREEN_WIDTH 128 // OLED display width, in pixels
const { abs, log } = Math;
const log10 = (v) => log(v) / log(10);
const XMLNS = "http://www.w3.org/2000/svg";
const element = (tag, attributes = []) => {
const e = document.createElementNS(XMLNS, tag);
Object.entries(attributes).forEach(([key, value]) => set(e, key, value));
return e;
};
const set = (e, key, value) => e.setAttribute(key, value);
/**
* This is a function for use with JSON.stringify(input, sortedObjectKeys, number)
* that ensures that object keys are sorted in alphanumerical order.
*/
export function sortedObjectKeys(_, data) {
// Ignore primitives.
if (data === null) return null;
if (typeof data !== "object") return data;
// Also ignore iterables, which are type "object" but should not be sorted.
@Pomax
Pomax / tangents.pde
Last active June 11, 2021 18:43
This sketch illustrates the inner and outer tangents between two circles
int dim;
ArrayList<Circle> circles;
boolean moving = false;
/**
* simple (x,y) point class
*/
class Point {
float x, y;
(function buildTagFunctions(global) {
// Just enough tags to generate all the client content
const tags = [
`a`,
`button`,
`div`,
`footer`,
`h1`,
`h2`,
`li`,
@Pomax
Pomax / task-timer.js
Last active March 1, 2019 00:06
A JS taskrunner with timeout capability
/**
* A resolver class that will run the function
* passed as `startWaiting`, with a concurrent
* timeout running that will trigger the
* `timeoutFunction` function after a specific
* number of milliseconds.
*
* This timeout can be paused using `.pause()`,
* which will return a promise that can be
* `await`ed to effect a non-blocking "pause".
@Pomax
Pomax / tree.js
Created April 7, 2016 23:46
A silly but effective JS tree datastructure
/**
* Basic tree implementation.
*/
function Tree(value) {
this.value = value || false;
this.parent = false;
this.children = [];
};
Tree.prototype = {
@Pomax
Pomax / moo.md
Created November 15, 2015 14:32
programming some geometry in Type2 Charstrings

Writing Type2 sin(x) and cos(x) functions

If we want to make a font in which the glyphs are turned some random amount, we'll need to make sure we have a rotate function available. Normally, this is something you do with a rotation matrix, but that rotation matrix depends on trigonometric functions, and Type2 charstring instructions don't come with a trig. library, so ... we need to write our own!

In fact, let's use Bhaskara I's method of "sort of kind of" approximating a sine wave -or rather half of one- by using a relatively simple expression:

                 4x(π-x)
sin(x) = 4 * ----------------
              5π^2 - 4x(π-x)
@Pomax
Pomax / browse.js
Created March 10, 2015 02:56
Save as "browse.js", run with "node browse", instant image folder browser. Because I'm lazy
/**
* First things first: I am *lazy*. I will write a tool to do the thing I want to
* do so I don't have to do it a second time, ever. Or until a new programming
* language comes around. Generally the latter, but enough about that:
*
* This is a Node.js utility for taking the dir you are in right now, firing up
* an express server, and giving you image browsing on localhost:8080 with simple
* left/right controls once you're actually viewing images, and "up" control to
* go up a directory.
*