This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python | |
# OS-Agnostic PS5 DualSense Controller Listener | |
# Author: Scott H. Hawley | |
# Instructions: | |
# 1. Pair the DualSense controller with your computer | |
# 2. Install hidapi system binary, e.g. on Mac: brew install hidapi | |
# 3. Install Python packages: pip install hidapi pygame numpy | |
# 4. Run this script! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# tails output of any SLURM job that is listed in the queue. | |
# if job is pending, tailjob will wait until the output file exists | |
# usage: tailjob <job_id> | |
tailjob() { | |
local job_id=$1 | |
if [[ -n "$job_id" ]]; then | |
local stdout_file=$(scontrol show job "$job_id" | awk -F= '/StdOut=/{print $2}') | |
echo "Running tail -F $stdout_file" | |
tail -F "$stdout_file" | |
else |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from einops import rearrange as _rearrange | |
class RearrangeWrapper(): | |
"wrapper to endow einops.rearrange with an 'inverse' operation" | |
def __init__(self): | |
self.shape, self.s = None, None # just in case someone tries to call inverse first | |
def __call__(self, x, s:str, **kwargs): # this 'forward' call is lightweight to preserve original usage | |
self.shape, self.s = x.shape, s | |
return _rearrange(x, s, **kwargs) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def magic_mult(a, b): | |
""" | |
Tries to multiply two arrays/matrices in a variety of ways | |
Returns all possible working combos as a dict, with the shapes of their respective outputs | |
Author: Scott H. Hawley, @drscotthawley | |
""" | |
combos = ['a*b', 'a*b.T', 'a.T*b', 'a.T*b.T','b*a', 'b*a.T', 'b.T*a', 'b.T*a.T'] # elementwise multiplications | |
combos += [s.replace('*',' @ ') for s in combos] # matrix multiplications (I like the space here) | |
working_combos = {} | |
for s in combos: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python3 | |
""" | |
SLURM usage tracker Discord bot by drscotthawley & rom1504 | |
Requires external file token_channel.csv to connect to Discord | |
Syntax of that file should be: | |
token,channel | |
<DISCORD_BOT_TOKEN>,<CHANNEL_ID> |
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
# Do violence to the Logitech C920s webcam settings in realtime | |
# To annoy your Zoom-mates by constantly changing the image | |
from pynput.keyboard import Listener | |
import os, sys | |
import random | |
import time |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# In case you didn't think to add k-fold cross-validation until late in your | |
# ML project,... | |
# This is built for a situation where datasets are arrays of, say, images. | |
def kfold_swap(train_X, train_Y, val_X, val_Y, k): | |
""" | |
Swaps val with a section of train, given a value for k | |
"Duct tape" approach used to "retro-fit" k-fold cross-validation while minimally | |
disturbing the rest of the code, while avoiding reloading data from disk and | |
keeping RAM use manageable. (e.g. np.append() is bad b/c it would copy all of train) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python | |
''' | |
Simulation of a 'magnetic' pendulum. Actually we'll just use | |
electrostatic charges instead of magnets, but..good enough, right? | |
Plots an image showing which source the object is closest to after a certain time | |
(Note: Depending on params like maxiter, the object may still be moving at the | |
end of the simulation, so the 'ending position' may not be where it comes to rest.) | |
This code integrates all the (non-interacting) test objects at once, on the GPU. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env python | |
# Little script I use to start a new Markdown blog entry. | |
# Run from the parent directory above the blog directory, | |
# or supply a full path to run from anywhere. | |
# | |
# Usage: newpost.py <title> | |
# It automatically figures out what the current date is to | |
# create a new entry, and supplies a default header with a title | |
# and a bibliography placement |
NewerOlder