Skip to content

Instantly share code, notes, and snippets.

@cmdoptesc
cmdoptesc / stickers.md
Last active October 17, 2025 17:36
Remix stickers

Please see the five screenshots below

@cmdoptesc
cmdoptesc / canvas-drawimage.html
Created September 5, 2025 23:59
Canvas drawImage with SVG coloring
<html>
<head>
<title>Canvas drawImage SVG test</title>
<script>
window.addEventListener("load", (event) => {
const canvas = document.createElement('canvas');
canvas.width = 800;
canvas.height = 600;
canvas.style.border = '1px solid black';
document.body.appendChild(canvas);
@cmdoptesc
cmdoptesc / ps-filter-long-running-chrome.md
Last active September 14, 2023 04:14
ps - list processes running longer than x with name y
@cmdoptesc
cmdoptesc / bikes-shimano-compatibility-history.md
Created July 4, 2023 20:10
A Brief History of Shimano Compatibility by nalc

A Brief History of Shimano Compatibility by nalc / "Always gritty in Philly"

Mirror of https://old.reddit.com/r/Velo/comments/84z9p9/a_brief_history_of_shimano_compatibility/

I promised /u/thirty-five- that I would give him another writeup for the wiki, and I've got some time today so I figured why the hell not tackle drivetrain and derailleur compatibility?

As usual, the late great Sheldon Brown is a fantastic resource, but following his passing in 2008 it is rather hit or miss whether you can find compatibility information on newer stuff.

To start off with a disclaimer, this information is compiled from a variety of sources and while I believe it to be correct, there could be mistakes. Feel free to point them out and I will correct them.

To start off, we must explain how a derailleur works. At the simplest level, the point of the derailleur is to move the chain sideways at the point where it meshes with the chainrings or sprockets, forcing the chain onto the adjacent chainring or sprocket. In ye olde

Option 1: Command-line download extension as zip and extract

extension_id=jifpbeccnghkjeaalbbjmodiffmgedin   # change this ID
curl -L -o "$extension_id.zip" "https://clients2.google.com/service/update2/crx?response=redirect&os=mac&arch=x86-64&nacl_arch=x86-64&prod=chromecrx&prodchannel=stable&prodversion=44.0.2403.130&x=id%3D$extension_id%26uc" 
unzip -d "$extension_id-source" "$extension_id.zip"

Thx to crxviewer for the magic download URL.

@cmdoptesc
cmdoptesc / script-template.sh
Created November 28, 2021 21:54 — forked from m-radzikowski/script-template.sh
Minimal safe Bash script template - see the article with full description: https://betterdev.blog/minimal-safe-bash-script-template/
#!/usr/bin/env bash
set -Eeuo pipefail
trap cleanup SIGINT SIGTERM ERR EXIT
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P)
usage() {
cat <<EOF
Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-f] -p param_value arg1 [arg2...]
@cmdoptesc
cmdoptesc / listing_boto3_exceptions.md
Last active December 11, 2019 18:46
Listing Boto3 Exceptions

Listing Available AWS Boto3 Exceptions

alexpareto commented on Jul 22, 2019

An ugly, but workable solution to find out what exceptions are available on each client from the command line:

import boto3
client = boto3.client('sns')  # or whatever client you're using
# client.exceptions.__dict__
@cmdoptesc
cmdoptesc / parallel_lambda_test.py
Created November 22, 2019 02:56
Parallel lambda invocations with Python concurrent futures
#!/usr/bin/env python3
# parallel_lambda_test.py
import random
import pendulum
import time
from concurrent import futures
# The problem is that the AWS boto3 lambda invoke function is not truly asynchronous
@cmdoptesc
cmdoptesc / concurrent_map_test.py
Last active November 22, 2019 02:46
Python concurrent futures map test playground
#!/usr/bin/env python3
# concurrent_map_test.py
import random
import pendulum
import time
from concurrent import futures
from functools import reduce
@cmdoptesc
cmdoptesc / windows_netsh_forwarding.txt
Created June 26, 2018 01:49
Windows port/address forwarding with netsh
netsh interface portproxy show all
netsh interface portproxy add v4tov4 listenport=8081 listenaddress=127.0.0.1 connectport=8081 connectaddress=[remote-ip]
netsh interface portproxy reset