My Fur Squared 2017 Con Report

A few weeks ago, I attended Fur Squared. Fur Squared is a smaller, relatively new furry convention held in the Milwaukee area. This year it was held February 24th-26th. I did not staff this con but instead opted to be a regular attendee so I could enjoy more of the con.

The convention did quite well, with 963 attendees and 232 fursuiters in the Fursuit Parade. They also raised $15,000 for the Human Animal Welfare Society.

I did end up getting drafted to be on a few panels, however. I was on the "Con Horror Stories" panel as well as the "How To Start A Con Panel". At both panels I got to tell stories of my past years organizing conventions. We laughed, we cried, we had flashbacks.

Fur-Squared-2017-163 Fur-Squared-2017-281 Fur-Squared-2017-023 Fur-Squared-2017-074 Fur-Squared-2017-100 Fur-Squared-2017-130

I tried a new trick for my photography this year--I dual-wielded both my DSLR and my iPhone. My DSLR has a 35mm prime lens which is great for shots that aren't wide field (such as a single fursuiter from 5 feet away), and the iPhone worked well for groups for multiple fursuiters from close up. I think I'm going to use that approach at future cons.

Average: 5 (2 votes)
Your rating: None

My Anthro New England 2017 Con Report

A few weeks ago, I attended Anthro New England, which is a furry convention that was held over January 19-22, 2017 at the Hyatt Regency Cambridge in Cambridge, Massachusetts.

All things considered, the con went really well! They had 1,384 attendees and raised $15,000 for Massachusetts Vest-A-Dog. I myself got to be on staff this year, working in Commerce Operations for Kotanu Cheetah. (possibly the first time I have ever taken orders from a cheetah!)

Anthro-New-England-2017-013 A white and blue crux! Anthro-New-England-2017-034

Kieran grumping Cheetah Obscura and Tungro Kieran is grumping again

Average: 5 (2 votes)
Your rating: None

My Midwest FurFest 2016 Report

I attended Midwest FurFest last month, which was held from December 1st-4th, 2016 at the Hyatt Regency O'Hare in Chicago, IL.

Once again, I was on staff at this con. I worked in VIP Services as a Handler for one of our Guests of Honor. That meant that my job was basically to be their point of contact during the convention. I was responsible for meeting for them at the airport, getting them to all of their panels on time, and relaying any questions or issues that came up to the appropriate department (room requests, A/V requests, etc.). This role suited me well, because the cadence was "take them to a panel, then sit down for an hour". As I am still recovering from my injuries, not having to be on my feet non-stop really really helped.

The most impressive thing about Midwest FurFest was its attendance this year--they continue to show amazing amounts of growth and had a whopping 7,075 attendees this year! People have asked me if they attendance numbers might surpass Anthrocon one year and it is entirely possible--Chicago is a well-placed city which serves as a hub for planes, trains, and busses, and the hotel scales really well for conventions. I know based on my own experience when I worked at Anime Central in 2009, the year in which it had 19,511 attendees. Both cons are well run, and if you like both, you should attend both. If you like to staff cons, then please staff both (as I do).

MidwestFurFest-2016-046 MidwestFurFest-2016-060 Dougal Jacobs the Snow Leopard MidwestFurFest-2016-019 MidwestFurFest-2016-024 MidwestFurFest-2016-027

Instead of doing a fursuit parade this year, they tried something instead called the Fursuit Menagerie. They instead set up photography stations around the main ballroom and the foyer outside of it and had scheduled photoshoots for different kinds of fursuits (different species, different color, etc.). While I missed the parade as I come to know, it was nice to be able to socialize with some friends during the shoot.

MidwestFurFest-2016-055 MidwestFurFest-2016-029 MidwestFurFest-2016-003

Asriel Dreemurr Dougal Jacobs the Snow Leopard Nauta Sinneau MidwestFurFest-2016-050

Looking for the rest of my photos? I have them up here:

My next convention will be Anthro New England, slated to have its third convention in a couple of weeks. I hope I'll see you there!

Average: 2.2 (10 votes)
Your rating: None

How I Organized and Decluttered My Home

I recently wrote up a post on how I re-organized and decluttered my home.

The post is up on Medium, go check it out. Smiling

Average: 5 (2 votes)
Your rating: None

How to Undelete Files in Amazon S3

In my last post, I talked about how to use Odrive to sync your files up to Amazon S3. While S3 is a great storage platform, what happens if you accidentally delete some important files? Well, S3 has a mechanism to recover deleted files, and I'd like to go into that in this post.

First, make sure you have versioning enabled on your bucket. This can be done via the API, or via the UI in the "properties" tab for your bucket. Versioning saves every change to a file (including deletions) as a separate version of said object, with the most recent version taking precedence. In fact, a deletion is also a version! It is a zero-byte version which has a "DELETE" flag set. And the essence of recovering undeleted files simply involves removing the latest version with the "DELETE" flag.

This is what that would look like in the UI:

Average: 5 (3 votes)
Your rating: None

Getting Amazon S3 To Work With Odrive

I've become a huge fan of odrive lately. Odrive is like the Dropbox client, but it lets you sync to just about any cloud service. Examples include Dropbox, Box, Amazon Drive, Slack(!), and my personal favorite: Amazon S3.

In other words, you can have a directory on your hard drive mirrored into S3, so that any changes made are uploaded straight to S3. From there, you can do things like enabling access logging or encryption. All very neat stuff.

When connecting to Amazon S3, you'll need an Access Key and a Secret Access Key. You do NOT want to use the default ones that came with your account, as they have full access to everything that is on Amazon Web Services. Instead, you want to create a key that has access limited just to your S3 bucket. This blog post will explain how exactly to do that.

