A Django site.
May 5, 2008
» Tan Lines


With Memorial Day just around the corner, we’re entering the season where I inevitably endure comments from friends and family with respect to my tan, or lack thereof. So in an effort to prevent the shock and awe the apparently occurs when I don a pair of shorts, I present this guide.

Tan Lines

April 10, 2008
» ianolsen


Wow. Self-employment has made Jeff bold! Incendiary, even.

We Don’t Use Software That Costs Money Here:

It’s tempting to ascribe this to the “cult of no-pay”, programmers and users who simply won’t pay for software no matter how good it is, or how inexpensive it may be. These people used to be called pirates. Now they’re open source enthusiasts.

» ianolsen


If Vista decides, one more time, that the appropriate columns when looking at a folder full of C# source code is Artists, Album, Genre, and Rating, I’m going to go postal. I keep fixing it, and everything’s fine for a few weeks, and then it does it again. Yes. I have SP1 installed.

This morning I searched Google for “Vista folder view f***ed” (without the stars) and, amusingly, the second result led me to a fix. I’ve removed from the registry all the folder-specific view settings that Vista oh-so-cleverly remembered on my behalf. If it actually did this competently, that would be one thing, but if it’s just going to confuse itself every few weeks, I’ve got better ways to spend my time. So I’ve also turned off the “remember each folder’s settings” option. Call me crazy, but when looking at a list of files I actually want to see file-like information like size, date, and attributes. I genuinely miss Windows NT 3.5’s file explorer sometimes.

I’ll be 31 this year. Perhaps I’ve already begun the slow decline to cranky old geek. Soon I’ll be looked at by fresh-faced college kids the same way I looked at the graybeards reminiscing about core memory and punch cards.

February 20, 2008
» Fortress


Vault Today we shipped Vault 4.1 and Fortress 1.1. Follow those links to the release notes to see exactly what’s new.

This seems like as good a place as any to thank the many early adopters who took part in the beta for this release. In no small part due to your help, we made significant improvements in the usability and performance of the Visual Studio Enhanced Client (formerly the Visual Studio 2005 client).

For developers who use IDE integration, particularly those upgrading from a 3.x version, I recommend checking out this FAQ.

All of the graphical clients (Windows, Visual Studio, Eclipse) also got a face lift with this release. The FAQ includes a few screen shots.

Finally, if you’d like to keep abreast of all Vault and Fortress-related releases, there is an RSS feed for our release announcements.

Fortress

November 28, 2007
» ianolsen


I’m reading Cryptonomicon for the second time, having rediscovered it on a basement shelf and remembering that I really enjoyed it years ago. Last night I got to this part, when Randy’s trying to crack the Arethusa intercepts from his Manila jail cell:

“Who framed me, then?” Randy asks, kind of rhetorically. He was just in the middle of doing some pretty cool C++ coding when he got yanked out of his cell to have this surprise encounter with the Dentist, and is surprising himself with just how bored and irritated he is. He has reverted, in other words, back into a pure balls to the wall nerdism rivaled only by his early game coding days back in Seattle. The sheer depth and involution of the current nerdism binge would be hard to convey to anyone. Intellectually, he is juggling half a dozen lit torches, Ming vases, live puppies, and running chainsaws. In this frame of mind he cannot bring himself to give a shit about the fact that this incredibly powerful billionaire has gone to a lot of trouble to come and F2F with him. And so he asks the above question as nothing more than a perfunctory gesture, the subtext being I wish you’d go away but minimal standards of social decency dictate that I should say something. The Dentist, no slouch himself in the social ineptness department, comes right back as if it were an actual request for information.

Obviously any book that contains the phrase “pure balls to the wall nerdism” is probably good. An author who writes entertaining fiction and knows the software developer’s mindset this well is rare. Hilarity ensues. I can’t say that I’m proud of these moments, but what professional software developer hasn’t been there? Of course, I’d have to substitute an “oblivious coworker” for the “incredibly powerful billionaire,” making the caricature even more painful. :)

November 27, 2007
» ianolsen


