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

Microsoft and Esri launch Geospatial AI on Azure

$
0
0

Integrating geography and location information with AI brings a powerful new dimension to understanding the world around us. This has a wide range of applications in a variety of segments, including commercial, governmental, academic or not-for-profit. Geospatial AI provides robust tools for gathering, managing, analyzing and predicting from geographic and location-based data, and powerful visualization that can enable unique insights into the significance of such data.

Available today, Microsoft and Esri will be offering the GeoAI Data Science Virtual Machine (DSVM) as part of our Data Science Virtual Machine/Deep Learning Virtual Machine family of products on Azure. This is a result of a collaboration between the two companies and will bring AI, cloud technology and infrastructure, geospatial analytics and visualization together to help create more powerful and intelligent applications.

ESRI

At the heart of the GeoAI Virtual Machine is ArcGIS Pro, Esri’s next-gen 64-bit desktop geographic information system (GIS) that provides professional 2D and 3D mapping in an intuitive user interface. ArcGIS Pro is a big step forward in advancing visualization, analytics, image processing, data management and integration.

ArcGIS Pro is installed in a Data Science Virtual Machine (DSVM) image from Microsoft. The DSVM is a popular experimentation and modeling environment on Azure that provides a host of AI, machine learning and data science tools. These are all conveniently pre-configured for immediate productivity. The DSVM can run either on CPU-only VM instances on Azure or leverage GPU based VM instances which are particularly useful when training large-scale deep learning models.

The Geo AI Data Science VM extends the AI and data science toolkits in the Windows Server 2016 edition of the Data Science VM by adding ESRI's ArcGIS Pro and interfaces in both Python and R to help data scientists leverage the spatial data, rich GIS processing, visualization and analytics in ArcGIS Pro to create better AI applications. For the geospatial analytics professionals, this product now brings in powerful new AI and predictive analytics capabilities including deep learning and machine learning algorithms. Deep learning algorithms are very effective in understanding image/raster data, time-series, and unstructured textual data. The GeoAI Data Science VM also makes it easy to develop for Azure and use big data services like Apache Spark within the VM for analytics. All the tools are pre-installed and pre-configured so that data scientists and geospatial analysts have a ready-to-use environment.

Data scientists and researchers at Microsoft and Esri have been using the GeoAI Data Science VM to automate the analysis of land cover maps in fragile watershed environments using deep learning. For example, it’s now possible to use AI to classify land cover at the pixel level in satellite imagery and extract semantic information at incredible scale. Together GIS, AI and the Data Science Virtual Machine are enabling deeper insights that are integrated with geospatial intelligence leading to more accurate predictions and better decision making.

Getting Started with Geo AI DSVM

It is very easy to create your instance of the GeoAI DSVM and begin your analytics quickly. After clicking on the product link and answering a few simple questions, you are up and running in just a few minutes with a fully configured environment. 

In addition to the comprehensive ML and deep learning samples, a set of geo-spatial AI examples are provided on the VM, to help you get started quickly. The VM also contains a full end-to-end tutorial on land use classification at a pixel level using deep learning and Azure GPU instances. We also demonstrate how you can build and deploly such applications on the Azure cloud with all the tools built into the Geo AI Data Science VM.

We hope these examples provide you some ideas on combining AI and geo-spatial analytics to develop more accurate predictive models and deliver AI innovative applications.

References

About the Geo AI DSVM: http://aka.ms/dsvm/geoai/docs

Creating a Geo AI DSVM Instance: https://docs.microsoft.com/azure/machine-learning/data-science-virtual-machine/provision-geo-ai-dsvm

Using the Geo AI DSVM: https://docs.microsoft.com/azure/machine-learning/data-science-virtual-machine/use-geo-ai-dsvm

Land  use classification tutorial: https://github.com/Azure/pixel_level_land_classification

Data Science VM Overview: https://docs.microsoft.com/azure/machine-learning/data-science-virtual-machine/

ArcGIS Pro Overview: https://www.esri.com/en-us/arcgis/products/arcgis-pro/overview

The Geo AI Data Science VM with ArcGIS on Azure brings geo-spatial analytics, AI and the hyper scale cloud platform to help you derive deeper insights and build large scale applications that are more intelligent.

Give your AI applications a whole new dimension with geo-spatial data and analytics!

Joseph Sirosh
@josephsirosh


Introducing SQL Information Protection for Azure SQL Database and on-premises SQL Server!

$
0
0

We are delighted to announce the public preview of SQL Information Protection, introducing advanced capabilities built into Azure SQL Database for discovering, classifying, labeling, and protecting the sensitive data in your databases. Similar capabilities are also being introduced for on-premises SQL Server via SQL Server Management Studio.

Discovering and classifying your most sensitive data, including business, financial, healthcare, and PII, can play a pivotal role in your organizational information protection stature. It can serve as infrastructure for:

  • Helping meet data privacy standards and regulatory compliance requirements, such as GDPR.
  • Data-centric security scenarios, such as monitoring (auditing) and alerting on anomalous access to sensitive data.
  • Controlling access to and hardening the security of databases containing highly sensitive data.

What is SQL Information Protection?

SQL Information Protection (SQL IP) introduces a set of advanced services and new SQL capabilities, forming a new information protection paradigm in SQL aimed at protecting the data, not just the database:

  • Discovery and recommendations – The classification engine scans your database and identifies columns containing potentially sensitive data. It then provides you an easy way to review and apply the appropriate classification recommendations via the Azure portal.
  • Labeling – Sensitivity classification labels can be persistently tagged on columns using new classification metadata attributes introduced into the SQL engine. This metadata can then be utilized for advanced sensitivity-based auditing and protection scenarios.
  • Monitoring/Auditing – Sensitivity of the query result set is calculated in real time and used for auditing access to sensitive data (currently in Azure SQL DB only).
  • Visibility - The database classification state can be viewed in a detailed dashboard in the portal. Additionally, you can download a report, in Excel format, to be used for compliance and auditing purposes, as well as other needs.

Additional SQL IP capabilities will continue rolling out throughout 2018 – Stay tuned!

How does SQL Information Protection work?

We designed SQL IP with the goal of streamlining the process of discovering, classifying, and labeling sensitive data in your database environment.

Our built-in automated classification engine identifies columns containing potentially sensitive data, and provides a list of classification recommendations, which can be easily applied as sensitivity metadata on top of columns, using new column sensitivity attributes that have been added to the SQL engine. You can also manually classify and label your columns.

Screenshot_1-2

Once you classify and label your data, our detailed overview dashboard provides you visibility into the classification state of your database, as well as the ability to export and download a classification report in Excel format:

Screenshot_2-2

Finally, the SQL engine utilizes the column classifications to determine the sensitivity of query result sets. Combined with Azure SQL Database Auditing, this enables you to audit the sensitivity of the actual data being returned by queries:

Screenshot_auditing

Get started today!

We encourage you to try out SQL Information Protection today for improved visibility into your database environment, as well as for monitoring access to your sensitive data.

More details on using SQL Information Protection can be found below:

 

Regards,

SQL Security team

