Thursday, November 26, 2009

I teach a course at Trent University on Object Oriented Analysis and Design with UML, and have done since the last century. I teach my students how to make decisions about the systems they will some day build, and how to draw diagrams that communicate those decisions to others. We find as often as not that the act of trying to make the diagram leads us through the thought processes that are needed to make good decisions. That brings huge value even if you never show the diagram to anyone else and never update it.

I've never been a big fan of "technical documentation" in the form of a giant binder that some poor person has to keep up to date any time the code changes. If you want to know all the methods of the Employee class, why not use Intellisense or the Object Browser or the like? But that doesn't mean I don't like making those diagrams at the beginning, when they help me to do my thinking. I also make them when I have something to explain, including when I bring a new person onto a project. So how much do I love this quote?

the UML ... was to be a language for visualizing, specifying, constructing, and documenting the artifacts of a software-intensive system—in short, a graphical language to help reason about the design of a system as it unfolds. Most diagrams should be thrown away, but there are a few that should be preserved, and in all, one should only use a graphical notation for those things that cannot easily be reasoned about in code.

It's in an interview I already linked to, but it took Patrick Smacchia to point our those sentences to me. As I wind up the last few weeks of the course, it's nice to know that my position on the point of the diagrams and deliverables is aligned with one of my heroes.

Kate

11/26/2009 8:38:10 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, November 18, 2009

Developer Night in Canada is a fun podcast from John Bristowe and Joey deVilla of Microsoft Canada.

Episode 1 - my friend Joel Semeniuk. He's talking about the tool formerly known as Team Systems, and about the way he makes software. The Work Item Manager I told you about gets a mention too. Worth a listen!

Kate

11/18/2009 2:44:19 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, November 02, 2009

I remember when Design Patterns first came out. I already owned A Pattern Language - The Timeless Way of Building (an absolutely huge and fascinating book) and so I immediately "got" what Design Patterns was for. [And yes, I have used parts of Timeless Way to guide house-buying and house-renovating decisions.] I couldn't wait to get my hands on it.The member of staff I lent it to ended up reading it in the bath for hours. Geeks are funny, aren't we?

Well it's been 15 years since then. How does the book stack up?

Pretty well, really. Reuse has sort of moved from something we try to do project-to-project in our code to something that frameworks give us. But reusing design has always been a huge timesaver compared to reusing code, and that's this book in a nutshell.

Now Larry O'Brien has interviewed three of the Gang of Four and Grady Booch. You definitely need to read both of these, but I'll just give you some "taster" quotes:

  • "...writing 100K lines of new code isn't that much easier now than it was 15 years ago. It will do a lot more, but costs the same."
  • " The most important artifact any development team produces is raw, running, naked code."

Kate

11/2/2009 4:08:36 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Saturday, October 31, 2009

Have you ever heard someone make a definitive statement about a particular feature of Visual Studio or the .NET Framework that you knew just wasn't true? Did you ever wish for a Snopes equivalent you could send them to? Well, your wish has been granted.

Give it a whirl and see the official position on some popular (but unfounded) beliefs.

Kate

10/31/2009 3:32:26 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, October 29, 2009

I have now finally been using the Internet for more than half its existence. That's 20 of its 40 years. Back in 1969 the first few bytes were sent between networks (hence the name, it was a network of networks) as part, believe it or not, of a plan to save money. The BBC has a nice article about it. The Globe and Mail tosses in a quick summary of the history of the internet, which reminds me to link to my post that points to a more comprehensive summary in Vanity Fair.

If you think the Internet is just the web, all I can say is you missed a golden age. These days it's always September. I know I prefer what we have now, just as I can still miss what we had then.

Kate

10/29/2009 12:57:28 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, October 17, 2009
As C++ developers, we have a lot of options about how to link to libraries we use. We read sometimes that if we link statically, we will have more work to do if there's ever a security hole in the library, since we'll have to redeploy our app rather than just relying on the users to get the new library and use it dynamically. There's a great example of that in the ATL story that is now just wrapping up. A problem was discovered in July, and emergency updates were promptly released - just a day before the guys who discovered the problem spoke about it publicly. An article that same day pointed out that the error was almost a typo - an extra & in an expression - and warned that the patches "do not automatically fix software that was developed using the buggy ATL. Instead, vendors -- Microsoft as well as third-party firms -- must use the patched Visual Studio to recompile their code, then distribute the new, secure software to users." Well finally, Microsoft has finished their part of it with updates for the parts of Office that were using the old ATL. Have you done all of yours?

Kate

ps: love the "related twitters" at the bottom of the article - people may not tweet about the Active Template Library very often, but they sure do mention a certain airport / city that uses the same abbreviation :-)

10/17/2009 12:13:47 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, October 13, 2009

Esther Schindler and I go way back. She's a great editor and I never quite have time to write for her, though I've come close a time or two. Recently, she wrote:

I decided to compile a list for developers, designers, and other techies of blogs-worth-reading whose authors just-so-happen-to-be (mostly) women. I'm a strong believer in women being more visible; we tend to fade into the background, too much, and to apologize for our achievements. (That's one reason why women earn less than men; I'll get into that discussion another time.) Enumerating women-to-admire felt like a good way to highlight smart people who have wisdom to share.

I am delighted to see my friends on this list, and to be introduced to new blogs as well. Esther was even nice enough to include me on her list. Take a look and see if you can make a new friend, or at least a new habit.

Kate

10/13/2009 11:29:52 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, October 01, 2009

I came across a very insightful post from Paul Graham. Many of us know a manager who literally has meetings booked all day back to back, sometimes double or even triple booked. These are people who book meetings with themselves in order to have a block of time show busy in their schedule so they can do some non-meeting work. They end up with a week like this:

But what I hadn't thought about was how that changes the way they think about time, and about using up someone else's. Paul says:

You can block off several hours for a single task if you need to, but by default you change what you're doing every hour. When you use time that way, it's merely a practical problem to meet with someone. Find an open slot in your schedule, book them, and you're done.

Thing is, lots of us work on a completely different schedule - a maker's schedule. We need long chunks of time to get into flow and to take advantage of that state to produce. A scheduled interruption, in the form of a meeting, can ruin an entire morning or afternoon. It may not be logical and it may irritate other people, but it's still true. Read Paul's article to be convinced - he articulates this beautifully and he really crystallized the issue for me.

I find myself slowly moving into a manager's schedule these days. I'm typically juggling a lot of projects, I am a manager, I have a lot of meetings and conference calls, and I spend less and less time heads down creating. This has caused some conflict with other people in my company who are still on maker's schedules. It has also caused conflict for me - when I have a maker-style day, I don't take care of the usual zillion little things like returning phone calls, answering emails and so on, and when I have a manager-style day, I don't produce as much "stuff" - code, decks, demo scripts, proposals, or whatever - as I otherwise would. Having names for the concepts should let me understand what's going on a whole lot better. Thanks Paul!

Kate

10/1/2009 11:32:57 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 29, 2009

I read (in the blog of one of his people) that Bill Wagner has won yet another award. This one is from Automation Alley, an organization that represents technology firms in southern Michigan. He was honoured in the Emerging Leader of the Year category. According to their nomination form, the award "recognizes an individual with a strong commitment to the future growth and success of Southeast Michigan’s technology community." They expect a Director or VP who has "numerous accomplishments to technology company, industry and/or market", shows "proven leadership" and is "active and respected in technology community". Yep, sounds like Bill to me! One of the delights of being an RD is that it brings people like Bill into my work life. Congratulations!

Kate

9/29/2009 11:15:47 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 25, 2009

Scott Ambler says a lot of "detailed specifications" are just "detailed speculations". You think people might need some particular feature, so you write some very detailed material that says "you could click this button to confirm it" and "there could be this grid that would show you all the pending requests" and so on, and that also says "we think that if we code everything the way we've just said, it will take X hours/days/weeks of effort over Y elapsed days/weeks/months/years." And tempting as it is to say that all this is some sort of binding contract signed in blood, the truth is we're all guessing. Guessing what users might need, guessing what might be a good way to give them that (both in terms of what it looks like and in terms of how it would be coded), and guessing how hard or easy it would turn out to be. We're speculating. And the users, they're speculating too, about how they would use that feature and how important it is to them. It's an interesting thought.

Don't get me wrong. We write specs. We also guess what things will cost. But we don't write the kind of super-detailed, prototype-heavy, let's-list-every-field-on-the-report stuff until that last responsible moment. Do you?

Kate

9/25/2009 6:45:59 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, September 13, 2009

I'm a big Joey deVilla fan (known fact.) I'm also a big fan of the book "How to Work a Room", which inspired a line of thought that led to one of my earliest blog posts, over five years ago - What You Want to Get Could be What I Need to Give. So if Joey is quoting "How to Work a Room", you've got yourself a must-read. And then he's doing so while discussing a conference I'm going to speak at!

Why do you go to a conference instead of just watching the sessions online? So you can meet people. But gosh, when you're first starting, having conversations at conferences can be HARD. And it gets harder if you start beating yourself up for not doing it. Once you start doing it, and start reaping the benefits, you'll do it more and more, trust me. But to get started, relax. It wouldn't hurt to follow Joey's two big tips: "It’s especially important to talk to people you don’t know or who are outside your usual circle" and "The best way to make weak ties at a conference is to work the room." He follows that with 9 specific things you can do.The last one reminds me of another post from the same era in my blog: Know What You Want From the Meeting. They're all excellent and I really recommend you come to TechDays and put them into action!

Kate

9/13/2009 6:25:08 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 01, 2009
Here's a recording of a panel at Tech Ed this summer featuring four dear friends of mine: Stephen Forte, Joel Semeniuk, Chris Menegay, and Richard Campbell. The title is "Agile: A Process or an Excuse?" but they don't really answer that question. Instead they talk about what Agile means to them, what to say if people argue about whether you're agile or not, and the role of tooling including Visual Studio Team Systems, sticky notes, really large sticky notes, and Excel spreadsheets. They don't agree on all of it, which makes it a good panel, but the insight is useful. Most interesting to me: Joel and Chris have been in the "I am the guy you are making the software for" role on some internal projects - and found themselves doing everything that your usual contact over in the business unit does when you ask for requirements - forgetting some, being vague, leaving out special cases, and demanding changes because of changes in the business model out in the real world. Users don't do these things because they don't know any better; they do them because that's how life is. An agile approach lets you live in that reality instead of bemoaning the fact that no-one will stick to the things they signed two years ago. I listened on fast speed, but I suggest you only do that if you've spent a lot of time listening to these four because they're pretty fast talkers to begin with, and faster still when they get excited about a topic.

Kate

9/1/2009 9:37:34 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, August 28, 2009
Alan Skorkin reminds us that much of what drives current software development process came from the more general study of process for all kinds of work, including manufacturing. When you decide to adopt a particular process, you do so to reach a goal and for that vast majority of businesses, that goal is productivity - more profit per time period. (For a few very small operations, less time period to earn the profit / income sounds far more humane, but is still based on a desire for higher productivity.) Whenever you adopt a process instead of just telling your staff to do whatever you want, it's because you don't think they would be as productive left to their own devices as they would be under the direction of the process.

As Alan points out, there are two very different thoughts behind this basic position. One says that workers are lazy and shiftless. They'd rather chitchat, smoke, or daydream than produce what management wants them to produce. Processes built on this thought are all about measuring and controlling and proving that people have or haven't done what they should have done. The second, christened Theory Y in contrast to the first, which got dubbed Theory X in order to tell the two apart, says that workers are much happier when they know they are productive, and need management to help them achieve productivity as a co-operative goal. Processes built on this thought are full of collaborative work and empowering and the like.

He goes on to draw some specific conclusions about Lean that I will leave aside. I think it's useful to look at the process you work with day to day and ask yourself - is this process founded on Theory X or Theory Y? What image does the management at your firm have of the workers at your firm? Does process control them or support them? Is the motivation for workers assumed to come from inside themselves, or to be imposed by management? No matter what management says about what developers can and can't do, the process you work with will tell you their founding principle. It might be an eye opener to think about it like that.

Kate

8/28/2009 1:35:41 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, August 26, 2009
It wasn't long ago everyone was talking about a whole new way of working. It started with telecommuting in the 90's, but spread in this century to something far bigger. Remote work as a way of life, virtual teams, outsourcing, offshoring ... the scale just kept growing and the savings for companies appeared to be at least partly met by happy staff, whether that was a guy in the city who didn't have to spend 90 minutes each way in traffic, or a guy who was able to keep living in his small town while working for the big city firm so far away, or even a guy in a developing country who was able to earn more than his neighbours and follow the lure of high tech and problem solving at a time when no firms in that country were offering those jobs. I know many people in the big cities and the developed countries lost their jobs to those people, and I know it wasn't always simple to find traditional employment once the world of work started to change. Still, the world and the way many people in it earn a living changed and will not be changing back.

That said, in the mid 90s everyone I knew who was associated with any of this "new way of working" had come to realize it wasn't just a fire and forget sort of thing. You had to communicate a lot. And while technology made some ways of communication simple and cheap, so that video calls and conference calls and instant messenger and desktop sharing and so on are all vital, it couldn't do it all. You have to get face to face still, and you have to do it regularly. I recently finished a 10 month contract for clients three thousand miles away. I did the vast majority of the work from here, and had phone calls and livemeetings many times a week. But every 4 to 6 weeks I got on a plane and I went there. And wow, the work we got done in those few days! Mini hallway meetings, lunches, dinners -- I typically could "touch" half the project participants in just two or three days, and solve seemingly intractable problems by going to people's offices and listening to them and looking at their body language and telling them they could trust me or asking them what the real problem was. It made such a huge difference to the success of the project. I didn't get paid for the time I spent travelling to them, or the nights spent away from my family, but I gladly invested that time to make everything go smoothly and to be a successful remote worker.

Some other folks have noticed this too, and in a far more systematic way. How's this for a conclusion: "... common workplace-relationship problems, such as broken commitments, mistrust and misrepresentation of information, occur more than twice as often with virtual teams, as opposed to teams located in the same building. " Yikes! Apparently it's partly because things we do when we're upset with people work well if you see if each other regularly, but make things worse if you're apart. Or this useful summary: "teams are a lot more effective when they're working with their friends in another country than when they're working with those stupid offshore idiots who never understand our designs or requirements." So in that context, what could be a worse way of saving money than lowering the travel budget to zero and not letting people visit each other any more?

Yet that is exactly what's happening in a lot of companies. If it's happening in yours, do something about it. You need to visit your colleagues. If not, when your projects go pear-shaped, you may find the whole concept of virtual teams gets thrown out with it. And that would be a real shame.

Kate

8/26/2009 1:53:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, August 18, 2009
I've read a few articles lately that have no praise for the praise sandwich. If you haven't heard that name before, it refers to something like this:
Joe, I really like the confidence and energy you bring to your work. But yesterday's outburst was unprofessional and frankly unacceptable. It's the sort of thing that could get you fired. But you're such a smart guy that I'm confident you'll never do anything like that again. You're an important part of the team and we're all glad you work here.
You start out by saying something nice, then criticize, then say something nice again to end the meeting on a positive note. So what's wrong with that? Well partly it's all the "but" in there. I've talked about that before. There's more to it, though. Esther Derby says it "tends to erode trust in the feedback givers intentions, and once that's gone, there's not much chance any useful information will get through" which is a very good point. Her advice about how to deliver criticism is very good, most especially "don't sell past the close." Art Petty says it is "insulting to the receiver and borderline deceitful" and is really about making the criticizer feel better, not the recipient. Of his tips, I especially like "link the issue to business impact" - one of the real strengths the boss brings to any situation is the extra information about the consequences of errors. I have found over the years that people who write code all day really don't see a problem with broken links or bad images on live websites, because it still works and it's not like there was a code problem. That's just one example of course, but if you want to change someone's behaviour, it's important that they actually understand why it's truly a problem.

I couldn't count the number of times I've had to tell someone they really screwed up. I know there were times it was as little as two words. After establishing the facts of the matter, I once just sighed and said "Not cool." That was all that employee needed to be told. I've also had very long and heated conversations that did not result in changed behaviour. These days I go for shorter over longer. And I don't do sandwiches.

Kate