Last night we released a beta version of Vault 4.1 and Fortress 1.1. The big changes include:

  • Visual Studio 2008 support
  • Tags in Fortress

A more exhaustive list of changes is here.

October 25, 2007
» Fortress


Vault Today we shipped the final bits for Vault 4.0.5/Fortress 1.0.5. It’s got many tweaks and fixes, particularly for users of the Visual Studio 2005 integrated client. Fortress

» Superman Minion


Several of the Evil Mastermind ads have featured SourceGear employees as minions. I make an appearance as Minion 72 in Episode 8, which appears in November issues of Dr. Dobb’s and MSDN.

The people who created this comic claim it’s coincidence that Detroit is one of the banishment buttons, despite the fact that I spent 15 years there before moving to Champaign. I’m skeptical. I just think none of them want to admit responsibility. My wife nearly started a brawl when she overheard someone badmouthing Detroit after the Michigan-Illinois game Saturday. If she finds out whose idea it was, there could definitely be trouble. She looks sweet, but don’t be fooled.

Superman Minion

October 19, 2007
» ianolsen


If you’ve been trying out the 4.0.5 beta, you might be interested to know what we’ve fixed since its release. Almost all of the changes are in the Visual Studio 2005-integrated client. They are:

  • Adding an existing unbound project to an existing bound solution now works correctly.
  • Projects that are pending addition no longer always give a spurious working folder error on startup.
  • Added help for the “Add Solution to Vault” and “Change Vault Bindings” dialogs.
  • Fixed a bug where the path to web site projects was not always correctly determined in the Change Bindings dialog.
  • Changed some text to make it more clear that you’re going offline: login dialog and working folder resolution.
  • Adding a new web site project to a bound solution now gives a sane default repository location.
  • Solutions and projects are now correctly reloaded when undoing a change from the pending changes window.
  • Log out from the repository now happens correctly when closing your solution after it had been automatically reloaded due to a get or revert.
  • Get Latest and Checkout commands are now enabled when only a child file (e.g. a designer or code-behind file) is selected.
  • Fixed the weird availability of the “Open From Vault” command. It’s now always available when we’re the active source control provider.

These will be in 4.0.5 final, due out Real Soon Now.

October 10, 2007
» ianolsen


We’ve made a beta version of Vault 4.0.5/Fortress 1.0.5 publicly available.

Most of the changes in this release are in the Visual Studio integrated client, for which it’s the biggest release since 4.0/1.0. People using that client should definitely check it out.

Noteworthy changes to the Visual Studio client include:

  • There is a new binding management dialog that allows people with more sophisticated binding requirements to work effectively. It’s now possible to have an unbound solution and bound projects, for example.
  • Get Latest has been significantly improved. Specifically, it’s no longer necessary to perform the command twice when files have been added to a solution or project. You also no longer get annoying “This file has changed, reload?” prompts.
  • The bin folder in web site projects is now handled correctly. (Rejoice.)
  • Solutions having projects that aren’t beneath them in the file system are handled significantly better.
  • Solutions having multiple Business Intelligence projects now work.
  • The performance of Add Solution has significantly improved.
  • Linked file checkouts are handled better.
  • The pending change list better reflects checkout status.
  • Session restarts are handled better.

The full release notes are here. If you’re using the new Visual Studio 2005 client, or you’ve had trouble with it in the past, take a look!

Also, if you’re interested in other things happening in Vault/Fortress development, check out the SourceGear Development Blog.

June 14, 2007
» The Blowhard Index


I don’t understand the people who find their way into every organization and blame every problem on management. These people are the cause of their own problems. In short, they’re too passive. I don’t think I’m an overzealous management-blamer, but I could stand to be more assertive sometimes. I can think of many instances in the past, in my personal and professional life, where things sure would have gone smoother if I would have grown a pair and made people see things my way. I know I’m not alone. A while back Jeff Atwood published some thoughts about assertiveness among software developers that I found interesting, but I think he missed something. I think a lot of developers choose to be passive, and we don’t realize what a disservice we’re doing ourselves.

