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

TFS 2018 Update 1 RC is available

$
0
0

Today we released the release candidate for Team Foundation Server 2018 Update 1.  Here are the important links:

If you look at the release notes, you’ll notice they are a lot shorter than in previous Update 1s.  I want to spend a little time explaining what’s going on.

Several years ago, for TFS, we adopted a cadence of a major release, followed by a couple of significant feature releases, followed by one or two releases which contained mostly bug fixes.  The major releases were typically ~18 months apart and the minor releases varied from 3-5 months apart.  We made some mistakes along the way but, overall, the cadence has been working reasonably well.

However, over the past year or so, our major release cadence has firmed up to be consistently 12 months apart – TFS 2017 shipped in Nov 2016, TFS 2018 shipped in Nov 2017 and we anticipate TFS 2019 will ship in Nov 2018.  This aligns well with our Connect event and provides a predictable schedule for us all to plan around.  However, this has also created some problems for us.  With Update 1 shipping in the spring and Update 2 shipping in the summer, Update 3 has started to conflict with our efforts in the fall to ship the subsequent major release.  This has caused us to have two concurrent on-prem releases in the fall – TFS V.current Update 3 and TFS v.next RTM.  We’ve found that this creates a level of stress and fog on the team that it isn’t working well for us.  So, this year, we’ve decided to make some changes to our approach.

The basic model remains the same – a major release with 3 intervening minor releases. However, the content of Update 1 will change from being a significant feature release to being mostly a bug fix release.  This enables us to shorten the intervals and reduce the overlap in the fall.  So rather than the TFS 2017 schedule:

We’re expecting the TFS 2018 schedule to look more like:

  • TFS 2018 RTM (November 2017) – A major release
  • TFS 2018.1 (February 2018) – Mostly bug fixes
  • TFS 2018.2 (May 2018) – A significant feature update
  • TFS 2018.3 (August 2018) – Mostly bug fixes

Said another way, the bulk of the new features in TFS 2018 updates will come out in May rather than half in March and half in July.  To be fair, Update 1 won’t be *entirely* bug fixes.  There will be a few carefully selected new features that don’t have significant effort/schedule impact yet we believe are important to get out quickly. A good example in TFS 2018.1 is our support for GVFS caching to enable distributed teams to get better performance when working with large repositories.

Another way to understand this change is to think about it mechanically.  In TFS 2017, Update 1 and Update 2 were branched from master, meaning they contained all the sprint work committed in the intervening time.  Update 3 was branched from Update 2 so any changes for Update 3 were either directly made in the Update 3 branch or hand ported to the Update 3 branch from master.  This gives much more control over how much churn goes into the release.  In TFS 2018, Update 1 will branch from the RTM release branch and then, as before, Update 2 will branch from master. Update 3 will branch from Update 2.

Why are we changing this? First, this allows us to reduce the overlap between Update 3 and the next major release.  Second, preparing an on-premises release for any version which has a lot of churn is expensive.  On-prem releases involve much more regression and config matrix testing than our cloud releases.  For example, we have to test upgrades from many previous versions of TFS, many OS versions, several SQL server versions, etc.  The time spent doing all of that extra testing is less time spent working on improvements.  We believe that the aggregate impact here will be good for customers.  There will be 2 feature releases per year rather than 3 but they will be more evenly spaced (one every 6 months – major, then minor) and the aggregate amount of value will be increased due to less time spent in release validation.

These changes only affect our on-premises TFS product.  Our Azure-based VSTS service will continue to deploy from master every sprint (every 3 weeks).

We’re still talking about exactly how this will affect our support strategy and are open to your input.  Over the past couple of years we’ve adopted a support strategy that accommodates two classes of customers:

  1. Those who always want to be on the latest version and are willing to install every Update.
  2. Those who want to pick a version to stay on for a year or more.

Both classes of customers need a good support story so that they can contact customer support and get help if they have problems.

To enable these two different ways of managing updates, our policy has been that we provide long term support for every major release and for the “latest update” of each major release.  Customers who want to pick a version and stay on it should pick a major release and we will offer support and patches, as necessary, for the major release for the lifetime of the product.   Customers who want to aggressively update can install any Update they want and, if they need to get a patch, they will be asked to move to the latest Update for the major version they are on as part of getting the patch.

With the change I’m describing here, I fear, no matter how many assurances I give and no matter how pure my intent is, customers will perceive the .1 release as higher quality and more desirable than the RTM release.  And, at some level, I have to agree with them.  It is, after all, just RTM plus some bug fixes (and a few small, non-disruptive, features).  So, we’re considering the option to just embrace that. This would mean that for TFS 2018 going forward we would change our support model to provide long term support for the .1 release rather than the RTM release. In a sense, Update 1 *is* a patch for RTM and hence is on the servicing train for RTM.  The guidance to customers who want to stay on the most stable release possible with no changes, would be to either install the .1 or .3 Updates of any major release family. I’m open to thoughts/discussion on this.

Long post, I know.  Sorry.  I wanted to try to clearly explain what we are doing and why.  As always, we are open to your feedback.  At this point, we are committed to this cadence for the TFS 2018 product cycle but, as with everything, we will watch, listen and learn.  If this doesn’t work for people, we can either come up with a 3rd option or go back to what we were doing before with TFS 2019.  All options are on the table, but I think people are going to like this better.  We’ll see.

Brian


Announcing the general availability of Azure Event Grid

$
0
0

Modern applications are taking maximum advantage of the agility and flexibility of the cloud by moving away from monolithic architectures and instead using a set of distinct services, all working together. This includes foundational services offered by a cloud platform like Azure (Database, Storage, IoT, Compute, Serverless Functions, etc.) and application-specific services (inventory management, payment services, manufacturing processes, mobile experiences, etc.). In these new architectures, event-driven execution has become a foundational cornerstone. It replaces cumbersome polling for communication between services with a simple mechanism. These events could include IoT device signals, cloud provisioning notifications, storage blob events, or even custom scenarios such as new employees being added to HR systems. Reacting to such events efficiently and reliably is critical in these new app paradigms.

Today, I am excited to announce the general availability of Azure Event Grid, a fully managed event routing service that simplifies the development of event-based applications.

  • Azure Event Grid is the first of its kind, enabling applications and services to subscribe to all the events they need to handle whether they come from Azure services or from other parts of the same application.
  • These events are delivered through push semantics, simplifying your code and reducing your resource consumption. You no longer need to continuously poll for changes and you only pay per event. The service automatically scales dynamically to handle millions of events per second.
  • Azure Event Grid provides multiple ways to react to these events including using Serverless offerings such as Azure Functions or Azure Logic Apps, using Azure Automation, or even custom web hooks for your code or 3rd party services. This means any service running anywhere can publish events and subscribe to reliable Azure Events.

We make it easy to react to Azure native events and build modern apps anywhere, on-premises and cloud, without restricting you to use only our public cloud services. This is unique to Azure Event Grid.

Here is how it works:

In the days since we announced public preview, we have seen many customers find innovative uses for Azure Event Grid and we’ve been blown away by all the great feedback from customers and the community. 

  • Qutotec used Azure Event Grid to rearchitect their hybrid integration platform:

“Azure Event Grid enabled us to simplify the architecture of our cloud-based enterprise wide hybrid integration platform, by making it easy to reliably respond to events and changes in the global business data without polling.”

- Henri Syrjäläinen, Director of Digital Enterprise Architecture, Outotec Oyj

  • Paycor unified their human capital management applications using Azure Event Grid:

"Event Grid empowers Paycor to provide a unified experience to our customers, across the suite of our human capital management applications.  It becomes the backbone for an event driven architecture, allowing each application to broadcast and receive events in a safe, reliable way.  It solves many of the operational and scalability concerns that traditional pub-sub solutions cannot."

- Anthony Your, Director of Architecture, Paycor, Inc.

  • Microsoft Devices supply chain team utilized Azure Event Grid as part of its serverless pipeline to optimize operations and reduce time to market. The details are described in this Microsoft supply chain serverless case study.

Here is what we have newly available since our preview:

  • Richer scenarios enabled through integration with more services: Since preview, we have added General Purpose Storage and Azure IoT Hub as new event publishers and Azure Event Hubs as a new destination (great for event archival, streaming, and buffering of events). IoT Hub adds support for device lifecycle events such as device creation and device deletion which can then be handled in a serverless manner. These new integrations simplify the architecture and expand the possibilities for your applications whether they are in cloud or on-premises. Please see the full current list of Azure Event Grid service integrations for details and the region-wise availabilities. We will continue to add more services throughout the year. 

