Software Projects

The Things Network

The Things Network is a grass roots, community driven, effort to provide free access for low power, low speed Internet of Things deployment in cities or other regions around the world. My contribution is working with the Ithaca, NY and New York City teams to apply Configuration Management to our gateways. My Ansible control repository can do virtually all configuration of the MultiTech Conduits including firmware upgrades.

Check out my Review of the RAKWireless RAK7258 Indoor Gateway.

Puppet, Ansible and Configuration Management

I'm an engineer at heart, which means I'm lazy; I don't want to do a job more than once. This applies to system administration. I run a number of Linux (mostly Debian at this time) systems and one of my least favorite tasks is making sure I have configured something properly on all of them. And I especially hate having to remember everything that I need to reconfigure when I install a new system or reconfigure one that died.

While travelling to Beaverton, OR for work once many years ago I picked up a copy of Linux Journal and read about Configuration Management with Puppet. When I got home I tried it out and was hooked. My configuration is up to over 6,000 lines of Puppet manifests and Hiera configs.

One place where Puppet will not work well is my Cloud server. I don't want to share all the Puppet configuration and do not want to open a VPN back to my home network. Recently I read an article on Ansible and gave that a try. It's a perfect fit for managing a remote server. I might also use it for managing my Raspberry Pi and C.H.I.P systems where Puppet seems like overkill.


I mainly use Gmail because it has great SPAM filtering and makes my mail available on all my devices. I have been a heavy user of the nmh mail system for decades and a developer on the mh-e front-end for nmh in Emacs. For large volumes of mail (i.e. at work), MH-E was much more efficient.

At home I use postfix configured to send e-mail. For years I used sendmail and wrote custom configurations but I find postfix easier to configure.


My first exposure to Unix was a BSD port on a Gould PowerNode 9000 while at Clarkson University. Back then I was a mainframe guy (VM/CMS) and implementing a terminal program on MS-DOS. Then I installed Mt Xinu on a microVax to build an Internet gateway. Part of the bring-up was booting into single user mode and adding support for the latest disk drives.

When I moved to the Cornell Theory Center I moved headlong into the Unix world, using SunOS (BSD at first and then System V based) and eventually became the owner of the infamous (a DEC VAX 11/750 running BSD 4.2 and eventually running BSD/OS on an i486). That was back when you built your own copy of gcc, compiling it three times just to be sure it worked. By then my life was totally on Unix/BSD.

I joined BSDi in 1995 to work as a core engineering on BSD/OS. BSD/OS was a commercial derivative of the BSD/386 port. I had a very enjoyable five years at BSDi working on many different facets of the OS. In 2001 Wind River acquired the rights to BSD/OS and hired most of the engineers. BSD/OS lived on for a few years at Wind River as the Platform for Server Appliances.

After BSD/OS Wind River started Wind River Linux, an embedded Linux distribution to complement their VxWorks real-time offering. Eventually I converted all my BSD/OS systems to Linux, first Fedora and then Ubuntu. At one point I had half a dozen systems running Ubuntu, at the time of this writing it's only four: My desktop, a server (Plex, backups, DNS, DHCP), a backup server (running Asterisk, DNS, DHCP) and a test system.

Home Automation

I started out my home automation adventures with X-10. The biggest problem was that I wanted to control my house with Linux and I had trouble finding good options. For a while I played with MisterHouse but eventually settled on Insteon with a Universal Devices ISY controller, currently an ISY994i. The ISY devices know a lot about Insteon devices and simplify much of the configuration and setup. Control is local (i.e. not via the cloud) but they are continually improving and adding additional functionality.

Most all lights in my house are on the Insteon network. Most of my control functions are basic, turning off lights on timers, using motion detection for lights in specific rooms, programming one buttons for sequences such as bed time.

I've recently added Z-Wave thermostats to most of the rooms (there is one room that will be hard to wire that I have not gotten to yet). I do some day-night temperature control with those and would like to do some occupancy detection to set the heat.

I wrote a use a Perl interface to the Universal Devices ISY series of devices, Device::ISY. I chose Perl because there were not any easily installed SOAP libraries available on Ubuntu when I started. My assignment of the Device::ISY identifier took quite a while and I got distracted from the project. I need to move it over to Github where other folks can contribute. I personally use it all the time.

I would really love to have some good occupancy detection, maybe with BTLE (via my BTLE fitness tracker). I'll probably install OpenHAB or House Assistant to add more local smarts.

I have recently discovered PyISY and I hope to use and contribute to that.

IP Telephony

I've long been interested in telephony at one point wanting to buy a Panasonic Hybrid PBX, but was not willing to spend so much money.

Then IP Telephony happened and I learned about Asterisk. I've been through several iterations of ATA adapters and service providers. Currently I use Google Voice as my primary carrier with my local PSTN network for the last mile. Not ideal, but I have problems with reliable SIP with my poor internet connectivity.

If you call me, you will be using my Google Voice number. Besides ringing my Android phone, it also rings my desk phone via an Obihai device and an Asterisk open source PBX. My desk phone is a Grandstream GXV3275 Android SIP phone with support for a Bluetooth headset.

I have some smarts enabled, such as muting the music playing on my desktop when I pick up the phone and maintaining an updated copy of the FCC blacklist database to reduce telemarketing calls. I use pushbullet to let me know who is calling on the home line, including an OpenCNAM lookup.