Recently I found myself with a few minutes to kill, and as luck would have it, there was good reading close at hand: Bathroom Reader 8: Things Everyone Should Know. It was full of pithy thoughts, one per page, in a tone similar to Deep Thoughts by Jack Handy. One page held only this:

People only get what they think they deserve.

Not people get what they deserve. People only get what they think they deserve. This is true, but it’s even more true if you expand it a little. People don’t get 100% of what they think they deserve, but they get 0% of what they don’t think they deserve. People get no more than what they think they deserve.

You get only what you think you deserve

What do I mean by “what you get?” Well there’s the classics: respect, prestige, power, and money, but those are sooo twentieth century. And we’re not supposed to admit we’re after them even if we are. “What you get” could be anything. The love of a partner. The advanced degree. The respect of a family member. The house on the water. The friendship of that brilliant, funny co-worker. Work/life balance. If you don’t think you deserve it, you’re not going to take any of the steps to get it, and you won’t.

I know what you’re thinking. “Well thank you, Captain Obvious! Did you really think Bathroom Reader 8 held the wisdom of the ages? Perhaps if you had more fiber in your diet you’d waste less time and bandwidth around here, hmm?”

Okay. But there’s more!

In addition to the “I Deserve” value we give ourselves, we assign “You Deserve” values to the people we know. We do it with everybody: co-workers, family members, friends, anybody you would consider more than an acquaintance. You decide how smart they are, or how talented, or good-looking, or whatever qualifications are appropriate for a particular relationship, and subconsciously assign a value. When someone’s “I Deserve” value grossly outstrips the “You Deserve” value you give him, he becomes obnoxious, the kind of person who constantly toots his own horn.

Engineers are particularly vulnerable to this pattern of thinking. We invented the bozo bit, after all. Our skills and qualifications are pretty well defined. Either you know something or you don’t. We tend to extend this: either you’re qualified or you’re not. In a technical field, you can assign a professional “You Deserve” value far easier than you could in, say, oil painting. As hard as it is to quantitatively measure the value of a software developer in an organization, it’s relatively obvious day-to-day who the brilliant engineers are, and they don’t even have to die first. In our binary world, there’s a pronounced bias against those whose confidence overshadows their demonstrated skill. We prefer to celebrate our brilliant but self-effacing, populist leaders, like Linus Torvalds and his penguin. We’re suspicious of those who have an apparently bottomless well of confidence without being obviously brilliant. We reserve our respect for those ushered into a position of leadership by consensus among their peers. Most of us decide it’s better to be failingly humble, and instead strive to produce work that outshines our passivity.

But we’re missing something important. Have you noticed the people heavy on bravado and light on skill often wend their way into positions of authority? Is this simply the typical workings of a clueless bureaucracy or something else? Both. Here’s the thing: if people did only what they were qualified to do, things for which they had already proven some aptitude, we’d still be living in caves. The caveman that built the first fire was certainly not qualified. What a pompous jerk this guy was. The other cave-people were doing just fine huddling together for warmth and eating raw meat, thanks. And it was so obvious that he had no idea what he was doing. Rubbing sticks and banging rocks for hours? Nice going there, Lothar. Do us all a favor and spear a woolly mammoth or something, would ya? But you have to admit that the whole fire thing worked out pretty well.

It seems to me that with very few exceptions, anybody who ever did anything extraordinary had a much higher “I Deserve” value than the “You Deserve” value they were assigned by their well-adjusted, humble peers. Some hid it better than others, but they all had it. Am I suggesting that we should strive for maximum arrogance in hopes that we’ll someday stumble upon greatness? No. Nor would I ever claim that acting skilled is more important than actually being skilled. I would prefer that the engineers that designed my airplane actually are skilled, thanks very much.

But there is a relationship between what you think you deserve, your confidence, and what you’re actually capable of attaining. Natural leaders tend to believe this implicitly. They come out of the womb and ask the nurse to fetch them a coffee. The rest of us just have to strive to keep it in mind when one of these obnoxious types is in our face. Here’s the way I think it breaks down:

The Blowhard Index

The point at which one’s cup of confidence floweth over, taking him into obnoxious territory, is certainly subjective. The people I consider successful in life, professionally or otherwise, spend most of their time slightly left of the blue area. Some occasionally venture well into the blue. But notice that leadership ability continues to increase a smidge beyond the obnoxious threshold. That’s intentional. 90% of the household name leaders, even in technical circles, fall into this very slim minority of extraordinary people: obnoxiously confident, tremendous leaders. Bill Gates? No question. Steve Jobs? Notoriously so. Larry Ellison? The guy actually has a lifestyle section on Wikipedia wherein his obnoxiousness is detailed.

At some point it became fashionable to declare Joel Spolsky arrogant. This was inevitable, because he’s successful and outspoken and he moves in the highly confidence-skeptical world of software development. And he’s still just small-time enough that people tend to wonder if maybe he’s gotten too big for his britches. I’ve shaken his hand and exchanged a couple of sentences with him, but certainly don’t know him well enough to place him on the Blowhard Index. Certainly the fact that he started his own company, which appears to be thriving, places him somewhere firmly in the right-most 50%. Doubtless there are people who actually know him that do find him obnoxious. But the people he employs at Fog Creek surely enjoy the living they make there, which never would have been possible if he’d waited to be qualified to start a company. Without the outrageous confidence necessary to publish his opinion about everything related to software development, he’d never have attained the runaway marketing success that launched FogBugz. (All of which is true about my boss, too, but by declaring himself arrogant occasionally, he cleverly sidesteps the whole mess.)

Do entrepreneurs or corporate big-shots need something larger than life to associate with in order to offset what is actually deep-seated insecurity, merely masquerading as confidence? Probably in some cases. But even these people are valuable contributors to an organization. The truth is, we need people who are more confident than we are, whether or not they have the qualifications to back it up. Without them, we’d all still be huddling together for warmth in a cave somewhere.

Confidence is A Good Thing. For techies too. If you allow your professional bias to keep you from realizing this, you’re only hurting yourself.

January 8, 2007
» ianolsen


I won’t be shy about it. This blog chain mail thing is definitely dumb. :)     By participating, I fear I’m waiving my rights to disdainfully chide my mother when she forwards a dire warning about the kidney-theft epidemic. But when the guy who signs your paychecks tags you, well, that’s a different matter entirely. And hey, talking about yourself is easy. So for those of you who don’t know me personally, (and even some who do) here’s some things you might not know about me:

  • One summer in high school I sailed from Long Island to Detroit with my dad and brother. It took around 8 weeks, I think. We had moved from New York the previous summer, and we were bringing the boat with us a year late. It’s a 1977 Ranger 33, which my dad restored beautifully, but it’s just about the smallest boat you’d consider taking such a long trip on. There were quite a few (mis)adventures. Back then, the boat didn’t have radar or GPS, so fog was scary whether we were in the Atlantic circumnavigating Nova Scotia or dodging gigantic tankers, sailing against the current in the St. Lawrence seaway. One stormy night my brother and I puked over the side 7 times, cumulatively. Good times. It’s one of those adventures that seems fantastic in hindsight!
  • I jumped out of a perfectly good airplane near Jackson, MI with my college roommate one spring. It was a great experience. People are usually surprised to hear that you don’t perceive the ground rushing toward you. We jumped from 12,000 feet, and at that distance it’s so far away you can’t really tell you’re accelerating toward your death. It’s more like sticking your head out a car window. I didn’t get nervous at all, actually, until after the parachute opened. At that point everything slows down enough that you have time to look down at your dangling feet and ponder the fact that you’re 5,000 feet from sweet terra firma.
  • Long ago I auditioned for and was accepted to The American Boychoir. I didn’t attend, mostly because going from public schools in St. Paul, MN to a highfalutin boarding school in Princeton, NJ was terrifying. Plus I was a little too old, too close to puberty, at which point you’re no good to them.
  • In high school I ran a BBS in the 313 area code. (That directory is from 1987, but it lasted through my time: the early 90’s.) I paid for the phone line and various upgrades out of my Arby’s paycheck. It ran T.A.G. 2.6, which was written in Pascal by some Detroit-area hobbyists. I wrote a handful of door programs for it, first in Pascal and eventually in C. I credit landing my first computer-related job, in part, to the fact that during the interview we discovered that the interviewer frequented my BBS.
  • In 1996, working as a summer intern, I wrote one of the first browser-based home banking systems. It had all the same features I use today at chase.com, and had cutting-edge HTML features, like frames! In those days, we installed servers at banks that included direct dial-in access because internet access was relatively scarce and direct dial-in was theoretically more secure. My employer’s primary product was audio banking systems, (”Press 1 to hear your account balance…”) and they’d been doing that for decades. Sadly, they only half-heartedly entered the newfangled internet market and lost to companies like Digital Insight. That was as close as I got to the .com mania in Detroit.