8/18/2009 9:23:47 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, August 14, 2009
What language do you think this post by Jeff Atwood refers to?
There are over 220 billion lines of <language> in existence, a figure which equates to around 80% of the world's actively used code. There are estimated to be over a million <language> programmers in the world today. Most impressive perhaps, is that 200 times as many <language> transactions take place each day than Google searches - a figure which puts the influence of Web 2.0 into stark perspective.
Wow. 220 billion-with-a-b? B as in Business? As in Business-Oriented-Language? You know, the only thing I like about COBOL (and I have written precisely one COBOL program in the three decades I've been paid to program) is that it made it possible to have a language called SNOBOL.

The comments are full of folks who are maintaining 30 year old apps with a million lines of code, but the thing about billion-with-a-b is that you need 220,000 such folks to hit that number, and what's more as Larry O'Brien points out 20 years ago folks said there were 30 billion lines, and while I can agree that existing apps are being maintained, I don't think there are 7 times as many lines of COBOL out there now as there were at its peak.

But that's not my point. My points is that when you live at the leading edge, the bleeding edge, you forget a really important rule: edges are thin. The handful of us who are moving our apps to 4.0 now, who are complaining about an incompatibility between our Visual Studio 2010 beta and our Office 2010 beta, who are using a language invented this century, are dwarfed by folks who have been using the same tools and the same languages throughout their entire career. These people are invisible because they don't come to conferences, attend user group meetings, buy programming books, or read blogs. Heck, at one of my clients, the AS/400 guys sat off to the side and behind a little wall of cubicle partitions that was double the height of everyone else's. Really. They also never came to all-hands meetings and were exempt from the company-wide .NET training I delivered.

So do these "dark matter" developers matter to the "bleeding edge" developers? I think they do. For one thing, when you have your shiny and exciting idea to change everything about the way some software works, these guys can cancel your whole project with one or two sentences. For another, they are likely the only ones who understand the data format, the business rules as actually coded, and the special cases that come up every 15 to 20 years. Not to mention they can work the text editor. If you find yourself in a situation with some COBOL (or equivalent) developers in it, don't ever tell them you didn't think they existed any more. That's my tip to you.

Kate

8/14/2009 6:39:40 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, August 10, 2009



Of course the most important sessions at PDC couldn't possibly be announced yet. The best are the ones that are TBD in the session list and schedule right up until the keynote. That's how you know something big is going to be announced. Imagine something where just hearing its code name, just knowing who was going to give the sessions, or even a single sentence of description would spoil the whole announcement. Those are the sessions you go to PDC for, so it's a bit like a Christmas present ... you can't know in advance what it will be.

But it's a four day conference with a lot of sessions and some of them can be announced in advance. I can see that this year some folks have decided to have slightly more interesting session titles (along with the more traditional titles):
  • Zero to Awesome in Nothing Flat: The Microsoft Web Platform and You
  • Windows Workflow Foundation 4 from the Inside Out
  • Windows Identity Foundation Overview
  • Windows 7 and Windows Server 2008 R2 Kernel Changes
  • Using Classification for Data Security and Data Management
  • Under the Hood with Microsoft SharePoint 2010 Programmability
  • The State of Parallel Programming
  • The DirectX 11 Compute Shader
  • Simplifying Application Packaging and Deployment with Microsoft SQL Server 2008 R2
  • Petabytes for Peanuts! Making Sense Out of “Ambient” Data.
  • Microsoft Visual C++ 2010: The "Accelerated" Way of Building Applications
  • Microsoft Unified Communications: Developer Platform Futures
  • Microsoft Silverlight Roadmap and Futures
  • Microsoft Silverlight 3 Advanced Performance and Profiling Techniques
  • Manycore and the Microsoft .NET Framework 4: A Match Made in Microsoft Visual Studio 2010
  • Development Best Practices and Patterns for Using Microsoft SQL Azure Databases
  • Developing xRM Solutions Using Windows Azure
  • Developing .NET Managed Applications Using the Office 2010 Developer Platform
  • Developer Patterns to Integrate Microsoft Silverlight 3.0 with Microsoft SharePoint 2010
  • Data Programming and Modeling for the Microsoft .NET Developer
  • Building Applications for the Windows Azure Platform
  • Automating “Done Done” in the Dev-to-Test Workflow with Microsoft Visual Studio Team System 2010
  • Accelerating Applications Using Windows HPC Server 2008

My favourite title in there is definitely "Manycore and the Microsoft .NET Framework 4: A Match Made in Microsoft Visual Studio 2010" but there are other contenders for sure. As for the topics themselves, I think many of us have still not given concurrency/parallelism/manycore the attention it deserves, and all of us are guilty of compartmentalizing what we learn about so I bet you have probably ignored something (Silverlight, or SharePoint, or Azure, or the full power of VSTS). That means these sessions alone will make us better devs. If these titles are enough to get you signed up, do it now while you can get a $500 (US) discount - from $2095 for the whole conference (except workshops) down to $1595 until Sept 15th. Wait till Labour Day to start bugging your boss about it and the discount will be gone, plus the plane tickets will be more expensive. (Oh, if you're a student or teacher, you pay only $595, which gives you an astonishing way to get head and shoulders above those around you.)

There are also some seriously intelligent workshops scheduled:
  • Getting the most out of Silverlight 3
  • Patterns of Parallel Programming
  • Developing Quality Software using Visual Studio Team System 2010
  • Architecting and Developing for Windows Azure
  • Microsoft Technology Roadmap
  • Software in the Energy Economy
  • Developing Microsoft BI Applications - The How and The Why
Four of those seven workshops are being given by RDs, meaning you'll get real world experience along with the technical product knowledge. What a way to get caught up on something you weren't paying attention to!

Going to conferences is getting harder and harder to justify in this climate. But that doesn't mean you stop going to conferences - it means you only go to those that are relevant to your work and offer amazing value (content, people, atmosphere, and otherwise-unavailable bits) in return for your registration fee, travel, and time away from work. The PDC offers just that for devs on the Microsoft stack. It's the only conference I've ever paid my own money to get to. Be there!

Kate
8/10/2009 11:49:32 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, August 02, 2009
I hate SharePoint sometimes. It's powerful, and strong, and free(ish) and does an amazing job. If you just want to install it and use it, there's really nothing to complain about. But it's greatest strength, and my greatest user-upper of swearwords, is that you can program against it. With each release, whatever I swore about last time is magically fixed (RunWithElevatedPrivileges FTW) but a whole pile of new misery sneaks in out of nowhere. (Well, and CAML remains, but I guess we can't do anything about that.) It's usually related to security, but not always, and the thing is that debugging it is always like surgery with oven mitts on.

I had a situation where I wanted to find the item you just added. Took a little searching, but I found it:

query.Query = "<Where><Eq><FieldRef Name='" & list.Fields.Item("Created By").InternalName & _
                "'/><Value Type='User'>" & SPContext.Current.Web.CurrentUser.Name & "</Value></Eq></Where>" & _
            "<OrderBy><FieldRef Name='Created' Ascending='FALSE' /></OrderBy>"
items = list.GetItems(query)
The first entry in items is the thing you most recently added. OK, fine. But we have event receivers on these lists, and they go off asynchronously. That means that right after you saved an item, while the receiver is still processing, the item isn't returned by the query.

Well that made me grumpy but I understood, so I made a loop, and if the first entry in items wasn't recent enough (say, in the last two minutes) I would have a little sleep and then ask again. But no matter how long I waited (even 20 minutes!) this code never would find the item. Oh, there was swearing, you can be sure of that.

I decided that SharePoint must be caching the query results. But searching for things like "SPListItemCollection cache" just got me helpful tips on caching these results myself, some thread safety issues, and the like. For example, this MSDN article says

You might try to increase performance and memory usage by caching SPListItemCollection objects that are returned from queries. In general, this is a good practice; however, the SPListItemCollection object contains an embedded SPWeb object that is not thread safe and should not be cached.

Does that match up well with what I am seeing - always the identical results from this query-in-a-loop even though I know the underlying list has changed while the loop was running? It does not.

Then I found two blog entries by Jeff Crossett: first the complaint, and then the solution. He's right. And when I implemented his hack:

' use a random value in query so we don't get cached.
randomValue = generator.Next(100, 1000000000)
query.Query = "<Where><And><Eq><FieldRef Name='" & list.Fields.Item("Created By").InternalName & _
                "'/><Value Type='User'>" & SPContext.Current.Web.CurrentUser.Name & "</Value></Eq><Neq>" & _
                "<FieldRef Name='Title' /><Value Type='Text'>" & randomValue.ToString & "</Value>" & _
                "</Neq></And></Where>" & _
            "<OrderBy><FieldRef Name='Created' Ascending='FALSE' /></OrderBy>"
items = list.GetItems(query)

We all lived happily ever after. Well, until the next WTF that SharePoint throws my way. I am doing amazing things with this product. My customers would pay more for their software if SharePoint didn't exist. But man, sometimes it is HARD.

Kate

8/2/2009 8:26:35 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, July 13, 2009

A whole pile of really smart people, many of whom I am lucky enough to call my friends, have contributed to a new eBook on development topics. Check these titles:

  • Working with Brownfield Code by Donald Belcham (Microsoft MVP)
  • Beyond C# and VB by Ted Neward (Microsoft MVP)
  • Remaining Valuable to Employers featuring Barry Gervin, Billy Hollis, Bruce Johnson, Scott Howlett, Adam Cogan, and Jonathan Zuck
  • All I Wanted Was My Data by Barry Gervin (Microsoft Regional Director and MVP)
  • Efficiency Upgrade by Derek Hatchard (Microsoft Regional Director and MVP)
  • Getting Started with Continuous Integration by Sondre Bjellås (Microsoft Regional Director and MVP)
  • On Strike at the Software Factory by Daniel Crenna (Microsoft MVP)
  • C# Features You Should Be Using by Ted Neward (Microsoft MVP)
  • Accelerate Your Coding with Code Snippets by Brian Noyes (Microsoft Regional Director and MVP)
  • Is Silverlight 2 Ready for Business Applications? by Jonas Follesø (Microsoft Regional Director and MVP)
  • Innovate with Silverlight 2 by Daniel Crenna (Microsoft MVP)
  • Real World WPF: Rich UI + HD by Gill Cleeren (Microsoft Regional Director and MVP)
  • Hidden Talents by Peter Jones
  • Creating Useful Installers with Custom Actions by Christian Jacob
  • Banking with XML by Peter Jones
  • Sending Email by Derek Hatchard (Microsoft Regional Director and MVP)

Also, it has comics in it. Really. And if you prefer a printed copy, you can order one (black and white or colour) at a nominal cost. And these aren't little blog posts, they're decent length articles. All told the PDF is 132 pages. Each article conveys, on top of the technical information you'd expect, a glimpse into the personality and style of the author. A highly recommended download and read.

Update: This whole recommending thing works even better when you include a link: http://devshaped.com/book. Slow brain day today, I guess.

Kate

7/13/2009 1:00:57 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Thursday, July 09, 2009

We have a long running Agile project underway. Every month or so we deliver a new release, then work with the customer to decide what will be in the next release. Unlike many Agile shops, this isn't our only project - we have other small software development projects, mentoring work, and so on that take up about two thirds of the team's time, leaving one third for this project. What's more, we do this as a little fixed bid project every month, and both my bottom line and the customer are happy with the cost of each release. The key to that, of course, is accurate estimation of the effort in each iteration.

In some ways we have it easy now. The client has working code, and each month all we need to estimate are the changes and additions to that code. But how would it be if we were starting from nothing and planning to build a whole big system over the course of a year or so, for someone who wanted a fixed cost up front and a reasonably complete list of features to be delivered for that cost? Stephen Forte gave a talk recently on just that topic. Plenty of good ideas and a fun listen.

Kate

7/9/2009 7:38:19 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, July 01, 2009

So I guess I am totally having a "get off my lawn" moment here. I read, on a blog I generally enjoy reading, the following rant about "bad customer service":

  • Why am I still required to fill out my personal details (city, birth date, job title) while registering on web sites, when all they need to do is fetch that data from my LinkedIn page?
  • Why does my new Internet provider give me a new email address (which I won't use), requiring me to read that mailbox regularly for service updates? Why not send me tweets?
  • Why do I have to go to the web site of my vendor of contact lenses to re-order my monthly set of lenses? Why not enable me to send a "reorder" message through Facebook?
  • Why does the agile 2009 conference require that I upload my presentation to their site, in PDF form with maximum size of 5 MB? Why not integrate with the much more advanced SlideShare where I already have an account?
  • Why do I get offers for products that I clearly don't want or that I already own, which can be easily deduced from my reviews, ratings, and rantings on various social sites?

Prior to this bulleted list was a complaint that an ISP hadn't magically noticed that some emails weren't reaching the ranter, and didn't email about it, or didn't go figure out what @tag to use in a Tweet so that their customer would know there was a problem with some emails. I mean really, "send me a tweet"? Tweets are broadcast messages, not one-on-one communication, aren't they?

Good heaven. If I went to a random web site and on the registration page entered "Kate Gregory" (or "Barack Obama") and it trundled off to LinkedIn and filled in where I live, what I do, my birthday etc I would be majorly creeped out and want nothing to do with that web site. Maybe, just maybe, I would be ok with a button that said "go find this out on the public web" but I doubt it. I think OpenID is a better way to go, and I do appreciate that most Microsoft sites now just let me use my Live ID, but for sites with no business relationship to share what they know about me just creeps me right out. Reorder contact lenses on Facebook? What does Facebook have to do with buying stuff from completely unrelated third parties? Why would it be a good thing to put intermediaries (Facebook, Twitter etc) in all my transactions? The big excitement of Web 1.0 was that it took intermediaries out of the picture and let me interact directly with the producers of the things I wanted to buy. One of the major inconveniences of Web 2.0 is excited under-30's (sorry to generalize, a handful of over-30's are excited like this too) making me sign up for yet another account on yet another Social Networking Silver Bullet that they are going to use to manage their event/project/party/virtual team.

I disagree with the fourth bullet, too. I would much rather just be told where to upload my stuff and be done with it. I also have some empathy for folks who want to use the same way to communicate with everyone on a reasonably large list. Can you imagine the job (probably unpaid in his or her free time) of the conference organizer who says "everybody please put your slides somewhere, anywhere on the web that works for you, and send me the link, and here are links to free places you can put your slides in case you're not on SlideShare." And this organizer probably still has to run the upload-your-slides here site for everyone who doesn't have an account somewhere else. And has to accept and send not just emails about it (with or without links) but also tweets, blog posts, and comments on one speaker's YouTube channel and another speaker's CodePlex project home page, because why should they be obliged to look in more than one place for attempts to communicate? And then this poor organizer needs to know how to download from 10 or 20 different document sharing sites, and register for notifications if they're changed, because the speaker figures uploading new docs and not telling anyone will be fine, since after all the site sends notifications if they're changed.

The last bullet is hilarious. Dude, I get offers for things that I clearly don't want. The spammers can't be bothered to check my gender or what country I live in. You really think they're going to check your MySpace to see you already tried acai berry and whether it worked for you or not?

But under all that rankling and disagreeing is the germ of a really important truth. Just as David Platt likes to say "Know your Customer, for he is not you", I can see that I might not offer enough options to the millennials, and they might not offer enough options to my and my fellow post-boomers. It's an interesting culture clash considering we write software for each other, and one that's worth thinking about. If a customer service department doesn't offer service the way you want it, if the conference speaker wrangler doesn't wrangle speakers the way they want to be wrangled, if my software doesn't let you talk back to me the way you want to talk back to me and if I don't listen when you talk the way you want to, then that's a problem. Hmmm.

Kate

7/1/2009 4:51:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [3]
 Monday, June 29, 2009

I'm a big Ramsay's Kitchen Nightmares fan. I wildly prefer the English series (also true for The Apprentice and several other "reality" shows) because he cares more on those than on the US-edited ones. I'm also a big Steve Clayton fan. So when Steve says "It was like watching an episode of Ramsay’s Kitchen Nightmares (minus swearing). I watched the first episode start to finish…I can’t remember the last time I watched such a long video on the web" that is endorsement enough for me.

I watched it and it was indeed both entertaining and instructive. How could a big company launch a whole new initiative, commission a ton of software for their customers to use, and not have software for the back office to use to manage it all? Why does it take an outside consultant to say to one guy "how much of your time goes to this?" and to another guy "is that enough?" and then present the result to the CEO, who (no surprise) promptly authorizes some hiring? I may never launch a global initiative in Paris, New York, and London and spend a few million in each city before setting to work to make it profitable, but I'm still glad I watched the video. And as the person who sometimes asks the two questions that were never asked in the same room before, it is nice to know the demand for simple questions at the heart of the matter will never fade.

Kate

6/29/2009 9:39:57 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, June 17, 2009

An interesting article about the "hockey handshake" tradition. One of the first things I needed to understand when I started watching baseball was the handshake thing. 

At the end of a big hockey game, the teams shake hands with each other, that is each player shakes hands with each and every one of the opponents, and generally not with their own teammates at all. I was used to that and I see that as a "ok we were hitting each other, but no hard feelings."

 (from happymooses)

But at the end of a big baseball game, the winning team shakes hands amongst themselves, that is each player shakes hands with roughly half of their team-mates (the ones on the field shake with the ones who were off the field) while the losing team disappears as fast as they can.

 (from smailtronic)

It's tempting to see this as a fundamental Canada/US dichotomy, but it's more a baseball/hockey thing and I suspect it's because hockey is a contact sport and baseball (at least on paper) is not. Forgiving the person who has bruised you and saying "good game" is probably a lot more important in contact sports. And indeed, it seems that football goes for the "shake the opponents hands" tradition.

I have to say I'm more the hockey handshake than the baseball handshake type, even though I'd rather watch baseball than hockey most of the time. I really like the idea of taking the time to reconnect with the opponent and affirm that you're really all part of a large thing (the league and the sport) and are colleagues in that effort. In the same way, everyone in this business is a colleague, even if we compete from time to time.

Kate

 

6/17/2009 10:25:19 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, June 09, 2009

I finally got around to listening to the last recorded webcast in this spring's Ignite Your Career webcast series from Microsoft Canada. Joey has a handy set of links to all the episodes on the Canadian Developers Blog. This series is very different from most Microsoft webcasts - it's not really about technology. It's about the things you need to learn to advance your career that are not straight technology like picking up a new language or a new development paradigm.

  • Industry Insights and Trends (featuring Joel Semeniuk)
  • Discovering Your Trusted Resources (featuring Richard Campbell)
  • How to Establish and Maintain a Healthy Work/Life Balance
  • How to Become a Great Leader (featuring Barry Gervin)
  • Building, Managing and Strengthening Your Team
  • Women in IT Panel Discussion

All the webcasts have been recorded and are well worth a download and a listen.

Kate

6/9/2009 9:04:12 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, June 05, 2009

Well, obviously some programmers are poor communicators, just as some programmers are good painters or poor singers. But Leon Bambrick (Secret Geek) says "the better you program, the worse you communicate." And he means it. Basically good programmers have a number of habits that work well when talking to (or listening to) a compiler, but hurt you when you're dealing with people. And the comments dig in to the "how can I get better?" part of the problem. Worth a read.

Kate

6/5/2009 6:59:25 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, June 01, 2009

We have all worked with star developers. When I come into a client to mentor, occasionally they have one developer who is just a star. I can pretty much spot them in the first half hour these days. Other times they have a developer who would say "I am a star" but who wouldn't get that designation from me. Tim Stall has a nice list of things that make a developer a star. As I went through the list I was thinking "yes! yes!" and finally "hire! hire!" which is also what happens when I meet real stars. (Don't worry, I have never poached a dev from a client and never would, but "would you hire this person" is still an incredibly useful summary of someone's skills.) I especially like "22. Knows when the rules do not apply". It can't be taught, and dear heaven can people get this one wrong. When you meet someone who gets this right, it is such a relief.

The list doesn't tell you how to become that sort of person, but I am quite sure the rest of the Internet has some hints. So will I if I meet you in a mentoring context.

Kate

6/1/2009 6:24:44 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, May 30, 2009

An illuminating post from Dr. Rick Kirschner on bringing out the best in others. He gives ten specific rules, which act as nice reminders only after you've read the paragraphs that go with each. A lot of this maps well to things I am doing and things I have read elsewhere, but in far longer than a paragraph. Other things, like "useful assumptions" are new and bring me an "aha" that I enjoy.

Read it over and see if you don't learn something.

Kate

5/30/2009 6:06:04 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, May 24, 2009

Paul Sheriff provides a link to a panel he was on at Tech Ed about setting up a consulting business. I've watched the video and I agree with so much of what the panelists said. Watching this video will give you a good insight into the common problems we tend to run into, and some practical tips to keep yourself out of quagmires. Recommended.

5/24/2009 4:05:35 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, May 22, 2009

Completely without sarcasm, I am pleased with Air Canada for introducing cell-phone free areas in their lounges. While it seems plenty of people come there to hang out, drink free booze, ask when the soup will be available, and have long loud conversations, I go there to have some peace and quiet and a wireless connection. (Though I do like the soup.)

Yes, that's a regular phone in the foreground, just outside the cell-free zone. Irony? Only if anyone ever used them.

Kate

5/22/2009 3:55:23 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, May 16, 2009

I have a collection of USB drives in my laptop bag, as I suppose we all do, and recently I wanted to use one to give someone some files. This wasn't a temporary hand-it-over-they-copy-get-it-back scenario, so I wanted a pretty much empty drive. I found one with only 3 files on it, but the bad news was one of the files was called ReadyBoost.sfcache. That means at some point I had put the drive into my machine and told Windows 7 it could use it to speed up my machine. That's a good thing, and I'm a ReadyBoost fan and all that, but I wanted to use the drive for files and it was pretty much all filled with the cache file.

I tried deleting it, but no go. I tried ejecting the drive and putting it in again so I could say no if I was asked about using it, but I should have realized I hadn't been asked earlier when I put it in so not surprisingly I wasn't asked this time either. A little searching revealed the trick. Put the drive in, open My Computer, right click the drive and choose Properties. Go to the ReadyBoost tab. Presto!

Check "Do not use this device", click OK and tada - the cache file disappears and I have my drive back.

Kate

5/16/2009 3:20:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, April 26, 2009

Gary Bertwhistle tells the story of the "yeah but" guy and encourages all of us to be "yeah and" guys instead. It's good advice. Years ago, I heard about the improv "yes and" rule. I discovered that, in both business and personal life, if you take a sentence with a but, and replace the but with and, the sentence becomes a much more positive and pleasant one. Your decision, your ruling, hasn't changed. The way you present it has. Sometimes instead of "and", I split the sentence at "but" into two sentences. Compare these:

  • (To your child, about some iffy party or event they want to attend) I love you, but I'm not letting you go to that. I love you, and I'm not letting you go to that.
  • I've thought about it a lot, but it's not going to happen. I've thought about it a lot, and it's not going to happen.
  • It's a good idea, but I can't approve it. It's a good idea. I can't approve it.
  • I know you really want to, but you can't. I know you really want to, and you can't.

Is it because people hear "but", know you're saying no, and stop listening? Is it because "but" somehow negates the "good" half of the sentence? I don't know. I do know I have less arguing in my life since I adopted this verbal habit.

Kate

 

4/26/2009 12:15:37 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, April 22, 2009

I'm a very lucky person. I get great parking spots, I find money on the ground, I bump into people who turn out to be just who I needed to bump into, and so on. I was intrigued to read about a professor who can teach people how to be luckier. He recruited people who self-identified as lucky or unlucky, and then subjected them to tests that were not entirely based on chance (for example, not rolling dice or tossing coins) but that most people wouldn't think of as a game of skill. For example:

I gave both lucky and unlucky people a newspaper, and asked them to look through it and tell me how many photographs were inside. I had secretly placed a large message halfway through the newspaper saying: "Tell the experimenter you have seen this and win £250.” This message took up half of the page and was written in type that was more than two inches high. It was staring everyone straight in the face, but the unlucky people tended to miss it and the lucky people tended to spot it.

He has a list of principles to make yourself luckier. I'd say I do these things, and I agree they are likely why I am lucky. I suggest you give it a try. You may also be interested in his blog and youtube videos, which are mostly about "magic tricks" that are based on psychology but don't feel like it. I especially like "Colour Change." See if watching that changes your mind about anything.

Kate

4/22/2009 8:43:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, April 18, 2009

I love reading Rands. He has such practical day to day advice for managing projects and people, and then he has some truly inspirational topics. You think you have a tough project? You think you have to invent half the technology you're using on the fly? Working with new unproven tools? Try building the Brooklyn Bridge. I guess it's the engineer in me (chemical, not civil) but I  see bridge building as one of our most persistently amazing technologies. It also makes an amazing metaphor. I hope something I design, build, or project-manage lasts 120+ years, but I rather doubt any of it will.

And while I'm quoting Rands, you just have to read about The Pond. I have had a lot of variation, over the decades, in the amount of time I spend with my staff and the amount of time they spend with each other. I wish his pessimism about the fate of those who work remote all the time was misplaced - but unfortunately, I think he's right. If you work remote all the time, you need to think about how to be in the pond.

Both highly recommended.

Kate

4/18/2009 7:25:25 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, April 04, 2009

I spend a lot of time at a keyboard and screen. Most of the time, I'm working. I might be writing code or a document, reading something to better myself, reading something because it's my job to review it, watching a video or screencast, triaging bugs in TFS, or of course processing email. Some of these tasks involve a lot of typing, others mainly mousing, and some involve sitting almost completely still with the occasional page-down or mouse click. Other times, I'm having conversations with family or friends, reading something for fun, or playing a game. These tasks also have the same spectrum of frantic-typing and clicking through to mostly passive consumption with the occasional click or keypress. And at still third times I'm doing what we might call family administrative tasks - seeing when the grocery store in a nearby town closes, checking the school web site for holiday dates, ordering something, renewing something, banking or billpaying - or business administrative tasks - including invoicing my clients. You can't tell, by looking at the back of my screen or listening to my typing and mousing, what I'm doing. You can't tell by where I'm sitting either ... I might be using Remote Desktop to access the computer where our book-keeping software is installed, or a server that needs to be configured, or a client machine so that I can reproduce a production problem.

So what? Well it isn't how work has usually been. Hundreds of years ago, if someone was working you could tell by looking at them. They had a hammer in their hand, or a paintbrush, or some other tool. Even a few decades ago, if someone worked at a desk by writing on paper it was easy to see what desk they were at, what papers were strewn around them. Reading the paper looked very different from checking the invoices. And of course, leisure never involved the same tools or locations as work. Now, not so much. Bill Buxton has an interesting article on just this topic. He's at Microsoft Research, and it pleases me to think that folks there are thinking about this. I look forward to a future time when people can get a better idea of what I'm doing and how interruptable I am, not just "you're always on your computer."

Kate

 

 

4/4/2009 9:45:51 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, March 31, 2009

I've heard people use the name "elevator pitch" for a concise answer to a question like "What do you do?" or "What is this company that you run?". I don't think that's a good use of the term. You pitch a specific project or idea (which might be "hire me" but might not.)  Answering a small-talk question isn't making a pitch. It does, however, have a lot in common with the elevator pitch - most importantly that you don't have very long at all. Hi, how are you, that's a cool shirt, where do you work, what do you do there - these aren't essay questions.

So you want a concise answer, so that at least you don't talk people's ear off and bore them. And it would be neat if your answer either led the conversation in a direction you'll enjoy, or brought you business, or both. Steve Pavlina has given this quite a bit of thought. It's a long blog post that leads down to 2 or 3 10-12 word sentences, but that's the thing with short statements - they take forever to write.

I've been working on this for a while with gregcons - what's our 10 word answer to what do we do? Generally I say "We solve people's problems. Sometimes we write them software, other times we give them advice on software deveopment or mentor them." If the person looks even vaguely interested I might elaborate, but often that's all the answer they needed. The process of finding this short answer for us, and the process ahead of me to continue to shorten it, does give useful insight into what parts of my job and what parts of this business matter the most to me. I highly encourage everyone whose answer is "all kinds of stuff!" to take the time to find the common thread rather than just listing off a whole pile of -ing verbs until the person who asked slips into a coma. For more on the "what is my real underlying business" (as opposed to the skills you happen to ply in support of that business) you might also want to read a year-ending post from Mike Gunderloy that's just as valid at this time of year.

Kate

3/31/2009 5:16:37 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, March 23, 2009

I've written before about Agile and how we do it (not like other folks) and how I agree it can play well with CMMI. Even with that background, I was a little taken aback to read the title of this Scott Ambler blog post. But he makes an interesting case. He says at level 1 you're doing core Agile things. Maybe you're using Scrum, XP, Agile Modeling, or Agile Data. You're on the way. At level 2, you're disciplined Agile. I might phrase this as saying there's process in your agility and agility in your process. He lists some processes that build on Scrum and XP to provide a little more structure while staying lean. Then at level 3 you've achieved agility at scale. That really is a tough one - a small team with a small customer base has a much easier time being agile today. Perhaps it's a mythical level, or perhaps some folks are operating there.

I'm going to keep reading what Scott has to say on this. It's increasing my own comfort level with what to call our own approach to software development and problem solving.

Kate

3/23/2009 7:12:21 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, March 21, 2009

I love this story. Seems a fellow was playing a low-stakes slot machine. This thing takes pennies, so if you win the "big jackpot" it doesn't rain pennies on you, it displays a message that says "you have won $xyz, please call an attendant over to this machine so you can collect" or words to that effect. Imagine his delight when it told him he had won 42.9 million dollars! Sadly, when the attendant arrived there was no 43 million dollar payout. The most that machine can pay out is $9,025.

So what happened? Here's the quote from the story:

In a confusing nutshell: Computers speak in a language of bits. Information is represented with zeros and ones. Very often, these numbers – both positive and negative – are stored in 32-bit sequences.

Still with me?

In this system, the number —1 can also be represented as 4294967295. Count that many pennies as dollars and you see 42,949,672.95.

The reporter wants you to know this is difficult. I want you to know it's hilarious. But then again, I didn't write a 43 million dollar signed/unsigned bug.

Kate

3/21/2009 6:59:39 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, March 17, 2009

Women in Leadership & Technology, a subgroup of IAMCP Canada held their first Canadian “Meet & Mingle” on March 9th. It was a networking opportunity for women in technology and leadership both inside and outside Microsoft. This was a nice opportunity to meet some new people for me and to talk about the issue that seems never to go away ... why do so few other women want to be in this business? Maxine Chung from itbusiness.ca was there too and has posted a slideshow (I am not in any of the pictures though) that includes a summary, plus a longer article. Check it out!

Kate

3/17/2009 6:45:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, March 04, 2009

Here's an interesting post from Rick Segal. Even if you don't want VC money, it's an intruiging exercise to see how you look from that point of view. Let's see how gregcons does:

  1. Our website, www.gregcons.com. "Does the web site's home page tell you what the company does?" Yes: "We program in Visual Basic.NET, C#, Visual C++ (Managed and Classic,) Java, ASP, ASP.NET, XML, XSLT, XSL-FO, HTML, Javascript, Perl, and CGI. We mentor, provide architectural vision and inspiration, write, edit, train, develop courses, design web sites and act as general internet consultants. "
  2. Google "Gregory Consulting" and "gregcons". Our site, some sites of other Gregory Consultings in the world (note to self - if I want VC funding, create a sub with a weirdo name with extra vowels or not enough vowels), and some folks linking to blog postings of mine. Not a soul who's actually discussing us as a company. Fine by me but probably an issue if I wanted investors.
  3. Google "Kate Gregory" and "Brian Gregory". You can see who the public face of this company is - not one of the Brian hits is the right Brian, and all the Kate hits are me speaking, writing, and general experting. Interestingly Google (which I never use for my own searches but am using in the spirit of Rick's blog) doesn't find the "other" Kate Gregorys that Live tends to return. I'm not actually the only one on the planet.
  4. The mission statement. Um. Well, we have a tag line on the website "Leading your developers forward" so I'll give that a try. Interesting way to discover who is mirroring your old content chrome and all, but you don't learn much about us from it.

I think we pass the test of being discoverable on the internet, but it's clear people don't talk about us as a company much (they do talk about me from time to time). Fun exercise. Try it yourself!

Kate

3/4/2009 9:16:49 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Tuesday, March 03, 2009

I've been accumulating some links that might be relevant to folks looking for work. I got a lot of traffic to a post last year about trick questions in a job interview, so I thought I'd share these as well.

These posts are very different, but they all have useful information for you.

Kate

3/3/2009 9:06:48 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, February 28, 2009

I've been doing some training lately and of course conference season is on the way, so I'm starting to think once again about the mechanics of talking to audiences. One relatively recent change in audience is the popularity of Twitter. It is starting to create a far more public backchannel, one that even the presenter (or the presenter's colleagues) can read and respond to during the talk.

Private, even secret, backchannels are nothing new. I've been on many a conference call where 5 or 6 of us are on Messenger discussing the call itself (and we probably wouldn't want the speaker to read what we were typing.) I've also been in physical meetings where a small group of people are privately discussing the meeting itself, whether co-ordinating who will say what when, or just aimless snarking and wondering when we can leave.

But a public backchannel, maybe even one you have an obligation to monitor, is a very different beast. Some folks, like Olivia Mitchell on Tamar Weinberg's blog, think it's all-good all-round: better for the audience, the presenter, the world as a whole. Presenters just have to learn new reflexes: when your audience suddenly starts typing and looking at their screens, it doesn't mean you've lost them, just that you're so interesting and the information is so important that they feel the need to share with the world immediately. Ira Basen is not so sure, especially if the tweets are negative and going out in public before the talk has even finished and without asking the presenter any questions.

Different conferences will probably lead to different conventions and habits. I can imagine a lot of tweeting from a keynote where things are being announced or demo'd for the first time. But if I'm doing an hour on C++ 0x features, I can't really see why "OMG Lambdas r AWESOME" can't wait until the talk is over. "Now showing capturing the whole stack by reference" doesn't seem like a likely tweet. I can tell you that I'm not going to have a window open on my screen where I'm following "my channel" and that if you want to ask me a question, it's going to involve speaking aloud, at least for now. That said, it's a good idea to think about the impact of wireless internet in every room and instantly-constructed channels on speaking, on conferences, and on the way we all share information. I think there will be more room-switching early in talks if people learn that someone else is really doing a great job, and attendees may demand more agility in scheduling repeats and extra sessions on topics that were well received. As always, we live in interesting times.

Kate

2/28/2009 11:01:19 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, February 26, 2009

Michael Feathers put together a list of ten papers that "every programmer should read". I've seen such lists before, and this one is pretty good. I've read Parnas and Cunningham and draw on that background pretty regularly. I'd heard of some of the rest. But the real fun begins in the comments. People suggest additions (Fred Brooks - definitely! Joel Spolsky - why not?) and then other people start saying that reading, especially reading stuff from 20 years ago, just makes you an academic and not useful. Oh my.

I'm useful. I've written a lot of code that's made people's jobs and working lives a lot easier. I've written systems that have transformed companies and enabled them to survive business model changes they thought would sink them. I've rescued projects and made developers better than they were time and time again. And I'm academic. I have a Ph. D. for heavens sake, I teach at a university (no, not full time, one course a year), and when someone uses the word "academic" or "intellectual" as an insult, and I object, they tell me "you're not that kind of academic, not the kind I meant." Well honey, to paraphrase Gloria Steinem, this is what academic looks like. Reading 20 year old white papers and thinking about concepts and theory is one of the things that makes me useful. Folks who just want to get started and type some code and not bother with that high falutin design stuff tend to write bad code.

Grrr. Read the list, maybe read a few of the papers (as the commenters mention, Michael's links are to a site that will charge you to read them, but if you have the author and the title your favourite search engine will undoubtedly help you find free copies lying around on the web) and think a little about why it would be an insult to say that someone cares about history and theory.

Kate

2/26/2009 8:20:42 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, February 25, 2009

Steve McConnell has a training company, Construx, that is not like other training companies, mostly because Steve is not like other developers. As it says on his web site:

Steve is the author of Software Estimation: Demystifying the Black Art (2006), Code Complete (1993, 2004), Rapid Development (1996), Software Project Survival Guide (1998), and Professional Software Development (2004). His first two books won Software Development magazine's Jolt Excellence award for best programming books of their years.

Steve has worked in the desktop software industry since 1984 and has expertise in rapid development methodologies, project estimation, software construction practices, and third-party contract management. In 1998, readers of Software Development magazine named Steve one of the three most influential people in the software industry along with Bill Gates and Linus Torvalds. Steve was Editor in Chief of IEEE Software magazine from 1998-2002.

There are very few authors who have multiple books on my bookshelf that I paid for. Steve is in rare company there. And the courses they offer? We're not talking "Introduction to Silverlight" or "A First Look At Sharepoint" here. This stuff is more university-like: concepts, theory, the big picture. Some upcoming titles:

  • Object-Oriented Requirements Analysis and Design Using the UML
  • Professional Tester Boot Camp
  • Enterprise Agile: Planning, Managing and Scaling Agile Projects Using Scrum
  • Requirements Boot Camp
  • Software Estimation in Depth

These are the kinds of courses that change the kind of developer you are, not just teach some new syntax or tool. And they cost thousands of dollars. But Steve has decided that fully one quarter of the seats in each class will now be available for free to people who have been laid off. If you can get to Bellevue WA, you should arrange to take one of these courses. No question about it.

Kate

2/25/2009 8:02:48 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, February 24, 2009

Here's a list of ways to be a superstar at work, from GL Hoffman. It applies equally to a 19 year old close to me who's starting her first full time job, or to developers who want to work for me. The examples in the article are aimed at a 20-something working in an office full of older people, in a vaguely technical capacity, and is kinda Web 2.0 ish, but the principles are far broader than that. My two favourites: See Work and On Time. But read them all.

Kate

2/24/2009 8:00:58 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Sunday, February 22, 2009

If you've been to a big conference in the past few years you'll have seen the name David Platt on the speaker list, and usually scheduled into the big room. Dave's superbly entertaining speaking style delivers valuable information about user interface design and genuinely meeting the needs of the folks who use the systems you're developing.

Here's an interview with Dave recorded at Tech Ed, and on the Tech Ed Europe sessions page, if you click through to page 2, you can see the one hour version of his talk.

Since Dave mentions used car salesmen in his interview, I'll share a little joke with you. What's the difference between a computer salesman and a used car salesman? The used car salesman knows when he's lying to you.

Kate

2/22/2009 7:46:57 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, February 17, 2009

I have a favourite piece of advice, and I give it even though it frustrates many recipients. If you want to write, write! If you want to get into public speaking, speak in public! If you want to start a user group, start a user group! If you want to be an MVP, do what MVPs do (advise others and solve problems and volunteer for stuff) and you'll start to get the benefit even before you get the award. I'm not quite saying Just Do It but the fact is the barriers to entry are very very small these days and possibly non existent. Technical writing especially - start a blog or get active on newsgroups and presto, you're writing! Listen to feedback (people telling you you're wrong is bad, people thanking you for your answer or quoting you elsewhere is good) and you will get better. Public speaking isn't much harder to crack because the world is full of user group leaders and similar folks who need someone to speak to them month after month. It's also full of Code Camps and other places to get started (they tend to come with coaching and encouragement too.)

Still some people don't like this advice. They feel held back from what they want to do, and they don't like to be told "nothing is holding you back, you can start whenever you want." Alternatively, they don't want to speak or write or lead for free, they want to be paid for it, and they don't like the idea of starting for free and working hard for years to get that overnight success. So here's a rephrasing that maybe you'll prefer: "80% of success is just showing up." It's attributed to Woody Allen, not a guy I would normally take advice from, but it sure is accurate. Go to the meeting, open the document you're supposed to be writing, be there when someone asks for volunteers, go to the whiteboard and draw as much as you know, put your shoes on and go outside, ... not all at once of course, but these are the "just showing up" tasks that get you on the road to success. Try it.

Kate

2/17/2009 5:06:42 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, February 08, 2009

I had read that Windows 7 did the perf calculations differently than Vista, so I thought I would compare them. I took a picture of my settings as part of the whole "back up everything three different ways" process before the upgrade (me? burned before? ya think?) and here's what it said:

After the upgrade, it said:

So the same conclusion, but drawn from different numbers. Bottom line is I could mess around with this laptop and it would be faster, but it works for my day to day use. And things feel zippier on Windows 7. Sleeping and waking up, for sure. And finding the files I want ... but that's about jump lists and previews.

Kate

2/8/2009 4:53:28 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, February 07, 2009

Well, I did it. I put the Windows 7 beta on the laptop I use day in and day out. This machine had Vista on it, and the upgrade was utterly painless. All my software was still there and still working fine when the install was complete. The only glitch was that my built-in touchpad has become invisible in some way. This means I can't configure it to be less sensitive, which in turn means I was "clicking" a lot when I didn't mean to. I disabled it completely (using the 1980s-style UI of the edit-your-settings-on-boot experience) and other than having to carry a mouse with me when I take the laptop somewhere, there's been no other impact.

First impressions: I use jump lists a lot. Enough for a separate blog post. I like everything I noticed, except the default large-icons, no-text, group-everything setting on the taskbar. I fixed that:

(I've cropped it so it doesn't stretch the page)

I've said it before and I've said it again ... you can't really learn a product if you kick up a VPC once in a while but live your life in a different product. Windows 7 is stable enough to live in, and living in it will show what it's really like soon enough. I'm liking what I'm living.

Kate

2/7/2009 4:43:31 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, February 04, 2009

I like Scott Berkun's blog a lot. He often shares insightful glimpses of what it takes to achieve. In this entry, he talks about how ratsen fratsen hard it is to write a book. This reminds me that I don't want to write any more books (in case watching Julie finish hers wasn't reminder enough) and also connects to the trouble I sometimes have with other long term unstructured projects. Deciding to work on what needs to be worked on is how you show your character. Day in, day out. Don't like the character you're showing? Decide differently, starting today.

Kate

2/4/2009 4:03:27 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, February 03, 2009

Let me share with you something I heard on the TV the other night that really clicked with me. "As I get older," the man said, "I find that I ask myself questions more. You know, why am I here?". He paused, and I nodded. The older we get the more life we have to ponder the meaning of. Then continued. "It's not exactly philosophy though. It's more ... why am I here... in the basement? What the heck did I come down here for? "

Oh yeah. That I do even more than the pondering.

Kate

2/3/2009 1:11:42 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Saturday, January 31, 2009

Rands has some cool advice for being a fantastic manager in a pretty big company leading a pretty big team. It isn't all applicable to managing a whole company and having no boss, as I do, or to leading a smallish team without hire and fire power, as many developers do when they first move to management. But a lot of it is. Try this for a start:

... at the end of the day when you ask, “What did I build today?” The answer will be a troubling, “Nothing”. The days of fixing ten bugs before noon are gone. You’re no longer going to spend the bus ride home working on code; you’re going to be thinking hard about how to say something important to someone who doesn’t want to hear it. There will be drama. And there be those precious seconds when there is no one in your office wanting… something.

If that resonates with you, read the whole thing. You'll be glad you did.

Kate

1/31/2009 10:55:28 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, January 30, 2009

I've been in Redmond all week (some Windows 7-related fun that I'll discuss later) and rented a car. Look at the license plate I happened to get:

I don't know why it's Oregon. Probably all the Washington DEV plates are taken :-). When I first saw it, I said to myself "somewhere here there's a 22 year old developer who wishes this plate was available." It was several days before I remembered that Gregory Consulting was founded in 1986. Nice.

Kate

1/30/2009 10:45:31 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Monday, January 26, 2009

You know the deal when you demo beta (or worse, pre-beta) software. That stuff has audience detectors in it! Sure, it works on the plane, but just wait until you get in front of people. I’ve had my share of demo deaths, but I don’t think I’ve managed to look this cool about it:

Steve Teixeira tells the story in this blog entry.

Kate

1/26/2009 10:31:17 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, January 25, 2009

I attended more events than usual in 2008, and I spoke at roughly the same number as usual, for me. But many people are saying they plan to attend fewer events in 2009 than usual, and what’s more they’re saying that might not be a bad thing. In a time when sessions are online, when you can search the web for the blog of the person who wrote the feature you’re interested in, why would you pay for a plane ticket and a hotel room, not to mention a substantial admission fee? I can think of at least three reasons why I do it: for the time spent with likeminded attendees, for the time spent with speakers, and as an oasis from my other obligations that’s devoted to this particular topic. There’s a fourth that you won’t notice unless you go to conferences that are well-curated: somebody is taking the time to select sessions, to select speakers, and even to get the sessions delivered in a sensible order. For more on this point, you should read Andrew Brust’s blog entry on the importance of track chairs in the 21st century.

Kate

1/25/2009 10:27:31 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, January 22, 2009

Leon Bambrick, aka Secret Geek, reveals the true differences between small businesses and enterprises. Like Dilbert, it’s only funny because it’s true.

Kate

1/22/2009 10:15:31 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, January 21, 2009

Continuing my theme of 2008 in review, the year was interesting because it featured the breaking of two rules I have long held to be utterly true. These rules are cynical and depressing and people generally do not want to believe them. I am known for my optimism and yet I assure you these rules are true and you cannot escape them:

  • There is no such thing as a “slow yes”.
  • You will never get paying work (or a sale) from that guy you sat next to on the airplane.

Let’s start with the mythical “slow yes.” All there really is in this world is the “fast yes”, the “fast no”, and the “slow no”. I am sure you have been asked to give somebody a donation, or to buy something, that you didn’t really want to give or buy, and so you said “can you send me a letter about that?” or “can you send me a proposal?” when what you really meant was “can I please get off the phone so I don’t have to face saying no to you?” It’s a “slow no.” We have all done this. Yet for some reason when we are trying to get the sales (or the donations, or to be hired) we get off the phone and tell our co-workers or family or whatever, “Success! He wants me to send a proposal!” or “Score! They’ve got nothing now, but he wants me to phone back in a month!”

I have been a consultant for over 20 years. When people want to hire our firm to help with a problem they’re experiencing, they hire us. Sometimes there’s an RFP to respond to, sometimes they need to show a written proposal to someone, but generally they say “I want you to do this” and then we talk about paperwork. When people don’t particularly want to hire us (and usually that’s because the conversation was my idea, and I am trying to sell work to people who were minding their own business) they ask for proposals, or they say “well, we would have to have a meeting about that but I’m really busy this week so how about I call you in two or three weeks?” This is the start of the “slow no”. They won’t ever say “no” or “go away” but they won’t ever give you work either. You can spend days and weeks and months thinking you are “working on sales” because you are emailing these people and asking if there’s been any change, you’re sending these people generic proposals (because you don’t know their specific problem, and that in turn is because they haven’t told you a problem they want you to solve, and you know why that is? They don’t have a problem they want you to solve), and you’re updating your tickle lists, all of which sure as hell feels like work, but is not in fact accomplishing anything.

So when I finally learned this lesson (and I believe I read it somewhere, and fought it for a while, and then came to know it was true) my life got simpler. I rarely phone or email strangers (or even former clients) and try to pester them into giving me work. If for some reason I do, and they’re not very interested in hiring us, I don’t put a lot of time and effort into trying to persuade them otherwise. I assume that people who want to hire us will make the effort to do so. This has lowered my stress tremendously.

But you know what they say about the exception that proves the rule? We got an RFP from some people we didn’t know, through a third party who felt we’d be good for it. It was highly specific about what technology to use – an Access application distributed as a single file to be installed on each workstation, a SQL backend to be shared by all these workstations, no offline story, a VB6 application to run in the system tray and notify you if another user added something to the shared repository you should know about, that sort of thing – and our first guess of effort doing it their way was well over (perhaps even double) what the third party believed was their budget. So we wrote back and declined to bid. Months later, we heard they were putting it out again. So we asked if it was ok to ignore all their tech specs and submit a solution to the underlying business problem, which was well described in their material. They said go ahead, so we did: suggesting a SharePoint store, some workflow to handle their special business rules, and some Reporting Services goodness for the managers. Total cost including buying all the SharePoint licenses at full retail was less than the whispered budget, and we were pulling in a raft of features that they had on their wishlist for v2 such as email notifications when things were changed. It was a great proposal.

Great or not, it got no response. After about 2 or 3 months I wrote to confirm that we didn’t get it. And was told “actually, we haven’t decided yet.” I imagined a conversation in a boardroom somewhere with one person saying “can she not read? We clearly said SYSTEM TRAY!” and another saying “look how much more solution to our problems we will get for the money!” Some more months went by and you know what? We got the gig. Well over a year from the first RFP to being hired for the project. It’s underway now. I will point out that although this was a slow yes, it didn’t get to yes as a result of pestering actions on my part. I patiently waited (while working on other stuff for real clients) and these guys came to me when their process had worked its way through to a decision.

The second rule that sales people need to learn is that those “hey cool your product sounds perfect for us why don’t you drop me an email” conversations on the plane just do not, in general, lead to sales. Again, the guy just wants to be nice and to go away in a pleasant and positive way. Pestering Mr 13B to see if he’s ready to pull the trigger on the order that will save your year may feel like work, but it isn’t getting you anywhere. If Mr 13B wanted your product, he would have taken your card, and he would have emailed you the minute he got his laptop on the network. That silence and absence of emails from Mr 13B is basically “he’s just not that into you” or in this case, your product.

That said, here’s the story that breaks the rule. Sasha, my MVP lead, spent some time last year in a customs lineup, and got chatting with the fellow next to him in line. That fellow needed some mentoring or consulting from a senior person with solid C++ and project management skills who could suggest a good architecture for his new product, and then help to get it built. Sasha took the guy’s card and sent me one of those “X, meet Y” emails. A conversation ensued, followed by meetings, and the end result: the product is very clever and I am delighted to be part of the team that is building it. We ended up with no C++ in the product, but that doesn’t worry me at all. It meets a genuine business need and supports the way people in that business need to do their jobs. And my client would not have found me if he wasn’t willing to chat to a complete stranger about the software he was trying to build.

I still say the rules are true, despite the specific exceptions I met this year. Or more accurately, that the smart way to live your life is as though these rules are true. Selling consulting services is not like selling timeshares or couches. You can’t bully people into it or catch them in a moment of weakness and trick them into saying yes. They have to want to choose you to solve their problems. That isn’t something you can persuade them to want by “following up” every two weeks. So I just plain do not do that. Some folks who I like and haven’t worked with for a while get a note sometimes (especially if I come across something that reminds me of them) but I don’t set out to make people buy our services. I don’t lose sales by spending less time “working on sales” and I certainly don’t lose sleep. If anything it frees my time to talk to people who genuinely want our help. That’s way more fun anyway.

Kate

1/21/2009 10:14:22 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, January 20, 2009

Anyone who blogs on technical topics soon notices they get a lot more hits if they wander into non technical areas for a post or two. That’s just because there are more non technical people out there, searching for tips on stain removal or coupons for TGI Fridays, than there are people who want to know how to get a manifest on an executable or how to write a C++/CLI wrapper for native code or what’s coming in Visual Studio 2010. That’s why my top ten posts last year are:

1 - XPS Document Viewer – Nov 19th 2006
I guess people are still getting XPS documents and don’t know how to read them. OK. Not sure why my page would be the one that over 7000 people find, but what the heck, the information is still valid.


2 - Reading Office 2007 files – Nov 23rd 2006
Also from two years ago but people still need to know this. I send people this link whenever I get one of those “I can’t read your attachment because I’m not on Office 2007 yet” replies to an email. I didn’t send it out 4000 times though, so I guess a lot of people are searching for this stuff.


3 - Try Www.mappoint.com – August 18th 2004
I read recently that people don’t seem to realize they can type URLS into the address bar on their browsers, and have their home pages set to search engines, and actually type entire URLS into search boxes so they can click the result. I would deny this could happen, except many years ago I had a client who did just this, so I know there really are people who do this. I also can’t think of any other reason why over 2500 people would read a four year old post comparing MapPoint to MapQuest given that everybody these days uses either maps.google.com or maps.live.com.


4 - Introduction to Workflow in SharePoint 2007 – June 22nd 2006
Yep, workflow was a hugely important addition to SharePoint. We’re loving it in the SharePoint project we’re doing now. Again this is a topic that must surely be better covered somewhere else though. Still almost 2500 people stopped by to learn about workflow – I hope they followed the link to learn more, and learn something a little more recent – say from after the product was released?


5 - How to earn a million Aeroplan miles – Oct 1st 2005
Now this is really non-technical, but it caught my attention and I guess plenty of other people’s too. I have some other blog entries from time to time about Aeroplan miles, but I don’t really cover how to earn them. For that I highly recommend Flyertalk’s Aeroplan forum.


6 - Batch-convert Visual Studio 2005 projects to Visual Studio 2008 – Dec 17th 2007
The most recent entry yet in this top ten. It makes sense that something that gets hits all year does better than something that wasn’t even around for the first half of 2008. And this is a useful tip I haven’t seen many other places. All those searching people should just subscribe to John Robbins – searching only helps you if you know something exists and want to find it. Smart blogs like John show you things you hadn’t imagined existing.


7 - Another Way to Get the Shield on a Button (or Anywhere Else) – Jan 30th 2008
Finally, something from 2008 in the 2008 top ten! And this is a good tip from Daniel Moth. Remember, the shield on a menu item or button doesn’t bring up the UAC prompt any more than putting ... on a menu item brings up a dialog. And nothing puts the shield there for you if you trigger a prompt any more than something puts the ... for you when it sees you have code to show a dialog. All of this is just sensible developer tradition that helps users feel comfortable with the software they’re using. So please play along and help people know what to expect.


8 - Don't compile MFC apps with /clr:pure – Jan 17th 2007
This one seemed like a no-brainer – MFC includes native stuff, /clr:pure means I don’t have any native stuff, but I was getting emails asking for help and this kept turning out to be the issue. So I blogged it. A lot of my blog topics are the answers to random emails I get from people who are looking for help. This way an extra 1500 or so people saw the answer in 2008.


9 - Hot Laptop? Here's a tip – May 14th 2006
It’s still good advice for working with an overheating laptop. I’m not sure if the searchers all had that problem or were using “hot” more metaphorically.


10 - Adding a manifest to a Vista application – Oct 3rd 2006
This is mostly a link over to Catherine Heller’s Visual Studio 2005 instructions, except that I really wanted to call out how much less work it was for Visual C++ compared to C# and VB.NET. Anyway it’s all a ton easier with Visual Studio 2008 these days.


What else can I tell you from my stats? I got almost a million visits over the year, and they averaged 2.71 requests – meaning most folks clicked around a bit once they arrived. That’s heartening. In 2008 I set myself a goal to blog every day. I didn’t achieve that – there were several long gaps in there – but I did post 135 times. I still like the quote from my post on June 1st, resuming after a four-month gap: “Blogging, like speaking at a Quaker meeting, is something one must do only if the spirit moves one.” I’m looking forward to having my spirit move me hundreds of times in 2009.

Kate

1/20/2009 10:07:58 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, January 19, 2009

2008 was a tumultuous year for me so I thought I would start a new tradition of doing a retrospective post.

In January, I started doing something at Trent that I had never done before in ten years of teaching there a course or two a year – teach the same course twice at once, on different nights in different locations. I think the Tuesday night people got a better course since I in effect rehearsed for them each Monday morning :-). The marking load was a little difficult but I managed it. Also in January I had a geekspeak appearance, and the planning started in earnest for Tech Ed.

In February I spoke at my own user group, which is always a treat, and the Toronto Heroes Happen Here event introduced Visual Studio 2008, SQL Server 2008, and Windows 2008 to Toronto.

March kicked off with SD West, where I did two sessions (Vista programming for half a day, and some Practical VSTS tips) and recorded a video interview. I really enjoyed SD West’s sense of difference – the attendees, speakers, and topics all had a little fresh and unusual twist to me compared to the conferences Microsoft runs. My schedule doesn’t often let me get to third party conferences but it’s definitely enjoyable when it does. Also in March, we closed our Peterborough offices after nearly a decade there, and consolidated back to a single office attached to our home. Times have changed since we set up the Peterborough offices – we have high speed Internet at home, couriers are no longer an important delivery mechanism for us, and we haven’t employed a university student for many years – so we decided paying rent and commuting 45 minutes each way every day was a foolish habit. It really has been one of my best decisions of the year.

April’s big fun was the MVP Summit. My schedule was jam-packed and my only regret was that the C++ team didn’t schedule any boring or irrelevant parts of the day that might have let me go visit another team to broaden my horizons.

In May, Chris Dufour and I held our own Heroes Happen Here launches in Peterborough and Whitby. We had a scaled down version of the Toronto event and enjoyed it a great deal. Then DevTeach came to town – my absolute favourite third party conference always. As well it provided an opportunity for the Canadian RDs to get together and that is never a bad thing!

June, of course, meant Tech Ed. A precon, lunch with Bill Gates, three breakouts, two podcasts, assorted booth duty / ask the experts / etc plus dinners, receptions and side meetings made for a whirlwind week. The sort of thing I work all year to get, to be honest ... I loved it!

I started July by recording a .NET Rocks episode. Another thing I don’t get to do enough of. Then I just settled down and worked on projects for a while. Community activity is always a bit slow in the summer. As my project work intensified (nothing I can announce at the moment) I stayed heads down right through to the end of October when the PDC rolled around. We were all full of pent-up PDC demand after so long without one, and it was good, really good.

Just one week home after PDC, and trying to catch up on that project work, and it was off to Barcelona (maybe for the last time?) for Tech Ed Europe. I would have had an amazingly great time even if I hadn’t placed a talk in the top ten, but I was lucky enough to do just that. The food, the scenery, the weather – I am really going to miss Barcelona.

In December I got back on the community stage by visiting three southern cities to tell the story of Vista Bridge. I got caught in a snowstorm in Baton Rouge, the like of which they get once or twice a century, just to add a little spice to the tale. And that brings us around to the end of the year. What's next?

1/19/2009 10:00:53 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, November 29, 2008

Whenever I go to a conference I run into people who make software so differently than I make it. I also run into people who do the same things I'm doing, but they have a name for it and I don't. Someone asked me recently if I "did Agile." I always answer that we're not "formally Agile" which frankly I find very funny. We do have a client though, for whom we ship a new release every month. They ask for things (typically with emails) we design and estimate, together we draw up a list of what will be in the next phase and when it will release, and then we mostly do that. I say mostly because sometimes over the month they change their minds, or their customers impose a business change on them, and we tweak the list a little, but just about every month they get a refresh and their software has evolved to meet their new needs.

So there are plenty of people who will tell me, since I ship every month, I'm Agile. I guess so. But we don't do scrum. We don't do burn lists. We don't do pair programming. We don't have a daily anything. We manage all this with TFS and with a Word document called "phase 13 as approved.doc" that has a table in it listing work items, their descriptions, and their status. We don't really use any of the deliverables or artifacts that are considered Agile today.

So, with that mindset (what makes you Agile) I have two links for you.

First, http://martinfowler.com/articles/newMethodology.html. This is Martin Fowler on agility, the essay he first wrote in 2000. It talks about how requirements change, how people are not all the same, how customers adapt, and so on. To my great surprise it lists the Rational Unified Process as an Agile technique. His conclusion is a damn good one:

So where should you not use an agile method? I think it primarily comes down the people. If the people involved aren't interested in the kind of intense collaboration that agile working requires, then it's going to be a big struggle to get them to work with it. In particular I think that this means you should never try to impose agile working on a team that doesn't want to try it.

Second, http://www.agilemanagement.net/Articles/Papers/CMMIandAgileWhynotembrace.html. Unfortunately the paper is only available as a PDF, but this page has a link to it. The abstract:

Agile development methods and CMMI (Capability Maturity Model® Integration) best practices are often perceived to be at odds with each other. This report clarifies why the discord need not exist and proposes that CMMI and Agile champions work toward deriving benefit from using both and exploit synergies that have the potential to dramatically improve business performance.

OK, so it isn't written in a conversational style, but you know, it makes some really good points. I've just started a project in which we're using the CMMI templates for TFS, just to see what it's like, and we're being our usual "get the detailed requirements and do the design at the last responsible moment" on it (we have sensible phases which makes this possible) and you know what? It's working pretty well.

So, you think you know your methodologies, but I recommend you read both of these papers and then see how you feel. You may be surprised. You may be pleased (I was.) And you may start working more effectively.

Kate

11/29/2008 9:11:54 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, November 27, 2008

I'm a very positive person, as anyone will tell you who has met me. I actively work at keeping a happy attitude in a variety of circumstances. And it is work, more than just smiling no matter what happens. For example, who you choose to spend time with makes a big difference - spend a conference with someone cynical who keeps saying "what a waste of time this is" and you will skip most sessions and go home saying the conference was a waste of time. Spend your time with someone excited about the material who joins in conversations about what this might mean and where that could take us, and you'll go home excited and rewarded for your week away.

In that spirit I identified immediately with this quote I saw on Scott Berkun's blog:

I hate a song that makes you think that you are just born to lose. Bound to lose. No good to nobody. No good for nothing. Because you are too old or too young or too fat or too slim or too ugly or too this or too that. Songs that run you down or poke fun at you on account of your bad luck or hard travelling.

I am out to fight those songs to my very last breath of air and my last drop of blood. I am out to sing songs that will prove to you that this is your world and that if it has hit you pretty hard and knocked you for a dozen loops, no matter what color, what size you are, how you are built, I am out to sing the songs that make you take pride in yourself and in your work.

Scott has a few more paragraphs, and identifies the speaker, so just to make you click over, I'm not going to. I'll give you a hint though: I saw his son just last month, which I suppose is no coincidence.

Kate

11/27/2008 8:44:55 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, November 21, 2008

One very powerful question to ask yourself, if you run a business of any kind, is "what business are you in?" Another way to ask it is "what needs do I meet?". It's easy to say "I'm in the software business" or "I'm in the consulting business" but more people are saying "I hate the way we <something in their business>" than are saying "I wish I had new software" or "I wish I had a consultant."

This Harvard Business School article even says people don't really buy drills, or that isn't the need they are meeting when they go buy a drill - they buy holes. They want holes, and they buy a drill as a way of getting them. The only way you can sell them your drill is to relate it to holes. Being lightweight, for example, doesn't matter to someone who only plans to make a few holes at a time. But it's really important to someone who is going to make a lot of holes and has to slow down the pace because their arm aches from holding the heavy drill. Being cordless only matters if you can think to say "make holes anywhere!" to the purchaser. And so on. The rest of the article helps you try to understand what needs your product or service meets, and therefore how to adjust it or sell it so that you sell more of it.

I've said for years that we're in the problem solving business. We solve people's problems. We're more likely to use software to solve them than to come over to a client's house and build a shed in the backyard or mow the lawn - but we're not so much in the software business as in the problem solving business. If I write great software that doesn't help the problem, I've failed. Often our advice on process is as valuable as the software we write encapsulating that process. And of course when we're mentoring and advising other developers, we need deep technical chops but we need to remember that the mentee or advisee has a problem (our UI looks stale, we have to exchange information with a new business partner and don't know how, our application blows up under certain circumstances and we don't know why) and we are there to get that problem fixed.

As the economy worsens you are more likely to stay in business if you are sure what business you are in. It isn't obvious.

Kate

11/21/2008 8:57:02 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, November 19, 2008