microsoft

    Announcing Storage Service Encryption with customer managed keys general availability

    $
    0
    0

    Today, we are excited to announce the general availability of Azure Storage Service Encryption with customer managed keys integrated with Azure Key Vault for Azure Blob and File Storage. Azure customers already benefit from Storage Service Encryption for Azure Blob and File Storage using Microsoft managed keys.

    Storage Service Encryption with customer managed keys uses Azure Key Vault that provides highly available and scalable secure storage for RSA cryptographic keys backed by FIPS 140-2 Level 2 validated Hardware Security Modules (HSMs). Key Vault streamlines the key management process and enables customers to maintain full control of keys used to encrypt data, manage, and audit their key usage.

    This is one of the most requested features by enterprise customers looking to protect sensitive data as part of their regulatory or compliance needs, HIPAA and BAA compliant.

    ssecmkpic

    Customers can generate/import their RSA key to Azure Key Vault and use it with Storage Service Encryption. Azure Storage handles the encryption and decryption in a fully transparent fashion using envelope encryption in which data is encrypted using an AES 256 based key, which is in turn protected using the customer managed key stored in Azure Key Vault.

    Customers can rotate their key in Azure Key Vault as per their compliance policies. When they rotate their key, Azure Storage detects the new key version in less than five minutes and re-encrypts the Account Encryption Key for that storage account. This does not result in re-encryption of all data and there is no other action required from the user.

    Customers can also revoke access to the storage account by revoking access on their key in Azure Key Vault. There are several ways to revoke access to your keys. Please refer to Azure Key Vault PowerShell and Azure Key Vault CLI for more details. Revoking access will effectively block access to all blobs in the storage account as the Account Encryption Key is inaccessible by Azure Storage.

    Customers must enable "Do Not Purge" and "Soft Delete" for customer managed keys that help protect them against ransomware scenarios.

    Customers can enable this feature on all available redundancy types of Azure Blob and File storage, including premium storage, and can toggle from using Microsoft managed to using customer managed keys. There is no additional charge for enabling this feature.

    You can enable Storage Service Encryption using customer managed keys on any Azure Resource Manager storage account using the Azure portal, Azure PowerShell, Azure CLI, or the Microsoft Azure Storage Resource Provider API.

    Find out more about Storage Service Encryption with customer managed keys.

    Faster Metric Alerts for Logs now in limited public preview

    $
    0
    0

    I am happy to share the public preview of a new capability – Metric Alerts on Logs for OMS Log Analytics. With this capability, customers can get lower latency alerts from logs. Interested…read on!

    Customers rely on alerts in Azure monitoring tools to stay on top of issues. While log alerts are popular, one concern is the time it takes to find the trace patterns and trigger alerts. We are happy to share the limited public preview of the new capability Metric Alerts for Logs that brings down the time it takes to generate a log alert to sub 5 minutes.

    The Metric Alerts on Logs preview currently supports the following log types on OMS Log Analytics - heartbeat, perf counters (including those from SCOM), and update. To see full list of the generated metrics from logs, see our documentation. In the near future, we plan to expand this list to include events.

    In this blog post, we will walk through the new feature. But first, for those who are curious, we will do a quick peek under the hood to show how it all works.   

    Monitoring tools rely on telemetry emitted by the underlying resources. This telemetry is in the form of structured data (metrics) or unstructured data (logs). Metrics and logs have different characteristics, and each play a distinct role to play in monitoring. Metrics consist of discrete values that are used for exploration purposes via charts and for alerting on numeric thresholds being met.

    On the other hand, logs contain a stream of descriptive data emitted by the resource/app. Customers use the Log Analytics platform to ingest logs and derive insights from these logs via queries, typically for troubleshooting and auditing. Customers also set up alert rules on these logs. The alerting engine runs atop the logs ingested into the Log Analytics platform and checks for criteria specified in an alert rule (via a query). This ingestion process involves batch indexing of the logs, which can take a few minutes. Thus, while using queries to write alert rules on logs is highly flexible, the trade-off is higher latency – at least 10-15 minutes in certain situations. This is generally undesirable to detect issues requiring immediate action such as detecting occurrence of events, or for identifying when resources are unavailable by checking for periodic heartbeats, or for monitoring performance.

    So, how do we provide faster alerts for these scenarios?

    In the examples above, alerting on missed heartbeats or the occurrence of events entails keeping track of the count of specific fields within logs. This is akin to checking the threshold on a metric.

    Given this observation, we built the new Metric Alerts on Logs capability, to "marry" the Logs Analytics platform with the new metrics alerting platform, specifically to provide sub 5 minute end-to-end latency for log alerts, with an evaluation frequency as low as a minute. In this solution, logs are converted to metrics as they stream into the Log Analytics platform. These metrics are then pumped into the metrics platform where they can be alerted on. This conversion of metrics avoids the ingestion of logs, hence bypassing any delays incurred during ingestion completely.

    Now, let’s now take a look at how Metric Alerts on Logs works.

    Using the new Unified Alerts experience under Alerts (Preview), alert rules can be set up for workspaces in Log Analytics. To do so, users can select Create Alert Rule > Subscription > Resource Type (Log Analytics) > Resource (Workspace id).

    SelectTarget

    The next step is to select the signal on which to alert. As part of the signal selection, users can define a query, pick from a saved query or pick a metric generated from the log (available in this preview).

    SelectSignal

    Users can select heartbeat, which shows up as a metric in the signal list. When selecting this signal, the effectively same alert rule is created, albeit with much lower latency on the metric generated from the log.

    SelectHeartbeatMetric

    To conclude, the Metric Alerts on Logs preview allows customers the best of both worlds – faster alerting for logs using metrics technology and the ability to leverage Log Analytics for insights.

    To take this capability for a spin, sign up for the preview. As always, we would love to hear your feedback, please keep it coming at azurealertsfeedback@microsoft.com.

    Build Spring Boot 2.0 apps with Azure Starters and new VSCode extensions

    $
    0
    0

    Spring fans, we are excited to announce full support of Spring Boot 2.0 on the Spring Boot Starters for Azure, already available on Spring Initializr. Plus, with new Java and Spring extensions for Visual Studio Code you can build production-ready apps and easily deploy them to the cloud.

    Integrate Azure services with Spring Boot 2.0 apps

    Spring Initializr enables developers to handle the dependency management and make the bootstrapping process for Spring projects much easier. Today, we’re announcing that the Azure Starters have been updated to support Spring Boot 2.0, so you can easily integrate cloud services with your application.

    All of the Azure Spring Boot Starters are available on Spring Initializr:

    • Azure Support: Provides support for the Azure services below, plus all other services currently available via Spring Boot Starters.
    • Azure Active Directory: Enterprise grade authentication using Azure Active Directory, integrated with Spring Security.
    • Azure Key Vault: Manage application secrets using Azure Key Vault, providing Spring value annotation support.
    • Azure Storage: Integration with Azure Storage, including object storage, queues, tables, and more.

    You can create a Spring Boot 2.0 project on Spring Initializr, then search for “Azure” to find the Azure modules:

    Spring Initializr

    Spring and Java extensions with Visual Studio Code

    Visual Studio Code is a free, open source editor for macOS, Linux and Windows, and it’s a powerful tool for building Spring and Java applications. Just like how developers enjoy the simplicity and quick nature of building applications in Spring Boot, developers can save a lot of time and quickly build, test, and debug applications using Visual Studio Code:

    • Scaffold a project: You can quickly generate a new Spring Boot project using the Spring Initializr extension for Visual Studio Code, without leaving the editor.

    Spring Initializr

    • Write code efficiently: Use Spring Boot Java Support for smart code auto-completion, quick source code navigation, instant access to view running applications, and real-time display of application information.

    Spring Boot Java Support

    • Better debugging: Use Debugger for Java to set an application source code breakpoint so that browser reloads take you directly to that breakpoint.

    Debugger for Java

    Deploy your Spring apps to Azure

    Once you’ve built your Spring apps, you can easily deploy them to Azure, leveraging services like:

    If you don’t have an Azure subscription, you can get started with our trial offer, including $200 in Azure credits and 12 months of popular services, for free.

    Next steps

    Check out the Azure Spring Boot Starters page on GitHub to get started. Also, don’t forget to try Visual Studio Code for a faster and leaner experience building Java and Spring apps.

    Three things you need to know about Windows Developer Day

    $
    0
    0

    We live in an interconnected world and the digital transformation that companies are going through are as unique as the companies themselves. The opportunity to explore new approaches and new technology has never been greater than it is today. With that in mind, I’m privileged to share with you key advancements available in the SDK for the next Windows 10 Update. At the Windows Developer Day event, we focused on three specific areas:

    • Making it easier for desktop developers to modernize their applications
    • Introducing AI for Windows
    • Windows IoT will help you expand into the Intelligent Edge

    Modern applications for a modern workplace

    For those of you building new applications for the modern workplace, UWP continues to be our modern native platform and the best path forward. At the same time, we understand that developers want to reuse and preserve code investments too. For those of you who are maintaining Windows desktop applications, you can now add modern experiences into your existing Win32, WPF, or Windows Forms applications incrementally.

    • Modern WebView using the Microsoft Edge rendering engine is now available to all Win32, WPF, and Windows Forms applications – providing the latest improvements from our Web Platform. Developers will also have access to the latest web technologies such as Grid and Flexbox layouts, HTTP intercepting and WebRTC.
    • MSIX is our vision for a complete containerization solution and it inherits all the great features in UWP and most importantly, it applies to all Win32, WPF, Windows Forms, and UWP applications. The MSIX packaging format was open sourced today.
    • Adaptive cards gives you a flexible way to present your content and data to enable you to connect with your users. Examples of high value engagement surfaces are notifications, activities in Timeline, and bots in Skype and Teams. The 1.0 release is available today.

    Additionally, it’s exciting to see community development tools come to market. Advanced Installer announced their Advanced Installer Express Edition, a free tool to modernize existing Windows desktop applications and create an .appx package. We are also working with other 3rd party installers.

    Artificial Intelligence for Modern Experiences

    With the SDK for the next Windows 10 Update, developers can use AI to deliver more powerful and engaging experiences. Developers can use pre-trained machine learning models in their apps, to deliver AI experiences with the following benefits.

    • Low latency, real-time results. Windows can perform AI evaluation tasks using the local processing capabilities of the PC, and results can be delivered quickly and efficiently.
    • Reduced operational costs. Together with Microsoft’s Cloud AI platform, developers can build affordable, end-to-end AI solutions that combine training models in Azure with deployment to Windows devices for evaluation. Significant savings can be realized by reducing or eliminating costs associated with bandwidth due to ingestion of large data sets, such as camera footage or sensor telemetry. Complex workloads can be processed in real-time on the edge, with minimal sample data sent to the cloud for improved training on observations.
    • Flexibility. Developers can choose to perform AI tasks on a device or in the cloud based on what their customers and scenarios needs are. AI processing can happen on the device if it becomes disconnected, or in scenarios where data cannot be sent to the cloud due to cost, size, policy, or customer preference.

    Windows supports ONNX, an industry standard format for ML models that is driven by Microsoft, Facebook, and Amazon Web Services, and supported by Windows IHVs including NVIDIA, Intel, Qualcomm and AMD. With the update, developers can use the AI platform across the Windows 10 devices family, including IoT edge devices, HoloLens, 2-in-1s and desktop PCs, workstations, servers, and in data centers. To learn more, read AI Platform for Windows Developers.

    Windows Internet of Things in the Intelligent Cloud and Intelligent Edge

    We’ve noticed a fundamental change in the way applications are being built and the shift from being a mobile device-centric world to a world that’s more interconnected with all our devices.

    Today, we shared two editions of Windows 10 IoT to help your applications excel in our interconnected world.

    • Windows 10 IoT Core for small footprint smart edge devices. With NXP modules available below $50/unit, you can build great low-cost solutions on Windows 10.
    • Windows 10 IoT Enterprise on powerful PC or Server-class hardware. Windows IoT Enterprise will be great for larger devices such as ATMs, medical devices, or industrial scales to name a few.

    Whichever edition you choose, you can use the same tools and workflow, using Visual Studio, NuGet, remote debugging, and others that you are familiar with.

    The Intelligent Edge is the interface between the cloud and the real world. It is the layer of devices that we use to access the data in the cloud onto your device.  Below are some great partners we featured earlier today.

    • VW’s MQB platform is a great metaphor for what you get from Windows 10 when you build a device on a more complete platform. We allow developers to be the fastest from concept to market.
    • The Misty One from Misty Robotics, benefitted from the Windows 10 “chassis” and they were able to get a complete product together much faster than pulling everything together themselves.
    • Xogo chose Windows 10 IoT Core on their Xogo Mini for the low-cost silicon and the ability to use the same app as on PCs.

    Earlier today, we described how using Azure Cognitive Services on the Intelligent Edge could be used to inject even more capability into a digital sign—to create a sign that sees you, listens to you, talks to you, and gets to know you.

    The Intelligent Cloud gives you the ability to process all the data coming from the world around you, react to events, and work in a serverless environment.  Practically speaking, you can quickly and easily bring cloud microservices to Windows using Azure IoT Edge. This component of Azure is in public preview today.

    This next update to Windows 10 provides you with the building blocks we have available today. With Windows machine learning and Azure IoT Edge Public Preview you can experiment on your Windows PC or pick up a low-cost Windows IoT device.

    Community and Thanks

    I would like to thank the MVPs and RDs who joined us in Redmond today – the Windows community is crucial to the Windows developer platform. I’d also like to thank all developers who are participating in the Windows Insiders Program and have been using the Windows Insider Preview SDK.  We value your insights, suggestions, and your feedback.

    I look forward to seeing what you create with the next Windows 10 Update.  For more details, go to dev.windows.com. We also look forward to continuing this conversation with you at Build, so I hope you can join us there. Thank you!

    The post Three things you need to know about Windows Developer Day appeared first on Windows Developer Blog.

    AI Platform for Windows Developers

    $
    0
    0

    At Microsoft, we’re making huge investments in AI and Machine Learning across the company. AI capabilities in Office 365 help subscribers with productivity at work, intelligent features in the Photos app for Windows 10 make it easier for people to create videos and search through massive photo collections, and Windows Hello uses AI to recognize your face and get you quickly logged in to your Windows devices. We also use AI to answer your questions when using Bing Search and Cortana, to enable advertisers build deeper connections with customers, and to help security professionals safeguard businesses against modern threats. Microsoft Research continues to drive the state of the art with speech recognition, machine reading and comprehension, computer vision. We’ve scaled AI to tiny devices, and even built AI that can draw!

    “Intel’s Movidius VPU technology will deliver increasingly sophisticated AI experiences for the hundreds of millions of Microsoft users worldwide,” said Intel’s Remi El-Ouazzane, Vice President and General Manager of Movidius.

    With the next major update to Windows 10, we begin to deliver the advances that have been built into our apps and services as part of the Windows 10 platform. Every developer that builds apps on Windows 10 will be able to use AI to deliver more powerful and engaging experiences.

    “AI acceleration on Window 10 PCs is the latest evidence of how artificial intelligence is becoming ubiquitous in our everyday lives,” said Ian Buck, vice president and general manager, Accelerated Computing, at NVIDIA. “NVIDIA is delighted to be partnering with Microsoft to enhance the PC experience for users worldwide.”

    The AI platform in Windows 10 enables developers to use pre-trained machine learning models in their Apps on Windows devices. This offers developers a number of benefits:

    • Low latency, real-time results. Windows can perform AI evaluation tasks using the local processing capabilities of the PC, enabling real-time analysis of large local data such as images and video. Results can be delivered quickly and efficiently for use in performance intensive workloads like game engines, or background tasks such as indexing for search.
    • Reduced operational costs. Together with Microsoft’s Cloud AI platform, developers can build affordable, end-to-end AI solutions that combine training models in Azure with deployment to Windows devices for evaluation. Significant savings can be realized by reducing or eliminating costs associated with bandwidth due to ingestion of large data sets, such as camera footage or sensor telemetry. Complex workloads can be processed in real-time on the edge, with minimal sample data sent to the cloud for improved training on observations.
    • Flexibility. Developers can choose to perform AI tasks on device or in the cloud based on what their customers & scenarios need. AI processing can happen on the device if it becomes disconnected, or in scenarios where data cannot be sent to the cloud due to cost, size, policy or customer preference. 

    “We’re excited to be collaborating with Microsoft on the Windows ML platform, and helping developers accelerate on-device AI performance on Windows laptops with the Snapdragon 835 AI Engine.” Gary Brotman, Director of Product Management – AI and Machine Learning, Qualcomm Technologies, Inc.

    Our ML model evaluation is tuned for efficiency across the diverse silicon that runs Windows. By using instruction set optimizations on modern CPUs, hardware acceleration on GPUs that support DirectX 12, and a driver model for purpose-built AI processors in the future, we deliver performance and efficiency on the broadest range of form factors. With the update, developers can use the AI platform across the Windows device family, including IoT edge devices, HoloLens, 2-in-1s and desktop PCs, workstations, servers and in data centers.

    “We’re excited to work with Microsoft on Windows ML as a part of taking advantage of the high-performance capabilities of AMD CPUs and GPUs to bring AI acceleration to Windows 10 PCs.” – Andre Zdravkovic, CVP Software, AMD

    Windows supports ONNX, an industry standard format for ML models that is driven by Microsoft, Facebook, and Amazon Web Services, and supported by Windows IHVs including NVIDIA, Intel, Qualcomm and AMD. Data scientists can train and deliver ONNX models for use by Windows developers using Azure Machine Learning Workbench, and coming soon, the Azure Custom Vision Service will also support creating ONNX models for Windows.

    We’ve also invested in delivering a great development experience for AI developers on Windows. Starting with Visual Studio Preview 15.7, adding an ONNX file to a UWP project will automatically generate a model interfaces in your project. For prior versions of Visual Studio, developers can use the MLGen tool to generate the code interface and then manually add it to their projects. This capability will be coming soon to Visual Studio tools for AI as well.

    For consumers, this is just the beginning! You’ll see more intelligence in every day experiences on Windows devices. Developers can build AI powered apps that help you inspire and communicate in 3d, keep track of tasks and commitments more easily, and listen to music from playlists made just right for you.

    You can learn more about our AI journey at Windows Developer Day on March 7, and at //build 2018.

    The post AI Platform for Windows Developers appeared first on Windows Developer Blog.

    Windows 10 SDK Preview Build 17110 now available

    $
    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 17110 or greater). The Preview SDK Build 17110 contains bug fixes and under development changes to the API surface area.

    The Preview SDK can be downloaded from 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 Creators build 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 and supported Windows operating systems.

    What’s New:

    • C++/WinRT Now Available: The C++/WinRT headers and cppwinrt compiler (cppwinrt.exe) are now included in the Windows SDK. The compiler comes in handy if you need to consume a third-party WinRT component or if you need to author your own WinRT components with C++/WinRT. The easiest way to get working with it after installing the Windows Insider Preview SDK is to start the Visual Studio Developer Command Prompt and run the compiler in that environment. Authoring support is currently experimental and subject to change. Stay tuned as we will publish more detailed instructions on how to use the compiler in the coming week.The ModernCPP blog has a deeper dive into the CppWinRT compiler.  Please give us feedback by creating an issue at: https://github.com/microsoft/cppwinrt.

    Breaking Changes

    New MIDL key words. 

    As a part of the “modernizing IDL” effort, several new keywords are added to the midlrt tool. These new keywords will cause build breaks if they are encountered in IDL files.

    The new keywords are:

    • event
    • set
    • get
    • partial
    • unsealed
    • overridable
    • protected
    • importwinmd

    If any of these keywords is used as an identifier, it will generate a build failure indicating a syntax error.

    The error will be similar to:

    1 >d:ossrconecorecomcombaseunittestastatestserverstestserver6idlremreleasetest.idl(12) : error MIDL2025 : [msg]syntax error [context]: expecting a declarator or * near “)”

    To fix this, modify the identifier in error to an “@” prefix in front of the identifier. That will cause MIDL to treat the offending element as an identifier instead of a keyword.

    API Updates and Additions

    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 (10 by 10) for more information.

    The following APIs have been added to the platform since the release of 16299.

    
    namespace Windows.AI.MachineLearning.Preview {
      public enum FeatureElementKindPreview
      public interface ILearningModelVariableDescriptorPreview
      public sealed class ImageVariableDescriptorPreview : ILearningModelVariableDescriptorPreview
      public sealed class InferencingOptionsPreview
      public sealed class LearningModelBindingPreview : IIterable<IKeyValuePair<string, object>>, IMapView<string, object>
      public sealed class LearningModelDescriptionPreview
      public enum LearningModelDeviceKindPreview
      public sealed class LearningModelEvaluationResultPreview
      public enum LearningModelFeatureKindPreview
      public sealed class LearningModelPreview
      public sealed class LearningModelVariableDescriptorPreview : ILearningModelVariableDescriptorPreview
      public struct MachineLearningPreviewContract
      public sealed class MapVariableDescriptorPreview : ILearningModelVariableDescriptorPreview
      public sealed class SequenceVariableDescriptorPreview : ILearningModelVariableDescriptorPreview
      public sealed class TensorVariableDescriptorPreview : ILearningModelVariableDescriptorPreview
    }
    namespace Windows.ApplicationModel {
      public enum AddResourcePackageOptions : uint
      public sealed class AppInstance
      public sealed class PackageCatalog {
        IAsyncOperationWithProgress<PackageCatalogAddResourcePackageResult, PackageInstallProgress> AddResourcePackageAsync(string resourcePackageFamilyName, string resourceID, AddResourcePackageOptions options);
        IAsyncOperation<PackageCatalogRemoveResourcePackagesResult> RemoveResourcePackagesAsync(IIterable<Package> resourcePackages);
      }
      public sealed class PackageCatalogAddResourcePackageResult
      public sealed class PackageCatalogRemoveResourcePackagesResult
      public struct PackageInstallProgress
      public enum StartupTaskState {
        EnabledByPolicy = 4,
      }
    }
    namespace Windows.ApplicationModel.Activation {
      public enum ActivationKind {
        BarcodeScannerProvider = 1022,
      }
      public sealed class BarcodeScannerPreviewActivatedEventArgs : IActivatedEventArgs, IActivatedEventArgsWithUser, IBarcodeScannerPreviewActivatedEventArgs
      public interface IBarcodeScannerPreviewActivatedEventArgs : IActivatedEventArgs
    }
    namespace Windows.ApplicationModel.Background {
      public enum BackgroundAccessRequestKind
      public static class BackgroundExecutionManager {
        public static IAsyncOperation<bool> RequestAccessKindAsync(BackgroundAccessRequestKind requestedAccess, string reason);
      }
      public sealed class CustomSystemEventTrigger : IBackgroundTrigger
      public enum CustomSystemEventTriggerRecurrence
      public sealed class MobileBroadbandPcoDataChangeTrigger : IBackgroundTrigger
      public sealed class NetworkOperatorDataUsageTrigger : IBackgroundTrigger
      public sealed class StorageLibraryChangeTrackerTrigger : IBackgroundTrigger
      public sealed class TetheringEntitlementCheckTrigger : IBackgroundTrigger
    }
    namespace Windows.ApplicationModel.Calls {
      public enum PhoneCallMedia {
        AudioAndRealTimeText = 2,
      }
      public sealed class VoipCallCoordinator {
        VoipPhoneCall RequestNewAppInitiatedCall(string context, string contactName, string contactNumber, string serviceName, VoipPhoneCallMedia media);
        VoipPhoneCall RequestNewIncomingCall(string context, string contactName, string contactNumber, Uri contactImage, string serviceName, Uri brandingImage, string callDetails, Uri ringtone, VoipPhoneCallMedia media, TimeSpan ringTimeout, string contactRemoteId);
      }
      public sealed class VoipPhoneCall {
        void NotifyCallAccepted(VoipPhoneCallMedia media);
      }
    }
    namespace Windows.ApplicationModel.Core {
      public sealed class AppListEntry {
        IAsyncOperation<bool> LaunchForUserAsync(User user);
      }
    }
    namespace Windows.ApplicationModel.DataTransfer {
      public sealed class DataPackagePropertySet : IIterable<IKeyValuePair<string, object>>, IMap<string, object> {
        string ContentSourceUserActivityJson { get; set; }
      }
      public sealed class DataPackagePropertySetView : IIterable<IKeyValuePair<string, object>>, IMapView<string, object> {
        string ContentSourceUserActivityJson { get; }
      }
      public static class StandardDataFormats {
        public static string UserActivityJsonArray { get; }
      }
    }
    namespace Windows.ApplicationModel.Store.Preview {
      public enum StoreSystemFeature {
        ArchitectureArm64 = 34,
      }
    }
    namespace Windows.ApplicationModel.Store.Preview.InstallControl {
      public sealed class AppInstallItem {
        bool LaunchAfterInstall { get; set; }
      }
      public sealed class AppInstallManager {
        IAsyncOperation<bool> GetIsPackageIdentityAllowedToInstallAsync(string correlationVector, string packageIdentityName, string publisherCertificateName);
        IAsyncOperation<bool> GetIsPackageIdentityAllowedToInstallForUserAsync(User user, string correlationVector, string packageIdentityName, string publisherCertificateName);
        IAsyncOperation<IVectorView<AppInstallItem>> SearchForAllUpdatesAsync(string correlationVector, string clientId, AppUpdateOptions updateOptions);
        IAsyncOperation<IVectorView<AppInstallItem>> SearchForAllUpdatesForUserAsync(User user, string correlationVector, string clientId, AppUpdateOptions updateOptions);
        IAsyncOperation<AppInstallItem> SearchForUpdatesAsync(string productId, string skuId, string correlationVector, string clientId, AppUpdateOptions updateOptions);
        IAsyncOperation<AppInstallItem> SearchForUpdatesForUserAsync(User user, string productId, string skuId, string correlationVector, string clientId, AppUpdateOptions updateOptions);
        IAsyncOperation<IVectorView<AppInstallItem>> StartProductInstallAsync(string productId, string flightId, string clientId, string correlationVector, AppInstallOptions installOptions);
        IAsyncOperation<IVectorView<AppInstallItem>> StartProductInstallForUserAsync(User user, string productId, string flightId, string clientId, string correlationVector, AppInstallOptions installOptions);
      }
      public sealed class AppInstallOptions
      public sealed class AppInstallStatus {
        bool IsStaged { get; }
      }
      public sealed class AppUpdateOptions
    }
    namespace Windows.ApplicationModel.UserActivities {
      public sealed class UserActivity {
        public UserActivity(string activityId);
        string ToJson();
        public static string ToJsonArray(IIterable<UserActivity> activities);
        public static UserActivity TryParseFromJson(string json);
        public static IVector<UserActivity> TryParseFromJsonArray(string json);
      }
      public sealed class UserActivityChannel {
        public static void DisableAutoSessionCreation();
        IAsyncOperation<IVector<UserActivitySessionHistoryItem>> GetRecentUserActivitiesAsync(int maxUniqueActivities);
        IAsyncOperation<IVector<UserActivitySessionHistoryItem>> GetSessionHistoryItemsForUserActivityAsync(string activityId, DateTime startTime);
        public static UserActivityChannel TryGetForWebAccount(WebAccount account);
      }
      public sealed class UserActivityRequest
      public sealed class UserActivityRequestedEventArgs
      public sealed class UserActivityRequestManager
      public sealed class UserActivitySessionHistoryItem
      public sealed class UserActivityVisualElements {
        string AttributionDisplayText { get; set; }
      }
    }
    namespace Windows.Devices.Bluetooth {
      public sealed class BluetoothAdapter {
        bool AreClassicSecureConnectionsSupported { get; }
        bool AreLowEnergySecureConnectionsSupported { get; }
      }
      public sealed class BluetoothDevice : IClosable {
        bool WasSecureConnectionUsedForPairing { get; }
      }
      public sealed class BluetoothLEDevice : IClosable {
        bool WasSecureConnectionUsedForPairing { get; }
      }
    }
    namespace Windows.Devices.Display {
      public sealed class DisplayMonitor
      public enum DisplayMonitorConnectionKind
      public enum DisplayMonitorDescriptorKind
      public enum DisplayMonitorPhysicalConnectorKind
      public enum DisplayMonitorUsageKind
    }
    namespace Windows.Devices.Input.Preview {
      public enum GazeDeviceConfigurationStatePreview
      public sealed class GazeDevicePreview
      public sealed class GazeDeviceWatcherAddedPreviewEventArgs
      public sealed class GazeDeviceWatcherPreview
      public sealed class GazeDeviceWatcherRemovedPreviewEventArgs
      public sealed class GazeDeviceWatcherUpdatedPreviewEventArgs
      public sealed class GazeEnteredPreviewEventArgs
      public sealed class GazeExitedPreviewEventArgs
      public sealed class GazeInputSourcePreview
      public sealed class GazeMovedPreviewEventArgs
      public sealed class GazePointPreview
    }
    namespace Windows.Devices.PointOfService {
      public sealed class BarcodeScannerReport {
        public BarcodeScannerReport(uint scanDataType, IBuffer scanData, IBuffer scanDataLabel);
      }
      public sealed class ClaimedBarcodeScanner : IClosable {
        bool IsVideoPreviewShownOnEnable { get; set; }
        void HideVideoPreview();
        IAsyncOperation<bool> ShowVideoPreviewAsync();
      }
      public sealed class UnifiedPosErrorData {
        public UnifiedPosErrorData(string message, UnifiedPosErrorSeverity severity, UnifiedPosErrorReason reason, uint extendedReason);
      }
    }
    namespace Windows.Devices.PointOfService.Provider {
      public sealed class BarcodeScannerDisableScannerRequest
      public sealed class BarcodeScannerDisableScannerRequestEventArgs
      public sealed class BarcodeScannerEnableScannerRequest
      public sealed class BarcodeScannerEnableScannerRequestEventArgs
      public sealed class BarcodeScannerGetSymbologyAttributesRequest
      public sealed class BarcodeScannerGetSymbologyAttributesRequestEventArgs
      public sealed class BarcodeScannerHideVideoPreviewRequest
      public sealed class BarcodeScannerHideVideoPreviewRequestEventArgs
      public sealed class BarcodeScannerProviderConnection : IClosable
      public sealed class BarcodeScannerProviderTriggerDetails
      public sealed class BarcodeScannerSetActiveSymbologiesRequest
      public sealed class BarcodeScannerSetActiveSymbologiesRequestEventArgs
      public sealed class BarcodeScannerSetSymbologyAttributesRequest
      public sealed class BarcodeScannerSetSymbologyAttributesRequestEventArgs
      public sealed class BarcodeScannerStartSoftwareTriggerRequest
      public sealed class BarcodeScannerStartSoftwareTriggerRequestEventArgs
      public sealed class BarcodeScannerStopSoftwareTriggerRequest
      public sealed class BarcodeScannerStopSoftwareTriggerRequestEventArgs
      public enum BarcodeScannerTriggerState
      public sealed class BarcodeSymbologyAttributesBuilder
    }
    namespace Windows.Foundation.Numerics {
      public struct Rational
    }
    namespace Windows.Globalization {
      public static class ApplicationLanguages {
        public static IVectorView<string> GetLanguagesForUser(User user);
     }
      public sealed class Language {
        LanguageLayoutDirection LayoutDirection { get; }
      }
      public enum LanguageLayoutDirection
    }
    namespace Windows.Graphics {
      public struct DisplayAdapterId
      public interface IGeometrySource2D
    }
    namespace Windows.Graphics.Capture {
      public sealed class Direct3D11CaptureFrame : IClosable
      public sealed class Direct3D11CaptureFramePool : IClosable
      public sealed class GraphicsCaptureItem
      public sealed class GraphicsCapturePicker
      public sealed class GraphicsCaptureSession : IClosable
    }
    namespace Windows.Graphics.DirectX {
      public enum DirectXColorSpace
    }
    namespace Windows.Graphics.Display {
      public sealed class AdvancedColorInfo
      public enum AdvancedColorKind
      public sealed class BrightnessOverrideSettings
      public sealed class ColorOverrideSettings
      public enum DisplayBrightnessOverrideScenario
      public enum DisplayColorOverrideScenario
      public sealed class DisplayEnhancementOverride
      public sealed class DisplayEnhancementOverrideCapabilities
      public sealed class DisplayEnhancementOverrideCapabilitiesChangedEventArgs
      public sealed class DisplayInformation {
        event TypedEventHandler<DisplayInformation, object> AdvancedColorInfoChanged;
        AdvancedColorInfo GetAdvancedColorInfo();
      }
      public enum HdrMetadataFormat
      public struct NitRange
    }
    namespace Windows.Graphics.Holographic {
      public sealed class HolographicCamera {
        bool CanOverrideViewport { get; }
      }
      public sealed class HolographicCameraPose {
        void OverrideProjectionTransform(HolographicStereoTransform projectionTransform);
        void OverrideViewport(Rect leftViewport, Rect rightViewport);
        void OverrideViewTransform(SpatialCoordinateSystem coordinateSystem, HolographicStereoTransform coordinateSystemToViewTransform);
      }
      public sealed class HolographicFramePresentationMonitor : IClosable
      public sealed class HolographicFramePresentationReport
      public sealed class HolographicSpace {
        HolographicSpaceUserPresence UserPresence { get; }
        event TypedEventHandler<HolographicSpace, object> UserPresenceChanged;
        HolographicFramePresentationMonitor CreateFramePresentationMonitor(uint maxQueuedReports);
        void WaitForNextFrameReady();
        void WaitForNextFrameReadyWithHeadStart(TimeSpan requestedHeadStartDuration);
      }
      public enum HolographicSpaceUserPresence
    }
    namespace Windows.Graphics.Imaging {
      public enum BitmapPixelFormat {
        P010 = 104,
      }
    }
    namespace Windows.Graphics.Printing {
      public sealed class PrintPageRange
      public sealed class PrintPageRangeOptions
      public sealed class PrintTaskOptions : IPrintTaskOptionsCore, IPrintTaskOptionsCoreProperties, IPrintTaskOptionsCoreUIConfiguration {
        IVector<PrintPageRange> CustomPageRanges { get; }
        PrintPageRangeOptions PageRangeOptions { get; }
      }
      public static class StandardPrintTaskOptions {
        public static string CustomPageRanges { get; }
      }
    }
    namespace Windows.Graphics.Printing.OptionDetails {
      public sealed class PrintBindingOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintBorderingOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintCollationOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintColorModeOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintCopiesOptionDetails : IPrintNumberOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintCustomItemListOptionDetails : IPrintCustomOptionDetails, IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
        void AddItem(string itemId, string displayName, string description, IRandomAccessStreamWithContentType icon);
      }
      public sealed class PrintCustomTextOptionDetails : IPrintCustomOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintCustomToggleOptionDetails : IPrintCustomOptionDetails, IPrintOptionDetails
      public sealed class PrintDuplexOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintHolePunchOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
     public sealed class PrintMediaSizeOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintMediaTypeOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public enum PrintOptionType {
        Toggle = 4,
      }
      public sealed class PrintOrientationOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintPageRangeOptionDetails : IPrintOptionDetails
      public sealed class PrintQualityOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintStapleOptionDetails : IPrintItemListOptionDetails, IPrintOptionDetails {
        string Description { get; set; }
        string WarningText { get; set; }
      }
      public sealed class PrintTaskOptionDetails : IPrintTaskOptionsCore, IPrintTaskOptionsCoreUIConfiguration {
        PrintCustomToggleOptionDetails CreateToggleOption(string optionId, string displayName);
      }
    }
    namespace Windows.Management.Deployment {
      public sealed class PackageManager {
        IAsyncOperationWithProgress<DeploymentResult, DeploymentProgress> RequestAddPackageAsync(Uri packageUri, IIterable<Uri> dependencyPackageUris, DeploymentOptions deploymentOptions, PackageVolume targetVolume, IIterable<string> optionalPackageFamilyNames, IIterable<Uri> relatedPackageUris, IIterable<Uri> packageUrisToInstall);
      }
    }
    namespace Windows.Management.Update {
      public sealed class PreviewBuildsManager
      public sealed class PreviewBuildsState
    }
    namespace Windows.Media {
      public sealed class VideoFrame : IClosable, IMediaFrame {
        IAsyncAction CopyToAsync(VideoFrame frame, IReference<BitmapBounds> sourceBounds, IReference<BitmapBounds> destinationBounds);
        public static VideoFrame CreateAsDirect3D11SurfaceBacked(DirectXPixelFormat format, int width, int height);
        public static VideoFrame CreateAsDirect3D11SurfaceBacked(DirectXPixelFormat format, int width, int height, IDirect3DDevice device);
        public static VideoFrame CreateWithDirect3D11Surface(IDirect3DSurface surface);
        public static VideoFrame CreateWithSoftwareBitmap(SoftwareBitmap bitmap);
      }
    }
    namespace Windows.Media.Audio {
      public sealed class AudioGraph : IClosable {
        IAsyncOperation<CreateMediaSourceAudioInputNodeResult> CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource);
        IAsyncOperation<CreateMediaSourceAudioInputNodeResult> CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource, AudioNodeEmitter emitter);
      }
      public sealed class AudioGraphSettings {
        double MaxPlaybackSpeedFactor { get; set; }
      }
      public sealed class AudioStateMonitor
      public sealed class CreateMediaSourceAudioInputNodeResult
      public sealed class MediaSourceAudioInputNode : IAudioInputNode, IAudioInputNode2, IAudioNode, IClosable
      public enum MediaSourceAudioInputNodeCreationStatus
    }
    namespace Windows.Media.Capture {
      public sealed class CapturedFrame : IClosable, IContentTypeProvider, IInputStream, IOutputStream, IRandomAccessStream, IRandomAccessStreamWithContentType {
        BitmapPropertySet BitmapProperties { get; }
        CapturedFrameControlValues ControlValues { get; }
      }
      public enum KnownVideoProfile {
        HdrWithWcgPhoto = 8,
        HdrWithWcgVideo = 7,
        HighFrameRate = 5,
        VariablePhotoSequence = 6,
        VideoHdr8 = 9,
      }
      public sealed class MediaCaptureSettings {
        IDirect3DDevice Direct3D11Device { get; }
      }
      public sealed class MediaCaptureVideoProfile {
        IVectorView<MediaFrameSourceInfo> FrameSourceInfos { get; }
        IMapView<Guid, object> Properties { get; }
      }
      public sealed class MediaCaptureVideoProfileMediaDescription {
        IMapView<Guid, object> Properties { get; }
        string Subtype { get; }
      }
    }
    namespace Windows.Media.Capture.Frames {
      public sealed class AudioMediaFrame
      public sealed class MediaFrameFormat {
        AudioEncodingProperties AudioEncodingProperties { get; }
      }
      public sealed class MediaFrameReference : IClosable {
        AudioMediaFrame AudioMediaFrame { get; }
      }
      public sealed class MediaFrameSourceController {
        AudioDeviceController AudioDeviceController { get; }
      }
      public sealed class MediaFrameSourceInfo {
        string ProfileId { get; }
        IVectorView<MediaCaptureVideoProfileMediaDescription> VideoProfileMediaDescription { get; }
      }
      public enum MediaFrameSourceKind {
        Audio = 4,
        Image = 5,
      }
    }
    namespace Windows.Media.Core {
      public sealed class AudioStreamDescriptor : IMediaStreamDescriptor, IMediaStreamDescriptor2 {
        AudioStreamDescriptor Copy();
      }
      public sealed class MediaBindingEventArgs {
        void SetDownloadOperation(DownloadOperation downloadOperation);
      }
      public sealed class MediaSource : IClosable, IMediaPlaybackSource {
        DownloadOperation DownloadOperation { get; }
        public static MediaSource CreateFromDownloadOperation(DownloadOperation downloadOperation);
      }
      public sealed class TimedMetadataStreamDescriptor : IMediaStreamDescriptor, IMediaStreamDescriptor2
      public sealed class VideoStreamDescriptor : IMediaStreamDescriptor, IMediaStreamDescriptor2 {
        VideoStreamDescriptor Copy();
      }
    }
    namespace Windows.Media.Devices {
      public sealed class VideoDeviceController : IMediaDeviceController {
        VideoTemporalDenoisingControl VideoTemporalDenoisingControl { get; }
      }
      public sealed class VideoTemporalDenoisingControl
      public enum VideoTemporalDenoisingMode
    }
    namespace Windows.Media.DialProtocol {
      public sealed class DialReceiverApp {
        IAsyncOperation<string> GetUniqueDeviceNameAsync();
      }
    }
    namespace Windows.Media.Effects {
      public sealed class VideoTransformEffectDefinition : IVideoEffectDefinition {
        VideoTransformSphericalProjection SphericalProjection { get; }
      }
      public sealed class VideoTransformSphericalProjection
    }
    namespace Windows.Media.MediaProperties {
      public sealed class AudioEncodingProperties : IMediaEncodingProperties {
        AudioEncodingProperties Copy();
      }
      public sealed class ContainerEncodingProperties : IMediaEncodingProperties {
        ContainerEncodingProperties Copy();
      }
      public sealed class ImageEncodingProperties : IMediaEncodingProperties {
        ImageEncodingProperties Copy();
      }
      public sealed class MediaEncodingProfile {
        IVector<TimedMetadataStreamDescriptor> GetTimedMetadataTracks();
        void SetTimedMetadataTracks(IIterable<TimedMetadataStreamDescriptor> value);
      }
      public static class MediaEncodingSubtypes {
        public static string P010 { get; }
      }
      public enum MediaPixelFormat {
        P010 = 2,
      }
      public sealed class TimedMetadataEncodingProperties : IMediaEncodingProperties
      public sealed class VideoEncodingProperties : IMediaEncodingProperties {
        VideoEncodingProperties Copy();
      }
    }
    namespace Windows.Media.Playback {
      public sealed class MediaPlaybackSession {
        MediaRotation PlaybackRotation { get; set; }
        MediaPlaybackSessionOutputDegradationPolicyState GetOutputDegradationPolicyState();
      }
      public sealed class MediaPlaybackSessionOutputDegradationPolicyState
      public enum MediaPlaybackSessionVideoConstrictionReason
      public sealed class MediaPlayer : IClosable {
        AudioStateMonitor AudioStateMonitor { get; }
      }
    }
    namespace Windows.Media.SpeechSynthesis {
      public enum SpeechAppendedSilence
      public enum SpeechPunctuationSilence
      public sealed class SpeechSynthesizerOptions {
        SpeechAppendedSilence AppendedSilence { get; set; }
        SpeechPunctuationSilence PunctuationSilence { get; set; }
      }
    }
    namespace Windows.Media.Streaming.Adaptive {
      public sealed class AdaptiveMediaSourceDiagnosticAvailableEventArgs {
        string ResourceContentType { get; }
        IReference<TimeSpan> ResourceDuration { get; }
      }
      public sealed class AdaptiveMediaSourceDownloadCompletedEventArgs {
        string ResourceContentType { get; }
        IReference<TimeSpan> ResourceDuration { get; }
      }
      public sealed class AdaptiveMediaSourceDownloadFailedEventArgs {
        string ResourceContentType { get; }
        IReference<TimeSpan> ResourceDuration { get; }
      }
      public sealed class AdaptiveMediaSourceDownloadRequestedEventArgs {
        string ResourceContentType { get; }
        IReference<TimeSpan> ResourceDuration { get; }
      }
    }
    namespace Windows.Networking.BackgroundTransfer {
      public sealed class DownloadOperation : IBackgroundTransferOperation, IBackgroundTransferOperationPriority {
        void MakeCurrentInTransferGroup();
      }
      public sealed class UploadOperation : IBackgroundTransferOperation, IBackgroundTransferOperationPriority {
        void MakeCurrentInTransferGroup();
      }
    }
    namespace Windows.Networking.Connectivity {
      public sealed class CellularApnContext {
        string ProfileName { get; set; }
      }
      public sealed class ConnectionProfileFilter {
        IReference<Guid> PurposeGuid { get; set; }
      }
      public sealed class WwanConnectionProfileDetails {
        WwanNetworkIPKind IPKind { get; }
        IVectorView<Guid> PurposeGuids { get; }
      }
      public enum WwanNetworkIPKind
    }
    namespace Windows.Networking.NetworkOperators {
      public sealed class ESim
      public sealed class ESimAddedEventArgs
      public enum ESimAuthenticationPreference
      public sealed class ESimDownloadProfileMetadataResult
      public static class ESimManager
      public sealed class ESimOperationResult
      public enum ESimOperationStatus
      public sealed class ESimPolicy
      public sealed class ESimProfile
      public enum ESimProfileClass
      public struct ESimProfileInstallProgress
      public sealed class ESimProfileMetadata
      public enum ESimProfileMetadataState
      public sealed class ESimProfilePolicy
      public enum ESimProfileState
      public sealed class ESimRemovedEventArgs
      public sealed class ESimServiceInfo
      public enum ESimState
      public sealed class ESimUpdatedEventArgs
      public sealed class ESimWatcher
      public enum ESimWatcherStatus
      public sealed class MobileBroadbandAntennaSar {
        public MobileBroadbandAntennaSar(int antennaIndex, int sarBackoffIndex);
      }
      public sealed class MobileBroadbandModem {
        bool IsInEmergencyCallMode { get; }
        event TypedEventHandler<MobileBroadbandModem, object> IsInEmergencyCallModeChanged;
        IAsyncOperation<MobileBroadbandPco> TryGetPcoAsync();
      }
      public sealed class MobileBroadbandModemIsolation
      public sealed class MobileBroadbandPco
      public sealed class MobileBroadbandPcoDataChangeTriggerDetails
      public enum NetworkOperatorDataUsageNotificationKind
      public sealed class NetworkOperatorDataUsageTriggerDetails
      public sealed class TetheringEntitlementCheckTriggerDetails
    }
    namespace Windows.Networking.Sockets {
      public sealed class MessageWebSocket : IClosable, IWebSocket {
        IAsyncOperationWithProgress<uint, uint> SendFinalFrameAsync(IBuffer data);
        IAsyncOperationWithProgress<uint, uint> SendNonfinalFrameAsync(IBuffer data);
      }
      public sealed class ServerMessageWebSocket : IClosable
      public sealed class ServerMessageWebSocketControl
      public sealed class ServerMessageWebSocketInformation
      public sealed class ServerStreamWebSocket : IClosable
      public sealed class ServerStreamWebSocketInformation
    }
    namespace Windows.Networking.Vpn {
      public sealed class VpnChannel {
        object CurrentRequestTransportContext { get; }
        void AddAndAssociateTransport(object transport, object context);
        ControlChannelTriggerStatus GetSlotTypeForTransportContext(object context);
        void ReplaceAndAssociateTransport(object transport, object context);
        void StartReconnectingTransport(object transport, object context);
        void StartWithTrafficFilter(IIterable<HostName> assignedClientIpv4Addresses, IIterable<HostName> assignedClientIpv6Addresses, VpnInterfaceId vpninterfaceId, VpnRouteAssignment assignedRoutes, VpnDomainNameAssignment assignedNamespace, uint mtuSize, uint maxFrameSize, bool reserved, IIterable<object> transports, VpnTrafficFilterAssignment assignedTrafficFilters);
      }
      public sealed class VpnPacketBuffer {
        object TransportContext { get; set; }
      }
    }
    namespace Windows.Security.Authentication.Identity.Provider {
      public enum SecondaryAuthenticationFactorAuthenticationMessage {
        CanceledByUser = 22,
        CenterHand = 23,
        ConnectionRequired = 20,
        DeviceUnavailable = 28,
        MoveHandCloser = 24,
        MoveHandFarther = 25,
        PlaceHandAbove = 26,
        RecognitionFailed = 27,
        TimeLimitExceeded = 21,
      }
    }
    namespace Windows.Security.Authentication.Web.Core {
      public sealed class FindAllAccountsResult
      public enum FindAllWebAccountsStatus
      public static class WebAuthenticationCoreManager {
        public static IAsyncOperation<FindAllAccountsResult> FindAllAccountsAsync(WebAccountProvider provider);
        public static IAsyncOperation<FindAllAccountsResult> FindAllAccountsAsync(WebAccountProvider provider, string clientId);
        public static IAsyncOperation<WebAccountProvider> FindSystemAccountProviderAsync(string webAccountProviderId);
        public static IAsyncOperation<WebAccountProvider> FindSystemAccountProviderAsync(string webAccountProviderId, string authority);
        public static IAsyncOperation<WebAccountProvider> FindSystemAccountProviderAsync(string webAccountProviderId, string authority, User user);
      }
    }
    namespace Windows.Security.Authentication.Web.Provider {
      public sealed class WebProviderTokenRequest {
        string ApplicationPackageFamilyName { get; }
        string ApplicationProcessName { get; }
        IAsyncOperation<bool> CheckApplicationForCapabilityAsync(string capabilityName);
      }
    }
    namespace Windows.Security.Credentials {
      public sealed class WebAccountProvider {
        bool IsSystemProvider { get; }
      }
    }
    namespace Windows.Services.Maps {
      public sealed class MapRouteDrivingOptions {
        IReference<DateTime> DepartureTime { get; set; }
      }
      public sealed class PlaceInfo {
        public static PlaceInfo CreateFromAddress(string displayAddress);
        public static PlaceInfo CreateFromAddress(string displayAddress, string displayName);
      }
    }
    namespace Windows.Services.Store {
      public sealed class StoreCanAcquireLicenseResult
      public enum StoreCanLicenseStatus
      public sealed class StoreContext {
        bool CanSilentlyDownloadStorePackageUpdates { get; }
        IAsyncOperation<StoreCanAcquireLicenseResult> CanAcquireStoreLicenseAsync(string productStoreId);
        IAsyncOperation<StoreCanAcquireLicenseResult> CanAcquireStoreLicenseForOptionalPackageAsync(Package optionalPackage);
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> DownloadAndInstallStorePackagesAsync(IIterable<string> storeIds);
        IAsyncOperation<IVectorView<StoreQueueItem>> GetAssociatedStoreQueueItemsAsync();
        IAsyncOperation<StoreProductQueryResult> GetStoreProductsAsync(IIterable<string> productKinds, IIterable<string> storeIds, StoreProductOptions storeProductOptions);
        IAsyncOperation<IVectorView<StoreQueueItem>> GetStoreQueueItemsAsync(IIterable<string> storeIds);
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> RequestDownloadAndInstallStorePackagesAsync(IIterable<string> storeIds, StorePackageInstallOptions storePackageInstallOptions);
        IAsyncOperation<StoreUninstallStorePackageResult> RequestUninstallStorePackageAsync(Package package);
        IAsyncOperation<StoreUninstallStorePackageResult> RequestUninstallStorePackageByStoreIdAsync(string storeId);
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> TrySilentDownloadAndInstallStorePackageUpdatesAsync(IIterable<StorePackageUpdate> storePackageUpdates);
        IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> TrySilentDownloadStorePackageUpdatesAsync(IIterable<StorePackageUpdate> storePackageUpdates);
        IAsyncOperation<StoreUninstallStorePackageResult> UninstallStorePackageAsync(Package package);
        IAsyncOperation<StoreUninstallStorePackageResult> UninstallStorePackageByStoreIdAsync(string storeId);
      }
      public sealed class StorePackageInstallOptions
      public sealed class StorePackageUpdateResult {
        IVectorView<StoreQueueItem> StoreQueueItems { get; }
      }
      public sealed class StoreProductOptions
      public sealed class StoreQueueItem
      public sealed class StoreQueueItemCompletedEventArgs
      public enum StoreQueueItemExtendedState
      public enum StoreQueueItemKind
      public enum StoreQueueItemState
      public sealed class StoreQueueItemStatus
      public sealed class StoreUninstallStorePackageResult
      public enum StoreUninstallStorePackageStatus
    }
    namespace Windows.Storage {
      public sealed class StorageFolder : IStorageFolder, IStorageFolder2, IStorageFolderQueryOperations, IStorageItem, IStorageItem2, IStorageItemProperties, IStorageItemProperties2, IStorageItemPropertiesWithProvider {
        StorageLibraryChangeTracker TryGetChangeTracker();
      }
    }
    namespace Windows.Storage.Provider {
      public interface IStorageProviderUriSource
      public sealed class StorageProviderGetContentInfoForPathResult
      public sealed class StorageProviderGetPathForContentUriResult
      public enum StorageProviderUriSourceStatus
    }
    namespace Windows.Storage.Search {
      public sealed class StorageLibraryChangeTrackerTriggerDetails
    }
    namespace Windows.System {
      public sealed class AppActivationResult
      public sealed class AppDiagnosticInfo {
        IAsyncOperation<AppActivationResult> LaunchAsync();
      }
      public sealed class AppExecutionStateChangeResult
      public sealed class AppResourceGroupInfo {
        IAsyncOperation<AppExecutionStateChangeResult> StartResumeAsync();
        IAsyncOperation<AppExecutionStateChangeResult> StartSuspendAsync();
        IAsyncOperation<AppExecutionStateChangeResult> StartTerminateAsync();
      }
      public enum AutoUpdateTimeZoneStatus
      public static class TimeZoneSettings {
        public static IAsyncOperation<AutoUpdateTimeZoneStatus> AutoUpdateTimeZoneAsync(TimeSpan timeout);
      }
    }
    namespace Windows.System.Diagnostics {
      public sealed class DiagnosticInvoker {
        IAsyncOperationWithProgress<DiagnosticActionResult, DiagnosticActionState> RunDiagnosticActionFromStringAsync(string context);
      }
    }
    namespace Windows.System.Diagnostics.DevicePortal {
      public sealed class DevicePortalConnection {
        ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request);
        ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request, SocketMessageType messageType, string protocol);
        ServerMessageWebSocket GetServerMessageWebSocketForRequest(HttpRequestMessage request, SocketMessageType messageType, string protocol, uint outboundBufferSizeInBytes, uint maxMessageSize, MessageWebSocketReceiveMode receiveMode);
        ServerStreamWebSocket GetServerStreamWebSocketForRequest(HttpRequestMessage request);
        ServerStreamWebSocket GetServerStreamWebSocketForRequest(HttpRequestMessage request, string protocol, uint outboundBufferSizeInBytes, bool noDelay);
      }
      public sealed class DevicePortalConnectionRequestReceivedEventArgs {
        bool IsWebSocketUpgradeRequest { get; }
        IVectorView<string> WebSocketProtocolsRequested { get; }
        Deferral GetDeferral();
      }
    }
    namespace Windows.System.Inventory {
      public sealed class InstalledDesktopApp : IStringable
    }
    namespace Windows.System.Profile {
      public static class AnalyticsInfo {
        public static IAsyncOperation<IMapView<string, string>> GetSystemPropertiesAsync(IIterable<string> attributeNames);
      }
    }
    namespace Windows.System.RemoteSystems {
      public sealed class RemoteSystem {
        RemoteSystemPlatform Platform { get; }
      }
      public sealed class RemoteSystemEnumerationCompletedEventArgs
      public enum RemoteSystemPlatform
      public sealed class RemoteSystemWatcher {
        event TypedEventHandler<RemoteSystemWatcher, RemoteSystemEnumerationCompletedEventArgs> EnumerationCompleted;
        event TypedEventHandler<RemoteSystemWatcher, RemoteSystemWatcherErrorOccurredEventArgs> ErrorOccurred;
      }
      public enum RemoteSystemWatcherError
      public sealed class RemoteSystemWatcherErrorOccurredEventArgs
    }
    namespace Windows.System.UserProfile {
      public static class GlobalizationPreferences {
        public static GlobalizationPreferencesForUser GetForUser(User user);
      }
      public sealed class GlobalizationPreferencesForUser
    }
    namespace Windows.UI.ApplicationSettings {
      public sealed class AccountsSettingsPane {
        public static IAsyncAction ShowAddAccountForUserAsync(User user);
        public static IAsyncAction ShowManageAccountsForUserAsync(User user);
      }
      public sealed class AccountsSettingsPaneCommandsRequestedEventArgs {
        User User { get; }
      }
    }
    namespace Windows.UI.Composition {
      public sealed class AnimationController : CompositionObject
      public enum AnimationControllerProgressBehavior
      public sealed class BounceScalarNaturalMotionAnimation : ScalarNaturalMotionAnimation
      public sealed class BounceVector2NaturalMotionAnimation : Vector2NaturalMotionAnimation
      public sealed class BounceVector3NaturalMotionAnimation : Vector3NaturalMotionAnimation
      public sealed class CompositionContainerShape : CompositionShape
      public sealed class CompositionEllipseGeometry : CompositionGeometry
      public class CompositionGeometry : CompositionObject
      public class CompositionLight : CompositionObject {
        bool IsEnabled { get; set; }
      }
      public sealed class CompositionLineGeometry : CompositionGeometry
      public class CompositionObject : IClosable {
        AnimationController TryGetAnimationController(string propertyName);
      }
      public sealed class CompositionPath : IGeometrySource2D
      public sealed class CompositionPathGeometry : CompositionGeometry
      public sealed class CompositionRectangleGeometry : CompositionGeometry
      public sealed class CompositionRoundedRectangleGeometry : CompositionGeometry
      public class CompositionShape : CompositionObject
      public sealed class CompositionShapeCollection : CompositionObject, IIterable<CompositionShape>, IVector<CompositionShape>
      public sealed class CompositionSpriteShape : CompositionShape
      public enum CompositionStrokeCap
      public sealed class CompositionStrokeDashArray : CompositionObject, IIterable<float>, IVector<float>
      public enum CompositionStrokeLineJoin
      public sealed class CompositionViewBox : CompositionObject
      public sealed class Compositor : IClosable {
        string Comment { get; set; }
        float GlobalPlaybackRate { get; set; }
        public static float MaxGlobalPlaybackRate { get; }
        public static float MinGlobalPlaybackRate { get; }
        BounceScalarNaturalMotionAnimation CreateBounceScalarAnimation();
        BounceVector2NaturalMotionAnimation CreateBounceVector2Animation();
        BounceVector3NaturalMotionAnimation CreateBounceVector3Animation();
        CompositionContainerShape CreateContainerShape();
        CompositionEllipseGeometry CreateEllipseGeometry();
        CompositionLineGeometry CreateLineGeometry();
        CompositionPathGeometry CreatePathGeometry();
        CompositionPathGeometry CreatePathGeometry(CompositionPath path);
        PathKeyFrameAnimation CreatePathKeyFrameAnimation();
        CompositionRectangleGeometry CreateRectangleGeometry();
        CompositionRoundedRectangleGeometry CreateRoundedRectangleGeometry();
        ShapeVisual CreateShapeVisual();
        CompositionSpriteShape CreateSpriteShape();
        CompositionSpriteShape CreateSpriteShape(CompositionGeometry geometry);
        CompositionViewBox CreateViewBox();
        IAsyncAction RequestCommitAsync();
      }
      public sealed class PathKeyFrameAnimation : KeyFrameAnimation
      public sealed class PointLight : CompositionLight {
        float MaxAttenuationCutoff { get; set; }
        float MinAttenuationCutoff { get; set; }
      }
      public sealed class ShapeVisual : ContainerVisual
      public sealed class SpotLight : CompositionLight {
        float MaxAttenuationCutoff { get; set; }
        float MinAttenuationCutoff { get; set; }
      }
    }
    namespace Windows.UI.Composition.Core {
      public sealed class CompositorController : IClosable
    }
    namespace Windows.UI.Composition.Desktop {
      public sealed class DesktopWindowTarget : CompositionTarget
    }
    namespace Windows.UI.Composition.Diagnostics {
      public sealed class CompositionDebugHeatMaps
      public enum CompositionDebugOverdrawContentKinds : uint
      public sealed class CompositionDebugSettings
    }
    namespace Windows.UI.Composition.Interactions {
      public enum VisualInteractionSourceRedirectionMode {
        CapableTouchpadAndPointerWheel = 3,
        PointerWheelOnly = 2,
      }
    }
    namespace Windows.UI.Core {
      public enum AppViewBackButtonVisibility {
        Disabled = 2,
      }
      public sealed class CoreComponentInputSource : ICoreInputSourceBase, ICorePointerInputSource, ICorePointerInputSource2 {
        DispatcherQueue DispatcherQueue { get; }
      }
      public sealed class CoreIndependentInputSource : ICoreInputSourceBase, ICorePointerInputSource, ICorePointerInputSource2 {
        DispatcherQueue DispatcherQueue { get; }
      }
      public interface ICorePointerInputSource2 : ICorePointerInputSource
    }
    namespace Windows.UI.Input.Core {
      public sealed class RadialControllerIndependentInputSource {
        DispatcherQueue DispatcherQueue { get; }
      }
    }
    namespace Windows.UI.Input.Inking {
      public sealed class InkDrawingAttributes {
        InkModelerAttributes ModelerAttributes { get; }
      }
      public sealed class InkInputConfiguration
      public sealed class InkModelerAttributes
      public sealed class InkPresenter {
        InkInputConfiguration InputConfiguration { get; }
      }
    }
    namespace Windows.UI.Input.Spatial {
      public sealed class SpatialInteractionController {
        BatteryReport TryGetBatteryReport();
      }
    }
    namespace Windows.UI.Notifications {
      public sealed class ScheduledToastNotification {
        IReference<DateTime> ExpirationTime { get; set; }
      }
    }
    namespace Windows.UI.StartScreen {
      public sealed class TileMixedRealityModel {
        TileMixedRealityModelActivationBehavior ActivationBehavior { get; set; }
      }
      public enum TileMixedRealityModelActivationBehavior
    }
    namespace Windows.UI.Text {
      public sealed class ContentLinkInfo
      public sealed class RichEditTextRange : ITextRange
      public enum TextRangeUnit {
        ContentLink = 32,
      }
    }
    namespace Windows.UI.ViewManagement.Core {
      public sealed class CoreInputView {
        event TypedEventHandler<CoreInputView, object> XYFocusTransferredToPrimaryView;
        event TypedEventHandler<CoreInputView, CoreInputViewTransferringXYFocusEventArgs> XYFocusTransferringFromPrimaryView;
        bool TryTransferXYFocusToPrimaryView(Rect origin, CoreInputViewXYFocusTransferDirection direction);
      }
      public sealed class CoreInputViewTransferringXYFocusEventArgs
      public enum CoreInputViewXYFocusTransferDirection
    }
    namespace Windows.UI.WebUI {
      public sealed class WebUIBarcodeScannerPreviewActivatedEventArgs : IActivatedEventArgs, IActivatedEventArgsDeferral, IActivatedEventArgsWithUser, IBarcodeScannerPreviewActivatedEventArgs
      public sealed class WebUILaunchActivatedEventArgs : IActivatedEventArgs, IActivatedEventArgsDeferral, IActivatedEventArgsWithUser, IApplicationViewActivatedEventArgs, ILaunchActivatedEventArgs, ILaunchActivatedEventArgs2, IPrelaunchActivatedEventArgs {
        TileActivatedInfo TileActivatedInfo { get; }
      }
    }
    namespace Windows.UI.Xaml {
      public sealed class BringIntoViewOptions {
        double HorizontalAlignmentRatio { get; set; }
        double HorizontalOffset { get; set; }
        double VerticalAlignmentRatio { get; set; }
        double VerticalOffset { get; set; }
      }
      public sealed class BringIntoViewRequestedEventArgs : RoutedEventArgs
      public sealed class ElementSoundPlayer {
        public static ElementSpatialAudioMode SpatialAudioMode { get; set; }
      }
      public enum ElementSpatialAudioMode
      public enum FocusVisualKind {
        Reveal = 2,
      }
      public class UIElement : DependencyObject {
        public static RoutedEvent BringIntoViewRequestedEvent { get; }
        public static RoutedEvent ContextRequestedEvent { get; }
        KeyboardAcceleratorPlacementMode KeyboardAcceleratorPlacementMode { get; set; }
        public static DependencyProperty KeyboardAcceleratorPlacementModeProperty { get; }
        DependencyObject KeyboardAcceleratorPlacementTarget { get; set; }
        public static DependencyProperty KeyboardAcceleratorPlacementTargetProperty { get; }
        DependencyObject KeyTipTarget { get; set; }
        public static DependencyProperty KeyTipTargetProperty { get; }
        event TypedEventHandler<UIElement, BringIntoViewRequestedEventArgs> BringIntoViewRequested;
        virtual void OnBringIntoViewRequested(BringIntoViewRequestedEventArgs e);
        virtual void OnKeyboardAcceleratorInvoked(KeyboardAcceleratorInvokedEventArgs args);
        public static void RegisterAsScrollPort(UIElement element);
      }
    }
    namespace Windows.UI.Xaml.Automation {
      public sealed class AutomationElementIdentifiers {
        public static AutomationProperty HeadingLevelProperty { get; }
     }
      public sealed class AutomationProperties {
        public static DependencyProperty HeadingLevelProperty { get; }
        public static AutomationHeadingLevel GetHeadingLevel(DependencyObject element);
        public static void SetHeadingLevel(DependencyObject element, AutomationHeadingLevel value);
      }
    }
    namespace Windows.UI.Xaml.Automation.Peers {
      public enum AutomationHeadingLevel
      public class AutomationPeer : DependencyObject {
        AutomationHeadingLevel GetHeadingLevel();
        virtual AutomationHeadingLevel GetHeadingLevelCore();
      }
      public sealed class AutoSuggestBoxAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider {
        void Invoke();
      }
      public class CalendarDatePickerAutomationPeer : FrameworkElementAutomationPeer, IInvokeProvider, IValueProvider
      public class TreeViewItemAutomationPeer : ListViewItemAutomationPeer, IExpandCollapseProvider
      public class TreeViewListAutomationPeer : SelectorAutomationPeer
    }
    namespace Windows.UI.Xaml.Controls {
      public class AppBarButton : Button, ICommandBarElement, ICommandBarElement2 {
        string KeyboardAcceleratorTextOverride { get; set; }
        public static DependencyProperty KeyboardAcceleratorTextOverrideProperty { get; }
        AppBarButtonTemplateSettings TemplateSettings { get; }
      }
      public class AppBarToggleButton : ToggleButton, ICommandBarElement, ICommandBarElement2 {
        string KeyboardAcceleratorTextOverride { get; set; }
        public static DependencyProperty KeyboardAcceleratorTextOverrideProperty { get; }
        AppBarToggleButtonTemplateSettings TemplateSettings { get; }
      }
      public sealed class ContentLinkChangedEventArgs
      public enum ContentLinkChangeKind
      public sealed class HandwritingPanelClosedEventArgs
      public sealed class HandwritingPanelOpenedEventArgs
      public enum HandwritingPanelPlacementAlignment
      public class HandwritingView : Control
      public class MediaTransportControls : Control {
        bool IsCompactOverlayButtonVisible { get; set; }
        public static DependencyProperty IsCompactOverlayButtonVisibleProperty { get; }
        bool IsCompactOverlayEnabled { get; set; }
        public static DependencyProperty IsCompactOverlayEnabledProperty { get; }
      }
      public class MenuFlyoutItem : MenuFlyoutItemBase {
        string KeyboardAcceleratorTextOverride { get; set; }
        public static DependencyProperty KeyboardAcceleratorTextOverrideProperty { get; }
        MenuFlyoutItemTemplateSettings TemplateSettings { get; }
      }
      public class NavigationView : ContentControl {
        NavigationViewBackButtonVisible IsBackButtonVisible { get; set; }
        public static DependencyProperty IsBackButtonVisibleProperty { get; }
        bool IsBackEnabled { get; set; }
        public static DependencyProperty IsBackEnabledProperty { get; }
        string PaneTitle { get; set; }
        public static DependencyProperty PaneTitleProperty { get; }
        event TypedEventHandler<NavigationView, NavigationViewBackRequestedEventArgs> BackRequested;
        event TypedEventHandler<NavigationView, object> PaneClosed;
        event TypedEventHandler<NavigationView, NavigationViewPaneClosingEventArgs> PaneClosing;
        event TypedEventHandler<NavigationView, object> PaneOpened;
        event TypedEventHandler<NavigationView, object> PaneOpening;
      }
      public enum NavigationViewBackButtonVisible
      public sealed class NavigationViewBackRequestedEventArgs
      public sealed class NavigationViewPaneClosingEventArgs
      public class RefreshContainer : ContentControl
      public sealed class RefreshInteractionRatioChangedEventArgs
      public enum RefreshPullDirection
      public sealed class RefreshRequestedEventArgs
      public sealed class RefreshStateChangedEventArgs
      public class RefreshVisualizer : Control
      public enum RefreshVisualizerOrientation
      public enum RefreshVisualizerState
      public class RichEditBox : Control {
        SolidColorBrush ContentLinkBackgroundColor { get; set; }
        public static DependencyProperty ContentLinkBackgroundColorProperty { get; }
        SolidColorBrush ContentLinkForegroundColor { get; set; }
        public static DependencyProperty ContentLinkForegroundColorProperty { get; }
        ContentLinkProviderCollection ContentLinkProviders { get; set; }
        public static DependencyProperty ContentLinkProvidersProperty { get; }
        HandwritingView HandwritingView { get; set; }
        public static DependencyProperty HandwritingViewProperty { get; }
        bool IsHandwritingViewEnabled { get; set; }
        public static DependencyProperty IsHandwritingViewEnabledProperty { get; }
        event TypedEventHandler<RichEditBox, ContentLinkChangedEventArgs> ContentLinkChanged;
        event TypedEventHandler<RichEditBox, ContentLinkInvokedEventArgs> ContentLinkInvoked;
      }
      public class TextBox : Control {
        HandwritingView HandwritingView { get; set; }
        public static DependencyProperty HandwritingViewProperty { get; }
        bool IsHandwritingViewEnabled { get; set; }
        public static DependencyProperty IsHandwritingViewEnabledProperty { get; }
      }
      public class TreeView : Control
      public sealed class TreeViewCollapsedEventArgs
      public sealed class TreeViewExpandingEventArgs
      public class TreeViewItem : ListViewItem
      public sealed class TreeViewItemInvokedEventArgs
      public class TreeViewItemTemplateSettings : DependencyObject
      public class TreeViewList : ListView
      public class TreeViewNode : DependencyObject
      public enum TreeViewSelectionMode
      public sealed class WebView : FrameworkElement {
        event TypedEventHandler<WebView, WebViewSeparateProcessLostEventArgs> SeparateProcessLost;
      }
      public enum WebViewExecutionMode {
        SeparateProcess = 2,
      }
      public enum WebViewPermissionType {
        ImmersiveView = 6,
        Screen = 5,
      }
      public sealed class WebViewSeparateProcessLostEventArgs
    }
    namespace Windows.UI.Xaml.Controls.Maps {
      public sealed class MapControl : Control {
        string Region { get; set; }
        public static DependencyProperty RegionProperty { get; }
      }
      public class MapElement : DependencyObject {
        bool IsEnabled { get; set; }
        public static DependencyProperty IsEnabledProperty { get; }
      }
    }
    namespace Windows.UI.Xaml.Controls.Primitives {
      public sealed class AppBarButtonTemplateSettings : DependencyObject
      public sealed class AppBarToggleButtonTemplateSettings : DependencyObject
      public sealed class MenuFlyoutItemTemplateSettings : DependencyObject
    }
    namespace Windows.UI.Xaml.Documents {
      public sealed class ContactContentLinkProvider : ContentLinkProvider
      public sealed class ContentLink : Inline
      public sealed class ContentLinkInvokedEventArgs
      public class ContentLinkProvider : DependencyObject
      public sealed class ContentLinkProviderCollection : IIterable<ContentLinkProvider>, IVector<ContentLinkProvider>
      public sealed class PlaceContentLinkProvider : ContentLinkProvider
    }
    namespace Windows.UI.Xaml.Input {
      public sealed class FocusManager {
        public static IAsyncOperation<FocusMovementResult> TryFocusAsync(DependencyObject element, FocusState value);
        public static IAsyncOperation<FocusMovementResult> TryMoveFocusAsync(FocusNavigationDirection focusNavigationDirection);
        public static IAsyncOperation<FocusMovementResult> TryMoveFocusAsync(FocusNavigationDirection focusNavigationDirection, FindNextElementOptions focusNavigationOptions);
      }
      public sealed class FocusMovementResult
      public sealed class GettingFocusEventArgs : RoutedEventArgs {
        bool TryCancel();
        bool TrySetNewFocusedElement(DependencyObject element);
      }
      public sealed class KeyboardAcceleratorInvokedEventArgs {
        KeyboardAccelerator KeyboardAccelerator { get; }
      }
      public enum KeyboardAcceleratorPlacementMode
      public sealed class LosingFocusEventArgs : RoutedEventArgs {
        bool TryCancel();
        bool TrySetNewFocusedElement(DependencyObject element);
      }
    }
    namespace Windows.UI.Xaml.Media {
      public sealed class CompositionTarget {
        public static event EventHandler<RenderedEventArgs> Rendered;
      }
      public sealed class RenderedEventArgs
    }
    namespace Windows.Web.UI {
      public interface IWebViewControl
      public sealed class WebViewControlContentLoadingEventArgs
      public sealed class WebViewControlDeferredPermissionRequest
      public sealed class WebViewControlDOMContentLoadedEventArgs
      public sealed class WebViewControlLongRunningScriptDetectedEventArgs
      public sealed class WebViewControlNavigationCompletedEventArgs
      public sealed class WebViewControlNavigationStartingEventArgs
      public sealed class WebViewControlNewWindowRequestedEventArgs
      public sealed class WebViewControlPermissionRequest
      public sealed class WebViewControlPermissionRequestedEventArgs
      public enum WebViewControlPermissionState
      public enum WebViewControlPermissionType
      public sealed class WebViewControlScriptNotifyEventArgs
      public sealed class WebViewControlSettings
      public sealed class WebViewControlUnsupportedUriSchemeIdentifiedEventArgs
      public sealed class WebViewControlUnviewableContentIdentifiedEventArgs
      public sealed class WebViewControlWebResourceRequestedEventArgs
    }
    namespace Windows.Web.UI.Interop {
      public sealed class WebViewControl : IWebViewControl
      public sealed class WebViewControlAcceleratorKeyPressedEventArgs
      public enum WebViewControlAcceleratorKeyRoutingStage
      public enum WebViewControlMoveFocusReason
      public sealed class WebViewControlMoveFocusRequestedEventArgs
      public sealed class WebViewControlProcess
      public enum WebViewControlProcessCapabilityState
      public sealed class WebViewControlProcessOptions
    }
    
    

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


    How to Contribute to Git (on Windows)

    $
    0
    0
    Git was originally designed for Unix systems and still today, all the build tools for the Git codebase assume you have standard Unix tools available in your path. If you have an open-source mindset and want to start contributing to Git, but primarily use a Windows machine, then you may have trouble getting started. In... Read More

    Azure’s layered approach to physical security

    $
    0
    0

    We have heard from many customers that cloud security is one of their top concerns. Another thing we’ve heard from customers is that they want clarity around what they are responsible for securing in Azure and what Azure will do. Azure helps provide a highly secure foundation, built from the ground up, to host your infrastructure, applications, and data.

    We understand the importance of protecting customer data, which is why we are committed to helping secure the datacenters that contain your data. Microsoft has invested over a billion dollars into security, including the physical security of the Azure platform, so you can devote your time and resources towards other business initiatives. Over the next few months, as part of the secure foundation blog series, we’ll discuss the components of physical, infrastructure (logical) and operational security that help make up Azure’s platform. Today, we are focusing on physical security.

    Physical security refers to how Microsoft designs, builds and operates datacenters in a way that strictly controls physical access to the areas where customer data is stored. Our datacenters are certified to comply with the most comprehensive portfolio of internationally-recognized standards and certifications of any cloud service provider. We have an entire division at Microsoft devoted to designing, building and operating the physical facilities supporting Azure. This team is invested in maintaining state-of-the-art physical security.

    We take a layered approach to physical security. Datacenters managed by Microsoft have extensive layers of protection: access approval, at the facility’s perimeter, at the building’s perimeter, inside the building, and on the datacenter floor. This layered approach reduces the risk of unauthorized users gaining physical access to data and the datacenter resources.

    The first layer of physical security starts with requesting access prior to arriving at the datacenter. You must provide a valid business justification for your visit, such as compliance or auditing purposes. All requests are approved on a need-to-access basis by Microsoft employees. This is to help keep the number of individuals needed to complete a task in our datacenters to the bare minimum. Once permissions are granted, an individual only has access to the discrete area of the datacenter based on the approved business justification. Permissions are limited to a certain period of time and expire after the allowed time period.

    The next layer of security is the building’s perimeter. When you arrive at a datacenter, you must go through a well-defined access point. Typically, tall fences made of steel and concrete encompass every inch of the perimeter. There are cameras around the datacenters, with a security team monitoring their videos 24/7 and 365.

    Once you gain access to the datacenter’s perimeter, you must pass additional security measures to enter the datacenter. The datacenter entrance is staffed with professional security officers who have undergone rigorous training and background checks. These security officers also routinely patrol the datacenter and monitor 24/7 and 365 the videos of cameras inside the datacenter. After you enter the building, you must pass two-factor authentication with biometrics to continue moving through the datacenter. If your identity is validated, you can enter the portion of the datacenter that you have approved access to and can stay there only for the duration of the time approved.

    Once you arrive at the entrance to the requested part of the datacenter floor, you must pass a full body metal detection screening. To reduce the risk of unauthorized data entering or leaving the datacenter without our knowledge, only approved devices can make their way into the datacenter floor. Additionally, video cameras monitor the front and back of every virtual machine rack. Everything that you will do with your virtual machine will be tracked—the first time a hard disk goes into a virtual machine until it is cleaned and erased. Full body metal detection screening is repeated when you exit the datacenter floor. To leave the datacenter, you have to pass through an additional security scan.  

    To help ensure that the cloud platform is secure, safeguarding our datacenters around the world is a top priority. We understand the importance of securing customer data and the risks of a security breach, which is why we have an invested over a billion dollars into world-class security, and why we will continue to grow these investments overtime. You can focus on your business priorities knowing your data and datacenter resources are highly secured.

    To see the datacenter security in action for yourself, watch the following video

    A digital transformation Journey featuring Contoso Manufacturing and Azure IoT

    $
    0
    0

    This is a story about the digital transformation of Contoso HVAC Manufacturing, a virtual company that is growing its business from a traditional HVAC Chillers manufacturer, to delivering value to customers as a service. Contoso HVAC understands that the Internet of Things is a key ingredient to this transformation, but rapidly realizes that there is no such thing as a one-size-fits-all IoT solution. Each industry, each company have their own constraints and requirements. Each are trying to navigate and understanding the vast list of IoT services and solutions which have often proved tricky to grasp.

    Instead of listing a portfolio of products and services, let me tell you the story of how Contoso HVAC’s journey to introduce Azure IoT with a different perspective transformed its business.

    Contoso HVAC manufactures HVAC Chillers, the big industrial ones used in large buildings and enterprises. The company has been manufacturing HVAC Chillers for 50 years. In recent times, to stay competitive the company is going through a digital transformation, expanding their support agreements to become remote operations and maintenance agreements. Customers of Contoso HVAC will no longer just buy an HVAC system, but instead will buy a fully managed “HVAC-as-a-Service” solution.

    Contoso digital transformation

    To achieve this digital transformation, Contoso HVAC Manufacturing has to be able to closely monitor the health of its physical assets and spaces, implement predictive and proactive maintenance and grow their ecosystem through the monetization of device data and algorithms.

    The Internet of Things to the rescue

    Contoso will leverage Microsoft IoT technologies to capture data to monitor the operations and the health of the HVAC assets. This will enable Contoso to gain a deep understanding of how their design decisions affect operations, build deep expertise in maintaining large fleets of assets, and enable “HVAC-as-a-Service” where customers are relieved of the maintenance burden.

    As for all journeys, everyone in the caravan has to be on-boarded to arrive and be successful. That’s why we are looking at this story from the perspectives of an executive, the developers implementing the parts of an IoT solution, and all the way to the operators and employees of the company.

    Provision and discover IoT Solutions

    As an executive in a company like Contoso HVAC Manufacturing, you can learn about Azure IoT Suite and the value of remote monitoring, predictive maintenance, and connected factory pre-configured solutions at http://www.internetofyourthings.com.

    An Azure IoT Suite Preconfigured Solution is an open source implementation of a common IoT solution pattern that you can deploy to Azure using your subscription. Each preconfigured solution combines custom code and Azure services to implement a specific IoT scenario or scenarios. In under 5 minutes, you can easily deploy a preconfigured solution and evaluate the capabilities of the Azure IoT platform.

    Once you have gone through the deployment and evaluation of Microsoft IoT, offered through the IoT Suite, you can provide some high-level business requirements to your development team for them to customize the solution:

    • Model Contoso’s devices through simulated devices.
    • Connect physical devices to the solution.
    • Integrate this solution and managed assets into existing business processes through apps such as Dynamics 365.

    Customize an IoT Solution

    Developers at Contoso, will be able to take the high-level business requirements passed on by their executives and start customizing the Remote Monitoring Preconfigured Solution modeling it against Contoso’s assets and processes.

    Using the Azure IoT Device Simulation tool, they can model and test the IoT solution before even connecting a real asset. Then they’ll connect a physical device to the solution to evaluate advanced features such as firmware updates. They will also connect the remote monitoring solution to Contoso’s ERP system and integrate the IoT solution to enable scenarios such as chillers automatically creating work orders when maintenance is required.

    Building a fleet maintenance solution

    As part of their customization of the IoT solution, Contoso HVAC wants to integrate maintenance operations and fleet management. Azure Location Based Services which offer maps, search, routing, and traffic capabilities with geospatial services APIs that integrate seamlessly with other Azure tools and services.

    Finding the right hardware and scaling the IoT solution to production

    After evaluating the services and developing a proof of concept, Contoso HVAC has to look into how they will go to production and scale their solution. This includes simulating device loads, identifying the right hardware for their needs in the Azure IoT Device Catalog, connecting custom devices with open source SDKs, securing the IoT solution end to end, and automating provisioning of devices that leverage the Device Provisioning Service.

    The Azure IoT Device Catalog is a great starting point to find devices that will seamlessly connect to Azure IoT Hub. Over 900 devices have been certified for Azure IoT connectivity but this list is only a starting point as the open source Azure IoT SDKs support a wide range of languages (C, Java, .NET, Node.js, and Python) and can be ported to a large spectrum of devices from very constrained microcontrollers or devices powered by Real Time Operating Systems such as FreeRTOS, to very powerful gateways.

    One of the most exciting parts of the Azure IoT SDKs is that they have all the security best practices baked in. Security practices that not only rely on a decades worth of experience building enterprise software and running some of the largest online services in the world, but are also on latest Hardware Secure Modules technologies like TPM and DICE to encrypt communications and secure data at the edge. Contoso HVAC Manufacturing can count on the Security Program for Azure IoT to work with a partner that can bring a curated set of best in class security auditors to perform a security audit on their IoT solutions and provide recommendations.

    As their business will grow, Contoso HVAC has to tackle the tedious problem of provisioning devices in the field. With the IoT Hub Device Provisioning Service they can go through a very simple enrollment process for the devices on the assembly line and have them provisioned with a zero-touch, just-in-time process to the right IoT hub without requiring human intervention once they are deployed to the operating locations.

    Discovering insights and root cause analysis

    When Contoso HVAC Manufacturing starts deploying their new “HVAC-as-a-service” offer, they will have to deliver on the promise of a minimum downtime and fast resolution service. With all their deployed HVAC systems now connected and sending telemetry data up to the cloud, they can benefit from the power of the loud for advanced analytics, predictive anomaly detection, and maintenance workflows optimization. But there are situations when they will have to investigate issues manually to not only fix the issues but also train their systems for better prediction analysis in the future.

    As you can imagine, we are talking about a lot of data points and diagnosing issues could prove very time consuming. With Time Series Insight, Contoso HVAC Manufacturing can benefit from fully managed analytics, storage, and visualization service for managing IoT-scale time series data in the cloud, streamlining the process of discovering insights and doing root cause analysis. Allowing them to minimize downtime of their systems and send the right personnel and equipment in a timely manner when required.

    Manufacturing and edge intelligence

    In addition to delivering their new “HVAC-as-a-service” solution and because of the expected business growth, Contoso HVAC wants to apply IoT optimizations and enhancements to their own factory to optimize chillers production. Just a few years ago, the company invested in the adoption of a very popular technology in the manufacturing industry known as OPC-UA. They obviously don’t want to replace their existing systems, but instead they want to augment them leveraging the intelligence and unlimited resources of the cloud. Trying out the Azure IoT Suite Connected Factory Preconfigured Solution, they realized that they can very easily hook up their OPC-UA infrastructure to Azure IoT not only to collect data from their factory’s sensors, but also to monitor and control the full production and assembly lines right from their IoT application.

    Furthermore, they realized that they could leverage Azure IoT Edge to bring part of this cloud intelligence at the Edge, right next to the factory machines to optimize on bandwidth usage and reduce communication latencies for critical systems.

    Simplicity for configurable IoT Solutions

    Contoso has a division of their business that manufactures refrigerated vending machines. The Contoso vending business will also transform into a “vending-as-a-service” model where they can provide high value monitoring and maintenance services for their customers reducing downtime and saving losses, especially for perishable goods. Today, customers call Contoso when vending machines become unhealthy so the entire contents of the refrigerated vending machine needs to be discarded resulting in major losses.

    Unlike the Contoso HVAC division, Contoso Vending doesn’t have the skills or resources to build a custom IoT solution. Hiring the expertise was also not an option as it was outside their core business.

    By using Microsoft’s IoT Central solution, Contoso Vending can build and configure an IoT solution to manage and maintain vending machines though a SaaS configuration experience. Creating a new growth revenue stream and increasing customer satisfaction at a controlled and limited cost.

    Learn more

    This is not the end of the journey for Contoso HVAC Manufacturing as they will continue growing, bringing their business together in new insightful ways. From increasing process efficiencies to delivering better customer experiences and generating new revenue streams.

    You can learn about other customers who chose to embark Microsoft IoT with them in their digital transformation journey visiting the Microsoft Internet of Things site.

    Update management, inventory, and change tracking in Azure Automation now generally available

    $
    0
    0

    Azure Automation provides the ability to automate, configure, and deploy updates across your hybrid environment using serverless automation. These capabilities are now generally available for all customers.

    With the release of these new capabilities, you can now:

    • Get an inventory of operating system resources including installed applications and other configuration items.
    • Get update compliance and deploy required fixes for Windows and Linux systems across hybrid environments.
    • Track changes across services, daemons, software, registry, and files to promptly investigate issues.

    These additional capabilities are now available from the Azure Resource Manager virtual machine (VM) experience as well as from the Automation account when managing at scale within the Azure portal.

    Azure virtual machine integration

    Integration with virtual machines enables update management, inventory, and change tracking for Windows and Linux computers directly from the VM blade.

    VMUpdateManagement

    With update management, you will always know the compliance status for Windows and Linux, and you can create scheduled deployments to orchestrate the installation of updates within a defined maintenance window. The ability to exclude specific updates is also available, with detailed troubleshooting logs to identify any issues during the deployment.

    The inventory of your VM in-guest resources gives you visibility into installed applications as well as other configuration items you wish to track. Rich reporting and search is available to quickly find detailed information to help understand everything that is configured within the VM.

    VMInventory

    Change tracking delivers automatic collection of changes across services, daemons, software, registry, and files to quickly identify what might be causing issues and to enable diagnostics and alerting when unwanted changes occur.

    Management at scale across Azure and hybrid environments

    To enable management of your Azure and on-premises resources at scale, these capabilities have also been added to the Automation service in Azure. You can get a unified view across your entire environment and can take action to ensure these are correctly configured, updated, and managed from the Azure portal.

    AutomationChangeTracking

     

    To get started with the new capabilities from Automation, use the virtual machine blade or the Automation account when performing tasks at scale.

    Learn about the existing and new features on the Azure Automation documentation pages, and follow Azure Automation on Twitter.

    Compare outlier detection methods with the OutliersO3 package

    $
    0
    0

    by Antony Unwin, University of Augsburg, Germany

    There are many different methods for identifying outliers and a lot of them are available in R. But are outliers a matter of opinion? Do all methods give the same results?

    Articles on outlier methods use a mixture of theory and practice. Theory is all very well, but outliers are outliers because they don’t follow theory. Practice involves testing methods on data, sometimes with data simulated based on theory, better with `real’ datasets. A method can be considered successful if it finds the outliers we all agree on, but do we all agree on which cases are outliers?

    The Overview Of Outliers (O3) plot is designed to help compare and understand the results of outlier methods. It is implemented in the OutliersO3 package and was presented at last year’s useR! in Brussels. Six methods from other R packages are included (and, as usual, thanks are due to the authors for making their functions available in packages).

    Unwin-fig1
    An O3 plot of the stackloss dataset. There is one row for each variable combination (defined by the columns to the left) for which outliers were found, and one column for each case identified as an outlier (the columns to the right).

    The starting point was a recent proposal of Wilkinson’s, his HDoutliers algorithm. The plot above shows the default O3 plot for this method applied to the stackloss dataset. (Detailed explanations of O3 plots are in the OutliersO3 vignettes.) The stackloss dataset is a small example (21 cases and 4 variables) and there is an illuminating and entertaining article (Dodge, 1996) that tells you a lot about it.

    Wilkinson’s algorithm finds 6 outliers for the whole dataset (the bottom row of the plot). Overall, for various combinations of variables, 14 of the cases are found to be potential outliers (out of 21!). There are no rows for 11 of the possible 15 combinations of variables because no outliers are found with them. If using a tolerance level of 0.05 seems a little bit lax, using 0.01 finds no outliers at all for any variable combination.

    Unwin-fig2
    An O3plot comparing outliers identified by HDoutliers and mvBACON in the stackloss dataset.

    Trying another method with tolerance level=0.05 (mvBACON from robustX) identifies 5 outliers, all ones found for more than one variable combination by HDoutliers. However, no outliers are found for the whole dataset and only one of the three variable combinations where outliers are found is a combination where HDoutliers finds outliers. Of course, the two methods are quite different and it would be strange if they agreed completely. Is it strange that they do not agree more?

    There are four other methods available in OutliersO3 and using all six methods on stackloss a tolerance level of 0.05 identifies the following numbers of outliers:

    ##    HDo    PCS    BAC adjOut    DDC    MCD 
    ##     14      4      5      0      6      5
    Unwin-fig3
    An O3 plot of stackloss using the methods HDoutliers, FastPCS, mvBACON, adjOutlyingness, DectectDeviatingCells, covMCD. The darker the cell, the more methods agree. If they all agree, the cell is coloured red and if all but one agree then orange. No case is identified by all the methods as an outlier for any combination of variables when the tolerance level is set at 0.05 for all.

    Each method uses what I have called the tolerance level in a rather different way. Sometimes it is called alpha and sometimes (1-alpha). As so often with R, you start wondering if more consistency would not be out of place, even at the expense of a little individuality. OutliersO3 transforms where necessary to ensure that lower tolerance level values mean fewer outliers for all methods, but no attempt has been made to calibrate them equivalently. This is probably why adjOutlyingness finds few or no outliers (results of this method are mildly random). The default value, according to adjOutlyingness’s help page, is an alpha of 0.25.

    The stackloss dataset is an odd dataset and small enough that each individual case can be studied in detail (cf. Dodge’s paper for just how much detail). However, similar results have been found with other datasets (milk, Election2005, diamonds, …). The main conclusion so far is that different outlier methods identify different numbers of different cases for different combinations of variables as different from the bulk of the data (i.e. as potential outliers)—or are these datasets just outlying examples?

    There are other outlier methods available in R and they will doubtless give yet more different results. The recommendation has to be to proceed with care. Outliers may be interesting in their own right, they may be errors of some kind—and we may not agree whether they are outliers at all.

    [Find the R code for generating the above plots here: OutliersUnwin.Rmd]

    Python in Visual Studio Code – Feb 2018 Release

    $
    0
    0

    We are pleased to announce that the February 2018 release of the Python Extension for Visual Studio Code is now available from the marketplace and the gallery. You can the download the Python extension from the marketplace, or install it directly from the extension gallery in Visual Studio Code. You can learn more about Python support in Visual Studio Code in the VS Code documentation.

    In this release have closed a total of 96 issues which have added support for pipenv/pyenv, a limited preview of a new debugger offering faster Django debugging performance, and fixed some issues related to linting and flask debugging. You can see the full list of changes in this and previous releases in our changelog on GitHub.

    Support for pipenv and pyenv environments

    There are several tools used by developers for installing and managing different Python versions and environments. The extension previously supported virtualenv and conda, and in this release also supports pipenv and pyenv.

    Pipenv is a popular new way to manage virtual environments when doing application development. It offers many benefits for application developers including the ability to separate development and production dependencies, and a centralized management of all pipenv environments on the system. If you use pipenv in a folder, VS code will automatically detect and use the pipenv environment as the selected interpreter:

    If you choose to use pipenv in a folder, you will not have the ability to switch to other interpreters/environments. This is because pipenv is designed to control your entire folder, and not work with other interpreters/environments. If you want to use different environments, we recommend using a separate copy of that folder.

    On macOS and Linux, pyenv is a popular way install python versions on demand and switch to different python installations. Now VS Code will now be able to find python interpreters installed with pyenv.

    Preview of ptvsd 4.0 debugger

    Visual Studio Code uses ptvsd, the debug engine also used for the Python workload in Visual Studio. In this release we are experimenting with a new version of our debug engine based on PyDevD, with a basic set of debugging features and some early improvements over the previous version that we want to make available for you to try out:

    • Apps run faster with the debugger attached. With our sample stackoverflow-django app we observed up to a 3x speedup in loading Django pages.
    • You can now debug flask templates:

    You can try out the new version of the debugger by taking the following steps:

    1. Use one of the experimental debugger configurations by clicking on Debug > Configure > Add Configuration > Python Experimental
    2. Use the Python: Create Terminal command, and then type `pip install ptvsd --pre` in the terminal to install the preview version of the debugger
    3. Click Start debugging!

    Features supported include:

    • Launching applications
    • Pause/Continue
    • Basic breakpoints and stepping over/into/out
    • Break on exception
    • View/change call stack frames
    • View local and global variables
    • Conditional breakpoints

    Features not yet supported include:

    • Tracepoints
    • Go to
    • Local and Remote Attach
    • Django template debugging

    In this first preview we are expecting there to be some bugs, and we invite you to try it out and file any issues you find on the Python VS Code GitHub page.

    Various improvements and fixes

    We have also fixed a number of issues reported by users that should improve your experience working with Python in Visual Studio Code. The full list of improvements is listed in our changelog, some notable improvements are:

    • Installing Pylint was not working in virtual environments created with venv (#404)
    • Print statements were being incorrectly highlighted by Pylint (#722), for now we’ve disabled this rule
    • The default flask debugging templates disable auto-reload (#573), meaning you can now set breakpoints in apps that are configured to have auto-reload
    • Improvements to auto-indentation (#481)
    • The performance of locating and selecting python interpreters has been improved (#666)
    • The keyboard shortcut for formatting python code has been fixed, it was broken in the January release
    • Multiple bugs caused .pylintrc files not to be used over the default pylint rules introduced in the January release (#788, #916, #422)
    • The extension prevents against large runaway memory consumption from Jedi (#263), after Jedi uses 1GB of ram we will automatically kill and restart the process. This can cause a temporary delay with displaying IntelliSense, if desired you can choose a higher threshold by changing the a setting
    • Improvements to automatic whitespace formatting on enter (#640)
    • Upgraded Jedi to 0.11.1 (#674), fixing an installation problem preventing IntelliSense from working in virtual environments
    • Added Chinese (Taiwan) zh-TW translation

    Be sure to download the Python extension for VS Code now to try out the above improvements. If you run into any issues be sure to file an issue on the Python VS Code GitHub page.

    Join Microsoft at Supercomputing Frontiers Europe

    $
    0
    0

    If you’re in Warsaw, Poland March 12-15, you’ll want to come and join Microsoft at Supercomputing Frontiers Europe. This conference is a great opportunity to come together with high-performance computing leaders and practitioners. Microsoft will be there to talk about how Azure enables our customers to run true HPC workloads in the cloud.

    Associate Professor Dariusz Mrożek from Silesian University of Technology in Gliwice will deliver a keynote titled “Accelerating scientific discoveries in protein bioinformatics with Microsoft Azure cloud platform”. In addition, we will be delivering a half-day of hands-on workshops on March 15. The workshop will include:

    • Deploying Linux RDMA Infiniband cluster with Azure CLI.
    • Deploying HPC cluster from CycleCloud template.
    • Azure Batch AI training lab.
    • OpenFOAM simulation in Azure Marketplace UberCloud container.

    The workshop will demonstrate different ways of using Azure for running HPC jobs. Instructors will start with an introductory presentation of HPC services on Azure and the workshop environment, followed by a hands-on lab session in which they will go step-by-step with the participants through the lab content. Participants will also receive free Azure passes and will be able to execute the labs following the instructor guidance or at their own pace.

    If you’re coming to the conference, join us at the Microsoft stand to learn more about HPC in Azure. We’ll be joined by our partners UberCloud and Cancer Center.


    Get Reserved Instance purchase recommendations based on usage pattern

    $
    0
    0

    If you have Virtual Machines (VM) running in azure, you can take advantage of discounted pricing on Reserved Instances (RI) and pre-pay for your Virtual Machines. Microsoft consumption recommendation apis looks at your usage for seven, 30, or 60 days and recommends optimum configurations of Reserved Instances. It calculates the cost you would pay if you did not have RI and cost you will pay with RI optimizing your savings. The following example shows calculations that happen for 7 day recommendation but the same method is applied for calculating 30 or 60 day recommendations.

    Calculation method

    Let us assume your hourly windows VM usage for a specific SKU and region looks like the following graph (min. is 65 units and max. is 127 units) for seven days. 

    image

    If you purchase 75 Reserved Instances, for hour 79, you will pay the following:

    • 75 Instances of Reserved Instances. This will be pre-paid when you purchase RI.
    • Reserved Instance covers the hardware cost of running VMs, so you will pay 75 hours of software only price as described in the document for Windows software costs not included with Reserved Instances.
    • Since usage for this hour is 80, you will pay for five hours of (windows + HW) combination  meter price. This will be your negotiated price if you are an EA customer or it will be pay as you go price.

    If you add up the costs described in three points above for all the hours, you can calculate the total cost if you purchase 75 RI. You can also calculate your current cost using your negotiated prices in case you are EA customer or use pay as you go prices if you do not have custom negotiated prices. Difference in these two amounts will give you savings for seven days in case you purchase 75 RIs.

    Microsoft Consumption Recommendation api does these calculations for each specific usage point and returns the Recommended Quantity where your saving is maximum. In this example, below graph shows that your savings peak at 68 and then start reducing so the api will return 68.

    image

    Other expected behavior on recommendations

      • If your current usage for Windows VM is not using hybrid use benefits, api will NOT assume that you will use hub and recommendation will factor in the per core cost of windows IP. You can use hub and further increase savings. Future versions of the api will give recommendations on hub savings also.
      • If you are using a look back period of seven days and your VM ran for the first two days, then was down and again ran for the fourth day. You may or may not see in the recommendations depending on RI discount.

      API details

      You can get the details on calling the recommendation api for your Enterprise enrollment.

      Next steps

      Purchase Reserved Instance

      Use hybrid use rights to save on cost of windows software.

      Join Microsoft at the Rice Oil and Gas HPC conference

      $
      0
      0

      Energy exploration, production, and reservoir monitoring are leaders in the private sector for big data and compute-intensive applications. That's why energy companies have always used high performance computing (HPC) to aid in oil and gas exploration. This decision by these energy companies has proven to help reduce costs, impact on the environment, and improve the fidelity of subsurface data.

      We’ll be at the Rice Oil and Gas HPC conference in Houston, Texas on March 12-13, 2018. Here we will talk about Microsoft's commitment to providing the resources that HPC users need. Curt Smith, Big Compute Engineering Development Manager, will be presenting a plenary session covering how oil and gas companies use Azure’s offerings to address HPC and machine learning workloads. Azure allows customers to integrate their data management, compute workloads, and leverage technologies such as machine learning, artificial intelligence, and blockchain.

      We’ll also have a booth in the exhibition area where attendees can talk to Azure's HPC experts. Our booth is co-sponsored by our partners at NVIDIA, who will be available to talk about the benefits of Azure’s GPU-powered offerings for compute, deep learning, and remote visualization. You can also learn about our exclusive partnership with Cray that enables customers to get a dedicated Cray supercomputer on their Azure virtual network.

      Azure provides a secure and scalable platform for reservoir simulation, seismic interpretation, computational chemistry, and other key oil and gas workloads. Also offered is a wide variety of capabilities and services that enable easy of access and management, Azure is the oil and gas cloud.

      We look forward to seeing you next week in Houston!

      .NET Framework 4.7.2 Developer Pack Early Access build 3056 is available!

      $
      0
      0

      Today, we are happy to share an Early Access build with the .NET Framework 4.7.2 Developer Pack. The .NET Framework 4.7.2 Developer Pack lets developers build applications that target the .NET Framework 4.7.2 by using Visual Studio 2017, Visual Studio 2015 or other IDEs. This is a single package that bundles the .NET Framework 4.7.2, the .NET 4.7.2 Targeting Pack, and the .NET Framework 4.7.2 SDK. We would love your help to ensure this is a high quality and compatible release. 

      Next steps:

      The main difference between the build 3052 we shared few weeks back and this build is the Developer Pack. This pre-release build enables you to try out the new features available in .NET Framework 4.7.2. You can refer to the Early Access build 3052 blogpost for supported platforms and release notes.

      Note: this release is currently feature-complete and in the testing phase, but is not supported for production use.

      ASP.NET – Dependency Injection in WebForms

      Dependency injection (DI) is a technique whereby one object supplies the dependencies of another object. It decouples the objects so that no client code has to be changed simply because an object it depends on needs to be changed to a different one. MVC Framework already supports dependency injection, but has been very difficult to use this technique in ASP.NET Web Forms application. This new feature will make it much easier to use dependency injection in ASP.NET Web Forms application. This feature enables the following:
      • Support setter-based, interface-based and constructor-based injection in web application project in Handler, Module, Page, User control and Custom control.
      • Support setter-based and interface-based injection in web site project in Handler, Module, Page, User controls and Custom controls.
      • Be able to plug in different dependency injection frameworks.
      Here’s a simple example of how you can use this feature. 
      Step 1 – Implement IServiceProvider. You can implement your own DI logic in it or plug in third party DI framework, e.g. Unity, Ninject. Below is an example to inject ILog object through constructor.
      Step 2 – Set WebObjectActivator in Global.asax.
      Step 3 – Use Dependency Injection in your Webform page.

      ASP.NET – SameSite Cookie

      SameSite prevents the browser from sending this cookie along with cross-site requests.  In .NET Framework 4.7.2, a new property SameSite is added in HttpCookie type and ASP.NET will add SameSite attribute into the set-cookie header if HttpCookie.SameSite is set to SameSiteMode.Strict or SameSiteMode.Lax. The support for SameSite cookie is two-fold in this case: 

      You can set SameSite for a HttpCookie object as follows.

      You can configure HttpCookie SameSite at application level through web.config as follows.

      You can add SameSite for FormsAuthentication and SessionState cookies through web.config.

      SQL – Azure AD Universal and Multi-factor Authentication Support

      Growing compliance and security demand requires many customers to use Multi-Factor authentication (MFA).  In addition, current best practices directs developers from not including any user password directly to the connection string. We have extended SqlClient Connection String by introducing a new Azure AD Interactive authentication keyword to support MFA. This also enables support of Azure AD Authentication. 

      This feature introduces a new value for the existing “Authentication” keyword, specifying a new authentication method called “Active Directory Interactive”. The new interactive method supports native and federated Azure AD users as well as Azure AD guest users.  When this method is being used, the MFA authentication imposed by Azure AD is supported for SQL DB. In addition, a user password is requested as part of an interactive dialog enabling us to adhere to security best practices.

      Originally SQL connectivity in .NET Framework supported only ActiveDirectoryPassword and ActiveDirectoryIntegrated. Both of these are part of the non-interactive ADAL protocol which do not support MFA. With the new ActiveDirectoryInteractive keyword, the SQL connectivity supports MFA as well as existing authentication methods (password and integrated authentication) allowing users to enter user password interactively without the need to persist passwords in the SQL connection string.

      This feature can be configured with tools like SQL Server Data Tools (SSDT), as illustrated below. In the latest Visual Studio preview, a new authentication option called “Active Directory Interactive Authentication” can be used to support MFA authentication to SQL database.

      The following sample shows how to instantiate the communication provider that is required to register it to a specific authentication method. It also shows creating connections to SQL database using the different authentication methods, of which two are existing ones: ActiveDirectoryPassword, ActiveDirectoryIntegrated and the latest ActiveDirectoryInteractive.

      BCL – Cryptographic Improvements

      New overloads to RSA.Create and DSA.Create 

      This simplifies the pattern of creating an RSA or DSA object and calling ImportParameters. The ‘before’ and ‘after’ simplification is illustrated below.
      When generating a new RSA or DSA key with a specific keysize the new size overloads can be utilized.

      Rfc2898DeriveBytes accepts a hash algorithm name

      New constructor overloads have been added to Rfc2898DeriveBytes that accepts a HashAlgorithmName to identify which HMAC algorithm should be used when deriving keys.  Developers are encouraged to move new key generations to a SHA-2-based HMAC as follows instead of using HMAC_SHA1. 


      Support for EphemeralKeySet

      PFX import can optionally load private keys directly from memory, bypassing the hard drive. The X509KeyStorageFlags enumeration has a new member, EphemeralKeySet. When this flag is specified in an X509Certificate2 constructor or X509Certificate2Collection.Import method, the private keys will be loaded as ephemeral keys. This avoids keys being visible on the disk.
      • Since the keys are not persisted to disk, certificates loaded with this flag are not good candidates for being added to an X509Store.
      • Keys loaded in this manner will almost always be loaded via Windows CNG, therefore callers must access the private key via the extension methods – for e.g., cert.GetRSAPrivateKey(). The PrivateKey property on X509Certificate2 will not function.
      • Since the legacy PrivateKey property will not work with certificates, developers are advised to perform rigorous testing before switching to EphemeralKeySet.

      Programmatic creation of PKCS#10 certification signing requests and X.509 public key certificates

      The .NET Framework now enables workloads to generate certificate signing requests (CSRs), allowing certificate request generation to be staged into existing tooling.

      The following example creates a CSR to be valid as a TLS Server Authentication certificate for www.adatum.com. Furthermore, adatum.com is signed with an existing RSA key using RSA-PSS with SHA-2-256.

       

      The .NET Framework now enables workloads to generate self-signed certificates in a programmatic manner. This is frequently useful in test scenarios.

      The following example creates a self-signed version of a TLS Server Authentication certificate for www.adatum.com, using an existing ECDSA key with an ECDSA-SHA-2-256 signature.

       

      Other Features

      • The SignerInfo class for SignedCms exposes more information about the signature. SignerInfo.SignatureAlgorithm can be queried to determine the signature algorithm used by the signer. SignerInfo.GetSignature() can be called to get a copy of the cryptographic signature for this signer.
      • CryptoStream now has an additional constructor that allows Dispose to not close the wrapped stream. To continue with the current behavior, no changes are necessary. To leave the wrapped stream open after the CryptoStream is disposed, use `new CryptoStream(stream, transform, mode, leaveOpen: true)`.

      BCL – ZLib decompression support to DeflateStream

      This feature improves the throughput of decompressing ZIP archives by using native implementation of ZIP. This enables up-to 3x increase in the throughput of ZIP archives during decompression. There are minor differences between the existing and native implementation, hence this feature is enabled by default only for applications targeting .NET Framework 4.7.2.
      Older applications can opt-into this behavior by using the following AppContext switch:

      BCL – Additional Collection APIs

      In .NET Framework 4.7.2 we have added a few APIs to the standard Collection types that will enable new functionality as follows.   
      • ‘TryGetValue’ is added to SortedSet and HashSet to match the Try pattern used in other collection types.
      • The `Enumerable.To*` extension methods are added to SortedSet and HashSet.
      • New HashSet constructors allow HashSets to be constructed with a capacity, offering a performance benefit when you know ahead of time what the size of the HashSet will be.
      The new Collection APIs are listed below.

      WorkflowDesigner High Contrast Improvements

      New WorkflowDesignerColors have been added to improve UI experiences in high contrast mode. The following properties are now added to Class System.Activities.Presentation.WorkflowDesignerColors.

      Before and after experiences with these changes for various workflow features are illustrated below.

      Feature Before After
      Foreground colors of selected activities’s title change to black
      Foreground colors of selected arguments/variables change to black
      Foreground colors of selected context menu items change to black
      Foreground colors of selected flowchart connectors change to turquoise
      Foreground colors of selected buttons in properties window change to black

       

      WPF – Finding ResourceDictionaries by Source

      This feature enables a diagnostic assistant to locate the ResourceDictionaries that have been created from a given Source Uri. A diagnostic assistant such as Visual Studio’s “Edit-and-Continue” facility lets its user edit a ResourceDictionary, with the intent that the changes are applied to the running application. One step in achieving this is finding all the ResourceDictionaries that the running application has created from the dictionary that’s being edited. For example, an application can declare a ResourceDictionary whose content is copied from a given source URI:
      A diagnostic assistant that edits the original markup in “MyRD.xaml” can use the new feature to locate the dictionary. The feature is implemented by a new method on the class `System.Windows.DiagnosticsResourceDictionaryDiagnostics` as illustrated by the first line in the code below. The diagnostic assistant would call the new method using an absolute Uri that identifies the original markup as illustrated by the next line below.
      The feature is for use by diagnostic assistants, not by production applications. The method returns an empty enumerable unless VisualDiagnostics are enabled and the ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO environment variable is set.

      WPF – Finding ResourceDictionary owners

      This feature enables a diagnostic assistant to locate the owners of a given ResourceDictionaryWhenever a change is made to a ResourceDictionary, WPF automatically finds all DynamicResource references that might be affected by the change. A diagnostic assistant such as Visual Studio’s “Edit-and-Continue” facility may want extend this to handle StaticResource references.
      The first step in this process is finding the owners of the dictionary – all the objects whose `Resources` property refers to the dictionary (either directly, or indirectly via the `ResourceDictionary.MergedDictionaries`property). The new methods support this step.
      The feature is implemented by three new methods on the class `System.Windows.DiagnosticsResourceDictionaryDiagnostics`one for each of the base types that have a `Resources` property.
      The feature is for use by diagnostic assistants and not by production applications. The methods return an empty enumerable unless VisualDiagnostics are enabled and the ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO environment variable is set.

      WPF – Finding StaticResource references

      This feature allows a diagnostic assistant to receive a notification whenever a StaticResource reference is resolved. A diagnostic assistant such as Visual Studio’s “Edit-and-Continue” facility may want to update all uses of a resource when it changes or replaces a value in a  ResourceDictionary. WPF does this automatically for DynamicResource references, but intentionally does not do so for StaticResource references. The diagnostic assistant is faced with the challenge of locating those uses. This feature helps meet the challenge.

      The feature is implemented by a new event on the class `System.Windows.DiagnosticsResourceDictionaryDiagnostics`.
      This event is raised whenever the runtime resolves a StaticResource reference. The event args describe the resolution, indicating the object and property that host the StaticResource reference, and the ResourceDictionary and key used for the resolution.
      The feature is for use by diagnostic assistants, not by production applications. The event is not raised (and its `add` method is ignored) unless VisualDiagnostics are enabled and the ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO environment variable is set.

       

      Closing

      Try out these new features in .NET Framework 4.7.2 Early Access build and please provide your feedback by reporting an issue at the .NET Framework Early Access GitHub repository.

      All good things…

      $
      0
      0

      After more than 23 years at Microsoft, I’ve decided it’s time for me to take a break. Starting March 12th 2018, I’ll be taking a leave of absence for a year. Deciding to do this has been one of the most gut-wrenching decisions of my life. As someone who has largely defined myself by the work I’ve done, it’s incredibly hard to imagine life without going to work and working 10 hours every day. But, after a few years of debate with my wife, we’ve decided that it’s time to take a break and dedicate more time to home and family for a while.

      I have no fear of having nothing to do. I have learned over the past 10 years that a farm is an endless source of work. I have a farm backlog so long I’m not sure I will be able to finish half of it in a year (and yes, I use VSTS to manage it). It feels like an infinitely long list. While farming will likely be the lion’s share of my time investment while I’m away, I’m planning a bunch of other things too. We’re going to do some traveling that we’ve never gotten around to. I’m looking forward to that. There are also some “hobbies” that I’d like to spend some more time on. I haven’t had much time in a while for woodworking and I’m looking forward to getting some more time for that – particularly lathe work. I’ve also, recently, picked up baking (the Great British Baking Show was the clincher for me) and I’ve really been enjoying it. As usual, I suspect my eyes are bigger than my stomach and I’ll never get to everything I imagine I’d like to do, but I can dream, right?

      Taking a year off, of course, means that I will no longer be leading the TFS/VSTS team. That’s a very hard decision for me to make. I started the team about 15 years ago and have grown it from 2 people working in a “spare room” to almost 800 people spread across the globe. I’m incredibly proud of what we’ve built and very fond of the team I’ve had the privilege to work with. Stepping away from both is a big decision. It’s reassuring to me that we’ve built a very strong and talented team. I know the product is in good hands and it will keep getting better.

      Nat Friedman (of Xamarin fame) will be assuming the leadership role for TFS/VSTS. I’ve had the opportunity to work with Nat over the past couple of years (since the Xamarin acquisition) and I’ve always been incredibly impressed with him. I really admire the principled way that he works and the great culture that he builds. He’s a very clear thinker and an excellent communicator. He understands development and developers deeply. I’m confident that Nat is going to do an excellent job leading the team and continuing to advance the product. Please join me in welcoming Nat.

      My 23 years at Microsoft have been some of the best of my life. I simply can’t express enough how grateful I am for the opportunities I’ve been given. I know there are those who don’t always think incredibly fondly of Microsoft. Although I can’t say that I agree with everything we’ve ever done, I can say, I have worked with a tremendous number of people across Microsoft and they are terrific people who want nothing more than to create great products and make customers happy. I wish everyone could see Microsoft the way I see it. I am proud to have been a small part of what we have become. It is a great place to work and a great place to do good work. I think things have gotten even better in the past few years with some of the cultural and strategic changes that Satya has brought. I’m looking forward to coming back to Microsoft and finding a new challenge in a year.

      My expectation is that I’ll be fully stepping away for a year – meaning, among other things, that I will discontinue posting to this blog. I have really enjoyed sharing my thoughts over the years and engaging in vigorous debate. Through my blog, I have attempted to put a humble and understanding face on Microsoft. I’ve tried to provide my perspective on some of the things we do and why I think they make sense, while acknowledging when they don’t. I’ve also tried to be an available ear for problems and to help get them routed to someone at Microsoft who can resolve them – no matter how big or small. There are countless good leaders at Microsoft who will, no doubt, continue to do that.

      There’s no good time to leave a team and a product you love. But sometimes you gotta do what you gotta do. I have to say that I’m incredibly excited about the future of TFS and VSTS. We’ve made a lot of progress over the last year or two and the next year is going to be one of the most exciting yet. We’ve been hard at work on some really cool investments  that I think are going to significantly improve the experience. It’s disappointing to not be able to see those changes through to the end but I know Nat and the team will do a great job carrying forward. I encourage you to keep and eye out for great news in the coming months. The best way to continue to track the latest and greatest on TFS and VSTS is the DevOps blog.

      For those of you who have been with me on this journey, thank you. I’ve enjoyed it and I hope you have too. Good luck over the next year and I hope our paths cross again. I think I will create a personal blog somewhere to, at least, continue to share thoughts and stories on farming and whatever else crosses my mind. Once I get that sorted out, I’ll post a link to it on this blog.

      Thank you very much,

      Brian

       

      Top stories from the VSTS community–2018.03.09

      $
      0
      0
      Here are top stories we found in our streams this week related to DevOps, VSTS, TFS and other interesting topics. TOP STORIES Change image size in VSTS wiki – Jeff BramwellIf you’ve been making use of the Wiki feature within VSTS then you already know how useful it is for providing documentation, notes, etc. in... Read More
      Viewing all 10804 articles
      Browse latest View live


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