Because I’m late to the party, and in an (admittedly lame) act of protest against these sorts of things, I’m not tagging anyone.

October 30, 2006
» ianolsen


Two other items of interest:

  • There are some existing CCNet plug-ins (Sequential Task, Sequential Source, and Sequential Project) that provide locking.
  • There is work underway to integrate named build queues within CCNet itself, described here.

For anybody whose build spends the vast majority of its time in NAnt (or MSBuild), I’d still recommend locking there, as I described last week, for faster build throughput.

October 23, 2006
» ianolsen


A frequent topic on the CruiseControl.NET (CCNet) mailing list is how to serialize builds. Lots of people have multiple projects that build on one server, and sometimes dependency relationships between those projects are fairly complex. Solving the problem to everyone’s satisfaction without burdening everyone with its complexity is quite a challenge, which is probably why there’s no functionality in CCNet to accomodate this to date.

We don’t have to deal with dependencies for our builds at SourceGear, but we did have to resolve some serialization issues when we first set it up.

We have five projects currently built by CruiseControl.NET:

  • Dragnet 1.0.x
  • Dragnet Trunk
  • Vault 3.1.x
  • Vault 3.5.x
  • Vault Trunk

For people whose build times run into hours, it’s important to build as little as possible to fully reap the rewards of Continuous Integration. Including all unit tests, Vault builds in about 45 minutes, and Dragnet less than that. We have a smaller set of tests that runs on every checkin to get Vault’s time down around 20 minutes. We essentially build all the code for every build on each of these projects, sparing us the dependency issues. Still, there are a couple of reasons we couldn’t just allow anything to build at any time:

  1. The unit tests require that the Vault server be installed and you can only have one instance of a Vault server installed on a machine. We can’t have multiple Vault builds trying to install the server willy-nilly.
  2. We use Wise for our installers, and strange things happen when multiple instances of it are running.

Initially, I cobbled up some modifications to CCNet to only allow one build at a time. This worked, but it sometimes made the wait for a build much longer than it had to be. In our configuration, when CCNet does a build it’s actually doing all these things:

  1. Clean out the source directory
  2. Get the latest source
  3. Build
  4. Create installers
  5. Install server
  6. Unit tests
  7. Uninstall server
  8. Label source

My modified version of CCNet essentially made the entire process one big critical section. It was effective, but far from optimal. At one point last fall someone on the mailing list mentioned that they had created a mutex script in NAnt that gave them finer-grained locking. John Hardin at CRS Retail Systems was kind enough to save me the effort of rolling my own and provided his script.

Adding this block to your NAnt script gives you the ability to add named mutexes as NAnt tasks. In our configuration, steps 3 through 7 are all performed within a NAnt script that CCNet kicks off. For the Vault builds, steps 5 through 7 are encapsulated by a mutex. Each build waits for it’s turn to install and test a server:

<mutex mutexName="VAULT_SERVER_MUTEX" />

<!–
Install Server…
Do Unit Tests…
Uninstall Server…
–>

