Skip to content

Instantly share code, notes, and snippets.

@thediveo
thediveo / extract-frames
Last active October 10, 2024 09:11
Scans for extracted frame image PNG files and (re)extracts the frame directly from their corresponding video media files, using source resolution and orientation instead of project resolution and orientation. Frame image PNG files are searched in the current working directory, as well as all its sub directories.
#!/bin/bash
#
# (Re-) Extract frame images directly from its corresponding video media
# file. The frame image filenames are expected to be in the format of
# videofilename-f000000.png, that is: the filename of the video media file,
# but without its extension, then followed by "-f" and a six digit frame
# number (base 10), and finally the ".png" suffix.
#
# Copyright 2018 TheDiveO
#
@thediveo
thediveo / tapclient.c
Last active March 22, 2019 07:38
TAP client supporting specifying TAP ifname and TAP client network namespace
/* modified from: https://github.com/a34729t/exp/blob/master/tunclient.c */
#define _GNU_SOURCE
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <net/if.h>
#include <linux/if_tun.h>
@thediveo
thediveo / registry.sh
Created April 6, 2019 15:56
Operate a host-local Docker container registry for kubeadm-dind clusters.
#!/bin/bash
# TheDiveO
function log {
local OPTS=""
if [[ "$1" = "-n" ]]; then
shift; OPTS+="-n"
fi
MSG="$1"
shift
@thediveo
thediveo / transcode-raw-screenrecording.sh
Created May 16, 2019 19:45
Correctly transcode in-device Android screen recordings (which were created by ffmpeg), so that they can be correctly edited and processed further during post. In particular, enforces a fixed framerate and the correct color coefficients.
#!/bin/bash
# Correctly transcode in-device screen recordings from Android, so they
# do not cause all kinds of mishaps later down the editing and rendering
# pipeline. In particular, enforces a fixed framerate to avoid problems
# with widely varying dynamic frame rates, which can go from anywhere
# a frame every 10s of seconds to 100fps or so. Additionally, we
# enforce the correct color coefficients for the transcoding to avoid
# video tools to guesstimate completely nonsense transformation -- ffmpeg,
# I'm looking at you here.
shopt -s extglob
@thediveo
thediveo / runwithkp.sh
Created July 12, 2019 18:29
Starts local Kubernetes API proxy and creates a suitable context, runs application, then stops the proxy after the application has finished.
#!/bin/bash
CONTEXT="minikube"
PROXYCONTEXT="proxykube"
function cleanup {
kubectl config delete-context $PROXYCONTEXT 2>/dev/null
kubectl config delete-cluster $PROXYCONTEXT 2>/dev/null
}
@thediveo
thediveo / inversehierarchy.sh
Last active December 23, 2019 08:30
Can child(!) PID namespaces be owned by parent(!) user namespaces?
#!/bin/bash
# Test the hypothesis that PID namespace hierarchy cannot "run on reverse" to
# the user namespace hierarchy. In particular, a PID child namespace cannot be
# owned by a parent user namespace. However, a PID namespace can be a child of a
# PID namespace owned by a parent user namespace.
echo "trying to create a child PID namespace which is owned by a parent user namespace..."
NSTEXTREPR='([[:alpha:]]+):\[([[:digit:]]+)\]'
SECTION="--------------------"
@thediveo
thediveo / nsfdref.py
Created January 9, 2020 20:05
Demonstrates keeping namespaces alive by keeping an open fd for them, as well as how the discovery powers of "lsns" and "lsuserns" differ.
# nsfdref.py
#
# Creates two network namespaces, referencing the first one by fd, and
# showing the output of "lsns" versus "lsuserns". "lsuserns" is able
# to discover the first network namespace from the fd which keeps the
# namespace alive.
#
# Requires these Python3 packages:
# - pip3 install unshare
# - pip3 install python-prctl
@thediveo
thediveo / !netlinknetns
Last active April 29, 2023 20:47
Discovering the network namespace an (RT)NETLINK socket connects to
gist title
@thediveo
thediveo / !DockerGoWorkspaces.md
Last active September 27, 2024 01:04
Dynamic Go workspace Docker build contexts

(gist title)

This gist assumes the following directory structure:

  • foobar-ws/
    • bar/
      • bar.go
      • go.mod
    • foo/
  • foo.go
@thediveo
thediveo / pype.py
Created December 21, 2023 19:50
Detecting the reader of a named pipe disconnecting (or not, I'm looking at you, macOS)
import os
import tempfile
import atexit
import shutil
import time
import select
def writer(fifoname):
print("writer: start...")
w = open(fifoname, 'w')