Top Four

Published on: August 17th, 2015
Tags: games, podcasts

Launched today on the Relay.FM podcast network, Top Four features husband/wife team Marco and Tiffany Arment sharing their relatively strongly-held opinions about stuff.

You know.. stuff?

In Episode 1 the Arments discuss their top four favorite video games.1 I have never been much of a gamer, and I don't play many video games now, but for a time I spent way too much time staring at a screen for non-productive gaming purposes. From 2001 to 2006, I probably spent between 15 and 30 hours per week playing one or more games. Then I got married. Then my PC died and we bought an iMac. To finish me off, on the second Christmas following our wedding, Cait asked me to give up all video games for one year. I was already waning in my play time anyway, so it wasn't much of a hardship.

After that year, I tried to go back and just could not handle gaming for more than 20 minutes before I started to get twitchy. I was broken2. Having an iPhone for a few years now has given me many opportunites to get sucked back into electronic gaming. Admittedly, I've spent far more time than I'd be willing to type on one of a few dozen iOS games here and there. None of these are really going to rate highly enough for me to say they're a favorite, and the reality is that I just no longer love video games. I'll play them; I'll enjoy them, and I'll waste time playing a game on my phone now and again[^pho], but I'm just not that into it.

If I had to rate the games I used to enjoy and would maybe kinda sorta enjoy them again, they'd be:

  1. Tecmo Bowl (NES): Yes, seriously. I was so good at this game, even without a Game Genie.
  2. Minesweeper (PC): YES. MINESWEEPER. Once you get really really good at Beginner (~5 seconds) and Intemediate (~14 seconds) and then spend your entire middle school years trying to get a high score under 40 seconds for Hard, it becomes part of you. You dream of mines.
  3. Risk (PC/iOS): Also beloved in tabletop form. I heartily enjoy seeing just how each electronic version varies its own internal strategies when playing "AI" players. RISK II for PC had this multi-turn idea where each player would queue up their moves and then they'd all happen at once. This meant that players could have conflicting moves which had to be "merged" into one another. It was awesome and led to some of the shortest games of Risk I've ever played (I conqueued the world in 5 turns at one point). The latest iOS verison let's you keep playing on a turn so long as you have armies left in attack-able positions. It's good.
  4. I can't pick a fourth. It's a toss-up between Starcraft, Half-Life 2 and Unreal Tournament 2004... all of which I used to love for totally different reasons from one another. I'm unwilling to admit how many hours I spent perfecting my Onslaught strategies from 2004-2005. UNWILLING.

No matter. I enjoyed listening to the Arments talk about their love for their most enjoyed games. If you've been around the world of ATP or any of Marco's prior podcasts, and enjoyed listening to him, this is another great one3.


  1. Ok, Tiff does. Marco lists, like, twenty.

  2. In a good way, of course…

  3. All the great shows…

Changing the Author of a Single Tag in git

Published on: August 12th, 2015

My team recently moved from Subversion to git, a migration we have been considering and planning for the past several months. We tripped over many stumbling blocks on our way; I intend to write about many of those in the coming months.

The day after the migration, we found ourselves needing to create a support branch1 for one of our components. We do this by branching from a tag and naming it as such:

1
2
git checkout -b support/1.2.x component-1.2.0
git push -u origin support/1.2.x

