# Thursday, March 09, 2006

Anyone who thinks that C++ is a forgotten language at Microsoft that has been put into the corner and ignored needs a quick reality check. And if you've always wanted to work at Microsoft, or if you're looking for work where you can use C++ every day, how does this sound:

Want to build the next generation of C++ development tools? The Visual C++ team has multiple openings working on the libraries. You will have an opportunity to work with environments, components and tools that are used in complex projects like Windows Vista which has about 50 million lines of C++ code. If you are willing to take up the challenge of delivering high performance, scalable, and most usable set of features to the most sophisticated and demanding developers in our  community and have a passion for handling new technologies that is in Microsoft's horizon, then please send in your resume. We're looking for senior individual contributors ready to code, design and provide the next generation of code reuse leadership at Microsoft. Candidates are required to possess a bachelors or masters degree in computer science, and five years relevant experience.

If you are someone who's ready to design code that will be used and critiqued by the whole developer community; ready to have a direct connection to customers whose problems you understand then the Visual C++ Libraries team is the place for you. We are building new libraries that drive developer productivity and power on the native and managed  platforms. Next version we'll bring our MFC and ATL libraries up to date to work with the new Win32 APIs of the Vista Wave. And we'll help our customers work with WinFX and move forward their existing code. We own the full set of C++ Libraries -- C Runtime Library, Standard C++ Library, MFC and ATL. In future we'll also address challenges like parallel programming, and migration of existing native applications to managed code. If you have prior experience of large scale ISV development with MFC or ATL, we'd be especially keen to hear from you.

Just as was the case about seven months ago when I blogged a hiring opportunity, you need to email Martyn Lovell for this. I figure most folks who qualify for the job can find his email address, but here's a hint: you could always email me and ask for it :-)