Recently, as a meeting wrapped up, one of us was taking on an action item to adjust the due dates on a large list of work items. We had gone through the meeting saying "put that for the end of next week" or "put that for middle of next month" and there was a good chance that too much stuff had been put into some of the buckets. He said "I'll go through on a first pass and put the dates as we agreed them, then I'll send them out for everyone to review." Makes sense. He continued, "Once we see them all at once if we need to postpone some, or prepone some, we can." And part of my brain went "prepone? What the -- oh yeah, I get it."

It's quite useful really. People say that "move ahead" and "move forward" are perfectly clear and you can't get confused by them. The problem is, half those people say it's clear that moving forward means to an earlier date and half say it's clear that moving forward means to a later date. Oops.  "Move earlier" is ok, but I quite like prepone. I'm going to see if I can use it with a straight face. BTW I did a quick search, and it's an accepted and generally understood word in South Asian English. I'll see if I can do my part to spread it to the rest of the world.

Kate

11/19/2008 8:26:23 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, November 15, 2008

Friday night wrapped up with a reception in the speaker room where we'd been working all week. Some of us (including me) were a little slow to switch from workin-on-my-laptop mode to hangin-with-my-speaker-buds mode.

That's Rob Windsor in the foreground and Brian Harry next to him. I went with Cava, Rob with beer. There really are no wrong choices :-). In the background you can see the big screens that show the top ten speakers and also randomly display comments from any and all sessions. A number of these were very funny out of context.

Earlier Friday I took this picture from my hotel window:

Always you can see Sagrada Familia, I noticed this from the cable car and the castle also. It just rises up out of the sea of lower buildings.

Barcelona was, as predicted, warm and beautiful. Crime was not an issue this year - the police presence was intense and I heard no stories of pickpockets, muggers, or cutpurses this year at all. I discovered the best tapas in the city at Ciudad Condal - which doesn't have its name on a sign so you need to know the address, 18 Las Ramblas. Three of us arrived here - it doesn't take reservations - and fought our way inside through the crowd to reach the maitre-d', who asks "inside, outside, or at the bar?" and then told us it would be 30 minutes for our inside table. The next step is you go to the bar, ask for "tres cervesas por favor" and then point at something from the dozens of plates of gorgeous tapas and montaditos (thingies on toast) and say "tres". Presto - three beers and three (in our case) smoked salmon on toast and you go stand on the sidewalk with the rest of the city. Heaven. The beer was good, the salmon divine, and it didn't even feel like waiting. In no time we had our inside table and then the fun begins. Not a false note - and we gave them lots of opportunities because we ordered a lot of plates. Highly recommended, and actually cost less than some other dinners we had here even though we could barely move by the time we'd finished eating it all.

Will I be back? Well I guess it will be a while till Tech Ed brings me back - we move to Berlin for next year. So I'll have to bring myself back, because I'm really going to miss coming here otherwise.

Kate

11/15/2008 8:07:08 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, November 12, 2008

Check this out. If you go to DevTeach - and you certainly should - you will be getting more than you bargained for. First and foremost you'll be getting great sessions by great speakers. 136 sessions to be precise, plus a keynote by Ted Neward. Because of the small scale (8 simultaneous tracks instead of dozens) you will get a chance to meet and talk to many speakers and your fellow attendees during breaks and meals.

Now I happen to think that is well worth the $1250 attendance fee plus your travel and hotel. You would pay double to go to Tech Ed. Montreal the first week of December is a delightful trip, and you will learn the things you need to learn to stay current in this world, and get face time with a dazzling array of people who are not usually this accessible.

But, in case that's not enough, they've negotiated their way to giving you about a thousand dollars worth of software and learning. Seriously. I quote:

We believe that all developers need the right tool to be productive. This is what we will give you, free software, when you register to DevTeach or SQLTeach. Yes that right! We’re pleased to announce that we’re giving over a 1000$ of software when you register to DevTeach. You will find in your conference bag a version of Visual Studio 2008 Professional, ExpressionTM Web 2 and the Tech-Ed Conference DVD Set. Is this a good deal or what?

It's a very good deal. Oh, and one other thing. Did you go to TechDays? Did you get a $100 coupon? They've decided to retroactively make that a $350 dollar coupon. So you can attend for just $900.

Register now!

Kate

11/12/2008 10:52:59 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, November 10, 2008

There is an older, deeper meaning for "cut and paste" and this sticker, on the laptop of a member of the C++ team, shows it nicely. The sticker was a gift, btw - somebody made it for the team member. I like it.

Kate

11/10/2008 10:14:09 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, November 07, 2008

Guess where I plan to be mid-November next year?

What will they talk about? Let the speculation begin.

Kate

11/7/2008 8:25:28 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, November 05, 2008

Microsoft has announced BizSpark. If you know what DreamSpark is, then you might guess what BizSpark is. I was really surprised myself - essentially unlimited free licenses of developer software and hosting software such as Windows, SQL Server and SharePoint. Yes, free Team Suite for everyone in the company! You must meet three criteria:

  • Be a startup, less than 3 years in business
  • Have not much revenue, less than a million a year (stricter in some markets, mostly in Asia)
  • Be software developers, not consultants or resellers

You prove that you meet these criteria, not to Microsoft, but to a network partner. Ideally your network partner is more than just your gateway to free software, but someone who can advise and help you on the path to success. Since the network partner has to know a bit about you, not many will just email you a key if you email them. You can look through the partners on the BizSpark site and see who would be a good match for you to establish a relationship with. Be sure to get the user guide and read the FAQ as well.

Plenty of coverage of this elsewhere on the web:

etc etc.

So, if you fit the description and want the free software, what should you do? Go to the BizSpark site's Find a Network Partner page. A lot of them are venture capitalists and investment companies. If you were hoping to find such a firm, this is a cool way to know one that is in favour of your using the Microsoft platform and won't try to make you change development tools to get funded. If you weren't planning to work with an investor, scroll through looking for a firm that offers consulting and mentoring. You can send an email and see about working together. If you can't find a firm in your geography that looks as if it could help you, try a nearby geography. For example, I'm only listed under Canada, but Americans could engage with our firm too.

Kate

11/5/2008 3:32:38 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, November 04, 2008

All three from Steve Clayton's blog which I admire tremendously. The monster (Blue Monster updated to Azure Monster)matches the logo to my eye and they're both lighter and greener than the hex from the shirt. Btw I pronounce Azure with the emphasis on the first syllable :-)

Kate

ps: No clue what Azure is yet and wish someone would post about that instead of colours and pronounciations? Try http://blogs.zdnet.com/microsoft/?p=1671 for Mary Jo's take.

11/4/2008 3:10:22 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, November 03, 2008

More PDC goodness.

Steven Sinofsky is the senior vice president for the Windows and Windows Live Engineering Group at Microsoft. He was awesome in the Day 2 keynote. Then he walked down to The Big Room and did a half hour Open Spaces talk with attendees. I recognized fellow RDs Tim Huckaby and David Yack among them. The sound quality varies but the recording is well worth watching to see how comitted he is to the Engineering 7 blog and to communicating with developers.

Then there's Joey deVilla. I've been reading his personal blog for ages and his technical blog once in a while - he was an open source guy so it wasn't always relevant to me. I love his sense of humour and spirit of community. I was delighted to learn that he would replace the departing Jean Luc David (our loss is Redmond's gain.) While at PDC, he interviewed Don Box, Miguel de Icaza, John Lam, Phil Haack and some of the .NET Micro Framework team. Great ways of learning some of what happened at PDC and getting to know Joey a little better.

But he wasn't the only one! John Bristowe was also busy with the camera. He interviewed Joel Semeniuk (another RD) and some people from Windows Home Server. This is a product I am hearing a lot of praise for that I really should install on a spare machine.

I love these videos because they start to capture some of the non-session parts of the conference. If you're wondering why on earth you would go to a conference and not go to sessions, look at these conversations. Also look in the background at the other conversations and interactions. Face time is why we all come to the same place. Sessions are a bonus.

Kate

11/3/2008 12:14:32 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, November 02, 2008

We're building a backyard shed, and I recruited a certain young teen to help. Sooner than I expected, he was back inside the house. "Finished already?" "I need a rest." But I only see two or three pieces of wood carried from the under-roof storage area to the work zone. It turns out that he kept bringing the wrong piece of wood (2 x 4 when asked for 2 x 6, or 8 foot when asked for 10 foot) and having to take it back and go get the right one. This is tiring, of course. But I also found it illuminating because a similar thing happens with my new hires who are straight from school or university.

In an academic setting, if I assign you the task of getting me a 10 foot 2 x 6, and you bring me a 10 foot 2 x 4, or an 8 foot 2 x 6, I will probably give you a pretty good mark. Not 10/10, of course, but at least 7. After all, you have brought me wood, as opposed to a rabbit or some mashed potatoes. You have come back with something, rather than wandering off into the woods to play or inside to watch TV. You have even got one of the dimensions right and the other close to right. So you receive your mark and you're done. Similarly when I mark a programming assignment, maybe I spot a logic flaw or other mistake, your code won't work under certain circumstances, but it works some of the time, or almost works, or at least doesn't always blow up. I can give you 7/10.

In the real world, whether of shed building, or code writing, things are more binary. I have the wood I need or I do not. Your code meets our standards or it does not. And here is the key thing - you have to make it right. Take this wood back and bring a longer piece, or a wider piece. Take this code back and make it so it can accept strings with apostrophes in them, or so the title is centred, or whatever other bug you need to fix. You're not done until it's right.

It's a lesson that probably needs to be taught more explicitly to the new grad. It wouldn't hurt to teach it a bit in those academic settings.

Kate

11/2/2008 10:25:03 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, November 01, 2008

One of my demos (OK, more than one) for my upcoming Tech Ed Europe talks is a console application. I find when you're doing complicated concepts like C++ templated code, that adding the plumbing to talk to a Windows application (whether MFC, Windows Forms, WPF or whatever) can obscure what's going on. Generally speaking people can follow cout << i << endl; just fine and it reduces the header files and so on that are needed to use the sample.

I had one problem though - on this machine, when debugging a console application I couldn't get the Properties of the command prompt to come up when stopped at a breakpoint, and of course the command prompt disappears as soon as the program finishes running. I could change the properties in the command prompt you get for "start without debugging" but they had no effect on the debug one. The font was too tiny to use in a presentation:

Here's what I did. I brought up any old command prompt, right-clicked in the title bar, and chose Defaults instead of Properties. This affects every command prompt on your machine at once. I switched to Lucida Console and a bigger size, and closed the command prompt, then debugged my console application again:

Do I care that the font is now big in all my other command prompts? Not really. I suppose if I did I could deal with their properties one by one.

Kate

11/1/2008 12:01:15 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, October 31, 2008

An interesting thing happened towards the close of Thursday's MFC session at PDC. Damien Watkins was taking questions, and as so often happens, some of the questions were really more comments or suggestions, feature requests and so on. It's rare for the speaker to be the person who can act on these requests. Normally we're reduced to saying "send me an email and I'll forward it to the right people." Sadly, very few attendees do that. I know it takes a great deal of initiative and even courage to ask a question at a big conference (I do remember my pre-speaker days) and when asked to send email instead, that is sometimes too high a hurdle. As a speaker I can try to make a note of it, but if it's outside my area I may not write down the most important word of the request and that may leave the team unable to respond.

So during Thursday's session, after the third or fourth "OK, I'll pass that along," Damien volunteered:

I know you're thinking "he's just nodding his head and not paying any attention", but if you're using the mike it's all getting recorded. Everybody back on the team says "hey, as soon as it's online, let us know so that we can go ahead." It is getting recorded so it's all going back.

After the talk, Damien told me that they recorded the MVP Summit sessions and replayed them frequently to hear the attendee comments in context and with precision. For the PDC talks, when they need to share comments with another team, it's as simple as sending them a URL and a minute mark and asking them to listen. In fact I've done that myself this week when asking a question of someone in Redmond who couldn't attend - I sent the URL to the talk, a screenshot of the slide, and the minute mark. One of the easiest followup emails to compose ever. It really makes it possible for the conversation to continue long after the conference. I hope the trend spreads to all my conferences.

Kate

10/31/2008 8:43:37 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, October 29, 2008

Even those of us who are here can't see all the sessions we want to. I have three and four stacked across in most timeslots - and then I might end up spending that timeslot getting some vital "face time" with an RD or blue badge I don't otherwise get to see. But never fear, they're online within about 24 hours of happening! And what's more, you don't have to be registered to see them!

So, that Parallel native C++ talk that put me in the overflow room? http://channel9.msdn.com/pdc2008/TL25/ - watch the video, download the deck. The terrific Boris Jabes talk I lined up for? http://channel9.msdn.com/pdc2008/TL13/ - same deal. The MFC talk that hasn't even happened yet? The page is waiting at http://channel9.msdn.com/pdc2008/PC26/ and the video should probably show up Friday.

Want to find some more? https://sessions.microsoftpdc.com/public/timeline.aspx. This is just an amazing thing to do. It really increases the value for me of being here because it lowers my stress and worry about choosing the right session. It lets me concentrate on going to talks where I want to meet the speaker or ask the speaker a question, on going to the Labs and Lounge area to meet product team folks, and on enjoying the experience instead of frantically taking notes (or snapping pictures of demos).  I think this makes me MORE likely to attend future PDCs, believe it or not.

Kate

10/29/2008 11:57:45 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, October 28, 2008

An astonishing thing happened to me on the afternoon of Day 1. I went to the room for the "Parallel Programming for C++ Developers in the Next Version of Microsoft Visual Studio" talk, and the redshirt guarding the entrance said "the room is full you have to go to the overflow room." I tried logic with her "It's a C++ talk! It's can't possibly be full!" but she chose to believe her own eyes. So I walked the hundred miles or so to the overflow room, which itself became full. The audience really enjoyed seeing how simple it can be to take advantage of multicores using templated functions. Lines and lines of boilerplate goo disappear into a library instead of your code, which means people might actually do this. Nice stuff.

Having learned my lesson, I lined up immediately for "Microsoft Visual C++: 10 Is the New 6." The room filled up just as fast:

I don't think I had heard Boris Jabes present before. He was very good indeed. The slide you see in this picture lays out the mission statement for "Dev10", the next version of Visual Studio, as far as the C++ team is concerned: Make VC10 the most productive IDE for native development. Then he proved it to us. Since it was the last talk of the day, people stayed with questions for a long time afterwards. I really enjoyed listening in on those.

Tuesday started with a keynote that really impressed me. Azure is amazing but the gritty details are not there yet. But Windows 7 - it's on the hard drive! It's real! So they showed it to us. Then they started talking about client development. Ray pointed out a number of advantages of writing a Windows application instead of (or as part of a suite that also has) a web app.

I loved the Windows 7 demo. Lots of features there I really want right now. I love Vista, but this is even nicer. And I hear the stability is great already so you could really use it. Julie plugged the Engineering 7 blog I've plugged myself.

Scott Guthrie said C++ five times. I don't think I've ever heard him say it once before.

 

Don't worry, he talked about managed code too. You may think of ScottGu as "the web guy" but he gave client development in general, whether C++ or WPF, some serious love in this talk. Great announcements too - grid control for one!

Want one more inside joke explained? (I just love the RD alias for this sort of stuff!)

David Treadwell's shirt had 0x007FFF embroidered on it. Think of it as 00 7F FF. RGB. Go try it in some HTML. Then think back to Day 1.

Update: better picture of the shirt by Angus Logan. Subtle-as-a-brick demo of the colour by Steve Clayton.

Missed the keynote? Based on the URL to day 1, try http://channel9.msdn.com/pdc2008/KYN02/

Kate

10/28/2008 2:41:07 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, October 27, 2008

Now the fun begins.

If you were there, or watched it streaming, did you wonder about the shoes?

 

Azure and its subsystems had a number of code names, one of which was "Red Dog" and the team got red shoes (dogs being a slang term for feet) in honour of the name.

If you missed the keynote, you can watch it at http://channel9.msdn.com/pdc2008/KYN01/

I had heard some of this before, but not all of it, and I need to digest it a bit, but I think the key difference between Azure and hosting, between Azure and the Amazon offerings, is this: it's one thing to offer you a machine (real or virtual) and tell you "feel free to remote desktop into this and do what you need to do, install things, configure things, it's a machine" but it's a completely different thing to publish your app to the cloud and to configure the cloud rather than your target machine. I like it.

Kate

10/27/2008 1:54:46 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, October 22, 2008

Rico, who like me wonders from time to time "am I old?", muses about how things tend to come on around again. Is C++ too old to bother learning now? Rico says no. But he also says:

...the real need facing C++ programmers is somewhat the same as what faced COBOL programmers say 25 years ago.  It's not that the language is out of joint -- it isn't.  I mean, ok maybe you like or don't like COBOL syntax but that doesn't doom a language and surely C++ syntax is not the zenith of wonderfulness.  But that isn't what's holding C++ programmers back.  The biggest problem, at least in my opinion, is one of accessing new/modern runtime features that may have a different programming environment from the context of an existing environment.

Now, what does that translate to in terms of action items for you? Good question.

Kate

10/22/2008 7:01:38 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, October 16, 2008

With every year that goes by, I of course get older. But I tend to feel older in bursts that are further than a year apart. Like when I first had a student in a class of mine who was born after 1977, which is the year I started university. Or when someone asked me where to get that special .NET utility "xcopy" so they could take advantage of "xcopy deployment". (Hint: it came in very very early versions of DOS. Pre Windows.)

But it turns out some technologies are not only older than when I started in this business, they're actually older than when I was born. Video games are 50, and I am not.

The circular inset shows an oscilloscope that was hacked up to let people play "tennis".  But not like Pong, from above - this was from the side. From the CBC article:

Several weeks before the annual visitors' day in 1958, Higinbotham decided to liven things up. While reading through the instruction manual for one of the lab's analog computers, he found a description of how the machine could calculate ballistic missile trajectories.
With some minor programming modifications, he discovered that he could turn the ballistics demonstration into a manually-controlled game resembling tennis. Higinbotham had Dvorak hook up the computer to an oscilloscope, a five-inch screen used to display electric voltages, and add a pair of box-shaped controllers, each with a knob and a button.
The resultant game resembled a tennis court, as seen from the side. A horizontal line represented the court while a short vertical line in the middle was the net. Players could control the ball's direction and speed with the knob on the controller and hit it with the button.
"Tennis for Two," as it was dubbed, was a simple reworking of the analog computer's basic functions. To Higinbotham, it was no big deal.
"He didn't think there was anything new in there because he just used the circuits that were explained in the manual that came with the computer," says Peter Takacs, a physicist currently working in Brookhaven's instrumentation division. "He just took those circuits and figured out how to wire them together that would allow two people to hit a ball back and forth across the net. He didn't really think that was such an innovative thing."
Dvorak Jr. says the whole point of the game was to simply show off the capabilities of the hot new technology of the day.
"The whole idea was to show the public what a computer was, what it could do," he says. "From the perspective of society, he had no idea what he was doing."

Really cool.

Kate

10/16/2008 1:50:54 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, October 15, 2008

Normally I read Joe Duffy's blog for the concurrency goodness. But like most people, he has opinions that range quite a bit broader. His take on "what is an architect?" is really interesting reading. It's several pages long: here are the subheads:

0. Inspire and empower people to do their best work.
1. Oversight, but not dictatorship.
2. Taste is a hard thing to measure, but is invaluable.
3. Write code and get your hands dirty.
4. The power of the dyad: know your weaknesses.
5. It's for the customer, not you.
6. Admit when you're wrong, fall on your sword, and then fix it.

Joe concludes "Being an architect, in the end, is all about helping others to succeed. If you’re a really good architect, you’ll inspire people and rub off on them. You’ll gain a certain level of respect that is unmistakable and priceless. And that, in my opinion, is far more fulfilling than anything you could accomplish on your own working in a vacuum."

You may agree or disagree about whether these leadership skills are architect skills but I find this a great summary of what I'm trying to be in my firm and how I want to relate to my developers, testers, designers, and so on. Take the time to read it through.

Kate

10/15/2008 1:39:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, October 14, 2008

Do you recognize this man?

 

Maybe that's too recent a picture... try this one:

Combine these tickets with the PDC location and I have an earworm that should be with me till the end of the month.

Kate, humming

10/14/2008 8:50:26 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, October 11, 2008

Headed to the PDC this month? Is it your first? Or did you go once before but ended up feeling you somehow wasted the opportunity? A huge part of conferences is the face time. The really popular sessions will be blogged (so go to sessions on more obscure topics), there will be other ways to get some of the information (not all, so choose wisely), but no screencast can compare to chatting to people who know things you need to know, to making friends, and to seeing some of your heroes as actual human beings and learning what beer they prefer. Thomas Lewis has an intruiging Guide to the PDC that covers slightly different ground than the usual guides. An intruiging combination of how to learn the most and how to get free drinks as well.

Alas I am not staying at the Westin, but the Marriot. The good news is I have an invitation to a party at the Standard :-).

See you there!

Kate

10/11/2008 9:11:47 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, October 10, 2008

Well, I already knew I was an outlier. And I knew that my number of open windows was part of that eccentricity. But just how much? According to the Engineering Windows 7 blog entry on the taskbar, pretty much everyone peaks at less than 15 open windows, and most people at less than 10:

Here's my taskbar at a typical moment:

It's routinely three high. I've never gone to four high, but I have had more open than that. 40 doesn't seem unusual to me (that's 42 there) and I can find my way around in them easily enough. I am a big-time Alt-tabber of course.

Curious how the taskbar, launch pane, start menu, and so on will be different in Windows 7? Want to understand why some features are the way they are (hint: customers are all different, except in the ways they are the same)? Read the blog!

Kate

10/10/2008 8:45:16 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, October 06, 2008

Strange Maps has, well, a strange map of the island of San Serriffe. Here's a snip of it:

Semi-colonial, indeed!

Kate

10/6/2008 2:41:26 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, October 05, 2008

We have Team Systems hooked up to our Active Directory, which is great. It knows who created a work item (or closed it, or edited it) by who is signed in. The dropdown of who to assign things to is prefilled based on who works here. I love it. But recently we removed someone from AD, because she has left the company (to go work in a business owned by one of her family, not that the reason matters to AD or VSTS.) And that led to a problem when I went to save a work item she'd created.

Of course I can fix the "Assigned To" - after all, if I want to see this work item completed, it's pointless to leave it assigned to someone who doesn't work here any more. But "Activated By" - not so much. I can't edit that field and I wouldn't want to anyway, the value has historical meaning.

So, what to do? Neno Loje explains. You change the work item definition so that once something has been validated, that is allowed as a value going forward. You might not want to use it on the Assigned To field, but I sure want it on Activated By.

Kate

10/5/2008 2:15:10 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, October 04, 2008

I guess I haven't opened a CHM (compiled help) file in a really long time. So when I downloaded one (an installation guide) and it didn't really work properly, at first I didn't know what to do:

So, off I went searching and I found this fix. Some folks blame Vista, others say it's been that way since XP SP2, still others say it's about your browser (IE 7) not your OS. Whatever. Bill Evjen has had the fix on his blog for YEARS. I right-clicked the file, looked down at the bottom for an Unblock button, and clicked it. Presto!

I've said for a long time, an enormous benefit of the RD program is getting introduced to other RDs. Thanks Bill!

Kate

10/4/2008 2:36:17 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Friday, October 03, 2008
This pair of podcasts snuck onto the web over the summer. This was a single interview that's been split into two parts, both pretty large files (over a hundred meg.) I talk about C++, Vista, the marshaling library and marshal-as.net, the MFC update, and plenty of other things I've blogged about here before.

Let me know what you think!

http://www.informit.com/podcasts/episode.aspx?e=3a744e05-7893-408d-91de-d73b77ddb832

http://www.informit.com/podcasts/episode.aspx?e=fc209a80-bdd7-42b4-b555-514ce882178b

These are MP4 files. The web page bugged me to install QuickTime and I did and that's what played them. You may have your own preferences - there are download links on each page.

Kate

10/3/2008 9:20:07 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, October 01, 2008

At times I have to use a low bandwidth internet connection. No matter what my speed, though, I'm annoyed when I can't interact with a web site (say, scrolling down or following a link) because my browser is busy rendering some complicated chrome I don't care about, like a tree view navigation aid. Well, to be honest, I occasionally care about that chrome, just not very often.

Try these two links and see which loads faster for you:

http://msdn.microsoft.com/en-us/library/zkch586s.aspx

http://msdn.microsoft.com/en-us/library/zkch586s(loband).aspx

Even on my highspeed setup, I feel a HUGE difference between the two versions of the page. My one complaint about the low bandwidth view is that you can't see the title of the page you're on in the body itself, where it's truncated, though it appears in full in the title bar. Clicking persist low bandwith view puts you in this mode until you get yourself out of it. (The link changes to read switch off low bandwidth view.) This has the advantage that your searches and whatnot will come up faster from now on. Darn right I'm persisting low bandwidth view. I can turn it off if I want more navigation help than the breadcrumbs give me. Here's a glimpse at another page:

What are you missing when you use this view, besides the tree view? A chance to rate the page and add your own content, the collapsing zones (that I never collapse), the language filter ... everything except what you came for - the article or the explanation of the function/object/keyword you wanted to use. If you want the chrome, just turn off the low bandwidth view.

Kate

10/1/2008 4:38:38 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Monday, September 29, 2008

Let's see ... 50% early bird discount from an already low price (500 for 2 days, 250 for 1, discounted to 250 and 130 for the next two weeks so act fast), a full version of Visual Studio Professional, a full version of Expression Web, the DVD set from Tech Ed 2008, and a coupon for $100 off a DevTeach registration. That's not counting the eval versions of VSTS and Expression Studio. Holy Smoke, this would be a cost effective thing to attend if you didn't even go to any sessions! But the sessions are listed, and they are good ones. Need to know how to build a real application in WPF? Use the ASP.NET AJAX extensions in your web app? Use controls and styles in Silverlight? Lock down your SQL server? This is the conference for you. Local, inexpensive, timely, ... and a bag of goodies.

Plan to be there. And that includes doing a little reading first ... these sessions don't start at "what is this Visual Studio you speak of?" so there's a resource list to get you ready to attend.

9/29/2008 12:12:39 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, September 28, 2008

Richard told me about this "get" a while back but I missed the release of the show. Soma is the senior vice president of the Developer Division at Microsoft, and leads the teams responsible for providing tools and developer platform technologies targeted at developers, designers and teams involved in software development. This includes Visual Studio for professional developers, Visual Studio Team System for software development teams, Visual Studio Express and Popfly for non-professional developers and hobbyists, and Expression Studio for designers. That's a lot of responsibility, and if you use Visual Studio then Soma's opinions matter to you. He talks to Carl and Richard about how he got to where he is now (he's been at Microsoft almost 20 years, and part of the attraction was the Seattle weather, which makes sense if you know he was in Buffalo when he took the job.) The interview is full of behind-the-scenes glimpses into how decisions get made ... a fascinating conversation. Read and enjoy!

Kate

9/28/2008 11:48:30 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 26, 2008

The PDC site is full of announcements (and there will be more in the days to come, based on some emails I've received) so there are even more reasons to attend than before. The number one reason to come to PDC is to LEARN. Well some topics just don't fit into 75 minutes, and attending 3 different 75 minutes sessions by 3 different speakers who may or may not have co-ordinated their coverage is a strategy that might work if you're lucky, but might not work either. Enter the PDC Symposia - co-ordinated coverage of the two MUST LEARN topics this year - concurrency and cloud computing. Don't worry, you don't pay any extra or anything, just choose to attend these sessions on the last day.

The second reason to go to the PDC is to GET THE BITS. PDC has always been the place to get the fresh-out-of-source-control latest build of something that won't see beta for a long time yet. It's already been announced that those bits will include Windows 7 and will come on an external drive, not a big stack of DVDs. Cool!

The third reason to go to the PDC is to MEET PEOPLE. An utterly astonishing array of executives and wonder-brains are giving the keynotes. As well, the speakers are essentially all internal Microsoft people who've been working to create the technologies they're showing you. And the attendees are a cross section of developers and architects who really care about staying ahead of the curve and learning what's coming before it comes. A single lunch with any of these folks could change your life, or at least your job.

Register while you can! And if you see me there, say hi!

Kate

9/26/2008 9:13:49 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, September 25, 2008

Steve, a former C++ guy and current PCP guy, tells stories very well... just three of the reasons I like him. He blogs very infrequently, but when he has an update it's worth reading. This one is funny and informative. Plus, it features links to videos of presentations about the Parallel Computing Initiative. I've linked in the past to videos in English that are hosted on a page in French, so I know you can all handle it. Consider it Canadian Content even though the videos are from Paris. Go, read, watch, you'll enjoy it.

Kate

9/25/2008 8:47:15 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 23, 2008

I love reading Internet histories. Some say it's because I was around for most of it :-) but not so! The Internet was 20 years old when I started using it almost 20 years ago. Here's a nice summary that starts with the idea of packet switching and goes through iTunes, PayPal, MySpace and YouTube. It's a good read.

Kate

9/23/2008 12:11:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, September 20, 2008

Others have noticed this (Alexey Govorin, for example) but I tend to forget about it until just before I'm going into a meeting and feel that an export of work items would be helpful. I have some queries set up in VSTS that include the bug description. Here's how they look in Visual Studio.

Description is quite a long field, and when I open the query in Excel (didn't know you could do that? Right click the query in the Team Explorer pane) I see this:

Some, but not all, of the Descriptions are coming up all ####. Now this is what Excel does when something is too long for the column width. So it makes sense to look at things like widening the column, turning on Wrap Text, and the like. But the quickest thing that works for me is this: select the column. On the ribbon, drop down the formatting choice and choose Number. Not Text, which is what I would expect, but Number. Presto - I see all my Description entries.

Why does this work? I have no idea. But I hope this helps someone else.

Kate

9/20/2008 8:02:17 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 19, 2008

Microsoft Canada is trying something different this fall and winter. A paid conference featuring material from this year's TechEd USA, delivered by excellent local speakers and coming to a city near you. Some cities have two day events, others a single day.

  • Toronto, October 29th and 30th
  • Montreal, November 6th and 7th
  • Ottawa, November 27th
  • Winnipeg, December 4th
  • Calgary, December 10th and 11th
  • Halifax, December 17th
  • Vancouver, January 21st and 22nd

What will the talks be like? What will it cost? Will there be cool swag? The web site doesn't really say right now, but I've been told the talks will be actual TechEd talks, the speakers will be industry leaders (my friends and colleagues, maybe me if we can make the dates work), and there will be 5 or so tracks, meaning over 30 sessions, so something for everybody. The early bird discounts will be substantial, so watch that web site for updates!

Kate

9/19/2008 4:54:42 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, September 18, 2008

Some time ago a prospect called me to ask if I could help him solve a really frustrating problem. He had some software that was working and that he had delivered to dozens of clients, but sometimes it froze. It featured a lot of timers and he thought the problem was that one of them stopped firing, but he wasn't really sure. Could I do a code review for him and find where he had been stupid or sloppy to cause this problem?

So this is an intriguing concurrency problem, because multiple overlapping timers are not something you can definitively test, so I answered him "sure, send me the code." He sent it along and unfortunately it was really quite well written. That's unfortunate because I couldn't point to some obviously sloppy or stupid code and say "fix this and all will be well." We gave him some advice about how to gather problem information from users when they reported that one of the clock/timers "froze", and wished him luck.

Months later he came back, saying that it was a distinguishable subset of his clients that were having the problem, and please could we look again? He sent us the source code, as well as a deploy package that had gone to the most recent client to experience the problem. At first, we couldn't build his source code, because he had a whole pile of custom controls and funny license files and so on. So while we were waiting for him to send us things, we played with the executable. We couldn't make it misbehave. If repro cases don't come easily I usually switch to reading the code and imagining what could cause what I'm seeing, but when that doesn't work I'm back to trying for a repro. We were hoping it was having some sort of leak - memory, handles, something like that - which was freezing or hanging it. Repeated perusals of the source code convinced us the timers were a red herring, leaving mystery leaks as our best guess.

Did you know you can get Task Manager to show you more than just memory and CPU usage for your applications? On the View menu, choose Select Columns:

Then check off what you want, such as Handles and GDI Objects. Now watch while the application runs:

In this case, the deployed application didn't have a memory or handle leak, but it did seem to have a GDI Objects leak. The count kept going up, and never went down. We even discovered a way to make it go up -- there were buttons in the UI forming a toolbar of sorts, and they had a special effect as you moused over them and moused off again. Every time we caused the special effect to fire, the GDI Objects count would go up. This is the sort of thing that's impossible for developers to repro, because we don't idly wave our mouse back and forth along a toolbar wondering which button we should click. We test for like 5 minutes and say "looks ok to me." But we had been told that the freezes generally only happened when the application ran longer than usual - 4 hours rather than the usual 2 or 3. So we were hoping for some sort of leak that generally had no consequence, but could kill you if you waited long enough. So having learned how to drive the count up, we sat there waving the mouse around and driving it up. When we drove it past 10,000 - the application froze. Yay! Repro!

So we went into the source to reproduce it under the debugger - but the version we built from the source he sent didn't show the same behaviour - the GDI Objects count was well behaved and went up and down a little bit, never getting anywhere near 1,000 never mind 10,000. And interestingly, the source code he had sent us just used regular buttons in that toolbar like area. Aha! I blame the special button.

I asked him, since I didn't have the source for the version that was freezing, to tell me more about the button and where it came from. He told me the name and the URL from which it was downloaded. I went there and got a version number and file name, and confirmed he was running the most recent version available from that site. He also told me that now that I mentioned it, the only folks who'd reported freezing were the folks for whom he'd included the special button. So I knew it had to be the culprit. Time for some searching. Several people claimed that control had a "memory leak" problem. What's more, the developer of the control had released a newer version, which hadn't been mirrored over to the URL our guy found it from.

I told him all this, he went and got the newest version of the control, built the solution, and indeed the GDI count is now well behaved, and no-one has been able to make the application crash, freeze, or hang ever since. (I sat on this story for a few months to be sure.) So there you go, problem solved! I wouldn't have thought it was possible when we started. The moral for me is to use all the tools you have, and to use them fully. This problem was solved with Task Manager, an insistence on trying to reproduce the problem, and Live Search. Phew!

Kate

9/18/2008 4:39:56 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, September 17, 2008

A recruiter called me looking for an architect. I would be a good fit for the job if I was available - I have tons of Internet programming experience, architect systems all the time, services and desktop among others, and as for quiet confidence and entrepreneurial spirit, those describe me just fine. But I'm not available. It occurred to me that a reader of my blog might be. So if you're interested, please contact the recruiter. Good luck!

A software firm (30 people) in downtown Toronto is looking for a full-time architect to help build its next generation of Email System.

The organization is a divsion of a large U.S. based firm with a CEO with a track record of successful entrepreneurial start-ups and exits.

The firm develops applications within Microsoft Exchange and requires an architect with the following skills:

  • A high-level design capability as well as the willingness to be hands-on within the development cycle
  • Experience building applications within Microsoft Exchange, using MAPI, Active Directory
  • Experience building applications around Microsoft Outlook
  • Service oriented backend infrastructure
  • SMTP expertise
  • Desktop application and integration development experience

The right person should have a passion for coding and building systems, have quiet confidence as well as an entrepreneurial spirit.

If you are interested, or know of someone that might be appropriate, please contact Mike Fox at mfox@brightlightsinc.com or 416-406-1777.

Kate

9/17/2008 6:05:25 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 16, 2008

Here’s a free and useful add on for Office 2007. It enables “save as PDF” from a variety of Office products. Here’s what Save As looks like in Word 2007 now that I have it installed:

No muss, no fuss. No products that make my computer hang :-).

Kate

9/16/2008 7:23:38 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, September 15, 2008

At the moment I only have one fall speaking commitment settled and it’s one of my favourites - Tech Ed Developers Europe. Barcelona will be warm, both in the temperature sense and the personal interaction sense (though I do predict exposure to pocket-picking, bag-lifting, and other forms of theft once again). The attendees will be energetic and appreciative. The other speakers will be fun to hang around with. The ancillary events will be fun fun fun.

My topics are the Vista Bridge, and some new C++ features. We’re still working on the abstracts and titles, so I’ll post an update when they’re locked.

See you there!

9/15/2008 5:06:49 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, September 14, 2008

This year we FINALLY get a PDC. I have been looking forward to it for a long time, but booked my attendance and my flights during one of this year’s blogging hiatuses (hiati?). If you are responsible for any kind of strategy or planning, if you are starting a project that will take several years to finish and you want to use the latest technology while you’re building it, or if you just love making software and can’t wait to see what’s next, then the PDC is for you.

http://www.microsoftpdc.com/

It’s the last week of October, in Los Angeles (the only thing about it I don’t really like) and it will just cram your brain with information you actually can’t use to write code quite yet -- but that you really need to plan your own roadmap over the next few years. If you want to know something about a product that is already shipped (say, Visual Studio 2008) then this is not the conference for you. Even if your area of interest is software that is mostly written, maybe has a CTP out already, and will be released during 2008, then again, PDC is not really going to help you. PDC is about stuff that is just starting now. PDC is about getting a big headstart on those who waited till a product was released or a public beta was available. Here’s the list using their own keywords (the numbers are how many sessions are on that topic)

Ad Platform [2]
ADO.NET [3]
ASP.NET [9]
Cloud Services [27]
Dynamics CRM [3]
Entity Framework [3]
Expression [2]
HPC [1]
Hyper-V [2]
Identity [8]
IIS [2]
Internet Explorer [2]
Languages [8]
LINQ [4]
Live Mesh [5]
Live Platform [11]
Office [4]
Oslo [6]
Parallelism [7]
SharePoint [3]
Silverlight [11]
SQL Server [14]
SQL Server Data Services [6]
Sync Framework [2]
TFS [3]
Unified Communications [3]
Velocity [1]
Virtual Earth [1]
Visual Studio [13]
VSTS [6]
WCF [6]
WF [8]
Windows 7 [5]
Windows Home Server [2]
Windows Mobile [2]
Windows Server [1]
WMI [1]
WPF [5]
XNA [1]

Wow - 27 sessions on cloud stuff? Pay attention.

I also chose a random session so you could get an idea of the level of conversation PDC is for:

Unified Communications: Futures

Kyle Marsh, Chris Mayo

In this session we unveil the future of Microsoft Unified Communications (UC) technologies. Be among the first to see the UC roadmap, watch the new features in action, and walk though the code that makes it all possible. Come see how you can deliver breakthrough applications by embedding rich presence, build click-to-call features including voice and video, create communication workflows using speech and IM, and integrate Microsoft Exchange 2007 features and data.

Tags: Advanced, Unified Communications  

This is one of the few conferences in the world that I get myself to (that's right, my own money) as an attendee. I'm not there to speak, work a booth, or be on a panel. I'm there to learn, and you should be too. See you there!

Kate

9/14/2008 11:39:29 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 12, 2008

Vista gets a lot of bad press it doesn’t really deserve. For example, it crashes way less than XP for me. Some applications behaved oddly at first (primarily because of UAC and Virtualization) but I have either learned workarounds, such as running the app elevated, or upgraded or replaced the apps that were causing trouble. The slow file copy thing drove me insane, but SP1 took care of that. I really have very few complaints left about my computer, and the ones I have are aimed at specific applications (yeah, Outlook 2007, I am looking at you when I say that, and Adobe, don’t think not meeting my eyes will keep you out of my bad books) rather than the operating system.

Still, who wouldn’t want to make their operating system run faster and smoother? Here are some helpful thoughts and guides:

Windows Vista Performance and Tuning. A downloadable paper from Microsoft. Simple stuff here like choosing the right power management plan, using ReadyBoost, tweaking your search settings, and so on. Worth a read.

Vista Annoyances Resolved. Despite being annoyingly spread over 9 pages (see what taking ads does to you?) it has some good stuff. You’ll see explanations of SuperFetch, ReadyBoost, restore points, and more.

Roundtable with Mark Russinovich. An upcoming special roundtable on Vista Performance. Send your questions in ahead of time, then tune in for answers.

Learn a little, enjoy your daily computing life more.

Kate

9/12/2008 7:21:46 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, September 11, 2008

The Tech Ed Online folks have kicked off a Women in Technology page. They’re aggregating blogs, videos, news, profiles and more. Take a look around – I’ve added it to my favourites.

Kate

9/11/2008 10:23:01 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, September 10, 2008

Take a look at this map from Jeff LaPorte:

I wonder if this shows some sort of era-of-adoption effect, where folks in the US had widespread Internet access so they got started with AIM and never switched, then Canada and Australia picked up Messenger, and other places see a popularity of even more recent clients? Or perhaps it’s an artefact involving what kind of people use a messenging-interop solution? Whatever the mechanism, I’m a typical Canadian I guess since I use Messenger.

Kate

9/10/2008 10:19:43 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 09, 2008

Whenever an application blows up and offers to send information to Microsoft, please please say yes. On Vista it’s described as “checking for a solution” to make it more obvious what’s in it for you.

Sometimes, when you send this information to the giant Windows Error Reporting mother ship, you get a response that your blowup was caused by a known problem, and a link you can click for more information. That doesn’t happen to me very often, which I guess means I am among the first to find problems in shipping software. But that doesn’t mean you can’t benefit from the fix when the developers finally get around to acting on the reports they get from the WinQual program. Here is something you should do every month or so if you can remember.

First, bring up Problem Reports and Solutions. It’s on the control panel, or just click Start and type Problem, then press enter. You’ll see something like this:

Click View Problem History on the side. You will see a list of stuff that has blown up on your computer over the months.

Interesting, isn’t it? Click the Select all box at the top, and also Check Again For Solutions to Other Problems. Now click the Check for Solutions button. It will go and have a think:

It might also ask you if it can send extra info for some blowups, I always say yes. In for a penny in for a pound eh?

Then, the cool part. New solutions!

Click a link and you’ll get some more info with a link straight to the page that lets you get the update or latest version or whatever that specifically fixes the problem you had on your computer.

You can clear your problem history, but I am not sure why you would. You never know when a fix will show up for a problem you already had.

Kate

9/9/2008 10:14:33 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, September 08, 2008

Check out http://www.easyduplicatefinder.com/  - it has tracked down all the identical demos, powerpoints etc all over my C drive in quite a short time. I haven’t let it do the deleting yet, but the finding is worth a lot to me (I can delete for myself once they’re found.) Three gig of duplicates and that’s without looking on the networked shares where I store things when I’m done!

Kate

9/8/2008 10:05:35 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Sunday, September 07, 2008

The guys call me a regular now, and I suppose I am. Here’s another hour of rambling and fun covering Vista (especially the Vista Bridge) the Vista things you’re not allowed to implement in managed code, C++, the MFC update, concurrency, and whatever else popped into my head while we were talking.

KateP>

9/7/2008 10:03:39 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Monday, September 01, 2008

At Tech Ed Developers (Europe) last November I spoke with Lori Grosland about Woman In Technology topics, life, the universe, and everything for just over ten minutes.

http://microsofttech.fr.edgesuite.net/TechEdOnline/Videos/EU_1_lgrosland_kgregory_FB_500.wmv will take you directly to the video, or try http://www.mstechedonline.com/library/Library.aspx and search for Kate. If you use that second approach, also try clicking the Women in Technology Link to see lots of other videos from the fish bowl and the WIT lunches at Tech Eds around the world.

Kate

9/1/2008 9:38:22 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, June 30, 2008

Justin Etheredge made an interesting point about code readability. He asks us to compare these two functions:

public static int GetNextSize(int i)
  {
    //multiply it by four and make sure it is positive
    return i > 0 ? i << 2 : ~(i << 2) + 1;
  }
 
public static int GetNextSize(int i)
  {
    return Math.Abs(i * 4);  
  }

They do the same thing. One might be faster to execute if there was no such thing as an optimizer. But bit twiddling is notoriously hard to read and maintain. In the comments you can see people saying "don't those two actually return different values?" And that's really his point. Human beings have to read your code and maintain it. They have to understand it. And if you pre-optimize, if you decide that bit shifting is faster than multiplying, you make like harder for everyone after you. Since that might include you yourself, a few years from now, think twice about it. Write readable code. Let optimizers optimize. People time is way more expensive than CPU time.

Some folks think this is a good rule for staff, but that consultants who charge by the hour should go with the clever code. Generally they have two reasons for this. First, they worry that if they write the simple code, someone will look at it and ask "how much an hour did I pay for that!?!?!".  I don't fuss about that, I just think "one dollar for hitting it with a hammer...". Second, they look forward to being brought back every time any changes need to be made to that code, since they're the only ones who understand it. I think that's shortsighted. Once the client realizes you've done that, you'll never get to work on any new projects for them. I'd rather work on a steady stream of new stuff than be stuck bugfixing old stuff for people who resent that I tricked them with my cleverness. And when I do have bugfixing to do, I appreciate being able to read what I wrote :-).

Kate

6/30/2008 9:57:31 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Monday, June 23, 2008

I said I would post it when I got it.

Wow. Almost as amazing to me as being in a picture with Bill is being friends with so many of the others in the picture. What a day that was.

Kate

ps: I know it looks like most of us are all wearing the same light blue shirt. We're not. Stephen, Scott, and I are all wearing Tech Ed speaker shirts, because we were speaking that day. Across the front row, Dave is wearing his Culminis shirt (it's a slightly different blue) and Morgan her INETA shirt. Dan is actually in a white shirt that is reflecting Morgan's shirt. Unfortunately I can't remember whether John (behind Morgan) was wearing a speaker shirt for sure, but I think so.

Double ps: updates from Rob Zelt and John Holliday.

6/23/2008 6:28:29 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, June 21, 2008

When I interview people, I throw them lots of softball questions. One of them is "why should I hire you?". Some people think this is a scary and difficult question. On the contrary, it means "here is your invitation to tell me why you are right for this job. Feel free to brag as much as you like. I will now listen while you tell me what is good about you. Extra credit if you have some clue about what is valuable to me." Interview questions just don't get any softer. Yet some people blow it. They answer a different question, usually "why is it important to you that you can work here?" but occasionally "why do you want to be employed?". Fascinating information may come out of your mouth, but it isn't what I asked for. This of course means that I learn something else from your answer - something about your attention to detail, your ability to think of my needs instead of your own (and if you join us, to think of client needs), and your grasp of the business picture here.

Another question that terrifies people is "tell me your biggest weakness." I generally don't ask this because you just get "well I am a perfectionist, I must have all my work complete and beautiful" or "I work too hard I am so devoted" or "my brilliance shines so brightly that it scares others" or the like - bragging disguised as modesty. I already have a question which prompts you to brag. But the other thing is that not all weaknesses are things you actually need to improve or fix. For example, I sing poorly. I have arranged my life so that this doesn't matter. I would never raise it in a job interview. (If I was interviewing for Canadian Idol, it would be a big deal though, wouldn't it?)

If you do get this question, you want to provide an answer that is honest, that identifies something relevant to your workplace, and where you can say what you are doing about it, but more importantly what you need from them about it. "I work long hours and can tire myself when I get caught up in an exciting project. I really value firms that track overtime hours and give me an extra day off from time to time to acknowledge those long days and let me recharge my batteries." "I have very high standards and when I was younger every client got a Cadillac even if we bid a Pinto. I have learned the importance of requirements and project plans to keep my work in scope and make sure I solve the problem we are tackling in the time we have allowed, but it's still a weakness that I can be vulnerable to scope creep." "I think very quickly and solve problems faster than most people, but I can forget to make sure my colleagues are with me and that we have consensus. I work best in an atmosphere where at least one person can keep up when my mind takes off, and remind me to explain my thoughts to everyone."  These answers genuinely reveal something about yourself that would be a fatal flaw in some companies. The thing is, if they're true (and not something you made up thinking this was the "please brag" question) then you don't want to work in those companies. Revealing this weakness will save you from a miserable job. They also set a requirement on the interviewer. Will you give me time off when I have been working long hours? Will you have the discipline and project management to help me stay in scope? Am I doomed to be the smartest person in the room every time? Let the firm assure you (if they can) that they will be a good fit for you.

Take some time to think about your true weaknesses. Lack of experience, impulsive or overly rigid actions, ignoring procedures or refusing to ever deviate from them, freezing out slower thinking colleagues or never making a decision or offering an opinion without checking with everyone else first, skillset that's a little old fashioned, slow learner, new thing junkie, continuous partial attention, tendency to go dark, hesitant to ask for help, afraid of public speaking, horrible grammmar and spelling, everyone has something. Take your time and construct a reply that honestly states your true weakness, then explains the environment you need to thrive given that you are this kind of person. If you like, include something about how you are strengthening that part of yourself already, if you are. Or if that's just who you are (like my singing) don't pretend you plan to fix it. Resolve not to work for firms that can't support you in your weak areas. Never pretend just to get employed.

Kate

6/21/2008 10:54:44 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Wednesday, June 18, 2008

Recently, a young man who has just completed his post secondary education (programming etc) asked me for help connecting to local communities. He's looking for work and he knows from experience that networking and connections are vital. But out of the college atmosphere, it's not always clear where to find people. I suggested user groups, of course. For those of you who live vaguely north-and-east of Toronto, as I do, I suggest:

  • The East of Toronto .NET Users Group. I founded it because I didn't like driving all the way to Mississauga for user group meetings. Chris Dufour runs it brilliantly. Expect speakers from Microsoft, INETA speakers from all over North America, me once or twice a year, plus pizza for everyone and door prizes for a handful of folks each meeting. Meetings are generally in Oshawa or Whitby.
  • Durham Personal Computer User's Club. More consumer focused than developer, but industry speakers do come and you will meet geeky people in the area. I recognize several names on the speaker list as possible employers of new graduates. They meet in Courtice.
  • The Kawartha section of CIPS. Enterprise focused in many cases, IT Pro material as well as developers, and excellent networking opportunities. Meetings are generally in Peterborough and once a year (in January) they specifically hold a meeting for upcoming graduates to talk about employment topics.

It's quite likely that there are Java or PHP or Ruby user groups nearby; if you know of any please leave a comment. Unfortunately most groups suspend meetings for the summers, so it may be a while until they are meeting again. Still, meeting other people is the best way to find a job you will love. Remember, when someone is looking to hire, they aren't doing you a favour - they're meeting their own needs. They will count themselves lucky they met you, or were introduced to you.

Kate

6/18/2008 10:09:47 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, June 17, 2008

A long time ago, C++ MVP Bruno van Dooren started a new job. He blogged about why the procedures they follow are important:

We make medicine. Ours is injected directly into the bloodstream of patients who are already weakened by their condition. It goes without saying that there is absolutely no room for making mistakes. Any possibility for error has to be eliminated.

Most of us don't have stakes quite that high, but we work in environments where mistakes should not happen. And yet, they do. And more importantly, every once in a while a cascade of mistakes (I typed something in error, then I didn't run the tests because it was such a small change, then someone else just copied without checking etc etc) means that something bad actually happens "in production". Our procedures are designed to prevent this - the bad cascade happens when people don't follow procedures.

I've found that everyone sets procedures aside some of the time. Heck, if you have something wrong in production at 7pm Friday night, you don't leave it like that because you can't raise a second person to sign your release form, you fix it, and you do the release form Monday. And some procedures seem to be always ignored, which is a sign (when I have my I Own The Company Hat on) that they should be changed. But what interests me is that some people almost always ignore procedures, even good and helpful procedures that everyone else follows. Why would that happen?

I don't have a lot of data on this. People don't like to sit down for an open and honest chat with their boss about why they don't do things the approved way. In fact, most folks who never follow procedure go to some trouble to make it look as though they do follow it. What's more, once I become aware that someone routinely ignores a procedure and hasn't come forward to suggest it should be changed, our opportunities for conversation tend to dwindle, since they're usually busy with a new employer :-). But it seems to come down to one of three things:

  • The procedure takes a little extra time. The person is selfish or lazy or both, and skips that time. The pain the procedure saves is not their own, so they would rather have the time to either do other work and look very productive, or relax at work and have more free time. Sometimes this is a cue to me to reduce the time that the procedure adds, but not always. If you had a developer who took the read only flag off all source files so as not to be bothered with the time it takes Visual Studio to check those files out on edit, would that be OK?
  • The person doesn't know or understand the procedure, or doesn't believe that management will change the procedure if they come forward and suggest a better way. This is why we all suffer through endless "presenting the new procedure" meetings. How else can you tell people? How else can you make people believe? Thing is, I don't know anyone who was actually convinced by a "presenting the new procedure" meeting. I do better by following it myself (tough, because for many tasks in the firm I only get near them in those emergency "I'll do the forms tomorrow" situations) and by paying strict attention to whether others are following. I also need to be more transparent about "presenting the new procedure that was changed because X convinced me this new way is quicker but still prevents errors".
  • The person has discovered a way to do the tasks that is quicker or easier, and still prevents errors, (or maybe that prevents more errors, or whatever) but actively doesn't want the rest of the firm to know it. A sort of "I'm all right Jack" approach that makes that person more productive and perhaps more promotable, but does the firm as a whole no service. I often find out about this only long after the person has "left to pursue other opportunities" since hoarding information and increasing your personal success only are not paths to promotion with me, and this behaviour tends to show up consistently in many things the person does.

