The Year Behind

So on January 1 of this yearI wrote a “year ahead” post. It was perhaps an easy post as far as predictions go. But that’s what punditry is about right?

Let’s review:

We get a house

This was a pretty easy prediction, but it still feels like a nice accomplishment for the year. There was a fair amount of uncertainty at the start – my townhome was in an area of Garner that didn’t sell all that fast usually – and my townhome definitely did not follow the price appreciation trend of the greater triangle area in the last 7 years. We had no idea where in the Triangle we wanted to live. Most of the kinds of house styles and lot sizes we wanted were in a ring from Fuquay-Varina to Clayton to Wendell to Wake Forest, and even a few in Durham (for non-NC readers – that’s a pretty wide circle around Raleigh) But things worked out, we had a contract on the house within 2 months of listing – and we found a nice house, with a nice lot, in a pretty area. It’s not far from where I grew up, which I wasn’t all that thrilled about at first. But we have great neighbors, and while the commute is long into work, there’s llamas and cows, and trees.

In the end, it wasn’t all that sad to leave my first home that I bought myself. After 7 years of a meadow-like area where rabbits raised families and lots of buffer trees behind the townhome, several months after we moved – it’s finally being developed commercially (the plan for that space all along). And it’s nice to have a yard and a fence to call our own. And the lawn-mowing really isn’t all that onerous.

The Anniversary Tree

We get a dog

And I even said “maybe two.” And that’s exactly what happened.

Truman came first:

Truman Portrait

And Winston came second:


And when not running over each other and biting each other’s faces in the yard, and when we aren’t renaming them to “damnit” and “stop that” and “no” – they make a pretty cute pair.

Impromptu Concert

I implement OpenID somewhere/anywhere

Our account signup application, which should slowly grow to providing an account for every Extension employee in the nation (okay, we probably won’t get there, but it’s a goal) – provides an OpenID for all those employees. For use in our applications, and well, anywhere. This was quite straightforward thanks to the folks at JanRain and the others contributing to the Ruby OpenID project.

More importantly our news application will consume any OpenID and our public site application will soon consume any OpenID. Every internal application will move to OpenID consumption (if limited).

I’m not sure that 2008 (or 2009, or 2010) is going to be the year of OpenID either, generally. But we can do our part. At the least, it’s pretty convenient, if only for the handful of people using it right now.

I do something vague and interesting at work

I did do lots of vague things. And a few moderately interesting ones. Nothing to write home about as the saying goes. I hope 2008 will bring far more interesting things. But that’s mostly about whether I decide to do that. If this is to be a goal, it will have to be a great deal more concrete.

I reflect on 10 years at work

February was my 10th anniversary in a working role at NC State, and I did briefly reflect on it – and even more with my 2-year anniversary in my current role

The February post is somewhat enigmatic, but not all that much so. I was not sure that I’d make it to 11 years at the University. And I wasn’t sure that I’d make it to 3 years in my current role. It wasn’t about the pay, it wasn’t about my co-workers, perhaps the only way to say what it was about was similarly stated by Mark Pilgrim in March when he left IBM for Google.

Sometimes though, in my strong desire to want to see a greater purpose, a greater meaning, and the kind of leadership that is ready, willing, and able to take us into the 21st century version of Seaman Knapp’s vision for the land-grant – I forget too easily that I have to be the change that I want to see.

To risk self-repetition, you don’t have to be Winston Churchill and Harry Truman to change the world. Two dogs with similar names changed ours. And that’s what really matters.

On a personal-professional level, I love watching the photographic talent through flickr of one of my colleagues in our content development group, I am really, really enjoying getting to know my colleagues at Auburn, Iowa State, Texas A&M, and even NC State through something as simple as Twitter. Those connections and relationships have gone a long, long way to providing new perspective, and new meaning.

And with those reflections, my job satisfaction is way up. I’m isolated from the larger IT quagmire of the University. Our Engineering/Professional Development team is one of the absolute best groups of people I have ever worked with. My boss gets it and is very supportive of the work we do and the ideas we bring to the table. I have the freedom and flexibility to build the systems we need, and our own version of 20% time to explore new directions, and the co-workers to do it with. I am only limited by myself to making the kinds of differences I want to make – at least at the levels I have a direct influence over.

When Paul Jones wrote in his blog about speaking at NCSU Computer Science’s December graduation, he asked “What would you tell today’s Computer Science grads before they go out into the world?” My comment was hastily, but passionately written, there’s an amazing power that software and systems people have. Paul ended up saying it much better than I – my comment was more about the individual, but Paul got to the real issue of the social. As a developer, system administrator, software/systems architect – you do have a choice – design software and systems that foster relationships, or design software and systems that attempt to control them. It helps to be in an organization that understands the former and from what I see in Twitter and Flickr at least, is that we still do.

My new camera and lens gets here

Yates Mill Reflected

Making it’s public appearance on January 18th I entered the DSLR world in 2007. I’ve taken a lot of baby steps with it. I’ve learned a lot, if only to learn that I don’t know a thing about taking pictures, not really – nothing like I thought I knew. But I’ve had a few that I’ve enjoyed recording and a lot that needed work – but I think they are as good, if not better than any I’ve taken before.

But the best part is that photography is definitely one of those “the journey is more important than the destination” activities – and that’s something that I need reminding about again and again. I’m looking forward to that continued journey through the lens this year.

I write something vaguely funny again

Not really. I did make appropriate fun of Michigan State recently. But perhaps I did something a bit better, if I didn’t really keep it up consistently, with some plastic dinosaurs and bad one-liners – I made a comic of a sort

The best far and away was about blog badges. But I think the the one about Rails and the other about java aren’t too bad.

No warranty implied, your mileage may vary, don’t poke your eye out, contents may settle, etc. etc. yadda yadda.

I get completely tired of all the “Double-Oh-Seven” Jokes

You know what? I never heard one the entire year. Another small joy of life.

It was a good year

If you are reading this and made it this far – thank you. Thanks for walking along with me. It was a good year. A year in a normal life perhaps, but sometimes the something normal is changed into something beautiful.

Happy 2008 and happy trails everyone!

Riding off into the high noon


We live in an absurd society where a company’s plans to ramp up production on machine Y of widget X by 17% is considered far more confidential than all my purchases of widget X and my purchasing information. IT groups bend over backwards to try to address the former and a lot less to address the latter.

Something is seriously wrong with the people running Information Technology in these organizations.

They must have learned how to do IT from Michigan State or they read Michael Krigsman columns in ZDNet.

Building the Spartan Wall

EAST LANSING, MI – Michigan State University officials today announced that they were placing the campus on “lockdown”, and never allowing the faculty, post-docs, graduate students, and select undergraduates to leave the campus again. In a statement released from the office of University President Lou Anna K. Simon, the University said that “We had recently taken the principled position that our faculty were under no circumstances allowed to use modern information sharing tools and collaborate online with their peers and the public. We felt that this position wasn’t strong enough. Our world class faculty and students carry important and critical University Intellectual Property and business records in their minds, and we just can’t let them get out and risk them sharing that property and exposing those records. We attempted pilot projects where each faculty member was given a stack of permission forms for each person they encountered to sign. That pilot was not successful. So we had to take the next logical step.”

“Not successful is an understatement”, said J. Allen Farnsworth, a tenured Classical Biological Anthropology professor, “I got a bloody black eye when I asked the lady at the lawn and garden shop to sign this form after I gave my lecture about the history of all art that includes references to caterpillar segments. The University told me that I had to do this any and each time I shared their Intellectual Property.”

Pressed for more information about such an unprecedented move, a spokesperson for Simon said that “we realize this may cause some consternation. But our IT department created this thing they call a ‘wallfire’ for our computers, and we really liked that wall idea. We absolutely must protect our Intellectual Property, and our Business Records. Especially all those emails from the facilities department about why my request to the move the light switch closer to my desk hasn’t yet been completed. However, we feel that our faculty and students will be well cared for and comfortable here. We have the finest in Spartan accommodations.”

“Spartan is right.”, agreed Professor Farnsworth, “all they gave us was a cheap plastic air mattress, a toothbrush, and some toilet paper. And it’s not even two-ply.”

Asked for additional comment, a spokesperson for David Gift, Vice Provost for Libraries, Computing, and Technology told us that “David couldn’t be more pleased. He’s taken a lot of criticism for being such a classicist on this issue. Forcing everyone to use our crappy custom developed webmail client really has been hard. He’s been having administrative meetings and lunches, and golf outings every day, to try to get the budget increased now that we told everyone they can’t use better products. And that’s hard, you know? If we don’t get more budget, we may never be able to back up our mail server ever again. By locking up all our faculty and students, which of course was the next logical step, it takes some of the pressure of me, er, him. And with Jack [Valenti, late head of the MPAA] gone, it’s been hard to find a sympathetic shoulder to lean on. I’m really doing everything I can for our fine University! I’m trying to protect our Intellectual Property! Oh, excuse me, I have to meet with some RIAA representative to install their monitoring software on our ResNet”

Asked why the Administration wasn’t covered by this policy, a spokesperson for Chris Hanna, Interim Assistant Vice President for Human Resources responded simply “well, we do keep some business records, but we’ve been assured that we are neither intellectual, or have any brains.”

A joint Engineering/Natural Sciences research initiative that would allow the faculty and students to dump the University contents from their brains each night showed some early promise, but some of the key neurological research needed to implement the filters properly, so that the faculty and students didn’t forget the names of their pets and partners was only available from Stanford. And with the new IT policies, MSU wasn’t able to share in that information for risk of exposing their own Intellectual Property.

So, for now, MSU faculty and students stay locked in their offices inventing new Pong games while waiting for the mail servers to be rebooted. Stay tuned for more on this developing story.

Thanks to Kevin Gamble for information contributing to this report


I have a good friend serving as an Army Chaplain in Afghanistan. I dropped him a note the other day to tell him about my wife and I bringing a second pup home and linking to the story of it.

His “government computer” in the office? It blocks access to Flickr apparently (and maybe, he wasn’t clear on that).

The military blocks Flickr. Absurd.

It might not be a blanket policy in theater. It just might be that office, or that computer. Whatever it is, the IT people that manage that computer should be absolutely ashamed of themselves.

The Customer Service Paradox

My colleague, Ben MacNeill recently bookmarked a blog post from Jeff Atwood who in turn, was quoting Werner Vogels at Amazon – and their policy of having the developers have to spend some time doing customer service for the products they develop.

I do agree with the premise 100%. A good portion of my career has been spent in some form of customer service. Admittedly, it’s a different form of customer service, I have not yet been in the role of developing a commercial product that paying customers are calling or emailing support questions. But I’ve done plenty of university help desk support, student and faculty support, and peer IT support – from just general computing assistance to support of the systems I build, to the software and web sites that I’ve developed.

As a manager, for a time, I implemented a policy of the “Systems staff” sitting on the helpdesk too. For two reasons: the helpdesk was staffed by students, and it was a mentoring activity, and because it provided some perspective on the the ways that the systems staff could make things easier for the users of the system (or easier for those supporting the users of the system, which usually has the associative property of being ‘easier for the users’).

Throughout the years, some my most satisfying experiences have been doing user support. There’s a certain satisfaction to being able to visualize a problem being described, particularly over the phone, and to solve that problem. And there’s an almost nirvana of getting to the question that the person is really asking, rather than the one they asked. Over time, and particularly because I often developed or integrated the systems they were using, you can seemingly read the user’s mind.

Again I’m a HUGE believer in this idea. Even now, I do a fair amount of support – even though my job is to be the sysadmin, a developer, and a systems architect. My initiative has no help desk, and it has had no person in the organization charged with being the customer advocate. So support is spread out, although somewhat unevenly, throughout the whole group. A few of my colleagues that deal with content issues pick up a whole lot of the content development support (and often a fair amount of computing support too, and they deal with more phone support). I pick up a lot of the email support, although we spread some of it around, particularly the tool-related support, to each of the developers/designers responsible for the given app. My colleagues certainly do their share – more than their fair share at times.

But one thing that developers and others that are not customer support folks will certainly take away from the experiences is a HUGE amount of frustration.

It’s not really frustration about not being able to think through the application, or what appears to be lack of the wherewithall to perform simple operations. Both of these are usually the fault of the application developer and/or the system integrator (e.g. us), and “simple” is most certainly relative.

No, I think it centers on the issue that the problem reporting is terrible. Which creates all kinds of round trip delays in trying to resolve problems. Good problem reports are the exception, not the norm. And maybe I’m getting less patient with this as I get older, or the novelty and challenge of trying to read someone’s mind has worn off through the years, but I do get more frustrated with it.

In one of my many examples of this, just this past week, there was a bug in a web app that I wrote that had to do with passing an empty array into an associations delete method – and that failing because either a single object, or array of objects was expected. It’s something that changed somewhere across a rails release (probably because it was never supposed to work).

For the user, this manifested in the inability to select groups that you would be interested in if you hadn’t already indicated an interest in one (the empty array). I had actually already fixed this in a dev copy after discovering it locally – but had forgotten about fixing it in the deployed code.

The first problem report that came in was:

“server would not allow me to select [bob] as a group”

That’s it. Subject line was [bob].

The followup to find out what “server” meant wasn’t any better. And we were stuck in a round trip to try to get more details.

The second problem report that came in:

“Tried to update my profile several times and failed.”

Finally, the third, with a subject line of “Error indicating an interest in [foo]”

In my profile I selected [foo] as an interest and clicked Save, then received the error:

Status: 500 Internal Server Error Content-Type: text/html

Hallelujah! With just one more sentence, this is the problem report that immediately had me knowing was the problem was. A simple “I did this” and “here’s the error” Unfortunately, it’s quite rare that I get the latter problem report without 2 or 3 round trip emails.

(Aside: I probably get more frustrated with this than I normally would in normal customer support, mainly because these are usually faculty reporting these problems, and I know with certainty they wouldn’t for one minute allow inaccurate problem reporting like this from their students asking questions and inquiring about problems. )

This perhaps isn’t completely germane to the original subject of having developers and systems admins staff the customer service lines for their applications. The problem reports are going to frustrate the customer service people as much as the devs and systems folks pulling their shift. But I think it’s things like this that can have an almost negative impact on the value of having folks do support that ordinarily wouldn’t.

Or maybe not, maybe it has a another benefit. I know that I myself have had some real gems of problem reports through the years. Engineering/IT people are some of the worst about problem reporting ourselves. After this latest round of customer support these last few years on this project, I am far more mindful of my own problem reports.

Additionally another surprise benefit of this is that devs that sit on support are also much more likely to build more logging into their applications. I can’t tell you enough how logging has highlighted what the user actually did, rather than what they say they did. I’ve built a ton of logging options after realizing that I didn’t have enough visibility into the user actions based solely on the problem reports.

Perhaps that’s the paradox. Doing customer support doesn’t necessarily make better apps and systems, maybe it makes us better users.

Yep, it’s valid

I started really questioning this blog post about the 20 ugliest college campuses in the USA (via John Gruber) when I was reading and wasn’t seeing NC State University.

But never fear, we are the 7th ugliest campus in the USA. Whew. I believe the credibility now.

And that being said, the top 6 must be absolutely wretched


The day started normally, though a bit late. Truman and I went for a walk, and I ended up calling in to the staff conference.

Meanwhile, my wife is browsing the pets section at Craigslist. Apparently there are multiple pups at the Harnett County shelter that are not going to make it beyond the next morning. Some folks from NCSU are posting all over Craigslist the pictures of the dogs (and cats) offering to bring them to Raleigh.

She has a feeling – like the feeling she had with Truman. About a lab mix with a sad face with a tiny little picture.


I’m not so sure. I like our life. Married almost 15 months. Our first house together. Our first pup. He’s great. He was a complete impulse rescue from the Johnston County shelter. But he’s doing great. We’re doing great.

And the holidays are coming up. Stress for her and me both at work, stress about the holidays.

I’m Mr. Conservative. Can we take on another dog now? Sure, we talked about getting Truman a friend. But later right? I’m running the budgets. Thinking about travel. Worrying about schedules. She knows that weren’t going to do this yet too. She understands my hesitance. She’s worried too.

Yeah, we have the budget. We’ve got the room, the fence is in. I stare at Truman, completely zoned out in the chair. I’m just not sure. I want to be the realist. I want to say yes. But I want to say no, too. The line between logic and emotion is hard to hold when there’s a shelter pup and a life on the the line.

She’s sending the link to friends, posting in forum posts – hoping to find him a home before, well, there’s not a chance anymore.

Heart strings are tugged, but for most, there’s no room at the inn. For others, well, it’s just not the time.

She calls, he’s still there. I finally say “let’s do it” We drive to Lillington and meet the most timid dog imaginable. We avoid looking at all the other dogs. There’s a few questions. He’s not Truman. But there’s still a feeling.

A vet visit, shots, dewormers, an appointment for a neuter, and a very much needed bath later – the pup is beginning to perk up. He gets a name – Winston.

He looks a lot better after a bath and some play time.

The next day – there’s no dogs listed for adoption any longer at the Harnett shelter. And Truman and Winston seem to be doing just fine together.


I twittered his name last night, and a fellow dog-loving friend from Iowa said “Winston and Truman, eh? They should be able to change the world!”

Yes, I think so. They’ve already changed ours.

Your own gem server and Ruby 1.8.5

A while back, I wrote about creating your own gem server – which basically consisted of custom building a sources gem. Mainly because gem sources --remove at the time wouldn’t let you remove rubyforge from the sources list.

Thankfully, gem sources --remove now works great. And with RubyGems 0.9.5 – they’ve included a new gem generate_index command that will generate the indexes for you. So now – if you want to create your own gem server, you can run the web server software of your choice and use the gem generate_indixe -d [docroot]/mycoolgems command to build the indexes.

(If you do update the rubygems-update gem on your “client” systems, make sure to do a gem sources --add http://yourgemserver and a gem sources --remove from your sources. Or continue building your own sources gem.)

Unfortunately, through no fault of the RubyGems devs, this might not work on a system running Ruby 1.8.5 – like, say, Red Hat Enterprise Linux, version 5. The fault lies in Ruby itself. gem generate_index builds its index in /tmp – and uses FileUtils to move it out of /tmp and into the place you specified as the target directory (or ‘.’). If your servers are like mine, /tmp and your web server directories are on different partitions, and unfortunately FileUtils in Ruby 1.8.5 has a bug moving directories across partitions.

The bug was fixed, I think with this revision in March 2007 – and it’s in Ruby 1.8.6 (at least as of p110/111) – but it’s not in Red Hat’s 1.8.5 packages – and I’m not sure it qualifies as a security bug, so I doubt it will get backported.

Anyway, I went the configure/make/make install route (package purists, feel free to cringe, but I don’t want to make RPM’s and this is core enough for me to stay on top of). Your mileage may vary.