Wednesday, August 02, 2006

Credit card frauded

Crud! I got a call from MBNA to verify some "suspicious activity" on my credit card, and sure enough someone managed to get to their online banking site, use my account number to log in, change my address to somewhere in Maryland, and buy an $11,000 dollar computer from Dell.

Luckily Dell was on the ball and asked MBNA to verify the purchase, so the account will be closed immediately. Still, I wonder how they came up with the number? A little scary; but changing that account number is something I should have done years ago, as I use it for way too much stuff. (Which is exactly why I haven't changed it.)

When I called MBNA they asked for my mother's maiden name as verification. I bet that's easy to find - wonder if the online banking site used that same security?

Hopefully changing the account number is the end of it. Then I need to start splitting up my accounts: one credit card for online purchases, one for monthly charges, one for gas, etc. Be careful out there!

Monday, July 31, 2006

Death of NDOC

I caught the news first from Bill Wagner's blog that NDoc 2.0, the documentation tool for .Net developers, was losing its main developer and motivating force, Kevin Downs. (And incidentally, I never saw anything useful on either Digg or Technorati about it. Simple Google is still the best place to look.) Here's what Kevin had to say in an email that was quoted in dozens of blogs:

As some of you are aware, there are some in the community who believe that a .Net 2.0 compatible release was theirs by-right and that I should be moving faster – despite the fact that I am but one man working in his spare time...

This came to head in the last week; I have been subjected to an automated mail-bomb attack on both my public mail addresses and the ndoc2 mailing list address. These mails have been extremely offensive and resulted in my ISP temporarily suspending my account because of the traffic volume.

The standard line of bloggers has been, more or less: What a shame, what a loss to the community, why aren't these mailbombers contributing, that's what happens to open source projects.

It certainly is a big loss. But to be honest, I don't see it as a huge deal. Bill sees it as a problem with the whole open source software model, which I disagree with - I think the Asterisk project is one counterexample. The email, to me, has a bit of a defensive tone, like the writer's lost all his enthusiasm for the project and is looking for an excuse to get out of it. (I've sure been in that position, and it's got nothing to do with open source!) Is NDoc really that heavily used? Doxygen has the advantage of working with more languages, so it's my preferred tool, but I would think if there are that many people interested in using it, surely someone can step up as a new administrator, even if the project languishes for a while. And a mailbomb attack? Do those really still work? I would have thought any administrator would have been able to block some IP's and stop it. I guess it was the product of someone's bot army; but that brings up another point: anyone can launch a mailbomb or DOS attack. You can make one person mad online, even for a perceived rather than an actual insult, and the attack can come. If you're a small organization, you just have to weather the storm and move on.

I'm not saying Mr. Downs made the wrong decision; far from it. It's his life and his work and we should be grateful for whatever he is willing to donate to the community. But let's accept it and move on without getting huffy about it.

Oh, and maybe I better see if Doxygen could use any extra coders...

Customer Affinity and UI design

Martin Fowler discusses the importance of being attuned to the business side of software development. I especially liked this quote:

I've often heard it said that enterprise software is boring, just shuffling data around, that people of talent will do "real" software that requires fancy algorithms, hardware hacks, or plenty of math. I feel that this usually happens due to a lack of customer affinity.

I've heard this too, in spirit at least. and one of the reasons is that those people of talent don't believe that UI design is "real" software. Of course, the place you have the most opportunity to affect how the customers work and whether they enjoy your software is in the user interface. In the last few years, UI design has started to gain a little more respect in the community, but the fact remains that it is one of the areas of software design that really remains an art, rather than a science. What are your favorite sites for discussing UI design?

Tuesday, July 18, 2006

Finding holes in the process

Ever done a process review? It's one of those things that gets done, formally or informally, when a software company is trying to grow from small to large. In my experience, the most likely way it happens is, a manager or two or three get together and decide on some tool that they like, or have used before, and that they think would be useful for source control, or bug tracking, or building, and then they pass the edict down to the programmers: "Okay guys, from now on we use OnTime for all bug reports." The programmers nod politely and get on with the business at hand, and may even enter a few things into OnTime if they remember.

Ina few months, the managers realize that nobody's paying much attention to OnTime, and they go and bug the programmers. "Hey guys, let's use this bug tracker, ok? We paid a lot of money for it." The programmers start entering a few more things into OnTime, if they remember, but they grumble about it. Why waste time on this busywork, they think? The programmers aren't happy, the managers aren't happy, and communication is breaking down badly.

How do you avoid this? Don't just nod politely when the tool is introduced; attack it. Of course, if it's a tool you've not used before, you won't be able to see what any weaknesses are. But try to understand the workflow. Bug the manager until he makes it clear for you. He'll probably end up saying something like "Each bug goes from Entered to Accepted to Fixed to Tested to Released".

That's a pretty standard workflow. But now you can start to poke holes in it. Has anyone thought through the failure steps?

"Okay, so what if it's a bogus bug? I'm not going to accept it then."

"Hmm, that's true. Maybe we should add a Rejected state."

"Sounds good. What if Testing fails?"

"Umm, the test group should just set it back to Entered, and it can cycle through again."

"Okay, but what if that happens the week before the release? Do we need to put off the release until the bug gets fixed? Or can we hold off on it until the next release?"


Processes tend to break down around the failure points. If every bug took the path Find/Fix/Test/Release, software development would be very simple, and the workflow would be completely linear. But on every step of the line, it needs to be clear what will happen on a failure. Does it go back to previous step? Farther? Can we ignore it? A clear workflow with known failure paths will go a long way towards making any software project smoother.

Thursday, July 13, 2006

Build part 3

Looks like the build is finally up and running, and we've completed a few builds that testing seems to approve of. I finally moved the virtual machine over to a machine with a decent amount of power behind it and that got things to pick up a little; but certainly we were far from the James Shore ideal of being able to download and build least not after I implemented my idea of moving source code to a different drive so the C drive could be more easily restored if needed. It took quite a bit of time to finally dig out all the references to c:\Prosolv\build and replace them with environment variables!

But our mishmash of Ruby scripts is going again. We have our summer intern working on a new build process: he's evaluated various tools and chosen one called Visual Build, which we'll move to at some point, when he's declared it ready.

My friends Andy and Sushil have both just had babies. Congratulations, you guys!

Thursday, June 29, 2006

Build machine still dragging

(Backstory here.) Came in the next morning; VS2005 is still installing. Curse. The bright side was, as I watched it, it switched from actually installing VS2005 to installing one of the CE framework packages that I really didn't care about. So, I spent some time unsuccessfully trying to get it to cancel out at that point, and eventually was able to get the machine to start shutdown, which allowed me to kill the VS install. How will that affect the machine, I'm not sure. So, around 9AM the machine started shutdown - then, the automatic updates kicked in. Thirty of them. Curse. So here it is, about three hours later, and just about half the updates are complete.

This is not a good circumstance when trying to get a release out.

Wednesday, June 28, 2006

The perils of slow build machines

We had a hard drive die on our build machine. Not to worry; as we learned from the rubber chicken source code should be buildable and shippable anywhere, anytime. But then, I don't have a great deal of trust in that ideal concept, so we decided to take advantage of the situation to create a virtual build machine instead of a real one. Here are roughly the steps I followed:

Install Virtual PC
Grab an existing hard drive image with Windows XP SP2 and copy it.
Install a couple of things on it; then attempt to install Visual Studio 2005.
It blows up with an error. Huh?
Try it again, same error.
Realize that the image is limited to 4 gigs, and VPC doesn't allow modifying the existing size of a virtual disk, as far as I can tell.
Create a brand new image, and install XP SP2 on it. This process takes plenty of rebooting, and "Press Enter to continue" style dialogs; not to mention several hours just to copy all the files.
Install Visual Studio 6; hopefully it will be quicker and we'll need it for some legacy stuff anyway. Many more reboots, but eventually it's installed.
My boss comes by and asks how much longer it will be until the next build.
Attempt to install VS2005 again. Many more reboots.
My boss comes by again and tells me he's arranged for a much faster machine with more memory. Cheer.
It's around 5:00 that day, so I decide to leave the VS2005 install running overnight, then I can transfer the virtual machine to the new machine in the morning.
Come back the next morning. VS2005 is still installing.
It looks like it's nearly done, though. Hopefully it's within an hour or two of finishing and I can move it over to the faster machine.
Wait eight hours. VS2005 is still installing.

I'll leave soon. Hopefully VS2005 won't take 48 hours to install, and I'll be able to get back to it in the morning. We're now at eight days without a new build. Curse.

Monday, June 26, 2006

Death of Agile

Jonathan Kohl writes on the value of pragmatism, as opposed to process zealotry, and asks what we think. Jonathan, I think you should enable comments on your blog :) But I'll do a quick post here instead. I'm not sure whether I agree or disagree. Absolutely you should use whatever works for your project; I have no issue with that. But I have a lot of trouble imagining a project where I would say, "In this situation, writing unit tests would be a very bad idea" or "It's clear that we should not have a daily build for this project. One a month, absolute max."

