dotnet, vs comments edit

In a really large system the build can take a long time. A really long time. Long enough to make continuous integration sort of meaningless. You may not be able to do a whole lot about it, but something to look at is your project’s code organization. The compiler and linker have some startup overhead you may be able to get rid of by reducing the number of solutions/projects you have.

For example, I threw together a set of three test codebases. Each has 100 (empty) classes, but they’re organized in different ways. I then built them a few times and compared the average times.

Project Format Time to Rebuild (Clean/Build) Working Copy Size Post-Build
100 separate solutions, 1 project per solution, 1 class per project 42s 4.29MB
1 solution with 100 projects, 1 class per project 42s 3.52MB
1 solution with 1 project, 100 classes in the project 1s 256KB

I noticed two interesting things here:

  1. From a time perspective, you don’t get much if you have 100 solutions or 100 projects - the real gain (and it’s significant) is if you put everything into the same project/assembly.
  2. The working copy size post-build (the amount of disk space taken by the source and build output) is orders of magnitude smaller if you put everything into the same project/assembly.

This isn’t to say everyone should start shipping mammoth assemblies. Just be careful how you organize things. Choose your assembly boundaries carefully. You may gain yourself some time in the build - and some space on your disk.

General Ramblings comments edit

A while ago a friend of mine asked me for the names of some of the authors I read. This got me thinking and I figured I’d make a list of a few of my favorites. So, in no particular order…

"Neuromancer" by William
Gibson

William Gibson: I’ve read Neuromancer so many times the book has nearly fallen apart. I like how he describes things enough to get a vivid image in your head but not with such numbing detail you get bogged down. Plus, how can you deny the guy who coined the term “cyberspace?” I’ve read all of his books and I have yet to find one I didn’t like.

Richard K. Morgan: Morgan has created a future world where your personality lives in a “cortical stack” at the base of your skull and a character named Takeshi Kovacs is an ex special-forces soldier turned investigator for hire. Action packed and a really fun read, Altered Carbon is the first book in that series.

Tom Clancy: Clancy’s sort of hit-or-miss. I’ve read some of his books that just take freaking forever to get where they’re going, but others are really exciting. Most of the books revolve around a modern-day wartime environment. I particularly liked Rainbow Six.

Jeff Noon: Noon writes in a very distinctive style that seems to resonate for some folks but not as much for others. If it works for you, it really works, and the books are amazing. His primary series revolves around a world where we exchange objects between our world and a parallel world and what comes back is a powerful hallucinogenic drug… that you take by sticking a feather in your mouth. If you think it sounds weird, you’re right, it is… but it’s a very compelling universe, too. The first book in the series, Vurt, brings with it the added challenge that it’s written in an invented dialect so it may take a bit to get into, but give it a shot. when I was done with it, I immediately flipped back to the first page and read it again.

"Vurt" by Jeff
Noon

Steve Aylett: I’ll admit I’ve only read one of Aylett’s books - Slaughtermatic - but it was so good I have to include him here. In this particular book, the world is a place where crime is a form of recreation and time travel is possible. It’s admittedly a little convoluted, but a really fantastic read.

Philip Pullman: Specifically, Pullman’s “His Dark Materials” trilogy which starts with The Golden Compass (also made into a movie). In this world, your soul is physically embodied as a “daemon” - an animal that travels with you. When the movie came out a lot of stink got raised about the social commentary on organized religion that these books present, but I really feel like that was a lot of crap. Is there some commentary? Sure. Is it as important or prevalent as the folks out there would like you to think? I don’t think so. This is another set of books I’ve read several times and enjoy every time.

"The Looking Glass Wars" by Frank
Beddor

Frank Beddor: I am an_Alice in Wonderland_ freak. I love the story, the characters, and I love imaginative derivatives of it. Beddor has created my favorite reimagining with his “Looking Glass Wars” trilogy - the idea being that Wonderland is a real place and Alyss Heart is a real person who ends up crossing into our world and getting trapped. Not difficult reads but some of my favorites. There’s even a soundtrack that goes along with them.

Neal Stephenson: Again, sort of hit-or-miss for me, but I can’t recommend more strongly that everyone read Snow Crash. Where else would you find a place where pizza delivery is controled by the mob and it arrives at your house via a guy you refer to as “The Deliverator?” Cyberpunk action at its finest.

Neil Gaiman: Is there a “favorite authors” list Gaiman_isn’t_on? Every story is different and imaginative in its own right, but my absolute, all-time favorite, and one that I have yet to find anyone disappointed with, is his collaboration with Terry Pratchett: Good Omen. Of course, if you were offended by the “commentary” in Philip Pullman’s “His Dark Materials” series,Good Omens is probably not for you… but otherwise it’s a must-read.

Douglas Adams: The Hitchhiker’s Guide series are some favorites for me (and a ton of other people) and I’ve loved them since I was a kid. One of the best birthday gifts I’ve gotten was a leather-bound copy of the first four books in the series. I’ve read them, listened to the audio books (on tape!), seen the movies/TV shows… I can’t get enough. Truly funny stuff.

