# Tuesday, 26 May 2009

Oooh, I like this a lot.

That is a little snippet from a query of work items in VS2010 (cropped from a larger pic obviously). You can add a work item and then add other work items that are part of it, break it down into smaller pieces just as though you are in project. This is a huge deal for me! I found this as part of an incredibly long and comprehensive post (with a dozen screenshots) on Brian Harry's blog. This is going to be a must-upgrade for me just for the VSTS stuff - and I love the new editor, and plenty more besides. So far not a single project I've upgraded has had any issues, they've all just worked.

Kate

Tuesday, 26 May 2009 21:22:27 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 24 May 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.

Sunday, 24 May 2009 16:05:35 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 22 May 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

Friday, 22 May 2009 15:55:23 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 20 May 2009

I just could not keep from laughing when I read parts of this Register column on C++0x. And that's good, because that's what Verity no doubt had in mind. And it's mostly accurate, though not a good first reference on C++0x. I would recommend the Wikipedia page or the many excellent entries on the Visual C++ team blog (sorry about the order) to learn what it's really all about. But let's say you have actually read and understood what STL has to say about rvalue references - well done! Your reward for that will be to understand the humour in the Register piece :-). And if you haven't understood rvalue references, well all you really need to know is that they let template writers and library writers make their code "smokin' fast" for you.

Kate

Wednesday, 20 May 2009 15:43:46 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 18 May 2009

I have pretty well always sucked in air through my teeth when I see calls to memcpy. So much of the time it's a marker of premature optimization and a developer who is sure "my code is faster than what the stupid compiler emits". Even when that's not what's going on, it's so darn vulnerable to things changing size over the decades. It just scares me. As result, there isn't much (or even any?) of it in my code, so I'm not directly affected to read that memcpy() is joining the ranks of the "you shouldn't use it" functions, along with strcpy etc.

I blogged about strcpy and some cousins being replaced with more secure versions five years ago. (I had not thought it was that long, but it turns out it was.) Now it's memcpy's turn. The Security Development Lifecycle blogs this, and shows you how to deprecate things yourself. It's probably no surprise to be told you should use memcpy_s instead. There's a scary list of security bugs that are apparently due to misuse of memcpy that memcpy_s would have caught, so if you are an memcpy user, change your ways!

Kate

Monday, 18 May 2009 15:33:06 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 16 May 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

Saturday, 16 May 2009 15:20:06 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 14 May 2009

Choosing a UI technology is often very difficult. I've spoken to a great many developers who want to use one particular technology, but then second guess themselves. For example, they may want to build a client app, but have pressure from management to build a web or browser-based app, often with no clear technical reason. Or perhaps they want to update a Windows Forms app, and are wondering if they need to port it to WPF - and wondering how to do that.

In this interview (filmed at Tech Ed last year), Brian Noyes discusses all of this. He has some good rules of thumb and some advice grounded in his real world experience. Definitely a show to watch. On his blog, Brian summarizes some of his points. Worth a read also.

Kate

Thursday, 14 May 2009 13:45:58 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 12 May 2009

Daniel Kornev took a look at Code Pack and went back to the future, recreating some Longhorn WinFS demos from five years ago using Windows 7 technology. What old demos and prototypes can you find and make a modern-day reality?

Kate

Tuesday, 12 May 2009 11:35:41 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 10 May 2009

I haven't put the RC on my laptop yet - too close to Tech Ed for me to mess with important stuff - but I liked this summary from Tim Sneath of what an RC means, and what you should be looking at as a developer. Make sure your application runs properly on Windows 7 to start with (and if it runs on Vista, it will almost certainly run on Windows 7), then look at adding goodies to it that take advantage of what the OS has to offer. He even includes a link to Code Pack. Check it out.

Kate

Sunday, 10 May 2009 20:23:38 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 08 May 2009

Some people have asked me about the purpose of Vista Bridge now that Code Pack (ok, Windows® API Code Pack for Microsoft® .NET Framework) exists. If you want to use a Vista feature (such as the power management API) you won't find them in Code Pack yet. Vista Bridge is not under active development right now, but you can download and use the wrappers to save time and effort whether you are targeting Windows 7 or Vista. If you run into issues using it on Windows 7, please let the team know using the Discussion tab.

