Skip to content

Instantly share code, notes, and snippets.

View nealey's full-sized avatar
🐢

Neale Pickett nealey

🐢
View GitHub Profile
@nealey
nealey / dockerfile
Created August 4, 2017 18:42
Complete system for Cyber Fire net-re class
FROM alpine
RUN apk --no-cache add tmux sudo vim less
RUN echo 'ALL ALL=NOPASSWD: ALL' | tee /etc/sudoers.d/house-is-a-rockin
WORKDIR /usr/local/src
RUN apk --no-cache add build-base git
RUN git clone https://github.com/dirtbags/fluffy
RUN make -C fluffy install DESTDIR=/usr/local
@nealey
nealey / await-change.sh
Created September 21, 2017 17:19
Shell function to block until files are written
# while await-change *.c; do make && ./run; done
await_change () {
ts=/tmp/await-change.$$
: >$ts
while sleep 0.3; do
for fn in "$@"; do
if [ $fn -nt $ts ]; then
rm -f $ts
return
@nealey
nealey / slack-emoji-bulk-delete.js
Last active May 25, 2023 23:09
Bulk delete every custom emoji in Slack
//
// I just found out that we have a bunch of NSFW emoji in our bulk-imported set of >4000 emoji.
// Rather than weed them out, I want to start with a blank slate. This code does that.
//
// Navigate to your "Custom Emoji" page, the one with all the delete buttons.
// Delete one of them and acknowledge that it's going away forever.
// Then open the JavaScript console and paste this in.
//
// At some point your JavaScript console will start spewing errors.
// Reload the Emoji page, delete one emoji by hand again, and paste this in again to resume.
@nealey
nealey / rproxy-docker-containers.conf
Last active November 9, 2017 20:35
nginx configuration to reverse proxy to any docker image it can resolve
server {
listen 443 default_server ssl http2;
// server_name if you need it
// don't forget your SSL configuration
location ~ ^/([^/]+)/ {
resolver 127.0.0.11;
proxy_pass http://$1/;
}
<!DOCTYPE html>
<html>
<head>
<title>Starship Engine Noise</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
function whiteNoise(audioCtx) {
var bufferSize = 17 * audioCtx.sampleRate,
noiseBuffer = audioCtx.createBuffer(1, bufferSize, audioCtx.sampleRate),
output = noiseBuffer.getChannelData(0);
@nealey
nealey / webmidi-explore.html
Created March 18, 2018 16:46
WebMIDI explorer: prints all MIDI messages, and lets you craft messages to send
<!DOCTYPE html>
<html>
<head>
<title>Web MIDI explorer</title>
<style>
.message span {
padding: 0.5em;
}
.message .type {
font-weight: bold;
@nealey
nealey / Dockerfile
Created April 19, 2018 14:05
Build Rocket r750 driver
FROM bugroger/coreos-developer:${COREOS_VERSION} as BUILD
ENV R750_VERSION=v1.2.10.1-17_01_23
RUN emerge-gitclone
RUN . /usr/share/coreos/release && \
git -C /var/lib/portage/coreos-overlay checkout build-${COREOS_RELEASE_VERSION%%.*}
RUN emerge -gKv coreos-sources > /dev/null
RUN cp /usr/lib64/modules/*/build/.config /usr/src/linux/
RUN make -C /usr/src/linux modules_prepare
@nealey
nealey / docker-tags.sh
Last active October 28, 2022 03:08 — forked from robv8r/docker_tags.sh
List Docker Image Tags using Bourne shell (including Bash)
#! /bin/sh
image="$1"; shift
if [ -z "$image" ] || [ "$image" == "--help" ]; then
echo "Usage: $0 IMAGE"
echo
echo "Prints all tags associated with IMAGE in a docker repository"
exit 1
fi
@nealey
nealey / dvdrip.sh
Created April 20, 2019 19:27
Rip (transcode) DVD chapters into individual mp4 files
#! /bin/sh
# If you have more than 50 chapters, you'll need to bump this value up.
# It doesn't hurt anything to have the number too high, though.
for i in $(seq -w 1 50); do
echo "== Chapter $i"
HandBrakeCLI \
--input /mnt/chromeos/removable/No\ Label/ \
--crop 0,0,0,0 \
--chapters $i \
@nealey
nealey / djb2hash.awk
Last active May 29, 2022 12:33
djb / dbj2 hash in awk
function ord(c) {
for (i = 0; i < 256; i += 1) {
if (sprintf("%c", i) == c) {
return i
}
}
return 256
}
function hash(str) {