Quantcast
Channel: Category Name
Viewing all 5971 articles
Browse latest View live

Announcing .NET Framework 4.8 Early Access build 3646

$
0
0

Today, we are happy to share an Early Access build for the .NET Framework 4.8. This includes an updated .NET 4.8 runtime as well as the .NET 4.8 Developer Pack (a a single package that bundles the .NET Framework 4.8 runtime, the .NET 4.8 Targeting Pack, and the .NET Framework 4.8 SDK).

Please help us ensure this is a high quality and compatible release by trying out this build and exploring the new features.

Next steps:
To explore the new features, download the .NET 4.8 Developer Pack build 3646. Instead, if you want to try just the .NET 4.8 runtime, you can download either of these:

Please provide your feedback by reporting an issue at the .NET Framework Early Access GitHub repository.

Note: this release is still under development, you can expect to see more features and fixes in future preview builds. Also, a reminder that this build is not supported for production use.

This preview build 3646 includes improvements/fixes in the following areas:

  • [Runtime] JIT and NGEN improvements
  • [Windows Forms] Accessibility enhancements
  • [WPF] SelectionTextBrush Property
  • [BCL] Updated ZLib

You can see the complete list of improvements in this build here.

.NET Framework build 3646 is also included in the next update for Windows 10. You can sign up for Windows Insiders to validate that your applications work great on the latest .NET Framework included in the latest Windows 10 releases.

 

Runtime – JIT improvements

The JIT in .NET 4.8 is based on .NET Core 2.1.  All bug fixes and many code generation-based performance optimizations from .NET Core 2.1 are now available in the .NET Framework. 

 

Runtime – NGEN improvements

NGEN images in the .NET Framework no longer contain writable & executable sections. This reduces the surface area available to attacks that attempt to execute arbitrary code by modifying memory that will be executed.

While there will still be writable & executable data in memory at runtime, this change removes those mapped from NGEN images, allowing them to run in restricted environments that don’t permit executable/writable sections in images. 

 

Windows Forms – Accessibility Enhancements

In .NET Framework 4.8 WinForms is adding three new features to enable developers to write more accessible applications. The features added are intended to make communication of application data to visually impaired users more robust. We’ve added support for ToolTips when a user navigates via the keyboard, we’ve added LiveRegions and Notification Events to many commonly used controls.

To enable these features your application needs to have the following AppContextSwitches enabled in the App.config file:

 

UIA LiveRegions Support in Labels and StatusStrips

UIA Live Regions allow application developers to notify screen readers of a text change on a control that is located apart from the location where the user is working. Examples of where this would come in handy could be a StatusStrip that shows a connection status. If the connection is dropped and the Status changes, the developer might want to notify the screen reader of this change. Windows Forms has implemented UIA LiveRegions for both the Label control and the StatusStrip control.

Example use of the LiveRegion in a Label Control:

Narrator will now announce “Ready” Regardless of where the user is interacting with the application.
You can also implement your UserControl as a Live region:

 

UIA Notification Events

In Windows 10 Fall Creators Update Windows introduced a new method of having an application notify Narrator that content has changed, and Narrator should announce the change. The UIA Notification event provides a way for your app to raise a UIA event which leads to Narrator simply making an announcement based on text you supply with the event, without the need to have a corresponding control in the UI. In some scenarios, this could be a straightforward way to dramatically improve the accessibility of your app.  For more information about UIA Notification Events, see this blog post.

An example of where a Notification might come in handy is to notify the progress of some process that may take some time.

An example of raising the Notification event:

 

ToolTips on keyboard access

Currently a control tooltip can only be triggered to pop up by moving a mouse pointer into the control. This new feature enables a keyboard user to trigger a control’s tooltip by focusing the control using a Tab key or arrow keys with or without modifier keys. This particular accessibility enhancement requires an additional AppContextSwitch as seen in the following example:

  1. Create a new WinForms application
  2. Add the following XML to the App.config file

3. Add several buttons and a ToolTip control to the application’s form.

4. Set tooltips for the buttons.

5. Run the application and navigate between the buttons using a keyboard:

DataGridView control accessible hierarchy changes

Currently the accessible hierarchy (UI Automation tree) shows the editing box tree element as a child of currently edited cell but not as a root child element of DataGridView. The hierarchy tree update can be observed using Inspect tool:

 

 

WPF – SelectionTextBrush Property for use with Non-Adorner Based Text Selection

In the .NET Framework 4.7.2 WPF added the ability to draw TextBox and PasswordBox text selection without using the adorner layer (See Here). The foreground color of the selected text in this scenario was dictated by SystemColors.HighlightTextBrush.

In the .NET Framework 4.8 we are adding a new property, SelectionTextBrush, that allows developers to select the specific brush for the selected text when using non-adorner based text selection.

This property works only on TextBoxBase derived controls and PasswordBox in WPF applications with non-adorner based text selection enabled. It does not work on RichTextBox. If non-adorner based text selection is not enabled, this property is ignored.

To use this property, simply add it to your XAML code and use the appropriate brush or binding.

The resulting text selection will look like this:

You can combine the use of SelectionBrush and SelectionTextBrush to generate any color combination of background and foreground that you deem appropriate.

 

BCL – Updated ZLib

Starting with .NET Framework 4.5 we used the native version of ZLib (a native external compression library used for data compression) from http://zlib.net in clrcompression.dll in order to provide an implementation for the deflate algorithm. In .NET Framework 4.8 we updated clrcompression.dll to use version 1.2.11 which includes several key improvements and fixes.

 

Closing

Try out these new features in .NET Framework 4.8 early access build 3646 and share your feedback by reporting an issue at the .NET Framework Early Access GitHub repository.


Team Foundation Server 2018 Update 3 and Update 1.1 are available

$
0
0
Last week, we released both TFS 2018 Update 3 and TFS 2018 Update 1.1. Here are the key links: TFS 2018.3 Release Notes TFS 2018.3 Web Installer TFS 2018.3 ISO TFS 2018.3 Express Web Installer TFS 2018.3 Express ISO TFS 2018.1 Release Notes TFS 2018.1.1 Web Installer TFS 2018.1.1 ISO TFS 2018.1.1 Express Web Installer... Read More

Exploring Clang Tooling, Part 0: Building Your Code with Clang

$
0
0

This post is part of a regular series of posts where the C++ product team and other guests answer questions we have received from customers. The questions can be about anything C++ related: MSVC toolset, the standard language and library, the C++ standards committee, isocpp.org, CppCon, etc.

Today’s post is by guest author Stephen Kelly, who is a developer at Havok, a contributor to Qt and CMake and a blogger. This is the first post in a series where he is sharing his experience using Clang tooling in his current team.

Conformance and Compatibility

During the long development of C++ compilers so far, a few compilers have dominated in mainstream domains. MSVC 6 and GCC 2.95 have sometimes been described as ‘too successful’. Their success has produced lasting effect of driving C++ adoption, but they had many incompatibilities with each other, resulting in beautiful walled gardens. In some cases (such as omitting the typename keyword inside templates) this made development tasks more convenient, even if the resulting code was divergent from the C++ standard or from GCC. For developers working on code intended to be portable between different platforms, this has been a lasting annoyance – colleagues would check-in code without the required typename keyword, causing other colleagues who use a more conforming compiler to repair the code.

On Unix-like platforms where GCC dominated, standards conformance has held a higher status in part due to Free Software culture of many compatible tools (and people!) which can collaborate in the venue of the standard. Clang, a more recent entry into the field of C++ compilers, shared that aim of standards conformance but gained marketshare for several reasons, among them licence choice, implementation language choice, cross-compilation, improved diagnostic messages etc. Such competition has benefited both GCC and Clang as they match each other in terms of compliance and developer utility. Part of the strategy employed by Clang was to implement compatibility with GCC in terms of behavior, GCC bugs which are relied upon in standard Unix headers, and implementing a ‘compiler driver’ which is compatible on the command line with GCC in terms of warning flags and other compile options.

MSVC compiler has not been left behind on any front and is implementing and driving standards conformance for developers who value portability. The /permissive- option is standard conformant modulo bugs. Those remaining bugs will be resolved as releases continue.

Another development in the last several years is the emergence of tooling APIs for C++ based on Clang. Clang developers have created tooling which can be used to mechanically refactor large amounts of C++ code, including clang-tidy and clang-format. Custom tools based on clang-tidy in particular is the subject of the follow-up posts in this blog series.

Acquiring the Clang/LLVM Tools

Together with the use of Clang as a viable compiler for production use on Windows for multiple web browsers, all of this leaves the question of how you can benefit from Clang tooling. If your codebase has only ever been built with the MSVC compiler, the code must first be made buildable with Clang.

Installers of Clang for Windows are available here. One of the ways Clang has been able to repeat its success on Windows is to implement compatibility with MSVC. The Clang installer for Windows includes two ‘compiler drivers’. clang++ is GCC compatible even on Windows and may be used with a codebase which relies on MinGW. clang-cl is the second compiler driver shipped with the Clang installer and is compatible with the MSVC compiler driver. This compatibility appears in terms of accepting command line flags in the style of cl.exe and in terms of running Clang in a permissive mode in line with cl.exe.

After running the Clang installer, a toolset file is required to instruct Visual Studio 2017 to use clang-cl.exe instead of the native cl.exe. The ‘LLVM Compiler Toolchain’ extension for Visual Studio 2017 must be installed to enable the toolchain.

After installing the ‘LLVM Compiler Toolchain’ the platform toolset can be changed to llvm in Visual Studio, or by specifying it in your buildsystem generator, such as CMake with cmake .. -T llvm.

Using MSVC compiler’s /permissive- flag

Some of the C++ conformance issues detected by Clang are also detected by recent MSVC releases with the /permissive- flag. So, a first step to getting code to build with Clang may be to first build it with MSVC Conformance mode. The downside of this is that MSVC Conformance mode is more strict than Clang in some cases (because Clang attempts to emulate permissive MSVC). Certain MSVC behaviors such as incorrect two-phase-lookup is allowed by Clang-CL by default and rejected by MSVC Conformance mode.

Iterative Conformance

A more conforming mode of Clang-CL can be activated by adding the compile flags -fno-delayed-template-parsing -Werror=microsoft -Werror=typename-missing. Even after turning Microsoft diagnostics into errors, individual such diagnostics can be disabled if required by adding -Wno- versions of the documented flag such as -Wno-microsoft-sealed. Note that such a flag must appear after the -Werror=microsoft option.

Even with the compatibility that Clang-CL provides, a fallback option can be used to instruct the compiler to compile with CL.exe if required.

Several features of Clang may need to be enabled in the buildsystem to build the code. Use of intrinsics such as _mm_shuffle_epi8 requires the use of the -msse4.1 flag or similar.

As with enabling compiler warning on a codebase which has never used them before, the most sensible approach is to start building with Clang using the most permissive settings necessary, and then introduce more conformance over time.

If your interest in Clang is limited to making use of semantically-rich tooling, it is important to remember that your code does not need to run after it is compiled. It also does not need to link, or even to compile – judicious use of ifdefs can be used to make most of your code reachable to Clang tooling while limiting the effect on code which is too affected to compile, or on code you don’t control. Some parts of the Windows headers do not compile with Clang yet. That is likely to affect your code too. Certain efforts within Microsoft are addressing these issues in shipped headers.

Porting existing C++ code

Here are some issues that may occur when porting your code to build with Clang or /permissive-, as you increase the level of standard conformance in your build:

Only one user-defined conversion may be invoked implicitly
MSVC in permissive mode accepts C++ code which invokes two implicit conversions at once (instead of the standard-conforming one). Clang-CL does not accept such double-conversions. This can arise when converting between two distinct string types for example (implicitly to, then from const char*).
Both result statements in a ternary expression must have the same type
Where ternaries are used with two different result types, it will be necessary to ensure that both result types are the same without implicit conversion. This can occur with simple wrapper types, or more complex expressions, such as when using a smart pointer which converts implicitly to a pointer type:
smart_pointer<int> func(bool b)
{
    int* defaultPtr = nullptr;
    smart_pointer<int> sp;
    return b ? sp : defaultPtr;
}
Missing `typename` and `template` keywords
C++ requires the user to use the typename keyword in certain template contexts in order to disambiguate between types and values in permissive mode and requires the template keyword to disambiguate between template functions and comparisons.

In the case of variables within templates, the solution is usually to use auto instead of adding the template keyword.
This can also occur when using type traits such as std::remove_reference. Developers might write (or copy from elsewhere in your codebase), code such as

template<typename T>
void doSomething(T t)
{
    std::remove_reference<T>::type value = input;
    ++value;
    return value;
}

and Clang rightly issues a diagnostic and recommends use of the typename keyword.

However, at this point it is obvious that developers are not going to remember to add such keywords unless they are reminded of it, so perhaps a different strategy of teaching developers to use std::remove_reference_t instead, and omit the trailing ::type. It is simpler all-round and more portable. Similar transformations can be introduced for any custom type traits used in your code.

Excessive typename keyword
Similarly, sometimes MSVC accepts a typename keyword where it should not.

Unfortunately, there are opposite cases where Clang requires a template keyword where it should not, so getting this right can at times require an #ifdef.

Static variables defined inside if statement
MSVC incorrectly accepts code such as
if (static bool oneTimeInit = true)
{
}

In a modern codebase, this should be changed to

if (static bool oneTimeInit = true; oneTimeInit)
{
}

This requires the use of the /std:c++17 flag when compiling with MSVC.

Implicit deletion of defaulted constructor
Clang does not allow user-defined but defaulted constructors where they are required to initialize a union.

The solution here is to actually define the constructor instead of defaulting it:

B::B()
{        
}
Clang does not accept the for each extension
The solution here is to use cxx_range_for instead. Replace
for each (auto item in container)

With

for (auto item : container)
Qualify lookup in template-dependent base
MSVC incorrectly accepts (and disambiguates) use of declarations from template-dependent bases, though Clang does not. This is again due to lax implementation of two-phase lookup. The solution here is to prefix such calls with this-> or the name of the base class.
Always-false static asserts
static_assert(false) is sometimes attempted by developers who wish to issue an informative error message if there is an attempt to instantiate a template which should not be instantiated. Unfortunately it doesn’t work with two phase lookup. This is accepted by MSVC, but not by Clang. The solution is to make the value dependent on the template type.
Specialization in different scope to declaration
MSVC allows specialization of a C++ template in different a namespace to the one it was declared in. Clang does not allow this. The specialization should be in the same namespace as the initial template.
template<typename T>
struct Templ
{
};

namespace NS {

template<>
struct Templ<int>
// error: class template specialization of 'Templ' must occur at global scope
{
};

}

Conclusion