The second question I am getting is about versions. Code Pack 0.8 (no longer available for download) was for build 7000. Code Pack 0.85 (the current version) is for the RC of Windows 7. If you have moved to the RC and something isn't working for you, go and get the latest version because there were a few breaking changes.

Will there be a new version for RTM? Let me just quote from the home page:

Please note that this library is currently a work-in-progress and this release is version 0.85 of this library. The final version of this library will be available around the time of the Windows 7 RTM release. Various features in the library could change between now and final release.

That's pretty transparent, I would say.

Update: 0.8 can still be downloaded. Go to the downloads page and there's a link over to the right.

Friday, 08 May 2009 20:05:40 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 06 May 2009

I've made another appearance on DotNetRocks with Carl and Richard. Some links from the show:

And of course, the show itself. I dare you to listen at 1.4 or double speed.

Kate

Wednesday, 06 May 2009 19:57:02 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 04 May 2009

Sometimes little things make a big difference. Say you're reading through some code in Visual Studio and you come across a class or function you don't immediately recognize. It's interfering with your reading of the code, right? So you copy the name into your clipboard buffer, flip out to a browser, probably with Alt-Tab, then click for a new tab, type a URL like www.live.com or www.codeproject.com, wait while the page loads, paste your buffer into the search box, click search ... wow there are a lot of opportunities to be distracted in that process.

The CodeProject has a simple add-in for Visual Studio that lets you do your searches without going anywhere. It does one thing, and does it well.

Give it a try!

Kate

Monday, 04 May 2009 19:48:16 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 02 May 2009

If you're starting to get interested in WPF, why not check out some of the videos over at WindowsClient.net? You can learn how to make a splash screen, use a datagrid, add validation to your application, deploy using ClickOnce, and much much more. Each video is only 10 or 15 minutes, but there are about a hundred of them. You're sure to learn something!

Kate

Saturday, 02 May 2009 19:42:01 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 30 April 2009

Inspired by the side by side approach of the "eye candy" article I linked to, here are two apps to compare:

Yes, they're the same app. The difference is a theme - one of the ones I posted about a while ago. I had to make four changes to this application to get this theme applied. I started by copying the appropriate XAML and DLL files (in this case, ShinyBlue.xaml and System.Windows.Controls.Theming.ShinyBlue.dll) into the project folder. Then I added the XAML into the project, and added references to the dll and also to WpfToolkit:

This lets me use dynamic resources from the theme. This particular theme doesn't have a default background brush, so I edited the XAML for my window to use the background brush in the theme:

For everything except the background (the colour of the button, the checkbox, the foreground text colour for the label and so on), it's just a matter of adding the ResourceDictionary in App1.XAML:

The various controls look good together - that's the work of the theme. This is a pretty simple way to make a dramatic difference in your application. If you didn't look at WPF themes yet, you really should.

Kate

Thursday, 30 April 2009 19:37:36 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 28 April 2009

Design matters. I don't just mean software design, like what objects you'll have or what the interfaces will be or what database tables you'll use. I don't just mean planning before you code. I also mean visual design. I'll tell anyone who asks that I'm a grey-boxes-on-a-grey-background kind of girl, but that's mostly about my skills, not my aspirations. I can tell good looking from not so good looking, and I do get that being good looking makes a difference, at least for applications. :-)

I read an interesting article called In Defense of Eye Candy and it has some good examples - mostly oriented towards web sites, but not entirely - about making it clear that a button is a button, and about the tone and mood you set with your design decisions. Worth reading.

Kate

Tuesday, 28 April 2009 19:18:41 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 26 April 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

 

Sunday, 26 April 2009 12:15:37 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 24 April 2009

