There’s pain, and then there is pain

As well as the knee pain, which is and has been pretty much a constant feature (although with intensity that waxes and wanes) in my life since the late 1970s, I get this strange hip pain. The hip pain, which feels like it’s emanating from the “point” of my hip, comes around every now and then, and stays for a week or two, and then it goes away. It means that during that time, I can’t get comfortable sitting anywhere and I end up moving from chair to chair to bed to chair trying unsuccessfully to get comfortable. Other than that, it doesn’t really interfere with my life. It came back a week or so ago on my right hip, but it’s hardly noticeable because of the new pain in my life.

We got a lot of snow over Christmas, and the city wasn’t very good about clearing the sidewalks. And unlike in Ottawa, the sidewalk plows don’t spread sand or salt. Consequently, the sidewalks ended up being thick with ice, except in the few stretches where the home owner was diligent about clearing their own sidewalk. Consequently, I got very sore groin muscles from walking the dogs on the slippery ice. (For those who’ve never experienced it, when you walk on ice you need to keep your weight entirely over your front foot and you walk with a sort-of penguin-like shuffle. You also need to use muscles you don’t use as much in regular walking to keep your legs from splaying out and falling on your ass.) And after that started to fade, I got a horrible pain deep inside my left hip. You know how you put a knife blade in the joint to get a turkey leg off the carcass? Yeah, that’s what it feels like is going on inside there. Sometimes it’s just sore, sometimes it’s very stabby, and sometimes it takes my breath away it’s so painful. It’s very inconvenient when I’m walking the dogs, and it comes on really bad and I find myself wishing I could just stop in the middle of walking the dogs and call Vicki to pick me up. I’ve tried various stretches that sometimes help with the other hip pain, but they don’t seem to be helping this one.

So right now I’ve got the pain in my right hip that I used to consider bad, and the pain in my left hip that’s 10 times worse. And I’ve still got dogs to walk and erging to do and all that stuff.

Get it together, guys

If there is one thing that iOS and Android developers seriously need to come together on it’s a common standard for showing “my app is currently waiting for something to arrive from the internet”. I mean, half the time in Android all you can see is a tiny barely visible exclamation mark or something on the wifi signal strength meter. The spinner on the titlebar that seems to be the “normal” iOS one is at least slightly more visible, although I think we need something more visible when your app is actually blocking (as opposed to just filling stuff you can’t see yet). Some apps have taken it upon themselves to replace the “default” spinner (or lame exclamation point) with a much more visible one in the main screen – in the Facebook app on iOS it’s both, and they aren’t 100% in sync – but there is a lot of different spinners and throbbers in different apps, and it’s inconsistent and confusing. Then you get the god-awful flashing color bars in the G+ app on iOS. Please stop trying to be clever. Maybe if Android’s wait notification wasn’t so lame people would actually use it, and then at least we’d have some consistency. (It doesn’t help my case that Chrome on my iPad currently has the spinner up on the title bar spinning even though nothing is loading.)

UX fail

Last week, in an effort to broaden my horizons, I joined a bunch of groups on Meetup, including one for “UX” (User Experience). There was a meeting scheduled for today (Wednesday) at 6:00pm, and I clicked the button to indicate that I’m planning to go.

Almost immediately, they announced that they were moving all future communications from Meetup to another similar service which appears to be mostly oriented towards start-ups, something which I’m not at all interested in. (Been there, done that, lost my t-shirt and 17 SAN.)

Then they announced that they were changing the location, but they weren’t sure where they were changing it to.

Then they announced it was at the “Center for Student Innovation” at RIT, but with no further details of where in this building.

I got there at about 5:40. There were no signs indicating where it was. I went on-line and discovered that they’d announced a room number at around noon today. The room was in use, and it looked like a class or a seminar going on. I sat down to wait for 6:00. 6:00pm came and went, and whatever was going on in the room never broke up, nobody entered, one person left, but the door remained closed. Nobody else appeared to come up to the door to try it or ask where the meeting was. I decided that either the group I was attempting to meet was in that room, but nobody had told them that an open door is more welcoming than a closed one, or the regulars saw the closed door and decided to go somewhere else without bothering to put up a sign or troll the lounge area looking to see if anybody was waiting to join the meeting. Either way, I felt unwelcome so I left.

So the User Experience experts managed to give me a lousy User Experience and wasted my evening. Thanks guys.

Let’s get realistic here for a moment.

The fact of the matter is that my shoulder is not getting better. My pain level is actually worse than it was before my first surgery, and has not been getting any better for two years. Basically every time I do my physiotherapy exercises, which I’m supposed to do every other day, I’m in pain for 3 or 4 days afterwards so they don’t get done as often as they should.

So barring some miracle happening in the next couple of months, I’m facing either not kayaking, or kayaking in pain. Judging by the way it’s gone in the past when I’ve tried to continue a sport with pain, if I’m really lucky I’ll get maybe one year to recover my fitness, and another year to race, and then the pain will be too great to continue – if I’m unlucky I’ll wimp out of the pain in March, sell all my boats and go back to being a limpet. So I guess the realistic thing to do is to prepare myself to train and race in pain, and hope for a miracle. And the best training for training in pain is to start doing my physiotherapy exercises in spite of the pain that they cause me. Who knows, maybe they’ll actually start doing me some good?

Design iteration

I have a web page that shows a bunch of data (trouble tickets) on different tabs.

In the first iteration, I was doing a ton of queries at load time, and building up the content of each tab using Perl Mason. Tabs that had no data on them were not even created on the page. There were three problems with this:

  1. It took a while to load the page
  2. Any time you did anything that would change the tickets that are on the page (like resolve or reassign one of them), I’d have to totally reload the page.
  3. You’d probably have to occasionally reload the page to see if anybody else had done anything that would cause more or fewer tickets to appear on one of your tabs.

In the second iteration, I changed it so each tab would only load itself when you clicked on it by making an AJAX call. This did wonders for the speed of the initial page load, you’d see the latest and greatest information on the tab when you clicked on it, and if you resolved or reassigned one, it would repopulate just that one tab. As an added bonus, I added paging and sorting to each tab. I was happy about the paging and sorting. The biggest problem is that I couldn’t hide the tabs with nothing in them, because I didn’t know there was nothing in them until you clicked on them. I didn’t like that.

In the third iteration, I added an argument to the AJAX call that would allow it to just return the count of tickets in the tab, instead of actually returning a page’s worth of tickets. This is fairly fast. So now when it goes to refresh tab “B”, it makes simultaneous ajax calls to get the count for tabs “A”, “C”, “D”, etc. This means that tabs that have no tickets are disabled, giving you a good visual indication of which tabs you need to look at. Also, any time you interact with the page, in the background it’s checking to see if any of the other tabs need to be enabled or disabled. I’ve checked in Firebug and it’s apparent that it does all these other tab count AJAX calls while the “repopulate the currently selected tab” AJAX call is processing, so it’s nice and fast. I’m pretty happy with this.

Next iteration would probably be to add some searching or filtering.

After that, maybe using a WebSocket or periodic polling to see if anything has changed instead of only refreshing when you interact with it.