Event Grid service integrations

  • Availability in more regions: Azure Event Grid is globally available in the following regions: West US, East US, West US 2, East US 2, West Central US, Central US, West Europe, North Europe, Southeast Asia, and East Asia with more coming soon.
  • Increased reliability and service level agreement (SLA): We now have a 24 hour retry policy with exponential back off for event delivery. We also offer an industry-leading 99.99% availability with a financially backed SLA for your production workloads. With today’s announcement, you can confidently build your business-critical applications to rely on Azure Event Grid.
  • Better developer productivity: Today, we are also releasing new Event Grid SDKs to streamline development. Management SDKs are now available for Python, .Net, and Node.js with support for Go, Ruby, and Java coming soon. Publish SDK is now available for .Net with support for Python, Node.js, Go, Ruby, and Java coming soon. Additionally, we have now made it easier to consume events by simply fetching the JSON schema of all supported event types from our event schema store. This removes the burden of the subscriber to understand and de-serialize the events.

With today’s GA, I think you will find that Azure Event Grid becomes a critical component in your serverless application. Go ahead, give it a try with this simple and fun Event Grid Quickstart. Remember, the first 100,000 events per month are on us!

Here are some other samples/tutorials to help you get started:

  • Build serverless applications
    • Use IoT Hub and Logic apps to react to device lifecycle events [doc | video]
    • Instantly pick up and resize images in Blob Storage using a function [doc]
  • Automate your infrastructure operations
    • Appropriately tag VMs as they are spun up and send a notification to your Microsoft Teams channel [doc]
  • Facilitate communication between the different pieces of your distributed applications
    • Stream data from Event Hubs to your data warehouse [doc]

To learn more, please join us for our upcoming webinar on Tuesday, February 13, 2018. 

Register here: Building event-driven applications using serverless architectures.

Thanks,

Corey

Azure Storage SDKs for Python, Ruby and PHP now generally available

$
0
0

Today we are excited to announce the general availability of the Azure Storage SDKs for Python, Ruby and PHP! Thanks to everyone who participated in the previews and provided feedback.

This GA release brings forward a few significant changes:

  • We have split the Storage SDKs into four packages, one each for Blob, Table, Queue, and File. As announced, this was done in order to reduce the footprint of the libraries and allow developers to consume only the packages they are interested in. 
  • Support is now available for newer Azure Storage REST API versions and service features. See below for details on each SDK.

Azure Storage SDK for Python

Storage SDK packages for Blob, File, and Queue in Python are available on PyPi with version 1.0. This release supports the April 4, 2017 REST API version, bringing support for archival storage and blob tiering. Table package is released under the name Azure-Cosmosdb-table.

Here is a Hello World sample with the Storage SDK for Python:

from azure.storage.blob import BlockBlobService
import os

# Create a blob service client
block_blob_service = BlockBlobService(os.environ.get('AZURE_STORAGE_ACCOUNT_NAME'), os.environ.get('AZURE_STORAGE_ACCOUNT_KEY'))

# upload a blob from text
block_blob_service.create_blob_from_text(
    'mycontainer',
    'myblockblob',
    'Hello World!'
)

# download a blob into a buffer
blob = block_blob_service.get_blob_to_bytes('mycontainer', 'myblockblob')
print blob.content

If you'd like to learn more about the Storage SDK for Python, check out our Source Code and Samples or our API Reference.

Azure Storage SDK for PHP

Storage SDK packages for Blob, Table, File, and Queue in PHP are available on Packagist.org with version 1.0. This release brings support for the May 31, 2016 REST API version, bringing service features such as larger block blobs. We are actively working on support for the latest REST API version and newer service features.

Here is a Hello World sample with the Storage SDK for PHP:

require_once 'vendor/autoload.php';

use MicrosoftAzureStorageBlobBlobRestProxy;

// Create queue REST proxy.
$blobClient = BlobRestProxy::createBlobService(getenv('AZURE_STORAGE_CONN_STRING'));

// Uploading a blob from text
$blobClient->createBlockBlob(
    'mycontainer',
    'myblockblob',
    'Hello world'
);

// Downloading a blob
$getBlobResult = $blobClient->getBlob('mycontainer', 'myblockblob');
echo stream_get_contents($getBlobResult->getContentStream());

If you'd like to learn more about the Storage SDK for PHP, check out our Source Code and Samples or our API Reference.

Azure Storage SDK for Ruby

Storage Ruby client library is now available with four split Rubygem packages with version 1.0.1: Blob, File, Table, and Queue libraries. This release brings support for the May 31, 2016 REST API version. We’ll add support for the new versions in the upcoming releases.

Here is a Hello World sample with the Storage SDK for Ruby:

require 'azure/storage/blob'
blob_client = Azure::Storage::Blob::BlobService.create(storage_account_name: 'your account name', storage_access_key: 'your access key')

// Uploading a blob from text
blob_client.create_block_blob('mycontainer', 'myblockblob', 'Hello World!')

// Downloading a blob
blob, content = client.get_blob('mycontainer', 'myblockblob')
puts content

If you'd like to learn more about the Storage SDK for Ruby, check out our Source Code and Samples or our API Reference.

Feedback

We will continue to enhance these libraries with support for new service capabilities and incorporate your feedback. Please drop us a line in the comments below if you have feedback on any of the Storage SDKs. Alternatively, feel free to raise an issue on our GitHub source code repositories.

Stakeholders can now view VSTS Analytics widgets

$
0
0
Why can’t Stakeholders view the Analytics widgets? That is a question we often heard. Now we have an answer. They can! Well, now they can. We’ve updated the VSTS Analytics extension to allow users with Free licenses (Stakeholders license) to view Analytics widgets. This means Stakeholders can view CFD, Lead/Cycle Time, Velocity, Burndown/Burnup widgets. For more... Read More

New in Stream Analytics: General availability of sub-streams, query compatibility, and more

$
0
0

Today, we are excited to announce the general availability of several features in Azure Stream Analytics. These features are designed to help address a variety of scenarios for both enterprise and non-enterprise customers alike. These include:

Sub-streams support: A variety of streaming applications that customers build using Azure Stream Analytics such as IoT, connected car and automotive telematics, smart elevators, etc requires processing of telemetry streams from each asset or source by itself – all in the same job without merging the timeline from events belonging to different devices or sources. This is because their clocks may be drastically out of sync. The new sub-streams support in Stream Analytics will offer this powerful new capability with very simple language constructs. A new keyword OVER is being introduced to extend the TIMESTAMP BY clause for this purpose. More details can be found at the TIMESTAMP documentation page.

image

Process data from different senders (toll stations) without applying time policies across different senders. The input data is partitioned based on TollId.

Egress to Azure functions: Azure Functions is a serverless compute service in Azure that helps users run their custom code triggered by events occurring in Azure or third-party services. This ability of Azure Functions to respond to triggers makes it a natural output target for Azure Stream Analytics. Today, we are making egress to Azure functions from Stream Analytics generally available. This output adapter is designed to allow users to connect Stream Analytics to Azure Functions, and run a script or piece of code to trigger downstream workflows and accelerate response to key events. For example, it will now make it a lot easier for developers to send out email alerts or SMS notifications when certain pre-defined conditions such as overheating or hazards are observed on the factory floor. Egress to Azure functions will also allow developers to write the output of Stream Analytics to targets that are currently not supported out of the box such as Azure Redis Cache. Also, developers can author custom logic that will allow Azure Stream Analytics to connect to a variety of other Azure services or apps outside the Azure ecosystem. Additional details can be found at the Azure Stream Analytics documentation page.

Query Compatibility: Compatibility level is used to represent any query behavior change introduced in Azure Stream Analytics. In extremely rare cases, a new compatibility level could introduce a breaking change for a job. Users of Stream Analytics now can set a choice of compatibility level for any job to ensure that they keep running without any failure. Compatibility level can be easily set using Azure portal (see below), or by using the create job REST API call. More details can be found at the Configure compatibility level documentation page.

compat level

Setting to define compatibility level on the Azure portal

We hope that you find these features valuable. We would love to hear your feedback and request for new features via our user voice portal.

Supporting AzureAD Conditional Access Policy across VSTS

$
0
0
In February 2017, VSTS announced support for Azure Active Directory Conditional Access Policy (CAP).  One caveat that was called out in that announcement was that alternate authentication mechanisms, such as personal access tokens, would not enforce CAP. As I discussed previously, many VSTS administrators gave us feedback that they need a way to ensure their users... Read More

Lambda Architecture using Azure #CosmosDB: Faster performance, Low TCO, Low DevOps

$
0
0

image

Azure Cosmos DB provides a scalable database solution that can handle both batch and real-time ingestion and querying and enables developers to implement lambda architectures with low TCO. Lambda architectures enable efficient data processing of massive data sets. Lambda architectures use batch-processing, stream-processing, and a serving layer to minimize the latency involved in querying big data.

