Skip to content

Instantly share code, notes, and snippets.

View nickovs's full-sized avatar

Nicko van Someren nickovs

  • Absolute Software
  • Boulder, CO, USA
View GitHub Profile
@nickovs
nickovs / pathprefix.py
Created April 4, 2018 00:45
Easier handling of file paths in Python
# A Python (3) class for more compact path handling.
#
# If you find yourself calling os.path.join() with the same first parameter
# over and over again it can get rather tedious. Instead you can now go:
#
# path = PathPrefix("/some/path")
# file1 = path / "file1"
# sub_file = path / "subdir" / "file2"
class PathPrefix(str):
@nickovs
nickovs / aws-session.py
Created November 28, 2018 23:47
Easy sessions credentials for Amazon Web Services when multi-factor authentication is required.
#!/usr/bin/env python3
"""Fetch and print temporary session credentials with MFA
To use this tool first put the ARN of your MFA access token into a
file called .aws_token_id in your home directory and ensure that the
tool is on your path. Then execute the command:
eval `aws-session`
You will be promoted to enter your current MFA token value. After this
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@nickovs
nickovs / Hypercircumsphere.ipynb
Last active February 18, 2021 15:47
Compute the N-dimentional (hyper-)circumsphere
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@nickovs
nickovs / stepper.py
Last active November 14, 2023 22:07
A stepper motor driver for MicroPython
# stepper.py
# A micropython driver for 4-phase, unipolar stepper motors such as
# the 28BYJ-48
# Relesed to the Public Domain by Nicko van Someren, 2020
# The constructor for the Stepper class takes as arguments the four
# pins for driving the motor phases, in phase order, and optionally a
# timer. The pins can be passed as pin numbers or machine.Pin objects
@nickovs
nickovs / curve25519.py
Created June 29, 2021 20:39
A pure Python implementation of Curve25519
"""A pure Python implementation of Curve25519
This module supports both a low-level interface through curve25519(base_point, secret)
and curve25519_base(secret) that take 32-byte blocks of data as inputs and a higher
level interface using the X25519PrivateKey and X25519PublicKey classes that are
compatible with the classes in cryptography.hazmat.primitives.asymmetric.x25519 with
the same names.
"""
# By Nicko van Someren, 2021. This code is released into the public domain.
@nickovs
nickovs / zbar_lambda_build.sh
Last active December 27, 2023 19:02
A script for building a version of the Zbar library suitable for running in an AWS Lambda instance
#!/bin/bash
# Clear out old images
[ -d "lib" ] && rm -r lib
cat <<EOF > tmp_recipe.sh
# This is the actual container-side recipe
yum groupinstall -y "Development Tools"
cd /root
@nickovs
nickovs / docker-remount.sh
Created April 17, 2022 16:51
A script to mount a host directory into a running Docker container
#!/bin/bash
# A script for mounting a host directory into a running Docker container
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <container> <host path> <target path>"
exit 1
fi
CONTAINER=$1
@nickovs
nickovs / badger_orion.py
Created May 28, 2022 19:30
A simple script for receiving water meter readings from a Badger ORION water meter using an Software Defined Radio (SDR).
#!/usr/bin/env python3
# A simply tool for receiving water meter readings from a Badger ORION water meter.
# Device radio details can be found at https://fccid.io/GIF2006B
# Requires rtl_433 to be installed. See https://github.com/merbanan/rtl_433
import sys
import json
import subprocess
@nickovs
nickovs / make_git_layer.sh
Created March 13, 2023 16:41
A script to build an AWS Lambda overlay layer that installs `git` and all its dependencies.
#!/bin/bash
# Build an AWS Lambda zip file containing git and its dependencies
cat <<\EOF > tmp_build.sh
#!/bin/bash
# Comment this out if you want to see all the actions.
quiet=-q
# List of main executables from /usr/bin to copy into layer