It is important to realize that being able to build code with Clang is useful even if you can not run it (due to #ifdefs or dependency issues). Running Clang-built code opens up the possibility of using Clang sanitizers for example, but just being able to compile the code with Clang enables use of source-transformation tools such as clang-tidy, clazy and clang-format. Further blog posts in this series will explore workflows for source-to-source transformation with Clang.

Please leave a comment if you encountered other changes you needed to make in your code to compile with Clang-CL!

Anonymous URL Submission Tool Being Retired

$
0
0

Saying Goodbye is never easy, but the time has come to announce the withdrawal of anonymous non-signed in support Bing's URL submission tool. Webmaster will still be able to log in and access Submit URL tool in Bing Webmaster Tools, and this is easier than ever as the tool now supports Google and Facebook authentication in addition to existing Microsoft accounts.

Why say goodbye?

Well, the URLs received are by far too low quality to be trustable, and webmasters preferring having more ownership of the URLs for their site.

In order to use the tool, webmasters just need to login, add and verify their site. Then navigate to the Submit URL tool within the Configure My Site menu options.

In case the webmasters want to use our Bing Webmaster tools API, webmasters have to generate an API key through Bing Webmaster Tools and follow the guidelines for its usage here. In case you haven't signed up on the tool yet, please click here to sign up.

Thank you,
The Bing Webmaster Tools Team

Immutable storage for Azure Storage Blobs now generally available

$
0
0

Financial Services organizations regulated by the Securities and Exchange Commission (SEC), Commodity Futures Trading Commission (CFTC), Financial Industry Regulatory Authority (FINRA), Investment Industry Regulatory Organization of Canada (IIROC), Financial Conduct Authority (FCA), and more are required to retain business-related communications in a Write-Once-Read-Many (WORM) or immutable state that ensures they are non-erasable and non-modifiable for a specific retention interval. The immutable storage requirement is not limited to financial organizations but also applies to industries such as healthcare, insurance, media, public safety, and legal services.

Today, we are excited to reveal the general availability of immutable storage for Azure Storage Blobs to address this requirement. The feature is available in all Azure public regions. Through configurable policies, users can keep Azure Blob storage data in an immutable state where Blobs can be created and read, but not modified or deleted.

Typical applications include:

  • Regulatory compliance: Immutable storage for Azure Blobs is designed to help financial institutions and related industries address SEC 17a-4(f), CFTC 1.31©-(d), FINRA etc. A technical whitepaper with details on how the feature addresses these regulatory requirements is downloadable now via the Service Trust Portal. The Azure Trust Center contains detailed information about our compliance certifications.
  • Secure document retention: Users receive maximum data protection as the immutable storage feature for Azure Blobs service ensures that data cannot be modified or deleted by any user including those with account administrative privileges.
  • Legal hold: Immutable storage for Azure Storage Blobs enables users to store sensitive information critical to a litigation, criminal investigation, and more in a tamper-proof state for the desired duration.

Immutable storage for Azure Storage Blobs enables:

  • Time-based retention policy support: Users set policies to store data immutably for a specified interval of time.
  • Legal hold policy support: When the retention interval is not known, users can set legal holds to store data immutably until the legal hold is cleared.
  • Support for all Blob tiers: WORM policies are independent of the Azure Blob Storage tier and will apply to all the tiers, hot, cool and archive. This allows customers to store the data in the most cost-optimized tier for their workloads while maintaining the data immutability.
  • Blob Container level configuration: Immutable storage for Azure Storage Blobs allows users to configure time-based retention policies and legal hold tags at the container level. Users can create time-based retention policies, lock policies, extend retention intervals, set legal holds, clear legal holds etc. through simple container level settings. The policies apply to all the Blobs in the container, both existing and new Blobs.

Immutable data is priced in the same way as mutable data and there is no additional charge for using this feature. Please refer to the Azure Storage Pricing page for the related pricing details.

How to get started

To use this feature, you must create a GPv2 account through the Azure Resource Manager. For more details on how to enable this feature, please refer to the immutable storage for Azure Storage Blobs documentation.

Immutable Storage for Azure Storage Blobs is supported in the Azure Portal, the .net Client Library (version 7.2.0-preview and later) the node.js Client Library (version 4.0.0 and later), the Python Client Library (version 2.0.0 and later) and the Java Client Library. Preview support is available in CLI 2.0, and PowerShell (version 4.4.0-preview) with production support coming very soon.

You can also directly use the Storage Services REST API. This feature is supported on Blob Service REST API version 2017-11-09 and later and on Azure Storage Resource Provider REST API version 2018-02-01 and later. In general, we always recommend using the latest versions regardless of whether you are using the feature or not.

Partner integration

We integrate with a broad ecosystem of partners to jointly deliver solutions to our customers. The following partners support Immutable storage for Azure Storage Blobs:

17a-4, LLC is a compliance technology and consulting company focused on the retention of electronic compliance records. DataParser is 17a-4’s widely adopted software solution to bring regulated data into compliance archives and can be used to collect, format and deliver records to Azure Blob immutable storage. “We think many of our clients will take advantage of the Azure Storage tiers - hot, cool and archive - to keep regulated records in WORM compliance in a cost-effective and efficient manner. Our DataParser can be a helpful tool in this process, collecting various data sources for delivery to Azure Blob storage,” said Douglas Weeden, Director of Compliance, 17a-4, LLC.

In keeping the industry lead in supporting Azure, Commvault is excited to announce our integration with Immutable Storage for Azure Blobs. Financial institutions and others with highly sensitive data that needs to be retained in a non-erasable and non-rewritable state can rely on Commvault with this new support for immutable data on Azure Blob Storage. This is vital to an organization’s ability to meet stringent regulatory requirements like SEC Rule 17a-4(f), FINRA Rule 4511(c), and the principles-based requirements of CFTC Rule 1.31(c)-(d).

HubStor is a storage software company that unlocks the power of the cloud for intelligent data management. Enterprises use HubStor to manage and protect their mission-critical unstructured data. HubStor’s integration with Azure Immutable Blob Storage offers a convenient approach for regulated organizations to satisfy compliance retention requirements in the cloud for workloads such as email, voice, fiscal records, logs, and medical images. Today, HubStor is used by broker-dealer firms, hedge fund managers, mortgage lenders, life sciences companies, medical device manufacturers, and State and Local Government agencies to deliver immutable data protection for various legal and regulatory requirements. Learn more about HubStor’s integration announcement.

Archive2Azure, the intelligent data management and compliance archiving solution, provides customers with a native Azure archiving application for their structured, semi-structured, and unstructured data. Archive2Azure enables companies to provide automated retention, indexing on demand, encryption, search, review, and production for long-term archiving of their compliance, active, low-touch, and inactive data from within their own Azure tenancy. The pairing of the Azure Cloud with Archive2Azure's archiving and data management capabilities provide companies with the low-cost cloud-based security and information management they have long sought. With the general availability of Azure's much anticipated Immutable Blob Storage offering, the needed immutability, security, and lower cost to archive and manage regulated data for extended periods are now possible. With the availability of the new Immutable Blob Storage, Archive2Azure can now offer Azure’s full range of storage tiers providing users a wide choice of storage performance, cost, and regulatory compliance.

Feedback

We’re confident that immutable storage for Azure Storage Blobs will provide another critical element for optimizing your organization’s cloud data storage and compliance strategy. We look forward to hearing your feedback on this feature, please email us at AzureStorageFeedback@microsoft.com.

Windows 10 SDK Preview Build 17758 available now!

$
0
0

Today, we released a new Windows 10 Preview Build of the SDK to be used in conjunction with Windows 10 Insider Preview (Build 17758 or greater). The Preview SDK Build 17758 contains bug fixes and under development changes to the API surface area.

The Preview SDK can be downloaded from the developer section on Windows Insider.

For feedback and updates to the known issues, please see the developer forum. For new developer feature requests, head over to our Windows Platform UserVoice.

Things to note:

  • This build works in conjunction with previously released SDKs and Visual Studio 2017. You can install this SDK and still also continue to submit your apps that target Windows 10 build 1803 or earlier to the store.
  • The Windows SDK will now formally only be supported by Visual Studio 2017 and greater. You can download the Visual Studio 2017 here.
  • This build of the Windows SDK will install on Windows 10 Insider Preview builds and supported Windows operating systems.
  • In order to assist with script access to the SDK, the ISO will also be able to be accessed through the following URL:  https://go.microsoft.com/fwlink/?prd=11966&pver=1.0&plcid=0x409&clcid=0x409&ar=Flight&sar=Sdsurl&o1=17758 once the static URL is published.

C++/WinRT Update for build 17709 and beyond:

This update introduces many improvements and fixes for C++/WinRT. Notably, it introduces the ability to build C++/WinRT without any dependency on the Windows SDK. This isn’t particularly interesting to the OS developer, but even in the OS repo it provides benefits because it does not itself include any Windows headers. Thus, a developer will typically pull in fewer or no dependencies inadvertently. This also means a dramatic reduction in the number of macros that a C++/WinRT developer must guard against. Removing the dependency on the Windows headers means that C++/WinRT is more portable and standards compliant and furthers our efforts to make it a cross-compiler and cross-platform library. It also means that the C++/WinRT headers will never be mangled by macros. If you previously relied on C++/WinRT to include various Windows headers that you will now have to include them yourself. It has always been good practice to always include any headers you depend on explicitly and not rely on another library to include them for you.

Highlights

Support get_strong and get_weak to create delegates: This update allows a developer to use either get_strong or get_weak instead of a raw this pointer when creating a delegate pointing to a member function.

Add async cancellation callback: The most frequently requested feature for C++/WinRT’s coroutine support has been the addition of a cancellation callback.

Simplify the use of APIs expecting IBuffer parameters: Although most APIs prefer collections or arrays, enough APIs rely on IBuffer that it should be easier to use such APIs from C++. This update provides direct access to the data behind an IBuffer implementation using the same data naming convention used by the C++ standard library containers. This also avoids colliding with metadata names that conventionally begin with an uppercase letter.

Conformance: Improved support for Clang and Visual C++’s stricter conformance modes.

Improved code gen: Various improvements to reduce code size, improve inlining, and optimize factory caching.

Remove unnecessary recursion: When the command line refers to a folder rather than a specific winmd, cppwinrt will no longer search recursively for winmd files. It causes performance problems in the OS build and can lead to usage errors that are hard to diagnose when developers inadvertently cause cppwinrt to consume more winmds than expected. The cppwinrt compiler also now handles duplicates more intelligently, making it more resilient to user error and poorly-formed winmd files.

Declare both WINRT_CanUnloadNow and WINRT_GetActivationFactory in base.h: Callers don’t need to declare them directly. Their signatures have also changed, amounting to a breaking change. The declarations alleviate most of the pain of this change. The change is necessitated by the fact that C++/WinRT no longer depends on the Windows headers and this change removes the dependency on the types from the Windows headers.

Harden smart pointers: The event revokers didn’t revoke when move-assigned a new value. This lead me to take a closer look at the smart pointer classes and I noticed that they were not reliably handling self-assignment. This is rooted in the com_ptr class template that most of the others rely on. I fixed com_ptr and updated the event revokers to handle move semantics correctly to ensure that they revoke upon assignment. The handle class template has also been hardened by the removal of the implicit constructor that made it easy to write incorrect code. This also turned bugs in the OS into compiler errors fixed in this PR.

Breaking Changes

Support for non-WinRT interfaces is disabled by default. To enable, simply #include <unknwn.h> before any C++/WinRT headers.

winrt::get_abi(winrt::hstring) now returns void* instead of HSTRING. Code requiring the HSTRING ABI can simply use a static_cast.

winrt::put_abi(winrt::hstring) returns void** instead of HSTRING*. Code requiring the HSTRING ABI can simply use a reinterpret_cast.

HRESULT is now projected as winrt::hresult. Code requiring an HRESULT can simply static_cast if you need to do type checking or support type traits, but it is otherwise convertible as long as <unknwn.h> is included first.

GUID is now projected as winrt::guid. Code implementing APIs with GUID parameters must use winrt::guid instead, but it is otherwise convertible as long as <unknwn.h> is included first.

The signatures of WINRT_CanUnloadNow and WINRT_GetActivationFactory has changed. Code must not declare these functions at all and instead include winrt/base.h to include their declarations.

The winrt::handle constructor is now explicit. Code assigning a raw handle value must call the attach method instead.

winrt::clock::from_FILETIME has been deprecated. Code should use winrt::clock::from_file_time instead.

What’s New:

MSIX Support

It’s finally here! You can now package your applications as MSIX! These applications can be installed and run on any device with 17682 build or later.

To package your application with MSIX, use the MakeAppx tool. To install the application – just click on the MSIX file. To understand more about MSIX, watch this introductory video: link

Feedback and comments are welcome on our MSIX community: http://aka.ms/MSIXCommunity

MSIX is not currently supported by the App Certification Kit nor the Microsoft Store at this time.

MC.EXE

We’ve made some important changes to the C/C++ ETW code generation of mc.exe (Message Compiler):

The “-mof” parameter is deprecated. This parameter instructs MC.exe to generate ETW code that is compatible with Windows XP and earlier. Support for the “-mof” parameter will be removed in a future version of mc.exe.

As long as the “-mof” parameter is not used, the generated C/C++ header is now compatible with both kernel-mode and user-mode, regardless of whether “-km” or “-um” was specified on the command line. The header will use the _ETW_KM_ macro to automatically determine whether it is being compiled for kernel-mode or user-mode and will call the appropriate ETW APIs for each mode.

  • The only remaining difference between “-km” and “-um” is that the EventWrite[EventName] macros generated with “-km” have an Activity ID parameter while the EventWrite[EventName] macros generated with “-um” do not have an Activity ID parameter.

The EventWrite[EventName] macros now default to calling EventWriteTransfer (user mode) or EtwWriteTransfer (kernel mode). Previously, the EventWrite[EventName] macros defaulted to calling EventWrite (user mode) or EtwWrite (kernel mode).

The generated header now supports several customization macros. For example, you can set the MCGEN_EVENTWRITETRANSFER macro if you need the generated macros to call something other than EventWriteTransfer.

  • The manifest supports new attributes.
  • Event “name”: non-localized event name.
  • Event “attributes”: additional key-value metadata for an event such as filename, line number, component name, function name.
  • Event “tags”: 28-bit value with user-defined semantics (per-event).
  • Field “tags”: 28-bit value with user-defined semantics (per-field – can be applied to “data” or “struct” elements).
  • You can now define “provider traits” in the manifest (e.g. provider group). If provider traits are used in the manifest, the EventRegister[ProviderName] macro will automatically register them.
  • MC will now report an error if a localized message file is missing a string. (Previously MC would silently generate a corrupt message resource.)
  • MC can now generate Unicode (utf-8 or utf-16) output with the “-cp utf-8” or “-cp utf-16” parameters.

Known Issues:

The SDK headers are generated with types in the “ABI” namespace. This is done to avoid conflicts with C++/CX and C++/WinRT clients that need to consume types directly at the ABI layer[1]. By default, types emitted by MIDL are *not* put in the ABI namespace, however this has the potential to introduce conflicts from teams attempting to consume ABI types from Windows WinRT MIDL generated headers and non-Windows WinRT MIDL generated headers (this is especially challenging if the non-Windows header references Windows types).

To ensure that developers have a consistent view of the WinRT API surface, validation has been added to the generated headers to ensure that the ABI prefix is consistent between the Windows headers and user generated headers. If you encounter an error like:

5>c:program files (x86)windows kits10include10.0.17687.0winrtwindows.foundation.h(83): error C2220: warning treated as error – no ‘object’ file generated

5>c:program files (x86)windows kits10include10.0.17687.0winrtwindows.foundation.h(83): warning C4005: ‘CHECK_NS_PREFIX_STATE’: macro redefinition

5>g:<PATH TO YOUR HEADER HERE>(41): note: see previous definition of ‘CHECK_NS_PREFIX_STATE’

It means that some of your MIDL generated headers are inconsistent with the system generated headers.

There are two ways to fix this:

  • Preferred: Compile your IDL file with the /ns_prefix MIDL command line switch. This will cause all your types to be moved to the ABI namespace consistent with the Windows headers. This may require code changes in your code however.
  • Alternate: Add #define DISABLE_NS_PREFIX_CHECKS before including the Windows headers. This will suppress the validation.

API Updates, Additions and Removals

When targeting new APIs, consider writing your app to be adaptive in order to run correctly on the widest number of Windows 10 devices. Please see Dynamically detecting features with API contracts for more information.

The following APIs have been added to the platform since the release of 17134. The APIs listed below have been removed.

In addition, please note the following removal since build 17744:


namespace Windows.ApplicationModel.DataTransfer
{ public sealed class DataPackagePropertySetView : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt; {
string SourceDisplayName { get; } } }

Additions


namespace Windows.AI.MachineLearning {
  public interface ILearningModelFeatureDescriptor
  public interface ILearningModelFeatureValue
  public interface ILearningModelOperatorProvider
  public sealed class ImageFeatureDescriptor : ILearningModelFeatureDescriptor
  public sealed class ImageFeatureValue : ILearningModelFeatureValue
  public interface ITensor : ILearningModelFeatureValue
  public sealed class LearningModel : IClosable
  public sealed class LearningModelBinding : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt;
  public sealed class LearningModelDevice
  public enum LearningModelDeviceKind
  public sealed class LearningModelEvaluationResult
  public enum LearningModelFeatureKind
  public sealed class LearningModelSession : IClosable
  public struct MachineLearningContract
  public sealed class MapFeatureDescriptor : ILearningModelFeatureDescriptor
  public sealed class SequenceFeatureDescriptor : ILearningModelFeatureDescriptor
  public sealed class TensorBoolean : ILearningModelFeatureValue, ITensor
  public sealed class TensorDouble : ILearningModelFeatureValue, ITensor
  public sealed class TensorFeatureDescriptor : ILearningModelFeatureDescriptor
  public sealed class TensorFloat : ILearningModelFeatureValue, ITensor
  public sealed class TensorFloat16Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorInt16Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorInt32Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorInt64Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorInt8Bit : ILearningModelFeatureValue, ITensor
  public enum TensorKind
  public sealed class TensorString : ILearningModelFeatureValue, ITensor
  public sealed class TensorUInt16Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorUInt32Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorUInt64Bit : ILearningModelFeatureValue, ITensor
  public sealed class TensorUInt8Bit : ILearningModelFeatureValue, ITensor
}
namespace Windows.ApplicationModel {
  public sealed class AppInstallerInfo
  public sealed class LimitedAccessFeatureRequestResult
  public static class LimitedAccessFeatures
  public enum LimitedAccessFeatureStatus
  public sealed class Package {
    IAsyncOperation&lt;PackageUpdateAvailabilityResult&gt; CheckUpdateAvailabilityAsync();
    AppInstallerInfo GetAppInstallerInfo();
  }
  public enum PackageUpdateAvailability
  public sealed class PackageUpdateAvailabilityResult
}
namespace Windows.ApplicationModel.Calls {
  public sealed class VoipCallCoordinator {
    IAsyncOperation&lt;VoipPhoneCallResourceReservationStatus&gt; ReserveCallResourcesAsync();
  }
}
namespace Windows.ApplicationModel.Chat {
  public static class ChatCapabilitiesManager {
    public static IAsyncOperation&lt;ChatCapabilities&gt; GetCachedCapabilitiesAsync(string address, string transportId);
    public static IAsyncOperation&lt;ChatCapabilities&gt; GetCapabilitiesFromNetworkAsync(string address, string transportId);
  }
  public static class RcsManager {
    public static event EventHandler&lt;object&gt; TransportListChanged;
  }
}
namespace Windows.ApplicationModel.DataTransfer {
  public static class Clipboard {
    public static event EventHandler&lt;ClipboardHistoryChangedEventArgs&gt; HistoryChanged;
    public static event EventHandler&lt;object&gt; HistoryEnabledChanged;
    public static event EventHandler&lt;object&gt; RoamingEnabledChanged;
    public static bool ClearHistory();
    public static bool DeleteItemFromHistory(ClipboardHistoryItem item);
    public static IAsyncOperation&lt;ClipboardHistoryItemsResult&gt; GetHistoryItemsAsync();
    public static bool IsHistoryEnabled();
    public static bool IsRoamingEnabled();
    public static bool SetContentWithOptions(DataPackage content, ClipboardContentOptions options);
    public static SetHistoryItemAsContentStatus SetHistoryItemAsContent(ClipboardHistoryItem item);
  }
  public sealed class ClipboardContentOptions
  public sealed class ClipboardHistoryChangedEventArgs
  public sealed class ClipboardHistoryItem
  public sealed class ClipboardHistoryItemsResult
  public enum ClipboardHistoryItemsResultStatus
  public sealed class DataPackagePropertySetView : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt; {
    bool IsFromRoamingClipboard { get; }
  }
  public enum SetHistoryItemAsContentStatus
}
namespace Windows.ApplicationModel.Store.Preview {
  public enum DeliveryOptimizationDownloadMode
  public enum DeliveryOptimizationDownloadModeSource
  public sealed class DeliveryOptimizationSettings
  public static class StoreConfiguration {
    public static bool IsPinToDesktopSupported();
    public static bool IsPinToStartSupported();
    public static bool IsPinToTaskbarSupported();
    public static void PinToDesktop(string appPackageFamilyName);
    public static void PinToDesktopForUser(User user, string appPackageFamilyName);
  }
}
namespace Windows.ApplicationModel.Store.Preview.InstallControl {
  public enum AppInstallationToastNotificationMode
  public sealed class AppInstallItem {
    AppInstallationToastNotificationMode CompletedInstallToastNotificationMode { get; set; }
    AppInstallationToastNotificationMode InstallInProgressToastNotificationMode { get; set; }
    bool PinToDesktopAfterInstall { get; set; }
    bool PinToStartAfterInstall { get; set; }
    bool PinToTaskbarAfterInstall { get; set; }
  }
  public sealed class AppInstallManager {
    bool CanInstallForAllUsers { get; }
  }
  public sealed class AppInstallOptions {
    string CampaignId { get; set; }
    AppInstallationToastNotificationMode CompletedInstallToastNotificationMode { get; set; }
    string ExtendedCampaignId { get; set; }
    bool InstallForAllUsers { get; set; }
    AppInstallationToastNotificationMode InstallInProgressToastNotificationMode { get; set; }
    bool PinToDesktopAfterInstall { get; set; }
    bool PinToStartAfterInstall { get; set; }
    bool PinToTaskbarAfterInstall { get; set; }
    bool StageButDoNotInstall { get; set; }
  }
  public sealed class AppUpdateOptions {
    bool AutomaticallyDownloadAndInstallUpdateIfFound { get; set; }
  }
}
namespace Windows.ApplicationModel.UserActivities {
  public sealed class UserActivity {
    bool IsRoamable { get; set; }
  }
}
namespace Windows.Data.Text {
  public sealed class TextPredictionGenerator {
    CoreTextInputScope InputScope { get; set; }
    IAsyncOperation&lt;IVectorView&lt;string&gt;&gt; GetCandidatesAsync(string input, uint maxCandidates, TextPredictionOptions predictionOptions, IIterable&lt;string&gt; previousStrings);
    IAsyncOperation&lt;IVectorView&lt;string&gt;&gt; GetNextWordCandidatesAsync(uint maxCandidates, IIterable&lt;string&gt; previousStrings);
  }
  public enum TextPredictionOptions : uint
}
namespace Windows.Devices.Display.Core {
  public sealed class DisplayAdapter
  public enum DisplayBitsPerChannel : uint
  public sealed class DisplayDevice
  public enum DisplayDeviceCapability
  public sealed class DisplayFence
  public sealed class DisplayManager : IClosable
  public sealed class DisplayManagerChangedEventArgs
  public sealed class DisplayManagerDisabledEventArgs
  public sealed class DisplayManagerEnabledEventArgs
  public enum DisplayManagerOptions : uint
  public sealed class DisplayManagerPathsFailedOrInvalidatedEventArgs
  public enum DisplayManagerResult
  public sealed class DisplayManagerResultWithState
  public sealed class DisplayModeInfo
  public enum DisplayModeQueryOptions : uint
  public sealed class DisplayPath
  public enum DisplayPathScaling
  public enum DisplayPathStatus
  public struct DisplayPresentationRate
  public sealed class DisplayPrimaryDescription
 public enum DisplayRotation
  public sealed class DisplayScanout
  public sealed class DisplaySource
  public sealed class DisplayState
  public enum DisplayStateApplyOptions : uint
  public enum DisplayStateFunctionalizeOptions : uint
  public sealed class DisplayStateOperationResult
  public enum DisplayStateOperationStatus
  public sealed class DisplaySurface
  public sealed class DisplayTarget
  public enum DisplayTargetPersistence
  public sealed class DisplayTask
  public sealed class DisplayTaskPool
  public enum DisplayTaskSignalKind
  public sealed class DisplayView
  public sealed class DisplayWireFormat
  public enum DisplayWireFormatColorSpace
  public enum DisplayWireFormatEotf
  public enum DisplayWireFormatHdrMetadata
  public enum DisplayWireFormatPixelEncoding
}
namespace Windows.Devices.Enumeration {
  public enum DeviceInformationKind {
    DevicePanel = 8,
  }
  public sealed class DeviceInformationPairing {
    public static bool TryRegisterForAllInboundPairingRequestsWithProtectionLevel(DevicePairingKinds pairingKindsSupported, DevicePairingProtectionLevel minProtectionLevel);
  }
}
namespace Windows.Devices.Enumeration.Pnp {
  public enum PnpObjectType {
    DevicePanel = 8,
  }
}
namespace Windows.Devices.Lights {
  public sealed class LampArray
  public enum LampArrayKind
  public sealed class LampInfo
  public enum LampPurposes : uint
}
namespace Windows.Devices.Lights.Effects {
  public interface ILampArrayEffect
  public sealed class LampArrayBitmapEffect : ILampArrayEffect
  public sealed class LampArrayBitmapRequestedEventArgs
  public sealed class LampArrayBlinkEffect : ILampArrayEffect
  public sealed class LampArrayColorRampEffect : ILampArrayEffect
 public sealed class LampArrayCustomEffect : ILampArrayEffect
  public enum LampArrayEffectCompletionBehavior
  public sealed class LampArrayEffectPlaylist : IIterable&lt;ILampArrayEffect&gt;, IVectorView&lt;ILampArrayEffect&gt;
  public enum LampArrayEffectStartMode
  public enum LampArrayRepetitionMode
  public sealed class LampArraySolidEffect : ILampArrayEffect
  public sealed class LampArrayUpdateRequestedEventArgs
}
namespace Windows.Devices.PointOfService {
  public sealed class BarcodeScannerCapabilities {
    bool IsVideoPreviewSupported { get; }
  }
  public sealed class ClaimedBarcodeScanner : IClosable {
    event TypedEventHandler&lt;ClaimedBarcodeScanner, ClaimedBarcodeScannerClosedEventArgs&gt; Closed;
  }
  public sealed class ClaimedBarcodeScannerClosedEventArgs
  public sealed class ClaimedCashDrawer : IClosable {
    event TypedEventHandler&lt;ClaimedCashDrawer, ClaimedCashDrawerClosedEventArgs&gt; Closed;
  }
  public sealed class ClaimedCashDrawerClosedEventArgs
  public sealed class ClaimedLineDisplay : IClosable {
    event TypedEventHandler&lt;ClaimedLineDisplay, ClaimedLineDisplayClosedEventArgs&gt; Closed;
  }
  public sealed class ClaimedLineDisplayClosedEventArgs
  public sealed class ClaimedMagneticStripeReader : IClosable {
    event TypedEventHandler&lt;ClaimedMagneticStripeReader, ClaimedMagneticStripeReaderClosedEventArgs&gt; Closed;
  }
  public sealed class ClaimedMagneticStripeReaderClosedEventArgs
  public sealed class ClaimedPosPrinter : IClosable {
    event TypedEventHandler&lt;ClaimedPosPrinter, ClaimedPosPrinterClosedEventArgs&gt; Closed;
  }
  public sealed class ClaimedPosPrinterClosedEventArgs
}
namespace Windows.Devices.PointOfService.Provider {
  public sealed class BarcodeScannerDisableScannerRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerEnableScannerRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerFrameReader : IClosable
  public sealed class BarcodeScannerFrameReaderFrameArrivedEventArgs
  public sealed class BarcodeScannerGetSymbologyAttributesRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerHideVideoPreviewRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerProviderConnection : IClosable {
    IAsyncOperation&lt;BarcodeScannerFrameReader&gt; CreateFrameReaderAsync();
    IAsyncOperation&lt;BarcodeScannerFrameReader&gt; CreateFrameReaderAsync(BitmapPixelFormat preferredFormat);
    IAsyncOperation&lt;BarcodeScannerFrameReader&gt; CreateFrameReaderAsync(BitmapPixelFormat preferredFormat, BitmapSize preferredSize);
  }
  public sealed class BarcodeScannerSetActiveSymbologiesRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerSetSymbologyAttributesRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerStartSoftwareTriggerRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerStopSoftwareTriggerRequest {
    IAsyncAction ReportFailedAsync(int reason);
    IAsyncAction ReportFailedAsync(int reason, string failedReasonDescription);
  }
  public sealed class BarcodeScannerVideoFrame : IClosable
}
namespace Windows.Devices.Sensors {
  public sealed class HingeAngleReading
  public sealed class HingeAngleSensor
  public sealed class HingeAngleSensorReadingChangedEventArgs
  public sealed class SimpleOrientationSensor {
    public static IAsyncOperation&lt;SimpleOrientationSensor&gt; FromIdAsync(string deviceId);
    public static string GetDeviceSelector();
  }
}
namespace Windows.Devices.SmartCards {
  public static class KnownSmartCardAppletIds
  public sealed class SmartCardAppletIdGroup {
    string Description { get; set; }
    IRandomAccessStreamReference Logo { get; set; }
    ValueSet Properties { get; }
    bool SecureUserAuthenticationRequired { get; set; }
  }
  public sealed class SmartCardAppletIdGroupRegistration {
    string SmartCardReaderId { get; }
    IAsyncAction SetPropertiesAsync(ValueSet props);
  }
}
namespace Windows.Devices.WiFi {
  public enum WiFiPhyKind {
    HE = 10,
  }
}
namespace Windows.Foundation {
  public static class GuidHelper
}
namespace Windows.Globalization {
  public static class CurrencyIdentifiers {
    public static string MRU { get; }
    public static string SSP { get; }
    public static string STN { get; }
    public static string VES { get; }
  }
}
namespace Windows.Graphics.Capture {
  public sealed class Direct3D11CaptureFramePool : IClosable {
    public static Direct3D11CaptureFramePool CreateFreeThreaded(IDirect3DDevice device, DirectXPixelFormat pixelFormat, int numberOfBuffers, SizeInt32 size);
  }
  public sealed class GraphicsCaptureItem {
    public static GraphicsCaptureItem CreateFromVisual(Visual visual);
  }
}
namespace Windows.Graphics.Display.Core {
  public enum HdmiDisplayHdrOption {
    DolbyVisionLowLatency = 3,
  }
  public sealed class HdmiDisplayMode {
    bool IsDolbyVisionLowLatencySupported { get; }
  }
}
namespace Windows.Graphics.Holographic {
  public sealed class HolographicCamera {
    bool IsHardwareContentProtectionEnabled { get; set; }
    bool IsHardwareContentProtectionSupported { get; }
  }
  public sealed class HolographicQuadLayerUpdateParameters {
    bool CanAcquireWithHardwareProtection { get; }
    IDirect3DSurface AcquireBufferToUpdateContentWithHardwareProtection();
  }
}
namespace Windows.Graphics.Imaging {
  public sealed class BitmapDecoder : IBitmapFrame, IBitmapFrameWithSoftwareBitmap {
    public static Guid HeifDecoderId { get; }
    public static Guid WebpDecoderId { get; }
  }
  public sealed class BitmapEncoder {
    public static Guid HeifEncoderId { get; }
  }
}
namespace Windows.Management.Deployment {
  public enum DeploymentOptions : uint {
    ForceUpdateFromAnyVersion = (uint)262144,
  }
  public sealed class PackageManager {
    IAsyncOperationWithProgress&lt;DeploymentResult, DeploymentProgress&gt; DeprovisionPackageForAllUsersAsync(string packageFamilyName);
  }
  public enum RemovalOptions : uint {
    RemoveForAllUsers = (uint)524288,
  }
}
namespace Windows.Media.Audio {
  public sealed class CreateAudioDeviceInputNodeResult {
    HResult ExtendedError { get; }
  }
  public sealed class CreateAudioDeviceOutputNodeResult {
    HResult ExtendedError { get; }
  }
  public sealed class CreateAudioFileInputNodeResult {
    HResult ExtendedError { get; }
  }
  public sealed class CreateAudioFileOutputNodeResult {
    HResult ExtendedError { get; }
  }
  public sealed class CreateAudioGraphResult {
    HResult ExtendedError { get; }
  }
  public sealed class CreateMediaSourceAudioInputNodeResult {
    HResult ExtendedError { get; }
  }
  public enum MixedRealitySpatialAudioFormatPolicy
  public sealed class SetDefaultSpatialAudioFormatResult
  public enum SetDefaultSpatialAudioFormatStatus
  public sealed class SpatialAudioDeviceConfiguration
  public sealed class SpatialAudioFormatConfiguration
  public static class SpatialAudioFormatSubtype
}
namespace Windows.Media.Control {
  public sealed class CurrentSessionChangedEventArgs
  public sealed class GlobalSystemMediaTransportControlsSession
  public sealed class GlobalSystemMediaTransportControlsSessionManager
  public sealed class GlobalSystemMediaTransportControlsSessionMediaProperties
  public sealed class GlobalSystemMediaTransportControlsSessionPlaybackControls
  public sealed class GlobalSystemMediaTransportControlsSessionPlaybackInfo
  public enum GlobalSystemMediaTransportControlsSessionPlaybackStatus
  public sealed class GlobalSystemMediaTransportControlsSessionTimelineProperties
  public sealed class MediaPropertiesChangedEventArgs
  public sealed class PlaybackInfoChangedEventArgs
  public sealed class SessionsChangedEventArgs
  public sealed class TimelinePropertiesChangedEventArgs
}
namespace Windows.Media.Core {
  public sealed class MediaStreamSample {
    IDirect3DSurface Direct3D11Surface { get; }
    public static MediaStreamSample CreateFromDirect3D11Surface(IDirect3DSurface surface, TimeSpan timestamp);
  }
}
namespace Windows.Media.Devices.Core {
  public sealed class CameraIntrinsics {
    public CameraIntrinsics(Vector2 focalLength, Vector2 principalPoint, Vector3 radialDistortion, Vector2 tangentialDistortion, uint imageWidth, uint imageHeight);
  }
}
namespace Windows.Media.Import {
  public enum PhotoImportContentTypeFilter {
    ImagesAndVideosFromCameraRoll = 3,
  }
  public sealed class PhotoImportItem {
    string Path { get; }
  }
}
namespace Windows.Media.MediaProperties {
  public sealed class ImageEncodingProperties : IMediaEncodingProperties {
    public static ImageEncodingProperties CreateHeif();
  }
  public static class MediaEncodingSubtypes {
    public static string Heif { get; }
  }
}
namespace Windows.Media.Protection.PlayReady {
  public static class PlayReadyStatics {
    public static IReference&lt;DateTime&gt; HardwareDRMDisabledAtTime { get; }
    public static IReference&lt;DateTime&gt; HardwareDRMDisabledUntilTime { get; }
    public static void ResetHardwareDRMDisabled();
  }
}
namespace Windows.Media.Streaming.Adaptive {
  public enum AdaptiveMediaSourceResourceType {
    MediaSegmentIndex = 5,
  }
}
namespace Windows.Networking.BackgroundTransfer {
  public enum BackgroundTransferPriority {
    Low = 2,
  }
}
namespace Windows.Networking.Connectivity {
  public sealed class ConnectionProfile {
    bool CanDelete { get; }
    IAsyncOperation&lt;ConnectionProfileDeleteStatus&gt; TryDeleteAsync();
  }
  public enum ConnectionProfileDeleteStatus
}
namespace Windows.Networking.NetworkOperators {
  public enum ESimOperationStatus {
    CardGeneralFailure = 13,
    ConfirmationCodeMissing = 14,
    EidMismatch = 18,
    InvalidMatchingId = 15,
    NoCorrespondingRequest = 23,
    NoEligibleProfileForThisDevice = 16,
    OperationAborted = 17,
    OperationProhibitedByProfileClass = 21,
    ProfileNotAvailableForNewBinding = 19,
    ProfileNotPresent = 22,
    ProfileNotReleasedByOperator = 20,
  }
}
namespace Windows.Perception {
  public sealed class PerceptionTimestamp {
    TimeSpan SystemRelativeTargetTime { get; }
  }
  public static class PerceptionTimestampHelper {
    public static PerceptionTimestamp FromSystemRelativeTargetTime(TimeSpan targetTime);
  }
}
namespace Windows.Perception.Spatial {
  public sealed class SpatialAnchorExporter
  public enum SpatialAnchorExportPurpose
  public sealed class SpatialAnchorExportSufficiency
  public sealed class SpatialLocation {
    Vector3 AbsoluteAngularAccelerationAxisAngle { get; }
    Vector3 AbsoluteAngularVelocityAxisAngle { get; }
  }
}
namespace Windows.Perception.Spatial.Preview {
  public static class SpatialGraphInteropPreview
}
namespace Windows.Services.Cortana {
  public sealed class CortanaActionableInsights
  public sealed class CortanaActionableInsightsOptions
}
namespace Windows.Services.Store {
  public sealed class StoreAppLicense {
    bool IsDiscLicense { get; }
  }
  public sealed class StoreContext {
    IAsyncOperation&lt;StoreRateAndReviewResult&gt; RequestRateAndReviewAppAsync();
    IAsyncOperation&lt;IVectorView&lt;StoreQueueItem&gt;&gt; SetInstallOrderForAssociatedStoreQueueItemsAsync(IIterable&lt;StoreQueueItem&gt; items);
  }
  public sealed class StoreQueueItem {
    IAsyncAction CancelInstallAsync();
    IAsyncAction PauseInstallAsync();
    IAsyncAction ResumeInstallAsync();
  }
  public sealed class StoreRateAndReviewResult
 public enum StoreRateAndReviewStatus
}
namespace Windows.Storage.Provider {
  public enum StorageProviderHydrationPolicyModifier : uint {
    AutoDehydrationAllowed = (uint)4,
  }
  public sealed class StorageProviderSyncRootInfo {
    Guid ProviderId { get; set; }
  }
}
namespace Windows.System {
  public sealed class AppUriHandlerHost
  public sealed class AppUriHandlerRegistration
  public sealed class AppUriHandlerRegistrationManager
  public static class Launcher {
    public static IAsyncOperation&lt;bool&gt; LaunchFolderPathAsync(string path);
    public static IAsyncOperation&lt;bool&gt; LaunchFolderPathAsync(string path, FolderLauncherOptions options);
    public static IAsyncOperation&lt;bool&gt; LaunchFolderPathForUserAsync(User user, string path);
    public static IAsyncOperation&lt;bool&gt; LaunchFolderPathForUserAsync(User user, string path, FolderLauncherOptions options);
  }
}
namespace Windows.System.Preview {
  public enum HingeState
  public sealed class TwoPanelHingedDevicePosturePreview
  public sealed class TwoPanelHingedDevicePosturePreviewReading
  public sealed class TwoPanelHingedDevicePosturePreviewReadingChangedEventArgs
}
namespace Windows.System.Profile {
  public enum SystemOutOfBoxExperienceState
  public static class SystemSetupInfo
  public static class WindowsIntegrityPolicy
}
namespace Windows.System.Profile.SystemManufacturers {
  public sealed class SystemSupportDeviceInfo
  public static class SystemSupportInfo {
    public static SystemSupportDeviceInfo LocalDeviceInfo { get; }
  }
}
namespace Windows.System.RemoteSystems {
  public sealed class RemoteSystem {
    IVectorView&lt;RemoteSystemApp&gt; Apps { get; }
  }
  public sealed class RemoteSystemApp
  public sealed class RemoteSystemAppRegistration
  public sealed class RemoteSystemConnectionInfo
  public sealed class RemoteSystemConnectionRequest {
    RemoteSystemApp RemoteSystemApp { get; }
    public static RemoteSystemConnectionRequest CreateForApp(RemoteSystemApp remoteSystemApp);
  }
  public sealed class RemoteSystemWebAccountFilter : IRemoteSystemFilter
}
namespace Windows.System.Update {
  public enum SystemUpdateAttentionRequiredReason
  public sealed class SystemUpdateItem
  public enum SystemUpdateItemState
  public sealed class SystemUpdateLastErrorInfo
  public static class SystemUpdateManager
  public enum SystemUpdateManagerState
  public enum SystemUpdateStartInstallAction
}
namespace Windows.System.UserProfile {
  public sealed class AssignedAccessSettings
}
namespace Windows.UI.Accessibility {
  public sealed class ScreenReaderPositionChangedEventArgs
  public sealed class ScreenReaderService
}
namespace Windows.UI.Composition {
  public enum AnimationPropertyAccessMode
  public sealed class AnimationPropertyInfo : CompositionObject
  public sealed class BooleanKeyFrameAnimation : KeyFrameAnimation
  public class CompositionAnimation : CompositionObject, ICompositionAnimationBase {
    void SetExpressionReferenceParameter(string parameterName, IAnimationObject source);
  }
  public enum CompositionBatchTypes : uint {
    AllAnimations = (uint)5,
    InfiniteAnimation = (uint)4,
  }
  public sealed class CompositionGeometricClip : CompositionClip
  public class CompositionGradientBrush : CompositionBrush {
    CompositionMappingMode MappingMode { get; set; }
  }
  public enum CompositionMappingMode
  public class CompositionObject : IAnimationObject, IClosable {
    void PopulatePropertyInfo(string propertyName, AnimationPropertyInfo propertyInfo);
    public static void StartAnimationGroupWithIAnimationObject(IAnimationObject target, ICompositionAnimationBase animation);
    public static void StartAnimationWithIAnimationObject(IAnimationObject target, string propertyName, CompositionAnimation animation);
  }
  public sealed class Compositor : IClosable {
    BooleanKeyFrameAnimation CreateBooleanKeyFrameAnimation();
    CompositionGeometricClip CreateGeometricClip();
    CompositionGeometricClip CreateGeometricClip(CompositionGeometry geometry);
    RedirectVisual CreateRedirectVisual();
    RedirectVisual CreateRedirectVisual(Visual source);
  }
  public interface IAnimationObject
  public sealed class RedirectVisual : ContainerVisual
}
namespace Windows.UI.Composition.Interactions {
  public sealed class InteractionSourceConfiguration : CompositionObject
  public enum InteractionSourceRedirectionMode
  public sealed class InteractionTracker : CompositionObject {
    bool IsInertiaFromImpulse { get; }
    int TryUpdatePosition(Vector3 value, InteractionTrackerClampingOption option);
    int TryUpdatePositionBy(Vector3 amount, InteractionTrackerClampingOption option);
  }
  public enum InteractionTrackerClampingOption
  public sealed class InteractionTrackerInertiaStateEnteredArgs {
    bool IsInertiaFromImpulse { get; }
  }
  public class VisualInteractionSource : CompositionObject, ICompositionInteractionSource {
    InteractionSourceConfiguration PointerWheelConfig { get; }
  }
}
namespace Windows.UI.Input.Inking {
  public enum HandwritingLineHeight
  public sealed class PenAndInkSettings
  public enum PenHandedness
}
namespace Windows.UI.Input.Inking.Preview {
  public sealed class PalmRejectionDelayZonePreview : IClosable
}
namespace Windows.UI.Notifications {
  public sealed class ScheduledToastNotificationShowingEventArgs
  public sealed class ToastNotifier {
    event TypedEventHandler&lt;ToastNotifier, ScheduledToastNotificationShowingEventArgs&gt; ScheduledToastNotificationShowing;
  }
}
namespace Windows.UI.Shell {
  public enum SecurityAppKind
  public sealed class SecurityAppManager
  public struct SecurityAppManagerContract
  public enum SecurityAppState
  public enum SecurityAppSubstatus
  public sealed class TaskbarManager {
    IAsyncOperation&lt;bool&gt; IsSecondaryTilePinnedAsync(string tileId);
    IAsyncOperation&lt;bool&gt; RequestPinSecondaryTileAsync(SecondaryTile secondaryTile);
    IAsyncOperation&lt;bool&gt; TryUnpinSecondaryTileAsync(string tileId);
  }
}
namespace Windows.UI.StartScreen {
  public sealed class StartScreenManager {
    IAsyncOperation&lt;bool&gt; ContainsSecondaryTileAsync(string tileId);
    IAsyncOperation&lt;bool&gt; TryRemoveSecondaryTileAsync(string tileId);
  }
}
namespace Windows.UI.Text {
  public sealed class RichEditTextDocument : ITextDocument {
    void ClearUndoRedoHistory();
  }
}
namespace Windows.UI.Text.Core {
  public sealed class CoreTextLayoutRequest {
    CoreTextLayoutBounds LayoutBoundsVisualPixels { get; }
  }
}
namespace Windows.UI.ViewManagement {
  public enum ApplicationViewWindowingMode {
    CompactOverlay = 3,
    Maximized = 4,
  }
}
namespace Windows.UI.ViewManagement.Core {
  public sealed class CoreInputView {
    bool TryHide();
    bool TryShow();
    bool TryShow(CoreInputViewKind type);
  }
  public enum CoreInputViewKind
}
namespace Windows.UI.WebUI {
  public sealed class BackgroundActivatedEventArgs : IBackgroundActivatedEventArgs
  public delegate void BackgroundActivatedEventHandler(object sender, IBackgroundActivatedEventArgs eventArgs);
  public sealed class NewWebUIViewCreatedEventArgs
  public static class WebUIApplication {
    public static event BackgroundActivatedEventHandler BackgroundActivated;
    public static event EventHandler&lt;NewWebUIViewCreatedEventArgs&gt; NewWebUIViewCreated;
  }
  public sealed class WebUIView : IWebViewControl, IWebViewControl2
}
namespace Windows.UI.Xaml {
  public class BrushTransition
  public class ColorPaletteResources : ResourceDictionary
  public class DataTemplate : FrameworkTemplate, IElementFactory {
    UIElement GetElement(ElementFactoryGetArgs args);
    void RecycleElement(ElementFactoryRecycleArgs args);
  }
  public sealed class DebugSettings {
    bool FailFastOnErrors { get; set; }
  }
  public sealed class EffectiveViewportChangedEventArgs
  public class ElementFactoryGetArgs
  public class ElementFactoryRecycleArgs
  public class FrameworkElement : UIElement {
    bool IsLoaded { get; }
    event TypedEventHandler&lt;FrameworkElement, EffectiveViewportChangedEventArgs&gt; EffectiveViewportChanged;
    void InvalidateViewport();
  }
  public interface IElementFactory
  public class ScalarTransition
  public class UIElement : DependencyObject, IAnimationObject {
    bool CanBeScrollAnchor { get; set; }
    public static DependencyProperty CanBeScrollAnchorProperty { get; }
    Vector3 CenterPoint { get; set; }
    ScalarTransition OpacityTransition { get; set; }
    float Rotation { get; set; }
    Vector3 RotationAxis { get; set; }
    ScalarTransition RotationTransition { get; set; }
    Vector3 Scale { get; set; }
    Vector3Transition ScaleTransition { get; set; }
    Matrix4x4 TransformMatrix { get; set; }
    Vector3 Translation { get; set; }
    Vector3Transition TranslationTransition { get; set; }
    void PopulatePropertyInfo(string propertyName, AnimationPropertyInfo propertyInfo);
    virtual void PopulatePropertyInfoOverride(string propertyName, AnimationPropertyInfo animationPropertyInfo);
    void StartAnimation(ICompositionAnimationBase animation);
    void StopAnimation(ICompositionAnimationBase animation);
  }
  public class Vector3Transition
  public enum Vector3TransitionComponents : uint
}
namespace Windows.UI.Xaml.Automation {
  public sealed class AutomationElementIdentifiers {
    public static AutomationProperty IsDialogProperty { get; }
  }
  public sealed class AutomationProperties {
    public static DependencyProperty IsDialogProperty { get; }
    public static bool GetIsDialog(DependencyObject element);
    public static void SetIsDialog(DependencyObject element, bool value);
  }
}
namespace Windows.UI.Xaml.Automation.Peers {
  public class AppBarButtonAutomationPeer : ButtonAutomationPeer, IExpandCollapseProvider {
    ExpandCollapseState ExpandCollapseState { get; }
    void Collapse();
   void Expand();
  }
  public class AutomationPeer : DependencyObject {
    bool IsDialog();
    virtual bool IsDialogCore();
  }
  public class MenuBarAutomationPeer : FrameworkElementAutomationPeer
  public class MenuBarItemAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider, IInvokeProvider
}
namespace Windows.UI.Xaml.Controls {
  public sealed class AnchorRequestedEventArgs
  public class AppBarElementContainer : ContentControl, ICommandBarElement, ICommandBarElement2
  public sealed class AutoSuggestBox : ItemsControl {
    object Description { get; set; }
    public static DependencyProperty DescriptionProperty { get; }
  }
  public enum BackgroundSizing
  public sealed class Border : FrameworkElement {
    BackgroundSizing BackgroundSizing { get; set; }
    public static DependencyProperty BackgroundSizingProperty { get; }
    BrushTransition BackgroundTransition { get; set; }
  }
  public class CalendarDatePicker : Control {
    object Description { get; set; }
    public static DependencyProperty DescriptionProperty { get; }
  }
  public class ComboBox : Selector {
    object Description { get; set; }
    public static DependencyProperty DescriptionProperty { get; }
    bool IsEditable { get; set; }
    public static DependencyProperty IsEditableProperty { get; }
    string Text { get; set; }
    Style TextBoxStyle { get; set; }
    public static DependencyProperty TextBoxStyleProperty { get; }
    public static DependencyProperty TextProperty { get; }
    event TypedEventHandler&lt;ComboBox, ComboBoxTextSubmittedEventArgs&gt; TextSubmitted;
  }
  public sealed class ComboBoxTextSubmittedEventArgs
  public class CommandBarFlyout : FlyoutBase
  public class ContentPresenter : FrameworkElement {
    BackgroundSizing BackgroundSizing { get; set; }
    public static DependencyProperty BackgroundSizingProperty { get; }
    BrushTransition BackgroundTransition { get; set; }
  }
  public class Control : FrameworkElement {
    BackgroundSizing BackgroundSizing { get; set; }
    public static DependencyProperty BackgroundSizingProperty { get; }
    CornerRadius CornerRadius { get; set; }
    public static DependencyProperty CornerRadiusProperty { get; }
  }
  public class DataTemplateSelector : IElementFactory {
    UIElement GetElement(ElementFactoryGetArgs args);
    void RecycleElement(ElementFactoryRecycleArgs args);
  }
  public class DatePicker : Control {
    IReference&lt;DateTime&gt; SelectedDate { get; set; }
    public static DependencyProperty SelectedDateProperty { get; }
    event TypedEventHandler&lt;DatePicker, DatePickerSelectedValueChangedEventArgs&gt; SelectedDateChanged;
  }
  public sealed class DatePickerSelectedValueChangedEventArgs
  public class DropDownButton : Button
  public class DropDownButtonAutomationPeer : ButtonAutomationPeer, IExpandCollapseProvider
  public class Frame : ContentControl, INavigate {
    bool IsNavigationStackEnabled { get; set; }
    public static DependencyProperty IsNavigationStackEnabledProperty { get; }
    bool NavigateToType(TypeName sourcePageType, object parameter, FrameNavigationOptions navigationOptions);
  }
  public class Grid : Panel {
    BackgroundSizing BackgroundSizing { get; set; }
    public static DependencyProperty BackgroundSizingProperty { get; }
  }
  public class IconSourceElement : IconElement
  public interface IScrollAnchorProvider
  public class MenuBar : Control
  public class MenuBarItem : Control
  public class MenuBarItemFlyout : MenuFlyout
  public class NavigationView : ContentControl {
    UIElement ContentOverlay { get; set; }
    public static DependencyProperty ContentOverlayProperty { get; }
    bool IsPaneVisible { get; set; }
    public static DependencyProperty IsPaneVisibleProperty { get; }
    NavigationViewOverflowLabelMode OverflowLabelMode { get; set; }
    public static DependencyProperty OverflowLabelModeProperty { get; }
    UIElement PaneCustomContent { get; set; }
    public static DependencyProperty PaneCustomContentProperty { get; }
    NavigationViewPaneDisplayMode PaneDisplayMode { get; set; }
    public static DependencyProperty PaneDisplayModeProperty { get; }
    UIElement PaneHeader { get; set; }
    public static DependencyProperty PaneHeaderProperty { get; }
    NavigationViewSelectionFollowsFocus SelectionFollowsFocus { get; set; }
    public static DependencyProperty SelectionFollowsFocusProperty { get; }
    NavigationViewShoulderNavigationEnabled ShoulderNavigationEnabled { get; set; }
    public static DependencyProperty ShoulderNavigationEnabledProperty { get; }
    NavigationViewTemplateSettings TemplateSettings { get; }
    public static DependencyProperty TemplateSettingsProperty { get; }
  }
  public class NavigationViewItem : NavigationViewItemBase {
    bool SelectsOnInvoked { get; set; }
    public static DependencyProperty SelectsOnInvokedProperty { get; }
  }
  public sealed class NavigationViewItemInvokedEventArgs {
    NavigationViewItemBase InvokedItemContainer { get; }
    NavigationTransitionInfo RecommendedNavigationTransitionInfo { get; }
  }
  public enum NavigationViewOverflowLabelMode
  public enum NavigationViewPaneDisplayMode
  public sealed class NavigationViewSelectionChangedEventArgs {
    NavigationTransitionInfo RecommendedNavigationTransitionInfo { get; }
    NavigationViewItemBase SelectedItemContainer { get; }
  }
  public enum NavigationViewSelectionFollowsFocus
  public enum NavigationViewShoulderNavigationEnabled
  public class NavigationViewTemplateSettings : DependencyObject
  public class Panel : FrameworkElement {
    BrushTransition BackgroundTransition { get; set; }
  }
  public sealed class PasswordBox : Control {
    bool CanPasteClipboardContent { get; }
    public static DependencyProperty CanPasteClipboardContentProperty { get; }
    object Description { get; set; }
    public static DependencyProperty DescriptionProperty { get; }
    FlyoutBase SelectionFlyout { get; set; }
    public static DependencyProperty SelectionFlyoutProperty { get; }
    void PasteFromClipboard();
  }
  public class RelativePanel : Panel {
    BackgroundSizing BackgroundSizing { get; set; }
    public static DependencyProperty BackgroundSizingProperty { get; }
  }
  public class RichEditBox : Control {
    object Description { get; set; }
    public static DependencyProperty DescriptionProperty { get; }
    FlyoutBase ProofingMenuFlyout { get; }
    public static DependencyProperty ProofingMenuFlyoutProperty { get; }
    FlyoutBase SelectionFlyout { get; set; }
    public static DependencyProperty SelectionFlyoutProperty { get; }
    RichEditTextDocument TextDocument { get; }
    event TypedEventHandler&lt;RichEditBox, RichEditBoxSelectionChangingEventArgs&gt; SelectionChanging;
  }
  public sealed class RichEditBoxSelectionChangingEventArgs
  public sealed class RichTextBlock : FrameworkElement {
    FlyoutBase SelectionFlyout { get; set; }
    public static DependencyProperty SelectionFlyoutProperty { get; }
    void CopySelectionToClipboard();
  }
  public sealed class ScrollContentPresenter : ContentPresenter {
    bool CanContentRenderOutsideBounds { get; set; }
    public static DependencyProperty CanContentRenderOutsideBoundsProperty { get; }
    bool SizesContentToTemplatedParent { get; set; }
    public static DependencyProperty SizesContentToTemplatedParentProperty { get; }
  }
  public sealed class ScrollViewer : ContentControl, IScrollAnchorProvider {
    bool CanContentRenderOutsideBounds { get; set; }
    public static DependencyProperty CanContentRenderOutsideBoundsProperty { get; }
    UIElement CurrentAnchor { get; }
    double HorizontalAnchorRatio { get; set; }
    public static DependencyProperty HorizontalAnchorRatioProperty { get; }
    bool ReduceViewportForCoreInputViewOcclusions { get; set; }
    public static DependencyProperty ReduceViewportForCoreInputViewOcclusionsProperty { get; }
    double VerticalAnchorRatio { get; set; }
    public static DependencyProperty VerticalAnchorRatioProperty { get; }
    event TypedEventHandler&lt;ScrollViewer, AnchorRequestedEventArgs&gt; AnchorRequested;
    public static bool GetCanContentRenderOutsideBounds(DependencyObject element);
    void RegisterAnchorCandidate(UIElement element);
    public static void SetCanContentRenderOutsideBounds(DependencyObject element, bool canContentRenderOutsideBounds);
    void UnregisterAnchorCandidate(UIElement element);
  }
  public class SplitButton : ContentControl
  public class SplitButtonAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider, IInvokeProvider
  public sealed class SplitButtonClickEventArgs
  public class StackPanel : Panel, IInsertionPanel, IScrollSnapPointsInfo {
    BackgroundSizing BackgroundSizing { get; set; }
    public static DependencyProperty BackgroundSizingProperty { get; }
  }
  public sealed class TextBlock : FrameworkElement {
    FlyoutBase SelectionFlyout { get; set; }
    public static DependencyProperty SelectionFlyoutProperty { get; }
    void CopySelectionToClipboard();
  }
  public class TextBox : Control {
    bool CanPasteClipboardContent { get; }
    public static DependencyProperty CanPasteClipboardContentProperty { get; }
    bool CanRedo { get; }
    public static DependencyProperty CanRedoProperty { get; }
   bool CanUndo { get; }
    public static DependencyProperty CanUndoProperty { get; }
    object Description { get; set; }
    public static DependencyProperty DescriptionProperty { get; }
    FlyoutBase ProofingMenuFlyout { get; }
    public static DependencyProperty ProofingMenuFlyoutProperty { get; }
    FlyoutBase SelectionFlyout { get; set; }
    public static DependencyProperty SelectionFlyoutProperty { get; }
    event TypedEventHandler&lt;TextBox, TextBoxSelectionChangingEventArgs&gt; SelectionChanging;
    void ClearUndoRedoHistory();
    void CopySelectionToClipboard();
    void CutSelectionToClipboard();
    void PasteFromClipboard();
    void Redo();
    void Undo();
  }
  public sealed class TextBoxSelectionChangingEventArgs
  public class TextCommandBarFlyout : CommandBarFlyout
  public class TimePicker : Control {
    IReference&lt;TimeSpan&gt; SelectedTime { get; set; }
    public static DependencyProperty SelectedTimeProperty { get; }
    event TypedEventHandler&lt;TimePicker, TimePickerSelectedValueChangedEventArgs&gt; SelectedTimeChanged;
  }
  public sealed class TimePickerSelectedValueChangedEventArgs
  public class ToggleSplitButton : SplitButton
  public class ToggleSplitButtonAutomationPeer : FrameworkElementAutomationPeer, IExpandCollapseProvider, IToggleProvider
  public sealed class ToggleSplitButtonIsCheckedChangedEventArgs
  public class ToolTip : ContentControl {
    IReference&lt;Rect&gt; PlacementRect { get; set; }
    public static DependencyProperty PlacementRectProperty { get; }
  }
  public class TreeView : Control {
    bool CanDragItems { get; set; }
    public static DependencyProperty CanDragItemsProperty { get; }
    bool CanReorderItems { get; set; }
    public static DependencyProperty CanReorderItemsProperty { get; }
    Style ItemContainerStyle { get; set; }
    public static DependencyProperty ItemContainerStyleProperty { get; }
    StyleSelector ItemContainerStyleSelector { get; set; }
    public static DependencyProperty ItemContainerStyleSelectorProperty { get; }
    TransitionCollection ItemContainerTransitions { get; set; }
    public static DependencyProperty ItemContainerTransitionsProperty { get; }
    object ItemsSource { get; set; }
    public static DependencyProperty ItemsSourceProperty { get; }
    DataTemplate ItemTemplate { get; set; }
    public static DependencyProperty ItemTemplateProperty { get; }
    DataTemplateSelector ItemTemplateSelector { get; set; }
    public static DependencyProperty ItemTemplateSelectorProperty { get; }
    event TypedEventHandler&lt;TreeView, TreeViewDragItemsCompletedEventArgs&gt; DragItemsCompleted;
    event TypedEventHandler&lt;TreeView, TreeViewDragItemsStartingEventArgs&gt; DragItemsStarting;
    DependencyObject ContainerFromItem(object item);
    DependencyObject ContainerFromNode(TreeViewNode node);
    object ItemFromContainer(DependencyObject container);
    TreeViewNode NodeFromContainer(DependencyObject container);
  }
  public sealed class TreeViewCollapsedEventArgs {
    object Item { get; }
  }
  public sealed class TreeViewDragItemsCompletedEventArgs
  public sealed class TreeViewDragItemsStartingEventArgs
  public sealed class TreeViewExpandingEventArgs {
    object Item { get; }
  }
  public class TreeViewItem : ListViewItem {
    bool HasUnrealizedChildren { get; set; }
    public static DependencyProperty HasUnrealizedChildrenProperty { get; }
    object ItemsSource { get; set; }
    public static DependencyProperty ItemsSourceProperty { get; }
  }
  public sealed class WebView : FrameworkElement {
    event TypedEventHandler&lt;WebView, WebViewWebResourceRequestedEventArgs&gt; WebResourceRequested;
  }
  public sealed class WebViewWebResourceRequestedEventArgs
}
namespace Windows.UI.Xaml.Controls.Maps {
  public enum MapTileAnimationState
  public sealed class MapTileBitmapRequestedEventArgs {
    int FrameIndex { get; }
  }
  public class MapTileSource : DependencyObject {
    MapTileAnimationState AnimationState { get; }
    public static DependencyProperty AnimationStateProperty { get; }
    bool AutoPlay { get; set; }
    public static DependencyProperty AutoPlayProperty { get; }
    int FrameCount { get; set; }
    public static DependencyProperty FrameCountProperty { get; }
    TimeSpan FrameDuration { get; set; }
    public static DependencyProperty FrameDurationProperty { get; }
    void Pause();
    void Play();
    void Stop();
  }
  public sealed class MapTileUriRequestedEventArgs {
    int FrameIndex { get; }
  }
}
namespace Windows.UI.Xaml.Controls.Primitives {
  public class CommandBarFlyoutCommandBar : CommandBar
  public sealed class CommandBarFlyoutCommandBarTemplateSettings : DependencyObject
  public class FlyoutBase : DependencyObject {
    bool AreOpenCloseAnimationsEnabled { get; set; }
    public static DependencyProperty AreOpenCloseAnimationsEnabledProperty { get; }
    bool InputDevicePrefersPrimaryCommands { get; }
    public static DependencyProperty InputDevicePrefersPrimaryCommandsProperty { get; }
    bool IsOpen { get; }
    public static DependencyProperty IsOpenProperty { get; }
    FlyoutShowMode ShowMode { get; set; }
    public static DependencyProperty ShowModeProperty { get; }
    public static DependencyProperty TargetProperty { get; }
    void ShowAt(DependencyObject placementTarget, FlyoutShowOptions showOptions);
  }
  public enum FlyoutPlacementMode {
    Auto = 13,
    BottomEdgeAlignedLeft = 7,
    BottomEdgeAlignedRight = 8,
    LeftEdgeAlignedBottom = 10,
    LeftEdgeAlignedTop = 9,
    RightEdgeAlignedBottom = 12,
    RightEdgeAlignedTop = 11,
    TopEdgeAlignedLeft = 5,
    TopEdgeAlignedRight = 6,
  }
 public enum FlyoutShowMode
  public class FlyoutShowOptions
  public class NavigationViewItemPresenter : ContentControl
}
namespace Windows.UI.Xaml.Core.Direct {
  public interface IXamlDirectObject
  public sealed class XamlDirect
  public struct XamlDirectContract
  public enum XamlEventIndex
  public enum XamlPropertyIndex
  public enum XamlTypeIndex
}
namespace Windows.UI.Xaml.Hosting {
  public class DesktopWindowXamlSource : IClosable
  public sealed class DesktopWindowXamlSourceGotFocusEventArgs
  public sealed class DesktopWindowXamlSourceTakeFocusRequestedEventArgs
  public sealed class WindowsXamlManager : IClosable
  public enum XamlSourceFocusNavigationReason
  public sealed class XamlSourceFocusNavigationRequest
  public sealed class XamlSourceFocusNavigationResult
}
namespace Windows.UI.Xaml.Input {
  public sealed class CanExecuteRequestedEventArgs
  public sealed class ExecuteRequestedEventArgs
  public sealed class FocusManager {
    public static event EventHandler&lt;GettingFocusEventArgs&gt; GettingFocus;
    public static event EventHandler&lt;FocusManagerGotFocusEventArgs&gt; GotFocus;
    public static event EventHandler&lt;LosingFocusEventArgs&gt; LosingFocus;
    public static event EventHandler&lt;FocusManagerLostFocusEventArgs&gt; LostFocus;
  }
  public sealed class FocusManagerGotFocusEventArgs
  public sealed class FocusManagerLostFocusEventArgs
  public sealed class GettingFocusEventArgs : RoutedEventArgs {
    Guid CorrelationId { get; }
  }
  public sealed class LosingFocusEventArgs : RoutedEventArgs {
    Guid CorrelationId { get; }
  }
  public class StandardUICommand : XamlUICommand
  public enum StandardUICommandKind
  public class XamlUICommand : DependencyObject, ICommand
}
namespace Windows.UI.Xaml.Markup {
  public sealed class FullXamlMetadataProviderAttribute : Attribute
  public interface IXamlBindScopeDiagnostics
  public interface IXamlType2 : IXamlType
}
namespace Windows.UI.Xaml.Media {
  public class Brush : DependencyObject, IAnimationObject {
    void PopulatePropertyInfo(string propertyName, AnimationPropertyInfo propertyInfo);
    virtual void PopulatePropertyInfoOverride(string propertyName, AnimationPropertyInfo animationPropertyInfo);
  }
}
namespace Windows.UI.Xaml.Media.Animation {
  public class BasicConnectedAnimationConfiguration : ConnectedAnimationConfiguration
  public sealed class ConnectedAnimation {
    ConnectedAnimationConfiguration Configuration { get; set; }
  }
  public class ConnectedAnimationConfiguration
  public class DirectConnectedAnimationConfiguration : ConnectedAnimationConfiguration
  public class GravityConnectedAnimationConfiguration : ConnectedAnimationConfiguration
  public enum SlideNavigationTransitionEffect
  public sealed class SlideNavigationTransitionInfo : NavigationTransitionInfo {
    SlideNavigationTransitionEffect Effect { get; set; }
    public static DependencyProperty EffectProperty { get; }
  }
}
namespace Windows.UI.Xaml.Navigation {
  public class FrameNavigationOptions
}
namespace Windows.Web.UI {
  public interface IWebViewControl2
  public sealed class WebViewControlNewWindowRequestedEventArgs {
    IWebViewControl NewWindow { get; set; }
    Deferral GetDeferral();
  }
  public enum WebViewControlPermissionType {
    ImmersiveView = 6,
  }
}
namespace Windows.Web.UI.Interop {
  public sealed class WebViewControl : IWebViewControl, IWebViewControl2 {
    event TypedEventHandler&lt;WebViewControl, object&gt; GotFocus;
    event TypedEventHandler&lt;WebViewControl, object&gt; LostFocus;
    void AddInitializeScript(string script);
  }
}

Removals


namespace Windows.Gaming.UI {
  public sealed class GameMonitor
  public enum GameMonitoringPermission
}

Additional Store Win32 APIs

The following APIs have been added to the Application Certification Kit list.

  • CM_Get_Device_Interface_List_SizeA
  • CM_Get_Device_Interface_List_SizeW
  • CM_Get_Device_Interface_ListA
  • CM_Get_Device_Interface_ListW
  • CM_MapCrToWin32Err
  • CM_Register_Notification
  • CM_Unregister_Notification
  • CoDecrementMTAUsage
  • CoIncrementMTAUsage
  • ColorAdapterGetCurrentProfileCalibration
  • ColorAdapterGetDisplayCurrentStateID
  • ColorAdapterGetDisplayProfile
  • ColorAdapterGetDisplayTargetWhitePoint
  • ColorAdapterGetDisplayTransformData
  • ColorAdapterGetSystemModifyWhitePointCaps
  • ColorAdapterRegisterOEMColorService
  • ColorAdapterUnregisterOEMColorService
  • ColorProfileAddDisplayAssociation
  • ColorProfileGetDisplayDefault
  • ColorProfileGetDisplayList
  • ColorProfileGetDisplayUserScope
  • ColorProfileRemoveDisplayAssociation
  • ColorProfileSetDisplayDefaultAssociation
  • DeviceIoControl
  • EventEnabled
  • EventProviderEnabled
  • ExitProcess
  • GetProductInfo
  • GetSystemTimes
  • InstallColorProfileA
  • InstallColorProfileW
  • LocalFileTimeToLocalSystemTime
  • LocalSystemTimeToLocalFileTime
  • MLCreateOperatorRegistry
  • RoIsApiContractMajorVersionPresent
  • RoIsApiContractPresent
  • RtlVirtualUnwind
  • SetProcessValidCallTargetsForMappedView
  • sqlite3_value_nochange
  • sqlite3_vtab_collation
  • sqlite3_vtab_nochange
  • sqlite3_win32_set_directory
  • sqlite3_win32_set_directory16
  • sqlite3_win32_set_directory8
  • ubiditransform_close
  • ubiditransform_open
  • ubiditransform_transform
  • ubrk_getBinaryRules
  • ubrk_openBinaryRules
  • unum_formatDoubleForFields
  • uplrules_getKeywords
  • uspoof_check2
  • uspoof_check2UTF8
  • uspoof_closeCheckResult
  • uspoof_getCheckResultChecks
  • uspoof_getCheckResultNumerics
  • uspoof_getCheckResultRestrictionLevel
  • uspoof_openCheckResult

 

The post Windows 10 SDK Preview Build 17758 available now! appeared first on Windows Developer Blog.

Not Hotdog: A Shiny app using the Custom Vision API

$
0
0

I had a great time at the EARL Conference in London last week, and as always came away invigorated by all of the applications of R that were presented there. I'll do a full writeup of the conference later this week, but in the meantime I wanted to share the materials from my own presentation there, "Not Hotdog: Image Recognition with R and the Custom Vision API". I've embedded the slides below:

This is an embedded Microsoft Office presentation, powered by Office Online.

In the presentation, I showed how easy it is to build a Shiny app to perform image recognition with the Custom Vision API in Azure. I've provided all of the R code behind the app in this GitHub repository, and thanks to the httr package it takes just a few lines of R code to interface with the API to upload images, train a transfer learning model, and classify new images. It's also handy to be able to use the customvision.ai web portal to review your tagged images and model performance. 

This was my first time building a Shiny app, and it was really easy to learn how to do it thanks to the RStudio tutorials. One feature that proved particularly useful was reactive expressions, which would cache the results of the prediction and prevent a call out to the API every time I touched the "threshold" slider. The prediction API is rate-limited, and this way it was only called when the user actually changes the image URL, a relatively rare event. In all, it took me less than a day to learn Shiny and create the application below. Here it is correctly classifying this image of a hotdog (source), and correctly identifying that this hot dog (source) is not a hotdog.

Hotdog

Nothotdog

If you want to try this out yourself, all you'll need is an Azure subscription (new subscribers can also get $200 free credits) and the R code in the repository below.

Github (revodavid): Not Hotdog vision recognition using R and Custom Vision API

This month on Bing: Visual Search expanded, Education, American Sign Language, and more

$
0
0

We’re excited to announce several new features this September at Bing.

Back in June 2018, we launched Visual Search to let you search what you see. Built on the Intelligent Image Search technology already in Bing, Visual Search allows you to search, shop and learn more about the world through the photos you take or images you see.

Now, we are expanding on these prior capabilities by adding Text Transcription, updates to the Visual Search dialog box, and Math Solver—which allows you to solve complex equations by simply taking a photo. As part of Bing’s continued focus on providing educational resources, we’ve also expanded Bing’s educational capabilities to include interactive sections in math, science, and languages including American Sign Language (ASL).

Finally, for our NFL fans out there, we’ve added contextually specific, nuanced answers on a huge variety of past games just in time for football season. 

All of these features are added with the intention of saving you valuable time whether by helping you quickly search using an image, transcribing text in an instant, or learning something new on the fly. 
 

Math Solver 

 

Ever needed help solving a tough math problem? Or when helping a loved one with homework —would you know where to start? 

Math-Solver.png

Released this past month on iOS and coming soon on Android, Math Solver allows you to solve mathematical equations, including calculus, by taking a picture and tapping the “Math” button located in the bottom menu between “Auto” and “Barcode.” Math Solver will solve the equation with a step-by-step explanation and will also connect you to related online videos, such as Kahn Academy lectures, to help you grow your mathematical knowledge. 

 

Text Transcription 

 

In addition to using Visual Search for identifying objects, finding similar images, finding similar products for purchase, and even solving math problems, Visual Search will allow you to quickly copy and search the text you see directly through your camera. You can take a picture of a phone number to call it directly, add an email to your contacts list, visit a website, navigate to an address, or simply copy/paste text. 

Have you ever been in a restaurant and found a dish you can’t pronounce… or identify? Snap a pic, tap the menu text and search. Need to copy that annoyingly long serial number or transcribe a website URL without typing? We have you covered. Stay tuned for Text Transcription rolling out on iOS in the next few weeks. 

Text-Transcription.png



Search Faster Using Images

 

Based on user feedback, we’ve now made searching via image on Bing.com easier than ever by redesigning the Visual Search dialog box, which you can find after clicking on the Bing Image tab. The more intuitive design now allows for dragging and dropping an image, either from Bing or your computer’s desktop, directly into the image box to search in a snap. You can also copy and paste an image directly into the box in addition to a URL or take a picture directly by using your computer’s camera. 

VisualSearchBox.png


We hope these improvements help to make visual search an intuitive and easy tool for your everyday life.

 

Bing Education Carousel

 

As kids head back to school, we know that homework time can be stressful for parents. In addition to Math Solver, Bing has released a full suite of math, science, and language tools to make learning easy for parents and students. Many of these experiences feature step-by-step instructions and quizzes to help with memory and retention. Next time you want to learn a popular topic quickly, search for “Education on Bing” or try specific topics like “Solar System,” “Fraction Calculator,” and “Language Translator.” 

EDU-(1).png


American Sign Language (ASL) on Bing

 

In the spirit of empowering every customer and enabling learning across diverse groups, the Bing team has also created a “Sign Language” experience. The experience contains 159 videos of words and 13 phrases in American Sign Language (ASL), uniquely catered towards a growing audience of students learning sign language in schools. While the experience currently has trained interpreters signing in the videos, the Bing team is working towards an even more authentic experience featuring people from the deaf community. 

ASL.png

With September being National Deaf Awareness Month, we invite all our users to grow their knowledge of ASL. Next time you want to communicate across a loud room, communicate with someone who signs, or simply learn something beautiful, visit Bing.com on desktop or mobile and search for "sign language."

 

Intelligent Answers for NFL 

 

The start of the school year also means the start of football season, and now whether you are a Fantasy Football rising star or simply an NFL aficionado, Bing has you covered with in-depth, context-specific information on every NFL game ever played. 

After painfully seeing your team’s quarterback sacked, have you ever wondered which quarterback was intercepted the most last year?  Or when your team is down by a few points with five minutes remaining, do you wonder which team scored the most touchdowns in the last five minutes in 2017?  Who was the NFL rushing yards leader in the 4th quarter of the 2015 playoffs? 

Bing can now reason over the detailed NFL statistics of every game since 2000 and instantly crunch the numbers to summarize the answer to your question that’s concise and presentable.  Download the Bing mobile app for iOS or Android and see for yourself.

NFL.png

We value your feedback


We hope you’re as excited about these features as we are! As always, we truly value your perspective, and one of the best ways for you to provide it is via the Bing Insider Program, which gives our most passionate users the opportunity to provide feedback to Bing engineers and partner teams via monthly calls, Insider events, interactive feedback sessions, and more.

Please register at the Bing Insider site to be a Bing Insider. And even if you don’t join today, the website is chock-full of great content featuring our Insiders as well as new Bing features. We hope you enjoy the new site and come back often.

- The Bing Team

 


Parallel Custom Build Tools in Visual Studio 2017

$
0
0

This post was written by Olga Arkhipova.

Many projects need to use additional tools during their build to generate sources for further compilation or perform other custom build tasks. VC projects have always supported Custom Build Tool integration, but it had some limitations. One of the popular requests on UserVoice is Allow custom build tools to run in parallel. Another problem is that often custom build outputs need to be passed to other build tools (for instance, some tools can generate C/C++ sources, which need to be passed to the compiler) and there was no easy way to specify that.

To solve these problems, we added support for parallel execution of custom build tools and new options for easier build integration in Visual Studio 2017 15.8.

Also, one of the most common build customizations is copying files. Before, we recommended using “Custom Build Step” or “Custom Build Tool” and specifying copy commands there. Now you can use simple Copy File options.

Custom Build Tool Options

If you are familiar with Custom Build Tool usage, you can skip this section and go to New Custom Build Tool Options.

Custom Build Tool options are not visible in the “Project Properties” until you have at least one file using “Custom Build Tool” as its “Item Type”. You can set it in the file’s “General” properties:

Custom Build Tool Item Type

As for other tools, you can set “Custom Build Tool” properties for each file, but usually it is easier to set them at the project configuration level, so they apply to all files which use “Custom Build Tool”. Note that you can use MSBuild Well-known Item Metadata there to specify file specific options. Unfortunately, you cannot use other item properties as they are not guaranteed to be defined before their usage.

Custom Build Tool Properties

Command Line

Specifies the command(s) to execute in cmd.exe. If you want several commands to be executed for the same file, you can add them to a script file or just enter them in the property editor, each command on a separate line:

Custom Command Line

Description

Specifies a message to be printed before execution of the command(s), optional. It is added as ‘’echo” command, so if you want to use “>” symbol, it needs to be escaped: “^>”.

Outputs

Specifies the output files the custom build tool generates.

Additional Dependencies

Specifies any additional input files to use for the custom build tool. Required for incremental build.

Link Objects

Specify whether the Inputs and outputs files with specific extensions (.obj, .lib, .res, .rsc) are passed to the linker.
This property was added in VS 2010 to maintain the behavior of pre-msbuild vc projects (VS 2009 and before) where file extensions determined which build action was performed on them.

MSBuild is operating on items included into a particular named ItemGroup (Item Type), so we recommend using the new “Add Outputs to Item Type” property instead.

Treat Output As Content

Specify whether the output file is a deployable content. Only used in projects supporting packaging (Universal Windows).

Content Root Folder

Content root folder to use for packaging.

Execute After, Execute Before

Define when to execute Custom Build Tool and Custom Build Step commands. For historical reasons they are executed at the same time.
The options are using msbuild target names, which requires you to have some understanding of msbuild targets execution order during build. There is a long list of the targets in the dropdown you can select from and you can type the target name there as well, but usually you just need to select one of the following targets which represent 3 main steps of C++ build:

  • BuildGenerateSources
  • BuildCompile
  • BuildLink

If your custom build needs to be executed in more precise time, you might need to look at your detailed (or binary) build log – you’ll see all targets executed during build and their order.

New Custom Build Tool Options

Add Outputs to Item Type

If you want custom build outputs to become inputs for another build operation, you can specify it here.

For instance, if you want the outputs to be compiled, you need to add them to “C/C++ compiler” item type. You also need to make Custom Build Tool to be executed before C/C++ compilation by setting “Execute After” to “BuildGenerateSources” or “Execute Before” to “BuildCompile”.

Build in Parallel

Specifies that this item can be built in parallel with other custom build tool items.

Maximum Processes

Maximum number of CPU cores to use for parallel build. A value of 0 utilizes all available processors.

Maximum Batch size

Maximum number of items to execute together in one cmd.exe process during parallel build. A value of 0 divides items evenly into parallel batches. A value of 1 disables batching.
Launching a cmd.exe process takes some time, so larger batches will improve performance if the custom build tool processes items quickly. If your custom build takes significant time, disabling batching will give you better error reporting.

Copy File Options

If you need to copy a file to one or several locations during build, first you need to change its “Item Type” to “Copy file” and Apply. Then you’ll see “Copy File” properties.

Copy File Item Type

Again, you can define the options for individual files, or, if they are similar, for project configuration using MSBuild Well-known Item Metadata:

Copy File Item Properties

Destination Directories

You can specify one or several directories (separated by ‘;’) to copy the file to. The default is $(OutDir).

Destination File Name

You can specify the file name for the destination file(s). The default is the same as source: %(Filename)%(Extension).

Other properties are the similar to Custom Build Tool and Custom Build step: you can set if the destination file(s) should be included into a package and when to copy the files during build.

Send Us Feedback

Please download Visual Studio 2017 version 15.8 and try the new Custom Build Tool and Copy File functionality. We would love to know how it is working for you. Please give us feedback via the comments below or via email (visualcpp@microsoft.com). For general issues please Report a Problem.

STL Features and Fixes in VS 2017 15.8

$
0
0

15.7 was our first feature complete C++17 library (except floating-point <charconv>), and in 15.8 we have addressed large numbers of outstanding bugs. As usual, we’ve maintained a detailed list of the STL fixes that are available. Visual Studio 2017 15.8 is available at https://visualstudio.microsoft.com/vs/.

New Features
  • Implemented floating-point from_chars() in C++17 <charconv>. It’s approximately 40% faster than the CRT’s strtod()/strtof().
  • Implemented C++20 feature-test macros in the compiler and STL (except for __has_cpp_attribute which will be implemented in the future). The feature-test macros are always provided regardless of the Standard mode option (/std:c++14 vs. /std:c++17 etc.) – that is, individual feature-test macros are defined (or not) according to the Standard mode option and fine-grained options, but there’s no option for enabling or disabling feature-test macros in their entirety.
  • Implemented std::is_aggregate.
  • Added officially supported hooks to allow user iterator type interaction with iterator debugging, already in use by the Guidelines Support Library. See gsl::span for an example implementation of the following customization points, or the type _String_view_iterator in the internal header <xstring>.
    The customization points are, given a const user_iterator_type cit; and a user_iterator_type it:
    _Verify_range(cit, cit)
    Requests that the iterator type check that the parameters form a valid [First, Last) range iterator pair. The standard library provides a version for pointers under _ITERATOR_DEBUG_LEVEL != 0. We strongly recommend this customization point be implemented as a “hidden friend function”, as demonstrated in the gsl::span example.
    cit._Verify_offset(difference_type off)
    For random-access iterators, verifies that cit + off is a valid iterator. Typically used to provide better diagnostics of the form “the iterator range passed to this algorithm was invalid” rather than “the iterator was incremented off the end of the range”.
    static constexpr bool user_iterator_type::_Unwrap_when_unverified
    Declares to the standard library whether an iterator type wants to be “unchecked” or “unwrapped” even if it can’t be verified in advance by _Verify_range or _Verify_offset. For example, the standard containers set this to true if and only if _ITERATOR_DEBUG_LEVEL == 0. This allows an iterator type to request range checks even in release builds (as desired by gsl::span). If this member is not present, it defaults to false.
    cit._Unwrapped()
    Returns an “unchecked” or “unwrapped” iterator denoting the same element as cit. This will be called by the standard library after a _Verify_range or _Verify_offset call, or if _Unwrap_when_unverified is true.
    it._Seek_to(cit) / it._Seek_to(return value from _Unwrapped())
    Moves the position of the “wrapped” or “checked” iterator it to the position of the “unwrapped” / “unchecked” iterator supplied. This is generally not intended to perform range checks. This allows algorithms that return iterators like std::fill_n to form their return values without needing each iterator operation in the body of the algorithm to be subject to debugging checks.
  • The header structure of the STL was changed to allow use of a subset of the library in conditions where the user can’t link with msvcp140.dll, such as driver development. (Previously the hard dependency on msvcp and pragma detect mismatch were injected by our base configuration header included by everything.) The following headers are now considered “core” and don’t inject our runtime dependencies (though we do still assume some form of CRT headers are present):
    • <cstddef>
    • <cstdlib>
    • <initializer_list>
    • <ratio>
    • <type_traits>

    We aren’t actually driver developers ourselves and are interested in feedback in this area if there are things we can do to make these more usable in constrained environments.

Correctness Fixes
  • Implemented Library Issues 2510, 2729, and 2958 for pair and tuple, constraining their assignment operators. This implementation contained a minor regression affecting assignments to std::pair from a type that implicitly converts to std::pair. We’ve fixed that regression for VS 2019 16.0 and are planning to backport the fix to VS 2017 15.9. In the meantime, if you encounter that compiler error, explicitly converting to std::pair is a workaround.
  • Because user iterators can now officially participate in the iterator debugging system, the _SCL_SECURE_NO_WARNINGS family of warnings has been removed. The previously-pseudo-documented struct _Is_checked_helper remains present in order to avoid breaking user specializations, but it is no longer used by the library directly.
  • Changed num_get overloads to store default values in the event of a failed parse, as the standard requires.
  • Fixed incorrect values numeric_limits<integral>::is_modulo and numeric_limits<floating-point>::tinyness_before.
  • Rewrote several streambuf operations to resolve cases where the streambuf would become confused; for example, cases where seekg(0) would not reset the streambuf position even when the current offset was nonzero.
  • Fixed cases where basic_filebuf would become confused when set to some multibyte locales; the lead byte table was populated using the “fake POSIX support” locale function _ismbslead, but then used the standard locale function _isleadbyte later in processing, corrupting the state of the basic_filebuf.
  • Fixed conditions where one could form a corrupted basic_stringbuf (or stringstream) by forcing it to attempt to represent a string of more than INT_MAX characters. The INT_MAX size restriction unfortunately must remain due to ABI compatibility, but at least we now consistently enforce that restriction.
  • Overhauled std::ws to Do What The Standard Says.
  • The off-by-default warning C4365 “conversion from ‘type_1’ to ‘type_2’, signed/unsigned mismatch” is now supported by the STL.
  • Fixed a case C4365 found in put_money where a narrowed wchar_t was emitted instead of the proper raw wchar_t.
  • Fixed creating an istreambuf_iterator::proxy returning the value stored in the proxy rather than returning the value one would expect from a copied istreambuf_iterator.
  • Fixed a case where linear_congruential_engine would use unsigned int to do intermediate calculations even when unsigned int could not properly store the intermediate values.
  • Fixed linear_congruential_engine::seed() to Do What The Standard Says.
  • Changed parallel algorithms’ partitioning behavior to not special case the foreground thread, improving performance in situations where the system threadpool detects an I/O bound workload and decides to oversubscribe the machine.
  • Fixed a race condition in std::async that could cause crashes or deadlocks.
  • Fixed C++17 std::filesystem‘s support .obj containing a __declspec(dllexport), causing unusual conditions like .exes with export tables.
  • Fixed recursive_directory_iterator::disable_recursion_pending() not being reset after an increment operation.
  • Fixed a long-standing bug that caused aligned_storage to treat requests for alignment greater than alignof(max_align_t) as requests for alignment equal to alignof(max_align_t). We can’t enable this fix unconditionally without breaking ABI since doing so changes layout of types with members whose type is a highly-aligned specialization of aligned_storage. As an interim solution until a future ABI-breaking release, compilation of programs that use highly-aligned aligned_storage produces a compile error explaining this issue and asking the user to define either _ENABLE_EXTENDED_ALIGNED_STORAGE to request the conforming-but-potentially-ABI-breaking behavior, or _DISABLE_EXTENDED_ALIGNED_STORAGE to request the previous incorrect-but-ABI-safe behavior.
Performance and Throughput Improvements
  • Fixed iterator wrappers like move_iterator and reverse_iterator defeating iterator debugging optimizations. These wrappers remained “checked” even after verified by algorithms. For example, fill(someVectorOfInt.rbegin(), someVectorOfInt.rend()) will properly check the range and convert to reverse_iterator<int *> instead of staying a reverse_iterator<vector::iterator> as in previous releases.
  • Changed several calls of basic_string::append(1, ch) to basic_string::push_back for micro-perf improvements in iostreams machinery.
  • Implemented a fast path for binary I/O in iostreams, quadrupling bulk I/O performance.
Other Changes
  • Removed _NOEXCEPT and other internal non-Standard macros.
  • Increased readability by consistently using nullptr in the STL’s headers.

If you have any feedback or suggestions for us, let us know. We can be reached via the comments below, via email (visualcpp@microsoft.com) and you can provide feedback via Help > Report A Problem in the product, or via Developer Community. You can also find us on Twitter (@VisualC) and Facebook (msftvisualcpp).

Azure DevOps Continuous Build/Deploy/Test with ASP.NET Core 2.2 Preview in One Hour

$
0
0

Hanselminutes WebsiteI've been doing Continuous Integration and Deployment for well over 13 years. We used a lot of custom scripts and a lovely tool called CruiseControl.NET to check out, build, test, and deploy our code.

However, it's easy to get lulled into complacency. To get lazy. I don't set up Automated Continuous Integration and Deployment for all my little projects. But I should.

I was manually deploying a change to my podcast website this evening via a git deploy to Azure App Service. Pushing to Azure this way via Git uses "Kudu" to actually build the site. However, earlier this week I was also trying to update my site to .NET Core 2.2 which is in preview. Plus I have Unit Tests that aren't getting run during deploy.

So look at it this way. My simple little podcast website with a few tests and the desire to use a preview .NET Core SDK means I've outgrown a basic "git push to prod" for deploy.

I remembered that Azure DevOps (formerly VSTS) is out and offers free unlimited minutes for open source projects. I have no excuse for my sloppy builds and manual deploys. It also has unlimited free private repos, although I'm happy at GitHub and have no reason to move.

It usually takes me 5-10 minutes for a manual build/test/deploy, so I gave myself an hour to see if I could get this same process automated in Azure DevOps. I've never used this before and I wanted to see if I could do it quickly, and if it was intuitive.

Let's review my goals.

  • My source is in GitHub
  • Build my ASP.NET Core 2.2 Web Site
    • I want to build with .NET Core 2.2 which is currently in Preview.
  • Run my xUnit Unit Tests
    • I have some Selenium Unit Tests that can't run in the cloud (at least, I haven't figured it out yet) so I need them skipped.
  • Deploy the resulting site to product in my Azure App Service