To implement a lambda architecture, you can use a combination of the following technologies to accelerate real-time big data analytics:

We wrote a detailed article that describes the fundamentals of a lambda architecture based on the original multi-layer design and the benefits of a "rearchitected" lambda architecture that simplifies operations.

What is a lambda architecture?

image

The basic principles of a lambda architecture are depicted in the figure above:

  1. All data is pushed into both the batch layer and speed layer.
  2. The batch layer has a master dataset (immutable, append-only set of raw data) and pre-computes the batch views.
  3. The serving layer has batch views for fast queries.
  4. The speed layer compensates for processing time (to the serving layer) and deals with recent data only.
  5. All queries can be answered by merging results from batch views and real-time views or pinging them individually.

Speed layer

For speed layer, you can utilize the Azure Cosmos DB change feed support to keep the state for the batch layer while revealing the Azure Cosmos DB change log via the Change Feed API for your speed layer.

image

What’s important in these layers:

  1. All data is pushed only into Azure Cosmos DB, thus you can avoid multi-casting issues.
  2. The batch layer has a master dataset (immutable, append-only set of raw data) and pre-computes the batch views.
  3. The serving layer is discussed in the next section.
  4. The speed layer utilizes HDInsight (Apache Spark) to read the Azure Cosmos DB change feed. This enables you to persist your data as well as to query and process it concurrently.
  5. All queries can be answered by merging results from batch views and real-time views or pinging them individually.

For code example, please see here.

Batch and serving layers

Since the new data is loaded into Azure Cosmos DB (where the change feed is being used for the speed layer), this is where the master dataset (an immutable, append-only set of raw data) resides. From this point onwards, you can use HDInsight (Apache Spark) to perform the pre-compute functions from the batch layer to serving layer, as shown in the following figure:

image

What’s important in these layers:

  1. All data is pushed only into Azure Cosmos DB (to avoid multi-cast issues).
  2. The batch layer has a master dataset (immutable, append-only set of raw data) stored in Azure Cosmos DB. Using HDI Spark, you can pre-compute your aggregations to be stored in your computed batch views.
  3. The serving layer is an Azure Cosmos DB database with collections for the master dataset and computed batch view.
  4. The speed layer is discussed later in this article.
  5. All queries can be answered by merging results from the batch views and real-time views or pinging them individually.

For code example, please see here and for complete code samples, see azure-cosmosdb-spark/lambda/samples including:

  • Lambda Architecture Rearchitected - Batch Layer HTML | ipynb
  • Lambda Architecture Rearchitected - Batch to Serving Layer HTML | ipynb

Speed layer

As previously noted, using the Azure Cosmos DB Change Feed Library allows you to simplify the operations between the batch and speed layers. In this architecture, use Apache Spark (via HDInsight) to perform the structured streaming queries against the data. You may also want to temporarily persist the results of your structured streaming queries so other systems can access this data.

image
To do this, create a separate Azure Cosmos DB collection to save the results of your structured streaming queries. This allows you to have other systems access this information not just Apache Spark. As well with the Azure Cosmos DB Time-to-Live (TTL) feature, you can configure your documents to be automatically deleted after a set duration. For more information on the Azure Cosmos DB TTL feature, see Expire data in Azure Cosmos DB collections automatically with time to live.

Lambda Architecture using Azure Cosmos DB: Faster performance, Low TCO, Low DevOps

As noted above, you can simplify the original lambda architecture (with batch, serving, and speed layers) by using Azure Cosmos DB, Azure Cosmos DB Change Feed Library, Apache Spark on HDInsight, and the native Spark Connector for Azure Cosmos DB.

image

This simplifies not only the operations but also the data flow.

  1. All data is pushed into Azure Cosmos DB for processing
  2. The batch layer has a master dataset (immutable, append-only set of raw data) and pre-computes the batch views
  3. The serving layer has batch views of data for fast queries.
  4. The speed layer compensates for processing time (to the serving layer) and deals with recent data only.
  5. All queries can be answered by merging results from batch views and real-time views.

Next steps

If you haven't already, download the Spark to Azure Cosmos DB connector from the azure-cosmosdb-spark GitHub repository and explore the additional resources in the repo:

You might also want to review the Apache Spark SQL, DataFrames, and Datasets Guide and the Apache Spark on Azure HDInsight article. The full version of this article is published in our docs. Using the steps outlined in this blog, anyone, from a large enterprise to an individual developer can now build a lambda architecture for big data with Azure Cosmos DB in a matter of minutes. You can Try Azure Cosmos DB for free today, no sign up or credit card required. Stay up-to-date on the latest Azure Cosmos DB news and features by following us on Twitter #CosmosDB, @AzureCosmosDB.

-    Your friends at Azure Cosmos DB

Full MeitY accreditation enables Indian public sector to deploy on Azure

$
0
0

Microsoft recently became one of the first global cloud service providers to achieve full accreditation by the Ministry of Electronics and Information Technology (MeitY) for the Government of India. MeitY lists accredited cloud service providers in the government Cloud Services Directory, which enables public sector organizations to compare and procure those services.

Making government services available to citizens online is a key part of the Digital India programme which aims to “transform India into a digitally empowered society and knowledge economy.” With the MeitY accreditation, referred to by MeitY as empanelment, Microsoft is now positioned to fully partner with India’s public sector organizations as they move to reshape India’s economic landscape.

Through Microsoft Azure, public sector organizations in India can now draw on a wide range of deployment models and service offerings, including Infrastructure as a Service (IaaS), Platform as a Service (PaaS), Disaster Recovery as a Service, Dev/Test, Virtual Desktop as a Service, and Managed Backup.

The MeitY accreditation was the result of a rigorous audit process conducted by the Standardization Testing and Quality Certification (STQC) Directorate, a government organization that provides quality assurance services. The evaluation framework is based on the work of the Meghraj Cloud Initiative, established by and for the Government of India, which governs the implementation of public sector IT services.

The full MeitY accreditation adds to the Azure compliance portfolio of more than 70 offerings, the largest in the industry, with more than 30 offerings specific to regions and countries around the globe, including Argentina, Australia, Canada, China, the EU, Germany, Japan, Malaysia, the Netherlands, New Zealand, Singapore, Spain, the UK and US. The accreditation recognizes the robust nature of Azure controls, which are built on stringent, widely-recognized, and independently-verified standards, including ISO 27001 and 27018, SOC 1,2, and 3, PCI DSS, and CSA STAR. Azure’s compliance foundation of dozens of standards and hundreds of controls makes it easier for customers to build secure and compliant solutions.

More information


Three new reasons to love the TSI explorer

$
0
0

Today we’re pleased to announce three new Time Series Insights (TSI) explorer capabilities that we think our users are going to love. 

  1. First, we are delighted to share that the TSI explorer, the visualization service of TSI, is now generally available and backed by our SLA. 
  2. Second, we’ve made the TSI explorer more accessible and easier to use for those with visual and fine-motor disabilities.
  3. And finally, we’ve made it easy to export aggregate event data to other analytics tools like Microsoft Excel. 

Now that the TSI explorer is generally available, users will notice that the explorer is backed by TSI’s service level agreement (SLA), and we’ve removed the preview moniker from the backsplash when the explorer is loading. We have many customers using TSI in production environments and we’re thrilled to offer them the same SLA that backs the rest of the product. The ActionPoint IoT-PREDICT solution is a great example of one of those customers using the TSI explorer to enable their customers to explore and analyze time series data quickly. Check out their solution below.

There are no limits to what people can achieve when technology reflects the diversity of everyone who uses it. Transparency, accountability, and inclusion aren’t just built into our culture. They’re reflected in products and services designed for people of all abilities. With this in mind, it’s critical to our team that everyone can easily glean insights from their data using TSI, and these new capabilities significantly improve TSI’s usability for those with visual and fine-motor skill disabilities. The most obvious example of this work is the new table control that allows users to view aggregated data in a tabular format. While we made many less obvious improvements that make TSI more inclusive, two that I’m especially excited to share is TSI’s improved keyboard navigation and the addition of full narrator support. While we’re proud of the new functionality we delivered today, we think of accessibility and inclusion as core design principles and will continue to invest in feature work that takes advantage of them. 

Finally, we are excited to deliver a feature that many of our customers have been asking for – aggregate event data integration with Microsoft Excel. With the addition of the table, users can now simply export aggregate data as a CSV for integration with other analytics apps, like Microsoft Excel. This new capability enables users to take advantage of familiar tools that are already a part of their workflow for analyzing and processing data. Users will be able to take aggregate data from TSI and export it to any tool that can read CSV files. Users will still be able to export raw data as a CSV or JSON, but aggregate data export fulfills a common ask from our community. 

