From Couch Potato to Running a 10K in a Few Months

In August, I started running after a few years of sitting on the couch. I ran the Peachtree Road Race back in 2007, then stopped running completely shortly thereafter. My post-40 physical decline has been distressing, so I decided I needed to get back into doing something active.

Just as I started thinking "Maybe I should start running again," I ran across a mention of the Couch-to-5K running plan in a blog. The core idea is that the plan very gradually builds up your endurance. Too many people decide "I need to start running," then go out and run a couple of miles, and then wake up in pain the following morning and decide they will never run again. C25K starts you off alternating between 60 seconds of jogging and 90 seconds of walking the first week, then 90 seconds of jogging and two minutes of walking the second week, then keeps bumping up the jogging time and reducing the walking time until you are running for 30 minutes straight.

The first couple of weeks of C25K seemed really easy, and I was tempted to skip forward a couple of weeks, but I'm glad I didn't. I think its gradual nature is the key to its success. Every other time I've gotten into running, I've had problems with pain in my right ankle, but that didn't happen this time.

There is an iPhone app that will tell you when to start running and when to start walking, so it appealed to both the geeky and lazy aspects of my personality.

I finished C25K in October, and was surprised at how easy it had been. So I decided to follow up with the 5K-to-10K program, which also has an iPhone app.

I expected going from 5K to 10K to be easier than going from 0 to 5K, but it wasn't. The first few weeks were easy, but once I got up to about five miles, it was tough to keep going. But I did it, and a few weeks ago I did my first 60-minute continuous run.

Unfortunately, this coincided with the holiday season, so while I lost 10 pounds between August and December, I put five pounds back on during December. I'll have to work on that.

Today, New Year's Day, I ran the 2013 PT Solutions Resolution Run 10K, organized by the Atlanta Track Club. It was 45 degrees and raining, so it wasn't pleasant, but I did finish, running the whole 6.2 miles except for brief walks at the water stations. My time was one hour and three minutes, which is not great, but I'm happy with it.

Next, on to the half marathon!

Embracing Customization and Automation

