Skip to content

Instantly share code, notes, and snippets.

View tylerneylon's full-sized avatar
😆

Tyler Neylon tylerneylon

😆
View GitHub Profile
@tylerneylon
tylerneylon / table.js
Created June 24, 2023 22:59
a JavaScript function to print out a table with right-justified columns
// Print out a simple table with right-justified columns of strings.
// This can handle some columns having fewer entries than others.
// (For mid-table missing entries, provide empty strings.)
// The `cols` value is an array of arrays of strings, the columns of the table.
// The optional `topSep` is a string the indicates the separator to use in the
// top row only. If you don't provide topSep, a single space is used.
function showTableWithColumns(cols, topSep) {
if (topSep === undefined) topSep = ' ';
@tylerneylon
tylerneylon / sort_w_partial_info.js
Last active May 22, 2023 22:45
Sort an array based on a comparison function that can say "order is flexible" for some pairs.
// This will sort the values in `inputArr` according to the comparison data
// provided by calls to `inputCmp()`, which is expected to return the values '='
// (a string), '<', '>', or null; where a null indicates that the comparison
// value is undetermined, and that those two elements may go in any order.
// This function attempts to reduce the number of calls to inputCmp() in several
// ways:
// * It memorizes given return values.
// * It assumes that if a < b then also b > a (otherwise what is happening?).
// * It builds a tree to infer transitive comparisons, and tries to maximize
// the use of that tree.
@tylerneylon
tylerneylon / partial_order.js
Created April 29, 2023 21:15
Sort an array using a partial order, ie, using a cmp() function which may return "not sure" as an answer.
// The inputArr is an array of any kind of values.
// The inputCmp() function accepts two values, x and y; with the return
// value indicating the relationship as such:
//
// If: then cmp(x, y) returns:
// x < y '<'
// x > y '>'
// x = y '='
// x ? y null
//
@tylerneylon
tylerneylon / utf8.c
Last active May 3, 2023 12:17
C utf-8 encoder/decoder
// Stops at any null characters.
int decode_code_point(char **s) {
int k = **s ? __builtin_clz(~(**s << 24)) : 0; // Count # of leading 1 bits.
int mask = (1 << (8 - k)) - 1; // All 1's with k leading 0's.
int value = **s & mask;
for (++(*s), --k; k > 0 && **s; --k, ++(*s)) { // Note that k = #total bytes, or 0.
value <<= 6;
value += (**s & 0x3F);
}
return value;
@tylerneylon
tylerneylon / simple_lua_profile.lua
Last active April 13, 2023 11:52
measure Lua code speed
local t_sum = 0
local t_num = 0
local t1, t2, t3
local do_time = true
local function mark1()
if not do_time then return end
t1 = os.clock()
end
@tylerneylon
tylerneylon / json_leaf_caller.py
Created September 28, 2022 20:55
A little function to help analyze / debug / understand a json object.
def call_on_leaves(json_obj, fn, path=None):
path = path or []
if type(json_obj) is dict:
for k, v in json_obj.items():
if not call_on_leaves(v, fn, path + [k]):
return False
elif type(json_obj) is list:
for i, v in enumerate(json_obj):
if not call_on_leaves(v, fn, path + [i]):
return False
@tylerneylon
tylerneylon / toggle
Created March 20, 2023 20:19
A short sweet Python script to simplify starting/stopping a particular ec2 instance
#!/usr/bin/env python3
""" toggle
Usage:
toggle start
toggle getip
toggle stop
"""
@tylerneylon
tylerneylon / fix_aspect.sh
Created January 28, 2023 00:16
A little bash script to make your images 16x9 via adding white border stripes.
#!/bin/bash
if [ -z "$1" ]; then
echo Usage: ./fix_aspect.sh '<img_file>'
echo
echo This will create a new image file with the word 'fixed' appended before
echo the filename extension. Eg, myimg.jpg will become myimg.fixed.jpg.
exit
fi
@tylerneylon
tylerneylon / animated_svg.html
Created March 17, 2016 20:49
Example of an animated geometric figure
<!DOCTYPE HTML>
<html>
<body>
<svg width="600" height="600" vertion="1.1"
id="svg" xmlns="http://www.w3.org/2000/svg">
<defs>
<clipPath id="angleClip">
<polygon id="atriangle" />
</clipPath>
@tylerneylon
tylerneylon / reservoir.py
Created January 12, 2023 19:10
This is an example implementation of an efficient reservoir sampling algorithm.
""" reservoir.py
This is an example implementation of an efficient
reservoir sampling algorithm -- this algorithm is useful
when you have a data stream, possibly of unknown length,
and you'd like to maintain an incrementally updated
random subset of fixed size k. This algorithm works by
occasionally adding a new data point from the stream
into the 'reservoir,' which is simply a length-k list
of data points.