Kenny Kerr

<span style="color:#4a67b1"><strong><em>This blog has moved to <a href="http://kennykerr.ca/"><span style="color:#4a67b1">kennykerr.ca</span></a></em></strong></span>

  • My blog has moved!

    I’ve just set up a permanent new home for myself on the web:

     

    kennykerr.ca

     

    This is where I’ll continue to write about software and talk about my new business. See you there!

    Read more...

  • Windows Web Services FAIL

    In 2007 I published an article about the cool XmlLite API introduced with Windows Vista. Although the XmlLite developers wanted to provide a redistributable for Windows XP, they never managed to get it past the Microsoft lawyers. Eventually Windows XP Service Pack 3 was released including XmlLite but by then many developers had given up on it. I felt that this was a great embarrassment for Microsoft. But that was in the Windows Vista era. Surely things have improved in the Windows 7 timeframe.

    Fast forward to 2009 and in the November issue of MSDN Magazine I wrote about the excellent Windows Web Services (WWS) API introduced with Windows 7. If you’re targeting Windows 7 and later this is an excellent addition to your developer toolbox. But it seems a similar fate has befallen it. Although a redistributable is apparently available I have yet to see it again thanks to the lawyers. After months of requesting and waiting, I finally heard back from a lawyer again but now it turns out I need to purchase a premiere support contract in order to qualify for the redistributable.

    I’ve never needed paid support from Microsoft and I don’t see why I need to get a contract now! For crying out loud I’m a Microsoft MVP and I provide free support to Microsoft customers. Just a little ironic. Anyway, if you’ve got one of these fancy support contracts I guess you’ll be fine. As for me I’ll just have to wait till Windows 7 is as ubiquitous as Windows XP before I will give it another look. This really would not have bugged me if Microsoft hadn’t made such a big deal about how a redistributable would be made available to developers.

    Read more...

  • Goodbye Windows with C++ and Layered Windows with Direct2D

    I’ve been offline for days at a time while traveling through South Africa and just noticed that my latest Windows with C++ column, Layered Windows with Direct2D, is now live on the MSDN Magazine website.

    This issue is bittersweet for me as it is both one of my favorite articles to date and also my last for the magazine. Although MSDN Magazine will continue for some time, Microsoft is getting out of the magazine business, and it just no longer makes sense for me to write for the magazine on a regular basis. Of course being the last remaining C++ columnist I’m not sure anyone will notice.  :)

    This is my third article on Direct2D. From the article:

    In my third installment on Direct2D, I’m going to show off some of its unmatched power when it comes to interoperability. Instead of exhaustively detailing all the various interoperability options that Direct2D provides, I’m going to walk you through a practical application: layered windows. Layered windows are one of those Windows features that have been around for a long time but haven’t evolved much and thus require special care to use effectively with modern graphics technologies.

    I hope you enjoy it.

    Here are links to some of the most recent Windows with C++ columns:

    November 2009 – Windows Web Services

    September 2009 – Drawing with Direct2D

    June 2009 – Introducing Direct2D

    April 2009 – The Virtual Disk API in Windows 7

    February 2009 – Visual C++ 2010 and the Parallel Patterns Library

    December 2008 – x64 Debugging With Pseudo Variables and Format Specifiers

    October 2008 – Exploring High-Performance Algorithms

    August 2008 – Asynchronous WinHTTP

    And here is a complete list.

    Read more...

  • Travel

    Today I’m leaving for South Africa where I’ll spend 2.5 months with my family. If you have any questions about Window Clippings or my articles please be patient as I may not be able to get online to check my email as regularly.

    Any suggestions for affordable mobile broadband in South Africa would be welcome!

    Read more...

  • Windows Web Services versus ATL SOAP

    After publishing the WWS article I received some questions about how this compares to ATL’s SOAP stack. I’m certainly not trying to convince anyone to switch over to WWS but it has some benefits that may be useful in some scenarios. I also haven’t used the ATL/ServerXMLHTTP stack much so I’m probably not the best person to do a comparison. From what I can tell however it uses either WinHTTP or WinInet and MSXML. Given that there are some things I can point out

    1. WWS is not limited to SOAP over HTTP and provides first-class support for TCP and UDP bindings. It’s also not limited to text encoding and can provide a considerable performance boost with binary encoding when applicable. It is possible for developers to modify the ATL source code to use a different transport and encoding as several teams at Microsoft have done in the past but you are on your own when doing this whereas WWS can handle this for you.

    2. The XML layer in WWS, which includes serialization for C data types and structures, is much faster than XmlLite which in turn is much faster than MSXML. In some scenarios that can make a big difference. Control over memory management and reduced working set is also critical for many customers (many of whom live within Windows core). This also has a big impact on throughput which is critical in scenarios like financial services.

    3. I didn’t touch on this in the article but there’s a very nice (and efficient) asynchronous programming and cancellation model that works with completion ports making it really scalable.

    4. ATL SOAP is no longer in active development and Microsoft only supports the version of ATL SOAP that shipped with Visual Studio 2005. Of course if this works for you that’s great.

    The list can go on.  One of the biggest reasons for using WWS that I’ve heard from Microsoft and others is the interoperability with modern SOAP stacks like WCF, WebSphere, Weblogic, and others. With ATL SOAP it is only possible to build clients for services that use the basic SOAP services specs that fall under the Basic Profile 1.0. If a service uses any of the WS-* standards released past 2002, ATL SOAP just doesn’t support it out of the box.

    Concerns over platform support are warranted although a lightweight redistributable for WWS is available going back to Windows XP.

    Read more...

  • Windows with C++: Windows Web Services

    My latest Windows with C++ column, Windows Web Services, just went live on the MSDN Magazine website. Here I’m taking a break from Direct2D to highlight the new SOAP stack introduced with Windows 7 for building both clients and servers. It’s completely native, has minimal overhead, and is incredibly fast. From the article:

    One of the main reasons many developers flocked to the Microsoft .NET Framework, and Java to a lesser degree, was the fact that it made it much easier to write software for the Internet. Whether you were writing an HTTP client or server application, the .NET Framework had you covered with classes for making HTTP requests and processing XML easily. You could even generate SOAP clients from WSDL documents and implement SOAP servers with ASP.NET. As the standards around Web services matured, Microsoft developed the Windows Communications Foundation (WCF), also built on the .NET Framework, to make it easier to use the increasingly complex Web standards for handling different transports, such as TCP and UDP, and provide more versatile security options.

    C++ developers, however, were left wondering whether it was even practical to use C++ to write Web applications. Microsoft had provided a couple of temporary solutions in the form of ATL classes and a COM-based toolkit, but in the end these couldn’t keep up with the progress that the managed SOAP stacks had made and thus were largely abandoned.

    I hope you enjoy it.

    Here are links to some of the most recent Windows with C++ columns:

    September 2009 –  Drawing with Direct2D

    June 2009 – Introducing Direct2D

    April 2009 – The Virtual Disk API in Windows 7

    February 2009 – Visual C++ 2010 and the Parallel Patterns Library

    December 2008 – x64 Debugging With Pseudo Variables and Format Specifiers

    October 2008 – Exploring High-Performance Algorithms

    August 2008 – Asynchronous WinHTTP

    And here is a complete list.

    Read more...

  • October 2009 issue of MSDN Magazine

    Those of you expecting my Windows with C++ column about Windows Web Services to appear in the October issue will have to wait another month as the article was bumped due to space constraints. I just found out yesterday myself. In the mean time you should read Rick Molloy’s latest article on the Concurrency Runtime.

    Read more...

  • Zune Fail

    The Zune hardware products are fantastic. The new Zune HD is particularly impressive. The Zune software is a joy to use when compared to that other product that controls 99% of the market. But until Microsoft figures out how to make the Zune Marketplace and the Zune Pass subscription service available in the rest of the world (outside of the USA) this isn’t going to go anywhere.

    With the Zune 3.0 I could at least browse the marketplace even if I couldn’t purchase anything. I could for example use it to search for podcasts. That doesn’t even seem to work anymore with Zune 4.0.

    Make it happen. Pretty please.

    Read more...

  • Direct2D and the Desktop Window Manager

    Many moons ago, when Windows Vista was still in beta, I wrote an article showing readers how to program with the Desktop Window Manager (DWM). I also followed up with another article showing readers how to display controls on glass. Both articles focused on User32/GDI which at the time was still the way to go for native application developers.

    With the introduction of Windows 7 comes a brand new graphics platform for the application developer and that of course is Direct2D. So far MSDN Magazine has published two introductory articles I wrote about Direct2D. If you haven’t already done so please read Introducing Direct2D and Drawing with Direct2D. I’ll wait.

    The upcoming December issue of the magazine will feature the next installment which covers some more advanced topics related to interoperability, but for now I thought I’d update the DWM saga for Direct2D as it’s just so simple. Whereas GDI barely tolerated the DWM, Direct2D just loves it.

    Let’s say you just want to render the entire client and non-client area as a seamless sheet of glass and then use Direct2D to draw on top. Start by instructing the DWM to extend the frame into the client area as follows:

    MARGINS margins = { -1 };

    Verify(DwmExtendFrameIntoClientArea(windowHandle,
                                        &margins));

    Now all you need to do is instruct Direct2D to use the same pixel format used when alpha blending with GDI, namely pre-multiplied BGRA:

    const D2D1_PIXEL_FORMAT format =
        D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM,
                          D2D1_ALPHA_MODE_PREMULTIPLIED);

    The format is used when initializing the render target properties:

    const D2D1_RENDER_TARGET_PROPERTIES targetProperties =
        D2D1::RenderTargetProperties(D2D1_RENDER_TARGET_TYPE_DEFAULT,
                                     format);

    The render target properties are then provided to the Direct2D factory object to create the render target as usual:

    Verify(m_d2dFactory->CreateHwndRenderTarget(targetProperties,
                                                windowProperties,
                                                &m_target));

    And that’s all there is to it. You can now render portions of your window with glass simply by using a brush or bitmap’s alpha channel. You might for example clear the render target before drawing as follows:

    m_target->Clear(D2D1::ColorF(0.0f, 0.0f, 0.0f, 0.0f));

    Hope that helps.

    Read more...