Cool. So I make a project and point Azure DevOps at my GitHub.

Azure DevOps: Source code in GitHub

They have a number of starter templates, so I was pleasantly surprised I didn't need manually build my Build Configuration myself. I'll pick ASP.NET app. I could pick Azure Web App for ASP.NET but I wanted a little more control.

Select a template

Now I've got a basic build pipeline. You can see it will use NuGet, get the packages, build the app, test the assemblies (if there are tests...more on that later) and the publish (zip) the build artifacts.

Build Pipeline

I then clicked Save & Queue...and it failed. Why? It says that I'm targeting .NET Core 2.2 and it doesn't support anything over 2.1. Shoot.

Agent says it doesn't support .NET Core 2.2

Fortunately there's a pipeline element that I can add called ".NET Core Tool Installer" that will get specific versions of the .NET Core SDK.

NOTE: I've emailed the team that ".NET Tool Installer" is the wrong name. A .NET Tool is a totally different thing. This task should be called the ".NET Core SDK Installer." Because it wasn't, it took me a minute to find it and figure out what it does.

I'm using the SDK Agent version 2.22.2.100-preview2-009404 so I put that string into the properties.

Install the .NET Core SDK custom version

At this point it builds, but I get a test error.

There's two problems with the tests. When I look at the logs I can see that the "testadapter.dll" that comes with xunit is mistakenly being pulled into the test runner! Why? Because the "Test Files" spec includes a VERY greedy glob in the form of ***test*.dll. Perhaps testadapter shouldn't include the word test, but then it wouldn't be well-named.

