I do have a leg to stand on

April 16th, 2011

… but only the one. Here’s why the other can’t be used:

Ankle X-Ray

When I talked to the surgeon (Dr. Shannon) on Monday, he said that my options were two: an operation, during which he’d put a plate and a screw into my ankle, or just having a cast put on it. The possible failure modes were very similar for both treatments, but there were a couple of extra potential problems if I had the operation (such as infection). I was concerned about the cost of the operation, because I have no medical insurance, but his charges were going to be under $600 for the surgery, so I thought it might be affordable. He made an reservation for an operating theater for Wednesday morning in case I made that decision.

Then I talked with the hospital. Their charges, even after a 40% discount because I was paying myself, would be expected to run in the $17K-$22K+ range. I didn’t even bother to find out what the anesthesiologist would charge; there’s no way I can justify that much money.

So, yesterday morning, I got my cast. I wasn’t aware at first why it couldn’t have been put on Wednesday during the time that had been set up for the operation, but they apparently wanted an extra day or two to let my ankle reach its maximum swelling. I took these photos after they took off my splint, just to have a record of the bruising and swelling:

These are the impressive bruises. The break is on the other side of the ankle, but I’ve got tendon and ligament damage on this side.

Inside bruising

This is the side with the broken bone. There’s bruising, but this is probably the best shot for highlighting the swelling.

Outside bruising

This shot shows how far up the shin the bruising extends. I was surprised, myself.

Up the leg bruising

I don’t regret going for a cast instead of the operation. As I noted earlier, the potential outcomes and drawbacks are similar. The operation has a couple of extra potential drawbacks to counterbalance the potentially-but-not-guaranteed-better outcome. Dr. Shannon also noted that one of his mentors feels that ankle surgery is recommended too aggressively these days. His evidence was that people with knee and hip surgery from 30-40 years ago were getting arthritis in those joints and needing new surgeries done, but people with ankle surgeries of similar vintage weren’t getting arthritis nor were they needing ankle fusion operations.

So far, apart from finding out just how much exertion getting around on crutches requires (particularly dealing with stairs – I’ve been sleeping on the couch to avoid them), transport is my biggest problem. Because it’s my right ankle that’s injured, I’m not going to be able to drive a car until it’s completely healed. Bugger.

This morning was the regular third-Saturday-of-the-month ukulele club meeting at Swallow Hill. I’d planned on going, but was unable to. I did go out on my back patio and play ukulele for a while this afternoon, and I also found a fun “Spot the Ukulele” game at Maggie’s Farm. I’ll probably play that several more times until I can get to meetings again.

Miscellany 13

April 12th, 2011

Some interesting-looking movies to watch here.

Writing hard SF? This may be useful.

My ex referred to our first house as “Kingdom of the Spiders.” We didn’t need this chart, because we already knew how to identify black widows. If there’d been others, though …

Boy, I think I could make good use of one of these.

Want to browse the internet anonymously?

This is a very nice music video, with some interesting percussion.

NOT another Pleasant Valley Sunday

April 10th, 2011

So, Marion and I went cross-country skiing today up in Breckenridge. It was a nice day for it, if a little windy. Unfortunately, parts of the trails were icy – the wind had blown the loose snow away. Coming down a short, steep, section of trail, I didn’t have a lot of control. The trail took a turn to the right at the bottom, and there was a drop into a creek if you missed the turn.

I could tell that I wouldn’t make the turn, so I managed to head left into some soft snow off the trail before the turn. Unfortunately, when my skis went into the soft snow, they dropped into it. My right ankle folded over and I flipped over completely and ended up face down. I thought I’d sprained my ankle, because it hurt, but I could still put weight onto it. A passing skier named Tim was kind enough to carry my skis back to the lodge, and I used my poles as support while I hobbled back to the lodge. It was probably close to 1/2 mile to get back.

I stayed in the lodge with ice on my ankle while Marion got in a little more skiing, then we came back down the mountain. I had her drop me off at the emergency room so that I could verify that it was just a sprain.

It wasn’t. The doctor who looked at my X-rays said I’d “smashed” my fibula. He also said I must be a really tough guy to have been walking on it. I don’t know … there’s pain, but it’s really more uncomfortable than painful. Now I’m concerned that I have deficient pain receptors. In any case, I now have a splint that goes up past the knee on my right leg, and I have to keep all weight off it for two days. Tomorrow morning, I find out what my options are. The ER doctor said he believes that I’ll need a screw on the inside of my ankle, and a plate on the outside. Not what I was looking for when the day started.

Ah, well. My first broken bone. I’m sure my parents would be so proud, if they were still around to hear the story.

April Fool’s Day

April 1st, 2011

I’ve written about April Fool’s Day before. There are two posts on this site about it. Back in 2005, on my previous website, I had a link to the Museum of Hoaxes list of the 100 best April Fool’s jokes.

This year, I’ll just point to the aggregator page for web-based April Fool’s jokes.

Nice stunt for St. Patrick’s Day

March 19th, 2011

Via Ace.

Headline: 16 superheroes on streets of Britain

March 18th, 2011

As Dave Barry would say, I am not making this up. Somehow, though, I suspect that “costumed individuals” is a more accurate description than “superhero.”

Crud!

March 15th, 2011

So, I’ve managed to come down with the crud. I’ve barely moved off the couch for the last two days, and the congestion, coughs, and chills are not endearing themselves to me.

I haven’t done anything more strenuous than read – check that, I’ve had to throw the cats off of me a time or two – but I’ll leave you with a link to the best license plate/license plate holder combination. Evar. It’s nice to see that kind of flow from one to the other.

Old home week

March 15th, 2011

