Skip to content

Instantly share code, notes, and snippets.

View zwave-js-hank-scn04-4-button-remote.yaml
name: Hank Four-button Scene Controller
description: Create automations for Hank Electronics / Technisat 4-button remote using the ZWave-JS integration
domain: automation
name: Hank Four-button Controller
rduplain /
Last active Jul 23, 2021
Bootloader configuration for multiple .iso files on a USB drive.
# Use grub to boot .iso files directly from /boot/iso.
# This file lives at /etc/grub.d/25_iso and is executable.
# Open .iso files to inspect internal /boot files for grub config hints.
# /boot is on the third partition of a gpt-partitioned USB drive.
ISO_PART_UUID="0a5086cd-8fdf-4ae0-a248-67411ebbbb18" # UUID of /boot `blkid`.
rduplain /
Created Jun 10, 2020 GitHub identity

Keybase proof

I hereby claim:

  • I am rduplain on github.
  • I am rduplain ( on keybase.
  • I have a public key ASBpT-VcyhSXJu1CXyxN0b1TgOZANozAJFVXKVeZSPaxjQo

To claim this, I am signing this object:

rduplain /
Last active Apr 22, 2020
Amazon Dash→LIFX Power
#!/usr/bin/env python
# Detect Amazon Dash button network broadcast, toggle LIFX power based on MAC.
# Usage, with Amazon Dash buttons connected to LAN WiFi (see below for setup):
# 0. Configure `BUTTONS` with MAC to LIFX selector & `LIFX` with token.
# 1. Configure network firewall to block WAN out from dash MAC.
# 2. Install dependencies with `pip install requests scapy` on Python 3.
# 3. Run as root.
rduplain /
Last active Nov 28, 2019
Vagrantfiles for testing configuration management (Ansible).

Vagrantfiles for testing configuration management (Ansible).


Configuration management that runs over SSH, namely Ansible, benefits in having test machines available on the network. The enclosed Vagrantfiles provide multiple virtual machines to run as guests on the developer's machine. The guests appear as hosts on the LAN, providing a local ephemeral cloud.

The virtual machines here are similar, but different. One provides **Ubuntu

rduplain / refresh-hosts.bash
Last active Nov 8, 2019
Refresh /etc/hosts file with unpublished IPv4 aliases.
View refresh-hosts.bash
#!/usr/bin/env bash
# Refresh /etc/hosts file with unpublished IPv4 aliases.
# Set /etc/hosts.alias with domain/alias pairs, one pair per line:
# server-alias
# another
rduplain / Vagrantfile
Last active Oct 18, 2019
Simple FreeBSD vagrant.
View Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.guest = :freebsd = "freebsd/FreeBSD-11.3-RELEASE"
config.vm.box_version = "2019.07.05"
config.vm.box_check_update = false
rduplain / nginx-site-include.conf
Last active Nov 8, 2019
Configuration files for deployment on a single server.
View nginx-site-include.conf
# nginx configuration
# gzip is enabled, but only used by clients requesting it:
# curl -H 'Accept-Encoding: gzip,deflate' -sSL
server {
listen 80;
rduplain /
Last active Sep 18, 2018
beCamp 2018 guest blog post for ButterCMS

beCamp: Charlottesville's Annual Unconference (now using ButterCMS)

beCamp is like any of the best conferences you've attended. Multiple sessions at a time take place throughout the day, with a generous lunch break. The topics are relevant, current, and thought-out, whether presentations or round-table discussions. The differences? It's local to Charlottesville, it's free to attendees--including refreshments and meals--thanks to sponsors, and the entire agenda was created the night before by conference attendees.

That evening, 100+ optimists show up to meet each other, often for the first time, and pitch ideas. It works, every time. Attendees leave the event with inspiration unlike anything they expected, better than anything they expected.

Two things happen when attendees organize the agenda:

  1. Whatever topic of most interest to the room is the one currently in discussion.
  2. Whoever has perspective on the topic has an opportunity to take the floor.
View ClojureScript - Native Executables.ipynb
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.