There is one hot-button issue that will always draw me into a rant: the assertion that anyone who draws a paycheck from the government is a "taker" rather than a "maker".

My wife is a science teacher in a public school. She worked her way through college and obtained a Masters degree and a Ph.D. She could have taken a position in university academia, but decided she could do more good in a classroom with students.

She works in one of the wealthiest districts of one of the wealthiest counties in the state. She teaches the children of dentists, lawyers, and accountants who spend their weekends on the golf course complaining about being crushed by taxes and arguing about which model of BMW to buy this year.

She always works over 60 hours per week. She works harder than anyone I've ever seen in private industry.

Her pay has been cut by about 25% over the past five years. A big chunk of what income she has left goes toward buying supplies that the school system and parents won't provide.

She's a taker. She's a leech sucking society's blood. She should stop teaching science to children and go do something useful, right?

DirecTV Customer Service Sucks, and They Are Watching Me

This past weekend, two of our DirecTV satellite receivers failed. The failures were unrelated: one stopped working after the magic smoke leaked out of the vents; the other kept rebooting itself and scanning its disk, without ever actually starting up.

My wife called DirecTV and told them about the problems. The customer service rep agreed to send a replacement for the receiver that was smoking. However, we would have to let the other receiver keep trying to scan/repair its disk for 48 hours before they would declare it dead and replace it.

A couple of days went by, and we received a replacement receiver. We hooked it up and called DirecTV to activate it, and that went fine.

So far, I'd call this reasonable service. Then we asked about the other failed receiver, which was still not working after 48 hours, and that's when things changed.


Another year behind me. Not a bad year.

I picked up a new client this year, and reduced my time spent working with the client I've had for the past couple of years. The new client provides opportunities for more interesting work. I've been able to do more mobile and web development, and will be doing some embedded-systems development soon. I may be able to put Windows/.NET development behind me for a while. I was able to give myself a nice bump in my hourly rate.

Family and dogs are doing fine. There is nothing very interesting to report, but I'm happy.

We're planning to visit relatives in North Dakota this summer. I haven't been back there for a while (over ten years, I think), so it will be nice to see everybody.

I think I'm healthier than I was a year ago. I started running in August, and ran a 10K on New Year's Day. I have started training to run a half-marathon at the end of March. I've lost a few pounds and a few waistline inches. If I can lose 20 pounds this year, I'll be in good shape.

Goals for the coming year:

  • Write in my journal every day.
  • Run a half marathon, and the Peachtree Road Race 10K. (Maybe: run Atlanta Marathon this fall.)
  • Practice guitar at least six days per week. My wife bought me a nice Fender Telecaster for Christmas/birthday, which has been a good motivator.
  • Learn to play keyboard. My brother bought me a keyboard for Christmas/birthday, so I have no excuses not to learn to play.
  • Look at this list of goals once in a while.

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: https://github.com/kristopherjohnson/KJFlashlight

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.

Syndicate content