**$(BuildConfiguration)***test*.dll

!**obj**

My test DLLs are all named with "tests" in the filename so I'll change the glob to "**$(BuildConfiguration)***tests*.dll" to cast a less-wide net.

Screenshot (45)

I have four Selenium Tests for my ASP.NET Core site but I don't want them to run when the tests are run in a Docker Container or, in this case, in the Cloud. (Until I figure out how)

I use SkippableFacts from XUnit and do this:

public static class AreWe

{
public static bool InDockerOrBuildServer {
get {
string retVal = Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER");
string retVal2 = Environment.GetEnvironmentVariable("AGENT_NAME");
return (
(String.Compare(retVal, Boolean.TrueString, ignoreCase: true) == 0)
||
(String.IsNullOrWhiteSpace(retVal2) == false));
}
}
}

Don't tease me. I like it. Now I can skip tests that I don't want running.

if (AreWe.InDockerOrBuildServer) return;

Now my tests run and I get a nice series of charts to show that fact.

22 tests, 4 skipped

I have it building and tests running.

I could add the Deployment Step to the Build but Azure DevOps Pipelines includes a better way. I make a Release Pipeline that is separate. It takes Artifacts as input and runs n number of Stages.

Creating a new Release Pipeline

I take the Artifact from the Build (the zipped up binaries) and pass them through the pipeline into the Azure App Service Deploy step.