"Jennifer Government" by Max
Barry

Max Barry: You also might see him listed as “Maxx Barry” but he seems to have changed that in recent times. I discovered Barry through his book Jennifer Government: Welcome to a place where enterprise has taken over enough that your last name is the name of the company where you work and a shoe manufacturer tries to earn “street cred” for his shoes by killing people who buy them. His subsequent efforts are no less interesting or imaginative. Barry’s another one where I’ve read all of his books and love them all.

If you’re looking for something new to read, maybe check some of these out. If you do, drop me a line and let me know what you think.

dotnet, testing comments edit

I recently had to do some performance profiler evaluation for .NET applications and I figured I’d share my results. Note that it’s as scientific as I could make a subjective review (e.g., “friendly UI” might mean something different to you than to me), but maybe it’ll help you out. Also, I’m not a “profiler expert” and, while I’ve used profilers before and understand generally what I’m looking at, this isn’t my primary job function.

The five profilers I tried out:

I put an explanation of what each feature “means” in tooltip form, so put your cursor over it if you don’t understand what I’m talking about. An “X” in the box means it has the feature.

Testing was done on a dual-2.8GHz processor machine running Windows Server 2008 R2 64-bit and 4GB RAM.

VSTS 2008

ANTS Perf 5.2

VTune 9.1

dotTrace 3.1

AQtime 6

User Interface

Visual Studio integration

X

X

X

Standalone application

X

X

X

X

Friendly/easy to use

X

X

X

Robust reporting

X

?

X

Measurement Style

Sampling

X

X

X

X

X

Instrumentation

X

X

X

X

X

Measurements Recorded

CPU time

X

X

X

X

Wall-clock time

X

X

X

X

X

Additional perf counters

X

X

Notes

This requires Visual Studio, which means you have to have VS installed on the machine running the app you’re profiling. That said, this was the easiest to get results from and the easiest to interpret.

In general this appeared to be the best balance between “robust” and “usable” but I couldn’t actually see the report that came out because it locked up the UI thread on the machine and ate 3GB of memory. I’ve asked about this in the forums. Turns out this is fixed in the next version, 6, currently in EAP.

I couldn’t actually get a profile to run using VTune since it complained of being “unable to determine the processor architecture.” As such, I don’t know how well the reporting works.

When I ran dotTrace 3.1 on a multi-proc system, I got several timings that came out with negative numbers (-1,000,289 msec?). You can fix this by setting the proc affinity for the thing you’re profiling. I tried a nightly build of dotTrace 4.0 and that’s fixed. dotTrace 4.0 will also let you profile a remote application - something the others don’t support.

AQtime has a lot of power behind it but lacks the usability of some of the other profilers. It appears that if you take the time to really tweak around on your profile project settings, you can get very specific data from an analysis run, but doing that tweaking isn’t a small feat. I spent a good hour figuring out how to profile an ASP.NET application in the VS dev server and setting it up. Also, while it very well may be due to my lack of experience with the tool, AQtime had the most noticeable impact on the application’s runtime performance. It took several minutes for the first page of my app to load in the browser.

For now, it looks like the VSTS profiler is my best bet. If I could figure out the UI problem with ANTS, or if dotTrace 4.0 was out, I’d say those options tie for my second choice. The VTune profiler seems to be the most… technical… but it also desperately needs a UI refresh and seems geared toward profiling unmanaged code, where managed code is a “nice to have” rather than a first-class feature.

UPDATE 1/21/2010: I added AQtime to the list of profilers I tried out. Also, I removed the “VS integration” checkmark from ANTS because, while it adds a menu entry to VS, all it does is start up the external application. I’m not counting that. Finally, I found out my ANTS problem is fixed in the next version, 6, currently in EAP. Since it’s not released, I still have to go with the VSTS profiler, but once it’s out, I’d vote ANTS.

gaming, playstation comments edit

GTA: Episodes from Liberty
City Over my holiday break I spent some time playing Grand Theft Auto 4: Episodes from Liberty City. I’m not quite finished with it, but I’ve gotten far enough that I have an opinion.

Let me give you a frame of reference so you understand where I’m coming from.

I’m a huge Grand Theft Auto fan. Whenever a new Grand Theft Auto comes out, I take a whole week off work and dedicate the entire week just to playing the game. I get the expensive edition with all the bells and whistles. I finished GTA4 with 100% completion. I am, as far as I can tell, the target market for Grand Theft Auto.

Given that, when I heard there were expansion packs coming for GTA4, I was really excited. That, the holiday season, and one of those frozen buckets of daiquiri and I’ve got the most awesome cheap vacation ever. They released it as separate downloads or as a self-contained disc (same price), so I got the disc (love that Xbox DRM), the strategy guide, and when vacation time came around, I was in.

There are two expansions: “The Lost and Damned” and “The Ballad of Gay Tony.” I have very different feelings on each expansion.