Here’s a screenshot of the new table and the CSV export:

image
We are excited about these new updates, but we are even more excited about what’s to come, so stay up to date on all things Time Series Insights by following us on Twitter. Don’t forget to check out the Microsoft Internet of Things blog for news from our peers in the Azure IoT engineering group. 

Integrate Azure Security Center alerts into SIEM solutions

$
0
0

We heard from several customers that you need a way to view your Azure Security Center alerts in your SIEM solution for a centralized view of your security posture across your organization. Today, we are excited to announce the public preview of a new feature called SIEM Export that allows you to export Azure Security Center alerts into popular SIEM solutions such as Splunk and IBM QRadar. We are continuing to invest in the number of partners we support. This feature is part of our on-going commitment to provide unified security management and protection for your cloud and on-premises workloads.

Security Center uses a variety of detection capabilities to alert you of potential threats to your environment. The alerts can tell you what triggered the alert, what in your environment was targeted, the source of the attack, and if necessary, remediation steps. You also have the flexibility to set up custom alerts to address specific needs in your environment.

Now you can take these alerts from Security Center and integrate them into your own SIEM solutions, so you can quickly view what needs your attention from one management place and take action.

To move your Azure Security Center alerts to a partner SIEM solution, you first need to complete a few steps of using Azure Monitor and then Event Hub. Azure Security Center alerts are published to the Azure Monitor Activity log, one of the log types available through Azure Monitor. From Azure Monitor, you export your logs using the Azure Monitoring single pipeline to an Event Hub. Finally, on the SIEM server, you need to install a partner SIEM connector. Then you can stream from the Event Hub your logs into the SIEM solution.

image

Figure 1 : High-level pipeline overview

splunk

Figure 2: Azure Security Center alerts in Splunk

In this public preview version, due to customer feedback, we prioritized releasing security alerts. In upcoming releases, we will enrich the data set with security recommendations.

To get started with the integration of Azure Security Center alerts with your SIEM solutions, follow the detailed steps in our documentation.

For any feedback/additional information contact: ASC_SIEM@microsoft.com.

This feature is available for the standard Azure Security Center tier. Try Azure Security Center alerts for your SIEM solutions today.

SDKs Now Available for Latest Bing Search APIs

$
0
0

We are pleased to announce preview availability of SDKs for the Cognitive Services - Bing Search APIs. Currently available as REST APIs, the Bing APIs v7 now have SDKs in four languages: C#, Java, Node.js, and Python. These SDKs include offerings such as Bing Web Search, Bing Image Search, Bing Custom Search, Bing News Search, Bing Video Search, Bing Entity Search, and Bing Spell Check. 

Bing SDKs At a Glance

Get Started

For C#, both NuGet packages and SDKs are available for individual Bing offerings. The best place to start is with C# samples. These samples provide an easy to follow step-by-step guide on running various application specific scenarios through corresponding NuGet packages. Each Bing offering has corresponding samples along with a NuGet package that you can use to build your application on top of.

Read the full post on the Azure blog.

Announcing TypeScript 2.7

$
0
0
Today we’re proud to announce the release of TypeScript 2.7!

If you’re not familiar with TypeScript, it’s a language that brings optional static types to JavaScript by building on JavaScript itself. Running TypeScript code through its compiler emits clean readable JavaScript that runs on any browser, and can also make bleeding-edge ECMAScript features you write work on older browsers. That means that you can take advantage of the design time tooling and safety of types (like code completion & navigation), while still leveraging the familiarity, community, and ubiquity of JavaScript.

But if you already know what TypeScript is and want to start using 2.7, go ahead and get it on NuGet or download it over npm:

npm install -g typescript

Visual Studio 2015 users (who have Update 3) can install TypeScript 2.7 from here, and Visual Studio 2017 users using version 15.2 or later will be able to get TypeScript by simply installing it from here. Sublime Text Plugin users can install the new version from Package Control.

TypeScript 2.7 will be available for Visual Studio Code very soon, but eager users can get it working pretty easily in the meantime.

We’ve got a lot in 2.7. While you can always take a look at the roadmap, we’ve put together a quick list for a bird’s eye view of this release:

We’ve also put together a breaking changes section towards the end of this post which existing users should be aware of.

So without further ado, let’s see what this release brings!

Stricter class property checks

TypeScript 2.7 introduces a new strictness flag named --strictPropertyInitialization!

This flag makes sure that each instance property of a class gets set in the constructor body, or by a property initializer. In a sense, it brings some of the definite assignment checks from variables to instance properties in classes. For example:

class C {
    foo: number;
    bar = "hello";
    baz: boolean;
//  ~~~
//  Error! Property 'baz' has no initializer and is not assigned directly in the constructor.
    constructor() {
        this.foo = 42;
    }
}

In the above, baz never gets set, and TypeScript reports an error. If we truly meant for baz to potentially be undefined, we should have declared it with the type boolean | undefined.

There are certain scenarios where properties might be initialized indirectly (perhaps by a helper method or dependency injection library). In those cases, you can convince the type system you know better by using the definite assignment assertions for your properties.

class C {
    foo!: number;
    // ^
    // Notice this exclamation point!
    // This is the "definite assignment assertion" modifier.
    constructor() {
        this.initialize();
    }

    initialize() {
        this.foo = 0;
    }
}

Keep in mind that --strictPropertyInitialization will be turned on along with other --strict mode flags, which can impact your project. You can set the strictPropertyInitialization setting to false in your tsconfig.json‘s compilerOptions, or --strictPropertyInitialization false on the command line to turn off this checking.

Definite assignment assertions

As expressive as we try to make the type system, we understand there are certain times you might know better than TypeScript.

As we mentioned above, definite assignment assertions are a new syntax you can use to convince TypeScript that a property will definitely get assigned. But in addition to working on class properties, TypeScript 2.7 also allows you to use this feature on variable declarations!

let x!: number[];
initialize();
x.push(4);

function initialize() {
    x = [0, 1, 2, 3];
}

If we hadn’t added an exclamation point/bang (!) after x, TypeScript would have reported that x was never initialized. This can be handy in deferred-initialization, or re-initialization scenarios.

Easier ECMAScript module interoperability

Before ECMAScript modules were standardized in ES2015, the JavaScript ecosystem had several different module formats that worked in different ways. Once the standard passed, the community was left with a question of how to best interoperate with existing “legacy” module formats.

TypeScript and Babel took different approaches, and even now, there really isn’t a locked down standard. The short story is that if you’ve used Babel, Webpack, or React Native, and expected different import behaviors than you were used to, we have a new compiler option for you called --esModuleInterop.

Babel and Webpack allow users to import these CommonJS modules as default imports, but also provide each property on the namespace import (unless the module was marked with an __esModule flag).

import _, { pick } from "lodash";

_.pick(...);
pick(...);

Because TypeScript’s behavior differs, we added the --allowSyntheticDefaultImports flag in TypeScript 1.8 to allow users to get this behavior for type-checking (but not emit).

In general, TypeScript’s view of CommonJS (and AMD) modules is that namespace imports always correspond to the shape of a CommonJS module object, and that a default import just corresponds to a member on that module named default. Under this assumption, you can create a named import

import { range } from "lodash";

for (let i of range(10)) {
    // ...
}

However, ES namespace imports aren’t callable, so this approach doesn’t always make sense.

import * as express from "express";

// Should be an error in any valid implementation.
let app = express();

To give users the same runtime behavior as Babel or Webpack, TypeScript provides a new --esModuleInterop flag when emitting to

legacy module formats.

Under the new --esModuleInterop flag, these callable CommonJS modules must be imported as default imports like so:

import express from "express";

let app = express();

We strongly suggest that Node.js users leverage this flag with a module target of commonjs for libraries like express, which export a callable/constructable module.

Webpack users may want to use this as well; however, your code should target esnext modules with a moduleResolution strategy of commonjs. Using esnext modules with --esModuleInterop really only has the effect of turning on --allowSyntheticDefaultImports.

unique symbol types and const-named properties

TypeScript 2.7 understands ECMAScript symbols more deeply, allowing you to use them more flexibly.

One highly-demanded use-case is being able to declare well-typed properties with symbols. For an example, take the following:

const Foo = Symbol("Foo");
const Bar = Symbol("Bar");

let x = {
    [Foo]: 100,
    [Bar]: "hello",
};

let a = x[Foo]; // has type 'number'
let b = x[Bar]; // has type 'string'

As you can see, TypeScript can keep track of the fact that x has properties declared using the symbols Foo and Bar since both Foo and Bar were declared as constants. TypeScript leverages this fact and gives both Foo and Bar a new kind of type: unique symbols.