Screenshot (49)

Here's the deployment in progress.

Manually Triggered Release

Cool! Now that it works and deploys, I can turn on Continuous Integration Build Triggers (via an automatic GitHub webhook) as well as Continuous Deployment triggers.

Continuous Deployment

Azure DevOps even includes badges that I can add to my readme.md so I always know by looking at GitHub if my site builds AND if it has successfully deployed.

4 releases, the final one succeeded

Now I can see each release as it happens and if it's successful or not.

Build Succeeded, Never Deployed

To top it all off, now that I have all this data and these pipelines, I even put together a nice little dashboard in about a minute to show Deployment Status and Test Trends.

My build and deployment dashboard

When I combine the DevOps Dashboard with my main Azure Dashboard I'm amazed at how much information I can get in so little effort. Consider that my podcast (my little business) is a one-person shop. And how I have a CI/CD pipeline with integrated testing gates that deploys worldwide. Many years ago this would have required a team and a lot of custom code.

Azure Dashboard

Today it took an hour. Awesome.


Sponsor: Copy: Rider 2018.2 is here! Publishing to IIS, Docker support in the debugger, built-in spell checking, MacBook Touch Bar support, full C# 7.3 support, advanced Unity support, and more.



© 2018 Scott Hanselman. All rights reserved.
     