I like Scott Berkun's main blog and read it regularly. But now I'm also reading his new one that specifically covers public speaking. Lots of "how to fix" posts, and links to other tips and information. I was especially interested in the graph of heart rates falling as a lecture continued (in a university setting I believe) along with the recommendation to do something other than talk to folks every 20 minutes or less. Sounds like a good use for a demo!

Kate

Friday, 24 April 2009 11:36:55 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 22 April 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

Wednesday, 22 April 2009 20:43:20 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 20 April 2009

Free or cheap software ... hmm ... not always a good thing, right? Well, what if it's from Microsoft? Plenty of utilities and add-ons are free, since they're only useful to people who already bought the main product, whether that's Office, Windows, or Visual Studio. Others are free as a deliberate decision to help introduce people to more powerful (and expensive) tools - think about all those Express Editions, for example.

Here's a comprehensive list, updated regularly, of goodies from Microsoft. I guarantee you will learn about a product you can use that you did not know existed. And this isn't some "bathroom wall" of links and torrents from a random person - this is the Windows Team Blog. I did stumble, a while back, across a laundry list from Blake Handler (a Microsoft employee) of free software from Microsoft that might have one or two things that aren't on the team blog.

Try some, and spread the word.

Kate

Monday, 20 April 2009 20:17:30 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 18 April 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

Saturday, 18 April 2009 19:25:25 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 16 April 2009

Well, a lot. Brian Harry has provided a feature list, and a secret decoder ring to help you decide which blogs to read to learn more over the coming months. My personal favourite? "Work item hierarchy & linking". If that means what it sounds like it means I will have a much simpler life when planning a project the way I often do - starting with big things and later breaking them down into small ones. I'll be watching for more details on that.

Kate

Thursday, 16 April 2009 19:17:32 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 14 April 2009

Do you have a Windows application? Are you curious if it will run well on Windows 7? Would you like to try something a little more technical than "install on Windows 7 and see if it runs?" Then you need the Application Compatibility Toolkit. The latest version, 5.5, is now available. There is documentation for it on TechNet to help you get started.

Kate

 

Tuesday, 14 April 2009 18:28:45 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 12 April 2009

People believe a lot of strange things in this world. They worry specifically that SharePoint won't perform as well as they need, and that they can write some sort of ASP.NET app with a SQL backend that will somehow outperform it. I really liked this post from Eric Shupps that lists a few of them. Keep in mind these are all myths - that is "not true".

  • SharePoint Lists Have an Upper Limit of Two Thousand Items
  • SharePoint Is Just Too Slow for Common Tasks
  • SharePoint Is Not Suitable For Large Public-Facing Web Sites
  • SharePoint Isn’t A Scalable Enterprise Document Management System
  • SharePoint Pages Take Too Long to Render Over the WAN

Eric goes into quite a bit of detail debunking each of these 5 myths, so if you have a tendency to believe these things, here's a chance to get straightened out on that.

Kate

Sunday, 12 April 2009 18:23:57 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 10 April 2009

I think one of the things that really sets good presenters apart from poor ones is what they do when something goes wrong. A poor presenter:

  • needs all their cycles to try to figure out what went wrong, and has none left for looking after their audience
  • is focused on making the demo work and sticking to the original plan
  • is rattled by the experience so that whether the demo works in the end or is abandoned, the rest of the talk is lower quality

A good presenter:

  • has rehearsed the demos many times, so that most "boom!" moments have been seen before and can be fixed quickly
  • doesn't need as much energy to look after the audience, so is more likely to be able to do it
  • is focused on making the talk work
  • has backup (screenshot of the result, an exe that was built earlier) so that something can be rescued
  • can get through the failure quickly and get back to the flow so that the talk as a whole can go well

I linked a while ago to a picture of Steve Teixeira dealing with a blue screen. Now Brad Abrams has highlighted Bill Buxton (who I quoted a few posts ago) dealing (at Mix) with hardware that refused to co-operate. I aspire to do as good a job dealing with demo failure. Brad includes some other "demo failures at Mix" in his post, too. 