Of the three, the hoarding one is the hardest to deal with as a manager. Believe me, you will get more gold stars for having the idea that made your whole department faster than you will for being the fastest in your department. Even if, after your new procedure is implemented, you are somehow second fastest, I will know whose brain is saving/making me money.

Kate

6/17/2008 7:53:23 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, June 15, 2008

This fall there will be a PDC. Yay! What will it be about? Some hints are starting to emerge. I predict you will hear the word Cloud a lot. I predict things I blog about pretty regularly will get some serious coverage. I predict I will be there. That one's a sure bet actually ... I'm registered and everything.

http://microsoftpdc.com/

Yeah, I know, LA again, but hey! It's the PDC! How bad can that be?

Kate

6/15/2008 11:35:01 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, June 14, 2008

I watch a lot of videos. Technical interviews and webcasts, mostly. I'm not much of a YouTube person. Channel9, DNRtv, the DVDs with all the TechEd sessions on them, that's what I watch. And I watch on planes and in hotel rooms, to pass the time, or because there's one specific thing I want to learn. But I am an impatient person. Especially when I'm alone, I just cannot go slow. So I love that I can speed videos up with Windows Media Player.

It's not a simple option to find. You click Now Playing, then Enhancements, then Play Speed Settings. And presto, you control your impatience level:

I generally live at 1.4. This gets you through a 1 hour video in 43 minutes with really no loss of understandability. I might slow it down to 1.0 during a demo if I want to take notes and capture the code or the steps as the demo proceeds. I move up to 2.0 if the person is explaining something I already know. This is one way to make that huge pile of stuff you are trying to catch up with just a little more bite sized. As well, because you really have to concentrate at 1.4, I don't do that continuous partial attention thing where the video is playing but I'm checking my email, answering a few things, IM-ing two people and the hotel room TV is on CNN all at the same time, and then -surprise!- I can't really remember much of what I just watched. By really really watching for half or 3/4 of the time, I really learn what I set out to learn. Works for me.

Kate

6/14/2008 10:20:27 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Wednesday, June 11, 2008

If you've ever watched Star Trek: The Original Series you know it had a trope or a meme where an "away team" would beam down to the planet and suddenly one of them would be killed. Usually vapourized or dragged off by a yeti or somesuch. And as my four year old once said to me "Red people fall down. Not red people don't fall down." This is also known as the redshirt phenomenon. To this day, when I see three main characters (on any show) plus some guy we've never seen before, someone is sure to call that guy out as a red shirt just as the suspenseful music starts to rise.

Well, Matt Bailey has run the math. Are red-shirted crewmen more likely to die than yellow or blue shirts? Indubitably. But - is it good news or bad news, redshirt-wise, if the episode also features what I've always referred to as Kirk putting his boots on, though strictly speaking he does that after the plot point Matt refers to as "meeting" alien women. See how some solid data analysis and well chosen visuals can truly illustrate the redshirt phenomenon on Star Trek, at least for TOS. The powerpoints alone are worth the click.

Kate

6/11/2008 6:53:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, June 08, 2008

One of the questions I got in the booth at Tech Ed was about First Chance Exceptions. The attendee was getting these messages in the output window in Visual C++ warning about "first chance exception" and was concerned about it. A long-long-neglected neuron fired. I think I ran an article in a journal I edited 10 or so years ago in which Mike Blaszczak covered this. And I think the bottom line was "don't worry." So I ran a quick search and found this knowledge base article that indeed says "don't worry." The debugger gets the exception first, before your code. It just writes to the screen that it got it. Then your code handles the exception and life goes on as before. If your code doesn't handle the exception, then the debugger gets it again, and then perhaps something interesting happens. But first chance exceptions are nothing.

Having a long memory for tiny details is handy sometimes.

Kate

6/8/2008 6:20:53 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, June 04, 2008

On Tuesday, Day 1 of TechEd,  I was lucky enough to join a small group of people for lunch with Bill Gates. While spending an hour or two with Bill would be an honour at any time, to do so at his last Tech Ed was extra special. The invitees spanned a wide range of the developer spectrum, and what we had in common was our contributions to community. There were Regional Directors, MVPs, MCTs, INETA people, and so on. Bill arrived just in time for a group photo (I'll post it when I get it) and then sat down to answer questions for an hour or more. I was so impressed; more impressed than I planned to be. I found his answers really illuminating and inspiring. Our geeky minds and way of approaching problems can be turned to far more than just designing software. Why not, if you don't have to worry about covering your mortgage payment, try fixing the problems of disease, education, agriculture, and even the United Nations?

We were given an enormous (and heavy) memento:

It's going on the "bookshelf of showing off" for sure, but the inspiration and the practical information are more to me than the crystal :-).

Kate

Update: Fellow attendees Andrew BrustMatthew RocheDaniel EganScott GolightlyStephen Forte, and Neil Roodyn have blogged their impressions also. So has Soma, who graciously welcomed us all to the lunch and is well known as a friend of developer community people.

6/4/2008 5:38:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [3]
 Sunday, June 01, 2008

Here I am again in Orlando, getting ready for another Tech Ed.

Being in a familiar place, doing something I've done so many times before, it makes me finally ready to blog again. A lovely quote I read just yesterday, "Blogging, like speaking at a Quaker meeting, is something one must do only if the spirit moves one." And today, in a hushed convention centre that will hold over 10,000 tomorrow but seems to have only a dozen today, it moves me. (Read the whole article, btw. And reflect that at Tech Ed we are exhorted to Learn, Connect, Explore.)

Tomorrow, my precon on Vista programming. And plenty more to follow. My friends, in more ways than one, here we are again.

Kate

 

6/1/2008 4:05:46 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, January 25, 2008

Larry O’Brien continues his musings on what makes a good developer and a bad one. Now he’s bringing methodology and your code base into the mix. You just have to read it, that’s all.  Best quote: “To me, a good programmer is one who contributes to the practices that maintain a silver codebase -- no matter how quickly they write code! Bad programmers are those who don't care about the quality of the codebase.”

Kate

1/25/2008 11:41:25 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, January 24, 2008

I don’t like this. Really, I don’t. But there are people who are turning off UAC on their whole machine because there is one application for which it is a deal killer. So, reluctantly, I will tell you how to turn off UAC for just one application. I would rather you didn’t do this. Please, have a good reason.

And remember, UAC applies only to interactive applications. If it was a service, it wouldn’t be affected by UAC. So that whole tale of woe about nobody is at the keyboard to consent to the prompts? Then why not make it a service? Honestly, that would be better. Let this just be a stopgap. OK?

Kate

1/24/2008 11:40:22 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Wednesday, January 23, 2008

When .NET first burst on the scene, we talked a lot about “XCopy deployment”. What we meant was that you didn’t need registry entries, you didn’t need to copy DLLs to windows\system32 or whatever, you didn’t need to mess around with the person’s computer hardly at all – you just copied the exe and dlls into some folder somewhere, optionally a foo.exe.config into the same folder, and you were good to go. But we really should have called it “FTP deployment” because people would come up to me at the end of talks and ask where to find the XCopy utility that you needed to deploy .NET applications. Ooops.
For those who never knew it, XCopy was a command (extended copy, a replacement for the original copy) that came with DOS. It was so much better than copy because, among other things, if the target floppy drive was full when you were copying a whole pile of files, it would prompt you to put in another one and keep going, where ordinary copy would go “disk full” and abandon the whole thing.

I admit, it’s been well over a decade since that’s been an issue, so it perhaps was no surprise to read that XCopy has gone the way of all utilities ... replaced by something shinier that has less compatibility issues with the new operating system. Of course it isn’t exactly gone, just deprecated. OK. I might have to learn Robocopy now. But I promise never to speak of Robocopy deployment. That just sounds weird.

Kate

1/23/2008 11:38:41 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, December 23, 2007

You know something is mainstream when it starts to get named. I've been talking about concurrency matters for over two years now. And now it seems almost every day somebody comes out with something you just have to read or watch on this matter. An attendee at Tech Ed Developers in Barcelona asked me "isn't it confusing and wrong that people are doing such different things in this space?" I don't think it is. Some folks are trying things with libraries, with compiler directives, with new language keywords, with whole new languages, with frameworks, with the operating system, with the hardware, ... with everything you can think of. And I don't know which things will work out and how the various things will work with each other. None of us do! But it sure is fun to watch it happen, and it's probably the only way to do it.

So, some links for you, accumulated over the fall:

Herb's advice is good. He says "Expect at least dozens of major product announcements and releases across the industry, before the toolset expansion phase is fully underway and approaching some maturity. We the industry have undertaken to bring concurrency to the mainstream, and as with OO and GUIs it will take multiple years, and multiple major releases, across the industry on all platforms." Bring it on!

Kate

12/23/2007 7:33:00 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Saturday, December 22, 2007

The screen on my Dell laptop was very very broken earlier this year:

The nice Dell people came out and fixed it under warranty, but they were missing a part in the stuff they sent to the repair tech. The missing part was sent to me to install myself (don't worry, it's self-adhesive.) A box arrived roughly the size of those MSDN CD shipments - about 4" x 6" x an inch or more thick. Inside there was a lot of foam and other padding, and these (I added the penny for scale):

That's six little black dots on their self adhesive backing. Turned the six screw heads around the edge of my laptop from uncovered to covered:

 

I like the look, but why couldn't they have trusted the tech with them as part of the first repair?

Kate

12/22/2007 5:43:05 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, December 21, 2007

Raymond Chen asked why QuickEdit mode isn't always on for command prompts. Then he gives a cogent explanation of why, but he left me wondering what QuickEdit mode is and why I never knew about it. I copy things out of command prompts (or DOS boxes as I usually call them) all the time - usually file names, but sometimes results from things I ran or commands that I am pasting into instruction manuals. As you may know, this generally involves getting into "mark mode" first:

But there is such a thing as QuickEdit for a command prompt, and it basically means you're always in Mark mode. You can change the properties for the shortcut (on my Vista machine, the Visual Studio 2005 command prompt is in C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Visual Studio 2005\Visual Studio Tools and that's probably where it is on yours too.) Here's the option:

You have to consent to using your admin powers when you save this change, and then that command prompt is in quick edit mode every time you launch it.

It may not save much time but it saves so much frustration! Hope it helps you too.

Kate

12/21/2007 5:13:32 PM (Eastern Standard Time, UTC-05:00)  #    Comments [3]
 Thursday, December 20, 2007

Long ago I blogged about a motto of ours: Fail Fast. Some people replied with comments like "why fail at all?" but that misses the point. Mottos are short and pithy; a more accurate version of the motto would be "if you're going to fail at all, get it over with at the beginning." Here's another take on the concept ... how a week's stall while a decision gets made can cost a company thousands of dollars in hard costs. It's my experience it costs far more in reduced morale and productivity over time.

Kate

12/20/2007 4:54:56 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, December 17, 2007

So, you're the proud owner of a ton of Visual Studio 2005 projects. And you've heard that converting them to 2008 projects is pretty much a flawlessly easy thing to do ... just open the project, let the conversion wizard run, and save it. Done! Except that if you have a hundred projects, that would be a crummy way to spend your time. Who has a hundred projects? Well a book might, or a course, or a presenter with tons of demos kicking around (I resemble that remark), or a development team with a lot on the go, I suppose.

Anyway, even if you only have dozens, wouldn't you like to be able to deal with them practically instantly instead of opening each in VS, watching the wizard do stuff, clicking Next and Finish on relatively pointless dialogs that essentially mean Are You Sitting Comfortably? No problem. John Robbins has a cool tip for you, but it's so short I can include it here in its entirety.

Open a Visual Studio Command prompt. CD your way to the folder with your project in it. Issue this command, subbing in your own sln file name:

devenv /upgrade MySoln.sln

Move on to the next folder. That's gotta be faster than watching wizards work! Remember, typing is a valuable skill even for the developers of today.

Kate

 

12/17/2007 4:32:34 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Saturday, December 15, 2007

I can't remember where I heard about this now... I had thought it was Steve Clayton but I just searched without success. So, unattributed then, here is a cool thing:

Thats's from http://www.google.com/trends?q=c%2B%2B%2C+c%23&ctab=0&geo=all&date=all&sort=0

