# Tuesday, 21 May 2024

I really enjoy speaking at NDC Techtown in Norway. The airport is pleasant and easy to navigate, the trains are reliable, and it's a quick walk from the train station to the hotel, which is right at the venue. Plus the other speakers are always amazing, so I have a jam-packed two days of sessions to attend. Many years ago I decided to only speak at conferences where I would want to watch sessions, and it improved my life tremendously!

This year I'll do The Aging Programmer. This is a new talk that should be helpful for even the youngest programmers amongst us, because when it comes to planning for a happy old age doing what you enjoy, it's never too late, and it's also never too soon.

See you there! You've got three more days to order Early Bird tickets!

Kate

Tuesday, 21 May 2024 11:07:23 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 13 May 2024

I am really starting to look forward to CppNorth. We're in a new venue this year, the Microsoft Canada offices! They have a lovely suite of presentation rooms that they make available to community groups like ours. The program is chosen, and we're working on the schedule. In the meantime you can see the speakers and their talks. If you're ready, register now! You can also book a room at the conference hotel, the Royal York. It's an easy walk from Union Station to both the conference and the hotel as you can see from this map showing all three.

For those who would fly to Toronto, there's a train called the UP between Union Station and YYZ. You should plan to come a little early so you can do some sightseeing before the conference. There's a see-and-do channel on the conference discord that will give you some great ideas.

I'm honoured to do the opening keynote again. This year's topic: The Aging Programmer. Eyes, wrists, memory, stamina ... so many things we rely on can get weaker as we age. That doesn't mean you can't keep going if you want to. I'll talk about it.

See you there!

Kate

Monday, 13 May 2024 16:39:01 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 09 May 2024

On January 8th, 2004, I got an email from the MVP Lead for Visual C++ at Microsoft, asking if I would like to be an MVP. After checking to see what that meant, I said yes, and was accepted into the program. I was renewed every year, and at some point after half a year, making just over 20 years coming up at the end of June. I'm still the only MVP called Kate.

I went out for MVP Summit that first year, and some RD stuff at the same time. Here's a production still from "Red Chair Green Wall" - the plan had been to greenscreen in some image related to where we each were from, but then in the end, we didn't. I'm including it to show how much younger I was then!

I've decided not to renew this year. Usually, people making this announcement do so because they're no longer doing the sorts of things MVPs do. But I'm still teaching, speaking, helping folks online, writing the occasional book, helping to run a conference, and all the technical things as well. What's changed isn't so much me, it's the program. I always valued my connection to the Visual C++ team very highly. These days, the team maintains those connections with developers whether they are MVPs or not. Events like Pure Virtual C++, among other things, can keep me informed as well or better than the program can. The MVP program is all Azure this and AI that and exciting details and announcements about conferences that just aren't relevant to me. I'm sure they are useful and exciting tools and events, for someone. I am focused on my little piece of the world and don't need more information on the stuff I've decided to ignore.

Joining the program was definitely life changing. I had some wonderful times, learned things I really needed to learn in as quick and enjoyable a way as you can imagine, met terrific people and raised my professional profile. I would do it all again in a heartbeat. I'm just not going to keep doing it, because for me personally the benefits are dwindling.

I'm truly grateful to John Perry, for bringing me into the program, to Karen Young for inspiration and funny stories, to Sasha Krsmanovic for everything, to Sim Chaudhry for cheer and support, and to Betsy Weber for being the last one standing. Most of all, I'm grateful to my fellow C++ MVPs, and the Canadian MVPs from all technologies, for being great people to spend time with and learn from. There are too many to mention -- I hope you all know you really made a difference.


Sure, I could have cropped it a little tighter, but then you wouldn't see the picture in the background of me with Bill Gates :-) What a marvelous pair of decades!

Kate

Thursday, 09 May 2024 15:02:29 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 31 March 2024
I'm doing some work on getting older as a programmer. As part of that, I'd like to know what programmers have on their minds when it comes to aging. Our ability to type is a big deal. What else?

I've put a survey at https://forms.gle/gv3Zet5k6mhwcm7q6. Please take it, and please ask other developers you know to take it too. It doesn't matter what programming language you use. You can even answer if you're not a programmer -- perhaps you're retired, or you do a different job -- there's a question about whether you program at the moment.

I'd like to hear from a wide variety of ages and genders so please share this widely. Thanks!

Kate

Sunday, 31 March 2024 13:25:35 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 31 August 2023

During CppNorth, I took a few minutes away from the conference to do an interview for Pluralsight. The host was my dear friend Julie Lerman and we had a great time. We talked about my courses, #include <C++>, CppNorth, Carbon, and a lot more.

I thought you might like to see a few "production stills" of how I set up the space to do the recording. It's always a challenge in a hotel room to get good light, keep the bed out of frame, and be reasonably near an available power plug. I did it!

Yes, I have my ring light clipped to a lampshade. And I brought the light, my good mike, and my mike stand to Toronto with me in my suitcase. Getting the laptop up high enough and at the right angle involved a little foraging in the room :-)

This was the view from my chair. (That desktop background is the view out of the Bridge of Sighs, in Venice.)

And here's the final video.It's about seventeen minutes; please do share the link with others.

Kate

Thursday, 31 August 2023 11:04:11 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 27 August 2023

The recordings from ACCU have been appearing over the last few weeks and now both of my talks are up:

  • C++ And Beyond: Discussion is a panel discussion with Vittorio Romeo, Kevlin Henney, Nico Josuttis, and me, moderated by Bryce Lelbach. The fun starts just six minutes in when Nico declares C++ "fundamentally broken." Still, there is some positive and hopeful content. We should think about the languages we use and what we want from them. C++ is a language that changes, which has consequences, both good and bad.
  • Become a Better Programmer by Using Words and Ideas From Casual Gaming is my closing keynote. Not a lot of syntax in here, but a new way of looking at some of the things you do at work, and how to approach those, that you may find helpful.

Going to conferences in person has many advantages, and I'm glad we're solidly back to doing that. But for the ones you can't attend, you can at least watch the sessions, and I highly recommend that you do.

Kate

Sunday, 27 August 2023 11:57:22 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 18 August 2023

The agenda for the Qt World Summit has now been released.

I'll be doing a half-hour version of a talk I've given only once before, "Am I a Good Programmer?" Many people have told me this is something they worry about pretty often.So at the end of November, we can discuss it together.

I've been lucky enough to speak in Berlin at several different conferences and I'm looking forward to being back there again. Would you like to join me? You can even get a discount of 10% if you use the code QtWS23_Kate -- register here.

Kate

Friday, 18 August 2023 12:32:58 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 20 July 2023

Day 3 began with a terrific keynote from Jessica Kerr, I can write the code. But getting something done is another matter. I was so thrilled when she agreed to come and do a keynote, and this one didn't disappoint. I took pictures of several slides, always a good sign.

After a break it was time for Tony Van Eerd with Value Oriented Programming Part V: Return of the Values. There was plenty of pop culture here but also some darn good advice about making good abstractions, and what's good about them. Then out for lunch again ... I deliberately chose something different on my second trip to the market.

The afternoon started with Conor Hoekstra and New Algorithms in C++23. Conor makes these things look easy -- perhaps they actually are? Then the closing keynote, from Timur Doumler, called Contracts, Testing, and the Pursuit of Well Defined Behaviour. We sure have plenty of undefined behaviour to deal with:


I enjoyed this keynote too -- they were all good.

And then it was time to say goodbye to this lovely venue and this lovely conference for another year.


Being all on a single floor this year made it super easy to meet people, have chats, enjoy the breaks, and so on. One thing I noticed this year was that some people brought their children. This was just lovely! Parents are quite capable of knowing if their child can sit quietly and be in a session, and it was great to see that in action. I hope bringing children to conferences is something I see more often in the future.

Kate
Thursday, 20 July 2023 16:26:00 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 18 July 2023

Another amazing day in Toronto! Let's talk about what sessions I went to so far.

I started with Patrice Roy's Moving an Existing Project to C++ 20 for Fun, Beauty… and Results!. The first part set up a problem and showed some C++17 code to handle it. I was a little impatient during this part, because it was a lot of code and I would have done some of it differently (because I am doing C++20 which is the point of the talk) but I did notice that it was carefully written to be fast and readable. Then the fun started as things got shorter, simpler, and (proven with some measuring) faster using C++20 goodies.

Next was Ben Deane with Calendrical C++: std::chrono, History, Mathematics and the Computus. This very entertaining talk took a problem few of us really face in code (when is Easter next year?) and used it to show off what chrono can do with dates. Probably my favourite slide was the one to show when Thanksgiving is. When you get to it, you'll see why.

The first break of Day 1 was the "Canada Snacks" -- see the published menu for details. I've never put a blackberry on a Nanaimo bar, but they certainly were delicious.

I enjoyed And Then() Some(T) by Victor Ciura a lot, even though I had to duck out early. If you would say no to "are you using higher order functions today?" this is the talk for you. Because you almost certainly are, and knowing that will make a lot of things easier to understand.

For the last talk of Day 1 I had planned to attend Rud Merriam's A Journey into Ranges, Views, Pipelines, and Currying but some last minute schedule juggling as speakers ran into travel problems put it up against Timur Doumler with C++ and Safety. Safety is a timely topic, so I'll wait for the video to watch Rud's talk. Timur did an interesting review of what the word "safety" even refers to, why governments are starting to have an opinion, and whether C++ can ever be proven safe -- and why you should care.

We wrapped up the day with the conference dinner, a nice mix of old friends and new, speakers and not, and good food. I enjoyed the conversations a lot!

Day 2 started with a keynote from Ben Deane, Optimizing for Change. Some excellent advice in this talk even if I did find the dark background a bit of a challenge on some of the code slides.

I had an online meeting I couldn't miss, so I didn't go to another morning session. After my call I walked over to the St Lawrence Market to get some lunch. I wish more conferences were fully in the towns where they are held, and made it simple for attendees to walk out and experience a little sunshine and access a wider variety of food options.

The afternoon had more tough choices, but I went to Why Good Code is Relative by Daniel Withopf. A good summary of why you can't "just write it the fast way" and some solid code samples about how to actually follow advice like "avoid heap allocations."

Then I went to Get() into Retroactive Static Reflection by Vincent Tourangeau. This was a slideless talk, bopping around in a lot of surprisingly-readable code that showed how to get properties, introspection, and a lot of other things you think C++ doesn't have -- and all with C++11. I know I'll be watching the video when it's out because there were a few moments where I wanted to rewind and see something again!

For my last session of Day 2 I went to Writing C++ to Be Read by Vincent Zalzal. I really enjoyed this talk! It's the sort of talk I would give, but Vincent included a number of excellent points I had not made or heard before. He also had fantastic slides, with highlights to point out the parts he wanted to draw attention to, and good examples.

That left the Lightning Talks. Wow, these were so good! As always, some were funny, some showed something we needed to learn, and some were highly personal. I've seen a lot of lightning talks and I always get a lot from them. But I don't remember lightning talks from student volunteers and members of the organizing committee anywhere else. Worth staying up for!

Next, one more day!

Kate



Tuesday, 18 July 2023 07:03:11 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 17 July 2023

So great that the second year of CppNorth has really happened, and started so darn well, too!

We started planning year two even before year one had happened, with a "next year" folder, and never really stopped. If you thought it was challenging to plan and host a conference with a pandemic still underway, that's nothing compared to doing the same thing during -- what are we calling it? -- an "economic downturn"? Getting attendees and sponsors took a lot of work, and luckily a pile of people who aren't me did that work.

Me, I showed up on Day 1 and did a keynote. I really enjoyed it, too. I'll post again when the video is up ... if you're an attendee you should be able to get the slides any time now.

This is 90 minutes of "stuff I've learned" like "Take Notes in Meetings" and "Always Take a Moment to Check" (aka Shift Left but for people) and the like. Many people told me it was helpful, which is very reassuring.

Kate

Monday, 17 July 2023 11:34:57 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 15 July 2023

I had a lot on my plate when the MVP renewals appeared July 6th, but I'm delighted to number myself among this illustrious group again. I'm never worried that I haven't done enough for the C++ community, but I do sometimes worry if the C++ community is the target audience for the program any more. Still, I suppose it must be, since they renewed me.

I updated my profile on the MVP site a little.

Kate

Saturday, 15 July 2023 10:10:05 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 16 June 2023

Time for an update on the conferences I'm doing in 2023.

In April I did the closing keynote at ACCU, Grinding, Farming, and Alliances How words and ideas from casual gaming can make you a better programmer. My idea here is that certain things you are fine with in games, like "daily housekeeping", don't feel the same in your job. If you could feel better about them, you might be happier or more successful. Also, games pull on strengths like altruism and responsibility to get you to do things -- can your job do the same? Can your harness that to be more successful (however you define success) or happier at work? This talk was recorded and I expect it on the ACCU Youtube channel some time in June.

Next up will be "my own" conference, which is to say the one dearest to me as well as geographically nearest, CppNorth. There's still time to register for this: it will be in Toronto at the King Edward Hotel. July 17th and 18th are preconference workshops, and the 19th, 20th, and 21st are three jam packed days of sessions with evening activities Sunday, Monday, and Tuesday. If you live in and around Toronto this is your chance to see famous speakers (and discover some new ones) without having to fly a long way. I recommend you get a hotel room though, so you can truly immerse yourself in the conference while you're attending. My keynote is Steps To Wisdom: some tips I want to share with you that I earned through hard experience.

In September I'll be returning to NDC Techtown, this time to deliver the closing keynote on Day 1. These days I choose conferences based on many factors and small friendly ones like CppNorth and NDC Techtown really appeal to me. Both attract very good speakers and I expect to learn things -- I know I did last year!

In November I'll be doing something I haven't done before -- I recommend doing something new at least once a year no matter how old you get. In this case it's Qt World Summit in Berlin, where I will have a small keynote. I look forward to new people and new ideas from this experience, and hope to reach some people who haven't heard me speak before.

It's not too soon to think about the 2024 season, for me anyway. If you'd like me to speak at your conference, you can see many of my previous talks on my YouTube playlist. Please check my Speaker Kit for the details of my preferences.

See you at a conference, I hope!

Kate

Friday, 16 June 2023 16:00:49 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 08 March 2021

I’ve been thinking lately about a lesson I saw taught in a martial arts class over a decade ago. A young student was misbehaving. I knew this kid from field trips and other school activities, and he was doing typical things for him – not paying attention, calling out funny responses from the back row, making faces and showing off, that sort of thing. He was always a little difficult to manage but this particular day he was worse than usual. One of the instructors stopped the class and took the boy aside from the group. He picked up a lightweight rattan sword. They use these for practice – they’re very light, and they are made of several light sticks bundled together. They make a loud clattery noise when they hit, and use up most of the energy doing that, so they don’t hurt. They weigh very little.

The instructor got the student to sit or kneel, and hold his hands out straight in front of him at shoulder height. Then he held out the sword and asked the student to take it with both hands, holding the sword and his arms all parallel to the floor. Simple. You could do the same thing yourself right now with a ruler or a pencil or anything else rigid and lightweight. It’s trivial to hold your arms extended, elbows locked, hands a fixed distance apart (because they’re holding something that doesn’t bend or stretch.) Easy, right? By now everyone was watching to see what the actual punishment was going to be. Would the instructor now hit the student, or demand they do something difficult? (It was common in that class to assign pushups for misbehaviour, and I adopted the habit myself, giving my kids pushups in the grocery store if they were driving me crazy.) But no, the instructor just stepped back and said “just hold that as long as you can.” The kid grinned. Everyone else looked puzzled. It was trivially easy to do.

But if you try this yourself, you’ll soon discover that very quickly it gets harder. It starts to really hurt after just a few minutes. If you’re stubborn and you grit your teeth, you can keep going. This student was very stubborn. After a while though, his arms would occasionally droop down. “Either put it down or keep it up! Shoulder height! Arms straight!” the instructor would call and the student would try again and manage to get back into position. Eventually he was clearly in distress. The instructor told him “you can put it down whenever you want” but it was quite a while before he did. His muscles were clearly very sore.

On that day, the instructor didn’t explicitly close the loop. He seemed content to have found a way to get through to this student that classes were not his to disrupt and there were things the instructors could do that the student didn’t like. But years later, I saw a larger lesson in the choice of that particular exercise. Lifting that light sword (or the pencil or ruler you tried this with) is nothing. It’s really nothing at all. No effort. Anyone can do it. And at first, holding it is nothing also. If you had never lifted a pencil before, and you met someone who was struggling after holding one for many minutes, and you tried lifting a pencil yourself, you would be really puzzled. “Why are you complaining? This is super easy. There’s nothing to it! Anyone can do it!” The student’s misbehaviour was like this. Each little thing – the funny comment, the silly face, doing the move backwards – was in itself nothing. Easy to deal with or ignore. Not a problem. But enough of them add up. Just like the time holding the light weight. It becomes hard. It becomes painful. It becomes unbearable.

I really urge you to try this. How long can you hold the pencil or ruler out before you start to feel an effort? Before it hurts? Before you physically cannot do it any longer? Try predicting these times and then doing it.

The world is full of things that are trivial and nothing if you only experience them once, or once a decade, for a few minutes. It can be nearly impossible to imagine that these trivial things could ever add up to something painful. In 1970 (yes! 50 years ago!) a university professor coined the term microaggression for tiny moments of “you don’t belong” aimed at racial minorities, disabled people, women in male-dominated industries, gay people, and so on. People who haven’t experienced a steady diet of “you don’t belong”, however mild, often literally cannot imagine how it could add up to something painful. Sure, maybe you wince for a moment when someone assumes a group of developers are all male, or all straight, but it’s no big deal, right, and I’m sure the women know that when we say “men” we mean everyone, and the gay people know that when we say “wife” we mean wife, husband, partner, whatever. On its own, one tiny moment of “the only people I have to consider are X” is a little needle for people who aren’t X, but it’s such a tiny needle, who would complain, who would object, there was no nasty intent. Think about holding your arms out for 10 or 15 minutes and then think again about exclusionary language, policies that assume only married people have children, asking people “where are you from”, telling someone “you don’t look like a software developer”, making jokes about people’s weight or appearance, and all those tiny tiny little things that are nothing once, but that truly genuinely add up over time to real pain.

And then ask yourself: if it really doesn’t matter whether you say “men” or “people”, then why is it so important you keep saying “men”? That sounds like it actually does matter after all. If it’s no big deal and of course we all know that there are people who differ from you in some way, why are you not prepared to do the work of talking as though such people exist, instead asking them to do all the work of translating your literal words into what you probably meant, or would have meant if you had thought about it? How can you lessen some of the pain and effort other people have to put in all day, every day, day after day? It will be no big deal to you, right?

Kate

Monday, 08 March 2021 12:44:25 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 20 February 2021

A lot of people say often "if you're comfortable, you're not learning", "the only way to grow is to get out of your comfort zone", "don't expect to enjoy changing yourself" and the like.

And you know what? This is wrong. Sure, sometimes when you're doing a new thing you don't know how to do, it feels weird and scary and you're a little embarrassed and a little lost. But not all learning is like that. Sometimes learning a new thing is joyful and exhilarating and marvelous. Sometimes you have a teacher who is reassuring and supportive, sometimes you're just discovering connections and trying things that work and it's just fantastic. Don't tell those people they're not learning! Learning can be one of the most pleasant and wonderful things we do. I try to live my life that way both while I'm learning and while I'm teaching.

I think it's some sort of leftover Calvinist thing: we're not supposed to like work, we're not supposed to find joy in good things, we're supposed to push ourselves and do them even though they're horrible. Think of sayings like "No pain, no gain", "Feel the burn", or "They call it work for a reason." Sure, some stuff is difficult and you don't really want to do it but you do it anyway because it's important, or you said you would, or someone's paying you, or you know you want the end result of it. But some stuff is fun and joyful and delightful and you do it with happiness and it's still important, still something you said you'd do, you still get paid, and you still get the end result. I remember teaching someone some stretching exercises and they said with complete surprise "I like doing these! I thought exercise was supposed to be horrible!"

How would it change your learning if you let yourself enjoy it? If you let go of the idea that learning only happens in discomfort? If you could feel yourself improving at whatever you're learning and enjoy that?

But that's not the worst of it. Yes, people are missing out on a ton of joy that they could tap by just sitting up and thinking "hey, I really like my work. learning this stuff is super fun. Wow, what a great time I'm having." But on top of that, there are a pile of "teachers" who basically make you feel bad, and if you object they say you're resisting learning. Fitness instructors who literally make the fat people cry while exercising, because "that's the only way they will change what they've been doing." Activists and influencers and everyone who wants to change your opinion starting with upsetting you and keeping you upset. "hey, don't blame me. If you're comfortable, you're not learning." "If you're happy, you're not growing." First, that's not true. And second, it doesn't then follow that if you make me uncomfortable or unhappy I magically grow and learn. You need to focus on teaching, leading, inspiring, educating, showing, demonstrating, and modelling.

Yes, I may feel clumsy as I learn a new technical skill, lost as I try to understand new facts, embarrassed as I realize things I did wrong in the past. When those come as a side effect of learning, I need to embrace them because discomfort can be part of learning and growing. But there isn't some short cut where you tell me I'm horrible, say things to upset me, and claim that upsetting me is proof you're a great teacher. It's not. There is no need for you to actively try to put me in a bad place. Sure, I may need to be ok with feeling bad as part of learning. But yelling at me, telling me I am not good enough, speaking roughly to me -- these aren't teaching skills. They're psychological tricks and I am not ok with them. Perhaps you truly believe it's important to cry in order to learn. Well, you're wrong.

I'm not saying everyone has to centre my happiness to teach me. What I am saying is that some teachers (and I have names) claim they don't care if they upset others, but that's a lie: they do care. Step 1 is to upset the learners. It's their trick to get people to listen, or to let themselves feel important, or to say they have changed a person by making them feel bad. If you meet a teacher like this, whether it's a fitness trainer, a culture improver at your workplace, a twitter influencer, a tech trainer, or a conference speaker, walk away. You can find someone to learn from who won't emotionally manipulate you as part of the process. You can learn in comfort, or in the discomfort that comes from realizing you have a lot to learn; you're not obliged to learn in artificial discomfort imposed by someone who thinks it makes them a better teacher to do that to you.

Kate

Saturday, 20 February 2021 11:08:23 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 02 September 2020

A little while ago, I recorded a chat with Adam Bell for the CoRecursive podcast. My episode is now published, and it's good. There's a transcript, which needs some help (C++ apparently sounds like syphilis to machine transcription), but will give you an idea of the topics we covered so you can decide to listen. It's definitely a conversation to listen to, with tone of voice and laughter and such being more important than in say, how to write generic lambdas or some other technical topic.

We basically elaborated on the 5 tips I covered in a lightning talk at Meeting C++ 2017, while I was still receiving treatment but knew that it was working and I wasn't dying after all. So the focus is on how to do your work and manage your time more than on anything specifically C++-related. We also talked a little about #include <C++> and the culture of this industry, and what I (with some friends) am trying to do about that.

Take a listen, and I hope you enjoy it.

Kate

Wednesday, 02 September 2020 08:26:16 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 09 June 2020
This year is very strange, but conferences are still happening. And they aren't all free, either. Perhaps there's a conference you'd like to go to, and being online makes it almost feasible for you, but you can't afford the conference fee? If you're a member of an under-represented group in C++, you might win a scholarship to C++ on Sea in July or CppEurope in just two weeks. (I'm speaking at C++ on Sea, so if you win, you'll hear my talk.) The scholarships are arranged by #include <C++> and the application process is pretty easy. Please let us know a little about your background: perhaps you're part of a gender minority,  a racial minority, or in some way you feel that there are less people like you in C++ than there are in the world. If you work somewhere that pays to send you to conferences, this isn't the program for you: this is for people who maybe aren't working, or who are working somewhere that sends other team members to conferences, but not you. Your application should show us that, so we can decide to send you.

More details, including a list of conferences we've sent applicants to in the past, and testimonials from recipients, are on the scholarship page.

Want to contribute? We're ok for these two conferences. But when face to face conferences start again, we'll be raising money for admissions, plane tickets, hotel rooms, and all the other costs that keep people away from the life changing and career changing benefits of conferences. Remember our site for when that is necessary.

Kate

Tuesday, 09 June 2020 18:22:16 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 28 May 2020

Lately a lot of people have been asking me for help as they write C++ code. I’m usually happy and able to help. There are times, though, when I either cannot help, or choose not to help. I thought it might be helpful to explain some of these a little. It’s quite likely that other members of the community have a similar set of guidelines in their heads for when they do and don’t help people with code.

Warning: this is long. I think it's worth reading it all. You want a TL;DR? It’s this: if you want free mentoring and consulting from successful people, you can have it! All you need to do is ask. But if you expect your helpers to do most of the work in helping you, and to take instruction and direction from you, you’re going to get a lot less help than if you know how to be helped effectively.

The first choice is where and how you ask. People often email me, message me on LinkedIn, DM me on Twitter, DM me on the #include <C++> Discord, and so on hoping to get personalized, instant, one-on-one help from me. That’s not a good use of my time. I prefer to help in places where others will see the question and the answer. That helps more people. It also enables more people to help – so it produces better advice as well as helping those people learn and grow. Often, I learn from the times when other people chime in. So I encourage you to post on StackOverflow (if you have the sort of just-one-question, just-one-right-answer problem that fits there), or on the #include <C++> Discord, or some other public place where a number of people can see the question and the answer over time.

The rest of the issues have to do with how much work the person expects me to do, or how much they save me. Think about how you ask the very first thing you ask. Compare “here is a zip of all the files in my project can you tell me what’s wrong with it?” to “here is a link to an online compiler (Godbolt, wandbox, etc) showing a compiler error on line 43 that I don’t understand. Can you tell me how to fix that error?” Expecting someone to install things, trawl through multiple files, guess your question, and then solve your problem and explain it all to you is really too much. At least tell people what your problem is! Often people ask for help saying something like “it’s not working” or “what’s wrong with this?” and I don’t even know if it’s a compiler error or a runtime error or running fine but calculating the wrong answer. So before you post on the discord, for example, try to have a single crisp question, not just “help, it’s not working.”

  • Show us your code, and your errors. And not as screenshots! You can copy the code into an online compiler like Godbolt or Wandbox, or if it’s less than 20 lines or so, paste it into the chat window – but please learn how to format it as code when you do that. Copy and paste the errors as text. That makes them much easier to read, and lets us copy and paste parts of them while explaining things to you. If you can’t show your real code because of how big it is or because it’s work-related, create a tiny example that shows the same problem and show us that. Stack Overflow has some tips on how to do that.  Whatever you do, do not free-type some code into the chat window that you think is the same as your problem, and then whenever people point out missing semi colons or undeclared variables, reply “oh yeah, that’s not really my code it’s just something I typed to give you the general idea.” Compilers (and runtimes) are picky and asking for help with something that’s vaguely like your real code (but not really) is pointless.

Now let’s assume you manage to get a conversation going with someone who is trying to help you. They solved that compiler error, for example, but now you have another one. As part of this process, I often make suggestions to people that they reject. I think they believe the suggestions are to make things easier for themselves in the long run, because they say things like “I can do that once it’s working.” I then have to spend a lot of effort explaining that I want them to do these things so that I can help them get it working. These suggestions include:

  • Write good variable (and function) names. If your variables are all called i, n, c, r, s, and so on – I don’t know what they represent. If I ask you to change those to words like next, rate, total, and so on, or to words you think of yourself, that’s because I can’t understand your code (I don’t know the problem you’re trying to solve) without some help. Good names aren’t a someday thing that you paint over working code once it’s all good. They are how you make code other people can read. And you’re asking me to read this code. Make it readable.
  • Use a debugger. When I ask “have you looked in the debugger to see the value of a before the loop?” an answer of “I don’t know how to use the debugger and I don’t have time to learn that today” is a great way to end our conversation. Real programmers use the debugger. We don’t have some magical compiler-simulator in our heads that can read code and tell you if it compiles or not, and we don’t have a magical runtime-simulator either. Sure, maybe I can tell at a glance that a is 0 before the loop and that’s why it’s not working, but in that case I would tell you so. It’s more likely that I want you to quickly check and see if it’s 0 or not. When you refuse to debug, you’re making it so much harder to help you. You need to learn to use whatever debugger is available to you, and you will probably save enough time today to make up for the time it takes to learn it.
  • Add some tests. You don’t have to go learn a whole unit testing framework. But if you’re writing a function to do whatever, work out by hand what it does for simple values, and write a test harness that passes it those simple values. Then you can debug the test harness and see what the function returns and confirm whether or not it works for simple values. Whether you’re reversing a string in place, calculating the Fibonacci sequence, calculating sums of things, whatever, you should be able to think up simple test cases and test your code with them. And eventually, you should be writing tests as you write your code. It’s a good habit you can build now.
  • Break up big things. You don’t have to embrace full OO or write functional programs, but don’t give me 1000 lines of code and ask me to load it into my head. Write some functions. Heck, throw in some comments and some blank lines. Show the structure of your code so it’s not a wall of text.
Some other good behaviours that will take you a long way:

  • Try the substitutions people tell you to try. A lot of times, people who are having a hard time don’t want to learn a new thing. I run into that situation all the time myself. I’m already frustrated and I’ve spent longer than I meant to and I can’t understand any of it, I don’t want you to tell me to go learn yet another thing right now. I have gained some wisdom over the years though, and it includes this: sometimes jettisoning all that half-understood not-really-working mess and doing something simpler is the best way forward. If someone tells you that vector would be better here, and offers you a few lines of code to use, just digging in your heels and refusing to try it isn’t going to lead you into learning. If you’ve got a problem because you’re trying to manage memory yourself by hand but you forgot about copying and so on, then using a smart pointer, or dropping the pointers altogether and using an object on the stack, is going to make a whole pile of work just fall away. The person advising you to try this knows how much effort it will save. You don’t, that’s why you came for help. It’s really frustrating to see a beginner insist on doing something the hard way (for no benefit), do it wrong, and refuse to accept any help other than “here is the precise and exact code to do that thing the hard way.” I don’t want to do things the hard way any more: why would I type out all the code for you?
  • Try things that don’t matter to you, if the person who is helping you tells you that your code is harder to read the way you have it. Things like initializing member variables in a constructor with the : syntax, not between the braces, or adding some using statements – these may not matter to you, but making things too hard for a busy helper may mean that helper is too busy to help today. Or ever. I don’t want to teach you bad habits, I don’t want to teach you to “pretty things up” only once it’s working, and I don’t want to exhaust myself reading difficult code to spare you the trouble of doing the right thing. Also, when a person asks for advice but never takes any of it because they’re sure it’s not actually relevant to their problem, eventually the advice-giver will stop giving it. It’s pointless.
  • Write your own code. If I tell you “the problem is that you’re not initializing x” don’t ask me to edit your code for you or paste in the new version of the function or whatever. You need to understand what you’re doing and that comes from writing the code yourself. If you don’t understand how to fix a problem that someone has told you about, ask them “how do I fix that?” If you can’t understand their answer, say “I don’t know what [whatever] is, can you explain it or show me?” Don’t just ask “what would that line of code look like?” That feels like you’re asking me to even do the typing for you.
  • Work with whoever is talking to you. Maybe when you first ask, one person has a couple of thoughts, and those are good, but while you’re changing your code to see if that works, someone else chimes in. That’s great. It’s a group chat. Don’t tell them that you’re working with the first person or anything like that to reject their help. Consider all the suggestions you get. If you’re talking to someone and then they stop, that’s cool too. Many people pop into chat for 5 or 10 minutes waiting for a conference call to start, or while they’re eating lunch, and don’t stay long. People get called away from their keyboards. Don’t start pinging the person trying to bring them back or ask if they have any more thoughts or saying you’re still stuck. You can tell the room or channel as a whole that you’re still stuck. Maybe someone else will have some ideas. Your problem may end up solved over an hour or so with three different people. That’s a win!

I know, that’s a lot of advice. Thing is, you can get a lot of help from strangers on the internet, if you ask the right way. If you ask the wrong way, most people will just shrug and say “looks like you have a problem” and move along. They won’t even tell you why they’re not helping you! To get the marvelous free help, and to truly join the community, you have to put in a little effort. Trust me, it’s worth it!

Kate

Thursday, 28 May 2020 16:26:40 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 06 May 2020

Since late February, when I returned from a personal trip to Singapore, my travel and conference world has been shrinking in around me. Conference after conference has been cancelled (or postponed to next year which is the same thing), moved online, or put off to perhaps later this year. Of course, the rest of my world has also been shrinking: for the last 8 weeks I've left the house only a handful of times, and seen almost no-one. I'm sure it's the same for you. So it was quite a surprise to remember that my last conference wasn't actually that long ago: the video of it has just gone live.

This is a shortened version of Emotional Code for students, who don't all know C++ and don't all have a lot of experience with other people's code. I hope you like it. I've also updated my playlist, which has all the talk recordings I know about. If you're looking for conference substitutes around now, perhaps there's a talk of mine you haven't yet seen? Take a look at it now.

Looking forward to in-person conferences and live audio feedback once again,

Kate

Wednesday, 06 May 2020 13:24:13 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 19 January 2020

This week I travelled to Montreal to deliver a keynote at CUSEC 2020, the Canadian University Software Engineering Conference. Everything was nicely arranged and I happily took the train from Oshawa to Montreal, then a short all-inside walk to the hotel where I checked in, told the organizers I was there, and settled in for an early night. I got a light dinner from room service but oddly could only eat half of it. Ah well, I thought, they fed us really well on the train, I'm probably just full. No big deal. I went to sleep.

About 10:30 I woke up and realized I needed to throw up. So I did. And did. And did. All night. For an extended part of the night it was every 45 minutes. It was bad. And then it got worse. Now I am not telling you this to gross you out or to overshare, but to get you, as a possible speaker or conference organizer, to consider this possibility if you have not done so before (I had not.) I felt perfectly normal when I left home, and even when I first arrived in town. Whatever food poisoning or virus got me, it hit fast and hard. When the sun finally dragged itself up over the Montreal horizon and into my eyes, I was exhausted, having not slept all night, and pretty sure I was not done throwing up (which it turns out I was not.) I got on Slack with my organizers and told them I could handle being tired but actually vomiting while on stage was a bridge too far for me. Could we switch with someone scheduled for Day 2?

Of course we could. They did that lovely duck trick, where above the water it all looks smooth and simple and you have no idea what amount of paddling and ruddering is happening underwater. Someone else did an opening keynote; my keynote moved to 11 am Day 2. A much needed bottle of ginger ale appeared at my door. I spent the day in bed and slowly returned to normal. I slept that night and did the keynote the next day, and very much enjoyed the rest of the conference. I didn't shake hands with anyone in case I was contagious. When the AV people started touching my laptop I gave them hand sanitizer.

So, if this happened to you, would you be able to come up with a plan B? Do you travel with anti-nausea meds? (I do, for airsickness, and took some to help me sleep during the day since they sedate me. They had no hope of working during the worst of it, but they still had value.) Do you have a little bottle of hand sanitizer with you all the time? (I do, and always will.) Do you know how to reach your organizers with some urgency when you can't leave your room? Organizers, I hope you would all react as smoothly and quickly as my CUSEC hosts did. Ellen and Afreen were ultra professional, as was everyone else I dealt with.

You don't want to think about it, I know. But -- you should, anyway. It doesn't take long to have a disaster recovery plan. Swapping two keynotes was the obvious choice, and it worked because the keynoters were staying for the whole conference not just popping in for their morning. A little prior preparation can predict proper performance, or something like that.

Kate

Sunday, 19 January 2020 13:57:59 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 08 January 2020

Every once in a while, I make a big change in how I plan and manage my speaking engagements. Early in the last decade, I decided to speak only at conferences I would happily pay to attend, and that improved my life dramatically. Instead of trying to justify a week away from home and the office in which I would try to keep up on emails from a hotel room or a hallway couch, while surrounded by people who didn't care about the stuff I cared about, I started looking forward to a week of learning and growing, of coming home knowing more than when I left, and of meeting my heroes and getting to see my friends.

While this was an important change, it was only a change in my decision criteria, and not in my overall process of deciding where to speak. I would get an email, or see a tweet, or otherwise become aware that a conference was going to happen, and then I would decide, on a case-by-case basis, if I wanted to submit to that conference. Sometimes I would have to decline because I had already submitted to another one at roughly the same time, without realizing the overlap. In mid 2019, I changed that. I listed out all the C++ conferences I knew of, and roughly when they happened. Then my partner and I went through the list, noting when various family events are happening, when we want to go on vacation, and other "big rocks" that conferences have to fit around. We talked about how many conferences I wanted to speak at, and whittled down the list to that many.

Now, as each conference opens a Call for Papers, if it's on my list, I submit, and if it's not, I don't. Of course, my talks aren't always accepted. I set myself a goal to speak at two non-C++ conferences in 2020. I was invited to one, but after I agreed they changed their dates and that conflicted with something else I had accepted. I submitted to another and they declined my talk. But one has accepted, and I have accepted another invitation, so I will be speaking at two non-C++ conferences for sure.

Expect to see me at:

  • January, Montreal: CUSEC 2020 (Canadian University Software Engineering Conference) - keynote (and a Meetup while I'm in town, come ask about technical speaking)
  • March, Bristol, UK: ACCU - Naming Is Hard, Let's Do Better
  • May, London, UK: SDD - Naming and Emotional Code
I have submitted to some for June and onwards, but haven't heard, so I'm not mentioning them, nor the ones I've decided not to submit to. That's not fair to anyone. I might do as many as 7 conferences by the time the year is over, and that's a lot. Plus user group talks whenever I can.

So is there any point inviting me to speak at your conference? Well, sure. It might match up with something else (at least one conference I added to my list because I could combine it with another trip that was already planned) or be so compelling that I will find a way to fit it in. Or it might end up on my list for next year -- I like this advance planning so I'm going to keep doing it. As always, remember that I do have requirements for any speaking engagement, so if you invite me, please let me know you've read that and meet them.

If you're at any conference I am speaking at, please do find me and say hi! It's one of the most important parts of any conference for me.

Kate
Wednesday, 08 January 2020 13:25:46 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 21 July 2019

July 21st, 1969 I (with my parents) moved to Canada for the second time. The first time, I had been an infant, and the move had been temporary: my father was doing his PhD at Carleton University in Ottawa. When he completed it, we went back to England as the plan had always been. We had grown from a family of 3 to a family of 4 in the meantime. But when they got back to England, they missed Canada a lot. So, by 1969, they had found a way for the now 5 of us to return. Originally it was to Ottawa and a job in a government research lab for my father. But within less than a year he decided to take a chance on the very new University of Waterloo and he worked there (with consulting clients and inventions and other side projects) until he retired to Nova Scotia.

I often warn friends who are considering emigrating that if you do, you are likely to raise children who think emigrating is ok: my Canadian-born brother lived in Japan, Europe, and the US for decades before settling in Vancouver. My UK-born sister has been in Ireland, England, and now Wales for a similar length of time. I have two other sisters and one of them has also changed continents a few times and now lives in England. Me, I've stayed put. I like it here and couldn't imagine living anywhere other than the Ontario countryside, though I sure do like to visit other places!

I remember very little of the move and the change of countries. We had been told of the rabid animals (there is no rabies in England) and the importance therefore of never letting a squirrel or chipmunk near you. Also of the cold, which I didn't remember from my first time. While I can't remember any of the moon landing hoopla at all, I do remember one scene from the airport as we arrived. We approached two doors, one for Canadians and one for all others. Well not doors, more like archways in a wall. And some official insisted that my brother go through the Canadian archway. He would have been 6 or 7 and my parents resisted but this official was adamant and said it would be fine. Which it was, because there was no wall between the two areas so it was a separation of a minute or so in full sight. We went through the arches at the same time but when we got through, this official knelt down to my brother's height and said "welcome home, little man" to him. I have other memories, of being bullied at school for my accent, of clashes with teachers who literally refused to teach me things I didn't know because "we covered that last year", of amazing beauty and nature and discoveries of all kinds, but that moment is one of those that really sticks with me. This place is home for me too.

Kate


Sunday, 21 July 2019 07:21:56 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 28 June 2019

I just published a small course on Pluralsight called Advanced Debugging with Visual Studio 2019. It covers IntelliTrace and Code Map, two features that are only in the Enterprise Edition of Visual Studio. Many people don't know about them, so I put together a quick introduction.

Here are some of my other current courses:

  • Visual Studio 2019 Getting Started - what you need as a new user of Visual Studio to start using it. There are a variety of other Visual Studio courses, and pretty much all of the material from my 2017 one is still applicable, so don't take just this one or you'll be missing some really powerful techniques.
  • Beautiful C++: Updating Legacy Code - I really enjoyed writing this course and if you maintain old C++ code, I think it will make your life a lot easier. It discusses both specific patterns to update (and why) and overall strategic approaches (not mechanically replacing every incidence of one pattern with a newer pattern.)
  • C++ Fundamentals Including C++ 17 - this is the go-to course for developers who want to learn C++ today. Whether you never did any, or did some a decade or two ago, this course will cover the syntax, library, and best practices you need. If you've never programmed in any language, try Learn How to Program with C++ instead.
  • Using Stack Overflow and Other Stack Exchange Sites - we all go to Stack Overflow when we're stuck. But a lot of us are bad at it, because it doesn't work like other sites. Take a little time to improve this skill and you'll get better and faster answers. You might even become one of those high-rep users who others admire!
  • Beautiful C++: STL Algorithms - Stop writing raw loops and you will get more readable code with less effort. The library has so much waiting for you and this course will help you make sense of it all.
There are more, but if you take all of these, you'll be in a strong place as a C++ developer. (BTW, only the Visual Studio courses require Visual Studio. All the others work with any development environment you prefer.)

Kate

Friday, 28 June 2019 09:39:32 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 06 May 2019

In early April I was lucky enough to go to Bristol in the UK for the annual ACCU conference. This has been an aspirational conference for me, one I attended before speaking at and am always delighted to attend. This year I was invited to keynote, and it turned out to be the closing keynote, which meant I was not done with all my talks until the conference was over! Nevertheless I enjoyed the week tremendously.

I flew to England overnight Saturday night. People often ask me how, given the fatigue issues I have left over from the whole surviving incurable cancer thing, I am able to travel. One reason is that when I travel, I only travel on travel days. I don’t try to work at the airport, on the plane, etc. I read a book or listen to music or just relax. On overnight flights, I sleep. I also schedule a few days to adjust to the time zone without having to think hard or meet important deadlines, like finishing my talk. On this trip, I spent two days visiting Cardiff, which is actually where I was born, with my sister who is planning to move there. It was marvelous fun watching a family explore and discover their new home town, and going to places I have seen on TV or in pictures.

Tuesday I did a private corporate talk about #include<C++> and diversity issues. It was very well received and I might offer it to other companies as a result. I always buy a train pass when I go to the UK and it got a good workout on this occasion. Back in Bristol I was able to relax and know I was ready for the conference.

After a lovely opening address by Russel, we had an illuminating keynote from Angela Sasse.  Security can’t be left until the end or handled by a separate group who fight the developers. Afterwards I took some time to meet up with more friends and spend some time at the #include table. After lunch, a very good talk from Jonathan Boccara on reading unfamiliar code.  I loved the map analogy and the way he showed using a call stack to increase your mapped area. Then a workshop from Gail Ollis on Helping Developers to Help Each Other which really brought home to me once again how important tactile artifacts – things you can pick up, put down, wave around, put next to each other and so on – can be to encourage open and complete communication.  The recording stops when the hands on part starts – just one of those things you can only get by attending in person. The talks wrapped up with Lightning Talks and I did one – my first time doing so at ACCU. I was not able to stay up for the evening reception beyond a quick “hey! Great to see you!” to a handful of people. There were plenty of talks I couldn’t get to – recordings for me to watch later!

Day 2 started with a Herb Sutter keynote.   I’ve read the paper but was really happy to hear it as a talk, and to hear the motivations behind enabling more people to use the whole language.  Then I needed some down time before my talk right after lunch. I gave an updated version of “Nothing” and as always at ACCU got some great questions that will go into the next version of the talk – or some other one.  Then I kept to tradition by doing the Pub Quiz, entertaining as always for the don’t-write-this-at-work code and marveling at how some folks know a lot of dark corners! Another round of lightning talks and an early night, meaning I couldn’t attend the Bristol Girl Geeks dinner as I had planned.

The Day 3 keynote was low on code and high on insight as Paul Grenyer talked about growing a community while dealing with the ups and downs of life in general.  Then to a fascinating talk by Dom Davis about communicating, with significant meta content that I really enjoyed.  I spent the lunch break at the #include table, and then dove into a variety of little talks – 15 and 20 minute ones. I was starting to tire and didn’t pay as much attention as I should have, but let me recommend Alex Chan’s reminder that the tech we build can hurt people when it’s being used as designed.  I took a break to be ready for the Conference Dinner where I was able to catch up with old friends and meet a few new ones.

Finally Day 4. I started with Kevlin Henney and a talk with a similar title to my “Nothing” but very different content.  Another break, another lunch at the #include table, and then some down time before my closing keynote. I updated the beginning of this talk since the C++ on Sea keynote, and I think this improves it. More great questions after and I think more material to work in there somehow. Then the close of the conference, a certain amount of hanging around not wanting it to end, and up to my room for another early night and to get ready to go.

Sunday all I did was take the train to the airport, fly home (sleeping a little on the plane) and drive home. A lot to process, as always after ACCU. And when I got home, a lot to catch up on, which is why this has taken a few weeks to write up!

Kate

Monday, 06 May 2019 06:57:37 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 22 February 2019

I get a lot of requests to speak at conference now. More than I can possibly accept! This is a marvelous problem to have, and I'm delighted that there are so many relevant conferences and that a lot of them want me to be there. Sometimes if I decline a conference, it's just because I am doing something else in that time frame - I try not to do two conferences in the same month, for example - or the travel would be too far. But there are other reasons, so I wrote a little list of requirements and preferences. If you're running a conference, please check this list before you ask me to speak. If you're a speaker, consider putting your own list together. We can make conferences better!

And yes, I am working on a much longer list of what makes conferences great. It's over 4 densely packed pages right now and likely only to get longer. I will advise any conference-runner who asks me and genuinely wants to improve. Want my opinion of your badge, website, code of conduct, or the like? I'm happy to help.

Kate

Friday, 22 February 2019 10:41:55 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 18 October 2018

We need to talk about the word “guys” and whether or not it means people. Well, to be accurate, whether or not it means people to all the people who hear it. Here’s the thing: it doesn’t. Not to all of them. Maybe it does to you. I used to think it did to me. But now I’m not so sure it ever did. And for sure, there exist some people to whom it doesn’t. Take a look at this really non-scientific poll in which only “hey guys” was actually considered gender neutral: . There’s a whole section of the #include<C++> resources about the word “guys”. 

But let’s rewind for a minute. If you’re a man, you may not have noticed, but in North American and English-speaking European cultures, two things are true, to the vast majority of people:

  • Men means people
  • People means men

As a woman, this is something I have come to learn. Men are people. Women are a special case. People often doesn’t include women. If you think that’s ridiculous, please react to this sentence:

On average, people have slightly less than one ovary
This is an adaptation of a sentence I heard to explain why average is not always a useful measure of a data set. I first heard it as “slightly less than one testicle.” When I told it to someone else, I substituted a feminine anatomical feature, and to my surprise, the man I told it to reacted very angrily. Since then, I’ve tried both versions of the sentence on various people, men and women (I haven’t tried it on the few nonbinary people I’ve met.) When you say testicle, everyone laughs. When you say ovary, women pause for a moment and then laugh. Some men laugh but most get angry. Why? Because people in general don’t have ovaries. Only women have ovaries, and when most people say people, they really mean men, who generally speaking are ovary-free. So this sentence includes a reminder that “the word people includes women and there are as many of us as there are of you.” Which upsets many men. And while they can’t explain their anger, it’s real. It’s actually a little scary.

Yeah but, come on, I can’t possibly mean that, right? I mean it’s 2018. How can “people” possibly mean men? Take a look at these quotes from reputable medical sites:

The American Heart Association says “People at high risk of heart attack should take a daily low-dose of aspirin (if told to by their healthcare provider)” and that “heart attack survivors regularly take low-dose aspirin.”
The Mayo Clinic says, to a nongendered “you”, “If you've had a heart attack or stroke, your doctor will likely recommend you take a daily aspirin unless you have a serious allergy or history of bleeding. If you have a high risk of having a first heart attack, your doctor will likely recommend aspirin after weighing the risks and benefits.”

But it turns out, as WebMD says, “when it came to preventing a first heart attack, different trials got different results. Why? Studies that looked predominantly at men found that aspirin helped. Trials that looked predominantly at women found no effect.” Yet the general-purpose medical web sites are still advocating that “people” should do something that in fact is only helpful for men, rather than for people.

You can see the same thing in almost any store: razors and women’s razors, lego and girl’s lego, hammers and women’s hammers, even laxatives and women’s laxatives. The default person is a man. Women are a special case and are not always included in the general “people.”

Or take a look at these headline examples from a blog entry I recommend reading in its entirety:

  • ...there are so few able-bodied young adults around. They have all gone off to work or look for work, leaving behind the old, the disabled, the women and the children.   [so women are not able bodied young adults?]
  • A 45-year old man has been charged with assaulting his next-door neighbour’s wife   [doesn't she live next-door too?]

So, if people means men, then even if guys also means people, it still means men. So we can argue whether “guys” is or isn’t gender neutral, but for an awful lot of both men and women, “people” isn’t even gender neutral. I think it’s fair to say, though, that guys is even less gender neutral than people.

The key is this: you might mean to include women when you say guys. And most of the room might hear it as including women, too. But some of them will not. And you can’t tell who feels that way. So eliminating “guys” from your vocabulary will improve the experience of listening to you for some people.

How can you do it? What can you say instead? Well in a lot of cases, you can just drop it. For sentences like “What do you guys think?” “What I’m here to show you guys today is” and the like, you can just use “you.” Sometimes you might want “all of you”. “Some guys think” can become “some people think” or get more specific – “some developers think”, “some managers think”, “some customers think” – you’re not only eliminating an irritant from your talk, but you’re being more precise and conveying more information. And you’re avoiding “people” which, as I’ve shown above, isn’t actually gender neutral to most of those who hear it.

If you’re talking in the singular, this becomes even more important. “Some guy asked for this feature so it got added” or “you know somewhere the guy who wrote this is thinking” or “I need a guy from your group to take the lead on this” is just always wrong. Yet the more you say “guys” to mean “bunch of people of whatever gender, I don’t care about gender”, the more you will say “guy” to mean just one person, and those who hear you will hear gender. Instead, you can’t go wrong with “someone”, or again being more specific – the developer who wrote this, for example.

The hard part isn’t figuring out how to reword the sentence to avoid the word guy or guys. The hard part is breaking the habit. I’m working on it, because I think it’s worthwhile. I encourage you to work on it too. Chances are, no-one will ever notice. That’s the thing about politeness and taking the time to be sure you’re not bumping someone with your elbow. No-one ever got off a plane and tweeted how great it was that the person next to them kept their elbows to themselves, or smelled ok, or was quiet. But it’s still worth taking the effort to be the great seatmate, and in the same spirit it’s worth taking the time to change your speech patterns a tiny bit so that some of your listeners don’t feel excluded.

Kate

Thursday, 18 October 2018 22:29:46 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 15 September 2018
Oh my, I am doing a LOT at CppCon. Here's a list:
  • On Sunday, I am doing a preconference workshop (I believe it's sold out now) with Scott Meyers and Andrei Alexandrescu
  • After the precon I will relax at the TShirt dinner. Pack a Tshirt that says C++ (or bring your badge, or a piece of paper on which you wrote C++ yourself) and choose a restaurant from the list on that page. When you arrive, ask where the other C++ Tshirt people are, and make some new friends! I'll be tweeting my plans just before I head out.
  • Then it's back to the Meydenbauer for the Registration Reception. Even if you're on East Coast time like me, make an appearance, see some friends or some of your heroes, there will probably be cake, and you'll be all set for the morning. Knowing the venue a bit is going to make you sleep better, and having your badge already will let you sleep longer.
  • Monday I will be attending talks and working a shift at the exhibitor table for #include<C++>, an organization working to make the C++ community more welcoming and inclusive. Come by and get a sticker! Buy a shirt!
  • If I manage to stay awake, I'll go to Grill the Committee after dinner.
  • Tuesday I have a session called What Do We Mean When We Say Nothing At All? and it's at 9 sharp - but you'll have been in the building for Open Content at 8, won't you? Grab a coffee and come find out how nothing can say a lot.
  • Tuesday night is the #include<C++> dinner and panel! Buy your ticket now, everyone is welcome. You do not need to be a CppCon attendee.
  • Then it's back to the Meydenbauer after dinner for Lightning Talks. Everyone loves the Lightning Talks, they're always fantastic.
  • Wednesday I'll arrive early because there are 3 sessions I want to watch at 9 (thankfully all the talks are recorded)
  • My keynote is at 10. I'm a bit nervous, but I'm mostly looking forward to it.
  • Right after that, I have a panel about interop with managed code.
  • Then I'm going to relax and listen to talks for the rest of the day, and go to the Planners Dinner. And more Lightning Talks afterwards.
  • Thursday I have no talks to give, shifts to work, or panels to be on. I'll be a free attendee ... until the Speaker's Dinner. And there's a planning meeting after that.
  • Friday is JAMMED with talks. And if you live locally, come on down and attend some because it's the open day. I have marked 11 talks in three time slots as ones I want to attend. Not sure that's going to work, exactly.
See why I call CppCon an intense conference? 12 or 13 hours a day, every day. But oh my goodness the things I will learn, the people I will meet, and the fun I will have. See you there!

Kate

Saturday, 15 September 2018 12:26:26 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 03 September 2018

Next year, I'll be keynoting a new C++ conference, C++ on Sea. I'm really looking forward to it. A little while ago, they ran a "tweet why you want to go" contest for a free ticket, and said that if the winner already had a ticket, the conference would help the winner give away the ticket.

Can you guess where this is going? I won the ticket. I already have one, so you can win mine. Here's what you need to do:

  • Choose a way to "give back" to your community before, during and after attending. This might be blogging, tweeting, hosting a local meetup where you talk about what you saw and recommend specific talks for others to watch later, or even activities at the conference like giving a lightning talk.
  • Gather supporting links - to your blog, your repo, your YouTube Channel, the meetup site, and so on
  • If your plan won't fit in a tweet, put it somewhere that it will fit. Include lots of links - I want people to find your blog, channel, meetup etc even if you don't win
  • Tweet me (@gregcons) with your plan or a link to it. I will retweet. Focus on what you will give if you are able to attend the conference.(It's not that I don't care whether you are deserving or can't afford to go or whatever, I do, but I am going to focus on how you will share your good fortune with others.)
  • If you're not on Twitter, post on my public Facebook page. You can't just email me because the idea is to promote those links to blogs, channels, meetups, and suchlike.

That's it! I'll choose someone, probably by filtering to everyone who is offering to do something generous and then randomly choosing one, but I reserve the right to choose the single person who comes up with the most amazing plan. I'll tell the conference that you get my ticket.

Fine print: this is just admission to the conference. Not travel or hotel. Not paid time off work. You'll need to cover that yourself. I suggest that telling your boss you won the ticket because of your community involvement might be quite helpful as far as that is concerned :-). And while I can't force you to keep your promise, I will remember if you do, and that will probably be a good thing for you over and above the rewards of doing those good things for the community.

Good Luck!

Kate

Monday, 03 September 2018 12:32:39 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 09 June 2018

Here's what's coming up over the next few quarters:

  • August 27-30: NDC Techtown (two talks)
  • Sept 23-29: CppCon (preconference day; main conference talks not yet announced)
  • Oct 18th-19th: Pacific++ (two talks)
    • Submissions are still open so if you want to join me in Sydney as a presenter, get on that!
  • Nov 15th-17th: Meeting C++ - I will not be speaking here (I just can't fit it in), but I want you to know it's happening
  • Feb 4th-6th 2019: C++ on Sea (keynote at this brand new conference)
  • April 2019 - ACCU (nothing announced yet, but I plan to be there)

I consider it an absolutely marvelous problem that there are so many C++ conferences I can't go to them all! There are a number of smaller conferences that draw primarily from one country or region, and more meetups than I can keep track of. I'm open to talking at a meetup if I happen to be traveling to a city for business anyway, but I don't think I can get up above 5 or 6 conferences a year, especially if some of them involve keynotes, plenary sessions, or workshop days. It's a lot of work!

Hope I get to see plenty of people in these various places,

Kate

Saturday, 09 June 2018 16:24:48 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 01 May 2018

More and more conferences are making talks available on YouTube. I've decided to put the links on a playlist to make them easier for me to find. You can use it too!

At the moment this includes 4 CppCon talks (2 in 2014, 1 in 2015, I missed 2016 for health reasons, and 1 in 2017), my Meeting C++ keynote, my Meeting C++ lightning talk, my ACCU 2018 talk on simplicity, and both parts of the Munich C++ Meetup version of the same talk. It's in two parts because we had a break in the middle for pizza.

When more of my videos get uploaded, I'll try to keep the playlist up to date.

Other recent appearances include episode 148 of CppCast.

Kate

Tuesday, 01 May 2018 13:20:11 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 19 October 2017
In 2016 I didn't speak at conferences because I was ill. I really enjoyed getting "back in harness" at CppCon this year (my Guidelines talk has been uploaded already, if you missed it) and I am happily looking forward to my next two conferences.

In Berlin I will deliver one of the keynotes for Meeting C++. It will be one of those opinionated talks with stories in it, plus code of course. I love giving those kinds of talks and they're typically well-received, so I am expecting to have a great time. This will be my first time at Meeting C++ and I know it will be a great conference.

The next week, I will be at the 2017 C++ and System Software Summit in Beijing. 8 tracks and over 500 attendees; this is a big conference. I've never been to Asia before, so I am very excited to meet a lot of new people (and some I've known for a while, the speaker circuit is like that) as well as seeing new places and experiencing a new conference.

I'm still thinking about what I will submit to ACCU for the spring. I prefer to do a new talk for each conference or at least to update existing talks dramatically. I will need to make up my mind before I leave for China!

Kate

Thursday, 19 October 2017 08:08:43 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 23 September 2017

This week, I’ve been in Salt Lake City for the Pluralsight Author Summit and the first-ever PluralsightLIVE event. What a great time! This is my first time on a plane in over two years, and it is terrific to be out traveling again.

Pluralsight takes great care of its authors and that started with a lovely box of goodies in my room the first night.

Tuesday we all got together to hear about the past growth and future vision for Pluralsight, and to get a sneak peek at some things that would be announced later in the week. And of course, for Aaron to get a selfie with the authors!

In the afternoon, we had open sessions where we learned from some Pluralsight staff we don’t normally get to meet, and from each other. What makes you a great author in the eyes of your editor and the other people who help to get your material published and live? How can you get your courses recorded faster? Geeky talk about microphones and other tools of our trade, of promo videos on YouTube, and so many other things we all really wanted to talk about.

PluralsightLIVE itself started Tuesday night with a reception in the partner pavilion and an evening event I wasn’t able to stay up for.

That's my shirt being printed on the spot for me!

That's the very popular candy dispenser array.

I’ve been to a LOT of conferences and most of them look pretty generic. Here there was just so much effort showing: the fun activities like huge Jenga, Connect 4, and similar games, the couches everywhere (with power and USB ports so you could charge whatever you needed to charge), the large easy-to-spot-and-read signage, and more. It was clear the organizers were really caring about the wellbeing and happiness of all the attendees.

There were a lot of keynotes. Wednesday and Thursday both had keynotes the whole morning, and Thursday also had an afternoon keynote. These were entertaining, inspirational, educational, and really worth my time. I was especially looking forward to Joel Spolsky on Wednesday morning and he didn’t disappoint. He was funny and open. He also announced that Stack Exchange users will all get 60 free days of Pluralsight training. I hope some of them use it to take my Stack Exchange course! Then he liked my tweet afterwards so that was fun.

(If you want to take one of my courses, and don't have a subscription, there's a grey rectangle over the right that says Author: click it and you can get a ten-day free trial.)

When I wasn’t in keynotes, I was meeting other attendees and Pluralsight authors. Many of the authors are friends I haven’t seen in far too long, so it was tough to tear myself away, but I forced myself, because meeting learners is what this week was about for me. It was especially helpful to talk to managers and team leaders who want to know how their people are using their subscriptions. The Pluralsight IQ announcement [link] was very well received both by learners who wanted to show off their scores, and managers who wanted to track a team’s progress.

I took the C++ assessment, but I zipped through it a little too quickly and some questions needed more thought than I gave them. Still, I did ok:

After I tweeted my results, a whole pile of my C++ tribe also got their scores, and I even outscored a few! (Plus, I think they found a few bugs in the assessment – I’m going to get them fixed.)

The afternoon keynotes on Thursday wrapped up with Michelle Obama talking about diversity, education, children, and much more. I hadn’t heard her speak before other than sound bites on the news, and I was really impressed. She was warm and funny and willing to show irritation or frustration as well as the polished pleasantness I was expecting.

Next year’s dates have already been announced: the week of August 26th, 2018. I’m planning to be there. If you take Pluralsight courses (and come on, you should be taking Pluralsight courses) then consider it too. There was a lot of good content in a wonderful atmosphere, a chance to meet all kinds of interesting people, and a few days to put learning and growing front and centre – time well spent for me.

Kate

Saturday, 23 September 2017 09:50:51 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 11 September 2017

This year's innovation at CppCon is a Meet the Speakers Dinner Thursday night. It's pretty expensive ($100) because the venue is charging a lot for it, but here's your chance to relax over dinner with many of the speakers from CppCon. If you've registered for the conference but haven't bought a dinner ticket yet, please do! We want to meet attendees and this is a great way to do it. I've been an attendee at speaker dinners at other conferences and I have to say it's always been a highlight of the conference for me. Career advice from Bjarne himself over (excellent) dessert? Yes please!

I can't guarantee you Bjarne (or even me) but you will be asked if there's someone you want to sit with, and the organizers will do their best to accommodate you.

Monday, 11 September 2017 16:01:06 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 05 April 2017

Well, this is exciting!


I was nominated, along with scores of others, but wasn't sure my nomination would succeed, partly because I was so much less active in 2016, and partly because my focus on client development in C++ is not always front-and-centre these days. But I'm happy to report I will continue to be a Microsoft Regional Director until at least June 30th, 2019.

What do RD's do? Well, I've explained this before: We don't work for Microsoft, we aren't really tied to regions, and we don't direct anything. Hence the name :-). We are a group of business-oriented influencers who go beyond technical excellence to really make a difference. Chances are, you know many other RDs already. You see us on conference rosters (and helping to run them), running podcasts (DotNetRocks, among many others), running community events, leading companies that are moving the needle when it comes to what technology does for the world. The number varies each year as people shift roles and priorities, but it's typically between 100 and 200. Far less than the number of MVPs. It's a heck of a club to be part of, and I'm delighted that I still belong.

Kate

ps: If you're looking for me on the RD map, you have to look in Wales. Whatever mapping tech it's using just can't handle there being more than one Pontypool. Sorry about that. In reality I'm just outside Toronto, Ontario.

Wednesday, 05 April 2017 12:25:38 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 27 February 2017

Tl;dr – I have (had?) Stage IV metastatic melanoma. This is a diagnosis whose current “5 year survival” rates are about 5%, meaning that 95% of people with this diagnosis die in 5 years or less, generally a lot less, regardless of the treatments they attempt: surgery, radiation, chemotherapy. However, that is entirely based on people diagnosed more than 5 years ago, and everything has changed in the last 5 years, making that number obsolete. I have had a very challenging summer and fall 2016. I have a fantastic result though: using treatments that have become available only in the last 5 years, I have seen my tumours shrink, and many of them disappear.  My symptoms are almost all gone, I am not taking any pain medication, I am exercising regularly and my energy levels are almost back to normal. My treatment continues, and my life is not entirely normal, but it is amazingly great. I look forward to returning to work, though I am still not sure when that will be. We live in the future.

So details, for those who want details. In hindsight, my first symptom was fatigue in the fall of 2015. I came home from an amazing 5 week transPacific trip, and within days was in bed with a wicked cold we all called the Chilean Death Flu. When I got over that, I had to work long hard days to get ready for CppCon, then was at CppCon running days from 8am to 10pm or later, so not surprisingly I was exhausted by the time that was done. But I never really got over that exhaustion and got back to my regular energy. This is a hindsight thing, because fatigue is a cancer symptom, but I never went to the doctor and said “I’m so tired, let’s find out why.” In January after a dentist appointment, I noticed a slight lump and soreness under my chin, but I forgot all about it as the rest of my busy life continued to happen. By April, I had noticed it again (it was larger) and this kicked off a round of medical things that just kept escalating. Blood tests, ultrasound, cat scan, biopsies, more cat scans, pet scans, MRIs, more biopsies – oh, many many more biopsies – and never any conclusions. I had to cancel a headline appearance at an August conference, and scale back my CppCon commitments a bit at a time, eventually deciding I couldn’t even attend. Through all this, the lump, whatever it was, kept growing. It was starting to hurt. Eventually, I had surgery to remove it, enabling all kinds of tests to be run on the removed material. Throughout this I kept the process private, discussing with only my very closest family members. Because I didn’t know what I had, I didn’t want to tell colleagues, clients, conference organizers or even friends “I may be sick, or not, and if I am it could be anything.” So I kept it to myself.

It was September when I officially got the news. The now-removed lump was melanoma. Since it wasn’t presenting on the skin (as a mole or other visible surface blemish), it was a metastasized melanoma. And since the cat scans showed that lumps (growths, nodules, masses, lesions – doctors almost never say tumour) were also in my lungs (and getting larger between scans), it was Stage IV, and distant. Here’s Wikipedia on the matter:

When there is distant metastasis, the cancer is generally considered incurable. The five-year survival rate is less than 10%. The median survival is 6–12 months. Treatment is palliative, focusing on life extension and quality of life. In some cases, patients may live many months or even years with metastatic melanoma (depending on the aggressiveness of the treatment). Metastases to skin and lungs have a better prognosis. Metastases to brain, bone and liver are associated with a worse prognosis. Survival is better with metastasis in which the location of the primary tumor is unknown.

Literally every time I met a doctor in September, they told me another place it had spread. There was the unknown primary, which my own immune system had already cleared away. The neck lump. The lung tumours, first detected in May and having multiplied and grown all summer. The liver. The spine. The surgeon had no more to offer me – there were too many to consider removing them. The radiation specialist also didn’t want to do anything – the neck lump might come back, but “it’s not a survival issue,” he said, meaning that I would doubtless die from the lung or liver involvement, or some other new lump, long before any regrowth of the neck lump had a chance to hurt me. And radiation to the neck would ruin my voice and quality of life. They both repeatedly used the word incurable, just as Wikipedia does. One of them praised me for crying “because it means you understand.” I made lists of paperwork to update (our wills) and find (my life insurance policies) and started thinking about what music I wanted played at my memorial ceremony. After all, those facts are pretty cut and dried. If the median is 6-12 months, you have some months. Maybe 18 months if you’re super lucky, maybe 3 if you’re not. It’s actually a lot of work to “get your affairs in order” and I was super tired and found thinking very difficult, so it was even harder than you would think it would be.

But, here’s where things take a turn. The surgeon told me that things have really changed for melanoma just in the last few years. That great strides are being made. The radiation specialist told me that what I needed was something systemic that would attack everything at once. They referred me to a medical oncologist. And he was like no-one I have ever met.

For one thing, he looked at me – my face, not his feet or my feet – when we talked. And he smiled. He told me I had come to the right place, and that he knew what to do for me. He’d already run some tests on the lump and ruled out one set of treatments, but felt I was a very good candidate for another set. This involved being in a study, getting a treatment that was technically experimental. (Technically because it involves combining two drugs, both of which are already approved in Ontario for treating this, but the combination is not. Since then, the combination has been approved in the US. Things are moving quickly in this area.) He started talking about what percentage of his patients survive and I interrupted him (probably a bit sulkily, because honestly I wasn’t having a great month) and said “for a while, anyway.” He grinned. “I have patients who I have to wait for them to die of old age so I can declare them cured. That’s my plan for you.” So then that was all three doctor’s offices that I cried in, but this time because he gave me hope.

So that brings us to the weird world of cancer and what “cured” and “curable” and such mean. The gold standard is to simply be alive 5 years after you’re diagnosed. That is why diagnosing “early” increases survival rates – not only because people live longer than they otherwise would have (sometimes they do, sometimes they don’t) but because the survival time is measured from diagnosis, not from when some particular stage is reached. If you are diagnosed a year early and nothing changes about the age at which you die, you still survived a year longer after diagnosis than you would have with a later diagnosis.  At first, there was so little that could be done for cancer that basically you either lived or died, and if you managed to still be alive after 5 years, you would almost certainly go on to die of something else like a heart attack or old age. But now people are being diagnosed so early, and even very aggressive cancers are being held back for a while, that the 5 year mark isn’t necessarily a sign that you’re cured. Doctors like to tell people they’re in remission if they don’t happen to have any tumours at the moment, a word that carries with it a promise that the cancer is pretty sure to come back later. You really can’t draw any conclusions about cancer in general, but there may be some stats available about your particular type and stage of cancer.  

So, in order for the official cancer folks to think I’m cured, I need to live 5 years after my diagnosis. It has barely been 6 months. So I’ll be waiting a while on that. And anyway, some folks are now more interested in “progression free survival” which is not only being alive, but not “progressing” during that time – getting new tumours, or having your old ones grow. You also hear about disease-free survival, which is having no symptoms and no signs of tumours on your scans, and event-free survival, which is not having “events” such as needing a surgery, or even reporting a particular pain. There seems to be a belief that three years of disease free survival after melanoma means you can relax, it’s not coming back. I guess for me the clock on that has only recently started, but I’m getting ahead of myself.

So, according to the current definition of cured, nobody gets cured of what I have, because the people diagnosed 5 years ago and earlier are the only ones whose outcomes are considered, and they pretty well all died. (I’ve had friends tell me stories of people who died of melanoma 5 and a half years after diagnosis, making them count as survivors in the cure math, but not, in the end, surviving it.) So it’s incurable. But in the last 5 years, they’ve started an entirely different kind of treatment, which works, and people on this treatment see their tumours disappear and their symptoms stop and they just return to their regular life. For how long? Well, it’s not possible to know yet, since the number of people who have 5 years of disease free survival, or even three, is very small. It seems like a forever cure. But it can’t be declared one because there just hasn’t been enough time go by yet to draw that conclusion. And that’s why the medical oncologist says he is waiting for his patients to die of old age. Only then can he conclude they never died of the cancer coming back.

Right, diversion  over, what is this treatment I was offered? The two drugs Ipilimumab and Nivolumab. They are monoclonal antibodies. They work by getting your immune system to remove the cancer. This is entirely different from chemo, which poisons the cancer and most of the rest of you too. People's immune systems clear away small cancers all the time. For example, I must have had a "primary" somewhere on my skin. I never saw it, my doctor never saw it, so I must have cleaned it up - although unfortunately not before it spawned off some more cells. That’s normal, a melanoma forms, it gets tidied up.  The observation on Wikipedia that people with unknown primaries do better is probably related to people with unknown primaries having a proven ability to clean melanoma away. The recent breakthrough is understanding that when tumours get to a certain size, they prevent the immune system from cleaning them up – they develop a sort of “cloaking system” that keeps the immune system away. So these two drugs, one ramps up your immune system and the other interferes with the preventing so the tumours no longer defend themselves against (or hide from, or turn off) the immune system. My body just has to do what it did before and clear it all away.

I am in a study because these drugs are not yet approved in Canada to be used in combination like this, though each are approved alone. They have already done studies comparing dose levels of the drugs and found, rather unexpectedly to me, that people getting different doses have the same success rate. This study is to see if they have the same side effects. Personally, I consider that aim secondary to getting me cured, but that's the technical aim of the study. The side effects from these drugs are all the same - inflammation and overactive immune responses. That might mean a rash, or swelling of something. If your eyes swell, that's not as bad as if your heart swells, or your thyroid. I had to commit to being able to drop everything and head to downtown Toronto if I get any kind of side effect at all. That means I can't travel for the duration of the study. The side effects, I was warned, may also keep me from working or from doing some of the things I normally do. So far 100% of the study people get side effects, the issue is only how severe they are. I may end up treated with steroids if they get too bad. As a side note, I understand that these drugs alone (not counting the time and effort of doctors, nurses, scan techs, and so on) cost about $200,000 a year. Being in the study means that the study sponsor, not the Ontario health care system, covers the cost of the drugs. There’s no cost to me for any of it; my only expenses have been hundreds of dollars on hospital parking (don’t get me started), cab and transit fares, and the occasional overpriced food and drink from hospital food courts.

So far, I’ve been extraordinarily lucky about side effects, having by far the least of anyone in the study locally. I may have some thyroid damage, but that’s all. Nonetheless the impact on my day to day life has been total. Working became impossible – partly because I was constantly going to downtown Toronto for appointments, and partly because of symptoms I began to experience as the tumours grew and spread. In less than a week I went from popping out for a 2 km hike while my Thanksgiving turkey cooked, to being unable to get out of bed. I spent weeks at a time in bed. I spent almost a week in the hospital after I got severely dehydrated, possibly because of the liver involvement messing with my metabolism. I pulled muscles coughing (because my lungs were full of tumours) and I may also have cracked a rib. I was taking medications for pain and cough but I was very ill and very weak. I am lucky to have a devoted husband who has put in incredible energy to give me the support I needed – looking after me at home, carrying more than his share of work both at home and in our business, and driving me to all those appointments. I don’t know how I could have coped without him. I also have a close corps of family and friends who cheered me up over email and Skype, and took care of things I couldn't take care of. I had to learn to let people look after me, which was a very difficult lesson. I haven't mastered it, but I've made some progress.

Then the treatment started to work. The way this shows up is in the form of pain. The immune system starts to attack and clean up the tumours. This is a good thing, but it involves swelling and increased blood flow to the area and such, which manifests as pain. A lot of pain. But it was weird, because we all knew this was probably a really good sign and reason to be optimistic and hopeful. Within three weeks of the first treatment, my symptoms began to improve. I had a setback with some hip pain that turned out to be caused by tumours in my hip and leg bones. It’s unusual for melanoma to spread to arms and legs, and more unusual than that to discover it from pain.  It is typically discovered when your leg bone collapses underneath you and you need emergency surgery with plates and pins and things. They were worried I would break my leg, so I got radiation treatment for a week to give those tumours specifically a hard knock back. The radiation techs asked every day “you have pain meds, right? You have enough? You need a refill?” and within a few days I found out why. The pain when the radiation starts to blast the tumour apart, and the immune system comes sweeping in to clean it up, is, well, memorable. And I know precisely how long it takes my opioids to start working from when I take them, as a result.

Another diversion, this one on metaphors and visualizations. I reject the war/fight/battle approach to diseases and to cancer. My leisure time involves a lot of outdoor activity – bike rides, wilderness canoe camping, hiking, that sort of thing. When you’re trying to ride your bike up a long, steep hill, you are not in a fight with the hill. You are not battling the hill. It’s simple: the hill doesn’t even know you are there. The hill doesn’t care. The hill isn’t steep at you, for you, because of you. It just is. When you’re paddling a canoe into the wind, the wind isn’t blowing in some sort of spiteful attempt to keep you from that amazing beach campsite. The wind doesn’t know you’re there, the lake doesn’t know you’re there. You can “win” or “lose” – get to the top of the hill, make it to the campsite, give up and turn around because there isn’t time to do it now – but the hill or the lake doesn’t win or lose, or even engage in this alleged battle in any way. Things can be very difficult without being a fight, a battle, or a war. In the same way, cancer isn’t a side in a fight. My tumours aren’t trying to kill me. They aren’t co-ordinating with other people’s tumours. There is no communication or plotting between elements of my disease and elements of someone else’s disease. Neither cancer in general nor my tumours in particular will feel some sort of sting or loss when I “win” and they won’t exult if I “lose”. They aren’t battling me, and it doesn’t really make sense for me to battle them. I can’t kick cancer’s ass because cancer is heartless, mindless, assless. My metaphor is more about cleaning up. Something is wrong in my body – things are growing where they shouldn’t, and this can be very dangerous, don’t get me wrong. Growths that squeeze vital organs keep them from working. Growths that eat a hole in my leg bone can result in the bone crumbling and collapsing underneath me. This needs to be fixed. This needs to be cleaned up. My immune system can do that, but it needs some help, and the medication is providing that help. I can imagine the lumps and growths being taken apart and tidied up by white blood cells and other immune components of my body. When I feel the pain of a flare that indicates a response is happening, I focus on imagining that process in action right where I’m feeling the pain. I take care of myself, push myself hard when I need to, ask the right questions, report the right details to those who need them, and do the work of getting better. It is hard, really hard, and I do contribute to my recovery, as well as being a very lucky person.

By December I really could tell I had turned a corner. I wrote in a family email update:

My third treatment is in the books and the fourth is scheduled for the Thursday before Christmas. My first scan since the treatment began will be in early January, and then I guess I will have an appointment where someone will tell me what they see on the scan. My expectation is that they will see dramatic shrinkage if not outright disappearance of all the growths and lumps I was told about through the fall, putting me in the 80% of study members who “respond” to the treatment. From my point of view, I ask “where is my cough?” – totally gone. “Where is the belly pain at the bottom of my ribcage?” – totally gone and they can poke my stomach in an exam and it just feels utterly normal like before I was sick. “Where is my fatigue?” – gone. I am not napping. I am out of bed every day and out of the house if I need to be. I can go shopping. Heck, yesterday I went to Costco. That’s right, Costco in December. That probably tells you all you need to know about my energy levels.

We then had Christmas and New Years and I had a scan and met with my doctor – the grin on his face as he came into the room told us all we needed to know. He actually took us out of the exam room to see my before and after scans on a monitor. As I wrote to family, quoting him:

“Here in the lungs, this and this and this, these are tumours. These are blood vessels don’t worry about those. That is a rib. Now over here see? The tumours are gone. Here there was a big blob of something, that’s gone. Now down here to the liver, see how swollen it was? On this side you can see it’s back to normal size. And tumour here and here, over here now you just see a small shadow in that place, probably a hole left behind when the tumour was gone.” And so on.

We came up with a plan to wean off the pair of pain medications I was using, which worked, and other than Tylenol for a headache occasionally, I am taking no pain medications at all. The radiologist opinion, which came later, is a little more conservative, but uses the word “disappeared” fairly often, along with “marked improvement” and “healing”. Overall, the reports show a very good response. Alas, the “whole body” cat scan didn’t include my hip, so I don’t know how things are going there. But my overall colour and energy makes it clear that I have had an amazing response. They don’t see anything new. Everything they used to see is going or gone.

The only question remaining is how long to keep treating me for.  We have switched, as scheduled, from Ipilimumab and Nivolumab every 3 weeks to just Nivolumab every 4 weeks. I have had one and will get at least one more treatment, then depending on the results of the scans after those, they might stop or keep going to 4 treatments or as many as 13. They really aren’t sure how long to treat people for. Some people are better forever after just one treatment – these are folks with terrible side effects who can’t have a second treatment. At first they kept treating people who could tolerate the meds indefinitely, then they decided two years was sensible, then one year, now … well, we’ll take it as it goes.

I’m still essentially side-effect free. I’ve lost a lot of weight: 25 pounds or more since the surgery, most of it in a single unpleasant month, and I had slowly and deliberately lost 35 pounds over a few years before that. I am already starting to regain some of my muscle, lost during all the bedrest. I am sleeping well too, having finally shaken the effects of a lingering “Christmas cold.” (It might have been the flu – there was an outbreak, and I couldn’t have a flu shot this year because of the immunotherapy.) I am cleared to drive again, since I’m off all my pain meds now, and I can have a glass of wine from time to time should the mood strike me. My thyroid levels were low, so I’ve started thyroid meds. They’ve come back to normal on the meds, and I don’t know if that will end up a life-long thing or not. It’s a pretty minor effect overall – plenty of women my age take thyroid meds every day. Low thyroid levels cause fatigue and cold sensitivity, both of which I had in early January, and which seem to have improved since I started the thyroid meds. I had been losing hair, not at the levels you see for people on chemo, but noticeable, and since I started the thyroid meds, that has gone back to normal too. I have enough energy that I could travel to Waterloo for a C++ Meetup in February, my first "public appearance" in perhaps a year.

So that is where I am. My tumours are dramatically shrunken or gone, and may never come back. Bone is growing back where tumours ate it. My symptoms are gone. I don’t know how much longer I will be treated for, or whether more side effects will still arise, but I can start to build my way back towards a more normal life. I got better. I was told I had incurable cancer, Wikipedia told me less than 10% survive it even for 5 years, I could expect to live for just months, and now, less than 6 months after being told that, I’m better. It’s weird. Wonderful, but weird. This is like being around when insulin was first being used, or antibiotics. It changes everything. I should probably have been dead by now and instead I feel the way I did before I knew I was sick, or perhaps even a little bit better.

I decided to share all of this detail for a few reasons.

  • People are curious – I get emails asking if I’m ok, how am I doing, sending me good vibes and such from folks who really don’t know what’s happening but know something is. I would like all of them to know I’m ok now, even though I still can’t travel.
  • People are unaware how much things are changing in the world of cancer treatment and research. I still shudder to think what would have happened if I hadn’t ended up referred to the particular doctor I ended up with, and had instead only been offered the old (useless) treatment. I like sharing the success story so that other people will know about it.
  • It’s a very happy story and everyone who knows the details is really happy to know them, so why not share that more widely?

I will still be less active than usual for a while, but I am working my way back to being my old self.

Kate

Monday, 27 February 2017 14:04:42 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 04 January 2017

I had to curtail my activities pretty dramatically in the second half of 2016, even in areas like mailing list participation or answering questions on StackOverflow. I was beginning to wonder if I would qualify for Visual C++ MVP again without conference talks or some of my other usual activities. No-one should ever assume they will be awarded; the program is always changing and our lives are always changing, so anyone can find themselves out of sync with the requirements of a program. However, I'm happy to learn that I have been renewed for 2017 and will continue to be part of this active community.

Looking forward to a terrific 2017,

Kate

Wednesday, 04 January 2017 12:08:17 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 16 September 2016
It has been a very busy summer for me. Mostly it's been great, with family visits from all over the world and the wedding of my oldest child. But there have been some challenges, too. Without going into details, I've had to cancel plans to speak at (and even attend) CppCon. This is really sad - CppCon was the largest C++ conference ever when it started in 2014, and has grown remarkably ever since. It's a place where I learn new things, make new friends and contacts, and meet old friends for a wonderful week of laughter, in-jokes, and brain-stretching.

I am hoping that within a few months, I'll be "back in the saddle" again and planning a 2017 full of speaking and learning. In the meantime, I'll be following #CppCon on twitter, and watching the YouTube channel for new videos - the plenaries and keynotes get up really fast. If you're not there in person, be there virtually like me!

Kate

Friday, 16 September 2016 10:59:08 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 26 February 2016

Our longest-serving employee, Joyce MacDonald, has worked her last day with us. She’s moving away to the other side of the country, where I don’t doubt another firm will soon find themselves blessed with her skills. Joyce joined us full time 16 years (and one month) ago, and had been working part time for us long before that. From the very beginning, every task that she took on she transformed and improved. We needed data entry when we were building a website for a local real estate firm; she took the procedure for adding a listing and kept streamlining it – open these three files at once, copy this once, then paste it here, here, and here – until she had cut the target time in half and then in half again. Later, she helped to develop our Quality Procedures and to bring order to chaos in our software development process as we moved to agile and changed our client mix. She helped our developers to become more organized, to report progress more thoroughly, and to test before committing or deploying. She trained our clients to think about what they really needed and to consider the consequences of what they were asking for. I have never met anyone who cared as much about the success of the firm as Joyce. We’ve employed dozens of people who’ve done good work, worked hard, and cared about our clients. The majority of them, like the majority of people everywhere, never gave much thought to whether the company was doing well, except perhaps to wonder or worry if their job was safe, or if there would be money to spend on perks. I’m not complaining; I think that’s perfectly normal. Joyce is wired differently: it’s fundamentally important to her that things are done right, that the client gets what they want, and that the company makes a profit. That’s what just has to happen, and it’s generally what she’s able to make happen.

Joyce started doing data entry and office administration but quickly moved into more complicated tasks. She’s been managing projects and client interactions for a long time. She also made sure that people did what they were supposed to do when they were supposed to do it, and kept everyone informed and contented. If you’ve ever called our office, you’ve probably talked to her. She’s probably reassured you about something and made sure it got taken care of for you. She has her PMP now, which formally recognizes how well she manages projects, gets requirements out of customers and organized in a way we can all understand, and builds appropriate processes for developers to follow. She’s taken on the challenge of managing not just seasoned, well-behaved, adult developers, but also students and our own grown children, who are not always easy to control. Let’s just say they meet their deadlines for her :-).

Losing Joyce to the west coast hasn’t been a total surprise for us. When we came back from the epic Pacific trip, she got the opportunity to move and though she delayed it, we rather knew it was inevitable. Over the past 6 months or so we’ve adjusted the balance of work we take on so that our remaining clients will be those I can handle client support for, and whose projects I can manage. (Brian will continue to be an architect, developer, and star debugger who doesn’t have to talk to the clients.) For our clients, nothing much will change. For us, there will be a hole in our lives – personally and professionally – that will take a while to settle down. When she joined us, Joyce was a neighbor (I believe we first met in the summer of 92), and for a long time she walked or rode her bike to work in the office attached to our house. Our kids have grown up together. When stuff happens, Joyce is the one we talk it through with – business and not-business. We were able to go to the other side of the world for five weeks, often with no internet, knowing the company would tick along fine without us. It’s going to be an adjustment not having her with us every day, not having her to count on. Still, we know why she’s moving, and we wish her all the best in this new phase of her life.

Kate

PS: If you’ve found this entry as part of due diligence in a hiring process, let me be clear: Hire Her. You won’t regret it.

Friday, 26 February 2016 15:53:18 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 07 December 2015

The first keynote at CppCon this year was Bjarne Stroustrup (who invented the C++ language) announcing the C++ Core Guidelines. They are on Github and once he announced them, as Herb Sutter reported in the second keynote the very next day, they quickly became a trending topic across all languages. Here is a description of the guidelines from there:

The C++ Core Guidelines are a collaborative effort led by Bjarne Stroustrup, much like the C++ language itself. They are the result of many person-years of discussion and design across a number of organizations. Their design encourages general applicability and broad adoption but they can be freely copied and modified to meet your organization's needs.

The aim of the guidelines is to help people to use modern C++ effectively. By "modern C++" we mean C++11 and C++14 (and soon C++17). In other words, what would you like your code to look like in 5 years' time, given that you can start now? In 10 years' time?

The guidelines are focused on relatively higher-level issues, such as interfaces, resource management, memory management, and concurrency. Such rules affect application architecture and library design. Following the rules will lead to code that is statically type safe, has no resource leaks, and catches many more programming logic errors than is common in code today. And it will run fast - you can afford to do things right.

To me, these guidelines are the key to getting across my fundamental message that C++ does not have to be hard, scary, complicated, or dangerous. The language may still say “it’s your foot!” but the guidelines, and the tools they can drive, are quite the opposite.

You probably know that Visual Studio has a static analyser built in. (You should, anyway, I’ve blogged about it.) It will catch things like this:

    int* p = nullptr;
    *p = 10;   

But it doesn’t mind things like this:

    int arr[10];        
    int* p2 = arr;

Two lines, two violations of the guidelines – I’m not initializing any of the elements of arr, and then I am using its address as a regular old pointer. Now, there’s nothing wrong with regular old pointers – some people have got quite a hate on for them with the rise of genuinely smart pointers, but pointers are fine. Using pointers to control lifetime isn’t fine, because it’s impossibly difficult. But pointers themselves are fine. What’s not fine here is the “decay” of an array into a pointer – folks from other languages don’t expect that at all, and some marvelous bugs have hidden behind this simple bit of helpfulness from the compiler. So there’s a guideline that says don’t do that. Specifically:

(I’m giving you a picture of code because if you want to copy and paste you should go to the live, always updated, guidelines on github.)

This guideline is part of a “profile” – a particular set of rules that are designed to be enforced and that are supported by tools. Well, when I say tools I might be overstating the case a little. There’s just one tool at the moment, but that could be enough!

This tool, C++ Core Checker, is on the NuGet Gallery. You don’t have to get it from there though. You get it, and use it, from inside Visual Studio 2015. Any version will do. If you don’t use Visual Studio normally, just get and install the Community Edition, which is free and is ok to use for commercial purposes, from https://www.visualstudio.com/ . (Need the fine print? if you’re using it as a person, you can do whatever you like. If you work for a company with less than 250 PCs and less than a million dollars US in revenue, again you and up to 4 of your coworkers can use it for whatever you like. If you work for an “enterprise” company then any and all of the employees can still use it for learning purposes or to work on open source.) Note that Visual C++ isn’t part of the Typical install, so you’ll need to choose Custom and select Visual C++:

So once you have Community Edition or some edition of Visual Studio, make a console application and put in the two bad lines of code. Build it and then also run static analysis on it (On the Analyze menu, choose Run Code Analysis, On Solution.) You won’t get any warnings or errors. That’s your pre-guidelines life. You’re doing something inappropriate and nobody is telling you.

Now, add the checker to your solution. This is solution-by-solution, not a change to how Visual Studio does static analysis. On the Tools menu, choose NuGet Package Manager, Package Manager Console. In the console window that appears, type Install-Package Microsoft.CppCoreCheck and press enter. You will see output like this:

Attempting to gather dependencies information for package 'Microsoft.CppCoreCheck.14.0.23107.2' with respect to project 'ConsoleApplication1', targeting 'native,Version=v0.0'
Attempting to resolve dependencies for package 'Microsoft.CppCoreCheck.14.0.23107.2' with DependencyBehavior 'Lowest'
Resolving actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'
Resolved actions to install package 'Microsoft.CppCoreCheck.14.0.23107.2'
Adding package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.Gsl.0.0.1' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.Gsl.0.0.1' to 'packages.config'
Successfully installed 'Microsoft.Gsl 0.0.1' to ConsoleApplication1
Adding package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to folder 'c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\packages'
Added package 'Microsoft.CppCoreCheck.14.0.23107.2' to 'packages.config'
Successfully installed 'Microsoft.CppCoreCheck 14.0.23107.2' to ConsoleApplication1
PM>

This changes your project settings so that analysis runs this Core Checker for you. Repeat the analysis step and this time the new tool will run and you will get output like this:
------ Rebuild All started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
  stdafx.cpp
  ConsoleApplication1.cpp
  ConsoleApplication1.vcxproj -> c:\users\kate\documents\visual studio 2015\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(9): warning C26494: Variable 'arr' is uninitialized. Always initialize an object. (type.5: http://go.microsoft.com/fwlink/p/?LinkID=620421)
c:\users\kate\documents\visual studio 2015\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp(10): warning C26485: Expression 'arr': No array to pointer decay. (bounds.3: http://go.microsoft.com/fwlink/p/?LinkID=620415)
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

Where it says "type.5" and there's a link, that's to the specific rule in the "type" profile that this code breaks. And where it says "bounds.3", the same - I showed a picture of bounds.3 up above.

Isn’t that great? Come on, it’s great! The tool will add more rules as we move through 2016. I’m going to have a lot more to say about the Guidelines as well. But this is a great place to start.Why not point it at some of your own code and see what happens?

Kate

Monday, 07 December 2015 13:54:57 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 09 November 2015

I have a new Pluralsight course on Visual Studio called Visual Studio 2015: Essentials to the Power-User. It starts at the beginning, so if you're new to Visual Studio it will help you get started, but carries on "to 11" as it were, covering things many everyday users of Visual Studio don't know. Here are the modules, each with their length:

  1. Getting Started (42:08)
  2. Projects and Solutions (13:23)
  3. Namespaces, Folders, and Files(27:03)
  4. Understanding and Personalizing Visual Studio UI Components (26:57)
  5. Exploring Relationships in Your Code(36:41)
  6. Using Search and Find Effectively(28:15)
  7. Letting Visual Studio Help You (46:28)
  8. Basic Debugging Features (24:04)
  9. Additional Debugging Features (44:30)
  10. Working with Designers (39:37)
  11. Useful Extensions (39:54)
  12. IntelliTrace and Code Map (25:57)

If you don't have a Pluralsight subscription, click the Author link over on the right hand side of this blog - click Subscribe, then Start 10-Day trial. That should give you a good idea of how valuable the subscriptions can be. (My company buys subscriptions for my staff, and I use my free author one all the time. It's a great way to learn a new technology.)

My main goal in this course was to have Visual Studio make sense to the learner. There are so many ways to do any action that sometimes when you learn something it seems pointless, and you quickly get tired of learning an endless parade of similar features. I worked hard to put these into an order that would lead naturally through the capabilities of the tool, and put things in context. If you watch all 12 modules, you'll know more Visual Studio than most developers - and you'll have a productivity boost to show for it that should be pretty impressive! Please do give it a try.

Kate

Monday, 09 November 2015 12:18:54 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 08 October 2015

On the Pluralsight platform, subscribers can access a discussion area for each course. The traffic in mine is light enough that I have set up an alert to send me an email for each new comment. I just got one for my StackExchange course that brought a huge smile to my face:

I have actually tried not to use Stack Exchange and stick to other sites.  I had several bad experiences and have not gained any reputation at all on any questions that I asked.  I have even deleted questions due to downvotes or other negative activity.  Well after watching this, I understand the problems that I have had in the past.  I really enjoyed hearing this and knowing the mechanics of how this works [...] I now know more about it to help me find the answers that I need when I am head scratching my way through coding.

When I first started reading I was thinking "here's a comment about how StackExchange is horrible and why have a course on it" - something I hear from some of my friends. But then it took a sharp right turn to the exact reason why I wrote the course. I mean this is exactly the persona I had in mind - someone who needs answers, but because of not knowing the way the sites work, not only isn't getting them, but is having an unpleasant experience and ends up avoiding the sites.

When I decide to write a course I let myself imagine some possible outcomes. This comment is just the sort of outcome I was hoping for. It keeps me motivated to create more :-)

Kate

Thursday, 08 October 2015 17:43:35 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 26 September 2015
Back when I first started going to conferences, the schedules typically ran 9 or 9:30 to 4 or 4:30. I used to bring a book to read in the evenings in case I didn’t like what was on TV. Then I started getting invited to dinners and parties and planning meetings and conference days got a lot longer for me. But what I’ve noticed recently is that conference days are getting a lot longer for everyone. People have come all this way and are willing to pack a lot into each day. I’m writing this on the last day of CppCon where there is content starting at 8am and running until 10pm. There's even content over the two hour lunch break! That’s a long day, and a bunch of them in a row makes for a long long week. So here are some tips for how to handle that kind of week. I’m going to be specific to CppCon, because I think a lot of my readers should attend it, but other conferences will have equivalents to everything I’m mentioning here; I’ll let you do the mapping yourself.

First, have a schedule. Weeks before the conference, mark out what talks you want to attend. Have a goal of selecting two talks in most time slots. Then if your first choice is not as good as you expected, or the room is full and you don’t want to stand, you know exactly where to go for your second choice. Have that schedule in your pocket – on your phone, or on a piece of paper – so you have no lost time figuring out where to go. (CppCon uses Sched, which mails you each day's schedule in the morning, making it easy to have with you.) Don’t be the person who shows up at 9 only to learn there were sessions at 8. Check the schedule at least once a day during the conference in case things are being added. Tip: things are being added, you can count on it.

Second, plan ahead to take care of the physical body that is carrying your brain from session to session. It’s really a simple matter to have a few granola bars and a bottle of water in your bag. If you miss a snack, you can still have something to eat or drink. Bring a light sweater in case you are in the cold room. Bring some painkillers if you might get a headache from sitting somewhere loud. Bring whatever little comforts you need to keep yourself from getting whiny and leaving early to go to your peaceful hotel room and watch TV. (That said, there’s always one day in a one-week conference where I go back to my room for an afternoon nap. It’s the only way I can stay functional during long and intellectually-intense days. Just make sure you’re doing it for a brain recharge and not for something you could have avoided by bringing a small item with you to the conference centre.)

Third, think about how you’re going to take notes. A paper notebook? Bring a spare pen, too. Your phone? Your laptop? Or are you just going to immerse yourself in the experience and use the videos if you want to check something later? Whatever your plan is, bring what you need to be able to use it. Power is always a challenge at conferences – I like to bring an external battery for my phone so it can charge in my bag. Think about what your bag is going to weigh and consider leaving the laptop at the hotel and getting by with a phone and some paper for notes. It’s really liberating not to be lugging a heavy bag, in fact surprisingly so.

Fourth, before you arrive (at the latest, on the plane to the conference) write up your goals for the conference. Do you want to meet people? Specific people, or some number of people, or people from a particular industry? Do you want to learn something specific? (Perhaps this is the year to understand SFINAE, or be able to follow along in a talk that includes template meta programming, or “get” those Haskell jokes people are always telling.)  Maybe you want to tell people about something? Tweet some number of times? Blog some number of times?  Have a plan. Have goals. Check yourself against these goals each morning, and adjust your plan for the day if you need to, so that you move towards those goals each day.

When you arrive at the conference, scout out the amenities. Where are the bathrooms? Are there tables and chairs? Are there tables and chairs with power? On Day 1, pay close attention to the food and drink pattern. Is coffee always available, or only at certain times? Where does the food appear? Knowing this will take away any worry you may be carrying around that you may miss something and not get another chance at it. It will also save you from taking extras of things and lugging them around all day when you don’t really need them. I also like to work out patterns related to what rooms I’ll be in – that I’ll be on the same floor all afternoon, for example. It just makes me feel a little more settled and centred.

Looking after your body doesn’t stop with what you planned and what you brought. I start each day with 5 minutes of stretching which makes a big difference to how I feel all day. I also try to use the stairs instead of the escalators – less lining up and it makes me feel better too. I go ahead and eat the snacks, many of which are not part of my normal day (brownies in the afternoon? bag of chips at lunch?) but not to excess. CppCon has fruit and other options that are not all about fat, sugar, and caffeine, and it’s often a smart choice to go with those rather than the straight-up treats. Try not to get too far from normal. If you normally have 5 cups of coffee a day, then you can do that during the conference, but if you’re a one-cup-a-day person, perhaps don’t go beyond 2 or 3 a day while you’re here. Same advice for alcohol – if you dramatically increase your consumption over the course of the week, you’re likely to feel uncomfortable by the time Thursday or Friday rolls around. The one thing you should be sure to take in more of than usual is water – whether you’re eating more sugar than usual, drinking more caffeine and alcohol than usual, or just walking a lot more than usual from room to room in a conference centre, extra water is what you need to compensate. If you grab a bottle of water at a snack break, hang on to it when it’s empty – typically most conference rooms have a watercooler or bubbler by the door where you can refill that bottle whenever you want. Can’t stand water? Bring something to flavour it with – pick up some powders or drops at home and try them out to see which one you like. It’s way more efficient than hanging around hoping that this is the break they have juice at, or leaving the conference centre on a half hour walk for a convenience store.

As the conference goes on, be aware of how you are spending your time. For example, if you check your email during a session, but then take a peek at Twitter, and then at your personal Facebook – are you even really in the session anymore? Don’t be afraid to leave if this is not the session for you. You can go to another one, or talk to other attendees out in the hall, or go back to the hotel for a one hour nap. Almost anything is better than ignoring a speaker and killing time on your laptop or phone. And if you’re not prepared to leave, then perhaps you just need to start paying more attention to the session – assuming it’s material you actually are interested in. Take a look at those goals you wrote. Have you tweeted recently? Blogged? Learned that thing? Met enough people? Will staying in this session and listening meet your goals, or should you go out to the hall and work on a goal? Are you just chatting with your own coworkers, or someone you’ve known for years? Building and strengthening relationships is great, of course. That doesn’t mean that discussing the football game with your cubicle-mate is a good use of your time at a place you flew 5 hours to attend. Maybe you can walk around and find a way to join a conversation with a speaker or someone else you wouldn’t normally meet. Just standing there listening can be very enlightening even if you don’t end up saying much.

If you’re not normally a tweeter, blogger, or talker-to-strangers, a conference is a great place to start. There are immediate benefits. Perhaps your question will be answered, or your point will be repeated and quoted, or you’ll make a new friend or business connection. This will give you reinforcement for doing that, of course. As you meet your goals, make a record of that, so you can easily answer questions about what you learned or accomplished during the conference. Consider writing a summary when you’re done – for yourself, or for whoever funded the trip. A chronological structure is natural – Monday morning I went to a talk called X and learned Y or met Z, at lunch Monday I talked to A and B who encouraged me to look into C, Monday afternoon I went to a talk on C – but be sure to have an executive summary that reads a little less like a diary. Start writing it during the conference and polish it on the trip home. Once you get back to the office, writing that summary is going to get harder and harder, so don’t put it off.

Attending conferences is a great way to boost your career – when you do it well you learn a lot in a short time, meet luminaries of your industry and people just like you, raise your profile and your confidence, and have a wonderful time. When you do it poorly, you get tired, hungover, lonely, overwhelmed, and bored. Put in the effort to plan and prepare, and you will be in a great position to reap the rewards.

Saturday, 26 September 2015 11:39:17 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 11 June 2015

One of the CppCon sponsors, Bloomberg, is running a contest for students in university or college and giving away trips to attend CppCon2015 in September in Bellevue, Washington:

The series of seven weekly challenges will kick off on June 22, 2015, and each week contestants will be provided a different set of problems to solve via Bloomberg’s cloud-based CodeCon platform. Each week’s winner will earn a trip to CppCon in September. The list of seven winners will be announced and notified via email on August 5.

Interested? You should be. CppCon is a great experience for students and one you won't soon forget.

Kate

Thursday, 11 June 2015 15:38:34 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 12 January 2015

My friend (and fellow Pluralsight author) Kathleen Dollard is coming to town, and will speak at the East of Toronto .NET User Group on "What's New in C# 6.0".

The next release of Visual Studio includes some major language enhancements that every developer should be aware of. Get up to speed on forthcoming enhancements quickly with this user group meeting from Microsoft MVP and language guru Kathleen Dollard.

Join us at 6pm at the Pickering Central Library! Please register at the Meetup page. See you there!

Kate


Monday, 12 January 2015 18:10:01 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 24 December 2014

In my Pluralsight course, Using StackOverflow and Other StackExchange Sites, I cover all the things you really need to know to use the sites effectively and get answers to your questions, or a chance to show your skills. In the last module I explain how to help run the sites yourself, and I suppose you don't actually need to know that to use them - but knowing how they're run can help you understand what happens and why, so I included that material. I didn't include things that are really just for fun.

Right now, Winter Bash is on and it's just for fun. I made a quick video to show what it's about - take a look and let me know what you think. I hope to keep adding more "almost-great" items throughout next year.

Kate

Wednesday, 24 December 2014 10:43:41 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 26 September 2014
One of the things I have to do a lot is send people a biography. Sometimes it's for a conference session, other times an interview, or for the "our team" section of a proposal I'm joining, and so on. You have to keep these things up to date, dropping old stuff and adding new, and nobody actually enjoys spending that time.

I've had a written bio to use for these purposes for decades, and over that time, the reasons for using a bio have changed. In the past it would typically be used in written material, and often for business purposes with large, conservative, staid organizations - governments, enterprises, that sort of thing. So even though I keep it up to date with what I'm doing, it has a really formal tone that's a bit old fashioned:
Kate Gregory is a C++ expert who has been using C++ since before Microsoft had a C++ compiler, an early adopter of many software technologies and tools, and a well-connected member of the software development community. She has over three decades of software development experience in a variety of programming languages including Fortran, PL/I, C++, Java, Visual Basic, and C#.  Her recent programming work is almost exclusively in native C++ and C#, on a variety of projects, for both Enterprise and ISV clients. Since January 2002 she has been Microsoft Regional Director for Toronto and since January 2004 she has been awarded the Microsoft Most Valuable Professional designation for Visual C++. In June 2005 she won the Regional Director of the year award, and she was one of the C++ MVPs of the year for 2010. She maintains strong relationships with the C++, Visual Studio, and Windows teams in Redmond.
Kate is the author of over a dozen books, mostly on C++ programming: the latest, on massively parallel programming with C++ AMP, was published in fall 2012 by Microsoft Press. She teaches .NET, Visual Studio, and C++ (including online courses for Pluralsight) and is in demand as an expert speaker, with numerous cross-Canada tours for Microsoft Canada, and sessions at DevDays, DevTeach, TechEd (USA, Europe, Africa) and DevIntersection, among others. In 2014 she was Open Content Chair for CppCon, the largest C++ conference ever held, where she also delivered sessions. Kate is the founder of the East of Toronto .NET Users group and a member of adjunct faculty at Trent University in Peterborough. Her firm, Gregory Consulting Limited, is based in rural Ontario and helps clients adopt new technologies and adjust to the changing business environment. Current work makes heavy use of .NET and Visual C++ for both web and client development, especially for Windows 7 and 8. Managing, mentoring, technical writing, and technical speaking occupy much of her time, but she still writes code every week.
I've been meaning to do something about that for ages and I finally have! I've written a shorter, more informal introduction that focuses on what I think is important about who I am, instead of trying to get you to figure it out from a bunch of facts about me:
Kate Gregory has been using C++ since before Microsoft had a C++ compiler, and has been paid to program since 1979. She loves C++ and believes that software should make our lives easier. That includes making the lives of developers easier! She'll stay up late arguing about deterministic destruction or how C++ 11 is not the C++ you remember.
Kate runs a small consulting firm in rural Ontario and provides mentoring and management consultant services, as well as writing code every week. She has spoken all over the world, written over a dozen books, and helped thousands of developers to be better at what they do. Kate is a Microsoft Regional Director, and a Visual C++ MVP, an Imagine Cup judge and mentor, and an active contributor to StackOverflow and other StackExchange sites. She develops courses for Pluralsight, primarily on C++ and Visual Studio. In 2014 she was Open Content Chair for CppCon, the largest C++ conference ever held, where she also delivered sessions.
What do you think? Better?

Kate

Friday, 26 September 2014 09:06:36 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 12 August 2014

Earlier this year I flew to Utah for the Pluralsight Author Summit. Spending time with such a great collection of my friends and colleagues, and learning more about how to make a great course, was the real reason for the trip, but I got up early one morning to record a Play by Play video with Geoffrey Grosenbach. He has a genuine skill of getting you to demonstrate your own thought processes aloud and I've enjoyed watching other people's Play by Play sessions a lot.

Geoffrey had arranged for some ancient C++ code for me to poke around in. Mike Woodring came through with the sample code from his 1997 book with Aaron Cohen, WIN32 Multithreaded Programming. Seventeen-year old code it may have been, but it turned out not to be quite as ugly as I would have liked. Still, we put it through its paces a little and talked about how I approach this sort of task.

It came out to about 90 minutes overall so if you have a chance to watch it, let me know what you thought!

Kate

Tuesday, 12 August 2014 13:34:43 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 03 August 2014

How fun is this going to be? (A lot!)

I'm going to speak at this next February! One of my big deciding factors was the other speakers. Erik Meijer, Greg Young, Michael Feathers, me, and one speaker still to be named. It's a small gathering to talk about software engineering. I'm still working on precisely what my two talks will cover, but expect it to include C++, legacy code, best practices, being "modern" in your C++, and related topics. Two days of intensive geekery wrapped around two days visiting the Bahamas! Space is still available so why not consider it? Brought to you by the Code on the Beach people, so you know they know how to do this.

Kate

Sunday, 03 August 2014 10:04:10 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 30 April 2014

Do you think Agile and Enterprise can go together? Are you a senior .NET developer who is looking to lead? If so, a client of mine is looking for you. Their job description includes:

We’ll look to you as a team leader who embraces a solid leadership capacity that has truly valuable impact on our team. In this senior role, you will participate in all aspects of the software development lifecycle including planning, technical design and architecture, construction, documentation, testing and deployment. Additionally, you’ll have a big picture view and the opportunity to play a role in the design.

and they're expecting:

  • Proven and deep experience with different versions of .NET Framework and C#/ASP.NET development
  • Demonstrable experience working on N-tier architectures
  • Solid understanding of the full development life-cycle
  • Knowledge and experience with Agile development methodologies (e.g. XP, Scrum)
  • Champion of agile engineering practices (e.g. TDD, continuous integration, refactoring etc)
  • Good understanding of design patterns and their application
  • Experienced unit testing frameworks
  • Computer Science (or related) degree
  • Knowledge of/experience with Sitecore is an asset
  • Knowledge of/experience with Ektron is an asset
  • Knowledge of/experience with Sharepoint is an asset

Sounds like you? Then get in touch with me and I'll make an introduction.

Kate

Wednesday, 30 April 2014 12:58:02 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 17 March 2014

Office Lens went live in the Windows Phone Store today. I happened to have a list of things to do on a whiteboard in my office, so I gave it a try. I had already taken a picture of the whiteboard to transcribe but I went back to the board with the app installed to see if I could save some time.

Here's the picture Office Lens took (resized to 400 pixels wide)

Here's how that looked when Office Lens cleaned it up and put it in a OneNote document for me (I copied the picture out of OneNote, cropped it and resized it):

Much nicer - the glare spots are gone and the background is cleaner. The skew that resulted from taking the picture on an angle (a defensive action to keep the glare out of the important parts of the image) is also gone. As is, this can go into an email. If my handwriting was neater, One Note could have tried to extract the text from it. But this is a lovely improvement and Office Lens is free, so why not give it a try?

Kate

Monday, 17 March 2014 11:19:16 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 07 March 2014
Over the years I've used a lot of tools to get screenshots. My old standby is Paint Shop Pro (copyright 1991-1997 it says on the splash screen, and I recall I deliberately didn't stick with an upgrade that introduced complicated stuff I didn't want, like layers.) I like it because I can set up a time delay for a shot which lets me get tooltips and the like ready when the capture happens.

Alas, on this Windows 8 machine with a second screen, something confuses Paint Shop and it doesn't capture the whole screen. I experimented a bit with the Snipping Tool that comes with Windows, but it doesn't have a time delay or a keystroke, so I can't get tooltips, context menus, or anything else that requires me to interact with the app before the shot.

I got desparate and started using the PrtScrn button on my keyboard. Your keyboard probably has one. I often type Shirt-PrtScrn but I just checked and the Shift is unnecessary. This captures the whole screen (or both if you have two) and puts it in the clipboard buffer. From there I can paste into whatever I edit images with (usually Paint Shop to be honest) and then crop to the part I want.

So far this is boring. I mean really, this is what you could have done TWENTY YEARS ago. And it's been fine for me except that cropping part. But yesterday I learned about Alt PrtScrn. It gets you just the current window! And if you let go of Alt before Prt Scrn, the alt is not passed along to the underlying app either. This is going to save me some seriously annoying cropping.

Kate

Friday, 07 March 2014 13:00:36 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 23 February 2014

I was invited to speak to some Imagine Cup contestants in Calgary and delighted to accept. I spoke to the teams informally for quite a while about judging and judges and general team tips. I was really happy to see some teams from previous years so I could hear what happened after they entered. If you're a student (undergrad or grad) and would like to enter, there is theoretically still time, but realistically it would have been better to start several months ago since you do have to build working software. Why not take a look at the contest (there are over a million dollars in prizes, and you can get a cool trip somewhere and meet some industry high flyers) and start pulling together a team for next year? There's a pretty good introduction for Canadians on the Microsoft Canada blog.

For those of you who were at the sessions, here are the slides I used in the afternoon. I talked about the new C++ features and why they matter, and demoed C++ AMP as a great motivator for using C++. (I wanted to upload the pptx files, but they're too big for the blog, so I've exported PDFs.)

Kate

GregoryCppAMP.pdf (1.65 MB)

Cpp11and14.pdf (556.51 KB)

Sunday, 23 February 2014 13:17:11 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 28 November 2013

In a word, it was exhausting. But it was also cool from a technical point of view. Here's a still of us I grabbed from the video recording:


The screens in front of us are touch screens. I forgot how much fun it is to demo Hilo on a touch screen. Here's how it looked from my side (sorry about the lunch mess):

And a better view of all three cameras:

You can see that part of my job was to imagine people who wanted to learn C++ on the other side of those cameras. And finally, here's James hard at work getting something onto the demo machine:

I believe this picture immortalizes the moment he tweets about here:



Great day and good fun. Hope everyone learned a lot!

Kate
Thursday, 28 November 2013 18:41:15 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 06 November 2013

If you know someone who wants to get started using C++, and has done at least a tiny speck of programming in other languages (so I don't have to explain what a loop is) then you might want to point them at this free online event:

C++: A General Purpose Language and Library
Attention developers: here’s a painless way to learn the basics of C++ from the ground up, whether you’re updating legacy code or writing brand new, efficient, and high-performance code for new platforms like phones and want to take advantage of C++. You’ll learn the fundamentals of the C++ language, how to use the language and its Standard Library effectively, and how to use the Visual Studio environment for developing C++, including debugging, exploring code, and understanding error messages. This is your starting point for building software in C++.

James McNellis (of the Visual C++ team) and I will spend the day walking through the fundamentals of the language and the Standard Library. We're going to have a great time. Please send us some beginners to keep us company!

Kate

Wednesday, 06 November 2013 17:07:07 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 01 October 2013

I am months behind. I will post some of the stuff I've been meaning to post, but later. Right now I need to make new entries so people can get current information. Remember, never blog about why you're not blogging. Just blog.

Tuesday, 01 October 2013 10:32:44 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 03 April 2013

As it says on the Bristol GGD website:

Our April dinner is being held on Thursday 11th in conjunction with the ACCU 2013 conference.

The event starts at 7pm for 7.30pm, at the Bristol Marriott Hotel City Centre. A few female IT professionals will talk briefly about themselves and their jobs. There will then be time for discussion and networking.

Read more and register http://girlgeeksataccu2013.eventbrite.co.uk/

I can't wait! I'm delighted to be one of the speakers and I'm looking forward to meeting lots of new people.


All are welcome, whether attending ACCU or not. Men are welcome at all GGD but are asked to come in the company of a woman so that women can experience being the majority.

Kate

Wednesday, 03 April 2013 17:54:11 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 27 January 2013

I write a lot in Microsoft Word. A Lot. And much of it is for my own purposes - say a list of things I need to keep track of, or a summary of my meeting notes. I use the Ctrl-F command to bring up the navigation pane, and I click the leftmost tab on that pane to show an outline view instead of the Find dialog:

Right away you can see something useful going on here. The Four section is highlighted yellowy-orange because that's where the cursor is. If I add sub-sections, the outline gets even more useful:

I guess you knew that you could click a heading in that navigation view and the cursor would scroll there. That's mostly what I use it for. But there are some documents that I have in a two column view, so that I can fit more short lines onto a page. (It's a perfect approach for lists that are slightly more complicated than a to-do list, for example.) This two column layout makes it really hard to select one section with the mouse and move it around, especially if it's a section that crosses the column break.

Or imagine a really long document where each of these sections is about 20 pages long, and you want to move "Possible Risks" before "Motivations for the Schedule". You could click at one place, page down a lot, and shift click, but it's awkward. I just learned I can drag and drop sections in the navigation pane! That's right, click on the Two in the nav pane, drag it a little and watch for the black horizontal line:

When you let go, the section has moved (and the whole section is selected):

This saves me so much time and frustration, I just had to share it. Maybe your client apps can offer some truly delightful drag and drop too?

Kate

Sunday, 27 January 2013 18:05:23 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 04 January 2013

Over the last few weeks, I've been accumulating links to appearances of mine, and it seems like a good idea to share these.

  • OReilly webcast: This is a reasonably horrible recording (sound quality and video size) of a webcast I did back in August. It shows why C++ AMP is so cool and why you might care about it. I recorded it to promote the book but I'm not very happy with how it turned out. You'll probably do better with the recording of my Tech Ed talk.
  • Pluralsight interview: This is specifically about my Using Visual Studio 2012 course. You can download the audio or read the transcript as you prefer.  My favourite quote from the conversation:
It’s not just like, oh, I saved five seconds. I can go home five seconds earlier today. It’s that you’re less likely to forget what you were doing because you don’t have to put so much time into the mechanics and you just stay in flow. And to me, that’s a ramping up of two or three times the amount of code I can produce when I use everything the tool has to offer.
  • Dot Net Rocks panel at DevIntersection: Here Scott Allen, Michele Leroux Bustamante, Woody Pewitt, and I discuss whatever we feel like, with occasional leading questions from Carl and Richard, and some Canadian whisky too.

Even though I haven't been blogging much, I have been doing a lot, and I hope these links will help you to discover some of it.

Kate

Friday, 04 January 2013 17:58:45 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 20 November 2012

While I was in Nashville as part of the Dot Net Rocks Roadtrip, we recorded an episode of The Tablet Show. The recording is online now and I'll have to give it a listen myself to remember what we talked about - Hilo, for sure, and C++ AMP, and just generally why C++ can be a great choice for tablet development.

Kate

Tuesday, 20 November 2012 13:30:44 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 03 November 2012

Day 4 was the first time I started to experience what some others had been complaining about with not being able to get into the room for a popular talk. I guess I'll just have to watch the recording.

I remembered to take some pictures of the signage that directed us around to help cope with being in two different buildings plus the tents:



And the map on the ground outside the building:




There were also people holding giant arrows to point attendees towards lunch or shuttles or whatever. It would have been extra-ordinarily difficult to get lost.

Herb's session Friday was everything it had promised to be. I just love the idea of http://isocpp.org/ and I intend to make good use of it when people ask me "getting started" questions.

Finally I had to accept it was ending. They were even tearing the tent down already:




I used the airport WiFi to download sessions to watch on the way home. Good week, Microsoft!

Kate
Saturday, 03 November 2012 12:11:03 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 02 November 2012

One of the stickers for the badge this year was to attend an 8:30 session. I achieved that by going to Alive with activity: Tiles, notifications, and background tasks which, to be honest, I chose as much to see what Kraig Brockschmidt is doing lately as to learn about tiles and toast. But I'm glad I went, because it was a very good talk.

I've come to Redmond so many times, but I never particularly noticed the colours changing. This week they've been spectacular. I had some meetings in other buildings so I was able to get out of the giant lines at least long enough to take pictures of the giant lines :-)




And yes, it rained, but they were ready for that:




I really like the vibe that came from being on campus. Speakers tended to get up from their desks, jump on a shuttle or walk over, pull on the shirt and talk to us. I really got the sense we were being welcomed into their home.

I also went to Tips for building a Windows Store app using XAML and C++: The Hilo project - how could I not, since I was on the project. Excellent summary of some hard-learned lessons and one you should totally download and watch.

Kate
Friday, 02 November 2012 12:00:10 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 17 October 2012

Here's an amazing grand finale to the Dot Net Rocks Roadtrip this year -a full on developer conference in Las Vegas, Dec 9th - 12th.

I love this answer to "What is DevIntersection?"

This three-day conference marks the final stop on the USA leg of the .NET Rocks! Visual Studio 2012 Launch Road Trip! DevIntersection is a developer conference PLUS the recording venue for the last stop of the three-month road trip hosted by Richard Campbell and Carl Franklin. We're bringing together some of the best speakers (and our personal friends) for a conference that is relaxed and educational, plus forward looking as you and your company start to figure out what to do with Windows 8 and Visual Studio for the next few years. Our attendees tend to be .NET software developers plus other members of their teams. DevIntersection is an educational onsite conference for anyone who is attached to a .NET development programming project who is looking to use Visual Studio to develop apps for desktop, web and mobile platfoms.

I have two breakout sessions - one on C++ AMP and one on developing for the Windows Store in C++. No .NET in either one of them; this is a conference for expanding your horizons, after all.

For $1595 you get three full days of sessions. And if you register in October (hurry!) you will also get a new tablet. Build sold out in hours, so this is your chance to get access to deep and current information for developers across the Microsoft ecosystem. See you there!

Kate

Wednesday, 17 October 2012 13:52:31 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 16 October 2012

I love writing courses for Pluralsight. I can reach a lot of people and I know the production quality will be top notch. My most recent course is Introduction to Visual Studio 2012 Part 1. It's aimed at people who've never used Visual Studio before, but even a seasoned user will learn something from it - just use the cool speedup feature to zip through things that are already familiar, like the difference between a project and a solution. I cover some very nice productivity features and there's sure to be something in there that's new to you.

Another recent Pluralsight development is that the MSDN Subscriber benefit has expanded to cover MSDN subscribers worldwide, not just in the US, and five more courses were added. If you have an MSDN subscription, you can watch all these courses free:

  • Agile Team Practices with Scrum
  • ALM for Developers with Visual Studio 2012
  • ALM with Team Foundation Server 2010
  • ALM with TFS 2012 Fundamentals
  • Building Windows 8 Metro Apps with C# and XAML
  • Building Windows 8 Metro Apps with C++ and XAML
  • C# Fundamentals - Part 1
  • C++ Fundamentals
  • Continuous Integration
  • Developing for Windows 7
  • IntelliTrace
  • Introduction to .NET Debugging using Visual Studio 2010
  • Introduction to Building Windows 8 Applications
  • Introduction to Visual Studio 2010 - Part 1
  • Introduction to Visual Studio 2010 - Part 2
  • Introduction to Visual Studio 2012 - Part 1
  • Introduction to Windows 7 Development
  • Kanban Fundamentals
  • Microsoft Fakes Fundamentals
  • Solution Modeling with UML in Visual Studio 2010
  • Test First Development - Part 1
  • Test First Development - Part 2
  • Web Application Performance and Scalability Testing
  • Windows Azure Diagnostics
  • Windows Phone 7 Basics


The bolded ones are mine. Here's how to sign up - do it by Dec 11th 2012 - and get your one year free access to all these great courses!

Kate


Tuesday, 16 October 2012 13:35:44 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 15 October 2012

Hilo is a reference project written in C++/CX for Windows 8 by the Patterns and Practices team. I was delighted to be part of this project and think it turned out very well. I use the Hilo codebase to remind myself how to do certain things when writing a Windows Store app in C++ (something I'm in the middle of doing for another project.) The accompanying document is rich in best practices for Windows 8 development, async work, modern C++, unit testing, and more. Now the latest version has been released, updated for Windows 8 RTM.

Hilo itself is a photo viewer. Before you roll your eyes, bear with me. I actually think it's better than the one that ships with Windows 8. It shows you some of your pictures as a sort of overview:

Click on one to interact with it. You can right-click to bring up both the app bar at the bottom and a nice strip-navigation control at the top:

If you want to see something cool, use Cartoon Effect. This leverages C++ AMP to cartoonize the picture. I've shopped this image a little to reduce the width (pulled the appbar in from the edges) but the cartoon work was done by Hilo - and super quickly.

If you have any thoughts of writing Windows Store apps, and C++ is a possibility for you, get over to Codeplex, download the Hilo code and the .chm file, and get reading!

Kate

Monday, 15 October 2012 13:17:12 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 28 September 2012
I’ve been writing a book, though I swore I wouldn’t write any more books, and it’s finally done! You can buy a Kindle version from Amazon or an e-book directly from O’Reilly today. The paper copies will be ready in about a week and you can order them from O’Reilly or Amazon. The book is published by Microsoft Press, but O’Reilly handles the actual production of the books.


 I’ve got a page dedicated to the book with links for you to buy it, get the code, submit errata, and whatever else you might want. (If you think something’s missing, comment here and I’ll try to take care of it.)

Kate
Friday, 28 September 2012 14:50:54 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 27 September 2012

Two years ago or so, when Visual Studio 2010 launched, the crazy duo of Richard Campbell and Carl Franklin – if you’re a Dot Net Rocks listener, they’re the voices in your head – took their show on the road and drove an RV across the USA holding live Dot Net Rocks evenings pretty much every night for weeks on end. Each city featured a surprise “rockstar” flown in for the occasion. I did St Louis and had a great time. Now they’re doing it again and this time announcing us in advance – I’ll be in Nashville Oct 24th.

Registration is free, and please do register using the big red Register button for your city (I hope to see you in Nashville). You can track them online too and follow the #dnrRoadTrip hashtag on Twitter.

If you’re in Toronto, don’t miss the October 13th Saturday-a-ganza at the Microsoft Canada offices featuring Michele Leroux Bustmante! I know I won’t!

Kate

Thursday, 27 September 2012 14:19:21 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 26 September 2012

I love writing courses for Pluralsight. I have quite a few and am working on more right now. They like to interview their authors about each course. Here's one about my latest for them. If you’ve done the whole course you won’t learn anything new from the interview, but if you’re curious about writing what we’re now calling Windows Store applications for Windows 8 using C++ and Visual Studio, perhaps this interview will help you decide whether it’s something you want to learn. There’s a transcript as well as an audio link.

Kate

Wednesday, 26 September 2012 14:13:20 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 25 September 2012

We now have a Windows Phone application in the marketplace. We wrote it for ourselves, to learn the framework and to give us a way to track how we spend our time. The minute we started designing it, we discovered everyone in the company wanted a different way to track. People who do pretty much the same thing all the time (coding, for example) wanted to track project-by-project. People who work on only one project at a time wanted to differentiate between types of work, like meetings or email or writing documents. We decided to make it as simple and flexible as we could. I was inspired by a story of a time tracking technique involving physical objects. You get 5-10 paper cups and write things on the cups like Email, Meetings, and so on. Then you get 32 poker chips, all the same colour. As each 15-minute piece of time goes by, you toss a chip into the cup. It is supposed to help you understand that you very literally “spend” your time. And at the end of the day you can look in the cups and see where your day went.


If you’d like to track your time like this – hit the + button to toss a “15 minute” square into a particular “bucket” or just hit the falling drops button to accumulate time in one bucket until you change tasks – please try our app and let me know how it works for you.

Kate


Tuesday, 25 September 2012 14:11:21 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 02 July 2012
I'm headed to Australia tomorrow (I won't get there till Thursday though) and I'm going to be doing some C++ talks while I'm there. Both are aimed at folks who haven't been keeping up to date on all that's been happening in the world of C++ over the last few years.

On Tuesday, July 10th, I'll do a free Tech Breakfast on the new features of the C++ language in the standard once called C++0x and now called C++ 11. I'll demonstrate how a lot of these features are already in Visual Studio 2010 and some in Visual Studio 2012. It runs from 9am to 11 am in Sydney, and you do need to pre-register.

Then all day Wednesday, July 11th, I'll do a course on modern C++ development with Visual Studio 2010 and 2012. I'll cover language changes, tool changes, drill into my favourite feature - lambdas - and show some of the cool things they enable, and give you some advice on best practices for writing C++ today. This course costs $300 Australian and will be held in Sydney just once.

I realize many people who read my blog don't need to come and learn this material. But perhaps you know someone who does? There is room in both sessions for more people - and I want to reach as many people as possible, so please spread the word! Registration links for both session are on the SSW page announcing them.

Kate

Monday, 02 July 2012 10:47:22 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 26 June 2012
As I am soon to discover first-hand, Australia is a very long way from North America. So when Adam Cogan makes the trip, he often extends his stay to see more people or places. Last September when we all gathered for //build/, Adam tacked a mini Canada tour onto his North American stay and we got together for a quick chat near my home. Part of it was filmed and (after a long delay to cope with the sound issues) is now available on the SSW TV site.

We talk about C++ and why it has advantages over managed code in some cases, about C++ AMP, and about tablets, leading to this moment:



It's just a 7 minute video, so give it a listen!

Kate
Tuesday, 26 June 2012 02:18:02 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 31 May 2012
Recently one of my staff went to a week-long conference - her first. I gave her some tips before she went and it occurred to me that others might like them too. I hope you'll apply them to a trip to Tech Ed or some other conference where you can hear me speak.

First, here are some links to some other good posts on the topic. Here's me a year ago, pointing to John Bristowe's suggestions for going to a big conference. And here's me 18 months ago, pointing to Joey deVilla's suggestions for meeting people and talking to them. And here's a great question (with an answer from me) on Programmers.StackExchange about networking at conferences. (BTW I met the asker of that question in person at Tech Ed, which was great for both of us.) And here's me four years ago with some details on choosing talks to attend.

Now, here's the super condensed version of my advice:
  • Plan your sessions in advance, at least two per timeslot. Carry a paper list of session names and room numbers so if you decide to bail on one, you know exactly where to run to, even if your electronics are out of battery and there's no wifi.
  • Wear comfortable shoes and clothes, but not so comfortable that you would feel underdressed when talking to a potential employer or other business contacts. You will walk a LOT so choose those shoes with special care. It will be both stinking hot (outside - many conferences are held in hot places at muggy times) and freezing cold (if you end up right under the AC that is set on stun) so have a layering approach.
  • Bring your own bag so you can tell it apart from everyone else's, and know just where to find things you need. Leave as much as you possibly can in the hotel room, to save your back during all that walking and to minimize what you might lose if there's any kind of bag mishap.
  • Eat at the conference - it's a great time to meet people and this is where I usually bump into people I know.
  • Go to the trade show floor, the community area, and the like multiple times. Serendipity will happen but you have to give it a chance
  • Pack a somewhat larger bag than you need to - there is a lot of swag at Tech Ed and first timers can't resist lining up for TShirts and the like. Don't be that person who stuffs it all in the conference bag and checks a second bag on the way home. For one thing, someone may accidentally pick up your conference bag thinking it is theirs. Your conference bag and all your other swag should fit in your main bag.
  • Pack your days and evenings FULL. Don't you dare watch TV in your hotel room! Go to the labs and try something you always wanted to learn a little more about. Download something that was just released and try it. Go to a party. Write up your notes (or better yet, blog them.) Send your boss late night emails about what a great time you're having and how much you're learning. Watch one of the sessions you didn't get to that day and then figure out if the speaker is likely still at the conference and how you can arrange to find that speaker and say thanks for the talk or ask a question. Fill out the evals for the talks you went to. There is SO MUCH you can do while you're on site, so try very hard to do it all. Make the most of the week, make it intense, and you will get more out of it by fully engaging.
  • Try to do at least a few hours of sightseeing - one afternoon or evening - with some friends if you can. Maybe the attendee party is being held in some iconic location? Go to that. Or there's a restaurant in the town that you've always wanted to eat at? Gather a few folks and arrange something. Twitter is great with the conference hashtag - "who wants to go to XYZ tonight?" - I've done this for going on tours too. Gives you fellow geeks to talk to while you sightsee and strengthens friendships if you go with people you only know professionally. But don't overdo the sightseeing - you're here for the conference, remember.

I hope I see you there! The better prepared you are, the more benefit you will get from the conference!

Kate


Thursday, 31 May 2012 11:24:04 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 28 May 2012
I am having a very lucky year. I've been nominated and accepted as a judge at the Worldwide finals of the Imagine Cup. I love being around students, and everything I've heard about Imagine Cup tells me that the energy, excitement, and creativity is marvelous to be part of. While I'm there, I decided to stay an extra day (July 11th) so I can offer my one-day C++ training to those who can't make it to Tech Ed in Orlando or Amsterdam. Here's what I'll cover:
  • Modern C++ with the Standard Library
  • Application Lifecycle Management for Visual C++ 11
  • Leveraging Lambdas for the PPL and C++ AMP
  • Best practices for C++ developers today

This is not a free session, but the price is even lower than the Tech Ed precons since I don't have travel expenses to get down there and see you all. If you live in Australia, please register and take advantage of this chance to come and learn what's been going on with C++ while you weren't looking! And if you don't, I'd appreciate it if you could spread the word to those who do.

Kate

Monday, 28 May 2012 21:04:29 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 10 May 2012
So much C++ news going on lately. Time to clear my queue:

It's hard to keep up with it all! Especially when I'm on a book deadline :-)

Kate

Thursday, 10 May 2012 22:06:29 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 14 April 2012
Like a lot of folks on Twitter, I have a search column open that notices mentions of my name. It mostly catches spammers linking to places my books can be downloaded for free. But lately, there's been something weird:




Here's how that tweet looked originally (about two weeks earlier):



So the strange spam tweets:
  • Have one letter randomly removed
  • Have two letters randomly substituted
  • Lost the + in C++ and replaced with spaces (common when being passed through a URL)
  • Are using the exact same URL as before, so this isn't some weird attempt to be paid for clicks
  • Have usernames that appear to be random strings

So there's something going on here, something spammy, but I don't see how they benefit. Is it to dilute an otherwise all-spam stream with some "useful" links? Should I report them to Twitter? If anyone knows, please clue me in.

Kate


Saturday, 14 April 2012 13:48:34 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 26 March 2012

How's this for a renaissance? People are starting C++ user groups!

  • The Jerusalem .NET/C++ User Group will cover both topics. They've had their first meeting already.
  • The Central Ohio C++ User Group has also had its first meeting and will meet monthly.
  • In Austin Texas they're calling it the C++ Meetup and the description sounds a lot like a user group
  • The Belgian C++ User Group has its first meeting in April

It's so much fun to see this excitement springing up. There seem to be two popular topics for first meetings: either "What's new in C++ 11" or "Writing Windows 8 Apps". I think these two things arriving together - the huge language and library improvements (and the unexpected synergy of the language changes and the library changes) with the chance to write for Windows 8 in C++and XAML - is producing much more interest than there used to be.

And now the fun is spreading to Toronto! No, I'm not founding the group - I'm surely not the only C++ developer in Toronto after all. But I am honoured to be speaking at the first event on April 17th right downtown (pretty much Yonge and Bloor.) I'd love to dive deep into C++ AMP, or show how the Consumer Preview of Windows 8 is easier to code for, but I think I should begin at the beginning, so my talk is titled What happened in C++ 11 and why do I care? and has this abstract:

C++, both the language and the libraries that come with every compiler, is defined by an ISO standard. The latest version of the standard, generally known as C++ 11 after its approval last fall, was optimistically called C++0x throughout the multi-year process that led to its adoption. Many of the language changes (new keywords, new punctuation, new rules) and library changes (genuinely smart pointers, threading, and more) have already been implemented by vendors who were following the standards process closely.
In this session Kate will introduce and demonstrate many of the highlights of C++11 including lambdas, auto, shared_ptr, and unique_ptr. These are all supported in Microsoft’s Visual Studio 2010. You can see how to make your code more readable and expressive, easier to update, more correct (less bugs and memory leaks) and faster, not by trading off among those possible constraints but by adopting modern C++ which gives you improvements in all four areas at once. If you’ve been ignoring the Standard Library, for example, you must see how lambdas make all the difference and open a world of productivity to you.
A sneak peek of the next version of Visual Studio will show you even more C++11 goodness.

If you've looked at my Pluralsight courses, you'll know that my biggest challenge is going to be fitting this into an hour plus Q&A. This will be an overview, an overture if you like, and should whet your appetite for the meetings to come!

Please register as soon as you can, please spread the word, and I hope to see you there!

Kate
Monday, 26 March 2012 08:29:02 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 22 March 2012
A mentoring client of mine needs someone to take on a specific project that should be about 500 hours of work. That fits nicely into a summer, and the work would be suitable for a student or a junior programmer. Here's the job description we wrote up (the mentor is me by the way):

Must have:
  • Familiarity with one or more programming languages and IDEs
  • Careful attention to detail, especially for visual design (form layouts and alignments, fonts etc)
  • Willingness to learn a large and complex project
  • Time management skills including estimating and reporting effort and time for tasks and projects

Nice to have:

  • .NET programming experience and familiarity with Visual Studio
  • Experience developing a Windows Forms application
  • Background in software testing or user support

The job offers:

  • Work onsite in Peterborough
  • 40 hours a week as soon as the student’s schedule will allow
  • Important work improving a product that is mission-critical to real customers
  • Specific project to be tackled and completed; more will likely follow if this one goes well
  • Training on the tools to be used and the tasks to be done
  • Regular access to a world expert mentor in relevant areas
  • Pleasant working environment with nice coworkers, relaxed dress code, and an open office

It's worth mentioning that there is no C++ involved in this at all. So don't hold back if you don't have it, and don't rush to apply thinking it's a C++ job, because it's not. If you're interested, email me directly (please don't just comment here or tweet me or the like) and I will pass along your resume and contact details. I may have another client looking for someone soon as well, with similar requirements, so let me know if I can hang on to your info and pass it along twice.

Kate

Thursday, 22 March 2012 10:50:17 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 14 March 2012
People keep on releasing interviews with me. If you're willing to listen to them, I'm more than willing to keep on talking. There's remarkably little overlap in all of these.

On The Tablet Show, Richard and Carl (yes, that Richard and Carl) asked me about C++ in this wacky new world of Windows 8. We had the usual freewheeling conversation and covered a lot of ground in 49 minutes.

For PluralSight, Fritz asked me questions about my latest course, and the industry in general. This one's just ten minutes, and there's a transcript if you'd rather read than listen.

Kate

Wednesday, 14 March 2012 14:56:58 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 10 March 2012

I've been working on another C++ course for Pluralsight to complement the C++ WinRT/Windows 8/Metro course I did as well as the two-part C++ Fundamentals course (part 1, part 2). It's finished and live!

The topics I cover are:

  • Avoid Manual Memory Management
  • Use Lambdas
  • Use Standard Containers
  • Use Standard Algorithms
  • Embrace Move Semantics
  • Follow Style Rules
  • Consider the PImpl Idiom
  • Stop Writing C With Classes

I had a real blast writing this - while I was editing it I could hear my own enjoyment of parts of it. I hope you enjoy it too. A Pluralsight subscription is such a bargain - buy one for the topics you simply MUST learn for work, then use it on your own time to learn all those other things that you think you might benefit from. (I recommend Annual Plus - $500 gets you the sample code and offline viewing, all you can learn for a year.) Whether C++ is "must learn for work" or "I hear it's different know, wonder if it could help me" for you, I hope you find it helpful. Please let me know!

Kate

Saturday, 10 March 2012 14:36:17 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 19 February 2012

Do you know how to get a command prompt and have its "current directory" be a specific directory in which you want to do some work? Sure you do. In fact, I bet you know at least three ways.

First, the how-hard-can-I-make-this way: Click Start, and mouse around until you see Command Prompt. Click that. Change drives if need be (by typing D: or E: or whatever) and then change directories with the CD command a lot.

Did you know that pressing Tab will autocomplete file and folder names? It even puts the quotes in there for you, since spaces are interpreted as "this is the end of the file and here are some other parameters". But as I said, that's the slow way.

A lot of times, I have a Windows Explorer open to the very folder where I would like the command prompt. I've looked at the files and I know I want to install a service or register a DLL or run an exe or something. Here are some ways to get to that command prompt more quickly in those cases.

First, get yourself a command prompt, and get on the right drive (eg D:). Then, type "cd " in the command prompt, and click on the Windows Explorer address bar so it becomes plain text. Copy the text with Ctrl+C, and then in the command prompt, bring up the system menu, choose Edit, and then Paste:

This is really the long way though. First, you can do a cool drag and drop trick. In the command prompt, get on the right drive and type "cd " , but then in the Windows Explorer click the folder image next to the path, and drag that into the command prompt window:

Not bad, but try this. Close that command prompt, and shift-right-click in the background of the Windows Explorer folder:

That's quicker, right? Sure it is. But two issues - first, a shift right click followed by mousing down and clicking does take a little dexterity. And second, what if I wanted a certain kind of command prompt - say a Visual Studio Command Prompt? Well, that's where we take a turn into stuff I didn't know until just a few days ago.

Go back to that Windows Explorer, click as though you were going to overtype the address in the address bar (you did know you could do that, right?) and type cmd, then press enter:

It even changes drives (to D:) if you need to. Wow! Now, what else can you type there? Well, I've tried notepad foo.txt, for example, and it creates a file in that folder for me and opens in it notepad. Do you know how many times I've done right-click, New, Text File, type the new name, enter to accept that, enter to edit it? This is way quicker. (It doesn't seem to worker for newfangled apps like WinWord, unfortunately.) Or, how about this:

You need the pairs of double quotes at beginning and end - you might have this string in a handy text file on your desktop, or you might move that batch file to somewhere with a shorter path. Because that particular string gives you a "Visual Studio Command Prompt" in the folder - perfect for installing services and whatnot.

Just goes to show you, there's always something new to learn. I use the cmd trick almost every day. And my thanks to whoever coded that, whether it was 20 years ago or more recently.

Kate

Sunday, 19 February 2012 10:21:25 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 07 February 2012

The minute this was announced, I knew I had to go.

Two days of "C++ today and tomorrow" with the bright lights of C++ today? Just try and keep me away! I'm so glad I was there - it was AMAZING and FANTASTIC and just generally wonderful. For me, personally, seeing so many old friends was a big part of it. The C++ team, other C++ MVPs, people I went to university with, and so on. It was also wonderful to see so many young people - including speakers, but also attendees, who were clearly in their 20s (and a few who were obviously in their teens.) After Chandler's talk I told someone "we can retire now: the future of C++ is in good hands." The speakers were not "the usual suspects" at a Microsoft event either. At a panel at the end of the second day, someone asked about C++ and the cloud and one of the answers was to indicate three speakers sitting next to each other: "Microsoft guy, Facebook guy, Google guy. Where isn't C++ in the cloud?" While that was a great cloud answer, I think it also highlights how inclusive this was - it was a C++ conference held at Microsoft, not a Microsoft conference.

Some fun quotes I happened to write down:

  • “if it’s that ugly, it must be good” - Bjarne, on why some newbies imitate horrible code written long ago by their heroes
  • “write C-style code, expect C-style errors” - Bjarne again
  • “we know where bugs hide” – Bjarne (they hide in large tracts of complicated code)
  • "dot dot dot is where the fun begins" - Andrei
  • "real code is not supposed to fit on slides" - Andrei
  • "this is legal" - Andrei (we needed to be reassured since it rarely looked legal)
  • "if you're using new or delete, you're doing it wrong" - Herb (it's true!)

And Chandler's talk was very much a 2012 talk, with lolcat-like interjections and Simpsons references and even a how-agile-is-this update with a picture of Oscar Wilde in reference to Andrei's earlier off-the-cuff description of some template error messages (aka template barf) as being "a small novel by Oscar Wilde." The humour level was very high, much of it self-deprecating - no-one, not even the coiners of the terms, thinks RAII or SFINAE are great names, but what the heck, they're the names we use.

Even the little things here were so well done. Herb opened the conference by dedicating it to Dennis Ritchie, which I found extraordinarily touching and appropriate. He opened day 2 by celebrating the 20 year anniversary of Microsoft C7 which was C++ 1 for them, with Visual C++ appearing in the next release. There on the podium was the two foot long, 44 pound box, with multicoloured plusses all over it, in which it shipped.

And what was inside? A lot of books, and a lot of 3.5" floppies (I took this picture earlier, before the box headed to campus):

There are 5 or 6 floppies in each bag and apparently each bag had a part number of its own.

This conference was far more than a trip down memory lane, of course. It was a two-day Valentine from Microsoft to the C++ community, a demonstration of the "new growth" in modern C++ and the power and capability that is there for those who are prepared to start using the new features, and a chance for all of us to accelerate the learning we have to do. I so hope you were able to be there, or to catch the energy by watching it live and following tweets from those of us who had to share the bon mots and the fun. But if not, the on-demand videos are almost all there now. Here are the links:

Bjarne Stroustrup: C++11 Style

Hans Boehm: Threads and Shared Variables in C++11

Stephan T. Lavavej: STL11 – Magic && Secrets

Andrei Alexandrescu: Variadic Templates are Funadic

Panel: The Importance of Being Native (Bjarne, Andrei, Herb, Hans) 

Herb Sutter: C++11, VC++11 and Beyond

Chandler Carruth: Clang - Defending C++ from Murphy's Million Monkeys

Andrei Alexandrescu: Static If I Had a Hammer

Bjarne Stroustrup and Andrew Sutton: A Concept Design for C++

Panel: Ask Us Anything! (all speakers)

Fair warning: both of Andrei's talks, and the Concepts talk, are hard. This is cool new stuff that we are all learning about. There is no shame in pausing, rewinding, and giving something a second listen. Look, Chandler was running through pitfalls and problems that Clang catches, and showed some code with a problem I couldn't spot. A few minutes later in the Q&A, Bjarne asked him to clarify just what the problem was. Made me feel better!

Chances are you won't be able to watch any of these on fast forward, or skip any of them. So I'm asking you to invest 12 hours of your life to watch all of them. Do it! You won't regret it!

Kate

PS: They gave us shirts (it's all about the shirts for developers) with real code on the back and this on the front:



Highly appropriate. Of course, it's not a comeback for those of us who never left. But still...
Tuesday, 07 February 2012 12:19:41 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 09 January 2012
Yay! Today I got news that registration is open for Tech Ed 2012 in Amsterdam, and with it confirmation that my preconference has been accepted! This is great news for anyone who loves C++, because it's a C++ all day preconference! The title is C++ in 2012: Modern, Readable, Safe, Fast and here's the abstract:

C++ is gaining momentum as a development language, so whether you’ve never used C++ or stopped using it a decade ago, it may be time to brush up on your skills. With a new standard release providing new keywords and capabilities, C++ is a  featured language for many of the new Microsoft technologies and enables some amazing speed-ups of your application using libraries like PPL and C++ AMP. What’s more, Visual Studio offers tools to native developers that have only been available for managed developers in earlier versions. This all-day session will show you what all the fuss is about and give you the skills you need to understand the advantages of C++ today and how to start applying those benefits to your application.

Now, if you're an experienced and current C++ developer, you may not need to come to this session. But if you were thinking you needed a refresher, here's a great way to get one, and at the same time look at some of the cool new stuff that is available to you once you know C++. If you've never written a line of C++ code in your life, but you're solid in C# or Java so you know the basic syntax (if, while, etc) you should be able to follow this session, though it won't teach you all the fiddly bits of C++ syntax and make you a C++ developer from scratch. It should, however, give you the inspiration you might need to go and learn all that fiddly syntax, and understand why we have it. I am also hoping there will be a number of relevant breakout sessions you'll want to attend after getting a taste of what C++ developers can do, though we have to wait a little longer to find out about those.




I'm still working on the exact content, but my first draft outline looks something like this:
  • Modern C++ with the Standard Library (demo of strings, shared pointers)
  • Application Lifecycle Management for Visual C++ 11
  • Leveraging Lambdas for the PPL and C++ AMP
  • Best practices for C++ developers today

This is 9am - 5pm (all day) the Monday before Tech Ed Europe starts, June 25th. You can register for the precon and Tech Ed now. And tell your friends! I would love to see a TON of registrations to ensure continued C++ content at Tech Eds around the world.

Kate

PS: Yes, I know that Tech Ed US is a few weeks before Tech Ed Europe. You didn't miss the US announcement; you shouldn't have to wait much longer for it though.

Monday, 09 January 2012 20:29:14 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 21 December 2011
Work is underway on settling the agenda for Tech Ed, even though it's almost 6 months away. As Brandy explained a week ago or so, it starts with asking "the usual suspects" for session submissions. Tech Ed is a fairly closed conference - the call goes out to MVPs, RDs, some Microsoft employees and previous speakers. (How do you become a new speaker? Do a great job somewhere else first -Tech Ed is not a beginner's conference. The people who get the call for content can propose great speakers who didn't get the call.) Now they've announced the technical tracks, which gives you an idea of what you can expect to see covered. There are no huge surprises here: I'm most interested in Architecture & Practices, Developer Tools, Languages & Frameworks, Windows Client and Windows Phone.

What will be next? Announcing the precons. They've already announced the price: $400 if you're attending Tech Ed, and $500 if you're not. They'll say what the precon topics are in early January. But by then, the super early bird discount will have expired. That discount will save you $300. So registering now is like paying only $100 for the precon!  If you can decide in January or February, when the precons are announced, you'll still save $200, so it's like your precon is half price. Either way, it's a great deal for a full day of deep training on something relevant to the kind of people who come to Tech Ed.

To be clear, I don't know what the precons are going to be. I will blog as soon as I know. But if you think there's a chance that spending a whole day with someone who really knows their stuff on a topic you need to know (especially one you never got around to learning and feel you should) would be worthwhile, then why not make it official, register for Tech Ed, and see what gets announced in January?

Kate




Wednesday, 21 December 2011 17:24:25 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 17 December 2011
Pluralsight, for whom I've done a lot of courses, has revamped their website recently. That includes having  drawings or sketches in a lot of places where you might expect photographs. Here's the one they've been using for me, next to the photo it was made from:


 

I definitely like the sketch better, but lots of people recognize the photo because it's one of the few I use in the various places people want pictures. I also have this one I use on my public Facebook page:




I am not sure any of these will help you find me in a crowd. That's one of the reasons that on my business card (and my Twitter profile) you'll see this one:



More than one person has had an "oh, that's who you are!" moment when I hand them my business card. Yup, that's me!

Kate
Saturday, 17 December 2011 17:02:44 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 17 September 2011

Oh my goodness. What a week that was!

Here's how I thought I would do my first summary. Links to videos, discussions of sessions I either went to or tried to go to (more on that in a moment) along with my tweets from the ground, as it were.

My first real tweet Tuesday morning (8:37 California time) was announcing that my PluralSight C++ Fundamentals course had gone live. Then the keynote started. Here are my tweets and retweets along with the time into the keynote I said them:

  • 6 minutes: #bldwin totally dominating my stream SS doing a good intro to lean back computing
  • 37 minutes: RT @dseven WinRT API'S are natively built into Windows and built to reflect in different languages - C/C++ and .NET. #bldwin
  • 42 minutes: Starting at 8PM today, Seattle time, you can download all of the code that attendees at BUILD received. t.co/nuTuwga
  • 43 minutes: RT @wkrwk Did anyone notice the UI during the VSE 11 demo is the classic Windows UI? #bldwin
  • 48 minutes: #bldwin VS vNext demo is breaking twitter = no hope of following it all
  • 50 minutes: RT @andrewbrust Expression Blend is still Grey on Black. It could use a little "fast and fluid," frankly. #bldwin
  • 51 minutes: Store menu in VS?? #bldwin #wholenewworld
  • 58 minutes: RT @rhundhausen Desktop (#x86) apps can be listed in the #windows8 store as well #bldwin
  • 61 minutes: RT @ayus :))) RT @timheuer The Red Shirt is dominant even when not present. #bldwin @scottgu
  • 79 minutes, @EdgarSanchez retweeted @rickasaurus asking "I'm interested in hearing more about this new GPU offloading API. Any links? #bldwin" and I answered "Check my blog as the week goes on for GPU stuff"
  • 80 minutes: RT @marypcbuk Sinofsky: that gaming PC looks like ice. Angiulo: more like lava, it converts 700w of power to 4.7 teraflops like 3,500 Cray XMPs #bldwinPlatform for Metro style apps
  • 87 minutes: RT @Pete_Brown Dude just cracked open a laptop on stage and showed the electronics. Can't beat that #bldwin #geek
  • 100 minutes: RT @andrewbrust When will we admit Sinofsky's doing a great job? He's working hard, not just presiding. #bldwin
  • 120 minutes: RT @ronnipedersen If you have an iPad, don't watch the build keynote… It'll make you feel like you have bought a C64 #bldwin
  • 127 minutes: RT @jonbrasted It is a great day to be a Windows developer. #bldwin #trbbuild

The download surprised me, I didn't think it would be ready for people to try on any old hardware. And the hardware demo was very very good. And sure, I was on instant messenger back to the office saying "it's official" when the rumour was finally confirmed that we were getting tablets. But mostly, I really liked what I saw and wanted to know more, which is what keynotes are all about.

After eating something completely unmemorable, I found my way to the overflow room, always a little more casual and a good place to find "the cool kids". I had already met a number of old friends in the huge keynote session and before it, but here were more. I'll just give you the links to the Big Picture sessions. They are all very good.

  • 8 traits of great Metro style apps - a truly excellent session by a presenter who cares deeply about the topic. I tweeted a lot less during this one because it required more active listening.
  • Platform for Metro style apps - another very good session during which I just retweeted some other people's "Hey, this stuff is C++" reactions and a link to the session planner app for the phone, which I used heavily.
By this time people were starting to "get it" (including me) and the excitement level was rising. Here's just what I retweeted:
  • @coridrew #bldWin is really, really, really making me want to //BUILD/ Windows apps #BestConferenceNameEver #WhoKnew
  • @briannoyes Add ref from js project to C++ library - really empasizes this is running native #bldwin
  • +@fignewtron iPad limited in many ways to consumption - Windows 8 is production and consumption on many devices. Sales numbers decide winner. #bldwin
  • @mcakins Wow, the silence from Apple's camp is deafening! Windows rocks once more! Its 1995 all over again! #bldwin

One more session: Tools for building Metro style apps - I was getting tired at this point. It was a lot to take in. People were lined up the length of the convention centre for tablets. I knew there were enough for all of us, so I went back to my room to edit my pointers module for the PluralSight course so it could "tack on" to the end of the published course. While videos rendered, I had a little back and forth on Twitter with people who had noticed how much fun I was having, and others who were playing with their tablets already. I slipped out to pickup the tablet about 7:30 but didn't open it till the module was done. Then:

  • 10:48 pm: got major piece of work done ... yielding to temptation ... tablet here i come #bldwin
  • 10:57 pm: How's that for fast setup? Everything's installed.... Trying visual studio next
  • 11:11 pm: Just wrote a Win8 C++ app on the tablet with touch keyboard. Built and ran first time. #winning
That's right, I didn't even set up the bluetooth keyboard. People cite Visual Studio as an app you couldn't possibly use with touch. I wouldn't want to do it all day, but I did it! Then I played a bit more.

Day 2 started with another whole keynote. C++ was front and centre here. Some tweets:
  • 17 minutes: RT @seesharp 3D graphics debugging at the pixel level in DirectX. Unreal. #bldwin
  • 33 minutes: RT @bgervin killer strategy for MS to help developers make HTML apps for iOS and Android #bldwin
  • 34 minutes: RT @tpdorsey RT @EisenbergEffect […] in C++, you can write your own WinRT library, which when built, can be used by C++, C#, VB and JS.
  • 34 minutes: RT @jmorrill This new COM and C++ version is not _anything_ like what you think it is. From what I can tell so far...effing amazing!!!!
  • 49 minutes: Loved it RT @MichaelDesmond Zander shows off the new image editor in VS11 as he works on a C++ DirectX game.
  • 54 minutes: RT @shycohen Moving a VHD while the machine is running is cool. Moving a live VHD is even cooler! :) Will enable amazing things in the future. #bldwin
  • 82 minutes: most tattoos ever in an MS keynote
  • 95 minutes: RT @seesharp WOAH. Did not expect Steve Ballmer today. Everyone was starting to leave already. Woah! #bldwin
  • 97 minutes: RT @carafone 500,000 downloads of #win8 already! #bldwin
  • 98 minutes: RT @LACanuck And #Win8 was downloaded 500K times in 12 hrs RT @mashable: RIM Has Sold Just 490,000 PlayBooks - on.mash.to/nEu0dU #bldwin
  • 102 minutes: That's what these keynotes were missing! Turns out it's a great time to be a developer. I was worrying, no-one had told me yet #bldwin
  • 105 minutes: I've been paid to program since 1979. Keynotes tell me at least once a year it's a great time to be a developer. And they're right. #bldwin
Then it was time for simultaneous breakouts, and that meant choices. You can search the sessions list as well as I can. The C++ ones are not to be missed. These are happy people who are delighted to tell us what's been going on, and they're proud of it, too. At 3:13 I tweeted "Went quiet because i am massively engaged with C++ content in packed rooms. Small break between sessions to say "wow!" #bldwin #happycamper". The remainder of the afternoon was super confusing. People were jumping to conclusions, correcting each other, having opinions about the death of this that and the other. Because C++/Cx (the language extension you use to call WinRT) looks a lot like C++/CLI, people thought it was managed, but it's not, it's all native code and C++ Metro apps get a perf boost from that. The understanding that something amazing and powerful still has COM at the core began to grow. People were reporting trying to use Windows 8 gestures on their iPads and on nontouch screens, showing that the team has made some very intuitive choices. One tweet of mine I want to repeat: "Big props to Aleš Holeček for joining in the Q&A in the last C++ talk of the day when the questions got really Windows-y. Impressed. #bldwin". Even if you're not a C++ developer, download that session and watch the Q & A.

Day 3 started with being turned away from a C++ session, and so going to a different C++ session that was on at the same time. Several people from the C++ team made the trip with me, giving me a chance to tell them how impressive all this was. Meanwhile on mailing lists, people who weren't onsite and were 12 - 24 hours behind as they waited for session videos to go live were echoing the confusion and dismay of yesterday. It was hard to be patient with them. It's going to make sense, I wanted to tell them. Just hang in there! I took a small break from sessions to watch (and help with) the C++ part of Channel 9 Live (I am still waiting for links to the recording, because I couldn't hear everything they said and I want to) and then to Herb's second talk - again the room jammed full and dozens turned away, Don Box (who had earlier reminded us COM is still love) blurting out his admiration for Herb as a speaker and the great content, and the terrific line, "We protect against Murphy, not Machiavelli". What a time to be a C++ developer!

Day 4 kicked off with kind words from Daniel and a chance to hand out paper copies of the whitepaper I recently blogged. I got some quiet time with various smart people who told me their thoughts on all this. I'm still synthesizing it all. I also was downloading videos like a mad thing. I came home with 22 hours of video to watch and since then have grabbed another 15 or so. Some people began to realize they had over-reacted. Some excellent blogs began to appear - Doug Seven, for example, had several sensible things to say.

And then it was time to go. Glenn Ferrie tweeted "Writing C++ in the airport #bldwin #WinRT" and that summed up the week for me. I have a lot of watching, coding, thinking, reading and talking to do so I can establish what all this means. But hey, why not join me? It's a great time to be a developer!

Kate
Saturday, 17 September 2011 16:42:01 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 27 August 2011
I was poking around on CodeProject looking at some developer interviews (they've started these up again with some interesting subjects, so check the recent links) when I spotted An interview with Microsoft's new Visual C++ .NET community liaison - and in March 2002, nearly a decade ago, that was Herb Sutter. Isn't the Internet a handy attic? Check out some of these quotes:

I hope to make a noticeable mark in the product.

C++ continues to be relevant, dominant, and in widespread and still-growing use. The C++ standard and standardization process also continues to be relevant [...] all the vendors, including Microsoft, are there together actively working on the next-generation C++0x standard whose work is now getting underway.

[...] the best numbers I keep seeing put the global developer community at something like 9.5 million people, and those using C++ at about 3 million of that. That's well ahead of Java in nearly all studies I've seen, by the way, usually by a factor of 1.5-to-1 or 2-to-1. [...] The reports of C++'s demise have been, well, "exaggerated."

C++ developers need power and know how to use it. I've always said you should use the best language for the job, and I've used dozens of languages professionally. Depending on how you count languages, I've probably used a dozen professionally in the past year. People who want to write efficient, tight, fast code often tend to choose C++ because it lets you get the job done with powerful code but without sacrificing efficiency. 

People who want mature, stable compilers and tools often tend to use C++ because it's been around a while and the tools and libraries are plentiful and solid. Commercial client-side application development with more than a few screens, most kinds of server-based software, and most kinds of libraries are all done more often with C++ than with other languages, according to the best numbers I've seen and according to my own experience as a developer and as a consultant who shows up at other developers' shops.

Nine and a half years later, I see nothing but good stuff there. I hope all my interviews stand up as well (though I already know they wouldn't) and I'm impressed at the ability to set a goal and meet it. What will the next decade bring?

Kate

Saturday, 27 August 2011 15:53:50 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 13 August 2011
When I provide links from this blog, I don't shorten them. When I get a link in an email, I always hover over it to see where it leads, in case it's a phishing email. But when someone emails you a shortened link, or tweets a shortened link, how do you know where it leads? It might be a phishing link. Or it might just be that cat video you've seen too many times already.

Years ago, Joshua Long wrote up a summary of how to see where a shortened link goes before you click it, and he's been updating it pretty regularly. He covers TinyURL, bit.ly and its relatives like on.fb.me, goo.gl, is.gd, and many I've never heard of. There's even a site you can paste a shortened link and get back what it redirects to. Not all links will be worth this treatment, but many will. It's nice to have a summary of how to check them before you follow them.

Kate

Saturday, 13 August 2011 13:56:47 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 11 August 2011
I'm pleased to see that Kenny Kerr is writing his C++ column for MSDN again. He's also blogging again and in a recent entry, he provides some really plain-spoken advice to people looking for guidance:

  • "You can of course still use MFC but I do not recommend it as modern C++ can do a better job of supporting the Windows developer."
  • "You should never again use auto_ptr for anything."
So there! I agree with these, especially the auto_ptr one. It was an attempt at a smart pointer that just wasn't smart enough. We have shared_ptr and unique_ptr now and they work in collections and are truly smart pointers. Use them and stop typing delete in your code entirely.

As for MFC, it does fill a need and I certainly wouldn't scrap a working MFC app just because the library is getting old (the facelift a few releases ago helped) but if I was starting a brand new application from File, New Project I would need a good reason to use MFC as my UI framework.

Kate

Thursday, 11 August 2011 13:29:29 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 09 August 2011

People often ask me what Visual Studio Ultimate offers that other versions do not. There's a handy chart on the Microsoft site:

The only problem is, if you don't know what "Architecture and Modeling" includes, it's easy to think there's probably nothing useful in there. So I was pleased to see a blog post by Susan Ibach from Microsoft Canada showing how easy it is to generate a sequence diagram from code, and how that can help you understand code you've inherited from a predecessor. That's one of the diagramming tools included in Visual Studio Ultimate.

Right click in some code, select Generate Sequence Diagram, set some options (does getting a property count? What about calls to methods of String or other .NET Framework classes?) and presto, you have a sequence diagram.




This sort of thing can save you a tremendous amount of time, and that means it can save your organization money. That's why some people buy Visual Studio Ultimate, after all. Having access to a tool like this is one of the ways I can "hit the ground running" when I join a project. If you need to do the same, make sure you're not ignoring a capability you already have.

Kate
Tuesday, 09 August 2011 13:14:15 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 07 August 2011

Like a lot of people, I got started on Facebook one way, but now I use it another. And like a lot of people, I haven't quite "cleaned up" from my original start. My rule these days is very clear - Facebook friends are actual friends. People I know and like. In fact, my rule is that we should have shared a meal - ideally a meal and some wine - to be friends on Facebook. If we worked together, or presented at the same conference, and we actually enjoy each other's company, chances are we went for dinner, or lunch, or a beer, at some point. It's a handy rule that makes my decision process easy. I get friend requests all the time from people I don't know, and I just ignore them.

With that audience, my Facebook posts can be pretty personal. What my kids are up to. Pictures of my family and my holidays. Details about travel plans, including whole-family trips that leave my house empty. Sure, I know that what you put on Facebook can be forwarded and shared elsewhere. But I know who I'm sharing with and I trust them to have my best interests at heart. I don't connect my Twitter statuses (which I know are public) to my Facebook ones (which are more private and less frequent) or vice versa.

What I've set up, for people who use Facebook as a news hub, is a public page. Here I post when I'm speaking somewhere, or when a video or article is published. If you "like" this page, my announcements will end up in your news feed. So if you added me on Facebook and never heard back, use the public page instead. I don't post links to all my blog entries there, because I figure you can always subscribe to this RSS. I don't post anything personal either, so if you don't actually care where I'm spending my holidays, you might want to like that page even if we're already Facebook friends.

Kate

Sunday, 07 August 2011 12:50:03 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 05 August 2011
It's worth explaining a few things about me and Twitter. First, I'm @gregcons. There is someone with @KateGregory but it's not me, and whoever it is has never tweeted. I follow several hundred people and several hundred people follow me.  I don't "follow back" when people follow me, unless I happen to recognize the name when Twitter emails me about it. I look at the tweets of people who retweet me or @ me (or who people I follow retweet, or who people I follow are in @ conversations with) and if the tweets look interesting, I follow for at least a while.

I tweet a mixture of personal ephemera (wow, what beautiful weather we're having today), personal stalker-bait (I'm at place x with person y, hey whoever sure was great seeing you today, wow my child just did thing x in place y), and actual technical stuff. The technical stuff might be my own blog entries, my own material being published (a PluralSight course, a Channel 9 interview, a TechEd talk) or a link to someone else's blog entry/interview/talk that I think is interesting. If you want only the technical stuff, my public Facebook feed (more on that in an upcoming post) is a better choice.

I unfollow people for a variety of reasons. People who post a great volume of tweets that are in a language I can't read, or are about things that don't matter to me, just clutter up the stream, so I will unfollow. It's not a value judgement and it's not about the ratio of useful to non useful, just the volume of non useful. (Non useful includes what your cat just did, what airport you just left or arrived at (a few close friends excepted), what you are eating/drinking unless it's inspirationally yummy, coded/veiled potshots at your coworkers, and updates on your car repair or the planning of your wedding.) Since there's a lot of overlap among the people who care about the same stuff as me, I find that when these people post something useful, ten of my friends retweet it anyway, so I won't miss it. People who just post the same thing over and over because they read somewhere that Twitter is ephemeral and people might miss your announcement at 8am so you should do it again and noon and again at 5pm and so on I will usually unfollow also. I don't keep track of who is unfollowing me and I'm not offended if I realize someone has - we all use these things differently and one person may unfollow for too much personal stuff and another may unfollow for not enough personal stuff or not different enough from my other feeds.

I mostly use MetroTwit. This lets me have search columns on myself, my @mentions, and whatever topic I'm interested in according to the news of the day or the event I'm attending. I have a Twitter client on my Windows Phone and A Quick Tweet by Scott Cate as well - it loads super fast because it's for sending tweets, not reading them. I also use the web page from time to time. I always check email before Twitter, so it's not a great way to get hold of me in a hurry.

I don't blog my tweets. I often tweet my blog posts. If something deserves to stick around for a while, I may quickly tweet it, then later write up a blog post about it. Other than that, there's little overlap.

Twitter has turned out to be hugely valuable to me. I find out about breaking news faster than Google News, I hear technical rumours and announcements there first, and I keep in touch with technical friends the world over, as well as my own neighbourhood and my family. I've started my day with smiles from jokes or from just seeing what people I care about are up to, and I've kicked off business conversations, too. It's part of my work rhythm now and it's pretty much the only place I put personal stuff these days. If you're not part of it, consider giving it a try for a week and see what changes for you.

Kate

Friday, 05 August 2011 10:55:18 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 03 August 2011
Here's an article in a pretty mainstream publication - the Economist - that explains why concurrency matters. I used to say "the future is concurrent" but that was then; this is now and it's the present that's concurrent. As the article says,

What was once an obscure academic problem—finding ways to make it easy to write software that can take full advantage of the power of parallel processing—is rapidly becoming a problem for the whole industry. Unless it is solved, notes David Smith of Gartner, a market-research firm, there will be a growing divide between computers’ theoretical and actual performance.

I'll have some more concurrency material over the next little while in this space. Things continue to change pretty rapidly. If you haven't been thinking about concurrency, now's a pretty good time to start.

Kate


Wednesday, 03 August 2011 12:12:50 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 31 March 2011
You go to Tech Ed to learn about technology - developer tools, sysadmin tools, platforms like SharePoint or Windows Phone. But there's more to your work than the nuts and bolts of how to solve a technical problem. Do you use social media effectively? What would an effective use of Twitter or Facebook look like, anyway? Are jobs shifting because of technology? How important is cross-platform development? How important are new platforms? How do you react to big changes in your technical world and direct your own career?

Well, there's a Tech Ed precon Sunday evening that covers that exact topic. And look who's involved: Stephen Rose (Windows Community Manager), Zeus Kerravala (Distinguished Research Fellow and Senior VP, Yankee Group), Richard Campbell (Co-founder of Strangeloop Networks, co-host of .NET Rocks!, host of RunAsRadio, Microsoft MVP, Microsoft Regional Director), Michael Otey (Senior Technical Director for Penton Media’s IT & developer publications, author of SQL Server Developer’s Guide series from Osborne-McGraw-Hill), Tim Huckaby (Microsoft Regional Director, Founder of InterKnowlogy), Michele Leroux Bustamante (Chief Architect with iDesign, Microsoft Regional Director, Microsoft MVP, author of Learning WCF (O’Reilly)), Jennifer Marsman (Principal Developer Evangelist for Microsoft, Central Region), Tara Walker (Microsoft Academic Developer Evangelist), Sean Deuby (Technical Director, Penton Media’s Windows IT Pro Magazine, Microsoft MVP), Paul Thurrott (Senior Industry Analyst, Penton Media’s Windows IT Pro and Supersite for Windows; author of Windows Phone Secrets), John Willis (VP of Training & Services, Opscode), Laura Hunter (Principal Technology Architect for Microsoft IT’s Identity & Access Management team), Yung Chou (Microsoft Senior IT Pro Evangelist, East Region) and Barbara Yamauchi (Microsoft IT program manager for developer tools and IT lifecycle management). Wow! And this is an interactive panel discussion, so you can help to shape the conversation.

There is a small fee ($99) and you have to arrive Sunday afternoon so you'll be able to attend. But it looks like a heck of an evening! Glad to see so many RDs and MVPs on that list.

Kate

Thursday, 31 March 2011 07:50:40 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 25 March 2011
Charles was busy during MVP summit! In addition to interviewing me, he sat a number of MVPs down to talk about C++, being an MVP, and the like. They're from all over the world and they have widely different jobs, but you can see how much they love this stuff. And please notice -- they span a wide age range, too. The stereotype of C++ as the language for the grey haired developers is just a myth. If you wonder why anyone still uses C++, and why it's going to be very good for this industry that there are still C++ experts around, watching these videos will be an eyeopener.

By the way, Alon is also an RD.

Kate

Friday, 25 March 2011 07:15:03 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 23 March 2011
As you may have noticed the C++ team is really stepping up the communication lately. There have been hours of Channel 9 videos (I pointed you to some good ones) and Diego has been blogging a lot. Recently he did a long post (with references!) on Intellisense in C++/CLI - why it wasn't in Visual Studio 2010, why it didn't sneak in with SP1, and so on. Here's a level of transparency you just don't see these days:

...we simply underestimated the amount of work it would take to implement C++/CLI in this codebase, and we couldn’t change our plans by the time we realized it. ... In the end it was one of those hard cuts you have to make when dealing with the real world resource and schedule constraints. It turned out that the work was also too much work to fit into SP1. As soon as we wrapped up VS 2010, we started work on C++/CLI IntelliSense, but it wasn’t ready in time for SP1. We realize this wasn’t what you wanted to happen and an explanation doesn’t help you get your work done if you are affected by this, but we want you to know the truth.

Wow. Makes perfect sense and is actually a nicer reason than "we think you don't matter". Yet so few teams will hold their hands up and say this. It happens. It happens to every one of us pretty darn regularly. Kudos to the C++ team for not pretending it was all part of a plan from the beginning to leave it out. And do read the blog to understand just how much they were taking on.

Kate


Wednesday, 23 March 2011 07:04:54 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 11 March 2011

Writing samples and demos is tough. You want them to do more than say "Hello World" or draw a red square, but you want them to be simple enough that people can see the "new stuff" you're demoing (WPF, or Windows 7 taskbar integration) or multi-touch) in amongst the real business logic. It would be neat if they did something actually useful, because then you might keep it around on your machine and use it, but most things that are useful are too big to be demos.

Well here's a sample that lands in the sweet spot: Tasks.Show. You put in your tasks, things from your ToDo list, along with time estimates, and it keeps track of them and shows them to you. I like this view:

It uses touch to let you flick tasks into categories, and has taskbar integration to let you open a specific category, add a task, and so on. All the source code is available so you can see how it's done - it is a demo, after all. You can get more details and screen shots on the Windows Team Blog. Check it out!

Kate

Friday, 11 March 2011 10:31:40 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 25 February 2011
Pete Brown is a WPF guy and I've learned a lot from him. Now I get to watch him learn. Recently he wanted to write an add-in for IE and he decided to do it in C++. You can see how he struggled through it and get some tips of your own in the detailed post he wrote about the experience. I agree with the commenter who said you should only run Visual Studio as admin when you know you're going to do a step (like registration) that requires elevation, and you should run non-elevated the rest of the time, and the one who tweaked the string code to take advantage of being in C++. If you have some tweaks of your own, stop by and add a comment.

Kate

Friday, 25 February 2011 18:20:58 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 23 February 2011
People talk a lot about work/life balance. There really is no such thing. They never deserve 50/50 which is what balance implies. But I read an interesting point in this summary of (and link to) a TED talk: over what period of time do you want to achieve some ratio of "work" and "life"? Every day? Most people prefer their weekends to have more "life" than "work". Over every individual week? I think we all would like to have weeks of vacation with no work at all, and most of us accept the occasional "crunch week" with more work than is comfortable. Over a 50 year period? That's not realistic at all. Think about that a bit. Then watch the video.

Kate

Wednesday, 23 February 2011 18:10:38 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 21 February 2011
If you've been to a developer event this century, or if you spend any time on Channel 9, you've probably seen Beth Massi. I read an interesting interview with her by Carla Fair-Wright where she talks about what Microsoft is like, advises young women, and plugs LightSwitch. Did you think she was the I-was-programming-in-BASIC-when-I-was-8 type? Well now you know.

Kate

PS: the whole series is worth a read.

Monday, 21 February 2011 18:03:11 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 17 February 2011
One of the marks of true expertise and skill is making something very difficult look easy and effortless. It can take a long time and a lot of work to give the impression that something is natural and everyday for you. It takes even more work and practice to make something look spontaneous and unrehearsed. This is as true of giving a technical presentation as it is of playing a sport or a musical instrument, dancing, singing, or cooking. Oddly, some people seem to think that presenters are all "just naturals" who don't practice, rehearse, or plan.

There are two problems with thinking that. The first (and the smaller one) is that it doesn't give enough credit to the hours of work that goes into producing that "off the cuff" presentation you so enjoyed. The second (and by far the bigger one) is that it leads you to think that you couldn't be a presenter. And that would be a loss. Presenting, even in the smallest of contexts, makes you better at whatever you're presenting about. If you do a presentation on Windows Phone development or Visual Studio Extensibility or the like, you will know that subject better when the presentation is over. It also generally helps your career, gives you a chance to meet people and help them, and if you're lucky will also get you a chance to travel to marvelous places and meet even more people.

One of the terrific people I've been able to meet thanks to the speaking I've done is Guy Smith-Ferrier. He's really good. He's always been generous with slides and downloads on his website, and he really knows his stuff. And now he's made a series of videos to show anyone - really, anyone! - just what it takes to be a presenter. He covers a number of things I've never seen in talks of this kind, like choosing your topic wisely. They total a little over 2 hours and are well worth your time if you're thinking of trying presenting or (more likely) you wish you could and think you can't. You can watch them on the UGSS site or download them if you prefer (search for speaker.)

Once you've watched these, you will understand what it seems the great speakers just "happen" to be doing. And you can do those things too. You can be a presenter if you want - it's no harder than learning to code. Guy's straightforward way of laying down the truths behind great presentations will take you where you want to go.

Kate


Thursday, 17 February 2011 02:14:42 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 13 February 2011

I've written about "banned APIs" before - let's start with this link and if you read it, it has a link to a previous post, and go on and follow that link and it has a link to a previous post and so on and so on. To summarize, there are three ways to ensure you are not using banned APIs in your C++ app:

  • You can use the extension I blogged about. It highlights places in code you're editing or typing that calls a potentially unsafe function. That's great if you're typing fresh code,not so great if you just inherited a million lines of C++ and aren't sure if it's vulnerable to buffer overflow attacks.
  • You can compile with /W4, and deal with all the C4996 warnings (and use code analysis or code review or generally find the places that someone has suppressed that warning.)
  • You can include banned.h, which controls whether these unsafe functions are marked deprecated or not
None of that has changed. What I wanted to point out was a recent blog entry from the SDL team alerting us that banned.h has been updated, and I also spotted a video on TechNet (why a developer-focused thing is there I don't know) that shows it in action. If you write C++ code, you should be using one or more of these techniques.

Kate
Sunday, 13 February 2011 20:44:32 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 09 February 2011
At the end of January, the busy bees at All-in-One (OK, they're not bees, they're Microsoft engineers) released even more samples including Azure, setting a hotkey that Windows will route to your app even if it doesn't have focus, detecting if the machine has been locked (with Windows+L) or unlocked, downloading multiple files with ftp, and many more. As always these are in VB, C#, and almost all of them are also in native C++.

In fact, there are just so darn many samples right now that it's getting harder to find the one you want. What a great problem to have! So they've released a sample browser to help you search and browse and generally get your hands on the code that will solve your problem and move you on to the next part of your day.

What are you waiting for? Go get it!

Kate

Wednesday, 09 February 2011 11:41:05 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 28 January 2011

Despite this rather famous xkcd comic, most developers would rather spend as little time compiling as possible:

But most of us how no clue why a build takes as long as it does, or how to make a project build faster. I mean sure a Clean and then a Rebuild will take longer than an incremental build. But beyond that, which is quicker - a debug build or a release build? Debug puts more information in, but it doesn't optimize - which wins? Does it make a difference if you keep Visual Studio up all day or if you close and re-open it from time to time? Are there options you can set that make your builds faster? All this and more is covered in remarkable detail in a new blog post from the Visual C++ team. You need to read it.

Kate

Friday, 28 January 2011 18:36:46 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 14 January 2011
It's a trope of horror movies that bad things happen in the basement. You don't go down there to see why the other people who went down there aren't back yet, and you don't go down there alone. Jan Miksovsky extends the software-as-building metaphor to talk about the scary-basement part of most apps. What I like about the post is that he's not just complaining, "some parts of the app are a real pain to change" but he's also aware of the good part of it, the foundation aspects. Well worth a read!

Kate

Friday, 14 January 2011 09:41:34 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 12 January 2011
Since midsummer I've been watching the "STL on STL" series accumulate on Channel 9. The lectures appeared as "part 1 of n", "part 2 of n" and so on until, in the bleak midwinter, part 10 of 10 appeared, so they must be done. Here are some links to them all:

There really isn't any universe in which the material this series covers can be called Introductory. When Stephan has finished introducing you to the STL, you will know an awful lot. And in this century, knowing the STL is a vital part of being a C++ developer. Many developers are scared of it: they think it's difficult and complicated. And to be honest, it can be. There's an awful lot going on and there is a lot to learn. Watching these videos, you can see how much Stephan LIKES this material, likes this library, and he's clearly not scared of it or trying to impress you with how difficult it is. He wants you to know all this. And if you follow along (and even do the homework!) you will catapult yourself forward in your STL knowledge and abilities. Take the time to do it, you won't regret it.

Kate

Wednesday, 12 January 2011 09:33:08 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 10 January 2011

The Visual C++ team, in addition to tweeting and blogging regularly, is now accumulating a week's worth of links and stories at a time and publishing them at paper.li. If you don't compulsively check in to the C++ world every day, it can be a great way to stay in touch. Even if you do, you might discover a source you're weren't checking before. It's a little less obtrusive than other ways of sharing links, I think. Check out the C++ Weekly and the team blog post introducing it.

Kate

Monday, 10 January 2011 08:44:04 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 29 December 2010
Visual Studio 2010 comes with a whole pile of project templates (C# WPF project, that sort of thing) and snippets. They get you started on new projects and save you a lot of time. But if you're a StyleCop user, they can frustrate you, because the code they generate for you can generate plenty of warnings.

The solution: new versions of these snippets and templates that are StyleCop-compliant. Plenty of XML comments, nothing left to default, generally nice code. Doug Holland has a blog post on this with plenty of examples and links. Take a look!

Kate

Wednesday, 29 December 2010 19:54:05 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 27 December 2010

I'm a big fan of Visual Studio 2010 extensibility; I've given talks at various places about extending Visual Studio yourself and using the gallery to find great extensions. I recommend specific extensions as part of other talks and there are many I can't live without. I came across a fun list by Terje Sandstrom of the extensions they like to use at Inmeta. I completely agree about Pro Power Tools, but I would also add Presentation Zoom and Code Snippet Designer. By the way, the All in One Code Framework is also listed on the gallery. It's just a link over to the CodePlex site, but it's a way to find it if you missed one of the zillion links from my blog.

If you're using Visual Studio 2010 and you're not taking a little time to explore the gallery and tweak the way your copy works, you're missing a chance to be more productive and to enjoy Visual Studio more. Take a look!

Kate

Monday, 27 December 2010 19:49:10 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 23 December 2010
It's the time of year where people set themselves goals - for the whole of 2011, for the next few months, or just in general. And you can read a lot about SMART goals and how great they are. Opinions vary on exactly what the letters stand for but I'll go with Specific, Measurable, Attainable, Relevant, and Timely. So if I'm giving you a performance review and I say "you should be more helpful", that is not a SMART goal because we can't measure your helpiness and it's also not terribly specific and I haven't given you any kind of time frame for improvement. If you're not helpier tomorrow, have you failed your goal? What about next week? Next month? How long do you have to get more helpful? If I say "you should fill out your timesheet more often" it's still not a SMART goal because it's vague and doesn't have a time element and so on. I can make it a SMART goal by saying something like this: "over the next 6 weeks, at least 5 weeks' timesheets will be completed by 10am of the next Monday morning." The relevance will have to come into play when I explain to you that late timesheets delay our billing of clients and mess up our cash flow. (Or whatever; we actually don't use timesheets here, but that's not the point.)

So OK, we have this concept. And it seems like a pretty good one. After all, if you write it like that, we can come back after 6 weeks (or whatever) and say "pass" or "fail". But let's look at the timesheet-laggard above. Let's say that person misses week 1 and week 2, then goes flawless after that. Still fail? If you feel that way, then as soon as the laggard misses week 2, why keep trying? You've blown the goal, right?

Then there's the matter of the consequences of blowing the goal. Am I going to fire you for messing up my invoicing and causing cash flow headaches and just generally not caring about the business? (I might.) But if you have a goal to pass a particular cert, and you fail it, is anyone going to fire you? Or you have a personal goal to run some distance under some time and you don't get to that time, will you give up running?

Here's I. M. Wright on why having a dozen year-long SMART goals is just wrong - they take so long to write, if people meet 11 out of 12 they can still have a fail of a year, they're all about you when you're actually part of a team, and so on. Since they're unavoidable at some companies, he has some suggestions how to have 4 or 5 really good ones. He also doesn't like SMART for stretch goals, and I agree. Christophe is more about how things change over an entire year, so the goal is probably not relevant by the time limit. The top answer to this StackOverflow question says they're not good for developers, period.

In answering this StackOverflow question I realized something. SMART goals are good for "shape up or else" goals, put on a person by someone else, that allow just a few weeks to achieve something really, well, specific, measurable, and relevant. Do your timesheets. Come to work on time. Include a decent comment when you check in your work. They're really not good for "be a better person", "lose weight", "make more money", or even "get a paid acting job". You just need a different way to express and measure progress on those kind of goals. If you're setting a goal for yourself, unless you think you're correcting a deficiency and have consequences lined up for failure, don't make it a SMART goal.

Kate

Thursday, 23 December 2010 16:48:30 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 21 December 2010
According to Darryl Taft, the top languages for next year (and this may surprise you) are going to be Java, C, and C++. You're probably all ready to disagree, but understand the criteria:

... the workhorse languages such as C and C++ continue to remain at the top end of the software development landscape in terms of language use and job potential (despite growing more slowly and even decreasing, according to some sources). Moreover, this list is not intended to highlight the hot, hip new languages on the horizon, but to focus on where programmers can go to look for work.

There's a large body of work being done in languages that are not new, or hot, or trendy, but that have been around for long enough to develop a body of developers and libraries that enable getting things done. The volume of code that will not be ported to new and exciting languages, and will be maintained in its current language for years and decades, will always outweigh the volume of code that is being written from scratch right now or being ported. If you want a job, knowing an "old workhorse" language is a good thing.

Darryl profiles 18 languages in all: Java, C, C++, C#, JavaScript, Perl, PHP, VB, Python, Ruby, Objective-C, ActionScript, Groovy, Go, Scala, Erlang, Clojure, and F#. That is an awful lot of curly brackets, a very high placement for Objective-C given that it really does only one thing, and a fair dose of hot/new/trendy once you get past the top ten. Worth a read!

Kate


Tuesday, 21 December 2010 13:50:01 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 25 November 2010
You know I just love jumplists. Probably my favourite app to have a jumplist is Windows Explorer. After all for Word, PowerPoint, Visual Studio and so on, there is a MRU list on the file menu or the like. But getting to folders I've used recently is super important to me.

That's why I kind of freaked out when the jumplist for my Windows Explorer disappeared.



I tried rebooting my laptop (something I do less than once a week.) No help. I caught up on updates. No help. So I started searching. And I found two articles, one about a jumplist that is slow to load itself, and other other about an "orphaned" item that couldn't be removed from a jumplist. That one helped me realize the likely cause of my problem - although I hadn't pinned a mapped folder, I had mapped a drive at a client site, and now that drive wasn't accessible any more, which is perhaps why the jumplist wasn't loading.

But anyway, what to do? Based on what I read in those two articles, I navigated to %APPDATA%\Microsoft\Windows\Recent\AutomaticDestinations (that's exactly what I typed into the Run box, it figures out %APPDATA% for you.) There I saw a whole pile of apps with a strange extension, a little reminiscent of the files that hold the details for libraries:



If you open any of these files in Notepad, you'll see that amongst all kinds of unintelligible strings are paths to files you've dealt with recently. What's more, you can kind of guess which app each file is for by looking at those paths - one file will have a bunch of .pptx files mentioned in it, while another will have a bunch of .xlsx files.  Now, which one is Windows Explorer?

Well, both articles said the same name: 1b4dd67f29cb1962.automaticDestinations-ms.I had a file called that, and when I browsed in Windows Explorer to another folder, the timestamp on that file changed. It seemed quite sure that it was for Windows Explorer on my machine too. So, I deleted it, as the articles suggested. Now I still had no jumplist, but when I then browsed to another folder, I had a jumplist with one item in it. From then on life was back to normal.

Something to know if you get a stuck jumplist someday.

Kate
Thursday, 25 November 2010 13:42:06 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 21 November 2010

Opinions seem to vary a little on the birthday of Windows. Charles Petzold says the files are dated November 15th, 1985. Ray Ozzie says it's the 20th. ComputerWorld says the 20th also.

Whatever you think the date should be, you really need to read the article by Charles. He did a keynote "selling" Windows 1.0 (a product almost none of us used) as a solution to the problems of the day:

Will it spoil the gentle humour throughout the piece, written 5 years ago, if I show you the output of his demo? I think not:



He concludes:

And that is Windows, and I don’t know about you, but after this event is over, I’m going home and writing me some Windows apps.

I'm with you, man.

Kate
Sunday, 21 November 2010 16:57:18 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 13 November 2010

Wow, these things get up there fast! My sessions were very well received and I had such a great time doing them! In the order I delivered them, they are:

  • Women In Technology Panel - Claudia Woods, Freena Eijffinger, Paula Januszkiewicz, and Rhonda Layfield joined me to take questions from the audience and talk about what was on everyone's mind. There's really no video - just the title slide for the whole hour. Please listen!
  • The Windows API Code Pack: Add Windows 7 Features to Your Application - This one includes screen capture so you can follow along in the demos. You can also download the powerpoints from this page, and as I mention in the talk, the demo code is the samples that come with the Code Pack.
  • Modern Programming with C++0x in Microsoft Visual C++ 2010 - I had a great time delivering this talk even though it was the first time I delivered this version of it. The attendees responded by putting the talk in the top ten for the whole conference - thankyou! It, too captures the screen and slides, and you can download the powerpoints.
  • Advanced Programming Patterns for Windows 7 - Another talk I was doing for the first time and I enjoyed it too. If you'd like the sample code, stay tuned - I will blog when the recipes are released. The slides are with the video of the screen and slides.

If you came in person, thank you! If you couldn't be there, please watch the videos and leave me a comment. Speaking on technical topics really is the most fun you can have standing up, and I can't do it without audiences.

Kate

Saturday, 13 November 2010 08:41:15 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 11 November 2010
Pluralsight has some great offers for user group leaders that you should really know about. Even if you don't lead a group, make sure your leader knows, because some of these offers are for members. They're offering to send swag, subscriptions, and speakers (oh yes, that could include me, it sure couldn't hurt to ask, right?) to groups. What's more, unemployed user group members can have a free one-month subscription to the Pluralsight On-Demand! library - a fantastic all-you-can-eat way to get your skills modernized and get you back working again.

I wrote Windows 7 and Visual Studio Extensions courses for the library, and am working on plans for my next one. These are great people who really want everyone to learn as much as humanly possible, and work hard to make that happen. Take them up on this offer and you won't regret it!

Kate

Thursday, 11 November 2010 08:20:15 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 09 November 2010
BizSpark is an amazing program. Startups (companies under 3 years old with revenue under a million dollars a year) that are making software can have full access to Microsoft developer tools (yes, MSDN Ultimate for every developer in the company) for FREE. There is a $100 exit fee, but it costs you nothing to get started. We are a Network Partner and have sponsored a number of our mentoring clients into the program.



Well now some firms are seeing the end of that three-year membership ahead of them and wondering, what's next? Soma has announced a truly generous offer. Graduates from the program can have that exit fee (nominal as it was) waived, and can keep and continue to use all the software they acquired while in the program. For some, this will be all they need to keep on making great software with those tools. But some will want newer versions as they are released, or will want the Windows Azure subscriptions that come with an MSDN subscription. So for the (very low) price of about $1000 per developer, they can continue their subscriptions for another two years. That will take care of developer tools like Visual Studio. As well, they can buy Microsoft Software Assurance at half price, if they need production licenses of Windows or SQL Server.

If your startup has been in business three years, and you've been paying people and renting an office all that time, I'm sure these prices look delightfully affordable to you. If you've been hesitating about joining BizSpark because you weren't sure what would happen after the three years, well now you know, so don't hold back! For those who are eligible it really is the best deal in town.

Kate
Tuesday, 09 November 2010 08:13:33 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 05 November 2010

You may have noticed that the fall tour I'm doing features morning talks that go till about 11:30, and evening talks that start at 6pm. I've decided that between those two, I'll spend the afternoon in a coffee shop and host an "on the road coffee and code". As I explain on the Coffee and Code page I keep for this purpose, this is really informal. Just stop by, say hi, we can talk about whatever you like. If you were at the morning session, you might want to just walk with me from the venue to the coffee shop and continue the conversation. Or if you're coming to the evening session, you might want to try to find me during the afternoon to ask something specific, then head to the venue together. Or maybe you have a topic to discuss that has nothing to do with Building Awesome Windows 7 Applications in managed code: a C++ question, or an extending Visual Studio 2010 question, or whatever. That's great, and the Coffee and Code format is just the place for us to have that chat.

Levitating coffee cup from microsoft.ca/office  Ancient laptop from microsoft.ca/office

If you live or work near the venues for the fall tour, I'd appreciate your suggestions (by email or twitter) for where to hold these. Obviously we need wifi, power, and a table we can hog for most of the day. My default choice is Starbucks, but if you know a better one that I can easily walk to, please tell me about it. Once I've chosen the location I can finalize the times.

Looking forward to meeting everyone,

Kate

Friday, 05 November 2010 11:10:46 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 01 November 2010

Here's something that happens to me a lot. I'm working on a project that is mostly Technology A, but I need a little Technology B. I want a sample or two to show me what it can do. I search the web, but often find mostly things written by people who don't know what they're doing and are posting their (possibly flawed) code into question-and-answer forums. I search MSDN, but often the newest technologies don't have their samples yet. I also remember to check if the All-in-One Framework people (I blogged about their coding standards document earlier) have anything. And if I still get nowhere I start asking people I know if they have one.

Well, now those helpful folks at All-in-One are kicking it up a notch. And remember, they cover all technologies and languages related to Microsoft tools. (Want to know more about them? Here's a fun video.)

And this goes back to one of my earliest blog posts - what you want may be what I need to give. Imagine it's your job to decide what samples to write. How are you ever going to find out what developers out in the big wide world want samples of? You could come up with a great idea and then find out people already had all the samples they needed for that. So that person wants ideas for samples. And here you are needing a sample. See how that works?

Just visit the wiki page and follow their instructions. It's a tad more complex than "shoot me an email and tell me what you need" and for good reason. Give it a whirl if there's something you need!

Kate

Monday, 01 November 2010 10:40:23 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 30 October 2010
Think you can write a TFS client for Windows Phone 7? Think you can do it by the end of November? Would you like a free MSDN subscription with Visual Studio Ultimate worth about $15,000 Canadian? Then you need to read Barry Gervin's post where he offers you not just that, but several (probably more valuable) introductions and blog mentions.

Now, you don't need to write all of Team Explorer. Barry suggests build status, dashboards, work item editing, and of course connecting to what the phone knows about People on the team. And he wants to hear from those who are trying, so he can help make it happen.

Interested? Plan your code, email Barry, write your code, and in the end email him the code and maybe a video demo by November 30th. Easy, right?

Kate

Saturday, 30 October 2010 11:13:14 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 28 October 2010
Thanks to the Markham .NET Users Group for passing along this job opportunity. The full description is in a Word document on the user group website. Here are some things that jumped out at me:
  • The company is big enough to have an IT department who will support you
  • They use a variety of Microsoft technologies including some reasonably new stuff like Workflow
  • You should have experience doing web and database development with Microsoft tools
  • They have Windows applications too, and need you to know about concurrency and threading
  • They want you to gather requirements and to train end users as well as write code, so you need to be well rounded and enjoy a variety of types of work
My guess is they are not a software development house but a manufacturing company. These jobs can be very rewarding because you get more responsibility more quickly, but on the other hand there may not be a career track to senior dev, architect, manager of devs etc because there aren't that many developers in the building.

It's nice to see they want to hire two developers. You know you won't be a team of one, anyway! If you're interested, please follow the instructions on the user group web site, which is to send an email to a specific email address with specific information in the subject line. Emailing me or commenting on this post won't help, sorry.

Kate


Thursday, 28 October 2010 11:06:15 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 26 October 2010

If you search for my name in the Tech Ed Europe session list, you'll see four sessions. But I've only blogged about three: Modern C++, Windows 7 Development with Code Pack, and Advanced Windows 7 Development. Now it's time to talk about the fourth, the Women in Technology Panel. I've been asked to run it this year, which is a big honour for me and one I'm pleased to take on. I have found four great panelists who are not all the same age, don't all live in the same place, and don't all do the same kinds of work. I hope that makes the conversation useful to a wide variety of attendees.

Here's the abstract:

If you're a woman in technology, or if you care about the topic (fathers of daughters, this is your cue) then come to the Women in Technology gathering at end-of-day Tuesday. Our panelists Claudia Woods, Freena Eijffinger, Kate Gregory, Paula Januszkiewicz, and Rhonda Layfield span a variety of ages, geographies, and technical interests, and we want to hear from you. What are the issues in your working life? How can companies attract and retain a diversity of technical staff, including women of all ages? Is work/life balance a myth? How can you find your strengths and your friends in this field? Bring your business cards and get ready to meet some of the other women who have come to Tech Ed, as attendees, speakers, or staff. Let's share experiences and advice, support each other, and learn from each other.

Does that sound good? It does to me. And here's a special invitation. It starts at 6, as you can see online. But the panelists will all be there at 5:30 along with some refreshments. So please, come a little early and mingle, then we'll do the full-on panel thing at 6, but we'll have started to get to know each other already by then. See you there!

Kate

ps: I really do mean it when I say men welcome.

Tuesday, 26 October 2010 16:00:12 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 20 October 2010

I've been pretty active lately on StackOverflow, a question-and-answer site where people ask "what does this error message mean and I how can I make it go away?" for a variety of languages, platforms, and business purposes. There are a number of brilliant features on StackOverflow including voting on both questions and answers, and closing questions that are off topic for the site. This means less junk to wade through and a bit more confidence that any particular answer is actually going to be helpful.

One of the reasons questions get closed on StackOverflow is because they don't have an answer. There's a category of nasty questions of the form "Have you stopped [bad thing] yet?" that have no answer. If you never [bad thing]'ed in your life, then you obviously haven't stopped. Yet answering "no" implies you continue to [bad thing]. Answering "yes" implies you [bad thing]'ed for some time, but have no stopped. Either way, it's bad. So I knew the question "Should LINQ be avoided because it's slow?" was going to be closed. And sure enough, it was. But not before some really excellent answers and comments accrued to it. Like these:

  • I would not avoid code because it only executes 250 million cycles a second instead of around 750 million, unless that kind of throughput is an actual business case. Also, chances are that the data comes from something that is a lot slower than this code anyway (a database, disk, ...). Go for what seems most convenient and optimize where it matters.
  • Slow is irrelevant to your customers, your management and your stakeholders. Not fast enough is extremely relevant. Never measure how fast something is; that tells you nothing that you can use to base a business decision on. Measure how close to being acceptable to the customer it is. If it is acceptable then stop spending money on making it faster; it's already good enough.

  • So what you're saying is that the devil you know is better than the devil you don't. Which is fine, if you like making business decisions on the basis of old sayings. I think it is generally a better idea to make business decisions based on informed opinions derived from empirical measurements.
Those last two are by Eric Lippert. Yes, that Eric Lippert. He's answered almost a thousand StackOverflow questions, and he's by no means the only product team member who's answering questions there. In addition, other answers fix a different perf bug in the asker's code (an unnecessary and expensive cast) and provide a wide range of opinions about performance decisions, architecture, choosing technologies and so on.

I love StackOverflow for fixing immediate blocking problems, but don't neglect the possibility of gaining philosophical wisdom from reading an offtopic question or two.

Kate
Wednesday, 20 October 2010 12:55:03 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 12 October 2010

I'm teaching OO design and UML again this term, and one of the things I emphasize to the class is the dangers of coupling. (Get your mind out of the gutter, I mean classes with dependencies on each other.) It's not about calling methods of each other necessarily; it's more about if-I-change-this-one, I'll-have-to-change-this-one-too. Changes that ripple through a system are expensive and dangerous.

When I am helping clients with interop, they are often surprised to learn how entire applications and libraries can depend on each other without ever calling each other's code. For example, App A writes a record to a database table. Service B checks the table regularly for new records (or records with a 0 in the Handled column, or whatever) and calls a web service (or whatever.) Those applications are now coupled - if a change in one necessitates a change in the format of that table (or its name, etc) then the other must be changed too. Thinking ahead and doing all you can to reduce this kind of coupling is part of the challenge of doing good application integration, even if there are no interop calls in the solution.

And then there's performance. So often left until last, it provides another consideration that you should ideally have in mind all the way along. And as Rico Mariani points out, it also couples applications and libraries you may have thought were independent:

Two subsystems that both (loosely) use 2/3 of the L2 cache are going to use 4/3 of a cache... that’s not good. There may be no lines between them in the architecture diagram but they are going to destroy each others ability to work.

Sound advice as always. Please read the post, and keep one more "don't forget" floating around as you design and architect your systems and solutions.

Kate

Tuesday, 12 October 2010 10:58:52 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 08 October 2010
I've gained a lot of Twitter followers in the last few days, and I'm pretty sure I know why. John Bristowe included me on a list of Canadian Developers that includes a full list of luminaries. I counted 112, and he's included blog links as well as Twitter handles. Most, but not all, are .NET developers. John follows all of them (us), which shows remarkable dedication. Why not take a look and see if there's someone there you'd like to follow too?

Kate

Friday, 08 October 2010 17:43:25 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 04 October 2010

I started paying attention to "app compat" around the time Vista was in beta. It stands for Application Compatibility and refers to all the various techniques for ensuring that an application continues to work when it's moved to a new environment, such as from XP to Vista or to Windows 7. Some of these techniques involve changing the source code of the application and rebuilding it, but others don't. And paradoxically, in order to be good at those no-writing-code techniques it helps if you're really a good developer. It really helps if you have strong skills in areas that the .NET Framework generally hides away or abstracts from you.

There are folks whose job it is to solve app compat problems. It's the kind of job that really appeals to me, where you aren't exactly sure how things are going to go each day when you get up, and you think on your feet and react to what you find. And now there's an opening to be such a person if that interests you. Aaron Margosis writes:

The job is basically to figure out why applications that are important to the customer and that work on earlier versions of Windows (typically running as admin) no longer work on Windows 7, and then to get the apps to work correctly without reducing security posture and (typically) without seeing or touching source code. Don’t worry – we will teach you the tricks.If you enjoy problem solving on the Windows platform, you will love this job.

Interested? Have some experience writing Windows apps in native C++ or C? Know a little about how Windows works? Think that being handed unknown problems and asked to fix them is more fun than a regular job? Then read the blog post and apply!

Kate

Monday, 04 October 2010 17:29:10 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 28 September 2010

I love this image:

I know this is true because in my role as friends-and-family help desk, I get people to read the error messages and then I repeat whatever they just told me and then they are like "oh, I get it! Thanks! I'm glad I know someone who understands these darn computers!" This works over the phone when I can't even see the message.

Now why am I mentioning this, besides the fact I love this dialog? Because it comes from a lovely blog entry by Chris Jackson on why app compat problems can't be fixed by talking to the user about them. You slave over a lovely dialog with a button which might as well say CLICK HERE TO GET A VERSION THAT DOESN'T HAVE THIS PROBLEM or a checkbox that might as well say CHECK THIS IF YOU DON'T THINK ITS A PROBLEM AND ARE SICK OF BEING REMINDED but instead the user clicks JUST THIS ONCE I WANT TO USE THE OLD ONE BUT BE SURE TO TELL ME ALL THIS AGAIN NEXT TIME. 

Is there a solution? I don't know. But you need to know people are like this.

Kate

Tuesday, 28 September 2010 14:36:19 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 24 September 2010
I've mentioned the Pluralsight library many a time. I have three courses in it: Windows 7 development, Extending Visual Studio 2010 without writing code, and Extending Visual Studio 2010 with code. There are a variety of subscription plans available, each with their own benefits. But of all the possible prices you could pay, I'm betting that "free" is the one you would be happiest paying. Am I right?

Well, if you have an MSDN subscription, you can have a month of the Pluralsight library for free. That should give you a great idea of what the courses are like and what you can learn from them. Try it out!

KAte

Friday, 24 September 2010 16:29:08 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 22 September 2010
I came across this blog post of a farewell email from Philip Su, written as he was leaving Microsoft after twelve years. You might expect that someone leaving a company would have some negative things to say about it, but not Philip. He sounds like a very nice person and one who's done pretty well by being nice. I thoroughly approve. It is full of specific and actionable advice as well as philosophy. I liked "Smart people understand why smart people disagree." and his thoughts on how people rank themselves, and what influences their ranking of others.

Well worth a read.

Kate

Wednesday, 22 September 2010 16:16:33 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 18 September 2010
A first glance, a book about social media might seem to be "dancing about architecture." But of course the target audience for the book is people who are not yet fully fluent in social media and it makes perfect sense to talk to such people using a medium in which they are fully fluent. That means book form makes sense.

I was lucky enough to get a preview copy of Working the Crowd: Social Media Marketing for Business from Eileen Brown. She and I have been working together and bumping into each other for years, which is why I agreed to read it. But I'm recommending it simply because it's good. It's full of no-nonsense advice and useful anecdotes. Just a few pages in, for example, she says:

If you want to progress in business, don’t wait to be discovered.  Make sure you have a great online profile and a positive brand.  

I'm not saying that no-one has thought of that before. I am saying that clearly stated and useful advice is a good thing, and this book is full of such advice. She clearly tackles this "this is just a fad" crowd, explains about "influencers" (like me) and lays out specific actions steps you can follow to have a good social media experience. This includes how to measure what is happening, which most companies desparately need. She even covers specific sites and tools, guidelines for blogging and Twitter, and how to protect yourself from reputation damage or legal consequences.

It's a good book. If you don't have a social media strategy yet, then reading this one will take you a long way forward. I recommend it to any business wondering about "the twitter". You can pre-order on Amazon now and I suggest you do, though you may want to adjust this link to point to the Amazon nearest you.

Kate

Saturday, 18 September 2010 13:36:43 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 08 September 2010
Here's another thing I learned when preparing demos for a non technical crowd on Office 2010. Putting videos into PowerPoint can actually be fun. My exposure to these was mostly at large keynotes and so on, where the speaker would play a video and stand there kind of awkwardly while it played. Not my thing.

Now, have you ever been at a party or get together that had a slideshow of pictures playing? Weddings, wakes, milestone birthday parties, seems like you can almost always spot a laptop in the corner just quietly cycling through dozens (or hundreds) of pictures. It's actually a really nice trend. Most of the people I know do that with PowerPoint. One picture per slide - sometimes filling the whole slide, sometimes with some text added - and then set it up to auto advance and to repeat indefinitely. Well, if you're going to do that, you can include videos as well. And PowerPoint has some built in tools to let you crop (or clip) the video, fade it in and out, even display it in a slightly more interesting layout.



I can see adding videos to my next slideshow using these tools. And not having to open a second product will make it that much more likely that I'll actually do it.

Kate
Wednesday, 08 September 2010 08:58:16 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 06 September 2010
Earlier this summer I was invited to talk to some non technical users about Office 2010. As always happens when I am preparing new material, I learned something. My problem is that I often learn how to do things and then figure I'm done, I know how to do that. But software changes and sometimes the 11 step, 3 application approach that I've learned gets superseded by a much simpler way.

Here's an example: let's say you're putting together a Word document, but it's not a requirements document or a specification or a response to an RFP. It's something a little more personal, a little less technical. It has actual photographs in it. Not screen shots, not a GIF exported from Visio, a photograph. You have the photograph, but it's not quite the right size, or perhaps it's too dark, or too light. You need to fiddle with the contrast and such. If you're a geeky person, you probably have various apps installed on your machine that can do that. So you open the photo in app 1, do something to it, maybe also in app 2 and do something else, and then finally you paste the picture into Word.

Well that process is just old school. Word can do all kinds of neat stuff right from within the app. Try it! Paste in a picture that needs some tweaking. Then select it, and click on Picture Tools.



You can adjust brightness and contrast with a live preview. Or try out the Artistic Effects:




This is a lot quicker than fooling around with multiple applications, and makes this sort of document fun.

Kate
Monday, 06 September 2010 08:44:25 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 02 September 2010
I'm having a Coffee and Code of my own in downtown Toronto on September 23rd all afternoon. Actually, I'll start at 11 and be there until 6 to catch the "stop by after work" folks. If you've heard of Coffee and Code at all, you know how this works. If you haven't, I've made a page on our web site about it. Just drop in and ask me "Is it true that the C++ language is getting new keywords and stuff? How can that be? And does it really matter?" or "Do you have the Windows Phone 7 tools installed? Can you show me an app on the emulator?" or "Is Visual Studio 2010 really nicer than Visual Studio 2008?" or "What local user group meetings should I be coming to?" or whatever else is on your mind.

So stop by any time between 11 and 6 on the 23rd to the Starbucks at Yonge and King. I'll be at the big table at the back, just walk up and say hi. We'll talk about whatever is on your mind, maybe some of you will talk amongst yourselves, maybe you'll show me what you're working on. I'm looking forward to it!

Kate

Thursday, 02 September 2010 10:18:01 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 27 August 2010
As a new school year starts to roll around I naturally pay a little more attention to articles about undergraduate education. I'm once again teaching a one-term course on Object Oriented Design and UML at Trent University in Peterborough. This is of course just one piece of the curriculum. Trent is an interdisciplinary place and its graduates are expected to understand the concepts that underpin what they're learning. In fact this is what I see as the main difference between those with a university education and those without (though there are exceptions on both sides.) It's one thing to learn, perhaps by rote, the steps required to make a certain kind of application, and it's another to understand what you are doing and why. The latter kind of person generally finds it easier and easier to learn new things, connecting them to things already known, while the former finds it harder and harder as a mass of seemingly-unconnected facts moil around in an overly-crammed head that feels ready to explode.

I approve of valuing concepts over specific how-to's. It's hard work keeping up with the very latest technology when all you're doing is using it. It's even harder when you're also working on concepts and trying to teach. I don't expect a university to teach students how to use a specific user interface framework (MFC, Winforms, WPF, whatever) -- I expect it to teach them user interface concepts, illustrated with some framework the prof happens to know that's generally available. The students can then learn a variety of UI frameworks over their careers. But that doesn't mean I approve of all the ways in which programming as part of undergraduate education varies from programming in real life. Two specific variations I have a problem with are team size and problem size.

In real life, it's rare to work all alone, all the more so when you've only just graduated. Most university computer science grads will join a team of 2-10 developers reporting to a lead of some sort, with various people from QA, user reps, the business people and so on having various positions of semi-authority, semi-teammate in relation to them. Yet undergrads are generally expected to work alone on all projects and never discuss them with anyone until handing them in.

In real life, problems are not well specified, certainly not as tightly as undergrad assignments are. Most importantly, in real life user input is bizarrely ill formed. Users type letters where numbers belong, leave mandatory fields blank, even deliberately construct complicated bad input as part of hacking attempts. Yet most undergrad assignments do little or no input validation or error handling unless those are the point of the assignment. And of course, most undergrad assignments can be completed by an inexperienced programmer working alone a few hours a week (10 at most) in a week or two while most real problems take weeks and months of work by one or more dedicated resources to produce even a preliminary solution.

Trent (and I presume most other universities) addresses these issues with a fourth year course in which a team of students works on a real problem for an outside entity - usually a local firm or charity. They must gather requirements, code, test and implement a solution, and present to their peers and professors a summary of the project. Some students benefit immensely from this, though most take on far too big a challenge and struggle to complete it.

My contribution is to point out to my students where things are being simplified for them, where things would be vastly different in real life. Undergraduate courses simply cannot be the same as on the job training, and I don't want them to be. I want my students to be learning concepts and underpinnings as much as language syntax and how to work particular tools. But I want them to understand that when they start to put all this to use, things will feel very different than they did during class time. An assignment from your boss and an assignment from me are very different. (I've blogged before that in real life, you don't get 7/10, you have to keep doing it until it is right.)

I don't have all the answers. Lots of people muse about this stuff. Here's the inventor of C++ on the same issues. Easy to complain, hard to do anything about it, but we can all do our bit.

Kate

Friday, 27 August 2010 16:45:29 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 21 August 2010

Recently, I was shown this quote. The person who showed it (in a general talk, not to me personally and specifically) is a smart person I respect, so I'm going to leave that person un-named. The authors of the quote, Kernighan and Plauger, are legends of the field. In 1979 (the very same year I was first paid to program) they wrote:

1. If a program is incorrect, it matters little what the documentation says.
2. If documentation does not agree with the code, it is not worth much.
3. Consequently, code must largely document itself. If it cannot, rewrite the code rather than increase the supplementary documentation. Good code needs fewer comments than bad code does.
4. Comments should provide additional information that is not readily obtainable from the code itself. They should never parrot the code.
5. Mnemonic variable names and labels, and a layout that emphasizes logical structure, help make a program self-documenting.

In general, I agree with this. Point 5 is really strong. But when I watched that person I respect walk through this quote I suddenly realized, for the first time in all the times I've seen this, that 1 and 2 are wrong. Really. They're wrong.

Imagine you came across this in a code review:
// Process the first 5 elements
for(i = 0; i <= 5; i++)
{
ProcessElement(i);
}
I hope it's clear that this code actually processes 6 elements. The program is almost certainly incorrect. Perhaps the reason we're reviewing this part of the code is that there is some sort of message in the event log or unprocessed records or incorrect answers that have led us here, suspecting and hoping to find some incorrect code. And look! A comment that disagrees with the code! It's like a giant arrow pointing to the incorrect code. The documentation doesn't agree with the code, and that's great! It makes it really likely that we've found the bug. This sort of thing happens all the time - developers write the correct logic, as agreed in the requirements, into a comment, but sometimes make mechanical errors in representing that logic in code.

If a program is incorrect, comments that represent what the developer hoped or planned or tried to write may be of great value in rendering the program correct (fixing the bug.) If the documentation doesn't agree with the code, with any luck at least one of them is correct.

I still actually agree with the conclusions of the quote, and of those who quote it. Good variable names and function names, well structured code, and written requirements are all more helpful than comments inside the code, as I've written before. A true conclusion can follow from a false premise. Still, I was initially shocked to find myself disagreeing with these premises, and I wanted to share that insight. And don't feel bad if you leave "translating into English" comments around from time to time. They may surprise you some day.

Kate

Saturday, 21 August 2010 13:34:03 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 17 August 2010
This is a story you might find hard to believe. A guy's project is cancelled and he's laid off, but he just shows up to his building (without being paid) and keeps working on it. He gets other people to help him and the product actually ships! One of my favourite quotes:

"The secret to programming is not intelligence, though of course that helps. It is not hard work or experience, though they help, too. The secret to programming is having smart friends."

Could this happen today? Almost certainly not. It probably couldn't even happen in another company. Remember the start of all this wasn't the support from former coworkers - that only happened once the product was almost done and the glamour of working unpaid on a feature caught on. The start of this was that a laid-off guy's badge still worked, and then when it finally stopped working he was able to tailgate through the doors every morning. Which leads to my second favourite quote:

"We wanted to release a Windows version as part of Windows 98, but sadly, Microsoft has effective building security."

A fun read and a reminder of how some people felt (and still feel) about creating software.

Kate

Tuesday, 17 August 2010 10:46:52 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 13 August 2010
I'm curious about Windows Phone 7, and I've been playing around a bit with the development tools. So when I read that Joey deVilla was holding another of his semi-regular Coffee and Code sessions in downtown Toronto, and bringing his phone, I made the last minute decision to pop down there and join them. I'm really glad I did.

A steady stream of people stopped by, mostly just to look at the phone, but a few to deploy their code onto it and see it in live action. There were technical conversations, and some less technical, and a general good time. Joey's blogged about it (with pictures) and is looking for folks who think these would be fun where they live. Let him know if you would participate.

Kate

Friday, 13 August 2010 09:45:11 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 07 August 2010
I got a call this week from a recruiter who is trying to find senior C++ developers for a firm with a growing need. He has placed people with them in the past and it's worked out well and they want more. They write performance-sensitive applications for the financial industry and need someone who's comfortable with templates, and has experience with applications that process high volumes of data. If you're interested, drop me an email and I'll forward it to him for you. Good luck!

Kate

Saturday, 07 August 2010 12:46:31 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 01 August 2010
I've done a lot of training in my day. I really enjoy it - you get immediate satisfaction, as a trainer, from seeing people leave changed by having spent a week with you. It's one of the easiest ways to have a major impact on someone's career and even their life. These days, there's a lot less of it going on. Partly it's because technology has enabled other ways of learning. Partly it's because we're a lot more "fast-paced" - someone who realizes they are missing knowledge will search for it online, ask on StackOverflow, watch a recorded talk or screencast and then carry on, rather than waiting several weeks to be able to go on course. There is still a lot to be said, however, for spending a day or three days or a week with a really smart person who has committed to making you better at something you don't know enough about.

So why would someone who was lucky enough to be "sent on course" by their employer, or who has invested their own time and money on taking a course, waste that opportunity with self defeating behaviours? I don't know, but I know for a fact that it happens. I've had people in my courses who didn't care, who didn't want to learn, who were hostile to the language or tools or methodology I was there to tell them about. Sadder still were the people who did care, wanted to learn, wanted to learn this topic, but still chose to act in a way that prevented it. Back in the day when you couldn't check your email in class (no wireless, and email on phones was rare) it was the folks who burst out into the hall at every coffee break and every lab period to go check their email and voicemail. Often they would say "I read the exercise and I only need 10 minutes for that, so I'll check my messages then come back and do it." My reply was always "if you really only need 10 minutes, do the exercise and then go check your messages." But this group of people can't make the training their top priority even for this one day, this one week. And often, they don't learn much as a result. In person training is probably a bad fit for them, and they might even give it a bad name. Then there's the showoff, the arguer, the "sorry I was zoned out can you say that all over again", and so on.

Paul Randal and Kimberly Tripp are still teaching more than I ever did. And now Paul's written up a lovely list of ten things NOT to do when you're on a course. None of it is SQL-specific and it's all good advice. Enjoy.

Kate

Sunday, 01 August 2010 11:58:21 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 28 July 2010

Here are some interesting lists. Each of them is fleshed out in a blog post you really should read. I'll give you the lists so you know you want to read them.

First, Ted Neward on 10 Things To Improve Your Development Career:

10: Build a PC.
9: Pick a destination
8: Be a bell curve
7: Learn one new thing every year
6: Practice, practice, practice
5: Turn off the TV
4: Have a life
3: Practice on a cadaver
2: Administer the system
1: Cultivate a peer group

Some of those are metaphors: I'll let Ted explain them.

Then, we have Jim Carroll and How to Get Faster When the World is Faster:

  • build up experiential capital
  • master collaboration and share
  • focus on tactical to strategic transitions
  • fuse generational insight
  • take on anticipatory projects
  • be a farmer
  • displace indecision
  • implement quicker
  • think bold

The advice is aimed at entire companies, but I think it can resonate well with an individual. Again well worth the read.

And then there's John MacIntyre and 11 Personal Programming Assumptions That Were Incorrect.

  1. The customer and user are the same person.
  2. You isolate and kill all bugs without exception.
  3. Writing beautiful software as an act of craftsmanship.
  4. Working 24/7 would be rewarded.
  5. Vendors can be believed.
  6. You are not actually working from the monitor.
  7. That I wasn’t a very good programmer.
  8. You need to / should grok a language or tool before you even start.
  9. You don’t say you know something unless you’ve grok’d it.
  10. Other programmers saw beauty in their work.
  11. The best programmer is recognized.

There's some cynicism in there, but others might call it realism. I suspect most of this you have to learn from experience, but perhaps you recognize a few?

Kate

Wednesday, 28 July 2010 11:48:33 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 14 July 2010

Here is something I've been asked more than once, and seen asked on various forums as well. I'll paraphrase rather than quote one specific asker:

We have an application written 15 years ago that's been working flawlessly. But when we run it on Windows 7, the users can't find the files it writes. Worse, there are no error messages, so they think they've saved the files, but when they go to C:\Program Files\MyGreatSoftware\UserExports - the files aren't there! 

Often, the question trails off into a rant about how sneaky and mean Windows 7 is to somehow prevent access to Program Files but not give error messages. The rant might also include a paean to how amazing the lost files were and how many workyears of productivity have been lost now that these files cannot be found, and why this means you can't trust Windows to do something as simple as write a file to the hard drive. Sometimes, the asker has established that this is related to UAC and they are recommending everyone turn it off to avoid this disaster. I thought I would make some less drastic suggestions.

First, your files are not lost. A few people know this, but they then claim the files are almost impossible to find and no end user will ever find them. Let's tackle this one first because if you know this trick you may be able to get by without changing anything else about your application. Tell the user to go to the place they expect to find the files, say C:\Program Files\MyGreatSoftware\UserExports. Then have them look in the toolbar for a button that says Compatibility Files. Click it. Ta-da!

Ok, now the next thing is, why the heck are your files being written there? Because you are trying to write to a protected area and you don't have a manifest. You have several things you can do about this, and they boil down to two main things:

One, don't write to a protected area. You can get this by installing somewhere other than Program Files (not a good idea) or by changing the application to write to a better place. Two, get permission to write to the protected area. This means running as administrator. Train the users to right-click Run As Administrator when they run the app, or train them to set the Compatibility Settings for the app (neither very likely) or ship the application with a manifest that includes requireAdministrator. Now matter how you arrange this second thing, your users are not going to like agreeing to the UAC prompt every darn time. So really, that brings you back to number one, don't write to a protected area. Use AppData instead - there's a simple function call to get that path on any machine (including older XP machines) and you'll be in fine shape. If you think your users can't find that, and the files are for the users and not just some internal settings, then use a folder under Documents - again, there's a simple function call that will get you the path.

If virtualization makes you nuts - that your code thinks it's writing to C:\Program Files\whatever but really it's writing somewhere else, and the OS is cheerfully lying to it and saying all the writes succeeded - then put a manifest on your app. Doesn't matter whether it's requireAdministrator or asInvoker. Doesn't matter whether it's embedded (VS will embed them for you from 2008 on easily, and there are tools that do just manifest adding) or just a file of XML in the same folder as the exe. Once the app has a manifest, virtualization stops. Of course this may mean the users get all kinds of Access Denied errors that they don't like. Now you see why virtualization was invented.

Should you rely on it? No. For one thing, it may go away in some future version of Windows. And it goes away when you add a manifest, which for many people happened when they migrated to a new version of Visual Studio. What you should do is understand it, including how to find the virtual store, so it doesn't make you quite so crazy.

Now go turn UAC back on,

Kate

Wednesday, 14 July 2010 09:25:20 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 10 July 2010

I'm not sure when this started, but DevX has a whole area for Visual Studio 2010 articles. They've got handy links to download a trial and a training kit, walkthroughs of creating extensions (a simple blogging one, and adding your own language to the IDE), and lots more. It's a combination of articles, webcasts, and downloads that cover not just Visual Studio but some of the things you can create with it and what's new in related tools. Of course I've seen some of the material before, but that just shows that it's comprehensive. Take a look around!

Kate

Saturday, 10 July 2010 08:31:40 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 08 July 2010

I'm an optimist. I'm always looking for (and usually finding) the bright side. I think this has served me very well over the years. Recently I read an interesting Fast Company article (an excerpt from a book) that described a problem solving approach based on looking for the bright side - well actually, what they call the bright spot:

Our focus, in times of change, goes instinctively to the problems at hand. What's broken and how do we fix it? This troubleshooting mind-set serves us well -- most of the time. If you run a nuclear power plant and your diagnostics turn up a disturbing signal once per month, you should most certainly obsess about it and fix the problem. And if your child brings home a report card with five As and one F, it makes sense to freak out about the F.

But in times of change, this mind-set will backfire. If we need to make major changes, then (by definition) we don't have a near-spotless report card. A lot of things are probably wrong. The "report card" for our diet, or our marriage, or our business, is full of Cs and Ds and Fs. So if you ask yourself, What's broken and how do I fix it?, you'll simply spin your wheels. You'll spend a lot of time agonizing over issues that are TBU - true but useless.

The article gives a number of examples of not trying to find the major underlying system cause and solve it with huge missions, but instead trying to find a localized success and encouraging it to spread. Interesting concept and well worth a read. How could you apply it to that totally-messed-up project or that new hire who has turned out to be so wrong?

Kate

Thursday, 08 July 2010 08:18:19 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 30 June 2010

I'm recording some videos again (I'll announce when the project is live) and I'm doing it, as I really like to these days, in a bootable VHD. I've got the environment set up just the way I like it, without messing with my day-to-day setup, and as an extra bonus I avoid the distractions that Outlook, Instant Messenger, Skype, and the Favorites menu in my browser have to offer. When I went to record the first video I realized I had forgotten to install Camtasia in the VHD so I quickly downloaded a trial from www.techsmith.com. I got to work recording my video, editing it, and so on. Then I rendered the video. This can take a few minutes, but I don't complain because I know it's doing a lot of work. But I got a great surprise ... this latest version uses the taskbar progress bar overlay, so that I can put the rendering into the background and work on something else full screen while it renders. I can still see at a glance how it's doing, but I don't have to keep the little progress window on top. It's a really nice touch.

Then as serendipity would have it I spotted this video on Channel 9 that calls out this and other Windows 7 features in TechSmith products. It's only 9 minutes long, so go and watch it. And if you haven't added Windows 7 features to your client apps yet, why not? It really makes a difference.

Kate

Wednesday, 30 June 2010 19:22:20 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 28 June 2010

With summer finally under way for real it seems like a million years until the fall. But in the world of event organizing, autumn is just around the corner. Session selection for TechDays is in the final stages and I'm looking forward to seeing the completed list. In the meantime, the Early Bird pricing is still in effect.

There will be an event roughly every two weeks from mid September to mid December. In each city (Vancouver, Calgary, Edmonton, Winnipeg, Toronto, Ottawa, Montreal, and Halifax) it will be two days, and while most of the sessions will be the same in every city, a new Local Flavours track will vary from location to location - just as the local tech folk vary! You can register now - go ahead! If you have some questions, Damir has answers for you.

Kate

Monday, 28 June 2010 19:22:03 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 14 June 2010
Metaphors can be dangerous things. Just recently I got into a Twitter conversation with someone who was using the metaphor "it's like leaving your car unlocked, or your front door" - meaning something you would never do and would expect to be dangerous. But in my neck of the woods, that metaphor triggers different neurons, having a meaning more like something you regularly do and would never expect to be a problem. (I not only never lock my car in my or a neighbour's driveway, I also know many people who would leave their keys in their cars in someone else's driveway.) It doesn't really matter whether you think door locking is normal, the point is your metaphor needs to have the same meaning for your audience as it does for you.

For an example of a metaphor landing really badly, check out Scott Berkun's blog post on the "periodic table of visualization techniques." Now unlike Scott (who thinks the periodic table is obscure, complex, and unfondly remembered) I really like the periodic table. I think it carries a tremendous amount of important information in a very compact way, and explains some relationships succinctly. But I think it makes a poor metaphor when trying to discuss all the different ways you can present information visually. Plus, their particular version of it doesn't seem to have any actual periodicity, anything that's the same in each column, anything that's the same in each row, or any reason for the lengths of the rows. Always understand a metaphor before you use it. Otherwise you're working against your own goal - helping someone else understand your point.

Kate

Monday, 14 June 2010 11:52:59 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 10 June 2010

Another terrific Tech Ed has come to a close. I never really got used to the weather in New Orleans, but I loved the food, I loved that we could walk to just about every dinner or party, and I loved the locals I met. I would have liked a little less walking within the convention centre itself - that building is a mile long and I had to go the whole length and back several times each day!

I have a few pictures from inside for you.

This is the "RD couch" in the community area. Good for hanging out while waiting to be on Channel 9. As you can see, non-RDs were hanging out here too.

The table for the Code Pack was giving away copies of the Code Pack on these slightly bizarre USB keys. I meant to keep one for myself but got carried away handing them out at my session (along with cards for a free trial of the Pluralsight On Demand! library). Also the shot-glass-on-a-string-of-beads is pretty brilliant for New Orleans swag. "Give it a shot!" they say.

This is the room for my C++ talk. That's Juval Lowy, who spoke right before me, up on stage. You can see he did a pretty good job of filling the room, which holds 1000. I got somewhat less than that, but was happy with the turnout and the evals for the C++ talk. Both my talks are available online already, by the way, which is astonishingly quick.

I love the "face time" with Microsoft people (including "my" product teams as well as folks in marketing, developer outreach and education, and so on), with my fellow RDs, MVPs, INETA folks, and speakers of all stripes, and with attendees. Booth duty, where you spend long minutes shifting your weight from foot to foot praying someone will come by, is a bit like of box of chocolates. An eager attendee comes forward, meets your eye, smiles ... for every "can you tell me where to find the blinky Windows 7 pen?" there is a good solid question or expression of interest in my actual technology. I got one question on Wednesday from someone who just wanted to know what booth to go to for it to be answered, only to learn it was this booth and that in fact I was probably the only person in building who could have answered it. I sure liked that one!

Next year, Atlanta:

But I may not have to wait a year for another Tech Ed experience. :-)

Kate

Thursday, 10 June 2010 10:09:42 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 29 May 2010

It's no secret that I'm not in my twenties. After all, I'm in my fourth decade of being paid to program. (To be fair, you enter that decade as you pass the doing-it-for-30-years mark.) I have gained a lot of experience in all that time, and not all of it is programming experience. I am slowly gaining wisdom and judgment in general. But am I losing things? Am I perhaps closed off to new experiences, or stuck in the mud? Is there anything you can in general conclude about a person because of their age?

I have two problems with that line of thinking. The first is that differences between any two individuals in a group are always larger than the differences between groups. I can easily find two 20-somethings who differ from each other more than either differs from a 30-something or even an 80-something. Women in general may be shorter than men in general, but I'm sure we all know a man who is shorter than most women or a woman who is taller than most men. What you know about the group doesn't necessarily apply to the individual. My second problem is specific to age - some age related effects are actually related to "you went to university in the 70s" or "you learned to code in the age of GUIs" more than to how old you are, others are actually about your life experience, still others your work experience. Two 60-somethings may not have gone to university at the same time as each other or learned to code at the same time as each other. That makes it even harder to generalize based on a single piece of information - when you were born.

A few months back, 'Dave' posted a series of myths about older developers and then debunked them. Do you find yourself believing any of these?

  • Older software developers are more expensive
  • Older software developers are less flexible and less capable of learning new technologies
  • Older software developers are less able to perform the arduous tasks of software development (read: work long, painful hours)
  • Older software developers are less mentally agile
  • Older software developers are more jaded and cynical

My only issue with this list of myths is that it doesn't contain positive ones. It's also a myth that older developers are wiser, more tuned to business issues, better at talking to others, and so on. Some are -- I strongly believe I am -- and it takes a while to get there, but time passing isn't the only thing that brings about that change in a person.

I have to work with people a lot younger than me every day. Perhaps some of them think less of me because of my age at first. I'm pretty confident that doesn't last. If you're not an "older programmer" yet, I hope you aspire to be one someday.

Kate

Saturday, 29 May 2010 13:56:45 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 25 May 2010
When I started out in this industry (and I'm in my fourth decade of being paid to program) there was a definite culture of rudeness within it. Smart people weren't just allowed to be rude to not-so-smart people, it was expected. Being rude to others was how you proved you were smart, whether it was with a cutting insult thought up on your feet, or with a cruel proof of just where they had gone wrong. As a group we were especially fond of insulting those who weren't developers with brilliantly disguised insults they couldn't understand, or so the theory went. Who hasn't heard someone refer to "error codes" like PEBCAK or ID-ten-T?

But over the last generation or so I've noticed a switch. I hear the chair, keyboard thing still, but only self-referentially. That is after someone has asked for help, perhaps with a starting position of "I have found a bug in Windows", and then sorted it all out and realized they were doing something wrong, they may say "well it turns out the problem was between the chair and the keyboard after all, eh?". When I interview developers for a job at my firm, I ask about working with non developers (testers, technical writers, users, project managers) and I need to see (not just be told about) respect and interest for those people and those jobs.

Now not everyone feels that way. Meredith Levinson asks if there is a still a place for the "I'm smart, I don't need soft skills" geek pride of old. Commenters point out that speaking truth to power is important, and those who won't be rude sometimes don't do it. David Starr talks about how to tell someone that a thoughtless habit, like always coming late to meetings, is bothering you. I would skip the praise sandwich, but I support the idea of pointing out the consequences of something another person may have thought had none. Interestingly, Susanne Biro points out how people who are actively interested in learning soft or social skills can still be blundering about doing very rude things, apparently unaware.

I think in the end it's not that our industry has changed much. It's that people who are just starting out in it are often a bit rude. OK, sometimes they're very rude. But as they gain technical skill, many of them also gain the ability to take others into account and to work in teams. Those people get promoted. So now, hanging out with decision makers, with people who are allowed to represent their companies in public, with people who get paid to help other people get better, I mostly meet polite and interesting geeks. The rude ones probably still exist -- I just don't run into them very often. Which group would you rather be in?

Kate

Tuesday, 25 May 2010 08:02:37 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 23 May 2010
I have quoted Albert Einstein here before, but only one quote. Amber Naslund has found 14 nice quotes and connects them to social media issues. I'm sure you could find a way to connect those quotes to what you work on all day, too. I'm going to spend some time thinking about "Everything that can be counted does not necessarily count; everything that counts cannot necessarily be counted."

Kate

Sunday, 23 May 2010 23:08:34 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 19 May 2010

A colleague of mine who is not near Toronto has a client in Toronto who needs .NET developers. They would like to start out with a contract position and it could become permanent if it's a good fit for everyone. Here's the job description:

Position: Senior Programmer / Analyst

Pay: $7,500 per month contract (negotiable)

Applicant must be an expert or proficient in:

  • MFC
  • ATL
  • COM
  • .NET Framework  /  C#
  • .NET Services
  • Microsoft SQL Programming

Experience in the following areas would be helpful but not required:

  • WCF
  • WPF/SilverLight
  • ASP.NET
  • Visual SourceSafe
  • Mechanical engineering experience

Responsibilities:

The primary responsibility is to modernize a legacy C++ distributed application. This may include a redesign and possible rearchitect of the application. The final application should be an n-tiered application. The tiers would ideally be:

  • WPF/Silverlight  as the presentation layer
  • A business layer with business components (C#) exposed via WCF
  • A data layer

Where necessary, COM components can be preserved.

Other responsibilities include:

  • Move image files from file database to SQL database
  • Document the application
  • Handle ongoing change requests.

Someone who moved from C++ to C# but didn't forget their C++ would be perfect. They are looking for more than one person so it sounds like a fairly meaty project. This is strictly onsite work, no remote work, which is why I mentioned where they are (east of the DVP; west of Pickering.)

Anything you email to me about this I will forward to my colleague who will in turn forward it to the Toronto folks. Good luck!

Kate

Wednesday, 19 May 2010 16:19:23 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 17 May 2010

Have you seen this yet? It's a letter from Leonardo da Vinci (yes, that Leonardo da Vinci) to a prospective patron. He lists fully 9 paragraphs of way cool things he can do that are relevant to the warfare of the time (portable bridges, bombing strategies, stone flingers, ways of tunnelling into places and so on) and then mentions:

10. In times of peace I believe I can give perfect satisfaction and to the equal of any other in architecture and the composition of buildings public and private; and in guiding water from one place to another.

11. I can carry out sculpture in marble, bronze, or clay, and also I can do in painting whatever may be done, as well as any other, be he who he may.

Given how well he followed through on those last two (this letter was written before his most famous works) you kind of have to believe all the siege/bombardment stuff too.

The article I've linked to has an image of the actual letter - not in English of course - and some lovely commentary on what makes it a good cover letter. It's not really a resume but it sure is a job-getting device. Apparently the Duke did indeed hire him - as a painter, not a fighter. And if you'd like to see it translated into modern day geekery, I spotted that too.

Kate


Monday, 17 May 2010 17:22:49 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 11 May 2010

Programming is not one skill - it's a large conglomeration of skills. Some people are not very good programmers because they aren't very good at imagining their way through an algorithm. Others have great ideas and imagination, but it's painful to watch them type and they can't be bothered to learn how to use their tools (editors, etc) so they just take twice as long as everyone else to create the code. Still others are doing fine until their code does something unexpected, and then things fall apart, because they can't figure out what's going on. They step too soon, spend ages stepping through code that couldn't possibly cause the problem, then get impatient and end up skipping right past the problem. Worse, they don't seem to understand the capabilities of the debugger. I've watched people spend over 5 minutes patiently stepping into so that when they reach a particular line, they know how control reached it. Then I show them the Call Stack window and they say "oh".

I've blogged before about conditional breakpoints and tracepoints, hit counts, and so on. There is so much to the Visual Studio debugger that it is very hard to know it all. But the more you know, the better you are. And what's more, being a great debugger has more value than some of the other programming skills, because so much debugging happens at urgent times, is unexpected, and needs to be done as quickly and efficiently as possible. The difference in impact between being good and great is very large.

So how to be a better debugger? Partly, it's practice, especially practice with someone who's really good. That person can say "hey, what are you doing? Here's a way easier way to get there!" Even practice alone can motivate you to learn how to do something and get you reading the documentation or searching the web. You could buy a book, if anyone even buys books any more. You could take a debugging course, and spend a day or a week with someone who really knows every speck of this enormous tool. Of course, that costs money, travel time, and so on. Some of you will do it, and benefit from it tremendously.

But ALL of you can benefit from watching John Robbins' latest set of videos on Channel 9. It's in three parts and they total about three and a half hours. It hits the ground running and just doesn't stop. It's all using Visual Studio 2010 but the vast majority of the features he shows are in earlier versions too. I knew a lot of it (even the Go To Find box and the file opening etc) but I learned new things in the first ten minutes and continued to learn new things as they continued - both actual capabilities of the tool and interesting ways of thinking, like using hit counts on a breakpoint not to stop, but just to count how much some code gets run. I wish I could get the slides and code, but I guess some things need to be saved for the folks who actually take the course.

If you're a .NET developer, watch these videos. Now.

Kate

Tuesday, 11 May 2010 08:18:59 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 09 May 2010

I often carry links around for a while before I use them in a post. I'm not one of those "here's 53 things other people posted yesterday" types, though I read three of them (Jason, Chris, and Alvin) almost every morning. When I think something is interesting, I'll use it eventually. It's unusual for me to accumulate a lot of links from someone I don't know some other way, typically from having worked with them. But that's the state I find myself in now. Brent Ozar is actually a SQL MVP and I've found plenty of helpful information about SQL on his blog. But these three articles really aren't about SQL:

  • Why I Always Bill By The Hour - mostly about keeping a pleasant relationship and avoiding the blame game, plus not doing things for free just to be nice. We have some clients who run a tab and are charged for time spent, while for most we used fixed bids. What I like most about doing fixed bids is being able to decline work that is out of scope. The big problem with charging by the hour is that people expect that means you will do things when they ask you to. While that might seem fine, I assure you there are times it is not.
  • Salary Negotiations During the Interview - pretty much the exact opposite, for people who don't bill at all but work on salary. Can I just say as an honest and nice employer that it makes me mental when people won't say what they want to make? I had a guy tell me he would be ok with anything between $8 and $40 an hour for a summer job (he was in third year of university.) That is no more a range than "on the planet Earth" is a neighbourhood. I generally pay people what they want to be paid, or else don't hire them. So if you tell me the truth, I'm not going to argue you down from your number. I might decide you're not worth that much to me and so decline to hire you. I might hire you and then give you a 30% raise after 2 months (true story). But I sure won't say "really? I will offer you 80% of that." Ever. I think I might be odd though, because many people utterly refuse to tell me what they want to earn if they work for me. So I like that Brent says "If they keep pressing for your salary, don’t give them your current number – give them the number it would take to get you to switch." That works for me.
  • Rock Stars, Normal People, and You - how you can start presenting, writing, and generally becoming a "rock star" in our industry. There is absolutely no secret to this and there are literally hundreds of people who want to help others get good at this stuff. I like this quote: "Doing this stuff took time out of my personal life, but I was determined to make an investment in my career. I didn’t want to have another really crappy job search, bouncing from headhunter to headhunter, having to re-prove that I wasn’t an idiot and that I was worth money." And this one: "you’re still struggling to get a better job, a better speaking slot, or a speaking slot period, right? You think that Other People are the ones who get book offers, or Other People are the ones who get paid to speak. You’re wrong."

Fantastic advice.

Kate

Sunday, 09 May 2010 13:39:20 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 05 May 2010

I was just looking up the session codes for my Tech Ed talks next month (my flight to New Orleans leaves a month today, at about this time actually) and spotted something unexpected:

DEV316 | Modern Programming with C++0x in Microsoft Visual C++ 2010
Session Type: Breakout Session

Track: Developer Tools, Languages & Frameworks
Speaker(s): Kate Gregory
Level: 300 - Advanced
Why wait for the C++ committee to finish the specification when you can enjoy much of the power of C++0x today! C++0x, the next C++ standard, is almost upon us and it contains the most important updates to the language since the mid-90s. It even accepts the existence of multiple threads for the first time in the history of the language. Needless to say, these new features bring more expressiveness and power to the native C++ developer. Visual Studio 2010 has added support for some of these key features in order to enable these modern programming techniques. This session clarifies what features are in Visual C++ 2010 and what is yet to come. It illustrates how new constructs such as lambda expressions enable better use of existing libraries and how your code can be simpler, safer, and faster all at the same time. If you are itching to show off how C++ is one of the coolest languages on the planet, this talk is for you!

WCL316 | The Windows API Code Pack: Add Windows 7 Features to Your Application
Session Type: Breakout Session
Track: Windows Client
Speaker(s): Kate Gregory
Level: 300 - Advanced
Accessing new Windows 7 features is a challenge from managed (.NET) code. The level of interoperability required is out of reach for many developers. The Windows API Code Pack for the Microsoft .NET Framework is a sample library you can use in your own projects today that provides access to new user interface features (taskbar jumplists, libraries, sensor platform, and more) as well as "behind the scenes" features that make your applications more aware and responsive (restart and recovery, power management, and more.) Discover a shortcut to Windows 7 development for Microsoft Visual Basic and Visual C# programmers and get started today.

The first digit carries meaning, but the last two don't. So I don't really know how they both got to be 316. Since I often have trouble remembering my session codes, this should halve the effort for me :-).

Kate

PS: I checked whether the Brian rule still applies. You can too, by just dropping down the "Speaker" box on the session catalog page. I'm happy to report there are 9 Brians and I reached 9 obviously female names (ignoring Alex, Chris etc) while I was still in the C's. Good news, in my opinion!

Wednesday, 05 May 2010 13:54:51 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 01 May 2010

On Thursday night I was the surprise mystery guest for the St Louis installment of the .NET Rocks Roadtrip. What a fun little jaunt that was! We recorded an episode of .NET Rocks, (talking about Windows 7, C++, and educating developers) then Carl and Richard both did very interesting presentations. I had seen parts of Richard's before, but Carl's was all new to me and I will just say if you live in the half of the roadtrip that hasn't happened yet, you really need to make an effort to be there and be part of it!

Here's a blog entry by Nicholas Cloud, and another by Brian Williams, and a picture by fallenprogrammer of us getting set up.

The next morning featured breakfast at Cracker Barrel (an experience) and then a ride to the airport in the RV for me and Kindler Chase, who had joined them in Tulsa, before they headed Chicago-wards. It sure was fun to be part of it!

Kate

Saturday, 01 May 2010 20:22:11 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 25 April 2010

Once again Carl and Richard are driving across the country to celebrate a Microsoft launch. This time it's for Visual Studio 2010.

As they say on the roadtrip page:

Carl and Richard are loading up the DotNetMobile (a 30 foot RV) and driving to your town again to show off their favorite bits of Visual Studio 2010 and .NET 4.0! Richard talks about Web load testing and Carl talks about Silverlight 4.0 and multimedia.

And to make the night even more fun, we’re going to bring a mystery rock star from the Visual Studio world to the event and interview them for a special .NET Rocks Road Trip show series.

Along the way we’ll be giving away some great prizes, showing off some awesome technology and having a ton of laughs.

So come out to the most fun you can have in a geeky evening – and learn a few things along the way about web load testing and Silverlight 4!

You can track their progress online, too! Looks like a blast.

Kate

Sunday, 25 April 2010 10:12:14 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 23 April 2010

I like to introduce myself, in C++ circles, by mentioning I was using C++ before Microsoft had a C++ compiler. It's often interesting to watch people try to handle the concepts behind the sentence - mostly, that for some languages you can buy compilers from more than one vendor. And once upon a time, C++ existed as a language, and Microsoft sold compilers, but it didn't have a C++ one yet. Then eventually (OK, in 1992) the C product Microsoft sold became a C/C++ product (compiler, linker, debugger etc) and then the next year Visual Studio came along and with it Visual C++. And Visual C++ 1 included the Microsoft Foundation Classes 2, so that for a while the version numbers of Visual C++ and MFC were out of sync. Eventually there was a version skip to catch up (there was no Visual Studio 3). For quite a while we all worked with Visual C++ 1.52c and every speck of that version number was significant. So as you can see, the version of a product is not a simple question with one answer.

So, here we are, welcoming Visual Studio 2010. Lots of people called it Dev10 while it was under construction. But was the 10 short for 2010? It was not. It was just 10, as in the number after 9. Visual Studio 2008 was 9, and Visual Studio 2005 was 8. You can see these numbers on the shortcuts to your sln files, by the way:

OK,so VC8 means Visual C++ 2005? Basically. As long as you realize that it doesn't mean version 8 of the compiler. Because the C compiler transitioned into the C/C++ compiler, the version numbers came with it. VC8 includes version 14 of the compiler. Confused yet? If so, you're in good company. Here's a tabular explanation, though it only goes back a decade. You want more details? Wikipedia has them, of course. Me, I am going to enjoy Dev10 and watch for news of Dev11.

Kate

Friday, 23 April 2010 09:08:34 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 21 April 2010

One of my pet peeves is software that thinks it's smarter than me. There are times when software does things I wouldn't think of, without asking me, and I find that helpful and I like it. But it can backfire. The worst offender was FrontPage, thankfully now gone. But Outlook has an annoying little habit. It assumes that people who send emails can't really be trusted to format them, so it "fixes" their error for you. In other words, if I send you this plain text email:

Hi,
How are you doing?
Call me when you can.
Kate

Outlook helpfully displays:

Hi, How are you doing? Call me when you can. Kate

Most of the time that's only a petty annoyance. But what about when my code sends:

Monday 1:00
Tuesday 2:30
Wednesday 4:00
Thursday 9:30
Friday 10:00

And you see:

Monday 1:00 Tuesday 2:30 Wednesday 4:00 Thursday 9:30 Friday 10:00

Know what happens then? I do! The user reports a bug that the emails are misformatted. And what's more, when you tell them it's an Outlook issue and send them a screen shot of what to click in Outlook to fix it, they don't thank you. Well, Scott Mitchell has discovered what to do in your code to make Outlook leave your ratsen-fratsen line breaks alone. Just add a space before each newline. Awesome, thanks Scott!

Kate

Wednesday, 21 April 2010 08:49:00 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 15 April 2010

I've been making videos lately, as I've mentioned. So among other things I've needed to know the total length of a bunch of .wmv files. Now sure, if you have a spreadsheet you can teach it to add up times. But the ironic thing is, I was asking the file system for the length (in minutes) of each video, then adding them up, when I could have just asked the file system for the total length!

Well that's fun! Notice it also adds up the total file size. I find these little savings really add up to keeping me focused on what I'm really trying to achieve (write a tutorial) instead of getting caught up in minutiae.

Kate

Thursday, 15 April 2010 11:51:57 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 13 April 2010

Is it a good omen when mornings start out beautiful? I think it might be:

Normally, when I go to a conference, the first day is a little slow. I might go to the keynote, or I might not. If I do, I wander in to the back row 5 minutes before it starts (hey, I'm leaving plenty of seats for the paying attendees) with my coffee in my hand. So reaching the keynote room at 7am, full of pep and vigour, was fun!

I really liked the story the keynote demos told. If you haven't seen it yet, it's available online. The demos start with simple productivity boosts like multi-monitor support, Intellisense for Javascript, and so on, then move to some amazing C++ updates including Windows 7 support (yes, the demo went boom, but if you watch closely you'll see it was just that the app was still running, preventing a successful rebuild.) Then you see "SharePoint F5", a huge pain-saver for anyone, like me, who does SharePoint development. Over a dozen manual steps done for you when you press F5, and you can run SharePoint right on your laptop. But they're not done yet -- here comes an Azure demo with the Windows Phone 7 emulator and a real phone, and then Team Foundation Server and a ton of exciting new Application Lifecycle Management features in Visual Studio including (no kidding) time travel. Wow! I hope you all enjoyed it as much from the seats as I did from backstage.

No sooner was the keynote over than I was headed for the Channel 9 stage to record half an hour of Q&A with Twitter people.

That's available online too. And if you want more, some of the sessions are appearing on Channel 9, too. Not filmed on site, but the content matches. Get your Visual Studio 2010 from MSDN downloads, or if you're not a subscriber you can take the Professional Edition for a test drive.

Kate

Tuesday, 13 April 2010 11:38:04 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 11 April 2010

I've never been backstage for a big keynote before. There's a lot going on back there. Each demo runs on its own machine, so if one messes up it doesn't hurt the others. There are monitors everywhere showing what's on all the cameras and what's going out as the feed. There's one half for the camera and production people, and one half for the demo people. Here's a glimpse of the demo half:

Crowded, noisy, hot, and people are standing in your way sometimes. Best seat in the house!

Also, I'm just loving the signs throughout the Bellagio. There are all different ones (water, wires, light bulbs etc) but I think this is my favourite:

Watching something launch feels like it wouldn't be exciting, after all how long have I been working with this product? But you know what, it is!

Kate

Sunday, 11 April 2010 11:13:22 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 09 April 2010

This trip to the launch gets more exciting by the minute! Check this out:

The Channel 9 team will be broadcasting live, unscripted, and 100% interactive from DevConnections 2010 in Las Vegas as part of the Visual Studio 2010 and Silverlight 4 launches.

Join us Monday April 12th, from 8AM (PST) for Bob Muglia's VS2010 Launch keynote then stay tuned for more than seven hours worth of Visual Studio 2010-themed demos, interviews and panel discussions on Channel 9 Live.

. . .

Day 1 Schedule April 12th 2010 (Pacific time)

8:00 AM DevConnections 2010 Day 1 Keynote.

10:00 AM Welcome to VS2010: Doug Handler and Brian Randell with Dan Fernandez.   

10:30 AM Live Q&A with Bob Muglia, President Server & Tools Division with Dan Fernandez.

11:00 AM VS2010: Native Code. Kate Gregory and Richard Campbell with Charles Torre.   

11:30 AM VS2010: Managed Code. Lisa Feigenbaum, Tim Ng Dustin Campbell with Charles Torre.

. . . then some other people, who I love, but I can't paste it all in here. . .

To be part of it, use Twitter with @ch9live somewhere in your message. We'll see it and that's all it takes to join the conversation!

I count 11 Regional Directors (many of whom are also MVPs) on the guest list. What a way to spend the day!

Kate

Friday, 09 April 2010 23:27:02 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 07 April 2010
A little over five years ago a whole pile of people, inspired by Julie Lerman, got together to raise money for the tsunami relief and recovery in Aceh. (Here are my blog entries from that time.) We raised over $10,000 and perhaps some of you were wondering if we made a difference. Well Stephen Forte, who was a big part of that effort, now lives nearby and he visited them. His update is a lovely way to see what happened as a result of our efforts. It's nice to see that the organization we chose to support is still there and still doing good work. I wish all my donations came with a five year followup like that.

Kate

Wednesday, 07 April 2010 23:20:35 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 24 March 2010
Today is Ada Lovelace Day, a day to celebrate the women of software. I've blogged about it before, and it seems like a good springboard to get started again. There's a nice post over on Toronto Girl Geek Dinners, too. I have been trying to go to an event there for at least 6 months, maybe a year - seems it's always on a day I'm out of town or otherwise unavailable. April 5th might work out - I hope it does.

What have I been doing for the last almost-4-months? Working hard. Speaking, mostly on Windows 7 things. Planning future speaking gigs. Writing code - real code - in VB, C#, and yes, C++. Some using STL and some using MFC as it happens. Project managing, which can be many times more satisfying than coding but also many times more frustrating. Tweeting (yes, I did - and I tweet personal stuff as much as technical stuff so if you don't care for that you don't need to feel obliged to follow me.) Publishing videos. All of these things will get blog posts of their own over the next little while.

Stay tuned!

Kate

Wednesday, 24 March 2010 20:46:38 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 26 November 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

Thursday, 26 November 2009 20:38:10 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 18 November 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

Wednesday, 18 November 2009 14:44:19 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 02 November 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

Monday, 02 November 2009 04:08:36 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 31 October 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

Saturday, 31 October 2009 02:32:26 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 29 October 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

Thursday, 29 October 2009 11:57:28 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 17 October 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 :-)

Saturday, 17 October 2009 12:13:47 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 13 October 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

Tuesday, 13 October 2009 11:29:52 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 01 October 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

Thursday, 01 October 2009 11:32:57 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 29 September 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

Tuesday, 29 September 2009 11:15:47 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 25 September 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

Friday, 25 September 2009 18:45:59 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 13 September 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

Sunday, 13 September 2009 18:25:08 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 01 September 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

Tuesday, 01 September 2009 09:37:34 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 28 August 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

Friday, 28 August 2009 13:35:41 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 26 August 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

Wednesday, 26 August 2009 13:53:50 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 18 August 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

Tuesday, 18 August 2009 09:23:47 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 14 August 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

Friday, 14 August 2009 18:39:40 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 10 August 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
Monday, 10 August 2009 11:49:32 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 02 August 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

Sunday, 02 August 2009 08:26:35 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 13 July 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

Monday, 13 July 2009 13:00:57 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 09 July 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

Thursday, 09 July 2009 07:38:19 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 01 July 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

Wednesday, 01 July 2009 16:51:06 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 29 June 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

Monday, 29 June 2009 09:39:57 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 17 June 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

 

Wednesday, 17 June 2009 22:25:19 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 09 June 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

Tuesday, 09 June 2009 21:04:12 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 05 June 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

Friday, 05 June 2009 18:59:25 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 01 June 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

Monday, 01 June 2009 18:24:44 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 30 May 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

Saturday, 30 May 2009 18:06:04 (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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# 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)  #    
# Tuesday, 24 February 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

Tuesday, 24 February 2009 08:00:58 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 22 February 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

Sunday, 22 February 2009 07:46:57 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 17 February 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

Tuesday, 17 February 2009 17:06:42 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 08 February 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

Sunday, 08 February 2009 16:53:28 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 07 February 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

Saturday, 07 February 2009 16:43:31 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 04 February 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

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

Tuesday, 03 February 2009 13:11:42 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 31 January 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

Saturday, 31 January 2009 10:55:28 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 30 January 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

Friday, 30 January 2009 10:45:31 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 26 January 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

Monday, 26 January 2009 22:31:17 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 25 January 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

Sunday, 25 January 2009 22:27:31 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 22 January 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

Thursday, 22 January 2009 22:15:31 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 21 January 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

Wednesday, 21 January 2009 22:14:22 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 20 January 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

Tuesday, 20 January 2009 22:07:58 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 19 January 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?

Monday, 19 January 2009 22:00:53 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 29 November 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

Saturday, 29 November 2008 09:11:54 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 27 November 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

Thursday, 27 November 2008 08:44:55 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 21 November 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

Friday, 21 November 2008 08:57:02 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 19 November 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

Wednesday, 19 November 2008 08:26:23 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 15 November 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

Saturday, 15 November 2008 08:07:08 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 12 November 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

Wednesday, 12 November 2008 10:52:59 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 10 November 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

Monday, 10 November 2008 10:14:09 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 07 November 2008

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

What will they talk about? Let the speculation begin.

Kate

Friday, 07 November 2008 08:25:28 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 05 November 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

Wednesday, 05 November 2008 15:32:38 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 04 November 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.

Tuesday, 04 November 2008 15:10:22 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 03 November 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

Monday, 03 November 2008 12:14:32 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 02 November 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

Sunday, 02 November 2008 10:25:03 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 01 November 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

Saturday, 01 November 2008 11:01:15 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 31 October 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

Friday, 31 October 2008 07:43:37 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 29 October 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

Wednesday, 29 October 2008 10:57:45 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 28 October 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

Tuesday, 28 October 2008 13:41:07 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 27 October 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

Monday, 27 October 2008 12:54:46 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 22 October 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

Wednesday, 22 October 2008 19:01:38 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 16 October 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

Thursday, 16 October 2008 13:50:54 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 15 October 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

Wednesday, 15 October 2008 13:39:20 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 14 October 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

Tuesday, 14 October 2008 08:50:26 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 11 October 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

Saturday, 11 October 2008 09:11:47 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 10 October 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

Friday, 10 October 2008 08:45:16 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 06 October 2008

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

Semi-colonial, indeed!

Kate

Monday, 06 October 2008 14:41:26 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 05 October 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

Sunday, 05 October 2008 14:15:10 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 04 October 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

Saturday, 04 October 2008 14:36:17 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 03 October 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

Friday, 03 October 2008 09:20:07 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 01 October 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

Wednesday, 01 October 2008 16:38:38 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 29 September 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.

Monday, 29 September 2008 12:12:39 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 28 September 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

Sunday, 28 September 2008 11:48:30 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 26 September 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

Friday, 26 September 2008 09:13:49 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 25 September 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

Thursday, 25 September 2008 08:47:15 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 23 September 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

Tuesday, 23 September 2008 12:11:50 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 20 September 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

Saturday, 20 September 2008 08:02:17 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 19 September 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

Friday, 19 September 2008 16:54:42 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 18 September 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

Thursday, 18 September 2008 16:39:56 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 17 September 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

Wednesday, 17 September 2008 18:05:25 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 16 September 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

Tuesday, 16 September 2008 07:23:38 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 15 September 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!

Monday, 15 September 2008 17:06:49 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 14 September 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

Sunday, 14 September 2008 11:39:29 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 12 September 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

Friday, 12 September 2008 19:21:46 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 11 September 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

Thursday, 11 September 2008 10:23:01 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 10 September 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

Wednesday, 10 September 2008 10:19:43 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 09 September 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

Tuesday, 09 September 2008 10:14:33 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 08 September 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

Monday, 08 September 2008 10:05:35 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 07 September 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>

Sunday, 07 September 2008 10:03:39 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 01 September 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

Monday, 01 September 2008 09:38:22 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 30 June 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

Monday, 30 June 2008 09:57:31 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 23 June 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.

Monday, 23 June 2008 18:28:29 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 21 June 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

Saturday, 21 June 2008 22:54:44 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 18 June 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

Wednesday, 18 June 2008 22:09:47 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 17 June 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

Tuesday, 17 June 2008 07:53:23 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 15 June 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

Sunday, 15 June 2008 23:35:01 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 14 June 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

Saturday, 14 June 2008 22:20:27 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 11 June 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

Wednesday, 11 June 2008 18:53:20 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 08 June 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

Sunday, 08 June 2008 18:20:53 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 04 June 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.

Wednesday, 04 June 2008 17:38:06 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 01 June 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

 

Sunday, 01 June 2008 16:05:46 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 25 January 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

Friday, 25 January 2008 11:41:25 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 24 January 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

Thursday, 24 January 2008 11:40:22 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 23 January 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

Wednesday, 23 January 2008 11:38:41 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 23 December 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

Sunday, 23 December 2007 19:33:00 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 22 December 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

Saturday, 22 December 2007 17:43:05 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 21 December 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

Friday, 21 December 2007 17:13:32 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 20 December 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

Thursday, 20 December 2007 16:54:56 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 17 December 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

 

Monday, 17 December 2007 16:32:34 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 15 December 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

Saturday, 15 December 2007 10:25:49 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 14 December 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

Friday, 14 December 2007 09:13:53 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 12 December 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

Wednesday, 12 December 2007 11:23:45 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 11 December 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

Tuesday, 11 December 2007 07:38:37 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 10 December 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

Monday, 10 December 2007 21:18:07 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 08 December 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

Saturday, 08 December 2007 16:17:34 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 03 December 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

Monday, 03 December 2007 16:07:11 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 02 December 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

Sunday, 02 December 2007 15:59:31 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 01 December 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

Saturday, 01 December 2007 15:56:11 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 30 November 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

Friday, 30 November 2007 15:52:53 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 27 November 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

Tuesday, 27 November 2007 15:36:58 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 26 November 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

Monday, 26 November 2007 15:26:08 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 06 August 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

Monday, 06 August 2007 17:24:41 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 04 August 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.

Saturday, 04 August 2007 07:54:08 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 03 August 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

Friday, 03 August 2007 07:43:17 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 01 August 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

Wednesday, 01 August 2007 21:04:16 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 28 July 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

Saturday, 28 July 2007 22:56:00 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 27 July 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

Friday, 27 July 2007 22:40:15 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 26 July 2007

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

Kate

Thursday, 26 July 2007 22:23:56 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 23 July 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

Monday, 23 July 2007 20:10:20 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 22 July 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

Sunday, 22 July 2007 20:25:58 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 19 July 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

Thursday, 19 July 2007 15:21:50 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 18 July 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

Wednesday, 18 July 2007 13:47:40 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 14 July 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

Saturday, 14 July 2007 15:43:33 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 26 June 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

Tuesday, 26 June 2007 04:06:47 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 23 June 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

Saturday, 23 June 2007 02:57:20 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 22 June 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

Friday, 22 June 2007 18:38:01 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 20 June 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

Wednesday, 20 June 2007 18:13:32 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 19 June 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

Tuesday, 19 June 2007 18:03:05 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 18 June 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

Monday, 18 June 2007 13:28:42 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 17 June 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

Sunday, 17 June 2007 10:24:06 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 13 June 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

Wednesday, 13 June 2007 07:30:01 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 12 June 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

Tuesday, 12 June 2007 16:20:53 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 11 June 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

 

Monday, 11 June 2007 15:59:03 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 09 June 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

Saturday, 09 June 2007 15:01:12 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 08 June 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

Friday, 08 June 2007 16:37:59 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 07 June 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

Thursday, 07 June 2007 16:27:04 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 06 June 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

Wednesday, 06 June 2007 16:20:47 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 02 June 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

 

Saturday, 02 June 2007 09:19:01 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 01 June 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

Friday, 01 June 2007 09:01:49 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 31 May 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

Thursday, 31 May 2007 11:52:54 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 30 May 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

Wednesday, 30 May 2007 23:49:16 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 23 March 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

Friday, 23 March 2007 11:45:50 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 20 March 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

Tuesday, 20 March 2007 11:24:41 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 17 March 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

Saturday, 17 March 2007 11:04:55 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 11 March 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

Sunday, 11 March 2007 22:39:41 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 10 March 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

Saturday, 10 March 2007 09:26:23 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 09 March 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

Friday, 09 March 2007 09:06:45 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 08 March 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

Thursday, 08 March 2007 09:03:29 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 04 March 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

Sunday, 04 March 2007 08:18:42 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 03 March 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

Saturday, 03 March 2007 20:39:30 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 02 March 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

Friday, 02 March 2007 20:20:38 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 27 February 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

 

Tuesday, 27 February 2007 19:52:42 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 24 February 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

Saturday, 24 February 2007 18:37:15 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 23 February 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

Friday, 23 February 2007 07:06:13 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 22 February 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

Thursday, 22 February 2007 22:50:12 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 21 February 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

Wednesday, 21 February 2007 22:44:02 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 15 February 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

Thursday, 15 February 2007 14:41:41 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 14 February 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

Wednesday, 14 February 2007 11:50:28 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 13 February 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

Tuesday, 13 February 2007 11:39:05 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 11 February 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

Sunday, 11 February 2007 11:12:54 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 09 February 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

Friday, 09 February 2007 11:00:29 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 08 February 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

Thursday, 08 February 2007 10:46:46 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 07 February 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

Wednesday, 07 February 2007 10:40:51 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 05 February 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

Monday, 05 February 2007 13:13:28 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 02 February 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

Friday, 02 February 2007 20:51:26 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 01 February 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

Thursday, 01 February 2007 20:05:14 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 20 January 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

Saturday, 20 January 2007 17:37:44 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 19 January 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

Friday, 19 January 2007 17:20:40 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 15 January 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

Monday, 15 January 2007 11:07:59 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 13 January 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

Saturday, 13 January 2007 21:40:29 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 11 January 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

Thursday, 11 January 2007 20:29:05 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 07 January 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

Sunday, 07 January 2007 14:18:56 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 06 January 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

Saturday, 06 January 2007 13:41:16 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 14 December 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

Thursday, 14 December 2006 14:50:57 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 11 December 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

Monday, 11 December 2006 14:01:05 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 07 December 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

Thursday, 07 December 2006 10:51:37 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 06 December 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

Wednesday, 06 December 2006 20:10:13 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 05 December 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

Tuesday, 05 December 2006 19:42:29 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 04 December 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

Monday, 04 December 2006 15:16:45 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 01 December 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

Friday, 01 December 2006 08:13:25 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 30 November 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

Thursday, 30 November 2006 09:02:24 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 28 November 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

Tuesday, 28 November 2006 07:34:03 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 27 November 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

Monday, 27 November 2006 07:25:06 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 15 November 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

Wednesday, 15 November 2006 12:27:22 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 13 November 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

Monday, 13 November 2006 11:57:21 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 11 November 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

Saturday, 11 November 2006 13:29:18 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 08 November 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

Wednesday, 08 November 2006 08:20:49 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 07 November 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

 

Tuesday, 07 November 2006 07:46:44 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 28 October 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

Saturday, 28 October 2006 07:59:36 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 24 October 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

Tuesday, 24 October 2006 07:34:35 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 23 October 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

Monday, 23 October 2006 07:23:19 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 11 October 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

Wednesday, 11 October 2006 09:33:04 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 08 October 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

Sunday, 08 October 2006 00:28:45 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 06 October 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

Friday, 06 October 2006 17:20:01 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 01 October 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

Sunday, 01 October 2006 13:28:10 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 29 September 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

Friday, 29 September 2006 15:15:50 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 28 September 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

Thursday, 28 September 2006 14:58:55 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 23 September 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

 

Saturday, 23 September 2006 18:07:23 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 22 September 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

Friday, 22 September 2006 14:49:21 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 21 September 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.

Thursday, 21 September 2006 13:29:07 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 18 September 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

Monday, 18 September 2006 07:05:53 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 12 September 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

Tuesday, 12 September 2006 14:47:25 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 11 September 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

Monday, 11 September 2006 13:03:13 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 09 September 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

Saturday, 09 September 2006 12:46:05 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 08 September 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

Friday, 08 September 2006 12:37:35 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 05 September 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

 

Tuesday, 05 September 2006 11:48:30 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 24 August 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

Thursday, 24 August 2006 23:47:16 (Eastern Daylight Time, UTC-04:00)  #    

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

Thursday, 24 August 2006 10:22:04 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 22 August 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

Tuesday, 22 August 2006 23:02:22 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 12 July 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.

Wednesday, 12 July 2006 10:52:47 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 10 July 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

Monday, 10 July 2006 09:28:28 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 09 July 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

Sunday, 09 July 2006 09:12:04 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 05 July 2006

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

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

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

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

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

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

Try it!

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

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

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

Kate

Tuesday, 04 July 2006 21:32:03 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 27 June 2006

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

Kate

Tuesday, 27 June 2006 14:43:45 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 26 June 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

Monday, 26 June 2006 14:25:57 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 21 June 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

Wednesday, 21 June 2006 12:52:01 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 20 June 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

Tuesday, 20 June 2006 14:46:37 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 19 June 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

Monday, 19 June 2006 21:40:41 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 17 June 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

Saturday, 17 June 2006 06:21:02 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 16 June 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

Friday, 16 June 2006 17:12:23 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 15 June 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

 

Thursday, 15 June 2006 09:45:18 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 13 June 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

Tuesday, 13 June 2006 14:13:10 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 10 June 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
Saturday, 10 June 2006 19:43:18 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 09 June 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

Friday, 09 June 2006 19:35:50 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 31 May 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

Wednesday, 31 May 2006 07:58:42 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 29 May 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

Monday, 29 May 2006 10:33:51 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 28 May 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

Sunday, 28 May 2006 07:57:27 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 24 May 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

Wednesday, 24 May 2006 10:54:06 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 23 May 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

 

Tuesday, 23 May 2006 10:22:57 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 22 May 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

Monday, 22 May 2006 07:31:10 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 15 May 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

Monday, 15 May 2006 22:51:49 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 14 May 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

Sunday, 14 May 2006 07:37:15 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 11 May 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

Thursday, 11 May 2006 09:21:43 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 10 May 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

Wednesday, 10 May 2006 15:50:00 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 07 May 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

Sunday, 07 May 2006 12:17:38 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 06 May 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

Saturday, 06 May 2006 07:46:36 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 05 May 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

Friday, 05 May 2006 07:38:03 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 02 May 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.

Tuesday, 02 May 2006 15:58:55 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 01 May 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

Monday, 01 May 2006 08:33:41 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 28 April 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

Friday, 28 April 2006 15:12:30 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 27 April 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

Thursday, 27 April 2006 08:09:49 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 21 April 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

Friday, 21 April 2006 22:52:35 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 20 April 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

Thursday, 20 April 2006 18:51:50 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 15 March 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

Wednesday, 15 March 2006 15:55:06 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 25 February 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

Saturday, 25 February 2006 18:32:20 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 15 February 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

Wednesday, 15 February 2006 09:08:17 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 13 February 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

Monday, 13 February 2006 14:15:56 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 02 February 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

Thursday, 02 February 2006 17:15:52 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 24 January 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

Tuesday, 24 January 2006 12:42:33 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 08 January 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

Sunday, 08 January 2006 11:12:37 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 04 January 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
Wednesday, 04 January 2006 16:33:27 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 21 December 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

Wednesday, 21 December 2005 22:57:23 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 17 December 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

Saturday, 17 December 2005 11:09:22 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 01 December 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

Thursday, 01 December 2005 13:34:40 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 26 November 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)

Saturday, 26 November 2005 19:16:35 (Eastern Standard Time, UTC-05:00)  #    

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

Saturday, 26 November 2005 15:28:16 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 11 November 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

Friday, 11 November 2005 09:48:21 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 08 November 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

Tuesday, 08 November 2005 15:23:25 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 07 November 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

Monday, 07 November 2005 10:19:27 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 04 November 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

Friday, 04 November 2005 14:06:12 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 03 November 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

Thursday, 03 November 2005 08:02:34 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 21 October 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

Friday, 21 October 2005 17:27:03 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 12 October 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

 

Wednesday, 12 October 2005 14:11:01 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 10 October 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

 

Monday, 10 October 2005 13:22:06 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 01 October 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."

Saturday, 01 October 2005 18:38:40 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 29 September 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

Thursday, 29 September 2005 16:29:50 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 11 September 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.)

Sunday, 11 September 2005 10:42:25 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 31 August 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

Wednesday, 31 August 2005 13:49:30 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 24 August 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

Wednesday, 24 August 2005 20:55:02 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 21 August 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

Sunday, 21 August 2005 11:51:49 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 12 August 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

Friday, 12 August 2005 17:14:27 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 07 August 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

Sunday, 07 August 2005 15:58:17 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 03 August 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:

If there's something you don't feel like upgrading, you might want to know how long it will be supported for as part of your wait-or-upgrade-now decision.

Kate

Wednesday, 03 August 2005 15:30:47 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 27 July 2005

I got an interesting email today with this subject line: Want to build the next generation of C++ Libraries?

Enclosed was the following, from Martyn Lovell:

Development Lead, Visual C++ Libraries

Want to set the standard for the next generation of C++ application? Ready to design code that will be used and critiqued by the whole developer community? Want to have a direct connection to customers whose problems you understand? Want to build a new generation of libraries for a new language running in modern environments? The Visual C++ Libraries team is the place for you. We own all the library code shipped for C++. We are building new libraries that drive developer productivity and power on the native and managed platforms. Next version we’ll have to understand how our customers are going to work with WinFX and move forward with their existing code. And we’ll have to bring our native and managed libraries up to date to work seamlessly with the technologies of the Longhorn Wave, WinFX and ISV applications like Office 12. We own the full set of C++ Libraries -- C Runtime Library, Standard C++ Library, MFC and ATL. In future releases we’ll also have to address some of the challenges of parallel programming, and migration of existing native applications to managed code. We’re looking for senior individual contributors ready to code, design and provide the next generation of code reuse though leadership at Microsoft. Degree in a relevant subject and five years of software engineering required.

We are anticipating expanding our team for our next version to allow us to build some new MFC and ATL features (such as integration with Avalon, and support for new UI styles). So we’re hoping to find one or two people with deep MFC experience to add to our team. You don’t have to be using MFC today, but we especially want to hear from you if you have written a good amount of MFC code in your past.

If you know Martyn's email address, go ahead and email him and mention you saw it on my blog. If you don't, email me (don't leave a comment) and I will forward it to him.

Kate

 

Wednesday, 27 July 2005 14:26:24 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 22 July 2005

People regularly email me, or approach me at conferences, and ask me to “confirm” that Microsoft is trying to get rid of C++ in favour of C#. Since nothing could be further from the truth, I am not the person to get a confirmation from. But then again, I don't work for Microsoft, so maybe I'm deluded? That's why I like to find simple and unequivocal statements from people who do work for Microsoft, like this:

Visual Studio 2005 takes C++ development to a new level. For example, developers will get the same drag-and-drop experience creation of user interface as other languages, the same automatic statement completion and the same intuitive graphical debugger. Visual C++ 2005 developers will be able to build high performance 32-bit native code applications, use web services to interact with popular sites such as Amazon.com and Ebay, add professional quality 3D/2D graphics, video and sound using the DirectX SDK, all while generating robust and extremely fast code using our world-class C/C++ compiler.

C++ is here to stay for a long time and we are committed to providing the best tools for C++ development.

That's kind of hard to misinterpret. And when the Corporate Vice President of the Developer Division says it, you really need to believe it.

Friday, 22 July 2005 09:26:10 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 14 July 2005

I'm registered and I've reserved a hotel room. Just the little matter of plane tickets to take care of now...

Kate

Thursday, 14 July 2005 11:10:50 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 11 July 2005

The French Canadian version of DotNet Rocks is BlaBla dotNet. Recently Mario Cardinal prowled the halls at DevTeach asking speakers and other well known folks to give ONE good reason for switching to VS 2005. Just one! What a challenge! The answers he collected are in English, so even though the Eric-and-Mario banter around the quotes is in French, you can understand the show even if you're monolingual. In the banter, you can hear people's names, book titles, occasional familiar words, and delightful phrases like “Superstars de monde de développement” or “bloggeuse très prolifique” (that one for Julie Lerman and I just adore bloggeuse and will try to use it whenever I can) and various stuff you probably need at least grade school French for but that I can just follow, and then someone speaks in English about VS 2005 cool features.

When Mario cornered me, he told me a big surprise for him was the lack of duplicates. Mostly we all picked very different features, so by listening to us all you get a real sense of the treats that are waiting for you. You might also spend some time thinking about describing an elephant if you only get to touch one small part of it :-)

Kate

Monday, 11 July 2005 09:57:26 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 27 June 2005

Actually a whole bunch of them are, at www.groktalk.net, but mine in particular is at

http://www.groktalk.net/blog/KateGregoryPresentingWhyCIsntCEnough.aspx

My favourite part happens after the camera is off and we go to credits. :-)

You can stream these, download them to watch at your leisure, or bring them down in the background with BITS using a tool like DrizzleCast. Full instructions are at the main URL. We've set each talk up as a blog entry so that you can comment and ask questions: you'll lower my workload if you comment there rather than here.

Kate

Monday, 27 June 2005 18:25:30 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 09 June 2005

Have you ever read the hotel soap story? It's always presented as true, but of course it's not. I've found an American version (featuring Dial and Camay) and a British one (featuring Imperial Leather). The thing just makes me laugh out loud even after all the times I've read it. Well anyway here at the Peabody (Tech Ed Speaker hotel) I am starting to have a similar, but more delicious, problem. Each evening they come around to do a turn-down service, to get you ready for bed. If I am out, they come in and do it, and leave two chocolates on the pillow. Very nice. If I am in, they knock on the door and say “turndown!” and I come to the door and say “thanks, I'm fine, really.” And then, you see, they say the dreaded words “but wouldn't you like a chocolate or two?”. “Oh yes, that would be nice, thankyou!”. The first time this happened, they gave me three. The next night, four. It keeps going up, I have no idea why. Last night, SEVEN! Tonight I think it was TEN!

I am actually eating a few of these chocolates but not at a sufficient pace. I leave tomorrow: I have, after eight nights in this hotel, twenty nine squares of chocolate still piled by my lamp, a little like the soaps of our supposed true story above.

There are worse problems to have.

Kate

Thursday, 09 June 2005 22:56:05 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 06 June 2005

Day Zero was Regional Director side meetings, lots of marvelous presentations from a variety of product teams and special guests. I also took care of registering, did my technical rehearsal for Monday's talk, and generally had a wonderful time.

Day One was my first talk, and it went very well. Here's the empty room before the audience showed up:

I also got to experience the RD Cabana. This is a happening place full of smart people and couches:

 We're getting ready to start filming our GrokTalks tomorrow. You need to check these out: stop by and watch us film, or get them off groktalk.net as we upload them. Here's our fearless technical director:

If you're here, stop by and say Hi! We're just off the main path through Hall A.

Kate

Monday, 06 June 2005 17:11:13 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 04 June 2005

Tech Ed starts on Monday, there are all kinds of side meetings Sunday, and I'm here early because I did a compressed Ascend day yesterday. So far it is rainy and grey: I feel as though I accidentally flew to Seattle instead of Florida.

I like to get a room with two beds so I can use one bed just to pile up swag. Here's how it looks so far:

All this has to get home with me, and we're not even started yet. If you haven't left yet, remember to leave lots of room in your suitcase! Trust me!

Kate

Saturday, 04 June 2005 17:52:33 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 27 May 2005

Yesterday my Ascend day started with a lab, not lecture, so I was pleasantly surprised to arrive half an hour before it started to discover three or four people settled into the room already. I told them I was glad to have a few keeners in the class and got nothing but puzzled looks for my trouble. It seems it's a Canadian slang that hasn't spread very far. Tonight I Googled a little - it's hard, because it's a commonish last name, plus people insist on taking “a keener look” or having “a keener focus” and the like. But the only sites I could find that used it to mean “someone who studies way harder than everyone else, does all their homework, and always puts schoolwork above leisure, socializing or sleep” were Canadian ones.

Who knew?

Was I a keener as an undergrad? Oh yes. But I was in Engineering, rich in keeners depite the hard-partying image. I wasn't the keenest of them all or anything like that. :-) It's served me in good stead, though. You would be amazed what you can do with your brain if you're just determined to do it.

Kate

Friday, 27 May 2005 22:46:24 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 17 May 2005

With the seven-city Smart Client Deep Dive tour done, I thought it would be appropriate to summarize my upcoming speaking and training schedule.

  • May 23-26. Ascend Training (Smart Client Track) Redmond, WA. Teaching Microsoft people and special guests (MVPs, RDs, partners) all about Smart Clients (VSTO, WinForms, and more) in Whidbey.
  • June 3. Ascend Training (one day ultra condensed) Orlando, FL. This is a pre-conference event for Academic Days at Tech Ed.
  • June 6-10. Tech Ed USA,  Orlando FL. Two talks (Monday morning and Tuesday morning - both are C++ talks and who would go to only one of them? See the new syntax, new optimizations, new power for an old friend - search for DEV330 and DEV331), one panel lunch (women in technology), and helping out with the way cool thing the RDs are doing that I can't quite discuss yet.
  • June 18-19. DevTeach, Montreal Quebec. A Canadian User Group Leader get-together, and my two C++ talks glued into one “What's New in C++“ presentation.
  • October 23-26, Tech Ed Africa, Sun City South Africa. OK, I'm not officially accepted as a speaker yet but I'm pretty sure I'll be there, topics TBD.
  • Nov 7-10. C++ Connections, Las Vegas, NV. How real customers are moving to the new C++.

This is just the stuff I'm on stage for. I'm planning to be in the audience at either or both of the PDC and the MVP Summit, both in September.  And oh yeah, I have a company to run and some projects to finish. Gotta dash!

Kate

Tuesday, 17 May 2005 10:39:50 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 15 May 2005

The government of Ontario simplifies procurement by using Vendor of Record lists. If a Ministry or Agency is planning a certain kind of work, they use these lists rather than “the entire world” to locate a vendor. It's pretty fine company to be in: only 78 vendors qualified for our other VOR list, for Electronic Service Delivery.

This list, VOR-1005-04, is for “Task Based IT Consulting Services” and you can see all the vendors at http://www.ppitpb.gov.on.ca/mbs/psb/psb.nsf/english/vorlist-e.html#VOR-1005-04 - 137 in all, and some pretty big names (Microsoft Canada, say, or IBM Canada for that matter) mixed in with ours.

Kate

Sunday, 15 May 2005 20:49:04 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 09 May 2005

This weekend was a rarity in that I did very little work-work, as in “for the business”. It was, however, action-packed, featuring:

  • Three overnight guests
  • One continental breakfast in bed
  • Two brunches
  • One putting up of the large screened tent that covers my back deck (summer mornings in the screened tent with coffee and a laptop... deleting overnight spam becomes almost pleasant)
  • One pool installation
  • One barbeque-themed dinner (is there anything nicer than hot grilled vegetables?)
  • One two-hour bike ride

Never mind what the calendar says, that was clearly a summer weekend. It was shorts weather, more than hot enough to be messing around getting wet as part of readying the pool, and that two hour ride could fit in after dinner thanks to longer days and warmer afternoons. Very nice. Now, back to work for me!

Kate

Monday, 09 May 2005 07:13:39 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 22 April 2005

I was diverted today for some time by http://www.michaelbach.de/ot/index.html which is a trove of “visual illusions” and explanations for many of them. A lot require Flash, which I stubbornly refuse to install, but enough are presented as images alone that I was able to experience a lot of surprises.

You've seen the moving-without-moving blue and yellow wheel already perhaps, or the grid of white lines on a black background that seems to have black dots at the intersections, but only the intersections you aren't actually looking at. But have you seen the non animated image that starts out blurry and goes sharp, just because of what you were looking at before it? Or the instructions on how to draw impossible objects?

Look at this tiny animated gif from the main page. Think of it as flat. Now think of it as something that goes down into the page, like a crater or a bucket. Did you get a surprise?

I really must go do some work now.

Kate

Friday, 22 April 2005 13:57:11 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 17 April 2005

You snooze, you lose!

 

You can try getting on the waiting list at http://www.microsoft.com/events/teched2005/default.mspx but right now, write yourself a note to move a little more quickly next year. I'm looking forward to another terrific week. My talks have been scheduled now, and they are Monday and Tuesday. So it will be clear sailing through the rest of the week for me!

Kate

Sunday, 17 April 2005 12:16:50 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 05 April 2005

In the last few days just about every Microsoft or Microsoft-friendly blog I read has changed its theme. I can't even remember how to change my theme, and suddenly the folks who were black on orange are blue on white, the folks who were blue on grey are orange on white, links that were on the left are on the right and vice versa. More than once this week I have thought I was on the wrong blog!

Let's see if I can get with the spirit and add some flare today or tomorrow...

Kate

Tuesday, 05 April 2005 10:19:52 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 28 March 2005

What does it take to become a SharePoint developer? You should understand how SharePoint looks to a user, and the best way to learn that is by using it. You should know where to find the documentation for the object model and for CAML, and that means lots of Googling because it's not all in MSDN by any means. And then of course you need to be a developer. Mike Fitzmaurice makes it pretty clear that means an all-around good .NET developer. He's inspired by Gregory MacBeth's inaugural blog post that lists the steps to becoming a good SharePoint developer. Gregory sets the bar pretty high - step 0 is get your MCSD, and then the real learning can begin. My attention was caught by Mike's postscript that in addition to being an all-round .NET dev, in VB or C# as you prefer, and learning the SharePoint-specific material, you're also going to need C++:

Attention tool builders and other interested developers — in the next release, protocol handler development and IFilter development will still need to be in C++.  Do not wait for the rules to change, because they won’t (at least not before “v4”).  If you want to extend our search technology to new content sources and formats, you might as well get started now.  Search gets a lot better in many ways, but the method for developing IFilters/protocol handlers isn’t one of them.

So, all round .NET dev, SharePoint object model, CAML etc, and while you're at it, C++. No wonder I'm finding good SharePoint devs rather hard to find!

Kate

Monday, 28 March 2005 15:25:37 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 27 March 2005

Sessions and abstracts, along with speaker names, are starting to appear on the Tech Ed sessions page. My C++ talks have been christened DEV 330 and DEV 331. You can search on the session code or my name to see the abstracts.  Doesn't look like you can start to build your calendar yet, but watch for it.

Since the speaker dropdown is populated, I just had to check: I counted 8 Brians, and 11 obvious women, not counting the chances that an Alex, Chris, or Pat could be a woman. I also see some fellow RDs and some Speaker Bureau folks. Should be a fun week!

Kate

Sunday, 27 March 2005 15:58:51 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 14 March 2005

Back in the 80's, one of the classic anecdotes around corporate gender unfairness was the idea of the meeting that finished up in the mens room, inaccessible to the women left standing in the hall. If this  is how those meetings went, we were worried for nothing.

See you at Tech Ed, guys!

Kate

Monday, 14 March 2005 11:16:09 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 04 March 2005

Last night I spoke at the Metro Toronto .NET Users Group on Interop between J2EE and .NET apps, using a variety of techniques but especially Web Services. There was a bit of code, but really the emphasis was on philosophy, the kind of “big picture” approaches you can take to make interop happen. I mentioned more than once that it's important to know what exactly you mean by interop and what it is that you want your two (or three, or more) applications to be able to do together. The sorts of projects that really don't work are the ones that start “how can we use BizTalk in our firm?”. Start with a business problem, and if it looks like BizTalk will make it possible to solve the problem, then go from there, but don't pick the solution and then go looking for a problem.

This came back around in the post-presentation questions and chat, and we got to talking about the importance of requirements. I'm hip deep in a project where we spent months just settling the requirements, but as a result the project has moved forward into code after spending years (before I came on board) getting about halfway through design and then stopping and starting over. For Enterprise work (and these interop issues are generally Enterprise) there is simply no substitute for real solid business requirements that are completely nailed down before anyone starts designing, followed by a properly thought through design. I don't go through all that for three day projects, putting together a little Sharepoint web part or some Windows Service that sends email at night about additions to the database today, but I sure go through it for anything that needs more than one programmer or that will take more than a month.

I was reminded of a funny article I read a while back called Agile Bridge Building, which mocks Agile Software Development by dissing bridge design in favour of showing the client Working Wood as soon as possible. Basically, you stick a log out into the river and right away you've started to build your bridge. This process naturally produces requirements, since now we have consensus that the log should actually reach all the way to the other side of the river! Why waste a lot of time in meetings trying to develop this requirement in advance? Once there's working wood, a genuine prototype, the stakeholders can quickly agree on what's important. And all without the hassles of paying someone for requirements and design. There's more, so I recommend you read the whole article. And to be honest, if I lived in the woods and was sick of wading through a small stream to get to the far side of my property, I probably would apply Agile Bridge Building to the problem, just as I don't particularly design every speck of software I write. But I'm glad the folks who built the bridges I drove over today designed them first, and I'm glad I know how to gather requirements, get consensus on functionality, and design the big projects I code before I code them.

Kate

Friday, 04 March 2005 09:45:29 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 02 March 2005

Once again Fawcette have tapped a number of Toronto folks and given us not-so-secret discount codes for VSLive registrations. That's right, register for VSLive Toronto, enter KATE as your priority code (where it says "Please enter the first five digits of your conference priority code") and presto! you get 10% off.

VSLive is April 13th to 16th, and there are early bird prices until March 16th. This year it's divided into ASP and Smart Client, and it's packed with Whidbey (aka 2005 or 2.0) material. The agenda is at http://www.ftponline.com/conferences/vslive/2005/to/agenda.aspx with session details at http://www.ftponline.com/conferences/vslive/2005/to/asp-sessions.aspx and http://www.ftponline.com/conferences/vslive/2005/to/smart-sessions.aspx. You'll see plenty of familiar names speaking, and there's sure to be more good stuff announced as we get closer to the date. So make your plans, and I'll see you there.

Kate

Wednesday, 02 March 2005 10:22:51 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 01 March 2005

Lots of Tech Ed rejection letters this year -- I got five myself -- but in the end I am giving ALL the C++ talks -- really I am! Well, that is to say, both of them. But at the moment I only see two Visual Basic and two C# talks, so I don't feel bad. The talks, and current abstracts, are:

Visual C++ and .NET: Great Performance, Full Access and Easy Migration of Existing Code

Abstract: The enhancements to Visual C++ 2005 enable it to stand toe-to-toe with any tool in terms of support for the .NET Framework. In fact, in many ways it can do things no other tool can. Learn how the CLR brings new features such as garbage collection, generics, reflection, and verifiability to C++ ... and how C++ brings deterministic cleanup, templates, and meta programming to the CLR! Learn how to easily migrate existing native code - including MFC applications - to run under the CLR. Strategies for choosing which parts of the application remain native and which are managed will be discussed. Finally, this session will provide guidance on how to build high-performance managed "wrappers" enabling reuse of native libraries.

Visual C++ 2005: A Look at the New Features for Building Fast Native and Managed Code

Abstract: Whether you build end-to-end applications or components for enhancing larger applications, the new Visual C++ 2005 is the power tool for Windows programming.  In this presentation we’ll spend extensive time in the Visual C++ 2005 development environment – highlighting new productivity features – as we dive into its support for building high-performance, first-class native and managed applications.  You’ll learn about native code compiler optimizations, security enhancements, 64-bit development, and support for multiprocessor/grid computing systems.  In addition, this presentation will demonstrate how Visual C++ 2005 now provides CLR/.NET Framework support that allows it to stand toe-to-toe with any other tool in terms of elegance and productivity…with the additional benefit of high-performance access to native code and the ability to easily move native code to the managed environment.  

You'll want to attend both, of course. Register now!

As well, the Women In Technology lunch will be happening again and I'm looking forward to another panel appearance. This is shaping up to be another great Tech Ed... as long as some more familiar faces start to show up on the speakers list.

Kate

 

Tuesday, 01 March 2005 09:04:57 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 16 February 2005

Spring may not be in the air yet, but some sort of economic recovery certainly is. I've got complete strangers calling me asking us to help with their problems, established clients ramping up ongoing projects, and just generally too much work for us all to handle. So I need an experienced dev who can jump on board and start coding, designing, documenting, and generally helping with all that we do. While I have in the past hired new grads and relatively inexperienced people, right down to high school interns, this is not one of those times. I want a senior person. Ideally someone who started using .NET before it was public or shortly after, and who has experience in other ways of doing things as well as the .NET way.

Think that's you? Or someone you know? Head on over to http://www.gregcons.com/seniordev.htm for a little more detail and some application instructions. Please don't try to apply by leaving comments on the blog or by emailing me directly. I am looking for someone smart and capable, and someone who knows the value of a little process in a chaotic world.

Kate

Wednesday, 16 February 2005 13:26:26 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 10 February 2005

OK, I did the blogmap thing:

http://www.csthota.com/blogmap/

This is my Peterborough office, not that I'm there very often...

Kate

Thursday, 10 February 2005 18:08:19 (Eastern Standard Time, UTC-05:00)  #    
# Tuesday, 01 February 2005

110.00, 107.50, 105.00, 102.50, 101.00, 100.00

What do these numbers have in common? They are losing bids for the consultant auction :-). Time is running out, the auction closes tomorrow morning, 9am Eastern, and now is the time to boost your bid and catapult yourself up the list! Lowest winning bid at the moment is $120... let's drive it up!

Kate

Tuesday, 01 February 2005 18:01:23 (Eastern Standard Time, UTC-05:00)  #    
# Monday, 31 January 2005

Apparently some people are hesitant about bidding on the auction in case they win. I know the feeling, do I have enough tough questions to justify an hour of Richter or Prosise time, do I have my act together on Web Services and Interop enough to grill Michele on them properly...

Relax. You don't have to think of it that way. Whoever you win, fire us an email with something that's been bugging you. Like “can you really explain this whole destructors in C++ when it's managed code and the object I'm using wasn't even written in C++?” Or like some of the old emails I cleared out this last week: “how can I uninstall a service?” “how do I restrict forms authentication in ASP.NET to only some folders? How can I force a logout when they browse from a secured to an open page?” and “why am I getting this linker error?”. Maybe that uses up 10 or 20 minutes. Fine, next time you have a toughy like that, send it along. By the time you use up your whole hour, you'll probably have become a friend/colleague/former client who can send questions like that once in a while for the rest of your life.

Or, how about this? Take a look at the talks your selected consultant has prepped for upcoming conferences (get us to send you the abstracts we've submitted) and have us deliver a private session of a useful talk to your whole company over LiveMeeting. There's a free LiveMeeting trial going on, and the talks have to be prepped anyway, so your hour would just be the delivery of the talk, to as many of your colleagues as you can get online at once. So it might end up 90 minutes, we don't mind.

You can't lose! Hell, even if you use your hour to take one of us for a drink the next time we're in the same city, what really counts is you gave $100 or $150 or $200 to help people who have NO clothes, NO books, NO walls around them.... this is a FUNDRAISER so come on, let's raise some funds!

Kate

Monday, 31 January 2005 09:40:55 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 26 January 2005

Barry Gervin is bidding on some of his fellow celebrities in the fundraising auction. But the thing is, Barry is a .NET expert in his own right and employs quite a few more. And you know, if he asked me to help him with some little thing that would only take an hour, I would. So he doesn't need the services he's bidding for in quite the same way as other folks do. So he has a few, er, creative ideas for how to use an hour... still consulting, mostly, but ...

But to clarify, I won't so much shave my head as shorten my hair by the same number of inches that Barry shortens his. That should still leave me three feet or so :-)

Kate

Wednesday, 26 January 2005 15:04:31 (Eastern Standard Time, UTC-05:00)  #    

I am learning a lot about how EBay works. In IM with Adam and Julie I think I have figured it out. Let's say you went right now to bid on the auction (good for you!) and you bid $200. Not “$100 now and if I need to then automatically raise me to $200” but just flat out $200. Your bid would still appear as $100. Why? Because there are 30 items available and so far only 27 have been bid for. Once there are more than 30 bids, we will start to see real bids and not just the minimum. So come on, go bid. Believe me you will get more than $100 value no matter who you get, and you'll be helping a good cause.

Kate

Wednesday, 26 January 2005 12:25:02 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 23 January 2005
Sunday, 23 January 2005 13:20:33 (Eastern Standard Time, UTC-05:00)  #    
# Saturday, 22 January 2005

Stephen Forte has posted a voluminous update that includes links to all our blogs and little bios of us all, in case there are one or two you haven't heard of. Check it out.

Kate

Saturday, 22 January 2005 12:43:24 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 21 January 2005

Here's a blog entry by the surfers I mentioned yesterday explaining some of what they're up to and how desparately it's needed. And Julie has a delightful picture of them, too.

Julie is still getting our ducks in a row with EBay. As you can imagine, you can't just hold an auction and claim it's a fundraiser -- what a fraud opportunity.that would be! There are letters and faxes and suchlike to make sure that everybody is on the up and up. The good news is that because EBay and Paypal are doing this, you can be confident your money (you are going to bid, aren't you?) is going where we say its going. The bad news is I don't have an EBay link yet :-)

Kate

Friday, 21 January 2005 08:46:04 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 20 January 2005

An absolutely stellar group of people, dubbed by Julie Lerman to be .NET Celebrities, have come together to offer up our tiny little bit of help for those whose lives, homes, loved ones, livelihoods, and dreams were washed away on Boxing Day of last year. The immediate “if we don't get fresh water in there they will all die” crisis is past, but there is so much rebuilding work to be done. The agency we've selected is Aceh Aid at IDEP which is local to Sumatra and has been on the ground since the waves hit. This is a nimble and creative group that, for example, teamed up with the surfing community to get boats into the worst hit places while large outside groups couldn't figure out how to reach them. It's going to be an EBay auction with payment through PayPal directly to a US foundation that supports IDEP -- that way for US-based people it will be tax deductible for sure. I am working on an answer for Canadians on that. Of course if your company spends the money to get the advice, then your company can deduct it as an expense, just the same as if you wrote me a cheque for my time.

There are 25 of us up for auction. Top bidder gets their pick of Jeffrey Richter, John Robbins, Jeff Prosise, Michele Leroux Bustamante, Jonathan Goodyear, Andrew Brust, Richard Campbell, Adam Cogan, Malek Kemmou, Jackie Goldstein, Goskin Bakir, Hector M Obregon, Patrick Hynds, Fernando Guerrero, Kate Gregory, Joel Semeniuk, Scott Hanselman, Barry Gervin, Clemens Vasters, Jorge Oblitas, Stephen Forte, John Lam, Deborah Kurata, Ted Neward and Kathleen Dollard. Wow! (And like I need to link to their blogs -- you know who these people are!) Most are friends of mine already, 18 are RDs, 5 are Canadian, all are top notch .NET stars who know their stuff and are in the habit of solving problems for people.

So what we are auctioning is one hour of mentoring. Phone, IM, email, whatever. (We won't fly out to you.) If you're the top bidder, you get whoever you want from that list. Second bidder chooses from the still stellar list remaining. And so on.

Most of us are consultants so you could theoretically buy our time. But that's in theory. My firm doesn't take one hour jobs. We don't really like to take one day jobs. Our preference for mentoring work is to take a $5000 retainer and let you know when you've used most of it up and need to send more. (We make exceptions for some work that's really technically interesting and fun, but we still need to be confident it will go on for a while.) I expect it's a similar situation for the others. That means we're offering something you otherwise couldn't buy. I want you to keep that in mind, then go bid more (a lot more) than you think an hour of my time is worth. The money goes to those who need it, you get a deduction, and you get some important business problem solved. Can't fail!

I'll post a link to the auction as soon as it's live.

Kate

Thursday, 20 January 2005 10:17:23 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 19 January 2005

In fact, you've been able to register for over a week, I just didn't notice until today. Last year it sold out, so if you already know you want to go, start making your plans now. If you register early you save money, there's some sort of sweepstakes to be won, and you'll know one little part of your year plan well in advance. Go on, register.

Me? I'm hoping to be there as a speaker :-) (I submitted a number of C++ talks) or to take advantage of some not-yet-announced-I'm-just-hoping pass for RDs or MVPs or INETA speaker bureau folks or something, so I haven't registered. One way or another, I will be there.

Kate

C++ | Consulting Life | INETA | MVP | RD | Speaking
Wednesday, 19 January 2005 14:32:28 (Eastern Standard Time, UTC-05:00)  #    
# Sunday, 16 January 2005

I have these friends, a married couple who are both paramedics -- the people who show up in an ambulance while the building is still on fire or the bad guy is still maybe inside with a weapon, and help you when you need it most. One works in the Peterborough area where I live, and the other commutes regularly to Toronto. Well this week, he's not in Toronto, he's in Sri Lanka, to help people who most surely need help. They were going to go on vacation somewhere sunny: instead he's gone to help and she's holding down the fort at home. I am so impressed by people like that.

Here's some news coverage from CTV, interviewing three of the four, but not my friend.

Think geeks like you and me can't help? Think again. Look at what Julie has been up to. The same skills we can sell to clients around the world we can also give to aid organizations. Watch this space for my tiny little bit.

Kate

Sunday, 16 January 2005 21:57:24 (Eastern Standard Time, UTC-05:00)  #    
# Thursday, 09 December 2004

Salon has an interesting interview with Joel Spolsky. (If you're not a subscriber, you'll have to sit through a Day Pass ad before you can read it, and I recommend you do.) Some real gems in it:

The key problem with the methodologies is that, implemented by smart people -- the kind of people who invent methodologies -- they work. Implemented by shlubs who will not do anything more than follow instructions they are given, they don't work.

[on intelligently sometimes-online apps for use on airplanes] ... airplanes are actually getting Internet connections. And Wi-Fi is spreading like crazy. What's kind of surprising is that it has turned out to be easier to rewire the entire world for high-bandwidth Internet than it is to make a good replication architecture so you can work disconnected!

There's also a nice link to the Joel test, sort of a lightning version of the CMM -- takes about 15 seconds to answer and then you know where you stand. (We're at ten-and-two-halves out of 12, which is pretty good, especially since with only 6 people finding someone in the hallways who isn't on your project is a bit of a challenge.)

But then he says:

Microsoft ... could ship a brown paper bag called Microsoft Brown Paper Bag 1.0 and hundreds of thousands of people would buy it. Or at least try it.

Please. What does he think I am, naive? I am a seasoned computer professional, paid to make code for over a quarter of a century, rich in Microsoft contacts and non disclosure agreements and summit invitations. I don't buy 1.0 of anything! :-) I'll be waiting for 2.0 or at least 1.1, or at the very least a service pack!

Kate

ps: here's the first service pack for MS BPB 1.0:

(it's all about the patch management...)

Thursday, 09 December 2004 15:41:55 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 08 December 2004

My 2005 plan is starting to take shape a bit better now.

I'll be attending for sure. Will I also be speaking? Writing the Hands on Labs? Sitting on cool panel discussions? Time will tell... and so will I when the plans are firm.

Kate

Wednesday, 08 December 2004 12:04:35 (Eastern Standard Time, UTC-05:00)  #    
# Friday, 05 November 2004

Last night I spoke to Carl Franklin (my fellow RD) for Dot Net Rocks. Over the course of an hour and a quarter we talked about C++ (I think I'm converting him :) ) VSTO, VB, sockets, what I have for breakfast, Carl's Westminster Abbey experience, and assorted geeky things. It was a lot of fun. Here are some links stolen from the site:

Kate

Friday, 05 November 2004 09:53:38 (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, 27 October 2004

I had a thoroughly enjoyable but oh-too-brief time here. My third talk, this morning, went well like the others, and now I'm at the airport with about 27 hours between me and my own home -- and it's 4 hours since I walked out of the conference centre.

I'm going to put the code from my sessions on the SA Developer website when I get home.

Kate

Wednesday, 27 October 2004 12:01:33 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 28 July 2004

Almost two months ago now, Joel Semeniuk blogged about responding to RFPs and how awful it is. The thing is, it's really hard to keep a business larger than one person afloat without ever responding to them. And once in a while, you get the contract, which is fantastic but keeps you from blogging :-).

Gregory Consulting is in the midst of not one but two contracts landed through RFPs right now, and I just can't help myself, I'm responding to another, this to get on a Vendor of Record list for, er, a major provincial government. About two years ago this ministry built a list and the RFP had a due date for responses of December 23rd. The first  Q & A session was full of questions about the deadline, would it be postponed, and the answers were oh no, absolutely not, there's plenty of time for you to make a good response in that time. Every Q & A after that, the same question, the same answer. Until two weeks before the deadline when they announced a four week or so extension. So here we go again in 2004 and the due date was July 29th, and the Q & A literally complained “the government is ruining my vacation” and the answer was “we are ruining our own as well but there will be no extension.” Again and again people asked and were told the deadline was immutable.

I've been busy doing the work I landed but I settled down last night to pull the whole RFP package together so it could be printed and bound today and hand delivered tomorrow. And with a horrible sinking feeling I was realizing I had hours of work writing project profiles and filling out checklists. I got to the bit where you have to list all the addenda you have seen, popped up to merx to get the most recent addenda (I've been busy, remember?) and -- hey! This thing closes August 19th now!

At least I found out before I stayed up all night.

Kate

Wednesday, 28 July 2004 06:42:12 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 14 July 2004

On Monday night, folks who were in town for the partner conference came out to dinner with some locals. As always when RDs gather, I learned some things and laughed a lot. Here are a few snaps:

Craig Flannagan, MSDN Guy and RD-looker-after in Canada is in the foreground. Then we have Scott Howlett of Toronto, and hiding behind a HUGE bottle of wine is Thomas Lee from the UK.

Here we have Patrick Hynds of New England, Ryan Storgaard who lives in either Calgary or Vancouver (it's complicated,) and Patrick's boss Bruce.

And at this end of the table it's Adam Gallant, my local DE and buddy, Jonathan Zuck of the Association for Competitive Technology, and Patrick again, who managed to have his eyes closed in both pictures.

Thanks everyone for joining us, it was a great evening!

Kate

Wednesday, 14 July 2004 09:16:43 (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, 08 July 2004

Here's a strange thing that happened yesterday. An ASP.NET app, written in VB.NET, was only intermittently dealing with its events, such as button clicks. At first it seemed to be that the event was handled if we were debugging, and not handled if we were not. But that turned out not to be the case.

Whenever you're faced with weirdness -- and let's face it, an event that sometimes is handled and sometimes is skipped counts as weirdness -- the knowledge base is your friend. A team member found 314965, which is a C# version of the problem. Although no-one could find a VB KB article, these are our symptoms, and more importantly this fix was a fix.

SYMPTOMS

A control event on a Microsoft Visual C# .NET Web application form may not fire. The event does not fire if you wire the control event imperatively, that is, if you double-click the event from the Events view and then add the code.

RESOLUTION

Add the event to the HTML code behind the form, that is, wire the control event declaratively.
 
“Wire the control event declaratively” means put an onxxx= attribute in the HTML:
 
<asp:Button id="Button1" runat="server" oninit="Button1_Init" Text="Button1"></asp:Button>
Instead of oninit you might have onclick or whatever event you have an issue with. Also, make your handler function public rather than private.
 
Moral of the story: there are two. First, it isn't always you. I can't tell you how many emails I've received telling me “there must be a bug in Microsoft's C++ optimizer, because my debug builds work beautifully but my release builds blow up.” Experienced C++ programmers mutter or shout “memory problem” when we get such emails: you're overwriting something or leaking or just generally not handling memory well; debug and release builds have huge differences in allocation, initialization, and other memory work when you're using unmanaged C++. Most of the time, it's you. But every once in a while, it's not you. And a quick search through the knowledge base is one way to see if it's you or not. Second, just because you're writing in VB doesn't mean that C# KB articles don't apply to you. Never be a language snob.
 
Kate
 
ps: of course I program in VB sometimes. What else would I use to create ASP.NET apps?
Thursday, 08 July 2004 09:48:33 (Eastern Daylight Time, UTC-04:00)  #    
# Friday, 25 June 2004

Did you know that one person -- Bob Bemer -- pushed the development and adoption of ASCII? Or that he was also responsible for the backslash and escape keys? (There's more, too, like naming COBOL -- check his site.) Isn't it a shame we don't hear this stuff until the obituary? I love this quote: "He was a coder until he couldn't code any more. He lived it and breathed it." While I love dealing with customers, and doing “big picture” architecting, as well as training and mentoring, I too love to code, and I hope someone can say that about me someday -- 50 years from now would be fine.

Kate

Friday, 25 June 2004 12:39:22 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 08 June 2004

I have loved this trick since I saw it and I've just decided it's time to share it. Say you have some application or folder open, but it's minimized or has stuff on top of it, and you want to drag a file to it. Here's how I was taught to do that: grab the thing you're dragging, and drag it down to the taskbar, then wait patiently without letting go. If you let go, Windows will nag you:

So you wait, eventually the window opens up, and then you drag back up from the taskbar before dropping. If you're trying to drag another file into a product like FrontPage and a file is already open, you want to drag all the way to the top menu bar, otherwise the new file will just be inserted into the open document -- hardly ever what what you want.

Next time, try this instead. Get your drag started, and after moving the icon just a few pixels, and without letting go of the mouse button, use your other hand to ALT-TAB. Pop around to the target app and let go of the ALT-TAB, then let go of the mouse button to drop your icon onto the target. This is faster and less frustrating and now I do it all the time. I just checked, and you could do this even in NT 4, if not before. I just never knew, until I saw Scott Hanselman do it in a presentation. Very neat trick.

Kate

 

Tuesday, 08 June 2004 16:05:12 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 05 June 2004

My blog about knowing what you want when you're networking (a job, an article, or whatever) triggered some more thoughts about knowing what you want in other situations. This post is about meetings.

I hate meetings. One of the great things about having so many remote clients is that I don't have to go to meetings. [Many years ago we were doing some work that ended up in Visual C++ 4. One day my Microsoft contact called me, saying "I'm just going into a meeting and need to know a, b, and c." We talked for about five minutes and then he headed off to the meeting. Four HOURS later he called me back to tell me the results of the meeting and as I got off the phone I was filled with gratitude that I had not been in the meeting. It's been an important part of my business model ever since.] But if you're going to go to a meeting, the least you can do is make it worthwhile. The key to this is to know what the meeting is for and what you want from it. These are not always the same thing at all.

Every meeting, no matter its nominal purpose, can give you something you want. A status meeting is an opportunity to be recognized for recent accomplishments and to get the credit you deserve. Or perhaps it's an opportunity to get a decision maker to make a decision the way you want it made. A sales meeting is easy; you want the sale, or permission to submit a proposal, or to be put on the list of bidders. A "let's get this stuck project unstuck" meeting or a kickoff meeting have obvious purposes, but that doesn't mean you shouldn't stop to think about what you want from them. Do you want to be assigned the unsticking tasks? Do you want a deadline moved? Do you want someone else's behaviour to be redirected?

Occasionally I wander into meetings without particularly thinking about what I want from them, just because it's the regular meeting or because my client invited me. Those meetings are boring and horrible. About 90% of the time I decide in advance what I want from the meeting. I usually put a little thought into how to get it, but what seems to really matter is just knowing what I am aiming for. Almost without fail, I get it. (If I go as part of a team and discuss it out loud with my team mates before we go, I have never got less than I wanted.) And this isn't just a matter of taking advantage of the unprepared people who wandered into the meeting without a plan and can be bent to my will :-). The really neat meetings are the ones where everyone in the room knows what they want and we dispense with the rest of the nonsense and get down to brass tacks. Then we really get things done, and I don't hate those kinds of meetings at all.

Kate

Saturday, 05 June 2004 11:30:56 (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, 02 June 2004

One of the topics that came up and then became a theme at the Women in Technology Luncheon at TechEd was networking. One thing I said was such a surprise to me when I first learned it that I want to repeat it here. When you're looking for something, you need to keep in mind that someone out there wants, no NEEDS, to give it to you. I'm serious. If you're looking for a job, the person who is going to hire you isn't going to do so to be nice, they NEED another programmer or a project manager or an architect or whatever it is you are. If you want to write an article, there are editors who are looking for authors, who come to conferences for no reason other than to find authors. If you wrote a cool piece of code that you plan to sell for money, there are people who NEED that piece of code and just have to have the functionality it provides. You're not asking for favours. You're meeting their needs. They're meeting your needs too. That's what makes the world go round. Hook into that, and you'll get a lot of what you want.

Along with that comes the responsibility of knowing what you want. Very few people (if any) go to a conference needing to advance someone else's career. So if you are wandering around with the vague goal "I would like to advance my career" then you aren't going to find someone with the matching need. And really, why should someone else do the work of deciding what will advance your career? You're the one who knows what you're willing to do and what you really want. So stop for a minute and think about it. Then walk around knowing "I want to write an article" or "I want a new job" or whatever. And know the parameters of it, too. You want to write an article. Only for money? Or would a no-fee web site have a chance at publishing your words? You want a new job. Are you willing to move? How much do you want to earn? The time for deciding that is not while the no-fee web site editor's offer is hanging in the air between you, or right after the Microsoft recruiter has asked if you want to come out for an interview.

Know what you want. Know with as much precision as possible. Ask for it every chance you get. Don't waste people's time asking for things you can't actually accept, and keep in mind that when you ask you also offer. Know what you are offering.

Kate

Wednesday, 02 June 2004 11:55:24 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 04 May 2004

I spent all day Monday hanging with almost all of the Canadian RDs. If you were wondering who we all are, you can find nine of us at http://msdn.microsoft.com/canada/rd/. Or check the individual pages such as http://kate.regionaldirector.ca. (If by chance you're reading this blog entry at http://kate.regionaldirector.ca, then you need to check out http://www.gregcons.com/kateblog/ which is my regular home.)

About the picture: I hate it. What can I tell you, I hate pretty well all pictures of me but the ones that people get hold of electronically I hate even more. Enough about that until I managed to replace it with one I can stand.

What do RDs talk about when you get us all in a room? Business challenges, personal challenges, what's coming in Whidbey, what we're excited about for Longhorn, patch management, and a bunch of other stuff that's under NDA for a while yet. We also talked about user groups, Deep Dives (like this Smart Client one in Toronto or this Web Services Security one in Toronto; there are some in Calgary, Vancouver, Ottawa, and Toronto too) and conferences. VSLive starts tomorrow, then all the TechEds through the summer and the Microsoft Partner Conference in July. Lots of chances for us all to get on stage. We also talked about the things we do beyond speaking, webcasts, and other community touches. Things like my Code Guru column, the RD column on MSDN, books, and developing content. Most people never think about where all the whitepapers on MSDN, the Hands on Labs and PDC and TechEd, and the presentations for tours and events actually come from. Sure, lots are written by Microsoft people, but plenty are written by smart folks who are really into the topic, and a lot of those are RDs. And of course, we talked about our day jobs and the work we're taking on. Don't forget, pretty much all the RDs are available for consulting gigs :-) although some of us are less available than others.

Looking forward to the next one already.

Tuesday, 04 May 2004 19:07:03 (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, 25 April 2004

If you're a regular reader of Julie Lerman's blog, you know she likes to announce other people's wins and successes whenever she can -- she's covered plenty of mine. So turn about is fair play -- Julie is just the third Rock Star interview for Ziff Davis' DevSource. Want to know what matters to her, and what she's doing about it? Read the interview.

Sunday, 25 April 2004 14:35:39 (Eastern Daylight Time, UTC-04:00)  #    
# Monday, 19 April 2004

My new user group (that doesn't really have a name yet) is meeting on Tuesday the 20th. That would be tomorrow. Over the weekend I realized it would be good, at this first meeting, to list the next few meetings and their topics. So I emailed three people who had said they would speak. By this morning I have five speakers booked and confirmed. What a great gang! So if you come to Oshawa on the third Tuesday of the month, you're going to see one of these terrific speakers: Ed Musters, Scott Bellware, Adam Gallant, Marcie Robillard, and Jason Beres. I'm still looking for more, and I'm also looking for sponsors, so if you're in the Oshawa / Durham / east-of-Toronto-but-not-exactly-Ottawa-yet zone, let's talk!

Why did I put this under consulting life? Because I think it's funny that we could sort all this out over a weekend. None of us have normal office hours, and none of us mind making firm commitments using email and IM.

Monday, 19 April 2004 08:55:12 (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, 06 April 2004

I flew to Minnesota and back, and then after 36 hours home I flew to Seattle, changing planes in Chicago. That's 4 legs in 3 days and 2 of those legs were significantly delayed by mechanical problems. Yikes! I hope I've used them up for a while. The delay leaving Chicago was caused because the guy driving the baggage ramp bumped into the plane and dented it. They had to get a structural engineer to pronounce judgement on whether the size of the dent meant the plane was out of service.

And the lining up and identifying yourself is reaching epic proportions. Here's how it went for Minnesota: drive to Park N Fly. Walk in, put down suitcase and carry-on, tell someone who I am, get piece of paper, pick everything up. Walk 20 feet to Air Canada desk, put everything down. Tell someone who I am and prove it with passport, also show air miles card in case the travel agent didn't pass it along. Receive piece of paper. Walk outside and wait for bus. Put everything down. Bus comes. Pick everything up, go on bus, tell driver which terminal I want, put everything down.

Reach my terminal, pick everything up, go inside, wait in line to recieve baggage tag. Prove who I am by showing passport and boarding pass. Answer questions about my packing and my luggage. Pick everything up (including bag which will be with me through several more lines yet.) Show boarding pass to prove I am allowed into immigration area. Line up for US Immigration. This line is about 45 minutes long so I am pulled out after ten minutes into much shorter line. Reach immigration guy. Show passport, boarding pass, customs form which I had filled out while waiting in some line or another. Answer questions. Admitted. Pick everything up, walk 20 feet, hand customs form to some other guy. Walk 50 feet, join lineup to have checked baggage x-rayed. Wait while bag comes out. Wait. In there a long time. Eventually it's rejected so I have to carry it over to some other table and wait patiently and non-threateningly while someone hand-searches it. Then she escorts me (I feel so trusted) to the conveyor belt. At least that's gone. Now me and my carry on are headed for the next security checkpoint. Take out laptop and cell phone. Take off coat. Show boarding pass again. Take off shoes because they always set off the metal detectors. Get told off by security people for putting shoes in tray, they must go directly on belt. Whatever. Wait for my stuff. Wait some more while they swab the laptop and hand search my bag to find a suspicious looking pen. Once it was out in the open air it was pronounced safe and returned to me. Put everything back in the bag. Head for gate.

Oh dear. Gate is downstairs. That means, yes indeed, join line up to wait for shuttle bus. Get on bus. Ride to other side of airport. Find subgate. Wait. We are moved to another subgate; pick everything up to walk 100 feet to new subgate. Wait some more.  Ah, finally, we're boarding. Show boarding pass and passport. Onto plane. Don't forget to turn off cellphone! Put everything away and out of reach. I'm a nervous wreck!

Coming to Seattle I had an extra step in all of that -- though I didn't get my luggage hand searched this time -- because I was flying business class (using up my points in case Air Canada really goes bust this time) so I had to prove my identity at two business-class lounges, though I can't really complain about that. I was traveling on one hour sleep (I would have had two if not for the time change) so I kind of zoned through the whole thing and don't really remember much of it.

And airlines wonder why plane travel hasn't picked back up?

Tuesday, 06 April 2004 20:10:55 (Eastern Daylight Time, UTC-04:00)  #    
# Saturday, 27 March 2004

We're a small consulting firm and we take on a variety of projects. Some are just a few days, others last months and months. We live with a spectrum of decision-making styles from our clients as well. Sometimes a prospect (or returning customer) will go from “can you do this? how much will it be? when can it be done?” to “ok, make it so” in a matter of days or even hours. Other times we wait through weeks of “getting things approved” in order to do a week of work. This means that when we agree to do something, we're not always sure when we're actually going to be doing it.

This month the stars have aligned to push me up against a fence of hard deadlines all coming at once. I have a lab to complete for TechEd (you're coming to TechEd, aren't you?) and the first draft of my slides are due. I'm writing some samples and documentation (more on that later,) that are due March 31st. My slides are due for VSLive (you're coming to VSLive, aren't you? Early bird ends the 31st and you can get 10% off by dropping my name -- literally, the discount code is KATE.) The conferences aren't until May but prep time is now. My website accessibility project is being reviewed by the committee this week. And our major intranet project keeps growing and growing as the end users like what we've done so far and keep asking for more. The client where I delivered 49 days of .NET training over the winter is kicking off ASP.NET and Sharepoint projects like there's no tomorrow, and they need days of mentoring.

In this business, you're either insanely busy trying to meet the deadlines others impose, or you have nothing to do and you're scrambling for work. I think I prefer it this way, though I am looking forward to some time off. Last night in a Messenger conversation one of my deadline owners told me “enjoy your weekend” -- my reply? “Luckily I enjoy working!” And I do.

Saturday, 27 March 2004 11:23:59 (Eastern Standard Time, UTC-05:00)  #