This weekend Stu and I took the entirety of Saturday and a box full of Zaino products and did the full wash-and-wax routine on our respective automobiles.

We started at 9:30a. By 11:00a we had done an initial wash, run the claybar over the cars, and finished a secondary wash.

We had to take a break from 11:00a to around 5:00p because it was too hot outside. The day was supposed to be about 72 and overcast; it turned out to be closer to 80 and sunny. Not so great for waxing (we would have been in full sun).

During that break, we went out and grabbed something to eat at the mall, then came back home and played some Donkey Konga 2. Lots of fun, but we needed to get things going again, and when 5:00p rolled around, it looked like we’d have enough shade to finish the job.

We got three coats of wax on (two Z-5 and one Z-2) and had cleaned the interiors of both cars by the time we called it a night at around 10:00p. The light was gone, and we had accomplished what we wanted to accomplish.

Sunday I had no problems totally sleeping in, took a nap in the afternoon, and went right to sleep Sunday night. The wax job totally wore me out. Thank goodness it’s just maintenance from here on out (until a few years down the road when we decide to start over with the claybar again - last time I did this was a couple of years ago).

aspnet comments edit

Catching up on the morning news and whatnot I came across two different and interesting issues.

The first is a new KB article over at Microsoft: How and Why Session IDs are Reused in ASP.NET. Describes how the session ID is reused across applications on a server but the session instance is local to the application. Also describes what to do if you don’t want to reuse the session ID for your application.

The second issue is something I ran across this weekend. I was using a calculator program and one of the operations I entered (in the series) was 5.35 - 5.45. The answer I got back was -0.100000000000001: just a bit off from what I was expecting. I tried it again, and the same answer came back.

I ended up contacting the author of the program and he uses the Windows Script Host to perform calculations, so I wrote a quick test VBScript:

Dim myvar
myvar = 5.35 - 5.45
WScript.Echo myvar

Turns out the answer is still -0.100000000000001. I did a quick search on this and Eric Lippert explains why it’s happening. Long story short - rounding errors due to the base 2 nature of the computer. I understand the answer, but I’m not sure I like it. Makes me wonder if computers shouldn’t have been base 10 to begin with. Heh.

personal comments edit

I was joking a while ago talking about Nuttba - a hypothetical modified version of Roomba that could automatically drive around and smack you in the happy sack. It did, however, give me an idea.

See, I had an issue with my Roomba where some wheel sensor or another got blocked. Roomba support sent me a whole new one, but the old one was unusable. Time to play with the Roomba remains.

I decided that if it wasn’t going to vacuum any more, it needed to be speedy. Maybe I could take it one step closer to Nuttba? “Raceba” maybe

  • race it around the place?

The endgame: make Roomba a remote controlled beast.

I know Roomba already has a remote control, but Roomba’s not meant for speed. There are three possible schools of thought here: Hardware Engineer: Buy some parts to replace/rewire the engines, remove the unnecessary extras, and bolt the whole thing back together better than before. Software Engineer: Buy something that can replace the whole inner workings off-the-shelf with minimal effort because I don’t do that ‘hardware thing.’ Everyone Else: What’s the point?

I’m a software engineer, so my solution is not nearly as elegant as it could be if I knew more hardware stuff, but it only cost me $14 and took a couple of hours, tops.

[Warning - this is a 100% destructive process. Your Roomba will NEVER vacuum again. This unit was dead, so it was fine. But if you do this, it’s at your own risk and cost. Just be warned.]

Here it is: How to make Roomba more fun - pictures and step-by-step description of the process. Enjoy. Okay, so here’s the standard Roomba that we know and love.

Roomba - the
beginning

Flip him over. There are a bunch of screw holes that hold the bumper and body on. Look around and find them. Note there are a couple down by the black vacuum motor unit in the center of Roomba - theyr’re a little hard to get to, but you should see them.

Inspecting the underside of
Roomba

Detach the bumper first to make it easier - the bumper partially holds the main body top on. You’ll need a skinny screwdriver to get into the screws in the bumper, like I have here.

Removing the
bumper

The bumper is connected to the main body with some wires. Not that we need to be all that careful (we’re going to gut Roomba anyway), but disconnecting the wires makes for easier bumper removal.

Disconnect the bumper
wires