In other words, the point of agile processes are that they are good processes. You use them because they are unquestionably an advantage to your project. Maybe I'm a zealot. Is there an argument to be made against unit tests? To me, the whole zealotry issue comes across like saying, "Sure, I really like transistors, but hey, if vacuum tubes are what your stereo requires, you go right ahead and use them!"

Friday, May 12, 2006

Internship available

If you are a student in a computer-related field at an Indiana college and looking for a summer internship, drop me a line with a resume and I'll see that it gets to the right place. Prosolv is a medical software company in Indianapolis.

Wednesday, April 05, 2006

Podcast list

With basketball season finally over, I plan on updating this blog more often. I have a couple of series ideas in mind: first, I'm looking into presentation systems for 3D medical graphics; ultrasounds, for example, and I'm very interested in the Visual Toolkit (VTK). I've not been successful in importing any of our own sample DICOM sets yet, though, so I need to poke around and try to find some online that will work.

Second, I want to do a podcast review of the nine or ten podcasts I listen to regularly. I have a long commute, and I typically go to the gym over lunch, so I have a good three hours to listen to podcasts per day if I want.

I use Juice as my podcatcher, and an iRiver attached to the auxiliary input to the sound system in my car to listen to the podcasts. Here's an OPML of my subscriptions. In no particular order, they include:
HanselMinutes Mp3 Direct
QA Podcast
Polymorphic Podcast
Chris Pirillo Show
Software As She's Developed
Security Now!
Major Nelson
Channel 9
this WEEK in TECH
Congressman John Hostettler -- Capitol Update

Thursday, March 16, 2006

Friday, March 10, 2006

Team Foundation Server

So Dave Bost gave a presentation on Team Server last night. It was pretty interesting; it was the first time I had really seen a Team System presentation that didn't focus on the different clients. He made it clear that he didn't want to discuss licensing, so I didn't ask the question that really was blazing through my head: why the heck do I and the thirty people in my company give a rip? Team System is for big people.

Anyway, Dave is the new developer evangelist for Indiana. It used to be Chris Mayo, but I guess he's moved on the other things. Dave, are you going to the Continuous Integration conference? Maybe I'll see you there!

There was also a semi-organizational meeting for a C# special interest group. I think that might be interesting, and we'll probably pull out the computers for the next one. A guy from the Advanced Visualization Lab was there too; their work might be relevant to some of the new 3D ultrasound machines that we're examining at Prosolv. Should be very interesting!

Wednesday, March 08, 2006

Volume texture DDS files

I had reason to try to create a Direct3D volume texture this week. This article gave instructions on how to do it, but I think it must have been out of date, because running the code they gave did not result in a DDS file that was loadable by the texture viewer. (I messed around with modifying the article, but then I had to register on the site, and blah blah blah) So I studied the header that was generated by the texture viewer, and eventually wrote this code:

#include <ddraw.h>
#include <fstream>
#include <D3d8types.h>

