Engineering Windows 7

Welcome to our blog dedicated to the engineering of Microsoft Windows 7

  • Engineering Windows 7

    User Account Control (UAC) – quick update

    • 59 Comments

    There’s been a ton of interest in how we have improved user account control (UAC) and so we thought we’d offer a quick update for folks. We know most of you have discovered this and picked a setting that works for you, and we're happy with the feedback we've seen.  This just goes into the details on the choice of defaults.  --Steven

    In an earlier blog post we discussed the why of UAC and its implications for Windows, the ecosystem, and our customers. We also talked about what we needed to do moving forward to address the data and feedback we’ve received. This blog post will provide additional detail on our response and what you can expect to see in the upcoming beta build in early 2009.

    As mentioned in our previous post, and your comments supported this, the goals for UAC are good and important ones. User Account Control was created with the intention of putting you in control of your system, reducing cost of ownership over time, and improving the software ecosystem. It is important not to abandon these goals. Instead, we want to address feedback we’ve received and build on the telemetry we have using those to improve the overall experience without losing sight of the goals with which we agree.

    For those of you using 6801 you have started to see the benefits of prompt reduction and our new and improved dialog designs. You also have seen our efforts to give the user greater control of their system – the new UAC Control Panel. The administrator now has more control over the level of notification received from UAC. Look for the UAC Control Panel to appear in Start Search, Action Center, Getting Started, and even directly from the UAC prompt itself. Of course, the familiar ways to access it from Vista are still present.

    User Account Control control panel.

    Figure 1: UAC Control Panel

    The UAC Control Panel enables you to choose between four different settings:

    1. Always notify on every system change. This is Vista behavior – a UAC prompt will result when any system-level change is made (Windows settings, software installation, etc.)
    2. Notify me only when programs try to make changes to my computer. This setting does not prompt when you change Windows settings, such as control panel and administration tasks.
    3. Notify me only when programs try to make changes to my computer, without using the Secure Desktop. This is the same as #2, but the UAC prompt appears on the normal desktop instead of the Secure Desktop. While this is useful for certain video drivers which make the desktop switch slowly, note that the Secure Desktop is a barrier to software that might try to spoof your response.
    4. Never notify. This turns off UAC altogether.

    We know from the feedback we’ve received that our customers are looking for a better balance of control versus the amount of notifications they see. As we mentioned in our last post we have a large number of admin (aka developer) customers looking for this balance, our data shows us that most machines (75%) run with a single account with full admin privileges.

    Distribution of number of accounts per PC

    Figure 2. Percentage of machines (server excluded) with one or more user accounts from January 2008 to June 2008.

    For the in-box default, we are focusing on these customers, and we have chosen number 2, “Notify me only when programs try to make changes to my computer”. This setting does not prompt when you change Windows settings (control panels, etc.), but instead enables you to focus on administrative changes being requested by non-Windows applications (like installing new software). For people who want greater control in changing Windows settings frequently, without the additional notifications, this setting results in fewer overall prompts and enables customers to zero in on the key remaining notifications that they do see.

    This default setting provides the right degree of change notification that a broad range of customers’ desire. At the same time we’ve made it easy and readily discoverable for the administrator to adjust the setting to provide more or fewer notifications via the new control panel (and policy). As with all of our default choices we will continue to closely monitor the feedback and data that come in through beta before finalizing for ship.

    --UAC, Kernel, and Security program managers

  • Engineering Windows 7

    Federating Windows Search with Enterprise Data Sources

    • 60 Comments

    The Windows Explorer has evolved by enabling you to find all sorts of content by searching for it. Many of you have used the search features in Windows Vista (based on our instrumented data) from the start menu or from the search box in Explorer. It has been a long time since most of us could remember where everything is by carefully managing our folder hierarchy and finding things based on file name alone.  We often rely on domain specific search (in music players, mail clients, photo clients) but with Windows Vista and Windows 7 we make it possible to search within a namespace and across namespaces.  This post is about a new feature based on Search that allows searching across PCs and even servers in an Enterprise setting.  Alwin and Scott, program managers, and Brandon, a developer, on the “Find and Organize” feature team authored this post. --Steven

    Finding your stuff

    Whether you’re searching or browsing, Windows Explorer is really about finding your stuff, and once you’ve found it, doing something with it (such as copying, opening, deleting, etc). For data that lives on your PC or home network, Windows 7 has invested in HomeGroup and Libraries (subjects for a future posting from our team) to provide an easier and richer experience than ever before. However, we didn’t stop there. Over the last few years, we’ve seen enterprise customers’ important content migrate towards (or aggregated in) centralized content stores, such as SharePoint. These products typically provide great features for team collaboration, document versioning and workflow management, archiving, retention policy enforcement, and other centrally-managed functionality that IT managers appreciate.

    Where Enterprise Data Lives

    Important enterprise data is found on local machines, in a variety of centralized content stores and also beyond the firewall

    Unfortunately, this has placed an extra burden on customers to learn each new content store’s user interface, often asking them to give up familiar desktop features like drag-and-drop. Given their collaborative focus, these sites grow organically and it can become hard to remember where a particular document was stored and then wade through long lists of them every time you want to get back to it. Enterprise customers have asked us for a solution that simplifies finding important content in these various data stores but without leaving their normal Windows work flows.

    As we looked at this trend and the lack of integration with content management and content indexing web services, we used these guiding principles in developing a solution:

    • Natural for people to use. Customers want a more consistent experience for finding and working with data in these disparate content stores, and would like us to bridge the local and remote content experiences by helping them “roll over” from one to the other.
    • Easy for IT admins to deploy. IT admins don’t like to deploy code, and want low-maintenance solutions that are easy to manage. Meanwhile customers want to connect up these sources without going through long and tedious installation processes or having to get help every time they want to set up a new search location.
    • Easy for developers to adopt. Developers want to enable this functionality in their offerings quickly and easily. There are a lot of data sources which need to be supported because IT folks don’t want to be locked in to a specific server technology.

    Choosing to build Federated Search

    Federated Search wasn’t the only way to address these challenges. The brute force approach would have been to take our existing Windows Search indexing technology and just use it on these content stores—that index the remote content on a local PC. This isn’t a very realistic solution since it’s inefficient to have all content indexed over the network by each person’s machine, especially when the content is changing at a rapid pace and represents a large corpus. Corporate retention policies may also prevent keeping even a local index of certain sensitive data.

    Fortunately, there’s a better option – Federated Search. Federated Search enables you to search a remote web service from Windows explorer and get results back that you can act on like any normal file. The largest barrier to doing Federated Search has already been taken care of too. That is, most of these content stores are already indexed on the server, or at least on some server. There are several great offerings that will accomplish this, such as Microsoft Search Server. Not only do these servers index this content, but many of them already expose search results via a standard web protocol. This is largely thanks to the prevalence of OpenSearch and RSS enabled clients (including Internet Explorer and Microsoft Search Server, among many others).

    For Windows 7, we’ve added support for Federated Search using OpenSearch v1.1 and worked to make the experience a seamless one. We found this solution strikes a good balance by leveraging the strengths of content services and the strengths of local file interactions within Windows.

    Natural to use

    Using Windows Explorer, people are familiar with several important user interface and interaction elements. They know how to use the navigation pane to change what they’re looking at. They know how to scroll around, how to select an item (or several), and they know how to double-click to open them. Most people know how to right-click for context-sensitive options related to their selection, or how to find those options presented in the command bar. They know they can drag and drop items to move them around. They know how to change view modes. We hope that they know how to search their current location using the search box, and in Windows 7 we think we’ve made it much easier to discover and use the Preview Pane to make sure they’ve got the right result.

    Searching Sharepoint from Windows Explorer in Windows 7

    Searching a SharePoint site using the new Federated Search support in Windows Explorer

    Much of the usefulness of building Federated Search into Explorer is our ability to take advantage of this knowledge and familiarity. This may seem obvious once you see it in action, but behind the scenes there’s quite a lot going on to make all of this happen. For example, some applications such as Microsoft Word already know how to work with web URLs. So opening a Word document from a web server is fairly straightforward. But the majority of applications you’ll encounter really only understand how to open files on the local machine or via standard network file sharing protocols. This includes everything from the built-in software like Notepad and Paint, to third-party software like Photoshop or iTunes.

    To handle this case, we implemented a “just in time” download solution, which will download the file to the internet cache before opening an application or taking actions (like using the SendTo menu) which require local files. This lets us offer searches that are very “lightweight” from a server load perspective, where we display metadata and icons or thumbnails without ever requesting the actual file. Then if you take an action like previewing or opening an item, we will do some behind-the-scenes work to make a local copy of the file only if necessary.

    That enables us to work with the existing application ecosystem without asking anything of developers. However, applications can also take steps to offer even better functionality in many cases. For example, Windows Photo Viewer has added support for non-file items. So if you open a picture result in the built-in photo viewer, it’s the photo viewer that downloads the item, not Explorer. This may not seem like a big deal, but it lets the photo viewer enable the forward and back buttons to jump to the next or previous result – and it will download that image on-demand. Starting at the PDC we began reaching out to third-party ISVs to encourage them to implement similar enhancements for Federated Search scenarios, and we will continue to offer guidance on how to best integrate with all of the newest Explorer features.

    Finally, we support all the standard clipboard and drag-and-drop operations. So if you drag a Word document from a Federated Search query onto your desktop, it will be copied there. You’ll even see the familiar Windows Explorer copy dialog, with progress indication, cancel ability, conflict resolution, and so on.

    But wait, there’s more! Windows Explorer is a great tool that many customers know and love. But some people use it without even knowing it. Countless Windows applications make use of what we call the Common File Dialog. This is a special Explorer window that lets you find and choose items to be opened or inserted into your current application, without ever leaving it. If you’ve ever clicked File and then Open or Save in an application menu, you’ve probably seen some version of this dialog. PowerPoint, for example, uses the common file dialog to insert pictures. That means from inside PowerPoint you can click Insert Picture, select the Federated Search link for your image repository, search for the picture you want, and then insert it directly into PowerPoint. This works for any existing application that supports the Common File Dialog, and there are a whole lot of them!

    Inserting a picture into PowerPoint’s using Federated Search

    Inserting a picture into PowerPoint’s using Federated Search

    Our Federated Search solution is all about simple lightweight access with a common, familiar user interface. This has a lot of benefits as we described above, but there are also cases where a server’s web interface will offer its own benefits. This might involve advanced query building, browsing, or server work-flow tasks, for example. So Windows 7 builds a bridge to these content repositories. After doing a search against a supported location, you will see a “Search on Website” button in the command bar which allows you to seamlessly send the query up to the service’s web interface in the default web browser. You’ll also see the “Open File Location” menu item when you right-click on a search result. Selecting that option will launch the web browser to the specific location in the document repository where the file is stored.

    This seamless integration of Federated Search within Windows allows customers to greatly simplify their workflow for getting at remote files while still being able to easily take advantages of the advanced functionality of content repositories.

    Simple to deploy

    Our next challenge was to make it easy for customers to get these new connections onto their machines. It wouldn’t be practical to ship Windows with a connection to every solution in the world, so we shifted to a way that would make it very easy for any web service to deploy a connection to their specific service.

    The model we came up with is similar to the way you add favorites from the web today. A web service can place a link to an .osdx file somewhere on their web page (see Channel 9’s search page for an example). The .osdx file is a simple XML file that uses the OpenSearch description document format to describe how to connect to the web service, and gives the web service some control of how the data is presented in Windows Explorer. When a person clicks on the link, Windows performs an ultra-lightweight install process that adds a search connector to that web service and places a link to that it in the Windows Explorer favorites.

    If you are an administrator in an enterprise environment, you will likely want to provide some pre-installed search connectors for your users to search the company intranet or a popular internal SharePoint site for example. You can do this by deploying the search connector (.searchconnector-ms) files to your users’ machines via typical deployment techniques such as imaging, group policy preferences or startup scripts. The beauty is that it’s just a simple XML configuration file and there’s no code that needs to get installed on their machines. It’s also possible to pin one of these as a link from the Start menu through group policy. In the group policy editor look for the policy in this area: User Configuration> Administrative Templates > Windows Components > Windows Explorer. The policy name is “Pin Libraries or Search connectors to Search again links and start menu”.

    Launching a Federated Search of an enterprise Intranet from the Start Menu

    Launching a Federated Search of an enterprise Intranet from the Start Menu

    Easy to adopt

    Of course this technology depends on having services that support it. Although there are only a few services that provide a .osdx for you today, there are many existing services that already support the basic OpenSearch requirements.

    We’re already seeing positive initial reactions from enthusiasts and ISVs alike echoing that it is indeed easy to enable your service to work with our Federated Search platform. If you’re a developer and want to enable an existing web based service to support Windows 7 Federated Search, you’ll need to provide a web service that accepts an http GET request with the search terms embedded somewhere in the URL and be able to return the results as an RSS or Atom feed. These requirements are typically very easy to meet for most applications that already provide search services via a web browser.

    Your web service results should include the basic RSS tags like <link>, <title>, <description>, <pubDate> to get started but there’s much more that you can include in the RSS output and customization you can do within the .osdx file to enhance the experience for the end user.

    For more information, we’ve published the Windows 7 Federated Search implementer’s guide with detailed information on how to enable your data source to work with Windows Federated Search. There’s also a recorded PDC session that demonstrates how to build a Windows Federated Search compatible web service for an existing SQL database.

    - Brandon Paddock, Scott Dart & Alwin Vyhmeister, Find and Organize

  • Engineering Windows 7

    Primer on Device Support and Testing for Windows 7

    • 58 Comments

    As most folks (finally) get the beta and start to set aside some time to install and try out Windows 7, we thought it would be a good idea to start to talk about how we support devices through testing and work across the PC ecosystem. This is a big undertaking and one that we take very seriously. As we talked about at the PDC, this is also an area where we learned some things which we want to apply to Engineering Windows 7. While this is a massive effort across the entire Windows organization, Grant George, the VP of Test for the Windows Experience, is taking the lead in authoring this post. We think this is a deep topic and I know folks want to know more so consider this a kick-off for more to come down the road. –Steven

    Devices and Drivers in Windows

    One of the most important responsibilities in a release of Windows is our support of, and compatibility with, all of the devices and their associated drivers that our users have. The abstraction layer in Windows to connect software and hardware is a crucial part of the operating system. That layer is surfaced through our driver model, which provides the interface for all of our partners in the multi-faceted hardware ecosystem. Windows supports a vast range of devices today – audio devices (speakers, headsets…), display devices (monitors…), print, fax and scan devices, connectivity to digital cameras, portable media devices of all shapes, sizes and functions, and more. Windows is an open platform for companies across the globe who develop and deliver these devices to the marketplace and our users – and our job is to make sure we understand that ecosystem and those choices and verify those devices and drivers work well for our customers – which includes partnering with those device providers throughout the engineering of Windows7.

    Drivers provide the interface between a device and the Windows operating system – and are citizens of the WDM (Windows Driver Model). WDM was initially created as an intermediary layer of kernel mode drivers to ease the authoring of drivers for Windows. There are different types of drivers. Class drivers (which are hardware device drivers that supports an array of devices of a similar hardware class where hardware manufacturers make their products compatible with standard protocols for interaction with the operating system) and device-specific drivers (provided by the device manufacturer for a specific device and sometimes a specific version of that device) are the two most common.

    Partner Support

    Support for our hardware partners comes in the form of the Windows Driver Kit (WDK) and for certification, the Windows Logo Kit (WLK). The WDK enables the development of device drivers and as of Vista replaced the previous Windows Driver Development Kit (DDK). The WDK contains all of the DDK components plus Windows Driver Foundation (WDF) and the Installable File System kit (IFS). The Driver Test Manager (DTM) is another component here, but is separate from the WDK. The Windows Logo Kit (WLK) aids in certifying devices for Windows (it contains automated tests as well as a run-time framework for those tests). These tests are run and passed by our hardware vendor partners in order to use the Microsoft “Designed for Windows™” logo on devices. This certification process helps us and our hardware partners ensure a specific level of quality and compatibility for devices interacting with the Windows operating system. Hardware devices and drivers that pass the logo kits tests qualify for the Windows logo, driver distribution on Windows Update, and can be referenced in the online Windows Marketplace.

    Validation and Testing

    With Windows 7 we have modified driver model validation, new and legacy device testing, and driver testing. Compared to Vista, we now place much more emphasis on validating the driver platform and verifying legacy devices and their associated drivers throughout our product engineering cycle. Data based on installed base for each device represents an integral part of testing, and we gather this data from a variety of sources including the voluntary, opt-in, anonymous telemetry in addition to sources such as sales data and IHV roadmaps. We have centralized and standardized the testing mechanics of the lab approach to this area of the product in a way that yields much earlier issue/bug discovery than in past releases. We have also ramped up our efforts to communicate platform or interface changes earlier with our external hardware partners to help them ensure their test cycles align with our schedule. In addition, we draw a more robust correlation between the real-world usage data, including recent trends, and prominence of each device and the prioritization it is given in our test labs. This is especially important for new and emerging devices that will come to market right before and just after we release Windows 7 to our customers.

    Another important element in bringing a high quality experience to our Windows 7 users in device and driver connectivity and capability is the staging of our overall engineering process in Windows 7. For this release all of our engineering teams have followed a well structured and staged development process. The development/coding of new features and capabilities in Windows 7 was broken out in to 3 distinct phases (milestones) with dedicated integration and stabilization time at the end of each of these three coding phases. This included ensuring our code base remained highly stable throughout the development of Windows 7 and that our device and driver test validation was a constant part of those milestones. Larry discussed this in his post as some might recall. Program Managers, Developers and Testers all worked in super close partnership throughout the coding phases. Our work with external partners – especially our device manufacturer partners – was also enhanced through early forums we provided for them to learn about the changes in Windows 7 and also work closely with us on validation. Much more focus has been put on planning and then executing - planning the work and then working the plan. Our belief is that this yields much more predictability to developing and delivering our new features in Windows 7 both from a feature content and overall schedule standpoint. We recognize that this raised the bar on how our external partners see us execute and deliver on that plan when we say we will, but we also hope it increases their confidence in how they engage with us in validating the device experience during our development and delivery of Windows 7.

    Determining Which Devices to Test

    Our program management team helps us drive device market share analysis. Most of their data comes from our Customer Experience Improvement Program. This gives us data on the actual hardware in use across our customer base. For example there are over 16,000 unique 4-part hardware IDs for display devices alone. Like many things, we understand that it only takes a single device not functioning well to degrade an overall Windows experience or upgrade—we definitely want to re-enforce this shared understanding.

    New devices typically have a small initial user base, but the driver will often be mostly new code (or the first time a code-base has seen a new device). As the device enters the mainstream, market share grows and most manufacturers continue to develop and improve their drivers. This is where for our customers, and our own testing, it’s important to always have the latest drivers for a given device.

    Over a device’s lifetime, we work closely with our external device partners and represent as faithfully as possible in our test labs, a prioritized way of ensuring old and new devices continue to work well with Windows. By paying very close attention to trends in the market place across our device classes, we can make guided decisions in the context of these areas:

    • Critical and mainstream devices we must support out-of-the-box
    • Which drivers we must make available on Windows Update
    • On which devices and drivers to focus our testing

    Another benefit of close market tracking is creating an equivalence-based view of a device family.

    Equivalence Classes

    We use the notion of equivalence classes to help us define and prioritize our hardware (device) test matrix. Creating equivalence classes involves grouping things into sets based on equivalent properties across related devices. For example, imagine if we worked for a chemical company and it was our job to test a car polish additive on actual automobiles. Given a fixed test budget, we would want to maximize the number of makes and models we test our product on. We begin by analyzing the current market space so we can make the best choices for our test matrix.

    Let’s say the first test car we analyze is a blue 2003 Ford Mustang. We also know that the same blue paint is used on all of Ford’s 2003 and 2004 models and is also used on all of Mazda’s 2005 models. This means our first automobile represents several entries in our table based on equivalence:

    Test ID

    Make

    Model

    Color

    Year

    1

    Ford

    Mustang

    Blue

    2003

    2

    Ford

    *

    Blue

    2004

    3

    Mazda

    *

    Blue

    2005

     

    Now let’s look at a silver 2001 Mercedes C240. We know that Mercedes and Chrysler have a relationship and upon further investigation we find Chrysler used the same silver paint on their 2006 through 2009 models. Now our equivalence class based test matrix looks like this:

    Test ID

    Make

    Model

    Color

    Year

    1

    Ford

    Mustang

    Blue

    2003

    2

    Ford

    *

    Blue

    2004

    3

    Mazda

    *

    Blue

    2005

    4

    Mercedes

    C240

    Silver

    2001

    5

    Chrysler

    *

    Silver

    2006

    6

    Chrysler

    *

    Silver

    2007

    7

    Chrysler

    *

    Silver

    2008

    8

    Chrysler

    *

    Silver

    2009

    By carefully analyzing each actual automobile, we have established an equivalence relationship that we can leverage to maximize implicit test coverage. Testing one make and model is theoretically equivalent to testing many. Of course we recognize in the real world different companies might use different techniques for applying paint, as one variable, so there are subtleties that require additional information to property class attributes for testing purposes.

    Testing computer devices is very similar. Even though there are thousands of different devices on the market, many of them share major components, are die-shrinks of a previous revision, or differ only in terms of memory, clock-rate, pixel count, connector, or even the type of heat sink. Take for example display devices. There are over 16,000 display devices on the market. But the equivalence view reveals that 90% of the market is represented by about 60 different GPUs. By adding a few more to a carefully constructed test matrix based on equivalence it is possible to represent over 99% of all GPUs. Driver writers also leverage equivalence by targeting drivers at a range of hardware. Driver install packages indicate devices they support via hardware IDs.

    All modern computer devices are assigned a unique hardware ID based on the device vendor, type, and class. Most IDs (PCI, PC Card, USB, and IEEE 1394 devices) are assigned by the industry standards body associated with that device type.

    Let’s look at the device ID of my display adapter:

    PCI\VEN_10DE&DEV_0611&SUBSYS_C8013842&REV_A2

    If I visit PCI-SIG (the standards body associated with all PCI device ID assignment) and do a search on 10DE, I’m told I this is an NVidia PCI ID. If I look further on my system in

    C:\Windows\System32\DriverStore\FileRepository

    I can find NVidia drivers (folders that start with nv_lh). If I open one of the driver .INF files on my machine I see this tell-tale line:

    NVIDIA_G92.DEV_0611.1 = "NVIDIA GeForce 8800 GT”

    Further inspection of the driver .INF file tells me that the same G92 GPU is used for all of these devices:

    • NVIDIA GeForce 8800 GTS 512
    • NVIDIA GeForce 8800 GT
    • NVIDIA GeForce 9800 GX2
    • NVIDIA GeForce 8800 GS
    • NVIDIA GeForce 9600 GSO
    • NVIDIA GeForce 8800 GT
    • NVIDIA GeForce 9800 GTX
    • NVIDIA Quadro FX 3700

    A bit of online research reveals other interesting information: “The 8800 GT, codenamed G92, was released on October 29, 2007. The card is the first to transition to 65 nm process, and supports PCI-Express 2.0.[13] It has a single-slot cooler as opposed to the double slot cooler on the 8800 GTS and GTX, and uses less power than GTS and GTX due to its 65 nm process.” -WikiPedia

    So in theory, if I was to run a test on my display adapter, there’s a good chance I’d get the same results as I would on any of these other related devices.

    Driver Goals for Windows 7

    One of our primary goals for Windows 7 is compatibility with all Vista certified drivers and to ensure that people have a seamless upgrade experience. This breaks down into several requirements that guide how we test:

    • Drivers for basic functionality are in-box (by in-box we mean available as part of the installation of Windows). This includes drivers for mainstream storage, network, input, and display devices so the OS can be installed and user can get online where, if needed, additional drivers can be acquire from Windows Update.
    • Drivers update and/or install with minimal end user effort.
    • When drivers are upgraded, there aren’t problems with the new drivers.
    • Drivers are reliable.

    One question we are asked about quite a bit is the availability of drivers. There are three primary reasons drivers end up looking for folks: clean installation of Windows, attaching device to a new computer, wanting the updated driver. We definitely recognize that for the readers of this blog, both as enthusiasts and often the support/IT infrastructure for corporations, friends, and families, that the ability to acquire drivers and reliably update machines is something of a “hobby” we all love to hate. We all want the latest and greatest—no more and no less.

    A clean installation is one we are all definitely valuing during the beta phase of Windows 7. It should be clear that a clean install, as important as it is to many of us, is not a routine/mainstream experience. Nevertheless, the combination of in-box drivers and those available via Windows Update will serve a very broad set of PCs (for example, you should see most of the drivers installed for the new Atom-based machines if you do a clean install). On the other hand, some drivers for PCs are only available from the PC maker and for a variety of reasons are not available for download from Windows Update or even the device manufacturer’s site. For example, mobile graphics drivers are generally available only from the PC maker and not from the graphics component maker—this is a decision they make because of the way these chipsets are delivered for each PC maker.

    Obviously attaching an existing device to a new PC is a common occurrence. In this case you may have long ago lost the CD/DVD that came with a device and you just plug it in (because you ignored the warning saying “please run the setup program first”). Again, our goal is to provide these via Windows Update. Often IHVs have updates or significantly large downloads that for a number of reasons are not appropriate to deliver via Windows Update. In that case we can also alert you, with a link many times, to seek the driver from the vendor of the device.

    Updating drivers is something we are all familiar with as we often read “get the latest driver” to address issues. We all see this particularly in the enthusiast gamer space where newer drivers also improve performance or offer more features, in addition to improving overall. The primary way to get updated drivers is generally through optional updates in Windows Update, though again many times the latest and greatest must be downloaded directly from an IHV (independent hardware vendor) site.

    Our goal is clearly to make sure that drivers for the broadest set of devices are available and high quality. There are many equal partners that contribute to delivering a PC and all the associated devices and we work hard to develop a systematic way to reach the broadest set of customers with high quality software and support.

    Scale of Device and Driver Testing in Windows 7

    The table below provides examples of some of the explicit devices we have directly tested thus far during the development of Windows 7. This is just a sampling of that direct testing - many more devices have been directly tested that are not shown here or are covered through equivalence classing.

    This information is available in many sources, such as the WHQL web site that lists all qualified devices. For the purposes of this blog we thought it would be fun to provide a list here which we think will most certainly serve as the basis for discussion.

    Manufacturer

    Description

    Family

    Altec Lansing

    T515

    Audio

    AMD (ATI)

    Radeon 9200

    Display

    AMD (ATI)

    FireGL 3100

    Display

    AMD (ATI)

    Radeon X300/X550/X1050 Series

    Display

    AMD (ATI)

    Radeon 9800 Pro

    Display

    AMD (ATI)

    FireGL V3100

    Display

    AMD (ATI)

    Radeon Xpress Series

    Display

    AMD (ATI)

    Radeon Xpress Series

    Display

    AMD (ATI)

    Radeon Xpress 1200

    Display

    AMD (ATI)

    Radeon X700 PRO

    Display

    AMD (ATI)

    Radeon X1200

    Display

    AMD (ATI)

    Radeon X800 CrossFire Edition

    Display

    AMD (ATI)

    Mobility Radeon X300

    Display

    AMD (ATI)

    Radeon X850 CrossFire Edition

    Display

    AMD (ATI)

    Radeon X1550

    Display

    AMD (ATI)

    Radeon X1950 Series

    Display

    AMD (ATI)

    Mobility Radeon X1300

    Display

    AMD (ATI)

    Mobility Radeon X1400

    Display

    AMD (ATI)

    Mobility Radeon HD3200

    Display

    AMD (ATI)

    Radeon HD 2600 XT

    Display

    AMD (ATI)

    Radeon HD 3850

    Display

    AMD (ATI)

    Radeon HD 3870

    Display

    AMD (ATI)

    Radeon HD 3200

    Display

    AMD (ATI)

    Radeon HD 2400

    Display

    AMD (ATI)

    FireGL 6000

    Display

    AMD (ATI)

    FireGL 8200

    Display

    AMD (ATI)

    Radeon HD 2900 XT

    Display

    AMD (ATI)

    Radeon HD 2600

    Display

    AMD (ATI)

    Radeon HD 4850

    Display

    AMD (ATI)

    Radeon HD4670

    Display

    AMD (ATI)

    ATI Technologies, Inc. RAGE XL PCI

    Display

    AMD (ATI)

    RADEON 7000 Series

    Display

    Analog Devices

    AD1884

    Audio

    Analog Devices

    AD1984

    Audio

    Analog Devices

    AD1981

    Audio

    Analog Devices

    ADI1986A

    Audio

    Analog Devices

    ADI1988B

    Audio

    Analog Devices Inc.

    ADI AC97

    Audio

    Apple

    iPhone headset

    Audio

    Apple

    iSight 640x480 Firewire

    VidCap

    Archos

    Archos605(WiFi)

    Portable Device

    ATI

    ATI HDMI

    Audio

    BlueAnt

    X5 Stereo BT Headset

    Audio

    Brother

    HL-5140

    Print / Scan

    Brother

    HL-2070

    Print / Scan

    Brother

    MFC-8440

    Print / Scan

    Brother

    MFC-5840c

    Print / Scan

    Brother

    HL-5150

    Print / Scan

    Brother

    MFC-8840

    Print / Scan

    Brother

    HL-6050D

    Print / Scan

    Brother

    IntelliFax-5750e

    Print / Scan

    Brother

    IntelliFax-5750

    Print / Scan

    Canon

    Canon A720IS

    Portable Device

    Canon

    Digital Rebel XT

    Portable Device

    Canon

    A420\410

    Portable Device

    Canon

    SD430

    Portable Device

    Canon

    Pixma MP140

    Print / Scan

    Canon

    Pixma iP1800

    Print / Scan

    Canon

    Pixma iP1700

    Print / Scan

    Canon

    Pixma iP2500

    Print / Scan

    Canon

    Pixma MP210

    Print / Scan

    Canon

    Pixma MP160

    Print / Scan

    Canon

    Pixma iP1500

    Print / Scan

    Canon

    Pixma iP1600

    Print / Scan

    Canon

    Pixma iP4200

    Print / Scan

    Canon

    Pixma iP3500

    Print / Scan

    Canon

    Pixma iP4500

    Print / Scan

    Canon

    Pixma MP180

    Print / Scan

    Canon

    Pixma iP2000

    Print / Scan

    Canon

    i475D

    Print / Scan

    Canon

    Pixma MP150

    Print / Scan

    Canon

    i250

    Print / Scan

    Canon

    Pixma MP520

    Print / Scan

    Canon

    S450

    Print / Scan

    Canon

    MultiPass MP390

    Print / Scan

    Canon

    Pixma MP500

    Print / Scan

    Canon

    Pixma MX300

    Print / Scan

    Canon

    Pixma iP1000

    Print / Scan

    Canon

    Pixma MP610

    Print / Scan

    Canon

    MultiPass MP190

    Print / Scan

    Canon

    Pixma iP6210D

    Print / Scan

    Canon

    Pixma iP5200

    Print / Scan

    Canon

    Pixma iP3300

    Print / Scan

    Canon

    Pixma iP3000

    Print / Scan

    Canon

    Pixma MP510

    Print / Scan

    Canon

    Pixma iP90

    Print / Scan

    Canon

    i350

    Print / Scan

    Canon

    Pixma iP6600D

    Print / Scan

    Canon

    Pixma MP830

    Print / Scan

    Canon

    BJC-6000

    Print / Scan

    Canon

    i550

    Print / Scan

    Canon

    Pixma MP170

    Print / Scan

    Canon

    Pixma MP460

    Print / Scan

    Canon

    Pixma MP600

    Print / Scan

    Canon

    Pixma iP4300

    Print / Scan

    Canon

    i860

    Print / Scan

    Canon

    Pixma MP110

    Print / Scan

    Canon

    i320

    Print / Scan

    Canon

    Pixma iP6220D

    Print / Scan

    Canon

    Pixma MP130

    Print / Scan

    Canon

    Pixma iP6310D

    Print / Scan

    Canon

    i960/i965

    Print / Scan

    Canon

    Pixma MP950

    Print / Scan

    Canon

    Selphy Series

    Print / Scan

    Canon

    i560

    Print / Scan

    Canon

    Pixma iP8500

    Print / Scan

    Canon

    MultiPass MP370

    Print / Scan

    Canon

    Pixma iP4000

    Print / Scan

    Canon

    i9900

    Print / Scan

    Canon

    Pixma iX4000

    Print / Scan

    Canon

    i865

    Print / Scan

    Canon

    Pixma mini260

    Print / Scan

    Canon

    Pixma iX5000

    Print / Scan

    Canon

    i850

    Print / Scan

    Canon

    S530D

    Print / Scan

    Canon

    Pixma MP800R

    Print / Scan

    Canon

    Pixma iP5200R

    Print / Scan

    Canon

    i470D Photo Printer

    Print / Scan

    Canon

    S600

    Print / Scan

    Canon

    BJC-85

    Print / Scan

    Canon

    Pixma iP6000

    Print / Scan

    Canon

    S9000

    Print / Scan

    Canon

    Pixma MP750

    Print / Scan

    Canon

    Pixma MP780

    Print / Scan

    Canon

    S630

    Print / Scan

    Canon

    MultiPass MP1000

    Print / Scan

    Canon

    S520

    Print / Scan

    Canon

    Pixma MP810

    Print / Scan

    Canon

    Pixma iP5000

    Print / Scan

    Canon

    Pixma iP6700D

    Print / Scan

    Canon

    Pixma iP80

    Print / Scan

    Canon

    SD600

    Portable Device

    Canon Inc.

    PowerShot A720 IS

    Portable Device

    CASIO COMPUTER CO.,LTD.

    EX-Z1200

    Portable Device

    Chrontel

    Chrontel HDMI

    Audio

    Conexant

    Venice

    Audio

    Creative

    MP3+ (SB0270)

    Audio

    Creative

    Xmod

    Audio

    Creative

    Live! Cam Optia AF

    VidCap

    Creative

    WebCam Live! USB

    VidCap

    Creative

    Webcam NoteBook 640x480 USB

    VidCap

    Creative

    WebCam Instant 352x288 USB

    VidCap

    Creative

    WebCam NX Pro 640x480 USB

    VidCap

    Creative

    WEBCAM NX

    VidCap

    Creative

    Live! Cam Notebook Pro 640K USB 2.0

    VidCap

    Creative

    Live! Cam Video IM Pro VGA USB 2.0

    VidCap

    Creative

    Webcam Live Ultra 640x480 USB 2.0 Manual Focus Ring

    VidCap

    Creative Labs, Inc.

    Live! Series

    Audio

    Creative Labs, Inc.

    Audigy Series

    Audio

    Creative Labs, Inc.

    X-Fi Series

    Audio

    Creative Technology Ltd

    Nano Plus

    Portable Device

    Creative Technology Ltd

    NOMAD MuVo TX

    Portable Device

    Creative Technology Ltd

    Zen Vision M

    Portable Device

    Creative Technology Ltd

    Vision W

    Portable Device

    Creative Technology Ltd

    Sleek

    Portable Device

    Creative Technology Ltd

    PMC v2

    Portable Device

    Dell

    Axim X51v

    Portable Device

    Dell

    AiO 810

    Print / Scan

    Dell

    A924

    Print / Scan

    Dell

    J740

    Print / Scan

    Dell

    1600n

    Print / Scan

    Dell

    A922

    Print / Scan

    Dell

    A940

    Print / Scan

    Dell

    LP 1720dn

    Print / Scan

    Dell

    3100cn

    Print / Scan

    Dell

    W5300N

    Print / Scan

    Denon

    S-52

    Media Sharing

    Dixim

    media server

    Media Sharing

    Dlink

    DSM-210

    Media Sharing

    Dlink

    DSM - 520

    Media Sharing

    Dlink

    DSM - 510

    Media Sharing

    Drobo

    Drobo NAS

    Media Sharing

    Epson

    Stylus Color C88+

    Print / Scan

    Epson

    Stylus Color C84/C85

    Print / Scan

    Epson

    Stylus Color C86/C87

    Print / Scan

    Epson

    Stylus Color C64

    Print / Scan

    Epson

    Stylus Photo R265

    Print / Scan

    Epson

    LQ-570/670

    Print / Scan

    Epson

    FX-880

    Print / Scan

    Epson

    Stylus Photo R220

    Print / Scan

    Epson

    LQ-300

    Print / Scan

    Epson

    Stylus Photo R320

    Print / Scan

    Epson

    Stylus CX6600/6500/6900

    Print / Scan

    Epson

    Stylus CX5400

    Print / Scan

    Epson

    Stylus Photo 1270

    Print / Scan

    Epson

    LQ-1070+

    Print / Scan

    Epson

    Stylus Photo R200

    Print / Scan

    Epson

    Stylus Photo 1280/1290

    Print / Scan

    Epson

    Stylus Color 900/N

    Print / Scan

    Epson

    Stylus Color C62

    Print / Scan

    Epson

    ActionPrinter 5000+

    Print / Scan

    Epson

    Stylus Photo 820

    Print / Scan

    Epson

    Stylus Color 660

    Print / Scan

    Epson

    Stylus Color 640

    Print / Scan

    Epson

    AcuLaser 2600N

    Print / Scan

    Epson

    FX-2170

    Print / Scan

    Epson

    FX-2190

    Print / Scan

    FujiFilm

    F30

    Portable Device

    General Electric

    EasyCam USB PC Camera 640x480

    VidCap

    GN\Jabra

    GN9330

    Audio

    GN\Jabra

    GN9350

    Audio

    GN\Jabra

    GN2000USB

    Audio

    HP

    HD TV

    Media Sharing

    HP

    Photosmart R717

    Portable Device

    HP

    Deskjet D1400 series

    Print / Scan

    HP

    Deskjet F380

    Print / Scan

    HP

    Deskjet F4100

    Print / Scan

    HP

    LaserJet 1018

    Print / Scan

    HP

    LaserJet 1020

    Print / Scan

    HP

    Photosmart C3180

    Print / Scan

    HP

    Deskjet D2400 Series

    Print / Scan

    HP

    LaserJet P2015

    Print / Scan

    HP

    Officejet K550

    Print / Scan

    HP

    PSC 1410

    Print / Scan

    HP

    Deskjet F2100 series

    Print / Scan

    HP

    PSC 1315

    Print / Scan

    HP

    Deskjet 5440

    Print / Scan

    HP

    Color LaserJet 2600

    Print / Scan

    HP

    Officejet 5700

    Print / Scan

    HP

    PSC 1510

    Print / Scan

    HP

    Photosmart C4200

    Print / Scan

    HP

    Deskjet 5150

    Print / Scan

    HP

    Deskjet 930C/935C

    Print / Scan

    HP

    Deskjet 5940

    Print / Scan

    HP

    Photosmart C4180

    Print / Scan

    HP

    Deskjet D2330

    Print / Scan

    HP

    LaserJet 1022

    Print / Scan

    HP

    Deskjet 3745

    Print / Scan

    HP

    Deskjet 5550

    Print / Scan

    HP

    Photosmart C5200

    Print / Scan

    HP

    Officejet 5610

    Print / Scan

    HP

    Deskjet D2360

    Print / Scan

    HP

    Deskjet 3900 Series

    Print / Scan

    HP

    Photosmart C5180

    Print / Scan

    HP

    Deskjet 5740

    Print / Scan

    HP

    Deskjet D4200 Series

    Print / Scan

    HP

    Deskjet 6122

    Print / Scan

    HP

    Deskjet 950C

    Print / Scan

    HP

    Deskjet 940C

    Print / Scan

    HP

    PSC 1610

    Print / Scan

    HP

    Photosmart D5160

    Print / Scan

    HP

    Officejet 6200 Series

    Print / Scan

    HP

    Deskjet 3845

    Print / Scan

    HP

    Deskjet 3650

    Print / Scan

    HP

    PSC 2355

    Print / Scan

    HP

    Officejet 6300 Series

    Print / Scan

    HP

    LaserJet P2014

    Print / Scan

    HP

    LaserJet 1300

    Print / Scan

    HP

    Officejet Pro L7500

    Print / Scan

    HP

    Officejet Pro L7600

    Print / Scan

    HP

    PSC 1350

    Print / Scan

    HP

    Deskjet 9800

    Print / Scan

    HP

    Photosmart 2575

    Print / Scan

    HP

    Deskjet 450ci

    Print / Scan

    HP

    Officejet 4215

    Print / Scan

    HP

    LaserJet 1160

    Print / Scan

    HP

    Deskjet 5650

    Print / Scan

    HP

    Officejet 7400 Series

    Print / Scan

    HP

    Deskjet 3740

    Print / Scan

    HP

    Officejet 5510 Series

    Print / Scan

    HP

    Photosmart 3210

    Print / Scan

    HP

    Officejet 7300 Series

    Print / Scan

    HP

    Photosmart 7850

    Print / Scan

    HP

    Deskjet 832C

    Print / Scan

    HP

    Deskjet 1220C

    Print / Scan

    HP

    LaserJet 3030 MFP

    Print / Scan

    HP

    Photosmart A616

    Print / Scan

    HP

    LaserJet 3055

    Print / Scan

    HP

    Deskjet 720C

    Print / Scan

    HP

    Photosmart 7260

    Print / Scan

    HP

    Deskjet 3320

    Print / Scan

    HP

    Deskjet 970C

    Print / Scan

    HP

    Photosmart A440

    Print / Scan

    HP

    Deskjet 695C/697C

    Print / Scan

    HP

    Photosmart A516

    Print / Scan

    HP

    Deskjet 6540

    Print / Scan

    HP

    Deskjet 6940

    Print / Scan

    HP

    PSC 2510

    Print / Scan

    HP

    Officejet 6100 Series

    Print / Scan

    HP

    Deskjet 6840

    Print / Scan

    HP

    Photosmart A430

    Print / Scan

    HP

    Photosmart 7450

    Print / Scan

    HP

    Deskjet 812C/815C

    Print / Scan

    HP

    Photosmart 375

    Print / Scan

    HP

    Officejet V40 Series

    Print / Scan

    HP

    Deskjet 840/843/845

    Print / Scan

    HP

    Photosmart D7400 Series

    Print / Scan

    HP

    PSC 950 Series

    Print / Scan

    HP

    Officejet G Series

    Print / Scan

    HP

    LaserJet 1015

    Print / Scan

    HP

    Photosmart 7960

    Print / Scan

    HP

    Deskjet 895C

    Print / Scan

    HP

    Photosmart 8450

    Print / Scan

    HP

    Photosmart Pro B8350

    Print / Scan

    HP

    Deskjet 1180c

    Print / Scan

    HP

    LaserJet 4345 MFP

    Print / Scan

    HP

    LaserJet 4250

    Print / Scan

    HP

    LaserJet P3005

    Print / Scan

    HP

    LaserJet 5200

    Print / Scan

    HP

    LaserJet 4350n

    Print / Scan

    HP

    Color LaserJet 4700

    Print / Scan

    HP

    LaserJet 2300

    Print / Scan

    HP

    LaserJet 4000

    Print / Scan

    HP

    Color LaserJet 5550

    Print / Scan

    HP

    Color LaserJet 3800

    Print / Scan

    HP

    LaserJet 4050

    Print / Scan

    HP

    Color LaserJet 3600

    Print / Scan

    HP

    LaserJet 9050

    Print / Scan

    HP

    LaserJet 2100

    Print / Scan

    HP

    LaserJet 4240

    Print / Scan

    HP

    LaserJet 2200

    Print / Scan

    HP

    Color LaserJet 3000

    Print / Scan

    HP

    LaserJet 4100

    Print / Scan

    HP

    LaserJet 5000

    Print / Scan

    HP

    Business Inkjet 1200D

    Print / Scan

    HP

    Color LaserJet 4550

    Print / Scan

    HP

    Color LaserJet 4600

    Print / Scan

    HP

    Color LaserJet CP4005

    Print / Scan

    HP

    Color LaserJet 3700

    Print / Scan

    HP

    Color LaserJet 3500

    Print / Scan

    HP

    LaserJet 9000 MFP

    Print / Scan

    HP

    LaserJet 4 Plus

    Print / Scan

    HP

    LaserJet III

    Print / Scan

    HP

    LaserJet 6MP

    Print / Scan

    HP

    Color LaserJet 1500L

    Print / Scan

    HP

    PSC 1315

    Print / Scan

    HP

    Officejet 5610

    Print / Scan

    HP

    PSC 1350

    Print / Scan

    HP

    LaserJet 4345 MFP

    Print / Scan

    HTC

    TyTN II

    Portable Device

    IDT

    STAC9220(9223)7680

    Audio

    IDT

    STAC9220(9223)7681

    Audio

    IDT

    STAC9227X(D)7618

    Audio

    IDT

    STAC9227X(D)7619

    Audio

    IDT

    STAC9225(Sony)7662

    Audio

    IDT

    STAC9225(Sony)7664

    Audio

    IDT

    STAC9225(Sony)7661

    Audio

    IDT

    STAC9200

    Audio

    IDT

    STAC9228

    Audio

    IDT

    STAC9205

    Audio

    IDT

    STAC9250

    Audio

    Insignia

    NS-BTHDP

    Audio

    Insignia

    NS-DV4G

    Portable Device

    Insignia

    NS-DA2G

    Portable Device

    Intel

    Intel HDMI

    Audio

    Intel

    i965GX/G35

    Display

    Intel

    G3x

    Display

    Intel

    i4G

    Display

    Intel

    i45GM

    Display

    Intel

    i915GM

    Display

    Intel

    i915G

    Display

    Intel

    i945G

    Display

    Intel

    i945GM

    Display

    Intel

    Q3x

    Display

    Intel

    i965G

    Display

    Intel

    i965GM

    Display

    Iriver

    ClixGen2

    Portable Device

    Iriver

    IriverClix2_FWv1.14

    Portable Device

    Iriver

    U10 Series

    Portable Device

    Iriver

    Clix 

    Portable Device

    Jabra

    BT620S

    Audio

    Jabra

    BT8010

    Audio

    Jabra

    BT3030

    Audio

    Jasco

    Minicam Pro

    VidCap

    Kodak

    Easyshare LS420

    Portable Device

    Konica Minolta

    magicolor 5450

    Print / Scan

    Kyocera Mita

    FS-6900

    Print / Scan

    LABTEC

    LABTEC WEBCAM PRO 961358

    VidCap

    LABTEC

    Web Cam Plus 352x288 USB 2.0 Manual Focus Motion Detection

    VidCap

    Lexmark

    Z845

    Print / Scan

    Lexmark

    Z1300

    Print / Scan

    Lexmark

    X2550

    Print / Scan

    Lexmark

    X1270

    Print / Scan

    Lexmark

    X2470

    Print / Scan

    Lexmark

    Z735

    Print / Scan

    Lexmark

    E120n

    Print / Scan

    Lexmark

    X3550

    Print / Scan

    Lexmark

    Z715

    Print / Scan

    Lexmark

    Z42 Color JetPrinter

    Print / Scan

    Lexmark

    X5470

    Print / Scan

    Lexmark

    Z816

    Print / Scan

    Lexmark

    Z615

    Print / Scan

    Lexmark

    X2250

    Print / Scan

    Lexmark

    P915

    Print / Scan

    Lexmark

    X7170

    Print / Scan

    Lexmark

    X4550

    Print / Scan

    Lexmark

    X6170

    Print / Scan

    Lexmark

    X6150

    Print / Scan

    Lexmark

    E232

    Print / Scan

    Lexmark

    2490

    Print / Scan

    Lexmark

    P3150

    Print / Scan

    Lexmark

    X5150

    Print / Scan

    Lexmark

    E323

    Print / Scan

    Lexmark

    P315

    Print / Scan

    Lexmark

    Z25 Color JetPrinter

    Print / Scan

    Lexmark

    2491

    Print / Scan

    Lexmark

    X215

    Print / Scan

    Lexmark

    X4250

    Print / Scan

    Lexmark

    E321

    Print / Scan

    Lexmark

    Z45 Color JetPrinter

    Print / Scan

    Lexmark

    X83

    Print / Scan

    Lexmark

    C524

    Print / Scan

    Lexmark

    E450D

    Print / Scan

    Lexmark

    T640

    Print / Scan

    Lexmark

    X634

    Print / Scan

    Lexmark

    W840

    Print / Scan

    Lexmark

    X632

    Print / Scan

    Lexmark

    X620

    Print / Scan

    Lexmark

    X630

    Print / Scan

    Lexmark

    T642

    Print / Scan

    Lexmark

    W812

    Print / Scan

    Lexmark

    X1270

    Print / Scan

    LG

    HBS-200

    Audio

    Logitech

    QuickCam Pro 9000

    Audio

    Logitech

    QuickCam Pro 9000

    VidCap

    Logitech

    Quickcam Communicate STX VGA Fixed Focus USB 2.0

    VidCap

    Logitech

    QuickCam Chat VGA w/Image Capture USB 2.0

    VidCap

    Logitech

    961400-0403 QuickCam Notebook Deluxe 1.3MP MF USB 2.0

    VidCap

    Logitech

    QuickCam Pro 4000 640x480 USB 2.0

    VidCap

    Logitech

    QuickCam Pro 5000 640x480 USB 2.0

    VidCap

    Logitech

    Quickcam Vision Pro1

    VidCap

    Logitech

    Quickcam Vision Pro2

    VidCap

    Logitech

    961403 QuickCam Fusion 1.3MP USB 2.0

    VidCap

    Logitech

    QuickCam Messenger 640x480 USB

    VidCap

    Logitech

    QuickCam Messenger Refresh 640x480 USB

    VidCap

    Logitech

    QuickCam Notebooks Pro 1.3MP USB 2.0

    VidCap

    Logitech

    QuickCam Zoom 640x480 USB

    VidCap

    Logitech

    QuickCam Communicate 640x480 USB 2.0

    VidCap

    Logitech

    QuickCam Orbit MP 1.3MP USB 2.0

    VidCap

    Logitech

    QUICKCAMFORNB

    VidCap

    Logitech

    QuickCam Orbit 640x480 USB 2.0

    VidCap

    Logitech

    QuickCam for Notebooks Pro

    VidCap

    Lubix

    UBHS-LC1

    Audio

    Matrox

    M9120

    Display

    Microsoft

    NX-3000

    Audio

    Microsoft

    VX-7000

    Audio

    Microsoft

    NX-6000

    Audio

    Microsoft

    VX-6000

    Audio

    Microsoft

    VX-3000

    Audio

    Microsoft

    VX-1000

    Audio

    Microsoft

    LX-3000

    Audio

    Microsoft

    ZX-6000

    Audio

    Microsoft

    Mic Array

    Audio

    Microsoft

    XBox 360

    Media Sharing

    Microsoft

    LifeCam VX-1000 VGA USB 2.0

    VidCap

    Microsoft

    Lifecam NX-6000

    VidCap

    Microsoft

    LifeCam VX-6000 1.3MP USB 2.0

    VidCap

    Microsoft

    LifeCam VX-3000 1.3MP USB 2.0

    VidCap

    Microsoft

    Xbox Live Vision (Xbox 360)

    VidCap

    Microsoft

    Lifecam VX-7000

    VidCap

    Microsoft

    Lifecam NX-3000

    VidCap

    Momento

    Wireless Picture Frame

    Media Sharing

    Motorola

    S9

    Audio

    Motorola

    HT820

    Audio

    Motorola

    H670

    Audio

    Motorola

    HS850

    Audio

    Motorola

    H500

    Audio

    Motorola

    DJ S805

    Audio

    NEC

    UTR-UC-1

    Audio

    Nero8 Home Media

    media server

    Media Sharing

    Nikon

    CoolPix S1

    Portable Device

    Nokia

    BH800

    Audio

    Nokia

    N95

    Media Sharing

    Nokia

    N95

    Portable Device

    Nokia

    5300

    Portable Device

    nVidia

    nVidia HDMI

    Audio

    Nvidia

    GeForce 7600GT

    Display

    Nvidia

    GeForce 7800GT

    Display

    Nvidia

    Geforce 8200

    Display

    Nvidia

    GeForce 7400 Go

    Display

    Nvidia

    Geforce 7950 GX2

    Display

    Nvidia

    Geforce 8800GTS

    Display

    Nvidia

    Geforce 8800GTX

    Display

    Nvidia

    Geforce 8400 GS

    Display

    Nvidia

    GeForce 8400M GS

    Display

    Nvidia

    Geforce 8600 GT

    Display

    Nvidia

    Quador NVS 130m

    Display

    Nvidia

    Quadro 570

    Display

    Nvidia

    Quadro 570m

    Display

    Nvidia

    GeForce 9600 GT

    Display

    Nvidia

    GeForce 8800 GT

    Display

    Nvidia

    Geforce 8400GS (G98)

    Display

    Nvidia

    Geforce 9800 X2

    Display

    Nvidia

    Geforce GTX 260

    Display

    Nvidia

    GeForce4 MX 420

    Display

    Nvidia

    GeForce FX 5200

    Display

    Nvidia

    Geforce FX 5900

    Display

    Nvidia

    GeForce 6150

    Display

    Nvidia

    GeForce 6100

    Display

    Nvidia

    GeForce 6200

    Display

    Nvidia

    GeForce 7050

    Display

    Nvidia

    GeForce 6800

    Display

    Nvidia

    GeForce Go 6150

    Display

    Oki

    Microline 320/Turbo

    Print / Scan

    Oki

    Microline 184 Turbo

    Print / Scan

    Oki

    Microline 391/Turbo

    Print / Scan

    Oki

    Microline 321/Turbo

    Print / Scan

    Oki

    Microline 590

    Print / Scan

    Panasonic

    KX-P2130

    Print / Scan

    Panasonic

    KX-P2023

    Print / Scan

    Parrot

    Boombox

    Audio

    Philips

    Stereo Mic

    Audio

    Philips

    GoGear 30GB

    Portable Device

    Plantronics

    Pulsar 590A/E

    Audio

    Plantronics

    Pulsar 260

    Audio

    Plantronics

    Discovery 655 or 665

    Audio

    Plantronics

    SupraPluc DA45

    Audio

    Polycom

    CX400

    Audio

    Realtek

    Realtek 262 HD Audio codec

    Audio

    Realtek

    Realtek 268 HD Audio codec

    Audio

    Realtek

    Realtek 660 HD Audio codec

    Audio

    Realtek

    Realtek 862 HD Audio codec

    Audio

    Realtek

    Realtek 883 HD Audio codec

    Audio

    Realtek

    Realtek 888 HD Audio codec

    Audio

    Realtek

    Realtek 885 HD Audio codec

    Audio

    Realtek

    Realtek 882 HD Audio codec

    Audio

    Realtek

    Realtek 861 HD Audio codec

    Audio

    Realtek

    Realtek 662 HD Audio codec

    Audio

    Realtek Semiconductor Corp

    Realtek AC97

    Audio

    Rhapsody

    music Jukebox

    Media Sharing

    RIO

    Rio Carbon

    Portable Device

    Roku

    Radio Soundbridge

    Media Sharing

    Roku

    SoundbridgeM1000

    Media Sharing

    S3

    GammaChrome G700

    Display

    S3

    GammaChrome G700

    Display

    S3

    S3 Graphics Chrome 440/430 Series

    Display

    S3

    S3 Graphics Chrome 440/430 Series

    Display

    Samsung

    WEP-210

    Audio

    Samsung

    YP-Z5

    Portable Device

    Samsung

    ML-1610

    Print / Scan

    Samsung

    SF-5100

    Print / Scan

    Samsung

    ML-1710

    Print / Scan

    SanDisk Corporation

    Sansa E260

    Portable Device

    SanDisk Corporation

    Sansa View Mp3 Player

    Portable Device

    SanDisk Corporation

    Sansa m250

    Portable Device

    SI

    1392 HDMI

    Audio

    SigmaTel, Inc.

    Sigmatel AC97

    Audio

    SiS

    Xabre

    Display

    SiS

    Mirage3

    Display

    Sonos

    Zone player ZP80

    Media Sharing

    Sony

    DR-BT22

    Audio

    Sony

    PS3

    Media Sharing

    Sony

    DSC-T200

    Portable Device

    Sony Corporation

    WALKMAN NWZ-A816

    Portable Device

    Sony Ericsson

    W910i

    Portable Device

    Toshiba

    Gigabeat

    Portable Device

    Toshiba

    Gigabeat V2 PMC

    Portable Device

    Turtle Beach

    Audio Advantage Micro

    Audio

    Tversity Inc

    media server

    Media Sharing

    Twonky Media

    media server

    Media Sharing

    Via

    DeltaChrome G700

    Display

    Western Digital

    External harddrive

    Media Sharing

    Xerox

    Phaser 6120

    Print / Scan

    Xerox

    Phaser 4510

    Print / Scan

  • Engineering Windows 7

    Action Center

    • 112 Comments

    We’re back! We’ve had a pretty incredible couple of weeks at the PDC and WinHEC. Based on what we talked about you can imagine we are all rather busy as we transition from milestone 3 to beta. We trust many of you are enjoying 6801 (or perhaps we should say 6801+). Over the next few weeks we’re going to start posting on the engineering and design of the specifics of different aspects of Windows 7 that we’ve talked about. Some posts will be very detailed and others will be a bit more high level and cover more territory. In all cases, we’ll be watching the comments carefully and also looking for opportunities on follow up posts. Thank you!

    One of the big themes of Windows 7 from a design perspective (as you might have seen in Sam’s PDC session and certainly a topic we have talked about here) is making sure that you are “in control” of what is happening on your PC. This post, by senior program manager Sean Gilmour, is about “notifications” or the balloon popups that come from the system tray. In Vista we offered some controls over this area and in Windows 7 we have worked hard to make this an area that defaults to more well-behaved functionality and is also much more tunable to your needs. By improving how Windows itself uses the APIs and “guidelines” we want to encourage other ISVs to do the same. This topic is a great example of how the whole ecosystem comes into the picture as well and so we hope developers reading this will see the passion around the topic and the desire for software on Windows to take the steps necessary to honor the your intent. --Steven

    The notification area has been talked about a couple times in previous posts (User Interface: Starting, Launching, and Switching and Follow-up: Starting, Launching, and Switching). This post is going to go into a bit more detail regarding notification balloons as well as one of the ways we’re working to quiet the system in Window 7.

    Where We're At Today

    Windows can be a busy place – with many things vying for your attention, even while you’re trying to do work. One we hear a lot about from you is the system notification balloons – those little pop-ups that appear above icons in the notification area (typically right side of the taskbar near the clock). In this post I’ll be talking to notifications sent utilizing Shell_NotifyIcon function provided in Windows, not custom notifications, often called “toast”, like the notifications presented by many applications (some like Outlook even from Microsoft). We see these in instant messenger programs, printer notifications, auto updaters, wifi and Bluetooth utilities, and more – these often use custom methods to present these “balloons” from the system tray, not necessary the Windows API. People have made their feelings loud and clear – Windows is too noisy and the noise distracts from the work at hand. Here are some quotes from the Windows Feedback Panel that illustrate that point.

    “Too many notification messages, esp. re: security (eg. Firewall), activation”

    “Notifications telling me my system is secure, when I know it is secure, are annoying”

    “I'm tired of error messages and pop ups.”

    And some posts from the blog discussions

    @Jalf writes “Having 20 icons and a balloon notification every 30th second taking up space at the taskbar where it's *always* taking up space is just not cool.

    @Lyesmith writes “The single biggest annoyance in the taskbar is notification balloons.”

    So how noisy is the system? First a quick definition - a ‘session’ is the period of time between log-on and log-off or 24 hours whichever is shorter. As you can see from the following chart, 60% of sessions experience at least one notification. That doesn’t sound all that bad, but if you dig a bit deeper you realize that 37% of sessions see two or more notifications and 25% of sessions see three or more notifications. That’s a lot of distractions interrupting your work.

    Number of notification sent per session as a percentage of total sessions - August through September, 2008 

    Figure 1: Number of notification sent per session as a percentage of total sessions - August through September, 2008

    So we know how much noise notifications create but how effective are notifications? Well, as the following chart, notification click-through rate shows the more notifications the less effective they become.

    Notification click-through rate - August through September, 2008

    Figure 2: Notification click-through rate - August through September, 2008

    So, as shown in the above chart, used sparingly and in the right context, notification balloons can be rather useful. Unfortunately, that isn’t what is happening today. Instead the notification area often feels like a constant scrolling billboard of messages some important, many not. So what’s the answer? It’s a big area to tackle – there are system notifications, third party notification, and custom notifications. For Windows 7 we chose to focus on making sure Windows and its in-box components notify you responsibly and don’t contribute to the noise in the system. Ideally the ISV community will follow suit and as you’ve seen in some sessions, we’re doing this work in Windows Live for example. One of the reasons we focused internally was data showing that Windows components are responsible for at least 28% of the notifications presented. Additionally, we were able to identify seven Windows components that are mostly responsible for that noise. In all, 20 applications account for 62% of the notifications presented. The following chart shows the break-out.

    Which software accounts for notifications - August through September, 2008

    Figure 3: Which software accounts for notifications - August through September, 2008

     

    Windows 7

    Our effort to quiet the system and make sure you are in control took the following approach:

    • Working across Windows 7 to reduce unnecessary notifications
    • Put you in control of the notifications you see
    • Creating Action Center with the following goals
      • Reduce the number of notification balloons sent to you and make the ones that are sent more meaningful
      • Provide a contextual way to address the issues with a single click
      • Reduce the user-interface clutter in the system to streamline solving system issues

    While there are many other efforts going around notifications and the notification area I’m going to focus on Action Center. In a nutshell, Action Center is a central location for dealing with messages about your system and the starting point for diagnosing and solving issues with your system. You can think of Action Center as a message queue displaying the items that need your attention that you can manage on your schedule. It serves as an aggregate for ten components in Windows Vista that contributed a large number of somewhat questionably effective notification balloons, but notifications that could not just be eliminated. At the heart of the Action Center effort is the idea that your time is extremely valuable it should never be wasted. To that end we took three steps.

    First we looked hard at the messages we were sending and worked to reduce balloons and clarify messages. We took the following steps:

    • Putting messages into one of two categories – normal or important. Normal messages simply appear in the Action Center control panel. Important messages send a notification balloon as well as appearing in the Action Center.
    • Setting a high bar for important messages. A message is only deemed important if the security of the system or the integrity of your data is at risk.
    • Reducing the frequency of notifications so that you’re not seeing them pop-up “all the time”
    • Looking at all the messages and asking the hard questions –“is this something you really need to know about?”

    The last filter led to our second step. We decided that all messages need to have an action associated with them - a solution, if you will, to whatever problem we were presenting to you. This meant cutting any FYI, Action Success, and Confirmation messages. It also meant that the way we presented these messages would be action based. For example, we replaced, “Antivirus is out of date”, with “Update Antivirus Signatures.” We believe that we should let people know specifically how to resolve an issue instead of making them guess or read lots of text. This is the heart of the other goal of Action Center – to help people solve system issues quickly and conveniently.

    Finally, we designed the user experience (UX) of the Action Center in two parts. The first and most immediately visible is system icon in the notification area, which is a "lighthouse" in 6801. In the spirit of our efforts, this icon replaces five notification area icons from Vista, further reducing the clutter and noise in the system. The lighthouse icon provides a high level view of the number of messages in Action Center and their importance. It also has a fly-out menu on single left click which lists the four most recent notifications and supports you acting on messages contextually. We give the people the ability to click on a notification in that fly-out menu and immediately go to the UI to solve the issue. Again, the focus is solving issues instead of simply notifying.

    Action Center notification area icon and fly-out menu

    Figure 4: Action Center notification area icon and fly-out menu

    The second part of the UX is the control panel, which builds upon the icon and fly-out by serving as a repository for all messages as well as providing more details about the issue and the solution. It is also action based so the layout emphasizes messages and the corresponding solutions with even more detail. Additional actions are available if you expand the UI to view them. Finally, we know that we won’t always have messages about the issues a person might be having on their machine. To make sure you can solve those issues, we provide top level links to Troubleshooter and Recovery options.

    Action Center Control Panel with a few messages queued up

    Figure 5: Action Center Control Panel with a few messages queued up

    Action Center boils down to understanding that your time is valuable and that it is your PC you want to control, not be controlled by your PC. We reduced messages, focused on solving issues not just telling you about them, and streamlined the experience so you can focus on what you what to do not want Windows needs you to do. We are aiming to get most sessions down to zero notifications from Windows itself. This reduction in notifications could significantly increase the possibility that the notification balloon will be effective in delivering its message and prompting user action as shown in the Figure 2 (notification click through).

    We will of course be evangelizing to ISV the goal of following this direction and reducing notification balloons – and we believe we’ve taken the first steps to making Windows a quieter place. Hopefully you will find it less distracting and easier to work with.

    Sean Gilmour, senior program manager

  • Engineering Windows 7

    Measuring the scale of a release

    • 108 Comments

    Thanks for all the feedback that we have been getting. That much of it is positive is certainly appreciated. I’ve been answering mails as best I can and along with members of the team we’ve been having the discussion in the comments. Everyone has done a great job sharing their views on specifics, wishes, and requests. I love getting these mails and reading the comments. It is fantastic. I just want to make sure folks know I can’t answer each one! What we are going to do is look to the emails and comments as a way of suggesting posts we should write.  The team overall appreciate the warm reception from all those that have joined us--we know we have lots of energetic discussions ahead of us and we're genuinely happy to start.

    With this post, I am hoping to continue the dialog on the way we think “inside the Win7 team” so to speak—in a sense this is about expanding the team a bit and bringing you into some more of the discussions we have about planning a release. This conversation about major or minor releases is very much like the one I have with my boss as we start planning :-)

    When we started planning the release, the first thing some might think we have to decide is if Windows 7 (client) would be a “major release” or not. I put that in quotes because it turns out this isn’t really something you decide nor is it something with a single answer. The magnitude of a release is as much about your perspective on the features as it is about the features themselves. One could even ask if being declared a major release is a compliment or not. As engineers planning a product we decide up front the percentage of our development team will that work on the release and the extent of our schedule—with the result in hand customers each decide for themselves if the release is “major”, though of course we like to have an opinion. On the server blog we talked about the schedule and we shared our opinion of the scale of the releases of Windows 7 client and server.

    Our goal is about building an awesome release of Windows 7.

    Across all customers, there is always a view that a major release is one that has features that are really the ones for me. A minor release is one that doesn’t have anything for me. It should then be pretty easy to plan a major release—just make sure it exactly the right features for everyone (and given the focus on performance, it can’t have any extra features, even if other people want them)! As engineers we all know such a design process is really impossible, especially because more often than not any two customers can be found to want exactly opposite features. In fact as I type this I received sequential emails one saying “[N]obody cares about touch screen nonsense” and the other saying “[Win7 needs] more advanced/robust ‘touch’ features”. When you just get unstructured and unsolicited input you see these opposites quite a bit. I’m sure folks are noticing this on the blog comments as well.

    Let’s explore the spectrum of release magnitude across a couple of (but not all) different types of customers: end-users, developers, partners, IT professionals, and influentials.

    End-users are generally the most straight-forward in terms of deciding how big a release is going to be. For an end-user a release is a big deal if they want to go out and buy an upgrade or buy a new PC. We could call that a major release. Seems simple enough and a major release is good for everyone. On the other hand, one could also imagine that a release is really cool and people want to buy it, but they also want to use their existing PC and the release requires more memory, updated drivers that might not be available, or maybe some specific hardware to be fully realized. Then it seems that a major release goes from a positive to a bit of an under-taking and thus loses some of its luster. Of course we all know that what folks really want is all the things they want that runs on the hardware they want—then that is a great product to get (whether it is major or not).

    Developers look at a release through a different lens. Obviously for developers a release is a major one if there are new APIs and capabilities to take advantage of in their software—again straight-forward enough. It could also be the case that a previous release had a lot of new APIs and folks are just getting familiar with using them and so what they really want is to round out the APIs and maybe improve performance. So one might suspect that the first release is a major release and the second type is a minor release. But if you look at the history of software products, it is often these “minor” releases that themselves become the major releases – Windows 3.1, Office 4.2, or even Windows XP SP2. In each of these cases, the target for developers became the “minor” release but in the eyes of the market that was the “major” release. The reason developers want to use new APIs is to differentiate their products or focus their energies on domain expertise they bring to the table, not just call new APIs for the sake of calling them. In that sense, a release might be a major one if it just happens to free up enough time for an ISV that they bet on the new APIs because they can focus on some things that are a major deal to them.

    Partners represent the broad set of folks who create PCs, hardware, and the infrastructure we think of as the ecosystem that Windows is part of. Partners tend to think about a major release in terms of the opportunity it creates and thus a major release might be one with a lot of change and thus it affords the opportunity to provide new hardware and infrastructure to customers. On the other hand, incompatibilities with the past might be viewed in a less than positive light if it means a partner needs to stop moving forward and revisit past work to bring it up to the required compatibility with a new release of Windows. If they choose, for any number of reasons, not to do that work then the release might be viewed as a minor one because of the lack of ecosystem support. So again we see that a big change can be viewed through the lens of a major or a minor release.

    IT professionals are often characterized as conservative by nature and thus take a conservative view of change. Due to the business focused nature of the role, the evaluation of any software product is going to take place in the context of a return on investment. So for an IT professional a major release would be one that delivers significant business value. This business value could be defined as a major investment in deployment and management of the software for example. Yet for end-users or developers, these very same features might not even be interesting let alone worthy of being a major or minor release.

    Influentials are all the folks who are in the business of providing advice, analysis, and viewpoints on the software we make. These folks often look at releases through the metric of “change”. Big changes equal major release. A big change can be a “re-architecture” as we saw in the transition from Windows 9x to Windows 2000—even though these products looked the same there was tons of change to talk about under the hood. So for reviewers and analysts it was definitely a major release. Big changes can also be big changes in the user-interface because that drives lots of discussion and it is easy to show all the change. Yet for each of these, this definition of major can also be viewed as a less than positive attribute. Re-architecture means potential incompatibilities. New user-interface can mean learning and moving from the familiar.

    We’ve seen a lot of comments and I have gotten a lot of email talking about re-architecting Windows as a symbol of a major release. We’ve also gotten a lot of feedback about how a major release is one that breaks with supporting the past. If I could generalize, folks are usually implying that if we do things like that then a number of other major benefits will follow—re-architecting leads to better performance, breaking with the past leads to using less memory. It is always tricky to debate those points because we are comparing a known state to a state where we fix all the things we know to fix, but we don’t yet know what we might introduce, break, or otherwise not fix. So rather than define a major release relative to the implementation, I think it makes sense define the success of the release relative to the benefits of whatever implementation is chosen.  We will definitely continue to pick up on this part of the discussion--there's a lot of dialog to have.

    The key is always a balance. We can have big changes for all customers if we prepare all the necessary folks to work through the change. We can have small changes have a big impact if they are the right changes at the right time, and those will get recorded over time as a major release.

    We’ve talked about the timing and the way we structure the team, so you have a sense for the “inputs” into the project. If we listened well and focused our efforts correctly, then each type of customers will find things that make the product worthwhile. And if we do our job at effectively communicating the product, then even the things that could be “problems” are seen in the broader context of an ecosystem where everyone collectively benefits when a few people benefit significantly.

    From our perspective, we dedicated our full engineering team and a significant schedule to building the Windows 7 client OS. That makes it a major undertaking by any definition. We intend for Windows 7 to be an awesome release.

    I hope this helped to see that perspective is everything when it comes to deciding how big a release is for each type of customer.

    --Steven

  • Engineering Windows 7

    Advances in typography and text rendering in Windows 7

    • 51 Comments

    Even with the pictures and videos so commonplace on PCs, many of us spend most of our time looking at and interacting with text. Yet few of us stop to think about the depth of technology required to render text well and that this is an area that continues to benefit from improved technology in displays, graphics cards, as well as the APIs available to developers. In Windows 7, The support for text and fonts in GDI continues to provide the foundation for compatibility and application support. Building on the foundation of the modern DirectX graphics infrastructure, Windows 7 enhances the text output available to developers with DirectWrite. This is a new API subsystem and one that over time you will see adopted more broadly by applications from Microsoft, independent software developers, and within Windows itself. This post will also talk about improvements to ClearType and the Fonts, both available as part of the improvements to the GDI-based text APIs. This work was introduced at the PDC (pointers towards the end of the post). This post is by Worachai Chaoweeraprasit, a development lead on our Graphics feature team. --Steven

    One of the high-level goals of Windows 7 is to have even better graphics – graphics with higher fidelity. To that end, my team is looking into how to improve one of the most basic graphic elements in Windows, and that is text – the thing that’s always right in your face, but we hope you’ll never actually see it.

    The need for good text

    About 80% of the time people spend with their PC is to either read or write. This should come as no surprise when you realize that text is essentially how the machine talks back to you, and until we have a technology that would allow it to interject thought directly into our brains, text would probably continue to be the way we receive information from the computer screen.

    Studies have shown that good text leads to better productivity. Essentially we are wired as human to be incredibly good at capturing words and making a smooth, rapid transition between them – the basis of reading. We’re so good at it that we can do it unconsciously with incredible speed given that the text is optimized for that process. This might explain why many can sink in to a good book for hours, but some quickly become tired after staring at the computer screen for a while. Any visual-related factor that could disrupt the reading process effectively slows us down. Good text, therefore, is text that is tuned to support the human reading process with minimal distraction possible.

    The evenness of the white surrounding each letter, word, line, and paragraph plays a huge role in keeping the pace of reading while the black elements holds our attention together. A line too long, a word too tight, a paragraph too uneven, any of these conditions take us farther and farther away from the message being delivered but closer and closer to the mere medium delivering it. The art of text is essentially to make the actual text itself disappears before your eyes, so that the ideas it delivers reappear in your head. The study of how to prepare proper text is known as typography. And, as a typographer would say: good typography is not to be seen; only the bad ones are. As a platform, the role of Windows is to deliver great presentation of text and offering software developers great tools for creating the best presentation possible in the context of the software they develop.

    Improving current techniques

    People tend to develop habits and often over time these become the preferred way of getting things done. The more mundane the activity is, the easier we become attach to it, and the harder we’re willing to change. When it comes to text on your screen, the same screen you look at days in and days out. It could quickly become awkward if that completely changes overnight – even for the better. So, how do we go about improving on what we all become so used to? We want to make sure to support what is there and improve it, while supporting existing methods. But, before we get to understand the improvement, let’s first take a closer look into the current implementation really is and what challenges it presents over the years.

    The current implementation is the product of text rendering design based on device pixel. The dimension of text at a certain size eventually translates into a fixed number of pixels in horizontal and vertical direction on the device surface. A 10-point text would translate to roughly 80 pixels height on a typical printer device of 600 dpi, while the same text would merely acquire 13 pixels on a 96 dpi monitor. This physical screen condition was hardly adequate for the quality we’re seeking for good text on screen.

    Fortunately, the advent of ClearType during the past decade has largely improved the clarity aspect of quality. ClearType leverages the anatomy of the LCD pixel structure and takes advantage of the human visual system to distribute the energy typically emit to a whole display pixel, across the neighboring sub-pixels in the LCD’s typical 3-color channels making up each individual pixel, to create the visual illusion of higher resolution raster quality on a lower resolution device. As the result, ClearType text looks significantly sharper than the typical text on an LCD display, mitigating a large portion of the quality problem on a display technology that would become hugely popular a few years later.

    Another pleasant design of the original ClearType in Windows was that it has improved the clarity of text without breaking application compatibility – that is, it doesn’t change the actual size of each individual glyph in either direction, nor did it change the distance between the two adjacent ones. This is the reason one could turn it on or off at will without having to “store” the selected option in the document or application. It is entirely per-user rendering preference. In Windows 7 we also improved the ClearType Text Tuner in keeping with our theme of being in control of your PC experience, by providing even more granular choices when tuning ClearType (and of course you can still turn it off).

    But like many other things in the world, the coin comes in two faces. While it is able to preserve backward compatibility, it is limited by its own leverage unable to advance the state of the art. The width and height of the individual glyph and the nominal distances between the adjacent two remain fixed to the rounded number of screen pixels at a given size.

    One of the graphics improvements we made in Windows 7, therefore, is to move from the physical pixel model of the past, and instead creating a new design around what we call the “device independent pixel” unit (or “DIP”), a “virtual pixel” that is one-ninety-sixth an inch in floating-point data type. In this model, a glyph (or any other geometric primitive for that matter) can size to fractional pixels, and be positioned anywhere in between the two pixels. The new ClearType improvement allows sizing and placement of glyph to the screen’s sub-pixel nearest to its ideal condition, creating a more natural looking word shape and making text on screen looks a lot closer to print quality.

    The following figure shows the side-by-side comparison of the same word between the original or today’s ClearType (above) and the Windows 7 improvement – Natural ClearType (below), which does require calling the new APIs to render. Notice the width of the letters in the word and the spacing between them, as well as how the more consistent width and spacing improves the overall appearance of the entire word. Note that all the letters are placed with its nominal spacing and there is no kerning adjustment being applied here. A great article by Kevin Larson – a researcher in the Advanced Reading Technology team, discusses in details the scientific aspect of word recognition.

    Comparing ClearType and Windows 7's Natural ClearType

    The ability to be more precise in approximating the screen placement of natural text also lends itself to a very nice side-effect, and that is the fact that text can now be placed on the line with no regards to the actual display device’s resolution. It means a UI designer can design an application UI knowing it’ll look the same on all other screens as it appears on his or her screen regardless of what type of display device the users might have. This fact is also particularly handy for software localization where the translated text produces the same layout everywhere.

    This improvement could also offer a more realistic view of a print document on screen, or make the screen document looks closer to its print counterpart. It could also improve the quality of document zooming. Imagine document zoom that could go in and out in the same manner as what you would see when pulling the actual print page closer and farther away from your sight. It could mean a more joyful experience for online reading.

    Fonts and Font Management

    The Font is the heart and soul to typography, much like photo is to photography. A lot more fonts are shipped with Windows these days while even more are developed around the world. Windows Vista shipped with 40% more fonts comparing to Windows XP. Windows 7 is expected to ship with 40+ new fonts, just to underscore this trend. We’ve also added some additional viewing/categorization capabilities using the Windows 7 Explorer to improve working with a large library of related fonts.

    The default common controls’ font dialog and the font chunk in Windows 7 Ribbon are also updated to be more intelligently selective of what fonts to be present to the user of the current user’s profile. Depending on a number of settings including the current UI language, the user locale, and the current set of keyboard input locales, the font list hides fonts of languages not typically used by the user of different culture and locale. For example, all the international fonts are automatically hidden away from a typical English user to reduce clutter and promote better productivity in common system applications such as NotePad, WordPad and Paint. Third-party application utilizing the Ribbon or the common controls’ font dialog could also have the same benefit. The user still retains the option of selecting any desired font back to the view by explicitly marking it in the Windows 7 Control Panel’s Font applet.

    Operating System Fonts shipped “in-box”
    Windows XP SP2 133
    Windows Vista 191
    Windows 7 235 (currently planned)

    This growth, however, introduces some new opportunities for improvement. We’ve long treated fonts as system-wide resources. It gets “installed” on the machine and kept in a single flat namespace managed by the core part of the operating system. It may be interesting to some that the font named “Arial Black” isn’t really in the same grouping as “Arial Narrow” or “Arial”. This is because as far as the operating system is concerned, they are just different fonts with different names. And because font is uniquely identified by its name, you can’t have multiple versions of the same font at the same time.

    Because font is system resource, non-traditional usage of font such as font embedded within the document, and font used exclusively in an application is done through the mechanism known as private installation, which involves making sure the font name is unique before installing it programmatically but doing so by hiding it from others to see. Private font is just like font installed publicly as far as the operating system internal is concerned.

    An important improvement in Windows 7’s new font system is the notion of “font collection” which allows partitioning of fonts sharing the same usage into a separate namespace. The system collection is similar to what exists today and is created and managed by the system whereas custom collection can be created and managed, as many as needed, entirely by the application program. This allows document to have its own set of fonts local to it, and third-party application or plug-in to ship with its own font used exclusively within the program. This partitioning not only reduces unnecessary system-wide font update and allows update to happen only locally as needed, it also allows access to multiple versions of the same font in different collections.

    The new font system also improves the way fonts are organized within the collection. It supports the notion of weight-width-slope variation where fonts with the same stylistic root but vary in its weight (thin, light, bold, black, etc.), width (wide, narrow, etc.), or slope (italic, oblique) are grouped together in the same font family. For instance, “Arial Narrow” becomes a variation or face in the “Arial” family. This grouping model is advocated by the CSS recommendation.

    Font Art

    Fonts also represent art and artistic expression. The technology helping create font is therefore the artist’s tool of expression. An important technology called OpenType emerged during the past decade. It enables new ways type design can be realized. OpenType allows designer to define how glyphs interact and transform in stages. The designer then exposes this function as an executable unit known as the “font feature” for application programmable access.

    OpenType was an offshoot of the TrueType Open technology Microsoft developed in 1994-95. The TrueType Open technology added the GSUB, GPOS, BASE, JSTF, and GDEF tables to the TrueType format. The primary usage at the time was to help with the creation of Arabic font due to the inherent complexity of the task. Microsoft chose to rename the technology to OpenType in 1996 and Adobe added their CFF glyph outline format to the technology in the same year. Today OpenType is used to improve readability of text as well as to express new and exciting type design in various languages.

    However, despite its long-time presence and availability, the usage of OpenType in the Windows world remains largely in specialized programs. The Windows native graphics system has not fully embraced OpenType for its mainstream usage of text. This absence discourages many designers as there is no standard way in Windows to test the feature they produce. Likewise, its limited exposure doesn’t encourage discoverability for mainstream application developers. Improving this and transitioning to this improved rendering technology is a multi-step and multi-release investment done so as to maximize the benefit while minimizing the disruption that might be introduced as incompatibilities. Windows 7 takes another step on this path. We know for many that care deeply about this area there is a strong desire to move faster. We are doing our best to balance the speed of transition with the desire to maintain compatibility.

    Windows 7 new text system not only uses available OpenType features internally but also allows access to any feature made available in the font in the high level programming interface, making it easier for application developer to discover and exercise the font feature in mainstream scenario. Windows 7 also ships with a brand new OpenType font “Gabriola” developed by a well-respected typographer John Hudson. Gabriola makes heavy use of contextual letterforms and offers an unprecedented number of stylistic sets for different usages of the font in different occasions. The figure below enumerates all stylistic sets available in this font; notice the subtleties and not-so-subtle way to distinguish each stylistic set.

    Gabriola style set 1 of 3

    Gabriola style set 2 of 3

    Gabriola style set 3 of 3

    The figure below also demonstrates the power of contextual letterforms in the eighth rendition of Gabriola’s stylistic set (“ss07”) to produce different ways the same word is rendered depending on where it’s at in the line.

    Gabriola rendered using contextual letterforms

    New APIs

    Rendering text is complex and involved, even though it seems like something that should be straight forward. There are probably hundreds of ways to format text in a document and often many paths that ultimately yield the same results. HTML/CSS is a complex standard and is a great example of the richness of how text may be formatted and typeset. Underneath the formatting logic lies the language requirement – the rule of writing for the language. Windows has long been supporting Unicode – another complex standard for global data interchange. Windows supports an increasing number of Unicode script in every single release. The mapping from the input text to the final glyphs in the font requires intricate transformation, which involves parsing of font data and analyzing the language writing pattern. Once the glyph is finalized, it is then rasterized, merged and filtered into the final visual on the display device.

    Due to this staging nature, different types of applications require different support from the text system. While a typical application such as the legendary “Hello world” type application may be satisfied with only the ability to get some text out showing to the user. The same level of support is hardly adequate for document preparation system such as Microsoft Word and Adobe InDesign. Some of the more mature application code bases may also have to deal with different graphics systems. This makes it harder in practice for a text system that tie to a particular graphics model to really be widely useful across the wide variety of applications in the Windows ecosystem.

    It became obvious to us early on during the planning stage of Windows 7 that text processing is not homogeneous, and different types of applications have different needs and requires different levels of support. The appropriate level of programming access to the text functionality is as important as the functionality itself. The new text system in Windows 7 is assembled into a self-sufficient system called DirectWrite. The API is provided in four layers – the interfaces for font data, rendering support, language processing, and typesetting, each built upon the others with the lower layer makes no requirement to the upper one, and none depends on a specific graphics model. To illustrate the latter point, the figure below shows a sample application that uses the new typesetting interface and language processor while the final rendering happens as an extruded filled 3D geometry from the 2D graphics environment also new to Windows 7 called Direct2D. Both systems were introduced in PDC 2008 as the new graphic foundation in Windows 7.

    Sample text output in DirectWrite using Direct2D

    DirectWrite preserves developer’s investment in existing technologies such as GDI and GDI+ in three important aspects. First, the previously described layering design of DirectWrite allows for the clean separation between the two fundamental processes of  placing and rendering of text. It enables applications to use DirectWrite to place text while having it rendered onto traditional graphic surfaces such as GDI and GDI+. The reverse scenario in which the application may use GDI to place text while having it rendered through DirectWrite is also naturally supported. The second aspect of compatibility comes from the fact that DirectWrite also supports all existing methods for placing and rendering text found in GDI. A DirectWrite application can use DirectWrite to place and render text in the same manner as GDI does without actually using GDI. Text placed and rendered under this compatibility mode is indistinguishable from GDI text from the user’s point of view, and as such preserving existing layout of application UI and text document. Lastly, DirectWrite exposes a set of APIs that interoperate with GDI. An application selecting a GDI font object can turn it into a DirectWrite’s font object and vice versa. Since the font system is at the low end of the DirectWrite API layer, it provides a natural interoperability point that is fundamental enough to ensure high degree of data preservation and correctness. Once the application is able to acquire a DirectWrite’s font object, it can in turn use it in any other DirectWrite API requiring a DirectWrite font from that point onward. The conversion from a DirectWrite’s font object back to a GDI font object allows the rest of the GDI-based application to function with no change while still being able to reap the benefit of using DirectWrite’s new and improved font model. As in some real world examples, the XPS print rasterizer in Windows 7 is implemented on top of DirectWrite and utilizes DirectWrite’s interoperability API to convert back to a GDI font as part of the conversion of an XPS-based print job for a non-XPS printer driver. The Windows 7 XPS Viewer also uses DirectWrite alongside the GDI+ graphic rendering for its onscreen display.  

    There’s a lot more to the details of the API. In the PDC session linked to above, Leonardo Blanco and Kam VedBrat go into the details of DirectWrite and Direct2D and how to develop applications such as this.

    The world has changed a lot since the first text APIs of Windows GDI, such as TextOut or ExtTextOut in Windows NT 3.1 (or the subsequent API additions). The evolution of support for text is a critical part of the underpinnings of Windows 7. We continue to improve this most “basic” element of a graphical operating system so that regardless of the language, script, or device used to render text, Windows will offers a great set of tools and APIs for developers and a great experience for end-users.

    --Worachai

  • Engineering Windows 7

    Follow-up: Windows Desktop Search

    • 77 Comments

    The discussion and email about desktop search offered an opportunity for us to have a deeper architectural discussion about engineering Windows 7.  There were a number of comments suggesting alternate implementation methods so we thought we’d discuss another approach and the various pros and cons associated with it.  It offers a good example of the engineering balance we are striving for with Windows 7.  Chris McConnell wrote this follow-up.  --Steven (See you at the PDC in a week!)

    Thanks for all the great feedback on our first blog post on Windows Desktop Search.  I’ve summarized a number of points that have been made and added some comments about the architectural choices we have made and why.

    Integration with the File System

    As some posters have pointed out, one possible implementation is to integrate indexing with the file system so that updating a file immediately updates the indices.  Windows Desktop Search takes a different approach.   There are two aspects of file system integration: knowing when a file changes and actually updating the indices before a file is considered “closed” and available.   On an NTFS file system, the indexer is notified whenever a file changes.   The indexer never scans the NTFS file system except during the initial index.  It is on the second point—updating the indices immediately when a file is closed that we made a different choice.  Updating immediately has the benefit that a file is not available until it is indexed, but it also comes with a number of potential disadvantages.  We chose to decouple indexing from file system operations because it allows for more flexibility while still being almost real-time.   Here are some of the benefits we see in the approach we took:

    1. Fewer resources are used.  Inverted indices are global.  An inverted index maps from a word found in a property to a list of every document that contains that word.  Indexing a single file requires updating an index for every single unique word found in the file.   A single document might then update a very large number of individual indices.  Making these changes and committing them with the same robustness found on individual files would be very expensive.  The design of the indexer allows scheduling and aggregating these changes so that much less work is done overall—that means less CPU and less disk I/O.  The system can be more robust because indexing doesn’t only happen when a file is closed—and it can even be retried if necessary.
    2. File system operations are prioritized over indexing.  Getting files robustly updated and available is necessary for applications to use them.  We don’t want to delay that availability by forcing the cost of indexing into file close operations.   Searching over files is important, but is less important than actually working with files.  We wouldn’t want applications to decide individually if the indexer should be turned on or off just because they were seeking the best performance with respect to the file system.
    3. There are lots of file types.  Microsoft supplies extractors (IFilter/IPropertyHandler) for many common file types as part of Windows.  There are many other file types as well so it is important to allow non-Microsoft developers to write their own extractors.  In Vista (and Windows 7), these extractors run in a locked down process that ensures that they are secure and do not affect the performance of the whole system.  If indexing had to happen before a file was available, then an extractor could impact (intentionally or not) all file system operations.  
    4. Some files are more valuable to index then others.  If indexing happened when a file is closed, then there is no control over the order files are indexed.  Decoupling allows prioritizing indexing some files over others.  For example, searching for music is much more likely than searching for binary files.  If both music files and binary files have changed, then the indexer ensures it indexes the music files first.  Some files are not worth indexing at all for most people.  Several comments suggested that we should index the whole drive.  We can do that—and for those who would find it valuable it easy to add folders to be indexed.  (You can also remove them, but that is much less common so that is controlled through the control panel “Indexing Options.”)  For most people indexing system files is just a cost—they would never search for them and would be confused if they showed up as the result of a search. 
    5. Not everything is a file in single file system.  Windows is all about supporting diversity.  There are many different file systems like FAT32 and CDFS and we would like to be able to search over those as well.   If we integrated with only NTFS, then we would have to still have a loosely coupled system for other file systems.  Many applications also have databases optimized for their own needs.  For example, Outlook has a database of email.  If only files were indexed, then the email in the database could not be indexed unless Outlook either compromised their experience by using files only, or complicated their implementation by duplicating everything in both the file system and the database.

    Advanced Queries

    A number of people expressed frustration with the lack of an advanced query UI.  Microsoft has many advanced query user-interfaces in many products, but these are generally focused on well-defined query languages (SQL) or on specific domains (like the Advanced Find in Outlook).  With Vista we wanted to address the query problem in a manner more familiar to people today—a single edit control.  Our implementation supports a rich query language within that edit control.  This is the same approach people are familiar with for web searching for both standard and advanced queries.

    We had two observations that led to this approach:

    1. The most important part of a search are the search terms.  Usually a single term is enough (and as we know from web searching, the majority of searches are one or two words).   And for refinement the file system tools of thumbnails, sorting, and/or type ahead can be used to narrow the search.  
    2. It is reasonable to consider a design for an advanced query UI covering property based search, but it will generally be unwieldy for all but the bravest people.  As we mentioned, Windows Search covers over 300 properties by default so if you show every property then the UI is unusable.  If we only show the most commonly used properties then how do you handle all of the other properties?  Would properties be grouped by the common application or by attributes such as times, names, file attributes, etc.?  Some of you might value the Outlook Advanced Find… interface, but there you see some of the challenges and that is within a specific domain where the grouping or related properties probably can be understood. 

    In designing Vista we incorporated the feedback that it is desirable to do precise queries.  The approach taken in Vista was to support a rich query language which allows all properties and a fairly natural syntax.  For example typing “from:gerald sent:today” will find all email from “Gerald”  sent today!   The big issue is that people do not know or the query language.  In Windows 7, we have focused on helping people see how to use the query language in context. For now, you can see the following for some information on Vista’s query syntax.  Much of this syntax and experience is similar to web search that we all use today.

    A number comments were about substring matches in filenames, which we do not currently support.  This is part of the overall discussion about advanced queries.  In order to efficiently execute queries, the indexer builds indices that are based on individual words.  In Vista we introduced “searching as you type” to our search UI.  Under the hood this is implemented as prefix matches on the indexed words.  So when you type, ‘foo’, we look for all terms that start with those letters including ‘food’ and ‘football’.    Even more interesting if you type ‘foo net’ we will match on items that have the words ‘food’ and ‘network’ in them.   (If what you really want is to match the phrase “foo net” then typing those words inside quotes will do that—another example of advanced query syntax)   We have focused primarily on searching for terms found in any property, but there is no question that filenames are special.  In recognition of that we support suffix queries on filenames.  If you type ‘*food’ then we will return files that end in ‘food’ like “GoodFood”.  We do this by reversing the filename and then indexing it as a word.  For example, the reverse filename of “GoodFood” would be “DooFdooG” which we index as a word.  The suffix query ‘*food” is transformed into a prefix query “doof*” over the reverse filename index—clever, no?   So we support prefix matches for all properties and suffix matches for filenames, but we do not support substring matches. 

    Performance and Citizenship

    A number of comments focused on improving performance and citizenship—and we definitely agree on this input.   We are always striving to make Windows do more with fewer resources.  For those who have turned off indexing all together we hope that our continued improvements will make you reconsider.  Even if you organize all of your files and don’t find search useful for files, perhaps you will find start menu search, email search or Internet Explorer 8 address bar search useful.  We have worked hard at improving performance and citizenship across Windows.  Some of this progress is visible in WS4 and soon in Windows 7.  We have improved along all of our dimensions including indexing cost, battery life, citizenship, query speed and scrolling speed.  We have some tremendous tools that help us track down performance problems.  If you want to help, please contact idx-help@microsoft.com and we will tell you how to collect performance traces we can analyze so that we can continue to make improvements.

    Chris McConnell

    Find and Organize

  • Engineering Windows 7

    Follow-up: Starting, Launching, and Switching

    • 83 Comments

    Lots of discussion on the taskbar and associated user interface.  Chaitanya said he thought it would be a good idea to summarize some of the feedback and thoughts.  --Steven

    We’d like to follow up on some themes raised in comments and email.  This post looks at some observations on consistent feedback expressed (though not universal) and also provides some more engineering / design context for some of the challenges expressed.

    First it is worth just reinforcing a few points that came up that were consistently expressed:

    • Many of you agree that the Notification Area needs to be more manageable and customizable. 
    • We received several comments about rearranging taskbar buttons.  This speaks to the need for a predictable place where taskbar buttons appear as well as your desire for more control over the taskbar.
    • There were comments that talked about Quick Launch being valuable, but that it could stand to be an even better launching surface (e.g. larger by default or more room).
    • Thumbnails are valuable to many of you, but their size doesn’t always help you find the window you are looking for.  There is interest in a better identification method of windows that consistently provided the right amount of information.
    • Better scaling of supported windows was discussed.  This includes optimizing the taskbar for more windows and spanning multiple displays. 

    Data

    Several of you asked about the conclusions we are drawing from the data we collect and how we will proceed.

    @Computermensch writes “The problem with this "analysis" (show me the data) is that you're only managing current activities surrounding the taskbar. So with respect "to evolving the taskbar" you're only developing it within its current operational framework while developing or evolution of really should refer to developing the taskbars concept.” 

    @Bluvg posts “What if the UI itself was a reason that people didn't run more than 6-9 windows?  In other words, what if the UI has a window number upper bound of effectiveness?  Prioritizing around that 6-9 scenario would be taking away the wrong conclusion from the data, if that were the case.  The UI itself would be dictating the data, rather than being driven by user demand.”

    As we’ve said in all our posts around the data we collect and how we use it, data do not translate directly into our features, but informs the decisions.  Information we collect from instrumentation as well as from customer interviews merely provides us with real-world accuracy of how a product is currently used.  The goal is not necessarily to just design for the status quo.  However, we must recognize that if a new design emerges that does not satisfy the goals and behavior of our customers today, we risk resistance.  This is not to say one should never innovate and change the game—just that to do so must be respectful of the ultimate goal of the customer.  Offering a new solution to a problem is great; just make sure you’re solving the right problem and that there is a path from where people are today to where you think the better solution resides.  With that said, rest assured that our design process recognizes the need for the taskbar to scale more efficiently for larger sets of windows.  This would allow those who possibly feel “trapped” in the 6-9 window case to more comfortably venture to additional windows, if they really require it.  Also, the improvements we make to the 90% case should still hold benefits to the current outliers. 

    Notification Area

    With so much feedback, it is always valuable to recognize when customer comments converge.  The original post called out the problems with the Notification Area and these issues were further emphasized with your thoughts.

    @Jalf writes “Having 20 icons and a balloon notification every 30th second taking up space at the taskbar where it's *always* taking up space is just not cool. By all means, the information should be there if I need it, but can't we just assume that if I don't actively look for the information, it's probably because I don't want it.

    Jalf’s comment is particularly interesting because it speaks to both the pros and cons of notifications.  They certainly can be valuable, but they can also very easily overwhelm the customer as many of you note.  A careful balance therefore must be reached such that the customer is kept informed of information that is relevant while she continues to remain in control.  Since relevant is relative, the need for control is fundamental.  Rest assured we are aware of the issues and we are taking them very seriously.

    Multi-mon Support

    It comes as no surprise that many of you wrote to discuss multi-monitor support for the taskbar. This is a popular request from our enthusiasts (and our own developers) and was called out as an area of investigation in the original post. 

    @Justausr is very direct with this comment: “The lack of multi-monitor support is just about a crime.  We've seen pictures of Bill Gate's office and his use of 3 monitors.  Most developers have 2 monitors these days.  Why was multi-monitor support for the taskbar missing?  Once again, this is an example of the compartmentalization of the Windows team and the lack of a user orientation in defining and implementing features.  The fact that this is even a "possible" and not an "of course we're going to..." shows that you folks STILL don't get it.”

    At least in this particular case we tend to think we “get it”, but we also tend to think that the design of a multi-mon taskbar is not as simple as it may seem.  As with many features, there is more than one way to implement this one.  For example, some might suggest a unique taskbar that exists on each display and others suggest a taskbar that spans multiple displays.  Let’s look at both of these approaches.  While doing so also keep in mind the complexities of having monitors of different sizes, orientations, and alignments. 

    If one was to implement a taskbar for each display where each bar only contained windows for its respective portion of the desktop, some issues arise.  Some customers will cite advantages of less mouse travel since there is always a bar at the bottom on their screen.  However, such a design would now put the onus on the customer to track where windows are.  Imagine looking for a browser window and instead of going to a single place, you now had to look across multiple taskbars to find the item you want.  Worse yet, when you move a window from one display to another, you would have to know to look in a new place to find it.  This might seem at odds with the request to rearrange taskbar buttons because customers want muscle memory of their buttons.  It would be like having two remotes with dynamically different  functionality for your TV. This is one of the reasons that almost every virtual desktop implementation keeps a consistent taskbar despite the desktop you are working on.  

    Another popular approach is a taskbar that spans multiple desktops.  There are a few third-party tools that attempt to emulate this functionality for the Windows taskbar.  The most obvious advantage of this approach (as well as the dual taskbar) is that there is more room offered for launching, switching and whispering.  It is fairly obvious that those customers with multiple displays have more room to have more windows open simultaneously and hence, require even more room on their taskbar.  Some of our advanced customers address this issue by increasing the height of the taskbar to reveal multiple rows.  Others ask for a spanning taskbar.  The key thing to recognize is that the problem is not necessarily that the taskbar doesn’t span, but that more room is required to show more information about windows.  So, it stands to reason that we should come up with the best solution to this problem, independent of how many displays the customer has. 

    We thought it would be good to just offer a brief discussion on the specifics of solving this design problem as it is one we have spent considerable time on.  One of the approaches in general we are working to do more of, is to change things when we know it will be a substantial improvement and not also introduce complexities that outweigh the benefits we are trying to achieve.

    Once again, many thanks for your comments.  We look forward to talking soon.

    - Chaitanya

  • Engineering Windows 7

    Back from the PDC…next up, WinHEC

    • 108 Comments

    This has been an amazingly special week for the Windows 7 team.  We’re all incredibly appreciative of the reception of Windows 7 this week at the PDC.  Thank you!

    All of us on the team have been closely watching the news reports and blogs of those who have been “kicking the tires” of the Windows 7 pre-beta.  The reception has been fantastic and we’re humbled by the excitement and enthusiasm for the release.  We know we have a ton of work ahead of us to get to beta and then the path to RTM, and the reception has definitely given us an extra special motivation (though we were already pretty motivated).

    Next week is our conference dedicated to the hardware partners in the ecosystem we have talked about.  Called WinHEC (Windows Hardware Engineering Conference), we’ll have another series of sessions and keynotes.  Jon DeVaan will be taking the lead as we dive into the details of “fundamentals” and the work we are doing with some of the many partners involved in Windows 7.  WinHEC also has a strong focus on Windows Server 2008 R2 (the server built off the Windows 7 kernel).  These sessions will all be available online as well.

    So with all the shows we’re taking a short break from the blog as the folks that do the presenting are also the writers (myself included).

    Below is a list of all the sessions on Windows 7 from the PDC.  Please take some time to have a look as the information is very detailed for sure.  How about using the comments on this post to ask questions of the sessions that you’d like to see more details on down the road?  That would be really helpful for us to target our posts.

    Many of you have written asking about the beta and how to sign up or download it.  The best source for information on that will be the site http://www.microsoft.com/windows/windows-7 which our product marketing team owns and will keep up to date as the beta information is available.  Also note that the Windows Vista blog which is where you will see announcements / news has been updated to reflect the inclusion of Windows 7.  This blog is now known as the Windows Blog.

    One of the very fun moments for me at the PDC was an “Open Space” session on the floor of the “Big Room” which was an open-microphone discussion.  Channel9 captured this and might be a fun watch.  See http://channel9.msdn.com/posts/Charles/Steven-Sinofsky-at-the-PDC2008-Open-Space/

    For those of you interested in the Windows 7 APIs and what’s new for developers there is an overview document that you might find valuable.  See Windows 7 Developer Guide on MSDN.

    Thank you very much for all the emails you have sent.  I always share them with the team and really appreciate it.

    Presentation URL
    KYN02 Day Two #1 - Ray Ozzie, Steven Sinofsky, Scott Guthrie and David Treadwell (Windows 7 starts +17:00 minutes) http://channel9.msdn.com/pdc2008/KYN02/
    PC01 Windows 7: Web Services in Native Code http://channel9.msdn.com/pdc2008/PC01/
    PC02 Windows 7: Extending Battery Life with Energy Efficient Applications http://channel9.msdn.com/pdc2008/PC02/
    PC03 Windows 7: Developing Multi-touch Applications http://channel9.msdn.com/pdc2008/PC03/
    PC04 Windows 7: Writing Your Application to Shine on Modern Graphics Hardware http://channel9.msdn.com/pdc2008/PC04/
    PC13 Windows 7: Building Great Audio Communications Applications http://channel9.msdn.com/pdc2008/PC13/
    PC14 Windows 7 Scenic Ribbon: The next generation user experience for presenting commands in Win32 applications. http://channel9.msdn.com/pdc2008/PC14/
    PC15 Windows 7: Benefiting from Documents and Printing Convergence http://channel9.msdn.com/pdc2008/PC15/
    PC16 Windows 7: Empower users to find, visualize and organize their data with Libraries and the Explorer http://channel9.msdn.com/pdc2008/PC16/
    PC18 Windows 7: Introducing Direct2D and DirectWrite http://channel9.msdn.com/pdc2008/PC18/
    PC19 Windows 7: Designing Efficient Background Processes http://channel9.msdn.com/pdc2008/PC19/
    PC22 Windows 7: Design Principles for Windows 7 http://channel9.msdn.com/pdc2008/PC22/
    PC23 Windows 7: Integrate with the Windows 7 Desktop http://channel9.msdn.com/pdc2008/PC23/
    PC24 Windows 7: Welcome to the Windows 7 Desktop http://channel9.msdn.com/pdc2008/PC24/
    PC25 Windows 7: The Sensor and Location Platform: Building Context-Aware Applications http://channel9.msdn.com/pdc2008/PC25/
    PC42 Windows 7: Deploying Your Application with Windows Installer (MSI) and ClickOnce http://channel9.msdn.com/pdc2008/PC42/
    PC43 Deep Dive: What's New with user32 and comctl32 in Win32 http://channel9.msdn.com/pdc2008/PC43/
    PC44 Windows 7: Programming Sync Providers That Work Great with Windows http://channel9.msdn.com/pdc2008/PC44/
    PC50 Windows 7: Using Instrumentation and Diagnostics to Develop High Quality Software http://channel9.msdn.com/pdc2008/PC50/
    PC51 Windows 7: Best Practices for Developing for Windows Standard User http://channel9.msdn.com/pdc2008/PC51/
    PC52 Windows 7: Writing World-Ready Applications http://channel9.msdn.com/pdc2008/PC52/
    ES20 Developing Applications for More Than 64 Logical Processors in Windows Server 2008 R2 http://channel9.msdn.com/pdc2008/ES20/

    See you on this blog soon enough!

    --Steven

  • Engineering Windows 7

    Follow-up: Managing Windows windows

    • 121 Comments

    There’s a lot of great discussion from the window arranging post.  This really shows how important these details are to people.  Being able to arrange how apps are shown on screen is key for productivity because it impacts almost every task.  It’s also very personal – people want to be in control of their work environment and have it set up the way that feels right. 

    One thing that should be clear is that it would not be possible for us to provide solutions to all the different ways people would like to work and all of the different tools and affordances people have suggested--I think everyone can see how overloaded we would be with options and UI absorbing all the suggestions!  At first this might seem to be a bit of a bummer, but one thing we loved was hearing about all the tools and utilities you use (and you write!) to make a Windows PC your PC.  Our goal is not to provide the solution to every conceivable way of potentially managing your desktop, but rather to provide an amazing way to manage your desktop along with customizations and personalizations plus a platform where people can develop tools that further enhance the desktop in unique and innovative ways.  And as we have talked about, even that is a huge challenge as we cannot provide infinite customization and hooks—that really isn’t technically possible.  But with this approach Windows provides a high degree (but not infinite) flexibility, developers provide additional tools, computer makers can differentiate their PCs, and you can tune the UI to be highly personalized and productive for the way you want to work using a combination of thos elements and your own preferences. 

    One other thing worth noting is that a lot of the comments referred to oft discussed elements in Windows, such as stealing the focus of windows, the registry, or managing the z-order of windows—a great source of history and witticisms about Windows APIs is from Raymond Chen’s blog.  Raymond is a long-time developer on the Windows team and author of Old New Thing, The: Practical Development Throughout the Evolution of Windows.  This is also a good source to read where the boundaries are between what Windows does and what developers of applications can choose to be responsible for doing (and what they are capable of customizing).

    With that intro, Dave wanted to follow up with some additional insights the team has taken away from the discussion.  --Steven

    We saw several pieces of feedback popping up consistently throughout the comments.  Paraphrasing the feedback (more details below), it sounds like there’s strong sentiment on these points:

    • The size of windows matters, but wasting time resizing windows is annoying.
    • Just let me decide where the windows go – I know best where my windows belong.
    • Dragging files around is cumbersome because the target window (or desktop) is often buried.
    • Desire for better ways to peek at the running windows in order to find what we’re trying to switch to.
    • Want a predictable way to make the window fit the content (not necessarily maximized).
    • Want to keep my personalized glass color, even when a window is maximized.

    For each of these needs, there’s a lot of great discussion around possible solutions – both features from other products, and totally novel approaches.  It’s clear from these comments that there’s a desire for improvement, and that you’ve been thinking about this area long enough to have come up with some fairly detailed recommendations!  Below are a excerpts from some of the conversations ongoing in the comments.

    Put the windows where I want them

    It’s super interesting to see people discussing the existing features, and where they work or don’t work.

    For example, @d_e is a fan of the existing tiling options in the taskbar:

    Arranging windows in a split-window fashion is actually quite easy: While pressing CTRL select multiple windows in the taskbar. Then right-click them and select one of the tiling options...

    But that approach doesn’t quite meet the goal for @Xepol:

    As for the window reorder buttons on the taskbar -> I've known they were there since Win95, but I never use them.  They never do what I want.  If they even get close to the right layout, its the wrong window order.  Since I have to drag stuff around anyways, its just easier to get exactly what I want the first time.

    @Aengeln suggests taking the basic idea of tiled windows to the next level in order to make them really useful:

    A very useful feature would be the ability to split the deskotop into separate portions, especially on larger screens.  For example, I might want to maximize my Messenger window to a small part on the right hand side of the desktop and still have the ability to maximize other windows into the remaing space. Non-maximized windows would be able to float across both (all) parts of the desktop.

    It sounds like there’s agreement that optimizing the screen space for more than one window would be super useful, if it would only let you stay in control of where windows ended up, and was easy and quick to use every day.  The current tiling features in the taskbar give hints at how this could be valuable, but aren’t quite fast and easy enough to be habit forming.

    Open at the right size

    We saw a lot of comments on the “default size” of windows, and questions about how that’s decided.  Applications get to choose what size they open at, and generally use whichever size they were at the last time they were closed (or they can choose not to honor those settings).  One of the cases that can trip people up is when IE opens a small window (websites will do this sometimes), because once you close it that will be the new “last size”. 

    @magicalclick suggested a solution:

    I wish I have one more caption button, FIXED SIZE. Actually it is a checkbox. When I check the box, it will save the window state for this application. After that, I can resize/move around. When I close window, it will not save the later changes.

    @steven_sinofsky offered this advanced user tip that you can use to start being more click-efficient right away:

    @magicalclick I dislike when that one happens!  Rather than add another button or space to click, I do the same thing in one click with a "power user" trick which is when you see the small window open don't close it until you first open up another copy of the application with the "normal" window size.  Then close the small one and then the normal one. 

    Of course this is a pain and close to impossible for anyone to find, but likely a better solution than adding a fourth UI affordance on the title bar.

    –steven

    Finding the right window

    The word being used is “Expose”:

    @Joey_j: Windows needs an Exposé-like feature. I want to see all of my windows at once.

    @Dan.F: one word - expose.  copy it.

    @GRiNSER : Expose has its own set of drawbacks: Like having 30 windows on a macbook pro 1400x1050 screen is really not that helpful. Though its way more helpful than Crap Flip 3D. Expose would be even more useful with keyboard window search...

    Regardless of the name, there’s a desire to visually find the window you’re looking for.  Something more random-access than the timeline approach of Alt-Tab or Flip-3d, and something that lets you pick the window visually from a set of thumbnails.  This is very useful for switching when there are a lot of windows open – but some current approaches don’t scale well and it is likely scaling will become an even more difficult problem as people run even more programs.

    Dragging files

    There were several comments (and several different suggestions) on making it easier to drag between windows:

    @Manicmarc:  I would love to see something like Mac OS's Springloaded folders. Drag something over a folder and hover, it pops up, drag over to the next folder, drop it.

    @Juan Antonio: It would be useful that when I´m dragging an object I could to open a list or thumbnail of the windows ( maybe a right- click )to select what window use to drop the object.

    On this topic, I loved @Kosher’s comment on the difference between being able to do something, and it feeling right.

    The UI could be enhanced quite a bit to make it much easier to do things. It's not just about how easy it is but it's also about how smoothly the user transitions between common UI workflows and tasks.  This is a bit like explaining the difference between a Ferrari and a Toyota to someone that has never driven a Ferrari though, so I don't know if it will ever happen.

    In designing Windows 7, we’ve really been taking the spirit of this comment to heart.  I can’t wait to hear what car Windows 7 is compared to once it’s available for a test drive.

    - Dave

  • Engineering Windows 7

    Recognizing Improvements in Windows 7 Handwriting

    • 28 Comments

    Microsoft has been working on handwriting recognition for over 15 years going back to the Pen extensions for Windows 3.0.  With the increased integration and broad availability of the handwriting components present in Windows Vista we continue to see increased use of handwriting with Windows PCs.  We see many customers using handwriting across a wide variety of applications including schools, hospitals, banking, insurance, government, and more.  It is exciting to see this natural form of interaction used in new scenarios.  Of course one thing we need to continue to do is improve the quality of recognition as well as the availability of recognizers in more languages around the world.  In this post, Yvonne, a Program Manager on our User Interface Platform team, provides a perspective on engineering new recognizers and recognition improvements in Windows 7.  --Steven

    Hi, my name is Yvonne and I’m a Program Manager on the Tablet PC and Handwriting Recognition team. This post is about the work we’ve done to improve recognition in handwriting for Windows 7.

    Microsoft has invested in pen based computing since the early 1990s and with the release of Windows Vista handwriting recognizers are available for 12 languages, including USA, UK, German, French, Spanish, Italian, Dutch, Brazilian Portuguese, and Chinese (Simplified and Traditional), Japanese and Korean. Customers frequently ask us when we plan to ship more languages and why a specific language is not yet supported. We are planning to ship new and improved languages for Windows 7, including Norwegian, Swedish, Finnish, Danish, Russian, and Polish, and the list continues to grow. Let’s explore what it takes to develop new handwriting recognizers.

    Windows has true cursive handwriting recognition, you don’t need to learn to write in a special way – in-fact, we’ve taught (or “trained” as we say) Windows the handwriting styles of thousands of people and Windows learns more about your style as you use it. Over the last 16 years we’ve developed powerful engines for recognizing handwriting, we continue to tune these to make them more accurate, faster and to add new capabilities, such as the ability to learn from you in Vista. Supporting a new language is much more than adding new dictionaries – each new language is a major investment. It starts with collecting native handwriting, next we analyze the data and go through iterations of training and tuning, and finally the system gets to you and continues to improve as you use it.

    Data Collection

    The development of a new handwriting recognizer starts with a huge data collection effort. We collect millions of words and characters of written text from tens of thousands of writers from all around the world.

    Before I describe our collection efforts, I would like to answer a question we are frequently asked: “Why can’t you just use an existing recognizer with a new dictionary?” One reason is that some languages have special characters or accents. But the overriding reason is because people in different regions of the world learn to write in different ways, even between countries with the same language like the UK and US. Characters that may look visually very similar to you can actually be quite different to the computer. This is why we need to collect real world data that captures exactly how characters, punctuation marks and other shapes are written.

    Setting up a data collection effort is challenging and time consuming because we want to ensure that we collect the “right kind of data”. We carefully choose our collection labs in the respective countries for which we develop recognizers.

    Before we start our data collection in the labs, we configure our collection tools, prepare documentation, and compile language scripts that will guide our volunteers through the collection process. Our scripts are carefully prepared by native speakers in the respective language to ensure that we collect only orthographically correct data, data from different writing styles, and data that covers all characters, numbers, symbols and signs that are relevant to a specific language. All of our scripts are proofread and edited before they are blessed to be used at the collection labs.

    Once our tools and scripts are ready, we open our labs and start to recruit volunteers to donate their handwriting samples. Our recruitment efforts ensure that we have balanced demographics such as gender, age, left handiness, and educational background that represent the majority of the population for that country.

    A supervisor at the lab instructs the volunteers to copy the text as it is displayed in the collection tool in their own writing style. What is important to note is that we want to collect writing samples that accurately represent the person’s natural way of writing. We therefore encourage volunteers to treat “pen and tablet” like “pen and paper”. If one of the volunteers tends to writes in big, curvy strokes, then we want to collect his/her big, curvy strokes during the collection session. High quality data in this context refers to data that was naturally written.

    Here is a snapshot of what our collection tool looks like:

    Figure 1. Collection tool.

    Figure 1: Collection Tool

    A collection session lasts between 60-90 minutes at which point our volunteer has donated a significant amount of handwritten data without feeling fatigued. The donated data is then uploaded and stored in our database at Microsoft ready for future use. The written samples contain important information like stroke orders, start- and end points, spacing, and other characteristics that are essential to train our new recognizer.

    Let’s take a look at some of our samples in our database to illustrate the great variation among ink samples:

    Figure 2.  Ink samples illustrating stroke order.

    Figure 2: Ink samples illustrating different stroke orders.

    The screenshot shows how three different volunteers inked the word “black”. The different colors are used to illustrate the exact stroke orders in which the word was written. Our first two volunteers used five strokes to write the word “black”; our third volunteer used four strokes. Please also note how our third volunteer used one stroke only to ink the letters “ck”, while our first volunteer used three strokes for the same combination of letters. All of this information is used to train our recognizers.

    Neural Network and Language Model

    Once we have collected a sufficient amount of inked data, we split our data into a training set, used by our development team, and a “blind” set, used by our test team. The training set is then employed to train the Neural Network, which is largely responsible for the magic that is taking place during the recognition process. Good, naturally written data is essential in developing a high quality recognizer; the recognizer can’t be any better than its training set. The more high quality data we feed into our Neural Network, the more equipped we are to handle sloppy cursive handwriting.

    Our Neural Network is a Time-Delay Neural Network (TDNN) that can handle connected letters of cursive scripts. A TDNN takes ink segments of preceding and following stroke segments into consideration when computing the probabilities of letters, digits and characters for each segment of ink. The output of the TDNN is powerful but not good enough when handwriting is sloppy. In order to come within reach of human recognition accuracy, we have to employ information that goes beyond the shape of the letter: we call this the Language Model context. The majority of this Language Model context comes in form of the lexicon, which is a wordlist of valid spellings for a given language. For many languages, this is the same lexicon that the spellchecker uses. The TDNN and the lexicon work closely together to compute word probabilities and output the top suggestions for the given input.

    Training the Neural Network is an involved process that takes time. We often experiment with borrowing data from other languages to increase the size of the training data with the ultimate goal to boost recognition accuracy. Borrowing characters from other languages does not always lead to success. As I mentioned above, stroke order, letter shape, writing styles and letter size can differ significantly from country to country and can have a negative impact on the performance of the TDNN. It often takes us several rounds of training, re-training and tuning before we find “the right formula” that will lead to high recognition accuracy.

    How do we know if we are headed in the right direction when we build a new recognizer? This is an important question that the test team and native speakers answer for us. The test team is responsible for generating our recognition accuracy metrics that reflect how good our recognizer is. These accuracy metrics are based on our blind test set which is the collected data that development could not use for training. In addition to our accuracy metrics, we work with native speakers in house and at our world-wide subsidiaries to get feedback and further input.

    Improving the recognizers through personalization

    In the previous paragraphs I have outlined how we develop high quality recognizers that can handle a wide variety of different writing styles. But there is more as each person can also train the recognizer his/her unique writing style. The training that is done to teach the recognizer a personal writing style is the same training that happens before Microsoft ships the product. The only difference is that we are now collecting unique training data from a specific person (and not that of thousands of people). We call this process “Personalization”.

    Figure 3: Personalization Wizard (Sentence module).

    Figure 3: Personalization Wizard (Sentence module).

    As the screenshots of our Personalization wizard illustrates, a person is asked to write the requested sentence to provide his/her ink samples. The more data a person donates during the personalization process, the better the recognizer will become. In addition to providing writing samples based on specified sentences, a person can target specific recognition errors, shapes, and characters that will all be used for training. Our Personalization feature is complex and offers a variety of different modules that enable a person to optimally tune the recognizer. We are proud to announce that Personalization will be available for all Vista languages and all new Windows 7 languages. We encourage you to use this feature to improve your recognition accuracy.

    We continue to work on improving our recognizers which also means that we are incorporating our customers feedback through online telemetry (anonymously, privately, voluntary, and opt-in). In Windows Vista we released a new feature called “Report Handwriting Recognition Errors”, which gives people the opportunity to submit those ink samples that the recognizer did not recognize correctly. After the person has corrected a word in the Tablet Input Panel (TIP), we enable a menu that allows a person to send the misrecognized ink together with its corrected version to our team.

    Here is a screenshot of what our error reporting tool looks like:

    Figure 4: With “Report Handwriting Recognition Errors” people can choose which of the misrecognized ink samples they want to submit.

    Figure 4: With “Report Handwriting Recognition Errors” people can choose which of the misrecognized ink samples they want to submit.

    We receive approximately 2000 error reports per week. Each error report is stored in our database before we analyze it and use it to improve our next generation of recognizers. As you can imagine, real world data is extremely helpful because it is only this type of data that can reveal shortcomings of our recognizers.

    We value and appreciate every single error report. Keep sending us your feedback, so that we can use it to improve the magic of our present and future recognizers.

    Thank you,

    – Yvonne representing the handwriting recognition efforts

  • Engineering Windows 7

    The "Ecosystem"

    • 86 Comments

    In the emails and comments, there are many topics that are raised and more often than not we see the several facets or positions of the issue. One theme that comes through is a desire expressed by folks to choose what is best for them. I wanted to pick up on the theme of choice since that is such an incredibly important part of how we approach building Windows—choice in all of its forms. This choice is really because Windows is part of an ecosystem, where many people are involved in making many choices about what types of computers, configuration of operating system, and applications/services they create, offer, or use. Windows is about being a great component of the ecosystem and what we are endeavoring to do with Windows 7 is to make sure we do a great job on the ecosystem aspects of building Windows 7.

    Ecosystem and choice go hand in hand. When we build Windows we think of a number of key representatives within the ecosystem beyond Windows:

    • PC makers
    • Hardware components
    • Developers
    • Enthusiasts

    Each of these parties has a key role to play in delivering on the PC experience and also in providing an environment where many people can take a PC and provide a tailored and differentiated experience, and where companies can profit by providing unique and differentiated products and services (and choice to consumers). For Windows 7 our goals have been to be clearer in our plans and stronger in our execution such that each can make the most of these opportunities building on Windows.

    PC Makers (OEMs) are a key integration point for many aspects of the ecosystem. They buy and integrate hardware components and pre-install software applications. They work with retailers on delivering PCs and so on. The choices they provide in form factors for PCs and industrial design are something we all value tremendously as individuals. We have recently seen an explosion in the arrival of lower cost laptops and laptops that are ultra thin. Each has unique combinations of features and benefits. The choice to consumers, while sometimes almost overwhelming, allows for an unrivaled richness. For Windows 7 we have been working with OEMs very closely since the earliest days of the project to develop a much more shared view of how to deliver a great experience to customers. Together we have been sharing views on ways to provide differentiated PC experiences, customer feedback on pre-loaded software, and partnering on the end-to-end measurement of the performance of new PCs on key metrics such as boot and shutdown.

    Hardware components include everything from the CPU through the “core” peripherals of i/o to add-on components. The array of hardware devices supported by Windows through the great work of independent hardware vendors (IHVs) is unmatched. Since Windows 95 and the introduction of plug-and-play we have continued to work to improve the experience of obtaining a new device and having it work by just plugging it in—something that also makes it possible to experience OS enhancements independent of releases of Windows. This is an area where some express that we should just support fewer devices that are guaranteed to work. Yet the very presence of choice and ever-improving hardware depends on the ability of IHVs to provide what they consider differentiated experiences on Windows, often independent of a specific release of Windows. The device driver model is the core technology that Microsoft delivers in Windows to enable this work. For Windows 7 we have committed to further stabilization of the driver model and to pull forward the work done for Windows Vista so it seamlessly applies to Windows 7. Drivers are a place where IHVs express their differentiated experience so the breadth of choice and opportunity is super important. I think it is fair to say that most of us desire the experience where a “clean install” of Windows 7 will “just work” and seamlessly obtain drivers from Windows Update when needed. Today with most modern PCs this is something that does “just work” and it is a far cry from even a few years ago. As with OEMs we have also been working with our IHV partners for quite some time. At WinHEC we have a chance to show the advances in Windows 7 around devices and the hardware ecosystem.

    Developers write the software for Windows. Just as with the hardware ecosystem, the software ecosystem supports a vast array of folks building for the Windows platform. Developers have always occupied a special place in the collective heart of Microsoft given our company roots in providing programming languages. Each release of Windows offers new APIs and system services for developers to use to build the software they want to build. There are two key challenges we face in building Windows 7. First, we want to make sure that programs that run on Windows Vista continue to run on Windows 7. That’s a commitment we have made from the start of the project. As we all know this is perhaps the most critical aspect of delivering a new operating system in terms of compatibility. Sometimes we don’t do everything we can do and each release we look at how we can test and verify a broader set of software before we release. Beta tests help for sure but lack the systematic rigor we require. The telemetry we have improved in each release of Windows is a key aspect. But sometimes we aren’t compatible and then this telemetry allows us to diagnose and address post-release the issue. If you’ve seen an application failure and were connected to the internet there’s a good chance you got a message suggesting that an update is available. We know we need to close the loop more here. We also have to get better at the tools and practices Windows developers have available to them to avoid getting into these situations—at the other end of all this is one customer and bouncing between the ISV and Microsoft is not the best solution.

    Our second challenge is in providing new APIs for developers that help them to deliver new functionality for their applications while at the same time provide enough value that there is a desire to spend schedule time using these APIs. Internally we often talk about “big” advances in the GUI overall (such as the clipboard or ability to easily print without developing an application specific driver model). Today functionality such as networking and graphics play vital roles in application development. We’ve talked about a new capability which is the delivery of touch capabilities in Windows 7. We’ve been very clear about our view that 64-bit is a place for developers to spend their energy as that is a transition well underway and a place where we are clearly focused.

    Enthusiasts represent a key enabler of the ecosystem, and almost always the one that works for the joy of contributing. As a reader of this blog there’s a good chance you represent this part of the ecosystem—even if we work in the industry we also are “fans” of the industry. There are many aspects to a Windows release that need to appeal the enthusiasts. For example, many of us are the first line of configuration and integration for our family, friends, and neighbors. I know I spent part of Saturday setting up a new wireless network for a school teacher/friend of mine and I’m sure many of you do the same. Enthusiasts are also the most hardcore about wanting choice and control of their PCs. It is enthusiasts sites/magazines that have started to review new PCs based on the pre-installed software load and how “clean” that load is. It is enthusiasts that push the limits on new hardware such as gaming graphics. It is enthusiasts who are embracing 64-bit Windows and pushing Microsoft to make sure the ecosystem is 64-bit ready for Windows 7 (we’re pushing of course). I think of enthusiasts as the common thread running through the entire ecosystem, participating at each phase and with each segment. This blog is a chance to share with enthusiasts the ins and outs of all the choices we have to make to build Windows 7.

    There are several other participants in the ecosystem that are equally important as integration points. The system builders and VARs provide PCs, software, and service for small and medium businesses around the world. Many of the readers of this blog, based on the email I have received, represent this part of the ecosystem. In many countries the retailers serve as this integration point for the individual consumer. For large enterprise customers the IT professionals require the most customization and management of a large number of PCs. Their needs are very demanding and unique across organizations.

    Some have said that the an ecosystem is not the best approach that we could do a much better job for customers if we reduce the “surface area” of Windows and support fewer devices, fewer PCs, fewer applications, and less of Windows’ past or legacy. Judging by the variety of views we've seen I think folks desire a lot of choice (just in terms of DPI and monitor size).  Some might say that from an engineering view less surface area is an easier engineering problem (it is by definition), but in reality such a view would result in a radical and ever-shrinking reduction in the choices available for consumers. The reality is engineering is about putting constraints in place and those constraints can also be viewed as assets, which is how we view the breadth of devices, applications, and “history” of Windows. The ecosystem for PCs depends on opportunities for many people to try out many ideas and to explore ideas that might seem a bit crazy early on and then become mainstream down the road. With Windows 7 we are renewing our efforts at readying the ecosystem while also building upon the work done by everyone for Windows Vista.

    The ecosystem is a pretty significant in both the depth and breadth of the parties involved. I thought for the purposes of our dialog on this blog it is worth highlighting this up front. There are always engineering impacts to balancing the needs each of the aspects of the ecosystem. Optimizing entirely along one dimension sometimes seems right in the short term, but over any period of time is a risky practice as the benefits of a stable platform that allows for differentiation is something that seems to benefit many.

    With Windows 7 we committed up front to doing a better job as part of the PC ecosystem.

    Does this post reflect your view of the ecosystem? How could we better describe all those involved in helping to make the PC experience amazing for everyone?

    --Steven

  • Engineering Windows 7

    More Follow up to discussion about High DPI

    • 48 Comments

     

    Excellent!  What a fun discussion we’ve been having on High DPI.  It has been so enriching that Ryan wrote up a summary of even more of the discussion.  Thanks so much!  --Steven

    There have been quite a few comments posted regarding high DPI, along with some lively discussion. Most of what has been said has been good anecdotal examples which are consistent with the data we have collected. For the areas where we didn’t have data, the comments have helped to validate many of our assumptions for this group. It is also clear that there are some areas of this feature which are confusing, and in some cases there is a bit of “myth” around what is ideal, what is possible, and what is there. This follow up post is mostly to summarize what we have heard, and to provide some details around the areas where there has been a bit of confusion.

    Here is a list of our top “assumptions” which have been echoed by the comments posted:

    • Most people adjust the screen resolution either to get larger text, or because it was an accident
    • There is a core of people who know about high DPI and who use it
    • Some people prefer more screen real-estate while others people prefer larger UI
    • Discoverability of the DPI configuration is a concern for some
    • App compat is a common issue, even a “deal breaker” in some cases
    • IE Scaling is one of the top issues listed (see IE8 which fixes many of these!)
    • Lots of complexities/subtleties and it is pretty hard to explain this feature to most people

    There have also been a number of areas where there has been a bit of confusion:

    • Is it true that if everything were vector-based, these problems would all go away?
    • Shouldn’t this just work without developers having to do anything?
    • How is this different from per-application scaling like IE zooming?
    • Should DPI be for calibration or for scaling?

    Most of these topics have been covered to some degree in the comments, but since there has been so much interest, we decided to go into a bit more details around a few of the top issues/concerns.

    Vector Graphics vs. Raster Graphics

    With PCs, there is always the hope of a “silver bullet” technology which solves all problems making life easy for users, developers, and designers across the board. As an example, some of the comments to the original posting suggested that if we just made the OS fully vector based, these scaling problems would go away. It turns out that there are several issues with using vector graphics which are worth explaining.

    The first issue is that oftentimes when an icon gets to be small in size, it is better to use an alternate representation so that the meaning is clearer. Notice the icons below. In this case, the designer has chosen a non-perspective view for the icon when it is rendered at it’s smallest size.

    Example of the same icon treated differently depending on size.

    This is because the designer felt that the information expressed by the icon was clearer with a straight-on view at the smallest size. Here is another example illustrating this point:

    Additional example of icons treated differently as the size changes.

    Of course, this means that the designer must create multiple versions of the source image design, so there is additional complexity. The point here is that there is a tradeoff that must be made and the tradeoff is not always clear.

    Even when one vector source is used, it is common to have size-dependent tweaking to make sure that the result is true to what the designer had in mind. Imagine a vector graphic which has a 1-pixel line at 128x128 that gets scaled down by 1/2 to 64x64. The display has no way of rendering a perfect 1/2 pixel line! In many cases the answer is that the renderer will “round” to a nearby pixel line. However, doing this inherently changes the layout of the sub-elements of the image. And there is the question of, “which pixel line to round to?” If the designer does not hand tune the source material, it will be up to the rendering engine to make this decision, and that can result in undesirable effects. One could say that this should therefore define rules about what elements should be use in a vector, but that only further restricts what concepts can be represented.

    It turns out that even the TrueType fonts which we use in Windows are hand-tuned with size-dependant information in order to make the result as high quality as possible. Most of the TrueType rendering pipeline is based on algorithmic scaling of a vector source, but there are size-dependent, hand-coded “hints” in TrueType which the designer specifies to direct the system how to handle edge cases, such as lines falling between pixel boundaries. Here is a link describing this in more detail: http://blogs.msdn.com/fontblog/archive/2005/10/26/485416.aspx

    It is not even true that vector graphics are necessarily smaller in size (especially for small images). Most designers create graphics using an editor which builds up an image using many layers of drawings and effects. With bitmap based graphics, designers will “flatten” the layers before adding it to a piece of software. Most designers today pay little attention to the size of the layers because the flattening process essentially converts it to a fixed size based on the image resolution. With vector graphics, there is no such flattening technique so designers need to carefully consider the tools that they use and the effects that they add to make sure that their icon is not extremely large. I spent some time with one of our designers who had a vector graphic source for one of our bitmaps in Windows and the file was 622k! Of course that file size is fixed regardless of the resulting resolution, but that huge file flattens into this 23k PNG bitmap.

    Of course, a hand-tuned vector based representation of this could be probably made smaller if the size constraints were part of the design time process. But that would be an additional constraint put on the designer, and one which they would need to learn how to do well.

    How do we help developers?

    For applications that need to carefully control the layout and graphics, or scale the fidelity of the images based on the available resolution, having a way of specifying specific pixel locations for items is important to get the best result. This is as true on the Mac as it is on the PC (see http://developer.apple.com/releasenotes/GraphicsImaging/RN-ResolutionIndependentUI/). There is often a belief that if we just provided the right tools or the right framework then all these problems would go away. We all know that each set of tools and each framework have their own set of tradeoffs (whether that is Win 32, .net, or HTML). While there is no silver bullet, there are things we can do to make writing DPI aware applications easier for developers. As an example, there are two important upcoming ecosystem events in which we will be talking in detail about High DPI. We will also have materials which we will be making available to developers which will help educate them on how to convert existing applications to be DPI aware. The first event is Microsoft Professional Developer Conference, where we will talk about High DPI as part of the talk “Writing your Application to Shine on Modern Graphics Hardware (link)”. The second is the Windows Hardware Engineering Conference, in which we will be discussing high DPI as part of the “High Fidelity Graphics and Media” track (link).

    Help with App Compat Issues

    There have been several posts on app compat and high DPI (for example bluvg’s comment). There have also been comments talking about the complexity and understandability of the High DPI configuration. In some cases the app compat issues can be mitigated by enabling or disabling the automatic scaling feature. This can be changed globally by going to the DPI UI, clicking the button labeled “Custom DPI” and changing the checkbox labeled, “Use Windows XP style DPI scaling”. When this checkbox is unchecked, applications which are not declared to be DPI aware are automatically scaled by the window manager. When it is checked, automatic scaling is disabled globally. It is interesting to note that for DPI settings < 144 DPI, this box is checked by default, and for DPI settings >= 144 it is unchecked by default. In some cases, changing the default settings can result in a better experience depending on the applications that you use and your DPI setting. It is also interesting to note that automatic scaling can be turned off on a per application basis using the Vista Program Compatibility properties. Here is a link for more info on how to do that: http://windowshelp.microsoft.com/Windows/en-US/help/bf416877-c83f-4476-a3da-8ec98dcf5f101033.mspx. (Look at the section for “Disable Display Scaling on high DPI settings”.)

    How is DPI scaling different from per-application scaling (like IE Zoom?)

    A typical application UI is made up of a content window and a frame UI. The frame UI is where the menu items and toolbar buttons are. The content window is the “document view”. For example, in IE the content window is the actual webpage. It turns out the code required to support high DPI scaling for the content windows is the same code required to do the zooming feature. In fact, for the content window, IE8 simply uses the high DPI setting to configure the default zoom factor (see DPI Scaling and Internet Explorer 8 for more details). However, high DPI has the additional side effect of scaling the size of the frame UI. Since most people use the scaling feature to make text larger to be more readable, it makes sense to scale the frame UI as well, since the text in the menu items and toolbar tooltips will also scale. In a sense if there is per-application scaling that is really about the content area, and applications will support that as developers see the customer need. DPI scaling makes the UI elements of all applications render similarly.

    Shouldn’t DPI really be used for calibrating the screen (so “an inch is an inch”)?

    Some have suggested that we should just use high DPI as a way to calibrate the screen so that the physical size of an object is the same regardless of the display. This makes a ton of sense from a logical perspective. The idea would be to calibrate the display so “in inch is an inch”. We thought about doing this, but the problem is that it does not solve the end user need of wanting to have a way to configure the size of the text and the UI. If we then had a separate “global scale” variable, this would mean that application developers would need to pay attention to both metrics, which would add complexity to the developer story. Furthermore, if a user feels that the UI is too small, should it be up to the developer or the user to set the preference of how big the UI should be? In other words if the designer wants the button to be an inch, but the user wants the button to be 1.5 inches to make it easier to use, who should decide? The way the feature works today, it is up to the user to set their preference, but it is up to the application developer to make sure that the user preference is honored.

    Once again, it is really great to see so much interest in high DPI. We certainly have some challenges ahead of us, but in many ways it seems like the ecosystem is ripe for this change. Hopefully this follow up post helped to consolidate some of feedback which we have heard on the previous post and explain some of the complexities of this feature in more detail.

    --Ryan Haveson

  • Engineering Windows 7

    Product Planning for Windows...where does your feedback really go?

    • 75 Comments

    Ed. Note:  Allow me to introduce Mike Angiulo who leads the Windows PC Ecosystem and Planning team.  Mike’s team works closely with all of our hardware and software partners and leads the engineering team's product planning and research efforts for each new version of Windows.  --Steven 

    In Windows we have a wide variety of mechanisms to learn about our customers and marketplace which all play roles in helping us decide what we build.  From the individual questions that our engineers will answer at WinHEC and PDC to the millions of records in our telemetry systems we have tools for answering almost every kind of question around what you want us to build in Windows and how well it’s all working.  Listening to all of these voices together and building a coherent plan for an entire operating system release is quite a challenge – it can feel like taking a pizza order for a billion of your closest friends!

     

    It should come as no surprise that in order to have a learning organization we need to have an organization that is dedicated to learning.  This is led by our Product Planning team, a group of a couple dozen engineers that is both organized and sits with the program managers, developers and testers in the feature teams.  They work throughout the product cycle to ensure that our vision is compelling and based on a deep understanding of our customer environment and is balanced with the business realities and competitive pressures that are in constant flux.  Over the last two years we’ve had a team of dozens of professional researchers fielding surveys, listening to focus groups, and analyzing telemetry and product usage data leading up to the vision and during the development of Windows 7 – and we’re not done yet.  From our independently run marketing research to reading your feedback on this blog we will continue to refine our product and the way we talk about it to customers and partners alike.  That doesn’t mean that every wish goes answered!  One of the hardest jobs of planning is in turning all of this data into actionable plans for development.  There are three tough tradeoffs that we have been making recently.

     

    First there is what I think of as the ‘taste test challenge.’ Over thirty years ago this meme was introduced in a famous war between two colas.  Remember New Coke?  It was the result of overemphasizing the very initial response to a product versus longer term customer satisfaction.  We face this kind of challenge all the time with Windows – how do we balance the need for the product to be approachable with the need for the product to perform throughout its lifecycle?  Do you want something that just boots as fast as it can or something that helps you get started?  Of course we can take this to either extreme and you can say we have – we went from c:\ to Microsoft Bob in only a matter of a decade.  Finding the balance between a product that is fresh and clean out of the box and continues to perform over time is a continual balance.  We have ethnographers who gather research that in some cases starts even before the point of purchase and continues for months with periodic visits to learn how initial impressions morph into usage patterns over the entire lifecycle of our products.

     

    Second we’re always looking out for missing the ‘trees for the forest.’ By this I mean finding the appropriate balance between aggregate and individual user data.  A classic argument around PCs has always been that a limited subset of actions comprises a large percentage of the use case.  The resulting argument is that a limited function device would be a simpler and more satisfying experience for a large percentage of customers!  Of course this can be shown to be flawed in both the short term and the long term.  Over the long term this ‘common use case’ has changed from typing & printing to consuming and burning CDs and gaming to browsing and will continue to evolve.  Even in the short term we have studied the usage of thousands of machines (from users who opt-in of course) and know that while many of the common usage patterns are in fact common, that nearly every single machine we’ve ever studied had one or more unique applications in use that other machines didn’t share!  This long tail phenomena is very important because if we designed for the “general case” we’d end up satisfying nobody.  This tradeoff between choice and complexity is one that benefits directly from a rigorous approach to studying usage of both the collective and individual and not losing sight of either.

     

    Third is all about timing.  Timing is everything.  We have an ongoing process for learning in a very dynamic market – one that is directly influenced by what we build.  The ultimate goal is to deliver the ultimate in software & hardware experiences to customers – the right products at the right time.  We’ve seen what happens if we wait too long to release software support for a new category (we should have done a better job with an earlier Bluetooth pairing standard experience) and what also happens when we ship software that the rest of the ecosystem isn’t ready for yet.  This problem has the dimension of working to evangelize technologies that we know are coming, track competing standards, watch user scenarios evolve and try to coordinate our software support at the same time.  To call it a moving target isn’t saying enough!  It does though explain why we’re constantly taking feedback, even after any given version of Windows is done.

     

    These three explicit tradeoffs always make for lively conversation – just look at the comments on this blog to date!  Of course being responsive to these articulated needs is a must in a market as dynamic and challenging as ours.  At the same time we have to make the biggest tradeoff of them all – balancing what you’re asking for today with what we think you’ll be asking for tomorrow.  That’s the challenge of defining unarticulated needs.  All technology industries face this tradeoff whether you call it the need to innovate vs. fix or subscribe to the S curve notion of discontinuities.  Why would two successful auto companies, both listening to the same market input, release the first commercial Hummer and first hybrid Prius in the same year?  It wasn’t that 1998 was that confusing, it was that the short term market demands and the long term market needs weren’t obviously aligned.  Both forces were visible but readily dismissed – the need for increased off road capacity to negotiate the crowded suburban mall parking lots and the impending environmental implosion being predicted on college campuses throughout the world.  We face balancing acts like this all the time.  How do we deliver backwards compatibility and future capability one release at a time?  Will the trend towards 64 bit be driven by application scenarios or by 4GB machines selling at retail?

     

    We have input on key tradeoffs.  We have a position on future trends.  That’s usually enough to get started on the next version of the product and we stay connected with customers and partners during throughout development to keep our planning consistent with our initial direction but isn’t enough to know we’re ready to ship.   Really being done has always required some post engineering feedback phase whether it’s a Community Technical Preview, Technology Adoption Program or a traditional public Beta.  The origin of Beta testing and even the current definition of the term aren’t clear.  Some products now seem to be in Beta forever!  We work to find the best possible timing for sharing the product and gathering final feedback.  If we release it too early it’s usually not in any shape to evaluate, especially with respect to performance, security, compatibility and other critical fundamentals.  If we release too late we can’t actually take any of the feedback you give us, and I can’t think of a worse recipe for customer satisfaction than to ask for feedback which gets systematically ignored.  I was just looking at another software “feedback” site where a bunch of the comments just asked the company to “please read this site!”   For Windows 7 we’re going to deliver a Beta that is good enough to experience and leaves us enough time to address areas where we need more refinement.  This blog will be an important part of the process because it will provide enough explanation and content and guidance to help you understand the remaining degrees of freedom, some of the core assumptions that went into each area and will structure our dialogue so that we can listen and respond to as much feedback as you’re willing to give.  Some of this will result in bugs that get fixed, some will result in bugs in drivers or applications that we help our partners fix.  And of course sometimes we’ll just end up with healthy debate – but even in this case we will be talking, we will respond to constructive comments, bugs and ideas and we will both be starting that conversation with more context than ever.  So please do keep your comments coming.  Please participate in the Customer Experience Improvement program.  Give us feedback at WinHEC and PDC and in the newgroups and forums – we’re listening!  

     

    Thanks,

    - Mike

     

  • Engineering Windows 7

    Showcasing Windows 7 Platform with Applets

    • 29 Comments

    About every decade we make the big decision to update what we refer to as the applets (note we’ll use applet, application, program, and tool all interchangeably as we write about these) in Windows—historically Calc (Calculator), Paint (or MS Paint, Paint Brush) and WordPad (or Write), and also the new Sticky Notes applet in Windows 7. As an old-timer, whenever I think of these tools I think of all the history behind them and how they came about. I’m sure many folks have seen the now “classic” video of our (now) CEO showing off Windows to our sales force (the last word of this video is the clue that this video was done for inside Microsoft). Windows 7 seems like a great time to update these tools. The motivation for updating the applets this release is not the 10-year mark or just time to add some applet-specific features, but the new opportunities for developers to integrate their applications with the Windows 7 desktop experience. While many use the applets as primary tools, our view of these is much more about demonstrating the overall platform experience and to provide guidance to developers about how to integrate and build on Windows 7, while at the same time providing “out of box” value for everyone. There’s no real “tension” over adding more and more features to these tools as our primary focus is on showing off what’s new in Windows—after all there are many full-featured tools available that provide similar functionality for free. So let’s not fill the comments with request for more bitmap editing features or advanced scientific calculator features :-).

    The APIs discussed in this post are all described on MSDN in the updated developer area for Windows 7 where you can find the Windows 7 developer guide. Each of the areas discussed is also supported by the PDC and WinHEC sessions on those sites.

    This post was written by several folks on our applications and gadgets team with Riyaz Pishori, the group program manager, leading the effort. --Steven

    This blog post discusses some of the platform innovations in Windows 7 and how Windows 7 applications have adopted and showcased these innovations. This post details some of the platform features that developers and partners can expect in Windows 7 and how Windows 7 programs have showcased these innovations. This post also discusses how applications have been given a facelift both in terms of their functionality as well as their user experience by focusing on key Windows design principles and platform innovations. Finally, this post can serve as a pointer or guide to application developers and ISVs to get themselves familiar with some of the key new Windows platform innovations, see them in action and then figure out how they can build on these APIs for their own software.

    The post is organized by each subsystem, and how Windows applets are using that particular subsystem.

    Windows Ribbon

    The Windows Ribbon User Interface is the next generation rich, new user interface for Windows development. The Windows Ribbon brings the now familiar Office 2007 Ribbon user interface to Windows 7, making it available to application developers and ISVs.

    There are several advantages of adopting the Windows Ribbon user interface, many of which have been talked about in the Office 2007 blogs. The Ribbon provides a rich, graphical user interface for all commands in a single place, without the need to expose various functions and commands under different menus or toolbars. The Ribbon UI is direct and self-explanatory, and has a labelled grouping of logically related commands. While using an application that is built on the Ribbon UI platform, the user only needs to focus on his workflow and the context of his task, rather than worry about where a particular function is located or accessible. The Ribbon UI also takes care of layout and provides consistency as compared to toolbars which the user can customize in terms of their sizes, location and contents. It also has built-in and improved keyboard accessibility, and making the application DPI and theme aware becomes easier by using the Ribbon. Finally, development and changes to the user interface is very quick and rapid due to the XML-markup based programming model for the Ribbon User Interface.

    Paint and Wordpad are two of the first consumers of the Windows Ribbon UI Platform. In Windows 7, both these applications are enhanced with a set of new features, and the user interface of these applications also required to be brought up to the Windows 7 experience and standards. The Windows Ribbon UI is a great fit for these applications to revamp their user experience and make it consistent, and make these applications rich, fun and easy to use. The tasks and commands in these applications were amenable to be applied to the Ribbon UI framework, and it also served as an opportunity for popular native Windows applications to showcase the Windows Ribbon UI platform to consumers, as well as developers and ISVs. Many has asked about the Windows Explorer and IE also using the ribbon, which we did not plan on for Windows 7. Our Windows 7 focus was on the platform and demonstrating the platform for document-centric applications such as Paint and Wordpad.

    Both these applications showcase several elements of the Windows UI Ribbon. The Application Menu of both Paint and Wordpad exposes Application related commands that are typically available thru the ‘File’ menu of an application. Both the applications have a core tab set that consists of ‘Home’, which exposes most of the commands in the application, and ‘View’ which exposes the image or document viewing options in the application. The commands in both these tabs are laid out logically in groups of related functionality.

    A quick access toolbar (QAT) is provided by both Paint and Wordpad, which comes with certain defaults like Save, Undo and Redo that are meaningful to the application. The user can customize the QAT by using the QAT drop-down, or right-click on any command or group in the ribbon and add it to the QAT.

    Several ribbon commands are used in both these applications, like command buttons, split buttons, galleries, drop-downs, check boxes and toggle buttons.

    Paint and WordPad ribbon

    Paint Application Menu

    Further, both applications provide a ‘Print preview’ mode which shows a print preview of the image or the document in context. In a mode, all the core tabs are removed and only the mode is displayed for the user to interact with. On exiting a mode, the user is returned to the core tab set.

    Paint also exposes a contextual tab for the Text tool, which is displayed only when a text control is drawn on canvas. A contextual tab shown next to the core tab set when the text tool is in focus, and removed when the text is applied to the image on the canvas. The contextual tab set contains the tools that are specific and relevant only to the text tool.

    Both the applications provide live previews through ribbon galleries, for example the font size and font name for Wordpad and Paint while formatting text, bullets and lists in Wordpad, and color selection, outline size selection and outline and fill styles for shapes in Paint. A live preview allows the user to see the changes instantaneously on mouse hover, and then apply those changes on a selection. These previews are one of the key elements of the ribbon UI and demonstrate why the metaphor is much more than a “big toolbar” but a new interaction style.

    By adopting the Ribbon User Interface, both the applications inherit built-in keyboard accessibility support using ribbon Keytips, have tooltips on all commands, and have ready support for DPI and Windows themes.

    Paint and Wordpad can serve as examples of how the Ribbon UI can be easily used in MFC applications. The Windows Ribbon presents new opportunities and options for developers and ISVs to develop applications with the Ribbon User Interface. The Windows Scenic Ribbon programming model and architecture emphasizes the separation of the markup file and the C++ code files to help developers decouple the presentation and customization of the UI from the underlying application code. The platform also promotes developer-designer workflow, where the developer can focus on the application logic, while the designer can work on the UI presentation and layout. The ribbon UI is a significant investment for us and you should expect to see us continue to use it more throughout Microsoft, including an implementation in the .NET Framework as was demonstrated by Scott Guthrie at the PDC, which will be built on Windows 7 natively in the future.

    Multi-touch platform

    Windows 7 provides support for multi-touch input data, as well as supporting multi-touch in Win32 via Windows messages. The investments in the multi-touch platform include the developer platform that exposes touch APIs to applications, enhancing the core user interface in Windows 7 to optimize for touch experiences, and providing multi-touch gestures for applications to consume. Developers on Windows 7 can build on these APIs decide on the appropriate level of touch support they would like to provide in their software.

    Wordpad enhances the document reading experience by using the multi-touch platform and using the zoom and pan gestures. Zooming, panning and inertia lets the user get to a particular piece of content very quickly in an intuitive fashion. By using the zoom gesture, the user can zoom in or zoom out of the document which is akin to using the zoom slider at the right of the Wordpad status bar. On multi-touch capable hardware, the user can zoom in and out of the document by placing his fingers anywhere within the document window and executing the zoom gesture. Wordpad also supports the pan gesture to pan thru the pages of a document that is open in Wordpad. By executing the pan gesture, the user can scroll-down or scroll-up a document similar to using the scroll bar of the Wordpad application.

    In Paint multi-touch data is used to allow users to paint with multiple fingers. It is an example of an application that allows multi-touch input without the usage of gestures. For Paint’s functionality, providing multiple finger painting ability was more compelling and enriching than allowing for zoom, pan, rotate or other gestures that act on the picture in a read-only mode and not in an edit-mode. New brushes in Paint are multi-touch enabled, and they handle touch inputs via multiple fingers and allow the user to simultaneously draw strokes on canvas on finger drag. These brushes are also pressure-sensitive, thereby providing a realistic experience with touch by varying the stroke width based on the pressure on the screen. While adopting the multi-touch platform to enhance the end-user experience in Paint, conscious design decisions were made to preserve the single touch experience for functionalities where a multi-touch scenario does not apply such as the color picker, magnifier and text tool.

    By building with the multi-touch APIs, Paint and Wordpad have created more natural and intuitive interfaces on touch-enabled hardware and show “out of the box” how different capabilities can be exposed by developers in their software.

    Taskbar

    Sticky Notes (or just Notes) is an extension of a TabletPC applet available in Windows 7. One of the things which was key to the Notes experience on the desktop was to have the ability to quickly take all the notes away and get them back, but still making sure it is really easy to create a new note. We achieved this by having a single top level window for the sticky notes application. You can minimize all your notes and view a stack of notes in the preview on the command bar with a single click. The stacked preview has been achieved using the new thumbnail preview APIs that enable apps to override the default taskbar previews that are essentially a redirected snapshot of the top level application window, and provide their own. This enables applications to decouple their previews from the top level application window and provide a more productive preview based on the scenario. For example, this was very valuable in Sticky Note scenarios where a quick peek at a note that was last touched provides for quite a productive workflow. Taskbar also caches the preview thumbnail images so once the preview is given to the Taskbar, the application does not need to keep it around – the application does however need to send an updated preview whenever it changes.

     Sticky Notes preview on Taskbar

    Another nifty customization end-point on the task bar is the destination menu (aka jumplist). This menu comes up when a user right clicks on the application in the taskbar or hovers over the application icon in the Start Menu. The Sticky Notes application does not have a single main application window – this makes the application feel really light weight and fits in well into the Windows 7 philosophy of creating simple and powerful user experiences. The challenge then was exposing functionality such as the ability to create a new note from a central location or potentially other custom “tasks”. The destination menu helped exposing these scenarios in a simple yet discoverable way.

    Sticky Notes destination menu

    Sticky Notes destination menu

    The new taskbar functionality and extensibility built in that has the potential to make it a lot easier for people to work with applications/scenarios in a more productive and efficient manner when developers integrate their software with the Windows desktop.

    Search

    Building on the long history of Search in Windows and the significant enhancements in Windows 7, there are APIs available to developers to deeply integrate their content types with the desktop search user experience affordances in Windows 7. Sticky Notes shows one example of how these APIs can be used.

    The Sticky Notes application now allows users to get back to their notes by simply searching for content through Windows Inline search within the start menu. This is in line with allowing users to reach the relevant note as quickly as possible even when the application is closed. Even though search could be done for both Text and Ink content, it is restricted to text because of lower success rates with varied handwriting styles in ink. The application registers a protocol handler that generates a URL for each Note. The Sticky Notes Filter handler gets asked for the content associated with each note that is then indexed by the Search infrastructure. These indexes are then used to perform a quick lookups when the user searches the Search interfaces provided by the Windows Shell. When a user clicks on a result, Search invokes the associated application with the URL corresponding to the one that the protocol handler had generated that the Filter handler associated with the content it sent to the Search indexer.

     

    Search from start menu and a result displayed from Sticky Notes

    The search platform also has the ability to enable the filter handler to specify the language of each chunk of content passed on to it that overrides the default Search heuristics used to compute the language - this increases Search accuracy manifold and thereby enhances internationalization support of the entire ecosystem.

    The reason Sticky Notes implemented a protocol handler in addition to a Filter handler was because it implements its own integrated storage schema on top of the Windows File system - all the notes are represented by a single .snt file. The protocol handler generates URL's to individual entities (in this case - notes); the filter handler picks out content for each of these URL's and gives it to Search for indexing.

    This demonstrates the ease in which applications can plug into the search platform in Windows 7, and add search handlers which can enhance the overall user experience from the App as well as the platform.

    Real-Time Stylus

    Real-Time Stylus (RTS) is infrastructure that provides access to the stylus events coming from pen or touches digitizers. It provides information about strokes and points and provides access to ink-related events. Using RTS, applications can get access to stylus information and develop compelling end-user scenarios and experiences.

    Sticky Notes now allows the users to Ink and Type on notes depending on the availability of inking hardware. Users can use keyboard input to type on notes and use the stylus to ink on notes. Though the experience has been designed keeping in mind that users will either use either ink or text on a particular note, it does allow users to ink and type on the same note. However these surfaces are maintained agnostic to each other. Sticky Notes also auto-grows the note while inking on the note, providing a real-time experience of the note adjusting its size to fit the inked content.

    Real Time Stylus (RTS) is used for inking features provided in Sticky Notes. Inking gestures are also available to applications, and the scratch out gesture has been implemented in Sticky Notes to delete content.

    Scratch gesture

    Sticky Note with both typed text and inked content

    In addition, Paint uses RTS to get a stream of positional input from mouse, stylus or touch which are used for drawing strokes on canvas. Paint also captures additional input variables like pressure and touch surface area when such input is available from the digitizer, and maps these inputs into the stroke algorithms that are used to generate Paint strokes on canvas. Using this algorithm, the user is able to modulate stroke width and other parameter based on the pressure or touch area on canvas.

    Paint with new brush strokes

    Using RTS allows the development of applications and software that can build on the inking platform and provide ways to interact with the application that go beyond mouse or keyboard. Using stylus, inking and gestures, developers can create interactive experiences for end-users.

    Restart and Recovery

    The Windows Error Reporting (WER) infrastructure is a set of feedback technologies that is built into Windows 7 and other earlier versions of Windows client and server. WER allows applications to register for application failures and capture this data for end-users who agree to report it. This data can be accessed and analyzed and can be used to monitor error trends and download debug information to help developers and ISVs determine the root cause for application failures.

    WER can add value to software development at various stages: during development, during beta testing by getting early feedback from end-users, after the release of the product by analysing and prioritizing the top fixes, and at end of life of the product.

    Related to failure recovery, Applications can also register with WER for restart on application of a Windows patch that terminates the application and on application of an update that reboots the computer, as well as failure caused due to an application crash or hang or not responding state. Applications can optionally register for recovery of lost data, can develop their own mechanism for recovery.

    Several Windows applications adopt the WER infrastructure to collect and analyze data. Calculator, Paint and Wordpad register for restart and additionally recover the current data in the sessions of the application that were running. Sticky Notes also registers for restart and recovery, and returns the user to the set of notes open on the desktop. Using WER, end-users would allow Windows to capture and collect problem data and then would be returned to the applications in the same state that they were in earlier.

    As you can see, our primary effort for the applets in Windows 7 is to showcase some of the new platform APIs and innovations available to developers. As you get to try out these applications you will see that while showcasing the Windows 7 platform innovations, we have also added some commonly requested features and functionality. Some of them are: Check and correct, calculation modes and templates in Calculator, New brushes, shapes and multi-touch support in Paint, Open standards support in Wordpad and Ink and text, taskbar and search integration in Sticky notes. Maybe we won’t wait 10 years to update these again :-)

    --Riyaz Pishori and team

  • Engineering Windows 7

    Organizing the Windows 7 Project

    • 26 Comments

    Hi Jon DeVaan here.

    Steven wrote about how we organize the engineering team on Windows which is a very important element of how work is done. Another important part is how we organize the engineering project itself.

    I’d like to start with a couple of quick notes. First is that Steven reads and writes about ten times faster than I do, so don’t be too surprised if you see about that distribution of words between the two of us here. (Be assured that between us I am the deep thinker :-). Or maybe I am just jealous.) Second is that we want do want to keep sharing the “how we build Windows 7” topics since that gives us a shared context for when we dive into feature discussion as we get closer to the PDC and WinHEC. We want to discuss how we are engineering Windows 7 including the lessons learned from Longhorn/Vista. All of these realities go into our decision making on Windows 7.

    OK, on to the tawdry bits.

    Steven linked last time to the book Microsoft Secrets, which is an excellent analysis of what I like to call version two of the Microsoft Engineering System. (Version one involved index cards and “floppy net” and you really don’t want to hear about it.) Version two served Microsoft very well for far longer than anyone anticipated, but learning from Windows XP, the truly different security environment that emerged at that time and from Longhorn/Vista, it became clear that it was time for another generational transformation in how we approach engineering our products.

    The lessons from XP revolve around the changed security landscape in our industry. You can learn about how we put our learning into action by looking at the Security Development Lifecycle, which is the set of engineering practices recommended by Microsoft to develop more secure software. We use these practices internally to engineer Windows.

    The comments on this blog show that the quality of a complete system contains many different attributes, each of varying importance to different people, and that people have a wide range of opinions about Vista’s overall quality. I spend a lot of time on core reliability of the OS and in studying the telemetry we collect from real users (only if they opt-in to the Customer Experience Improvement Program) I know that Vista SP1 is just as reliable as XP overall and more reliable in some important ways. The telemetry guided us on what to address in SP1. I was glad to see one way pointed out by people commenting about sleep and resume working better in Vista. I am also excited by the prospect of continuing our efforts (we are) using the telemetry to drive Vista to be the most reliable version of Windows ever. I add to the list of Vista’s qualities successfully cutting security vulnerabilities by just under half compared to XP. This blog is about Windows 7, but you should know that we are working on Windows 7 with a deep understanding of the performance of Windows Vista in the real world.

    In the most important ways, people who have emailed and commented have highlighted opportunities for us to improve the Windows engineering system. Performance, reliability, compatibility, and failing to deliver on new technology promises are popular themes in the comments. One of the best ways we can address these is by better day-to-day management of the engineering of the Windows 7 code base—or the daily build quality. We have taken many concrete steps to improve how we manage the project so that we do much better on this dimension.

    I hope you are reading this and going, “Well, duh!” but my experience with software projects of all sizes and in many organizations tells me this is not as obvious or easily attainable as we wish.

    Daily Build Quality

    Daily quality matters a great deal in a software project because every day you make decisions based on your best understanding of how much work is left. When the average daily build has low quality, it is impossible to know how much work is left, and you make a lot of bad engineering decisions. As the number of contributing engineers increases (because we want to do more), the importance of daily quality rises rapidly because the integration burden increases according to the probability of any single programmer’s error. This problem is more than just not knowing what the number of bugs in the product is. If that were all the trouble caused then at least each developer would have their fate in their own hands. The much more insidious side-effect is when developers lack the confidence to integrate all of the daily changes into their personal work. When this happens there are many bugs, incompatibilities, and other issues that we can’t know because the code changes have never been brought together on any machine.

    I’ve prepared a graph to illustrate the phenomenon using a simple formula predicting the build breaks caused by a 1 in 100 error rate on the part of individual programmers over a spectrum of group sizes (blue line). A one percent error rate is good. If one used a typical rate it would be a little worse than that. I’ve included two other lines showing the build break probability if we cut the average individual error rate by half (red line) and by a tenth (green line). You can see that mechanisms that improve the daily quality of each engineer impacts the overall daily build quality by quite a large amount.

     image

    For a team the size of Windows, it is quite a feat for the daily builds to be reliable.

    Our improvement in Windows 7 leveraged a big improvement in the Vista engineering system, an investment in a common test automation infrastructure across all the feature teams of Windows. (You will see here that there is an inevitable link between the engineering processes themselves and the organization of the team, a link many people don’t recognize.) Using this infrastructure, we can verify the code changes supplied by every feature team before they are merged into the daily build. Inside of the feature team this infrastructure can be used to verify the code changes of all of the programmers every day. You can see in the chart how the average of 40 programmers per feature team balances the build break probability so that inside of a feature team the build breaks relatively infrequently.

    For Windows 7 we have largely succeeded at keeping the build at a high level of quality every day. While we have occasional breaks as we integrate the work of all the developers, the automation allows us to find and repair any issues and issue a high quality build virtually every day. I have been using Windows 7 for my daily life since the start of the project with relatively few difficulties. (I know many folks are anxious to join me in using Windows 7 builds every day—hang in there!)

    For fun I’ve included a couple pictures from our build lab where builds and verification tests for servers and clients are running 24x7:

    clip_image004 clip_image006

    Conclusion

    Whew! That seems like a wind sprint through a deep topic that I spend a lot of time on, but I hope you found it interesting. I hope you start to get the idea that we have been very holistic in thinking through new ways of working and improvements to how we engineer Windows through this example. The ultimate test of our thinking will be the quality of product itself. What is your point of view on this important software engineering issue?

  • Engineering Windows 7

    Follow-up: Accessibility in Windows 7

    • 18 Comments

    We’ve seen some comments recently posted on a previous post on accessibility and a member of the User Interface Platform team wanted to offer some thoughts on the topic.  Brett is a senior test lead who leads our efforts testing the Accessibility of Windows 7.  --Steven

     

    Hi, my name is Brett and I am the test lead for the Windows 7 Accessibility team. Back in November my colleague Michael wrote a blog post about the work our team is doing for Windows 7, I’m following up to that and some recent comments about our new screen Magnifier. On a personal note I would like to mention that I’m a person with low vision and depend on some of the technologies that my team produces to help me in my work.

    I’ve been using Windows 7 for my day-to-day work for several months, this is something we call “dogfooding”, which is using our own pre-release products long before the public ever sees a beta. I’ve been using Windows 7 as my primary operating system and have found our new Magnifier to be very useful to me.

    Now, about our Magnifier, as you can imagine, the appeal of the many features in Windows varies from person to person, we often say that it is like making pizza for a billion people. The same is true for the features my team owns. I’ve read many comments since we released our Windows 7 beta about magnifier, some are from people that have really benefited from our new work, some have suggestions, and others have concerns. I will say thanks for the feedback, we appreciate all types. Those of you that have benefited are mostly people that need basic magnification and appreciate the easy ability to zoom in and out as needed; I fall into this category myself. Those of you that need magnification in combination with custom colors, high-contrast or some screen readers probably haven’t been able to benefit from the new Magnifier, for you we’ve made sure that the Vista magnifier continues to work. Let me explain a little more about what we’ve done in Windows 7.

    To go into more detail about our implementation I need to start with our graphics system in Windows. Over the last several years GPU technology has made huge advances and in Vista we finally made the leap to a modern hardware accelerated graphics system, what we call Aero, which takes advantage of the GPU. We often use the term Aero to refer to the specific elements of Windows visuals, such as transparency and gradients. In practice it is more than that, the modern graphics rendering (technically the desktop window manager along with the DirectX APIs) is not just for aesthetics but for all forms of rendering including text, 2D, and 3D all using modern hardware assisted graphics and a much richer API. It takes time, however, for the diverse ecosystem to adopt this technology, perhaps even over the course of several OS releases. It also takes time for Windows and time for software developers and hardware manufacturers to adopt new technologies; so for a time we will have (and fully support) a mix of both old and new. For example, some screen readers do the great things they do by capturing the data that goes through the original Windows graphics system (GDI) and building their off-screen UI models which is why they need to turn off the new rendering. On the other hand, our new Magnifier is integrated deeply into the desktop window manager (“Aero”) to leverage this graphics horsepower and deliver smooth full-screen multi-monitor magnification.

    While, as this demonstrates, these advances aren’t seamless, in Windows 7 my team has worked to make sure that we maintain Vista functionality and compatibility while making new investments. Magnifier is an example of this, we utilize the power of the GPU where we can to bring new capabilities to a broad spectrum of customers, and when Aero needs to be off, whether for screen readers, high-contrast or other needs, we maintain the existing capabilities in the product. And by maintaining compatibility as much as possible, many of the tools you depend on today will continue to work with Windows 7.

    So, is Magnifier better for everyone? Not everyone, but certainly for many people, but more than that I can honestly say that we have made advances to accessibility for everyone in Window 7. As Michael noted in his posting, we invested in several areas, there’s not only the Magnifier and on-screen keyboard work, there is also significant work to the underlying accessibility APIs. We also actively support the community and recently made a grant to NV Access to help them improve their open source screen reader support for Windows 7 and Internet Explorer 8.

    Thanks for reading, and thanks for your comments,

    -Brett                                 

Page 3 of 3 (67 items) 123