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

Azure Security Center and discovery of partner solutions

$
0
0

Azure Security Center offers integration with various 3rd party security solutions which provide a unified view for alerting and monitoring of your Azure and non-Azure workloads. For integrated partner solutions, Security Center scans Azure resources and provides recommendations to install the solution while automating the deployment. In addition to these features, we are excited to announce the general availability of auto discovery of partner solutions that have already been deployed in the subscription.

Security Center will now automatically discover partner solutions for Next-Generation Firewalls (NGFW) and Web Application Firewalls (WAF), prompting connection while allowing the integration of logs and alerts. Discovered partner solutions will be displayed in security solutions panel. To allow interoperability with many security vendors, Security Center supports log ingestion using industry standard Common Event Format (CEF) on top of Syslog messages.

Once integrated, Security Center provides visibility into the health of partner solutions and provides links to its management console. Partner solution logs are indexed and stored in customer workspace, they are also enriched with threat intelligence to help with security investigations. Partner solution logs are available to setup custom alerts and be displayed in Security Center alerts page. Custom alerts allow user defined queries to scope the type of alerts to be displayed in Security Center.

This feature is available in the standard pricing tier of Security Center, and you can try Security Center free for the first 60 days.

To learn more about this feature in security center, visit our documentation.

Discovered_solutions


Modernize index maintenance with Resumable Online Index Rebuild

$
0
0

As we know, the index is one of the most powerful tools for optimizing database performance. As you insert, update, and delete rows, indexes become more fragmented and less effective. Because of this, DBAs regularly do index rebuild operations.

With the growing sizes of databases, index rebuilds can take a very long time. Combine that with the business needs for your applications to be always available and performant and this can be an issue. Big OLTP environments with busy workloads often have very short maintenance windows with some too short to execute large index rebuild operations.  

Fit rebuild operations into limited maintenance windows

With ROIR (Resumable Online Index Rebuild), you can configure a rebuild to execute only during a maintenance window of defined length. Previously, if an index operation ran longer than the maintenance window the DBA would have to abort the index operation and run it again from the start later. If an index operation regularly took longer than the desired maintenance window there was no way to work around this. With ROIR, the user can simply define a max duration for the rebuild according to the maintenance window.

ALTER INDEX [ix_CustomerIDs]
ON [ContosoSales].[ConstosoTransactionData]
REBUILD
WITH (ONLINE = ON, RESUMABLE = ON, MAX_DURATION = 30 MINUTES);
GO

Pause an index rebuild to free up resources for another high priority task

Sometimes an unexpected high priority task may come up and require more of your resources. With ROIR you can pause your rebuild operation at any time to allow other higher priority tasks to execute. The pause functionality can also be used to pause the index operation at the end of the maintenance window if you didn’t define a max duration.

ALTER INDEX ix_CustomerIDs ON [ContosoSales].[ConstosoTransactionData] PAUSE

Resume an index rebuild after failure

Index rebuild failures can occur unexpectedly for several reasons including database failover or running out of disk space. Think about how much time can be wasted if an index operation fails after running for several hours. With ROIR, you will be able to resume an index rebuild from where the failure occurred. A failure will put the index into a paused state. 

ALTER INDEX ix_CustomerIDs ON [ContosoSales].[ConstosoTransactionData] RESUME

Perform a large index rebuild without using large log space

Long running index operations can block other maintenance operations. With ROIR, you can perform a large index rebuild without using a large amount of log space. ROIR prevents log truncation and out-of-log errors.

Please consider that keeping an index in a paused state will have a performance impact since both the original and new index will require disk space and need to be updated during DML operations. You also cannot make schema changes on a table when one of its indexes is in a paused state.

For more information on ROIR please review the following documents

Monitor the Azure blog to see more great features we have coming in this space!

Last week in Azure #23: Week of March 12

$
0
0

Last week in Azure, we were at the Rice Oil and Gas HPC conference showing how high-performance computing in the cloud is helping companies in that industry get more done. This week, we'll be at GDC 2018 showing game developers how Azure can handle the management of their gaming platforms so that they can focus on what they do best: make games that make headlines. Week after week, we're demonstrating how Azure is the cloud for all.

Now in preview

New machine-assisted text classification on Content Moderator now in public preview - Content Moderator enables you to create a complete, configurable content moderation lifecycle by combining automated moderation with human reviews and workflows. Going beyond existing technology that flags profanity terms, the text classification feature helps detect potentially undesired content that may be deemed as inappropriate depending on context. In addition, it can recommend a human review of the content. The text classification feature is in preview and supports the English language.

Now generally available

Azure Data Lake launches in the West Europe region - Azure Data Lake Store (a hyperscale repository for big data analytics workloads) and Azure Data Lake Analytics (a distributed analytics service that makes big data easy) are now generally available in the West Europe region, in addition to the previously announced regions of East US 2, Central US, and North Europe.

Announcing backup and restore performance improvements and support for large disk backup - These improvements and large disk support is based on a new VM backup stack and are available for both managed and unmanaged disks. You can seamlessly upgrade to this new stack without any impact to your on-going backup jobs and there is no change to how you set up backup or restore.

News & updates

New isolated VM sizes now available - Two new Virtual Machine (VM) sizes, E64i_v3 and E64is_v3, which are isolated to hardware and dedicated to a single customer are now available. These VMs are best suited for workloads that require a high degree of isolation from other customers for compliance and regulatory requirements.

Microsoft and 21Vianet reinforce long-term cooperation on cloud services in China - Microsoft and 21Vianet have agreed to extend their partnership to provide world-class public cloud services to Chinese customers. Microsoft Azure and Office 365 operated by 21Vianet have achieved unprecedented, robust three-digit growth for nearly four consecutive years in China. This cooperation model pioneered by Microsoft and 21Vianet has been recognized as an effective and successful method for a legal and compliant operation of international cloud services in China.

New offers in Azure Marketplace – February 2018 - The Azure Marketplace is the premier destination for all your software needs – certified and optimized to run on Azure. Find, try, purchase, and provision applications & services from hundreds of leading software providers. In February, we published over 80 new offers.

Technical content & training

Azure cloud data and AI services training roundup - Along with Microsoft innovations in artificial intelligence, advanced analytics, and big data, take a deep dive into a variety of topics, including products like Azure Cosmos DB.

Five webinars to catch you up on hybrid cloud - If you need to get up to speed on how to work best in a hybrid environment, we’ve collected five of our most-viewed webinars from the past year for your binge-watching pleasure. These on-demand sessions cover a variety of topics essential to individuals who find themselves needing to work on their hybrid mixed on-premise and cloud strategy.

Azure Strategy and Implementation Guide – free download - While it’s clear what the potentials of cloud computing are for your organization, it may be unclear the adjustments your IT organization will need to make in transitioning to the cloud. This guide is designed to help your IT team more effectively implement and integrate cloud technologies.

Four IT skills with sky-high prospects - Cloud computing will drive changes throughout the IT profession. However, individuals in search of rapid career advancement should consider developing skills in one of these areas, and would do well to complete the extra work toward getting certified.

Heuristic DNS detections in Azure Security Center - To help provide guidance on detecting highly evasive threats, we published Windows DNS server logging for network forensics and the introduction of the Azure DNS Analytics solution. In this post, learn more about some of our more complex, heuristic techniques to detect malicious use of this vital protocol and how these detect key components of common real-world attacks.

Events

Microsoft and Azure at the Game Developers Conference - If you're attending GDC 2018 this week in San Francisco, come to the South Hall Lower Lobby of the Moscone Center and stop by our dedicated Microsoft Azure booth to learn how you can create a gaming empire by building on the gaming cloud that has powered Xbox for years.