int main( int argc, char * argv[] ) {
if( !argv[1] || !strstr( argv[1], ".dds" ) ) {
fprintf( stderr, "Usage: noise\n" );
return 1;

memset( &desc, 0, sizeof(desc) );
desc.dwFlags = 0x00801007;
desc.dwSize = 124;

desc.dwDepth = 64;
desc.dwWidth = 128;
desc.dwHeight = 128;
desc.dwBackBufferCount = 64;
desc.ddsCaps.dwCaps = 0x00001002;
desc.ddsCaps.dwCaps2 = 0x00200000;
desc.dwFVF = 32;
desc.ddpfPixelFormat.dwSize = 0x20;
desc.ddpfPixelFormat.dwFlags = 0x41;
desc.ddpfPixelFormat.dwRGBBitCount = 0x20;

desc.ddpfPixelFormat.dwLuminanceBitCount = 0x20;
desc.ddpfPixelFormat.dwBumpBitCount = 0x20;
dwPrivateFormatBitCount = 0x20;

desc.ddpfPixelFormat.dwRBitMask = 0x00ff0000;
desc.ddpfPixelFormat.dwGBitMask = 0x0000ff00;
desc.ddpfPixelFormat.dwBBitMask = 0x000000ff;
dwRGBAlphaBitMask = 0xff000000;

unsigned int cnt =
unsigned char * buf = new unsigned char[ cnt ];
while( cnt-- ) {
buf[cnt] = rand()>>7;

std::ofstream ofst( argv[1] );
ofst << "DDS ";
ofst.write( (const char *)&desc, 124 );
ofst.write( (const char *)buf,
desc.dwWidth*desc.dwHeight*desc.dwDepth*4 );

return 0;

To be a really useful sample, I need to replace the flag values with constants...I need to figure out what they are, first, though!

Tuesday, February 28, 2006

Honestly Subjective Performance Reviews

(Thanks Lasse.) Corporate performance reviews are for the most part a waste of time. At my last job, I worked with the same set of peers for around four years, and we did peer reviews on their anniversaries. The first year, I tried to provide constructive feedback on how I thought people were doing, what they could do better, etc. The second, third, and fourth years, I had no idea what to write. Reiterate what I wrote the year before? Try to comment on what they were doing better than they did last year? I didn't have a clue. Once (with a really cool boss) I wrote my evaluation as a limerick.

This article discusses what's wrong with reviews, and how they can be better. First of all, just bail on the idea that reviews can ever be objective, any more than journalists can. Then focus on the future, not the past. It's a very agile idea. I'm excited about the future of work. I think corporations of the 21st century can work so much better. But how many companies are willing to give it a shot?

Saturday, February 18, 2006

Coding Standards and Reviews

At the IQAA on Thursday, there was a good presentation on coding standards and reviews. I've always had a strong sense that code reviews were important, but I've never actually been to a code review that was worth the time it took. My current job has a standard requirement that all code should be reviewed, though, so I've sort of been casting about for a good style of review. Ed Gibbs has thoughts on the subject; so does Macadamian. But I definitely thought that as far as my company was concerned, Robert Bogue's talk got to the heart of what a code review should be. Not that we'll actually change our process, of course, but at least I'll have some talking points when the subject comes up :) (I'm a touch underutilized in my company, I feel. I have to persuade rather than insist. Maybe after another year or two.)

So here is what I took away as the most salient points:

  1. Code reviews should not be painful. Bring cookies; have balloons.
  2. Code reviews should have a point. Don't just bring everyone in and show them the code. Then they all say, "um, sure, looks good." Have points of emphasis; exception handling, say, or readability.
  3. It's OK for junior developers to comment on senior developer's code. I'm still groping on this one; not that I ever thought that they shouldn't, but the question is more, how do you get them to do it? I've known developers that come to code reviews, sign all the forms, but then don't ever say a word about the code. I brought the question up at the time but didn't state the issue as clearly as I would have liked.
  4. Code reviews and code standards are related. This one had never occurred to me before, even after, at my last job, I wrote a short article called, "How to get your code past a review". Now I realize that that document was actually a coding standard. I think we've got a coding standard around somewhere at this company, but I'm not sure where it is. I'll probably resurrect it at some point.

So it was definitely a learning experience for me, and hopefully a springboard to learn more about the subject. Mr. Bogue has a blog as well, subscribed!

Tuesday, February 14, 2006

Yahoo! Patterns

Wow, this is a handy little pattern library. (Thanks to Grady Booch.) I'm spending more and more time with Yahoo these days, for stock updates, Yahoo! Answers, Flickr, and other things. A good sign for them, I guess.

Monday, February 13, 2006

The irrelevant Joel Spolsky

For a guy who has written so much good stuff on software development, I think Joel is falling behind the times. His latest post talks about not being able to find an online calendar that he likes, which is fine - I don't think anyone has, yet - but then he uses that as a springboard to decry the new software technique that he refers to as, "Ship early and often".

I did a web search for that phrase to find an alternate viewpoint, and Joel is already in the top three sites for it; he's quite an influencer. But he seems to have a lot of disagreements with the techniques of agile programming, which includes this technique, there referred to as "Frequent Releases". Joel - and the article I linked - claim that releasing half-baked software isn't a good idea; true enough in itself, but I'm guessing that the calendars he checked out weren't buggy, bugs are bad things and no one wants to use buggy software, but that they simply didn't have all the features he was looking for. Releasing a calendar that has actual business value isn't releasing half-baked software; it's getting something out there that people can use, evaluate, give feedback on. It's a starting point for a conversation with the users. Look at Flickr; the most popular photo-sharing site on the planet started its life as a game tool, and evolved into its current incarnation by listening to the users and giving them what they want. That's how you create software.

"But", Joel says, "I'm not going to look at 30 Boxes again -- I've spent enough time evaluating it." He won't be back to see next week's version, or even next year's. (I wonder what calendar program he'll be using in the meantime?) I suspect he says this as a recognized authority on good software, in the belief that if he doesn't like it, it's probably not much good. That's probably true, too, but, there are one heck of a lot of other folks out there. They have blogs. They write about stuff they don't like too, and they also write about stuff they do like, if not nearly as often. I didn't look at any of these Ajax calendars at all, myself. But eventually, I suspect, one will turn out to rock the world, and at that point it will be all over Technorati, Icerocket, Memeorandum, Tailrank. At that point I won't care about Joel's opinion of them today. Joel probably won't either. When one of them wins out, he'll know by word of mouth, as we all will. Two or three of the others will have fallen apart by then, spending too much time writing features that no one wants, not getting anything released out on their website, not getting any buzz. And that is why, if you're writing software today, you should release early, and you should release often.

Friday, February 10, 2006

Generics at user meeting

I went to the Indianapolis .Net User Group meeting last night. They advertised Generics as the topic, and since I really didn't know anything about them, I was looking forward to it.

It turned out to be more interesting as a group dynamic than as a presentation. As a presentation, what I gleaned was that, from a user's perspective, generics are precisely identical to C++ templates. You declare a variable of a type that takes generics, and drop the specific type after the type name, in brackets: ArrayList foo = new ArrayList. Or you declare your own class and declare a after it to create your own generic.

From an implementer's standpoint, they're pretty darn different from C++ templates, as you might expect. And working out exactly what those differences might be engendered more discussion from the group than any topic I've yet seen. People were interested in how they were implemented, whether they would really avoid boxing, whether it was done at run time or compile time. There appeared to be two or three people who really knew their stuff, too - they were discussing what the IL that was generated looked like and that sort of thing. By the 45 minute mark, I was pretty sure that I was in for a two-hour or more night.

But amazingly, the entire presentation couldn't have been more than 35 minutes. Add in 25 minutes of discussion and the whole thing would have been over with before seven with plenty of time to draw door prizes and be out of there by 7:30.

But I don't know if that's what happened or not. The Q&A period was still going strong at 7:05 and I decided to bail. I hope my ticket didn't win a new car or something :)

Wednesday, February 08, 2006


I wrote a while ago about how ISO can actually be used as a positive thing for a company, which I suppose most developers at the grunt level would disagree with. It's true though: you just have to use it to describe your processes, rather than prescribe them.

There is a basic dichotomy, however: The company management may not have the least interest in improving the processes. They just want the pretty sticker for the front door that says, "Yes indeed! We're ISO approved! You can do business with us!" After that, they may not give a fig whether or not the processes are actually being followed, except to the extent that they won't get into legal trouble. This is why so many developers hate ISO. For ten months out of the year, they're told to bypass, sneak around, don't bother with the process, we have to get those customers happy. Or if they follow a process, they may get penalized for it. "What do you mean it'll take you two months to do that? We can't put that on the form! Put down three weeks!" Then, of course, when it does take two months, everyone has to work overtime since the project is so far behind schedule.

For the other two months of the year, they're told, "OK, here's the process. You have to have it memorized. If an auditor comes by, make sure you have the document in front of you. Just read it to the auditor. Don't make trouble. Don't volunteer anything. We just want our little sticker; we don't care about the process."

It's a shame. There's real value in ISO. I wonder if there are any companies that can find it?

Tuesday, January 31, 2006

A good Informatics web site

When I complain about something, I do like to follow up if the problem is addressed, or corrected, or even vaguely not quite as bad as I thought. I wrote here about the IU School of Informatics web site and how I was pretty unimpressed with it, for what should really be a school on the cutting edge. Well, even if you can't find it from the main page, bubbling up from the bottom are some good sites. This one on a talk series about complex systems is very nice - it has the expected abstracts, speakers, times & dates, and things; but also includes links to the slide decks and podcasts of the existing talks! Now that's what I'm talking about! It's not perfect, of course - I'd like to have forums or comment sections for each individual talk, as well as an RSS feed so I can grab the talks with a podcatcher - but it's one heck of a lot more interesting than the Informatics main page. Well done, Katy Börner, and thanks to Justin Donaldson for the link.

Friday, December 23, 2005

Software testing job opportunities

Are you a software tester? Come to Indianapolis and join ProSolv, which will be adding 50 new jobs next year, and immediately adding a quality manager and a software tester. Visit the job descriptions on Monster, or just send me a note and I'll see your resume gets to the right place!

Icerocket tags

Wednesday, December 21, 2005

Responses from the Senators

I posted here about writing a letter to the Indiana senators, Richard Lugar and Evan Bayh, about the Coburn anti-pork amendments. Finally this week I heard back from both of them. Senator Lugar sent a form letter, although it was right on topic, and asserted that the "Bridge to Nowhere" was not getting any money, although I haven't verified that yet. A staffer of Senator Bayh's wrote me, though, just saying he received my inquiry and wanted me to call him. Huh! I'll have to do that and see what he has to say.

Tuesday, December 20, 2005

Major victory for science

Judge John Jones determined in the Dover, PA court case that Intelligent Design should not be taught as a reasonable scientific alternative to evolution. Well done! But the judge went beyond that, finding that ID is not good science, that the yahoos who brought the case were wasting everyone's time, and all in all wrote a decision that I completely agree with in every way. Can we just project him straight to the Supreme Court? Timothy Sandefur posts a succinct summary of the decision over at the Panda's Thumb. Congratulations to all involved!

Tuesday, December 13, 2005


Things I have been doing while not blogging:
  • Sudoku. The local paper finally started putting one in, starting with an easy one on Mondays and getting harder each day until Saturday. I got about half of them the first week. I need to go over this paper in more detail though. I figure another week or two until I get bored :)
  • Jigsaw. Got a new jigsaw puzzle (1000 pieces ) and my four-year-old and I started to work on it. Haven't looked at it since the Sudoku though!
  • LibraryThing. A fun site that lets you catalog and tag books. You're only allowed 100 200 free entries, but the $25 lifetime fee is pretty enticing. I can just see it becoming so popular that even the lifers have to pay extra for new features, though.
  • Yahoo Answers. An evil combination of points, social software, trivia and opinion that I can't resist coming back to several times a day to check on the new questions. Haven't gotten any hugely new useful information out of it, but I bet I get to level 2 soon.
  • Ars Indiana. Don't know if this will go anywhere, but it's my new blog where I intend to put all my cultural-type posts. Put one up on the B.B. King concert last week.

Update: It's 200 books, not 100. Sorry, Tim!

Thursday, December 08, 2005

Way To Go Indiana!

Thanks to the Panda's Thumb for referencing the Fordham State of Science report. In it, Indiana receives an A and an overall rating of 91%, fifth in the nation. That is an amazing achievement, especially considering how close the forces of darkness are. Nice job, Hoosiers!

Bloomington as energy pill

Wocka wocka wocka. Looks like Bloomington is about to be eaten by Pac-Man.

Tuesday, November 22, 2005

No images allowed in the app_data folder

I had my first opportunity today to try to create a web site with Visual Studio 2005. I made it about two steps before running into a brick wall. The concept of Master Pages seems like a really cool one, but I'm not sure how to make it work together with CSS and maybe two or three user controls. So I tried to set up a master page; no problem; tried to associate default.aspx with it; problem. The property is grayed out. A little research told me that the field could be filled in through code in the @page declaration, so I tried adding that with trepidation. I was pretty sure that the field was grayed out for a reason, and sure enough, that didn't get me what I was looking for.

I quickly found out that "Content" pages are the only kind of page that can be associated with master pages, but all the intuitions I've built up about finding things don't apply to 2005. For example, I tried to "Add New Item" to the solution, expecting to find "Content Page" as an option. No dice. I tried looking through the toolbox for something I could drag onto the page to make it a content page; nothing. So I did quite a bit of additional research and poking around on the web, and in Dev Studio, and in the Dev Studio help. But it took me quite a long time to actually find the solution, which I did by trial-and-error: right-click in the content placeholder in the master page and choose "Add Content Page". I'm sure I could have found help on this...somewhere.

This was directly followed by problem #2; I simply tried to add an image to my page. Copy-and-pasting from VS 2003 on my system failed, to my mild surprise, but then I noticed this nice "App_Data" folder in the project, and it was clear that any images or sounds needed to go here. Right-click on it, add new item, and drag the picture to my page, no problem!

Except that when I hit F5, no image is to be seen. Back to the web. This time, there's a fundamental problem: I can't figure out any terms to search for that describe my problem with any hope of clustering to the right solution. I tried "visual studio app_data image doesn't show up", " image failing", "Visual Studio 2005 images", "visual studio 2005 add jpg to web page", but all these terms give me much too generic results back. If the solution to my problem was in one of those result sets, it must have been on page 37 at least.

Finally, I went to the Microsoft forums, and specifically to . Here, a search for app_data turned up dozens of results, and I tried to narrow it down by searching for "app_data debugging", which was what I was trying to do. Bingo! By sheer luck it turned out that the problem involves permissions and running inside the debugger, but the fact of the matter is that the app_data folder is not supposed to hold images at all, only databases.

I added a separate folder for the images and everything worked fine. Whew. What adventures await me in Visual Studio tomorrow?

Icerocket tags

Thursday, November 17, 2005

Indianapolis Workshop on Software Testing

This looks like an interesting, if tiny, local software testing group. I found it through this post, from Mike Kelly, who appears to be the ringleader, with an impressive list of publications on his site. Mike, how about blogging more than once a month though, huh?

They say the best way to get an invite to their meeting is to submit a paper. I think I'd like to sit in on just one or two first though; maybe I'll try to finagle an invite from somebody. I joined this group anyway, which was free. Don't suppose I'll ever hear from them though.

Edit: fixed link

Monday, November 14, 2005

Customer Service: Compare and Contrast

Way back when I posted about sending a note to the Bloomington newspaper about adding an RSS feed to their website. I did that again this week, at the site, which has a regular column called Critical Path, tips for software managers. Got almost an identical response, actually, with a quick response from an editor saying they were considering it, followed a few hours later with a link, and now I'm subscribed to it in my feedreader. Very nice; great customer service.

Now a month or so ago, I sent not the exact same question, but a similar question to the Indiana University School of Informatics, where I think I might be an alumni. (I was for a while, and then I wasn't again, but now I hear that the IU Computer Science department has been assimilated, and so I must be again. Unless I'm not. Anyway.) The school has an RSS feed, which is good, but the unfortunate bit is that the feed is just old-school marketing, PR stuff. IU Research in Spotlight at Seattle Supercomputing Conference. Now, by no means do I object to reading that stuff; a lot of it is important and interesting. But if this is a cutting-edge school, I want a cutting-edge web page. I want to read student and professor blogs, with comments, utilizing new technology to block spam. I want to see wikis, and web pages with Ajax components. I want podcasts of lectures and symposiums. I don't want a bunch of static web pages that no one is ever going to look at, except for the one time a month they need to look up an email address.

So, on their comment page, I wrote up my request.

No response. At all. My comment was ignored completely.

So what's the deal here? Does the industry just change too fast for universities to keep up with? Is it a problem specific to Indiana University? Or is it just that they're not a business and therefore have no interest in responding to customer requests?

I don't know. I'd like to know.

Icerocket tags

Saturday, November 12, 2005

Midsummer Night's Dream at IU Opera Theater

I went and read the Peter Jacobi article in the Herald-Times before writing this. He's got something of a reputation for sticking to positive items in his reviews, and if that's true, this opera must have been deeply troubled, since he presents a series of negative comments from the director, even if you have to read between the lines a little to get them. "Lack of stagecraft", "Not enough rehearsal time", "Children may need to be miked", were some of his comments.

All that said, I thought the opera was stunning. Now, when I write reviews, I write them not just of the production, but of the opera. I can't compare this production to the debut at the Aldeburgh Festival in 1960, or even the one at the London Coliseum in 1994. So I wasn't sure if the role of Oberon was always played by a countertenor or if that was just someone's cool idea (it always is) or if Puck is always a ballet dancer who shouts his lines (he shouts, but isn't necessarily a dancer).