The top pair of lines is searches (blue C++, red C#) and the bottom is news references. You can run this on a single thing to track it over time or on a set of things to compare them, whatever works for you. Here's what you might demonstrate with a single term:

http://www.google.com/trends?q=katrina&ctab=0&geo=all&date=all&sort=0

I bet you those blipups are anniversary articles. Anyway, imagine what you can do with this! Have fun!

Kate

12/15/2007 10:25:49 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, December 14, 2007

I've mentioned before that sometimes when I search for information about topics that matter to me, the search results frustratingly include mostly things that I wrote. That's annoying when you're trying to learn more! But from time to time that same search turns up things I've forgotten, like this interview from over four years ago with Stephen Ibaraki. He's a good interviewer and it's interesting what the interview covers. People ask me all the time "how can I be a speaker too?" or "what does a Regional Director do, anyway?" There are some answers to those, and some tips about writing, interop, porting a project over to .NET, running small business, and more too. It's pretty cool!

Kate

12/14/2007 9:13:53 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Wednesday, December 12, 2007

Recently Eileen Crain, who used to manage the RDs, linked to a video we made "way back when" to try to explain the program. It's kind of a hard program to explain, but you might like seeing some of us try.

Kate

12/12/2007 11:23:45 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, December 11, 2007

At Tech Ed Developers Europe, one of my talks was on STL/CLR and the marshaling library. There are three super cool things about the marshaling library that all C++ developers need to know. The first is that the random boilerplate code we used to write to convert between two kinds of strings is now taken care of for us:

char* stringfromnativelibrary;   //gets set somehow
ManagedFunctionExpectingSystemString(marshal_as<String^> stringfromnativelibrary);

The second is that it's just templates, meaning it is fast at runtime and intuitive for a C++ developer. The third is that because it's templates, we can write our own specializations, and convert between any two types we feel we will be using - typically on either side of the managed/native border, though that's not a requirement at all.

This last part is really exciting to me. Imagine you have some library you wrote ages ago that takes a RECT and does something with it related to your business logic. But you've replaced your UI and now you have a System::Drawing::Rectangle to represent what your user selected. Wouldn't it be cool to write:

oldfunction( marshal_as<RECT> RectangleFromWinForms);

That's not a problem as long as someone has written that specialization. You can do it, or you can try to find one someone else already wrote.

Date and time, arrays, anything related to screen position, these are going to be types everyone uses. Why not share the effort of writing these conversion functions? That's the thought that hit me at the end of my talk. So I came home and set up a site -  www.marshal-as.net - to use for just this purpose. I've had a few submissions from Jason, who was at my talk and was there when I thought of it, and a wish list from a "little birdie". The C++ team knows what I'm up to and they are excited too. Now what I need is submissions and lots of them!

So, drop me an email, comment on this post, or (better) comment on the first post over at www.marshal-as.net. I'll post the specializations one per post and we'll build a library. I'm inspired by pinvoke.net and would like to see this as the destination for finding a specialization instead of writing one. Can you help?

Kate

12/11/2007 7:38:37 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, December 10, 2007

Harry Waldron has an interesting post. He's been doing some testing, and he can show that a longer password is harder to crack than a short complex password. We've been using passphrases for some time in our offices - collections of words and spaces like It's Almost Time to File Taxes that are actually quicker to type than the short complex password you might create from them (try it - compare that sentence, which to my knowledge has never been a password on my network, but could have been, with Iattft, a short password made from the first letters of each word.) I actually went to passphrases for this reason - they're quicker to type and easier to get right. Now I know that they're also harder to crack. Nice!

Kate

12/10/2007 9:18:07 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, December 08, 2007

Wednesday December 12th is the Christmas Party for the East of Toronto .NET User Group. Mark Relph will come and talk about where he sees the industry going, your $10 cover charge will cover “nibblies”, and there’s a cash bar. Come and meet your fellow user group members and socialize a little. Please register in advance!

Kate

12/8/2007 4:17:34 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, December 03, 2007

Everyone has UI woes. Users want more controls on the dialogs, or they want them simpler, or smaller, or larger, or combined, or split. The thing you think makes perfect sense they refuse to understand.  But it could be so much more complicated. Take this insightful post on the Shell Blog about one of the games that has come with Windows for as long as anyone can remember: Minesweeper. Some folks who use Windows don’t actually think that mines are funny things or that avoiding them is a game. Well, probably if you asked them, most people would agree that mines are bad, but for some people it's a far more personal and upsetting reality than for others. (BTW the mines in Minesweeper are apparently water mines, not land mines, but that doesn’t really increase the fun factor.)  So they changed it to give you an option to find flowers instead:

Be sure to read the whole post to understand why that was only the start of the work involved.

Kate

12/3/2007 4:07:11 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, December 02, 2007

There are plenty of webcasts on “what’s new in ProductName 2007” or “Introduction to XYZ Security” or various other technical topics. I’ve done my share and will continue to do so. But this is something a little different:

  • Becoming a Better Developer
  • Building Your Skill Set
  • Discovering Your Trusted Resources
  • Becoming Your Own Boss
  • Creating Your Own Start-Up Business

Some of the high flyers of the Canadian developer community are here... you want to watch these. The webcasts are available on demand and there are plenty of handy links as well for you to use as you’re following along.

Kate

12/2/2007 3:59:31 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, December 01, 2007

I recently started reading Rands In Repose, a business blog of sorts that is full of advice I will never need (how to enjoy a gambling trip to Vegas) and plenty more that I find very useful. Take The Laptop Herring, for example. He argues strongly for the banning of laptops in meetings. Oh dear. I take my laptop to essentially every meeting. But he then goes to on to direct some good thinking towards WHY a person would sit in a meeting room and surf the web or check their email. Either you’re in the meeting or you’re not, right? Well, no, because most of us don’t have the power to say “that hour would be a waste of my time” so we have to go. I had a client whose meetings always lasted exactly an hour. People found a way to use up that time even if the decisions were all made at the 37 minute mark. Grrr. But whether or you not you can refuse to attend meetings that are a total waste of time, there is value in realizing that laptop use is a dramatic indicator of what people feel about the meeting they are in.

And from his comments, here’s a challenge for the brave. You want your laptop in the meeting because you’re taking notes / assigning work items / running queries / checking that against the requirements? No problem. Put it on the projector. That’ll keep you off email / IM / YouTube, won’t it?

Kate

12/1/2007 3:56:11 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Friday, November 30, 2007

My last post before my hiatus was Give Before You Take. Steve Clayton expressed a very similar sentiment while talking about making yourself, as an employee, high value and hard to replace. Worth reading, and follow his link over to a nice categorization of employee values and behaviours. It’s not enough to provide high value to your employers or customers – if you provide “commodity service” that others can also provide, you’re replaceable. And who wants to be replaceable?

Kate

11/30/2007 3:52:53 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, November 27, 2007

Eric Lippert talks about some choices that were made in creating C#. He emphasizes repeatedly that C# is not “C++ with the X parts taken out” – where X might be “stupid” or “complicated” or “reserved for smart people” depending on who you talk to. And I agree with him. C# is its own language with its own strengths. It enjoys a big advantage, too: it came from a blank page and wasn’t constrained by an existing code base. For example, one subtle source of bugs in C++ applications is that the order of subexpression evaluation is not enforced by a standard. If I write x=f(y) + g(z); it’s possible that one compiler (or one version of a compiler) might evaluate g(z) first, while another evaluates f(y) first. If these functions have side effects, this matters. I’ve always advised developers that if your functions have side effects, and you care what order they go in, split these expressions up into lines that happen in the order you want: x1= f(y); x2 = g(z); x = x1+ x2; for example.

Eric asks, “is there any benefit to the user of having this order of operations be unknown?” and of course there is not. The reason the order is unspecified in C++ is because there were compilers (from more than one vendor) before there was a standard. That’s not a constraint the C# team faced, so they laid down the law – subexpressions are evaluated from left to right. [Yes, I know some people claim it is a benefit to the user that the compiler is free to optimize by adjusting the order of evaluation. I just fail to see an optimization available by doing things in a different order.]

Two morals of this story. First, new languages can do some things older ones can’t, and that’s a good thing about those languages. Second, you really need to know how your language works, or some day it’s going to bite you.

Kate

11/27/2007 3:36:58 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, November 26, 2007

Michael Easter posted his own personal and opinionated list of the seven most wonderful programming languages of all time. Generally he gives points for changing the world and influencing generations of developers. Perhaps you would choose your wonders based on what you can do with them today, in which case I guess Fortran wouldn’t make your list. But the wonders of the ancient and modern worlds didn’t have to hold up to scrutiny like how many bathrooms they have or whether they’d be hard to clean, and I think that should be true for languages too.  If they’ve inspired us, why not recognize it? Michael chose Fortran, Lisp, Smalltalk, C, Python, Java, and JavaScript. His commenters add plenty more!

Kate

11/26/2007 3:26:08 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, August 06, 2007

Recently I got an email, sent to a largish list of semi-anonymous people (the sender knows us all, but we don't know each other and aren't a "community"), asking "can you give me some advice about why I don't have a job yet?". Having now received several more requests and questions from this same person, it's pretty clear to me that the answer is "because you really need a job right now." The sad truth is, you can't get a job when you NEED a job. The most desirable candidates are the ones who can pick and choose, and who are coming to an employer because that employer is their very best fit. The least desirable candidates are the ones who might not enjoy the work or have career plans that involve that employer for decades or even years, but have a rent payment due so they have to take SOMETHING and this is the only thing going.

This little irony or paradox is not confined to job hunting. Say you want to borrow some money because you lost your job, your SO left you and you have to pay all the rent by yourself, and your car broke. You  NEED the money, and not a bank in the world will lend it to you. But if you just finished high school, have no income other than the student loans you expect to receive, and no plans to work within the next few years, you can have an unsecured credit card. You don't need the money, and that's what makes it safe to lend it to you. Here's a tip for young people: when you first get a job, and have a nice income, but no mortgage or other payments, borrow 5 or 10 thousand dollars. Put it in a savings account, make the payments like clockwork using the money from the savings account, and you will have a lovely credit rating, because you borrowed money and paid it back. Better still, put it in your retirement savings and make the payments out of your income -- you'll get a lovely credit rating and a lump of retirement savings that can compound for the next 40 years. It's not just money that follows the "it's better not to need it" rules -- most of us learned in high school that lonely people make very few friends and go on very few dates, but the popular people get invited to everything and never sit alone.

The only way around the paradox is to act less needy than you feel. The simplest rule to describe this is "give before you take." Before you ask someone for something, give them something - typically information. In many cases, you can give them "I am a terrific candidate for your job". Just changing your attitude from "please please I need you to give me this" to "you are lucky today because I am just what you need" makes a huge difference. I blogged about that over three years ago, with some specific advice about knowing what you want.

Give before you take can extend into so much else as well. Do you call people and say "what are you doing tomorrow?" That makes me really uncomfortable. I am always doing SOMETHING - even lying around on the couch and watching TV - and if I say "nothing" then I may have accepted an invitation sight-unseen. So before you take information about my plans, give me information about why you're asking. "I've got a spare Jays ticket for tomorrow, would you like to come?" or "I have to move on short notice and I need friends to help load the van" or "I'm by the side of the road and need someone to come and get me" work fine all by themselves without the dance of "are you doing anything right now / tomorrow night / this weekend ?" preceding them. Sales guys call me up and say things like "so, does your company accept credit cards?" and while it's not a secret or anything (we do) it rankles me that they want that information but I don't know why I should give it to them. I'd be way happier with "I represent a credit card processing company, and we <whatever they do.> We can save you money if you already take credit cards, or get you set up if you don't. Do you accept credit cards already?"

I try to give before I take in everything I do. Before I ask a new client for a deposit or a commitment, I give them a proposal. Before I ask questions of the candidate in a job interview, I tell them a little about us. I do good deeds where I can and rarely ask for favours. On mailing lists, forums, newsgroups, or active blog comment threads, I answer other people's questions before I ask one of my own. And I blog, which is a form of giving information to many many people at once. Some day I may ask you a question, and if you read my blog you'll remember that I gave before I asked.

Kate

8/6/2007 5:24:41 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [6]
 Saturday, August 04, 2007

Jon Udell posted recently about a compelling graphic in the New York Times:

This is a very intruiging graph that immediately gets you thinking about survival rates, about whether new cases are rising or falling, and the obvious contrasts between, say, prostate and pancreatic cancers. But Jon then goes on to link to a post about how to make graphs like this yourself featuring your own numbers (sales? expenses? bug rates? time spent?) in Excel. I am consistent amazed at what Excel will do for people who know what they're doing. Check it out.

8/4/2007 7:54:08 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, August 03, 2007

Andrew Clifford has a slightly controversial blog post in which he makes this claim: real programmers don't test. Well, on further investigation, what he really says is that really good and experienced programmers don't have a separate testing step at the end. And even in that diluted form, I'm not sure I agree. My developers think of tests before they code, and they test as they go, but on large development projects (and some small tasks for that matter) I still have a tester take a run through the system to make sure there is nothing that we would cringe if the client were to find :-).

The Braidy Tester has a way of thinking that may scare you a bit and a huge list of tests that you need to run at the end in his "you are not done yet" lists for testers and developers. The first item on the developer list is the most important to me -- when you find a bug, ask yourself why it didn't turn up earlier. Why did we wait until we were 90% complete to test with their old data? Why did nobody print this before? Why has it been three months since anybody tried adding a customer record before using this screen? "Why" questions tend to hurt a bit, but they prevent pain in the future. And folks who test as they go, who test in their minds before they design or code, can fly through a "you are not done yet" list and say "yes I am!"

Kate

8/3/2007 7:43:17 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, August 01, 2007

The transparency from Microsoft these days is getting frankly astonishing. Here's something I've never seen before, courtesy of Steve Clayton, blue-monster-spreader:

When you understand where a company gets revenue from (and where it doesn't) then things are more likely to make sense to you. Steve's comments about SharePoint are interesting too and follow his link back to Todd Bishop's take on this.

Kate

8/1/2007 9:04:16 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Saturday, July 28, 2007

Check it out ... sessions are starting to appear. I've been looking at the Tools and Languages track... there are some talks here I'll be sitting in on for sure.

It's going to be a fun fall!

Kate

7/28/2007 10:56:00 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, July 27, 2007

You know this is one of my hobbyhorses. But I didn't write this quote, and neither did Herb Sutter or Larry O'Brien:

And so the world is going to move more and more away from one CPU that is multiplexed to do everything to many CPUs, and perhaps specialty CPUs. This is not the world that the programmers target today. This kind of complexity was historically reserved only for the wizards who wrote the core operating system; or, in the world of supercomputing in science and engineering, people who had the ultimate requirement for computational performance built big machines like this and have used them to solve some of the world's tough computational problems. That was always a niche part of the industry.

This presages a change where the industry at large, the whole concept of applications, will ultimately have to be restructured in order to think about how to take advantage of these machines, because they won't just get faster every year. They'll get more powerful, but in fact only if you're able to master these problems of concurrency and complexity.

The concurrency is a real challenge, because the way the industry has grown up writing software - the languages that we chose, the model of synchronization and orchestration, are actually not things that lend themselves toward either exposing parallelism or allowing large-scale composition of big systems and it's in part why we and everybody else, as the software grows in scale, you know, deal to a greater and greater degree with the difficulty of perfecting the software, making it absolutely secure, being able to predict every aspect of its operation. And so today we face the dual challenge of having the prospect of meeting even bigger, more sophisticated pieces of software to do the powerful things that we want, and to do it in an environment where to get that performance at the client on an individual application will require the mastery of parallelism.

This is Microsoft's Chief Research & Strategy Officer, folks. And he says what I say: concurrency is hard, and the future is concurrent. I know we all get by in this crazy churning world of constant new releases by ignoring stuff, but you can't ignore this.

Kate

7/27/2007 10:40:15 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, July 26, 2007

I'm in! I went for the VPC. Get yours!

Kate

7/26/2007 10:23:56 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, July 23, 2007

There has long been a kind of mystery around getting hotfixes from Microsoft. Maybe you read a KB article or a blog or something and you learn that the fix to your problem is in a hotfix. Then there are all kinds of disclaimers about how you shouldn't get the hotfix unless you're totally sure you need it, and on top of that in order to get it, you have to phone someone!

In the last year or so I've obtained two hotfixes. One was sent to me by a friend who'd already gone to the trouble of getting it (something you're totally not supposed to do, but people do it anyway) and the other I got myself - it took less than ten minutes and was no trouble at all, but it was intimidating to do it for the first time. Well now there's an easier way ... hotfixes on the web.

https://support.microsoft.com/contactus2/emailcontact.aspx?scid=sw;en;1410&WS=hotfix

I don't exactly look forward to needing a hotfix, but it will be cool to try this eventually.

Kate

7/23/2007 8:10:20 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, July 22, 2007

A lot of people are so into Agile that they object to writing down requirements. Take this article on why fixed bid projects are bad - one of the major reasons given is that in order to produce an accurate bid, the developers will run around trying to write requirements and keeping track of changes to them, and making people get together and agree when they change them. We do a lot of fixed bid projects and they are generally a success - finish roughly on time, cost roughly what the customer was expecting to spend, and solve the problem the customer was facing. Those "we don't know what we want but we'll pay you by the day until we have it" ones can sometimes become a complete nightmare. We like requirements. So I really liked this article by Eric Sink on Requirements. I agree with so much of what he says. What do you think?

Kate

7/22/2007 8:25:58 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Thursday, July 19, 2007

Did you know there is no entry for gullible in the dictionary? Really! You can check and everything!

If you needed to check, you may not get a perfect score on the McAfee phishing quiz that Roy pointed to. I managed to get 10 out of 10 - and some of them are pretty hard. Try it yourself.

I hate spam, phish mails etc. The other day I got a Nigerian-style letter from Spain. And when I say letter, I mean on paper, in an envelope. Came with cool stamps on it, which I kept. The letter, I tossed.

Kate

7/19/2007 3:21:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Wednesday, July 18, 2007

I really like Outlook 2007. I just LOVE the ToDo bar, and the searching, and the flagging for followup and marking done, and the way the calendar looks now, and well pretty much everything. Except one thing. I hate that Outlook Today view and I hated it before too. Well... I just made it go away.

Tools, Options, Other tab, Advanced button, click the Browse next to "Startup in this folder" ... and no more Outlook Today when Outlook first starts up. Simple, but so satisfying!

Kate

7/18/2007 1:47:40 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Saturday, July 14, 2007

This is actually something that got settled during Tech Ed USA but my June schedule meant a lot of things I intended to blog didn't get blogged. Now I see myself listed on the Featured Speakers page (I told them, "flattery will get you everywhere" and they're going for it) so it's official.

My talks? The C++/Vista talk I did in the USA, plus a managed-code Vista one. We're still working on an abstract for that.

This will be my third trip to Barcelona. Will this be the year I do the Gaudi-tourist thing? Sure hope so!

Kate

7/14/2007 3:43:33 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, June 26, 2007

In a talk on IDE tips and tricks for Visual Studio, I asserted that good programmers are ten times as productive as ordinary ones. I didn't remember where I'd read that, but I knew it was true. I've just worked with so many folks who need a week to do what some superstars can do in a morning. The ordinary guy needs half a day to find some samples that are similar, half a day to tweak them so they fit into the current situation, a day to test and realize they aren't quite right, a day to adjust them and then fix the things that broke while adjusting them, half a day to get distracted and lured into scope creep by some comments during user testing, then another day to fix up what they did that they shouldn't have, and finally a half a day to clean things up and make documentation. The terrific guy only spends an hour finding samples, stays focused, documents and tests along the way, and makes short work of a specific small task. And I find this holds over months and years as well as over the course of a week.

Now I bumped across a proper cite of that, and not surprisingly it's from the Mythical Man Month. The quote and some related musings is over on Phil Haack's blog. Worth reading and worth thinking about. There are many ways to be productive ... write code that solves the real problem, don't write buggy code, don't write brittle code, and so on.

Kate

6/26/2007 4:06:47 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Saturday, June 23, 2007

Just a small personal observation. My oldest child turned 18 and is now technically a grownup ... though of course still living at home and still technically in high school ... graduation is only six days away though. So many of my fellow RDs and MVPs are new parents, it seems strange to be approaching "the end of the beginning" of my parenting journey. But that's how it is.

Kate

6/23/2007 2:57:20 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, June 22, 2007

There is a lot of confusion about writing your own exception classes. I see far too much code out there that just catches "Exception" anyway, that I hate to complain about someone who has set themselves up to have different catch behaviour for "The server is probably offline" than for "you probably don't have permissions on that file you just told me to use". However those who write their own exceptions have generally derived them from ApplicationException. If you ask why, they say things like "well" and "er" and "um" a lot because there's no extra stuff in an ApplicationException compared to an Exception. It just made it possible for you to catch "ApplicationException" and know it would be one of yours and not from some framework code.

Only thing is, that didn't really work out -- some framework code throws exceptions that derive from ApplicationException. And really, catching ApplicationException is just as generic as catching Exception. What can you meaningfully decide to do when all you know is "some code I wrote is unhappy in a way that the built-in exceptions (invalid argument, access denied and so on) cannot properly express" ?

So the word is out. Don't inherit from ApplicationException. Got it.

Kate

6/22/2007 6:38:01 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, June 20, 2007

Recently we took a large SharePoint project live at a company that is acquiring others quite fast, and having trouble keeping its Active Directory situation up to date as new domains are assimilated. When the project first went live, everyone had to authenticate to the server when they first browsed to it, and in some cases a second or even third time, depending on what kinds of files they opened, whether they followed links to other internal servers, and so on. As you might imagine there were plenty of complaints from folks who didn't like having to authenticate all the time.

We as the developers couldn't do a lot about this, but we worked hard with their IT folks and did a few clever things of our own until we achieved single sign on glory. Workers throughout this global firm would sign in to their own Windows desktops, and from then on everything in their whole intranet was theirs with no more authentication needed. Of course it was all strictly controlled - only HR people could see the HR files, only Finance people could see the Finance files, and so on. But it was perhaps a little too transparent. After we achieved this lovely state people stopped emailing to complain about authenticating, only to be supplanted by a new chorus of complaints from people we hadn't heard from before. The most poignant read simply "Everyone can see all my files!" and was accompanied by a screen shot of a browser opened to the HR area. Our correspondent hadn't been challenged for a password and was therefore sure all these files were completely unsecured. It took an in-person visit that included "why don't we go over to Bob's desk so you can see what the portal looks like for him?" to finally convince this user that invisible security is still security.

For all I know, there are scores or even hundreds of people in that firm who don't realize their sensitive information is protected. Typing in a password annoys many users, but it soothes others.

Kate

6/20/2007 6:13:32 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Tuesday, June 19, 2007

I got a real aha moment when I saw this graph:

The blog post where I saw it was talking about "management by ..." but I think it also applies to the motivation that individuals are moved by. That is, relative newbies to a job tend to do things a certain way because those are the rules. As they progress over time, most of them move on to "this is the method I use" and then to "my team's objectives are" and finally "this is what my team values." I think this is a hugely important progression to understand.

Let's take one little thing, say source control behaviour - do you check in too often, not often enough, are your comments any good, are your changesets too big or too little, and so on. If I want to direct your source control behaviour I need to know what zone you are in.

  • If you're in the "rules" zone, I must tell you the rules for source control. I need to write a long document with lots of examples and if there are exceptions, or different rules for different projects, I need to elaborate them all. Whenever you do something "wrong" I will probably hear that you were just following the rules, and I will need to update the rules to attempt to prevent that problem in the future.
  • If you're in the "methods" zone, I must cover source control in the documentation of my methodology, put it into context, show you why we use it and how things you type at step 17 will be used by someone else at step 35. The rules don't need to be so black and white or so detailed, but there may need to be different methodologies for different kinds of projects or circumstances. If I correct you I am still likely to hear that it's because the methodology is flawed.
  • If you're in the "objectives" zone, I need only remind you that we need to be able to pick up projects again for a version 2 long after we shipped version 1, or that we need to be able to recover from two people editing a file at once, or that we need to be able to explain to clients which files are different in version 2.3.4 than they were in 2.3.3. The detailed rules can go; you will choose your changeset size and your comments knowing which of our objectives you are supporting when you do so. If you make an incorrect decision and I point it out to you, your response is most likely to be "oh" and then you will adjust your own internal set of rules and methodologies accordingly.
  • If you're in the "values" zone, it's even simpler - we value making money on each project, and serving our clients well, and you know that, and you have the capability to make the right decisions in order to support those values. I barely have to manage you, just provide you from time to time with information.

In contrast to the blog where I found this graph, I don't see it as just being a matter of how managers choose to manage their projects and people. I see that some people cannot be motivated by values alone, or objectives alone. Either they lack the career maturity to recognize that supporting the team's objectives is always in their own self-interest, or they lack the skill and knowledge to choose correctly (should I check in now? or wait till I have tested? or wait till I do those other changes?) knowing only what outcomes are important to the team.

I personally don't care for the rules-oriented phase. Writing out exhaustive "if this happens do that" documents is not really fun work. Hearing that a flaw in the document is why something went wrong also doesn't really work for me. Yet it seems all team members (and by this I mean not just my own staff, but my clients and their staff, other vendors, and so on) need to go through this phase when adapting to a new process. Well, knowing it's going on makes it easier for me to cope with it.

Kate

6/19/2007 6:03:05 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, June 18, 2007

Here is a neat thing i actually learned about from people complaining about Vista performance. I haven't been having performance problems to speak of (except for that darned copying thing) but I was intrigued to hear about a background process that keeps track of how stable your system is. The Reliability and Performance Monitor is tucked away under a zillion menu options (this blog post leads you there) but I just click the marble and type reli and there it is:

The first thing you get is a performance monitor-type view, to do with as you will:

But if you click reliability monitor, you get something really quite new:

Here you see things the system feels were instabilities in my system in late May and early June.  Mind you, it has a very persnickety bar when it comes to those red Xs.

On June 1st, Visual Studio blew up on me. I bet I know what that was, too -- from time to time it blows up when I drop down a list of methods in those bars across the top of the code editor, especially if I try to scroll in the dropdown -- and not only was that recorded, but it contributed to a lower "stability index" for the day. As you can see, the system also records everything I installed (including updates through Windows Update) and everything that failed. It's a pretty neat way to remind yourself what you've been going through. You can also validate wild claims like "Project blows up at least once a week" by scrolling back and counting them. Ah, evidence :-)

Kate

6/18/2007 1:28:42 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, June 17, 2007

I was helping a mentoring client translate some sample code from VB to C# - he has written a lovely library and a customer wanted to see C# code that called it. The original samples had been written by someone who wasn't in the room, so I could have a bit of a vent. They had made heavy use of the Microsoft.VisualBasic namespace (nothing wrong with that) so as to access familiar (to a VB6 programmer) string manipulation methods. The problem was, these methods were being used to do things like finding the extension given a file name, or extracting a file name from a long path. This work should never be done with Left, Right, and Mid - and using Substring doesn't make it better. There are all kinds of methods in System.IO that manipulate paths and file names in a more robust and localized way than you can possibly do by hand. For my client's code, I ripped out a whole pile of hand written code (including a loop that looked character by character at a string testing to see if each was '\' or not) and replaced it with calls to library methods.

Phil Haack lists a bunch of these (and his commenters even more) in a very useful post. Developers who know what's in System.IO and the other meat-and-potatoes parts of the .NET Framework will write code more quickly, and that code will be better. Never assume you're the first person who wanted to parse a file path, check if a string is a good date, or any of a thousand other general tasks. Trust me, what you want is in there ... look for it.

Kate

6/17/2007 10:24:06 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, June 13, 2007

I like to let Hugh MacLeod's gapingvoid cartoons rattle around in my brain for a while before I decide if I like them or not. It's a fine line between pithy and banal, after all. This one is working for me:

Keeps my focus where it belongs, even when making custom software or mentoring the folks who are making the software. Forest and trees, don'tcha know.

Kate

6/13/2007 7:30:01 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, June 12, 2007

Have you ever heard the career advice that you should consider doing some volunteer work in your field to gain experience? Sounds like a lovely plan, but how does someone without contacts find volunteer opportunities anyway? Or maybe you have the job you want, but you want to put your time and effort to a good cause, if only you could find one. If you're in Canada, MatchIT.com is just the ticket. Sign up, fill out a form, and get matched with needs from nonprofits. There's lots of folks looking to have their websites redone, or a registration system written, or their servers looked after. It's a chance to make a real difference, so please look into it if you have some time to spare.

Kate

6/12/2007 4:20:53 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, June 11, 2007

Recently I had some major issues with a VPC somebody prepared for me. It came from a DVD and I just could not get it to run on Vista, though it ran great on XP. I was fairly sure that it would run OK if I could just launch VPC elevated and then open the .vmc file, but when I launched VPC (elevated or not) the only evidence of its existence was a taskbar entry (there was no window to be seen) and even that disappeared if I right-clicked on it.

I solved the first problem by granting Users access to the .vmc and .vhd files (I went with Full Control since I had them on a non-shared drive) and then the VPC ran perfectly. That was a better fix than elevating VPC every time anyway. But along the way I discovered how to fix the disappearing console. This post by Steve at EssJae.com shows what you need to do: find the options.xml file in C:\Users\%current_user%\AppData\Roaming\Microsoft\Virtual PC and open it -- make sure the console is not up and you're not running a VPC. Scroll down and find the <console> section  and you will see some very large numbers for left_position and top_position. Change them to something normal, like 10 or 100, and save the file and you'll be back in business.

Kate

 

6/11/2007 3:59:03 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, June 09, 2007

Visual C++ is hiring a development manager. They have some reasonably high expectations on experience, proven track records, and so on. If you think you want the job by all means check it out. If you don`t think you want the job, but just want to keep on making C++ code and know there will be a product and a team there for you, read this quote from the job description (bolding by me):

The top 1,500 ISVs generate over 80% of worldwide software revenues. In addition to driving the global Windows ecosystem, these companies are directly responsible for $5B-$7B of yearly Microsoft revenue. Central to the success of these customers, as well as Microsoft's own internal development, is Visual C++. Given the strategic importance of the ISV segment, the Visual C++ team is on a mission to revolutionize our toolset in providing a much more productive and successful native developer experience.
We are looking for a strong Visual C++ Development Manager to drive adoption and satisfaction among professional C++ developers. We are in the starting phase of a major reinvigoration of the experience for C++ and native development targeting very large and complex development projects. The added demands of security and the advent of many-core processing create significant challenges and opportunities to create market leading technologies and tools.
The Visual C++ team is working hand in hand with the Windows division on enhancing the appeal of Vista and Windows 7 for ISV developers and with the CLR team to create a technology stack that allows layering of services to provide a seamless spectrum from native code over type safety and garbage collection to the full .Net stack.

Responsibilities
The Visual C++ DM position features leadership opportunities across multiple areas, including Technology and Architecture Leadership and Execution, Team Building and People Leadership.
You will lead a world class C++ compiler team and C++ IDE team embarking on a virtually top to bottom re-architecture of the tools stack. In addition, you will lead a libraries team that is re-inventing the MFC and client libraries for the next decade together with the Windows WEX and Developer Division UIFX teams. You will grow a strong cross-PU architect team and a development organization.
The Visual C++ DM plays an important role in cross-team relationships (Windows, CLR, UIFX, Office, SQL) and cross-company relationships (Intel, AMD, C++ standards work).

Wow! Looks like we`re all in for a great ride. If you really know your stuff, go help. If you just like to use it, hang on!

Kate

6/9/2007 3:01:12 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, June 08, 2007

Microsoft Canada is putting on an all-day event Saturday June 16th at the Metro Toronto Convention Centre. Of course it's free, and you'll see plenty of Microsoft and external speakers in multiple tracks.

I'm doing session #1 in the Developer Track in the afternoon: What's New for Web Developers in ASP.NET and Visual Studio 2008. If you're thinking "Visual Studio 2008???" that's Orcas - the new name was announced at Tech Ed in the keynote. Register while there are still spots!

Kate

6/8/2007 4:37:59 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Thursday, June 07, 2007

I have spoken a LOT (too many times to link back) over the last year or more about getting your applications to work on Vista. When I ask for a show of hands to see who has tested their apps on Vista, I typically get less than a quarter of the room. When I ask why I hear things like "a copy of Ultimate is too expensive just to test with" or "I don't have a spare machine with the horsepower to run Glass" or even "I don't have a spare machine".

Fear not. How about a FREE evaluation VHD image of Vista, that you can run with the FREE copy of Virtual PC on the machine you have now? It might be slow, it might not do Glass, but you can find out for FREE if your app even runs, if it works under UAC, what happens if you put a manifest on it, and so on. Come on, what's stopping you? Jean-Luc David of Microsoft Canada has all the links for you.

Kate

6/7/2007 4:27:04 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, June 06, 2007

I sincerely hope that this year's Tech Ed USA hasn't featured any of these "worst practices":

http://www.youtube.com/watch?v=qZOL878CwfM

I like to advise up-and-coming speakers to watch as many sessions as they can, so they can see what NOT to do as well as what to do. Watch and learn, and giggle a little.

Kate

6/6/2007 4:20:47 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, June 02, 2007

A while back the blogs went nuts with the FizzBuzz game. It all started with a discussion of asking people to write code in job interviews. I do this, and I feel it really helps me to hire good people. However I ask something that appears to be much simpler than FizzBuzz, and I get interviewees who completely and utterly mess it up. I don't just mean that they write code the compiler would reject -- they write things that are too complex or that aren't in the language we just agreed they were going to write it in -- and when they look over what they've written on the whiteboard they don't see a problem.

Why the blogs went nuts is that commenters to the original post just couldn't resist trying to submit a solution. The general form was "man, you're an idiot, that problem is way too simple, it's just four lines of code! Like this:" immediately followed by a solution that DID NOT WORK. This unintentional hilarity continued with people trying to correct each others solutions and often failing. Then as that started to wind down, the language zealots came along to prove that FizzBuzz solutions posted by random commenters only had errors in them because of the languages the commenters chose, and that a Ruby version or the like would be much easier. Some of those had errors too. Assembly language, Cobol, Perl, ... I'll let you search out those solutions (quality varies) yourself.

But one in particular I really like for its spectacular uselessness while demonstrating great strength with the tool. Can you believe FizzBuzz in C++ compiler error messages?

 T0=boost::mpl::int_<0>,
 T1=boost::mpl::vector<boost::mpl::int_<1>>,
 T2=boost::mpl::vector<boost::mpl::int_<2>>,
 T3=Fizz,
 T4=boost::mpl::vector<boost::mpl::int_<4>>,
 T5=Buzz,
 T6=Fizz,

Take a look at what Adam Petersen has done. Would I hire him? You betcha.

Kate

 

6/2/2007 9:19:01 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, June 01, 2007

During my blogging hiatus, we went live with an aggregating site for Microsoft Regional Directors around the world. The Region aggregates our blog postings, using a human editor to extract posts that are interesting and relevant to a wide audience. It also features upcoming speaking appearance and recent publications by RDs, as well as profiles and bios of us all arranged by geography and technical expertise. (Here's mine.)

Regional Directors are smart and technical, but we're also business focused. We do a lot of speaking and a lot of writing. If you know even one smart RD, let that be an endorsement for the rest of us. Check out the Region and discover some new experts to add to your "blogs I read" or "search hits I trust" list. I'm really proud to call these folks my colleagues.

Kate

6/1/2007 9:01:49 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, May 31, 2007

It's time to get serious about planning my Tech Ed time next week. So far I have these immovable rocks, some of which I hope will be a don't-miss for you too:

I will be spending time at the RD Booth too so if you miss me at one of my sessions, look for me there! I'm hoping to have a fantastic week meeting developers and talking about Vista, C++, and interop in my real world and in yours. I'm also hoping to stay INDOORS as much as I can. Here at home it's in the high 20s even low 30s (Celsius, in other words HOT) but the humidity is nice and low. I know that's not what I'll find once I get to Orlando.

Kate

5/31/2007 11:52:54 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, May 30, 2007

Again a blogging pause. Just too darn much work and a fair amount of speaking too. I'll do some "what's upcoming" shortly, but first here are the materials from my talk at the Toronto .NET User Group this week. I helped to found this group five years ago and it was great to be back. I've been doing this Vista talk a lot lately (Code Camp, DevTeach, a webcast last week, and now in Toronto) and it seems like people keep wanting to hear it. It's hard to fit it in a single evening but yes, you can learn what you need to get your app working on Vista in just an hour or two.

The first demo - the one app that has a manifest for the whole thing. Play with the required level or take the manifest away (remove the post build step) to see virtualization. UACDemoSolution1.zip (68.65 KB)

The second demo - the partitioned app with an asInvoker manifest for the overall app and a requireAdministrator manifest for the privileged exe. Also shows how to put the shield on the button. UACDemoSolution2.zip (68.2 KB)

Some fun with the Vista look and the effort VistaBridge saves. CommonFileDialogSolution.zip (1.88 MB)

The deck. ItsVistaTime.zip (790.18 KB) Zipped because the four digit extension seems to be causing a problem. It's .pptx which means you need the viewer for it.

More in the days to come!

Kate

5/30/2007 11:49:16 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, March 23, 2007

Eileen Brown wants women who work in technology to answer a quick little survey about what that experience is like. I found some of the questions a bit hard to answer (I don't have a boss, for example) but I did my best. Now you try:

Here’s the link.  Please forward this to all the women you know and support 2 deserving charities...   http://tinyurl.com/22bbax

Kate

3/23/2007 12:45:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Tuesday, March 20, 2007

Kathy Sierra has some characterizations of applications we'll all recognize. There's the one who knows how you like things, the one who bosses you around, the one you are barely putting up with till something better comes along .... and be sure and read the comments where a few more archetypes appear.

Kate

3/20/2007 12:24:41 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, March 17, 2007

It's a strange thing about debugging under Vista that the one thing you really don't want to do is press F5. It's rather a long story as to why, but it's a good habit to go and find your executable and double-click it. And if you develop that habit, you may find that getting Visual Studio to build you a release or a debug version is not that simple. (Pressing F5 builds a debug version, and Ctrl-F5 builds a release version, before launching the application.) For many people, the dropdown that shows what configuration you're building has disappeared from the toolbar where it belongs. And even if you're brave enough to wade into the Customize dialog and put it back, it's disabled:

To get things back the way they once were, bring up Tools, Options, and go to the General section under Projects and Solutions. Find "Show advanced build configurations" and check it.

Presto! Debug is back!

Not what I'd call discoverable, so spread the word.

Kate

3/17/2007 12:04:55 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, March 11, 2007

Ali Parker writes about the Women in Technology event that will be held once again at Tech Ed in Orlando this year. Let her know your thoughts on what the event should be, and on how to reach out to young girls and inspire them to consider changing the world through technology. I know I'll be attending no matter how they structure the event or when it's held. It's fun to be in the majority once in a while. BTW, men are always welcome ... you don't need to pass some screener with some talk of having a daughter or the like, just come on in and join us.

Kate

3/11/2007 11:39:41 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, March 10, 2007

At the risk of turning this into a jobs blog, I just have to point you to another opening. How would you like to apprentice to Eric Sink at Source Gear? He's looking for a developer to do marketing. He would rather you didn't have a lot of marketing background, and he'll pay you as he would pay a senior developer. You have to move to Illinois, and be willing to travel every month or so, and I bet you'll have a terrific time. Application instructions are in the blog posting.

Kate

3/10/2007 9:26:23 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, March 09, 2007

One of the things that's fairly hard to do with Team Systems out of the box is to search work items. You know there was something about the Pending flag in some work item or another, but now you just can't seem to find it. You could create a query but that seems like overkill, right? Well, Noah Code has a little addin for you that makes searching work items a lot more convenient. It adds a toolbar with a search box, and you're all set. If you want, you can tweak what fields it searches.

Kate

3/9/2007 9:06:45 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, March 08, 2007

Microsoft wants to hire a Program Manager for COM+, DCOM, RPC, the WCF/COM Integration, System.EnterpriseServices, and whole lot more. It's true. If you love COM and think you can do this job, start at this blog entry from Clemens but don't follow his link over to the jobs page -- it seems to be broken. This link worked better for me.

Kate

3/8/2007 9:03:29 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, March 04, 2007

Darren Strange tells a delightfully honest story about a presentation gone horribly wrong, and getting back on the horse again. It illustrates something most veteran presenters can tell you: it takes more than one huge mistake to completely wreck a presentation. But the trick is that each mistake you make increases the chances of making more, because you get tense and worried and panicked as things go wrong. The comments to Darren's post are very helpful, pointing out that the failed demo was in some ways a smaller problem than the tone setting at the very start of the presentation. Something for all of us to learn from this one.

Kate

3/4/2007 8:18:42 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, March 03, 2007

Recently I was driving to a demo at a client site when I remembered that one particular test of my app had not been run. This is a web app with a smart client providing a secondary interface for intense users, and is therefore designed for a connected situation. But I was about to demo on a standalone laptop -- web server, SQL server, browser client and smart client all happily together on a single box. What's more, the laptop doesn't quite have everything -- I don't run an SMTP server on there, and some parts of the app send email as workflow progresses. Sure enough, when I got to their parking lot I tested and the email-sending code throws an exception if it can't find the mail server. This calls for a quick edit - throw in a try-catch-swallow along with a TODO comment saying that we should be gracious if the mail server is unreachable.

OK, fine. I open the project and attempt to change the code. The checkout, of course, fails, because I'm offline. And I'm not able to edit the file. Throwing caution to the winds, I browse with Windows Explorer to the file, take away the read only attribute, and carry on. The demo works beautifully and life goes on.

If only I had already found the patterns and practices guidance for VSTS over on CodePlex! It includes answers to questions like "how do I work offline?" (answer: do what I did, and use the Power Tools to sync up when you get back to the office) and much much more. Worth some time reading and internalizing.

Kate

3/3/2007 8:39:30 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, March 02, 2007

Intellisense has been around a really long time. According to Wikipedia:

IntelliSense was first introduced as a feature of a mainstream Microsoft product in 1996, with the Visual Basic 5.0 Control Creation Edition, which was essentially a publicly-available prototype for Visual Basic 5.0. Although initially the primary "test bed" for the technology was the Visual Basic IDE, IntelliSense was quickly incorporated into Visual FoxPro and Visual C++ in the Visual Studio 97 timeframe (one revision after it was first seen in Visual Basic). Because it was based on the introspection capabilities of COM, the Visual Basic versions of IntelliSense were always more robust and complete than the 5.0 and 6.0 (97 and 98 in the Visual Studio naming sequence) versions of Visual C++, which did not have the benefit of being entirely based on COM. These shortcomings (criticized by many VC++ developers since the 97 release) have been largely corrected in the post-.NET product lines. For example, one of the most requested capabilities missing from the pre-.NET products was support for templates, which is now fully implemented.

So that's over a decade. And now, in the March CTP of Orcas, JavaScript joins the club. Jeff King blogs:

The March CTP of Visual Studio marks the debut of a much-requested and long-awaited feature: improved JScript IntelliSense.  We’ve been working on this for almost a year now and I’m pretty excited to finally be able to share it with the public. 

It's actually a much harder problem in a language that doesn't do strong typing.

Kate

3/2/2007 8:20:38 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, February 27, 2007

While our new projects are on VSTS / TFS, we have some older projects on source safe that we aren't migrating. If you're in the same boat then you need to pay attention to the DST change that is coming up very soon. You could lose a checkin (possibly even the entire project history) if another one occurs within an hour of the first. Now, which is easier - banning all checkins on the DST change day, or reading a knowledge base article and following some simple instructions?

Kate

 

2/27/2007 7:52:42 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Saturday, February 24, 2007

Man, the hits just keep on coming at Channel 9. This time it's Rico Mariani, nominally on performance but in my opinion really on how to have a successful career. Reminiscing about the University of Waterloo, computer stores in Toronto, the amazing Ontario Science Centre, and a Commodore PET (all things from my past though I didn't work at these places I just visited them) he somehow works into every sentence how being a nice person and wanting to help is a recipe for success. Later he starts talking about creative leaps and eventually about how to make your programs faster.

Want to be seen as an expert? Want to be put in charge of something? Want to make a difference in someone's life? Watch it! It's a huge download - over 800 meg - but so worth it.

Kate

2/24/2007 6:37:15 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Friday, February 23, 2007

Who knew that picking up enough programming knowledge to teach it to talented kids at a summer camp could lead to a career doing some of the geekiest and most detailed work there is in this business - testing the compiler itself to make sure it still works the way it's supposed to? That's just one of the nuggets of information in this latest Channel 9 C++-land interview:

Meet Marina Polishchuk, a software engineer on the VC++ quality control team. Her mission: Outsmart the compiler with clever programs that confuse and or break it. Fun stuff. Here, we learn about what she does, why she does it and how she got here. Enjoy!

Kate

2/23/2007 7:06:13 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, February 22, 2007

Until now, no woman had won the Turing Award. That surprised me. Frances Allen was recognized for her work in optimization, automatic parallelization, and high performance computing. She must be used to receiving honours. According to the ACM's press release:

In 1989, Allen was the first woman to be named an IBM Fellow. In 2000, IBM created the Frances E. Allen Women in Technology Mentoring Award, naming her as its first recipient. As her Turing Award citation notes, she has been an inspirational mentor to younger researchers and a leader within the computing community. She is an Advisory Council Member of the Anita Borg Institute for Women and Technology, whose goal is to increase the participation of women in all aspects of technology. She also received the first Anita Borg Award for Technical Leadership, which was presented at Grace Hopper Celebration of Women in Computing in 2004.

She joined IBM fifty years ago. Wow, what she must have seen in those fifty years!

Kate

2/22/2007 10:50:12 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, February 21, 2007

I came across this list of "making the most of your time" and it struck a chord with me. I think because it's not just about productivity and crossing a lot off the to-do list, but instead thinks about what you are achieving with the time you spend. Not many productivity lists include "making a difference to the world". Something to think about...

Kate

2/21/2007 10:44:02 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, February 15, 2007

I read a few interesting posts (Barry Leiba, Raymond Chen) about email subject lines. I get about one email a minute, and even after you strip out the offers that aren't really that personalized (I already get those from Canada, thanks, and I don't even have one of those, and as for that, are you serious?) I get dozens and dozens of real and important emails every day. And at a quick guess at least half have a terrible subject line. If you've heard me speak, you've heard me try to teach the art of a good subject line. Let me try some more here:

  • Never use the name of a project or client, and only the name of the project or client, as your subject line. My "City of Kawartha Lakes" outlook folder contains roughly 50% emails that break this rule. Most of my staff were on the project at one time or another and were typically on other projects too. So when they emailed me a question or a status report, they put "City of Kawartha Lakes" or "CKL" or "City web site" as the entire subject. The problem with that is it's so ephemeral. This morning it distinguishes your mail from the others in my Inbox you sent me about a different project. 6 months from now, when I'm trolling the client folder trying to establish when something was decided, it's really of no value to me at all. The City staff were no better: they used to write with subjects like "our website project". It was during that project I started to train my staff on subject lines.
  • Really try to imagine someone using your email a year from now. Then you'll naturally change "weekly status report" to "status report, week of Jan 2". That's doubly true if it's not date related -- at least I can sort my emails by date.
  • Never use a subject line that will make little or no sense if it's forwarded, or could offend. "Need a ruling on bug 234" is ok, but just "bug 234" will not make sense when it lands in the client's inbox, and "Can you please get these morons to make up their minds?" is also bad. If I have to change your subject line in order to forward the message, then when you're cc'ed the subject line change will confuse you.
  • Barry points out the problem with "meeting with Barry" or anything else that has some sort of directionality in it. Even "today's results" becomes mislabelled tomorrow.
  • Probably the second worst subject line in the world is "question". The worst: "couple of questions". I prefer separate emails for separate questions, so I can reply to them one at a time, forward them to those who can truly answer them, and so on.
  • If you don't get any spam at all, and have a way better spam filter than me, or are luckier than me, take a look at what is getting dropped once in a while, and don't use those subject lines. "question" is real popular in my junk box, as are "Good day", "Approved", "Document", "Request" and so on. Plenty of folks (and spam filters) drop those unread.
  • If I am not likely to recognize your name, take extra care with your subject.  Email from a known correspondent with a confusing subject line will at least be read. It may not be very file-able, but I'll read it. The same subject line from a stranger might go straight to the trash. At events I recommend mentioning the event in the subject.
  • When replying, feel free to fix subject lines. Most importantly, remove [ACTION REQUIRED] and similar flags if you are not actually requiring action in your reply. I don't object to folks using these tags but it gets tiring when my folders are full of ACTION REQUIRED messages that say "ok you will have it by end of day".

Finally, as a Raymond-commenter points out, make your first line or two really count. It may be all I read. If you want me to review something, start the email "can you review this document by Friday?". Then you can provide the backstory after that. I file a lot of things unread, because I get cc'ed on things. This is good. It's better still if the part I can see in my two line preview says "yes, we can do this for your by Friday" or "go ahead, I have approved the budget" so I don't even have to open the message.

Kate

2/15/2007 2:41:41 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, February 14, 2007

I came across the most astonishing story. Here's a tiny excerpt:

You know the logics setup. You got a logic in your house. It looks like a vision receiver used to, only it's got keys instead of dials and you punch the keys for what you wanna get. It's hooked in to the tank, which has the Carson Circuit all fixed up with relays. Say you punch "Station SNAFU" on your logic. Relays in the tank take over an' whatever vision-program SNAFU is telecastin' comes on your logic's screen. Or you punch "Sally Hancock's Phone" an' the screen blinks an' sputters an' you're hooked up with the logic in her house an' if somebody answers you got a vision-phone connection. But besides that, if you punch for the weather forecast or who won today's race at Hialeah or who was mistress of the White House durin' Garfield's administration or what is PDQ and R sellin' for today, that comes on the screen too. The relays in the tank do it. The tank is a big buildin' full of all the facts in creation an' all the recorded telecasts that ever was made—an' it's hooked in with all the other tanks all over the country—an' everything you wanna know or see or hear, you punch for it an' you get it. Very convenient. Also it does math for you, an' keeps books, an' acts as consultin' chemist, physicist, astronomer, an' tea-leaf reader, with a "Advice to the Lovelorn" thrown in. The only thing it won't do is tell you exactly what your wife meant when she said, "Oh, you think so, do you?" in that peculiar kinda voice. Logics don't work good on women. Only on things that make sense.

He's right, isn't he? Well, not about women, but about "you got a logic in your house" and the description of what your logic does. And sure, tons of science fiction stories (plus Marshall McLuhan) predicted this. But this story was published  - I kid you not - in 1946. Sixty one years ago.

Wow. Check out the author bio and then read a whole pile of his stories online. All the standard tropes of science fiction stories are here ... just a lot longer ago than I would have thought. And his gender attitudes, in other stories, reveal themselves to be a little different than this quote would imply.

Kate

2/14/2007 11:50:28 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Tuesday, February 13, 2007

Here's another C++ video on Channel 9. And this one is about strategy and vision:

How will VC++ evolve? How has the advent of managed code affected the evolutionary trajectory of VC++? What's the VC++ team up to these days, anyway? How much time are they spending innovating C++, the native language?

Tune in and learn first hand from two people who know the answers to the above questions (and much more); Steve Teixeira, Group Program Manager, and Bill Dunlap, Program Manager.

If you want to know where Visual C++ is heading, then you definitely want to watch this interview. If you are a C++ developer, the message should be very loud and clear: Microsoft has not forgotten about you!

These guys know you don't want to throw your old code out and it isn't broken. You want to keep working with it. You want to extend it to pick up new shiny good stuff, but you don't want "step 1: port the whole thing to C#." They also know you love the language and you want Microsoft to love it and love you. And they realize that C++ doesn't need to be all things to all people, because most folks who have mastered C++ can pick up the C# or VB they need when necessary. So if you accept those two premises - that native code is super important, and that not every single UI wizard needs to support C++ - where do you think that leads? Watch and find out.

Kate

2/13/2007 11:39:05 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Sunday, February 11, 2007

You know what they say: if I knew, I couldn't tell you. But Mary Jo Foley doesn't mind a little speculation, and Scott Guthrie seems pretty clear on timelines in the blog and presentation she quotes. So it's either "late 2007 or early 2008" or "later this year". But don't say I said so :-)

Kate

2/11/2007 11:12:54 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, February 09, 2007

Bruno van Dooren, C++ MVP and general nice guy, blogged recently on "Is C++ still a viable language?" He makes lots of good points about interop, templates, and control. He points out that some UIs are a lot easier to build with C#. Then, out of the blue, he says mean things about VB. I know he's only joking, but I just felt I had to defend VB's honour.

Here's the thing. C#, it's mostly just VB with semicolons, you know? And that's not an insult, you shouldn't gasp when you read it. VB's a good and useful language. [Of course I mean VB.NET, come on, we're coming up to our fourth release, the default VB is VB.NET now.] It's no secret I do far more work in VB than in C#. Once in a blue moon I want to do something in VB that would be easier in C# (last week I wanted to delay hooking up button handlers until some initialization was in place, something the Handles keyword isn't going to do for me) and if I did more C# I would probably find the occasional thing that would be easier in VB. Big deal! I can always find a way to do those things anyway. What matters is the framework, and that's the same in VB, C#, or C++/CLI. I like the synactic sugar of Dispose=destructor more than the synactic sugar of "using" or "Using" but the underlying mechanism is the same in all three cases.

Kate

2/9/2007 11:00:29 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, February 08, 2007

Herb updates us on the next C++ standard:

I'm happy to report that work on "C++0x", the much-anticipated Version 2.0 of the ISO C++ standard, has dramatically picked up steam over the past few months. The ISO C++ committee has now published the first partial draft of C++0x and plans to publish a complete public draft before the end of 2007.

As part of the push to get this done, the committee is having extra meetings, including one in Toronto in July. Hmmmm.....