unique symbols are subtype of symbol, and are produced only from calling Symbol() or Symbol.for(), or from explicit type annotations. They can only occur on const declarations and readonly static properties, and in order to reference an existing unique symbol type, you’ll have to use the typeof operator. Each reference to a unique symbol implies a completely unique identity that’s tied to a given declaration.

// Works
declare const Foo: unique symbol;

// Error! 'Bar' isn't a constant.
let Bar: unique symbol = Symbol();

// Works - refers to a unique symbol, but its identity is tied to 'Foo'.
let Baz: typeof Foo = Foo;

// Also works.
class C {
    static readonly StaticSymbol: unique symbol = Symbol();
}

Because each unique symbol has a completely separate identity, no two unique symbol types are assignable or comparable to each other.

const Foo = Symbol();
const Bar = Symbol();

// Error: can't compare two unique symbols.
if (Foo === Bar) {
    // ...
}

Other potential use-cases include using symbols for tagged unions.

// ./ShapeKind.ts
export const Circle = Symbol("circle");
export const Square = Symbol("square");

// ./ShapeFun.ts
import * as ShapeKind from "./ShapeKind";

interface Circle {
    kind: typeof ShapeKind.Circle;
    radius: number;
}

interface Square {
    kind: typeof ShapeKind.Square;
    sideLength: number;
}

function area(shape: Circle | Square) {
    if (shape.kind === ShapeKind.Circle) {
        // 'shape' has type 'Circle'
        return Math.PI * shape.radius ** 2;
    }
    // 'shape' has type 'Square'
    return shape.sideLength ** 2;
}

Cleaner output in --watch mode

TypeScript’s --watch mode now clears the screen after a re-compilation is requested. This can make it much easier to read messages from the current compilation. We’d like to thank both Philipp Kretzschmar and Joshua Goldberg for helping out on this feature!

Prettier --pretty output

TypeScript’s --pretty flag can make error messages easier to read and manage. We have two main improvements in this functionality. First, thanks to a pull request from Joshua Goldberg --pretty now uses colors for file names, diagnostic codes, and line numbers. Second, thanks to a separate pull request by Orta Therox, file names and positions are formatted in such a way that common terminals (including the one embedded in Visual Studio Code) can allow a Ctrl+Click, Cmd+Click, Alt+Click, etc. to jump to the appropriate location in your editor

Numeric Separators

TypeScript 2.7 introduces support for ECMAScript’s numeric separators proposal. This feature allows users to place underscores (_) in between digits to visually distinguish groups of digits (much like how commas and periods are often used to group numbers).

// Constants
const COULOMB = 8.957_551_787e9; // N-m^2 / C^2
const PLANCK = 6.626_070_040e-34; // J-s
const JENNY = 867_5309; // C-A-L^2

These separators are also useful for binary and hexadecimal numbers.

let bits = 0b0010_1010;
let routine = 0xC0FFEE_F00D_BED;
let martin = 0xF0_1E_

Note that, perhaps counterintuitively, numbers in JavaScript are not well-suited to represent credit card and telephone numbers. Strings will act as better representations in such cases.

Fixed Length Tuples

In TypeScript 2.6 and earlier, [number, string, string] was considered a subtype of [number, string]. This was motivated by TypeScript’s structural nature; the first and second elements of a [number, string, string] are respectively subtypes of the first and second elements of [number, string], and the “trailing” string type is assignable to the union of element types from [number, string]. However, after examining real world usage of tuples, we noticed that most situations in which this was permitted was typically undesirable.

Thanks to a pull request from Tycho Grouwstra, tuple types now encode their arity into the type of their respective length property, and tuples of different arities are no longer assignable to each other. This is accomplished by leveraging numeric literal types, which now allow tuples to be distinct from tuples of different arities.

Conceptually, you might consider the type [number, string] to be equivalent to the following declaration of NumStrTuple:

interface NumStrTuple extends Array<number | string> {
    0: number;
    1: string;
    length: 2; // using the numeric literal type '2'
}

Note that this is a breaking change. If you need to resort to the original behavior in which tuples only enforce a minimum size, you can use a similar declaration that does not explicitly define a length property, falling back to number.

interface MinimumNumStrTuple extends Array<number | string> {
    0: number;
    1: string;
}

in operator narrowing and accurate instanceof

TypeScript 2.7 brings two new changes to type narrowing – the ability to get a more specific type for a value by running certain types of checks called “type guards”.

First, the instanceof operator is now leverages the inheritance chain instead of

relying on structural compatibility, more accurately reflecting whether how instanceof may behave at runtime. This can help avoid certain complex issues when instanceof narrows from structurally similar (but unrelated) types.

Second, thanks to GitHub user IdeaHunter, the in operator now acts as a type guard, narrowing out types that don’t explicitly declare properties of a given name.

interface A { a: number };
interface B { b: string };

function foo(x: A | B) {
    if ("a" in x) {
        return x.a;
    }
    return x.b;
}

Smarter object literal inference

There are certain patterns in JavaScript where users will omit properties so that all uses of those properties are effectively undefined.

let foo = someTest ? { value: 42 } : {};

TypeScript used seek the best common supertype between { value: number } and {}, ending up with {}. While being technically correct, this wasn’t very useful.

Starting with version 2.8, TypeScript now “normalizes” each object literal’s type to account for every property, inserting an optional property of type undefined on each object type, and unioning them

together.

From the above example, the new type of foo would be { foo: number } | { foo?: undefined }. Combined with the ways TypeScript can narrow, this lets us write expressive code that TypeScript can still understand. As another example, take the following:

// Has type
//  | { a: boolean, aData: number, b?: undefined }
//  | { b: boolean, bData: string, a?: undefined }
let bar = Math.random() < 0.5 ?
    { a: true, aData: 100 } :
    { b: true, bData: "hello" };

if (bar.b) {
    // TypeScript now knows that 'bar' has the type
    //
    //   '{ b: boolean, bData: string, a?: undefined }'
    //
    // so it knows that 'bData' is available.
    bar.bData.toLowerCase()
}

Here, TypeScript is able to narrow the type of bar based on checking its b property, allowing us to access the bData property.

Breaking Changes

This release brings some minor breaking changes:

  • Tuples now have fixed numeric length properties.
  • instanceof and in now have slightly different narrowing behavior.
  • Inferences from generic signatures now use base constraint types of type parameters instead of any.
  • The setSelectionRange API now only accepts "forward" | "backward" | "none".
  • allowSyntheticDefaultImports no longer synthesizes default imports from TypeScript implementation files (i.e. .ts and .tsx).

Additionally, as mentioned above, users with the --strict setting on will automatically be opted in to --strictPropertyInitialization which errors on properties which are not directly initialized on their declarations or in constructor bodies. While easy to opt out of by explicitly turning this check off, your code may be impacted.

You can get a detailed look from our list of breaking changes issues for TypeScript 2.7 on GitHub, or keep track of general breaking changes on our Breaking Changes wiki page.

What’s next?

We always try to bring more joy to the TypeScript experience. We hope this release continues the tradition of making you more productive and expressive to bring that joy to the core experience.

Now that 2.7 is out, we’ve got some fantastic things in mind for TypeScript 2.8, including conditional types! While plans are still currently in flux, you can keep a close watch on our roadmap to get an idea of what’s on the TypeScript horizon.

Let us know what you think of this release over on Twitter or in the comments below, and feel free to report issues and suggestions filing a GitHub issue.

Happy Hacking!

New Azure Data Factory self-paced hands-on lab for UI

$
0
0

A few weeks back, we announced the public preview release of the new browser-based V2 UI experience for Azure Data Factory. We’ve since partnered with Pragmatic Works, who have been long-time experts in the Microsoft data integration and ETL space, to create a new set of hands on labs that you can now use to learn how to build those DI patterns using ADF V2.

In that repo, you will find data files and scripts in the Deployment folder. There are also lab manual folders for each lab module as well an overview presentation to walk you through the labs. Below you will find more details on each module.

The repo also includes a series of PowerShell and database scripts as well as Azure ARM templates that will generate resource groups that the labs need in order for you to successfully build out an end-to-end scenario, including some sample data that you can use for Power BI reports in the final Lab Module 9.

Here is how the individual labs are divided:

  • Lab 1 - Setting up ADF and Resources, Start here to get all of the ARM resource groups and database backup files loaded properly.
  • Lab 2 - Lift and Shift of SSIS to Azure, Go to this lab if you have existing SSIS packages on-prem that you’d like to migrate directly to the cloud using the ADF SSIS-IR capability.
  • Lab 3 - Rebuilding an existing SSIS job as an ADF pipeline.
  • Lab 4 - Take the new ADF pipeline and enhance it with data from Cloud Sources.
  • Lab 5 - Modernize the DW pipeline by transforming Big Data with HDInsight.
  • Lab 6 - Go to this lab to learn how to create copy workflows in ADF into Azure SQL Data Warehouse.
  • Lab 7 - Build a trigger-based schedule for your new ADF pipeline.
  • Lab 8 - You’ve operationalized your pipeline based on a schedule. Now learn how to monitor and manage that DI process.
  • Lab 9 - Bringing it all Together