A tip that has served me well over the years: have a stock of optimistic "I am not an idiot" sentences to use while you're either giving up on the demo or doing what you need to do to make it work. "Hey, if it was perfect, we'd be shipping it" is good. So is "told you it would be a short demo". Humour keeps the audience with you, and stock lines don't take up much of your brain, so you can be furiously thinking with most of your brain about how to solve your problem (either how to fix the demo, or what to do with the rest of your talk now that you have ten more minutes to fill.)

Kate

Friday, 10 April 2009 09:17:49 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 08 April 2009

Steve Clayton highlights a neat video that you should probably watch. It's a little corny, but you can't make the world a better place if you're always looking over your shoulder wondering if you're being corny. It's less than two minutes - you can spare that, right?

Kate

Wednesday, 08 April 2009 08:58:37 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 06 April 2009

If you do any SharePoint work, you need SharePoint Designer. If you're a developer, you probably got it through an MSDN subscription. But is there someone in your company who doesn't use Visual Studio and other developer tools, just some designer-oriented ones? Now that person can have a copy of SharePoint Designer - it's become a free product. Why? There's a video interview that explains the team's thinking on SharePoint as a platform, and making it simpler to build around it.

Download it here, and enjoy!

Kate

Monday, 06 April 2009 08:53:08 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 04 April 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

 

 

Saturday, 04 April 2009 08:45:51 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 02 April 2009

Jeff Atwood has a post on "five dollar words" where he discusses (and briefly defines) these three words.  They're helpful, all the more so if you know the concepts but never knew they had a name. Then in the comments people start to talk about Normalization, Instantiation, Canonicalization, Covariance, Deprecation, Atomic, ACID, SOLID and so much more. Many provide links (how did we ever live before Wikipedia?) and if not, well, you have access to a search engine I'm sure. Having these words lets you have conversations you couldn't otherwise have. Reminding yourself of the definitions every once in a while can't hurt.

Most of these are pretty straightforward to remember if you have some Latin and Greek - enough to know the scientific prefixes. For example idem means "same" and "potent" refers to power - the function always has the same power. Mutable means change-able (think about the word mutant) and im- negates that, so the value can't be changed. (Swapping in im- for idem- in the first word results in another perfect valid word whose meaning can be worked out from its parts.) I learned a lot of Latin and Greek prefixes in high school and university, and I'm really glad I did. I can't write a sentence in either language, but I can work out what a lot of "intellectual" words mean just by going through their parts.

Kate

Thursday, 02 April 2009 16:30:01 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 31 March 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

Tuesday, 31 March 2009 16:16:37 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 29 March 2009

What do you do if someone blogs about you? It's kind of rude to ignore such a nice thing. I suppose it might be rude (braggy) to draw attention to it, also. In this particular case, I'm very pleased by the specific things they're saying about me, and the occasion is a good one, too, so I'm going to go ahead and brag a little: Joey (I jumped up and down with delight when Microsoft hired him) says I was the first non-Microsoftie to welcome him to the Empire. I can believe that, but only because we were both at a reception the day before the PDC so I got to him before the rest of the community. Julie (a long time friend, and inspiration to me for her ability to remember so many people and what they care about) declares that I am wise, something I truly aspire to be.

Both of them are celebrating Ada Lovelace, who wasn't the first "woman in technology" but was perhaps the first programmer of any gender. It's nice to know our history and to feel a connection that stretches back a little further than 1970. 166 years ago, she wrote out a method for calculating Bernoulli numbers with (the nonexistent) Analytical Engine. Pausing to remember that, and to call out good behaviour when we see it, is a good thing.

Kate

Sunday, 29 March 2009 18:47:01 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 27 March 2009

The WPF team has a home on CodePlex where they release the WPF Toolkit and other goodies. To quote their project description,

The WPF Toolkit is a collection of WPF features and components that are being made available outside of the normal .NET Framework ship cycle. The WPF Toolkit not only allows users to get new functionality more quickly, but allows an efficient means for giving feedback to the product team. Many of the features will be released with full source code as well.

One of the nice things they have added is a set of nine lovely WPF themes you can use in your applications today. Use the link to download them and to see the instructions for theming your app.