That should just work. However, we have quite a few pre-commit hooks in place to keep everybody working with the same set of standards. One of these requires that you're pushing only your own changes, and that your author info matches. In SVN, our tags were all created by an internal service account running our releases (srv-clubuilder), so the release point and the tag created from it were both done under that user. Well, that user doesn't exist any more, and certainly I'm not him. When my team tried to do the above, we saw this lovely error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Counting objects: 1, done.
Writing objects: 100% (1/1), 190 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
remote:
remote:   (c).-.(c)    (c).-.(c)    (c).-.(c)    (c).-.(c)    (c).-.(c)
remote:    / ._. \      / ._. \      / ._. \      / ._. \      / ._. \
remote:  __\( Y )/__  __\( Y )/__  __\( Y )/__  __\( Y )/__  __\( Y )/__
remote: (_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)(_.-/'-'\-._)
remote:    || E ||      || R ||      || R ||      || O ||      || R ||
remote:  _.' `-' '._  _.' `-' '._  _.' `-' '._  _.' `-' '._  _.' `-' '.
remote: (.-./`-'\.-.)(.-./`-`\.-.)(.-./`-`\.-.)(.-./`-'\.-.)(.-./`-`\.-.)
remote:  `-'     `-'  `-'     `-'  `-'     `-'  `-'     `-'  `-'     `-'
remote:
remote:
remote: Push rejected.
remote:
remote: refs/heads/support/1.2.x: bb3ac1ef7b5ef61d9b999bd7ad231803f18de440: expected committer email 'Matt.Shelton@nuance.com' but found 'srv-clubuilder@nuance.com'
remote:
remote: refs/heads/support/1.2.x: bb3ac1ef7b5ef61d9b999bd7ad231803f18de440: expected committer name 'Shelton, Matt' but found 'srv-clubuilder'
remote:
To http://Matt_Shelton@git-host.nuance-internal.com/stash/git/CLU/clu-component.git
 ! [remote rejected] support/1.2.x -> support/1.2.x (pre-receive hook declined)
error: failed to push some refs to 'http://Matt_Shelton@git-host.nuance-internal.com/stash/git/CLU/clu-component.git'

Yes. Those are teddy bears.

I tried a few things like creating an empty commit as myself and pushing that, but it didn't matter—that wasn't the commit it was complaining about. I tried amending that commit, but since I hadn't changed anything, there was nothing to amend. In order to modify the branch, I needed to change the author of the tag itself. Most search results directed me to use git-filter-branch, and while I'm comfortable re-writing my repositories history (we did just do that, more or less, during the migration), I didn't want to cause any additional confusion.

Git, however, is pretty darn powerful. Some teams, after they have been using git a while, move from a traditional lightweight tag to a richer annotated tag, which might contain additional author information or be cryptographically signed by the author. We're sticking with lightweight tags for now, but the migration process for historical tags was similar to what I wanted to do. In the end, I was able to re-write only the tag and successfully create my branch:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ git checkout component-1.2.0
Note: checking out 'component-1.2.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 86f405f... [maven-release-plugin]  copy for tag component-1.2.0
$ git tag -d component-1.2.0
Deleted tag 'component-1.2.0' (was 86f405f)
$ git commit --amend --allow-empty --author="Shelton, Matt <Matt.Shelton@nuance.com"
[detached HEAD 37a8015] [maven-release-plugin]  copy for tag component-1.2.0
 Date: Thu Feb 20 19:36:40 2014 +0000
$ export GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)"; git tag component-1.2.0
$ git push origin :refs/tags/component-1.2.0 # Push that tag ref to the origin as re-written
To http://Matt_Shelton@git-host.nuance-internal.com/stash/git/CLU/clu-component.git
 - [deleted]         component-1.2.0
$ git push --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 290 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To http://Matt_Shelton@git-host.nuance-internal.com/stash/git/CLU/clu-component.git
 * [new tag]         component-1.2.0 -> component-1.2.0

The result of this was exactly as I expected. When I look at the commit in the history, I now see that I am the author of this tag:

1
2
$ git log --tags --show-notes --simplify-by-decoration --pretty="format:%ai %d %s (%an <%ae>)"| grep component-1.2.0
2014-02-20 19:36:40 +0000  (tag: component-1.2.0) [maven-release-plugin]  copy for tag component-1.2.0 (Shelton, Matt <Matt.Shelton@nuance.com>)

And now I'm in business.


  1. We’re using git-flow as a branching model, but have the need to keep some releases around long-term for production support of integrations which cannot upgrade. This varies from a traditional concept of a hotfix in that we also need to be able to port features back to this release stream.

Seveneves Excerpt

Published on: April 13th, 2015
Tags: books

Neal Stephenson posted the first 26 pages of Seveneves, his latest novel, this afternoon.

The moon blew up while...

So. Cool.

After reading this, my first reaction aside from genuine anticipation is to take note of just how many culturally modern Internet services get name-dropped:

  • Facebook
  • Dropbox
  • Wikipedia
  • Twitter

It's nice that the text is immediately relatable, but I worry that it might not be in a decade, like Snow Crash, Cryptonomicon1, and The Diamond Age all are.

He had wassted a week on the fascinating scientific puzzle of "What blew up the moon?" That had been a mistake.

I pre-ordered the book when it was announced a few weeks back. I'm looking forward to reading it nonetheless.


  1. Despite being mostly about contemporary technology, really only the bandwidth and storage media feel outdated.

Moving Back to Byword for Markdown Composition

Published on: March 10th, 2015

When I initially purchased Byword for my phone, it was at a time when I had transitioned all of my note-taking from Evernote to plaintext / markdown1. I tried Write and iA Writer and others and settled on Byword for a while. But then my note-taking died down on the whole, and I found myself not needing an app like this. It eventually got uninstalled some day I needed more space for photos.2

Subsequently, a few things have changed:

  • I am now hosting my own static blog, via Octopress and markdown-based source files, hosted on heroku. So I'm writing more in a text editor for blogging than I ever was before.
  • I am regularly journaling in Day One.

My blog posts right now are edited in one text editor or another3, and that mostly works, but I long for richer syntax highlighting and/or syntax-aware styling. I find the workflow of using Marked to preview my files cumbersome since it either requires using an editor which does atomic saves, or constantly pressing CMD-S throughout my drafting. I would prefer some syntax styling -- Day One does a great job with that, but it's impractical to draft every blog post there, copy it out to a text file, etc., and I don't want my blog drafts cluttering up my personal journal.4

The built-in syntax highlighting of most text editors gets me most of the way, and I appreciate the efforts of the user and development communities for each of Atom and Sublime Text 3. For my workflow, though, I wanted something more exclusive to this process, and an application or workflow that I could use successfully on both my Mac and my ridiculously big iPhone.5

I've been enjoying Drafts on my phone for quickly capturing notes, tasks in a conversation, shopping lists, etc., but it's not a superb text editor or publishing client despite its extensions and other capabilities. It also has no concept of synchronization for its notes.6 I'd need to export manually from the phone each time I knew that I wanted to work on my laptop instead.

I considered going back to iA Writer or Write, and synchronizing through Dropbox. That would leave a gap on my laptop fillable by a few different applications: iA Writer has a desktop version as well7, Byword, Desk and Typed all look like decent options. I've previously used Mou and enjoyed it for a time, but it's a little klunky. I checked out The Sweet Setup, which doesn't always have opinions that I share, but is full of great detail. They recommend Byword, and though I hadn't yet enabled iCloud Drive on my devices, this seemed like a good reason.8 I wasn't convinced, though, that this was going to be worth the $12 purchase. It's pricey for a Mac app these days, and there is no way to trial purchase applications. The reviews, though, contained this one gem that sealed it for me:

So I am giving Byword another shot, on recommendation from The Sweet Setup and, oddly enough, Neal Stephenson9. Now my icon row on my phone looks like this:

That's Day One, Drafts and Byword -- all Markdown-based text editors -- right in a row. I use each one of them daily, and this workflow is pretty seamless, with one annoying nitpick: iCloud Drive just isn't great yet. When I initially started using this, I was able to pull all of my existing static notes via Finder into iCloud Drive and they uploaded within a minute or so. I could immediately edit them on my phone, which was great. The reverse, though was not so seamless. I started drafting this post on my phone a few nights ago, and found that by 12 hours later it still had not shown up in iCloud Drive on my laptop. I was about to jump ship. It magically appeared later that night, and I figured out why -- because I had changed another file in the same folder. This seems to trigger a re-sync of state prior to upload10, and so I have a workaround. It's not perfect, but I expect it will mature over time.


  1. I could write an entire series of posts about my internal drama regarding note taking, but who would read that drivel?

  2. I always buy the 16GB model. That’s definitely going to change next time around.

  3. And a second series on switching text editors every few months. Back on Sublime Text 3 again now.

  4. If Day One ever comes out with support for multiple journals I might reconsider all of this, and do all of my blogging there natively, and publish out to their hosted platform, but it’s not there, and that’s not now.

  5. I’ve been rocking the 6 Plus for a few months now. It’s massive, but now all other phones just feel too small. I suspect that was part of the idea.

  6. This is actually my only issue with Drafts. So many times I want to take something I quickly drafted and pull it up on my laptop and am frustrated that I have to email it to myself. What is this, 2012?

  7. I used iA’s writing apps for months a long while ago. They were good, but not superb. After following the author on Twitter for a while, I started to have a real problem with how he conducted himself. The applications weren’t compelling enough to keep using anyway, and I felt like anything I asked for functionality-wise would fall on deaf ears.

  8. I could use Dropbox for synchronization here as well, but I wanted to give iCloud Drive a shot. That was both a good and a bad idea, but my experience with moving to that for Day One was not very smooth. That’s worth a separate post.

  9. Neal happens to be one of my favorite authors. If this application is good enough for him to use to write novels, I think it can handle my blog posts.

  10. Always pull before you push…

My Problem With Good Music

Published on: March 6th, 2015
Tags: music

This will not sound sane: I have a problem with good music.

Music is not the problem—I am the problem. When I hear a great song, I put it on repeat for days. I listen to nothing else, soaking in everything that encompasses the song. My freshman year of college, the song Memory Remains by Metallica was my token repeated hard rock song, so many times so that a kid down my hall actually yelled through closed doors and walls to "STOP PLAYING THAT D*MN SONG!!".

Worse, however, is when what I love is just part of the song, and sometimes it's not even that the song is incredible, but that something about the song is so compelling to me that I just need to listen to it over and over again.

Take my most recent musical obsession: Lady, originally by Styx, arranged for for the Buffalo Chips1 by Michael King. When I first heard this track, I thought nothing of it. I was unfamiliar with the original, and found the recording to be relatively uninteresting. It has very little dynamic contrast -- basically a song sung on mf for its entirety. I rated it three stars, placing it squarely in the middle of the tracks on the album, Blue and White.

Then, I listened to the whole album on repeat few times with the intention of refining my ratings and eventually writing a review of the album here. The song started to bother me… I was already annoyed with the track's mixing2, but I think the fact that the song itself is so good kept nagging at me. I noticed the Mr. Roboto cues in the last chorus; I increased the rating to four stars.

Everything would have been fine after that, but my stupid brain would not shut off. I started noticing other things about the arrangement... how the background parts grow in complexity, how the syllables morph a bit over time to make even the lines repeated in each section more interesting, and that there were more Styx songs layered in the last chorus than just Mr. Roboto. I increased the rating to five stars, and all was lost. I've now listened to the track about 120 times, 110 times more than any other track on that disc3

This song is one complex, but also strikingly simple, arrangement. The recording quality is great, minus my annoyance I might have with its dynamic blandness; even the gap in dynamics is countered by the growing complexity of its underlaying arrangement.

And therein lies the problem: what I really want to hear over and over again is the last 20-30 seconds. The weaving parts and resulting chords are just flat-out gorgeous, but it's impractical and rude to everyone around me to just replay the last part of a song ad nauseum. Additionally it means that this is the only song I want to hear for days. All other songs are dead to me until my ears have decided that they've had enough.

My children's requests for one more play through of What Does The Fox Say? fall upon deaf ears.4


  1. Yes, this is my college a cappella group. Yes, I am biased. No, I don’t care.

  2. If your first chorus is loud, you have to come down a notch for the verse that follows it. It can’t be the same level as the chorus. Come on now.

  3. No Fire, originally by Jon Peter Lewis, is also a fantastic track mostly because the song is already beautiful and the soloist knocks it out of the park.

  4. At least I wish they did. I’m so sick of that song.