<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dapr &#8211; Microsoft Open Source Blog</title>
	<atom:link href="https://cloudblogs.microsoft.com/opensource/tag/dapr/feed/" rel="self" type="application/rss+xml" />
	<link>https://cloudblogs.microsoft.com/opensource</link>
	<description>Open dialogue about openness at Microsoft – open source, standards, interoperability</description>
	<lastBuildDate>Wed, 01 Sep 2021 18:25:45 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>The community effort that delivered Dapr v1.0</title>
		<link>https://cloudblogs.microsoft.com/opensource/2021/02/17/the-community-effort-that-delivered-dapr-v1-0/</link>
		
		<dc:creator><![CDATA[Ori Zohar and Yaron Schneider]]></dc:creator>
		<pubDate>Wed, 17 Feb 2021 17:00:26 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Dapr]]></category>
		<guid isPermaLink="false">https://cloudblogs.microsoft.com/opensource/2021/02/17/the-community-effort-that-delivered-dapr-v1-0/</guid>

					<description><![CDATA[<p>Today we've announced the release of Dapr v1.0. The Distributed Application Runtime (Dapr) is now available as a production ready solution that helps developers build resilient, portable event-driven distributed applications on the cloud and edge. It has been an incredible journey bringing Dapr from its initial release in October 2019 to production readiness and it<span><a class="read-more" aria-label="Read more about The community effort that delivered Dapr v1.0" href="https://cloudblogs.microsoft.com/opensource/2021/02/17/the-community-effort-that-delivered-dapr-v1-0/" data-bi-cn="Read more about The community effort that delivered Dapr v1.0">Read more</a></span></p>
<p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2021/02/17/the-community-effort-that-delivered-dapr-v1-0/">The community effort that delivered Dapr v1.0</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Today we've <a href="https://blog.dapr.io/posts/2021/02/17/announcing-dapr-v1.0/" target="_blank" rel="noopener">announced the release of Dapr v1.0</a>. The Distributed Application Runtime (<a href="https://dapr.io" target="_blank" rel="noopener">Dapr</a>) is now available as a production ready solution that helps developers build resilient, portable event-driven distributed applications on the cloud and edge.</p><p>It has been an incredible journey bringing Dapr from its initial release in October 2019 to production readiness and it could not have been made possible without a passionate, open community of developers from around the world. This is the benefit of open sourcethe hundreds of contributors to Dapr prove that many hands make for light work. Having many developers use Dapr, building applications in different languages and in a wide spectrum of scenarios ensures that Dapr is used and tested thoroughly. This was an important part of delivering Dapr v1.0 and will remain important as Dapr moves forward.</p><p>Since the <a href="https://cloudblogs.microsoft.com/opensource/2019/10/16/announcing-dapr-open-source-project-build-microservice-applications/" target="_blank" rel="noopener">initial announcement</a> of Dapr, we've seen a rapid, steady growth of developers contributing to the project in all areas, and today we have 700 individual contributors to the project. This includes developers from cloud vendors such as Alibaba Cloud, large companies such as HashiCorp, as well as enterprises such as <a href="https://customers.microsoft.com/en-us/story/1336089737047375040-zeiss-accelerates-cloud-first-development-on-azure-and-streamlines-order-processing" target="_blank" rel="noopener">ZEISS</a> who is building business critical systems with Dapr in production. Additionally, smaller startups such as <a href="https://blog.dapr.io/posts/2021/02/09/running-dapr-in-production-at-roadwork/" target="_blank" rel="noopener">Roadwork</a> have made contributions while using Dapr to gain portability for their cloud native solution and accelerate its development for more agility.</p><p>A great example of this kind of contribution is the recent addition of the Dapr <a href="https://blog.dapr.io/posts/2021/02/12/how-the-dapr-php-sdk-came-to-be/" target="_blank" rel="noopener">PHP SDK.</a> This SDK was contributed by a developer from Automattic who is both passionate about PHP and excited about the possibilities Dapr holds. Contributions go beyond code and come in the form of docs, samples, issues, and guidance to Dapr users like the one provided by New Relic on <a href="https://blog.dapr.io/posts/2021/01/26/observing-dapr-applications-with-new-relic-one/" target="_blank" rel="noopener">how Dapr observability can be used with their monitoring tools</a>.</p><p>As illustrated above, contributors have been making an impact in all corners of the <a href="https://github.com/dapr/" target="_blank" rel="noopener">Dapr project</a>. Noticeably, the areas that have seen contributions from the greatest number of community members are the core areas of Daprthe Dapr runtime, which includes the code of the Dapr sidecar, the docs, and the components-contrib, the repository holding the code for components.</p><p>Having many contributors build new components is especially valuable, as components offer Dapr users the ability to leverage the Dapr API and interface with a wide range of technologies and systems. Having a large number of components available means helping even more developers simplify and accelerate the process of writing distributed applications. More components also means more flexibility in where these applications can be deployed, making code even more portable in multi-cloud or hybrid scenarios.</p><p>Today Dapr offers over 70 different components for state management (such as Redis, MySQL, Azure Cosmos DB, and <a href="https://v1-rc3.docs.dapr.io/operations/components/setup-state-store/supported-state-stores/" target="_blank" rel="noopener">many more</a>), Pub/Sub messaging (such as RabbitMQ, AWS SNS/SQS, Kafka and <a href="https://v1-rc3.docs.dapr.io/operations/components/setup-pubsub/supported-pubsub/" target="_blank" rel="noopener">more</a>), secret stores (such as Kubernetes secret store, Azure Key Vault, HahiCorp Vault, and <a href="https://v1-rc3.docs.dapr.io/operations/components/setup-secret-store/supported-secret-stores/" target="_blank" rel="noopener">more</a>) and both input and output bindings to integrate with services such as SendGrid, Azure Events Hub, and <a href="https://v1-rc3.docs.dapr.io/operations/components/setup-bindings/supported-bindings/" target="_blank" rel="noopener">more</a>.</p><p>Building an inclusive, open community has always been a high priority for the Dapr project. Last September, we shared the <a href="https://blog.dapr.io/posts/2020/09/30/transitioning-the-dapr-project-to-open-governance/" target="_blank" rel="noopener">open governance model</a> Dapr follows. We are committed to keeping Dapr vendor-neutral and welcoming to all developers and community members. To this end, we have begun evaluating open-source software foundations for Dapr's home in the future.</p><p>We invite you to try Dapr yourself and join the community. We believe that Dapr can help you build distributed applications more easily and we are always looking for more developers to provide feedback, open issues, and help us define the future of Dapr.</p><h2>Learn more about Dapr</h2><ul><li><a href="https://docs.dapr.io/getting-started" target="_blank" rel="noopener">Get started with Dapr</a></li><li>Explore the Dapr <a href="https://docs.dapr.io" target="_blank" rel="noopener">documentation</a></li><li>Learn more about <a href="https://aka.ms/dapr-v1" target="_blank" rel="noopener">Dapr v1.0</a></li></ul><h2>Join the Dapr community</h2><ul><li>Join the community on <a href="https://aka.ms/dapr-discord" target="_blank" rel="noopener">Discord</a></li><li>Join the Dapr <a href="https://github.com/dapr/community#community-meetings" target="_blank" rel="noopener">community calls</a> and <a href="https://www.youtube.com/channel/UCtpSQ9BLB_3EXdWAUQYwnRA" target="_blank" rel="noopener">watch recordings</a> of past calls</li><li>Follow <a href="https://twitter.com/daprdev/" target="_blank" rel="noopener">@daprdev</a> on Twitter</li></ul><p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2021/02/17/the-community-effort-that-delivered-dapr-v1-0/">The community effort that delivered Dapr v1.0</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>4 open source lessons for 2021</title>
		<link>https://cloudblogs.microsoft.com/opensource/2021/01/14/four-open-source-lessons/</link>
		
		<dc:creator><![CDATA[Sarah Novotny]]></dc:creator>
		<pubDate>Thu, 14 Jan 2021 16:59:50 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Dapr]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[WebAssembly]]></category>
		<guid isPermaLink="false">https://cloudblogs.microsoft.com/opensource/2021/01/14/four-open-source-lessons/</guid>

					<description><![CDATA[<p>2020 fundamentally changed how many companies and teams workseemingly overnight, remote-first cultures became the new norm and people had to change how they communicate and collaborate. However, for those of us who have been deeply engaged in open source, remote work has been our norm for many years because open source communities are large, globally<span><a class="read-more" aria-label="Read more about 4 open source lessons for 2021" href="https://cloudblogs.microsoft.com/opensource/2021/01/14/four-open-source-lessons/" data-bi-cn="Read more about 4 open source lessons for 2021">Read more</a></span></p>
<p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2021/01/14/four-open-source-lessons/">4 open source lessons for 2021</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>2020 fundamentally changed how many companies and teams workseemingly overnight, remote-first cultures became the new norm and people had to change how they communicate and collaborate. However, for those of us who have been deeply engaged in open source, remote work has been our norm for many years because open source communities are large, globally distributed, and require effective collaboration from developers around the world. We've had ample time to create and refine many digital-first practices.</p><p>It&rsquo;s no surprise that open source adoption and usage grew significantly this year. New data from <a href="https://octoverse.github.com/" target="_blank" rel="noopener">GitHub's 2020 Octoverse report</a> shows there were over 60 million new repositories created this past year, and more than 56 million developers on GitHub. When people had to stay home, developers came together to find community and connections through open source. And though open source developers had a lot of established remote practices, this year challenged companies of all sizes to integrate their open source software experiences and development models in new ways, bringing new learnings as a result.</p><p>We wanted to share four places where Microsoft is learning from and growing our engagement in open source over the last year that we hope can be useful for any developer or team looking to build and collaborate in 2021.</p><h2><strong>1. </strong><strong>Seeking different perspectives makes better software</strong></h2><p>Success in open source is just as much about your own contributions to the community as it is about what you learn from the community. Behind every pull request, issue, and code snippet, is a person. It's important to connect with themto listen, learn, and empathize with them. They offer a different perspective and feedback that your team may not be thinking of.</p><p>I hear conversations in meetings (one of the new virtual hallways) about making sure we get feedback from industry users who are well outside the Microsoft faithful. With this new feedback, I hear a collective sound of Microsoft's perspective expanding and our gratitude for the new and different views we are receiving.</p><p>One example of community feedback changing our perspective was when the <a href="https://dapr.io/" target="_blank" rel="noopener">Dapr project</a> received a lot of user feedback requesting a streamlined API to retrieve application secrets. The Microsoft team working on Dapr had not planned that work in the current cycle, but the community made it very clear that this new API would solve a lot of problems that developers were facing.</p><p>The Dapr maintainers worked closely with community members who submitted multiple PRs to add this functionality, covering everything from code to documentation to samples. After this was added, we found that customers also picked up this functionality and used it in their Dapr implementation.</p><p>This reminded us that listening to community feedback is extremely valuable, and that given opportunity, encouragement and support, community members will contribute effort to make requirements a reality.</p><h2><strong>2. Finding the balance between policy and autonomy</strong></h2><p>To help drive Microsoft's open source efforts, we have an <a href="https://opensource.microsoft.com/" target="_blank" rel="noopener">Open Source Programs Office</a> (OSPO), whose goal is to help our employees consume and participate in open source safely, effectively, and easily.</p><p>Over the last year, we have heard from more and more enterprise customersfrom retailers to banks to auto makerswho are looking to establish similar offices and practices internally. We share and discuss best practices on how to find the balance between setting policy while also empowering employees to do the right thing. While OSPOs will look different depending on your company's needs, a few common practices we often discuss include creating a cross-functional group, setting clear policies (and making them easy to find and understand!), investing in tooling, and providing rewards and motivation. We've shared our <a href="https://opensource.microsoft.com/program/#program-overview" target="_blank" rel="noopener">guidance and policies</a> and we look forward to continuing to build out our own internal practices, and to share our learnings along the way to help others do the same.</p><h2><strong>3. Securing every link in your supply chain is critical</strong></h2><p>Using open source in your development process has many advantages, including increased time to market, reduced cost of ownership, and improved software quality. However, open source, like any software, has its risksopen source can contain security defects that lead to vulnerabilitiesand <a href="https://octoverse.github.com/#securing-software" target="_blank" rel="noopener">new research shows</a> security vulnerabilities often go undetected for more than four years before being disclosed. Because open source software is inherently community-driven, there is no central or single authority responsible for quality and maintenance. Source code can be copied and cloned, leading to outsized complexity with versioning and dependencies. Worse yet, attackers can become maintainers and introduce malware.</p><p>As more systems and critical infrastructure increasingly rely on open source software, it's more important than ever that we build better security through a community-driven process. Securing open source is an essential part of securing the supply chain for every company. In 2020, we came together alongside GitHub, Google, IBM and others to create the <a href="https://cloudblogs.microsoft.com/opensource/2020/08/03/microsoft-joins-open-source-security-foundation/">Open Source Security Foundation</a> (OpenSSF). The group is helping developers with resources to identify security threats to open source projects, providing education and learning resources, and finding ways to speed up vulnerability disclosures. In the coming year, the OpenSSF looks to provide hands-on help to improve the security of the world's most critical open source projects.</p><h2><strong>4. Over communicate</strong><strong></strong></h2><p>Big companies and big open source projects know that important information has to be communicated broadly and frequently across different channels. Even with this knowledge, Microsoft had to change rapidly this year just as so many other companies did. We no longer had moments of serendipitous interaction where you learn something helpful from bumping into someone in the coffee line, walking with a colleague to a meeting, or waiting with someone for the elevator.</p><p>This year, we learned the importance of over communication, which has been a hallmark of open source communities. Over communication is key because uncertainty can be more stressful than either good or bad news.</p><p>Take, for example, the Kubernetes projectit has never had an office and today they have 407 chat channels, which run the gamut from regional user groups to developer discussions about particular technology subsystems. These chat roomswhether they are IRC channels, Twitter hashtags, Teams, or Slack *are* the offices of open source projects.</p><p>While chat rooms are the new water cooler, they are temporal and transient. They are not the new announcement email or documentation repository. In the same way that no one is expected to know what happened in every meeting or conversation in the office kitchen, few people read the history of chat rooms when they return to their desk. Understanding how communication has changed and what expectations are set for every medium allows internal communication to remain a critical support of a good collaborative culture.</p><h2><strong>Looking ahead to 2021, together</strong></h2><p>These four investment areas are just as important to good corporate culture and health, as they are part of open source collaboration. We strongly believe that most of the hard (and, by that we mean interesting) problems of today will take a team or the whole industry to solve. This means we all need to be trustworthy and (corporately) self-aware participants in open source. <strong></strong></p><p>A few years ago if you wanted to get several large tech companies together to align on a software initiative, establish open standards, or agree on a policy, it would often require several months of negotiation, meetings, debate, back and forth with lawyers&hellip; and did we mention the lawyers? Open source has completely changed this: it has become an industry-accepted model for cross-company collaboration. When we see a new trend or issue emerging that we know would be better to work on together to solve, we come together in a matter of weeks, with established models we can use to guide our efforts.</p><p>As a result, companies are working together more frequently, and the amount of cross-industry work we're able to accomplish is accelerating. In 2020 alone, Microsoft participated in dozens of industry groups, associations, and initiativesfrom long-standing established organizations, like the Linux Foundation and Apache Foundation, to new emerging communities like Rust and WebAssembly. This work across companies and industries will continue in the year ahead and we look forward to learning, growing, and earning our place in open source.</p><p>Check out more in our 2021 developer insights blog series:</p><ul><li><a href="https://blogs.microsoft.com/?p=52559407" target="_blank" rel="noopener">Software development in 2021 and beyond</a> by Amanda Silver</li><li><a href="https://powerapps.microsoft.com/en-us/blog/3-low-code-trends-why-low-code-will-be-big-in-your-2021-tech-strategy/" target="_blank" rel="noopener">Low-code trends: Why low-code will be big In your 2021 tech strategy</a> by Dona Sarkar</li><li><a href="https://www.hanselman.com/blog/looking-back-on-software-development-in-2020-and-forward-to-2021" target="_blank" rel="noopener">Looking back on software development in 2020 and forward to 2021</a> by Scott Hanselman</li></ul><p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2021/01/14/four-open-source-lessons/">4 open source lessons for 2021</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Announcing Dapr integration in Azure API Management Service</title>
		<link>https://cloudblogs.microsoft.com/opensource/2020/09/22/announcing-dapr-integration-azure-api-management-service-apim/</link>
		
		<dc:creator><![CDATA[Mark Chmarny and Vladimir Vinogradsky]]></dc:creator>
		<pubDate>Tue, 22 Sep 2020 16:00:56 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Dapr]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<category><![CDATA[Microsoft Azure]]></category>
		<guid isPermaLink="false">https://cloudblogs.microsoft.com/opensource/2020/09/22/announcing-dapr-integration-azure-api-management-service-apim/</guid>

					<description><![CDATA[<p>Dapr integration in the Azure API Management (APIM) service is now available. This new capability enables operations teams to directly expose Dapr microservices as APIs and make those APIs discoverable and easily consumable by developers with proper controls across multiple Dapr deploymentswhether in the cloud, on-premises, or on the edge. Since its initial release last<span><a class="read-more" aria-label="Read more about Announcing Dapr integration in Azure API Management Service" href="https://cloudblogs.microsoft.com/opensource/2020/09/22/announcing-dapr-integration-azure-api-management-service-apim/" data-bi-cn="Read more about Announcing Dapr integration in Azure API Management Service">Read more</a></span></p>
<p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2020/09/22/announcing-dapr-integration-azure-api-management-service-apim/">Announcing Dapr integration in Azure API Management Service</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<img loading="lazy" alt="Dapr logo" width="200" height="156" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-logo_image-1.png"><p>Dapr integration in the Azure API Management (APIM) service is now available. This new capability enables operations teams to directly expose Dapr microservices as APIs and make those APIs discoverable and easily consumable by developers with proper controls across multiple Dapr deploymentswhether in the cloud, on-premises, or on the edge.</p><p>Since its <a href="https://cloudblogs.microsoft.com/opensource/2019/10/16/announcing-dapr-open-source-project-build-microservice-applications/">initial release last year</a>, Dapr has been helping developers build stateless and stateful applications with any language or framework. By codifying the common microservice patterns, like service discovery and invocation with build-in retry logic, publish-and-subscribe with at-least-once delivery semantics, or pluggable binding resources to ease service composition using external APIs, Dapr is quickly becoming the de facto runtime for modern, distributed applications.</p><p>The larger number of Dapr deployments across multiple environments also comes with the increased complexity of API management. Using the Dapr integration in Azure API Management announced today, users are now able to apply the <a href="https://aka.ms/apim/shgw/overview">self-hosted gateway</a> feature of APIM to manage all of their Dapr APIs, along with other APIs, in a single interface. This allows developers to decouple APIs from their backend service lifecycle. The more than 50 built-in policy templates can quickly accelerate the API management with things like TLS connection termination, payload formation, throttling enforcement, and caching across their deployments via an always up-to-date portal.</p><h2>Using API Management with Dapr APIs</h2><p>To illustrate the Dapr integration in APIM, we are going to walk through the process of securely and reliably exposing a public API that allows users to invoke a specific method on a single service deployed in Dapr. This is a common <a href="https://github.com/dapr/docs/blob/master/concepts/service-invocation/README.md#service-invocation">service invocation</a> scenario where users may have any number of Dapr services, but only a small subset of them need to be available externally.</p><p>APIM supports two other <a href="https://github.com/dapr/docs/tree/master/concepts#building-blocks">Dapr building blocks</a>, <a href="https://github.com/dapr/docs/blob/master/concepts/publish-subscribe-messaging/README.md#publishsubscribe-messaging">pub/sub</a>, and <a href="https://github.com/dapr/docs/blob/master/concepts/bindings/README.md#bindings">resource binding</a>s. See our reproducible demo at the end of this page for an in-depth walk-through for each one of these use-cases.</p><h3>API Configuration</h3><p>To define an API you can use any of the formats supported by APIM. In the example below, we are using the <a href="https://swagger.io/specification/">OpenAPI</a> specification format.</p><img loading="lazy" alt="Dapr code snippet" width="794" height="501" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-code-snippet_1.png"><p>You can import this file into APIM using either the <a href="https://docs.microsoft.com/en-us/cli/azure/apim/api?view=azure-cli-latest#az_apim_api_import">Azure CLI</a> shown below, or the <a href="https://docs.microsoft.com/en-us/azure/api-management/import-and-publish">APIM service</a> in Azure portal:</p><img loading="lazy" alt="Dapr code snippet" width="797" height="205" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-code-snippet_2.png"><h3>API Operation Policy</h3><p>To integrate this API with our Dapr microservice we will use a simple policy. The APIM <a href="https://aka.ms/apimpolicies">policies</a> encapsulate common API management functions and are composed into a series of steps that are sequentially executed on each request. These policies can be defined inside of inbound, outbound, and backend blocks. To configure the "/echo" operation invocation to be forwarded to Dapr API, we will define out a policy within the inbound section.</p><img loading="lazy" alt="Dapr code snippet" width="793" height="203" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-code-snippet_3.png"><p>The "&lt;base /&gt;" element at the beginning in-lines all the policies defined higher up in the chain at the API or even APIM service level (e.g., throttling or authorization). Placing that element before all others ensures that APIM evaluates it before forwarding the invocation to the back-end service.</p><p>Routing the inbound request to Dapr is as simple as setting the backend service using "backend-id" attribute to "dapr" that tells APIM to forward the invocation in its original format to the Dapr API implemented by the Dapr sidecar container running alongside self-hosted gateway. The "dapr-app-id" and "dapr-method" attributes allow us to set the Dapr application ID and method name where we want this API invocation to be forwarded.</p><p>The entire service discovery and actual invocation, including possible protocol translation between HTTP and gRPC, retries, distributed tracing, and error handling, are all done by Dapr. And since the external mapping of the API user invocations to Dapr is done in APIM policy, it can be easily and safely remapped to any other version as the API implementation evolves over time.</p><p>As that service evolves and potentially has additional versions, which may require different payload formats, APIM can manage the entire process through either its <a href="https://docs.microsoft.com/en-us/azure/api-management/api-management-revisions">revisions</a>, for non-breaking changes, or <a href="https://docs.microsoft.com/en-us/azure/api-management/api-management-versions">versions</a>, in cases where API consumer opt-in is required.</p><h3>Self-hosted Gateway deployment</h3><p>To enable APIM to manage the APIs exposed by your Dapr services you will need to deploy and configure the self-hosted gateway into your Kubernetes cluster using <a href="https://docs.microsoft.com/en-us/azure/api-management/how-to-deploy-self-hosted-gateway-kubernetes">these steps</a>. To enable Dapr support in the gateway, you first augment the Kubernetes deployment template with a few Dapr annotations:</p><img loading="lazy" alt="Dapr code snippet" width="794" height="168" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-code-snippet_4.png"><p>These annotations tell the Dapr control plane to inject a Dapr sidecar into the APIM gateway pod, which gives it the ability to invoke the Dapr API. To learn more about the Dapr Kubernetes sidecar configuration see <a href="https://github.com/dapr/docs/tree/master/concepts/hosting#running-dapr-in-kubernetes-mode">Dapr docs</a>.</p><p>The self-hosted gateway by default deploys two replicas to ensure availability during upgrades. Once ready, each replica will now have a second container (daprd) in the pod.</p><img loading="lazy" alt="Dapr code snippet" width="796" height="66" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-code-snippet_5.png"><p>With the APIM gateway configured, you can invoke the "echo" service using the cluster ingress, while giving the operators the ability to manage their Dapr APIs using a single interface.</p><img loading="lazy" alt="Dapr code snippet" width="796" height="89" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/09/Dapr-code-snippet_6.png"><h2>Give it a try!</h2><p>This post only covers the service invocation capability of the Dapr integration with APIM. You can find a full demo repo with step-by-step instructions on how to configure this and other Dapr APIs integrations in APIM <a href="https://aka.ms/apim/dapr/walkthru">on GitHub</a>. The complete reference of APIM Dapr integration policies can be found on the <a href="https://aka.ms/apim/dapr/policies" target="_blank" rel="noopener noreferrer">Microsoft Azure site</a>. We are excited to see what you can build with this Dapr and APIM gateway integration. You can reach us either in the <a href="https://gitter.im/Dapr/community">Dapr community Gitter channel</a> or in our <a href="https://github.com/dapr/dapr#community">community calls</a>.</p><p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2020/09/22/announcing-dapr-integration-azure-api-management-service-apim/">Announcing Dapr integration in Azure API Management Service</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Announcing Azure Functions extension for Dapr</title>
		<link>https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/</link>
					<comments>https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/#comments</comments>
		
		<dc:creator><![CDATA[Jeff Hollan and Mark Fussell]]></dc:creator>
		<pubDate>Wed, 01 Jul 2020 16:00:14 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Dapr]]></category>
		<category><![CDATA[Kubernetes]]></category>
		<guid isPermaLink="false">https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/</guid>

					<description><![CDATA[<p>We're excited to announce a new extension for Azure Functions that lets a function seamlessly interact with Dapr for building cloud-native applications. Azure Functions provides an event-driven programming model and Dapr provides a set of essential cloud-native building blocks. With this new extension, you can now bring both together for serverless and event-driven apps that<span><a class="read-more" aria-label="Read more about Announcing Azure Functions extension for Dapr" href="https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/" data-bi-cn="Read more about Announcing Azure Functions extension for Dapr">Read more</a></span></p>
<p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/">Announcing Azure Functions extension for Dapr</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>We're excited to announce a new extension for Azure Functions that lets a function seamlessly interact with Dapr for building cloud-native applications. Azure Functions provides an event-driven programming model and Dapr provides a set of essential cloud-native building blocks. With this new extension, you can now bring both together for serverless and event-driven apps that can use the growing set of capabilities Dapr provides. Developers, teams, and organizations can use these tools to build functions that use a powerful set of capabilities with little code. You can <a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/quickstart.md" target="_blank" rel="noopener noreferrer">get started today</a> with the extension, which is fully open source <a href="https://github.com/dapr/azure-functions-extension" target="_blank" rel="noopener noreferrer">on GitHub</a>.</p><p>Currently, this extension is focused on being used with the Azure Functions runtime hosted in Kubernetes or IoT Edge and is not currently available in the Azure Functions hosting plans.</p><p>Late last year, <a href="https://cloudblogs.microsoft.com/opensource/2019/10/16/announcing-dapr-open-source-project-build-microservice-applications/" target="_blank" rel="noopener noreferrer">Microsoft announced Dapr</a>, a distributed application runtime. Dapr provides a set of cloud-native building blocks including state management, service invocation, publish and subscribe, distributed tracing, and more. Dapr runs as a sidecar to any application to provide these capabilities across cloud and edge, integrating with any programming model or framework, including Express, Flask, ASP.NET, or Functions.</p><img loading="lazy" alt="Azure Functions and Dapr logos" width="383" height="207" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/06/Azure-Functions-and-Dapr-logos.png"><p>Azure Functions, in addition to the serverless offering within the Azure cloud, provides an event-driven runtime and programming model for those apps. Azure Functions enables you to write event-driven code that can trigger and <a href="https://keda.sh/" target="_blank" rel="noopener noreferrer">scale on events</a>, with a number of out of the box triggers and bindings to push your data. It's a purpose-built runtime for event-driven applications, providing capabilities and tooling to run these apps anywhere.</p><h2></h2><p>&nbsp;</p><h2>Azure Functions and Dapr working together</h2><p>This new extension allows you to more easily pair the Azure Functions programming model with capabilities from Dapr. For example, you may wish to keep some persistent and flexible state alongside your function. You can now create and retrieve state managed by Dapr directly within the functions programming model like below:</p><img loading="lazy" alt="Dapr Azure Function code snippet" width="526" height="874" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/07/Dapr-Azure-Function-code-snippet-1.png"><p>This state example would work alongside a Dapr persistent state store, deployed as a Dapr component, which can be interchanged for any of the <a href="https://github.com/dapr/components-contrib/tree/master/state#state-stores">many Dapr state stores</a>.</p><h2>Publish and subscribe between Azure Functions</h2><p>As another example, you can use the Dapr extension to publish and subscribe to topics between functions. Extending on Dapr state, the code below shows an example of using Dapr publish and subscribe with a JavaScript Azure Function. The Azure Function will publish data to a topic named <em>myTopic</em>.</p><img loading="lazy" alt="Dapr Azure Function code snippet" width="657" height="1024" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/07/Dapr-Azure-Function-code-snippet-2-657x1024.webp"><p>Another function can now subscribe to this published topic and trigger whenever data is sent.</p><h2>Dapr extension bindings and triggers</h2><p>These are a couple of examples of how to use the Dapr extension. This extension has support for triggering functions on a Dapr service invocation, pub/sub events, or Dapr input/output bindings. It provides integration to use Dapr state, secrets, topics, and bindings from directly in your function code. The Dapr SDKs and contracts are managed completely through the Azure Functions host, enabling developers to surface these capabilities quickly and efficiently. Below is the list of bindings and triggers available.</p><table width="593"><thead><tr><td><strong>Binding Type</strong></td><td><strong>Direction</strong></td><td width="328"><strong>Description</strong></td></tr></thead><tbody><tr><td><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/input-bindings.md#state-input-binding">daprState</a></td><td>Input</td><td width="328">Pull in Dapr state for an execution</td></tr><tr><td><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/input-bindings.md#secret-input-binding">daprSecret</a></td><td>Input</td><td width="328">Pull in Dapr secrets for an execution</td></tr><tr><td><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/output-bindings.md#state-output-binding">daprState</a></td><td>Output</td><td width="328">Save a value to Dapr state</td></tr><tr><td><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/output-bindings.md#service-invocation-output-binding">daprInvoke</a></td><td>Output</td><td width="328">Invoke another Dapr app</td></tr><tr><td><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/output-bindings.md#topic-publish-output-binding">daprPublish</a></td><td>Output</td><td width="328">Publish a message to a Dapr topic</td></tr><tr><td><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/output-bindings.md#dapr-binding-output-binding">daprBinding</a></td><td>Output</td><td width="328">Send a value to a Dapr output binding</td></tr></tbody></table><p>&nbsp;</p><table width="593"><thead><tr><td width="257"><strong>Trigger Type</strong></td><td width="336"><strong>Description</strong></td></tr></thead><tbody><tr><td width="257"><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/triggers.md#input-binding-trigger">daprBindingTrigger</a></td><td width="336">Trigger on a Dapr input binding</td></tr><tr><td width="257"><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/triggers.md#service-invocation-trigger">daprServiceInvocationTrigger</a></td><td width="336">Trigger on a Dapr service invocation</td></tr><tr><td width="257"><a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/triggers.md#topic-trigger">daprTopicTrigger</a></td><td width="336">Trigger on a Dapr topic subscription</td></tr></tbody></table><h2>Give this a try!</h2><p>Today the extension is supported in any environment that supports running Dapr and Azure Functions host<em></em>primarily self-hosted and Kubernetes modes. Azure Functions, Dapr, and this extension are all fully open source and can be run across cloud, hybrid, and edge. You can get started with this <a href="https://github.com/dapr/azure-functions-extension">extension on GitHub</a>, and <a href="https://github.com/dapr/azure-functions-extension/blob/master/docs/quickstart.md">follow this quickstart</a> to build a JavaScript function that uses Dapr for state management and pub/sub across functions in a Kubernetes cluster.</p><p>We'd love for you to try out this Functions extension for Dapr, give feedback by raising issues in <a href="https://github.com/dapr/azure-functions-extension">the repo</a> and become a member of the community.</p><p>Questions or feedback about this release? Let us know in the comments below.</p><p>&nbsp;</p><p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/">Announcing Azure Functions extension for Dapr</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://cloudblogs.microsoft.com/opensource/2020/07/01/announcing-azure-functions-extension-for-dapr/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>How Distributed Application Runtime (Dapr) has grown since its announcement</title>
		<link>https://cloudblogs.microsoft.com/opensource/2020/04/29/distributed-application-runtime-dapr-growth-community-update/</link>
		
		<dc:creator><![CDATA[Mark Fussell, Yaron Schneider and Ori Zohar]]></dc:creator>
		<pubDate>Wed, 29 Apr 2020 16:00:35 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Dapr]]></category>
		<guid isPermaLink="false">https://cloudblogs.microsoft.com/opensource/2020/04/29/distributed-application-runtime-dapr-growth-community-update/</guid>

					<description><![CDATA[<p>Since the October 2019 announcement of the Distributed Application Runtime (Dapr), we have seen a tremendous response and the emergence of an engaged Dapr community. Over the past six months, more than 120 contributors have jumped on board and participated in the effort to build and extend Dapr through the GitHub repos  opening issues,<span><a class="read-more" aria-label="Read more about How Distributed Application Runtime (Dapr) has grown since its announcement" href="https://cloudblogs.microsoft.com/opensource/2020/04/29/distributed-application-runtime-dapr-growth-community-update/" data-bi-cn="Read more about How Distributed Application Runtime (Dapr) has grown since its announcement">Read more</a></span></p>
<p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2020/04/29/distributed-application-runtime-dapr-growth-community-update/">How Distributed Application Runtime (Dapr) has grown since its announcement</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Since the <a href="https://cloudblogs.microsoft.com/opensource/2019/10/16/announcing-dapr-open-source-project-build-microservice-applications/" target="_blank" rel="noopener noreferrer">October 2019 announcement</a> of the Distributed Application Runtime (<a href="https://dapr.io/" target="_blank" rel="noopener noreferrer">Dapr</a>), we have seen a tremendous response and the emergence of an engaged Dapr community. Over the past six months, more than 120 contributors have jumped on board and participated in the effort to build and extend Dapr through the <a href="https://github.com/dapr/" target="_blank" rel="noopener noreferrer">GitHub repos</a> opening issues, offering feature proposals, taking part in discussions, and making more than 350 distinct code contributions. This community engagement has demonstrated that Dapr enables developers from all backgrounds to solve some of the toughest challenges when developing distributed applications. We are grateful for the engagement and participation from the community helping us make Dapr better.</p><p>On top of the community response, we have also been busy working with customers around the world and from different industries to use Dapr for developing business-critical workloads. These customer engagements have been a tremendous source of feedback and participation, helping shape the roadmap for Dapr and putting Dapr on a path towards a stable v1.0 release. In future blog posts, we'll share some of these real-world scenarios where Dapr is helping companies build their future applications.</p><h1>What is Dapr?</h1><p>Dapr is an event-driven, portable runtime for building microservices on cloud and edge and embraces the diversity of languages and developer frameworks. Dapr codifies best practices for building distributed applications and at its core are API abstractions that provide common capabilities needed to build microservices, including state management, service invocation, pub/sub messaging, secrets management, and others.</p><p>Each capability is abstracted through a "Building Block" that defines a simple and consistent API decoupled from the technology chosen to implement it through the use of pluggable components. This best practice of decoupling frees developers from the burden of integrating and having a deep understanding of the underlying technologies they use. The use of building blocks also allows swapping implementations when the application is deployed in different hosting environments or when needs change as the application evolves without affecting your code. Developers are free to use all, a few, or even just one building block as needed.</p><img loading="lazy" alt="a screenshot of a cell phone" width="1222" height="568" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/04/dapr-overview-rust.png"><p>Since Dapr itself provides both HTTP REST or gRPC APIs, applications using Dapr are portable and can be written in any language. Furthermore, Dapr runs as a sidecar to the application so a developer using Dapr simply sends a call to the Dapr sidecar and Dapr takes care of the rest. Since Dapr is a process or container that runs alongside the application it can run in any environment including a local dev machine (running Linux, Mac, or Windows), a Kubernetes cluster, an ARM edge device, or any other compute infrastructure. Dapr is also not limited to either on-premises or cloud environments it can run alongside any application, written in any language, deployed to any environment.</p><ul><li>To learn more about how Dapr read <a href="https://github.com/dapr/docs/blob/master/overview/README.md">this overview</a>.</li><li>To try it yourself, see <a href="https://github.com/dapr/docs/blob/master/getting-started/README.md">Getting started with Dapr</a>.</li></ul><h1>Dapr evolution</h1><p>Dapr has evolved considerably in the five versions <a href="https://github.com/dapr/dapr/releases/">released</a> since October 2019. These are some of the highlights made in the past six months:</p><h2>More building blocks, more components</h2><p><strong>Secrets building block</strong> &ndash; The first example of a community-driven addition to Dapr is the introduction of the <a href="https://github.com/dapr/docs/blob/master/concepts/secrets/README.md">Secrets building block</a> which enables developers to retrieve secrets from secret stores that can then be used to authenticate to other resources, such as database access. The secrets building block takes away the complexity of authentication and secret retrieval with the store and turns this into a local API call. Currently supported secret stores include, HashiCorp Vault, Azure Key Vault, AWS Secret Manager, GCP Secret Manager, and Kubernetes.</p><p><strong>More components</strong> &ndash; In addition, there have been many contributions of components, extending Dapr's support for commonly used technologies across all building blocks. For example, Dapr was launched with support for two state stores (Redis and Azure Cosmos DB) and since has added components for a total of 16 different state stores, including Memcached, MongoDB, AWS DynamoDB, among others. To explore more components, see the <a href="https://github.com/dapr/components-contrib">components contribution GitHub repo</a>.</p><h2>Extended developer tools support</h2><p><strong>SDKs </strong>&ndash; While Dapr is independent of any programming language, it can be easily integrated into applications with language-specific SDKs. As we see more developers using Dapr, our investment in these SDKs to help streamline Dapr integration has increased. Dapr offers SDKs for JavaScript, Python, Java, .NET, Go, as well as recently added Rust and C++. In addition, based on community feedback many improvements have been added into the Java SDK, included virtual actors, typed classes, and integration with the Spring Boot web framework. For .NET there have also been improvements to the types classes and integration with ASP.NET Core web framework. Similar support is planned for the other SDKs as part of the future road map.</p><p><strong>Visual Studio Code extension</strong> &ndash; Being able to develop applications on your local machine without any cloud dependency is important for productivity and cost and is a key goal of Dapr. The Dapr Visual Studio Code (VS Code) preview extension helps developers debug applications using Dapr, interact with the Dapr runtime, and combines with the Dapr CLI. You can find the extension in the <a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-dapr">Visual Studio Marketplace</a>.</p><img loading="lazy" alt="Visual Studio Code extension" width="1280" height="720" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/04/Dapr3.jpg"><p><strong>Dapr dashboard </strong> This <a href="https://github.com/dapr/dashboard">Dapr dashboard</a> is a web UI that helps you visualize information about Dapr instances running on your local machine or on Kubernetes.</p><img loading="lazy" alt="Dapr dashboard" width="1237" height="586" src="https://cloudblogs.microsoft.com/uploads/prod/sites/37/2020/04/Dapr4-2.jpg"><h2>Increased security</h2><p>Making sure that messages cannot be sniffed or tampered with in a distributed application is vital to prevent any malicious behavior. Dapr provides end-to-end secure encryption via mutual TLS. This includes encryption of network traffic between the sidecars and from every sidecar to the Dapr control plane. Mutual TLS is turned on by default for any application using Dapr and is configurable to rollover certificates on a frequent basis, for example, every hour. Users can bring their own certificates or use the built-in certificate authority Dapr provides to ease certificate generation and management. Learn more about <a href="https://github.com/dapr/docs/blob/master/concepts/security/README.md">Dapr security</a> features.</p><h2>Observability</h2><p>As the Dapr sidecars run alongside services, it offers <a href="https://github.com/dapr/docs/blob/master/concepts/observability/README.md">advanced observability capabilities</a> including tracing, logging, and metrics collection. Dapr currently uses the Open Census standard and is moving to the <a href="https://opentelemetry.io/">Open Telemetry</a> standard as it moves to a stable version. The adoption of standards, where possible, is a key goal of Dapr. For example, all pub/sub events also conform to the <a href="https://cloudevents.io/">v1.0 Cloud Events</a> specification</p><p><strong>Tracing</strong> Tracing provides visibility of the calls between your services to create an application map and help diagnose issues in production. Dapr uses middleware to intercept traffic and adds correlation-IDs to enable distributed tracing using <a href="https://cloudblogs.microsoft.com/opensource/2019/12/11/w3c-microsoft-trace-context-specification-proposed-recommendation-status/"><em>W3C Trace Context</em></a>. Since Dapr integrates at the application level it enables asynchronous tracing on top of synchronous tracing meaning, for example, intercommunication via pub/sub can be traced. Furthermore, tracing is handled by the Dapr sidecar, so no code changes are required to instrument an application.</p><p><strong>Metrics</strong> Metrics provide visibility into call latency times between services and resource usage. Dapr provides metric collection for both Dapr services (sidecar and the Dapr control plane system services), as well as the user application services. Metrics collected include CPU and memory usage, sidecar injection failures, request error rates, and many others. Dapr allows easy integrations with technologies such as Prometheus or Azure Application Insights so users can easily set up metric visualization. See <a href="https://github.com/dapr/docs/blob/master/howto/setup-monitoring-tools/setup-prometheus-grafana.md">how to setup Dapr with Prometheus and Grafana</a> as an example.</p><h1>What's next on the roadmap?</h1><p>As Dapr matures, the focus of the upcoming work is towards the v1.0 release, getting Dapr out of preview and to production quality. This includes finalizing APIs, making stability improvements including long-running tests, extending end-to-end testing, performance testing infrastructure including releasing benchmark numbers, external security audits and threat model analysis, and taking contributions from the community.</p><p>To ensure that we are confident in getting to stable v1.0 release, we are working closely with several companies to take Dapr into production, deployed into a number of different environments, and with a diverse set of developer frameworks, including .NET, Go, Java, C++, Node.js, and others.</p><h1>Join the Dapr community</h1><p>We'd love for you to try out Dapr for yourself and become a member of the Dapr community. You can get involved in many ways, including:</p><ul><li>Explore the GitHub <a href="https://github.com/dapr/">repos</a>. Read the docs, comment on issues or open new ones, and contribute through pull requests. Look for issues labeled as "good first issue" to start with, for example, in the <a href="https://github.com/dapr/dapr/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">dapr/dapr</a> or the <a href="https://github.com/dapr/components-contrib/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22">dapr/components-contrib</a>.</li><li>Ask questions and join the discussions in the Dapr community <a href="http://gitter.im/dapr">Gitter channel</a>, follow <a href="https://twitter.com/daprdev/">@daprdev</a> on Twitter, or join the <a href="https://github.com/dapr/dapr/blob/master/README.md#community">community calls</a> held every two weeks (or <a href="http://aka.ms/dapr-recordings">view recordings of previous calls</a>).</li></ul><p>It's an exciting time to be a developer in the era of microservice development and we are excited to have you take part in the Dapr journey.</p><p>The post <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource/2020/04/29/distributed-application-runtime-dapr-growth-community-update/">How Distributed Application Runtime (Dapr) has grown since its announcement</a> appeared first on <a rel="nofollow" href="https://cloudblogs.microsoft.com/opensource">Microsoft Open Source Blog</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
