What’s more fun than a root canal?

Well… a root canal. It really wasn’t at all bad. Crowns are actually worse than this was.

Of course, there were two things working in my favor. One was that it was a front tooth, so it only had one root instead of three or four. And the other was that (this surprised him too) he didn’t have to drill at all. Just a bunch of filing.

Interestingly, they had me take off my glasses and put on a pair of wraparound sunglasses. This because they were going to be moving a lot of tools around over my face, and the shades would give me a little better eye protection. I asked if he was planning to do any welding in there, and he laughed.

It’s interesting — they hollow out the inside of the tooth, and then fill it with some sort of rubber to seal it. They showed me the “after” X-ray. I expected the rubber to be invisible to the X-rays, but it turns out that the rubber is actually denser than bone! Solid white line on the X-ray, surrounded by grays where the actual tooth is.

I did have a bit of a shock when I went in and found that they don’t accept Delta Dental. They’ll file the claim for me, but I had to pay their office 100% today, and later I’ll get a refund check from Delta. Boy, that would’ve been nice to know in advance, wouldn’t it? I had been planning to use the flex card to pay for it, but that certainly won’t work if I don’t know how much is out of my pocket. Hopefully I get that insurance check before my next root-canal appointment in a month. Sigh.

Okay. Time for a nap. 7:00am is just way too early to be up and moving. (Though the sunglasses helped.)

From Slump to Supercharged

Chris Woodruff pointed out a set of articles by Steve Pavlina of Dexterity Software. Very interesting reading. It’s mostly targeted at game developers, but most of the content is general-interest. How to sell software, how to manage your time, how to motivate yourself. I’ll need to spend some more time reading this stuff.

Unlike Chris, I can’t say that reading “From Slump to Supercharged” instantly changed my life… but I printed it out. I’m going to read it a few more times. And show it to Jennie. I think I’ll also take a copy in when church youth group starts up in the fall. Whether it’ll take immediately, or grow on me slowly, it’s got some good things to say. It resonates.

ReSharper revisited

I posted about ReSharper yesterday. This morning I had a comment from Oleg Stepanov, one of the ReSharper developers, waiting in my e-mail. He had seen my blog post and was responding to it. Wow.

Among his responses:

  • ReSharper’s highlighting colors are customizable via the standard VS Tools > Options. I’m impressed that they’re that deeply rooted into Visual Studio; I didn’t expect to find an add-on’s settings there. (Well, it did occur to me at one point, and I probably would have gotten to there eventually, if not for the errors.) But hey, now I know.
  • They already know about the multi-monitor issues, and they’ll be fixed in one of the bugfix updates.
  • He says the exceptions are related to invalid metadata in one of our assemblies. Given some of the problems we’ve had with the Delphi 8 compiler, that’s entirely possible.
  • There actually is a Tracker for ReSharper bugs. But I’ll be buggered if I can find any links to it (except in his e-mail).

Again, it looks like a nice product… but we certainly can’t use the current version. I’ll see if I can work with them to track down the problems it’s running into, in hopes of getting a working-for-us version a little sooner.

Fear it.

So I posted Bob the Overlord’s Blog over on the Writer’s BBS. And vodou quoted the “All shall fear the rage of the marsupials” sentence, and said, “I think I want a bumper sticker of that sentence.

I had to do it. I just had to.

As soon as I finish reading the CafePress legalese, I’ll drop three and a half bucks to order myself a bumper sticker. If it looks good, you’ll be able to order a Rage of the Marsupials bumper sticker of your very own. Stay tuned.

ReSharper: Not ready

So I got VS.NET repaired. It also wanted me to close an IE window that Hotmail had popped up, although it never complained about the actual main Hotmail window. And, of course, it trashed my toolbar settings yet again.

But after the rebuild, ReSharper loaded just fine, and so did the csUnit plug-in that hadn’t worked in months, so evidently things are much happier now. I opened a toy project with just a couple of forms in it and played around a bit.

ReSharper has some nice features. I liked the treeview that shows all the places a particular method is called from; much nicer than adding an ObsoleteAttribute and recompiling. It was also pretty cool how it noticed namespace imports that you’re not using, and colored them in gray. When I wrote code to call a method I hadn’t defined yet, it highlighted the method name in red. They show a little “green light / orange light” (orange?) to show whether there are any warnings in the current source file (things like unused imports), and you can usually click that to jump straight to the first warning. Nice stuff. Haven’t tried their smart templates or refactoring tools yet.

