Skip to content

Instantly share code, notes, and snippets.

R. DuPlain rduplain

Block or report user

Report or block rduplain

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
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.
rduplain / vpn
Last active Oct 4, 2018
OpenVPN rc.d script for VPN client, intended for BSD jail which is focused on a single service.
View vpn
# PROVIDE: vpn
# KEYWORD: shutdown
# vpn service designed for a jail which is focused on a single service.
# Uses OpenVPN and assumes the configuration does not need any authentication
# beyond the given .conf file. Consider an approach using `expect` if needed:
rduplain / rrsync-mountpoint
Created Dec 27, 2017
Ensure rrsync subdirectory is a mountpoint.
View rrsync-mountpoint
# Simple pre-rsync check to ensure rrsync subdirectory is a mountpoint.
# That is, only allow rsyncing to a mounted drive, and fail otherwise.
# Drop-in replacement for rrsync in .ssh/authorized_keys.
# Assume -ro always comes before the subdirectory, if provided.
if [ $# -eq 0 ]; then
rduplain /
Last active Dec 9, 2017
"21 Rules of Thumb for Shipping Great Software on Time" by Jim McCarthy at Microsoft

21 Rules of Thumb for Shipping Great Software on Time

Jim McCarthy, Microsoft Corporation

Shipping great software on time is a difficult but not impossible task. Elements you think would count the most count for very little. Development methodology, process, technical prowess, excellence of tools and depth of project management skills all influence the outcome of a software development project; but nothing indicates success as much as the manager's ability to focus on a few critical and conceptually simple things. These things can be expressed as rules of thumb.

I enumerate twenty-one of these rules of thumb. Pick a handful (or so), apply them, and your project will be more likely to succeed. I lump them into three groups: "Shipping," "Great Software," "On Time". Duh. I cover them in a different order, because the concepts build a bit.

On Time

You can’t perform that action at this time.