Deep dive into Azure Test Plans

$
0
0

Azure Test Plans, a service launched with Azure DevOps earlier this month, provides a browser-based test management solution for exploratory, planned manual, and user acceptance testing. Azure Test Plans also provides a browser extension for exploratory testing and gathering feedback from stakeholders.

Manual and exploratory testing continue to be important techniques for evaluating quality of a product/service, alongside the DevOps emphasis on automated testing. In modern software development processes, everybody in the team contributes to or owns quality - including developers, testers, managers, product owners, user experience advocates, and more. Azure Test Plans addresses all these needs. Let’s take a closer look.

Note: For automated testing as part of your CI/CD workflow, consider leveraging Azure Pipelines. It provides mechanisms for continuous build, test, and deployment to any platform and cloud.

Testing is integral to DevOps and Agile teams

A common practice is to base tests on user stories, features, or scenarios that are managed on a Kanban board as in Azure Boards. With Azure Test Plans, a team can leverage manual testing right from within their Kanban board. This provides end-to-end traceability because tests and defects are automatically linked to the requirements and builds being tested, which also helps you track the quality of the requirements.

Add, view, and interact with test cases directly from the cards on the Kanban board, and progressively monitor status directly from the card. Developers and testers can use this capability to maximize quality within their teams.

Testing in Kanban board