Azure Batch for oil and gas - Last week, Microsoft was at the Rice Oil and Gas HPC conference at Rice University in Houston, Texas to show how high performance computing (HPC) helps oil and gas companies accelerate ROI and minimize risk. In this post, you'll learn how Azure Batch enables companies to integrate their existing applications with Azure compute resources to execute applications in parallel, and at scale.

Developer spotlight

Xamarin University Guest Lecture - Mike Geig - Introduction to Unity3d - This session covers the skills you need to begin using the Unity game engine. We will look at the various components of the interface as well as how they work together to give you a rich and powerful toolset. We will also see how we can mix art and code together to create interactivity and gameplay. Topics discussed include the editor, scripting, animation, physics, and lighting.

Building Your First Intelligent App with Xamarin and Microsoft Cognitive Services - René Ruppert shows you how to easily integrate the power of three different Azure Cognitive Services into a Xamarin application. Given that nobody can decipher René's handwriting, he's going to use the power of Azure to turn it into clear text and use that as input for further processing.

Azure Mobile Apps SDK for Unity - Azure Mobile Apps contains a variety of features for building cross-platform mobile titles. This SDK currently supports working with Easy Tables. Easy Tables are a great way to read, write, and query data in a simple table format.

Build your gaming empire on Azure - Modern games are made and played differently, requiring more powerful development tools, global and flexible multiplayer support, and new revenue models. Learn how Azure can provide the management of your gaming platform so you can focus on what you do best: making games that make headlines.

Use Azure Easy Tables and the Mobile Apps SDK with Unity - Azure provides a scalable solution to storing telemetry and other game data in the cloud. With the release of Unity 2017, Unity's experimental support for .NET 4.6 makes Azure integration simpler than ever. This sample will walk through the process of using Easy Tables to save telemetry and leaderboard data in Azure using the experimental Mobile Apps SDK for Unity.

Build Better Games with Unity and Microsoft Azure - David Antognoli shows you how to take your Unity games to the next level with powerful cloud services. He'll walk through how to connect your apps to Microsoft Azure, adding compelling features that users love, like leaderboards and heatmaps, and demo how new Unity and Visual Studio 2017 features improve your development process and your users' experience.

Service updates

Azure shows

Azure Friday - Get started with the Azure SDK for Go - The Azure SDK for Go provides Go packages for managing and using Azure services using the Go language. Deploy your Go app to Azure Web Apps and take advantage of managed services, such as PostgreSQL, Storage, Identity, and more.

The Azure Podcast: Episode 220: Logic Apps Update - Logic Apps Principal PM Kevin Lam is back to give us all the latest and greatest updates on the service. It has definitely come a long way since we had him on the show last about a year and half ago and Kevin is just as excited about the possibilities using Logic Apps.

Supporting JUnit 5 in Visual Studio Code

$
0
0

After supporting the widely adopted JUnit 4 with the Java Test Runner extension for Visual Studio Code, we’ve received suggestions to add additional test frameworks, like JUnit 5 and TestNG. We’ve added initial support for JUnit 5, including running, debugging test cases as well as test report. Please give us a try and let us know your feedback.

JUnit 5 in Visual Studio Code

Expression Evaluation based Conditional Break Point

After introducing expression evaluation in our January release for the Java debugger extension, we are bringing the functionality to conditional break points. Now, you can set your breakpoint to break when an expression evaluates to true. We believe this could be a very useful feature when debugging your Java application using Visual Studio Code.

Conditional Break Point

Other Updates

We’ve also added new features to our Java on Visual Studio Code extension lineup, including:

Java Test Runner

  • Trigger tests from test explorer on different levels
  • Add command to open log file
  • Add setting to specify the position of test report

Tomcat

  • Add several context commands in Tomcat Explorer
  • Add support for JVM customization and Tomcat server configuration
  • Add command palette entries for user input

Maven

  • Add support for auto-update maven project explorer when pom.xml is updated

Try it out

Please don’t hesitate to try Visual Studio Code for your Java development, and let us know your thoughts! Install the Java Extension Pack which includes Language Support for Java by Red Hat, Debugger for Java, Maven, and the Java Test Runner.

Additional resources

Xiaokai He, Program Manager
@XiaokaiHe

Xiaokai is a program manager working on Java tools and services. He’s currently focusing on making Visual Studio Code great for Java developers, as well as supporting Java in various of Azure services.

Announcing Preview 1 of ASP.NET MVC 5.2.5, Web API 5.2.5, and Web Pages 3.2.5

$
0
0

Today we released Preview 1 of ASP.NET MVC 5.2.5, Web API 5.2.5, and Web Pages 3.2.5 on NuGet. This is a patch release that contains only bug fixes. You can find the full list of bug fixes for this release in the release notes.

To update an existing project to use this preview release run the following commands from the NuGet Package Manager Console for each of the packages you wish to update:

Install-Package Microsoft.AspNet.Mvc -Version 5.2.5-preview1
Install-Package Microsoft.AspNet.WebApi -Version 5.2.5-preview1
Install-Package Microsoft.AspNet.WebPages -Version 3.2.5-preview1

Please try out Preview 1 of ASP.NET MVC 5.2.5, Web API 5.2.5, and Web Pages 3.2.5 and let us know what you think. Any feedback can be submitted as issues on GitHub. Assuming everything with this preview goes smoothly, we expect to ship a stable release of these packages in a few weeks.

Enjoy!

7 month retirement notice: Access Control Service

$
0
0

Access Control Service, otherwise known as ACS, is officially being retired. ACS will remain available for existing customers until November 7, 2018. After this date, ACS will be shut down, causing all requests to the service to fail.

This blog post is a follow up to our original blog post announcing ACS retirement.

Classic Azure Portal retired April 2018

As of April 2nd 2018, the classic Azure Portal located at https://manage.windowsazure.com will be completely retired, and all requests will be redirected to the new Azure Portal at https://portal.azure.com. ACS namespaces will not be listed in the new Azure Portal whatsoever.  If you need to create, delete, enable, or disable an ACS namespace going forward, please contact Azure support. Starting from May 1 you will not be able to create new ACS namespaces.

You can still manage existing namespace configurations by visiting the ACS management portal directly, located at https://{your-namespace}.accesscontrol.windows.net. This portal allows you to manage service identities, relying parties, identity providers, claims rules, and more. It will be available until November 7, 2018.

Who is affected by this change?

This announcement affects any customer who has created one or more ACS namespaces in their Azure subscriptions. If your apps and services do not use Access Control Service, then you have no action to take.

To determine if your apps and services use ACS, you should monitor for any traffic to https://{your-namespace}.accesscontrol.windows.net. All traffic to ACS is sent to the accesscontrol.windows.net domain.

Note: Any traffic to the https://accounts.accesscontrol.windows.net domain is already handled by a different service. Traffic to this specific domain will not be affected by ACS retirement.

What action is required?

If you use ACS in some capacity, you should immediately begin your migration strategy. In the majority of cases, migration will require significant code changes on your part.

What is the migration path?

The correct migration path for you depends heavily on how your existing apps and services use ACS. To assist in determining the right technology to use, we have published this ACS migration guidance.

Contact Us

For more information about the retirement of ACS, please check our ACS migration guidance first. If none of the migration options will work for you, or if you still have questions or feedback about ACS retirement, please contact us at acsfeedback@microsoft.com.

Securing Azure Database for MySQL and Azure Database for PostgreSQL

$
0
0