And I wasn't blown away by Oberon at first. It took me a while to get used to the rhythm of his lines, but once I did, I thought it fit in perfectly with the beautiful mystic green in the abstract sets and lighting. The fairy costumes were done in modern punk, which was bright and colorful enough to work perfectly with the sets, and the four lovers were dressed in street clothes. Lysander came out in a T-shirt with the name of a fraternity on it, which got a big laugh when Oberon instructed Puck to "Look for a mortal in Athenian dress." (Athenian, fraternities, Greeks, get it?).

Some of the children did have to be miked; of the four majors, I think it was two and two, but that didn't matter. As far as stagecraft, it's certainly been a long-held belief of mine that singers can't act, which has been true here at IU at least. So the fight scene was drab at best. The rude mechanicals weren't bad - I suppose you can tell a good actor by how convincingly he can badly act - and Bottom was pretty good, although my "feel" for the character has always been a bit more boorish.

Of course, that's a judgment on the play. And while I'm at it, I could have happily left after Act 2, because I always feel badly for the mechanicals when everyone makes fun of them. But the music, the countertenor, the costumes, the dancer, in the first two acts, all combined together to make this one of the three or four best operas I've seen at IU. Dreamy.

Icerocket tags

Friday, November 11, 2005

Automated testing using Ruby

So here’s the problem statement: Write a Ruby script that will open a database, check it for accuracy, and if it is NOT accurate, send an email describing the issues.

So this will require (a) opening a database in Ruby, (b) running a test in Ruby, and (c) sending an email in Ruby. None of these is probably very difficult, but not being a Ruby expert I went searching for examples on the web. I wasn’t thrilled by the examples I found for these tasks, so I thought I’d write up what I did.

Databases: This is code that will open an Access database and grab all of the rows in the Exam table:

require 'dbi'

DBI.connect("DBI:ODBC:driver=Microsoft Access Driver
(*.mdb);dbq=" +
ENV['TESTINSTALLDIR'] + "db1.mdb ") do dbh