Thank you and we hope that you enjoy using the lab to learn how to build scale-out data integration project using Azure Data Factory!

Customer success stories with Azure Backup: Russell Reynolds

$
0
0

This is the first of a blog series which presents success stories from customers with Azure Backup. Here we discuss how Azure Backup helped Russell Reynolds

Customer background

Russell Reynolds is a global leadership and executive search firm which helps their clients with assessment, executive search, and leadership transitions within boards of directors, chief executive officers, and other key roles within the C-suite. Having moved to Azure to reduce their IT and datacenter costs, the company started to look for an alternative to their tape backups which was proving both cumbersome and expensive. Enter Azure Backup.

How Azure Backup helped

With Microsoft System Center 2012 R2 Data Protection Manager they backup their VMWare workloads locally and to Azure cloud where they can be retained up to 99 years eliminating their needs for tapes. They used the Azure Backup Offline Seeding capability to copy their initial 10 TB of data to cloud. Thereafter, Azure Backup transfers only incremental data during daily backups, reducing storage consumption and need for huge bandwidth.

“Even though we used very reputable partners for tape handling, it always made us nervous when our data left our facilities", says David W.Pfister, Director of Global Distibuted Infrastructure and Client Services at Russell Reynolds Associates.“Now we know that our data is either on our premises or in the Azure cloud, which delivers greater peace of mind.”

Putting backup in Azure also yields savings.“Now we back up to a cheap bunch of disks rather than an expensive storage solution,” says Sean DeLessio, Lead Engineer on the Distributed Infrastructure Team at Russell Reynolds.“We don’t have to worry about managing space on expensive purpose-built backup storage systems. We have no tape costs, management costs, nothing. Backup is dramatically cheaper with Azure.”

By implementing backup and business continuity/disaster recovery in the cloud, Russell Reynolds has been able to reallocate one full-time staff member to new projects."We’ve been able to transfer resources from 'keeping the lights' on activities to new project work that makes the business more competitive," Pfister says.

Relieving staff members of mundane, repetitive chores such as managing tapes also results in a better quality of life for employees.“What we’ve found is that the cloud has allowed our staff to focus on activities that are more strategic and architectural to learning new skills. It’s really rejuvenated them. We’ve seen a renewed focus on and excitement in learning, which we’ve made a priority”, Pfister says.

Summary

By using Azure Backup and getting better protection for business-critical workloads, greater peace of mind, lower costs, and an excited staff, Russell Reynolds believes that these add up to a pretty good ROI.“Our market is always moving faster, and the cloud allows us to be more nimble and aggressive,” Pfister says."We can focus more on where we want to go and less on how to get there. We’re no longer worrying about backup, DR, and other operational tasks.” 

Source: Azure case study from Russel Reynolds

Related links and additional content

 

Jenkins on Azure: from zero to hero

$
0
0

We are excited to announce a refresh for the Microsoft Jenkins offer in Azure Marketplace.

Like the previous version, this offer allows customers to run a Jenkins master on a Linux (Ubuntu 16.04 LTS) VM in Azure. The price is the cost of running the software components and Azure infrastructure deployed by the solution template. If you are looking to run Jenkins in the cloud, you will have full control over the Jenkins master you set up.

So why are we so excited about this refresh? Because now you can go from zero to hero. Just set up the server with the configurations you need and start building in the least amount of time.

Some highlights:

  • Virtual network: We added support for VNET so that you can provision Jenkins in your own virtual network/subnet.

  • Azure integration: You can choose to enable Managed Service Identity (MSI) or supply an Azure Service Principal. We add the credential in Jenkins credential store automatically so that you don't have to do this manually. Choose off if you prefer to set this up later.
  • Build: By enabling VM agent or Azure Container Instances (ACI), you can start building your projects in Azure right away. We create the default settings, so that you don't need to go through the arduous manual steps to add a cloud in the Jenkins dashboard. If you have any custom requirements, just edit the configurations to update the settings.
    • If you enable VM agent, we add a new cloud called Win-Agent in Manage Jenkins→Configuration system based on a built-in Windows Server 2016 image and a Linux-Agent based on a built-in Ubuntu image. 
    • If you enable ACI, we add Aci Agents in Manage JenkinsConfiguration system. You can scale out to the cloud and run your build using a container agent created in Azure Container Instances. To try out, you can start from the Configure the Azure Container Agents plugin step in this tutorial, make sure you have the right label and docker image, and build the Spring PetClinic application in Azure. 

The solution template is open source. So, you can be part of the community and start contributing.

Another new addition is the Azure Active Directory plugin which supports authentication and authorization via Azure Active Directory. In our latest release in 2018, we added project-based authorization so matrix-based authorization is not the only choice.

Did you know that you can back your Jenkins configurations up in Azure? Take a look at the disaster recovery script. Our team created this handy script you can use to mount $JENKINS_HOME to an Azure managed disk, also allowing you to reuse the Jenkins configurations on another instance.

Let us know what you think and share with us what other support you'd like, either via comment below or email us at Jenkins Azure Support.

 


Analysis of Trump’s State of the Union Speech, with R

$
0
0

President Trump's State of the Union speech was last night, and it seemed to me it dragged on a bit. That's because it was apparently the slowest SOTU speech in history, based on average number of words spoken per minute. The chart below, based on these data, was created by Josh Katz. (The R code for the chart is here. Note the use of his needs package to load the required R packages.)

Trump sotu

Peter Aldhous at Buzzfeed analyzed last night's State of the Union speech as well. Not only was the speech delivered slowly, the script was at a 9-year-old's reading level, following a long-term decline in the complexity of State of the Union speeches.

SOTU-reading-level