Selecting a secure cloud services provider is one of the most fundamentally important decisions customers make. Customers must build their applications and services upon a secure trusted foundation. Azure Database for PostgreSQL and Azure Database for MySQL inherit the fundamentally proven trusted security architecture from Microsoft Azure. Azure has over 50 national, regional and industry specific compliance offering that Azure Database for PostgreSQL and Azure Database for MySQL leverage as part of Microsoft’s Trusted Cloud foundation of security, privacy, compliance, and transparency. To learn more and access additional resources, visit the Microsoft Trust Center. Azure Database for PostgreSQL and Azure Database for MySQL protection starts with Azure network security. Azure networking provides Distributed Denial of Service (DDoS) protection at the network edge for all Azure services and all network traffic between Azure datacenters that stays on Azure’s global network and does not travel over the Internet. To learn more please read Yousef Khalidi's blog post on Azure network security.

PostgreSQL and MySQL Security

Security for Azure Database for PostgreSQL and Azure Database for MySQL is built into the service as depicted above. Azure Database for PostgreSQL and Azure Database for MySQL share a common layered security model. Neither database service node is exposed directly to the Internet. The services sit behind Azure network protection and have their own gateway that securely establishes connections. Azure Database for PostgreSQL and Azure Database for MySQL support SSL connections. A new database service deploys with SSL connections defaulted to “on”. Visit these articles to learn how to configure SSL for PostgreSQL and MySQL. Connections to the database services are protected further by configuring PostgreSQL and MySQL native database firewalls. Native database authentication methods for PostgreSQL and MySQL are supported out of the box. All data stored by the service is secured via the Azure Storage Service through 256 bit AES encryption that is always on and cannot be turned off.

Azure Database for PostgreSQL and Azure Database for MySQL inherit network security and compliance from Microsoft Azure and provide a managed layered security model with DDoS protection, a secure gateway, SSL encrypted network traffic, native firewalls, native authentication, and finally all data is automatically encrypted by the service. Multiple new security features are planned for release in 2018. Check back often for new security feature announcements.

Announcing general availability of Azure database services for MySQL and PostgreSQL

$
0
0

Today, I am excited to announce the general availability (GA) of Azure Database for MySQL and Azure Database for PostgreSQL. The GA milestone means that, starting today, these services are bringing the community versions of MySQL and PostgreSQL with built-in high availability, a 99.99% availability SLA, elastic scaling for performance, and industry leading security and compliance to Azure.

Since we started the preview of MySQL and PostgreSQL on Azure in May 2017, we have accomplished a lot, increasing compute scale up to 32 vCores, offering a new Memory Optimized tier, ability to scale storage on-line independent of compute without impact to application performance, allowing greater flexibility in backup storage options, and achieving industry compliance with ISO, SOC, and HIPAA. We will be compliant with the General Data Protection Regulation (GDPR) when enforcement begins on May 25, 2018. In addition, with availability in 22 regions worldwide, these services are truly global. The reach of the services remains a key focus for us, and we continue to work on providing availability across all 40+ Azure regions, which we expect to deliver in coming months. In the video below, my colleague Sunil Kamath shares some of the key benefits of adopting Azure database services for MySQL and PostgreSQL.

“Azure Database for PostgreSQL service is what we had really expected. The flexibility of this service will allow us to deliver many more applications to our customers.”  

Tatsuya Sugai, Corporate Officer and CIO, Nihon Unisys, Ltd

For me personally, the most rewarding aspect of being involved with building these services have been working with the people across the open source community and the Azure teams at Microsoft. With our team spread across the US, China, Canada, Germany, Serbia, and Israel, and the open source community being truly global, this experience has given me a deep appreciation for what can be achieved when a diverse set of people work together. I am inspired by the direction that Microsoft is taking, with an emphasis on the fundamental of openness, working with the community, and a dedication to supporting our customers where they are, whether on-premises or in Azure.

As I mentioned in my November 15th blog post, we remain committed to working with the community on the changes that we make to the database engines offered in these Azure services. To further this goal, we joined the MariaDB Foundation in November 2017 because of our belief that the foundation is important to ensuring that MariaDB remains open and is an inspiration to other projects. MariaDB is the next database service that our team is working on launching on Azure, so watch for it in coming few months, or submit a nomination to participate in the limited preview of the service. It is important to us that Azure database services for MySQL, PostgreSQL, and soon MariaDB represent the community versions of these databases. In this way, we can deliver a consistent customer experience, whether a database is running on Azure, on a laptop during application development, or on-premises.

The delivery of these services is only possible by leveraging existing innovation in Azure. Our MySQL and PostgreSQL services are managed using the fabric and infrastructure that our SQL Server-based database service, Azure SQL Database, has been built on since 2010. Over the years, Azure SQL Database has been the industry leader in providing a truly automated database service experience with key innovations such as automatic threat detection, database workload insights, and automatic performance tuning. Because Azure database services for MySQL and PostgreSQL are built using the same foundation, we can provide a similarly great experience.

As we improve and add database services in the future, we will continue to build on the innovation provided across Azure and SQL Server.

Finally, though you can continue using existing tools such as mysqldump and pg_dump for migrating databases to Azure, we are enabling a completely seamless migration experience with the Azure Database Migration Service (DMS). With DMS, you can perform migrations with minimum application downtime, which allows the source database to remain fully operational during the migration. Today we are also announcing a limited preview of DMS support for migrations from MySQL to Azure Database for MySQL, with support for PostgreSQL migrations to follow. If you are interested in participating in this limited preview of DMS support for MySQL migrations, be sure to submit a nomination.

If you are currently working with one of these database services, you might find the following links useful:

If you’d like to try out one of these newly released database services, you can get started here:

I hope that you enjoy working with our latest generally available database services. Be sure to let us know what you think through User Voice PostgreSQL and MySQL!


Compliance offerings for Azure Database for MySQL and Azure Database for PostgreSQL

$
0
0

Customers experience an increasing demand for highly secure and compliant solutions as they face data breaches along with requests from governments to access online customer information. New regulatory requirements such as the General Data Protection Regulation (GDPR), which governs the collection and use of individuals’ data, makes selecting cloud services that help customers achieve trust, transparency, security, and compliance essential. To help customers achieve compliance with national, regional, and industry specific regulations and requirements Azure Database for PostgreSQL and Azure Database for MySQL build upon Microsoft Azure’s compliance offerings to provide the most rigorous compliance certifications to customers at service general availability.

Microsoft Azure has over 50 national, regional, and industry specific compliance offering that Azure Database for PostgreSQL and Azure Database for MySQL leverage as part of Microsoft’s Trusted Cloud foundation of security, privacy, compliance, and transparency. To learn more and access additional resources, visit the Microsoft Trust Center.

What are the compliance offerings for Azure Database for PostgreSQL and Azure Database for MySQL and what do they mean for customers?

Compliance Offerings

Azure Database for PostgreSQL and Azure Database for MySQL are certified compliant for:

Achieving these compliance offerings means that Azure Database for PostgreSQL and Azure Database for MySQL has specific policies, technologies and controls deployed to protect data and the associated infrastructure of cloud computing that Azure Database for PostgreSQL and Azure Database for MySQL run on. Achieving these offerings means that Microsoft operates the services in an industry standard compliant manner. It also means that Azure Database for PostgreSQL and Azure Database for MySQL customers can attest to their customers, regulators, and partners that they have selected and operate solutions on top of compliant cloud services.

