Skip to content

Instantly share code, notes, and snippets.

Avatar
💣
New releases are coming soon!

chris mckenzie kristopolous

💣
New releases are coming soon!
View GitHub Profile
View 7segscroll.ino
#include <TM1637.h>
//
// This is just some mish-mash of a bunch of things but it's posted for the video over here:
// https://youtu.be/JN4j-aCagH0
//
// How you set the date:
// exec 3<> /dev/ttyUSB0
// printf "$(date "+obase=16;4096+(%H*60+%M)" | bc | sed -E s'/(..)/\\x\1/g')" > /dev/ttyUSB0
// exec 3<&-
@kristopolous
kristopolous / plug.py
Created Nov 13, 2022
A simple Emporia command line interface
View plug.py
#!/usr/bin/python3
import pyemvue as pyem, json, sys
with open('keys.json') as f:
data = json.load(f)
v = pyem.PyEmVue()
v.login(id_token=data['id_token'],
access_token=data['access_token'],
refresh_token=data['refresh_token'],
token_storage_file='keys.json')
@kristopolous
kristopolous / top-10-slow.sh
Last active Nov 3, 2022
top-10 URIs in the apache log in pure bash
View top-10-slow.sh
#!/bin/bash
# This is a very crazy 1-liner that only uses builtins
#set -o noglob;declare -a mapper=() count=();exec 3<access.log; while read -a lines -u 3; do [[ ${lines[5]} != '"GET' ]] && continue; page="${lines[6]}"; ix=0;for i in "${mapper[@]}"; do [[ "$page" = "$i" ]] && break; (( ix++ )); done ; if [[ "$page" = "$i" ]]; then (( count[$ix] ++ )); else mapper+=( $page ); count[$ix]=1; fi; done; (( max=-1, winner=-1, show=10 )); while (( show > 0 )); do ix=0;for i in "${count[@]}"; do (( i > max )) && (( max=i, winner=ix )) ;(( ix++ ));done; builtin echo -e "${count[winner]}\t${mapper[$winner]}";(( count[$winner]=-1, max=0, show-- )); done;
# Here's a formatted nice version
# We need to make sure that bash doesn't do weird substitution
set -o noglob
declare -a mapper=() count=()
# And to avoid cat we do file descriptors
exec 3<access.log
@kristopolous
kristopolous / animal-say.sh
Last active Oct 31, 2022
Animal-say fortune, like cowsay but more animals and faster
View animal-say.sh
#!/bin/bash
cat << ENDL
- - - ~ ~~~~==~#=###=#~==~~~~~ ~ - - -
$(fortune | sed -E 's/^\s+//g' | fold -sbw 40 | sed -E 's/^/ /')
- - - ~ ~~~~==~#=###=#~==~~~~~ ~ - - -
$(curl -s https://9ol.es/animals.db | shuf -n 1 | tr 'F' '\n' | gawk ' { if (FNR == 1) { printf " \\ ";} else if (FNR == 2) { printf " \\ "; } else { printf " " }; print $0 } ';)
ENDL
@kristopolous
kristopolous / simple-datepicker-react.js
Last active Jan 25, 2022
simple datepicker using Intl.DateTimeFormat
View simple-datepicker-react.js
// this is more a guide than working code.
constructor(props) {
super(props);
let minimum_age = 21;
this.endyear = (new Date().getYear() + 1900) - minimum_age;
this.state = {
dob_year: this.endyear,
dob_month: 0
@kristopolous
kristopolous / generate-words.py
Created Jan 5, 2022
No solution word search
View generate-words.py
#!/usr/bin/env python3
# Here's the prompt:
#
# Construct a "word search" N x M letter grid where:
#
# * There are NO possible words horizontal or vertical
# * The letters appear random with no trivial patterns
# * The frequency distribution of letters is close to English prose
#
# This is a naive implementation
@kristopolous
kristopolous / transp.py
Last active Sep 20, 2021
transposition die roll example
View transp.py
#!/usr/bin/env python3
import random
def encode(plain):
plain = list(plain)
cypher = ''
while len(plain) > 0:
# Roll a die, add 3 to the result
step = random.randint(4,9)
# start at the beginning of the remaining string
View gist:d3211dfb395bbb922fee14665dd941cb
#/bin/bash
# /etc/init.d/xdm: Login Procedure for Bob480
# Edited Sept-2001; Contact Author: cjm@ucdavis.edu
n=$1
n=$n"."
[ $n == "stop." ] && exit
moveon=0
set PATH="/bin:/usr/bin:/sbin"
View process.py
#!/usr/bin/python
import sys
import png
import os
import numpy as np
import json
import math
import time
import random
View gist:40943f2babfcaa6fdb48953192fb352b
#!/usr/bin/python
import sys
import png
from pprint import pprint
cx = 0
width = 4000
height = 4000
image = [ [ 0 for y in range ( width ) ] for x in range( height ) ]