# Wednesday, November 03, 2010

Right after Tech Ed I will embark on a mini-tour of three Canadian cities, while Richard Campbell does two others, to be called the "Building Awesome Apps for Windows 7 Community Tour". The details are on the Canadian Developers blog. First, the dates, times, and register links:

Date City Time  
Thursday, Nov 18 Montréal 9 AM to 11:30 AM Register
Thursday, Nov 18 Montréal 6 PM to 8:30 PM Register
Wednesday, Nov 24 Mississauga 9 AM to 11:30 AM Register
Wednesday, Nov 24 Mississauga 6 PM to 8:30 PM Register
Thursday, Dec 2 Ottawa 9 AM to 11:30 AM Register
Thursday, Dec 2 Ottawa 6 PM to 8:30 PM Register
Thursday, Dec 2 Calgary 6 PM to 8:30 PM Register
Friday, Dec 3 Calgary 9 AM to 11:30 AM Register
Tuesday, Dec 7 Vancouver 9 AM to 11:30 AM Register
Tuesday, Dec 7 Vancouver 6 PM to 8:30 PM Register

Next, descriptions - what are we going to do? We're going to make you better Windows 7 developers, that's what. We'll do some Code Pack coverage (sure, jumplists, taskbar stuff, but beyond that - some of the material from my Advanced Windows 7 Development at Tech Ed Europe will get its Canadian debut) and then dive into touch development. There are abstracts in John's blog post.

If you can't get to one of those cities on the appropriate day, never fear - there will be a webcast, too. Please spread the word about the webcast throughout North America, everyone's welcome! 

I'm looking forward to this tremendously!

Kate

Wednesday, November 03, 2010 12:10:21 PM (Eastern Standard Time, UTC-05:00)  #    
# Monday, November 01, 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, November 01, 2010 10:40:23 AM (Eastern Standard Time, UTC-05:00)  #    
# Saturday, October 30, 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, October 30, 2010 11:13:14 AM (Eastern Daylight Time, UTC-04:00)  #    
# Thursday, October 28, 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, October 28, 2010 11:06:15 AM (Eastern Daylight Time, UTC-04:00)  #    
# Tuesday, October 26, 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, October 26, 2010 4:00:12 PM (Eastern Daylight Time, UTC-04:00)  #    
# Sunday, October 24, 2010
Hilo, the reference application project from the C++ team that doesn't use MFC or the .NET Framework, is back with another sample. You've seen nice graphics in the way photos are treated, a ribbon UI, and now you can see social media integration with Flickr uploads, touch support, and Windows 7 jumplist support. And remember, all the code is available for you to explore and learn from.



Take a look and see what you think. If you want to know how to build a modern UI and a modern set of functionalities (like web services) then this is the reference application for you.

Kate
Sunday, October 24, 2010 2:23:59 PM (Eastern Daylight Time, UTC-04:00)  #    
# Friday, October 22, 2010
The wheels of the standards committee, I have said more than once, do grind slowly, but exceedingly fine. Apologies to probably Longfellow, though I might be mistaken. Anyway, progress continues on the next version of the standard and there are some details still to settle. Anthony Williams has written a nice summary of the October Mailing (in preparation for a November Meeting) along with some helpful links. He points out that generating move constructors (as compilers do today for copy constructors), as required by the Final Committee Draft (FCD) could break some existing code, so discussions are planned on restricting (or dropping) this implicit generation. I  like knowing that people are putting this level of thought into language changes instead of just issuing a Breaking Changes list and expecting me to go edit my code accordingly.

He also highlights situations where people are deliberately throwing exceptions from a destructor (gasp! I know!) and their working code will break unless they change it say they intend to throw exceptions from their destructor. You would think that this was a tiny population of people, and that marking their code in this way is no big deal, but C++ philosophy is that working code with defined behaviour should continue to be working code with defined behaviour in the latest version of the language. As you can see, that can really be a challenge sometimes.

If you're a C++ person, I challenge you to read the papers Anthony links to. If you can't understand a word of them, you're missing a lot of what C++ is these days. While talk of "implicit invariants", rvalues, and a "throwing move" may take some effort to decipher, I think it's worthwhile. C++ is a language in which performance and correctness are both paramount. That's why the developers are expected to manage lifetimes themselves, explicitly state whether they want shallow or deep copies, and so on. Template libraries simplify much of this (shared_ptr and unique_ptr are the death knell for the characters d-e-l-e-t-e in my code) but understanding those lifetime issues, understanding rvalues and lvalues, understanding when temporaries are created and deleted are all fundamental to being a C++ developer. Understanding those things lets you write better C++ code than you otherwise would. I know there are other languages in which your understanding doesn't matter because it is always done the same way. I also know that the control offered by C++ enables performance gains in specific situations where the developer knows better. These things can both be true at once, and can make other languages a better fit for certain developers or for certain business problems. They are also what makes C++ a better fit for some developers and some business problems. But if you don't have those understandings, if you don't want to control your application at that level, then why are you using C++? Use something simpler that can't be controlled the way C++ can.

For those who are using C++ "on purpose", who are "unrepentant" as I say in other of my talks, knowing the language at this level is key to being good at it. Would you say that "Implicit Move Must Go" or not?

Kate


Friday, October 22, 2010 1:52:41 PM (Eastern Daylight Time, UTC-04:00)  #    
# Wednesday, October 20, 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, October 20, 2010 12:55:03 PM (Eastern Daylight Time, UTC-04:00)  #