Customers selecting Azure Database for PostgreSQL and Azure Database for MySQL obtain additional benefits beyond the peace of mind that our compliance offering provide. Microsoft offers the Azure IP Advantage for services running open source technologies. The Azure IP Advantage offers best-in-industry intellectual property protection, uncapped indemnification, the ability to deter, and defend lawsuits with patent pick and broad protection with a springing license. Visit the Azure IP Advantage to learn more.

Azure Database for PostgreSQL and Azure Database for MySQL are continuing to pursue even more compliance certifications that we will announce in future blogs and as part of Azure’s compliance offerings.

Selecting Azure Database for PostgreSQL and Azure Database for MySQL as your database service provider means that you are selecting services for you and your customers that are not only compliant with the most rigorous standards but are backed by the Azure IP Advantage for additional piece of mind. Customers can freely innovate knowing that they are protected by the best standards and intellectual property assurance program in the industry.

*Achieved for the Azure Public Cloud but not for Azure Government or Azure Germany

Project Denali to define flexible SSDs for cloud-scale applications

$
0
0

Last September, at SNIA’s Storage Developer’s Conference, I presented a prototype of the Project Denali SSD. Project Denali drives provide the flexibility needed to optimize for the workloads of a wide variety of cloud applications, the simplicity to keep pace with rapid innovations in NAND flash memory and application design, and the scale required for multitenant hardware that is so common in the cloud. 

This month, I’m attending the Open Compute Project (OCP) U.S. Summit 2018 to begin formalization of the specification that will define the interface to Project Denali drives. Once in place, the specification will allow both hardware vendors and cloud providers to build and release their final products. The specification defines a new abstraction, which separates the roles of managing NAND, and managing data placement. The former will remain in the hardware – close to the NAND and in the product that reinvents itself with every new generation of NAND. The latter, once separated from the NAND management algorithms, will be allowed to follow its own schedule for innovation, and won’t be prone to bugs introduced by product cycles that track solely with NAND generations. 

The specification, with the refactored algorithms it requires, will give a renewed boost to innovation in both drive firmware and host software. Throughout the development of the Project Denali architecture, we’ve focused on the following four goals:

  1. Flexible architecture for innovation agility: Workload-specific optimizations, FTL managed as cloud services component
  2. Rapid enablement of new NAND generations: NAND follows Moore’s Law; SSDs: hours to precondition, hundreds of workloads
  3. Support a broad set of applications on massively shared devices: Azure (>600 services), Bing, Exchange, O365, others; up to hundreds of users per drive
  4. Scale requires multi-vendor support & supply chain diversity: Azure operates in 38 regions globally, more than any other cloud provider

Addressing a growing divide

One of the primary drivers behind the Project Denali architecture is the mismatch of write and reclaim size between the hardware and the application. Cloud-scale applications tend to scale out the number of tenants on a machine, whereas the hardware scales up the size of its architectural parameters. As the number of cores in a server increases, a single machine can support more VMs. When storage servers increase their capacity, they typically increase the number of tenants using each as a back-end. While there are some notable exceptions, there is still a need for cloud hardware to provide enough flexibility to efficiently serve these multi-tenant designs.   

Address MapSSDs’ caching further increases this divide. To make the best use of the SSD’s parallelism, its controller collects enough writes to fill one flash page in every plane, about 4MB in our current drives. If the data comes from multiple applications, the drive mixes their data in a way that is difficult to predict or control. This becomes a problem when the device performs garbage collection (GC). By this time, some applications may have freed their data, or updated it at a faster rate than other applications. For efficient GC, the ideal is to free or update the data on a single block. But when caching brings the effective block size to 1GB, it’s very unlikely that the host can issue enough data to the drive for one tenant before servicing writes for the next tenant.

This caching design can also be viewed as an optimization for a single workload: sequential writes. It’s not surprising for SSD makers to target this workload – optimizations for HDDs aim to make workloads sequential, and sequential writes on SSDs are consistently 4-5x faster than a workload of random writes (on a completely full drive with 7% OP). However, real-world cloud aDie Capacitypplications rarely consist of writes that are purely sequential on the whole drive. Much more common are workloads consisting of hundreds of sequential write streams per TB of storage.  

The final nail in the coffin is in how flash block sizes change over time. Advances in the density of NAND flash typically increase the size of the block. For this reason, it will be even more important for the host to have access to place its data on the native block size in future designs.

Flexible architecture for cloud hardware

To address the challenges described above, we took a closer look at the algorithms in SSD’s flash translation layers, and in cloud applications and found the following two categories:

Log managers receive random writes and are responsible for translating these to one or more streams of sequential writes, and emitting these to the next layer down in the storage stack. To do this, log managers typically maintain an address map and must perform garbage collection. 

Media managers are written for a specific generation of media, and implement algorithms such as ECC, read retry and data refresh in accordance with the physical properties of the media such as the patterns of where and when errors arise and data retention times. 

SSDThese two components appear in many places. Standard SSDs mix both, and early open channel architectures require the host to implement both. Most systems have at least two or three log managers stacked on top of each other – a scenario SanDisk warned against in their paper, Don’t Stack Your Log on My Log. In Project Denali, we propose a clear division between log and media managers, with placement of the media manager in the drive, and a single log manager encapsulated entirely in the host. 

Successful prototype

Prototype In the first phase of our development, we collaborated with CNEX to build a prototype system. While the interface change opens up opportunities to optimize across many layers of the storage stack, we modified only two components: the firmware and the lowest level device driver in Azure’s OS.  This allowed for a quick evaluation of the ideas, provides infrastructure for legacy applications and sets up the system for future optimizations. 

The pre-optimization results were better than we expected. The memory, write amplification and CPU overheads that are typically in the drive moved to the host (as expected), and the system’s throughput and latency were slightly better than standard SSDs. 

We look forward to finalizing the Denali specification in the months ahead through the Denali group and plan to make this specification available broadly later this year. Refactoring the flash translation layer will promote innovation across the storage stack, and I invite you to learn more about the new interface. 

Microsoft creates industry standards for datacenter hardware storage and security

$
0
0

Today I’m speaking at the Open Compute Project (OCP) U.S. Summit 2018 in San Jose where we are announcing a next generation specification for solid state device (SSD) storage, Project Denali. We’re also discussing Project Cerberus, which provides a critical component for security protection that to date has been missing from server hardware: protection, detection and recovery from attacks on platform firmware. Both storage and security are the next frontiers for hardware innovation, and today we’re highlighting the latest advancements across these key focus areas to further the industry in enabling the future of the cloud.

A new standard for cloud SSD storage

Storage paradigms have performed well on-premises, but they haven’t resulted in innovation for increasing performance and cost efficiencies needed for cloud-based models. For this reason, we’re setting out to define a new standard for flash storage specifically targeted for cloud-based workloads and I’m excited to reveal Project Denali, which we’re establishing with CNEX Labs. Fundamentally, Project Denali standardizes the SSD firmware interfaces by disaggregating the functionality for software defined data layout and media management. With Project Denali, customers can achieve greater levels of performance, while leveraging the cost-reduction economics that come at cloud scale.

Project Denali is a standardization and evolution of Open Channel that defines the roles of SSD vs. that of the host in a standard interface. Media management, error correction, mapping of bad blocks and other functionality specific to the flash generation stays on the device while the host receives random writes, transmits streams of sequential writes, maintains the address map, and performs garbage collection. Denali allows for support of FPGAs or microcontrollers on the host side.

Flash storage