Now you should be able to remove the top (assuming you’ve removed the rest of the screws holding it on. The top is also connected with a bunch of wires. Just go ahead and cut those.

Wires connect the top to the
body

In the back where the dust bin plugs in, the little connectors that hold the dust bin in place also hold down some wires. You can pull them up to release the wires.

Pulling out the dust bin
holders

The main board in Roomba has a bunch of wires connected to it, too. Disconnect as many as you can. We’ll cut the rest later.

Disconnect wires from the main
board

Get that vacuum motor out of the way. We don’t need that anymore.

Clip the vacuum motor
wires

Okay, now, again, back where the dust bin connectors are, you’ll see that one side has some wires screwed to it. Unscrew the wire connections to release the wires, but put the little metal clips back - they stop the dust bin from rattling around too much.

The metal dust bin
clips

Strip the wires and stuff from the inside of Roomba. When you’ve got the wires stripped, he’ll look like this:

Roomba with the wires stripped
out

We don’t need the wheels anymore. Disconnect the springs that hold the wheels down, then unscrew the screws that hold the wheels on. Don’t lose the little screws or the plastic bits on the underside that hold the screws in, though - you need those.

Disconnect and remove the
wheels

The screw on the outside of each wheel that held the wheel in needs to be replaced. Those screws also hold the sides of Roomba together. Here’s the top view of where the right wheel used to be - you can see that the inside screw isn’t there, but the outside one is.

Replace the outside screws from each
wheel

This is the underside view of that screw - see how the little black plastic bit is what holds the screw in? That’s why you can’t lose those when you remove the wheels.

Underneath the wheel
bay

Here’s the trickiest part of the thing. You’ll see on each side of the main board that there are black plastic “boxes” that hold the bumper spring arms in. If you unhook the spring arms, you’ll see they just fly out and would never hold the bumper on.

The bumper arm movement restriction
boxes

Disconnect the bumper spring arms from the main board, then remove the main board from the Roomba by unscrewing the little retaining brackets on either side. Use a Dremel tool to cut the two ends off the main board

  • just enough to leave the black plastic boxes on each side. You don’t need the middle of the board, just those ends. Hot glue the two ends back into their original positions and replace the retaining brackets. It doesn’t have to be indestructible, just enough to hold the bumper arms in.

The trimmed down main
board

As you’ve seen, we’ve removed as much extraneous weight from Roomba as possible. One last thing - on the dust bin, there’s a blue rubber “apron” thing. Pull that off. You don’t need it dragging around. You can later sand down the tabs on the dust bin that held the rubber apron on.

Remove the dust bin
apron

Now, the R/C car I bought was the $14 6V el cheapo from the toy store. Roomba’s only about 12” in diameter, so you can’t have anything much bigger than this or it’ll stick out from underneath. This one was just about right, maybe a little on the small side. But the price was right, and I can always go back and use a better one. It’s going to be sacrificed anyway, so $14 was pretty reasonable.

The Tyco R/C car, ready for
use

Unpack the car and remove the plastic body because you won’t need it. Be careful when you remove it that you don’t accidentally rip off the antenna wire they have attached to the underside of the body.

Be careful of the
antenna

The stripped R/C car, ready to go Roomba:

The stripped down R/C
car.

At this point, you can re-attach Roomba’s top, then the bumper (in that order). Finally, the dust bin.

Here’s the other tricky part - you have to cut out notches in the Roomba body so the R/C car can mount to it. We’ll mount it with some screws using the same holes that held the original R/C car body on, but we’ll screw through Roomba’s underside.

I ended up holding the car up to the bottom of Roomba and tracing out some lines, then using a Dremel tool to cut out the parts to help it lay flat. You’ll see I cut out a section near the battery compartment and a small bit from the dust bin. The battery compartment turned out to be perfectly located for the wheels on the car, so I didn’t have to cut out anything to make sure the wheels would move correctly.

Mount the R/C car to Roomba using some screws. The screws I used were some 1.5” wood screws, but it doesn’t really matter as long as they fit in the holes in the R/C car. You’re going to be drilling some holes (or forcing the screws through) in Roomba anyway.

The R/C car mounted to
Roomba

Here’s a different view of the mounted R/C car:

The car mounted to the bottom of the Roomba
body.

Raceba lives! You’ll see it doesn’t sit too much higher than original Roomba - maybe another inch.

Raceba - ready to
go!

I took this thing to work and we had a blast with it. I think I’m going to put one of those orange kid bike flags on it so I can see where it is over the cube walls.

I work a lot at the UI layer of an application, so when I see bad UI, I generally recognize it.

I encountered bad UI as I was going through the self-checkout line of the grocery store at lunch. I finished scanning all of my items, then clicked the button to pay. The next screen showed me probably 20 different payment options, and some of them were redundant. In my case, I wanted to pay with a debit card and get cash back. There were two possible options that fit my situation: “Debit” and “Debit + Cash.”

Seeing as how the screen said “Select your payment type” in the title area, I actually got confused: Does “Debit + Cash” mean I’m paying partially with my debit card and partially with cash, or does it imply that I only have the cash-back option if I select that option?

I asked the nearby clerk, who didn’t understand why I might be confused, then finally came through with the answer that “Debit + Cash” means “pay with debit card and get cash back.” Of course, by then she had decided that I also didn’t know how to work the debit card machine and walked me through that one, step by step as well.

Bad UI, fellas. Bad UI.

I had a doctor’s appointment this morning for this little dry patch I have on my hand. (Don’t worry, it’s not fungus or anything, it’s just a dry patch.) Anyway, I called in yesterday and had my choice of either seeing the doctor locally (about 10 minutes from my house) or downtown (45 minutes in rush hour traffic). Well… that call went like this:

Travis: I need to make an appointment. Receptionist: We have… second week of August open. T: Nothing sooner? R: Downtown we’ve got one Friday. T: Tomorrow? R: Yeah, I guess tomorrow is Friday, huh? 9:30 in the morning. T: Wow, that’s great. Yeah, tomorrow morning at 9:30. R: Okay, the office is at… [And she proceeds to give me directions…

I got to the doctor’s office today - through rush hour traffic, mind you - and it turns out my appointment is not today, it’s next Friday.

That’s… that’s great. I’m pretty sure I confirmed it as today.

Faced the rush hour traffic back the other way, nothing accomplished, and two and a half hours later in to work than what I normally am.

Can’t say I’m having a great day today.

Also found out that the thing I’ve been working pretty hard on for the last day - trying to shoehorn some very custom code into a generic application - isn’t really required so much as nice to have. One of those “we just wanted to see if we could squeeze that in” things.

That, too, is great. If I can go ahead and spin my wheels some more, it’d be much appreciated. While you’re at it, just kick me in the jimmy. Again! Harder!