# Wednesday, 05 July 2006

When you have a "mystery" bug to solve, tracepoints are a vital part of your debugging arsenal. Single stepping and looking through code can be S-L-O-O-O-O-W and if you don't even know what you're looking for, it can consume hours and hours of effort. Tracepoints really speed things up. They're like breakpoints that don't break. In a way, they go back to the old "printf debugging" -- but you don't need to make code changes and recompile to change them.

To set a tracepoint, first set a breakpoint, then right-click on the red dot that appears in the margin and choose When Hit:

In the dialog that appears, click the Print A Message box and edit the starter message you are given. You can include any expression in braces and it will be evaluated when control reaches the tracepoint:

Leave the Continue Execution box checked so that you don't break. Tracepoints are identified by red diamonds instead of red dots:

The output from the tracepoints appears in the output window of your debug session:

You can set up something suspicious, let it run, then pore through the tracepoint output and see what you learn. It's a huge timesaver when you're tackling a "we don't even know where to start" bug. Plus, if the issue is related to threading or async issues in any way (and you know me, I keep preaching we will all be facing async issues eventually) then you don't have to worry that pausing execution suppresses the collisions. I recently helped a client solve a big hairy this-stuff-fails-for-our-biggest-customer-only bug using tracepoints... and a few other tricks I will cover in upcoming posts.

Try it!

Wednesday, 05 July 2006 15:54:34 (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
# Tuesday, 04 July 2006

Is a blog just for reading? Some blogs have way more life in the comments than the original posts (think Mini Microsoft for example, and I'm not saying the original posts are lifeless, just that the comments really take it up a notch) while others (like the one you're reading now) have very few comments. I like to think that people wander off and think about what they read, or go fix the problem in their code (hello all you broke-your-sql-reporting-services-installation people, I see your search terms in my activity list) and think nicely of me.

But here's a rather interesting blog entry. It's one word long. And that word is not all that unusual. Now I love self-reference, Godel, Escher, Bach etc, so I laughed. And I'm not alone. The commenters got it right away, drawing on a long tradition back to Usenet (at least 20 years) and then bringing in some more recent traditions. Good fun for as long as you can stand it.


Tuesday, 04 July 2006 21:32:03 (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
# Monday, 03 July 2006

From the "did you know" department: Aero is (sort of) AERO because it actually stands for "Authentic, Energetic, Reflective and Open".

These are words that can be interpreted however you like. Does authentic mean "not fake" or does it mean "true to the thoughts the user has about how to interact with the OS?" How can a UI be energetic? Does that just mean lots of bright colours, glowing jelly buttons, and animations? What does the UI reflect? And open to what?

I will say this though, they are all positive and pleasant words, and if a team held those words up as goals while working on software for me, I would expect that they would make me pleasant software. In a UI, that's a good thing.


Monday, 03 July 2006 20:56:43 (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
# Sunday, 02 July 2006

We've all heard that we shouldn't model ourselves against pictures we see in magazines, because "they're all airbrushed and retouched". But you won't believe how true that is until you check out this portfolio by a fellow who does it for a living. He swaps new pictures in from time to time,  but there's pretty well always some excellent eye bag removing, skin smoothing, and general thinning.

Before:  After:

He has a nice effect on the site: first you see the "after" picture as it was used in print, then when you mouseover you see the original. Wow! Bags pop out under eyes, breasts move down, wattle, wrinkles, and pimples appear. Move the mouse off and they're back to perfection. Just astonishing. He also tackles "the clothes didn't really fit the model" and "the background is all wrong" as well as "they couldn't all come to the studio on the same day" but it's the anti-aging work I found most astonishing.

In case you had any doubt how much hard work it is to do, somebody called Mizuno lays out in a dozen steps or so how to soften up skin features to do just the unpimpling:

Before: After:

The after looks a little fake here in a close-crop, but when you see the whole picture she just looks gorgeous. Now we know.

Sunday, 02 July 2006 20:50:44 (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
# Saturday, 01 July 2006

Nikola Dudar of the C++ team seems to have decided to catch up his blogging deficit. In a single day he covered:

Plus a meta-post about comments. Keep it up Nikola!


Saturday, 01 July 2006 20:33:46 (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
# Friday, 30 June 2006

Those of you who were interested in my loader lock topic at Tech Ed this year should probably get this whitepaper from Windows Hardware Developer Central (not actually a place I hang out regularly.) It's a downloadable Word document (8 pages) that tackles things like "what you should not do from DllMain" (this list is a page long), deadlocks, and threading considerations (and remember, we are all going to have to tackle threading considerations eventually). While it doesn't say it's C++-specific advice, in what other language could you "Use the memory management function from the dynamic C Run-Time (CRT)" or "Set global pointers to NULL, putting off the initialization of dynamic members"? It even has Vista-specific advice.


Friday, 30 June 2006 07:14:35 (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
# Thursday, 29 June 2006

Catherine Heller, Windows Vista Technical Evangelist, is now blogging. She started during TechEd just before her session (one of the very few I attended) and so far has covered tips for interop to native APIs and some Search material. I'm looking forward to more as the summer progresses.


Thursday, 29 June 2006 07:03:23 (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
# Wednesday, 28 June 2006

Recently the French government launched a geo-portal (GeoPortail en francais) with satellite pictures and maps of France and France-associated places around the world. The detail is pretty cool. Here's Le Château de Chenonceau:

Here's the smaller of the two formal gardens, to the left in the arial shot, as seen from inside the Château:

That one's not from the website, but from my own camera. It gives you a good idea of the scale the satellites can achieve. The building itself is amazing -- it actually spans the river. Worth a detour to experience if you find yourself on The Continent.


Wednesday, 28 June 2006 15:22:21 (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
# Tuesday, 27 June 2006

The seventh monthly DemoCamp in Toronto will be July 4th at No Regrets in Toronto. It's a pretty simple concept: no-powerpoint-allowed demos of working product, time limit 15 minutes, followed by socializing. And they do this every month! There's room for 150 people, and according to the wiki 90 people are signed up already, so there's probably room for you, too. Watch other people demo (so you can learn how to construct your own super cool 10 minute presentation, and believe me, ten minutes is HARD), see what else is going on in your world, tap into some of Toronto's energy... I can't make this one but I will watch for the August one for sure!


Tuesday, 27 June 2006 14:43:45 (Eastern Daylight Time, UTC-04:00)  #    Comments [0]