You can find more analysis of this and past SOTU speeches at the link below. The R code behind the analysis can be found here. (You may also want to check out this analysis of Trump's Twitter activity and the associated R code.)

Buzzfeed: “I Have The Best Words.” How Trump’s First SOTU Compares To All The Others.

 

How is AI for video different from AI for images

$
0
0

Extracting insights from video, or using AI technologies, presents an additional set of challenges and opportunities for optimization as compared to images. There is a misconception that AI for video is simply extracting frames from a video and running computer vision algorithms on each video frame. While you can certainly do that but that would not help you get the insights that you are truly after. In this blog post, I will use a few examples to explain the shortcomings of taking an approach of just processing individual video frames. I will not be going over the details of the additional algorithms that are required to overcome these shortcomings. Video Indexer implements several such video specific algorithms.

Person presence in the video

Look at the first 25 seconds of this video.

Notice that Doug is present for the entire 25 seconds.

If I were to draw a timeline for when Doug is present in the video, it should be something like this.

image

 

Note the fact that Doug is not always facing the camera. Seven seconds in the video he is looking at Emily. Same thing happens at 23 seconds.

If you were to run face detection at these times in the video, Doug’s face will not be detected (see screenshots below).

 

image

 

image

 

In other words, if you just do face detection on each video frame you would not be able to draw a timeline as shown above. To get to the timeline, you would need to be able to track the face across video frames and account for side views of the face in between. Video Indexer does face tracking and as a result you see the full timeline that was showcased earlier.

Extracting topics/keywords using optical character recognition

Look at the following two frames.

image

These two frames are from a video where the presenter is on stage and obscuring the word “Microsoft” that is imprinted on the back wall. As a human you know what the word is “Microsoft”. If you run OCR over these two images, you will get “Microsc” and “crosoft” as the output. If you process the full sequence of frames in the video clip, you will get a lot of partial words like this. To reduce the noise and extract the correct word over the sequence of frames in a shot, you will need to apply an algorithm on the partial words. Video Indexer does so and hence you get better insights from the video.

Face recognition

A face recognition system consists of a face database that is built using a set of training images per person. It also provides a query function that does the job of extracting facial features from the query image and matching it against the face database. The output from the query function consists of a list of possible matches along with confidence values. The quality of the output of the query function will depend on the quality of the face database and the query image.

In the case of video, there will be multiple frames of video where the person is present in different head poses and lighting condition. One can take the approach of taking each frame where a person is present and querying the face recognition system. If you do that you will have a list of possible matches from the face database with different confidence values. There is also no guarantee that the potential matches will be the same across the sequence of frames. In other words, there is a need of an additional logic layer to determine the matching face. There is also an optimization opportunity to reduce the number of queries against the face recognition system by selecting the appropriate subset of frames to query against the face recognition system.

Video also provides the opportunity to build and augment the face database by using the correct variation of training images for a person from multiple video frames. This is possible if you have the logic to track a person across frames and a heuristic algorithm to evaluate the variations. Video Indexer does this and hence is able to build a higher quality face database from the provided videos.

A great developer experience for Ansible

$
0
0

As customers grow their deployed application in Azure, we are seeing increased interest in DevOps space for configuration management. In the rapidly evolving cloud space, bringing the on-premises expertise to fluently work in cloud brings increased efficiency. With our strong and growing partnership with Redhat, I am extremely excited to announce some key improvements with developer experience of Ansible on Azure.

Ansible in Azure Cloud Shell

Ansible is now available, pre-installed and ready to use for every Azure user in the Azure Cloud Shell. We want to make it really easy for anyone to get started with Ansible. The Azure Cloud Shell is a browser-based command-line experience that enables Ansible commands to be executed directly in the portal. This shell can run on any machine and any browser. It even runs on your phone!

With this enhancement you can use Ansible right in the Azure Portal. There is no need to install python dependencies, there is no additional configuration and no additional authentication! It just works!

azurecloudshell

Ansible extension in Visual Studio Code

We also have released an Ansible extension for Visual Studio Code that allows for faster development and testing of Ansible playbooks. You can use this extension to get code snippets for any Ansible module, get syntax highlighting and even run the playbook locally, in Docker containers, or directly in the Azure Cloud Shell.

vscode

I am really excited about the improvements in developer experiences for Ansible users on Azure. Go ahead and try Ansible in Azure and the new Visual Studio Code extension. To learn more, see the channel 9 update as well as our new Ansible documentation hub.

Thanks,

Corey

R Consortium funding for projects and R user groups

$
0
0

If you're an organizer of an R-focused meetup group, or are planning a community-led R conference, the 2018 R Consortium R User Group Support Program is now accepting applications for sponsorship. The 2017 program funded 76 user groups and 3 small conferences, and the program is expanding further in 2018. User groups now also receive a complimentary Meetup.com Pro account, and the grant levels for small conferences have increased. 

Similarly, if you have an idea for a project that could benefit the R community, the first ISC Call for Proposals for 2018 is now open. The Infrastructure Steering Committee of the R Consortium considers proposals from the community, and awards grants to those that are approved by the committee. Prior awardees have included the DBI package, R-hub, and Forwards Workshops for Women and Girls.

RConsortium_Horizontal_Pantone

These are fantastic programs benefiting all R users, in support of the R Consortium mission to foster the continued growth of R community and to support development of software to help R users. Funding for these programs comes from R Consortium members, so if you'd like to see more such programs consider asking your employer to join. 

R Consortium: The 2018 R Consortium R User Group Support Program is Underway ; R Consortium Call For Proposals: February 2018

Windows 10 SDK Preview Build 17083 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 17083 or greater). The Preview SDK Build 17083 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.

Known Issues

  • Installation on an operating system that is not a Windows 10 Insider Preview build is not supported and may fail.
  • Cannot deploy to a device: When attempting to deploy to a mobile device, it fails with the following error:  DEP0001: Unexpected Error: SmartDeviceException – Class not registered [0x80131500]