Average: 5 (1 vote)
Your rating: None

ssh-to: Easily manage dozens or hundreds of machines with SSH

Hey software engineers! Do you manage servers? Lots of servers? Hate copying and pasting IP addresses? Need a way to execute a command on each of a group of servers that you manage?

I developed an app which can help with those things, and my employer has graciously given me permission to open source it.

First, here's the link:

And here's how to download a copy:

git clone

Getting Started

In order to use this script, you'll need to create a servers.json file:

./ssh-to --create

This will create a sample servers.json file in the current directory. You may want to then move that file to $HOME/.ssh-to-servers.json so that ssh-to can be run from any directory in the filesystem.

Next, to add hosts and hostgroups to the servers.json file:

./ssh-to --edit

This will bring up $EDITOR to edit the file. After you are done editing, exit the editor, and the validity of the JSON will be checked. If the JSON fails to validate, you'll be prompted to hit ENTER to go back into the editor or ctrl-C to abort.

Using ssh-to

Going forward, here's the syntax for using ssh-to in regular operation:

ssh-to [ --dump | --loop ] group [ host_number ] [ ssh_args ]

--dump prints out the hostname/IP address (or plural, if you just specify a group), which can be used in other scripts like so:

for HOST in $(ssh-to --dump hadoop)
   scp file.txt ${HOST}:/path/to/destination/

"But wait, there's more!"

Using the --loop switch, this sets the way for other cool automations! Here's an example:

ssh-to splunk --loop "yum install -y splunk; /opt/splunk/bin/splunk stop; /opt/splunk/bin/splunk start --answer-yes --no-prompt"

This would, on an existing Splunk cluster, perform rolling upgrades of Splunk on each machine in the cluster.

"Operators are standing by!"

Please, try out the tool and let me know what you think via email or in the comments below. Feedback, bugfixes, and suggestions for features are always welcome!

-- Doug

Average: 3 (2 votes)
Your rating: None

Western PA Furry Weekend 2016 Pictures and Report

A few weekends ago, I had the pleasure of attending Western PA Furry Weekend, which was an outdoor event held the weekend of October 7th-9th in North Park Lodge in Pittsburgh, PA. It was my first WPAFW since last attending in 2010.

WPAFW-2016-017 WPAFW-2016-025 WPAFW-2016-084

Even though Pittsburgh is 300 miles from Philadelphia, getting there was easy--I took that Friday off, rented a car, and then just drove west along the PA Turnpike for about 5 hours. I did it in the middle of the day so as to avoid traffic. Then, once I got to the hotel and got checked in, the lodge was just a 15 minute drive away.

WPAFW-2016-059 WPAFW-2016-068 WPAFW-2016-072

The weather was great and I had a good time. Got to spend most of Friday night and Saturday catching up with folks that I knew. The attendance this year was a record-breaking 270, and the charity was Going Home Greyhounds, which we raised $5,666 for (also record-breaking!).

I also discovered--completely by accident--that putting a scoop of chocolate ice cream on top of pumpkin pie is AMAZING. Seriously, you should try it sometime.

WPAFW-2016-073 WPAFW-2016-119 WPAFW-2016-109

I have many more pictures! The full albums can be found on:

Next year's event will be held form October 20-22, 2017 in the same location. I hope to make it there!

Average: 5 (1 vote)
Your rating: None

I Built a Facebook Group Leaderboard

This is a Node.js app which uses the Facebook Graph API to download recent posts from 1 or more groups, and display the top posters, top commenters, and their stats in a leaderboard-style format. In production, I use this app to keep track of some groups I admin with thousands of users each, and make sure that no one is unnecessarily spamming the group.

Live Demo:


The source can be downloaded from here:

Give it a try, and let me know what you think!

Average: 5 (1 vote)
Your rating: None

Two New Open Source Projects

At my day job, I get to write a bit of code. I'm fortunate that my employer is pretty cool about letting us open source what we write, so I'm happy to announce that two of my projects have been open sourced!

The first project is an app which I wrote in PHP, it can be used to compare an arbitrary number of .ini files on a logical basis. What this means is that if you have ini files with similar contents, but the stanzas and key/value pairs are all mixed up, this utility will read in all of the .ini files that you specify, put the stanzas and their keys and values into well defined data structures, perform comparisons, and let you know what the differences are. (if any) In production, we used this to compare configuration files for Splunk from several different installations that we wanted to consolidate. Given that we had dozens of files, some having hundreds of lines, this utility saved us hours of effort and eliminated the possibility of human error. It can be found at:

The next app I developed was written in Node.js and is intended for use in a high-availability environment. In most HA environments, you will have multiple servers running behind a load balancer. In order to check the health of its servers, the load balancer will usually issue an HTTP GET request to a pre-defined endpoint to make sure each server is healthy. But what if... the server didn't have any GET endpoints? This is actually the case with Apache NiFi, which only provides HTTP POST endpoints. What now?

That's where this utility comes in--it starts an HTTP server on the port of your choice, and can be used to turn a GET request into a POST request (with a zero byte payload), send it to a target port on the same server, and relay back the HTTP response. This in effect proxies a GET request as a POST, and returns the result. It's a bit of an odd way to go about it, but it let us more effectively use Apache NiFi in a high-availability environment and did not break any workflow, so we're calling that a win. Smiling That app can be found at:

I hope these are of use to anyone who stumbles across them. If you have any feedback or comments, feel free to leave them below or on GitHub!

Average: 5 (1 vote)
Your rating: None