You need to read Herb's blog post yourself for the details on what's in C++ 0x (Concepts, Garbage Collection, Memory Model for Concurrency, Concurrency Libraries) and what's not (Modules, Dynamic Libraries) with helpful links to even more details. This is our future -- and you can be sure, C++ has a future.  

Kate

2/8/2007 10:46:46 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, February 07, 2007

Eileen Rumwell is sponsoring a contest to send someone to Globewomen's annual conference, Global Summit of Women, in Berlin in June. Globewomen invite you to:

  • Join the premier gathering of women leaders focused on advancing women's economic opportunities globally
  • Be inspired by the energy, enthusiasm and expertise of the women decision-makers in business and government from around the world
  • Learn practical strategies to grow your career or your business
  • Share winning solutions and strategies with your peers
  • Be part of a global network of economic dynamos who will make changes in the 21st century global economy.

A 250 word essay about why you chose the technical field you did, and how you feel about it (man! 250 words is hardly anything! that's a challenge!) could get you airfare and accomodations so you can attend this seriously high-level get together. If you don't (or can't) win, consider attending anyway ... it sounds like fun!

Kate

2/7/2007 10:40:51 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, February 05, 2007

Dylan Smith writes about testing: Unit tests (automated, written by programmers, repeatable), Acceptance tests (stories or scripts that can be done by developers or users and test high level requirements) and Exploratory tests (noodling around by a clever person to see how an app is doing). I like these categories and I do all three on my projects. I think a lot of developers get excited (rightly) about Unit tests and run the risk of forgetting the other two. You still need to lead your users through a structured process that causes them to conclude you have finished their project. (And you still need to rehearse that structured process yourself so you know in advance it will pass.) You still need to play around with it a bit, outside of the confines of test cases, and assure yourself it really is a good application.

We're not TDD, so I don't write the tests and code to them. But I write the scripts for Acceptance testing as we develop stories and requirements. They're also a fine way to bring a new programmer up to speed on a project by leading them through what it does and how you know it's working.

Kate

2/5/2007 1:13:28 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, February 02, 2007

It's easy to get intimidated by a feature like Lambda Expressions. It has a Greek word in it, so it must be difficult, right? And you can read explanations like this:

Lambda expressions, one of the most important new features to be included in the next 3.0 version of C# and one that offers support needed by the LINQ Project, are precisely a feature coming from the world of functional programming. ... Scheme ... Lisp ...

Or this summary:

In mathematical logic and computer science, lambda calculus, also λ-calculus, is a formal system designed to investigate function definition, function application, and recursion. It was introduced by Alonzo Church and Stephen Cole Kleene in the 1930s; Church used lambda calculus in 1936 to give a negative answer to the Entscheidungsproblem. Lambda calculus can be used to define what a computable function is. The question of whether two lambda calculus expressions are equivalent cannot be solved by a general algorithm. This was the first question, even before the halting problem, for which undecidability could be proved. Lambda calculus has greatly influenced functional programming languages, such as Lisp, ML and Haskell.

Lambda calculus can be called the smallest universal programming language. It consists of a single transformation rule (variable substitution) and a single function definition scheme. Lambda calculus is universal in the sense that any computable function can be expressed and evaluated using this formalism. It is thus equivalent to the Turing machine formalism. However, lambda calculus emphasizes the use of transformation rules, and does not care about the actual machine implementing them. It is an approach more related to software than to hardware.

This sounds really difficult. So let me show you something that's not difficult at all:

<input type=button value="Try it now" onClick="alert('Hello from JavaScript!')">

You know what that does, right? Well the stuff after onClick=" and before "> is [gasp!] a Lambda Expression. It's a little piece of code that you can stick somewhere without a whole lot of defining a function and defining a delegate and pointing that delegate at that function and blah blah blah. You can stick two lines of JavaScript in there if you want:

<INPUT TYPE="radio" VALUE="Switching to Blue" onClick="alert(value);document.bgColor='blue'">

This feels natural and ordinary in JavaScript, and all folks are talking about is giving you that same freedom in strongly typed languages where the compiler is your friend. We have some of this in C# 2.0 with anonymous methods, but lambda expressions are in effect more strongly typed. Here's a nice explanation of the subtle distinction.

It's not actually that intimidating at all ... it's going to make life easier.

Kate

2/2/2007 8:51:26 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, February 01, 2007

[Sorry about the blogging gap - nothing dramatic, just a little case of overworked and underslept. Good excuse to start up again though.]

Imagine a room with a table, no computers, and four really smart people who care tremendously about helping people write software, and who tackle questions like "what keywords should be in this language" every day -- and whose decisions actually will get implemented. A full hour of amazing conversation appeared recently on Channel 9.

How will imperative programming languages evolve to suit the needs of developers in the age of Concurrency and Composability? What role can programming languages play in enabling true composability? What are the implications of LINQ on the furture of managed (CLS-based) and unmanaged(C++) languages? How will our imperative languages (static) become more functional (dynamic) in nature while preserving their static "experience" for developers? 

Answers to these questions and much more are to be found in this interview with some of Microsoft's leading language designers and programming thought leaders: Anders Hejlsberg, Technical Fellow and Chief Architect of C#, Herb Sutter, Architect in the C++ language design group, Erik Meijer, Architect in both VB.Net and C# language design and programming language guru, and Brian Beckman, physicist and programming language architect working on VB.Net.

This is a great conversation with some of the industry's most influential programming language designers. Tune in. You may be surprised by what you learn...

Some quotes and paraphrases that caught my attention:

  • "No language can ignore concurrency and stay successful for mainstream programming over the next five, ten years."
  • our entire industry is based on composable software and we manage to do composable software with the languages, libraries and frameworks we have now. it's rather amazing that we can do it.
  • "all you can do as a language designer is slow down the accrual of new features that will eventually lead to cave in."

Now if you aren't sure you know what a lambda expression is, or what makes a language functional as opposed to imperative, or what LINQ would have to do with that, or what composability is, then you may think you don't want to watch this video. But you'd be wrong! Spend this hour with these gentlemen and not only will you learn all those things, you'll learn why it affects you and why you should be following, at least a little bit, the current work in this area.

Watch it!

Kate

2/1/2007 8:05:14 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, January 20, 2007

I once had an opportunity to write one of those Teach Yourself <Something complicated> in 21 Days books, or it might have been 24 Hours, or A Weekend, I forget. I was overloaded with work at the time and didn't write it. One of the things about writing those books is that nobody actually expects the reader to learn what they need in 21 days or 24 hours or whatever. It's basically the number of chapters. And if you processed one chapter a day, I guess you would cover the book in three weeks, but you wouldn't be a <Something complicated> programmer at the end of that, would you? Some folks might do 5 chapters a day, others might do a chapter a week. It depends on where you're starting from.

I came across a few interesting blog posts on this topic. Peter Norvig found hundreds of such books on programming languages or frameworks, and proposes instead Teach Yourself Programming in Ten Years. He has a point. Jasmine refines the point a bit, saying that if you're already a good developer you probably can pick up a new language or framework in a matter of days, and that if you don't have what it takes to be a good developer, ten years of plugging away at it won't make you good enough.

I've been getting paid to program since 1979, and I learn new things all the time. But I try to learn new languages no more than once a year -- and I wouldn't be able to invest 21 days in learning a language, either. More importantly, I've invested quite a lot of time and effort into spotting those who will be good developers some day, and trying to speed the process of making them better. I think the emphasis on debugging and on reading or fixing the code of others is appropriate. It's tempting to have the newbies work on little projects alone since they can't understand your big complicated project with difficult code written by the really smart people. But trying to understand that project and that code is what will make that newbie a developer -- or show you both that it's a hopeless cause :-).

Kate

1/20/2007 5:37:44 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, January 19, 2007

I do my searching these days at www.live.com -- the ads are less obtrusive or easier to ignore or something and on the occasions I've done the same search in two places, I like my Live results better. But for the next little while I'm going to use a slightly more complicated URL: http://click4thecause.live.com/Search/Charity/Default.aspx?locale=en-us&source=msnhp. I know, that's a mouthful, but here's the thing - it searches the same, but it also donates to charity. Really! I know we've all seen those "if you forward this to 40 people Microsoft will know and they will give money to charity" emails, but this is different. After all, counting web hits is something that can really be done.

Education and sports programs for refugee youth around the world? Sounds like a good cause to me. Check it out, and make it your new search page, won't you?

Kate

1/19/2007 5:20:40 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, January 15, 2007

I read an interesting blog entry at Dumb Little Man. Essentially, the story goes like this. A guy is fed up with his job, doesn't like it, is ready to quit. Instead he throws himself whole-heartedly into it and gives it his all. He does the tasks he dislikes, he does tasks he isn't asked to do, he speaks up and speaks out, and he becomes so much happier in the job. And if that wasn't enough, he gets a two-layer promotion and a $15,000 a year raise.

His list may not precisely work for you. You may not be asked to do TPS reports, whatever they are. You may live a life like mine where no one can give you a promotion. You may not think that working long hours is important to success at your company, or worth what you have to give up in your private life. But look past the details of his particular list. What would happen if you totally threw yourself into what you are doing now and really really did it?

Kate

1/15/2007 11:07:59 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, January 13, 2007

Jeff Atwood has a fun post explaining how much more quickly he finds things now that he can once again just type the names of programs. It's so true. Instead of clicking Start, All Programs, Microsoft Office, Microsoft Word Whatever, with the attendant pauses while the menus come up and the pauses while I desparately scan the huge list looking for the thing I know has to be there somewhere, it's just press the Windows key and type word, then press enter. Or perhaps type w if I'm lucky enough. The search is blazing fast and there's the application I want, or the file I want, or the control panel sub-thingy that has a new name now so I can't see it. Ah, typing. I never really gave up on typing. And now it's once again one of the main ways we'll interact with the operating system.

And not just because of the way cool search thing. There's the UAC aspect to this too. Open yourself an elevated command prompt, and everything you launch from that command prompt will be elevated -- no manifest, no right-click Run As Administrator, just run your utility so you can do whatever administrative tasks you need to do in relative peace. Small price to pay: you have to type the names of those apps (possibly with their full paths) into the command prompt.

And that's not the only deja vu I get as a Vista user and developer. Does anyone remember making Windows applications before, say WinForms? OK, before VB or before MFC? Before there was a framework that gave you an object called Button that had a property called Text or Caption or the like, how did you set the text on a button? You sent it a Windows message (WM_SETTEXT) with a parameter of "Save" or whatever you wanted.  Well you don't have to do that any longer, but how do you arrange for the shield icon to appear on a button? (It's a convention that if clicking a button is going to pop up an elevation consent dialog, you put the shield on the button.) By sending it a BCM_SETSHIELD message, of course!

The longer you've been programming, the less jarring these things are. Soon enough the tools will catch up and it will be all drag-drop, set properties etc. If that's all you've ever known, you might feel like Vista has dropped you through the looking glass. But if you have some memories of the old days, you're going to be on more solid ground. And you probably still type really fast.

Kate

1/13/2007 9:40:29 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, January 11, 2007

Poor Visual Studio 2005, aka Whidbey. Developed and released before Vista, it's Vista-blind. Say you're building a COM component and one of your build steps registers it, writing to something under HKLM. Unless that instance of Visual Studio is running elevated (perhaps because you right-clicked and chose Run As Administrator) the registration will fail. The fix: close Visual Studio, run it again elevated, repeat your build. It's a little frustrating.

Every month that goes by is going to make this better. Eric Appel has a nice summary of what you can do now: install a pair of updates (one released, one in beta) and set Visual Studio to always run elevated. You'll need to consent every time you run it, so I actually skip this, run non-elevated most of the time, and when something fails I close and re-open Visual Studio.  If you would find that super frustrating, go ahead and mark it to require Administrator. It's also a good habit to test by double-clicking your EXE in Windows Explorer rather than hitting F5, so that your app is elevated or not elevated according to its own manifest and not according to the way you started Visual Studio.

It's a transition time. It won't last forever.

Kate

1/11/2007 8:29:05 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Sunday, January 07, 2007

Let's see, I got dinged (so far) by

If I don't step up and produce my Five Things pretty quickly, there won't be anyone with a blog left for me to tag!

  1. I have a PhD in engineering -- Chemical Engineering to be precise -- from the University of Toronto. My thesis title had way too many "of"s in it and was about modelling the very first steps in blood coagulation at a surface. Simultaneous partial differential equations! Boundary layer! Non-Newtonian fluids! Woo hoo! My undergrad work was also in Chemical Engineering, at Waterloo.
  2. If you don't count co-op jobs while an undergrad, TA-ing while a grad student, part time lecturing, and the like, I have held only two "real" jobs in my entire life, one for two years between graduating from my undergrad and starting my grad work, and the other as partner here at Gregory Consulting ever since.
  3. I am an elder in a martial arts system, one of only six in that system. Don't try to beat me up though... we'll both be sorry.
  4. I never lie. I sometimes say I can't talk about something, or I say something that I know is deceptive but is technically true, but I do not lie. For example, I only say "this demo worked on the plane!" if it really did. But I might say "they haven't announced anything" knowing that you will conclude I don't know, when in fact I do know but can't tell you. Sorry.
  5. I adore my kids, and put them first in just about everything I do. I've turned down conferences because it conflicted with family things, and followed a lower-salary career path so I'd have time to be hugely involved in what they do. I even homeschooled one of them half days for an academic year. I just don't talk about them much in my blog to give them some privacy. As a result many people think I don't have kids! Trust me, when we're together in person and it's not all being archived for some future romantic interest of theirs to read 20 years from now, I'll talk your ear off about these sweet, funny, smart, hardworking, reliable little angels!

There.

Now, my victims. Who on my favourites list is not already playing, but knows me enough to take a tag from me?

Kate

1/7/2007 2:18:56 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Saturday, January 06, 2007

Joe Duffy has moved from the CLR team to Parallel LINQ. How do you like this offer:

We're looking for supersmart technical people to join the team and help change the face of programming for anybody writing code on the CLR or VC++. PLINQ isn't the only project. Solid CS skills are a must, but you don't necessarily have to be a concurrency guru (right away).

Help change the face of programming? Sounds (almost) irresistible to me!

Kate

1/6/2007 1:41:16 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, December 14, 2006

Microsoft has announced that the next Professional Developers Conference (PDC) will be October 2-5, 2007 in Los Angeles, with two days of pre-conference on September 30 and October 1. That's good news and bad news for me. I'm glad we're having a PDC this year because it means there's something to announce and something to get early bits of. The official word is:

The PDC is the definitive developer event focused on the future of the Microsoft platform.  PDC 2007 attendees will have the opportunity to access new code, learn about the latest Microsoft product offerings and hear from Microsoft executives about the various platform developments. 

Check http://msdn.microsoft.com/events/pdc/ for updates; you can also subscribe to the RSS feed to find out more information about the event as we get closer.  Registration will open in the May/June timeframe. 


 

So what's the bad news? LA, again. This will be three in a row. I wouldn't miss the PDC for anything but can't we go somewhere else?

Kate

12/14/2006 2:50:57 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, December 11, 2006

The Regional Director program truly is worldwide -- about half of the 120 or so of us are located outside the USA. So let's say you want some pictures of Microsoft software in beautiful locations around the world, what better group to ask? The program asked us to send in pictures this fall, and here's the result:


(larger version)

Amazing, aren't we? For my picture, which is nowhere near as spectacular as some, I went and stood among some turning leaves.

Kate

12/11/2006 2:01:05 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Thursday, December 07, 2006

In Barcelona, I was on the panel for the Barcelona Girl Geek Dinner. Now, lest anyone be under the illusion that these panels are carefully peer-selected and reviewed, that there's some committee somewhere finding the cream of modern geekhood -- well maybe that was how the others were chosen but for me, I was hanging out in the speaker room when Sarah, who I'd only just met, asked me if I'd do it and I said yes.

I had a lovely time at the panel and we all spoke about our experiences, advice to newbies, how nice it is not being "the only one in the room" from time to time, and so on. I was sitting with Catherine and Cyra, two of my fellow panelists, and Charles Torre of Channel 9 was with us, and we talked over dinner and wine the way in my experience geeky women always do -- a fast paced mix of very technical shoptalk and personal getting-to-know-each other material. (I learned a lot from Cyra and wish we had had more time together.) When the event ended, the four of us walked together across the street to the speaker hotel, but it was such a short walk and we weren't finished talking. Someone expressed an interest in dessert, and we decided to see what the lobby bar had to offer. We kept on talking, and at one point Catherine and I were trying to convince Charles that "the compiler is your friend" -- that strong typing and early binding have big advantages. Charles kept saying "I can't believe I'm not filming this" until eventually he picked up the camera and started to film. He asked us questions he knew we cared strongly about and off we went.

The resulting video is now on Channel 9. It seems to kind of start in the middle because, well, we started in the middle. I suspect it's the only video on Channel 9 featuring gestures with a glass of Scotch. It's one of the very few that doesn't feature exclusively Microsoft employees, so I am honoured to see it there. Those of you who have heard my line "I stay up late over too much red wine arguing about deterministic destruction" can now see that in action. We don't introduce ourselves till the very end, so if you need to know who's who, download the whole thing, skip to the end, then go back to the beginning and watch us.

Kate

12/7/2006 10:51:37 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Wednesday, December 06, 2006

Man, I've been making software for a long time. I first came across Fred Brooks' essay No Silver Bullet: Essence and Accidents of Software Engineering when the mail (you remember, the physical mail) brought me the magazine (you remember physical magazines) and it was the cover story. Apparently that was the April 1987 issue which is bringing us perilously close to the twenty year mark. (And if I needed to, I could get my hands on that copy within minutes... in fact I'm sure I've held it within the last year or two.) And now people are talking about it again. Larry O'Brien has a long post with links to some other posts of his own and by Wesner Moise. He also captures what I consider to be the essential quote from the essay:

I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems.

The thesis is that software development gets easier or faster or more accurate only by degrees: you cannot adopt structured programming or object oriented programming or aspect oriented programming or functional programming or agile techniques or anything and expect to be ten times faster or a hundred times faster, no matter what people tell you:

There is no single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity.

It was true then and it is true now. And it will still be true when my kids are as old and grey as I am becoming. Worth reading and rereading, and not waiting twenty years between rereads. Oh and by the way, this is the same Fred Brooks who invented the heavens-I-wish-it-wasn't-true rule: Adding more people to a late project makes it later. That's from 1975 and you can't escape it either.

OK, there is one way you can achieve an order of magnitude improvement in productivity: hire the right people. The good ones are ten times as fast as the OK ones, and infinitely faster than the none-of-their-code-ever-ships ones. But that's not a technology or a management technique, so it doesn't count for our purposes.

Kate

12/6/2006 8:10:13 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, December 05, 2006

Here's another neat way to search in Visual Studio. Press Ctrl-i to get into incremental search mode, and start typing:

Typing e finds the first e in the file. Keep going and find the next instance of your letter pair:

It keeps going as long as you want:

By the way the binoculars/arrows cursor reminds you what you're doing. Until you press Escape, you can also do Ctrl-i again to just go to the next one, Shift-Ctrl-i to go backwards, and Backspace to take a letter off your search string.

Fun, eh? I may like search in Visual Studio too much ... I routinely use the Find in Files to search folders of stuff that isn't anywhere close to code. Of course I don't have to do that on my Vista machines, where search is nice and fast.

Kate

12/5/2006 7:42:29 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Monday, December 04, 2006

My recent post of a joke about a priest and a politician highlights a privacy issue: sometimes any sufficiently specific information can become identifying information. If the priest had referred to "one of the first confessions" instead of "my very first confession" nobody would have learned anything when the late-arriving politician told the crowd he was the very first to give confession to the then-new priest. Similarly when a CIA operative was identified in the USA, at one point the person who identified her took refuge in pointing out he hadn't named her, hadn't said "X Y is an operative", but instead had named her husband, "A B is married to an operative." Of course that was equivalent to naming her.

Similarly, when you're worrying about privacy in an application, it's not as simple as naming some fields you shouldn't include in the system. That's a good first step, for sure: why does this application have a field for Social Insurance Number, what do we use it for? Why do we need to keep it after that? But it's not the whole story. For example, we may need everyone's home phone numbers, but do we need them on the main screen or would it be better to make people click to see the more private information. Can we use role based security to show private information only to managers? This takes some thought.

Microsoft is offering a 49 page Privacy Guidelines whitepaper you may find helpful. The introduction says:

The purpose of this document is to propose a baseline for establishing this higher bar.  It offers guidance for creating notice and consent experiences, providing sufficient data security, maintaining data integrity, offering customer access, and supplying controls when developing software products and Web sites.  These guidelines are based on the core concepts of the Organisation for Economic Co-operation and Development (OECD) Fair Information Practices and privacy laws such as the EU Data Protection Directive, the U.S. Children’s Online Privacy Protection Act of 1998 (COPPA), and the U.S. Computer Fraud and Abuse Act (as amended 1994 and 1996).  In the interest of developing a common set of industry best practices for privacy, we invite the community and other interested parties to participate in an open dialogue. 

It discusses categories of information, retention, consent, notice, and a few things that are web-specific like cookies. A good place to start your thought process.

Kate

12/4/2006 3:16:45 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, December 01, 2006

From Beyond Code, this made me smile:

Sorry for the delay
A priest was being honored at his retirement dinner after 25 years in the parish. A leading local politician and member of the congregation was chosen to make the presentation and give a little speech at the dinner. He was delayed, so the priest decided to say his own few words while they waited.

"I got my first impression of the parish from the first confession I heard here. I thought I had been assigned to a terrible place. The very first person who entered my confessional told me he had stolen a television set and, when questioned by the police, was able to lie his way out of it. He had stolen money from his parents, embezzled from his employer, had an affair with his boss's wife and taken illegal drugs. I was appalled. But as the days went on I knew that my people were not all like that and I had, indeed, come to a fine parish full of good and loving people.".....

Just as the priest finished his talk, the politician arrived full of apologies at being late. He immediately began to make the presentation and gave his talk. "I'll never forget the first day our parish priest arrived," said the politician. "In fact, I had the honor of being the first one to go to him in confession."

Moral: Being late can be (very) costly.

Kate

12/1/2006 8:13:25 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Thursday, November 30, 2006

Like Dilbert, this list of top 20 excuses developers give to testers is only funny because it's true. I'll tell you that the answer listed as #1 there is banned in our offices -- and we have quite a bit of process in place to make sure deployments are complete, for just that reason. Personally, I find #8 the funniest - and again, only because I have in fact heard it... mostly from former employees :-). Number one winner in the comments: Billy Hollis - "We're not shipping your machine."

Kate

11/30/2006 9:02:24 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, November 28, 2006

As I mentioned earlier, I recorded a DNR episode while at Tech Ed Developers in Barcelona. A bunch of us got together to talk about Agile development. As I said at the time, at Gregcons we're not "formally Agile" (stop laughing) but we do a lot of things that fall under the Agile umbrella, because they just plain make sense.

I haven't had a chance to listen to the recording yet, but Scott Bellware has, and he liked it. Among other things, he says:

Kate Gregory nailed a quintessential a-ha moment in agile adoption: "You go through this phase of saying, that's way too extreme; I would never do that; what kind of weirdo does that?.  And then a year later, you're doing that."

Agile practices go deep and often work at subtle levels.  The very practice of agile development puts the sharpness in your perspective that you'll need before you can see the difference between pre-agile development and agile development.  Kate's statement perfectly captures this experience of the agile practice paradigm shift.

Happy to help, Scott. Thanks for listening!

Kate

11/28/2006 7:34:03 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, November 27, 2006

I use search engines for a variety of reasons. Sometimes I want to find out how to do something. Other times, I want to find the official page about something so I can link to it here or send it to someone. Since most of the things I want to learn are related to things I already know, and since I blog about a lot of what I know, I have a bit of an occupational hazard:

One of my mentoring clients complained about this to me. "I decide to search the Internet instead of calling you to ask and what do I find? A bunch of stuff you wrote!". Believe me, it's worse when all I can find is a bunch of stuff I wrote. And Peter Near, a fellow MVP, Flyertalker, and Ontarian, has the same problem.

I would get in the habit of excluding gregcons.com from my search results if not for two things: first, a lot of my stuff is published on other sites, and second, from time to time my old words help me remember something I'd forgotten. So I guess I'm stuck with it.

Kate

11/27/2006 7:25:06 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Wednesday, November 15, 2006

The nice folks at O'Reilly, who make very good geeky books, have a fun little quiz going on. They show you a code snippet and you guess what book it's from. This is usually (but not always) a matter of guessing what the language is, and that's harder than you might think at first. There's a little timer counting down so the longer you take to make up your mind, the less points you get. Here's a really easy example:

<html>
  <body>
    <p>Here is a paragraph.
    <p>And here is another.
  </body>
</html>

Is that from:

  1. Gaming Hacks
  2. Learning XML, 2nd Edition
  3. GNU Emacs Pocket Reference
  4. HTML & XHTML: The Definitive Guide, 4th Edition

Trust me, most of them are much harder :-)

Kate

11/15/2006 12:27:22 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, November 13, 2006

Apparently a lot of people come to me for their physics experiment information, so I have an update. The pitchdrop experiment is listed as one of the longest running experiments ever. It surely must be one of the slowest.

Pitch, like glass, is a very very thick liquid that can be shattered and that most people think of as a solid. This experiment has been measuring its viscosity by timing the drops... they fall about once every 8 or 9 years. There have been 8 so far, most recently in November 2000, and no-one has ever seen one fall - that is, separate from the funnel. There's a webcam pointed at it, but it should be a while yet before you need to start monitoring it.

Kate

11/13/2006 11:57:21 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, November 11, 2006

The abstract promised:

If building games for the Xbox 360 or Windows gets you excited then you have to be at this event. For the first time, Microsoft will take you through the details of our (soon to be released) XNA Studio Express. If you didn’t already know, anyone can now build interactive, high performance games for Windows or Xbox 360. We’ll take you through an introduction to XNA and XNA Studio Express. Then we’ll equip you with the skills to start building games ranging from simple 2-D to stunning interactive 3-D.

And that's what we got!

As you can see, the space was JAMMED and the demographic skewed a little younger than your typical Microsoft event. There are more pictures at Barnaby's Flickr site, which is where I got this one :-)

Here's one I took myself, of a very nice gesture:

Since you probably can't read the letter I'll paraphrase it: "we know it's Remembrance Day, we've made a donation on behalf of the attendees, please take and wear a poppy." Christian Beauclair, who was speaking as 11:00 rolled around, paused us for our minute of silence and the room fell completely still.

A great introduction to both game development and the world of MSDN events for plenty of young people. XNA is really going to make things interesting for developers who want to just play and try things.

Kate

11/11/2006 1:29:18 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Wednesday, November 08, 2006

Spotted in the speaker room in Barcelona:

That's right, donuts entirely coated in decent chocolate. Mmmmmmm.

For those keeping track, the MVP shoes are in this speaker room also. They follow me around :-)

Kate

11/8/2006 8:20:49 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Tuesday, November 07, 2006

Here I am at my second Tech Ed in three weeks and ready for a great time. The RDs already had a great dinner Monday night, and Tuesday is Girl Geek night. I've picked up an extra session, too, a panel discussion Wednesday afternoon:

DEVPD01 .NET Rocks! Talks Agile Development!

Carl Franklin , Richard Campbell , Stephen Forte , Roy Osherove , Kate Gregory

Wed Nov 8 15:15 - 16:30 Room 116

Enjoy a live audience recording of .NET Rocks as Carl and Richard bring together a group of serious thinkers on agile development for a no-holds barred debate on what works and what doesn’t in the world of agile. Bring yourselves and your questions to the panel and help create a future episode of .NET Rocks!

Kate

 

11/7/2006 7:46:44 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Saturday, October 28, 2006

[backdated with dasBlog]

We didn't have a church ceremony for my father. Instead we gathered at the sailing club. A family friend acted as MC and each of us (the five children and my dad's wife) spoke, read a poem, or played some music. A table nearby was piled with newspaper clippings about his inventions, his trip around the world, and so on, as well as the sextant he used on his trips, his pipes, and so on.

Afterwards we got onto the boat, which is 26 feet long. A gale was forecast for that night, but it was afternoon and we were only 15 minutes from home. We had something to do and we went out and did it. His hat was still floating on the waves when a pulley that holds the tender (small dinghy) up out of the water broke. There followed several exciting minutes while the only two qualified sailors (my brother, who sailed the Atlantic with him 20 years ago, and my sister, who is eight months pregnant) wrestled it out of the remaining pulley, got it tied behind us, and got all the water out of it. When this was all settled we realized we had gone quite a long way and decided to take down the small sail we'd been using and motor back home.

The motor started fine and the prop turned, but it didn't make the boat move. This is the point where Dad would have opened things up and fixed them, had done so even just a few days after abdominal surgery, but none of us could. We tried a few things and then called the Coast Guard.

The ocean is big and even when you're on a cell phone telling them what island you think you are going past, it can take a long time to find you. It was getting darker and windier by the minute. We got a sail up (my brother wore the safety harness he'd worn in the North Atlantic) and actually got into a cove and at anchor by the time they found us. They said we'd lose the boat if we left her there that night, and decided to tow us to a marina. That all went without incident. Afterwards, standing around in our funeral clothes outside someone else's wedding reception, we acknowledged that maybe we hadn't been super smart in what we'd done, but that we'd been fine till the engine broke. That's when the Coast Guard guy said "Boats can be tricky that way." I thought he was going to patronize us, point out they take you onto the ocean or some such, but he went on "they don't like losing their owners." Told us a few tales of boats that sank the day they were sold and the like.

Later, my brother realized the pulley that broke just as we finished our private remembrance was the last thing my father had fixed on that boat. And I realized that when "bloody hell" (my Dad's favourite oath) started, and competence and capability (things my father valued highly, along with brute force) kicked in, the crying stopped. The five of us kids pulled together and rescued ourselves, now that we don't have Dad to rescue us any more. We're going to be OK.

Kate

10/28/2006 7:59:36 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, October 24, 2006

[backdated with dasBlog]

OK, I know you really come here for C++ stuff and the occasional picture of autumn leaves, but there are some things I want you to do. First of all, if you're the donating type, and you want to make a donation in my Dad's memory, please don't give it to those "cancer is a word, not a sentence" people. Nothing they did helped him. (Research is fine, just all that cheer-up-it's-not-so-bad stuff bothers me.) He died two days short of the one-year anniversary of his diagnosis, which is actually pretty good for esophageal cancer. The heroes in our minds are the VON. Back in August, had my dad stayed one more day in the hospital I believe he would have died there. Going home gave him many more months and gave us all more time with him and more time to come to grips with what was happening. The VON were what made that possible. Sometimes they came every day, sometimes every other, sometimes two and three times a day. They dealt with his abcess, his draining tube, his pain, his weakness, with all the things that would have otherwise had him in the hospital. They were always polite and respectful and supportive. They didn't bustle around like hospital nurses, bossing everyone and controlling their territory. You can donate to your local VON if you have one, or to the ones who helped Dad at VON of Greater Halifax, 7001 Mumford Road, Tower 1, Suite 300, Halifax NS, Canada B3L 4N9.

Second, if you ever have trouble swallowing, have a terrible acid stomach for which you regularly take antacids, or have a family member who died very quickly of "a growth in the throat" or something similar, go and ask your doctor to test you for Barrett's esophagus. That's about the only hope for prevention of this, the fastest-growing cancer in North America.

Third, no matter how old you are, it wouldn't hurt to talk to your family about your end of life wishes. Whether it's dying at home, what songs to play at the ceremony,  or burial-vs-cremation, the decisions are so much easier when you actually know what the person would have wanted.

Kate

10/24/2006 7:34:35 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, October 23, 2006

[back-dated with dasBlog]

While I was in Africa my father's condition worsened and then he slipped away. He died at home, in the bed he'd been using for several months, without pain, knowing he was dying and that it was time to go. He had taken care of the things he needed to take care of: explaining his latest project to his former graduate students so that they can prove his theory and rewrite some text books, explaining the trickier aspects of the boat motor to my sister, giving some instructions to his lawyer. He was content to go at the end.

His obituary was in the Globe. It could easily have been twice as long.

Kate

10/23/2006 7:23:19 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Wednesday, October 11, 2006

One of the things I do for many of my clients is code review. This comes in two flavours. The first is where we all pile into a room with a projector and someone walks us through the code while we ask questions. Sometimes as a result of this the original author has to go away and rewrite bits of the code, but it's just as likely that the outcomes will be everyone understanding how something works, or knowing what there is in someone else's part of the application. The second is less interactive. I read over code and point out bad, dangerous, sloppy, or hard to maintain code. This might be hardcoded error messages in a multilingual application, or non parameterized dynamic SQL, or poor object orientation, or any one of hundreds of other things. Often I point it out not to the author of the code directly, but rather to the author's manager. Or in at least one case, their former manager. (As in, now that we got rid of this person, can you tell just how much mess he left behind?)

Now, if you are thinking of going to Team Systems, let me give you another reason to do so. It can automate a lot of these types of checks. For example, here's a really quite poor little class:

Public Class Company
    Private networth As Integer = 0
    Public name As String
    Private foundingdate As Date

    Public Sub New()

    End Sub

End Class

When I run static analysis against this, in no time flat it points out:

Running Code Analysis...
C:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe /o:"bin\Debug\Information.dll.CodeAnalysisLog.xml" /f:"bin\Debug\Information.dll" /d:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727" /r:C:\Program Files\Microsoft Visual Studio 8\Team Tools\Static Analysis Tools\FxCop\\rules
MSBUILD : warning : CA1020 : Microsoft.Design : Consider merging the types defined in 'Information' with another namespace.
MSBUILD : warning : CA2209 : Microsoft.Usage : No valid permission requests were found for assembly 'Information'. You should always specify the minimum security permissions using SecurityAction.RequestMinimum.
MSBUILD : warning : CA2210 : Microsoft.Design : Sign 'Information' with a strong name key.
MSBUILD : warning : CA1014 : Microsoft.Design : 'Information' should be marked with CLSCompliantAttribute and its value should be true.
C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Information\Information\Class1.vb(6): warning : CA1805 : Microsoft.Performance : Company.New() initializes field networth of type System.Int32 to 0. Remove this initialization as it will be done automatically by the runtime.
MSBUILD : warning : CA1823 : Microsoft.Performance : It appears that field 'Company.foundingdate' is never used or is only ever assigned to. Use this field or remove it.
MSBUILD : warning : CA1051 : Microsoft.Design : Make 'name' private or internal (Friend in VB, public private in C++) and provide a public or protected property to access it.
MSBUILD : warning : CA1823 : Microsoft.Performance : It appears that field 'Company.networth' is never used or is only ever assigned to. Use this field or remove it.
Code Analysis Complete -- 0 error(s), 8 warning(s)
Done building project "Information.vbproj".
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Meaningless initializations, unused variables, public member variables... they get found. It's a great start.

Kate

10/11/2006 9:33:04 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Sunday, October 08, 2006

I was looking forward to next year's Tech Ed USA for more than the usual reasons we look forward to a Tech Ed. You see, it was going to be in New Orleans, and I've never been there. Everyone said it was a place you really should see, and here was my chance to both see it and somehow feel like I was doing a good deed by contributing to the economy. But that's not how it's going to be, apparently, not in 2007 anyway. (Story on bink.nu) It seems the airlines haven't bounced back yet in terms of allocating capacity to the city, so Tech Ed 2007 will be somewhere else. Any chance they'll consider Toronto? :-)

Kate

10/8/2006 12:28:45 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, October 06, 2006

Airports, like software, need to be tested before they're released -- or I guess for an airport, you'd say opened. That's why the Greater Toronto Airports Authority, which operates Toronto Pearson International Airport (YYZ), is asking for volunteers to come to the airport on the morning of Oct 28th and wander around like they were trying to catch a flight, or arrive from a flight, or whatever. Can you read that sign as you head down the elevator? Is it obvious that you are not at ground level and need to find an elevator to get to ground level? Is this hallway really wide enough when two planes arrive at once and 400 people are walking through it? It's not like there wasn't any thought put into that sort of thing in advance, but before you open the doors, testing is a really good idea.

If you live in the Greater Toronto Area and want to tell your grandchildren you once beta tested an airport (perhaps the fact that you parked and ate at an airport for free will excite them more) then head on over to http://www.gtaa.com/airportvolunteer/ and sign up. Apparently there's some sort of souvenir in it for you, and you'll get to see the new parts of the terminal months before they open. Go for it!

Kate

10/6/2006 5:20:01 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, October 01, 2006

A client of mine, International Time Recorder, is hiring in Etobicoke. Here's the job description:

Job Title:  Senior Application Developer

Senior developer responsible for contributing to the design, development and implementation of commercial software solutions to a diverse marketplace.

Duties
• Contribute to the analysis and design, while being accountable for the support, development, testing and implementation of solutions and enhancements to software systems.
• Design and develop software components and features.  This includes working with stakeholders in developing Detailed Functional Specifications, designing certain key components of the product and implementing the solutions.
• Support and design of maintenance and test procedures and test cases for the product.
• Participate in schedule development and ensure timely product delivery.
• Assist in the creation and implementation of concrete procedures for tracking and releasing product updates.
• Coach and mentor junior development team members in best practices for support, development, testing and implementation of software solutions conducting code reviews as needed.

Qualifications
Education:  University Degree in Computer Science, or equivalent experience
Experience:  8 – 10 Years

Required Skills:
• Familiarity with the following technologies: C#, ASP.NET, C++,  ADO.NET, ADO, Web Services (SOAP/XML), RPC, all Windows Operating Systems, IIS, COM, Active Reports
• Two years experience in .NET development in commercial software development using C#, ASP.NET, ADO.NET
• Eight years experience in commercial Windows Application Development
• Experience in Scaleable Distributed Application design
• Three years experience in designing SQL Server databases
• Proven experience in developing database-driven Web and Windows applications with demonstrated flair for design and layout
• Two years experience as a project lead

Nice-to-Have Skills:
• Time and attendance industry experience
• Experience with Microsoft Visual Studio Team Systems.
 

The firm is doing active development in both C++ and C#. If you're looking for a place to use both old and new skills (and a chance to get regular mentoring from me :-) ), drop me a line and I will forward your information along.

Kate

10/1/2006 1:28:10 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 29, 2006

Fall is here and that means hammock time is pretty much over for another year. I just had to mention the hammock we got this year: small and light enough to take camping, to the beach, or anywhere else. Sets up in a minute or so. Here it is on my front lawn:

It weighs less than a pound and when it's in its stuff sack, I bet it would fit in a roomy jacket pocket. It certainly takes up less room in a beach bag than a towel, and it adjusts to handle trees of varying distances apart. It came from Lee Valley, where so much of my money has gone over the years. They'll ship anywhere. If you decide you want a Lee Valley catalog, drop me an email. I'll refer you to them and the company will give some money to charity.

Kate

9/29/2006 3:15:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, September 28, 2006

I saw this interesting graph over at Language Log:

It compares "empathizing quotient" with "systemizing quotient" -- the extent to which you connect to others' emotions and the extent to which you like to categorize things and people, and fit them into your system of understanding. (This is just for one sample of people and doesn't necessarily apply to the entire world.) You can score very high in both, or very low in both, but as this graph shows, women tend to have higher EQ and men tend to have higher SQ, though the difference between the groups is less than a typical difference between individuals. Engineers and scientists tend to have much higher SQ and also lower EQ. The green symbols on this graph are results from people with Aspergers, or people diagnosed as High Functioning Autistic. Their SQ varies but their EQ is very low. You can take the test yourself if you like. I was surprised by questions like "When I read something, I always notice whether it is grammatically correct" -- that is 100% true of me but I thought it was my little quirk, not something that would appear on a test for personality traits. Then there was "Whenever I run out of something at home, I always add it to a shopping list." Who doesn't?