This provides an architectural framework that is truly cloud first. The modular architecture proposed will enable agility for new non-volatile media adoption (both NAND and Storage class memory), along with improved workload performance, through closer integration between the application and the SSD device.  It also defines a model for using software-defined data placement on SSDs to disaggregate older, monolithic storage models. When management of data placement is separated from the NAND management algorithms, non-volatile storage media is freed up to follow its own schedule for innovation. Project Denali will allow hardware companies to build simpler, less complicated hardware which will lower costs, decrease time to market, allow for workload specific tuning and enable rapid development of new NAND and memory technologies.

After maturing Project Denali with a full array of ecosystem partners, we intend to contribute the Project Denali standard to the industry to help foster even broader adoption.

Project Denali

Enabling hardware security

Microsoft Azure represents the cutting edge of cloud security and privacy. Microsoft spends one billion dollars per year on cybersecurity, and much of that investment goes to fundamental improvements that make Azure a trusted cloud platform. With such an intense focus on security, we recognize the need for an industry standard for hardware security. Microsoft’s Project Cerberus has been developed with the intent of creating an open industry standard for platform security.

Project Cerberus is a security co-processor that establishes a root of trust in itself for all of the hardware devices on a computing platform and helps defend platform firmware from:

  • Malicious insiders with administrative privilege or access to hardware
  • Hackers and malware that exploit bugs in the operating system, application, or hypervisor
  • Supply chain attacks (manufacturing, assembly, in-transit)
  • Compromised firmware binaries

Cerberus consists of a cryptographic microcontroller running secure code which intercepts accesses from the host to flash over the SPI bus (where firmware is stored), so it can continuously measure and attest these accesses to ensure firmware integrity and hence protect against unauthorized access and malicious updates. This enables robust pre-boot, boot-time and runtime integrity for all the firmware components in the system.

The specification is CPU and I/O architecture agnostic and is intended to easily integrate into various vendor designs over time, thus enabling more secure firmware implementations on all platform types across the industry, ranging from datacenter to IoT devices. The specification also supports hierarchical root of trust so that platform security can be extended to all I/O peripherals using the same architectural principles.

Since the introduction of Project Cerberus in late 2017, the ecosystem supporting the standard has continued to grow and we’re on the verge of contributing the hardware implementation to the community for greater collaboration and adoption.

Project Ceberus

Since 2015, we’ve been sharing the server and datacenter designs that power Microsoft Azure with the OCP community, working to empower the industry to take advantage of innovations that improve datacenter performance, efficiency, and power consumption. 

You can follow this link to learn more about the efforts we announced today, or read this blog for deeper technical information on Project Denali.

How to get more leads and close deals faster with Microsoft’s Marketplaces

$
0
0

Cloud software sales are rapidly increasing in both scope and magnitude. As more customers and businesses turn to cloud solutions for their business issues, the market for software solutions has exploded. The way customers are exploring these solutions is changing, too. Increasingly, customers are looking to online marketplaces as a way to discover, trial, and buy cloud solutions. A recent report by Forrester Consulting has reported that adoption of application marketplaces will likely rise from 29 percent to 75 percent in the next two years. 

Using a cloud marketplace such as Microsoft’s Azure Marketplace or AppSource has obvious advantages for customers. Business users, IT pros, or developers can access a global catalog of software solutions and services. For example, Microsoft offers convenient and trusted access to over 7,500 applications and service listings. Customers can instantly see peer reviews and ratings, and understand a solution’s fit for their needs with way less friction and time invested than traditional discovery methods. But customers aren’t just interested in the catalog size. Marketplaces also offer rich trial and test drive experiences that allows customers to experience a solution in a rich way that makes the leap from discovery to purchase much less daunting.

For publishers, the appeal is to be where customers are. In a way, online marketplaces are democratizing entry into the global enterprise software sales market. Smaller companies that have traditionally been restricted to selling their solutions in local geographies can now showcase and sell their solutions to a global market in just a few clicks. Partners can leverage the effort Microsoft is making to build awareness for their solution and instead spend their resources on building great solutions. Azure Marketplace and AppSource for example, attract over 2,000,000 monthly users. Microsoft also reports to share over 100,000 leads with it’s marketplace partners every single month. Chef is one of Microsoft’s cloud marketplace partners who is realizing such benefits:

“By participating in Azure Marketplace and Azure Test Drive, customers can learn about Chef, evaluate Chef Automate and deploy continuous automation on Azure with a minimal amount of friction. The opportunities resulting from the thousands of Azure Marketplace leads when Chef and Microsoft partner to co-sell a deal, the agreements close 25 percent faster than average. In short, Azure Marketplace is great for Azure customers and partners alike,” said Vikram Ghosh, Vice President of Cloud Partners at Chef Software.

In our upcoming webinar on Cloud Marketplaces, you’ll learn about customer purchase behavior, the latest techniques to acquire customers through the Microsoft Azure Marketplace and AppSource, and help to determine which marketplace is the best sales engine for you.

The webinar will be presented by Nuno Costa - Senior Director, Partner & Startup Experience, Cloud + Enterprise. It will take place on March 22, 2018 at 1:00 PM Pacific Standard Time. Register today to reserve a seat for this upcoming webinar.

Register now

Learn more about why and how to publish and submit your solution today for Azure Marketplace or AppSource.

Azure Redis Cache feature updates

$
0
0

We are pleased to announce that firewall and reboot functions are now supported in all three Azure Redis Cache tiers. We have been making these previously premium-only features available to the basic and standard tiers at no additional cost. In addition, we are previewing the ability to pin your Redis instance to specific Availability Zone-enabled Azure regions.

Firewall

Firewall provides added security for your Azure Redis deployment. It lets you restrict which clients can connect to your Redis cache based on their IP addresses. You can create a firewall rule for each IP address range that your Redis clients use. Once you enable firewall, by specifying at least one rule only those requests coming from IP addresses that fall into the defined IP range(s) will be accepted by Redis. Redis monitoring endpoints are excluded from firewall rules, however. This prevents accidental network disconnect due to firewall settings and ensures that monitoring will work uninterrupted.

image

Reboot

Reboot allows you to restart one or more nodes in your Redis Cache. This function is useful particularly for simulating cache failures and testing how your application would react to them. It is a highly requested feature from User Voice. You can reboot any cache node using the Reboot blade in the Azure Portal or this PowerShell command. Please keep in mind that you may lose data due to a reboot and the amount of loss depends on which node(s) you are rebooting. The Reboot FAQ documents this and other issues you would want to be aware of.

image

Zonal Pinning

Zonal pinning gives you the ability to control where your cache instance is placed within an Azure region that is consisted of multiple Availability Zones, which protect you from datacenter-level failures. By pinning your cache to a specific zone, you can make sure that your application and cache are located closely together. This feature is currently in public preview (as are Availability Zones) and is supported on Premium Redis caches. You can try out zonal pinning by following this set of instructions after you have enabled your Azure subscription for zone support.

imageIf you have any question or feedback, please contact us at AzureCache@microsoft.com.

SONiC, the network innovation powerhouse behind Azure

$
0
0

This week is OCP Summit 2018, and I cannot think of a better time to do a status update on our Open Source fabric powering our cloud. Since joining OCP back in 2014, I have always been a huge supporter of Microsoft’s participation in the important work done by the members of the Open Compute Project (OCP) community.

The idea of tech industry leaders coming together around a common goal to innovate and improve on existing technology through the sharing of knowledge, creates a huge impact on the world and is a great way to learn and grow. Only through the constant innovation across, not just our customer facing services, but the very base-layers of what makes up our global infrastructure, are we able to control our own destiny.

SONiC is the default switch OS powering Azure and many other parts of the Microsoft Cloud. Since last year’s Summit, we have grown its footprint substantially and are now also powering services such as our AI platform, making sure researches have the very best experience when working on solving some of the world’s most pressing problems.