Thursday, March 09, 2006 9:46:24 AM (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, March 08, 2006

It's all about the presentation layer for the next few months at East of Toronto .NET User Group:

  • March 23rd, Justin Lee will demonstrate Atlas, tools to let you do AJAX-y things without hand-coding a TON of script yourself. "ASP.NET “Atlas” is a package of new Web development technologies that integrates an extensive set of client script libraries with the rich, server-based development platform of ASP.NET 2.0. “Atlas” enables you to develop Web applications that can update data on a Web page by making direct calls to a Web server — without needing to round trip the page. With “Atlas”, you can take advantage of the best of ASP.NET and server-side code while doing much of the work in the browser, enabling a richer user experience. This presentation will showcase what Atlas will bring to you, and how Atlas can change the way you develop web applications." Register so we get enough pizza.
  • April 5th, we move our regular meeting date to accomodate a mini-Canadian tour by Rod Paddock of CODE magazine. Rod will be talking about Windows Presentation Foundation, formerly known by the much friendlier code name Avalon. "This introductory session will demonstrate how to use Windows Presentation Foundation (WPF) to build line of business applications. The session will begin with a tutorial on WPF basics. How to build a basic WPF application, basic XAML constructs, WPF controls, responding to events, etc. The session will then move into the realm of data binding and using controls to best represent line of business style applications (data entry with one to many capabilities).  Developers will leave this session with a basic understanding of how to build WPF applications." Again, we really need you to register.

Chris has some great prizes to hand out at these meetings, but more importantly come out to learn and to meet other developers who live, you know, East of Toronto. Both meetings are at the Whitby Public Library so they're easy to get to after work.


Wednesday, March 08, 2006 7:35:53 AM (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, March 01, 2006

You really want to download and read http://www.gotw.ca/publications/C++CLIRationale.pdf. It's 54 pages (just under 2 MB) of WHY the C++/CLI product is the way it is. Why isn't it a library? (Because the compiler really needs to be in on what you're doing to hook in the runtime support properly.) Why doesn't it use underscores? (Because programmers hated them.) You don't have to be a compiler-writer to follow the rationales laid out here. It provides some interesting insight into the way the standards process works and the way that decisions get made by a team or by one person who is strongly committed to "doing it right this time." However this is no dry committee report or academic paper: you will find the word "I" throughout the paper, along with anecdotes about conversations, code written out quickly to help guide a decision, and other vignettes that make this must reading for all we C++ people.

Some quotes (words outside "" or in [] are mine, not Herb's):

  • "Many C++ programmers tried hard to use [Managed Extensions], and most failed."
  • Mapping destructors to dispose bidirectionally (probably my favourite C++/CLI feature) was "nontrivial, and required C++/CLI to influence CLI to modify and regularize its pattern)."
  • "There comes a point where you have to admit that you’re trying too hard." (On having a class that inherits from System::Object magically be a ref class without having to use the keyword, an idea that wouldn't have been good anyway since it would have ruled out mixed types.) 
  • "Having private as a default matters so much that Stroustrup correctly felt it was worth the high cost of taking a new keyword just to have a category of user-defined types where the default was private." (In a section drawing parallels between some C++/CLI decisions and the decades-old decision to add class to a language that already had struct.)
  • "...in the C++/CLI design effort, some people tried hard to leave open the possibility of allocating C++ objects physically on the CLI heap; that is impossible in general, and trying to persist in this led to confusions in the type system that have now been avoided and removed." (Ouch!)
  • "As for whether this set of extensions amounts to a different superset language, a compatible dialect, and/or a binding: I think you can find reasonable people who view it any of those ways. Whichever noun you prefer, it is the most compatible set of extensions I know of to any programming language, standard or otherwise, including for nearly all macro cases — which are notoriously next to impossible to support in a compatible way. Achieving that required putting requirements in C++/CLI that placed a greater burden on compiler writers in favor of preserving strong ISO C++ compatibility and avoiding conflict with C++0x evolution, and improving programmer usability so that programmers would use the feature instead of switch to another language (unlike with the Managed Extensions). These choices reflect the designers’ great respect for ISO C++."

The paper closes with an FAQ that includes questions I can only describe as rude. I am guessing that Herb has been patiently answering these in email and at meetings for many years now.

If you still aren't really clear on WHAT the C++/CLI version of C++ is, what happened to the underscores, or how C++ can be the best .NET language of all (offering features C# and VB just cannot offer) then this paper might not be the place to start, since it's not a syntax review or a tutorial. But then again, maybe understanding the WHY will motivate you to go and learn the WHAT.  And if you want more WHY, the paper is liberally sprinkled with links to blog entries by Herb and Brandon (mostly in 2003) with even more details.

Go! Read it, now!


Wednesday, March 01, 2006 9:35:12 AM (Eastern Standard Time, UTC-05:00)  #    
# Saturday, February 25, 2006

My blog is worth $17,500.74.
How much is your blog worth?

I have no clue who would come up with a number such as that, but anyone who approaches me with a cheque for $17,500 (or should I say check, I bet that's US dollars) is very likely to become a proud blog-owner :). And that's a 54 cent discount!


Saturday, February 25, 2006 6:32:20 PM (Eastern Standard Time, UTC-05:00)  #    
# Monday, February 20, 2006

Visual Studio Team Systems is a huge product... diagramming tools, code generators, source control, work item tracking, project management, documentation generators, and much more besides. Some people I know have already decided to adopt VSTS because of one set of features, but really don't know how to use some of the other features. Others are still undecided about whether they want it, or which "stack" - tester, architect, developer, or all three in the Suite product - they want.

Why not attend a two-hour session that will help you to see what you can do with this amazing technology?

City Date Link
Mississauga February 22nd Register
Vancouver March 2nd Register
Mississauga March 21st Register
Ottawa Apr 19th Register
Calgary May 17th Register
Toronto June 21st Register

The abstract I received says "This session is intended to provide an introduction to Visual Studio Team System, highlight the new functionality and business value in each offering, and outline the transition steps for existing Visual Studio and MSDN customers. We will also demonstrate Visual Studio Team System in action." Why not check it out while there are still spaces available?



Monday, February 20, 2006 5:47:56 PM (Eastern Standard Time, UTC-05:00)  #    
# Wednesday, February 15, 2006

There's good news and bad news on the "C++ product team blog" front. The good news is that Nikola Dudar has a new entry after about three months of silence. The bad news is that it's to announce that STL/CLR will have to wait a little longer. It slipped out with beta 2 but it's not in the release version, and was planned as a web download. But the team is heads-down on a number of fronts and this is one of the items that has had to be postponed. The big focus is MQ, an internal milestone that all the languages and tools are working on.

Patience is a virtue,

Wednesday, February 15, 2006 9:08:17 AM (Eastern Standard Time, UTC-05:00)  #    
# Monday, February 13, 2006

As someone commented the other day at a presentation I was doing, I still have VS 2005 in a VPC and not on my base machine. Why? Well I have a big ASP.NET project finishing up that is all done in 2003 (an Enterprise client, not an early adopter at all and it's been 18 months since we started) and I was just a little nervous that if I put the 2.0 Framework and the like onto my laptop that I would mess things up. I had no proof of that, and no time to go find out one way or the other, it was just a gut worry born of spending 25+ years doing this stuff. I decided to use the 2005 VPC for demos and playing with the new tools and carry on with 2003 on the actual metal.

Well today someone gave me a way cool tool that I really wanted to use -- and it needed the Framework 2.0. I decided to give it a whirl. The actual installation was nice and quick and didn't even require a reboot (though the installer did insist on my closing a few things I didn't think were framework dependent.) Then, cool tool installed, I went back to my final bug triage on the ASP.NET project, and when I brought up a report (using the ReportViewer control on the aspx page):

The report server cannot decrypt the symmetric key used to access sensitive or encrypted data in a report server database. You must either restore a backup key or delete all encrypted content and then restart the service. Check the documentation for more information.

Aaaargh! I have no clue how to restore a backup key, or what my encrypted content is and how I would feel about deleting it! So what to do? Toss that string into a search engine and you'll find links to a KB article that says "oh, you should have done xyz before you changed the user account that SRS runs under." The resolution is of no help to anyone who accidentally did so (and no, I didn't think that installing a new version of the framework would change the user account under which SRS runs.)

I uninstalled and reinstalled SRS, then redeployed my reports by opening each 2003 solution that I'm actively using on this machine, right clicking the Reports project in each and choosing Deploy. Took less than half an hour counting the near panic attack when i first got the message. But that's not a strategy for the production machine, so I just added another ToDo to the post-go-live list, since the client is sure to want the Framework 2.0 on that machine eventually.


Monday, February 13, 2006 2:15:56 PM (Eastern Standard Time, UTC-05:00)  #    
# Friday, February 03, 2006

One of the main "deliverables" of a code camp is to attract attendees who don't normally go to conferences, launches, or even user group meetings. Another is to attract first time speakers. I love seeing "that look" on someone's face, when they are fresh off the stage, they gave their talk, the demos worked and they are still alive! Little do they know they're hooked at that point :-).

Here are some blog entries by brand new speakers at the Toronto Code Camp:

  • Paul Scarlett wrote to DotNetRocks about the experience... his link is to Carl reading the letter and then Carl and Richard talking about how terrific we all are :-). If you poke around elsewhere in his blog you will find various other postings describing the speaking experience for Paul.
  • Shaun Hayward blogs about his Code Camp experience... he liked it so much he's the speaker for February's meeting of the East of Toronto .NET User Group. (Register now!)

Congratulations guys, and welcome to the club!


Friday, February 03, 2006 12:58:47 PM (Eastern Standard Time, UTC-05:00)  #