July 2005 Blog Posts

I've Got A Fever...

...and the only prescription is more cowbell.

(The idea of a digital cowbell is pretty ridiculous, but what a gimmick to sell t-shirts...)

Four-Day Birthday Weekend

I took Friday through Monday off not only because I need to start eating up some of my PTO hours before I lose them, but also in celebration of my 29th year on Earth.

Friday consisted mainly of watching La Femme Nikita, Season 3 on DVD and entering my comics from my collection into ComicsPriceGuide.com. I got everything that's been bagged, boarded, and boxed into the online database, so now I can submit the list of comics to my homeowner's insurance company and get a rider on my policy.

Saturday was party-day. Stu and Tif came over early and we went to the local Indian joint and had some excellent food for lunch.

After that, we went and played a couple of games of laser tag. Laser tag was great fun, except there was this one asshole who apparently didn't understand the difference between playing the game and just scoring points. For those who don't play laser tag, the idea is that you have a certain number of shots (like your "ammo") and a certain number of lives. When you run out of shots or you've been hit enough times to run out of lives, you have to return to base to get more. If you get hit, your "shields" go up and you can't shoot or be shot for three seconds, at which time your shields go down. That three seconds is supposed to give you time to run away.

Shooting a person gives you a certain number of points based on the location you hit the person; shooting the opposing team's base (there's a target on the base) gets you a certain number of points.

The idea is that you sneak towards the opposing team's base and try to shoot it; if you get shot, you run away and "regroup" or whatever. This asshole decided he only wanted to play for points, not play the game, so he stood right under our base and just pulled the trigger over and over, regardless of whether we were shooting him or not. Eventually he'd hit our base a few times, and when he ran out of ammo or we shot him enough times, he'd stroll leisurely back to his base, recharge, and come back and do the same thing. Sort of defeats the purpose of the game.

Of course, we all got tired of just standing there shooting this guy, so we played and ran around and had fun. At the end of the game, this guy comes out looking like he's one of the top players out there because we got tired of screwing with him, but he didn't play, he just stood there.

Apparently this guy and his son come in all the time and that's just what he does. That's his way of playing. Next time I find him, I'm cramming that laser gun up his ass. That's bullshit.