<mutex mutexName=”VAULT_SERVER_MUTEX” />

We did the same thing with a “Wise” mutex for the parts of the script that create the Wise installer.

The NAnt mutex method is just as effective as one huge lock from CCNet, but because we’re locking only when necessary, builds spend a lot less time waiting for others to finish. And we no longer need to run a customized version of CCNet.

Even if CCNet includes serialization features some day, I can’t imagine that this level of locking would be possible. Once you’re running NAnt (or MSBuild, or whatever) you’re outside CCNet’s control: locking within NAnt itself ought to be a useful trick for some time.

» Cylons. Why debugging matters.

I’ve just recently been turned on to Battlestar Galactica. I’m just starting season 2 on DVD and definitely enjoying it.

This afternoon a coworker pointed out this banner ad at the show’s site, which I found amusing.

cylons-debuggingmatters.Png

October 10, 2006
» Fix for new projects in CCNet 1.1

Some Vault users discovered a bug in CruiseControl.NET 1.1 where working directories were not correctly set for new projects. Owen has committed a fix which is now available in build 1.1.0.2517.

October 3, 2006
» CruiseControl.NET 1.1 Released

CruiseControl.NET 1.1 was released early today. This is the first official release that includes all the Vault-related fixes I described a few months ago.

As a quick reminder, to take advantage of the fixes in CCNet you also need Vault 3.1.8 or better, both client and server.

If you’re upgrading from 1.0, make sure to take a look at the Vault Source Control Block documentation, as a number of things have changed. In particular, you may need to change your useWorkingDirectory and workingDirectory settings to get the same behavior you had under CCNet 1.0.

July 28, 2006
» Marketing Stunts

There’s a reason most developers don’t grok marketing: lots of marketing makes no sense. Literally. Apparently a good way to create buzz is to do something senseless.

I’ve been following Cambrian House for a couple of weeks now. My very limited understanding of their model is this:

  1. Solicit contributions from essentially anybody for product ideas.
  2. Solicit contributions from developers and graphic designers to produce those products. Contributors get points based on their contributions.
  3. If/when the product makes money, contributors are paid based on their points.

Anyway back to senseless marketing stunts. Today Cambrian House released a video on YouTube where they feed Googlers lunch by showing up unannounced with 1000 pizzas. Ostensibly they’re recognizing that they “stand on the shoulders of giants” and expressing their appreciation to Google for um, allowing them to stand on their shoulders, or something.

So yeah, it make no sense, but it’s fun. And here I am, helping generate that buzz. I best keep my day job.

June 28, 2006
» The Power of the Marginal

“Work like a dog being taken for a walk, instead of an ox being yoked to the plow.” —Paul Graham, in his latest, The Power of the Marginal

I found this essay inspirational. It’s no great leap to consider SourceGear, a small software company out on the prairie, fitting Graham’s definition of marginal.

June 27, 2006
» More on CodeRush/Refactor 2.0

CodeRush/Refactor is evolving into the tool I want to love, but it’s just not there yet. The templates are tremendously cool (and it’s obvious I’ve barely scratched their surface) but as a whole it’s lacking a number of Resharper features I find it hard to live without.