The appearance changes dramatically - with no coding on your part once you've hooked in the theme!

Kate

Friday, 27 March 2009 18:27:43 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 25 March 2009

Windows 7 has this neat feature called Libraries. It aggregates together several real folders - perhaps two or three folders on your machine, or perhaps one on your machine and one elsewhere on the network. Within this "virtual folder" you can search, sort, and otherwise explore a large collection of files without having to worry about which real folder houses them. The usual examples given are your photos or your music, but I could also see it being handy for those "project folders" that every developer keeps on the working box, and the shared project folder that some (but not all) of the documents have been copied to. If you set up a Library that represents all those folders, you can read through the documentation without getting caught up in whether a particular file is on the project share, developer A's machine, or developer B's machine.

This blog post by Vinod Unny (a fellow RD) presents another cool use for Libraries - as a temporary creation to help you copy and paste from many different folders (perhaps all those individual developer ones) into another (perhaps that project share.) What a nice explanation!

Kate

Wednesday, 25 March 2009 18:17:10 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 23 March 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

Monday, 23 March 2009 18:12:21 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 21 March 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

Saturday, 21 March 2009 17:59:39 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 19 March 2009

Toronto Code Camp is happening again this year, and this year I will be there speaking. My session title wasn't deliberately chosen to show up first in the list of sessions, I promise. The talk is:

Boost Developer Productivity: Write Extensions to Visual Studio  
Visual Studio is a complex tool used by a wide variety of developers. Customizing your tool makes you more productive, and Visual Studio is highly extensible. In this demo-heavy session you will see how to write your own Code Snippets, how to write and use macros, how to write a simple add-in, and how to create your own templates for projects and project items, complete with wizards. Streamline development to fit your processes and habits by writing a little code to ensure that Visual Studio works the way you do.

I hope you already know the rules of Code Camp: all code, no fluff, and always free. Come on out and learn!

Kate

Thursday, 19 March 2009 17:53:46 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 17 March 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

Tuesday, 17 March 2009 17:45:20 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 15 March 2009

Whenever a new OS or major application is released, there's a gap between when people want to start interacting with the functionality and when the .NET Framework supports that interaction. That's only natural - the framework release cycles aren't synced to the OS release cycles. This happened before with Vista, and is happening now with Windows 7. For Vista developers, the Vista Bridge provides easy access from managed code to the fun stuff like Restart and Recovery, Task Dialog, Power Awareness and so on. Stay tuned for announcements about a similar library for Windows 7. In the meantime some slightly more granular wrappers are available for you to use now, covering Taskbar, Libraries, Sensors, and Multi-Touch. Alon's blog has the details and the links.

Kate

Sunday, 15 March 2009 17:20:56 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 13 March 2009

If you see the things that go around the internet that everyone's seen, then you've probably seen the list of things you should have seen by now, but maybe not? A neat way to see how many of the memes you've picked up. Me, I'm kind of an old fogey at this stuff, but there are a dozen or so here that I have indeed seen (thus saving me, I hope, from being a loser or old or something). Have you?

Kate

Friday, 13 March 2009 17:06:51 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 11 March 2009

Most of the developers I know think of SQL Server Express as something you use while you're developing, if that's simpler than getting a full SQL onto your developer machine. They naturally assume that when you want to go into production, or if you want to use some of the higher-end features, you'll need to buy a license of SQL rather than deploying to SQL Express. Well, you may want to, but you may not have to. For example, you can use Reporting Services with SQL Express. That surprised me. The details on what sets Express apart are at http://www.microsoft.com/sqlserver/2008/en/us/editions-compare.aspx and http://www.microsoft.com/sqlserver/2008/en/us/editions.aspx. Worth a read for sure and SQL Express is a valid choice in many data situations where you need a free product, such as distributing with your own applications or for low volume, low budget projects.

Kate

Wednesday, 11 March 2009 17:03:13 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 09 March 2009