Minor gripes:

  • Too many colors. Stuff that used to be black, plain black, easy to read, easy to differentiate from keywords, now appears in a myriad of different colors. They need a way to customize those colors (i.e., change most of them back to black) so I can reduce the noise.
  • Not multi-monitor friendly. I run VS.NET on my second monitor, to the right of the primary. Their “Tip of the Day” window always opens on the wrong monitor. Some of their dropdowns also open on the wrong monitor (at the far right; looks like they’re trying to clamp coordinates to the primary monitor bounds).
  • What the heck is up with their parameter tooltip? Come on, guys, Visual Studio already has one of those! Yours sits right on top of it! And shows less information than theirs does!

Major gripe:

In the real world, it blows up. Badly. I opened a real-life solution, nothing fancy, and ReSharper threw 37 exceptions, right in a row, just trying to load and parse. I know there are 37 exceptions, because I reported them all to their bug tracking system.

I had to register for an account before I could report bugs. How nice.

On the plus side, their exception-reporting scheme is pretty slick. It pops up a dialog showing the error message and a stack trace, and lets you type in what you were doing (“Opening a solution”) and, of course, fill in your username and password (which they then remember and pre-fill for the next exception). At the bottom are “Submit” and “Ignore” buttons. If you submit, they gargle for a few seconds, and then tell you what bug number was assigned, and whether it’s a new issue or they just added your info to an existing bug report.

Of course, if you go to their Web site and search their bug databases, you’ll never find the bug you just reported. Why? Well, because they don’t report them to a bug database, silly. You have to search their forums. Which is where they put the bugs you report. Obviously. (Exactly how they assign the bug numbers, if they don’t put them in a bug database, is a bit of a mystery.)

It’s not a totally bad system, since it lets anyone comment on the bugs after they’re submitted. But why don’t they post a link to that forum on their “Tracker” page? You know, so people who are looking for the bug tracking system can find it? (For that matter, how about putting a link to the forums anywhere on your Web site? I had to look in my browser history just to find the forum again.)


The exceptions are not fatal. VS continues to load the project, and eventually (74 clicks and 37 bug reports later) the editor window comes up. But all the namespace imports are in alternating gray and red, and stuff is randomly red-wavy-underlined. You can tell it doesn’t deal well with an incomplete parse. I didn’t spend a lot of time looking at it. I just removed the ReSharper add-in.

Sigh. Promising tool, but boy. I may look at it again when v1.02 or 1.1 comes out, but as of 1.01, it ain’t ready for prime time.

Update: The day after I posted this, I got an e-mail from one of the ReSharper developers. I’ve posted about the follow-up.

In the “wacky installer prompts” arena…

My Visual Studio install has some strange problems. The csUnit Visual Studio plug-in hasn’t worked on my PC for months. And I just tried to install ReSharper, which did not go well, but which did at least provide me with some enlightening error messages; I may now know why the csUnit plug-in wasn’t working. Apparently, somehow, EnvDTE.dll was not in my GAC. Neither was Extensibility.dll. ReSharper wanted both of those, and since they weren’t in the GAC, it couldn’t find them. They were both in the GAC on Sam’s machine, so evidently something went fuzzy on my box at some point.

I tried adding them both to the GAC manually, which got ReSharper’s installer to run without errors. But the ReSharper plug-in still won’t start when I open Visual Studio, and its error dialog recommends that I repair my VS installation. Since that sounds like a better idea than trying to randomly register assemblies that maybe should and maybe shouldn’t actually be in the GAC, I went ahead and did so; maybe the csUnit plug-in will start working again. (I miss that “Build and Run Tests” menu item, darn it!)

So after grinding away for about ten minutes, the repair operation gave me this warning:

Geez. This is just too funny. Exactly which DLLs are in use by Task Manager that are causing problems for the installer for Visual Studio .NET?

Bob the Overlord’s Blog

I just wandered over to the Writer’s BBS and checked out their current challenges. The one in their Science Fiction forum is called “Villain’s Confessional“. I’ll copy the description here, since posts roll off the BBS after a couple of months, whereas my blog is forever:

This challenge is all about what the bad guy’s up to. It’s fairly standard procedure in a movie to have the villain reveal his plans to the hero, usually when the hero’s in a soon-to-be-fatal predicament.

This challenge is related to that concept. I want you to show what your villain’s plans are: what he hopes to accomplish, how he intends to reach his nefarious goal. Show me his thought processes, his actions, the reactions of his henchmen.

The format is wide open. Diary? Sure. Gloating as the hero awaits his doom? Great. Catholic confessional, as the priest sits and listens with growing horror? Oh yeah, baby.

Word limit shall be 2,000 words. Open now, closed to entries on July 29th, voting to follow.

Here’s my entry.

Bob the Overlord’s Blog
In this for myself since 2004

Tuesday, November 2, 2004

Ah, dawn.

The sun is rising gently over the land. Election volunteers are heading to the polling places.

And so is my army of genetically-enhanced animals. Kangaroos, opossums, wombats, Tasmanian devils. Poised to strike.