My results are perfectly ordinary for someone with a PhD in engineering, I think: EQ 36, SQ 77. That puts me about where the S is in the "extreme S" label. Interesting.

Kate

9/28/2006 2:58:55 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Saturday, September 23, 2006

No, I'm not talking about where the brace brackets go! Coding guidelines are so much more than style guidelines. One of the things that sets me apart from many other developers I know, and especially the authors of code I am asked to fix, is a drive for simplicity. For me, that comes down to three things:

  • Start by solving the problem you're actually facing, not some enormous superset of it
  • Write the straight ahead way first, then adjust for the exceptions and strange corner cases
  • When it's all working, and every time you touch it from then on, look it over to see if you can make it simpler.

That last one is the one so many people seem to skip. Then later when I come along and read the code, I see how it could be simpler, but I hesitate to change it. They must have done it this complicated way for a reason, I think to myself. It can take quite a long time to prove to myself that no, they just settled for 'working' and ran away as fast as they could, leaving this mess for someone else to sort out later.

A mentoring client gave me a pointer to an article ostensibly on Coding Guidelines which is as much philosophical as anything else. I like it. The rules are:

  1. Make your code look like other people's code.
  2. Use the simplest design possible.
  3. Don't re-invent the wheel.
  4. Document your code.
  5. Keep security in mind.
  6. Work in increments.
  7. Work in iterations.
  8. Have your code reviewed.
  9. Don't stay blocked.
  10. Do unto others as you would have them do unto you.

There are no false notes in this list and I endorse this set of philosphies whole-heartedly.

Kate

 

9/23/2006 6:07:23 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 22, 2006

The other day I spotted this:

It's two people around a bowl of salsa, holding a nacho chip as big as each of their heads (which is why it takes both of them to hold it, I guess.) But I had never noticed it before:

That reminded me of something else I never saw even after looking at the logo a million times:

That obvious arrow is lurking here:

So subtle, till someone shows it to you. Then so obvious. So it is with bugs, eh?

Kate

9/22/2006 2:49:21 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, September 21, 2006

How many Visual Studio Developers know about autoexp.dat? My guess is not many. This file, located in C:\Program Files\Microsoft Visual Studio 8\Common7\Packages\Debugger for a typical install, controls how the debugger shows values in the Data Tips, locals window, auto window, etc. The file is yours, it's on your own computer, and you're free to edit it. Here's how to do so for a really simple (and redundant) type, Point:

class Point
{
private:
 int x, y;
public:
 Point (int xx, int yy)
 {x=xx; y=yy;}
 int getx()
 {return x;}
 int gety()
 {return y;}
};

I ran a really simple app that constructed a point, and paused in the debugger for a data tip:

Then I edited autoexp.dat, adding this line:

Point =(<x>,<y>)

I saved it and ran the debugger again, and now the tip looks like this:

You can do this for any class you write. It's your program, you might as well make your debugging life easier.

Oh, if you're wondering why my data tips are actually readable instead of in some tiny 3 point font, I blogged that earlier this summer.

9/21/2006 1:29:07 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, September 18, 2006

Julie blogged this  a while back, and mentioned to me recently that the firm needs someone again. If you know C++ and MFC, know what the .NET Framework can do, and can write English sentences as well as code, then you can live in a lovely place and do some cool work. Check into it (follow the link from Julie's blog) and mention me as well as her when you apply.

Kate

9/18/2006 7:05:53 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 12, 2006

According to a summer IT Business article, there is still a battle or maybe there isn't. The headline reads "Java vs .Net: The tug of war continues" while the first sentence of the article is "The religious war between Java and .Net seems to be over." You might be able to guess how I feel from these quotes: 

  • "It's .Net all the way," she said. "I hardly ever get e-mails (from students) asking [whether] they should learn C# or Java any more."
  • "I feel more productive on the .Net side," said Gregory, who also programs in Java. "When I made the jump, it was about the tools in Visual Studio, and the libraries."
  • "I think that every time we have a new batch of libraries and every time the products are improved, people will change (platforms)," said Gregory. "Others say they will stay. And they're both right. Maybe younger developers get caught up in a religious war, but older developers say, 'You go ahead and use whatever you like. I'll be over here getting some work done.'"

That's why I'm a VB.NET and C++ developer after all -- to get some work done.

Kate

9/12/2006 2:47:25 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, September 11, 2006

Scott Meyers has been musing about the most important C++ books, non-book publications, software, and now people. He decides on:

  • Bjarne Stroustrup
  • Andrew Koenig
  • Scott Meyers
  • Herb Sutter
  • Andrei Alexandrescu

You know what? I agree with him. I think it takes some serious nerve to put yourself on a list like that, but his rationale works for me. I'm not sure if the list is in significance order -- if it is, I'd move Herb up a notch or two -- but these are the folks. And four of them were on the speakers list for C++ connections last year. I was honoured, truly, to be on that list with them and need no more than that.

Kate

9/11/2006 1:03:13 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, September 09, 2006

I'm thrilled to confirm that I will be speaking at Tech Ed in Sun City again this year!

I'm travelling on South African Airways this time (it's been Lufthansa before) and taking a different route, so there will be some novelty along with the familiarity. I just love the energy at this conference; I can't wait to get there!

My talks:

  • DEV 307: Delving into Visual Studio 2005 Team Edition for Software Developers
  • CLI 315: Windows Vista: Tips and Tricks for Targeting Key Native APIs from Managed Code
  • CLI 402: Modifying Applications to Run on Windows Vista

Kate

9/9/2006 12:46:05 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, September 08, 2006

The code camp concept keeps spreading. October 14th will see Code Camp Montreal: it's free, it's bilingual, it's in downtown Montreal. All you need to do is register! Attending will be a great way to meet other developers and to learn as much as you can cram into your brain in a single Saturday. I wish I could be there, I know it will be great.

Kate

9/8/2006 12:37:35 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, September 05, 2006

One more update about my Dad and then some catching up from the old "stuff to blog" file. My Dad has an inoperable lump. Visually the surgeon says it is cancer, but two biopsies have been negative. This lump was blocking bile ducts, blocking the bowel, and doing various things that cause terrible pain and can kill you within days. His late August surgery moved things out of the way of the lump, leaving him to recover from the surgery (and subsequent abscess) and the weight loss and muscle loss that comes from going over 6 weeks without really eating. He has done an amazing job of that, returning within days to regular bike riding, sailing the 26 foot wooden boat he took around the world, and putting weight back on. He is also figuring out how to balance his pain meds so that he can stay as active as he wants to be.

How long does he have? We don't know. He could have died back in August in that dingy hospital room, wearing just that stupid backless gown and with no comforts of home. Now he is home, with ocean views from every room, his own clothes, his own shower, his bike, his boat, music, his laptop, and family. I hope he has another year or more... but we are all prepared for less. And we are all living as though he has more, much more.

Kate

 

9/5/2006 11:48:30 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Thursday, August 24, 2006

I have reached Halifax and seen my dad. He's thin but still Dad. Tomorrow he will be going home because at the moment he doesn't particularly need to be in the hospital. We will take it one day at a time.

Also, I found an online story about our neighbours' fire. It's kind of inaccurate because the number of people is wrong (the front tenant wasn't just one person living alone I don't think) and it leaves out my friends' dog and hamster both (the hamster was apparently mentioned in the TV report) but it has some details for those who are interested: http://www.mykawartha.com/article/3964. An earlier draft at http://www.mykawartha.com/ka/article/3930 has less details but I'll include the link for completeness. You might want to poke around mykawartha.com to see how exciting my life normally gets: a parking lot near our Peterborough office is to be shut down for a while, City of Kawartha Lakes council is trying to fund the renovations needed at the Janetville community centre (where my boy takes martial arts lessons), and somebody (other than me) wrote a book.

My mother is still in Winnipeg so we don't know what was decomposing in one of those row houses yet.

Kate

8/24/2006 11:47:16 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]

Tuesday afternoon my mother called me with a gross and slight horrific story which I am going to share with you now. She lives in a row of 8 little houses in Toronto all connected to each other, 110 years old. For some days or even a week, some of the neighbours have been troubled by a nasty smell, and they were worried that a squirrel or a raccoon had died in their shared attic. Then suddenly on Tuesday two of the houses were infested -- upstairs! -- by worms. And not pink round worms like you would find in your garden. Flat white worms. Eeeeew, right? They called the police. I don't even know the end of the story because she had to leave on a trip (she's teaching a course in Winnipeg) but you know what? It isn't making much on an impact on my life right now.

That's partly because I was headed home to a much fuller house than usual. That same afternoon some neighbours of ours, whose kids are good friends with our kids in that in-and-out-of-each-other's-houses way, took a hard knock. They have rented a tiny shared house to stay while building a new home on land near us, and they lost that rented space in a fire. They also lost, or so it seemed that first afternoon, everything they owned that was not in storage, including all the back-to-school shopping (over $1000) they had just completed. They had no insurance since they were just renting for a few months. Their two children and cat came to our house that day, and have since been joined by a dog and the second cat, who took a while to find. I therefore have four children, two dogs, three cats and a hamster in a 1500 square foot house, and many of the animals can't be in the same room as each other. I spent three hours Tuesday, and Brian spent more like five hours Wednesday, doing things like driving the kids back to the house to look for the cat or to retrieve things, helping the kids run laundry or spray Febreze on things that can't go in the washer, that sort of thing. Now many people have told me that this must be a total disruption and must be driving me to drink. But if anything I am finding it a needed and welcome distraction, and I am actually sleeping better than I have for a week.

And that's because what's really on my mind is my father, in hospital in Halifax.He had major surgery in December, some setbacks in the winter and early spring, but by June was pretty much himself again. However since then he's had some bigger setbacks and has been in and out of the hospital all summer. It's now at the point where the whole family is flying in. My Dad has five kids and we haven't all been in the same room this century so the whole thing is bittersweet. One sister is bringing her infant, another is pregnant. It just doesn't bear thinking about.

And yes, I still have a business. I have clients with mentoring needs, projects going live, new projects starting, Request for Response/Proposal/Services pouring in as the bosses get back from vacation, some very sweet C++ and Vista stuff that I can't wait to tell you about (but will have to) and so much more. I am emailing a lot of those people telling them my sorry tale and that I will talk to them after Labour Day. To my delight they have all said "sure, of course, let's talk then!"

It really is going to be OK, but it's going to be hard work on the way,

Kate

8/24/2006 10:22:04 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Tuesday, August 22, 2006

Blogging is usually a way I talk to people I don't otherwise talk to. Not that friends, family, clients, and staff don't read it -- I know you're there! But there is another group of people I know are reading who I don't normally email, IM, call, see, or send pieces of paper to. And in my life, as in so many lives, things come up, stresses rise, deadlines loom, project work eats all available hours, and the blog starts to suffer.

It starts with missing a few days, then catching up. The "stuff to blog" file is handy here, so when you catch up you clean out the file. Then the number of days you're behind exceeds the number of entries in the file, and besides most of them are just a link and you don't have time to write the three sentences that go with it. So then you don't blog for a while.

When are you likely to start again? When the blog becomes the more efficient way to talk to the people you usually talk to, but don't have time to. Expect the blog to get a little more personal for a while (though there's some technical stuff to clear out of "stuff to blog" as well, or to go dark again. I'll do what I can.

Kate

8/22/2006 11:02:22 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Wednesday, July 12, 2006

Here's a fun demo of facial recognition software. Using the picture of myself I have on MSN messenger, I tried out (http://www.myheritage.com/FP/Company/tryFaceRecognition.php) the My Heritage facial recognition software. It says I look like

  • 63% Jesse McCartney (no idea who he is)
  • 63% Kate Winslet (that's better, and bonus marks for first name match)
  • 58% Rose McGowan
  • 54% End Blyton (love the books, but hardly a flattering picture of her)
  • 52% Julianne Moore (really? wowza!)
  • 50% Melanie Chisholm
  • 49% Gina Lollabrigida (now you're just being nice)
  • 48% Jennifer Love Hewitt
  • 48% Janie Tienphosuwan
  • 48% Andrew Lloyd Webber (and you were being so nice)

Common thread seems to be cheekbones. I don't see them on me but I sure do on those folks.

Want to try?

Kate

PS: I tried another picture of me and Kate Winslet, Rose McGowan, and (damn) Andrew Lloyd Webber came up again.

7/12/2006 10:52:47 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Monday, July 10, 2006

Jesper Johansson is a world-reknowned security guy. His talks are always highly rated and people love to hear him tell them how to be safer than they are now. So when he says "please don't turn off UAC", will you listen?

Yes, it's annoying to be constantly authorizing things, especially when you just clicked the button to do whatever it is that needs to be authorized. Some of that is an artifact: it shows up far more often in the early days of a new install because you're busy configuring and administering the system. Some of that is because permission sets may still need tweaking. Changing the time zone was moved into "doesn't need admin privs" while changing the time was not, for example, and there may be actions that are triggering a UAC prompt that shouldn't be. This is what betas are all about, testing developer choices against the behaviour of real users.

The other reason for a lot of UAC prompting is apps that demand privs they shouldn't need, because their developers can't be bothered to use per-user stores, for example. If that's your app, and you're testing it on Vista, you need to change it so it works well on Vista. Not leave it as is so it works fine on Vista-with-UAC-turned-off. That's just "it works on my machine", and my developers aren't allowed to say that. :-)

Kate

7/10/2006 9:28:28 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Sunday, July 09, 2006

Long long ago, I posted a neat drag and drop trick. Here's another. I regularly find myself in a Windows Explorer window, looking at the files it contains, and wanting a command prompt so I can type some command or another. Today it was regsvr32, but it varies. So what I usually do is open a command prompt, Alt-Tab to the explorer window, highlight the path, Ctrl-C, Alt-Tab back to the command prompt, and then leap through all the command prompt nonsense to paste. Bleah.

Here's something quicker. In the command prompt, type "cd ". Then with your mouse click on the symbol before the path in the explorer window:

Drag it into the command prompt and let go. Nice.

Kate

7/9/2006 9:12:04 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Wednesday, July 05, 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!

7/5/2006 3:54:34 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Tuesday, July 04, 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.

Kate

7/4/2006 9:32:03 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Tuesday, June 27, 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!

Kate

6/27/2006 2:43:45 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, June 26, 2006

Hugh (hughtrain, cartoons on a business card) MacLeod has written an interesting set of "instructions" on how to be more creative. Many of these directly contradict each other... that's because there's more than one way to be creative. I actually found the summary points more helpful than the more detailed explanations further down the page. But either way, it's a good way to get yourself thinking about thinking. Then later you can relax and not think, and good ideas will come to you. Or at least that's how it works for me.

Kate

6/26/2006 2:25:57 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, June 21, 2006

There is growing awareness that making software takes a lot more than just making code. Certainly being a developer is much more than being a coder. But as someone who runs a consulting business, I certainly know that for me and for my people to make great code for our clients, we need support from non developers. This isn't just about testing and UI design and documentation either. It's about calling the courier, getting a new mouse when yours dies, making sure there's cold Coke in the fridge all the time, and plenty of paper in the printer. Sure, developers can do all that stuff... but they make more code, bill more hours, and give better advice and mentoring when they don't have to do that stuff. In fact, Joel Spolsky says about 80% of your payroll, in a software development company, should go to people who don't actually develop software. Yikes! Our "overhead" is nowhere near that here at Gregcons, but we do have folks on staff who never ever write code of any sort. It's important to remember what a vital role everyone in a small company plays, whether we bill for their time or not.

Kate

6/21/2006 12:52:01 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, June 20, 2006

Poking around on ZoomIn, I see what it thinks about my company:

The bio stuff is a little out of date, but ok. But wait a minute... apparently over $10 million dollars a year, and almost 330 people, are headed to somewhere in California on a regular basis, instead of here in the lovely Ontario countryside. Can I get a redirect?

Kate

6/20/2006 2:46:37 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, June 19, 2006

This year at Tech Ed USA, the booths had slightly different badge scanning hardware than at past shows. Instead of removing your badge from the holder to be swiped, the boothies could just swipe a bar code on the front. This was used not just at booths, but also for session attendance. Here you see Canada's Technology Triangle guy himself, Dave Totzke, being swiped before my Friday talk:

I know at other TechEds they have used RFID in the badges, and then when you go to do evals you can choose from the sessions you actually attended: makes it easier for attendees and gets an accurate count of attendance. I don't know if session attendance and evals were linked here because I hardly attended any sessions at all. In fact, for those I did attend, I arrived with the speaker before the badge swipers so I never got swiped. I know looking at my own evals they told me how many evals were submitted but not how many people were in the room.

Knowing how many people actually attend sessions and comparing it to how many indicated they would in the scheduling tool helps to put talks into the right rooms... it's as awkward to talk to a cavernously empty room as to a busting-at-the-seams-full one. So I like this. But then, I liked the RFID chip, and I've been told it would never be accepted in North America.

BTW, little piece of language-specific trivia: apparently C++ talks get way more "didn't put it in the schedule" attendees than other languages. Is it because all languages get the same number of spontaneous dropins, and all the C++ folks who planned to attend follow through? Is it because C++ people don't like to use the scheduler? Who knows? I'm just happy that while the number of C++ talks may be less than in previous years, I'm still not in the smallest room.

Kate

6/19/2006 9:40:41 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, June 17, 2006

Chris Sells did something pretty cool recently - he went to a printing plant to see how books are printed and bound. He arranged to go on the exact (single) day they were printing HIS book, and he took both his kids and his camera. The result is one tremendously cool blog entry.

If I am ever talked into another book (it could happen :-) ) I think I want to do this too.

Kate

6/17/2006 6:21:02 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Friday, June 16, 2006

Joel Spolsky has a nice article today about Bill, inspired by the retirement announcement of course. I loved this story for two reasons. The first is when he started talking about the leap year thing in Lotus 123, I was right there with him -- I had problems with that myself over twenty years ago. The second is the "little girl" sound effects and thought balloons injected into the story. Times change. Companies change. People retire. These things don't necessarily cause each other. Read the story.

Kate

6/16/2006 5:12:23 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, June 15, 2006

TechEd is about so much more than the sessions and the parties. It's about spontaneous conversations on the bus, in the meal hall, or while waiting somewhere with groups of people. It's about watching other people react to learning something you've known for months or years. It's about finally getting around to learning something yourself that you never had time for. But that's not the whole of it for me.

Three little vignettes are kicking around my head this morning. The first is a memory from another TechEd, in Barcelona three years ago. I remembered this when I was ironing my speaker shirts for this year. In Barcelona, the hotel rooms had no irons in them, so I was headed to the speaker room in a TShirt to iron my speaker shirt. On the way Juval told me this joke:

A group of people are on a plane when the engines cut out and the pilot asks everyone to brace themselves for an emergency landing. There is some screaming and crying, then a woman stands up and yells "we're all going to die! Is there no-one on this plane who can make me feel like a woman one more time?" At that a man in the last row jumps to his feet and runs toward her. As he runs down the aisle he rips off his shirt revealing a handsome physique. She is beaming and the other passengers are distracted from their impending doom. When he reaches her row, he throws the shirt at her and says to her "Quick, IRON THIS!"

This year's TechEd memory will have to be the hotel evacuation Wednesday night. I have heard many variations on the story from those of us who were there, including people who tried to answer their phones, turn off their alarms, and so on. I also enjoyed sharing stories of what we grabbed. I put my laptop in my bag -- after all I still have a session to give -- and threw a few other things in quickly, but left my power supply and other things that would take more than a quick grab. And you better believe I slipped my shoes on and grabbed my badge, where I keep my hotel key. It was a long slow shuffle all the way down from the tenth floor, but I wasn't worried... I couldn't smell or hear anything unusual so I was pretty sure there wasn't much wrong. Turns out a water leak drew down the pressure enough to disable the sprinkler system, and that meant we all needed to get out.

And today's surreal news, from the conference site:

Information About Limited Measles Outbreak in Boston
The Tech·Ed 2006 Planning Team wants to inform you that there has been a small outbreak of measles in the Boston downtown area. The majority of the known cases have been in workers from the John Hancock building in downtown Boston who were not inoculated with the MMR vaccine or had not been exposed to the virus as children. While the risk of exposure to the measles virus while at Tech·Ed is extremely low, the best prevention against the virus is to ensure you have been inoculated. If you are not sure if you have been inoculated, contact your health care provider. Thank you.

I've already had measles, so I'm not worried.

Kate

 

6/15/2006 9:45:18 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Tuesday, June 13, 2006

Here's a quick tip about tips. The default font for data tips, editor tips, and so on is really tiny (8 point):

Especially if you're presenting, you'll want to make it larger:

How's it done? The same Fonts and Colors dialog you use for your regular font setting, but use the dropdown at the top of the dialog:

You can also change Data Tips, the font in the output window and find results window, and plenty more. Experiment a bit!

Kate

6/13/2006 2:13:10 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, June 10, 2006

I have an HUGELY busy week planned at TechEd. It kicks off with meetings of MVPs and RDs (I have to miss the meeting of user group leaders, everyone had the same "day before TechEd starts" plan) and the keynote Sunday night. My talks are Monday (DEV309  Visual C++: IDE Features for Visual Studio 2005, 5:00 PM - 6:15 PM  Room 259 AB) and Friday (DEV444  Visual C++: Debugging and Resolving Loader Lock and Side-by-Side Issues, 1:00 PM - 2:15 PM  Room 160 ABC), and I won't miss the Women In Technology luncheon on Wednesday. In between I have so many meetings scheduled, it's a good thing the sessions will be on DVD afterwards because I just won't be able to attend all the ones I want to. And as for Boston tourism... well at least I'll see Fenway :-)

If you're going to be there, drop me a note and let's see if we can have some "face time" of our own.

Kate

C++ | Consulting Life | INETA | MVP | RD | Speaking | Travel
6/10/2006 7:43:18 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Friday, June 09, 2006

If you attended realDEVELOPMENT_06 and really liked Infocard when I showed it to you, I have news: it's got a name now. Infocard was just a code name, which is why it said "Infocard" on the slides. Marketing has now christened it Windows CardSpace (WCS).