Here is an interesting video featuring Kevlin Henney (a confident speaker I've seen at SD West before) discussing some philosphy around good and bad OO design. I don't agree with everything he's saying, but I sure am glad he's saying it. The examples are in Java but that will hardly kill you. Worth a watch.

Kate

Monday, 09 March 2009 16:50:05 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 07 March 2009

A lot of applications like to know what version of the operating system they are running on. Sometimes (especially older applications) it's so they can flat-out refuse to run if you're still on, say Windows 98. This is now frowned on, by the way, and if you want a Windows 7 logo you must not refuse to run based on a version check. Other times (and this is bad too) it's as part of some arcane roll-your-own strategy. For example someone I know planned to work out the default hard code paths for user documents (C:\Documents and Settings\ ... vs C:\users\... ) based on OS versions. This is insane! There's already a function you can call that will get you that path, and it works even if the user has changed it from the default.

But there are still legitimate reasons for version checking. If you're using Vista or Windows7 light-up features like the Task Dialog, Restart and Recovery, or Taskbar Jump Lists, you'd better make sure you're on an OS that supports those features. It's pretty easy from managed code: just call System.Environment.OSVersion.Version.Major and System.Environment.OSVersion.Version.Minor. From native code, GetVersionEx() does the same job. Then you have to do some comparing. That's where things can get weird.

For example, a huge incompatibility bucket for Vista was applications whose code checked that the version was exactly 5.1. If not, it would pop up a message box saying it only ran on XP SP2 or better. I've seen these apps in the wild and I just can't keep from laughing. The error message itself says "or better", and that was presumably the intent, but the code is checking for equality. The magic of >= fixes this "incompatibility" bug in the code, and often these applications don't need any other fixes to make them work on newer OS versions. (That's why the logo people frown on refusing to run. How can you know you won't work on a later OS that doesn't exist yet?)

Even if you grasp the magic of >=, comparing major and minor versions can bite you. Larry Osterman shows us this code:

// Example in C#.
 
internal bool SupportsTaskProgress() {
    if (System.Environment.OSVersion.Version.Major >= 6) {
        if (System.Environment.OSVersion.Version.Minor >= 1) {
            return true;
        }
    }
    return false;
}

He rightly points out it will return false if the version is 7.0, or 8.0, or any other .0 that's larger than 6. (Yes, Windows 7 returns 6.1 for the version #, that's a long story and well covered elsewhere.)

Version checking is hard. If you can, use a library that does it for you. Vista Bridge, for example, not only wraps up cool new OS features for easy access from managed code, it also does some checking to see if the feature is there for you or not. Don't reinvent wheels. Also, check for the feature rather than the OS if you can. Larry discusses this in his post for Taskbar features. Any feature you plan to use, you should know how to check for. I hope to post some more links and examples on this soon.

Kate

 

Saturday, 07 March 2009 10:45:31 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 05 March 2009

A quick glimpse of what you'll find if you search for C++ on the Tech Ed Sessions page:

I'm looking forward to it once again!

Kate

Thursday, 05 March 2009 14:52:05 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 04 March 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

Wednesday, 04 March 2009 09:16:49 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 03 March 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

Tuesday, 03 March 2009 09:06:48 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 02 March 2009

Programmers make mistakes, we all know that. But some are worse than others. Say you hardcode a file name, and you make a typo in the name. When you do your own testing before passing it off to others, you'll discover the typo because it keeps the application from working. But if you fix the typo, there's a good chance no-one will notice the other mistake - hardcoding the file name - for a very long time. In fact, if the file never moves, under some circumstances you could claim it isn't even a mistake to hardcode the name. But if the file does move, hardcoding the name is a much worse mistake because it causes a bug that a customer discovers - and that is always bad. Writing your data access code so it brings back the wrong records (say, forgetting to filter by date) will show up the minute you hit F5, but writing your data access code so it's vulnerable to SQL injection is far worse - you'll think the application works, but when you put it into production you'll have opened a large hole into your database for bad guys.