Quality is a team sport through exploratory testing

Exploratory testing is an approach to software testing that is described as simultaneous learning, test design and test execution. It complements planned testing by being completely unscripted yet being driven by themes/tours. Quality becomes a shared responsibility as exploratory testing can be leveraged by all team members including developers, testers, managers, product owners, user experience advocates, and more. Watch a short video of how this works.

The Test & Feedback extension enables exploratory testing techniques in Azure Test Plans. It allows you to spend more time finding issues, and less time filing them. Using the extension is simple:

  • Capture your findings along with rich diagnostic data. This includes comments, screenshots with annotations, and audio/video recordings that describe your findings and highlight issues. In the background, the extension captures additional information such as user actions via image action log, page load data, and system information about the browser, operating system, and more that later help in debugging or reproducing the issue.
  • Create work items such as bugs, tasks, and test cases from within the extension. The captured information automatically becomes part of the filed work item and helps with end-to-end traceability.
  • Collaborate with your team by sharing your findings. Export your session report or connect to Azure Test Plans for a fully integrated experience.

Exploratory testing session in progress

The extension also helps in soliciting feedback from stakeholders who may reside outside the development team, such as marketing, sales teams, and others. Feedback can be requested from these stakeholders on user stories and features. Stakeholders can then respond to feedback requests - not just to rate and send comments, but also file bugs and tasks directly. Read more in our documentation.

Feedback requests on a Stakeholder

Planned manual testing for larger teams

Testing from within the Kanban board suffices when your testing needs are simple. However, for larger teams with more complex needs such as creating and tracking all testing efforts within a test plan scope, testing across multiple configurations, distributing the tests across multiple testers, tracking the progress against the test plan, etc., you need a full-scale test management solution and Azure Test Plans fulfils this need. 

Planned manual testing

Planned manual testing in Azure Test Plans lets you organize tests into test plans and test suites. Test suites can be dynamic (requirements-based-suites and query-based-suites) to help you understand the quality of associated requirements under development, or static to help you cover regression tests. Tests can be authored using an Excel-like grid view or other means available. Testers execute tests assigned to them using a runner to test your app(s). The runner can execute in a browser or as a client on your desktop, enabling you to test on any platform or test any app. During execution, rich diagnostic data is collected to help with debugging or reproducing the issue later. Bugs filed during the process automatically include the captured diagnostic data.

Test execution with rich data capture

To track overall progress and outcomes, leverage lightweight charts, which can be pinned to your dashboard for easy monitoring. Watch a video showing planned manual testing in Azure Test Plans.

Charts to help track progress and outcomes

We hope this post gives you a quick peek into what Azure Test Plans can do for you – we recommend trying it out for free to learn more and to maximize quality for your software. Happy exploring and testing!

Further information

Want to learn more? See our documented best practices, videos, and other learning materials for Azure Test Plans.

Improve patient engagement and efficiency with AI powered chatbots

$
0
0

A major item in scoring a health care organization is patient engagement. That is, patients are more likely to give a higher rating if they have some way to communicate to an organization with as little friction as possible. Improving the patient engagement experience can also improve patient outcomes — the hope is to do it affordably. Artificial intelligence (AI) powered health agents, also known as “chatbots,” can engage patients 24/7, using different languages, and at very low cost. These AI agents can assist healthcare organizations across a variety of use cases, for example:

  • Check and triage patient symptoms using established medical protocols.
  • Look up medical information about conditions, symptoms, causes, and complications.
  • Find healthcare providers to consult with for specific patient conditions.
  • Answer health plan inquiries, for example checking member eligibility.
  • Schedule patient appointments with healthcare providers.

Read on for an overview of powerful cloud-based tools you can use to rapidly create and deploy your AI powered health agents in Microsoft Azure.

AI powered chatbots

Rapid development and deployment to the cloud

The primary service to rapidly develop and deploy your new chatbot is the Azure Health Bot Service. This is a service that includes a visual editor for customizing bots that communicate using Natural Language Processing (NLP), which supports both text and voice interactions. Using its visual designer tool, administrators can create custom “conversation scenarios” to support the most complex and intricate requirements. These conversation scenarios are stored on the Azure cloud and power the Health Bot Service. Conversations can also be configured to use HealthNavigator content — an extensive and credible source of medical knowledge. To support text chat with your users requires an open source web chat client. Conversations can integrate with your applications, or applications of third parties via secure HTTPS calls to their API’s. Fast Healthcare Interoperability Resources (FHIR) support is also available, enabling your conversations to interact with patient Electronic Medical Records (EMRs).

Privacy, security, and compliance

The Health Bot Service supports HIPAA compliance, and is in the process being enhanced to also support ISO 27001 and ISO 27018 compliance. Built on Microsoft Azure, your AI powered health agent can also benefit from the vast array of compliance frameworks. On Azure you also have powerful security tools to protect the confidentiality, integrity, and availability of your sensitive information and systems. The security extends to protect the privacy of patients, family caregivers, and healthcare professionals.

Getting started

Start today with the Health Bot Overview, and access quick-starts, concepts, how-to guides, and additional resources. For further information on use cases, value propositions, and how to get started with AI in healthcare, see the AI in Healthcare Guide.

Collaboration

What other use cases, challenges, and solutions are you seeing for AI powered health agents? We welcome any feedback or questions you may have below. AI in healthcare is a fast-moving field. New developments are emerging daily. Many of these new developments are not things you can read about yet in a textbook. I post daily about these new developments and solutions in healthcare, AI, cloud computing, security, privacy, and compliance on social media. Reach out to connect with me on LinkedIn and Twitter.

Introducing Bing AMP viewer and Bing AMP cache

$
0
0

In 2016, Bing joined the Accelerated Mobile Pages (AMP for short) open-source effort to help you “find” and “do” searches faster, regardless of where you are and on any device when you are looking for informaiton. Today, we are pleased to announce the release of Bing AMP viewer and Bing AMP Cache enabling AMP-enabled web pages to work directly from Bing’s mobile search results allowing Bing to provide faster mobile experiences to Bing users.

On Monday, the 17th we started the first phase of the global roll out of this AMP viewer and AMP carrousel in the United States for the news carrousel. We will continue the phased roll out to more web sites, more countries and regions and other links in the search results pages. Also, if you are in the United States, try it out on your mobile device by navigating to https://www.bing.com and search for news related queries and tapping the search results labelled with the AMP icon: AMP lightning bolt icon.

Advice for AMP webmasters, AMP advertisers


The AMP protocol offers the ability to cache and serve cached copied AMP content that is published on the web, providing faster user experiences on Bing. In order to enable your AMP published content within Bing, you need to allow the Bingbot (our crawler) to fetch AMP content and allow cross-origin resource sharing (CORS) for bing-amp.com domain. Most AMP enabled sites and advertisers have already authorized the CORS sharing for the ampproject.org domain, but now need to also bing-amp.com to the allowed list. 

Thank you, 
Fabrice Canel
Principal Program Manager
Microsoft Bing
 

Amtrak keeps its mobile enterprise running ahead of schedule with Microsoft 365

$
0
0

Today’s post was written by Don Friend, senior director of infrastructure platform services at Amtrak.

Profile picture of Don Friend.Stepping off an Amtrak train, passengers on the U.S. railroad are greeted by the vibrant tile work and iconic palm trees of Los Angeles Union Station, or the light-filled atrium of Chicago Union Station, or the friendly station staff at any of the 500 communities we serve across the country. Our mission is to connect people from all over the country through our rail network. Ensuring that riding the rails is a safe, enjoyable way to travel has always been our goal, but today, the industry is changing. We need to move at the speed of our customer’s online reviews. We need to stay connected and agile to remain at the forefront of modern technologies that improve customer experience—like the self-service kiosks and e-ticketing services we have installed. As we evolve to meet the accelerating pace of both business and travel, it’s essential that our workforce is as connected as our network of trains. We use Microsoft 365 to empower our office employees to work together in highly secure mobile environments.

Our visionary approach to communication and collaboration at Amtrak extends to our Firstline Workers as well. We call it our “connected workforce strategy” and it reflects a huge change in the mindset of senior leaders at Amtrak. For too long, our Firstline Workers remained outside the corporate family, with no email to connect them to colleagues. We deployed Microsoft Office 365 F1 to empower these workers with the rich capabilities in the Office 365 ProPlus toolset, so we collaborate more effectively, improve passenger satisfaction, and reduce costs.

We have approximately 14,000 mobile workers at Amtrak who run the gamut from engineers who drive the trains to our police force, onboard service attendants, and mechanics. Even our executives are assigned one or two stations that they visit twice a year to complete a safety and cleanliness audit. Many carry corporate devices, including phones and tablets. Our police force uses mobile handhelds loaded with police applications, and our conductors have devices with barcode readers.

In the past, keeping these employees connected to the wider enterprise was challenging. But today, we use Microsoft Azure Active Directory for identity and access management and Multi-Factor Authentication and Microsoft Intune for mobile app and device management. These two services are the foundation of our connected workforce strategy. Regardless of location, employees can easily authenticate from any device. As we work to protect corporate data and employee identities, Amtrak is in a better position to deploy mobile apps to Firstline Workers that will make a difference to our customer service. These include an app for executives to audit their stations, and apps that conductors and service staff can use to inventory cleanliness and safety issues and alert staff at the next station to mediate a problem.

Mobile access to our corporate communications also makes it easier for our CEO to connect with the entire organization. It took just a month to deploy the CEO Corner on our intranet, which features a question-and-answer section and corporate announcements. As we transition our on-premises intranet to the cloud, employees will be able to use any device from anywhere in the world to access corporate resources safely and securely.

Amtrak recently moved corporate headquarters to a new facility, which presented the perfect opportunity to rethink their conference room strategy. We integrated Microsoft Surface Hubs into our conference rooms, promoting the rich collaboration experience you get with Skype for Business and Surface Hub. As a result, the revamped conference rooms have been a huge hit; everyone loves the large screens where conference calls become vehicles for virtual teamwork, thanks to whiteboarding, coauthoring, and sharing and saving meeting notes. Since upgrading our conference rooms, we have been inundated with requests for Surface Hubs from across the business.

As we continue to keep pace with a changing environment, today we have a productivity solution that combines the key aspects of our vision for the future at Amtrak—a quality passenger experience that’s fast, connected, and safe.

—Don Friend

The post Amtrak keeps its mobile enterprise running ahead of schedule with Microsoft 365 appeared first on Microsoft 365 Blog.


Intelligent GIF Search: Finding the right GIF to express your emotions

$
0
0
The popularity of GIFs has risen, in large part because they afford users a unique way to express their emotions. That said, it can be challenging to find the perfect GIF to express yourself. You could be looking for a special expression from a favorite celebrity, an iconic moment from a movie/tv show or just a way to say ‘good morning’ that’s not mundane. To provide the best GIF search experience Bing employs techniques such as sentiment analysis, OCR, and even pose modeling of subjects appearing in GIF flicks to reflect subtle intent variations of your queries. Read on to find out more about how we made it work, and experience it yourself on Bing’s Image search by typing a query like angry panda. Here are some of the techniques we’ve used to make our GIF search more intelligent.
 

Vector Search and Word Embeddings for Images to Improve Recall

As we’ve previously done with Image Ranking, and Vector Based Search, we’ve gone beyond simple keyword matching techniques, and captured underlying semantic relationships. Using text and image embedding vectors, we first mapped the queries and images into a high-dimensional vector space and used similarity to improve recall. In simple words, vector-based search teaches the search engine that words like “amazing” “great”, “awesome”, and “fantastic” are semantically related. This allows us to retrieve documents not just by exact match, but also by match with semantically related terms.


GIF Summarization and OCR algorithms for improving precision

One reason GIF Search is more complicated than image search is that a GIF is composed of many images (frames), and therefore, you need to search through multiple images and not just the first, to check for relevance. For instance, a search for a cat GIF, a celebrity or a tv show or cartoon character GIF needs to ensure that the subject occurs in multiple frames of the GIF and not just the first. That’s complicated. Moreover, many users include phrases in their queries like “hello”, “good morning”, “Monday mornings” etc. – where we need to ensure that these textual messages are also included in the GIF. That’s complicated too, and that’s where our Optical Character Recognition (OCR) system comes into play. We use a deep-neural-network-based OCR system and we’ve added synthetic training data to better adapt to the GIF scenario.

The multi-frame nature of a GIF introduces additional complexities for OCR as well. For example, an OCR system would look at the images below, and detect four different pieces of text – “HA”, “HAVE”, “HAVE FU” and “HAVE FUN”. In fact there’s just one piece of text – “HAVE FUN”. We use text similarity combined with spatial and temporal information to disambiguate such cases.


Sentiment Analysis using text – to improve results quality

A common scenario for GIF search is emotion queries – where users are searching for GIFs that match a certain emotion (searches like “happy”, “sad”, “awesome, “great”, “angry” or “frustrated”). Here, we analyze the sentiment/emotion of the GIF query and try to provide GIF results that have matching sentiment. Query sentiment analysis is complicated because there are usually just 2-3 terms in queries, and they don’t always reflect emotions. To understand query sentiment, we’ve analyzed public community websites and learned billions of relationships between text and emojis.

To understand the sentiment for GIF documents, we analyze the text that surrounds the GIF documents on web pages. Having the sentiment for both the query and documents, we can match the sentiment of the user query and the results they see. For instance, if a user issues the query “good job”, and we’ve already detected text like “Good job 😊 😊 ” on chat sites, we would infer that “Good job” is a query with positive sentiment and choose the GIFs documents with positive sentiment.
 

Expressiveness, Pose and Awesomeness using CNNs

Celebrities are a major area of GIF searches. Given users are utilizing GIFs to express their emotions, it is a basic requirement that the top ranked celebrity GIFs convey strong emotions. Selecting GIFs that contain the right celebrity is easy but identifying GIFs that contain strong emotions or messages is hard. We do this by using deep learning models to analyze poses, actions, and expressiveness.

Poses and actions
Poses can be modeled using the positions of skeleton points, such as head, shoulder, hand etc. Actions can be modeled using the motion of these points across frames. To extract features to depict human poses and actions, we estimate the skeleton point positions in each frame and estimate the motion across adjacent frames. A full convolutional network is deployed for estimating each skeleton point of the upper body. The motion vectors of these skeleton points are extracted to depict the motion information. A final model deduces the ‘awesomeness’ by examining the poses and the actions in the GIF.

Exaggerated expressions
Here we analyze the facial expression of the subject to select results with more exaggerated facial expressions. We extract the expressions from multiple frames of the GIF and compute a score that indicates the level of exaggeratedness.  Our GIF search returns results that have more exaggerated facial expressions.

By pairing deep convolutional neural networks, expressiveness, poses, actions and exaggeratedness models with our huge celebrity database, we can return awesome results for celebrity searches.

Image graph and other techniques
In addition to helping understand semantic relationships, Image Graph also improves ranking quality. Image Graph is made up of several clusters of similar images (in this case, GIFs), and has historical data (for e.g. clickthrough rate etc.) for images. As shown in the graph below, the images within the same cluster are visually similar (the distance between images denotes similarity), and the distance between the clusters denotes visual similarity of the main images within the clusters. Now, if we know that an image in cluster D was extremely popular, we can propagate that clickthrough rate data to all other GIFs in cluster D. This greatly improves ranking quality. We can also improve the diversity of the recommended GIFs using this technique.

Finally, we also consider source authority, virality and popularity while deciding which GIFs to show on top. And, we have a detrimental content classifier (based on images, and another based on text) to remove offensive content to ensure that all our top results are clean.

There you have it – did you really imagine that so many machine learning techniques are required to make GIF ranking work? Altogether, these components bring intelligence to Bing’s GIF search experience, making it easier for users to find what they’re looking for. Give it a try on Bing image search.
 

Announcing Cumulative Updates for .NET Framework for Windows 10 October 2018 Update

$
0
0

