This is the blog, but if you want to know more about me and my projects, check out the Projects and About pages.

VLOG 000 - VidCon

In my 0th Vlog post, I chronicle my afternoon trip down to Anaheim for VidCon 2015. If you aren’t in the know, VidCon is

VidCon is a multi-genre online video conference, held annually in Southern California since 2010. Originally conceived by Hank and John Green of the “VlogBrothers” YouTube channel, the convention is the largest of its kind in the world, gathering thousands of online video viewers, creators, and industry representatives worldwide. One of the creators, Hank Green, described it as “a convention, and a conference, and a celebration, and a discussion”.

It’s also crazy as creators, online video industry folk, and the fans converge on one location for four days. I was only there for a few hours and that was plenty of crazy for me.

VidCon in Six Hours

Alexa, Lets Play Jeopardy!

Alexa Jeopardy Demo

I’ve been playing around with my new Amazon Echo and writing up some “Skills” for the Amazon Alexa voice assistant and so far so good! What I’ve got above is a link to a YouTube video I did demoing a “Jeopardy” skill. It’s not fully baked in that you can’t play a complete game of Jeopardy, but you can choose a category, get a question, and it will keep score for you. There’s no way I can release this officially without the cold hand of Jeopardy Corp. slapping me down, but it was a great first project for Alexa development as it involved multiple voice intents, keeping an active session, etc.

Everything is written in Go using my Go Alexa Skill library that kind of formed by accident as I was working through the initial build and keeps the Jeopardy-specific portion to a 350 line file. You can find the code for everything, the library, the Jeopardy example and even the Amazon API configuration files (voice intents and sample utterances) here:

Please reach out on Twitter or file a GitHub issue if you have any questions (or a pull request). I’m happy to dive in to more detail as needed.

Going forward I’ve got a few much larger ideas I can implement with the Alexa Skill API, and I might go back and flesh out Jeopardy a little more. It needs Double Jeopardy.

The Cardinals are Either Horrible or Super l33t Hackers


The St. Louis Cardinals have been in the news lately because they have the best record in MLB…and there was this little “hacking” story.

NYTimes: “Cardinals Investigated for Hacking Into Astros’ Database”:

Investigators have uncovered evidence that Cardinals employees broke into a network of the Astros that housed special databases the team had built, law enforcement officials said. Internal discussions about trades, proprietary statistics and scouting reports were compromised, said the officials, who were not authorized to discuss a continuing investigation.

St. Louis, baseball, computers, and sorta stupid with people freaking out?! This is my dream story! Why oh why couldn’t this have happened while I was still in St. Louis writing Punching Kitty?! This is my wheelhouse! It’s like my old blog became sentient and birthed it’s own perfect story in an effort to get me back to the old trusty Wordpress writing screen and we could be together again. My blog would be so happy, but alas it’s not to be. I’m going to write up my thoughts on this, my new blog. I have no doubt that after this half-successful attempt the now sentient Punching will have no choice but to go a more direct route and lure me to a van with promises of free sandwiches and then chloroform me when I peer in to the dark van interior. “Wait, where’s my sandwich? Urggumffff…” will be my last words for days until I wake up in a warehouse in St. Louis with nothing but a crappy laptop on a rickety table and a single lightbulb swinging above me. I’ll then spend days writing out story after story, dick joke after dick joke, catching up on Ferguson, Cardinals and “Gee it sure is hot!” stories. Finally I’ll try to do that trick from “Misery” where I ask for different paper but that won’t work because who the hell uses paper. Then…um…a local sheriff will get murdered when he stumbles upon my captivity and…um…well…maybe I’ll slip away during one of the many subsequent well meaning protests done by a crap load of white people from St. Charles County because they don’t understand how a blog killed a cop and figure it must be a black thing somehow.

Yeah, OK. I think I took that as far as it could go. Lets talk about the Cardinals again!

There are really three major responses to the Cardinals “hacking” story and it might make sense to just run through each of them, but first a short digression on why I keep putting “hacking” in quotes. It’s not because I’m a Cardinals fan that thinks this story is silly or doesn’t matter. It’s just that, as a computer professional, I hate how lame the word hacking has become. Guessing someone’s password isn’t “hacking.” That particular hack would be called, using industry terms, “guessing someone’s password.”

1. The Cardinals are an evil hacking empire!