The SANS Institute has created a list of what they consider to be the 25 most important programming errors of all time. There's a lot not to like in this list, to be honest. First, it's not so much a list of errors (John typed this line of code in that application) as it is kinds or categories of errors. Second, a lot of them look like the same error over and over (trusting stuff that people give you as input, for example). Third, the post spends pages and pages on credits, acknowledgements, explaining why they are important, predicting how the world will be made better by this list existing, and so on before finally getting to the errors. Fourth, the names are flat-out weird in a lot of cases. But with those disclaimers in mind, I still think the post is worth reading and the errors are worth thinking about. Here are the 25:

  • Improper Input Validation
  • Improper Encoding or Escaping of Output
  • Failure to Preserve SQL Query Structure (aka 'SQL Injection')
  • Failure to Preserve Web Page Structure (aka 'Cross-site Scripting')
  • Failure to Preserve OS Command Structure (aka 'OS Command Injection')
  • Cleartext Transmission of Sensitive Information
  • Cross-Site Request Forgery (CSRF)
  • Race Condition
  • Error Message Information Leak
  • Failure to Constrain Operations within the Bounds of a Memory Buffer
  • External Control of Critical State Data
  • External Control of File Name or Path
  • Untrusted Search Path
  • Failure to Control Generation of Code (aka 'Code Injection')
  • Download of Code Without Integrity Check
  • Improper Resource Shutdown or Release
  • Improper Initialization
  • Incorrect Calculation
  • Improper Access Control (Authorization)
  • Use of a Broken or Risky Cryptographic Algorithm
  • Hard-Coded Password
  • Insecure Permission Assignment for Critical Resource
  • Use of Insufficiently Random Values
  • Execution with Unnecessary Privileges
  • Client-Side Enforcement of Server-Side Security

The full details are in the linked post and it won't take more than a few minutes to read the description of each error. Pat yourself on the back, or go do a quick code review so you can say you don't do any of these.

Kate

Monday, 02 March 2009 08:48:48 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 01 March 2009

Being a Microsoft Regional Director has a host of benefits, most of which are intangible and hard to explain to someone who's not experiencing them. The number one benefit, for example, is the other RDs. They're such a smart and fun group, and the connections have helped me personally and professionally. The only drawback to being an RD is that so few people know what it means. They think perhaps we work for Microsoft (nope) or that it's like being an MVP (nope, though many of us are MVPs as well) or that we get paid to do it (nope again.)

Recently Joel Oleson had a crack at it. The phrase "unbiased evangelist" is a little tricky, isn't it? And we're not exactly evangelists either ... Microsoft already has people for that. I would say that we've chosen Microsoft technologies (not always exclusively) for our own reasons (that is, not because someone compensated us directly for choosing them) and we're happy to share our reasoning with others. It's that sharing that gets us the nod to become RDs.

Kate

Sunday, 01 March 2009 08:31:33 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 28 February 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

Saturday, 28 February 2009 11:01:19 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 27 February 2009

Ronan Geraghty has an interesting blog, full of topics that interest me, with lots of BizSpark, WPF, Windows 7 and client development content. In a recent entry he explains that getting the Windows Logo on your software product is going to be a lot easier for Windows 7. Instead of submitting your application to a third party for testing, you can test it yourself and get certification without paying someone else.

Why would you want to certify your product and get the Windows Logo? I can think of at least three reasons:

  • The certification process may raise your quality bar by imposing some constraints on you that you were planning to skip.
    (Have a clean, reversible installation; Install to the correct folders by default; Support Multi-user sessions; etc.) That may feel like a drawback to some, but for those who wanted to put these features in, the logo program may be a good reason to have them.
  • There may be some customers somewhere who are more likely to buy something with the logo on it. There certainly are none who are LESS likely to buy because you took the time to get certified.
  • Having a logo'd product gets you a competency in the Partner Program and makes you a Certified Partner, which comes with a suite of benefits you're sure to want.

So making it easier to get the logo is nothing but good news. Follow Ronan's links for more details.

Kate

Friday, 27 February 2009 14:35:14 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 26 February 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

Thursday, 26 February 2009 08:20:42 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 25 February 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

Wednesday, 25 February 2009 08:02:48 (Eastern Standard Time, UTC-05:00)  #