What's more, WinFX (which will be released with Vista but available on operating systems down to XP) will be called the NET Framework 3.0. That's handy, because I was spending a fair amount of time explaining what the heck WinFX was (the FX stands for framework, it's basically the .NET framework plus extra good stuff like WCF, WPF, WF, and Infocard WCS.) I think everyone will "get" what .NET Framework 3.0 means.

Nothing changes in the technology, just the names.

Kate

6/9/2006 7:35:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Wednesday, May 31, 2006

Once upon a time, there was a highway called Highway 35. It ran north from a major east-west highway and got less and less important until it kind of trickled to a stop in the semi-wilderness near Algonquin Park. The southernmost sections of this highway were twinned with Highway 115, with a concrete median, exit and entrance ramps, and a speed limit of 90 km/hr. From what's known as the 35/115 split, it ran north, one lane each way, with gravel roads crossing it and driveways opening on to it, with only a handful of traffic lights to control traffic flow every twenty or thirty miles.

Update: here's a map of the area.

Now there was a bit of a problem with this highway. People get killed on it. The section between the 115 split and Lindsay is hilly, and it gets a lot more traffic than it used to. There are trucks delivering Important Stuff, people dragging trailers and boats up to cottage country, tractors going from one place to another, and Toronto folks in a hurry. From time to time, impatient people pass when they shouldn't, like going up hill, and there's a head on collision and people die. It's not the most dangerous stretch of road in Ontario, but it is bad and there started to be noises made that Something Should Be Done.

Well just about any idiot can see that the head on collisions are caused by dangerous passing, and the survivors can tell you that the passing happened because one vehicle was really slow and another really impatient. So an obvious solution would be passing lanes on the steeper hills. So in 1999 a study was commissioned to decide where to put the passing lanes. They discovered that in one 22 km stretch of highway, about 13 km -- over half -- of the road would be three laned, and parts of that four laned, with passing lanes coming up both sides of a hill and needing four lanes at the top. Now passing lanes do reduce head on collisions from unsafe passing, but they open up the possibilities for accidents wherever people are changing lanes, and without a median these accidents can involve traffic coming in the other direction, so you can't assume that building all these passing lanes would actually reduce the accident rate.

They decided in this 1999 study:

Implementing spot improvements on an as-needed basis represents the low cost solution but is cost-effective only if it conforms to a future plan. In the absence of a plan for the ultimate design of Highway 35, the planning and design process for extensive [passing lanes and truck climbing lanes] becomes difficult. Road improvements proposed as part of the ultimate plan may even eliminate the need for [passing lanes and truck climbing lanes].

So what does that mean? Time for another study, this one on four-laning the whole highway or at least from the split to Lindsay. This one would also deal with the possibility that highway 407 would be extended out to the 35/115 split. This study started in 2000.

Here's the first problem when you four-lane a highway that has cross-roads and gravel roads meeting it. Imagine someone coming out of a cross road or a driveway and wanting to turn left. They are going to need to cross two lanes of traffic, and they'll be turning into the fast lane of the highway. That's not good. And then imagine someone who is on the highway and wants to turn left into their own driveway, but has to stop to let oncoming traffic go by. They are going to be stopped in the fast lane. Over time these two kinds of left turners are going to cause more accidents than the inappropriate passing you were trying to solve in the first place. So you need to implement some sort of controlled access to the highway, as they did on the 115. Typically you let people turn right onto and off of the highway, and you have some overpasses and underpasses so you can go past your target then turn around and come back to make a right turn. You also have a median of some kind so that people cannot turn left or make U turns.

Well, boy oh boy did that need studying. Should the median be a wide grassy strip between the north and southbound sections? That consumes a ton of land and would wipe out dozens of houses currently located along the highway. While that might seem to solve the pesky problem of driveways, it's not really a popular approach. Perhaps it should be a concrete wall? And those exits, should there be one at every corner with a sideroad? If it's only every other corner or so, how do you decide who gets them? And you know the corners tend to have houses on them. Maybe the exits should be between the roads? Study, study, study. Measure the traffic on the road now on a variety of different days over the years. Read the official plans of municipalities in the area to see where growth is planned, and guess what traffic will be some day. Count fatal accidents, which continue to occur.

Meanwhile the rural areas the highway goes through were amalgamated into the City of Kawartha Lakes. Meanwhile the Oak Ridges Moraine was defined and protected in law, which dramatically restricted some construction options. Meanwhile plans for the 407 were batted around that involved bringing it all the way out to the 35/115 split. (Update: the folks doing the 407 study have their web site up to date now.) So they kept having to adjust their study to cope with the world changing around them.

At some point somebody noticed that a big piece of the traffic on 35 was folks who were really on 7A. 7A coming East from Toronto meets 35, goes south a very short distance along 35, and then carries on east again. All those people have to turn left across 35 and that's part of the problem. So the highway study scope expands again, to include rerouting 7A to eliminate the jog. Half the population wants them to reroute it away from the school and arena so as not to worry about traffic for the kids, and half wants to be sure they don't cut the school off so we have to drive further to reach it or the kids have to get on the bus sooner for a longer bus ride. More studying. Roughly 20 different ways you could solve that particular problem.

Along the way they produce a TON of arial photographs all marked up with pink and yellow and white and green. Each suggested approach gets more and more complicated. They hold public information centres where people come and tell them "you can't do that, it will ruin this pond" or "you can't close that, we all use that road to get to the arena" and so they make even more complicated plans.

And now what has it become? You won't believe it unless you see it (and the website isn't up to date, so you could have only seen it by going to the public meeting.) It's going to cost a fortune, several houses will actually have to be bulldozed, and many many people will be losing stripes of their land, not only to the wider highway but to the "access roads" that will be built parallel to the highway so that we locals can drive from a road that doesn't get an exit north or south to some road that does get an exit so we can get on the highway. (These access roads don't particularly connect to each other though, which is probably deliberate to reduce traffic and to let them run the roads wherever happens to be convenient.) Countless roads closed, neighbours cut off from each other, even farmers cut off from their own land and needing a three or four mile detour to go to the other side of the highway.There were some very sad faces at the public information centre all right.

My opinion? This is a good time for someone to step back from the huge pile of coloured pictures and say "what is the problem we were trying to solve again?" It has grown out of control and needs to be made simple once again. My only consolation is that it will probably be 20 years till they build it and I hope to be even further from the big city by the time all that rolls around. Yet each step and decision along the way was logical and grew from the current circumstances. This is how projects spiral into huge and unmanageable monsters that end up not helping anyone. It's as true for software as for anything else.

Kate

5/31/2006 7:58:42 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, May 29, 2006

It's time again for an update to the TIOBE Programming Community Index. I blogged about this a while back, and it's time to notice it again. This index measures only how often a programming language is mentioned by name - in people's resumes, in job ads, in tutorials, even in explanations of other languages or comparisons between languages. It is an interesting measure of which languages people consider relevant in conversation or in describing themselves.

C++ has moved up from 4th overall to 3rd (still behind Java and C, pulling ahead of Perl) but if you look back over the last five years, it's clear less people are bringing C++ into their conversations than they once did:

What I find most confusing is the tiny numbers for C#. Oh sure, I know this is just a graph of the top ten, and things like Ruby aren't even here, but to be neck and neck with Delphi over all this time? That's kind of strange. There are obviously large swaths of the internet where I don't normally go, where people talk about Delphi a lot.

I wonder what's the uptick of Java talk over the last year? Could it be all the "Java is over" articles? :-) By the way the steep drop for C++ and Java in April 2004 is an artifact as a result of a Google cleanup-clearout, and since then the index includes more search engines.

Kate

5/29/2006 10:33:51 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, May 28, 2006

A little bird shared with me the snack highlights for Tech Ed 2006:

1,250,000 pieces of "Mikes & Ikes" will be consumed over the course of a week at Tech Ed 2006
18,750 pounds of salad will be prepared and offered at meals
83,700 ice cream novelty/ fruit and yogurt bars have been ordered for this function
60,000 eggs will be eaten by attendees at breakfast (this is equal to 4,800 dozen cartons of eggs)
It will take 4 semis to transport the 150,000 bottles of water consumed on this show
The total amount of fruit ordered will fill 3/4 of full size tractor-trailer
1.6 million ounces of coffee will be poured and consumed (conservative estimate)
More than 50,000 pounds of carbohydrates will be consumed at Tech*Ed (Atkins who?)
1,500 table cloths will be used and re-set on a daily basis:  (7,500 for the week)
A minimum of 2,000 antacid tablets are likely to be consumed at this event

Now it just so happens that after my very first Tech Ed (Dallas, 1999, as an attendee on a press pass) I got some stats on snacks that year:

183,000 Bottles of Logo Water
14,000 Gallons of Coffee
8, 000 Gallon of Iced Tea
38,000 pints of Milk
37,500 link sausages = 337,500 inches 28,125 feet, 9,375 yards or 5.32 miles.
27,000 Granola Bars
69, 000 Lemon wedges or 11,500 lemons... 275 Trees worth.
200,000 creamers for coffee
333,000 packets of Sugar
27,000 apples
36,000 bananas
3500 pounds of scrambled eggs
7700 Omelets
110,000 Soft Drinks

Anyone care to compare and contrast?

Kate

5/28/2006 7:57:27 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, May 24, 2006

While helping a client with the mechanics of localization recently, I came across a very thoughtful blog entry. It goes beyond what properties you set on a form or what method you call to look up a resource, and instead talks about some of the project management aspects of localization. If you have any chance that you'll need alternate language support, you should read this post. He talks to timing (too soon and translators will translate buttons that later go away or have a name change, but don't wait too long because it's hard to estimate how long translating and testing will take), QA, reuse, and context. Excellent things to consider before you start building those satellite assemblies.

Kate

5/24/2006 10:54:06 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, May 23, 2006

If you don't subscribe to the Flash, you really should. It's an email notification about upcoming events, training, webcasts, case studies, and other information sources. You can personalize it so you only get information you care about, and you'll always be "in the loop" about upcoming opportunities.

Right now, they're running a pair of contests around the Flash:

  • New subscribers to MSDN Flash who sign up before June 28 2006 are entered into a draw for a $16,800 desktop prize package.

  • Existing subscribers (like me) who personalize their subscription before June 28, 2006 could win a $5,000 Microsoft Training Package.

Not bad, eh? Just the other day someone asked me "how do you find all these webcasts and things?" The Flash is how.

Kate

 

5/23/2006 10:22:57 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, May 22, 2006

My parents both originally trained as physicists (one is now a high voltage researcher and inventor of amazingly compact power supplies, the other an world expert in software QA) and so I grew up learning and knowing things most people didn't. I was often surprised that people hadn't heard of certain scientists or their work.

I knew all the experiments on this list, and they are all beautiful and simple (the mathematician still lurking in me always gives points for elegance) and if you are at least a little familiar with them, you will "get" how our world works a little better. Physicis is cool after all: I can say this despite my father's characterization of chemistry and chemical engineering (my degrees are in chemical engineering) as "Stir well" and "Pump well" respectively. Some of them go back hundreds of years (one is thousands of years ago,) and each is illustrated with a little animated gif that really does help you to understand them.

Take a look!

Kate

5/22/2006 7:31:10 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Monday, May 15, 2006

Spotted on the Monster Jobs Blog, ten rules for being a happy employee. I think that even though these rules are designed for the benefit and enjoyment of the individual, it would make your employer happy if you followed them. These are a good way to live. My favourite? "You Will Make Mistakes -- It’s How You Handle Them That Matters" . I tell my kids (and staff) something very similar quite often. Anyone can give into temptation, screw up, forget, or make a mistake once in a while. What matters is what you do next. Lying, covering up, blaming, denying, and not learning are the bad things here. A close second: "It Takes More than Talent". The only iffy one? "Keep Business and Romance Separate". But then again, we were already married when we started this business together, so that's not the same as falling for each other at work. I like having all my eggs in one basket. That way I know where they all are :-)

Kate

5/15/2006 10:51:49 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, May 14, 2006

While at DevTeach, a colleague was struggling with a laptop that was flaky because it was running hot. He had it on an exhibitor's table, which was cloth-covered, and the soft surface was impeding the vents, which were mostly on the bottom. I passed along this tip to him, and I just heard that it worked as well for him as it has for me, so I thought I'd share it more widely.

Take three or four pens, the same size as each other, and lay them parallel on the desk or table like this: I I I I

Then carefully put the laptop down onto the pens. If you only had one it would wobble, if you only had two it would roll around, but three or four are pretty stable. Presto, your cooling is dramatically improved and your laptop stops being quite so flaky. I've even presented like this, for one of those talks with two VPCs that really pushes your CPU hard.

Kate

5/14/2006 7:37:15 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, May 11, 2006

Jean Rene sure knows how to run a conference. In previous years he has bought women's-sized shirts for the women speakers, but this year he even got us a different colour scheme! Here are Julie and I modelling them:

I just love coming here!

Kate

5/11/2006 9:21:43 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Wednesday, May 10, 2006

Rory blogged what I was thinking... "SEVEN PILLOWS HOTEL WHY???!!!?!"

And then his pictures prove that the bed he faced and which lit this question in his brain is in fact identical to the bed I faced last night myself. How scary is that? Rory is not at Devteach, is he?

My guess (nay, I'm pretty sure it's my fervent hope) is that he is at another Marriott somewhere else and not in my room here in Montreal taking pictures and blogging.

Kate

5/10/2006 3:50:00 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [4]
 Sunday, May 07, 2006

The title of this post comes from a staff member at a client of mine. We were discussing a possible project and the staffer was showing me how they did a particular task. They were using a web app that was going to a lot of trouble not to look like a web app: the users all had a shorctut on their desktop to launch a browser pointed at the site, most of IEs toolbars were suppressed so you didn't think you were even in a browser, and so on.

She performed a search, but before clicking the button she copied her search terms from the textbox, opened a blank Notepad, and pasted them in. "I'll explain that in a minute", she said. Then she clicked the button, and followed the link to the first search hit of twelve or so. On that page she made a small change, or noted down something she saw, something minor anyway. Then she said "Here's the frustrating part." There was no link back to the search results and the IE toolbars were all suppressed. So she used the nav bar links to go back to the home page, from there clicked a link to the search page, pasted in the search terms she had saved, did the search again, followed the second link this time (and the designer didn't like visited and non-visited links being different colours so she had to remember which one she was on) and round and round again.

So I asked "why don't you just use the Back key?" "What Back key?" She was on the second result, and I reached over and pressed Backspace to take her back to the search results. That's when she said "You just saved me an hour a day!" She didn't hug me, but she did something just as good -- ran around the office telling everyone else what she had learned. That particular project didn't fly, but I still do lots of work for that client. And those five people all have an extra hour a day for the rest of time.

What do you know that you're not telling users? Keyboard shortcuts, context menus, alternate ways to do simple tasks... share it!

Kate

5/7/2006 12:17:38 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [4]
 Saturday, May 06, 2006

I have a mentoring client who is doing a fair bit of Sharepoint work. Some of it I just do for them and install on their servers, but I'm working closely with a team of developers who are building up their skills on both development and administration, and putting sites into production for real people to use to do their jobs.

This client is a pretty large firm - a Canadian household name - and so in addition to a large team of developers they have an infrastructure team, the "downstairs guys" who configure and support all their servers. As the number of Sharepoint sites grows, we're having strategy meetings with developers and infrastructure people about how to handle the growth of Sharepoint within the firm.

So at one point in this meeting the infrastructure person says to me "I need some sort of reports, some way to know how big a site is getting. I can look at the size of the SQL database but it's not very accurate. Or when we do the backups I can look at the size of the backup file. But then how can I tell what the issue is -- maybe someone has turned on versioning or something else that eats up disk space." Various people in the room start talking about the Sharepoint object model, about pointing SQL Reporting Services at a Sharepoint data source, and other developer approaches to the problem.

Now earlier in the meeting several of the developers had been telling the infrastructure person that he has to come to grips with Front Page. There are some things that are really hard to do any other way, and really easy to do with Front Page. And as a result I had Front Page open on my laptop and had opened a site (our own Gregcons internal site as a matter of fact) but hadn't done anything in it. So during this conversation about how to know the size of the site, I clicked the Reports button on the bottom Front Page toolbar that shows when you've opened a web:

And what do I see when I click that?

I grinned and spun the laptop around so that the infrastructure person (and his grandboss, who was at the meeting with us) could see it. "You're going to have to learn to love Front Page," I told him. And to the grandboss I said "aren't you glad you have a consultant?"

A lot of times I work really hard and long to bring my clients value. But there are so many times when I can do something in 30 seconds that the client would have spent days doing another way. I love those times.

Kate

5/6/2006 7:46:36 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, May 05, 2006

Say you have an application that uses P/Invoke (the DllImport attribute on an external method defined in a native DLL) to access some particular functionality. A lot of the use for this feature is to get to something in the Windows API that isn't exposed by the .NET Framework. But there are also folks using P/Invoke to call their own code from their own DLLs. The question then arises: where should you keep that DLL you're using (oh, please, not System32, anywhere but System32 -- years ago a buddy said "the registry is a giant and complicated database that tells you all your COM objects and DLLs are in System32") and how is it going to get deployed from your computer to wherever you install it?

If you try to add a random file to your manifest on the Publish tab of a Visual Studio 2005 Winforms project, you will discover there really isn't a way to do it. The file has to be in the project. You can add things to your manifest with MaGeUI (Manifest Generator with a User Interface, so named because MaGe is entirely command-line) which you can run from a Visual Studio command prompt, but most of us want to manage our manifests with Visual Studio. Heck, you could edit your manifest with Notepad -- it's only XML -- but that's not what I'd call the popular choice.

You could add the DLL to your project, but if it's under development, you're going to have to hand-update your copy when it changes, or your tests won't be accurate. And for a lot of folks, adding it to the project is going to mean adding it to source control, and binaries in source control does not sit well with me. Here's a better way.

Start as though you were going to add the DLL to the project. Right-click the project in solution explorer, Add, Add Existing Item, browse to where the DLL is, change the file type to All Files or Executables, click the file name - but don't click the Add button. It's a compound button, so click the little Arrow next to Add and choose Add As Link.

You should see your file added to Solution Explorer with a sort of shortcut symbol:

Click once on the DLL then bring up the properties for the file. Make sure Build Action is set to Content and Copy To Output Directory is set to Copy If Newer. (If the DLL is on the network, and you're working offline, on a plane or something, and you've built once so you have a copy already, you can flip this setting back to Do Not Copy so your builds don't fail.)

A word about "where the DLL is". If you develop alone, this can be some sort of c:\working\clientname\projectname idea, but for a team, that's not going to work. This path is going into your project file and you'll check it in to source control and the rest of the team will be using it. Unless you all have the same folder structure, you're going to want to use a UNC name. It's probably best to point it at a share where you publish the DLL after you build it.

Having added the file to the project, you can now make it part of what you publish. Click Application Files on the Publish tab and you should see it there. You might need to check the Show All Files box, but I didn't:

This isn't available in every kind of project -- I can't do it in a C++ WinForms app, for example -- and it doesn't really work for an ASP.NET app where there is no project file, just the folder. I think for those a pre- or post build step to copy the DLL from where you build it or from the share where it is published for all developers to use would be the way to go.

Kate

5/5/2006 7:38:03 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Tuesday, May 02, 2006

I installed Vista build 5365 last week. This was just a short time after putting 5308 on bare metal instead of a VPC. And now instead of just "checking it out" and "looking around" I was actually using the OS to do work, specifically writing code. (I was doing Word and Powerpoint work on my other laptop which is still on XP.) There's an interesting emotional thing that happens when you get out of the VPC and onto the metal, and especially when you stop demoing and start doing.

There are some things here I am just loving, somewhat to my surprise.

How long have I been annoyed by having to retype the extension when i rename a file? A decade at least. This is a tiny thing but ooo-weee I like it.

The easiest way to tell what I love is when I try to do it on my other machine and feel a momentary irritation when I can't:

This is a Windows Explorer and the address bar is all buttony and live. So I don't have to click up three times, wait while lists of things I don't care about update, and then drill back to where I want. I keep trying to do this on XP, I have it completely internalized already.

Like Scott Hanselman, I have a LOT in my Start menu. I like this in-place effect a WHOLE lot better than the cascading-off-to-the-side-forever approach.

One thing I was hating: where is Start, Run? I can't live without Start, Run! Turns out Windows-R still works. So does right-clicking on Computer and choosing Manage to get all the MMC stuff you need to admin your box.

Speaking of adminning your box, the User Account Control takes a bit of getting used to. More than once I have had to close Visual Studio and re-open it as admin so the COM component can get registered as part of the build process. But I am developing some habits there and expect to internalize those quickly too. I have a feeling we will all be on Vista sooner rather than later.

Kate

ps: don't draw conclusions about visuals from these shots, I don't have Glass on the laptop (it's an old one) and I don't have anything for screenshots other than Shift-PrtScr then paste into Word. It's nicer in person, really.

5/2/2006 3:58:55 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Monday, May 01, 2006

Martyn Lovell, who heads the libraries team, has an interview on Channel 9 that was posted Friday. Normally when you think "libraries" in the context of C++ you think ATL and MFC. But most of what Martyn is talking about here is the C RunTime library -- strcopy, printf and so on. He gives a coherent explanation of what the safer CRT work is about. I've written about this before, and have been helping mentoring clients fix their warnings for over a year, and still I learned a few things from this video about how to explain this initiative. Martyn's devotion to the language and the community is inspiring.

And yes, Martyn is hiring again. You can use the description and instructions from my previous post if you'd like to work on MFC. Over 7000 new APIs in Vista means there's lots of MFC work to be done!

Kate

5/1/2006 8:33:41 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Friday, April 28, 2006

Last night we had a community get together on the last day of VSLive. Billy Hollis, Steve Lasker, and Josh Holmes were there from out of town, and the Toronto .NET Glitterati (Rob Windsor, Graham Marko, Chris Dufour, Jean Luc David, Dave Totzke, Barry Gervin, Eli Robillard, and many others) as well. It seems that no-one had a camera along, so you'll have to take my word for it :-).

I got a chance to talk to Jerome Carron, who like me is speaking as part of the realDEVELOPMENT_06 tour in late May and early June. We will be seeing a lot of each other since we are also both going to be at DevTeach. If you haven't registered for either of these events, you really should.

I've been quiet lately because I've been preparing my slides for DevTeach and TechEd, and working on some material for a Vista Ascend that premieres in May. I also put a new Sharepoint site into production at a client -- and if you've ever had the delight of promoting a gaggle of web parts, aspx pages, and special versions of selected magical XML files all up to a production server from a staging server, then you know why I haven't had time to blog. But it works now, and the clients are all happy. Me? It's a good thing I know how to sleep on a plane.

Kate

4/28/2006 3:12:30 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, April 27, 2006

The other day, my car overheated -- pegged the temperature gauge -- after about 5 minutes of driving. I limped it home and discovered it was out of engine coolant. After I added more I could drive for a few minutes but again it violently overheated and all the coolant was gone. With visions of expensive repairs dancing in my head I took it to my neighbourhood mechanic.

It turned out to be a cheaper repair than I expected, but a more frustrating one. You see, the minivan I was driving has a separate heating system for the back seats. Their own controls, vents, everything. We actually use this perhaps once a year, it's a low-value frill. But here's how it works: they pipe the engine coolant halfway back the car so it can go through a heat exchanger and warm up the air in the back. And of course it makes cars easier to build if all the pipes and wires are underneath the car. Over the years, kicked up stones and gravel weakened this coolant pipe until it finally broke, spewing precious engine coolant all over the road. I could have easily lost the engine or been stranded hundreds of miles from home. And for what? A separate heating system in the back? Who cares?

What could they have done instead? They could have piped the hot air instead of the hot coolant, so a leak would only make the back seat cold instead of ruining the car. (I know, from my former life as a chemical engineer, how much easier and cheaper it is to move liquid than air.) They could have installed a sensor that would detect low coolant levels directly, instead of indirectly when the car overheats. They could have run the piping in some protective shroud. (Ha! This is the company that blames me when the wiper motor breaks because the car gets snow and ice on the windshield! Three times so far on this van.) They could have skipped the whole feature on the grounds it made the car way too vulnerable for the benefit it offered.

I see a moral in this story for software developers. What features are you writing that turn out to be a heating system for the back of the van?

Kate

4/27/2006 8:09:49 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [3]
 Friday, April 21, 2006

I've just updated the mentoring and consulting pages on our website. The mentoring offering is where I get most of my fun, so we've decided to emphasize it a little more. I even found out how to put flare on my blog. Tell your friends :-)

Kate

4/21/2006 10:52:35 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, April 20, 2006

I just spent a TON of time fighting an XSLT stylesheet. This is a long established system that needed a tiny change -- the customer wanted the little R-in-a-circle symbol after one of their trademarks. No problem, right? Go on into the XSLT and put &reg; in the appropriate place. Not an entity known to XSLT. Right, I remember that. But heh heh you can't stop me: &#0174; should do it. Test in XML Spy and there's the symbol. Generate and upload all the pages and -- yikes! -- everything says ? where it should say ®! I don't think my clients want the header on every web page to say REALTOR? -- a little certainty is wanted here. That's because XSLT is putting the actual symbol into the HTML -- if you do a View Source on the web page there's no entity, there's the actual symbol and some browsers can show it and some can't. OK, let's try &amp;reg; or &amp;#0174; -- they come out looking just like that on the screen. Bleah. More Googling. Suggestions to define DOCTYPES and ENTITYs that all manage to stick the symbol into the HTML but not the entity. A brief attempt at some circular definitions of reg to reg, some desparate CDATA flailing -- and then we got it:

Literal text in the middle of the XSL stylesheet:

REALTOR<xsl:text disable-output-escaping="yes">&amp;</xsl:text>reg;

We have a winner. I get &reg; in the HTML and my client gets their trademark.

Kate

4/20/2006 6:51:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Wednesday, March 15, 2006

No, not for 2005 :-) Some quotes from the announcement:

Visual Studio .NET 2003 shipped in July of 2003. This upcoming Service Pack will serve to roll up selected fixes that were issued after that release and before Whidbey. We have also included some triaged critical fixes and fixes included in VS .NET 2002 SP1. We anticipate that Customers will gain additional environment stability through the inclusion of these roll ups and the select set of critical fixes. We hope that VS 2002 customers may see this Service Pack as an additional stabilizing factor and proceed with plans migrating to the VS 2003.

...

Release Schedule: (these are estimated dates)
Beta Release 3/24/2006
RTM 6/1/2006
We encourage all interested parties to sign up to participate in the Beta. You will have the opportunity to use our pre-release product and notify us of any bugs you may discover. You may apply for the Beta by going to http://connect.microsoft.com and signing up under "Available Programs".

...

Visual Studio .NET 2003 SP1 will provide the following fixes:

1. Hotfix and other critical update roll up
2. Released security patches/issues and other identified security fixes that satisfy triage criteria.
3. The top 50% Watson issues across the entire product.
4. Customer driven bugs
Bugs will come from 2 sources, Watson data analyzed by the product teams and PSS.

Don't you love that sentence from the first paragraph? "We hope that VS 2002 customers may see this Service Pack as an additional stabilizing factor and proceed with plans migrating to the VS 2003." That's no typo. Enterprise clients are really slow to move to the new bits. Just last week in a customer meeting at an enterprise client of mine, I asked if a new Windows app was to be built with VS 2003 or 2005. Without a moment's hesitation my contact replied "there's no service pack for 2005 yet, we won't even consider using it." [I didn't dare tell him there wasn't a service pack for 2003 at that time :-) luckily we are now covered if he asks about it.]

Kate

3/15/2006 4:55:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [4]
 Saturday, February 25, 2006


My blog is worth $17,500.74.
How much is your blog worth?

I have no clue who would come up with a number such as that, but anyone who approaches me with a cheque for $17,500 (or should I say check, I bet that's US dollars) is very likely to become a proud blog-owner :). And that's a 54 cent discount!

Kate

2/25/2006 6:32:20 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Wednesday, February 15, 2006

There's good news and bad news on the "C++ product team blog" front. The good news is that Nikola Dudar has a new entry after about three months of silence. The bad news is that it's to announce that STL/CLR will have to wait a little longer. It slipped out with beta 2 but it's not in the release version, and was planned as a web download. But the team is heads-down on a number of fronts and this is one of the items that has had to be postponed. The big focus is MQ, an internal milestone that all the languages and tools are working on.

Patience is a virtue,
Kate

2/15/2006 9:08:17 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Monday, February 13, 2006

As someone commented the other day at a presentation I was doing, I still have VS 2005 in a VPC and not on my base machine. Why? Well I have a big ASP.NET project finishing up that is all done in 2003 (an Enterprise client, not an early adopter at all and it's been 18 months since we started) and I was just a little nervous that if I put the 2.0 Framework and the like onto my laptop that I would mess things up. I had no proof of that, and no time to go find out one way or the other, it was just a gut worry born of spending 25+ years doing this stuff. I decided to use the 2005 VPC for demos and playing with the new tools and carry on with 2003 on the actual metal.

Well today someone gave me a way cool tool that I really wanted to use -- and it needed the Framework 2.0. I decided to give it a whirl. The actual installation was nice and quick and didn't even require a reboot (though the installer did insist on my closing a few things I didn't think were framework dependent.) Then, cool tool installed, I went back to my final bug triage on the ASP.NET project, and when I brought up a report (using the ReportViewer control on the aspx page):

The report server cannot decrypt the symmetric key used to access sensitive or encrypted data in a report server database. You must either restore a backup key or delete all encrypted content and then restart the service. Check the documentation for more information.

Aaaargh! I have no clue how to restore a backup key, or what my encrypted content is and how I would feel about deleting it! So what to do? Toss that string into a search engine and you'll find links to a KB article that says "oh, you should have done xyz before you changed the user account that SRS runs under." The resolution is of no help to anyone who accidentally did so (and no, I didn't think that installing a new version of the framework would change the user account under which SRS runs.)

I uninstalled and reinstalled SRS, then redeployed my reports by opening each 2003 solution that I'm actively using on this machine, right clicking the Reports project in each and choosing Deploy. Took less than half an hour counting the near panic attack when i first got the message. But that's not a strategy for the production machine, so I just added another ToDo to the post-go-live list, since the client is sure to want the Framework 2.0 on that machine eventually.

Kate

2/13/2006 2:15:56 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Thursday, February 02, 2006

Let's say for the sake of argument that you own a small Canadian business and you are about to employ a child of yours to work in that business. You know that you don't deduct Employment Insurance (EI) premiums from yourself, because you own more than 40% of the company. But what about your child? So you search a little and you find two official government websites (.gc.ca means Government of Canada .ca). Here is what they say:

http://www.hrsdc.gc.ca/asp/gateway.asp?hr=/en/ei/information/self_employed.shtml&hs=tyt:

Family members in the family enterprise

If you are a family member, i.e. spouse or child, paid as an employee by the family enterprise —business or farm— you are like any other worker and can be paid EI benefits, as long as you meet the requirements for regular or maternity, parental, sickness and compassionate care benefits.

http://www.cra-arc.gc.ca/E/pub/tg/t4001/t4001-06-e.html#P483_48714:

Employment, benefits and payments not subject to EI premiums

Excluded employment

Even if there is a contract of service, employment is not insurable and is not subject to EI premiums in the following situations:

  • casual employment if it is not for your usual trade or business;
  • employment when you and your employee do not deal with each other at arm's length. There are two main categories of employees who could be affected: related persons and non-related persons.
    • Related persons: These are individuals connected by blood relationship, marriage, common-law relationship, or adoption. In cases where the employer is a corporation, the employee will be related to the corporation when the employee is related to a person who either controls the corporation or is a member of a related group that controls the corporation.

That's right, HRSDC Canada says go ahead and deduct, your kids are just like anyone else and they will be eligible. But CRA-ARC, which is the organization that will punish you if you get this wrong, says don't deduct.

What do you do? You might consider phoning the government. This will be entertaining in a way, what with listening to the hold music, playing voice mail hell, and listening to government employees say "oh gee I didn't know that", but not what you might call educational. But after several such phone calls, you can discover that it is possible to request a written ruling from the tax people. And then you resolve to do whatever the ruling says to do and stop worrying your pretty little head about what makes sense or what is right. And take some satisfaction, if you're that kind of person, in knowing that many of the "I didn't know that" guys have promised to show their boss the contradictory information.

Kate

2/2/2006 5:15:52 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Tuesday, January 24, 2006

The word is starting to spread about the concurrency skills we are all going to need sooner rather than later. And work is underway at dev-tool-makers to offload some of that work to the "system" -- maybe the language, the compiler, a library, the framework, the operating system -- anything other than the programmer because most of us are even worse at threads-and-locks than we were at malloc-and-free or new-and-delete or any other kind of memory management.

If you were wondering about Microsoft's committment to this (and the PDC talks on the topic weren't enough to convince you) then read Kang Su's latest blog entry about the new Bay Area Office they are establishing for this sort of progress... and wait till you see who's going to be working there...

Kate

1/24/2006 12:42:33 PM (Eastern Standard Time, UTC-05:00)  #    Comments [3]
 Sunday, January 08, 2006

The December lull is past, for sure. Here's where I'm headed in the next month or so:

  • January 11th, CNY .NET Users Group, Syracuse NY, Windows Forms: Deploying Applications with ClickOnce: Advanced Topics
  • January 14th, Toronto Code Camp, Yonge and Bloor, The Future is Concurrent
  • January 17th, Regina .NET Users Group, Regina Saskatchewan, Managing the Software Lifecycle with Visual Studio 2005 Team System
  • January 18th, Saskatoon .NET Users Group, Saskatoon Saskatchewan, Managing the Software Lifecycle with Visual Studio 2005 Team System
  • February 7th, SouthColorado .NET, Colorado Springs CO, TBD but probably the ClickOnce talk
  • February 8th, TRINUG, Cary NC, TBD but probably the ClickOnce talk 

That should keep me from being bored, eh?

Kate

1/8/2006 11:12:37 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Wednesday, January 04, 2006

As we flip calendar years I am delighted (even if I'm not really surprised) to learn that I am being renewed as both a Regional Director and an MVP (for C++.) These two programs are both a big part of my professional life. (The RD program is more exclusive, with only 120-140 RDs around the world compared to thousands of MVPs, but the two programs serve different needs, of course.) They each provide me with amazing information and access to the product teams. They open doors for me throughout the Microsoft-oriented world. Most of all, they introduce me to other RDs and MVPs around the world... an amazing team to feel part of. I am also still a user group leader, a member of the INETA North America and MSDN Canada speaker bureaus, and of course I have a business to run with clients throughout North America.

In not-unrelated news, I qualified for Elite on Air Canada and almost halfway to Super Elite. The previous year I just squeaked to Elite... wonder how much flying 2006 holds for me?

Kate

     
C++ | Consulting Life | INETA | MVP | RD | Speaking | Travel
1/4/2006 4:33:27 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Wednesday, December 21, 2005

Actually, my fellow RDs make headlines in industry mags often, especially when they write the article. But this was a bit of a surprise to me: http://www.eweek.com/article2/0,1759,1904532,00.asp?kc=EWRSS03119TX1K0000594. Not the announcement (Clemens let some of us know before the papers) but the attention it garnered. Though really, I shouldn't have been surprised. It is an important hire for Microsoft and Clemens, I wish you a happy time "building stuff" at the mother ship.

Kate

12/21/2005 10:57:23 PM (Eastern Standard Time, UTC-05:00)  #    Comments [2]
 Saturday, December 17, 2005

December for me has been, well, challenging. And though it seems that everyone around me is shutting down for the year, I still have miles to go before I sleep. So I was pleased to notice that the standards process is marching on: ECMA reports that the 90th General Assembly held in Nice, December 9, 2005, approved Standard ECMA-372 (C++/CLI Language Specification).

Back to way too much of everything,
Kate

12/17/2005 11:09:22 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Thursday, December 01, 2005

Vertigo is a seriously cool company that does a lot of .NET work and a lot of C++ work. Like us, they know how to combine the two. Unlike us, they are in California. Here's what CEO Scott Stanfield (a super hard working RD) told me about the job:

We’re trying to hire a full-time C++ developer to help us work on [pretty high-profile work for Microsoft.] Needs knowledge of Windows API (old-school stuff), COM, etc. Maybe ATL.

Intruigued, I got more details:

Must have:

  1. 2 to 4 years of Unmanaged C++/Windows Apps
  2. C++ Standard Library (Iterators, containers, etc.)
  3. ATL
  4. VS 2003
  5. Using COM with #import

 Knowledge that is nice to have but not necessary:

  1. Passport
  2. Windows 2003/XP or VISTA experience (ie. building apps for Microsoft)
  3. WTL
  4. Client side (single thread, event driven, custom drawing, experience with 32-bit, globalization)
  5. Server side (multi-threaded, critical sections, mutex – 1 app instance)
  6. Networking (WinHTTP, web services)
  7. VS 2005

P.S.  Bear in mind that our core expertise is .NET so the person would have to be willing to learn .NET and work on other projects besides C++ stuff every so often.

And of course, it is a great company to work for :).  We do a great job with developing careers and it is rock solid financially with excellent benefits.  Plus there is very minimal travel.

If you follow the links in the first paragraph, you'll figure out how to apply :)

Kate

12/1/2005 1:34:40 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Saturday, November 26, 2005

Maybe it's the Rum Swizzle, but this limerick really worked for me:

I used to think math was no fun
'Cause I couldn't see how it was done
Now Euler's my hero
For I now see why zero
Is e to the pi i plus 1.

Thanks to Language Log,

Kate (Math major for a year or two, but ended up in Engineering)

11/26/2005 7:16:35 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]

Yesterday's beach was nice, but not really pink. So today's mission was to find a pinker one. It's one of the few days I've been able to check off everything on my todo list :-)

 

Kate

11/26/2005 3:28:16 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]
 Friday, November 11, 2005

Jensen Harris, in his excellent Office User Interface blog, reveals the top 5 commands (most frequently used) in Word:

  1. Paste
  2. Save
  3. Copy
  4. Undo
  5. Bold

Doesn't surprise me at all. Cut and Copy probably add up to the almost same as paste (in most cases any given thing is only pasted once, but of course it might have been copied in another application and then pasted into Word) but they split the vote. The popularity of Undo (which one of my nontechnical friends calls the "Bite Me" key) is a testament to all the times Word is being "helpful" as I type. Man I hate software that thinks it's smarter than me. Apparently a lot of folks do. Or perhaps a lot of folks change their minds a lot, or mis-click a lot.

What I think is cool, given that this data was gathered from users who are keyboardy and mousy, context menu users (right-clickers) and regular menu users, experienced and novice, etc, is that every one of these commands is a one-hand chord on the keyboard:

  1. Paste Ctrl-V
  2. Save  Ctrl-S
  3. Copy  Ctrl-C
  4. Undo  Ctrl-Z
  5. Bold  Ctrl-B

Now you see why not being able to use that left Ctrl key made things so difficult when my laptop was being flaky.

Kate

11/11/2005 9:48:21 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Tuesday, November 08, 2005

The theme for the global launch of Visual Studio, SQL Server, and BizTalk was "Rock the Launch" with a subtheme of being ready. It was a very fun day complete with impersonators (I saw Elvis, Cher, Madonna, and Tina Turner), and a decor of posters and equipment boxes. Scott Stanfield has a nice summary complete with the pictures I haven't got around to taking yet of the gorgeous special editions of the software we recieved. A number of RDs were there: I saw Scott, Rich Hundhausen, Richard Campbell, and Carl Franklin. Richard offered me a ride to Vegas in the dotnetrocks-mobile but I decided to stick with the plane tickets.

Kate

11/8/2005 3:23:25 PM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Monday, November 07, 2005

I love being "in the loop" on new software. It can get kind of surreal, though, when you are at a conference and find a technology kind of boring and everyday, and skip the sessions on it since it's "old stuff" ... and then realize it isn't even shipping yet! I spend time in betas, alphas, SDRs and the like, so it's often years between the time I start working with a technology and the time it releases. When I speak at Tech Ed I tend to hang at the cabanas where I can hear real stories of how people are using the tools and the problems they need help with.

The PDC though, that's a different story. Well, it should be anyway. The PDC is all about the future, right? The workflow announcement was a big deal, but the material wasn't new to me. I began to worry if I would ever attend a session that sparked my interest in something new and important. Then I found it. I've waited to blog it until the sessions were available online.

What Jan Gray had to say in FUN302 and Herb Sutter introduced in TLN309 totally grabbed me. Because clock speed cannot go up any more we all have to write concurrent code even if it's single user:

And since most people can't write good concurrent code (see Herb's Singleton example which still doesn't work even with the double checking and the volatile keyword, at least not all the time) then the OS or the framework or the language needs to do it for them. Herb and Jan are proposing different approaches, but these two guys are among the smartest I know (I've known Jan almost 30 years) and if they are both into this, then I need to learn more about it. You probably do too.

Kate

11/7/2005 10:19:27 AM (Eastern Standard Time, UTC-05:00)  #    Comments [1]
 Friday, November 04, 2005

While I was over ten thousand miles from home, my laptop started to get weird on me. First, it started to spontaneously power itself off, for no reason at all, while I was using it. Alarming! But then I eventually discovered that it only did so if I pressed the left Ctrl key. Confining myself to the right Ctrl key was a challenge -- I am hugely keyboard oriented and do Ctrl-S, Ctrl-B, Ctrl-C, Ctrl-V sort of things all the time without looking or to be honest even thinking keystrokes, I think Bold and my fingers do the right thing -- but I was able to do a whole presentation without it powering itself off. Then it started to get more delicate. Any pressure on the left side of the keyboard would power it down. And it got harder and harder to power it up. 5 tries, 10 tries, 20 tries... I did manage to power it up in the Jo-burg airport but it shut down while I was working and never did come back up again. I just slept instead of working and put it out of my mind.

When I got home, I confirmed it was still under warranty, next day on site service, and arranged a service call. Then I wanted my files back... I wasn't going to last all weekend without my files. Luckily the hard drives in laptops are delightfully standard things. For $13 Canadian, I bought a little wrapper that turns any 2.5" drive into an external USB drive:

I put the drive in it and ---ooooh, there are all my folders! Yay! But I can't see any actual files! Boo!

Turns out the power cycling and hard power downs (many many of them) had not been nice to the drive. So I got a little utility called File Scavenger from QueTek. I started with the trial version to prove to myself it worked, then got a personal licence and set to work bringing back everything I cared about -- the pictures I took while I was away, my Outlook PST file (yes I backed up before I left, but a lot happened that week) and a lot of work I was in the middle of. Phew!

The service call ended up stretching over several days ... replacing the motherboard, keyboard, palm rest, and hard drive wasn't enough, it also needed a new processor. But now it works again. And what do I get to do with my copious free time? Reinstall things. A lot of things.

Ah well, a good way to clear out junk you don't need any more. It was pretty much repaving time anyway, the machine had been kind of flaky for the last few months. And I'm ready to leave for SF and Vegas now... or at least my laptop is :-)

Kate

11/4/2005 3:06:12 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, November 03, 2005

I promised my South African friends that I would show them how our autumn compared to their spring. We have our own beauty here and while we're pretty much giraffe-free, there are charms in this northern landscape. These pictures were all taken within minutes of my home on one of the many walks and rambles we do. Gregory Consulting board meetings are quite often held under an arch of golden leaves; it's one of the things I like about living this way.

 

Kate

11/3/2005 9:02:34 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [3]
 Friday, October 21, 2005

Leave my house 11:30 am. Flight to New York departs 2:30. Here I am in New York, at about 5:30. In four hours my flight to Frankfurt leaves. 8 hours across the Atlantic. 12 hour stopover in Frankfurt. 10 hours down to Jo-burg. Clear whatever we need to clear, get baggage, wait for the bus, that's another hour, then two more hours to Sun City. Total travel time: 43 hours. Six of it is behind me. It's extra-rehearsing time for me now, here in the Lufthansa lounge of Kennedy airport. Friday night and Saturday night the only sleep I will get will be on planes. Luckily, I'm good at that.

Kate

10/21/2005 5:27:03 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Wednesday, October 12, 2005

I just registered for the global launch in San Francisco November 7th:

(Yes, I will be in Las Vegas that whole week to speak at C++ Connections. I'm just going to the launch on Monday and then to Vegas.)

If a flight to SF is out of the question, why not see if you can get into one of the Canadian dates?

November 8 Toronto
November 10 Ottawa
November 15 Edmonton
November 17 Victoria
November 22 Vancouver
November 24 Calgary
November 29 Montreal
December 1 Quebec
December 6 Halifax
December 8 Winnipeg

http://www.microsoft.com/canada/launch2005/default.aspx has all the details and registration links.

Didn't act soon enough? Didn't think a launch event could sell out? Watch for announcements of user group launch events through the fall.

Kate

 

10/12/2005 2:11:01 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [2]
 Monday, October 10, 2005

The Code Camp web site is up and running and ready for you to sign up!

  • Want to speak? Get the speaker registration form and send it in.
  • Want to volunteer behind the scenes! Please do, we need as many of those volunteers as speakers.
  • None of the above, but you're planning to attend? Get registered before the spots all go.

See you there!

Kate

 

10/10/2005 1:22:06 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Saturday, October 01, 2005

I fly quite a lot. Over the first six months of this year (I pretty much stopped travelling after TechEd USA) i flew 25,000 miles. That's not a lot compared to those who reach Air Canada Super Elite status at 100,000 miles (a handful even fly 300,000 miles a year) but it felt like a lot to me. I'm about to fly another 30,000 in just a few weeks... to South Africa and back, then a week later to Las Vegas and back. But it's nothing compared to what someone I know is up to.

Air Canada is selling an "unlimited" North America travel pass. $7000 gets you all the flights you can stand in October and November. A fellow Flyertalker with two months off has bought one and is trying to get the maximum possible mileage from it. Because he's already Super Elite, he gets a 50% bonus on every mile he flies, and there's a promotion on to get a 25% bonus as well (I earned a 542 mile bonus to and from LA for the PDC). Add in threshold bonuses and he has determined he is going to earn a million Aeroplan miles for just $7,000  ... and two solid months of his time. Most of it will be up front, thanks to the upgrade certificates he's going to earn as he goes, and his status moving him to the front of the line for "op-ups" on full flights. His sleep, what there is of it, will be exclusively on overnight transcontinental flights.

He's blogging his progress... a must read!

Kate

Update: there are now four Flyertalkers doing this, but Marc is the one blogging it. Today he mentioned on FT: "I was home last night, had dinner with family. Leaving at 820 am. Its a job like any other. I am home 4 nights a week. On overnight trips the other three."

10/1/2005 6:38:40 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Thursday, September 29, 2005

One of the real ironies of consulting life is that when you are super busy doing work, you don't have time to look for the next piece of work. It can cause a really dangerous work hard - no money - take work you really shouldn't - work unhappily - still no real money - cycle. The only way around that is to have the discipline to land project B before project A is finished. The larger you are the easier this is, because if 1/3 of your firm has finished a project and has nothing to do, they can pitch in on whatever the other 2/3 are doing for a bit while you sell the next thing. But at six people, we really don't have that kind of buffer.

Now that I've been doing this for 20 years, and have a reputation, opportunities quite often come to me. That's certainly better than calling around trying to get people to give me work. But even the most golden opportunities come with work attached. "Can you get me a resume by noon?" But I don't have a resume, I have worked for the same company with the same job title for two decades. I can give you a bio that lists my skills and awards and some recent projects I've been on. "Sure!" Only thing is, it needs to be updated, or shortened, or lengthened, or something. It's worse when they want resumes or bios from three or four of us. Or "could you flip through the scope of work and give me a quick ballpark of how much work you think your part will be? We'll write up the detailed estimate together next week." Some truly wonderful stuff just lands in my lap, but all of it requires work to ripen it into fruit. Finding the time to do that work, quickly and responsively, and tailoring the bio or company description or whatnot to the opportunity... that's where contracts come from. Back to work for me.

Kate

9/29/2005 4:29:50 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, September 11, 2005

We're having a CODE CAMP in Toronto in January! I'm so excited! A Code Camp is a very different kind of community event, and one that can only happen when you have a strong and vibrant developer community. If you've never heard of it, check the Code Camp Manifesto or just Google for it and find people saying things like this:

"the buzz from Atlanta Code Camp is starting to wear off a bit and let me just say I had a great time."

"I laughed, I cried, I found a bunch of new tools to use."

"When I asked him if it was as good as a commercial conference he said that he thought so.  Perhaps even better.  And that comes from a guy who was just at TechEd 6 weeks ago."

Now the deal with Code Camps is that they ALWAYS:

  • Are free
  • Are held outside business hours (typically a weekend)
  • Feature a great variety of speakers and topics (except no marketing fluff allowed)
  • Provide an opportunity to speak for the first time

Many Code Camp attendees have never been to a daytime or paid-attendance event - we don't all work for companies that make that possible, after all. If you've been to plenty of such events, you might consider speaking at this one: an hour on something you know well because you're doing it at work isn't hard at all, really. This is a great chance to "crossover" to the other side of the microphone. If you haven't been to lots of these events -- you've never been able to get to a DevDays or a VSLive, or heaven forbid something out of town with actual travel expenses -- plan now to set aside a weekend in January to fill your brain with free technical content and get to know the developer community in the Toronto area.

Toronto is a large city, over 3 million people, and the "Greater Toronto Area" supports a LOT of user groups:

And out of all these people, who is spearheading the Code Camp initiative? My two co-executives from the East Of Toronto group, that's who! I'm very proud of that. The GTA is full of good organizers and speakers (and has three Regional Directors on top of that) and I know we will be able to put on an amazing day. Right now Jean-Luc is finding a location and sponsors (or Contributors as Code Camp likes to call them) and shortly he'll be gathering speakers. You should use his blog to get in touch. My firm is sponsoring for sure: a Code Camp is a really low-cost event to put on and reaches a number of developers other events never do.

Kate

ps: I wanted to say that this would be the first Code Camp outside the USA, but once again Derek Hatchard has shown what a star he is: there will be a Code Camp in Atlantic Canada just next month. Go Derek!

Update: They've had them in the UK too (http://www.developerday.co.uk/ddd/default.asp ... Benjamin Mitchell is the RD involved in those) and in Australia (www.codecampoz.com.)

9/11/2005 10:42:25 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, August 31, 2005

Kang Su kicks off his blog (two and a half weeks ago, I can't believe it took me this long to notice) with a big red HIRING in the middle of his first post, then goes on to give you the C++-eye view of PDC including the so-worth-your-while upgrade lab.  Then he tells you how to find out what the Profile Guided Optimization process discovered about your code. Excellent and you know I'll be reading regularly.

Next time I get out to Redmond, though, I am going to have to ask for a tour of the office so I can see where they keep the “your turn to blog regularly” baton or hat or whatever they use. It seems as soon as one or two start, the others all stop. :-(.

Kate

8/31/2005 1:49:30 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Wednesday, August 24, 2005

In less than three weeks I will be at the PDC! On the first day, I'll be a panelist at the Women in Technology panel. If you've been to one of these at TechEd, all I can say is PDC isn't TechEd. Things will be a little different this time. Here's the abstract that's going in the guide:

This panel will cover how women have used their intelligence and creativity to excel in the software industry.  Hear from women IT professionals who are successful in a male-dominated industry.  Learn, connect, and engage at this networking panel, where your questions drive the agenda, and hear tips and tricks on how to succeed as a woman developer or technical professional in the computer sciences and technology marketing.  Both men and women are invited to join in the conversation, and learn from each other about how to grow diversity in the IT industry.

One thing that will be the same is the quality of the panelists. I'm not going to brag about myself, but let me tell you the other panelists are fantastic: Angela Mills (Microsoft), Anne Thomas Manes (Burton Group), Dee Dee Walsh (Microsoft), Michele Leroux Bustamente (IDesign Inc.), Shoshanna Budzianowski (Microsoft) and our moderator, Esther Schindler (Ziff-Davis). I've been lucky enough to watch most of them in action before and you're sure to pick up valuable career insight.

And in case that sentence from the abstract didn't quite click the first time, let me paste it again: Both men and women are invited to join in the conversation. See you there!

Kate

8/24/2005 8:55:02 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [3]
 Sunday, August 21, 2005

Gregory Consulting is in its 20th year of operation, and at the moment has six employees. I think it's fair to point out you can't stay solvent over that length of time, meeting payroll, paying rent and ISP fees, without some business sense. One of our most important rules is Fail Fast. If you're doing something that might not work, and it's going to fail, it is so much better to fail in the first week than in the sixth month. This leads to all kinds of useful practises like doing the risky bits first, prototyping, making little proof of concept apps or subapps, and the like. Note that we don't do these things because a Methodology said we should. We do them because our gut or some little voice in our head says “are you sure that's going to work?” and then our brain comes up with a way to fail fast. Of course not failing at all is better than failing, and these techniques can also put you in the delightful position of knowing it's going to work, and just having to write it.

Fail Fast and "let's try it" can also save you a ton of time spent arguing about what's the best way to do something. Last week, I was at a early code review of an partly-written ASP.NET 2.0 application where someone had put some DataSet instances into Session even though they were used only on a single page. I wanted them in ViewState, because sessions expire and you have some hoops to jump through to ensure the work won't be lost. One developer on the team said putting things in ViewState made your pages too big. I said that wasn't an issue for the amount of data in this app. After about ten minutes of "what if someone pulls up the whole department for a year?" back and forth we decided to just try it. It took 30 seconds to flip the code between using Session and using ViewState. And guess what? After disabling viewstate on the grid, which was making both versions of the page really slow, there was no measurable difference (even for a year's data) between the two approaches. So it's going to use ViewState to make the coding simpler. But I would have been happy even if the experiment had shown the ViewState approach was infeasible, because we'd have found out before a hundred pages were coded.

Joel Spolsky says pretty much any methodology makes good software in the hands of those who are good enough to develop methodologies, and they pretty much all can fail in the hands of those who just follow the rules and do what the methodology says. Big complex process (and as we grow, our process naturally gets more complex) runs the risk of becoming opaque to those who are asked to follow it. That's why we like to come back to some touchstones that explain why we do what we do. Like Fail Fast.

Failure can be a good thing. If it saves you from following a doomed path for a year, you're glad to have failed early rather than late. If you can learn from something that didn't work, it will have earned its keep. This morning I read a story by Steven Sinofsky (no longer an entry level programmer :-)) at Microsoft about the failure of a C++ application framework, essentially the first try at what became MFC. He concludes:

When I think back about the dismal failure of our first library ... and how we regrouped, learned lessons, and put those into play, I realized that without that first failure we never would have developed the success criteria that allowed us to build MFC.

I'm never afraid to fail and I am not ashamed when I do. The only shameful things would be to continue to waste time avoiding the final decision that it is a failure, or not to learn from it.

Kate

8/21/2005 11:51:49 AM (Eastern Daylight Time, UTC-04:00)  #    Comments [1]
 Friday, August 12, 2005

Yesterday I was at a client and we talked, among other things, about how their story would make a good one to deliver at a launch event. They have an existing project in C++, client-server with MFC etc. Using Visual Studio 2005, building on the beta, they have wrapped an ASP.NET UI around the server engine so that users who don't have the main product installed on their desktops can still look at and edit some of their data. The new features in ASP.NET 2.0 were so compelling that this client has decided to use the go-live licence and deploy on the beta. The availability of the beta to MSDN customers, and the updates with the CTP process, have helped this ISV get 6 months to a year ahead of those who wait for the launch.

Then today, I faxed back my contract for C++ Connections, which is happening the week of the launch. Although I have at least one confirmed (and two strong maybe) conference trips between now and Nov 7, I am very much thinking about that week and the excitement that will build as more and more people learn what's in the 2005 release.

Those of us who are in the loop, reading blogs from team members and executives, grabbing betas and CTPs, living out on the bleeding edge putting Vista on the laptop, can sometimes forget that a launch is still a really big deal to people who've been waiting for Microsoft to make a big “here's what we've got event”. While such events will always be important for getting the attention of those who weren't looking, these days you can see what they've got right now. If you're in the loop enough to read my blog, you can be just about as completely in the loop as I am. What a fun time to be a developer!

Kate

8/12/2005 5:14:27 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [0]
 Sunday, August 07, 2005

I like having my editor and my build environment integrated with my source control, even if that source control is Source Safe (ugh.) I like being able to check in and out from Solution Explorer rather than a separate tool, and settings like “check out on edit” are handy too. But you know what I really want to be able to do? Right click a line of code and ask “who wrote this?” The answer would be the date, user id, and check-in comment from the last time a touch of that file affected that line of code. Anyone who has ever managed a team project has looked at a block of code, done a double-take, and then demanded of the air “who the %^^$# put that in there?” I want my editing environment to tell me that.

The information to do this is in the system. I can do it by hand by doing a Diff between versions until I find two versions where that line changed, then looking at the check-in details. But it's just the kind of boring job that's perfect for a computer.

I wonder if the source control in VSTS does this?

Kate

8/7/2005 3:58:17 PM (Eastern Daylight Time, UTC-04:00)  #    Comments [5]
 Wednesday, August 03, 2005

Did you know that Visual C++ 6, which is fast approaching its seventh birthday, will soon be an unsupported product? That's not exactly shocking; after all it was developed to let developers target Windows 95 or NT! Perhaps you were wondering when some other applications you use are going to reach end of life.... in that case, here are some handy links: