Category Archives: Work

The Oddness of American Yard Signs

I don’t “get” American yard signs.

2010 Yard Signs St. Paul, Mn by Mpls55408 via Attribution Engine. Licensed under CC NC.

Do you know which parties these candidates stand for? What their policy positions are? Can you believe that it’s quite likely that both candidates pictured represent the same party?! This is standard American political campaigning (this page is a pretty fair representation).

If you consider that Americans almost overwhelmingly vote along party lines, why does name recognition matter? It’s not surprising to me that there’s possibly no real evidence that yard signs “work”, despite claims to the contrary. What don’t I know? I feel like I must be missing something.

If you consider that Americans often support Democratic policies, why do Democrats not campaign on policy? Why do they not use consistent branding and messaging?

I got a political mailing today with a bumper sticker that was “Kick out the GOP”. If you are trying to persuade  voters who have voted Republican, and identify as such, to support your policies, how does that help? Why do Democrats not try to drive a wedge between Republican politicians and voters who identify as Republican? I don’t think, for example, that it’s a particular stretch to say that Republican politicians don’t actually care about reducing abortion, and that Democratic policies are more effective in that.

Wayfinding in Food Lion is really bad

Wayfinding in Food Lion (my local grocery store) is really bad. It’s surprisingly bad. The most egregious fault is that the list of items you’ll find in an aisle is different depending on which direction you’re coming from! To know what’s in an aisle you have to stand at the end and look up to the right and left to see what’s in it. Looking for cereal? You’ll only see it listed if you’ve not started with the fruit and vegetable section.

Surely someone made a conscious decision to do this. What on earth were they thinking?

Federal GSA Per Diem Calculator

In my spare time recently I’ve been working on a small programming project, which is now live at http://www.perdiemcalc.net/. It’s an extension of work I began many years ago when I was at Wytheville Community College (WCC).

History

As I describe on the About page, the issue I had at WCC was a constant back and forth with my business office as I struggled to get the travel documentation correct for the Per Diem allocation.

Finally I dug into the regulations and wrote a web page with a bunch of JavaScript to make the process easier for me and others at the institution. It turned out to be very useful to other state agencies in Virginia, so it has followed me into my current position and to various urls over time. Around October each year as the rates are due to change, I tend to start hearing from anyone from the Attorney-General’s office to the most obscure agency you can probably think of.

The genesis of this new version is that some institutions in Virginia have started to use the Federal GSA rates for travel reimbursement and wrote to me to ask for a version of the calculator that used these rates. There are a lot more localities in the GSA rates and the pop-up approach I’d used before just wasn’t going to work. It seemed like an opportunity to create something with a much wider audience and do some of the re-architecture that had bubbled in my head for many years. With the permission of my employer I embarked on this as an external project.

New Skills

Technically, in the very first version it was completely self-contained JavaScript. I’d been tinkering with JavaScript since it first was made available for Netscape, and this was a continuation of that work. My initial data structures were pretty naive and I had to include a lot of cross-browser hacks, but it worked. I modernized and simplified over the years, but the basic approach didn’t change.

This new version, however, is more or less a complete rewrite. I used it as an opportunity to refresh some skills and revisit the state of the art in some technologies.

agile programming - i'm glad it has a name

My first rewrite was on Google App Engine or more accurately as a Google Apps Script. I got it working pretty well, but ran into some limitations in terms of deployment. I couldn’t for example, deploy it to a custom url. I junked some of that work, but in the process became more familiar with json and how I wanted the design to work.

In the current version there’s some use of JQuery and a fair amount of json. I’ve also taken the raw data from the GSA and put it into a backend database. That part is a simple MySQL backend, with PHP for the dynamic requests. The code is also written in such a way that I can extend it to other data sets and much more easily update the data as new rates are issued each year.

Other technologies I’m tinkering with include Google Analytics (although I have a lot of experience with that already), and Google AdSense. I’m also tracking my work in Trello. I don’t have the code in version control, but I do have a test and production instance for my development work, and keep the code on Dropbox. I’ve become more familiar with my web host in the process too.

Looking Forward

Nothing is ever finished. I have a feature card in Trello prompting me to add Recent Searches as an option for people. At the same time, I’m always looking for something to subtract, to simplify, or to uncomplicate.

I’ve not entirely worked out a support model yet for questions, comments and feedback. For now, I’m happy with less being more. I welcome feedback, but this is a solid design that has worked well over the years. I’m curious to see if people will find this useful. If they do, that’s great, and even if they don’t I’m glad I had a reason to learn some new things.

Selling My Car: 1996 Honda Accord

1996 Honda Accord side viewI’m selling my car. It’s a silver (officially Heather Mist!) 1996 manual Honda Accord with 326,000 miles on it. It’s in pretty good shape. It was in an accident in the late 90s when someone pulled out in front of it, but otherwise it hasn’t had any accidents that I can recall. There are no significant dents. I’ve owned it since new. Maintenance has been regular. For the past five years or more, I’ve been using Auto Experts on Main Street (Blacksburg), so you can always ask there about it.

1996 Honda Accord front view

You don’t get to over 300,000 miles without some issues. Things have been replaced over the years, and I have most of the maintenance records. I honestly don’t recall what’s been done, but it’s the original engine. There are things that need work:

  • The radio mostly doesn’t work.
  • The A/C doesn’t work. Pretty sure this is a simple leak, but I’ve never got around to getting it fixed.
  • It burns (not leaks) a bit of oil, so you have to keep an eye on the oil.
  • Third gear sometimes requires double-clutching. This means it probably needs a new transmission fairly soon.
  • There is no rust, but the paint has faded in places.
  • The automatic door locking is flaky.
  • The engine light stays on, but it’s been on for the past five years!

The miles are mostly highway miles. State inspection was done January, 2014.

I will only sell it in person, to someone local, in cash for $2,000 (or thereabouts). I will not provide the VIN online, but will provide it in person if you stop by.

540-200-8630 or david@carter-tod.com

Reverend Sam Franklin

This is the Reverend Sam Franklin. This guest book doesn’t have long left, and while the messages are heartfelt, there’s not a lot there. He went by “Uncle Tom” apparently.

I met him once last year, just before he passed away.

I’ve been meaning to write this post for a while and have had the crumbs of it sitting in a draft since I met him. Last year I was at the mall in Christiansburg, VA with my kids. I had left them to their own ends for a while, grabbed a coffee and had sat down in a mildly comfortable chair in the middle of the mall. The seating made a small square with a couple of chairs on each side.

On one side an old man sat in a wheelchair. Opposite me another man sat. After a minute or two the old man spoke up, “If I was to ask one of these people here how old they thought I am, what do you think they would say?”

So, a couple of thoughts went through my head if I’m being entirely honest. Firstly, that I might be in for a crazy old man diatribe that I’d need to gently extricate myself from, and secondly that there was no way I was going to give a straight answer.

The man across from me smiled, but didn’t say much, umm-ing and ah-ing in a jokey kind of way. The old man insisted, “Go on, guess.” I hazarded a silly guess, “Fifty-five?” We bantered a bit more. I guessed a little closer, “Seventies?” I smiled, “You know, I’m not going to even try to get it right. It’s not very polite, is it?”

“I’m one hundred and four.”

Crikey…definitely crazy old man territory. There’s no way a man this articulate and seemingly healthy is that old, despite the wheelchair. We chatted some more and I don’t really remember why, but I moved over to sit next to him. I do remember that his fingers were thick, swollen and mottled with the years.

An hour and a half later, his middle-aged granddaughter and her husband (from Maryland?) came back to pick him up, and I was wiser. “You wouldn’t believe he’s one hundred and four, would you?!” they said. “Oh, I would” I replied.

I’ll admit to not understanding everything he told me. A Southwest Virginia accent, old age, and my own transatlantic origins made some things hard to grasp, but I still remember some of the stories he told me. I wish I remembered more, and I wish I’d written this last year when I intended, but I also hope that maybe one day someone will find this and he’ll be remembered. I’m sure I’ll get some of this wrong too.

In July 1916, the New River flooded. He would have been ten years old then. His family was living in Carroll County at the time, as best I can tell, right down by the river on the flood plain. It came at night. They barely had time to get him and his siblings out of bed, and to let the animals loose before the house was filled. The waters came well up to the second floor.

I wish I remember more, but I’m thinking that they found a friendly farmer and slept in a barn for a while after that.

The next year (1917), the river froze (here too), and the ice dammed up the river destroying bridges.

Some time after that they moved to Radford, VA, and I’d guess around then he started at the Radford pipe works which was owned by the Lynchburg Foundry (his obituary implies he worked in Lynchburg, but I don’t think he did). He worked in Radford for thirty-six years. At some point, perhaps during the war, he went to Tennessee to train to make aircraft parts, which should have enabled him to make a bit more money.

He took himself and his training to Atlanta after that, where I think he had some kind of supervisory role. He told me some tales of a crazy ex-con who he took a chance on. That was a bet that didn’t work out.

During all this time, he was a minister at various places, including a church in Ellett Valley, and they had ten kids. When we spoke his younger brother was still alive and living by himself. He had buried his son recently. I didn’t want to ask about his wife.

He did tell the tale of the time he saw one man shoot another six times. It was connected to his church, and he was the one who ended up taking the gun off the man who did the shooting. There was a court case of course. I seem to recall though that there was a sense that the shooting may have been justified and as a result the Reverend may have been careful with the truth when the time came.

…and that’s it. One hundred and four years. One and a half hours last year. It really cannot have been long before he passed away. It was a great conversation that meandered a fair bit, and was hard work sometimes, but so worth it. I couldn’t quite convey it to my kids when they came to find me, nor to my friends and colleagues.

He seemed a decent man who lived a decent life.

It was a pleasure to meet Sam. I’m glad I had that time to sit and listen to him. I’m glad he persisted in talking to me and shared some of his life with me. When my race is run, I hope someone takes the time to tell a tale or two about me. I hope there are some good tales to tell.

Batch Move Users to Organizations in Google Apps

Just a quick note. I write our own integration code for Google Apps in part because of our scale, and in part because I started integrating our systems before GADS (Google Apps Directory Sync) existed. The code mostly just works, so I don’t look at it very often, and I’m not a strong python coder.

Recently I need to move a fairly large number of users into an organization, but there’s no way to do this in the GUI as a batch job, so I needed to code it. I found the docs, but mostly I have to go through a lot of trial and error. Here’s the ultimate shape of the code I came up with, and an explanation. I’m just writing a quick utility script here so it’s nothing fancy:


#!/usr/bin/python

import gdata.apps.organization.client

# get a client and log in as an integration user
ouclient = gdata.apps.organization.client.OrganizationUnitProvisioningClient(domain='yourdomain.com')
ouclient.ClientLogin(email='adminuser@yourdomain.com', password='adminuserpassword', source ='apps')

# grab the customerId of the integration account - this is new
clientid = ouclient.RetrieveCustomerId()
customer_id = clientid.customer_id

# you need the customer id to do anything, I think. Read the provisioning docs.
# Objects that are camelCase in the XML, change to underscore in python
# I have never found that documented anywhere so I figure it is something you just know!

ouclient.move_users_to_org_unit(customer_id=customer_id, org_unit_path='nameorpathofOU', users_to_move=['username@yourdomain.com'])

#users_to_move is a list, up to 25 email addresses. See the docs on move_users_to_org_unit.

Ah, !@$# it!

I’m quite a fan of ufyh (warning: language NSFW), but less for the 20-10’s or the concerted effort to fix bits and pieces. I definitely see the utility of those and do something along those lines occasionally (those baking soda and vinegar volcanoes really work), but really I think it’s as much about a state of mind that says, “^@#% it! This thing isn’t as big a deal as my stupid brain is making it. Do it now!”

Cases in point:

  1. I’ve had a chip in my windshield (windscreen?) for month or so now. Every time I see it, it niggles me. I really need to do something about that. In a very stupid way, it was chipping away at my self-esteem every time I saw it. It was my car telling me that I’m too incompetent, too lazy to get around to fixing a stupid chip in a stupid screen, which could be a REALLY BIG DEAL if and when the windshield broke because I hadn’t got it fixed. It’s nuts. Brain’s are stupid that way. Today, I finally got to that point, and in a five minute phone call arranged for my insurance to get it fixed for free tomorrow in my driveway!
  2. Daughter #2 never puts her laundry away. She’s allergic to it, I think. As a last resort, I put her on a timer last week. It took her 3 minutes…well, 6 minutes to get it into her room and in the drawers. 6 stupid minutes. Staring at that %@#%ing pile of laundry had been eating away at me for weeks.
  3. I had a caulking gun sitting in my bathroom for a month or two. I needed to fix the caulk around the bathtub. Two bloody months reminding me of what I hadn’t done. When I finally was willing to say “@%#$ it! Let’s do it now!” it took me less than five minutes to lay a bead where it needed to go. You may well (and correctly) claim that I probably did a half-ass job, but it’s done, which is a heck of a lot better than “not done and mocking me.”

The thing is that this kind of thing happens all the damn time, but a slight shift in perspective can really help move things along. There’s a really annoying story about starfish stranded on a sea-shore. You know the one. I don’t think in those terms, but doing something, anything, begins to move things in the right direction. I pick up a couple of dust-bunnies from the floor. It’s nothing, but you know, there are now two fewer dust-bunnies. I put away the dishes. It’s nothing. It takes two, maybe three minutes, and makes hardly a lick of difference, but now I can actually do the dirty dishes and fill the dishwasher. These things seem like they count for nothing, but they actually move things forward, even if it’s only an inch at a time. It’s still an inch in the right direction and pretty soon you realize that you’ve cleared space both mentally and physically.

I’m not so damn special that it has to be right, and I have to look perfect. I should forgive myself and be willing to get it wrong, to screw up, to apologize, to fix, to move forward. The thing done is better than the thing not done. The email sent. The phone call made.

I’m not going to do the exact exercise that I should, but any exercise is better than no exercise. I’m not going to eat in the healthiest way possible, but I’ll add something to the mix, and that’s better than not.

So anyway, this post is a reminder to myself that sometimes you have to be willing to ignore that over-analytical brain and say “@#%& it! Do it now!”

Oh…and make your bed!

When exactly will the “War on Terror” be over?

When exactly will the War on Terror be over? You do wonder. It’s not really a question anyone ever asks. When will it be over and when it is, will our privacy and liberty be restored? Like the War on Drugs or the War on Poverty, it will never be over until it stops being a war at all. One way to “win” is to refuse to fight the same battle as your opponent. Win on your own terms, not theirs.

Not holding my breath on that. What a mess.