All shall fear the rage of the marsupials.

Soon, my army will descend upon the polling places, blocking anyone but me from coming or going, and most especially, from voting. By this evening, my vote will be the only one cast in the entire United States of America. And I shall be President!

Mwa ha ha ha ha.

My plan is perfect. Except for that minor bit about Joe Hero getting hold of the hypnotic animal-training machine, but that’s a moot issue now. After all, the machine needs power to run. It’s not much use to him when he’s trapped in his home, with the power lines cut, and guarded by three hundred of my elite wallaby troops.

He can’t even call the power company, because my troops cut his phone line too. And his cable modem, just for good measure. And stepped on his cell phone. And dropped his PDA out the window.

Everything is perfect. Everything is in place. Soon, the world will be mine.

Mwa ha ha ha ha.

Ha ha.

Posted at 6:27 am

  1. Laptops don’t need wall power.
  2. You forgot about my neighbors’ wireless Internet.
  3. Aren’t you forgetting about absentee ballots?

Comment posted by JoeHero on 11/2/2004 at 6:39 am

Aw, shit.

Comment posted by BobTheOverlord on 11/2/2004 at 6:43 am

Paint exceptions and error dialogs

In Delphi, every window message handler is automatically wrapped in a try..except. Exceptions are always handled, by showing the error text in a dialog box and letting the program continue execution (though you can globally override that behavior, or, obviously, add your own try..except if you need it). This global handler is good, except for paint exceptions. If your paint code raises an exception, you’re screwed, because the error dialog (usually, at least) pops up right on top of the control. When you close the error dialog, the control gets invalidated, it gets another paint message, and… boom, you immediately get another error dialog. Close that one, another immediately pops up. So there’s no way to close the application, other than killing it from the debugger or from Task Manager.

WinForms improves this a bit, by not catching paint exceptions. Any exception during painting will automatically terminate your program. Extremely crude, but effective enough; it’s actually a step forward from the infinite-dialog scenario. But WinForms doesn’t catch exceptions anywhere else, either — and that’s downright brain-damaged. If I click a button, and that button’s Click event handler does something that throws an InvalidOperationException, then my entire application exits. Say what??

In Delphi, we don’t have to think about exception handling; it just works (except in paint code, which doesn’t cause problems very often). In WinForms, we always have to think about exception handling. Much more work for us, for very little gain. Not a good thing.

So, in our app at work, we’ve been adding try..catch handlers in all (we hope) of the UI code. Including, as it turns out, the paint code, which was a bad idea on our part. Infinite dialogs this morning. Whee.

But I found a nice tidy way to exit the program, without summarily killing it. The whole problem is when closing the dialog forces the control to repaint. If closing the dialog doesn’t force the control to repaint, then all is well. So you just need to open Task Manager, set it to stay on top, and size it so that it completely covers the problem control (but not the parent window’s Close button). Then you can switch the focus back to the app, and keep hitting Enter to dismiss the dialogs. The control is covered by Task Manager, so it never gets another Paint event, so it doesn’t throw any more exceptions. Once all the error dialogs are gone, you can close the window without hassle.

(And no, we don’t have an exception handler on our WinForms paint code anymore. What we do have is a comment saying “DON’T CATCH EXCEPTIONS IN HERE!”.)

Water, anyone?

Water is a good thing. I mean, life as we know it wouldn’t exist without water.

Still, there are limits. I really don’t think there should be water on my basement floor. That just seems to be stretching it a little.

We got a fairly torrential bout of rain around 5:00 am. It’s only an hour later, and roads are closing already, if that gives you any idea. Jennie called me from the road to say there were four cars that were not only stranded, but actually floating, in the middle of L street. Police were turning people back and everything. You read it here first.

Anyway. So when Jennie came downstairs to go to work, she noticed that water was blowing in around the bottom of the outside door. (Which is in sad shape and needs replacing anyway, but now the need — whether for a new door, or just new weather stripping or something — is a bit more pressing.) And then, a few minutes later, she noticed water dripping from a pipe in the basement which, I’m guessing, is the chimney. A few minutes after that, I found that not only had water been blowing in under the door, it was also dripping from the ceiling just inside the door.


It’s stopped blowing in, at least. And both pools of water were in relatively non-carpeted parts of the basement. There’s concrete just inside the door, and vinyl flooring back by the furnace and water heater. But both were within a couple feet of carpet. I dried off the bits of carpet that did get wet, and am now running the washing machine (with no soap — we ran out last night, and we have more but it’s at the apartment) so I can re-use those towels should the need arise. And we’re very lucky to have several buckets handy to catch the drips.


I wonder if we’ll have any mystery water in the garage. Probably not; we only seem to get that when it isn’t raining.