Skip to content

Instantly share code, notes, and snippets.

Avatar
🗃️
Archiving all the things!

Nick Sweeting pirate

🗃️
Archiving all the things!
View GitHub Profile
@pirate
pirate / asymptotic_progress_bar.py
Last active Jul 18, 2021
A nice python progress bar timer that fills logarithmically. Good for when you don't know how long a task is going to take but you want it to feel fast.
View asymptotic_progress_bar.py
#!/usr/bin/env python3
# asymptotic_progress_bar.py
# MIT License © 2021
#
# A pretty non-blocking python progress bar timer that fills up asymptotically until you stop it.
# Good for when you don't know how long a task is going to take (up to some max timeout),
# but you want it to feel fast and accurate / not stuck the whole time.
# ████████████████████ 0.9% (1/60sec)
#
# Usage:
@pirate
pirate / auto_timezone_from_browser.html
Last active Apr 11, 2021
Automatically get the user's timezone from their browser time (for Django but works elsewhere).
View auto_timezone_from_browser.html
{% load tz %}
<html>
<head>
<script>
{% get_current_timezone as TIME_ZONE %}
window.TIME_ZONE = '{{TIME_ZONE}}' // timezone server thinks we're in
function setCookie(name, value, days) {
let expires = ""
if (days) {
@pirate
pirate / django_auto_tz.py
Created Mar 23, 2021
Automatic timezone detection based on the user's browser for Django
View django_auto_tz.py
# Inspiration from here: https://tutti.me/post/5453/
# Or you can use a library like:
# - https://github.com/adamcharnock/django-tz-detect (last updated 2019)
# - https://github.com/Miserlou/django-easy-timezones (last updated 2016)
# - https://github.com/jamesmfriedman/django-easytz (last updated 2015)
# Or guess TZ using visitors IP GEOIP: https://codereview.stackexchange.com/questions/161261/set-time-zone-from-cookie
# settings.py
TEMPLATES = [{
@pirate
pirate / request_logging_with_filenames.js
Created Mar 12, 2021
Show filename:lineno for every log message in node. Log the time, origin ip, method, and url for every express.js request.
View request_logging_with_filenames.js
// patch console.log to show filename and line number for every logged message
//
// ./src/index.js:68:9 √ Connected to Sentry
// ./src/index.js:72:9 √ Connected to Stripe
// ./src/index.js:82:9 √ Connected to Backblaze
// ./src/index.js:99:9 √ Connected to FireBase
// ./src/routes/paypal.js:68:17 Error: Request failed with status code 401
// at createError (./node_modules/axios/lib/core/createError.js:16:15)
// at settle (./node_modules/axios/lib/core/settle.js:17:12)
// at IncomingMessage.handleStreamEnd (./node_modules/axios/lib/adapters/http.js:236:11)
@pirate
pirate / check_github_usernames.py
Last active Sep 19, 2021
Quickly check to see if each username in a list of potential GitHub usernames is available or taken
View check_github_usernames.py
#!/usr/bin/env python3
# Usage:
# pip3 install PyGithub
#
# echo someusername | python3 check_github_usernames.py
# # or
# python3 check_github_usernames.py < list_of_usernames.txt
#
# [+] Starting to check 1212 usernames on GitHub...
# X agq (is taken)
@pirate
pirate / test_stdin_stdout_stderr.py
Last active Feb 19, 2021
Get all the information you could ever want about stdin, stdout, and stderr file descriptors in Python (e.g. is it a TTY, terminal, pipe, redirection, etc.)
View test_stdin_stdout_stderr.py
#!/usr/bin/env python3
# Get all the information you could ever want about the STDIN, STDOUT, STDERR file descriptors (e.g. is it a TTY, terminal, pipe, redirection, etc.)
# Works cross-platform on Windows, macOS, Linux, in Docker, and in Docker-Compose by using stat library
#
# Useful for detecting and handling different stdin/stdout redirect scenarios in CLI scripts,
# e.g. is the user piping a file in or are they interactively typing things in?
# is the process output being saved to a file or being printed to a terminal?
# can we ask the user for input or is it a non-interactive masquerading as a TTY?
#
# Further reading:
@pirate
pirate / periodicrestarter.supervisord.conf
Created Feb 4, 2021
Periodically restart some services every n seconds/minutes/hours with supervisord
View periodicrestarter.supervisord.conf
[program:example-server]
command=npm run start:dev
directory=/opt/%(program_name)s
stdout_logfile=/opt/%(program_name)s/data/logs/server.log
redirect_stderr=true
autostart=true
autorestart=true
startretries=5
stopwaitsecs=30
stopsignal=TERM
@pirate
pirate / compress_videos.sh
Created Jan 30, 2021
Re-encode a bunch of video files into x265 MP4 without losing EXIF metadata
View compress_videos.sh
#!/usr/bin/env bash
# Requires: ffmpeg, exiftool (install via apt/brew first)
# Usage:
# $ cd ~/Videos
# $ ./compress_videos.sh
# [+] Converting all .mp4 files in ~/Videos to .x265.mp4 files...
# - √ GP013838.mp4 (2.5GB) -> GP013838.x265.mp4 (142MB)
# - √ ...
# [√] Done converting all .mp4 files in $PWD.
@pirate
pirate / rename_videos.sh
Created Jan 30, 2021
Rename a bunch of movie files to include the GPS location and recorded date from EXIF metadata
View rename_videos.sh
#!/usr/bin/env bash
# Requires: exiftool, mediainfo (install via apt/brew first)
# Usage:
# $ cd ~/Videos
# $ ./rename_videos.sh
# GP013838.MP4 -> 2018-10-12_08-59-59__Montreal_QC_Canada__GP013838.mp4
# ...
GOOGLE_MAPS_API_KEY="yourkeyhere"
@pirate
pirate / cloudflare_dns_secrets.fish
Last active Jan 30, 2021
Get and set config & secret values in DNS TXT records (via CloudFlare API)
View cloudflare_dns_secrets.fish
#!/usr/bin/env fish
# Script to store and retrieve config/secret key=value pairs in Cloudflare DNS records
# Encrypts secrets with a specified passphrase + salt using AES-256-CBC
#
# Usage:
#
# $ set_config some_config_key "example config value abc"
# $ get_config some_config_key
# example config value abc
#