rows =
dbh.select_all('select * from Exam')

Tests: I started by writing my own little test procedures, until I stepped back and looked at what I’d done – I’d developed a rudimentary RUnit, along the lines of NUnit or CPPUnit. At that point I was sure that it had been done before, and it had – and not only that, but it turned out to be part of the Ruby standard library. Although what I’m doing here isn’t really what I would call unit testing, it’s close enough that I decided to use that instead.

require 'test/unit'
require 'test/unit/ui/console/testrunner'

DatabaseTest < Test::Unit::TestCase
def test_dbContents
assert(rows[1]["Media Type"] == "Image Server")

Email: There are some good email sending examples around. I started with this one and ended here:

require 'net/smtp'

class FailCounter

def TextBody()
email_text = <<END_EMAIL
To: "Ben Fulton"
From: #{@from_addr}
Subject: #{@project}
automated test failure

An automated assertion failed for the project



return email_text

def Finalize
if (@counter > 0)

Net::SMTP.start("") do smtp
smtp.sendmail( TextBody(),
@from_addr, @to_addr )
puts "No failures!"

Now, my goal was for the results of the test to be put into the email. That took a long time to figure out. Step 1 of the solution was to realize what the automated test runner was doing under the covers, and take advantage of it. So I replaced the run(DatabaseTest) line with this:

tr = DownloaderTest)
passed = tr.start()
Now I have the results back in a TestResult, which I can examine for failures, so emails only go out if some tests actually failed:

if (passed.failure_count() > 0 passed.error_count() > 0)
fc =
fc.Add( “Failures found” )

Step 2 of the solution is to get the information from the test in a format that I can put in an email. It turns out that can take a parameter defining where output should go, which defaults to STDOUT. I could have redirected it to a file, but that seemed like unnecessary work, so after a lot of searching I came up with what I was looking for, StringIO, which takes output and writes it to a string:

sio =
tr =
DownloaderTest, Test::Unit::UI::VERBOSE, sio )

I also changed the default NORMAL verbosity parameter to VERBOSE. Then I replace the FailCounter “Failures found” line like this:

fc.Add( “Failures found: “ + sio.string )

And that was it. I’m not going to glue all this code together here, since this post is already too long, but hopefully if you’re interested it should be straightforward. Good luck!

Icerocket tags

Wednesday, November 09, 2005

Kansas school board redefines science

Kansas, for shame!

I hereby pledge that I will never move to Kansas, nor allow any member of my family to attend any school in that state.

Icerocket tags

Build/Test machine

I posted here about our plans for updating the ProSolv build process. It's been going pretty well; the hallway machine is up and running, although I had to bring a table from home to set it up on, and now someone wants to buy it from me :)

Builds are scheduled for 6 PM each night, and an automated test script runs all day. Right now we just have a single script that takes about 15 minutes to run. It's powered by Ruby and by AutoHotKey, which works nicely as an automator. I especially like that the scripts are simple text files.

A lot of people don't quite understand what I'm trying to do. They look at the machine and say, "What's the point of running a test that doesn't log any results?" The answer is, that there is a lot of importance to just exercising the UI. If we have a build one day where you click on a study image and the application crashes, this test process will find that.

Nevertheless, as long as this machine is running scripts, there's no reason for it not to log results. I thought for a while that I would have to add code to the application to write out sensible log results, which is not a process to undertake lightly, but it occurred to me recently that the GUI manipulations that the script is doing mostly result in predictable changes to the file system and database. So I spent a little quality time with Ruby's DBI and Test/Unit modules, and wrote up some assertions that will send an email to me at the end of the script if the database isn't in the state I expect. It's only a start, but now I can add more assertions in the middle of the process, or add new assertions as I extend the test scripts. It's coming together very nicely!

I'm thinking also about modifying the machine to alternate test runs with kiosk-style data updates, such as how many files were compiled last night, or how many support calls were handled yesterday. It'll be interesting to see how people respond to that :)

Icerocket tags

Thursday, November 03, 2005

Gadgets and Office alive alive-o

Microsoft previewed its new Windows Live strategy yesterday. My reaction, along with a lot of other people's: It's a portal, and we don't want or need another portal, no matter how skillfully it's put together and how many neat gadgets are available on the site.

That said, here's what really got my attention in the announcement:

Windows Live™ is a set of personal Internet services and software...

So what exactly are we talking about, Internet services? Are we talking web services here? That would be cool. Here's what I want: The ability to add, to my site and not to Microsoft's, a Word document that can be edited by approved people. The document would ideally be stored on my site, but could then be bounced to a Microsoft service for some Ajax magic and editing. Is this the sort of thing that Office Live is going to make available. That would be awesome!

But I've gone searching around the web looking for any evidence that anything on Live is going to be addable to other web sites. Scoble said something - when does Scoble not say something? - but he didn't go into any details other than, "I’m still struggling to understand what I’ll get by putting a new Windows Live service on my blog or business site".

Robert, it depends on which direction it goes. I'd be thrilled to call out to a Windows Live web service as part of a mashup for my site - maybe a Click-To-Talk button using Messenger to dial my phone directly? - but if you're expecting me to make something available that users can only reach through the Live site, forget it.

So for me, the jury is still out until we get more details for developers.

Disclaimer: I own stock in Microsoft.

Icerocket tags

Wednesday, November 02, 2005

Code Reviews

Ed Gibbs says his team is about to institute code reviews. Of course, if you do pair programming regularly code reviews are pointless, since - turning all the knobs up to 11 - all of the code is reviewed all the time. But I've never worked in a shop where pair programming really took off. I'd be curious to hear how prevalent it is.

As I understand it, we at ProSolv are required by FDA regulations - perhaps here? - to do design and code reviews, although, especially for small projects, we often combine them into a single review. Currently I'm not convinced that they add anything to the quality of our software, although, as I've stated before, I think ISO can potentially be a big gain for a company and not just overhead. All the usual difficulties of code reviews apply - what sorts of things are worth bringing up? Is coder A receptive to constructive criticism? Is coder B tearing things down for the sake of doing it? Is coder C reluctant to make a great suggestion for fear of hurting feelings? Should the code be perfect, or just good enough? - and in the final analysis the review is either marked passed or failed.

I'm sure this process can be improved, but I'm not sure how. Maybe design reviews could be accompanied by UML diagrams. Maybe we just need a big slab of coding standards that have to be applied. For example, a review I'm looking at now introduces two new global variables to a C++ application. I think the industry consensus is that global variables are bad, but certainly the code works. Do we need a coding standard that says to avoid global variables? If we did that, how much extra overhead is added to the process?

I'm seriously considering offering a bounty of ten cents a line for any project that can remove lines of code from an application rather than adding them. I bet that would be more effective than fifty code reviews!

Icerocket tags

Tuesday, November 01, 2005


After my post yesterday on SysInternals and listening to the RootKit episode of Security Now, I decided to give RootkitRevealer a whirl on my system. It turned up a slab of hidden registry class ID keys underneath HKLM\SOFTWARE\Classes\CLSID:


I was mildly worried and spent a bit of time tracking down these keys. I think I can say pretty definitely what they're for now; it's Pinnacle Studio 9 hiding their registration keys. Irritatingly, Studio doesn't handle logging in as a non-admin properly, either - every time I start it I have to click the little message that says "Don't show this screen again".

Icerocket tags

Monday, October 31, 2005

Is Sony putting malware on your system?

This is a great article from the awesome Windows gurus at SysInternals. (SysInternals makes some of the best and simplest applications for analyzing exactly what is happening behind the scenes on a computer.) Apparently when you install a copy-protected CD from Sony on your system, it installs an application that utilizes some of the same tricks commonly employed by virus writers. Let's be careful out there.

Saturday, October 29, 2005

Library is Listening

There was a Letter to the Editor in the Herald-Times today, in which a member of the library's Board of Trustees made the claim that they were listening to and satisfying the citizens of Monroe County. While I'm sure that is correct, a quick check of the library web page didn't really reveal anywhere where discussions of the library or responses from the board or administrators were available. So I'm making this web page available, thanks to the fine folks at JotSpot, for anyone to add their comments concerning the library. I'm sure that, since the board is listening, they will be happy to add their responses to any comments you may have!

Friday, October 28, 2005

Attack of the blogs

Chris Pirillo on those crazy, invective-spewing magazine writers. Of course, you see magazine articles all the time on Elvis's two-headed love child and UFO's landing on Martha Stewart's prison cell, so you can't really trust magazine writers.

Anyway, the whole Forbes article response in the blogosphere really strikes me as a tempest in a teapot. Daniel Lyons is free to say what he wants about bloggers, and bloggers are free to respond. It's all good.

But the true evil and danger in the article came in the last paragraph:

Halpern... says that may change if a few politicians get a taste of what he has gone through. "Wait until the next election rolls around and these bloggers start smearing people who are up for reelection,"Halpern says. "Maybe then things will start to happen."

(Uh-oh, I quoted the article. Hope I don't get sued.) Some journalists, though, are trying to make the claim that what they do is protected under the First Amendment, while what bloggers do is not, since they don't have degrees or aren't getting paid or some such nonsense. If Congress even considers restricting free speech rights of bloggers based on fearmongering like the Forbes article, it could have a chilling effect. The beauty of the blogosphere is its take on the adage, "Freedom of the press is restricted to those who have presses." Now, with publishing on the internet cheap or even free, anyone who wants a soap box can have one, and any attempts to legally restrict this must be defeated. (Of course, bloggers are subject to the same libel and slander laws as any journalist.)

So go ahead, Forbes, write your articles on Bigfoot being spotted or whatever it is you magazines do, but don't try to use your political muscle to take away the right of the citizen to speak. It's un-American, it's unconstitutional, and it is unacceptable.

Icerocket tags

Thursday, October 27, 2005

Ben needs

I don't usually do memes, but I liked this one, via Elijah. Google for your name + " needs". Here's mine:

What Ben needs right now more than anything else is for the Boston Red Sox to win the World Series.
Ben needs your help.
Ben needs a ride home.
Ben needs to be noticed, recognised, appreciated, adored and worshiped.
Ben needs to learn to Play Purposefully with Toys.
Ben needs a peak from the nipple.
Ben needs to start doing his own writing and self promotion!
Ben needs to be rescued.

Moving day

I've moved my blog now. The new address is I hope you join me there!

Harriet, we hardly knew ye

I wrote here that I had no doubt that Harriet Miers would be confirmed as a Supreme Court Justice. I was wrong, of course. I was basing my estimate on her being voted on by the Senate, and she never even made it that far, being more or less forced to withdraw by her own party, as Democrats watched from the sidelines. Quite the political circus, and Mr. Bush eventually pulled the Krauthammer cover to get out of it.

It certainly seemed that every day we got some new news about Harriet, and it never seemed to be good. Stories came up that implicated her in Bush-related scandals, or found things that marked her as an idealogue - Heaven forfend! - or she wrote or said something that marked her as not a competent Constitutional scholar.

So, while the whole thing is a political disaster for the White House, it looks like the Supreme Court caught a break. Maybe now we can concentrate on finding someone who will be a real asset to the court. Your move, Mr. President.

Thursday, October 20, 2005

Senate overwhelmingly rejects Anti-Pork amendments

Dear Senator Bayh,

I was disappointed to read that you failed to support
the Coburn anti-pork amendments today. Government spending is woefully out of control, and Senator Coburn's attempts to stand against the tide are one of the bright spots of this Congress. I hope you will find the political will to vote against any future pork projects that may come up for a vote.

Thank you.

Tuesday, October 18, 2005

Constitution clause names

A page with the commonly referred to names of clauses in the US Constitution. It will be handy working on my Annotated Constitution project!

Monday, October 17, 2005


I think I have this set up now. Since Blogger is even being blocked by services now, it's time to move the blog. It's still powered by blogger, but its new home is

Blog design mistakes

This is a good article on web design as it applies to blogs. I'll try to take some of these messages to heart!

Friday, October 14, 2005

Why I am not a Republican

Chatting with a coworker one day over lunch, he told me, "Yeah, I would never vote Democrat. Those guys never do anything but spent our tax money." "But this Republican administration has taken us from budget surpluses to massive deficits in just six years," I pointed out. "Yeah," he said. "But at least the Republicans talk a good game."

Which got me thinking. Philosophically, I am one of those fiscally conservative, socially liberal types that some people like to call "libertarians" and others like to call "wussies". (I'll discuss that another day. Suffice it for the moment that I believe in balanced budgets, NAFTA, and gay marriage.) So where do I fit in? I can't possibly vote for massive social welfare spending or increased farm subsidies, so the Democrats are out. I can't vote for a constitutional amendment banning gay marriage, or outlawing abortion, so the Republicans are out too. In the '88, '92, and '96 elections I voted for the Libertarian party. I didn't see much difference between the major party candidates, so I voted on principle, hoping enough people would do the same to make the majors take notice, rather like the Socialist party in the teens. In 2000 I thought Gore was much in the same mold, a decent leader who wouldn't be able to make too many changes, same as Dukakis, Clinton, Dole, and Bush Sr.

But after eight years of peace and prosperity under Clinton, I was noticing that the Republican leadership suffered greatly by comparison. They seemed to have an us-and-them mentality and a feeling that they could do whatever they wanted, like the arms-for-hostages deals under Reagan, the breaking and entering under Nixon, and the witch-hunt that Kenneth Starr perpetuated on a sitting president who was getting a little on the side. Plus, I could not in any way see that the younger Bush had any qualifications for being President, so in 2000 I voted for Gore. He lost - maybe - but I wasn't terribly bothered. Give the man a chance, I thought. He surely can't be much worse than Gore.

Six years later, I think this administration will go down as one of the worst in history. It seems to have no sense of how to do anything but spin stories and mount massive propaganda battles against its enemies. Richard Clarke, for example. After reading his book I was convinced that 9/11 represented a massive failure of the Bush administration to deal with terrorism. It's unquestionable that Hurricane Katrina was poorly handled. And the vice-president's old company seems to be handed the keys to the Treasury.

So even though I am in agreement with many of the Republican party's stated goals, I think there is a clear pattern of corruption and poor management in just about every Republican administration of at least the last 35 years. Sure, they talk a good game. But when the rubber hits the road, they can't back it up. I'll be voting for the Democrats in 2008. The country just can't afford another Republican president.

Icerocket tags

General to soldiers: No Swimming

Wow, this is a strange story (via Maryamie and Tim) . Congratulations to FedEx and Direct Swimming Pools, and boos and hisses for General Harrel, who insisted that the pool should be taken down. Was there any reason for it, or was it an arbitrary display of bureaucracy?

Icerocket tags

Wednesday, October 12, 2005

JotSpot and the Annotated Constitution

I joined JotSpot today. I've been looking for a wiki to use; I put up a couple of pages at a free wiki site that I think is gone now, but they deleted your pages if you didn't update anything in 30 days. Jot still has some kinks to work out, but I like it well enough, and they have a proper pricing structure set up, which is nice. The first page I put up is an Annotated Constitution. If I've gotten it set up properly, it should be freely editable, so feel free to drop by and add your comments!

Icerocket tags

Tuesday, October 11, 2005

MFC applications leak GDI objects?

We've discovered a GDI leak in the Prosolv Analyzer application, but it appears to be a Microsoft leak rather than a Prosolv leak. According to this KB article, creating and destroying child windows with Windows XP Service Pack 2, with themes turned on, causes objects to be leaked. The article says that a hotfix is available, but it has to be downloaded rather than automatically retrieved via Windows Update. It seems pretty strange to me - why don't people hit this bug all the time? Are there just that many fewer MFC applications on the market now? Or are there some subconditions for use that mean that it doesn't come up all that often? Or maybe it's just that most applications don't create that many child windows. Anyway, if you're running Analyzer, you might be wise to get the patch mentioned in the KB article applied, or turn off the Themes service. We're looking into our options.

Icerocket tags

Monday, October 10, 2005

First principles

I'm changing the name of this blog. I chose Ramblings more or less at random, since that was what I was doing and I didn't have any real sense of the direction of the blog. Now, after a couple of years, I still don't have any sense of direction, but at least I think I have an idea of what I'm writing. Partly, it's reviews; books, plays, and operas, but generally when I'm writing on politics or programming, I'm trying to work out exactly what my position is, and to know that I have to start from the very beginning and work through it, step by step. In other words, I have to work it out from First Principles.

Early in my job at Interactive Intelligence, I was assigned to work on the COM API for the primary client application. I didn't know much about COM at the time, although I had tried at my previous job at Sunstorm to create COM DLL's for some games. It didn't really seem to buy much, though, and I eventually abandoned it.

Interactive Intelligence, though, sent me to a DevelopMentor's Guerilla COM, where I learned a lot more about why COM was superior to simple DLL's, and I started to see the point of using them. If I'd taken that class while working for Sunstorm I would have been able to apply it a lot better. Later, I was reading through a COM book - I think it was Don Box's Essential COM - and there was a line in there that said, "Most programmers have to convinced of the utility of COM, because they prefer to reason things out from first principles." This really struck a chord with me, because it was exactly why I had abandoned COM the first time - I couldn't figure out the utility of it - until I was able to work it out from first principles.

At the same time, of course, I also think it's important to have a set of principles in order to guide your life. I was thinking about joining a church a while ago, and when talking to the pastor she told me that ordinarily she would recommend to a candidate certain ways in which their life should change before they became members. She didn't really have any changes for me, though. I think the reason was that the first priority in my life is to have a set of convictions, and work from them. Inside that framework you have flexibility, but this is what you have to have First: Principles.

So hopefully this will help to guide me, both in my writing style and the subjects I choose to write about. If you're reading, I hope you enjoy it.

Icerocket tags

Saturday, October 08, 2005

Harriet Miers

It certainly is unquestionable that since President Clinton left office, the Republicans have been a far superior political machine to the Democrats. And of course, one of the primary benefits of being the party in power is the ability to get your Supreme Court nominee through the Senate approval process and on to the bench. Especially in the last 30 years, as lifespans steadily lengthen, this is a privilege that is rarely granted. President Clinton nominated two in his eight years; Ginsburg and Breyer. The current President Bush nominated none in his first term. His father was able to nominate two: Thomas and Souter.

But why is it such a privilege? Well, with only nine justices on the court, a single nomination can drastically change the structure of the court. For example, the test that everyone always talks about is Roe V. Wade; that is, the question of whether the right for a woman to have an abortion is one that should be protected by the federal government. The conservatives would like to see it overturned, while the liberals would be appalled. But the question then becomes: what would it take to overturn this decision? Is it just a matter of getting enough folks onto the supreme court who disapprove of abortion?

Well, it isn't. (Or at least, it shouldn't be.) See, when the court decided Roe v. Wade, they looked at a lot of different things: Historical precedents. Decisions made in other trials. Rights of the individual versus the interests of the state. Changing a decision made by the highest court of the land isn't just a question of getting five people up there who happen to think that abortion is icky. And even if you did, maybe a future liberal president might get lucky and nominate a couple of others who would swing the decision right back around again. So the issue that the conservatives should be trying to deal with is, "How do we get the decision changed in such a way that it won't be overruled by the next court?"

Here's how: Write up the decision in such a clear way, with such incisive reasoning, that it is very difficult for opponents to contradict. To do that, you have to have a brilliant conservative scholar on the bench; someone who's known to write impeccable, incisive decisions on the bench.

Harriet Miers will be confirmed; I don't have any doubt of that. Enough Republicans unwilling to contradict their president, coupled with enough Democrats thinking that she is the best they will get, will vote for her to get her through. She may be a good conservative, and vote the way the President hopes she'll vote. But there is surely no evidence to support the idea that she will be a shining conservative light; a justice who will write decisions both for the majority and in the dissent that will be referred to by future scholars and judges as a guiding path for the ages. This is what conservatives really wanted on the supreme court, and this is, with 99% certainty, what they did not get.

Icerocket tags

Friday, October 07, 2005

MSN Traffic in RSS?

Hey, Mr. Scoble, I have a request: The traffic reports on MSN are really nicely laid out and I'd like to check them every day before I leave the office. But I never remember to. It sure would be handy to have them in an RSS feed so my feedreader can remind me of them as they come in. As I look at the page, I see a link at the top that says "RSS", but it just leads me to a generic list of feeds. There's also a link at the bottom that says "Feedback", and I dropped a comment in the comment box there, but didn't get a response. Is there any chance of getting MSN to give me Indianapolis traffic RSS feeds in the near future?


Update: Yahoo does support this, according to this post. I subscribed, and got a couple of construction updates from last week, but of course it's not rush hour yet. We'll see how it does. Here's the relevant map.

Icerocket tags

Monday, September 26, 2005

Jazz Benefit for New Orleans

A day or two after Katrina, a blogger whose link I've now lost wrote a story about a little girl watching an ad for a benefit concert for New Orleans, and turned to her father and asked, "Why do they need to have a concert? Can't people just give money by themselves?"

I think about that now every time I see a benefit concert being advertised, so I wasn't overly enthusiastic when my wife wanted to go to this one, and left to my own devices to choose between this concert and Monday Night Football, well, pass the beer nuts. But I suppose that if you drive a backhoe you can help out; and if you're an electrician you can help out; and even IT guys can volunteer for some things. Musicians want to help out too, and hopefully concerts like this one will raise a nice piece of change for the Red Cross. The Indiana University School of Music brought in David Baker, Sylvia McNair, and Timothy Noble as headliners - all are alums - and it turned out to be a really good concert, and much better than the pigskin (as Denver rolled right over the Chiefs).

Although the lineup didn't include as much New Orleans jazz as one might hope, it was not surprising for as quickly as this concert had to be put together. So the arrangement consisted primarily of show tunes. The ensemble were upbeat on the instrumental pieces, and the soloists did a solid job. The lone female, Sophie Faught, did a fine job on Quincy Jones' Grace -albeit with a rather hissy microphone - and with a strapless gown and a shock of bright red hair amid a sea of tuxes, was the visual centerpoint of the evening, something I suspect she will have to get used to if she wants to continue in jazz.

Tim Noble performed admirably on a couple of Cole Porter tunes, while Sylvia McNair sang some swinging jazz melodies with perhaps more of an opera rhythm than a jazz one. But she did a great job on Over the Rainbow, and her performance of John LaTouche's Lazy Afternoon was nothing short of stunning.

Before the final song Mr. Noble pointed out a pair of music students in the audience who werre newly enrolled after coming from Louisiana, which was a nice way to point out the real purpose of the evening. Then he and Ms. McNair teamed up with pianist Luke Gillespie for a closing rendition of You'll Never Walk Alone. This concert was a reminder of how good jazz can be, and it left me wishing there was a good jazz bar in Bloomington, so we can hear music like this every night.

Icerocket tags:

Saturday, September 24, 2005

Pillars of Solomon, Jon Land

I haven't gotten around to reading the Da Vinci Code yet. I read Angels & Demons and liked it; I like the sort of book that combines history and mystery to reveal ancient secrets. It's what I was expecting about this book, which blurbs a "Secret born of the blood that forged a nation!" which sounds pretty cool. But I'm not sure that the recent forging of Israel holds a great deal of interest for me, taking place recently enough that many of the protagonists are still alive. Still, the five thousand year history of the territory makes for some interesting reading. The plot takes us from the murder of an Israeli businessman and the disappearance of a Palestinian schoolgirl to the uncovering of a child slavery ring, and then to the secret, going through a Jordanian archaelogical dig on the way, which presented some Indiana Jones-esque sequences. I wonder if that's a standard for Mr. Land?

The thing you always have to ask when reading a book like this, is "Does it hold together?" This one mostly does; the big difficulty I had - hopefully without giving away the plot - was in buying the complex nature of the warriors in the book who were partially responsible for the creation of Israel. Of course, all wars have irresponsible behavior on the battlefield and in the post-battle euphoria of survival; but I'm not sure that I can buy some behaviors under any circumstances. Ethics are one thing in the circumstances of hot blood and totally another after the fact, which is why the happenings at Abu Ghraib were inexcusable.

The writing is fair-to-good, with the occasional really awkward phrasing ( "Realized" is not a synonym for "Said". Ever.) The cover promises better writing than Tom Clancy, and that is not the case, but IMO Clancy is really in a class by himself for thrillers. Jon Land is a solid writer, and - the reason I'm actually writing this article is to make sure I don't forget - I will be picking up some of his other work. Isn't that all an author can really ask for in a book?

Icerocket tags:

Cosi Fan Tutte, IU Opera

It's a fun opera season this year, with the Barber of Seville, Carmen, and a couple of Shakespeare adaptations on the agenda. The opener was this Mozart opera, and it was...ok.

See, Mozart's operas to me seem like they're twice as long as they should be. The niceties of the 18th century required that the singers be given a nice slab of time for a solo on stage, and that's fine, but I wish the great one had managed to work more than one verse into each eight-minute aria. The fault of the librettist actually, I suppose, but if you choose a plot with 90 minutes of material, why make it into 200 minutes? That was the actual length of this piece, although the program said it would be 165.

With all that said, it's worth seeing. The plot goes something like this: Two soldiers make a bet with an older cynic that their betrotheds can stay faithful to them against all temptation. As part of the bet, each then tries, disguised, to seduce the other's fiance. The cynic, who is sure he will win the bet, thinks that "they're all like that", or, cosi fan tutte.

Highlights: The maid, Despina, comic relief played skillfully by Angela Mannino, with a very nice nasal voice for her turn disguised as a male. The two soldiers (Brian Stucki and Benjamin Czarnota) do a very funny slapstick bit being pulled around by a magnet. It's a truism that opera singers can't act for beans - Dorabella (Ann Sauder) for example, tended to go a bit overboard on the dramatic gestures - but I thought the two males worked very well together. I was surprised to learn that Ms. Sauder was an undergraduate, but she carried herself capably with a solid voice.

So go along and see it if you have a chance, but make sure you budget enough time for it, and be prepared to enjoy the music. You'll have to do that anyway, to keep your attention during the parts where the plot isn't going anywhere fast.

Icerocket tags:

Wednesday, September 21, 2005

Google's killer app

The blogosphere is abuzz about Google's plans for a WiFi network. There's a lot of talk going around about datamining and selling ads based on what's on your hard drive and stuff like that. But here's my take on what Google is after - it's something I've wanted for a long time: A VOIP cellphone.

If there's one thing everyone agrees on, it's that the cell phone companies are awful. Proprietary networks, $2 ringtones, basically everything they can do to monopolize and monetize absolutely everything their customers can do with their phones. The companies even have their own private networks, that no one but themselves can use. As a consumer, none of this is any good to me. I'm usually in range of a WiFi network - why can't I use my cellphone to make cheaper, easier VOIP calls when I'm in range?

If I'm Google, I'm looking at that and saying, wow, what a golden opportunity. What would we have to do to take on the cellphones? Let's see:
  • We'd need global wireless access.
  • We'd need a ton of wire to transmit all that data.
  • We'd need secure traffic.
  • We'd need our own voice application.
  • We'd need a way to determine the user's location for 911 calls.

Check, check, check, check, and check. GooglePhone, coming soon in your area. Sign up today!

Icerocket tags:

Friday, September 16, 2005

Using the pImpl idiom with an auto_ptr

Here's a interesting C++ fact I had never figured out. The pImpl idiom is a method of hiding implementation details of a class from users of the class. You define the class's interface in its .h file, and then add a simple forward-declaration:

class myClassImpl;

and in the class, include a member variable:

myClassImpl* pImpl;

(pImpl stands for Pointer to Implementation.)

Then, in the class's CPP file, the constructor news up pImpl and the destructor deletes it, and the declaration of class myClassImpl can be pushed off to a different file or even hidden entirely in the class CPP file.

But still, there's a step in there we might be able to get rid of. The standard class auto_ptr defines a pointer that will be deleted when it goes out of scope. So, instead of using a raw pImpl pointer in the class definition, we define it like this:

std::auto_ptr pImpl;

Now the auto_ptr goes out of scope when the instance is destroyed, so we don't even need to delete it in the destructor. But wait - there's a problem. If we happen to have a class destructor that's defined in the header file, it won't be able to delete pImpl because, at that point, it doesn't have a definition for it. This seems like a minor issue, until you realize that, if you don't define a destructor at all, that works exactly the same as if you had defined it in the header file. So, as Gene Bushuyev explains in the referenced article, you need to define a destructor explicitly as well, so the compiler has enough information to delete pImpl when it needs to. Thanks, Gene!

Icerocket tags:

Wednesday, September 07, 2005

Windows Services

At work my current task is to rejigger a bunch of applications into Windows Services. Prosolv has four primary applications that run as servers: An Archiver, a Dicom server, the Prosolv server, and a file server, or streamserver. We also have a series of other executables that handle data transfer for various machines such as the Acuson Cypress. Up until now, each of these applications has run as an application with a regular window, which is less than ideal for a server application - people tend to shut them down without meaning to - so I'll be reworking them into services. For most of these applications, this is no big deal - the only thing the windows do is hold a little config information. But the main server, the Prosolv Server, might be a bit tricky, because the server itself is actually nothing more than the original clientside-only application reworked into a server application! So it will have quite a few references to windows scattered through it. I think I've mentioned that all of these applications were written using Visual Studio 6, and it's not likely to be upgraded anytime soon. However, when the applications run as services, they'll need a separate config application, which I intend to write in C#.

Icerocket tags:

Book review: Secret of the Caves, Franklin W. Dixon

Frank Dixon and a cast of thousands, that is. But Caves was #7 in the original series, which means it was actually written by Leslie McFarlane, generally agreed to be the top Hardy ghost. I was a huge Hardy Boys fan as a kid, like my dad before me, and around 1974 he handed over a collection of probably 30 books that he had gotten originally in the 50's - Hardy Boys, Tom Swift, and others, such as the Mercer Brothers, which I've never seen again. Recently I've decided it would be fun to collect some of these old books again, so I picked up Caves at an antique shop for $9 - which may have been a bit steep, but better than the $15 they were charging for some old Tom Swifts.

I don't remember this one as being one of my favorites, though, and on rereading I can guess why - there really isn't a villain. The boys and their chums go in search of a man who has lost his memory, and the escaped prisoner from the local jail is more a distraction than anything else. There are a couple of cliffhangers - literally - which are pretty exciting though, and the missing man is discovered neatly.

I've also picked up a Battleship Boys book and a Submarine Boys book, which I'll review if I think of it. Between a couple of programming books, a spy novel, and a C.S. Lewis, my limited reading time is pretty split up :)

Icerocket tags:

Blogger toolbar broken?

I was easily able to get the Word toolbar to work on a machine where I have local administrative privileges, but I don't normally log in with those on my laptop. The Blogger toolbar does not show up on this machine when I log into an account without local admin privileges. Is that just a scenario the authors overlooked, or did I hose something up - I'm pretty sure I tried installing it without privileges before I did anything else. I used the Blogger support form, and got back some automated response, which I let sit for a couple of weeks before responding. We'll see if anything comes of it - I'm guessing not. Very disappointing; I'd like to use the toolbar.

Icerocket tags:

Friday, September 02, 2005

Fear of code

Kevin Barnes writes a nice article on Fear of code. The opposite of fear is courage, which is of course one of the core values of agile development. If you are afraid of changing your code, that is a code smell, which needs to be Lysol'd with lots of unit tests!