Skip to content

Instantly share code, notes, and snippets.

View kkirsche's full-sized avatar

Kevin Kirsche kkirsche

View GitHub Profile
@kkirsche
kkirsche / main.py
Last active December 11, 2023 16:34
Versioning Troubleshooting
#!/usr/bin/env python
# BEGIN: history_meta.py
# https://docs.sqlalchemy.org/en/14/_modules/examples/versioned_history/history_meta.html
"""Versioned mixin class and other utilities."""
from __future__ import annotations
import datetime
from collections.abc import Callable, Generator
from typing import TypeAlias, Any
@kkirsche
kkirsche / tomlpath.py
Last active September 14, 2022 19:28
TOML Path — A simple utility class to retrieve a specific key path in a TOML file
from os import PathLike
from functools import reduce
from operator import getitem
try:
# Python 3.11+
from tomllib import load, loads
except ImportError:
from tomli import load, loads
from typing import Any, BinaryIO, Iterable, Mapping, TypeAlias, TypeGuard, Union
@kkirsche
kkirsche / write-blob.go
Last active August 24, 2022 13:24
Writing Git Blob Objects
package main
import (
"bytes"
"compress/zlib"
"crypto/sha1"
"encoding/hex"
"fmt"
"io"
"os"
@kkirsche
kkirsche / rsync.py
Last active August 12, 2022 12:38
rsync algorithm in Python
#!/usr/bin/env python
# based on
# https://tylercipriani.com/blog/2017/07/09/the-rsync-algorithm-in-python/
from collections.abc import Generator
from hashlib import md5
from io import BufferedReader, TextIOWrapper
from logging import DEBUG, INFO, basicConfig, getLogger
from os import PathLike
@kkirsche
kkirsche / asdf-update-all
Last active July 11, 2023 15:01
ASDF Auto Updater
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
if ! command -v jq &> /dev/null
then
echo "jq could not be found"
@kkirsche
kkirsche / foreign-keys.md
Created March 11, 2022 17:41
Locating Database Errors

If you ever run into:

(1005, 'Can't create table `database_name`.`table_name` (errno: 150 "Foreign key constraint is incorrectly formed")

Run:

mariadb -e "SHOW ENGINE INNODB STATUS"
@kkirsche
kkirsche / asdf-updater.sh
Created February 11, 2022 10:40
ASDF Version Checker / Updater
#!/usr/bin/env bash
set -eu -o pipefail;
function check {
PLUGINS=$(asdf plugin list)
echo "Plugin Current Latest"
for plugin in ${PLUGINS}; do
LATEST_VERSION=$(asdf latest ${plugin})
CURRENT_VERSION=$(asdf current ${plugin}| perl -lne 'print $& if /((\d+\.){2}\d+(-otp-\d+)?)/')
@kkirsche
kkirsche / functions.sh
Last active December 19, 2021 13:36
Useful functions to have in a shell
# Load via:
# if [ -f "${HOME}/.functions.sh" ]; then . "${HOME}/.functions.sh"; fi
# MIT License
if [ "${PLATFORM}" = "Linux" ]; then
alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'
fi
function extract() {
@kkirsche
kkirsche / reserved_words_retriever.py
Last active October 19, 2021 14:26
Reserved Word Retriever for SQLAlchemy
#!/usr/bin/env python
"""Usage Example:
$ python reserved_words_retriever.py --help
usage: reserved_words_retriever.py [-h] [-y] [-a] [-w] [-d]
Retrieve the reserved keywords for MySQL and/or MariaDB
options:
-h, --help show this help message and exit
@kkirsche
kkirsche / soundex.py
Last active July 30, 2021 17:44
SOUNDEX implementation
#!/usr/bin/env python
"""The following module is an implementation of American SOUNDEX.
SOUNDEX is a phonetic algorithm for indexing names by sound, as pronounced in English.
The goal is for homophones to be encoded to the same representation so that they can be
matched despite minor differences in spelling.
This implements the algorithm as defined on:
https://en.wikipedia.org/wiki/Soundex#American%20Soundex