Some of these were previously mentioned, but this is my complete, updated wish list for CodeRush/Refactor:

  • I need keyboard shortcuts for “Move Down Call Graph” (Go To Definition) and “Move Up Call Graph” (or List References, when there’s more than one possibility). Visual Studio 2005 has only halfhearted implementations of these. For example it doesn’t take overloaded routines into account and it frequently just doesn’t find some references. Visual Studio 2003 is totally lacking the List References/Find Symbol functionality, making this a huge win there. These are what I called “usage search tools” last week. This is a killer Resharper feature that I just can’t live without.
  • I’d like a tool window showing my marker stack that allows visiting any marker with a double-click, without altering the stack. (Maybe add some right-click options and/or drag-n-drop to modify the stack. I could be persuaded that’s overkill.) This would make markers the perfect bookmark replacement, and I could forget about them altogether. As it is, I still have to use bookmarks if there’s a bunch of source locations I need to visit frequently in relatively random order.
  • I’d like additional syntax highlighting options. In particular, I like being able to give colors to variables of different scope (member, local, parameter).
  • I’d like a comprehensive list of keyboard shortcuts, including templates, navigation, embedding, etc. I know the vast majority are context sensitive, and this list would be huge, but I still want it and this is my list. :) At the very least, bring the training panel (which is awesome) up-to-date. Shift-ESC, one of my favorites, isn’t even on there! Good thing I discovered it via the training video!
  • CodeRush needs to do smart overwriting of closing parentheses: another one I got used to in Resharper. With the default options, there are some strange gymnastics required to work around the automatically inserted closing parentheses. For example, attempt to type this line:

    someStringBuilder.Append(someEnumValue.ToString());

    When you type the opening parentheses for ToString, a closing parentheses is added, so now both are in place. However, depending on the strength of your habits, you’re likely to add an extra parentheses or two. Even if you stop, you’ve now got to press End or cursor to the right before pressing enter. (Unless you have “Smart Enter” turned on, which is what I did, but that’s not the default.) Resharper recognizes that there are no more parentheses needed, and automagically overwrites them as you type. I don’t like that with CodeRush I have extra mental gymnastics to examine the parentheses situation at the end of some lines. Again, familiarity would probably make it better but I think Resharper’s solution is a good one: low impact to newbies without sacrificing power. I’m sure someone can point out that I’ve missed an option or “the right way” to type this line, but that’s exactly the point: Resharper doesn’t make me learn a new way to type code (or ship with options that do).

  • The refactor hotkey should have more consistent behavior. You can assign a keyboard shortcut to the context-sensitive refactorings, which is great. The problem is that if there’s only one available refactoring for the current context, it’s automatically performed. For someone relatively new to the product, I’d prefer to see what’s going to happen first. Maybe I’ll change my mind as I get more familiar. Nevertheless, I’d make this an option and default it to the “just pop up, don’t perform” setting to accomodate newbies.
  • I’m getting used to using CodeRush’s QuickNav, which is equivalent to Resharper’s CTRL-N (Go To Type) or CTRL-SHIFT-N (Go To File). The only thing I’d like is being able to change the search scope more easily with the keyboard. I still feel like I could get to ANY file/type quicker with Resharper because I never had to reach for the mouse. Also, Resharper’s list updates as you type, making everything feel snappier.
  • Better availability for some refactorings. Want to “safe rename” a structure? Too bad, it’s not there! You’re stuck with Visual Studio 2005’s icky implementation, or you’re totally out of luck in VS2003.
  • Resharper does background compilation, which lets you see any compile-time errors as you type and improves intellisense. I’m less of a rabid fan of this than many Resharper users, but it is cool. It’s yet another feature that’s less necessary if you work primarily in VS2005, but is killer for VS2003 users.
  • Show me unused variables and unreachable code. Resharper does this.
  • CodeRush lacks brace auto-completion, though it does auto-complete parentheses and square brackets.
  • CodeRush needs contextual help for the options dialogue. There are a ton of options, and this is most definitely a Good Thing for this type of product. As you’d expect, many of these are not self-explanatory. The only way to figure them out, right now, is to experiment.

I’ll continue to keep an eye on CodeRush. Its got real potential, it’s definitely breaking new ground in the UI, but for me it’s not a Resharper replacement. My quick and dirty summary of the differences is this: If you spend most of your time writing lots of brand new code, CodeRush’s templates are very compelling. If you spend lots of time integrating your work with existing code, particularly code written by other people, Resharper’s analysis tools are the bigger win. Typically at my day job, I’m in the latter camp. If you’re an Eclipse zealot who is occasionally forced to work with .NET, you’re going to find Resharper strangely familiar. (I’m not, but I work with a few.)

I was surprised to see people on the DevExpress newsgroups reporting that CodeRush and Resharper can peacefully coexist. Sounds dangerous, but the possibility of having the best of both worlds is so compelling it’s worth a shot.