Did the Cardinals hack other teams? If they broke in to the Astro’s system by using an old password, then no they probably didn’t…or maybe that “Everyone write your password down and give it to the Cardinals” game they play at the annual General Manager Meetings should really get canceled.

2. The Cardinals are so stupid! Don’t they have better a technical staff than this?!

If you believe the team orchestrated this “hack” then yes that would be really really stupid, but there’s no sign of the attacking being coordinated by upper management. If you believe that some low level stats or tech staff did this on their own, then yeah, they should have done a better job because apparently they didn’t even use TOR correctly. However, my theory is that a bunch of of the tech team were sitting around the Spring Training house and someone said “I wonder if Jeff still uses the same password.” and then another person muted the TV and said “Let’s try!” so they thought just long enough to decide to use Tor and then gave it a shot…and holy crap it worked! This of course doesn’t mean what they did was wrong and stupid and lame, but it might explain why they didn’t setup Tor correctly or bother to bounce through a few foreign proxies.

3. Ha! Screw the Cardinals.

Ok. When you win and when people write weird missives about how perfect Christian baseball angels all of the Cardinals are after years of having Tony LaRussa beat your team down with sunglasses on at 10p then I don’t blame you for waiting for a time to pounce and then roll around in the collective Cardinal misery and really grind it in to your butt crack. Sink down in to it like a giant bowl of schadenfreude-flavored pudding.

What’s next for the Cardinals?

Well the FBI might eventually name someone but it will only be a guess and that person will be fired and the rest of the people that were tangentially involved will finally read the whole article on how Tor works. I also know that there will be 30 new Sr. VP of Technical Security job postings for across all MLB teams. Lastly, the Cardinals will hear about this all the time but I doubt much will come of it long term. The only impact I’m concerned about is if other teams will be less likely to deal with the Cardinals during this or subsequent trade seasons. Lets hope John Mozeliak is as respected as we hear he is. We need a SP and a bench upgrade!

The Story of Egg.js


If you know me, read this site or Punching Kitty, or even just follow me on Twitter, it won’t surprise you that I like to put an easter egg in everything I make. (Example: Type the konami code right now.) APIs or command line programs aren’t always the best easter egg medium, but website are fertile ground and about two months ago I got tired of pasting the same basic easter egg code in all of my websites and thought about making a quick library to add easter eggs and tracking (you’ve got to know if people have figured them out!). Egg.js was born. I threw some simple javascript code together and pushed it up to GitHub…and then it needed a peer review (I practice what a preach) and sent it over to my friend Rob who is the best Javascript dev I know and he made some great suggestions / rewrote it. In the end, it works well and has a nice simple interface to get out the way and let you focus on the joke and not all of the setup.

A few days later, I was sitting at the Clojure/West conference, in between sessions, and said to Rob: “I wonder if I should submit this to Hacker News. It feels like one of those silly things that always take off and hit the homepage.”


I told you!

Yes, I was 100% right, but it was actually far more popular than I thought and, shockingly, the Hacker News comments were pretty nice. All of a sudden, Egg.js was one of the trending Javascript repos, sitting with the likes of React JS and React Native!


A few days later it raced past 1000 stars on GitHub and it’s still growing. Crazy. I guess people like silly web jokes.

You can check out the details at

Syncing Your Mac Photos Library to Google Photos


I’m in the midst of recovering from Google IO but wanted to play with getting my Photos (aka New iPhoto) library from my Mac to the new Google Photos. Google supplies a Mac client for auto-importing but it will only watch a directory for new files and has no explicit import from Photos / iPhoto function. You could drag your folders from Photos to a different folder and have those sync to Google (and then delete them after) but that’s a terrible solution.

Here’s a better solution:

  1. You’ll need to open the terminal application (don’t be scared).

  2. Run the following command:

ln -s "/Users/`whoami`/Pictures/Photos Library.photoslibrary/Masters/" "/Users/`whoami`/Pictures/Photos Masters"
  1. You’ll then see a directory called “Photos Masters” in your Pictures directory.

  2. Go to the settings for your Google Photos importer (click on the status bar icon and click “Preferences”)

  3. Add to the “Desktop folders” list by clicking “Add…” and selecting the new Photos Masters directory.

After that you’ll see your Google Photos importer start sucking in all of your photos! It’s going to take a while.

mikeflynn @ GitHub thatmikeflynn @ Twitter