So, I’m staying at home today because I’m sick, and I’m watching a rerun of Junkyard Wars on the Science Channel. It’s an episode from 2002 in which the teams had to make hydrofoils, and it’s an episode I haven’t seen before.

Imagine my surprise when their judge turned out to be one of my old Naval Academy classmates, Pete Squicciarini.

You know you’ve been watching too many horror movies …

March 10th, 2011

when you react to the clichés.

This looks familiar

March 10th, 2011

William Woody has a post about developing Java code to implement the factorial function. More specifically, it’s about how not to. He starts with a very simple (and straightforward) implementation, then produces updated version after alternate version in order to handle various possible conditions that the code may need to support.

The operative word is “may.” He concludes the post with a discussion of appropriate pains to take in an implementation, as well as which requirements for a programming task are actual requirements. As he says,

So please, do us all a favor: if you have the urge to add complexity because “someday we’ll need it, I just know it!”, or because “it’s not sufficiently flexible enough” or “we need reusability in our code” or (God help us!) because it’s “cool”–just go home early.

I’ve not programmed in Java, but the points he makes are applicable no matter what the language. I believe that part of the problem is that there is a subgroup of programmers who aren’t happy unless they’re showing off how convoluted they can make their code. I remember a cartoon I saw, either in an issue of Forth Dimensions or in one of Leo Brodie’s books, Starting Forth or Thinking Forth. The cartoon shows two programmers in space looking at the Earth-Moon system. One, the Forth programmer, is saying, “No good – too complex.” The other, labeled, I believe, “Ada programmer,” is saying, “No good, too simple.”

I’ve worked with both types of programmer, and I’m currently maintaining a large piece of code written over a decade ago by one of the “no good, too simple” types. He came from a background in academia, and felt that his MSCS made him more qualified to define application requirements and design products than the combined 30 or so years experience in the field that my boss and I had at the time, because neither of us had a Master’s degree.

It’s pretty hard to figure out what any given piece of code in that application does, because nothing is simple and straightforward. It’s all convoluted, indirect, and involved. It puts me in mind of a button I bought at an SF convention a few decades ago, which reads, “Never make anything simple and efficient when you can make it complex and wonderful.” As an example, the program maintains a pair of ring buffers. Conceptually, these are fairly simple and straightforward. There are some boundary conditions you need to be careful with, which are discussed at the link, but other than that, they’re easy.

In the software I’m maintaining, they were implemented as state machines with 64 states. Talk about violating Occam’s Razor! The C source file containing the implementation is 15k in size, with almost 600 lines of actual code. What comments there are in the file mostly relate to the encoding and meaning of the state numbers – very little of the code has descriptive comments stating what the code is doing.

Years ago, I ran across the statement that the fastest-executing and most bug-free code in a system is the code that isn’t there. That made tremendous sense to me, and it’s why the ring-buffer implementation I just described offends my sensibilities so much. To me, it’s just intellectual masturbation. He wasn’t writing for efficiency, or for clarity, although I’ve no doubt he’d claim that that was exactly what he’d done. He was writing to show off, to himself if no-one else. There may have been some attempt at job-security-through-obfuscated-code going on, as well. If so, that didn’t work. After all, I’m maintaining his code, and have no idea where he is, nor where he’s been for years. Actually, although the comments in the file describe it as a “robust” ring-buffer implementation, I had to make a correction to it several years ago – there was a bug in his code (color me surprised) that caused a persistent error condition after a particular error occurred. The code, of course, couldn’t detect that it was in that particular error state. Eventually, though, a customer could.

I probably put more emphasis on clean and simple code than most programmers. It often ends up longer than other implementations, because I tend to ignore a number of advanced features of the language, unless the code is meant to demonstrate the use of that feature. This is because most of our customers aren’t programmers; they’re engineers who want to learn as little programming as necessary to get the job done, and the code I write has to serve a pedagogical purpose, as well as being useful. As a result, the code I write tends to be very simple with a lot of comments. Unfortunately, that doesn’t always mean it’s bug-free.

Coding style may be a matter of preference, but coding complexity, at least in this regard, is a matter of corporate culture. At a previous job developing dedicated word processors (that is, a computer system that could only do word processing), back in the early 1980s, I was at one point tasked with making an update to a particular piece of code. The code was designed to be incredibly efficient; it was written in an incredibly convoluted manner in order to minimize execution time. It took me three weeks to understand the code, after which the change took less than a day. Coincidentally, the original author had taken three weeks to write the code.

The convoluted code saved several milliseconds over what a naive implementation would have taken. It executed once during system startup. I suspect that you can guess my feelings about the efficiency of that module.

The author moved on to the “new product” project that the company started. Apart from a few supervisors, nobody in the “current product” group could move over to the new product group – they staffed it up with recent graduates who’d used Unix in school. That was their problem. Apart from the supervisors, several of whom were addicted to cleverness in their code, nobody working on the new product had ever delivered a product.

The current product line that was providing all the company’s income was based on 8086 hubs and 6800-based terminals (80×24 characters, IIRC, but they might have had larger displays). The new product under development was to be 68000-based, with a bit-mapped graphical display so that you could do WYSIWYG word processing. They gave us a product demonstration at one point. The system took somewhere between 30 and 90 seconds to come up (this was around 1983 when most personal computers were effectively instant-on, and even PC-XTs only took a few seconds to boot DOS), and the bug list was written ceiling-to-floor several times on butcher paper that covered one wall. One bug was that you couldn’t print – not a good thing for a word processor company’s upcoming flagship product.

This has been a long rant, but my point is largely the same as Mr. Woody’s: complexity for the sake of complexity, or for anticipated future needs, is a bad thing. My elaboration on that point is: make sure you’ve got someone who knows what needs to be done, and ruthlessly prevents unnecessary complexity.