“Microsoft’s Software for Open Networking in the Cloud (SONiC) is the first solution to break monolithic switch software into multiple containerized components. SONiC enables fine-grained failure recovery and in-service upgrades with zero downtime. At its core, SONiC is aimed at efficient cloud networking use cases, where simplicity and management at scale are the highest priority. Complete with monitoring and diagnostic capabilities, SONiC is a perfect fit for the Mellanox Spectrum family of switches.” Said Dror Goldenberg, Vice President, Mellanox

This year’s milestones are a testament to our open and community driven approach and why that ultimately leads to great technology innovation and consistently improved performance. Both things that pay back our customers through the best platform experience possible.

Community support growing at blazing speed

SONiC and its sibling Switch Abstraction Interface (SAI) are both heavily rooted with our industry ecosystem. Since the inception three years ago and the subsequent open sourcing we have been growing industry support and number of contributing partners rapidly. Over the past year, we have welcomed many new industry leaders to the SONiC/SAI family.

image

At the OCP Summit two years ago, we revealed our groundbreaking network switching software called SONiC, short for Software for Open Networking in the Cloud - a container based, open-sourced switch OS architecture. Built for cloud-scale performance and resiliency.

We showcased how SONiC’s container-based design accelerated development and allowed for cherry-picking the very best building blocks when designing and deploying cloud-scale networking infrastructure. High reliability and hitless serviceability ultimately translates into great customer satisfaction!

Since then, we have been hard at work with the community to add and refine to SONiC and SAI,
adding to this already rich eco-system focused on chip/ASIC support and integration through SAI, Cisco and Innovium have joined their peer chip innovators in the community.

“Switch Abstraction Interface (SAI) provides our customers an open standards solution for our industry leading switch silicon,” said Rajiv Khemani, CEO and Co-founder of Innovium

Along with industry support and recognition, comes technology width and versatility. Building performant large-scale networks across multiple switch topologies can be extremely challenging and cumbersome. This is why broad chip/ASIC support is at the very heart of what SONiC/SAI was built to do.

“Barefoot is proud to collaborate with Microsoft and the OCP community to bring the benefits of P4-programmable Barefoot Tofino Ethernet switch silicon series to the SAI and SONiC software," said Ed Doe, VP of Product & Marketing, Barefoot Networks

Developers, developers, developers

Developers across the world are contributing to SONiC, refining and adding new capabilities. In the past 12 months, the SONiC community has delivered three official releases. All these milestones have greatly enriched and increased SONiC use-cases.

I would like to thank new and existing members; Alibaba, Mellanox and Tencent for their contributions and hard work on VLAN trunking, Remote Direct Memory Access (RDMA) and Virtual Routing and Forwarding (VRF), as well as LinkedIn for their persistent push towards decoupling network hardware and software through alignment with their project Falco – efforts that has been active since 2014.

Spanning from low to high-end, fixed pipeline to highly programmable, 1Gbps to 400 Gbps, multiple power efficiency profiles, table sizes and telemetry capabilities SONiC/SAI will provide a perfect foundation for users looking to use SONiC as their switch OS of choice.

Whitebox vendor support doubling

Microsoft is all about providing users with options and choice of direction. I am therefore thrilled to also see the number of Original Design Manufactures (ODM), also known as whitebox vendors, supporting SONiC doubling over this past year - a trend we expect to continue with even greater velocity. Delta Networks Inc, Quanta Computer, Celestica, Inventec and Alpha Networks, have all joined the SONiC coalition in addition to our existing members for whom SONiC is the switch OS of choice for their latest offerings, as well as future technologies.

OCP 2018 Summit announcements: Turn-key adoption and ARM support

Today at the OCP Summit, Apstra announced a turn-key solution for SONiC. This will provide users an easy path to adopt and start taking advantage of SONiC in their own environments. Offering turnkey support, the Apstra offering will fill the requirements of enterprise customers looking for additional assistance to get everything on rails.   

“Today at OCP Summit 2018, we're showing a demonstration of AOS® with SONiC, a container-based cloud networking stack open sourced by Microsoft, along with Mellanox hardware that represents the increased demand for our multi-vendor Intent-Based Networking solution." said Mansour Karam, CEO and founder of Apstra.

SONiC is marching beyond single ASIC devices. During OCP, Arista demonstrated how SONiC can now manage a modular chassis using their EOS SAI App, showing SONiC for the first time controlling a modular chassis forwarding plane. While Marvell has enabled SONiC on an ARM based switch, providing even richer options for users in the future.

Innovation, whether acting on that brilliant idea from the back of the room, creating or being swayed by market trends or learning from our smart competitors, open source communities remain a constant for me and Microsoft’s path forward.

Lastly, welcome all our new members and contributors and an extended invite to all our industry peers to join us building out SONiC.

Read more on SONiC, how we build our global network and Azure’s open approach to networking.

Deploying WordPress Application using Visual Studio Team Services and Azure – Part two

$
0
0

This post is the second part of two blog posts describing how to setup a CI/CD pipeline using Visual Studio Team Services (VSTS) for deploying a Dockerized custom WordPress website working with Azure WebApp for Containers and Azure Database for MySQL. In Deploying WordPress application using Visual Studio Team Services and Azure - part 1 we described how to build a Continuous Integration (CI) process using VSTS, while in this part we are going to focus on the Continuous Delivery (CD) part by using the VSTS Release management.

Prerequisites for this part

Visual Studio Team Services – Release phase

I recommend on saving after completing each of the following steps:

First, we need to create a new empty release definition, go to releases, click on the + icon and choose create release definition, select empty process as the template.

pic1

Let’s start by adding artifacts to our pipeline. Click on add in the Artifacts section (step 1), a right blade will be presented, choose the following:

  • Source type – Build
  • Project – The relevant project name
  • Source – The name of the build definition we created
  • Default version – Latest
  • Source alias – Keep the default

After clicking on Add, click on the trigger icon under the Artifacts section (step 2), a right blade will be shown, choose to enable the continuous deployment trigger.

We need to move to configure the environments section, click on pre-deployment conditions icon (step 3), select After release trigger and close the right blade.

Next step is adding tasks to the development pipeline, either click on the link (step 4) or click on tasks.

Development Pipeline

Under tasks tab, click on agent phase and select hosted Linux preview as agent queue. Add the following tasks by clicking the + icon:

  • Three SSH command tasks
  • One Azure App Service deploy task
  • One Azure App Service Manage task

image

Now, we need to add variables that we going to use during the development CD process. Click on the variables tab and start adding from the below list, select development as the scope:

  • $(destappinsight) –Application Insight Instrumentation Key of Dev environment
  • $(desturl) – App Service URL of Dev environment
  • $(migrationfile) – temp file name when executing DB backup and restore operation
  • $(mysqldestdb) – DB name of Dev environment
  • $(mysqlhost) – Server name of Azure Database for MySQL
  • $(mysqlpass) – Password for Azure Database for MySQL
  • $(mysqlport) – The Port for Azure Database for MySQL
  • $(mysqlsourcedb) – DB name of Local environment
  • $(mysqluser) – User name for Azure Database for MySQL
  • $(resultfile) - temp file name when executing DB backup and restore operation
  • $(sourceappinsight) - Application Insight Instrumentation Key of Local environment
  • $(sourceurl) – Local environment URL

It’s possible to use a more secure solution for storing sensitive values, read more about using Azure KeyVault to store sensitive values and use them in VSTS.

Before returning to the tasks tab, we need to add a new SSH endpoint (Settings/Services/New Service Endpoint/SSH). Fill your Azure Virtual Machine details.

