Skip to content

Instantly share code, notes, and snippets.


Ken "Elf" Mathieu Sternberg elfsternberg

View GitHub Profile
elfsternberg /
Created Apr 6, 2022 — forked from andremueller/
A bash template with argument parsing and error handling
# my bash template
set -o errexit
set -o nounset
shopt -s nullglob
SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
function die() {
echo "ERROR $? IN ${BASH_SOURCE[0]} AT LINE ${BASH_LINENO[0]}" 1>&2
elfsternberg /
Last active Oct 26, 2021
A primitive "dump the current OneTab collection kept in my Chrome Browser" script.
import os
from subprocess import Popen, PIPE
import binascii
import json
import ast
# An extremely primitive dump of the
# [OneTab]( local database.
# Logic is derived from [Recovering data from
function cg {
CG=$(git rev-parse --show-toplevel 2> /dev/null)
if [ $? -eq 0 ] && [ -d "$CG" ]; then
cd "$CG" || echo "\033[${RED}WARNING: Could not cd to top directory of git repository\033[00m"
echo -e "\033[${RED}WARNING: Not in a git repository\033[00m"
elfsternberg / truetype.latex
Created Apr 17, 2020
Modified Pandoc default.latex template, now with Truetype and Opentype support.
View truetype.latex
% This is the default.latex file from Pandoc with a single change: I
% have added the fontspec, xunicode, and xltxtra packages to the
% fontenc invocation. This change allows you to use your Truetype and
% Opentype fonts with pandoc and make your markdown even prettier than
% ever. Example usage:
% pandoc --pdf-engine=xelatex --template=truetype.latex -V mainfont="Centaur MT Std" -o recipe.pdf
elfsternberg /
Created Apr 6, 2020
A simple perl script to enable bulk renaming of files.
#!/usr/bin/env perl
# RN
# `rn` is a bulk renaming script for the Linux filesystem. It takes a
# single transformation argument followed by a list of filenames. The
# transformation argument must be a perl expression, but most of the
# time that amounts to a simple regular expression.
# Examples:
elfsternberg /
Last active Apr 17, 2020
Quick, hacky shell script to download and install Microsoft Media Framework into Proton 4.11 to support Borderlands on Steam.
#!/usr/bin/env bash
LOCATE=$(command -v locate)
if [ -z "$LOCATE" ]; then
echo "The program 'locate' is not available. Cannot determine location of steam install."
exit 1
STEAMS=$(locate compatdata | grep steam | sed 's/\(steam.*compatdata\).*$/\1/' | sort | uniq | wc -l)
if [ "$STEAMS" -eq 0 ]; then
elfsternberg / uncle_bob_1.sql
Last active May 9, 2020
Uncle Bob's "Principles of Programming" lecture, reduced to a small SQL file with examples.
View uncle_bob_1.sql
Microsoft elder Robert Martin, aka "Uncle Bob," has a long series of
videos where he lectures on the joys and benefits of object oriented
programming. One thing he likes to say over and over is that your
data should not be tied up by the choice of representation, and that
the most problematic of all data representations is the choice of a
database far too early in the development process.
In his presentation on the Single Responsibility Principle (which I
elfsternberg / dump_tweets.hy
Last active Nov 17, 2019
Given a Twitter Archive folder, dump every original (i.e. not retweeted) text in the folder.
View dump_tweets.hy
#!/usr/bin/env hy
; As quick and dirty as it gets. Tested on hy 0.17
; [hy](
(require [hy.extra.anaphoric [ap-each ap-reduce ap-map ap-filter]])
(require [hy.contrib.walk [let]])
(import json os)
(defn file-list []
elfsternberg / Makefile
Created Oct 3, 2019
A Makefile recipe for attaching short help messages to targets
View Makefile
.PHONY: default help
default: help
help: ## Print this help message
@M=$$(perl -ne 'm/^((\w|-)*):.*##/ && print length($$1)."\n"' Makefile | \
sort -nr | head -1) && \
perl -ne "m/^((\w|-)*):.*##\s*(.*)/ && print(sprintf(\"%s: %s\t%s\n\", \$$1, \" \"x($$M-length(\$$1)), \$$3))" Makefile
View simple-library.hsfiles
{-# START_FILE package.yaml #-}
name: {{name}}
license: MPL-2.0
author: {{author-name}}{{^author-name}}Author name here{{/author-name}}
maintainer: {{author-email}}{{^author-email}}{{/author-email}}
copyright: {{copyright}}{{^copyright}}{{year}}{{^year}}2019{{/year}} {{author-name}}{{^author-name}}Author name here{{/author-name}}{{/copyright}}