To work around this issue:

  1. Go to Administrative Command Prompt
  2. Run REGSVR32 “Program Files (x86)Windows Kits10bin10.0.17083.0x86SirepClient.dll”
  • XAML Designer fails to load:
    • To work around this issue, run a repair on the Windows SDK, or update you minimum target version of your app to be 10.0.17083.0.

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
  • 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.ApplicationModel {
  public enum AddResourcePackageOptions : uint
  public sealed class AppInstance
  public sealed class PackageCatalog {
    IAsyncOperationWithProgress&lt;PackageCatalogAddResourcePackageResult, PackageInstallProgress&gt; AddResourcePackageAsync(string resourcePackageFamilyName, string resourceID, AddResourcePackageOptions options);
    IAsyncOperation&lt;PackageCatalogRemoveResourcePackagesResult&gt; RemoveResourcePackagesAsync(IIterable&lt;Package&gt; 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&lt;bool&gt; 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&lt;bool&gt; LaunchForUserAsync(User user);
  }
}
namespace Windows.ApplicationModel.DataTransfer {
  public sealed class DataPackagePropertySet : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMap&lt;string, object&gt; {
    string ContentSourceUserActivityJson { get; set; }
  }
  public sealed class DataPackagePropertySetView : IIterable&lt;IKeyValuePair&lt;string, object&gt;&gt;, IMapView&lt;string, object&gt; {
    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&lt;bool&gt; GetIsPackageIdentityAllowedToInstallAsync(string correlationVector, string packageIdentityName, string publisherCertificateName);
    IAsyncOperation&lt;bool&gt; GetIsPackageIdentityAllowedToInstallForUserAsync(User user, string correlationVector, string packageIdentityName, string publisherCertificateName);
    IAsyncOperation&lt;IVectorView&lt;AppInstallItem&gt;&gt; SearchForAllUpdatesAsync(string correlationVector, string clientId, AppUpdateOptions updateOptions);
    IAsyncOperation&lt;IVectorView&lt;AppInstallItem&gt;&gt; SearchForAllUpdatesForUserAsync(User user, string correlationVector, string clientId, AppUpdateOptions updateOptions);
    IAsyncOperation&lt;AppInstallItem&gt; SearchForUpdatesAsync(string productId, string skuId, string correlationVector, string clientId, AppUpdateOptions updateOptions);
    IAsyncOperation&lt;AppInstallItem&gt; SearchForUpdatesForUserAsync(User user, string productId, string skuId, string correlationVector, string clientId, AppUpdateOptions updateOptions);
    IAsyncOperation&lt;IVectorView&lt;AppInstallItem&gt;&gt; StartProductInstallAsync(string productId, string flightId, string clientId, string correlationVector, AppInstallOptions installOptions);
    IAsyncOperation&lt;IVectorView&lt;AppInstallItem&gt;&gt; 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&lt;UserActivity&gt; activities);
    public static UserActivity TryParseFromJson(string json);
    public static IVector&lt;UserActivity&gt; TryParseFromJsonArray(string json);
  }
  public sealed class UserActivityChannel {
    public static void DisableAutoSessionCreation();
    IAsyncOperation&lt;IVector&lt;UserActivitySessionHistoryItem&gt;&gt; GetRecentUserActivitiesAsync(int maxUniqueActivities);
    IAsyncOperation&lt;IVector&lt;UserActivitySessionHistoryItem&gt;&gt; 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&lt;bool&gt; 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&lt;string&gt; 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&lt;DisplayInformation, object&gt; 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&lt;HolographicSpace, object&gt; 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&lt;PrintPageRange&gt; 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&lt;DeploymentResult, DeploymentProgress&gt; RequestAddPackageAsync(Uri packageUri, IIterable&lt;Uri&gt; dependencyPackageUris, DeploymentOptions deploymentOptions, PackageVolume targetVolume, IIterable&lt;string&gt; optionalPackageFamilyNames, IIterable&lt;Uri&gt; relatedPackageUris, IIterable&lt;Uri&gt; 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&lt;BitmapBounds&gt; sourceBounds, IReference&lt;BitmapBounds&gt; 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&lt;CreateMediaSourceAudioInputNodeResult&gt; CreateMediaSourceAudioInputNodeAsync(MediaSource mediaSource);
    IAsyncOperation&lt;CreateMediaSourceAudioInputNodeResult&gt; 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&lt;MediaFrameSourceInfo&gt; FrameSourceInfos { get; }
    IMapView&lt;Guid, object&gt; Properties { get; }
  }
  public sealed class MediaCaptureVideoProfileMediaDescription {
    IMapView&lt;Guid, object&gt; 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&lt;MediaCaptureVideoProfileMediaDescription&gt; 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&lt;string&gt; 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&lt;TimedMetadataStreamDescriptor&gt; GetTimedMetadataTracks();
    void SetTimedMetadataTracks(IIterable&lt;TimedMetadataStreamDescriptor&gt; 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&lt;TimeSpan&gt; ResourceDuration { get; }
  }
  public sealed class AdaptiveMediaSourceDownloadCompletedEventArgs {
    string ResourceContentType { get; }
    IReference&lt;TimeSpan&gt; ResourceDuration { get; }
  }
  public sealed class AdaptiveMediaSourceDownloadFailedEventArgs {
    string ResourceContentType { get; }
    IReference&lt;TimeSpan&gt; ResourceDuration { get; }
  }
  public sealed class AdaptiveMediaSourceDownloadRequestedEventArgs {
    string ResourceContentType { get; }
    IReference&lt;TimeSpan&gt; 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&lt;Guid&gt; PurposeGuid { get; set; }
  }
  public sealed class WwanConnectionProfileDetails {
    WwanNetworkIPKind IPKind { get; }
    IVectorView&lt;Guid&gt; 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&lt;MobileBroadbandModem, object&gt; IsInEmergencyCallModeChanged;
    IAsyncOperation&lt;MobileBroadbandPco&gt; 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&lt;uint, uint&gt; SendFinalFrameAsync(IBuffer data);
    IAsyncOperationWithProgress&lt;uint, uint&gt; 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&lt;HostName&gt; assignedClientIpv4Addresses, IIterable&lt;HostName&gt; assignedClientIpv6Addresses, VpnInterfaceId vpninterfaceId, VpnRouteAssignment assignedRoutes, VpnDomainNameAssignment assignedNamespace, uint mtuSize, uint maxFrameSize, bool reserved, IIterable&lt;object&gt; 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&lt;FindAllAccountsResult&gt; FindAllAccountsAsync(WebAccountProvider provider);
    public static IAsyncOperation&lt;FindAllAccountsResult&gt; FindAllAccountsAsync(WebAccountProvider provider, string clientId);
    public static IAsyncOperation&lt;WebAccountProvider&gt; FindSystemAccountProviderAsync(string webAccountProviderId);
    public static IAsyncOperation&lt;WebAccountProvider&gt; FindSystemAccountProviderAsync(string webAccountProviderId, string authority);
    public static IAsyncOperation&lt;WebAccountProvider&gt; FindSystemAccountProviderAsync(string webAccountProviderId, string authority, User user);
  }
}
namespace Windows.Security.Authentication.Web.Provider {
  public sealed class WebProviderTokenRequest {
    string ApplicationPackageFamilyName { get; }
    string ApplicationProcessName { get; }
    IAsyncOperation&lt;bool&gt; CheckApplicationForCapabilityAsync(string capabilityName);
  }
}
namespace Windows.Security.Credentials {
  public sealed class WebAccountProvider {
    bool IsSystemProvider { get; }
  }
}
namespace Windows.Services.Maps {
  public sealed class MapRouteDrivingOptions {
    IReference&lt;DateTime&gt; 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&lt;StoreCanAcquireLicenseResult&gt; CanAcquireStoreLicenseAsync(string productStoreId);
    IAsyncOperation&lt;StoreCanAcquireLicenseResult&gt; CanAcquireStoreLicenseForOptionalPackageAsync(Package optionalPackage);
    IAsyncOperationWithProgress&lt;StorePackageUpdateResult, StorePackageUpdateStatus&gt; DownloadAndInstallStorePackagesAsync(IIterable&lt;string&gt; storeIds);
    IAsyncOperation&lt;IVectorView&lt;StoreQueueItem&gt;&gt; GetAssociatedStoreQueueItemsAsync();
    IAsyncOperation&lt;StoreProductQueryResult&gt; GetStoreProductsAsync(IIterable&lt;string&gt; productKinds, IIterable&lt;string&gt; storeIds, StoreProductOptions storeProductOptions);
    IAsyncOperation&lt;IVectorView&lt;StoreQueueItem&gt;&gt; GetStoreQueueItemsAsync(IIterable&lt;string&gt; storeIds);
    IAsyncOperationWithProgress&lt;StorePackageUpdateResult, StorePackageUpdateStatus&gt; RequestDownloadAndInstallStorePackagesAsync(IIterable&lt;string&gt; storeIds, StorePackageInstallOptions storePackageInstallOptions);
    IAsyncOperation&lt;StoreUninstallStorePackageResult&gt; RequestUninstallStorePackageAsync(Package package);
    IAsyncOperation&lt;StoreUninstallStorePackageResult&gt; RequestUninstallStorePackageByStoreIdAsync(string storeId);
    IAsyncOperationWithProgress&lt;StorePackageUpdateResult, StorePackageUpdateStatus&gt; TrySilentDownloadAndInstallStorePackageUpdatesAsync(IIterable&lt;StorePackageUpdate&gt; storePackageUpdates);
    IAsyncOperationWithProgress&lt;StorePackageUpdateResult, StorePackageUpdateStatus&gt; TrySilentDownloadStorePackageUpdatesAsync(IIterable&lt;StorePackageUpdate&gt; storePackageUpdates);
    IAsyncOperation&lt;StoreUninstallStorePackageResult&gt; UninstallStorePackageAsync(Package package);
    IAsyncOperation&lt;StoreUninstallStorePackageResult&gt; UninstallStorePackageByStoreIdAsync(string storeId);
  }
  public sealed class StorePackageInstallOptions
  public sealed class StorePackageUpdateResult {
    IVectorView&lt;StoreQueueItem&gt; 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&lt;AppActivationResult&gt; LaunchAsync();
  }
  public sealed class AppExecutionStateChangeResult
  public sealed class AppResourceGroupInfo {
    IAsyncOperation&lt;AppExecutionStateChangeResult&gt; StartResumeAsync();
    IAsyncOperation&lt;AppExecutionStateChangeResult&gt; StartSuspendAsync();
    IAsyncOperation&lt;AppExecutionStateChangeResult&gt; StartTerminateAsync();
  }
  public enum AutoUpdateTimeZoneStatus
  public static class TimeZoneSettings {
    public static IAsyncOperation&lt;AutoUpdateTimeZoneStatus&gt; AutoUpdateTimeZoneAsync(TimeSpan timeout);
  }
}
namespace Windows.System.Diagnostics {
  public sealed class DiagnosticInvoker {
    IAsyncOperationWithProgress&lt;DiagnosticActionResult, DiagnosticActionState&gt; 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&lt;string&gt; WebSocketProtocolsRequested { get; }
    Deferral GetDeferral();
  }
}
namespace Windows.System.Inventory {
  public sealed class InstalledDesktopApp : IStringable
}
namespace Windows.System.Profile {
  public static class AnalyticsInfo {
    public static IAsyncOperation&lt;IMapView&lt;string, string&gt;&gt; GetSystemPropertiesAsync(IIterable&lt;string&gt; 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&lt;RemoteSystemWatcher, RemoteSystemEnumerationCompletedEventArgs&gt; EnumerationCompleted;
    event TypedEventHandler&lt;RemoteSystemWatcher, RemoteSystemWatcherErrorOcurredEventArgs&gt; ErrorOcurred;
  }
  public enum RemoteSystemWatcherError
  public sealed class RemoteSystemWatcherErrorOcurredEventArgs
}
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&lt;CompositionShape&gt;, IVector&lt;CompositionShape&gt;
  public sealed class CompositionSpriteShape : CompositionShape
  public enum CompositionStrokeCap
  public sealed class CompositionStrokeDashArray : CompositionObject, IIterable&lt;float&gt;, IVector&lt;float&gt;
  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&lt;DateTime&gt; 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&lt;CoreInputView, object&gt; XYFocusTransferredToPrimaryView;
    event TypedEventHandler&lt;CoreInputView, CoreInputViewTransferringXYFocusEventArgs&gt; 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&lt;UIElement, BringIntoViewRequestedEventArgs&gt; 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&lt;NavigationView, NavigationViewBackRequestedEventArgs&gt; BackRequested;
    event TypedEventHandler&lt;NavigationView, object&gt; PaneClosed;
    event TypedEventHandler&lt;NavigationView, NavigationViewPaneClosingEventArgs&gt; PaneClosing;
    event TypedEventHandler&lt;NavigationView, object&gt; PaneOpened;
    event TypedEventHandler&lt;NavigationView, object&gt; 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&lt;RichEditBox, ContentLinkChangedEventArgs&gt; ContentLinkChanged;
    event TypedEventHandler&lt;RichEditBox, ContentLinkInvokedEventArgs&gt; 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&lt;WebView, WebViewSeparateProcessLostEventArgs&gt; SeparateProcessLost;
  }
  public enum WebViewExecutionMode {
    SeparateProcess = 2,
  }
  public enum WebViewPermissionType {
    Screen = 5,
    WebVR = 6,
  }
  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&lt;ContentLinkProvider&gt;, IVector&lt;ContentLinkProvider&gt;
  public sealed class PlaceContentLinkProvider : ContentLinkProvider
}
namespace Windows.UI.Xaml.Input {
  public sealed class FocusManager {
    public static IAsyncOperation&lt;FocusMovementResult&gt; TryFocusAsync(DependencyObject element, FocusState value);
    public static IAsyncOperation&lt;FocusMovementResult&gt; TryMoveFocusAsync(FocusNavigationDirection focusNavigationDirection);
    public static IAsyncOperation&lt;FocusMovementResult&gt; 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&lt;RenderedEventArgs&gt; 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 17083 now available appeared first on Windows Developer Blog.

Viewing all 10804 articles
Browse latest View live


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