image

Now, let’s go back to the tasks tab and start editing the tasks.

The 1st SSH task is backup DB to file with the following values:

SSH endpoint – select the relevant SSH endpoint
Run – Commands
Commands –
mysqldump -P $(mysqlport) -h $(mysqlhost)  -u $(mysqluser)  -p$(mysqlpass) $(mysqlsourcedb) > $(resultfile)  

The 2nd SSH task is replace values with the following values:

SSH endpoint – select the relevant SSH endpoint
Run – Commands
Commands –
sed 's/$(sourceurl)/$(desturl)/g;s/$(sourceappinsight)/$(destappinsight)/g' $(resultfile) > $(migrationfile)

The 3rd SSH task is restore DB from migrated file with the following values:

SSH endpoint – select the relevant SSH endpoint
Run – Commands
Commands –
mysql -h $(mysqlhost) -u $(mysqluser)  -p$(mysqlpass) $(mysqldestdb) < $(migrationfile)

The 4th task is Azure App Service Deploy version 3 with the following values

Azure subscription – select the relevant Azure subscription
App type – Linux Web App
App Service name – select Dev environment App Service
Image Source – Container Registry
Registry or Namespace – Azure Container Registry login server value
Image – The Docker image name from CI process
Tag - $(Build.BuildId)
App settings –
-DB_ENV_NAME $(mysqldestdb) -DB_ENV_USER $(mysqluser) -DB_ENV_PASSWORD $(mysqlpass) -DB_ENV_HOST $(mysqlhost)

The 5th task is Azure App Service Manage, restart Azure App Service with the following values:

Azure subscription – select the relevant Azure subscription
Action – Restart App Service
App Service name - select the App Service of Dev environment

We have completed building the development CD pipeline.

Test Pipeline

Go back to pipeline tab, highlight development environment and choose to clone the environment (step 5), call the new environment test.

As Pre-deployment conditions of test environment (step 6), select after environment trigger, enable the pre-deployment approvals option, choose a member of your team as a approver to initiate the deployment process for test environment.

After closing the blade, click on the link below to view environment tasks (step 7).

The tasks tab will be presented, no need to update the first three SSH tasks.
The 4th task – update the App Service name to the correct App Service for test environment.
The 5th task – update again the App Service name.

Go to variables tab, filter according to test scope and set the variables values to test environment. We have now completed building the test CD pipeline.

Learn more about the implementation option that can create task groups and use it between different environments.

Production Pipeline

Our goal is to have a production rollout without any downtime to achieve that we will use the slot mechanism and routing capabilities that Azure App Services are offering.

To create the production environment, repeat the same steps for creating the test environment (steps 8, 9 and 10).

Go to the variables tab, filter according to production scope and set the values to production environment. Set the value of $(mysqldestdb) to stage DB. In addition, add a new variable $(mysqlproddb) and set the value to production DB.

Go back to tasks tab, update the App Service name for the 4th and 5th tasks, this time check the deploy to slot option and choose ‘staging’ slot which we created for the production App Service.

Add additional tasks by clicking the + icon:

  • One Route Traffic task - Select Production App Service, stage slot and route 100% of the traffic (see below screenshot)
  • Two SSH command tasks – same configuration as other SSH tasks just different command

1st task Command:

      mysqldump -P $(mysqlport) -h $(mysqlhost)  -u $(mysqluser)  -p$(mysqlpass) $(mysqldestdb) > $(resultfile)

2nd task command:

      mysql -h $(mysqlhost) -u $(mysqluser)  -p$(mysqlpass) $(mysqlproddb) < $(resultfile)
  • One Azure App Service deploy task
    Same as 4th task but this time without checking the slot option
  • One Azure App Service Manage task
    Same as 5th task but this time without checking the slot option
  • One Route Traffic task
    Select Production App Service, stage slot and route 0% of the traffic

We have completed building the CD for Production. See the result:

image

Summary

In this series of two blog posts, I hope you had a chance to experiment how easy is to get started with building modernize DevOps processes by adopting Docker, start using Visual Studio Team Services (VSTS) as your CI/CD tool and Azure as the cloud provider. This kind of modernization can be the first step towards deployment transformation of any organization.

Resources


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

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

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

Things to note:

  • This build works in conjunction with previously released SDKs and Visual Studio 2017. You can install this SDK and still also continue to submit your apps that target Windows 10 Creators build or earlier to the store.
  • The Windows SDK will now formally only be supported by Visual Studio 2017 and greater. You can download the Visual Studio 2017 here.
  • This build of the Windows SDK will install on Windows 10 Insider Preview and supported Windows operating systems.

What’s New

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

Breaking Changes

  • New MIDL key words. 

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

The new keywords are:

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

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

The error will be similar to:

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

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

API Updates and Additions

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

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

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

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

Turn your Raspberry Pi into a portable Touchscreen Tablet with SunFounder’s RasPad

$
0
0

RasPadI was very fortunate to get a preview version of the "RasPad" from SunFounder. Check it out at https://raspad.sunfounder.com/ and at the time of these writing they have a Kickstarter I'm backing!

I've written a lot about Raspberry Pis and the cool projects you can do with them. My now-10 and 12 year olds love making stuff with Raspberry Pis and we have at least a dozen of them around the house. A few are portable arcades (some quite tiny PiArcades), one runs PiMusicBox and is a streaming radio, and I have a few myself in a Kubernetes Cluster.

I've built Raspberry Pi Cars with SunFounder parts, so they sent me an early evaluation version of their "RasPad." I was familiar with the general idea as I'd tried (and failed) to make something like it with their 10" Touchscreen LCD for Raspberry Pi.

At its heart, the RasPad is quiet elegant and simple. It's a housing for your Raspberry Pi that includes a battery for portable use along with an integrated touchscreen LCD. However, it's the little details where it shines.

RasPad - Raspberry Pi Touchscreen

It's not meant to be an iPad. It's not trying. It's thick on one end, and beveled to an angle. You put your RaspberryPi inside the back corner and it sits nicely on the plastic posts without screws. Power and HDMI and are inside with cables, then it's one button to turn it on. There's an included power supply as well as batteries to run the Pi and screen for a few hours while portable.

RasPad ports are extensive

I've found with my 10 year old that this neat, organized little tablet mode makes the Pi more accessible and interesting to him - as opposed to the usual mess of wires and bare circuit boards we usually have on my workbench. I could see a fleet of RasPads in a classroom environment being far more engaging than just "raw" Pis on a table.

The back of the RasPad has a slot where a GPIO Ribbon cable can come out to a breakout  board:

GPIO slot is convenient

At this point you can do all the same cool hardware projects you can do with a Raspberry Pi, with all the wires, power, touchscreen, ports, and everything nice and sanitary.

The inside hatch is flexible enough for other boards as well:

Raspberry Pi or TinkerBoard

I asked my 10 year old what he wanted to make with the RasPad/Raspberry Pi and he said he wanted to make a "burglar alarm" for his bedroom. Pretty sure he just wants to keep the 12 year old out of his room.

We started with a Logitech 930e USB Webcam we had laying around. The Raspberry PI can use lots of off-the-shelf high-quality web cams without drivers, and the RasPad keeps all the USB ports exposed.

Then we installed the "Motion" Project. It's on GitHub at https://github.com/Motion-Project/motion with:

sudo apt-get install motion

Then edited /etc/motion/motion.conf with the nano editor (easier for kids then vim). You'll want to confirm the height and width. Smaller is easier on the Pi, but you can go big with 1280x720 if you like! We also set the target_dir to /tmp since motion's daemon doesn't have access to ~/.