We deliver .NET Framework updates nearly every month, through Windows Update and other distribution channels. We are making changes to the way that we deliver those updates. We’ll soon start delivering a Cumulative Update for .NET Framework alongside the Windows 10 Cumulative Update, starting with the Windows 10 October 2018 Update. This new approach will give you more flexibility on installing .NET Framework updates.

What is the new Cumulative Update for  .NET Framework?

Starting with Windows 10 October 2018 Update and Windows Server 2019, .NET Framework fixes will be delivered through a Cumulative Update for .NET Framework.

We are making this change to enable the following:

  • Provide more flexibility for installing .NET Framework updates (for example, IT Admins can more selectively test line of business applications before broadly deploying).
  • Ability to respond to critical customer needs, when needed, with higher velocity, with standalone .NET Framework patches.

The Cumulative Update for .NET Framework will have the following characteristics:

  • Independent – Released separately from the Windows Cumulative Update
  • Cumulative – The latest patch will fully update all .NET Framework versions on your system
  • Same cadence – The Cumulative Update for .NET Framework will be released on the same cadence as Windows 10.

What should I expect?

You can expect the following new experiences.

Windows Update users:

If you rely on Windows Update to keep your machine up to date and have automatic updates enabled, you will not notice any difference.  Updates for both Windows and the .NET Framework will be silently installed, and as usual you may be prompted for a reboot after installation.

If you manage Windows Update manually, you will notice a Cumulative Update for .NET Framework update alongside the Windows cumulative update. Please continue to apply the latest updates to keep your system up to date.

Image: Cumulative Update for .NET Framework delivered via Windows Update

You can continue to rely on existing guidance for advanced Windows Update settings.

Systems and IT Administrators:

  • System administrators relying on Windows Server Update Services (WSUS) and similar update management applications will observe a new update for .NET Framework when checking for updates applicable to upcoming versions of Windows 10 October 2018 Update and Windows Server 2019.
  • The Cumulative Update for .NET Framework Classifications remain the same as for the Cumulative Update for Windows and continue to show under the same Windows Products. Updates that deliver new Security content will carry the “Security Updates” classification and updates carrying solely new quality updates will carry either the “Updates” or “Critical Updates” classification, depending on their criticality.
  • System administrators that rely on the Microsoft Update Catalog will be able to access the Cumulative Update for .NET Framework by searching for each releases’ Knowledge Based (KB) update number. Note that a single update will contain fixes for both .NET Framework 3.5 and 4.7.2 products.
  • You can use the update title to filter between the Windows Cumulative updates and .NET Framework updates. All other update artifacts are expected to remain the same.

Image: Cumulative Update for .NET Framework delivered via WSUS Administration console

.NET Framework updates across Windows versions

.NET Framework updates will be delivered in the following way:

  • Windows 10 October 2018 Update (version 1809) – One Cumulative Update for .NET Framework, alongside the Windows Cumulative Update.
  • Windows 10 April 2018 (version 1803) and earlier versions of Windows 10 – One Windows Cumulative Update (which includes .NET Framework updates), per Windows version.
  • Windows 7 and 8.1 – Multiple .NET Framework updates, per Windows version.

.NET Framework updates are delivered on the same servicing cadence as Windows 10. We deliver different types of updates on different schedules, as described below.

  • The security and quality updates for .NET Framework will be released on Patch Tuesday, the second Tuesday of each month, containing important security and critical quality improvements.
  • Each new security and quality update will supersede and replace the last security and quality update release.
  • Preview updates for .NET Framework will be released one to two weeks after the Patch Tuesday release, for non-security fixes as a limited distribution release (will not be installed automatically).
  • Out-of-band releases are reserved for situations where customer systems must be updated quickly and outside of the regular schedule, to fix security vulnerabilities or to resolve critical quality issues.

For more information about .NET Framework update model for previous versions of Windows, please refer to: Introducing the .NET Framework Monthly Rollup and .NET Framework Monthly Rollups Explained.

Validating the Quality of Updates

We extensively validate the quality of these updates before publishing them. .NET Framework updates are installed by many customers on many machines. It is often the case for Patch Tuesday updates that they contain security updates and it is important that you can apply those quickly throughout your environment. We are continually improving our validation system to ensure high-quality updates.

We use the following approaches to validate quality:

  • Extensive functional testing with in-house regression tests.
  • Compatibility testing with Microsoft applications, servers and services.
  • Compatibility testing with third-party applications that have been submitted to the .NET Framework compatibility lab. You can submit your app at dotnet@microsoft.com.
  • Security Update Validation Program (SUVP).
  • Listen to customer feedback from previous preview releases and Windows Insider builds.

 

FAQ

Will installing a Cumulative Update for .NET Framework upgrade my .NET Framework version?

No. These updates will not upgrade you to a new .NET Framework version. They will update the .NET Framework version you already have installed.

Will I need to reboot after installing the Cumulative Update for .NET Framework ?

In most cases, yes.

Will I need an additional reboot when installing the Cumulative Update for .NET Framework together with the Windows Cumulative update?

Windows Update will orchestrate making sure updates that ship at the same time are processed together and only require a single reboot. Guidance to WSUS/IT Admins is to continue to ensure that updates are grouped and deployed together to avoid any potential additional reboots.

Is there a security-only variant of the Cumulative Update for .NET Framework?

No. This approach limits the number of updates to manage and aligns with the model used by Windows 10.

What do I need to do to update .NET Framework 3.5?

Install the Cumulative Update for .NET Framework. It includes .NET Framework 3.5 fixes.

I have concerns about the quality of .NET Framework fixes. What can I do?

You can submit your application for testing in our compatibility lab (send mail to dotnet@microsoft.com) and install .NET Framework Preview of Quality updates to validate compatibility.

Is Microsoft producing new types of patches in addition to the new Cumulative Update for .NET Framework?

No new standalone updates are planned.

Simplify modern data warehousing with Azure SQL Data Warehouse and Fivetran

$
0
0

Gaining insights rapidly from data is critical to being competitive in today’s business world. With a modern data warehouse, customers can bring together all their data at any scale into a single source of truth for use cases such as business intelligence and advanced analytics.

A key component of successful data warehousing is replicating data from diverse data sources into the canonical data warehousing database. Ensuring that data arrives in your data warehouse consistently and reliably is crucial for success. Data integration tools ensure that users can successfully connect to their critical data sources while moving data between source systems and their data warehouse in a timely yet reliable fashion.

Introducing Fivetran

We’re excited to announce that Fivetran has certified their zero maintenance, zero configuration, data pipelines product for Azure SQL Data Warehouse. Fivetran is a simple to use system that enables customers to load data from applications, files stores, databases, and more into Azure SQL Data Warehouse.

fivetran-logo"Azure is our fastest-growing customer base now that we support SQL Data Warehouse as a destination for Fivetran users. We're excited to be a part of the Microsoft ecosystem."

- George Fraser, CEO and Co-Founder at Fivetran

We’re also pleased to announce the Azure SQL Data Warehouse presence in Fivetran’s Cloud Data Warehouse Benchmark, which helps compare cloud providers TPCDS 1TB TPCDS performance!

benchmark-1tb-speed

With Fivetran’s automated, replicate-all data connectors our customers can:

    • Bring together diverse sources into SQL DW as normalized, ready-to-query schemas.

    • Avoid complex customization and get started quickly.

    • Automatically adjust to source changes so that their solutions are never interrupted.

    • Deliver data reliably without coding or regular maintenance.

    Here are a few sources that Fivetran supports today:

    • Application APIs: Salesforce, Marketo, Adwords, MixPanel, DoubleClick, LinkedIn Ads, Netsuite.
    • Databases: Oracle, SQL Server, Postgres.
    • Files: Azure Blob Storage, FTPS, Amazon S3, CSV Upload, Google Sheets.
    • Events: Google Analytics 360, Snowplow, Webhooks.

    For a more comprehensive listing, please visit their connectors page.

    Custom connector support

    While Fivetran supports many data connectors today, sometimes your required connector isn’t supported. If that is the case, you can use the Azure Cloud Function connector to create a simple custom pipeline.

    How it works:

    • Write a small function to fetch data from your custom source. Then write into Fivetran, state logic to handle the incremental updating.
    • Host your function on Azure Cloud Functions.
    • Connect Fivetran and let us handle the rest. Fivetran loads data into your warehouse, calling your function as often as every five minutes to fetch new data. Duplicate it and incrementally update it.

    Next steps

    To learn how to get started with Fivetran data connectors for Azure SQL Data Warehouse visit their documentation or get started with a free 14 day trial.

    Learn more about SQL DW and stay up-to-date with the latest news by following us on Twitter @AzureSQLDW.

    Getting AI/ML and DevOps working better together

    $
    0
    0

    Artificial Intelligence (AI) and machine learning (ML) technologies extend the capabilities of software applications that are now found throughout our daily life: digital assistants, facial recognition, photo captioning, banking services, and product recommendations. The difficult part about integrating AI or ML into an application is not the technology, or the math, or the science or the algorithms. The challenge is getting the model deployed into a production environment and keeping it operational and supportable. Software development teams know how to deliver business applications and cloud services. AI/ML teams know how to develop models that can transform a business. But when it comes to putting the two together to implement an application pipeline specific to AI/ML — to automate it and wrap it around good deployment practices — the process needs some effort to be successful.

    image

    The need for aligned development approaches

    DevOps has become the de-facto development standard for cloud services. It places an emphasis on process, automation, and fosters a culture that encourages new ways of working together across teams. DevOps is an application-centric paradigm that focuses on the platform, instrumentation, and process to support applications: what is the infrastructure needed to support the application? What tools can be used to automate it? What is the release process for QA/production? 

    AI/ML projects have their own development methodologies including CRISP-DM and Microsoft Team Data Science Process (TDSP). Like DevOps, these methodologies are grounded in principles and practices learned from real-world projects. AI/ML teams use an approach unique to data science projects where there are frequent, small iterations to refine the data features, the model, and the analytics question. It’s a process intended to align a business problem with AI/ML model development. The release process is not a focus for CRISP-DM or TDSP and there is little interaction with an operations team. DevOps teams (today) are yet not familiar with the tools, languages, and artifacts of data science projects. 

    DevOps and AI/ML development are two independent methodologies with a common goal: to put an AI application into production. Today it takes the effort to bridge the gaps between the two approaches. AI/ML projects need to incorporate some of the operational and deployment practices that make DevOps effective and DevOps projects need to accommodate the AI/ML development process to automate the deployment and release process for AI/ML models.

    Integrating AI/ML teams, process, and tools

    Based on lessons learned from several Microsoft projects including the Mobile Bank Fraud Solution, some suggestions for bridging the gap between DevOps and AI/ML projects follow.

    DevOps for AI/ML

    DevOps for AI/ML has the potential to stabilize and streamline the model release process. It is often paired with the practice and toolset to support Continuous Integration/Continuous Deployment (CI/CD). Here are some ways to consider CI/CD for AI/ML workstreams:

    • The AI/ML process relies on experimentation and iteration of models and it can take hours or days for a model to train and test. Carve out a separate workflow to accommodate the timelines and artifacts for a model build and test cycle. Avoid gating time-sensitive application builds on AM/ML model builds.
    • For AI/ML teams, think about models as having an expectation to deliver value over time rather than a one-time construction of the model. Adopt practices and processes that plan for and allow a model lifecycle and evolution.
    • DevOps is often characterized as bringing together business, development, release, and operational expertise to deliver a solution. Ensure that AI/ML is represented on feature teams and is included throughout the design, development, and operational sessions.

    Establish performance metrics and operational telemetry for AI/ML

    Use metrics and telemetry to inform what models will be deployed and updated. Metrics can be standard performance measures like precision, recall, or F1 scores. Or they can be scenario specific measures like the industry-standard fraud metrics developed to inform a fraud manager about a fraud model’s performance. Here are some ways to integrate AI/ML metrics into an application solution: 

    • Define model accuracy metrics and track them through model training, validation, testing, and deployment.
    • Define business metrics to capture the business impact of the model in operations. For an example see R notebook for fraud metrics.
    • Capture data metrics, like dataset sizes, volumes, update frequencies, distributions, categories, and data types. Model performance can change unexpectedly for many reasons and it's expedient to know if changes are due to data.
    • Track operational telemetry about the model:  how often is it called? By which applications or gateways? Are there problems? What are the accuracy and usage trends? How much compute or memory does the model consume?
    • Create a model performance dashboard that tracks model versions, performance metrics, and data sets.

    AI/ML models need to be updated periodically. Over time, and as new and different data becomes available — or customers or seasons or trends change — a model will need to be re-trained to continue to be effective. Use metrics and telemetry to help refine the update strategy and determine when a model needs to be re-trained.

    Automate the end-to-end data and model pipeline

    The AI/ML pipeline is an important concept because it connects the necessary tools, processes, and data elements to produce and operationalize an AI/ML model. It also introduces another dimension of complexity for a DevOps process. One of the foundational pillars of DevOps is automation, but automating an end-to-end data and model pipeline is a byzantine integration challenge.

    Workstreams in an AI/ML pipeline are typically divided between different teams of experts where each step in the process can be very detailed and intricate. It may not be practical to automate across the entire pipeline because of the difference in requirements, tools, and languages. Identify the steps in the process that can be easily automated like the data transformation scripts, or data and model quality checks. Consider the following workstreams:  

    Workstream Description Automation
    Data Analysis    Includes data acquisition and focusing on exploring, profiling, cleaning, and transforming. Also includes enriching, and staging data for modeling. Develop scripts and tests to move and validate the data. Also create scripts to report on the data quality, changes, volume, and consistencies.
    Experimentation    Includes feature engineering, model fitting, and model evaluation. Develop scripts, tests, and documentation to reproduce the steps and capture model outputs and performance.
    Release Process Includes the process for deploying a model and data pipeline into production. Integrate the AI/ML pipeline into the release process
    Operationalization Includes capturing operational and performance metrics. Create operational instrumentation for the AI/ML pipeline. For subsequent model retraining cycles, capture and store model inputs, and outputs.

    Model Re-training and Refinement

    Determine a cadence for model re-training. Instrument the AI/ML pipeline with alerts and notifications to trigger retraining.
    Visualization Develop an AI/ML dashboard to centralize information and metrics related to the model and data. Include accuracy, operational characteristics, business impact, history, and versions. n/a

    An automated end-to-end process for the AI/ML pipeline can accelerate development and drive reproducibility, consistency, and efficiency across AI/ML projects.

    Versioning 

    Versioning is about keeping track of an application’s artifacts and the changes to the artifacts.

    In software development projects this includes code, scripts, documentation, and files. A similar practice is just as important for AI/ML projects because—typically—there are multiple components, each with separate release and versioning cycles. In AI/ML projects, the artifacts could include:

    • Data: training data, inference data, data metrics, graphs, plots, data structures, schemas
    • Models: trained models, scoring models, A/B testing models
    • Model outputs: predictions, model metrics, business metrics 
    • Algorithms, code, notebooks

    Versioning can help provide:

    • Traceability for model changes from multiple collaborators
    • Audit trails for project artifacts
    • Information about which models are called from which applications

    A practical example of the importance of versioning for the AI/ML team happens when the performance of a model changes unexpectedly, and the change has nothing to do with the model itself. The ability to easily trace back inputs, dependencies, model, and data set versions could save days or weeks of effort.

    At a minimum, decide on a consistent naming convention and use it for the data files, folders, and AI/ML models. Several different teams will be involved in the modeling process and without naming conventions, there will be confusion over which data sets or model versions to use.

    Consider container architectures

    Container architectures have the potential to streamline and simplify model development, test, and deployment. And as a package-based interface, containers make it easy for software applications to connect. Containers create an abstraction layer between models and the underlying infrastructure. This lets the AI/ML team focus on model development and not worry about the platform. Containers can easily enable:

    • A/B testing 
    • Deployment to multiple environments (IoT edge, local desktop, Azure infrastructure)
    • Consistent environment configuration and setup to drive faster model development, test, and release cycles
    • Model portability and scalability

    Recommended next steps

    The adoption of DevOps has been very effective at bringing together software development and operations teams to simplify and improve deployment and release processes. As AI and ML become increasingly more important components for applications, more pressure will exist to ensure they are part of an organization’s DevOps model. The suggestions presented are examples of some steps to move towards an integration of two methodologies. To get started, please use some of the links below and please share your feedback and your experience!

    Remote Monitoring Solution allows for root cause analysis with Azure Time Series Insights

    $
    0
    0

    With the abundance of data coming from IoT devices and the global nature of business today, it’s essential to be able to understand correlations and track historical trends across your assets.

    Imagine managing a fleet of trucks carrying items that need to be maintained at a specific temperature. Occasionally you see a low temperature alert triggered for some of your trucks during their daily scheduled delivery. As an operator, you will need to conduct a root cause analysis to understand why this is happening, if there are recurring patterns, and how to prevent it from happening in the future.

    To help you with this, we’re excited to announce that we have now integrated Azure Time Series Insights into the Azure IoT Remote Monitoring solution accelerator. With Time Series Insights, you can gain deeper insights into your time-series sensor data by spotting trends, anomalies, and correlations across real-time and historical data in all your locations. New Remote Monitoring deployments (both Basic and Standard) will include Time Series Insights out-of-the-box* at no extra cost. All messages data from your IoT devices will be stored in Time Series Insights, but your alarms, rules, and configuration settings will remain in Cosmos DB.

    With this added functionality, you will now be able to:

    1. Visualize your telemetry data in the Time Series Insights explorer by clicking any of the outgoing links on the Remote Monitoring dashboard:

    tsi-rm-dashboard

    2. Explore your device data across all locations and drill down to see second-by-second changes in your streams:

    tsi-chiller-pressure

    3. Diagnose root causes of anomalies by adding other data streams into your view and discovering correlations that could help you identify causation:

    tsi-all-streams

    4. Learn from your explorations and set additional rules so that you can assure your assets are always at their best health:

    rm-new-rule

    *Note: Time Series Insights is not yet available in Azure China Cloud. New deployments in Azure China Cloud will continue to use Cosmos DB for all storage.

    Time Series Insights enables an end-to-end experience that will allow you to not only understand when an anomaly has occurred, but also why it has occurred. We look forward to learning about how Time Series Insights has helped your IoT solution become even smarter and to gathering your feedback on this new feature.

    Next steps

    Viewing all 5971 articles
    Browse latest View live


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>