In “The Lost and Damned,” you play the leader of a biker gang. You go on several missions to fight rival gangs, to get money for your own gang, and to help out friends. The missions themselves are fairly standard GTA fare, but they’re fun. I was partial to the gun battles (there were several) since many were fairly large scale with lots of enemies. A couple of missions were difficult, but I never really struggled with them - I might have to run them two or three times, but I could get them. The feel of the whole thing was good and got you involved with the story. Very nice.

I did not play “The Lost and Damned” through to 100% completion. There were some race missions that were optional to the completion of the story and I’ve always absolutely despised race missions in any of the Grand Theft Auto games. Driving around the town at my own pace is fun, but the driving really isn’t the goal in my opinion; it’s a means to get you somewhere, so not having pressure when driving is key. The driving controls are pretty sloppy on most vehicles and shooting while driving takes some serious getting used to. Anyway, I didn’t do the races because I don’t like the race missions, but I suppose I could have if I really cared.

So, overall, I liked “The Lost and Damned.”

After “The Lost and Damned,” I moved on to “The Ballad of Gay Tony.” In that, you play a guy who runs some night clubs with a business partner, Gay Tony, who is always getting into trouble and you get to bail him out. I’m not done with it yet, but this one is where I start having some fairly strong opinions.

First off, I like the characters in the expansion a little better than the ones in “The Lost and Damned.” They’re a lot more colorful and more fun, so big plus for the story. I particularly like the additional tie-ins with the characters from the original GTA4 game. There were a few tie-ins in “The Lost and Damned,” but the connections with “The Ballad of Gay Tony” are, like the characters, more fun and colorful.

I also like the addition of the “base jumping/parachuting” activities. It reminds me of Grand Theft Auto: San Andreas, which was a really fun game.

That said, I’m actually pretty irritated with “The Ballad of Gay Tony” and here’s why:

They grade you on how well you did on each mission.

Whenever you complete a mission, you get this statistics screen that pops up and tells you percentage-wise how well you did. There are some [seemingly] arbitrary criteria that you’re supposed to fulfill to get 100% completion. Of course, you’re not told what the criteria are until after you’ve finished the mission, so there’s problem number one.

The real problem is that many missions are unreasonably difficult.

As it stands, on most missions I’m having to run them three, four, five times to even complete them. While I’ve played all the Grand Theft Auto games and invest quite a lot of time in them, I’m not 14 years old anymore. I don’t have the time or inclination to run, re-run, and re-re-run missions to get 100% on them. I’m not interested in (and possibly not even capable of) developing the Nintendo-timing snap-reflexes required to fulfill the criteria you won’t tell me about until after I’ve run the mission six times and barely completed it.

Not only that, but “grading me” on how well I did is a huge distraction. I’m not in the “sandbox environment” anymore, where I can do whatever I want or solve the mission however I see fit. Now I’m more on rails, having to do things within a predefined time limit using a specific set of resources in a specific way. That totally defeats the purpose of the thing, in my opinion, and makes it feel less like I’m my own character in my own environment and more like… well, more like I’m just playing a standard platformer. If I wanted that, I’d get the standard platform game and move on.

I won’t even get into the fact that you can’t save wherever you’d like to in GTA games - you have to save between missions and you have to go all the way back to your safehouse to do it. If you’re in the middle of a really difficult mission that takes 20 minutes to finish and you get killed at the 19th minute… well, too bad. Get killed on the way back to your safehouse? Tough cookies. (They did implement an “autosave” feature in GTA4 so you at least don’t lose your progress if you complete a mission, but still.) Yeah, that’s how it’s always been, but it doesn’t make it right.

I won’t even get into some of the tedious missions they added like “Club Management,” where you’re supposed to help manage a night club and basically walk around from room to room and get forced to “scan the floor for trouble” by looking around with a thumbstick. Sometimes you even get to go run errands for people like escorting a VIP from one club to another. No, thanks.

“The Ballad of Gay Tony” has turned GTA from a game into a chore. I don’t want to compete with other peoples’ standings on how well they did on the missions. I don’t want to be pulled out of the sandbox environment. I don’t want to “replay missions” to see if I can improve my score. I liked the “pass/fail” that was going on before… but now that there’s grading and achievements attached to your “percentage complete” on the missions, I’ll never get 100% on this thing, and really, I’m not interested. And I’m not interested in tedious crap that just eats up time but isn’t actually fun.

Should that matter to Rockstar? Yeah, it should. I’m not interested in getting 100% because it’s too hard, but I am a completionist, too, so not being able to get 100% irritates me. It makes me feel like I’ve been ripped off because I bought a game I want to finish but really won’t be able to. It’s frustrating and irritating.

Yeah, you can argue that it’s all in my head and I’m not being forced to get 100%, and that folks who want that additional challenge now get it and I should just ignore it. I just have to question how many folks actually wanted that challenge and whether that group of folks is really the target market. Maybe they are and I’m alone. I sure hope not. I like my vacations in Liberty City and I hope I don’t have to find somewhere else to go.

Net result: Go for “The Lost and Damned” but skip “The Ballad of Gay Tony.”

I’d love to be able to give this feedback to Rockstar somehow but I’m not sure how. If you know, leave it in the comments for me.