There's a number of events you can take action on, like "on_motion_detected." We just added a little Python script to let people know WE SEE YOU"

It's also cool to set location_motion_style to "redbox" so you can see WHERE motion was detected in a frame, and be sure to set stream_localhost to "off" so you can hit http://yourraspberrypiname:8081 to see the stream remotely!

When motion is detected, the 10 year old's little Python script launches:

GET OUT OF MY ROOM

And as a bonus, here is the 10 year old trying to sneak into the room. Can you spot him? (The camera did)

IMG_3389

What would you build with a RaspberryPi Tablet?

BTW, there's a Community Build of the .NET Core SDK for Raspberry Pi!


Sponsor: Get the latest JetBrains Rider for debugging third-party .NET code, Smart Step Into, more debugger improvements, C# Interactive, new project wizard, and formatting code in columns.



© 2018 Scott Hanselman. All rights reserved.
     

R and Docker

$
0
0

If you regularly have to deal with specific versions of R, or different package combinations, or getting R set up to work with other databases or applications then, well, it can be a pain. You could dedicate a special machine for each configuration you need, I guess, but that's expensive and impractical. You could set up virtual machines in the cloud which works well for one-off situations, but gets tedious having to re-configure a new VM each time. Or, you could use Docker containers, which were expressly designed to make it quick easy to configure and launch an independent and secure collection of software and services.

If you're new to the concept of Docker containers, here's a docker tutorial for data scientists. But the concepts are pretty simple. At Docker hub, you can search "images" — basically, bundles of software with pre-configured settings — contributed by the community and by vendors. (You'll be referring to the images by name, for example: rocker/r-base.) You can then create a "container" (a running instance of that image) on your machine with the docker application, or in the cloud using the tools offered by your provider of choice.

For R users, there's a wide array of pre-configured Docker images for R available since 2014, thanks to the Rocker project. You can browse the rocker repository at Docker Hub to see everything available, but it includes:

  • Simple images containing just the latest official R release or the latest daily R build.
  • Images containing both R and RStudio Server.
  • Images with the tidyverse suite of packages pre-installed.
  • Version-stable images, snapshotted to specific R (and RStudio versions) and the R package ecosystem at specific points in time. If you retrieve one of these images using a tag, your docker image will always include the same software, even months or years down the line. These are perfect for production instances, where reproducibility is paramount.

I find the images containing RStudio Server super convenient whenever I need to try out something in a specific R version. All I need to do is provide the image name to Azure Container Instances, and make sure port 8787 is open:

Azure Container Instances
Creating a container for R 3.4.1 with the tidyverse packages and RStudio Server.

 

Azure Container Instances
Be sure to open port 8787 here for browser access.

That's it for the configuration, and after the instance is ready (about 2 minutes) I can use a web browser to visit http://40.121.205.121:8787/ to find a completely fresh R instance and the RStudio IDE. (The actual IP address will be provided for you by Container Instances, and can be found in the Overview section for your instance in the Azure Portal.)

You can of course use other cloud providers as well: Andre Heiss provides this guide for setting up a rocker image in Digital Ocean, and also provides some handy tips for creating your own Docker Files to create custom images of your own design. For more on the Rocker project, follow the link below.

The Rocker Project: Docker Containers for the R Environment

Build your next iOS and Android game with $2,500+ of gaming services

$
0
0

To celebrate PlayFab’s first year at GDC as part of the Microsoft family, we are launching a special offer for developers featuring more than $2,500 worth of PlayFab, App Center, and Azure services free for up to a year.

This promotion is limited to the first 1,000 registrants and ends on May 31, 2018, so visit the promotion page now to claim the services.

What can I do with these free services?

Build, test, and monetize your next hit mobile game with a complete toolset across PlayFab, App Center, and Azure:

PlayFab

Use PlayFab services to build your game faster– then engage, retain, and monetize players through LiveOps tools.

  • Access all core PlayFab services up to 100,000 MAU, including player authentication, data storage, real-time analytics, optional data warehousing, segmentation tools, tournaments and leaderboards, remote config, triggered actions, and more.
  • Build with the same services that power 80 million monthly active players across 1,200+ games.

App Center

Use App Center to test your iOS and Android games on thousands of real devices in the cloud, distribute to beta testers, and monitor real-world usage with crash and analytics data.

  • Test on 3,300+ real iOS and Android devices in the cloud, with 440+ configurations.
  • Distribute your apps to unlimited users and app stores.
  • Send unlimited push notifications to all your users at once for free.
  • Monitor your native iOS and Android games with real-time crash reports and advanced analytics.

Azure

Add advanced Azure services to protect, scale, and grow your game even further.

  • Access Azure compute, storage, and analytics with $200 in credit to spend over 30 days.

Idle Miner

Check out my good friends at Fluffy Fairy games, maker of the popular game Idle Miner Tycoon, to see how they used these tools to build a hit game with million of fans.

Claim this limited time promotion now and drop by our booth at GDC to talk with experts across Azure, PlayFab, App Center, and more.

Columnstore support in Standard tier Azure SQL Databases

$
0
0

We are pleased to announce the general availability of Clustered and NonClustered Columnstore indexes for Standard databases in the S3 and above pricing tiers. These features will enable a number of new and valuable scenarios:

  • Functional dev/test for columnstore based applications, without needing to pay for Premium tier databases for testing purposes. (Of course performance testing should always be done at the target performance configuration.)
  • Deploying applications with columnstore-based storage which do not have the mission critical performance and availability requirements found in Premium tier database requirements.
  • Application vendors can now develop an application which leverages columnstore functionality and deploy it on both Standard and Premium performance tiers.

Columnstore advantages

Columnstore indexes are designed to be extremely efficient for queries which do scans and aggregations across millions and billions of rows of data. They are fundamentally different structures, which physically group data by column, rather than by row. In OLTP-style workloads, queries typically access one, or a few rows at a time, making traditional index structures the most efficient access path. For analytic queries, organizing data by column means that we only need to read the data for those columns involved in a query, and other columns never need be brought into memory at all. Additionally, groups of about 1 million rows (“rowgroups”) are compressed, and metadata about the range of values in each column for the rowgroup is maintained. Thus, we can skip entire rowgroups if we know that there are no rows which contain data that satisfies the query. For more information, please see the columnstore indexes documentation page.

Finally, because the data in each container is all from the same column, it tends to be very similar in value and of course is identical in datatype. This makes it extremely compressible. Typically we are able to compress 90 percent of the space out of a dataset in a columnstore.

All of this together means that we can store more data in less space, and move far less data from disk to memory in order to satisfy a query. Combining this with the ability to process batches of data when performing aggregations gives us very impressive performance improvements indeed. Our customers have seen gains on the order of 100X or more in real-world, production workloads for queries that lend themselves to columnstore processing.

Questions and answers

Q. Are all Standard performance levels supported now?

A. Queries that leverage columnstore indexes have a minimum memory footprint in order to perform well. To ensure an optimal experience, memory provided in S3 or higher is required.

Q. What happens if I create a columnstore in a database and then scale down below S3?

A. The scaling operation will succeed, but the columnstore will not be chosen when the database executes a query.  The index will be dormant with the exception that it will be updated to keep up with data changes in the table. When the database is scaled back to S3 or above, the columnstore index will automatically start being used again.

Q. What do I need to do to enable this feature?

A. For any database at the S3 Performance level or higher, no action is needed. Columnstore Index creation will now succeed with no other actions.

Viewing all 10804 articles
Browse latest View live


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