During the first decade-or-so of my career (the 90's), I had to use a lot of different computers. I worked on half a dozen different operating systems, and during the course of a day it was common to use four or five different computers, only one or two of which were in my cubicle. I'd spend weeks at customer sites. I often sat side-by-side with other developers to work through issues. Every few weeks, a new machine would appear or another machine would disappear.

This led me to decide that I should never treat any computer as "mine", no matter how often I used it or how little anyone else used it. So I didn't spend time customizing any of the system or application settings to suit me. I didn't mess with the keyboard bindings. I didn't write a lot of scripts or macros. I tried to become as adept as possible at using the "stock configuration" of every tool. The extent of my customization was copying a .emacs file from machine to machine.

This habit was reinforced when I got into Windows development, and found that I needed to re-install Windows from scratch every couple of months to keep things running well, and that I had to help non-technical users figure out how to fix their machines. Sticking to the stock configuration and standard applications seemed to be the only way to stay sane.

I often rolled my eyes when I'd hear someone talk about how hyperproductive they were with their Dvorak keyboard layout and customized desktop shell and macro recorders. "Great", I'd think, "but can you also be productive with the computer in the neighboring cubicle, or the computer at your parents' house?" I was proud that I could sit down in front of any computer, and not need to worry about how to work without All My Stuff with me. As the Buddhists say, attachment is the cause of suffering, so let go of your attachments.

Over the past couple of years, I've finally started to relax this stock-configuration-only policy. A few things have changed:

  • I do practically all my work with my own personally owned laptop. I always have it with me, at every work location and at my home. Even when I have to do something with another computer, I often do so by connecting to it from my laptop. So my machine really is "mine", and I rarely touch another.
  • Dropbox, iCloud, GitHub, and similar services make it easy to keep All My Stuff in sync between machines, and to set up a brand-new machine the way I want it.
  • I'm no longer stuck with using Windows most of the time. Mac OS X is a lot easier to customize and automate, due to its UNIX underpinnings. (Yes, seriously.)

Here are the things I've found most useful:

  • Keyboard Maestro: This thing is awesome. Key rebinding was the customization I put off the longest, due to concerns about the need to memorize a bunch of new keyboard shortcuts and the need to find keys that were not already used by my applications, but now that I've dived in, I like it.
  • Alfred: a nice app launcher. I've also tried QuickSilver and LaunchBar, but decided I prefer the simplicity of Alfred
  • TextExpander
  • Automator and the Services menu: While not as useful as they could be, due to Apple's on-again-off-again interest in supporting and promoting them, they are great for hooking little scripts into my workflow.
  • Safari Extensions: If you know a bit about JavaScript and the DOM, you can automate a lot of common web activities, and even customize website behavior.

Here are things that I've experimented with, and decided to avoid:

  • AppleScript. I use it when I have to, but it is the worst scripting language ever created. Whenever I can use bash, Python, or JavaScript instead, I do.
  • Application-specific macros. Some applications provide their own mechanisms for replaying sequences of keystrokes or triggering scripts. I use these when they make sense, but it is generally better to let Keyboard Maestro, TextExpander, or the Services menu take care of them system-wide.
  • Speech recognition: The Mac has long had a speech recognition system that lets you do a lot of things by just telling it to do so. However, this has never been as useful as, for example, Siri on the iPhone.
  • Doing everything suggested by Merlin Mann, Brett Terpstra, Dr. Drang, and MacSparky. Those are all smart people who figure out some cool stuff, but it's easy to get bogged down trying to use it all. It's better to examine your own workflow and improve it than it is to try to adopt someone else's workflow. (It also makes me feel stupid when it takes me longer to read that stuff than it takes them to write it.)

The process of customizing my computer has changed the way I use it. Whenever I do the same sequence of steps more than a couple of times, I stop and think about whether there is a way to make it faster or easier. Often the answer is not to customize the machine further, but to change my own work habits.

Node.js Cheatsheet

I am learning about node.js. This is my cheatsheet. It may not be useful to you at all.

Also see My JavaScript Cheatsheet.

Havenjark Color Theme for Xcode 4

I've been experimenting with low-contrast color themes in my source-code editors. For a while, I thought I had settled on Zenburn. However, I recently ran across Havenjark in the Eclipse Color Themes plugin, and I decided it is perfection.

The only problem was that, while I could find Havenjark theme files for Eclipse and Textmate/Sublime Text 2, I could not find one for Xcode. So I converted the Eclipse color theme to Xcode 4's color theme format by hand.

If you'd like to try Havenjark in Xcode 4 yourself, download Havenjark.dvtcolortheme and copy it to your ~/Library/Developer/Xcode/UserData/FontAndColorThemes/ directory. Then, in Xcode, go to Preferences -> Fonts & Colors and select it.

My theme uses the Bitstream Vera Sans Mono font, which you can download for free from various locations on the Internet, or you can just change the font to something of your liking.

I'm not going to bother converting this to Visual Studio's color-theme format. There is no point in trying to make Windows development look nice.


I got fed up with the complexities of the various iPhone flashlight apps I've tried, so I whipped up my own dead-simple flashlight app.

It has three buttons that control the LED on the back of the phone:

  • On
  • Off
  • Flash (once per second)

That's it.

My hope is that keeping it as simple as possible means it will load quickly and stay resident in memory, so I can have light instantly whenever I want it. This is a lot more important to me than all the controls and "features" provided by other flashlight apps.

You may want to build your own dead-simple flashlight app, or maybe you want to see some code that controls the LED light. The source code is on GitHub:

Apple Product Names

Correct: iPod, iPhone, iPad, iTunes, Mac, MacBook, Apple

Incorrect: IPOD, Iphone, I-Phone, IFone, i-PAD, EyePad, Ipadd, I-Toons, MAC, MAC Book, McIntosh, APPLE, AAPL

(Don't be an idiot. This isn't complicated.)

Re-attaching an iMac Stand After VESA Mount Use

We recently purchased a new iMac to replace a old iMac. The old iMac was attached to a wall mount using Apple's VESA Mount Adapter, so I had to remove the old iMac from that adapter and attach the new iMac to it. That went fine, but then I had problems re-connecting the original stand to the old iMac. What follows is what I learned, and I hope it helps others who have the same problem.

Downloading an Image from Gravatar Using the Command Line

I am signed up for the alpha, and wanted to upload my avatar picture. Unfortunately, I can't find my avatar picture anywhere on my computer.

Gravatar is a free service that allows you to save your avatar (picture) for use by multiple websites. Gravatar has a copy of the avatar I wanted, so I hoped I could just download it via the same user interface you use to upload images. It turns out that you can't do that: the user interface lets you upload pictures, but does not provide a download option. So I had to figure out how to retrieve my image the way that a Gravatar web client would.

According to the Gravatar documentation, one can get a image for a user by doing an HTTP GET with a URL of this form:

where HASH is the MD5 hash of the user's email address. You can calculate this using the md5 command-line utility.

So, here is the complete command line that will calculate my MD5 hash and the retrieve the image using the curl utility:

Job Title: Architect

What follows is from an actual job opportunity that was presented to me. It has been edited for brevity and to remove identifying information. I also cleaned up typos and broken grammar (recruiters apparently never read these things before sending them to candidates).

Job Title: Architect


  • Drive Solution Architectures for high performance and very highly scalable platforms.
  • Collaborate with key Telecommunication Architecture on definition of delivery of solution.
  • Participate in Joint Application Design/Requirements sessions
  • Create and present PowerPoints to leadership describing architectural approaches and solutions

Seeking Enterprise Architecture related type candidates. Not seeking a candidate with developer, project manager, or solution architect experience.

Skills & Experience Needed:

  • UML 2 3-5 years Required
  • Visio 5 years Required
  • MS Word 5 years Required
  • Agile Methodology Intermediate Desired
  • OAuth Intermediate Desired
  • Cloud computing Intermediate Desired

Note what is not required of an Architect: Any knowledge of how to actually produce working software. All you need to know is how to use Visio and PowerPoint.

Distributing a Custom iOS B2B App

I recently went through the process of distributing a free custom B2B app in the App Store. I hit a few snags, and I found very little information about the process, or help in online forums, and Apple Support assistance was very slow. So I'm documenting what I learned here. I hope it helps someone.

Syndicate content