We finished laser tag and headed back to my house, where we were joined by my friends Jason, Tracy, and Adam. We played some games, watched some shows, and had far, far too much to drink. (We peaked when Stu started making "Randoms" - just pour whatever you can grab into the cup until it's full.)

Got some pretty cool stuff from folks. In all, I got (not necessarily credited by person):

Hopefully I didn't miss anything. The point is that I got a lot of cool stuff from a lot of cool people, and thanks very much to those folks - you all rock, and you know who you are.

Sunday was spent recovering from Saturday. We were going to head to the beach, but Stuart's "Random" caught up with him and we ended up taking it easy on Sunday instead.

Monday I finished the new Harry Potter book, and it was excellent, but I can't believe she did what she did at the end. I mean, it totally opens the door for this last book to be just about anything, but come on.

And now I'm back at work. I forgot to go get my allergy shot today, so I'm going to have to do that tomorrow and listen to the shot clinic nurse rip me a new one because I'm a day late, so I'm looking forward to that. Plus I see that there's more to do on the current project that's due at the end of the week than I anticipated, so I'd best get to it.

Eyelashes and Other Random Things

Tuesday and Wednesday I felt like I had something in my eye. I couldn't see anything when I looked in the mirror, and I tried washing my eye out but it still was there. Wednesday I decided to take a trip to the eye doctor.

I had an eyelash growing inwards. Explains why I never saw anything - every time I looked for what was in my eye, I would pull back my lid to get a better view. Feeling much better now, but I'm sure that's going to cost me.

Watched that So You Think You Can Dance show last night. Eh. Not awesome, but better than American Idol.

Also fixed our upstairs bathtub faucet. When they installed it, they had a brake inside the faucet handle set so the maximum water temperature was limited. Of course, that meant you got the water to lukewarm and that's about it. I found the specs online and was able to fix that right up. I'm not sure how people did this stuff without the Internet.

Speaking of the Internet, I found a guy who melted down 13 pounds of gummy bears into one big one. Reminds me of my taffy brick.

I also saw that James Doohan (Star Trek's Scotty) died yesterday at 85. That's too bad, and I'm sorry to see him go.

Finally it's my parents' anniversary today, so happy anniversary to them.

Waxy Weekend

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).

ASP.NET Session ID Reuse; VBScript Rounding Errors

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.

HOWTO: Change Roomba Into Raceba

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.

Cut into Roomba to get the perfect fit

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.

Checkout Stand UI

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.

Appointment Time Warp

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!

Tim Minear Is Vastly Unappreciated

I really have to stop watching shows by Tim Minear.

The problem is, he always seems to be involved with shows I love. He worked on Lois and Clark, Angel, Wonderfalls...

The characters are great - you care what happens to them, they're interesting. The plots are interesting and not only reward the passing viewer but also the long-time devotee.

Networks, particularly Fox, seem to hate that sort of thing. Actual characters that the audience cares about? Pish tosh! We don't need that when we can make yet another reality series!

I've recently become addicted to The Inside, a show about FBI crime profilers. It's cool, and the only other crime drama I watch besides CSI. I'd wager I like it just as much as CSI, and in some instances I might even say I like it more.

Of course, Fox isn't renewing The Inside, it seems, and may not even be airing all of the episodes. Once again, a show I really get into, down the tube. Fox really needs to figure itself out.

It's probably a good thing I wasn't into Firefly when it was on. I'd be more pissed still. Thankfully, I can still pick it up on DVD and check out what I missed and be retroactively irritated that it, too, was cancelled.

Chicken Finger Vindaloo

Recipe for Chicken Finger VindalooNightly Jenn and I have a debate about "what sounds good for dinner." We have plenty of food at home, but generally speaking it's mostly frozen and we don't get around to actually thawing anything in time for dinner in the evening. If we were smart, we'd take stuff out of the freezer the night before (presumably while determining dinner for the present evening), but we're not, so we don't.

The other problem we end up with is that Jenn and I like about 75% of the same stuff, but have widely differing taste on the remaining 25%. I like spicy food (not like "I'm going to die if I eat any more," but not "Mmmm this is flavorless," either); Jenn likes stuff more mild.

Last night found us in our usual quandary: nothing thawed and no ideas for dinner. We found some chicken fingers in the freezer that needed to be eaten, but neither of us could figure out what to do with breaded, shaped chicken nuggets. Jenn wanted comfort food - chicken nuggets with macaroni and cheese.

I decided this would be a perfect time to bust out the vindaloo curry paste I bought a while ago but never get to eat because Jenn's such a pussy.

While she made her cheesy pasta concoction, I chopped up part of an onion, got some rice going, and came up with a new item on the menu: Chicken Finger Vindaloo.

Now, it sounds bad. (Actually, it sounds really bad.) But it was actually pretty tasty. Which just goes to show that you can cook damn near anything in vindaloo and it'll end up tasting good. Patak's Vindaloo Curry Paste: go get some, and cook yourself up some Chicken Finger Vindaloo tonight.

Independence Day Warzone

Just as we did last year, Jenn and I went out to Clatskanie, OR, with Greg to light off the city's fireworks show.

This year, though, we came prepared.

See, last year we were a little surprised by the fact the show was at the sewage treatment plant, which brings along with it some interesting and unhygienic biohazard-style goodness like shit-mist floating off the open vat of sewage nearby and tampon applicators in the dirt you have to bury the mortar tubes in. (For more on that, see last year's discussion of the show.)

Like I said, this year we came prepared. Our checklist:
  • Two (2) shovels - One scoop, one spade
  • Two (2) pairs leather gloves (one for each of us)
  • Two (2) folding camp chairs
  • One (1) folding camp table
  • One (1) cooler filled with:
    • Six (6) bottles water
    • Three (3) bottles Gatorade (fruit punch flavor)
    • Two (2) cans Omega energy drink
    • Ice
  • Two (2) moist wash cloths in plastic bags
  • One (1) army surplus canvas jacket (for Travis to wear during show; Jenn to borrow fire uniform)
  • One (1) pair knee pads (for Travis to wear during show; Jenn doesn't own any)
  • One (1) digital camera
  • Two (2) books (for reading during off-times)
  • Two (2) cell phones with car chargers for each
  • One (1) bocce set
  • One (1) croquet set
  • One (1) bottle Excedrin Migraine
  • One (1) box pseudoephedrine
  • One (1) bottle SPF 45 sport sunscreen
  • Two (2) pairs sunglasses (one each for Travis and Jenn, respectively)
  • One (1) beach umbrella
  • Two (2) hats (one each for Travis and Jenn, respectively)
  • One (1) pocketknife
  • One (1) metal rake
  • One (1) container Wet Wipes moist towelettes
  • Assorted boxes dry food (crackers, granola bars, etc.)


This probably seems like a lot of stuff to most of you, but there's rationale for all of it:

There's never enough tools. Having extra shovels and a rake to help fill in the mortar trench is handy.

Once you're done filling in the trench, pending on when the show's going to start, how soon the setup started, etc., there's usually a lot of time to burn. Sometimes several hours. It's good to have stuff to do (read, play games, etc.).

You're going to be thirsty - be sure to bring enough to drink.

You're going to be hot and headachy - bring aspirin. And if you've got allergies, decongestant, too.

You're going to be dirty - bring something to clean up with.

You're going to want to sit down somewhere far away from the shit vat. There's no shade except right next to it, so you're going to have to have something to make your own shade (the beach umbrella). Prop your camp chairs and table down under that and it's like a little paradise in the middle of hell.

You're going to be lighting things on fire, so have a fireproof jacket (there are usually some you can borrow, but there are generally not enough, so if you've got something all cotton, grab it). Knee pads are handy if you're lighting a lot because you're crawling on your knees. I'm glad I had them this year - there are huge scorch marks on them from where I'd have knelt on burning embers.

Anyway, you get the idea. Come over-prepared. If you don't use everything you bring, no biggie. But if you need something you don't have... well, you're outta luck. For example, we failed to bring insect repellant (thank goodness another member of the crew thought of that) and there were mosquitoes everywhere.

The show was bigger than last year - this time we had a lot more five inch shells than we did last year, and this year there were just generally more shells to shoot. The other difference this year is that I was listed as the assistant on the show, so I had a little more responsibility. Last year I only lit the first few shells; this year, I was either watching the back of the person lighting or actually doing the lighting for almost the entire show. Knowing what to expect, I was much less freaked out than I was last year, and by the time we were halfway into the show I had gotten totally used to the noise and the smoke and was feeling like an old pro.

Setup took a couple of hours, the show lasted around 25 minutes, and teardown took about an hour. It's a lot of work for a half hour of excitement, but the show was spectacular and the crowd loved it, so it was all worth it.

That said, I do hope Greg gets us on a different show next year because the hour-and-a-half to Clatskanie to dig in sewer-dirt is a little much. Maybe something with some more shade, or an electrically-fired show? I guess we'll see.

One cool thing does come out of this, though - This is the third show in three years Jenn and I have done, and since we took the pyrotechnician exam last year and we've done the requisite number of shows (and requisite tasks) within the right time frame, we can get our state pyro licenses. I don't think I'd be comfortable running my own show, but you have to admit - there's a certain "cool factor" to having a license to use explosives.

Ant Smackdown

Went out yesterday to get some spider webs off my front door and saw possibly the hugest ant infestation ever. All the way around the house, up and around my front door, then down the front stairs. Tiny little black ones (so small you can see through 'em).

Out came the Raid and washed the bad ants out.

I swept up the ant bodies and got a pile about six inches in diameter and maybe half an inch tall. Yes, that many ants. I probably should have taken a picture, but I was pretty grossed out.

Turns out they were coming from this hole near the side of the house. Flooded that with Raid and I haven't seen anything emerging from the hole since. Here's hoping I got 'em.

Junction Shell Extensions 1.1.0 Released

I just published the new version of my Junction Icon Overlay shell extension, which I've renamed now to "Junction Shell Extensions" because I've added a property sheet that allows you to right-click a junction and see where it points to.

If you liked the Junction Icon Overlay, this will probably be a welcome addition.

Go get it!