techcommunity.microsoft.com
Open in
urlscan Pro
2a02:26f0:fb:598::207e
Public Scan
Submitted URL: https://comm.microsoft.com/PoliteMail257/default.aspx?page=yaSQEPn_a0SS2FWhwpdHAQ&ref_id=lV0dfqeODEeQp1nMY0sf3Q
Effective URL: https://techcommunity.microsoft.com/gxcuf89792/rss/board?board.id=AzureDevCommunityBlog
Submission: On March 09 via api from US — Scanned from DE
Effective URL: https://techcommunity.microsoft.com/gxcuf89792/rss/board?board.id=AzureDevCommunityBlog
Submission: On March 09 via api from US — Scanned from DE
Form analysis
0 forms found in the DOMText Content
Azure Developer Community Blog articles https://techcommunity.microsoft.com/t5/azure-developer-community-blog/bg-p/AzureDevCommunityBlog Azure Developer Community Blog articles Wed, 09 Mar 2022 08:28:04 GMT AzureDevCommunityBlog 2022-03-09T08:28:04Z Using secretless Azure Functions from within AKS https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-secretless-azure-functions-from-within-aks/ba-p/3248143 <P>I recently implemented <A href="https://github.com/kedacore/keda/issues/2656" target="_self">a change in KEDA</A> (currently evaluated as a potential pull request), consisting of leveraging managed identities in a more granular way, in order to adhere to the least privilege principle. While I was testing my changes, I wanted to use managed identities not only for KEDA itself but also for the Azure Functions I was using in my tests. I found out that although there are quite a few docs on the topic, none is targeting AKS:</P> <P> </P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue-trigger?tabs=csharp#identity-based-connections" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue-trigger?tabs=csharp#identity-based-connections</A></P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob#connecting-to-host-storage-with-an-identity-preview" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob#connecting-to-host-storage-with-an-identity-preview</A></P> <P> </P> <P>You can find many articles showing how to grab a token from an HTTP triggered function, or using identity-based triggers, but in the context of a function hosted in Azure itself. It's not rocket science to make this work in AKS but I thought it was a good idea to recap it here as I couldn't find anything on that.</P> <P> </P> <P><FONT size="5">Quick intro to managed identities</FONT></P> <P>Here is a quick reminder for those who would still not know about MI. The value proposition of MI is: no password in code (or config). MI are considered best practices because the credentials used by identities are entirely managed by Azure itself. Workloads can <EM>refer to</EM> identities without the need to store credentials anywhere. On top of this, you can manage authorization with Azure AD (single pane of glasses), unlike shared access signatures and alternate authorization methods.</P> <P><FONT size="5">AKS & MI</FONT></P> <P>For MI to work in AKS, you need to enable them. You can find a comprehensive explanation on how to do this <A href="https://docs.microsoft.com/en-us/azure/aks/use-managed-identity" target="_self">here</A>. In a nutshell, MI works the following way in AKS:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="aksnmi.png" style="width: 879px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/353247i1EBC070C411D57A9/image-size/large?v=v2&px=999" role="button" title="aksnmi.png" alt="aksnmi.png" /></span></P> <P> </P> <P> </P> <P>An <STRONG>AzureIdentity</STRONG> and <STRONG>AzureIdentityBinding</STRONG> resource must be defined. They target a user-assigned identity, which is attached to the cluster's VM scale set. The identity can be referred to by deployments through the <EM><STRONG>aadpodbinding</STRONG> </EM>annotation. The function (or anything else) container makes a call to the MI system endpoint <A href="http://169....which" target="_blank" rel="noopener">http://169..., </A>that is intercepted by the NMI pod, which in turn, performs a call to Azure Active Directory to get an access token for the calling container. The calling container can present the returned token to the Azure resource to gain access.</P> <P> </P> <P><FONT size="5">Using the right packages for the function</FONT></P> <P>The packages you have to use depend on the Azure resource you interact with. In my example, I used storage account queues as well as service bus queues. To leverage MI from within the function, you must:</P> <UL> <LI>use the Microsoft.Azure.WebJobs.Extensions.Storage >= 5.0.0</LI> <LI>use the Microsoft.Azure.WebJobs.Extensions.ServiceBus >= 5.0.0</LI> <LI>use the Microsoft.NET.Sdk.Functions >= 4.1.0</LI> </UL> <P>Note that the storage package is not really an option because Azure Functions need an Azure Storage account for the most part.</P> <P><FONT size="5">Passing the right settings to the function</FONT></P> <P>Azure functions takes their configuration from the local settings and from their host's configuration. When using Azure Functions hosted on Azure, we can simply use the function app settings. In AKS, this is slightly different as we have to pass the settings through a <STRONG>ConfigMap</STRONG> or a <STRONG>Secret</STRONG>. To target both the Azure Storage account and the Service Bus, you'll have to define a secret like the following:</P> <P> </P> <DIV> <DIV><LI-CODE lang="yaml">data: AzureWebJobsStorage__accountName: <base64 value of storage account name> ServiceBusConnection__fullyQualifiedNamespace: <base64 value of the service bus FQDN> FUNCTIONS_WORKER_RUNTIME: <base64 value of the function language> apiVersion: v1 kind: Secret metadata: name: <secret name> ---</LI-CODE></DIV> <DIV>In the above example, I use the same storage account for my storage-queue trigger as well as the storage account that is required by functions to work. In case I was using a different storage account for the queue trigger, I'd declare an extra setting with the account name. The service bus queue-triggered function relies on the __fullyQualifiedNamespace to start listening to the service bus. Paradoxally, although I create a K8s secret, there is no secret information here, thanks to the MI.</DIV> <DIV> </DIV> <DIV>For your reference, I'm pasting the entire YAML here:</DIV> <DIV> </DIV> <DIV><LI-CODE lang="yaml">data: AzureWebJobsStorage__accountName: <base64 value of the storage account name> ServiceBusConnection__fullyQualifiedNamespace: <base64 value of the service bus FQDN> FUNCTIONS_WORKER_RUNTIME: <base64 value of the function code> apiVersion: v1 kind: Secret metadata: name: misecret --- apiVersion: aadpodidentity.k8s.io/v1 kind: AzureIdentity metadata: name: storageandbushandler annotations: aadpodidentity.k8s.io/Behavior: namespaced spec: type: 0 resourceID: /subscriptions/.../resourceGroups/.../providers/Microsoft.ManagedIdentity/userAssignedIdentities/storageandbushandler clientID: <client ID of the user-assigned identity> --- apiVersion: aadpodidentity.k8s.io/v1 kind: AzureIdentityBinding metadata: name: storageandbushandler-binding spec: azureIdentity: storageandbushandler selector: storageandbushandler --- apiVersion: apps/v1 kind: Deployment metadata: name: busandstoragemessagehandlers labels: app: busandstoragemessagehandlers spec: selector: matchLabels: app: busandstoragemessagehandlers template: metadata: labels: app: busandstoragemessagehandlers aadpodidbinding: storageandbushandler spec: containers: - name: secretlessfunc image: stephaneey/secretlessfunc:dev imagePullPolicy: Always envFrom: - secretRef: name: misecret ---</LI-CODE></DIV> <DIV>You can see that the secret is passed to the function through the <STRONG>envFrom</STRONG> attribute. If you want to give it a test, you can use the docker image I pushed to Docker Hub.</DIV> <DIV> </DIV> <DIV>and the code of both functions, embedded in the above docker image (nothing special):</DIV> <DIV><LI-CODE lang="csharp">[FunctionName("StorageQueue")] public void StorageQueue([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]string myQueueItem, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); } [FunctionName("ServiceBusQueue")] public void ServiceBusQueue([ServiceBusTrigger("myqueue-items", Connection = "ServiceBusConnection")] string myQueueItem, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); }</LI-CODE></DIV> <DIV> </DIV> <DIV>You just need to make sure the connection string names you mention in the triggers correspond to the settings you specify in the K8s secret.</DIV> </DIV> Sat, 05 Mar 2022 16:00:53 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-secretless-azure-functions-from-within-aks/ba-p/3248143 stephaneey 2022-03-05T16:00:53Z How YOU can build a Mock REST API based on JSON for ASP .NET and minimal API https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-can-build-a-mock-rest-api-based-on-json-for-asp-net-and/ba-p/3196039 <BLOCKQUOTE> <P>TLDR; this article describes how to create a Mock API from a JSON file for minimal API in ASP .NET</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#what-and-why-mock-apis" target="_blank" rel="noopener" name="what-and-why-mock-apis"></A>What and why Mock APIs</H2> <P>To mock something means you respond with fake data, that data can be in-memory, from a file or some kind of tool generating a bunch of endpoints. There are some reasons why mocking an API could be a good idea:</P> <UL> <LI><STRONG>Different teams work at different speeds</STRONG>. Let's say your app is built by two different teams, or developers and one is faster than the other. That's when it's handy to rely on a mocked API.</LI> <LI><STRONG>You start with the frontend first</STRONG>. Your team/developer have decided to build a full vertical and starts with the frontend and slowly work their way towards the backend and the data source.</LI> </UL> <P>Ok, so we established there might be a need to mock your API. So how do we do it? You want to be able to specify the data you want to mock and there are some formats out there that makes sense to have such mocked data in like JSON, XML or CSV perhaps. For the sake of this article, we will go with JSON</P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#planning-our-project-what-we-need-to-do" target="_blank" rel="noopener" name="planning-our-project-what-we-need-to-do"></A>Planning our project, what we need to do</H2> <P>Ok, so high-level, we need to do the following:</P> <UL> <LI><STRONG>Create a file in JSON</STRONG>, containing our routes and the response. We imagine the JSON file looking something like so:</LI> </UL> <P> </P> <LI-CODE lang="json"> { "Products": [ { "Id": 1, "Name": "Mock" }, { "Id": 2, "Name": "Second Mock" } ] }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <UL> <LI><STRONG>What routes do we want?</STRONG><SPAN> </SPAN>A good API should implement GET, POST, PUT and DELETE to support a RESTful approach.</LI> <LI><STRONG>Responding to changes.</STRONG><SPAN> </SPAN>So what should happen if the user actually calls POST, PUT or DELETE? Reasonably, the mocked file should change.</LI> </UL> <P>Ok, so we know high-level what we need, and how things should behave, let's see if we can choose our technical approach next.</P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#approach-lets-create-the-solution" target="_blank" rel="noopener" name="approach-lets-create-the-solution"></A>Approach - let's create the solution</H2> <P>The normal way to setup routes, in Minimal API, is to call code like so:</P> <P> </P> <LI-CODE lang="csharp">app.MapGet("/", () => "Hello World!");</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>By calling<SPAN> </SPAN><CODE>MapGet()</CODE><SPAN> </SPAN>we create a route to "/" that when called responds with "Hello World". For the sake of our API, we will have to call<SPAN> </SPAN><CODE>MapGet()</CODE>,<SPAN> </SPAN><CODE>MapPost()</CODE>,<SPAN> </SPAN><CODE>MapPut()</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>MapDelete()</CODE>.</P> <BLOCKQUOTE> <P>Here be dragons. Many of you, I'm sure, are used to working with JSON in a typed manor, meaning you are likely to create types for your classes and rely on methods like<SPAN> </SPAN><CODE>Deserialize()</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>Serialize()</CODE>. That's a great approach, however, for a mocked API that doesn't even exist yet, this code doesn't rely on any of that :)</img></P> </BLOCKQUOTE> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#defining-the-routes-making-it-loosely-coupled" target="_blank" rel="noopener" name="defining-the-routes-making-it-loosely-coupled"></A>Defining the routes, making it loosely coupled</H3> <P>It would be neat if these routes were loosely coupled code that we could just bring in, when developing, and removed when we are live with our app.</P> <P>When<SPAN> </SPAN><CODE>app.MapGet()</CODE><SPAN> </SPAN>was called, it invoked an instance of the class<SPAN> </SPAN><CODE>WebApplication</CODE>. By creating an extension method on said class, we have a way an approach to add code in a way that it's nicely separated. We also need a static class to put said extension method in. That means our code starting out should look something like so:</P> <P> </P> <LI-CODE lang="csharp">public static class RouteMiddlewareExtensions { public static WebApplication UseExtraRoutes(this WebApplication app) { } }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#exercise-read-from-a-mock-file-and-add-support-for-raw-get-endraw-" target="_blank" rel="noopener" name="exercise-read-from-a-mock-file-and-add-support-for-raw-get-endraw-"></A>Exercise - Read from a mock file, and add support for<SPAN> </SPAN><CODE>GET</CODE></H2> <P>Ok, we know how we are starting, a static class and an extension method, so let's make that happen:</P> <OL> <LI>Run<SPAN> </SPAN><CODE>dotnet new</CODE>, to generate a new minimal API project</LI> </OL> <P> </P> <LI-CODE lang="bash"> dotnet new web -o MyApi -f net6.0 cd Myapi</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Create a file<SPAN> </SPAN><EM>MockMiddleware.cs</EM><SPAN> </SPAN>and give it the following code:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> using System.Text.Json; using System.Text.Json.Nodes; public static class RouteMiddlewareExtensions { public static WebApplication UseExtraRoutes(this WebApplication app) { } }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Add code to read a JSON file into a JSON representation:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> var writableDoc = JsonNode.Parse(File.ReadAllText("mock.json"));</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Note the choice of<SPAN> </SPAN><CODE>JsonNode</CODE>, this is so we can make the JSON doc writable, which we will need for POST, PUT and DELETE later on.</P> <OL> <LI>Create the file<SPAN> </SPAN><EM>mock.json</EM><SPAN> </SPAN>and give it the following content:</LI> </OL> <P> </P> <LI-CODE lang="json"> { "Products": [ { "Id": 1, "Name": "Mock" }, { "Id": 2, "Name": "Second Mock" } ], "Orders": [ { "Id": 1, "Name": "Order1" }, { "Id": 2, "Name": "Second Order" } ] }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-get-endraw-" target="_blank" rel="noopener" name="add-raw-get-endraw-"></A>Add<SPAN> </SPAN><CODE>GET</CODE></H3> <P>Let's support our first HTTP verb, GET.</P> <OL> <LI>Add the following code:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> foreach(var elem in writableDoc?.Root.AsObject().AsEnumerable()) { var arr = elem.Value.AsArray(); app.MapGet(string.Format("/{0}", elem.Key), () => elem.Value.ToString()); }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>In the above code, we navigate into the root object. Then, we convert it to an object representation and starts iterating over the keys, according to the mock file, that means<SPAN> </SPAN><CODE>Products</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>Orders</CODE>. Lastly, we setup the route and the callback, the route is at<SPAN> </SPAN><CODE>elem.Key</CODE><SPAN> </SPAN>and the value we want to return is at<SPAN> </SPAN><CODE>elem.Value</CODE>.</P> <OL> <LI>In the file<SPAN> </SPAN><EM>Program.cs</EM><SPAN> </SPAN>add the following line:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> app.UseExtraRoutes();</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>The preceding code will ensure our routes are added to the app.</P> <OL> <LI>Run<SPAN> </SPAN><CODE>dotnet run</CODE>, to run the app</LI> </OL> <P> </P> <LI-CODE lang="bash"> dotnet run</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Navigate to the port indicated in the console output and navigate to<SPAN> </SPAN><CODE>/products</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>/orders</CODE>, they should both show an output</LI> </OL> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-get-endraw-by-id" target="_blank" rel="noopener" name="add-raw-get-endraw-by-id"></A>Add<SPAN> </SPAN><CODE>GET</CODE><SPAN> </SPAN>by id</H3> <P>Ok, you got the basic GET case to work, what about filtering the data with parameter. Using<SPAN> </SPAN><CODE>/products/1</CODE>, should just return one record back. How do we do that?</P> <OL> <LI>Add the following code in the foreach loop in<SPAN> </SPAN><EM>MockMiddlware.cs</EM>:</LI> </OL> <P> </P> <LI-CODE lang="csharp">app.MapGet(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr.SingleOrDefault(row => row .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); return matchedItem; });</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>The above code is iterating over the rows for a specific route and looks for an<SPAN> </SPAN><CODE>id</CODE><SPAN> </SPAN>property that matches our<SPAN> </SPAN><CODE>{id}</CODE><SPAN> </SPAN>pattern. The found item is returned.</P> <OL> <LI>Run<SPAN> </SPAN><CODE>dotnet run</CODE><SPAN> </SPAN>to test out this code:</LI> </OL> <P> </P> <LI-CODE lang="bash"> dotnet run</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Navigate to<SPAN> </SPAN><CODE>/products/1</CODE>, you should see the following JSON output:</LI> </OL> <P> </P> <LI-CODE lang="bash"> { "Id": 1, "Name": "Mock" }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Great, we got it to work.</P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#exercise-write-data" target="_blank" rel="noopener" name="exercise-write-data"></A>Exercise - write data</H2> <P>Now that we can read data from our mock API, lets tackle writing data. The fact that we were<SPAN> </SPAN><CODE>JsonNode.Parse()</CODE><SPAN> </SPAN>in the beginning makes it possible for us to use operations on the<SPAN> </SPAN><CODE>JsonNode</CODE><SPAN> </SPAN>instance. In short, our approach will be:</P> <UL> <LI>find the specific place in the<SPAN> </SPAN><CODE>JsonNode</CODE>, that represents our mock data, and change it</LI> <LI>save down the whole<SPAN> </SPAN><CODE>JsonNode</CODE><SPAN> </SPAN>instance to our<SPAN> </SPAN><EM>mock.json</EM>. If the user uses an operation to change the data, that should be reflected in the Mock file.</LI> </UL> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-post-endraw-" target="_blank" rel="noopener" name="add-raw-post-endraw-"></A>Add<SPAN> </SPAN><CODE>POST</CODE></H3> <P>To implement this route, we will use<SPAN> </SPAN><CODE>MapPost()</CODE><SPAN> </SPAN>but we can't just give it a typed object in the callback for the route, because we don't know what it looks like. Instead, we will use the request object, read the body and add that to the<SPAN> </SPAN><CODE>JsonNode</CODE>.</P> <OL> <LI>Add following code to support<SPAN> </SPAN><CODE>POST</CODE>:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> app.MapPost(string.Format("/{0}", elem.Key), async (HttpRequest request) => { string content = string.Empty; using(StreamReader reader = new StreamReader(request.Body)) { content = await reader.ReadToEndAsync(); } var newNode = JsonNode.Parse(content); var array = elem.Value.AsArray(); newNode.AsObject().Add("Id", array.Count() + 1); array.Add(newNode); File.WriteAllText("mock.json", writableDoc.ToString()); return content; });</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>In the above code, we have<SPAN> </SPAN><CODE>request</CODE><SPAN> </SPAN>as input parameter to our route handler function.</P> <P> </P> <LI-CODE lang="csharp"> app.MapPost(string.Format("/{0}", elem.Key), async (HttpRequest request) => {});</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Then we read the body, using a<SPAN> </SPAN><CODE>StreamReader</CODE>.</P> <P> </P> <LI-CODE lang="csharp"> using(StreamReader reader = new StreamReader(request.Body)) { content = await reader.ReadToEndAsync(); }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Next, we construct a JSON representation from our received BODY:</P> <P> </P> <LI-CODE lang="csharp">var newNode = JsonNode.Parse(content);</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>This is followed by locating the place to insert this new JSON and adding it:</P> <P> </P> <LI-CODE lang="csharp">var array = elem.Value.AsArray(); newNode.AsObject().Add("Id", array.Count() + 1); array.Add(newNode);</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Lastly, we update the mock file and respond something back to the calling client:</P> <P> </P> <LI-CODE lang="csharp">File.WriteAllText("mock.json", writableDoc.ToString()); return content;</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-delete-endraw-" target="_blank" rel="noopener" name="add-raw-delete-endraw-"></A>Add<SPAN> </SPAN><CODE>DELETE</CODE></H3> <P>To support deletion, we need a very similar approach to how we located an entry by id parameter. We also need to locate where to delete in the<SPAN> </SPAN><CODE>JsonObject</CODE>.</P> <OL> <LI>Add the following code to support delete:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> app.MapDelete(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr .Select((value, index) => new{ value, index}) .SingleOrDefault(row => row.value .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); if (matchedItem != null) { arr.RemoveAt(matchedItem.index); File.WriteAllText("mock.json", writableDoc.ToString()); } return "OK"; });</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>First, we find the item in question, but we also make sure that we know what the index of the found item is. We will use this index later to remove the item. Hence, we get the following code:</P> <P> </P> <LI-CODE lang="csharp"> var matchedItem = arr .Select((value, index) => new{ value, index}) .SingleOrDefault(row => row.value .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) );</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Our<SPAN> </SPAN><CODE>matchedItem</CODE><SPAN> </SPAN>now contains either NULL or an object that has an<SPAN> </SPAN><CODE>index</CODE><SPAN> </SPAN>property. Using this<SPAN> </SPAN><CODE>index</CODE><SPAN> </SPAN>property, we will be able to perform deletions:</P> <P> </P> <LI-CODE lang="csharp"> if (matchedItem != null) { arr.RemoveAt(matchedItem.index); File.WriteAllText("mock.json", writableDoc.ToString()); }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>To test writes, use something like Postman or Advanced REST client, it should work.</P> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-route-info" target="_blank" rel="noopener" name="add-route-info"></A>Add route info</H3> <P>We're almost done, as courtesy towards the programmer using this code, we want to print out what routes we have and support so it's easy to know what we support.</P> <OL> <LI>Add this code, just at the start of the method<SPAN> </SPAN><CODE>UseExtraRoutes()</CODE>:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> // print API foreach (var elem in writableDoc?.Root.AsObject().AsEnumerable()){ Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(string.Format("POST /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("DELETE /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(" "); }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>That's it, that's all we intend to implement. Hopefully, this is all useful to you and you will be able to use it next you just want an API up and running that you can build a front-end app off of.</P> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#full-code" target="_blank" rel="noopener" name="full-code"></A>Full code</H3> <P>If you got lost at any point, here's the full code:</P> <P><EM>Program.cs</EM></P> <P> </P> <LI-CODE lang="csharp">using Mock; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.UseExtraRoutes(); // this is where our routes get added app.Run();</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P><EM>MockMiddleware.cs</EM></P> <P> </P> <LI-CODE lang="csharp">using System.Text.Json; using System.Text.Json.Nodes; namespace Mock; public static class RouteMiddlewareExtensions { public static WebApplication UseExtraRoutes(this WebApplication app) { var writableDoc = JsonNode.Parse(File.ReadAllText("mock.json")); // print API foreach (var elem in writableDoc?.Root.AsObject().AsEnumerable()){ Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(string.Format("POST /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("DELETE /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(" "); } // setup routes foreach(var elem in writableDoc?.Root.AsObject().AsEnumerable()) { var arr = elem.Value.AsArray(); app.MapGet(string.Format("/{0}", elem.Key), () => elem.Value.ToString()); app.MapGet(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr.SingleOrDefault(row => row .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); return matchedItem; }); app.MapPost(string.Format("/{0}", elem.Key), async (HttpRequest request) => { string content = string.Empty; using(StreamReader reader = new StreamReader(request.Body)) { content = await reader.ReadToEndAsync(); } var newNode = JsonNode.Parse(content); var array = elem.Value.AsArray(); newNode.AsObject().Add("Id", array.Count() + 1); array.Add(newNode); File.WriteAllText("mock.json", writableDoc.ToString()); return content; }); app.MapPut(string.Format("/{0}", elem.Key), () => { return "TODO"; }); app.MapDelete(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr .Select((value, index) => new{ value, index}) .SingleOrDefault(row => row.value .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); if (matchedItem != null) { arr.RemoveAt(matchedItem.index); File.WriteAllText("mock.json", writableDoc.ToString()); } return "OK"; }); }; return app; } }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#update-homework" target="_blank" rel="noopener" name="update-homework"></A>Update - homework</H3> <P>For your homework, see if you can implement PUT. :)</img></P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#summary" target="_blank" rel="noopener" name="summary"></A>Summary</H2> <P>I took you through a journey of implementing a Mock API for minimal APIs. Hopefully, you found this useful and can use it in a future project.</P> <P>Here's a repo for the code<SPAN> </SPAN><A href="https://github.com/softchris/mock-sharp.git" target="_blank" rel="noopener">repo</A></P> <BLOCKQUOTE> <P>Please comment if you want me to make this into either a tool or a NuGet package :)</img></P> </BLOCKQUOTE> Tue, 22 Feb 2022 01:06:24 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-can-build-a-mock-rest-api-based-on-json-for-asp-net-and/ba-p/3196039 Chris_Noring 2022-02-22T01:06:24Z Azure Cache for Redis TLS: Upcoming migration to DigiCert Global G2 CA Root https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-cache-for-redis-tls-upcoming-migration-to-digicert-global/ba-p/3171086 <P><STRONG>This blog contains important information about TLS certificate changes for Azure Cache for Redis endpoints that <U>may</U> impact client connectivity. </STRONG> </P> <P> </P> <P>In 2020, most Azure services were updated to use TLS certificates from Certificate Authorities (CAs) that chain up to the DigiCert Global G2 root. However, Azure Cache for Redis, remained on TLS certificates issued by the Baltimore CyberTrust Root. Because the current Baltimore CyberTrust Root will expire in May 2025, now is the time for Azure Cache for Redis to switch to the DigiCert Global G2 CA Root*. The migration will start in May 2022, and finish by the end of June 2022. </P> <P> </P> <P><STRONG>We expect that most Azure Cache for </STRONG><STRONG>Redis customers will not be impacted; however, your application may be impacted if you explicitly specify a list of acceptable CAs (a practice known as “certificate pinning”)</STRONG>. This change is limited to the <A href="https://azure.microsoft.com/regions/" target="_blank" rel="noopener">public Azure cloud and Azure Government cloud</A>. There are no changes in Azure sovereign cloud offerings.</P> <P><STRONG>If any of your client applications are pinned to the root CA Baltimore CyberTrust Root or current intermediate CAs listed in the table below</STRONG>, <STRONG>immediate action is required</STRONG> to prevent disruption to connectivity to Azure Cache for Redis. </P> <P> </P> <P><EM>* Other Azure service TLS certificates may be issued by a different PKI. *</EM></P> <P> </P> <P><EM>Overview of Action Required</EM></P> <P> </P> <UL> <LI>If your client application has pinned to the Baltimore CyberTrust Root CA, in addition to Baltimore, add the <A href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_blank" rel="noopener">DigiCert Global Root G2</A> to your trusted root store before May 2022. </LI> <LI>If your client application has pinned to the intermediate CAs, in addition to Microsoft RSA TLS CAs, add the Microsoft Azure TLS Issuing CAs to your trusted root store before May 2022. </LI> <LI>Keep using the current root or intermediate CAs in your applications or devices until the transition period is completed (necessary to prevent connection interruption). <EM> </EM></LI> </UL> <P><FONT size="5"><STRONG><U>How to check if your client application is affected</U></STRONG></FONT></P> <P>Check if your application has pinned to </P> <UL> <LI>Root CA: Baltimore CyberTrust Root CA or, </LI> <LI>Intermediate CA: Microsoft RSA TLS CA 01 </LI> <LI>Intermediate CA: Microsoft RSA TLS CA 02 </LI> </UL> <P>Search your source code for the thumbprint, Common Name, and other cert properties of any of the root CA or intermediate CAs. If there is a match, then your application will be impacted, <STRONG>immediate action is required</STRONG>.</P> <P> </P> <P><FONT size="5"><STRONG><U>Action required </U></STRONG></FONT></P> <P>1. To continue without disruption due to this change, Microsoft recommends that, in addition to Baltimore, client applications or devices trust the root CA – DigiCert Global Root G2: </P> <P><A href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_blank" rel="noopener">DigiCert Global Root G2 <BR /></A>(Thumbprint: df3c24f9bfd666761b268073fe06d1cc8d4f82a4) </P> <P>Intermediate certificates are expected to change more frequently than the root CAs. Customers who use certificate pinning are recommended to not take dependencies on them and instead pin to the root certificate as it rolls less frequently. </P> <P> </P> <P>2. <SPAN data-contrast="auto">To prevent future disruption, you should also add the following roots to the trusted store. This will save you from the allowlist effort in near future if you add the recommended root CAs now:</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI><A title="DigiCert Global Root G3" href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_self" rel="nofollow noopener noreferrer"><SPAN data-contrast="none">DigiCert Global </SPAN><SPAN data-contrast="none">Root</SPAN><SPAN data-contrast="none"> G3</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> <BR /></SPAN><SPAN data-contrast="auto">(Thumbprint: 7e04de896a3e666d00e687d33ffad93be83d349e)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559685":1440,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><A href="https://www.microsoft.com/pkiops/certs/Microsoft%20RSA%20Root%20Certificate%20Authority%202017.crt" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">Microsoft RSA Root Certificate Authority 2017</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> <BR /></SPAN><SPAN data-contrast="auto">(Thumbprint: 73a5e64a3bff8316ff0edccc618a906e4eae4d74)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559685":1440,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><A href="https://www.microsoft.com/pkiops/certs/Microsoft%20ECC%20Root%20Certificate%20Authority%202017.crt" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">Microsoft ECC Root Certificate Authority 2017</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> <BR /></SPAN><SPAN data-contrast="auto">(Thumbprint: 999a64c37ff47d9fab95f14769891460eec4c3c5)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559685":1440,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P><BR />3. If you are currently pinning to the intermediate CAs and have a requirement to continue pinning to intermediate CAs, to prevent future disruption, you should also add the intermediate <SPAN>Microsoft Azure ECC TLS CAs listed in the table below to the trusted store.</SPAN></P> <P>List of possible Root CAs is available here: <A href="https://docs.microsoft.com/azure/security/fundamentals/tls-certificate-changes#what-is-changing" target="_blank" rel="noopener">Azure TLS Certificate Changes | Microsoft Docs</A></P> <P> </P> <P><EM><U>Support</U></EM></P> <P><SPAN data-contrast="auto">If you have any questions, get answers from community experts in <A href="https://aka.ms/redis/QnA" target="_self">Microsoft Q&A</A>. If you have completed step 1 and need technical help, please open a </SPAN><A href="https://ms.portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest" target="_blank" rel="noopener nofollow noreferrer"><SPAN data-contrast="none">support request</SPAN></A><SPAN data-contrast="auto"> with the options below and a member from our engineering team will get back to you.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI><SPAN data-contrast="auto">For <EM>Issue type</EM>, select <STRONG>Technical</STRONG>.</SPAN></LI> <LI><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}">For <EM>Subscription</EM>, select your subscription. </SPAN></LI> <LI><SPAN data-contrast="auto">For <EM>Service</EM>, select <STRONG>My Services</STRONG>, then select <STRONG>Cache for Redis</STRONG>.</SPAN></LI> <LI><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}">For <EM>Resource</EM>, select your resource. </SPAN></LI> <LI><SPAN data-contrast="auto">For <EM>Problem type</EM>, select <STRONG>Availability, Connectivity and Timeouts</STRONG>.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto">For <EM>Problem subtype</EM>, select <STRONG>Connection Error</STRONG>.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P> </P> <P><U><EM>Certificate Renewal Summary </EM></U></P> <P>The table below provides information about the certificates that are being rolled out. Depending on which certificate your service uses for establishing TLS connections, action may be needed to prevent loss of connectivity. </P> <P> </P> <TABLE width="587"> <TBODY> <TR> <TD width="58"> <P><STRONG>Certificate</STRONG> </P> </TD> <TD width="175"> <P><STRONG>Current</STRONG> </P> </TD> <TD width="264"> <P><STRONG>Post Rollover (May 2022)</STRONG> </P> </TD> <TD width="90"> <P><STRONG>Action</STRONG> </P> </TD> </TR> <TR> <TD width="58"> <P>Root </P> </TD> <TD width="175"> <P>Thumbprint (SHA1): d4de20d05e66fc53fe1a50882c78db2852cae474 <BR />Expiration: Monday, May 12, 2025, 4:59:00 PM <BR />Subject Name: <BR />CN = Baltimore CyberTrust Root </P> <P>OU = CyberTrust <BR />O = Baltimore <BR />C = IE </P> </TD> <TD width="264"> <P>Thumbprint (SHA1): df3c24f9bfd666761b268073fe06d1cc8d4f82a4 </P> <P>Expiration: Friday, January 15, 2038 5:00:00 AM <BR />Subject Name: <BR />CN = DigiCert Global Root G2 <BR />OU = <A href="http://www.digicert.com/" target="_blank" rel="noopener">www.digicert.com <BR /></A>O = DigiCert Inc <BR />C = US </P> </TD> <TD width="90"> <P><STRONG>Required by</STRONG></P> <P><STRONG>April 30, 2022</STRONG> </P> </TD> </TR> <TR> <TD width="58"> <P>Root </P> </TD> <TD width="175"> <P> </P> </TD> <TD width="264"> <P>Thumbprint (SHA1): <BR />7e04de896a3e666d00e687d33ffad93be83d349e <BR />Expiration: Friday, January 15, 2038 5:00:00 AM <BR />CN = DigiCert Global Root G3 <BR />OU = <A href="http://www.digicert.com/" target="_blank" rel="noopener">www.digicert.com <BR /></A>O = DigiCert Inc <BR />C = US </P> <P> </P> <P>Thumbprint (SHA1): <BR />73a5e64a3bff8316ff0edccc618a906e4eae4d74 <BR />Expiration: Friday, July 18, 2042 4:00:23 PM <BR />CN = Microsoft RSA Root Certificate Authority 2017 <BR />O = Microsoft Corporation <BR />C = US </P> <P> </P> <P>Thumbprint (SHA1): <BR />999a64c37ff47d9fab95f14769891460eec4c3c5 <BR />Expiration: Friday, July 18, 2042 4:16:04 PM <BR />CN = Microsoft ECC Root Certificate Authority 2017 <BR />O = Microsoft Corporation <BR />C = US </P> <P> </P> </TD> <TD width="90"> <P><STRONG>Recommended to prevent disruption <BR />from future changes</STRONG> </P> </TD> </TR> <TR> <TD width="58"> <P>Intermediates </P> </TD> <TD width="175"> <P><U>Thumbprints (SHA1): </U> </P> <P> </P> <P>CN = Microsoft RSA TLS CA 01 </P> <P>Thumbprint: </P> <P>703d7a8f0ebf55aaa59f98eaf4a206004eb2516a </P> <P> </P> <P>CN = Microsoft RSA TLS CA 02 </P> <P>Thumbprint: b0c2d2d13cdd56cdaa6ab6e2c04440be4a429c75 </P> <P> </P> <P>Expiration: Tuesday, October 8, 2024 12:00:00 AM. <BR />Subject Name: </P> <P>O = Microsoft Corporation </P> <P>C = US </P> </TD> <TD width="264"> <P><U>Thumbprints (SHA1): </U> </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 01 <BR />Thumbprint: </P> <P>b9ed88eb05c15c79639493016200fdab08137af3 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 02 </P> <P>Thumbprint: </P> <P>c5fb956a0e7672e9857b402008e7ccad031f9b08 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 05 </P> <P>Thumbprint: </P> <P>56f1ca470bb94e274b516a330494c792c419cf87 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 06 </P> <P>Thumbprint: </P> <P>8f1fd57f27c828d7be29743b4d02cd7e6e5f43e6 </P> <P> </P> <P>Expiration: Thursday, June 27, 2024 4:59:59 PM; <BR />Subject Name: </P> <P>Issuer = Microsoft RSA Root Certificate Authority 2017 </P> <P>O = Microsoft Corporation </P> <P>C = US </P> <P> </P> <P>-------------------------------------------------------</P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 01 <BR />Thumbprint: </P> <P>2f2877c5d778c31e0f29c7e371df5471bd673173 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 02 </P> <P>Thumbprint: </P> <P>e7eea674ca718e3befd90858e09f8372ad0ae2aa </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 05 <BR />Thumbprint: </P> <P>6c3af02e7f269aa73afd0eff2a88a4a1f04ed1e5 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 06 </P> <P>Thumbprint: </P> <P>30e01761ab97e59a06b41ef20af6f2de7ef4f7b0 </P> <P> </P> <P>Expiration: Thursday, June 27, 2024 4:59:59 PM; <BR />Subject Name: </P> <P>Issuer = DigiCert Global Root G2 </P> <P>O = DigiCert Inc </P> <P>C = US </P> <P> </P> </TD> <TD width="90"> <P><STRONG>Required by</STRONG></P> <P><STRONG>April 30, 2022 </STRONG> </P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P> </P> <P> </P> <P> </P> Sat, 05 Mar 2022 00:19:53 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-cache-for-redis-tls-upcoming-migration-to-digicert-global/ba-p/3171086 Shruti_Pathak 2022-03-05T00:19:53Z Building a Cloud Native Lab - Scripted Edition https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-scripted-edition/ba-p/3169848 <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Last year I did a blog post on how to build a cloud native lab at home based on Azure Stack HCI and AKS:</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"><A title="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504</A></P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">In that post I mentioned in passing that I'd also be looking into doing day two stuff. And I did. It just didn't materialize in a new post :)</img></P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">What I realized when testing out stuff was that while I did use my own blog post for reference it was sort of unpractical scrolling up and down the page to find the right command, and jumping between various tools and ways of solving things. I thought that "hey, wouldn't it be nice if I could just start a script and have it go through everything automatically?" Of course it would; it was just a matter of a little bit of effort getting there. (Or almost there at least.)</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">TL;DR - I have a repo over at <A title="https://github.com/ahelland/Cloud-Native-DevLab" href="https://github.com/ahelland/Cloud-Native-DevLab" target="_blank" rel="noopener">https://github.com/ahelland/Cloud-Native-DevLab</A> where I have made a collection of scripts to set you up with an AKS cluster along with a couple of features you may need/want to test on your Windows Server/Azure Stack HCI box.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Still here? I'll call out a few things to provide a backdrop and a couple of explanations.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">I wanted to have a repo you could pull down and step through interactively on your client computer using .NET Interactive Notebooks. That's a great way to run code inline in a document. Turns out that doesn't work when you attempt to setup a remote PowerShell session.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">I was also thinking about having the repo set up Visual Studio Code and all the UI tooling you need (locally on the host system). That sort of worked, but that would assume you're running the Desktop Experience which you're not doing if you use Azure Stack HCI. So I made it a command line experience - you probably need to copy the initial bootstrapping from your desktop to the server, but as part of the bootstrap Git is installed and the repo pulled down so you can do the rest without having a CTRL-C + CTRL-V party.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">So, looking at the commit dates it seems this was done a long time ago? Yes and no. A couple of things went up early, but I needed some QA time and was also stuck on bugs with the product and the components so it wasn't that easy. I didn't want to provide a guide sending you straight into "this doesn't work". There's also other things I spent time testing that ended up being left out. And I wasn't in a hurry I guess :)</img></P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Modularizing it however was not an error; that was a deliberate choice. I have separated things into sections that should be independent of each other - you just want to test Flux and don't care about Grafana? No prob.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">The repo does not go into great lengths explaining choices and the "why" of things. I wanted to keep it more to the point. That way it is easier to update and replace things as well.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Here are sections and components of the guide:</P> <UL style="direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;" type="disc"> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/01_Bootstrap" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">01_Bootstrap</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We install the necessary tooling and install a management and a workload cluster.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/02_Monitoring" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">02_Monitoring</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We install Prometheus, Grafana and Jaeger. Loadbalancers for all three are also created (if you want), but not DNS names.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/03_Azure_Policy" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">03_Azure_Policy</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We create a service principal (with a "Policy Writer" role) and use this to enable Azure Policy in our cluster.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/04_ExternalAccess" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">04_ExternalAccess</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We install Nginx and CertManager, and configure integration with Azure DNS. This enables you to have Kubernetes take care of configuring DNS for you and enroll a certificate from Let's Encrypt when you deploy an application to the cluster.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/05_MonitoringIngress" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">05_MonitoringIngress</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />This section provides configuration files for enabling ingress for Prometheus and Jaeger.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/06_AzureServiceOperator" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">06_AzureServiceOperator</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Brief explanation on Azure Service Operator with links to MS docs.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/07_Dapr" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">07_Dapr</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Explanation of Dapr plus installation commands. Links to more info and samples.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/08_Flux" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">08_Flux</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Installation of a sample app using a GitOps approach with Flux.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/Samples" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">Samples</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Samples for testing out the basic functionality of the cluster based on the installations in the sections above.</SPAN></LI> </UL> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">While the focus is more on the scripts than explanations I have attempted to include some instructions. Note that you also need to fill in the blanks yourself for variables unique to your environment. (Cloning the repo and just executing the PowerShell immediately will most likely throw errors at you.)</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">I'm not saying this is the only way, or the right way for everyone. And since the focus is on dev use it could very well be that you don't care about things like Azure Policy. Having it all in one location and tested in a cohesive manner should help though.</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">I'm currently working on testing workload identities. Worked fairly easy on AKS in the cloud. Not as easy in the on-prem variant so we'll see how that plays out. Point being - I try to add things to the guide, and will attempt to both optimize and re-arrange content if needed. I also intend/want to create more complex samples; but need to have the baseline working before going all in on that.</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">I guess the value of all of this is still limited if you don't have the hardware to run things. That has made me think of whether I should create a version for AKS running in Azure as well, but I haven't decided - there are already a ton of guides and documentation out there for that purpose.</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AzureStackHCI_Cluster.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/348449iCA020D9CCF30D643/image-size/large?v=v2&px=999" role="button" title="AzureStackHCI_Cluster.png" alt="AzureStackHCI_Cluster.png" /></span></P> <P> </P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">Here's the link to the repo again:<BR /><A title="GitHub - ahelland/Cloud-Native-DevLab: Installation scripts and instructions for setting up an on-prem dev lab based on Azure Stack HCI AKS." href="https://github.com/ahelland/Cloud-Native-DevLab" target="_blank" rel="noopener">https://github.com/ahelland/Cloud-Native-DevLab</A></P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">As always - stay tuned for more cloud fun!</P> Tue, 15 Feb 2022 20:06:13 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-scripted-edition/ba-p/3169848 Andreas Helland 2022-02-15T20:06:13Z Winners Announced: Azure Hack for Wellness https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-hack-for-wellness/ba-p/3165373 <P><SPAN>The nature of work has changed. The move to hybrid jobs is underway, and the developer community is uniquely equipped to reimagine experiences that enrich and fulfill employees’ wellness. Over 200 developers participated in the <A href="https://wellnesshack.devpost.com/" target="_self">Microsoft Azure Hack for Wellness</A> virtual hackathon where the event specifically focused on using Azure services to help organizations support their members' well beings. Organizations could be businesses, schools, or communities. As a bonus, applications that integrate into Microsoft Teams were eligible for additional prize. </SPAN></P> <P> </P> <P><SPAN>See below for the top 3 winning projects:</SPAN></P> <P> </P> <P><FONT size="6"><SPAN>1st Place: <A href="https://devpost.com/software/rest-azzure" target="_self">Rest Azzure</A></SPAN></FONT></P> <P><SPAN>Created by: Nefertiti Bourne, Ed Hart, Marcos A Oliva</SPAN></P> <P><SPAN>A mobile app that connects with MS Teams and chatbot and dashboard.</SPAN></P> <P><SPAN><LI-VIDEO vid="https://youtu.be/N8Y6imL3iLo" align="center" size="large" width="600" height="450" uploading="false" thumbnail="https://i.ytimg.com/vi/N8Y6imL3iLo/hqdefault.jpg" external="url"></LI-VIDEO><BR /></SPAN></P> <P><FONT size="6"><SPAN>2nd Place: <A href="https://devpost.com/software/wellness-assistant" target="_self">Feeling Well</A></SPAN></FONT></P> <P><SPAN>Created by: Zechen Lu, Amina Fong</SPAN></P> <P><SPAN>Feeling Well incentivizes employees to take breaks for developing wellness by offering monthly rewards based on the amount of breaks they take.</SPAN></P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=9jNMFnzjeaA&t=13s" align="center" size="large" width="600" height="338" uploading="false" thumbnail="https://i.ytimg.com/vi/9jNMFnzjeaA/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><FONT size="6"><SPAN>3rd place: <A href="https://devpost.com/software/outstanding-meetings" target="_self">Outstanding Meetings</A></SPAN></FONT></P> <P><SPAN>Created by: Rupesh Kurvankattil, Tariku Tessema, Steve Jones</SPAN></P> <P><SPAN>Motivates individuals in the workspace to practice healthy habits by standing up during meetings.</SPAN></P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=bKxML45oewU" align="center" size="large" width="600" height="338" uploading="false" thumbnail="https://i.ytimg.com/vi/bKxML45oewU/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><FONT size="5"><U>Thank You</U></FONT></P> <P>On behalf of the Microsoft U.S. Azure team, I'd like to thank all of the participants, and congratulate the winners on a great job!</P> <P> </P> <P>Thank you to the judges who volunteered their time to give back to the community! Special thanks to <STRONG>Kendall Roden</STRONG>, <STRONG>Nicole Herskowitz</STRONG>, <STRONG>Rajmohan Rajagopalan</STRONG>, <STRONG>Scott Prather</STRONG>, <STRONG>Tomomi Imura</STRONG>, <STRONG>Uthappa Kattera Chengappa</STRONG></P> <P> </P> <P><U><FONT size="5">Coming up</FONT></U></P> <P>There are two more virtual hackathon events going on right now! Take a look and feel free to sign up for one or more of these events!</P> <UL> <LI><A href="https://aka.ms/hackthetrialtc" target="_self">Microsoft Azure Trial Hackathon on DEV</A> - What's the most interesting thing you can do with a free Azure trial? Submissions due March 8, 2022. Open to global audiences. </LI> <LI><A href="https://aka.ms/humanitarianhacktc" target="_self">Microsoft US Azure AI Hack for Humanitarian Action</A> - Build for disaster response, refugees and displaced people, human rights, or the needs of women and children with Azure AI. Submissions due March 28, 2022. Open to U.S. residents.</LI> </UL> <P> </P> Mon, 14 Feb 2022 23:42:38 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-hack-for-wellness/ba-p/3165373 NinaSui 2022-02-14T23:42:38Z How to utilize active geo-replication in Azure Cache for Redis https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-to-utilize-active-geo-replication-in-azure-cache-for-redis/ba-p/3074404 <P>In an increasingly global and online world, the speed, availability, and consistency of data has never been more important. We’ve seen customers of all sizes take advantage of the outstanding performance of <A href="https://azure.microsoft.com/services/cache/" target="_blank">Azure Cache for Redis</A>, but we’ve also heard your requests for a Redis solution that offers even higher availability and more robust geographic consistency. That’s why we’re excited to announce the latest element of our collaboration with <A href="https://redis.com/cloud-partners/microsoft-azure/" target="_blank">Redis Corporation</A>—the general availability of active geo-replication in our Enterprise offering of Azure Cache for Redis.</P> <P> </P> <H1>Active geo-replication background</H1> <P>Active geo-replication is a powerful tool that enables Azure Cache for Redis clusters to be linked together for seamless active-active replication of data. In other words, you can write to one Redis cluster and your data will be automatically copied to the other linked clusters, and vice versa. Data is quickly duplicated with strong eventual consistency between clusters. This multi-primary, multi-write architecture is built on <A href="https://redis.com/redis-enterprise/technology/active-active-geo-distribution/" target="_blank">conflict-free replicated data types (CRDTs)</A>, a groundbreaking technology that enables seamless conflict resolution.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_0-1643313027910.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/343084iB7053269D808AB29/image-size/medium?v=v2&px=400" role="button" title="kteegarden_0-1643313027910.png" alt="kteegarden_0-1643313027910.png" /></span></P> <H1>Use-cases for active geo-replication</H1> <P>Active geo-replication gives developers a powerful tool to tackle otherwise frustrating technical challenges, such as:</P> <P> </P> <H2>Enterprise-grade Availability</H2> <P>As Redis steadily increases in popularity and adoption, it is becoming an essential part of mission-critical applications. Many customers in the financial services, retail, and software industries need Redis in both high availability and disaster recovery scenarios. The Enterprise tiers of Azure Cache for Redis help deliver both. Zone redundancy already enables Enterprise Azure Cache for Redis to be resilient to zone-level outages and reach a <A href="https://azure.microsoft.com/support/legal/sla/cache/v1_1/" target="_blank">99.99% availability SLA</A>. Adding active geo-replication helps further protect against region-level outages, <A href="https://azure.microsoft.com/support/legal/sla/cache/v1_1/" target="_blank">boosting the availability SLA up to 99.999%</A>.</P> <P> </P> <P>Even better, experiencing the benefits of higher availability is straightforward. Even if there is an outage in one region, the caches in other regions will have the latest synchronized copy of the data in your cache. And when the region comes back online, the original cache will automatically be updated with data written to the linked regions during the outage.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_1-1643313027916.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/343085iA140E1DDFA3DAF94/image-size/medium?v=v2&px=400" role="button" title="kteegarden_1-1643313027916.png" alt="kteegarden_1-1643313027916.png" /></span></P> <P> </P> <H2>Local Latency Performance</H2> <P>Customer expectations for speedy application performance are sky high. <A href="https://redis.com/wp-content/uploads/2021/08/DS-RedisLabs-Retail-Transformation.pdf" target="_blank">Nine in ten shoppers will abandon a retail website if it is too slow</A>. As applications become global, this presents a challenge with caching. Your cache may be quick, but if your customers are talking to a cache that is halfway around the world, network latency can erase the benefits of the cache. With active geo-replication, you can get local latency performance while maintaining cache consistency because users and applications can be directed to the geo-replicated cache closest to them.</P> <P> </P> <P> </P> <H2>Global Synchronization of Data</H2> <P>Managing multiple sources of data can be a frustrating challenge. Scale or latency constraints can force you to silo your app infrastructure by geography, which then can introduce data consistency issues. Some applications are designed to have the same experience across borders, which confounds the problem even further. For example, a game developer might want all players to see a global leaderboard which ranks players across regions. While Redis is a common way to implement a leaderboard, aggregating multiple independent leaderboards from separate Redis instances is a hassle. With active geo-replication, however, the linked Redis instances can all update the same shared sorted set leaderboard, meaning a new high score in Tokyo will be automatically ranked next to a score from a player in London.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_2-1643313027929.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/343086i1F8842A7C6FF9B0F/image-size/medium?v=v2&px=400" role="button" title="kteegarden_2-1643313027929.png" alt="kteegarden_2-1643313027929.png" /></span></P> <H1>Try it on Azure</H1> <P>Azure Cache for Redis gives you a fully-managed Redis experience. With full portal integration, <A href="https://docs.microsoft.com/azure/azure-cache-for-redis/cache-how-to-active-geo-replication" target="_blank">configuring active geo-replication</A> is straightforward, and gives you a wide selection of regions to choose from in the ever-growing Azure footprint. <A href="https://azure.microsoft.com/en-us/free/" target="_blank">Try active geo-replication today</A> in the Enterprise and Enterprise flash tiers of Azure Cache for Redis, read how to <A href="https://docs.microsoft.com/azure/azure-cache-for-redis/cache-how-to-active-geo-replication" target="_blank">configure the feature</A>, or check out a <A href="https://github.com/MSFTeegarden/Azure-Redis-Active-Geo-Demo" target="_blank">simple active geo-replication demo</A>. </P> Wed, 02 Feb 2022 16:00:00 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-to-utilize-active-geo-replication-in-azure-cache-for-redis/ba-p/3074404 kteegarden 2022-02-02T16:00:00Z New Learning path on Python 11 parts - check it out https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-on-python-11-parts-check-it-out/ba-p/3101700 <P>On the Academic team, we set out to create a long path of Python modules. The idea was to address all the concerns you might have starting out with Python. All the way from learning the basic building blocks to managing larger Python projects. Whether you're into #iot #datascience #machinelearning or #webdev - this is a great way to start.</P> <P> </P> <P>Check out the below article for more details on the learning path </P> <P><A href="https://techcommunity.microsoft.com/t5/educator-developer-blog/how-you-can-learn-python-with-this-11-part-series/ba-p/3101534#M779" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/educator-developer-blog/how-you-can-learn-python-with-this-11-part-series/ba-p/3101534#M779</A></P> <P> </P> <P>If you just want to start learning, here's the path on aka.ms/learn</P> <P><A href="https://docs.microsoft.com/en-us/learn/paths/beginner-python/" target="_self">Python path, 11 modules</A> </P> <P> </P> <P>It's free - start learning today.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pexels-lukas-296282.jpg" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/344356iF0C130D7263138F6/image-size/large?v=v2&px=999" role="button" title="pexels-lukas-296282.jpg" alt="pexels-lukas-296282.jpg" /></span></P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> Tue, 01 Feb 2022 23:28:17 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-on-python-11-parts-check-it-out/ba-p/3101700 Chris_Noring 2022-02-01T23:28:17Z Managing Microsoft365 with Microsoft365DSC and Azure DevOps https://techcommunity.microsoft.com/t5/azure-developer-community-blog/managing-microsoft365-with-microsoft365dsc-and-azure-devops/ba-p/3054333 <P><A href="https://microsoft365dsc.com/" target="_blank" rel="nofollow noopener">Microsoft365DSC</A><SPAN> is an Open-Source PowerShell Desired State Module. It allows configuration, monitoring, exporting, reporting and assessment of M365 tenants. Many organizations are implementing DevOps practices and with </SPAN><A href="https://github.com/microsoft/Microsoft365DSC" target="_blank" rel="nofollow noopener">Microsoft365DSC</A><SPAN> and </SPAN><A href="https://docs.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops" target="_blank" rel="nofollow noopener">Azure DevOps</A><SPAN> you can implement Configuration as Code within your Microsoft 365 tenant.</SPAN></P> <P> </P> <P>At a high level the setup will look like:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Microsoft365DSC and Azure DevOps" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/337970i89D684B397A69E18/image-size/large?v=v2&px=999" role="button" title="M365DSCDevOps (2).png" alt="Microsoft365DSC and Azure DevOps" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Microsoft365DSC and Azure DevOps</span></span></P> <P> </P> <P>The whitepaper<SPAN> </SPAN><A href="https://office365dsc.azurewebsites.net/Pages/Resources/Whitepapers/Managing%20Microsoft%20365%20with%20Microsoft365Dsc%20and%20Azure%20DevOps.pdf" target="_blank" rel="nofollow noopener">Microsoft365Dsc and Azure DevOps</A><SPAN> </SPAN>dives into creating a solution with Azure DevOps and Microsoft365DSC.</P> <P> </P> <P>The whitepaper will cover in detail the following:</P> <UL> <LI>Creating account for DSC</LI> <LI>Configuration of Azure DevOps project</LI> <LI>Configuration of Azure DevOps build agents</LI> <LI>Configuration of Azure Key Vault to store secrets</LI> <LI>Creating build and release pipelines to deploy configuration to M365 tenant</LI> <LI>Securing service accounts with Azure Conditional Access policy</LI> <LI>Using certificate instead of username/password for M365 authentication</LI> </UL> Fri, 07 Jan 2022 14:33:21 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/managing-microsoft365-with-microsoft365dsc-and-azure-devops/ba-p/3054333 Derek Smay 2022-01-07T14:33:21Z Do the #Code4Good thing—make the world a better place https://techcommunity.microsoft.com/t5/azure-developer-community-blog/do-the-code4good-thing-make-the-world-a-better-place/ba-p/3016575 <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="MichelleSandford_0-1638246414812.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330257i5F8BB5A3647DC0F9/image-size/medium?v=v2&px=400" role="button" title="MichelleSandford_0-1638246414812.jpeg" alt="MichelleSandford_0-1638246414812.jpeg" /></span></P> <P> </P> <P><I><SPAN data-contrast="none">Michelle Sandford, Community Engagement PMM for emerging Developers at Microsoft, shares why she does the #Code4Good thing, and awesome ways you can use your tech skills to make the world a better place, too.</SPAN></I><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">I focus on supporting enablement, diversity, and inclusion initiatives. I like to teach people to code (usually women or children), because I want to bring a more even mix of people into the tech industry, and the best way to do that is to get involved and show them how much fun it is. I love giving my time to do this for my community because I am also learning while teaching. People ask me questions that I’ve never considered, and it makes me stop and think more deeply about what I do and how. That helps me grow, while I am enabling others to grow. But it isn’t just about me and how much I enjoy these experiences. I think each of us has a duty to give something back, to enable the next generation to do more and be more than we ever were. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">People often ask me how I choose what opportunities to get involved in. I say “</SPAN><I><SPAN data-contrast="none">It’s easy, think about what you care about, what excites you, what drives you, and align all your focus on those things.”</SPAN></I><SPAN data-contrast="none"> But of course, it’s not always easy, especially if you have no idea about what opportunities are out there, what you can do, what you like doing, and what you stand for. You must try all the things. So, if you have time, say yes. Do the Thing (as </SPAN><A href="https://donasarkar.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Dona </SPAN></A><SPAN data-contrast="none">Sarkar</SPAN><SPAN data-contrast="none"> says). After a while you will discover some of the things that inspire you and make you happy.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">So here are a few #Code4Good opportunities to consider:</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="none">Code for good in a </SPAN></STRONG><A href="https://givecamp.org/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">GiveCamp.</SPAN></STRONG></A><SPAN data-contrast="none"> Learn </SPAN><SPAN data-contrast="none">how the idea for GiveCamp came to life, how they use tech to help non-profits, and how you can get involved in this </SPAN><A href="https://docs.microsoft.com/en-us/events/build-may-2021/general/connection-zone/con031/" target="_blank" rel="noopener"><SPAN data-contrast="none">video.</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><STRONG><SPAN data-contrast="none">Volunteer as a mentor team member or event tech mentor at hackathons</SPAN></STRONG><SPAN data-contrast="none"> such as </SPAN><A href="https://govhack.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">GovHack</SPAN></A><SPAN data-contrast="none"> - a festival of ideas</SPAN><SPAN data-contrast="none">. Look at innovation or student hubs for details on local hackathons. Microsoft’s Global Hackathon which comes out via </SPAN><A href="https://www.microsoft.com/en-us/garage/" target="_blank" rel="noopener"><SPAN data-contrast="none">The Microsoft Garage</SPAN></A><SPAN data-contrast="none"> each year is a great way to get involved and there are many teams to choose from, often accepting external team members. </SPAN><A href="https://www.microsoft.com/en-us/ai/ai-for-good-participation" target="_blank" rel="noopener"><SPAN data-contrast="none">Participate in Microsoft AI for Good Projects.</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><SPAN data-contrast="none">If you like to code, </SPAN><STRONG><SPAN data-contrast="none">get involved in the </SPAN></STRONG><A href="https://opensource.microsoft.com/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Open Source Community</SPAN></STRONG></A><SPAN data-contrast="none"> There are so many valuable projects than run entirely on the time and good will of volunteers and you can contribute time, code, or money to help out.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="none">Find in-kind dev opportunities</SPAN></STRONG><SPAN data-contrast="none"> through </SPAN><A href="https://www.catchafire.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">Catchafire</SPAN></A><SPAN data-contrast="none"> or </SPAN><A href="https://www.volunteermatch.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">VolunteerMatch</SPAN></A><SPAN data-contrast="none">, you can search their opportunities on LinkedIn. You can also search “Volunteer Developer” in a LinkedIn job search.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><STRONG><SPAN data-contrast="none">Become a mentor in a STEM program</SPAN></STRONG><SPAN data-contrast="none"> such as </SPAN><A href="https://shecodes.com.au/" target="_blank" rel="noopener"><SPAN data-contrast="none">She Codes.</SPAN></A><SPAN data-contrast="none"> This is an Australian program but there are programs like this in every country looking for mentors. Check out </SPAN><A href="https://www.nuevofoundation.org/what-we-do" target="_blank" rel="noopener"><SPAN data-contrast="none">Nuevo Foundation,</SPAN></A><SPAN data-contrast="none"> </SPAN><A href="https://coderdojo.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">CoderDojo</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://abcn.com.au/" target="_blank" rel="noopener"><SPAN data-contrast="none">ABCN</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://djangogirls.org/en/" target="_blank" rel="noopener"><SPAN data-contrast="none">Django Girls</SPAN></A><SPAN data-contrast="none">, and of course, </SPAN><A href="https://www.womenwhocode.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Women Who Code</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><STRONG><SPAN data-contrast="none">Hit the </SPAN></STRONG><A href="https://techcommunity.microsoft.com/t5/azure/ct-p/Azure" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">forums</SPAN></STRONG></A><SPAN data-contrast="none"> and help fellow community members solve tech issues in your area of expertise.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><STRONG><SPAN data-contrast="none">Give an inspiring or educational talk </SPAN></STRONG><SPAN data-contrast="none">at meetups and conferences. Many encourage first time speakers and will actively support you with mentorship from an experienced speaker. You can submit proposals to speak at conferences by responding to a CFP (Call for Papers/Programs), which can be found on sites such as: </SPAN><A href="https://www.cfpland.com/conferences/" target="_blank" rel="noopener"><SPAN data-contrast="none">CFP Land</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://twitter.com/techdailycfp" target="_blank" rel="noopener"><SPAN data-contrast="none">Tech Daily CFP</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://www.papercall.io/events" target="_blank" rel="noopener"><SPAN data-contrast="none">PaperCall</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://confs.tech/cfp" target="_blank" rel="noopener"><SPAN data-contrast="none">Confs.tech</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://twitter.com/appcfp" target="_blank" rel="noopener"><SPAN data-contrast="none">SeeCFP</SPAN></A><SPAN data-contrast="none">, and </SPAN><A href="https://callingallpapers.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">CallingAllPapers</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">I recently participated in a session at Microsoft Ignite that talked about how you can make an impact through contribution to community.<A href="https://myignite.microsoft.com/sessions/1dabe2de-d29d-4c7e-8cb4-bcc5516d92f2?source=/schedule" target="_self"> Check out the replay.</A></SPAN></P> <P><SPAN data-contrast="none">Do you have favorite avenues to contribute to dev and broader communities? Please share #Code4Good opportunities you’ve been involved with in the blog comments section below!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><I><SPAN data-contrast="none">Michelle Sandford, Community Engagement PMM for emerging Developers at Microsoft, is a Tedx Speaker, Australian Computer Society WA Chairman, and was previously named one of MCV's 30 Most Influential Women in Games. She lives at the heart of the developer community and helps drive awareness and engagement as an AI influencer and chatbot builder. She is an advocate for STEM, the Games Industry, and Developers. For daily updates from Michelle follow @codess_aus on <A href="https://twitter.com/codess_aus" target="_self">Twitter</A> and <A href="https://instagram.com/codess_aus" target="_self">Instagram</A>, or follow her on </SPAN></I><A href="https://www.linkedin.com/in/michellesandford/" target="_blank" rel="noopener"><I><SPAN data-contrast="none">LinkedIn</SPAN></I></A><I><SPAN data-contrast="none">.</SPAN></I><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> Tue, 07 Dec 2021 01:39:30 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/do-the-code4good-thing-make-the-world-a-better-place/ba-p/3016575 Michelle Sandford 2021-12-07T01:39:30Z An airline pilot develops a robotic arm for his friend’s son using .NET and a 3D printer https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-airline-pilot-develops-a-robotic-arm-for-his-friend-s-son/ba-p/3015347 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_0-1638211868010.png" style="width: 465px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330083i151162BB82C0BF1F/image-dimensions/465x261?v=v2" width="465" height="261" role="button" title="Monish_Gangwani_0-1638211868010.png" alt="Monish_Gangwani_0-1638211868010.png" /></span></P> <P><EM>Kayden Jeffery trying on the robotic arm that Clifford Agius built for him</EM></P> <P><EM> </EM></P> <P><FONT size="4"><STRONG>Clifford Agius is a freelance .NET developer who flies around the world in a Boeing 787 for his day-job. When he is not thousands of feet above sea-level, he loves to code. </STRONG><STRONG>When a family friend asked Cliff for help improving her son’s prosthetic arm, the 787 pilot by day/freelance developer by night used open-source software to build a new arm for the teen.</STRONG></FONT></P> <P> </P> <P><FONT size="4"><STRONG>He has big plans on making the robotic arm easily available to families and communities who do not have access to resources and around continuing to improve the technical capability of his creation using .NET 6 and Visual Studio 2022.</STRONG></FONT></P> <P> </P> <P><STRONG><EM>We don’t usually come across someone who is a commercial pilot and a developer. Tell us a little about your journey and what inspires you to build the kind of apps that you do?</EM> </STRONG></P> <P>I spent the first 11 years of my career writing software and automating production line equipment. I always wanted to learn to fly, and after many years in tech, I could afford to go to pilot school and get a private license. So I signed up and that led to me taking two years off to go to flight school and became a commercial pilot.</P> <P> </P> <P>Shortly after, I was invited by a friend to contract for him; he needed someone to build a few modules in C# and .NET. I knew the paradigms of code and was quickly able to familiarize myself with .NET. I worked on those modules during the layover downtime at hotels for six months. And that led to how I get to work on fun dev projects during my layovers. My engineering background has translated to me working on a lot of IoT related projects built using .NET, and I like to work on projects that make a difference in the world.</P> <P> </P> <P><EM><STRONG>Tell us about HandyApp and how it came about.</STRONG></EM></P> <P>December of 2016, a family friend started chatting about a news article in the media here in the UK, about a dad that 3D printed a hand for his daughter. ”You've got 3D printer, right, Cliff?” – she asked. I realized then that she was asking whether I could create one for her son Kayden, who was born with half an arm. Kayden is a good kid and he had received an arm extension from the local health services agency that had a hook, which was not optimal for holding things and hence was not super functional. I wanted to see if I could help – I managed to find the code for the 3D printed hand referenced in the news in open source projects and I printed out the hand. That 3D hand did not have a great grip either and Kayden hated it.</P> <P> </P> <P>I was bitten by the bug and wanted to find a solution. I went back to the drawing board and started revisualizing and researching. That’s when I stumbled across <A href="https://openbionics.com/" target="_blank" rel="noopener">OpenBionics</A> and was able to build HandyApp.</P> <P> </P> <P>HandyApp is an OpenSource mobile application built using .NET; it allows users of the OpenSource Bionic Hand project to control the hand and it's settings via bluetooth. This is still very much a work in progress but the current build will allow a Bluetooth Connection to the Adafruit board inside the hand and remote control and set-up.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_1-1638211868087.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330082iC0C001CA114A4006/image-size/medium?v=v2&px=400" role="button" title="Monish_Gangwani_1-1638211868087.png" alt="Monish_Gangwani_1-1638211868087.png" /></span></P> <P><EM>Kayden enjoying the summer by the lake</EM></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_2-1638211868249.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330084iE8D0E408FAE5A897/image-size/medium?v=v2&px=400" role="button" title="Monish_Gangwani_2-1638211868249.png" alt="Monish_Gangwani_2-1638211868249.png" /></span></P> <P><EM>Kayden with the prosthetic arm provided to him by the local health services agency</EM></P> <P> </P> <P><STRONG><EM>It sounds like this became an important project for you at a personal level. What are your future plans around it?</EM> </STRONG></P> <P>Yes, this project became important because it is so meaningful to change people’s lives through technology… There are plans to continue the building of this app to a point that any user can configure their own Bionic hand as well as record sensor reading and upload them to an Azure Cloud function for analysis and suggestion of settings, but this is still on the todo list. I also want to take advantage of all the cool stuff in .NET 6 and Visual Studio 2022.</P> <P> </P> <P>Importantly, I would like to make this solution more easily available to families. I have considered how much money this would cost a family living where there is no health services agency. I calculated the cost down to 500 pounds. After the pandemic is over, I intend to stick a 3D printer in a box, some spools of filament, some screws, nuts, bolts and some electronics boards and take them overseas on a flight. I've spoken to hospitals in Pakistan and in India and there is some early interest.</P> <P> </P> <P>I have also started looking at building LeggyApp, which is an app connected to a prosthetic leg.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_3-1638211868485.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330085i2A7052AE76BFC54B/image-size/medium?v=v2&px=400" role="button" title="Monish_Gangwani_3-1638211868485.png" alt="Monish_Gangwani_3-1638211868485.png" /></span></P> <P><EM>The robotic arm kit</EM></P> <P> </P> <P><EM><STRONG>Tell us about the cool stuff in .NET 6 and Visual Studio 2022 you plan to take advantage of. </STRONG></EM></P> <P>I am excited about .NET MAUI ((Multi-platform App UI) and plan to update the app so it can target Windows and MacOS in addition to the current platforms, Android and iOS - all with the same code base. I am also planning to switch to Wilderness Labs Meadow F7 boards inside the robotic arm so that we can have .NET not just in the mobile and desktop client but also on the actual device. Once Wilderness Labs Meadow runs .NET on the IoT Hardware taking advantage of the new .NET 6 tooling and changes to the BCL, we can then carry out over-the-air updates on the hardware. So, if we wish to update the code we can build and have an Azure Dev Ops process push the updates directly to the hardware removing the need for the user to visit a technician for updates.</P> <P> </P> <P>This change to .NET on the hardware as well as across the mobile and desktop means that we can share code between the two code bases with shared Models and Service layers reducing the need to have bespoke versions of these. The possibilities with .NET MAUI are endless and I recently wrote <A href="https://www.cliffordagius.co.uk/post/whatismaui/" target="_self">a blog</A> about it.</P> <P> </P> <P>Visual Studio 2022 allows me to use hot restart, and hot reloads, so I can edit my C# code to bring the dev cycle down from a minute and a half to just a few seconds. The fact that I can plug my developer iPhone into my Windows Surface Book laptop when I'm traveling around the world and keep coding is awesome. I've been using Visual Studio 2022 for last couple of months as my daily.</P> <P> </P> <P>Also Microsoft has gone out of the way to make sure that accessibility is engrained into the design. So the biggest advantage of Visual Studio 2022 will be the accessibility gains, the speed improvements, app startup times, and being able to develop and compile <EM>really, really</EM> fast.</P> <P><SPAN style="font-weight: normal !msorm;"><STRONG> </STRONG></SPAN></P> <P><EM><STRONG>Do you have any advice to aspiring or striving developers?</STRONG></EM></P> <P>Keep learning. Learning and challenging our ourselves to explore the unexplored is where real growth as an individual takes place. I use the content on docs.microsoft.com to keep myself updated and recommend it to all developers.</P> <P> </P> <P><STRONG>Watch Clifford Agius and young Kayden demo the robotic arm and HandyApp </STRONG></P> <P><A href="https://azure.microsoft.com/en-gb/developer/stories/" target="_blank" rel="noopener"><STRONG>https://azure.microsoft.com/en-gb/developer/stories/</STRONG><BR /></A> </P> <P><STRONG>.NET 6 announcement</STRONG></P> <P><SPAN>It is ready for your #app — over a year in the making, we are very happy to release </SPAN><SPAN>.NET 6 and a higher performance web stack to simplify and speed up development! </SPAN><SPAN>Learn more: <A title="https://aka.ms/dotnet6-ga" href="https://aka.ms/dotnet6-GA" target="_blank" rel="noreferrer noopener">https://aka.ms/dotnet6-GA</A> </SPAN></P> <P><LI-WRAPPER> </LI-WRAPPER></P> <P> </P> <P><STRONG>CODE Magazine Focus Issue: .NET 6</STRONG></P> <P><SPAN>Read all about the .NET 6 release and what’s new in Visual Studio 2022 for .NET </SPAN><SPAN>#developers in this special issue of CODE Magazine: <A title="https://aka.ms/dotnet6-code-mag" href="https://aka.ms/dotnet6-code-mag" target="_blank" rel="noreferrer noopener">https://aka.ms/dotnet6-code-</A></SPAN><SPAN><A title="https://aka.ms/dotnet6-code-mag" href="https://aka.ms/dotnet6-code-mag" target="_blank" rel="noreferrer noopener">mag</A> </SPAN></P> <P> </P> <P><STRONG>Cliff's blog: </STRONG><A href="https://www.cliffordagius.co.uk/" target="_blank" rel="noopener">https://www.cliffordagius.co.uk/</A></P> <P> </P> <P><EM><STRONG>CodeStories Blogs is a series of interviews with innovative and inspiring developers.</STRONG></EM></P> Tue, 30 Nov 2021 08:48:06 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-airline-pilot-develops-a-robotic-arm-for-his-friend-s-son/ba-p/3015347 Monish_Gangwani 2021-11-30T08:48:06Z Azure Friday: The year in retrospect https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-friday-the-year-in-retrospect/ba-p/3015107 <P><SPAN data-contrast="auto">Hi everyone, I think one thing we can all agree on is that 2021 has been a wild and wonderful ride for anyone keeping up with innovations in Azure Services. We’ve seen advancements across the platform all the way from making Quantum computing more accessible, to the rise of GitHub in workflows, to updates in everything from Cosmos DB to Blobs.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">As we are wrapping up the year, I’d like to share some reflections on Azure Friday with a few episodes that may be especially interesting and widely useful to developers. If you missed any of these, you might want to catch up on watching them now. </SPAN><SPAN> <BR /></SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">We have data science that proves you are more likely to be successful in Azure if you get started with the </SPAN><A href="https://docs.microsoft.com/en-us/azure/azure-portal/azure-portal-quickstart-center" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Quickstart Center</SPAN></A><SPAN data-contrast="auto">. In </SPAN><STRONG><I><SPAN data-contrast="auto">Better Azure content, programs & services through applied data science</SPAN></I></STRONG><SPAN data-contrast="auto"> Lisa Cohen explained how Microsoft uses data science to help Azure customers. Learn about content, programs, and services to guide you on your cloud journey, and how we use your feedback to drive improvements in Azure.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=Qll-wtjIobU" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/Qll-wtjIobU/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW236030956 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW236030956 BCX0">Just because something is running in a container, that does not automatically mean that you </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">have security baked in. </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">Azure Container Instances (ACI) allow for a quick, simple, and cost-effective way to run serverless containers in production. </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">Jessica </SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW236030956 BCX0">Deen</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> explains</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> ways to be intentional about</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">how you design container</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">s</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> and build with security </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">in</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> mind </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">in </SPAN></SPAN><SPAN class="TextRun SCXW236030956 BCX0" data-contrast="auto"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW236030956 BCX0">Best</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> practices for Azure Container Instances (ACI) with GitHub Actions</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=jkEkeTW1QeE" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/jkEkeTW1QeE/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW182523104">O</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">ne of the most fun </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">episodes</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> for me this year</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> was definitely</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW182523104">gee</SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW182523104">k</SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW182523104">ing</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> out in</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW182523104">Retro Game Translation with Azure Cognitive Services and IoT Edge</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW182523104"> w</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">ith </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">Paul </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">DeCarlo</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">,</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">as he demonstrated how he </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">uses IoT Edge with Cognitive Services Containers to enhance</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> and localize</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">favorite retro videogames</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">.</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">W</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">e shared a few</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">treasured </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">items from our </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">respective </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">retro gaming collections</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> in this one</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">, too.</SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><LI-VIDEO vid="https://www.youtube.com/watch?v=atga5uMsrYY" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/atga5uMsrYY/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="TextRun SCXW263399982 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW263399982 BCX0">Did you know that you can use optimization </SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0">algorithms</SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0"> </SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0">inspired by</SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0"> decades of quantum physics research to help solve optimization problems? </SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0">In </SPAN></SPAN><SPAN class="TextRun SCXW263399982 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW263399982 BCX0">Quantum-inspired algorithms and the Azure Quantum optimization service</SPAN></SPAN><SPAN class="TextRun SCXW263399982 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW263399982 BCX0"> Delbert Murphy joined Scott to show how Quantum-Inspired optimization (QIO) takes state-of-the-art algorithmic techniques from quantum </SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW263399982 BCX0">physics</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW263399982 BCX0">,</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW263399982 BCX0"> and</SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0"> makes these capabilities available in Azure on conventional hardware, and callable from a Python client. </SPAN></SPAN><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=ggwKsoR8m08" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/ggwKsoR8m08/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW73754094 BCX0">Something that blew my mind when I learned it this year was that Azure offers satellite ground station as a service. How cool is that? Scott</SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0"> spoke with rocket scientist </SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">Hrishi Shelar and learned about Azure Orbital</SPAN></SPAN><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="none"><SPAN class="NormalTextRun SCXW73754094 BCX0">—</SPAN></SPAN><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW73754094 BCX0">a fully managed cloud-based ground station as a service that enables you to communicate with your spacecraft or satellite constellations, downlink and uplink data, process your data in the cloud, </SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">and </SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">chain services with Azure services. It’s </SPAN><SPAN class="NormalTextRun AdvancedProofingIssueV2 SCXW73754094 BCX0">pretty amazing</SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">! Watch </SPAN></SPAN><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW73754094 BCX0">How to use Azure Orbital to communicate with your satellites</SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=MqgjSBKAxIg" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/MqgjSBKAxIg/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW180139325 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW180139325 BCX0">Did a specific episode of Azure Friday </SPAN><SPAN class="NormalTextRun SCXW180139325 BCX0">stand out to you as memorable this year? I’d love to hear about it in the comments.</SPAN></SPAN><SPAN class="EOP SCXW180139325 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW180139325 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW67672907" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW67672907">Keep watching Azure Friday episodes on <A href="https://docs.microsoft.com/en-us/shows/Azure-Friday/" target="_blank" rel="noopener">Azure Friday | Microsoft Docs</A></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> Thu, 02 Dec 2021 18:58:06 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-friday-the-year-in-retrospect/ba-p/3015107 RobCaron 2021-12-02T18:58:06Z 10 shades of public API hosting on Azure https://techcommunity.microsoft.com/t5/azure-developer-community-blog/10-shades-of-public-api-hosting-on-azure/ba-p/2989856 <P>APIs are everywhere and there are many ways to host them in Azure! Let us see what are the different possibilities with the pros & cons of each. I am not going to discuss the bits and bytes about each possibility. The purpose of this post is to give you a rough idea of what is possible for a simple scenario (single region, high-availability and disaster recovery are out of scope). I will provide small diagrams for more advanced scenarios.</P> <P> </P> <H2>1) Function App - Consumption tier</H2> <P> </P> <P>Function Apps ship with HTTP-triggered functions. These can be suitable to expose tiny APIs.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly (economies of scale), Easy to deploy, Fully elastic with built-in auto-scaling from 0 to n instances.</P> <P><U><STRONG>Cons</STRONG></U>: Limited security controls. Network ACLs are the only way to limit public exposure. Data accessed by such functions must be public from a connectivity perspective. Cold start due to serverless tier. Limited execution time as well as per-execution resource consumption. No WAF (Web Application Firewall) features.</P> <P> </P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, Basic API needs (ie: no catalog, no versioning, etc.), asynchronous APIs, Synchronous APIs that can live with the cold start, No strong compliance requirements.</P> <P> </P> <H2>2) Multi-Tenant App Service - Standard tier</H2> <P>Like functions, Web Apps are pretty neat and easy to get started with. Microsoft is managing everything for you under the hoods. </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly (economies of scale) but fixed cost incurred (unlike functions on consumption tier), Easy to deploy, Auto-scaling plans. Resource is limited to the capacity you are willing to pay. No cold start when Always On is turned on!</P> <P><U><STRONG>Cons</STRONG></U>: Limited security controls. Network ACLs are the only way to limit public exposure. Data accessed by such apps must be public from a network perspective. No WAF.</P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, Basic API needs (ie: no catalog, no versioning, etc.), No strong compliance requirements.</P> <P> </P> <H2>3) Azure Container Instances (ACI)</H2> <P>While Azure Container Instances can be used to host long-running services, I would advise against this idea and keep the ACIs for asynchronous job operations, short-lived executions and as the serverless (virtual kubelets) part of Azure Kubernetes Service. </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly (pay per second of execution), providing the API is not constantly up and running.</P> <P><U><STRONG>Cons</STRONG></U>: Limited security controls with Windows Containers, better with Linux as Linux-based ACIs can integrate with virtual networks.</P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, Basic API needs (ie: no catalog, no versioning, etc.), No strong compliance requirements. Lift & shift of plain old legacy Windows-based backend services.</P> <H2>4) Functions Apps Consumption tier or App Service standard+ Azure API Management (APIM) Consumption tier</H2> <P>In this setup, you intend to publish APIs through Azure API Management. The pros & cons of the underlying hosting option (app service or function apps) remain as explained earlier and are not repeated below.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly because the serverless flavor of APIM has no fixed cost. It will auto-scale with the actual demand. You can add features to your APIs such as enforcing policies (JWT validation, headers checks etc.) as well as version them. </P> <P><U><STRONG>Cons</STRONG></U>: More security controls but there is still a few major caveats: network ACLs remain the only way to limit public exposure of the backend and traffic cannot be forced through APIM because the consumption tier has no static IP so this can't be used as a network ACL on the backend side. Data accessed by such apps must still be public from a network perspective. Still no WAF because APIM is a a PEP (Policy Enforcement Point) but not a WAF. </P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, More advanced API needs (catalog, versioning, consistent way of exposing APIs etc.), No strong compliance requirements.</P> <P> </P> <H2>5) Functions Apps Consumption tier or App Service standard+ Azure API Management (APIM) Basic or Standard tier</H2> <P>In this setup, you intend to publish APIs (<EM>and enforce routing</EM>) through Azure API Management. </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: You benefit from APIM capabilities AND you can restrict traffic to the backend to your APIM instance because as of the basic tier, APIM comes with a static IP. </P> <P><U><STRONG>Cons</STRONG></U>: A bit more expensive (fixed cost for APIM). Manual scaling for the Basic tier (plans possible as of Standard). Data stores accessed by the backends must still be public from a network perspective. Still no WAF because APIM is a a PEP (Policy Enforcement Point) but not a WAF. </P> <P><U><STRONG>Use cases</STRONG></U>: Limited budgets, More advanced API needs (catalog, versioning, consistent way of exposing APIs etc.), No strong compliance requirements.</P> <P> </P> <H2>6) App Service (or Functions) on Premium tier+Private Endpoint+VNET Integration+WAF</H2> <P>In this setup, you want isolate your backend services totally from internet and make them only accessible through a web application firewall (WAF). Because it is a little more complex, here is a small diagram showing the different blocs and their interactions.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="plinkvnetintegration.png" style="width: 722px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328462i3330053516527FA8/image-size/large?v=v2&px=999" role="button" title="plinkvnetintegration.png" alt="plinkvnetintegration.png" /></span></P> <P>The traffic flies from a caller (here a mobile device) to a WAF which has a public IP. The WAF has a backend pool targeting the endpoints defined in the corresponding private endpoint subnet. The app service is integrated with Azure Private Link (and private DNS zone) for the INBOUND traffic. VNET integration for the App Service (or function app) is enabled to handle the OUTBOUND traffic through another VNET's subnet.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: This hosting option is more secure than the preceding ones because the data stores can be firewalled thanks to the control over the outbound traffic of the API. The backend services are isolated from internet and proxied by a WAF. </P> <P><U><STRONG>Cons</STRONG></U>: This architecture is a bit convoluted and is not the best one to run at scale.</P> <P><U><STRONG>Use cases</STRONG></U>: Stronger focus on security. Basic API needs (no more APIM in the picture). </P> <P> </P> <H2>7) App Service (or Functions) on Premium tier+Private Endpoint+VNET Integration+WAF+APIM Premium</H2> <P>The purpose of this setup is the same as the previous one but you want to combine both WAF & APIM (how it should be) before hitting backend services. </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="plinkvnetintegrationapimwaf.png" style="width: 722px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328465iD7E02E7C97E31DF8/image-size/large?v=v2&px=999" role="button" title="plinkvnetintegrationapimwaf.png" alt="plinkvnetintegrationapimwaf.png" /></span></P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Inbound traffic is more secure because it traverses a WAF and a PEP. Network ACLs can be set at backend level to only let the API gateway (which has a static IP) call the backend. Outbound traffic of the API gateway can be controlled by a NVA or Azure Firewall.</P> <P><U><STRONG>Cons</STRONG></U>: This architecture is a bit convoluted and is not the best one to run at scale, from a manageability perspective. APIM premium is expensive but is required because at the time of writing (11/2021), only the Premium tier integrates with Virtual Networks. </P> <P><U><STRONG>Use cases</STRONG></U>: Stronger focus on security, advanced API needs and possible geo-distributed APIs setup.</P> <P> </P> <H2>8)</img> WAF+APIM Premium+App Service Environment (ASE)</H2> <P>Before ASE v3, ILB ASEs had a rather bad reputation because of their cost (flat fees), and their complexity. It was indeed quite easy to break them with improperly configured firewall rules. ASE v3 are a breeze to setup and are less expensive (no more flat fee). Therefore ILB ASE comes back as a very interesting option because it offers the best-in-class security at an affordable price, at least from a backend hosting perspective.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ase.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328468iD1AA186116E5886F/image-size/large?v=v2&px=999" role="button" title="ase.png" alt="ase.png" /></span></P> <P> </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Inbound and outbound traffic can be fully controlled by an NVA or Azure Firewall. Intra VNET traffic can be controlled with both Network Security Groups and Azure Firewall. Backends are totally isolated from internet. This setup is scalable because the ASE can host tons of backends and functions. The underlying compute is based on a single-tenant architecture (Isolated tier). Compared to the previous setup involving only private endpoints, controlling the network traffic is easier with an ASE. However, in 11/2021, private endpoints can also be subject to both UDRs & NSGs but it is a public preview feature that is only available in some regions...This comment is also relevant for the ASE-based architecture since the apps hosted on the ASE are likely to talk to public PaaS services (Azure SQL, Azure Storage, etc.) through private endpoints.</P> <P><U><STRONG>Cons</STRONG></U>: Costs (incurred by the isolated tiers and APIM premium) and complexity. Although ASE v3 is a breeze compared to its predecessors, this setup is often part of a larger Hub & Spoke architecture, which involves a lot of networking and firewalling work. You do not get started with it over night! </P> <P><U><STRONG>Use cases</STRONG></U>: Stronger compliance requirements, advanced API needs and possible geo-distributed APIs setup. This setup is perfectly suitable as a Web Landing Zone that hosts tons of web apps and APIs. </P> <P> </P> <H2>9) WAF+APIM Premium+AKS</H2> <P>Kubernetes has become a first-class citizen everywhere and AKS is the Microsoft-managed K8s offering on Azure (By the way, Azure Arc also has a ton of handy features to manage K8s clusters at scale wherever they are hosted). So, with this in mind, I could not skip it. Here is a very simplified diagram showing the different building blocks:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AKS.png" style="width: 762px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328469iCFF6CE6FBD59A587/image-size/large?v=v2&px=999" role="button" title="AKS.png" alt="AKS.png" /></span></P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Very similar to the previous architecture with regards to inbound and outbound, Hub & Spoke integration, etc.. although AKS adds a serious bits of extra complexity network-wise. AKS allows you to host nearly anything and has a very rich ecosystem. When I think AKS, I think all the benefits of VMs with all the benefits of cloud native architectures (Infrastructure as Code, increased resilience, zero downtime, releases during business hours, polyglot apps, etc.). </P> <P><U><STRONG>Cons</STRONG></U>: Costs incurred by APIM premium and the AKS node pools, which should involve at least 3 nodes but ideally 5 for a minimal production-grade setup. Another potential deal-breaker for some organizations is the complexity of K8s (AKS). App Services and Function Apps are <EM><STRONG>way easier</STRONG> </EM>to work with and it is a Kubernetes lover who tells you this!</P> <P><U><STRONG>Use cases</STRONG></U>: Stronger compliance requirements, advanced API needs and possible geo-distributed APIs setup. This setup is perfectly suitable as a Web Landing Zone that hosts tons of web apps and APIs. Microservices architectures (K8s and its ecosystem, including service meshes, are very supportive of microservices architectures).</P> <P> </P> <H2>10) Container Apps</H2> <P>I put it last, not because it's the most advanced but because it is in preview. This new service (public preview in 11/2021) is very promising because it comes with some of the AKS promises without the complexity because Microsoft manages nearly everything for you. Container apps remind me Service Fabric Mesh to some extent, let's hope they'll have a brighter future. However, at the time of writing, it is no way in line with typical enterprise needs (Hub & Spoke) but Microsoft is working on a BYO VNET feature. It is still a little early to come with pros & cons but here are a few of them.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost friendly since it scales from 0 to n, like Azure Functions. Easy to deploy and manage.</P> <P><U><STRONG>Cons</STRONG></U>: N/A (too early)</P> <P><U><STRONG>Use cases</STRONG></U>: right now, PoCs and protoyping only. In the future, microservices architectures, which is why this service has been built from the ground up.</P> Sat, 18 Dec 2021 15:20:47 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/10-shades-of-public-api-hosting-on-azure/ba-p/2989856 stephaneey 2021-12-18T15:20:47Z Helping Professional Developers accelerate collaboration with low-code Power Apps on Microsoft Teams https://techcommunity.microsoft.com/t5/azure-developer-community-blog/helping-professional-developers-accelerate-collaboration-with/ba-p/2941803 <P><STRONG><SPAN data-contrast="none">How Professional Developers can use low-code </SPAN></STRONG><STRONG><SPAN data-contrast="none">Microsoft Power Apps and Teams to drive agility and collaboration within your organization </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">With major business disruption during the pandemic in 2020, Microsoft Power Apps and Teams were tools that quickly realized their value for being able to help teams collaborate and automate manual processes. To help understand how Power Apps and Teams can work together to help your organization, Professional developers have pulled together a series of 16 articles that help you, a professional developer, get started using low-code within a collaboration tool to simplify how your teams navigate their day-to-day tasks. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Get ready to jump in and learn how low-code Power Apps can help your business. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CodeProject.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/331289i0DBFE6C514DB9C42/image-size/large?v=v2&px=999" role="button" title="CodeProject.png" alt="CodeProject.png" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Power Apps Solution for Professional Developers Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">We explain why professional developers should care about Power Apps and Teams as well as where these tools fit within the software development and deployment landscape. We will also provide guidance on when it makes sense to use Power Apps instead of traditional development tools. Next, we demo how to build a Power App within Teams and export the app if needed. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303172/Power-Apps-for-Professional-Developers-1-Power-App" target="_blank" rel="noopener"><SPAN data-contrast="none">Power Apps for Professional Developers 1: Power Apps + Teams Overview</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303173/Power-Apps-for-Professional-Developers-2-How-to-bu" target="_blank" rel="noopener"><SPAN data-contrast="none">Power Apps for Professional Developers 2: How to build Power Apps</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303174/Power-Apps-for-Professional-Developers-3-Exporting" target="_blank" rel="noopener"><SPAN data-contrast="none">Power Apps for Professional Developers 3: Exporting Teams Apps</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution with a Customer Connector Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">We explain why professional developers should care about Power Apps and Teams and dive into how they can use a customer connector within the Team’s environment. The next articles then dive into app flows and how to think about updating information within the customer connector. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5309042/Building-a-Teams-Power-App-Using-a-Custom-Connecto" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using a Custom Connector Part 1: Introduction to Using Custom Connectors in Power Apps for Microsoft Teams</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5309044/Building-a-Teams-Power-App-Using-a-Custom-Connec-2" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using a Custom Connector Part 2: Integrating Power App Flow to Update Information</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5309046/Building-a-Teams-Power-App-Using-a-Custom-Connec-3" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using a Custom Connector Part 3: Editing Data and Writing Back to the App</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution with an SAP Connector Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Have SAP? Look at these articles to see how you can use the SAP connector with Microsoft Power Apps within your Microsoft Teams environment. There are also posts on reading and highlighting your app and how to write back data.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5310030/Building-a-Teams-Power-App-with-an-SAP-Connector-P" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App with an SAP Connector Part 1: Creating Environments and Adding a Connector</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5310032/Building-a-Teams-Power-App-Using-the-SAP-Connector" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using the SAP Connector Part 2: Reading and Displaying SAP Data in a Power App</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5310033/Building-a-Teams-Power-App-Using-the-SAP-Connect-2" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using the SAP Connector Part 3: Writing Data from a Power App Back to SAP</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution for Retail Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">We explore how to create a customer information application for a personalized retail shopping service, using Power Apps for Microsoft Teams. We will go into components of the app, including data entry and customer display UI.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303163/Building-a-Teams-Power-App-for-Retail-1-Creating-a" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App for Retail 1: Creating a Power App and Dataverse Database</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303166/Building-a-Teams-Power-App-for-Retail-2-Creating-a" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App for Retail 2: Creating a Customer Information Data Entry UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303168/Building-a-Teams-Power-App-for-Retail-3-Creating-a" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App for Retail 3: Creating a Customer Display UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution for Manufacturing Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">In this series, we look at a classic example of an ordering system. What could be a very manual task, we show you how to build a Power Apps solution. This includes creating UI’s for both customers and manufacturers. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303169/Build-a-Teams-Power-App-for-Manufacturing-1-Get-St" target="_blank" rel="noopener"><SPAN data-contrast="none">Build a Teams Power App for Manufacturing 1: Get Started with Dataverse</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303170/Build-a-Teams-Power-App-for-Manufacturing-2-Create" target="_blank" rel="noopener"><SPAN data-contrast="none">Build a Teams Power App for Manufacturing 2: Create the Customer UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303171/Build-a-Teams-Power-App-for-Manufacturing-3-Create" target="_blank" rel="noopener"><SPAN data-contrast="none">Build a Teams Power App for Manufacturing 3: Create the Manufacturer UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">As you can see there are many ways Power Apps can help various organizations be more agile. To learn more, check out </SPAN><A href="https://powerapps.microsoft.com/en-us/" target="_blank" rel="noopener"><SPAN data-contrast="none">Business Apps | Microsoft Power Apps</SPAN></A><SPAN data-contrast="none"> or reach out to your Microsoft representative. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> Thu, 02 Dec 2021 19:04:43 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/helping-professional-developers-accelerate-collaboration-with/ba-p/2941803 Jacqui_Cuffe_McNamara 2021-12-02T19:04:43Z Get started with minimal API for .NET 6 https://techcommunity.microsoft.com/t5/azure-developer-community-blog/get-started-with-minimal-api-for-net-6/ba-p/2940108 <BLOCKQUOTE> <P>TLDR; Using minimal API, you can create a Web API in just 4 lines of code by leveraging new features like top-level statements and more.</P> </BLOCKQUOTE> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0why-minimal-api" target="_blank" rel="noopener" name="%C2%A0why-minimal-api"></A> Why Minimal API</H2> <P>There are many reasons for wanting to create an API in a few lines of code:</P> <UL> <LI><STRONG>Create a prototype</STRONG>. Sometimes you want a quick result, a prototype, something to discuss with your colleagues. Having something up and running quickly enables you to quickly do changes to it until you get what you want.</LI> <LI><STRONG>Progressive enhancement</STRONG>. You might not want all the "bells and whistles" to start with but you may need them over time. Minimal API makes it easy to gradually add what you need, when you need it.</LI> </UL> <H2> </H2> <H2> Learn more</H2> <P>Check out these LEARN modules on learning to use minimal API</P> <UL> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-api?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">Your first minimal API + Swagger</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-database?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with Entity Framework</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-spa?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with React</A></LI> </UL> <H2> </H2> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#how-is-it-different-from-a-normal-web-api" target="_blank" rel="noopener" name="how-is-it-different-from-a-normal-web-api"></A>How is it different from a normal Web API?</H2> <P>There are a few differences:</P> <UL> <LI><STRONG>Less files</STRONG>.<SPAN> </SPAN><EM>Startup.cs</EM><SPAN> </SPAN>isn't there anymore, only<SPAN> </SPAN><EM>Program.cs</EM><SPAN> </SPAN>remains.</LI> <LI><STRONG>Top level statements and implicit global usings</STRONG>. Because it's using top level statements,<SPAN> </SPAN><CODE>using</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>namespace</CODE><SPAN> </SPAN>are gone as well, so this code:</LI> </UL> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp"> using System; namespace Application { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>is now this code:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp"> Console.WriteLine("Hello World!");</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <UL> <LI><STRONG>Routes</STRONG><SPAN> </SPAN>Your routes aren't mapped to controller classes but rather setup with a<SPAN> </SPAN><CODE>Map[VERB]</CODE><SPAN> </SPAN>function, like you see above with<SPAN> </SPAN><CODE>MapGet()</CODE><SPAN> </SPAN>which takes a route and a function to invoke when said route is hit.</LI> </UL> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0your-first-api" target="_blank" rel="noopener" name="%C2%A0your-first-api"></A> Your first API</H2> <P>To get started with minimal API, you need to make sure that .NET 6 is installed and then you can scaffold an API via the command line, like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="bash">dotnet new web -o MyApi -f net6.0</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Once you run that, you get a folder<SPAN> </SPAN><EM>MyApi</EM><SPAN> </SPAN>with your API in it.</P> <P>What you get is the following code in<SPAN> </SPAN><EM>Program.cs</EM>:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.MapGet("/", () => "Hello World!"); app.Run();</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>To run it, type<SPAN> </SPAN><CODE>dotnet run</CODE>. A little difference here with the port is that it assumes random ports in a range rather than 5000/5001 that you may be used to. You can however configure the ports as needed. Learn more on this<SPAN> </SPAN><A href="https://docs.microsoft.com/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0#working-with-ports" target="_blank" rel="noopener">docs page</A></P> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0explaining-the-parts" target="_blank" rel="noopener" name="%C2%A0explaining-the-parts"></A> Explaining the parts</H2> <P>Ok so you have a minimal API, what's going on with the code?</P> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0creating-a-builder" target="_blank" rel="noopener" name="%C2%A0creating-a-builder"></A> Creating a builder</H3> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args);</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>On the first line you create a<SPAN> </SPAN><CODE>builder</CODE><SPAN> </SPAN>instance.<SPAN> </SPAN><CODE>builder</CODE><SPAN> </SPAN>has a<SPAN> </SPAN><CODE>Services</CODE><SPAN> </SPAN>property on it, so you can add capabilities on it like Swagger Cors, Entity Framework and more. Here's an example where you set up Swagger capabilities (this needs install of the Swashbuckle NuGet to work though):</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Todo API", Description = "Keep track of your tasks", Version = "v1" }); });</LI-CODE> <P> </P> <P> </P> <P> </P> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#creating-the-app-instance" target="_blank" rel="noopener" name="creating-the-app-instance"></A>Creating the app instance</H3> <P>Here's the next line:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var app = builder.Build();</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Here we create an<SPAN> </SPAN><CODE>app</CODE><SPAN> </SPAN>instance. Via the<SPAN> </SPAN><CODE>app</CODE><SPAN> </SPAN>instance, we can do things like:</P> <UL> <LI>Starting the app,<SPAN> </SPAN><CODE>app.Run()</CODE></LI> <LI>Configuring routes,<SPAN> </SPAN><CODE>app.MapGet()</CODE></LI> <LI>Configure middleware,<SPAN> </SPAN><CODE>app.UseSwagger()</CODE></LI> </UL> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#defining-the-routes" target="_blank" rel="noopener" name="defining-the-routes"></A>Defining the routes</H3> <P>With the following code, a route and route handler is configured:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">app.MapGet("/", () => "Hello World!");</LI-CODE> <P> </P> <P> </P> <P> </P> <P>The method<SPAN> </SPAN><CODE>MapGet()</CODE><SPAN> </SPAN>sets up a new route and takes the route "/" and a route handler, a function as the second argument<SPAN> </SPAN><CODE>() => "Hello World!"</CODE>.</P> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#starting-the-app" target="_blank" rel="noopener" name="starting-the-app"></A>Starting the app</H3> <P>To start the app, and have it serve requests, the last thing you do is call<SPAN> </SPAN><CODE>Run()</CODE><SPAN> </SPAN>on the<SPAN> </SPAN><CODE>app</CODE><SPAN> </SPAN>instance like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">app.Run();</LI-CODE> <P> </P> <P> </P> <P> </P> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0add-routes" target="_blank" rel="noopener" name="%C2%A0add-routes"></A> Add routes</H2> <P>To add an additional route, we can type like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">public record Pizza(int Id, string Name); app.MapGet("/pizza", () => new Pizza(1, "Margherita"));</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Now you have code that looks like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.MapGet("/pizza", () => new Pizza(1, "Margherita")); app.MapGet("/", () => "Hello World!"); public record Pizza(int Id, string Name); app.Run();</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Where you to run this code, with<SPAN> </SPAN><CODE>dotnet run</CODE><SPAN> </SPAN>and navigate to<SPAN> </SPAN><CODE>/pizza</CODE><SPAN> </SPAN>you would get a JSON response:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="json">{ "pizza" : { "id" : 1, "name" : "Margherita" } }</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#example-app" target="_blank" rel="noopener" name="example-app"></A>Example app</H2> <P>Let's take all our learnings so far and put that into an app that supports GET and POST and lets also show easily you can use query parameters:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } var pizzas = new List<Pizza>(){ new Pizza(1, "Margherita"), new Pizza(2, "Al Tonno"), new Pizza(3, "Pineapple"), new Pizza(4, "Meat meat meat") }; app.MapGet("/", () => "Hello World!"); app.MapGet("/pizzas/{id}", (int id) => pizzas.SingleOrDefault(pizzas => pizzas.Id == id)); app.MapGet("/pizzas", (int ? page, int ? pageSize) => { if(page.HasValue && pageSize.HasValue) { return pizzas.Skip((page.Value -1) * pageSize.Value).Take(pageSize.Value); } else { return pizzas; } }); app.MapPost("/pizza", (Pizza pizza) => pizzas.Add(pizza)); app.Run(); public record Pizza(int Id, string Name);</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Run this app with<SPAN> </SPAN><CODE>dotnet run</CODE></P> <P>In your browser, try various things like:</P> <UL> <LI>"<A href="http://localhost:%7BPORT%7D/pizzas" target="_blank" rel="noopener">http://localhost:{PORT}/pizzas</A>", should give you all pizzas back</LI> <LI>"<A href="http://localhost:%7BPORT%7D/pizzas?page=1&pageSize=2" target="_blank" rel="noopener">http://localhost:{PORT}/pizzas?page=1&pageSize=2</A>", should give you the two first pizzas. See how the query parameters are working for you.</LI> <LI>"<A href="http://localhost:%7BPORT%7D/pizzas/2" target="_blank" rel="noopener">http://localhost:{PORT}/pizzas/2</A>", should give you the "Al Tonno" pizza back. Here you have the<SPAN> </SPAN><CODE>{id}</CODE><SPAN> </SPAN>matching the 2 and thereby it filters down on the one item that matches.</LI> </UL> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0learn-more" target="_blank" rel="noopener" name="%C2%A0learn-more"></A></H2> <H2> Learn more</H2> <P>Check out these LEARN modules on learning to use minimal API</P> <UL> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-api?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">Your first minimal API + Swagger</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-database?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with Entity Framework</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-spa?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with React</A></LI> </UL> <P> </P> Mon, 08 Nov 2021 21:16:22 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/get-started-with-minimal-api-for-net-6/ba-p/2940108 Chris_Noring 2021-11-08T21:16:22Z Azure Logic Apps Announcement - Fall 2021 Release https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-fall-2021-release/ba-p/2911923 <P>Azure Logic Apps team is happy to announce the Fall 2021 release at the Ignite conference.</P> <P> </P> <P><SPAN><STRONG>Why it matters:</STRONG> Logic Apps is a key part of Azure Integration Services, at the //build conference this year, we announced the General Availability of Logic Apps Standard, a flexible, containerized, modern cloud-scale workflow engine you can run anywhere. Over the past 6 months, we've seen accelerate growth of the service. Equipped with feedbacks, recommendations, and business scenarios from customers like you, the team have worked extremely hard to deliver this release, addressing many of the top asks.</SPAN></P> <P> </P> <P><SPAN><STRONG>The big picture:</STRONG> Microsoft has been named as a Leader in <A href="https://azure.microsoft.com/blog/microsoft-named-as-a-leader-in-2021-gartner-magic-quadrant-for-enterprise-integration-platform-as-a-service/" target="_self">2021 Gartner® Magic Quadrant™ for Enterprise Integration Platform as a Service</A>, this marked the 4th year of Microsoft as a leader in terms of both ability to execute and completeness of vision. In addition, Microsoft have also been named as a Leader in t</SPAN><SPAN>he Forrester Wave™ on Enterprise integration platform as a service (iPaaS).</SPAN></P> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Gartner MQ on enterprise iPaaS" style="width: 694px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322848i472DCEE753BEDEEF/image-size/large?v=v2&px=999" role="button" title="gartner.png" alt="Gartner MQ on enterprise iPaaS" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Gartner MQ on enterprise iPaaS</span></span></SPAN></P> <P><SPAN><STRONG>Go deeper:</STRONG> the Fall 2021 release of Logic Apps is feature-packed, most of them will be available by the time you're reading this blob post, with the rest being rolled out and becoming available throughout the week of Ignite.</SPAN></P> <UL> <LI><SPAN><STRONG>SQL as storage provider</STRONG> is now in public preview. Storage is a key piece of the Logic Apps service, it is where the runtime stores the states of the workflows as they are running, enabling Logic Apps to be highly resilient and suitable for mission-critical workloads. With the new runtime, it is possible to create and run Logic Apps Standard anywhere: locally, on premises, multi-cloud thanks to Azure Arc. The SQL as a storage provider feature allows you to use a SQL database as storage for Logic Apps, which can be co-located with wherever the Logic Apps runtime is. This removes the dependency on Azure Storage, and affords you low latency, more predictable cost, and the ability to run in a fully disconnected manner if needed. <A href="https://docs.microsoft.com/azure/logic-apps/set-up-sql-db-storage-single-tenant-standard-workflows" target="_self">Learn more</A></SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SQL as a storage provider" style="width: 587px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322855i9FA8A70EC08920A2/image-dimensions/587x352?v=v2" width="587" height="352" role="button" title="sql.png" alt="SQL as a storage provider" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SQL as a storage provider</span></span></SPAN></P> <UL> <LI><SPAN><STRONG>Managed identity</STRONG> provides an identity for applications to use when connecting to resources that support Azure Active Directory authentication. In the Fall 2021 release, we added managed identity support for multi-auth capable Azure connectors such as SQL and Azure Blob in Logic Apps Consumption, as well as managed identity support for all Azure connectors in Logic Apps Standard. <A href="https://docs.microsoft.com/azure/logic-apps/create-managed-service-identity?tabs=consumption" target="_self">Learn more</A></SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Managed identity in Logic Apps" style="width: 520px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322856i23498FA227108529/image-dimensions/520x310?v=v2" width="520" height="310" role="button" title="msi.JPG" alt="Managed identity in Logic Apps" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Managed identity in Logic Apps</span></span></SPAN></P> <UL> <LI><SPAN><STRONG>Automation Tasks</STRONG> provides all Azure customers an easy way to automate their daily tasks, with just a few clicks, you can create tasks that automatically turns on and off the virtual machine on a schedule, purge old blobs in the storage account, or get a monthly usage report sent via email. In this release, the Logic Apps team have partnered with the Azure messaging team on building the experience for easy event replication. As a customer, you can choose from out-of-box templates to replicate the actual messages and events (rather than just metadata) between and across Service Bus queue, Service Bus topic, and Event Hub. Stateless workflows in Logic Apps standard are used to power this experience behind the scene, so you know the replication is highly performant. <A href="https://docs.microsoft.com/azure/logic-apps/create-replication-tasks-azure-resources" target="_self">Learn more</A></SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Automation tasks for event replication" style="width: 490px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322857i645436E732616345/image-dimensions/490x320?v=v2" width="490" height="320" role="button" title="task.JPG" alt="Automation tasks for event replication" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Automation tasks for event replication</span></span></SPAN></P> <P> </P> <P> </P> <UL> <LI><STRONG>Designer</STRONG> is the key to fast development, and we have made it even better. Following the major designer refresh that gave it a new look-and-feel, designer have also gotten a performance boost with the latest release. The lines rendered on the canvas is more intuitive to help you better understand the flow, especially for composite actions such as Condition and Switch. <A href="https://docs.microsoft.com/azure/logic-apps/designer-overview" target="_self">Learn more</A></LI> </UL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Line rendering on condition action" style="width: 599px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322859i530C962469BCC362/image-dimensions/599x306?v=v2" width="599" height="306" role="button" title="if.png" alt="Line rendering on condition action" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Line rendering on condition action</span></span></P> <UL> <LI><SPAN><STRONG>Consumption to Standard export</STRONG> is available for public preview. To aid customers with existing Logic Apps Consumption resources to upgrade to Standard, an export experience is available in the Azure portal. It will analyze the workflow and help you create corresponding resources in the Standard SKU, accelerating the adoption and unlock richer capabilities in Logic Apps Standard such as virtual network integration.</SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Export Logic Apps Consumption to Standard" style="width: 559px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322860i241205B932710279/image-dimensions/559x239?v=v2" width="559" height="239" role="button" title="export.JPG" alt="Export Logic Apps Consumption to Standard" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Export Logic Apps Consumption to Standard</span></span></SPAN></P> <UL> <LI><SPAN><STRONG>Connectors</STRONG>, a key value proposition for Logic Apps is continuously being improved, including SFTP with trigger support; <A href="https://docs.microsoft.com/azure/logic-apps/logic-apps-enterprise-integration-flatfile?tabs=standard" target="_self">flatfile encode/decode without Integration Account dependency in Logic Apps Standard</A>; <A href="https://docs.microsoft.com/azure/connectors/connectors-create-api-cosmos-db?tabs=standard" target="_self">Cosmos DB with trigger, CRUD, and bulk create support</A>; and lastly but certainly not least, peek-lock support is added to the built-in Service Bus connector to allow the implementation of advanced messaging patterns.</SPAN></LI> </UL> <P> </P> <P><STRONG>See for yourself:</STRONG> make sure to check out our <A href="https://myignite.microsoft.com/sessions/94dac4c6-9cf2-4426-b22e-0304e4aefbf1" target="_self">demo-packed session for Ignite</A> that also features how ASOS, a global leader in fashion and tech, is leveraging Logic Apps to deliver innovate solutions.</P> <P> </P> <P><SPAN><STRONG>What's next:</STRONG> if you are not already using Logic Apps, get started today with <A href="https://azure.microsoft.com/free/serverless/" target="_self">12 months of free services</A> a see how Logic Apps can help your business innovate faster. If you are an experienced Logic Apps customer, be sure to check out the new features, and as always, let us know your thoughts and feedback in the discussion section below.</SPAN></P> <P> </P> <P><SPAN>Derek Li, on behalf of the entire Logic Apps team</SPAN></P> Tue, 02 Nov 2021 18:24:11 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-fall-2021-release/ba-p/2911923 derek1ee 2021-11-02T18:24:11Z Putting Tools in Your Hands to Improve Developer Productivity https://techcommunity.microsoft.com/t5/azure-developer-community-blog/putting-tools-in-your-hands-to-improve-developer-productivity/ba-p/2902225 <P><STRONG>By: <LI-USER uid="61063"></LI-USER>, Senior Product Marketing Manager and <LI-USER uid="1023930"></LI-USER>, Senior Product Marketing Manager </STRONG></P> <P> </P> <P>Developers are tasked with building the future. For organizations looking to usher in the next wave of digital transformation, it’s essential to create the right working environment to maximize developer innovation and well-being.</P> <P> </P> <P><A href="https://azure.microsoft.com/overview/developer-velocity/" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DeveloperVelocity.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/331504i48BAE046213C6976/image-size/large?v=v2&px=999" role="button" title="DeveloperVelocity.png" alt="DeveloperVelocity.png" /></span></A></P> <P> </P> <P>When we talk about improving <A href="https://azure.microsoft.com/overview/developer-velocity/" target="_blank" rel="noopener">Developer Velocity</A>, we’re referring to removing barriers and points of friction for developers so they can feel valued and achieve more.</P> <P> </P> <P>Organizations that boost Developer Velocity achieve better business results and innovate faster<A href="#_ftn1" target="_blank" rel="noopener" name="_ftnref1"><SPAN><SUP>[1]</SUP></SPAN></A>. Naturally, this has become a common goal among businesses, but unfortunately, many struggle to accurately measure Developer Velocity. Historically, firms have measured this by tracking activity-related metrics such as lines of code written per day or number of builds shipped in a quarter, but this approach fails to consider other key factors. It’s time for organizations to take a step back and see the bigger picture: Developer Velocity is about far more than just speed of delivery – it’s about the other factors that impact developers as well.</P> <P> </P> <P>For the past two years, Microsoft has been a strong proponent of Developer Velocity research, leading numerous projects and initiatives to understand what it takes for organizations to achieve it.</P> <P> </P> <P>In 2021, we took the next step in our journey by launching <A href="https://aka.ms/dvl" target="_blank" rel="noopener">Developer Velocity Lab</A> (DVL), a joint GitHub and Microsoft initiative which lives under Microsoft Research. DVL is led by Dr. Nicole Forsgren. Her industry-leading work in DevOps and software development metrics includes authoring the Shingo Publication Award-winning book Accelerate: The Science of Lean Software and DevOps.</P> <P> </P> <P>Today, we’re highlighting two pre-existing tools, and releasing one more, which will help you measure Developer Velocity more holistically in your own organization and make improvements to drive better business. Here are the three tools available to help teams and organizations improve their Developer Velocity:</P> <UL> <LI>The Developer Velocity Assessment, which organizations have been using to improve outcomes for almost two years.</LI> <LI>The SPACE framework, a flexible tool which can be used to help anyone think more deeply about measuring and improving development work and create their own metrics.</LI> <LI>The DevOps Workflow Generator, a new interactive tool that helps teams build their workflows so they can visualize and communicate their work, and later benchmark their performance.</LI> </UL> <P>Now, let’s explore how each tool can help you and your organization improve your Developer Velocity.</P> <P> </P> <H4><U>Measuring your organization’s Developer Velocity with the Assessment </U></H4> <P>One of our key goals has always been to provide you with tools to take action. In May 2020 we released the <A href="https://developervelocityassessment.com/" target="_blank" rel="noopener">Developer Velocity Assessment</A> to help organizations measure their current Developer Velocity. Since release, this tool has helped hundreds of companies of all sizes understand the impact of technology, working practices, and organization enablement on their development teams’ performance. This assessment helps organizations benchmark their Developer Velocity Index (DVI) scores relative to industry peers, as well as understand actionable guidance for how to drive better business outcomes for their organization. Understanding your current level of Developer Velocity enables you to begin making improvements. </P> <P> </P> <H4><U>Using </U><U>the SPACE framework to enhance Developer Velocity </U></H4> <P>Another tool to help you understand Developer Velocity in your own organization is the SPACE framework. True to DVL’s research roots, this framework is derived from DVL’s first publication, <A href="https://www.microsoft.com/research/publication/the-space-of-developer-productivity-theres-more-to-it-than-you-think/?cid=techcommblog/" target="_blank" rel="noopener"><EM>The SPACE of Developer Productivity: There's more to it than you think</EM></A>. The SPACE framework is an easily adaptable and flexible tool that helps organizations measure developer productivity in a more holistic manner.</P> <P> </P> <P>The five dimensions of the SPACE framework are: <STRONG>S:</STRONG> satisfaction and well-being, <STRONG>P:</STRONG> performance, <STRONG>A:</STRONG> activity, <STRONG>C:</STRONG> communication and collaboration, and <STRONG>E:</STRONG> efficiency and flow. We suggest measuring at least three of the five dimensions at any given time. Traditionally, developer activity was the main metric that organizations measured, without focusing as much on other key areas such as efficiency and flow.</P> <P> </P> <P>To see an example of the SPACE framework in action, check out how GitHub implemented it during <A href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener">The Good Day Project</A>. This two-week study invited GitHub developers to take a daily survey and share their engineering data to help identify which patterns and practices could help them have “good days.” The study yielded many interesting results, but some of the key findings were that interruptions are more disruptive than we think, too many meetings can get in the way of progress, and a short reflection period at the end of each day makes a big difference in how people feel in terms of meeting their goals.</P> <P> </P> <P>By implementing the SPACE framework, you can more holistically measure and understand Developer Velocity in your organization.</P> <P> </P> <H4><U>Visualize and improve your work with the DevOps Workflow Generator</U> <FONT color="#FF0000"><SUP>NEW!</SUP></FONT></H4> <P>Today, DVL is excited to announce the release of a new tool designed to help organizations measure and improve Developer Velocity: the <A href="https://aka.ms/devopsworkflow" target="_blank" rel="noopener">DevOps Workflow Generator</A>. By granting users an end-to-end view of their entire DevOps toolchain in one place, they can begin to surface, track, and understand the tooling and automation that supports their workflows. Without a clear – and shared – understanding of the workflow, improving it is not possible.</P> <P> </P> <BLOCKQUOTE> <P>At Microsoft Research, we’re very focused on helping developers around the world be happy and successful. As we better understand developers’ environments and what contributes to good days and good outcomes, we can design better tools and solutions to support them. We’re confident that the DevOps Workflow Generator will help users better understand the interplay between their various tools and enable them to have more productive conversations about optimizing their environments for improved efficiency and flow.</P> <P> </P> <P>- Dr. Nicole Forsgren, Partner Research Manager, Microsoft Research<SPAN style="font-family: inherit;"> </SPAN></P> </BLOCKQUOTE> <P><SPAN style="font-family: inherit;">Additionally, the anonymous, aggregated data collected from the DevOps Workflow Generator will help users understand up-to-date DevOps trends in their industry and/or geography. Once the tool has collected enough responses, DVL will release reports summarizing and revealing any prevalent DevOps trends</SPAN><A style="font-family: inherit; background-color: #ffffff;" href="#_ftn2" target="_blank" rel="noopener" name="_ftnref2"><SUP>[2]</SUP></A><SPAN style="font-family: inherit;">.</SPAN></P> <H4> </H4> <H4><U>Start your Developer Velocity journey today</U></H4> <P>As almost every company is now a software company, developers are at the core of the next wave of digital transformation. Our overarching goal is to help developers, teams, and organizations in a holistic way. This includes understanding the impact of technology, working practices and organizational enablement with the <A href="https://developervelocityassessment.com/" target="_blank" rel="noopener">Developer Velocity Assessment</A>; improving Developer Velocity across multiple dimensions of the <A href="https://aka.ms/SPACEpaper" target="_blank" rel="noopener">SPACE framework</A>; and even optimizing an organization’s DevOps toolchain through the use of the new <A href="https://aka.ms/devopsworkflow" target="_blank" rel="noopener">DevOps Workflow Generator</A>.</P> <P> </P> <P>We are delighted to see teams taking the next step on their Developer Velocity journeys towards unlocking better overall performance for their teams. To learn more about how some of our customers have improved business outcomes by tapping into the full power and creativity of their developers, read this report on <A href="https://azure.microsoft.com/en-us/resources/developer-velocity-lessons-from-digital-leaders/" target="_blank" rel="noopener">Developer Velocity: Lessons from Digital Leaders</A>. For an example of how GitHub implemented the SPACE framework and found real-world ways to improve developers’ days, check out GitHub’s <A href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener">Good Day report</A>.</P> <P> </P> <P>We believe the tools that Microsoft has released will help you and your organization improve your overall developer productivity and take the next step on your Developer Velocity journey.</P> <P> </P> <P>-----------------</P> <P><A href="#_ftnref1" target="_blank" rel="noopener" name="_ftn1"><SPAN><SUP>[1]</SUP></SPAN></A> <A href="https://azure.microsoft.com/resources/developer-velocity-lessons-from-digital-leaders/" target="_blank" rel="noopener">Developer Velocity: Lessons from Digital Leaders on Accelerating Business Performance through Software Excellence</A><SPAN>. Microsoft</SPAN>. March, 2021.</P> <P><A href="#_ftnref2" target="_blank" rel="noopener" name="_ftn2"><SPAN><SUP>[2]</SUP></SPAN></A> Final reports contingent on sufficient user participation.</P> Fri, 03 Dec 2021 18:50:38 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/putting-tools-in-your-hands-to-improve-developer-productivity/ba-p/2902225 AlisonYu 2021-12-03T18:50:38Z Build secure apps on hardened dev environments with secure DevOps workflows https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-secure-apps-on-hardened-dev-environments-with-secure/ba-p/2893917 <P>The threat landscape has evolved over the past few years. Hackers are “shifting-left,” compromising upstream dependencies and engineering systems. These advanced attacks can impact entire development environments and software supply chains. One recent example occurred at a software vendor where an attacker targeted their developer workflow and software supply chain. After gaining access, the attacker uploaded a new image into thousands of builds that scanned their software supply chain—extracting secrets/credentials and widening the breach. This attack exemplifies how it’s no longer enough to just integrate security within the DevOps workflow, now you must harden and secure the workflow itself!</P> <P> </P> <P>So, how do you secure your upstream development environments?</P> <P> </P> <P>Kick it off by securing all developer machines and ensuring that your developers interact with non-trusted code in a secure manner. These steps help prevent malicious code from executing on developer machines and prevent hackers from using developer machines to act as a "jump-box" to further systems.</P> <P> </P> <P><A href="https://github.blog/2021-08-11-githubs-engineering-team-moved-codespaces/" target="_blank" rel="noopener">GitHub Codespaces</A> is a solution where your developers can securely interact with non-trusted code inside a sandbox environment. This cloud-powered development environment is available anywhere, on any device. Going further, it’s never been simpler to manage user permissions, store encrypted secrets in the right places, and implement GPG verification, so that commits are verified and made only by trusted users. And it’s fast too. Your team can go from zero to a functioning development environment in less than 10 seconds! Developers can spin off new Codespaces for parallel workstreams with no overhead. The solution is flexible and efficient while also providing security, compliance, and productivity enhancements for your organization.</P> <P> </P> <P>Along with developer machines, you’ll also need to secure your DevOps workflows. GitHub Actions helps your development teams easily create secure and automated workflows to build, test, package, release, and deploy apps to Azure or any other cloud. Azure provides a rich set of <A href="https://docs.microsoft.com/en-us/azure/developer/github/" target="_blank" rel="noopener">GitHub Actions integrations</A> that help you adopt an “everything as-code” DevOps model. In this model, compliance and security policies, build and release pipelines, etc. are written “as code,” enabling continuous improvement, better re-use, and greater transparency.</P> <P> </P> <P>It’s now common for hackers to target development environments, use discovered credentials to tamper with source code, and inject malicious code. Compounding this risk is the fact that your development teams must store their Azure service principal secrets in GitHub, which is both redundant and extremely risky. At <A href="https://myignite.microsoft.com/sessions/0c2b0490-1e47-4144-a569-20632ea53661?source=sessions" target="_blank" rel="noopener">Microsoft Ignite 2021</A><SPAN>,</SPAN> I’m excited to announce the preview of capabilities that enable developers to secure their deployments to Azure without requiring them to store long-term credentials in GitHub!</P> <P> </P> <P><STRONG>Remove credentials from developer environments with new Azure and GitHub integrations</STRONG></P> <P> </P> <P>Removing long-lived, Azure credentials from the development environment is a key strategy to reduce vulnerabilities that hackers can easily exploit. <SPAN>You can now deploy from your GitHub repo to Azure without creating, storing, or managing credentials for Azure AD applications. This uses the <A href="https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation" target="_blank" rel="noopener">Azure AD workload identity federation</A> capability which is now in public preview.</SPAN> The new capabilities alleviate the need for managing Azure service principal secrets and other long-lived cloud credentials in the GitHub secret store. With this integration, you can manage all cloud resources access securely in Azure. These capabilities also minimize the chances of service downtime due to expired credentials in GitHub.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samit_jhaveri_0-1635396060660.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/320727i67F17330D8D5E8B0/image-size/medium?v=v2&px=400" role="button" title="samit_jhaveri_0-1635396060660.png" alt="samit_jhaveri_0-1635396060660.png" /></span></P> <P> </P> <P><STRONG>Setting up OpenID Connect (OIDC) integration with Azure AD and GitHub Actions</STRONG></P> <P> </P> <P>To set up a secured GitHub Actions workflow using OpenID Connect integration with Azure AD you'll need:</P> <UL> <LI>An <A href="https://docs.microsoft.com/en-us/azure/active-directory/develop/" target="_blank" rel="noopener">Active Directory application</A> with a service principal that has contributor access to your subscription</LI> <LI>An Active Directory application configured with a federated credential to trust tokens issued by GitHub Actions to your GitHub repository. You can configure this in the Azure portal or with Microsoft Graph REST APIs</LI> <LI>A GitHub Actions workflow that requests GitHub issue tokens to the workflow and uses the azure/login@v1.4.0 action</LI> </UL> <P> </P> <P>To learn more about how to set up the integration, check out the <A href="https://aka.ms/OIDCAzureConnect" target="_blank" rel="noopener">documentation</A>.</P> <P> </P> <P><STRONG>Start building secure apps with GitHub and Azure</STRONG></P> <P> </P> <P>With deep integrations between GitHub and Azure, the <A href="https://azure.microsoft.com/en-us/solutions/devsecops/#overview" target="_blank" rel="noopener">Microsoft DevSecOps solution</A> is the complete software development solution that empowers your development teams to securely deliver cloud-native apps at DevOps speed! This solution enables you to write more secure code, respond quickly to vulnerabilities in your software supply chain, adopt best practices to harden your development environments, and foster collaboration between your developers and security teams.</P> <P> </P> <P>For more information on integrating security into your development lifecycle and hardening your DevOps workflows, check out our <A href="https://azure.microsoft.com/en-us/resources/6-tips-to-integrate-security-into-your-devops-practices/" target="_blank" rel="noopener">e-book</A>.</P> <P> </P> Tue, 02 Nov 2021 17:01:14 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-secure-apps-on-hardened-dev-environments-with-secure/ba-p/2893917 samit_jhaveri 2021-11-02T17:01:14Z Plan your Microsoft Azure experience at Microsoft Ignite 2021 https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite-2021/ba-p/2871583 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="bff948bd-7c60-41e2-ba58-6d3195441884.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319128iF4AFDC943B3C5026/image-size/large?v=v2&px=999" role="button" title="bff948bd-7c60-41e2-ba58-6d3195441884.png" alt="bff948bd-7c60-41e2-ba58-6d3195441884.png" /></span></P> <P> </P> <P><SPAN style="font-family: inherit;">We thought you might be interested to learn how you can plan your Microsoft and Azure experience at the upcoming Microsoft Ignite, our free digital event from November 2</SPAN><SUP style="font-family: inherit;">nd</SUP><SPAN style="font-family: inherit;"> – 4</SPAN><SUP style="font-family: inherit;">th</SUP><SPAN style="font-family: inherit;">, 2021.</SPAN></P> <P> </P> <P>During the event, you’ll discover the latest infrastructure, data and AI, application development, and security technologies that help you innovate anywhere from multicloud to edge, with Microsoft and Azure. You’ll also have a chance to speak with Microsoft experts and have the opportunity to continue your technical learning journey.</P> <P> </P> <P><A href="https://myignite.microsoft.com/home" target="_blank" rel="noopener">Register</A> to gain full access to all Microsoft Ignite has to offer – it’s easy and at no-cost to you.</P> <P> </P> <P><STRONG>Innovate Anywhere from Multicloud to Edge</STRONG></P> <P>We are excited to share how we’re delivering next-generation apps that run securely anywhere, are built with limitless data capabilities, and harness the power of AI. Join Scott Guthrie who will kick off with <STRONG><EM>Innovate Anywhere From Multicloud to Edge</EM></STRONG> along with these curated sessions you won’t want to miss:</P> <P> </P> <UL> <LI><STRONG><A href="https://myignite.microsoft.com/sessions/bd48b752-53b7-4e0e-b15c-4245a0e5ca50?source=sessions" target="_blank" rel="noopener">CTS03: Innovate Anywhere From Multicloud to Edge</A></STRONG></LI> <LI><A href="https://myignite.microsoft.com/sessions/27b4aeb9-ba89-403c-9cdf-4c629eb538c1?source=sessions" target="_blank" rel="noopener">BRK210: Secure, develop, and innovate in hybrid and multicloud with Microsoft Azure</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/56830052-a938-459e-8b5c-950ac6ac945d?source=sessions" target="_blank" rel="noopener">BRK211: Accelerate your cloud migration and modernization journey with Azure</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/0c2b0490-1e47-4144-a569-20632ea53661?source=sessions" target="_blank" rel="noopener">BRK212: Build secure apps with collaborative DevSecOps practices</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/64ad9ab4-31aa-410a-b5a0-792c9318eb90?source=sessions" target="_blank" rel="noopener">BRK213: Innovate with Cloud Native and Open Source on Azure</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/225eccb7-68f8-4d7b-9f67-4828b20b0a0f?source=sessions" target="_blank" rel="noopener">BRK214: Accelerate innovation with low-code applications using Power Platform</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/cb857345-7f4b-459f-b8bf-ab481a02be72?source=sessions" target="_blank" rel="noopener">BRK215: Accelerate time to insight with Azure Synapse</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/e3f5c4bc-5cc8-4e09-89a7-033da3a16433?source=sessions" target="_blank" rel="noopener">BRK216: Introducing new innovations in Azure AI</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/88fb4748-e5a9-4fc2-8ddb-68366473a8bd?source=sessions" target="_blank" rel="noopener">BRK225: Transform your business with new innovations from edge to cloud across SQL Server and Azure SQL</A></LI> </UL> <P><STRONG>Follow #MSIgnite</STRONG></P> <P>Explore the latest event news, trending topics, and share your point of view in real time with your community. Join us on Twitter and LinkedIn by using #MSIgnite.</P> <P><A href="https://twitter.com/MS_Ignite" target="_blank" rel="noopener">Join the conversation ></A></P> <P> </P> <P><STRONG>Connection Zone</STRONG></P> <P>Only at #MSIgnite can you discover live, interactive content from Microsoft experts and your worldwide community.</P> <P><A href="https://myignite.microsoft.com/community-connect" target="_blank" rel="noopener">Get connected ></A></P> <P> </P> <P><STRONG>Learning Zone</STRONG></P> <P>Are you ready to accelerate your skills? Check out the Learning Zone at #MSIgnite and gain access to expert-guided sessions, become certified and take the Cloud Skills Challenge!</P> <P><A href="https://myignite.microsoft.com/learning-zone" target="_blank" rel="noopener">Learning Zone ></A></P> <P> </P> <P><STRONG>1:1 Consultation</STRONG></P> <P>Connect with a Microsoft engineer for questions related to architecting, implementing, or migrating a new solution by scheduling a 45-minute consultation.</P> <P><A href="https://myignite.microsoft.com/app-consult" target="_blank" rel="noopener">Schedule today ></A></P> <P> </P> <P><STRONG>Continue your learning journey</STRONG></P> <P>Discover more in-depth learning paths, training options, communities, and certification details across all Microsoft cloud solutions from one place.</P> <P><A href="https://aka.ms/learnatignite" target="_blank" rel="noopener">Start exploring ></A></P> Fri, 03 Dec 2021 18:52:02 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite-2021/ba-p/2871583 Jenn Jinhong 2021-12-03T18:52:02Z How YOU create a script package for PowerShell gallery https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-create-a-script-package-for-powershell-gallery/ba-p/2870551 <HEADER id="main-title" class="crayons-article__header"> <DIV class="crayons-article__header__meta"> <DIV class="spec__tags"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-10-21 at 18.24.49.png" style="width: 787px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319019i7E14ACC2534DB0E5/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-10-21 at 18.24.49.png" alt="Screenshot 2021-10-21 at 18.24.49.png" /></span></DIV> </DIV> </HEADER> <DIV class="crayons-article__main"> <DIV id="article-body" class="crayons-article__body text-styles spec__body" data-article-id="871543"> <BLOCKQUOTE> <P>TLDR; this article covers how to build a package for the PowerShell gallery. This is a great way to share your scripts and modules with others. You want to help the community, right? Of course, you do :)</img></P> </BLOCKQUOTE> <P>Here's the steps we are about to take:</P> <UL> <LI><STRONG>Author script</STRONG>. First you need to create a script. In this case we are creating a script, but you can also create and upload a module to PowerShell gallery.</LI> <LI><STRONG>Document it</STRONG>. When you document your script, you do so, so<SPAN> </SPAN><CODE>Get-Help</CODE><SPAN> </SPAN>will work with it, this is highly recommended to do.</LI> <LI><STRONG>Prepare the package</STRONG>. To be able to upload your script, it needs a specific set of metadata, there are commands that will help you do that.</LI> <LI><STRONG>Sign up for PowerShell gallery</STRONG>. It's free to sign up for the gallery, but what you do need from it is an API key that will help you publish your package.</LI> <LI><STRONG>Publish</STRONG>. Using a command, you can push your package to the gallery. At this point you have bragging rights, and can show your friends :)</img></LI> <LI><STRONG>Save or install package</STRONG>. There are two different approaches you can use to consume a package, pick one.</LI> <LI>that's it :)</img></LI> </UL> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#author-script" target="_blank" rel="noopener" name="author-script"></A>Author script</H2> <P>To author a script, you need a file ending in<SPAN> </SPAN><CODE>.ps1</CODE>. Then you can use the PowerShell scripting language to add your commands and/or parameters.</P> <H2> </H2> <H2>Support Get-Help</H2> <P> To support the Get-Help command, you want to add some documentation that supports. Add for example the above meta information right on top of a function:</P> <LI-CODE lang="powershell"><# .SYNOPSIS Retrieves a planet .DESCRIPTION A command that retrieves a planet by id .PARAMETER Id Specifies the record you want back .INPUTS Id .OUTPUTS Object. .EXAMPLE PS> Get-Planet 1 #> Function Get-Planet { implementation... }</LI-CODE> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#document-it" target="_blank" rel="noopener" name="document-it"></A>Document it</H2> <P>Before you can upload your package, it needs some metadata. Without this metadata, your package will be rejected if you try to upload it. The metadata you need are information on things like version, author, company and a description. What you do is to feed that information into a command and out comes metadata + a unique GUID. At this point you need to add this metadata to the top of your script file.</P> <P>First, let's generate the metadata, or script info, as it's also referred to:</P> <OL> <LI>Generate script file info:</LI> </OL> <LI-CODE lang="powershell">$Parms = @{ Path = "./new.ps1" Version = "1.0" Author = "<email>" CompanyName = "<company>" Description = "Description" } New-ScriptFileInfo @Parms -PassThru</LI-CODE> <DIV class="highlight js-code-highlight"><CODE>this creates a file <EM>new.ps1</EM>.</CODE></DIV> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>You will also get meta information within the above file that looks something like so:</P> <LI-CODE lang="powershell"> <#PSScriptInfo .VERSION 1.0 .GUID <a unique GUID> .AUTHOR <email> .COMPANYNAME <company> .COPYRIGHT .TAGS the tags you want, comma separated .LICENSEURI https://mit-license.org .PROJECTURI link to for example github, if that's where you store the code .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .PRIVATEDATA #> <# .DESCRIPTION Description #> # Here's the rest of your script</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> </DIV> </DIV> <P>Next, you want to perhaps fill in more info in the above meta information. You want to make sure you have a nice project description and tags for better visibility in the gallery. Next, you can verify that the script file and its script info validates.</P> <OL> <LI>Ensure all is good with script file info:</LI> </OL> <LI-CODE lang="powershell">Test-ScriptFileInfo -Path ./swapi.ps1</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>If everything is good, you will get a response similar to:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Version Name Author Description ------- ---- ------ ----------- 1.1 swapi author Description </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Great, you are ready for the next step, which is to publish your script to the gallery.</P> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#sign-up-for-the-powershell-gallery" target="_blank" rel="noopener" name="sign-up-for-the-powershell-gallery"></A>Sign up for the PowerShell Gallery</H2> <OL> <LI>Navigate to<SPAN> </SPAN><A href="https://www.powershellgallery.com/" target="_blank" rel="noopener">https://www.powershellgallery.com/</A><SPAN> </SPAN>and create a user.</LI> <LI>Select API keys menu option in top-right part of the page.</LI> <LI>Select "Create" and expand that section. Here you are faced with following fields:</LI> </OL> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_0-1634837022312.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319017i614C473B9811476D/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_0-1634837022312.png" alt="Chris_Noring_0-1634837022312.png" /></span> <OL> <LI>Fill in the following values:</LI> </OL> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_1-1634837022308.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319015i249CB82F836453E5/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_1-1634837022308.png" alt="Chris_Noring_1-1634837022308.png" /></span> <P> </P> <P>and select "Create". Now copy this API key, you will use it next.</P> <OL> <LI> <P>Publish your script using<SPAN> </SPAN><CODE>Publish-Script</CODE>:</P> </LI> </OL> <LI-CODE lang="powershell">Publish-Script -Path ./swapi.ps1 -NuGetApiKey <api key></LI-CODE> <P> </P> <P>That should take a few seconds, once done, you will be able to find your script.</P> <OL> <LI> <P>In PowerShell gallery, select "Manage Packages", expand "Published Packages", there's your package, give yourself a high-five, well done!! :)</img></P> </LI> </OL> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#consume-your-package" target="_blank" rel="noopener" name="consume-your-package"></A>Consume your package</H2> <P>To ensure everything work as intended, we will try to consume our package by downloading it from the PowerShell gallery and use it on our machine. We have two options on how to do that:</P> <UL> <LI><STRONG>Install the script</STRONG>. This will place the script in a specific downloads folder. We will still need to dot source it to use it.</LI> <LI><STRONG>Save the script</STRONG>. This will allow is to save the script to a destination on our machine that we decide, we still need to dot source to use it.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#a-install-script" target="_blank" rel="noopener" name="a-install-script"></A>a) Install script</H2> <OL> <LI> <P>Install from the PowerShell gallery:</P> </LI> </OL> <P><CODE></CODE></P> <LI-CODE lang="powershell">Install-Script -Name swapi -Force</LI-CODE> <P><CODE></CODE></P> <P><CODE> </CODE></P> <P>At this point, your script was installed on your machine, in a specific script folder. Next, you need to find that script folder, so you can dot source and use the content of the script.</P> <OL> <LI> <P>Verify install with<SPAN> </SPAN><CODE>Get-InstallledScript</CODE></P> </LI> </OL> <LI-CODE lang="powershell"> Get-InstalledScript</LI-CODE> <P class="lia-indent-padding-left-30px"><CODE></CODE></P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_2-1634837022309.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319016i524BE983E7B12BAC/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_2-1634837022309.png" alt="Chris_Noring_2-1634837022309.png" /></span> <P> </P> <P>Great, you were able to get some information back on that the package (your script), was downloaded from PowerShell Gallery. Next, you need to find the install path of the script, to be able to use it.</P> <OL> <LI>To use the script, we first need to localize it with<SPAN> </SPAN><CODE>Get-InstalledScript</CODE>:</LI> </OL> <LI-CODE lang="powershell">(Get-InstalledScript -Name "swapi").InstalledLocation</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>it says something like so:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> /Users/<user>/.local/share/powershell/Scripts </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>dot source from there, use the response in the last step and<SPAN> </SPAN><EM>dot source</EM><SPAN> </SPAN>it like so:</LI> </OL> <LI-CODE lang="powershell">. /Users/<user./.local/share/powershell/Scripts/swapi.ps1</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Note the usage of "." and then the path as the second argument, that's what's meant by dot sourcing.</P> <P>At this point, your script is on your machine, the content of it is available to use.</P> <OL> <LI>To test it out, try running<SPAN> </SPAN><CODE>Get-Planet</CODE>, you elected to download the swapi</LI> </OL> <LI-CODE lang="powershell">Get-Planet 2</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>This should give a JSON response.</P> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#b-save-script-and-then-dot-source" target="_blank" rel="noopener" name="b-save-script-and-then-dot-source"></A>b) Save script and then dot source</H2> <P>In this second approach, instead of installing the script, you would save it to disk at a location you specify. The big difference is that it doesn't end up in pre-determined install location, but rather in a place you choose.</P> <LI-CODE lang="powershell">Save-Script -Name swapi -Repository PSGallery –Path ./package-swapi -Force</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>creates a<SPAN> </SPAN><EM>package-swapi</EM><SPAN> </SPAN>subdirectory and places the script in there. So your file system looks like so:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> /package-swapi swapi.ps1 </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>dot source with:</LI> </OL> <DIV class="highlight js-code-highlight"> <PRE class="highlight powershell"><CODE> <SPAN class="n">cd</SPAN> <SPAN class="nx">package-swapi</SPAN> <SPAN class="o">.</SPAN> <SPAN class="n">swapi.ps1</SPAN> </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>To test it out, try running<SPAN> </SPAN><CODE>Get-Planet</CODE>, you elected to download the swapi package.</LI> </OL> <DIV class="highlight js-code-highlight"> <PRE class="highlight powershell"><CODE> <SPAN class="n">Get-Planet</SPAN> <SPAN class="nx">2</SPAN> </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>This should give a JSON response.</P> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#summary" target="_blank" rel="noopener" name="summary"></A>Summary</H2> <P>Congratulations, you've managed to create a package for PowerShell gallery, upload it to the gallery and managed to download and use said package.</P> <P>You've come a long way, now build your own packages, share them with the community and let me know.</P> <P>Thanks for reading :)</img></P> </DIV> </DIV> Thu, 21 Oct 2021 17:53:22 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-create-a-script-package-for-powershell-gallery/ba-p/2870551 Chris_Noring 2021-10-21T17:53:22Z Test your PowerShell code with Pester https://techcommunity.microsoft.com/t5/azure-developer-community-blog/test-your-powershell-code-with-pester/ba-p/2835759 <BLOCKQUOTE> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-10-11 at 22.28.42.png" style="width: 619px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316615i9632507F0A19192E/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-10-11 at 22.28.42.png" alt="Screenshot 2021-10-11 at 22.28.42.png" /></span></P> <P>TLDR; this article covers the testing framework Pester that you use to test your PowerShell scripts.</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#why-test" target="_blank" rel="noopener" name="why-test"></A>Why test</H2> <P>The reason you want to have tests are many:</P> <UL> <LI><STRONG>Correctness</STRONG>. Ensure your code works as as intended for certain scenarios.</LI> <LI><STRONG>Confidence</STRONG>. When you have a lot of tests covering your code it creates a level of confidence. With this confidence you start daring to change this, if you for example would need to refactor code and ensure it still works after those changes.</LI> <LI><STRONG>Architecture</STRONG>. Another reason for having tests is that it drives architecture. If you create tests around what you do, you ensure you build your code in a way that makes it testable. That,<SPAN> </SPAN><EM>drives the architecture</EM>.</LI> </UL> <P>There are many other reasons for wanting to have tests but the three above are quite compelling.</P> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#what-is-pester" target="_blank" rel="noopener" name="what-is-pester"></A>What is Pester</H2> <P>Pester is a test framework meant for PowerShell and is a module you can install. It has several features:</P> <UL> <LI><STRONG>Assertions</STRONG>. Pester comes with diverse ways of asserting conditions that will determine if your tests should fail or not.</LI> <LI><STRONG>Able to run tests</STRONG>. You can run tests with Pester, both a single test with a single piece of input as well as testing many different inputs at once.</LI> <LI><STRONG>Can group your tests in test suites</STRONG>. When you start having quite a few tests, you want a way to group those tests into larger logical groups, that's what test suites are.</LI> <LI><STRONG>Ability to mock calls</STRONG>. In you tests you might have calls to commands that carry out side-effects, like accessing a data store or creating a file for example. When you want your tests to focus on the behavior on the tests, mocking is a good idea.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#install" target="_blank" rel="noopener" name="install"></A>Install</H2> <P>To install Pester, you run the below command.</P> <P> </P> <LI-CODE lang="powershell">Install-Module -Name Pester -Force</LI-CODE> <P> </P> <P>Once it's installed, you can start authoring your tests.</P> <P>From install page:</P> <BLOCKQUOTE> <P>Pester runs on Windows, Linux, MacOS and anywhere else thanks to PowerShell. It is compatible with Windows PowerShell 3, 4, 5, 6 and 7.<BR />Pester 3 comes pre-installed with Windows 10</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#our-first-test" target="_blank" rel="noopener" name="our-first-test"></A>Our first test</H2> <P>For our first test, we will learn how to write a test as well as running it.</P> <OL> <LI>To create our first test, create a file<SPAN> </SPAN><EM>A-Test.ps1</EM></LI> <LI>Add the following code:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Describe "A suite" { It "my first test" { $Value = "Value" $Value | Should -Be "Value" } }</LI-CODE> <P> </P> <P> </P> <P>The test above, have a<SPAN> </SPAN><CODE>Describe</CODE><SPAN> </SPAN>construct which is the declaration of a suite, and a string argument, giving the suite a name. Within the suite there's a test definition<SPAN> </SPAN><CODE>It</CODE>, which also has a string argument that represents the name of the test. Within the test, there's test itself where the code is set up:</P> <P> </P> <LI-CODE lang="powershell">$Value = "Value"</LI-CODE> <P> </P> <P>and then it's asserted upon</P> <P> </P> <LI-CODE lang="powershell"> $Value | Should -Be "Value"</LI-CODE> <P> </P> <P>Note the use of the<SPAN> </SPAN><CODE>Should -Be</CODE>, which determines equality between<SPAN> </SPAN><CODE>$Value</CODE><SPAN> </SPAN>and "Value".</P> <OL> <LI>To run the test, call<SPAN> </SPAN><CODE>Invoke-Pester</CODE><SPAN> </SPAN>(./ for the path in Linux ans macOS and .\ for Windows):</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Invoke-Pester ./A-Test.ps1 </LI-CODE></DIV> </DIV> </DIV> <P>The outcome of running the test is:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Starting discovery in 1 files. Discovery found 1 tests in 6ms. Running tests. [+] /<path>/A-Test.ps1 42ms (11ms|26ms) Tests completed in 44ms Tests Passed: 1, Failed: 0, Skipped: 0 NotRun: 0 </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#a-more-real-looking-test" target="_blank" rel="noopener" name="a-more-real-looking-test"></A>A more real looking test</H2> <P>The first test was great in that it let us understand the mechanics of testing and concepts like a suite, a test, and an assertion like<SPAN> </SPAN><CODE>Should -Be</CODE>. A more real looking test would test code in a script file that's not in our test file. Here's the steps we will take next:</P> <UL> <LI>Create a script file with our production code.</LI> <LI><EM>Dot source</EM><SPAN> </SPAN>said script file.</LI> <LI>Create a test and run it.</LI> </UL> <H3> </H3> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#create-production-code" target="_blank" rel="noopener" name="create-production-code"></A>Create production code</H3> <P>You will have code that you want to test but let's create this script file for the sake of demonstration.</P> <OL> <LI>Create a file<SPAN> </SPAN><EM>Get-Tomato.ps1</EM></LI> <LI>Add the following code:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Function Get-Tomato() { new-object psobject -property @{ Name = "Tomato" } }</LI-CODE></DIV> </DIV> </DIV> <P>This code will create a custom object for each time the<SPAN> </SPAN><CODE>Get-Tomato()</CODE><SPAN> </SPAN>function is invoked.</P> <OL> <LI>Let's<SPAN> </SPAN><EM>dot source</EM><SPAN> </SPAN>it next so are session knows about it:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> . ./Get-Tomato.ps1</LI-CODE> <P> </P> <OL> <LI>Verify that your function has been picked up by running:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Get-Tomato</LI-CODE> <P> </P> <P>you should see the following in the console:</P> <P> </P> <LI-CODE lang="bash">Name ---- Tomato</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#create-the-test" target="_blank" rel="noopener" name="create-the-test"></A>Create the test</H3> <P>Now that we have our production code, let's author the test next.</P> <OL> <LI>Create a file<SPAN> </SPAN><EM>Get-Tomato.Tests.ps1</EM><SPAN> </SPAN>and give it the following code</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Describe "Tomatoes" { It "Get Tomato" { $tomato = Get-Tomato $tomato.Name | Should -Be "Tomato" } }</LI-CODE> <P> </P> <OL> <LI>Run the test with<SPAN> </SPAN><CODE>Invoke-Pester</CODE>:</LI> </OL> <P> </P> <LI-CODE lang="powershell">Invoke-Pester ./Get-Tomato.Tests.ps1</LI-CODE> <P> </P> <P>you should see the following output:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Invoke-Pester ./Get-Tomato.Tests.ps1 Starting discovery in 1 files. Discovery found 1 tests in 6ms. Running tests. [+] /<path>/Get-Tomato.Tests.ps1 66ms (9ms|52ms) Tests completed in 68ms Tests Passed: 1, Failed: 0, Skipped: 0 NotRun: 0</CODE></PRE> </DIV> <P>Great, you ran a test on a more real looking code.</P> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#working-with-side-effects" target="_blank" rel="noopener" name="working-with-side-effects"></A>Working with side effects</H2> <P>You will have code that you write that eventually performs side effects, like accessing a network resource or create a file. Let's look at such a case and how Pester handles it. The short answer is that you can use mocks, a construct that's executed instead of the actual command. All you need to do is to focus that the<SPAN> </SPAN><EM>right behavior</EM><SPAN> </SPAN>happens.</P> <H3> </H3> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#update-production-code" target="_blank" rel="noopener" name="update-production-code"></A>Update production code</H3> <P>So, in this case, imagine that our production code now will have more function<SPAN> </SPAN><CODE>Save-Tomato</CODE><SPAN> </SPAN>that saves an object to a file.</P> <OL> <LI>Update the <EM>Get-Tomato.ps1 </EM>file with this code:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Function Save-Tomato() { Param( [string] $Name ) New-Item -ItemType File -Path ./Tomato.txt -Value $Name -Force }</LI-CODE> <P> </P> <OL> <LI><EM>Dot source</EM><SPAN> </SPAN>the code to ensure it's being picked up:</LI> </OL> <P> </P> <LI-CODE lang="powershell">. /Get-Tomato.ps1</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#create-a-test" target="_blank" rel="noopener" name="create-a-test"></A>Create a test</H3> <P>Ok, so you have added<SPAN> </SPAN><CODE>Save-Tomato()</CODE><SPAN> </SPAN>to your script file. Now for a test. Your code is calling<SPAN> </SPAN><CODE>New-Item</CODE>, which creates a new file. As part of testing, you don't want it to create a file each time the test is being run. More likely, you just want to see the test does what it's supposed to, i.e. calling the correct command/s. So, to solve this issue, we can mock, replace the current implementation of<SPAN> </SPAN><CODE>New-Item</CODE><SPAN> </SPAN>with our own.</P> <UL> <LI> <P><STRONG>To mock</STRONG>, we first need to replace the actual implementation like so:</P> </LI> </UL> <P> </P> <LI-CODE lang="powershell">Mock -CommandName New-Item -MockWith {}</LI-CODE> <P> </P> <UL> <LI><STRONG>Call the command</STRONG>. At this point, you need to call the command like you would usually do. In your case, it means that you call<SPAN> </SPAN><CODE>Save-Tomato()</CODE>:</LI> </UL> <P> </P> <LI-CODE lang="powershell">Save-Tomato # this should call New-Item</LI-CODE> <P> </P> <UL> <LI><STRONG>Verify</STRONG>. The last part of the mocking process is to verify that you mock has been called</LI> </UL> <P class="lia-indent-padding-left-30px">The command<SPAN> </SPAN><CODE>Should -Invoke</CODE>, allows you to specify what command it should have called, like so:</P> <P> </P> <LI-CODE lang="powershell">Should -Invoke -CommandName New-Item -Times 1 -Exactly</LI-CODE> <P> </P> <P class="lia-indent-padding-left-30px">The above code verifies<SPAN> </SPAN><CODE>New-Item</CODE><SPAN> </SPAN>is called exactly one time.</P> <UL> <LI>Let's put it all together as a test:</LI> </UL> <P> </P> <LI-CODE lang="powershell">It "Save tomato" { Mock -CommandName New-Item -MockWith {} Save-Tomato "my tomato" Should -Invoke -CommandName New-Item -Times 1 -Exactly }</LI-CODE> <P> </P> <OL> <LI>Remove<SPAN> </SPAN><EM>Tomato.txt</EM><SPAN> </SPAN>and then run the test with<SPAN> </SPAN><CODE>Invoke-Pester</CODE><SPAN> </SPAN>like so:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Invoke-Pester ./Get-Tomato.Tests.ps1</LI-CODE> <P> </P> <P>At this point your tests should run successfully like so:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Starting discovery in 1 files. Discovery found 2 tests in 8ms. Running tests. [+] /Users/chnoring/Documents/dev/projects/powershell-projects/articles/Get-Tomato.Tests.ps1 78ms (34ms|37ms) Tests completed in 80ms Tests Passed: 2, Failed: 0, Skipped: 0 NotRun: 0 </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Also, note how<SPAN> </SPAN><EM>Tomato.txt</EM><SPAN> </SPAN>isn't created, because you are mocking the call to<SPAN> </SPAN><CODE>New-Item</CODE>, success.</P> <P>Congrats, you've learned how to install test framework Pester, on top of that, you've learned to author your first tests and even learned how to mock the call to actual commands. To learn more, have a look at Pesters GitHub page:</P> <BLOCKQUOTE> <UL> <LI><A href="https://github.com/pester/Pester" target="_blank" rel="noopener">Pester GH page</A></LI> <LI><A title="Pester VS Code extension" href="https://marketplace.visualstudio.com/items?itemName=pspester.pester-test" target="_self">Check out the Pester extension for VS Code</A> , thanks JGrote</LI> </UL> </BLOCKQUOTE> Tue, 12 Oct 2021 17:59:12 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/test-your-powershell-code-with-pester/ba-p/2835759 Chris_Noring 2021-10-12T17:59:12Z Building a Web Report in PowerShell, use the -Force Luke https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-web-report-in-powershell-use-the-force-luke/ba-p/2824832 <BLOCKQUOTE> <P>TLDR; The idea of this article is to show how to build a web report. I will show the usage of several commands that you can connect that does all the heavy lifting for you</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#the-scenario-create-a-report-from-some-remote-data" target="_blank" rel="noopener" name="the-scenario-create-a-report-from-some-remote-data"></A>The scenario - create a report from some remote data</H2> <P>Ok, here you are, you are looking to read data from one place and present that as a web report. The data is remote, you need to fetch it somehow, you also probably need to think about how to convert the incoming data and lastly create that web report. If you are a developer, you probably think that oh ok, this is probably a few moving parts, 10-20 lines of code. But you've heard of PowerShell, it's supposed to be powerful, do a lot of heavy lifting, so why not give it a spin.</P> <H2> </H2> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#the-steps-we-will-take" target="_blank" rel="noopener" name="the-steps-we-will-take"></A>The steps we will take</H2> <P>To achieve our task, we need to plan it out. Carry it out sequentially, and who knows, maybe this is something we can reuse? So what steps:</P> <OL> <LI><STRONG>Fetch the data</STRONG>. Need to grab the data somehow</LI> <LI><STRONG>Convert</STRONG>. Lets assume this data comes in some type of format and we most likely need to convert it some other form.</LI> <LI><STRONG>Present</STRONG>. So we fetched the data, massaged it into a suitable format, now what? Now, we want to present it as a web report, HTML, CSS etc.</LI> </OL> <H2> </H2> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#getting-to-work" target="_blank" rel="noopener" name="getting-to-work"></A>Getting to work</H2> <P>We have a game plan. Now let's see if we can find the commands we need. A good starting point is the<SPAN> </SPAN><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/?view=powershell-7.1" target="_blank" rel="noopener">Microsoft.PowerShell.Utility section</A>. In this section, there are tons of commands that does a lot of heavy lifting for you.</P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#grabbing-the-data" target="_blank" rel="noopener" name="grabbing-the-data"></A>Grabbing the data</H3> <P>First things first, we need to grab some data remotely, so what's our options?</P> <UL> <LI><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.1" target="_blank" rel="noopener">Invoke-WebRequest</A><SPAN> </SPAN>this seems to let us call a URL, send a body, credentials etc, seems promising.</LI> <LI><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-7.1" target="_blank" rel="noopener">Invoke-RestMethod</A>. What about this one, how is it different? This sentence right here:</LI> </UL> <BLOCKQUOTE> <P>PowerShell formats the response based to the data type. For an RSS or ATOM feed, PowerShell returns the Item or Entry XML nodes. For JavaScript Object Notation (JSON) or XML, PowerShell converts, or deserializes, the content into [PSCustomObject] objects.</P> </BLOCKQUOTE> <P>It takes a JSON response and turns that into a PSCustomObject, nice. Well let's see with our other commands before we make a decision.</P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#presenting-the-data" target="_blank" rel="noopener" name="presenting-the-data"></A>Presenting the data</H3> <P>This is the last thing we need to do but we need to understand if there's a command that helps us with report creation and most importantly, what input it takes. I think we found it:</P> <UL> <LI><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-html?view=powershell-7.1" target="_blank" rel="noopener">ConvertTo-Html</A><SPAN> </SPAN>Converts .NET objects into HTML that can be displayed in a Web browser.</LI> </UL> <P>Yea, that reminds us of something,<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE>. Why? Cause<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE><SPAN> </SPAN>produces custom objects, i.e .NET objects.</P> <P>How do we save the report to a file though, so we can store that somewhere and let it be hosted by a web server? Oh, here's an example, pipe it to<SPAN> </SPAN><CODE>Out-File</CODE>, like so<SPAN> </SPAN><CODE>ConvertTo-Html | Out-File aliases.htm</CODE></P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#overview-of-the-solution" target="_blank" rel="noopener" name="overview-of-the-solution"></A>Overview of the solution</H3> <P>So we have a theory on how to do this:</P> <OL> <LI>Call<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE>.</LI> <LI>Followed by<SPAN> </SPAN><CODE>ConvertTo-Html</CODE>.</LI> <LI>Followed by<SPAN> </SPAN><CODE>Out-File</CODE>.</LI> </OL> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#build-the-solution" target="_blank" rel="noopener" name="build-the-solution"></A>Build the solution</H3> <P>Seems almost too easy. Ah well, let's give it whirl. First things first, lets choose a data source, SWAPI, the Star Wars API, cause use the<SPAN> </SPAN><CODE>-Force</CODE>, am I right? :)</img></P> <OL> <LI>Start<SPAN> </SPAN><CODE>pwsh</CODE><SPAN> </SPAN>in the console.</LI> <LI>Create a file<SPAN> </SPAN><EM>web-report.ps1</EM></LI> <LI>Add the following code:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Invoke-RestMethod -URI https://swapi.dev/api/people/1/ | ConvertTo-Html | Out-File report.htm</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Run<SPAN> </SPAN><CODE>./web-report.ps1</CODE><SPAN> </SPAN>(or<SPAN> </SPAN><CODE>.\web-report.ps1</CODE><SPAN> </SPAN>for Windows folks)</LI> </OL> <P>It created a<SPAN> </SPAN><EM>report.htm</EM><SPAN> </SPAN>file for us. Ok, let's have a look:</P> <P> </P> <LI-CODE lang="markup"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup> <tr><th>name</th><th>height</th><th>mass</th><th>hair_color</th><th>skin_color</th><th>eye_color</th><th>birth_year</th><th>gender</th><th>homeworld</th><th>films</th><th>species</th><th>vehicles</th><th>starships</th><th>created</th><th>edited</th><th>url</th></tr> <tr><td>Luke Skywalker</td><td>172</td><td>77</td><td>blond</td><td>fair</td><td>blue</td><td>19BBY</td><td>male</td><td>https://swapi.dev/api/planets/1/</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>09/12/2014 13:50:51</td><td>20/12/2014 21:17:56</td><td>https://swapi.dev/api/people/1/</td></tr> </table> </body></html></LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <OL> <LI>Show this file in a browser with<SPAN> </SPAN><CODE>Invoke_Item</CODE>:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Invoke-Item ./report.htm</LI-CODE></DIV> </DIV> </DIV> <P>This should start up a browser and you should see something like:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_0-1633648317946.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316080iADB1C70B0BDCD1B3/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_0-1633648317946.png" alt="Chris_Noring_0-1633648317946.png" /></span></P> <P> </P> <P>Ok, you could be done here, or we can make it more flexible. We don't like hardcoded values, right? RIGHT?</P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#making-it-flexible" target="_blank" rel="noopener" name="making-it-flexible"></A>Making it flexible</H3> <P>I thought so, now, let's add some parameters for, URL, and report name.</P> <OL> <LI>Add the following code to the top part of our script<SPAN> </SPAN><EM>web-report.ps1</EM>:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Param( [String] $URL = "https://swapi.dev/api/people/1/", [String] $Report = "report.htm" )</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Lets invoke it again, this time with a new URL "<A href="https://swapi.dev/api/people/2/%22:" target="_blank" rel="noopener">https://swapi.dev/api/people/2/":</A></LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> ./web-report.ps1 -URL https://swapi.dev/api/people/2/</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Lets check the response in<SPAN> </SPAN><EM>report.htm</EM>. :</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup> <tr><th>name</th><th>height</th><th>mass</th><th>hair_color</th><th>skin_color</th><th>eye_color</th><th>birth_year</th><th>gender</th><th>homeworld</th><th>films</th><th>species</th><th>vehicles</th><th>starships</th><th>created</th><th>edited</th><th>url</th></tr> <tr><td>C-3PO</td><td>167</td><td>75</td><td>n/a</td><td>gold</td><td>yellow</td><td>112BBY</td><td>n/a</td><td>https://swapi.dev/api/planets/1/</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>10/12/2014 15:10:51</td><td>20/12/2014 21:17:50</td><td>https://swapi.dev/api/people/2/</td></tr> </table> </body></html></LI-CODE></DIV> </DIV> </DIV> <P>This time we have<SPAN> </SPAN><CODE>C-3PO</CODE>, yup, definitely not Luke, it seems to be working :)</img></P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#improve-the-response" target="_blank" rel="noopener" name="improve-the-response"></A>Improve the response</H3> <P>So, so far we had a ton of columns coming back, maybe we just need a few fields from the response, like<SPAN> </SPAN><CODE>name</CODE>,<SPAN> </SPAN><CODE>planet</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>height</CODE>. Yea let's do that, and justt pick what we need from the response:</P> <OL> <LI>Let's add<SPAN> </SPAN><CODE>Select-Object</CODE><SPAN> </SPAN>like so:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Select-Object name, age, planet |</LI-CODE></DIV> </DIV> </DIV> <P>with the full code looking like so:</P> <P> </P> <LI-CODE lang="powershell"> Param( [String] $URL = "https://swapi.dev/api/people/1/", [String] $Report = "report.htm" ) Invoke-RestMethod -URI $URL | ConvertTo-Html -Property name, height, homeworld | Out-File $Report</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <OL> <LI>Let's invoke it again:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> ./web-report.ps1 -URL https://swapi.dev/api/people/1/</LI-CODE></DIV> </DIV> </DIV> <P>and our report now looks like:</P> <P> </P> <LI-CODE lang="markup"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/><col/></colgroup> <tr><th>name</th><th>height</th><th>homeworld</th></tr> <tr><td>Luke Skywalker</td><td>172</td><td>https://swapi.dev/api/planets/1/</td></tr> </table> </body></html></LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Much better :)</img> In fact, reading up a bit, we can just use -Property on<SPAN> </SPAN><CODE>ConvertTo-Html</CODE>, so we get:</P> <P> </P> <LI-CODE lang="powershell"> Invoke-RestMethod -URI $URL | ConvertTo-Html -Property name, height, homeworld | Out-File $Report</LI-CODE> <P> </P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#make-it-pretty" target="_blank" rel="noopener" name="make-it-pretty"></A>Make it pretty</H3> <P>In all honesty, this report is bad, no colors, no nothing. Surely, we must be able to pass a CSS file to<SPAN> </SPAN><CODE>ConvertTo-Html</CODE>?</P> <P>Ah yes, looking through the docs there's the parameter<SPAN> </SPAN><CODE>-CssUri</CODE><SPAN> </SPAN>that takes a file path. Let's create a CSS file then.</P> <OL> <LI>Create<SPAN> </SPAN><CODE>report.css</CODE><SPAN> </SPAN>and add the following CSS</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="css"> table { border: solid 1px black; padding: 10px; border-collapse: collapse; } tr:nth-child(even) {background: #CCC} tr:nth-child(odd) {background: #FFF}</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Update the script to take<SPAN> </SPAN><CODE>-CssUri report.css</CODE><SPAN> </SPAN>on<SPAN> </SPAN><CODE>ConvertTo-Html</CODE></LI> <LI>Run it again, you should see this in the browser:</LI> </OL> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_1-1633648317947.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316081i40A896330A464C00/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_1-1633648317947.png" alt="Chris_Noring_1-1633648317947.png" /></span></P> <P> </P> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#summary" target="_blank" rel="noopener" name="summary"></A>Summary</H2> <P>In summary, we learned that we could use just a few commands,<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE>,<SPAN> </SPAN><CODE>ConvertTo-Html</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>Out-File</CODE><SPAN> </SPAN>and boom, we've created ourselves a report.</P> <P>Full code:</P> <P> </P> <LI-CODE lang="powershell">Param( [String] $URL = "https://swapi.dev/api/people/1/", [String] $Report = "report.htm" ) Invoke-RestMethod -URI $URL | ConvertTo-Html -CssUri report.css -Title "Web report" -Property name, height, homeworld | Out-File $Report</LI-CODE> <P> </P> <P> </P> Thu, 07 Oct 2021 23:21:24 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-web-report-in-powershell-use-the-force-luke/ba-p/2824832 Chris_Noring 2021-10-07T23:21:24Z new module : Testing in C# using Visual Studio https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-testing-in-c-using-visual-studio/ba-p/2815085 <P>Testing is an important part of shipping and maintaining an application. </P> <P> </P> <P>To really make writing and running tests a part of your everyday workflow, it needs to be easy to author and run tests. Not only that, but it also needs to be fast. One of the great features of Visual Studio is its ability to support different test frameworks but also the tooling around authoring and running tests.</P> <P> </P> <P>In this module, you'll do the following:</P> <P> </P> <UL> <LI><STRONG>Write a test</STRONG>: Learn the basic parts of writing a test and use test projects that reference your product code.</LI> <LI><STRONG>Use Visual Studio to run and debug your tests</STRONG>: See the output of your tests and interact with a whole suite of tests.</LI> <LI><STRONG>Sharpen your test-writing skills</STRONG>: Use Fluent Assertions, data-driven tests, and mocking to expand your testing skills.</LI> </UL> <P>Link to module: <A title="C# testing in visual studio" href="https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-tools/1-introduction" target="_self">https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-tools/1-introduction</A> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vs-testing.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/315411i9F9ECBC3DFF58971/image-size/large?v=v2&px=999" role="button" title="vs-testing.png" alt="vs-testing.png" /></span></P> Tue, 05 Oct 2021 22:09:30 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-testing-in-c-using-visual-studio/ba-p/2815085 Chris_Noring 2021-10-05T22:09:30Z Working With Azure AD B2C Custom Policies https://techcommunity.microsoft.com/t5/azure-developer-community-blog/working-with-azure-ad-b2c-custom-policies/ba-p/2804056 <P>In this post, we will learn one of the two sign-in options provided by an Azure AD B2C tenant, and this is the custom policies (the other one is the user flows). With Custom Policies, we can build customized authentication flows based on our needs.</P> <P> </P> <H1>Getting Started</H1> <P>Before getting started make sure we have :</P> <UL> <LI>An Azure AD B2C tenant</LI> <LI>A registered web application</LI> <LI>The necessary policy keys and register the Identity Experience Framework Apps</LI> <LI>Download the <A href="https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/archive/refs/heads/master.zip" target="_blank" rel="noopener">Azure AD B2C policy starter pack</A> from GitHub, make the configurations and upload it to the tenant.</LI> </UL> <P> </P> <H1>Add signing/encryption keys</H1> <P>Sign in to the Azure Portal, search for the Azure AD B2C tenant, and click Open B2C Tenant.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="01.PNG" style="width: 222px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314401iBC7E2B763DBBA9DD/image-size/medium?v=v2&px=400" role="button" title="01.PNG" alt="01.PNG" /></span></P> <P>From the overview page, under the Policies section, select <STRONG>Identity Experience Framework</STRONG>.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="02.png" style="width: 292px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314402iCEE9B1E2D741A248/image-size/medium?v=v2&px=400" role="button" title="02.png" alt="02.png" /></span></P> <H2>Create the signing key</H2> <P> </P> <P>Select Manage - <STRONG>Policy Keys</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="03.png" style="width: 275px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314403i825C04E1C1000998/image-size/medium?v=v2&px=400" role="button" title="03.png" alt="03.png" /></span></P> <P> </P> <P>select <STRONG>Add</STRONG></P> <P> </P> <P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="04.png" style="width: 352px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314405i940D36D1DE9394BF/image-size/medium?v=v2&px=400" role="button" title="04.png" alt="04.png" /></span></STRONG></P> <P> </P> <UL> <LI>From the <STRONG>Options </STRONG>section, select from the drop-down menu <STRONG>Generate</STRONG>.</LI> <LI>In the filed <STRONG>Name</STRONG>, type <STRONG>TokenSigningKeyContainer</STRONG>.</LI> <LI>In the <STRONG>Key type</STRONG>, choose <STRONG>RSA</STRONG>.</LI> <LI>In the <STRONG>Key usage</STRONG>, select <STRONG>Signature</STRONG>.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="05.png" style="width: 310px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314406iD217A2F4AA8F8C91/image-size/medium?v=v2&px=400" role="button" title="05.png" alt="05.png" /></span></P> <P> </P> <P>Select <STRONG>Create</STRONG>.</P> <H2>Create the encryption key</H2> <UL> <LI>Select <STRONG>Policy Keys</STRONG> and then select <STRONG>Add</STRONG>.</LI> <LI>From the <STRONG>Options </STRONG>section, select from the drop-down menu <STRONG>Generate</STRONG>.</LI> <LI>In the filed <STRONG>Name</STRONG>, type <STRONG>TokenEncryptionKeyContainer</STRONG>.</LI> <LI>In the <STRONG>Key type</STRONG>, choose <STRONG>RSA</STRONG>.</LI> <LI>In the <STRONG>Key usage</STRONG>, select <STRONG>Encryption</STRONG>.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="06.png" style="width: 326px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314407iBC11DE4E2D2508D6/image-size/medium?v=v2&px=400" role="button" title="06.png" alt="06.png" /></span></P> <P> </P> <P> </P> <P>Select <STRONG>Create</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="07.png" style="width: 125px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316378i70D85B1D33B2AA62/image-size/medium?v=v2&px=400" role="button" title="07.png" alt="07.png" /></span> </P> <H1>Register the IdentityExperienceFramework application</H1> <P>At the next step, we have to register the <STRONG>IdentityExperienceFramework</STRONG> application. <SPAN data-preserver-spaces="true">From the left-hand side, blade select </SPAN><STRONG><SPAN data-preserver-spaces="true">Manage</SPAN></STRONG><SPAN data-preserver-spaces="true"> - </SPAN><STRONG><SPAN data-preserver-spaces="true">App registration</SPAN></STRONG><SPAN data-preserver-spaces="true">s and then select </SPAN><STRONG><SPAN data-preserver-spaces="true">+ New registration</SPAN></STRONG><SPAN data-preserver-spaces="true">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="08.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314408i5B2526FAE872CE1B/image-size/medium?v=v2&px=400" role="button" title="08.png" alt="08.png" /></span></P> <P> </P> <P>In the field name, type <STRONG>IdentityExperienceFramework</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="09.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314409i7C463CB90C0D543A/image-size/medium?v=v2&px=400" role="button" title="09.png" alt="09.png" /></span></P> <P>Under <STRONG>Supported account types</STRONG>, select <STRONG>Accounts in this organizational directory only</STRONG> (tenant name B2C only - Single tenant).</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="10.png" style="width: 619px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314413iC097F4AFD6CB21E8/image-size/large?v=v2&px=999" role="button" title="10.png" alt="10.png" /></span></P> <P> </P> <P>Under the <STRONG>Redirect URI </STRONG>section, select <STRONG>Web</STRONG>, and then type <STRONG><EM><A href="https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com" target="_blank" rel="noopener">https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com</A>.</EM></STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="11.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314414i70F400742BDE640D/image-size/large?v=v2&px=999" role="button" title="11.png" alt="11.png" /></span></P> <P> </P> <P>Under the <STRONG>Permissions</STRONG> section, select the <STRONG>Grant admin consent to openid and offline_access permissions</STRONG> check box.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="12.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314416iFA002D1A0EE3AA70/image-size/large?v=v2&px=999" role="button" title="12.png" alt="12.png" /></span></P> <P> </P> <P>And click <STRONG>Register</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="13.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314415i74447F40402E9C01/image-size/medium?v=v2&px=400" role="button" title="13.png" alt="13.png" /></span></P> <H1>Expose the API by adding a scope</H1> <P>In the left-hand side blade, under the <STRONG>Manage </STRONG>section, select <STRONG>Expose an API,</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="14.png" style="width: 167px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314418i1459D043F1761002/image-size/medium?v=v2&px=400" role="button" title="14.png" alt="14.png" /></span></P> <P> </P> <P>and then select <STRONG> +</STRONG> <STRONG>Add a scope</STRONG>,</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="15.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314419iA25DF94C6D865D6B/image-size/medium?v=v2&px=400" role="button" title="15.png" alt="15.png" /></span></P> <P> </P> <P><SPAN data-preserver-spaces="true">finally, select </SPAN><STRONG><SPAN data-preserver-spaces="true">Save and continue</SPAN></STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="16.png" style="width: 363px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314420i760E2DF9EF9DC87B/image-size/medium?v=v2&px=400" role="button" title="16.png" alt="16.png" /></span></P> <P> </P> <P>Now, we have to type the values as shown in the image below to create a scope that allows custom policy execution in the Azure AD B2C tenant:</P> <P> </P> <UL> <LI><STRONG>Scope name:</STRONG> user_impersonation</LI> <LI><STRONG>Admin consent display name:</STRONG> Access IdentityExperienceFramework</LI> <LI><STRONG>Admin consent description:</STRONG> Allow the application to access IdentityExperienceFramework on behalf of the signed-in user.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="17.png" style="width: 500px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314421iE1504C66C6243DE5/image-size/large?v=v2&px=999" role="button" title="17.png" alt="17.png" /></span></P> <P> </P> <P>Click <STRONG>Add scope</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="18.png" style="width: 302px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314422iF5A37A85D1E473EF/image-size/medium?v=v2&px=400" role="button" title="18.png" alt="18.png" /></span></P> <H1>Register the ProxyIdentityExperienceFramework application</H1> <P><SPAN data-preserver-spaces="true">Go to <STRONG>Manage</STRONG> - <STRONG>App registrations</STRONG>, and then click </SPAN><STRONG><SPAN data-preserver-spaces="true">+ New registration</SPAN></STRONG><SPAN data-preserver-spaces="true">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="19.png" style="width: 389px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314425iA9E5D0AD1FFD6201/image-size/medium?v=v2&px=400" role="button" title="19.png" alt="19.png" /></span></P> <P> </P> <P>In the Name field, type <STRONG>ProxyIdentityExperienceFramework</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="20.png" style="width: 410px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314426i068D45165D4FE912/image-size/large?v=v2&px=999" role="button" title="20.png" alt="20.png" /></span></P> <P> </P> <P>Under <STRONG>Supported account types</STRONG>, select<STRONG> Accounts in this organizational directory only</STRONG>, radio button.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="21.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314427i2A897D9236A16932/image-size/large?v=v2&px=999" role="button" title="21.png" alt="21.png" /></span></P> <P> </P> <P>Under the <STRONG>Redirect URI </STRONG>section, use the drop-down to select <STRONG>Public client/native (mobile & desktop), </STRONG>and for <STRONG>Redirect URI</STRONG>, type <STRONG>myapp://auth</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="22.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314429iFD51A0DD589BDAD1/image-size/large?v=v2&px=999" role="button" title="22.png" alt="22.png" /></span></P> <P> </P> <P>Under the <STRONG>Permissions </STRONG>section, select the <STRONG>Grant admin consent to openid and offline_access permissions</STRONG> check box.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="23.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314430i467F9E434F2DEC76/image-size/large?v=v2&px=999" role="button" title="23.png" alt="23.png" /></span></P> <P> </P> <P>And click the <STRONG>Register </STRONG>button.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="24.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314432i2E88BE01F78BE5E5/image-size/medium?v=v2&px=400" role="button" title="24.png" alt="24.png" /></span></P> <H1>Specify that the application should be treated as a public client</H1> <P>In the left-hand side menu, select <STRONG>Manage</STRONG> - <STRONG>Authentication</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="25.png" style="width: 236px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314433i5EE2FFFEEB925104/image-size/medium?v=v2&px=400" role="button" title="25.png" alt="25.png" /></span></P> <P> </P> <P>Under the <STRONG>Advanced settings </STRONG>section, in the <STRONG>Allow public client flows</STRONG>, set the <STRONG>Enable the following mobile and desktop flows</STRONG> to <STRONG>Yes</STRONG>.</P> <P> </P> <TABLE style="border-collapse: collapse; width: 100%;"> <TBODY> <TR> <TD style="width: 100%;"><STRONG>Info:</STRONG> Make user that "<STRONG>allowPublicClient</STRONG>": true is set in the application manifest.</TD> </TR> </TBODY> </TABLE> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="26.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314434i6A3DF44E95201FCA/image-size/large?v=v2&px=999" role="button" title="26.png" alt="26.png" /></span></P> <P> </P> <P>And select <STRONG>Save</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="27.png" style="width: 415px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314435i225DC35B21B9D907/image-size/large?v=v2&px=999" role="button" title="27.png" alt="27.png" /></span></P> <P> </P> <P>Now, grant permissions to the API scope we exposed earlier in the IdentityExperienceFramework registration: In the left menu, select <STRONG>Manage</STRONG> - <STRONG>API permissions</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="28.png" style="width: 171px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314436i4E64724C9C85D283/image-size/medium?v=v2&px=400" role="button" title="28.png" alt="28.png" /></span></P> <P> </P> <P>Under <STRONG>Configured permissions</STRONG>, select <STRONG>Add a permission</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="29.png" style="width: 485px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314437iD8AC3928D4AE3118/image-size/large?v=v2&px=999" role="button" title="29.png" alt="29.png" /></span></P> <P> </P> <P>Under the Request API permissions section, click on the <STRONG>My APIs</STRONG> tab, and select the <STRONG>IdentityExperienceFramework</STRONG> application.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="30.png" style="width: 564px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314438i6D7224616945B417/image-size/large?v=v2&px=999" role="button" title="30.png" alt="30.png" /></span></P> <P> </P> <P>Under the <STRONG>Select Permissions</STRONG> section, select the <STRONG>user_impersonation</STRONG> scope.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="31.png" style="width: 517px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314439iA7EB0520FAC16008/image-size/large?v=v2&px=999" role="button" title="31.png" alt="31.png" /></span></P> <P> </P> <P>And select the <STRONG>Add permissions </STRONG>button</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="32.png" style="width: 291px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314440i2DECD59BD105DEEB/image-size/medium?v=v2&px=400" role="button" title="32.png" alt="32.png" /></span></P> <P> </P> <P>Now, select <STRONG>Grant admin consent</STRONG> for (tenant name).</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="33.png" style="width: 597px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314441i19E29CCF6707A38C/image-size/large?v=v2&px=999" role="button" title="33.png" alt="33.png" /></span> </P> <H1>Working with the custom policy starter pack</H1> <P> </P> <P>After unzipping the custom policy starter pack, zip file, we will see the folders as the image below.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="00_1.PNG" style="width: 235px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316377iAE5499684C84A001/image-size/medium?v=v2&px=400" role="button" title="00_1.PNG" alt="00_1.PNG" /></span></P> <P> </P> <TABLE style="border-collapse: collapse; width: 80.2826%; height: 115px;" width="80.2826%"> <TBODY> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;"><STRONG>Folder Name</STRONG></TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;"><STRONG>Description</STRONG></TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">LocalAccounts</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;"> Includes custom policies XML files for local accounts</TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">SocialAccounts</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;">Includes custom policies XML files for social accounts</TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">SocialAndLocalAccounts</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;">Includes custom policies XML files for both local and social accounts</TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">SocialAndLocalAccountsWithMfa</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;">Includes custom policies XML files for both local and social accounts with multi-factor authentication (Mfa)</TD> </TR> </TBODY> </TABLE> <P> </P> <H1>Configure the Custom Policies</H1> <P>Before we upload the custom policy XML files we must make some changes to the <STRONG><EM>TrustFrameworkExtensions.xml.</EM></STRONG></P> <P> </P> <TABLE style="height: 87px; width: 82.5259%; border-collapse: collapse; border-style: solid;"> <TBODY> <TR style="height: 24px;"> <TD style="width: 27.0469%; height: 24px;">ProxyIdentityExperienceFramework</TD> <TD style="width: 29.269%; height: 24px;"><Item Key="client_id"></TD> <TD style="width: 34.1997%; height: 24px;"> <DIV class="fxc-essentials-label-container fxc-essentials-label-container-left"><LABEL id="_essentials_161" class="fxc-essentials-label fxs-portal-subtext" title="Application (client) ID">Application (client) ID</LABEL></DIV> </TD> <TD style="width: 28.6073%;"> IdentityExperienceFrameworkAppId</TD> </TR> <TR style="height: 24px;"> <TD style="width: 27.0469%; height: 24px;">IdentityExperienceFramework</TD> <TD style="width: 29.269%; height: 24px;"><Item Key="IdTokenAudience"></TD> <TD style="width: 34.1997%; height: 24px;"><LABEL id="_essentials_161" class="fxc-essentials-label fxs-portal-subtext" title="Application (client) ID">Application (client) ID</LABEL></TD> <TD style="width: 28.6073%;">IdentityExperienceFramework</TD> </TR> </TBODY> </TABLE> <P> </P> <P>Find, open the <STRONG>LocalAccounts</STRONG>/<STRONG>TrustFrameworkExtensions.xml,</STRONG> search for the <STRONG><TechnicalProfile Id="login-NonInteractive"></STRONG> element and replace the values as the examples below, and save the files.</P> <P> </P> <TABLE style="height: 255px; width: 85.0635%; border-collapse: collapse; border-style: solid;" width="85.06350000000002%"> <TBODY> <TR> <TD width="100%" style="width: 100%;"> <P><STRONG><DisplayName>Local Account SignIn</DisplayName></STRONG></P> <P><TechnicalProfiles> <STRONG><TechnicalProfile Id="login-NonInteractive"></STRONG></P> <P><Metadata></P> <P><STRONG><Item Key="client_id">ProxyIdentityExperienceFrameworkAppId</Item></STRONG></P> <P><STRONG><Item Key="IdTokenAudience">IdentityExperienceFrameworkAppId</Item></STRONG></P> <P></Metadata></P> <P><InputClaims></P> <P><STRONG><InputClaim ClaimTypeReferenceId="client_id" DefaultValue="ProxyIdentityExperienceFrameworkAppId" /></STRONG></P> <P><STRONG><InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="IdentityExperienceFrameworkAppId" /></STRONG></P> <P></InputClaims></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <TABLE style="height: 340px; width: 84.6896%; border-collapse: collapse; border-style: solid;"> <TBODY> <TR> <TD style="width: 100%;"> <DIV> <STRONG><DisplayName>Local Account SignIn</DisplayName></STRONG></DIV> <DIV> <TechnicalProfiles></DIV> <DIV> <STRONG><TechnicalProfile Id="login-NonInteractive"></STRONG></DIV> <DIV> <Metadata></DIV> <DIV> <STRONG><Item Key="client_id">########-####-####-####-############</Item></STRONG></DIV> <DIV> <STRONG> <Item Key="IdTokenAudience">########-####-####-####-############</Item></STRONG></DIV> <DIV> </Metadata></DIV> <DIV> <InputClaims></DIV> <DIV> <STRONG><InputClaim ClaimTypeReferenceId="client_id" DefaultValue="########-####-####-####-############" /></STRONG></DIV> <DIV><STRONG> <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="########-####-####-####-############" /></STRONG></DIV> <DIV> </InputClaims></DIV> </TD> </TR> </TBODY> </TABLE> <H1>Upload the Policies</H1> <P>The last step is to upload the custom policies to the Azure B2C tenant. Under the Policies section, select the Identity Experience Framework menu item in the B2C tenant in the Azure portal.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="34.png" style="width: 298px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314442i1E730BDF1960B7D3/image-size/large?v=v2&px=999" role="button" title="34.png" alt="34.png" /></span></P> <P> </P> <P>Select <STRONG>Upload custom policy</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="35.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314443iBECA0839C5331F00/image-size/large?v=v2&px=999" role="button" title="35.png" alt="35.png" /></span></P> <P> </P> <P>Upload the policy files, in the following order:</P> <P> </P> <OL> <LI>TrustFrameworkBase.xml</LI> <LI>TrustFrameworkExtensions.xml</LI> <LI>SignUpOrSignin.xml</LI> <LI>ProfileEdit.xml</LI> <LI>PasswordReset.xml</LI> </OL> <P>Every policy file we upload will add the <STRONG>B2C_1A_ prefix</STRONG>.</P> <H1>Useful links</H1> <UL> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/overview" target="_blank" rel="noopener">What is Azure Active Directory B2C?</A></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-tenant" target="_blank" rel="noopener">Create an Azure Active Directory B2C tenant</A></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-register-applications?tabs=app-reg-ga" target="_blank" rel="noopener">Register a web application in Azure Active Directory B2C</A></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows?pivots=b2c-custom-policy" target="_blank" rel="noopener">Create custom policies in Azure Active Directory B2C</A></LI> </UL> <P> </P> Sun, 10 Oct 2021 09:45:08 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/working-with-azure-ad-b2c-custom-policies/ba-p/2804056 George Grammatikos 2021-10-10T09:45:08Z NEW data science curriculum on GitHub was just released, 20 free lessons https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-data-science-curriculum-on-github-was-just-released-20-free/ba-p/2797143 <P>The curriculum can be found at:</P> <UL> <LI><A href="https://aka.ms/datascience-beginners" target="_self">aka.ms/datascience-beginners</A></LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MicrosoftTeams-image (4).png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/313795iE2E04DF57A7745EE/image-size/large?v=v2&px=999" role="button" title="MicrosoftTeams-image (4).png" alt="MicrosoftTeams-image (4).png" /></span></P> <P> </P> <P><SPAN>Azure Cloud Advocates at Microsoft are pleased to offer a 10-week, 20-lesson curriculum all about Data Science. Each lesson includes pre-lesson and post-lesson quizzes, written instructions to complete the lesson, a solution, and an assignment. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.</SPAN></P> <P> </P> <H2>Each lesson includes:</H2> <UL> <LI>Optional sketchnote</LI> <LI>Optional supplemental video</LI> <LI>Pre-lesson warmup quiz</LI> <LI>Written lesson</LI> <LI>For project-based lessons, step-by-step guides on how to build the project</LI> <LI>Knowledge checks</LI> <LI>A challenge</LI> <LI>Supplemental reading</LI> <LI>Assignment</LI> <LI>Post-lesson quiz</LI> </UL> <P> </P> <P> </P> <P>This curriculum is in a series that shows beginners different technical industries:</P> <UL> <LI><SPAN><A href="https://github.com/microsoft/Data-Science-For-Beginners" target="_self">Data Science for Beginners</A> - Check out all the content for this curriculum!</SPAN></LI> <LI> <DIV><A href="https://aka.ms/webdev-beginners" target="_self" rel="noopener noreferrer"><SPAN>Web Dev for Beginners</SPAN></A></DIV> </LI> <LI> <DIV><A href="https://aka.ms/iot-beginners" target="_self" rel="noopener noreferrer"><SPAN>IoT for Beginners</SPAN></A></DIV> </LI> <LI> <DIV><A href="https://github.com/microsoft/ML-For-Beginners" target="_self" rel="noopener noreferrer"><SPAN>Machine Learning for Beginners</SPAN></A></DIV> </LI> </UL> <P> </P> <P>You can find a related blog post at <A href="https://techcommunity.microsoft.com/t5/educator-developer-blog/introducing-data-science-for-beginners/ba-p/2796770" target="_self">announcing a new curriculum</A></P> Mon, 04 Oct 2021 18:27:57 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-data-science-curriculum-on-github-was-just-released-20-free/ba-p/2797143 Chris_Noring 2021-10-04T18:27:57Z From Tunisian classroom full of boys to architect for Canadian government: A journey of perseverance https://techcommunity.microsoft.com/t5/azure-developer-community-blog/from-tunisian-classroom-full-of-boys-to-architect-for-canadian/ba-p/2783379 <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MonishGangwani_0-1632512735534.png" style="width: 623px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312753iA814E8A16840BEE7/image-dimensions/623x441?v=v2" width="623" height="441" role="button" title="MonishGangwani_0-1632512735534.png" alt="MonishGangwani_0-1632512735534.png" /></span></P> <P><FONT size="5"><STRONG>HAMIDA REBAI TRABELSI </STRONG>is a passionate learner who juggles multiple roles with ease: a senior technology professional at one of Canada’s government agencies, a Microsoft MVP, a mother. Hamida’s journey to Software and Cloud Architect at Revenu in Quebec has been one of determination; as one of the only two girls in a classroom of 28 boys in Tunisia, North Africa, she used the computer lab at school to teach herself PASCAL programming. Today she is the only woman on Revenu’s Cloud Migration team, architecting the agency’s migration strategy to digitize all their data by March 2023. An expert on the use of Kubernetes for data digitization, Hamida freely shares her knowledge through blogs, technical articles, and conferences. Hamida shares about her experience with Kubernetes and what she’s working on now in this discussion.</FONT></P> <P> </P> <P><STRONG>Tell us about your job at Revenu. What are you currently working on?</STRONG></P> <P>Renevu is a government agency that encourages social and economic development in Québec. We help individuals and businesses understand and fulfill their tax obligations. Specifically, we administer tax legislation and the social programs entrusted to us by the government; we collect debts and run checks to ensure that tax laws are applied fairly; we collect support and pay it to the rightful recipients.</P> <P> </P> <P>As you can imagine, our work generates huge volumes of unstructured data. The ability to mine data in a manner that scales and is accurate is super critical to help us do our job thoroughly and serve the taxpayers and our various constituents. I am currently architecting and implementing our cloud migration strategy, which is a multi-year project to digitize our data across multiple clouds. Doing so will help us have a common structure for data, which in turn will yield greater accuracy and help the agency work with greater speed. We will also have the capability to apply AI models in the future. For applications that we are not able to migrate, we are working on plans to rearchitect them using containers and microservices.</P> <P> </P> <P><STRONG>Tell us more about the use of containers and their impact on your migration project.</STRONG></P> <P>In order to simplify the deployment and management of applications based on microservices, we used containers with Kubernetes orchestrators. To ensure the continuous integration and continuous delivery and secure DevOps implementation with Kubernetes using Azure DevOps, AKS is also a reliable solution for bringing DevOps and Kubernetes together to improve the speed and security of the development process.</P> <P> </P> <P>In order to ensure our huge volume of applications function without any problems, we use Constant Monitoring in AKS and in Azure to accelerate the feedback loop. Azure Pipelines help us deliver faster while staying compliant with critical policies specified by Azure.</P> <P>During peaks AKS and Azure Container Instances offer several functionalities to help us scale and manage costs based on our consumption.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_0-1632521137661.png" style="width: 653px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312793i3BE77152C07F29E5/image-dimensions/653x302?v=v2" width="653" height="302" role="button" title="Monish_Gangwani_0-1632521137661.png" alt="Monish_Gangwani_0-1632521137661.png" /></span></P> <P> </P> <P> </P> <P><STRONG>Who has been the single biggest influence on your life and career?</STRONG></P> <P>My father. <EM>As one of the only two girls in a classroom with 28 boys back in Tunisia, I was determined to pursue my passion for software programming</EM> and having my father’s support was immensely valuable. He always encouraged to keep learning and growing; at a time when progressive parents expect their kids to become doctors, he acknowledged my aptitude for and supported me in pursuing software as a career. I learned the importance of being responsible for my choices and not to take the opportunities I have been presented with for granted.</P> <P> </P> <P><STRONG>Clearly your father ignited the spark for learning in you. How has that become a full-fledged passion and how do you stay up-to-date yourself?</STRONG></P> <P>Well, for me learning is my way of having fun. Whether we are on vacation or it’s a regular workday, I create time within my day to learn something new. Learning has become my hobby, my favorite pastime. And when you’re having fun and it adds value to your entire life, it becomes something you believe in strongly and that has translated into a passion for me.</P> <P> </P> <P>My dream would be to create a consolidated web-based learning platform where I can share articles, blogs, podcasts with others and they can do the same.</P> <P> </P> <P>As far as staying updated myself, I am committed to training others which propels me to keep up with the latest tech. Also, as an MVP, I get access to a ton of latest information from Microsoft, which keeps me current. There is also a vast amount of free training available. In fact, I just delivered a training on ‘Essentials of Azure Kubernetes Services’ that is <A href="https://www.linkedin.com/learning/l-essentiel-d-azure-kubernetes-service-aks/bienvenue-dans-l-essentiel-d-azure-kubernetes-service-aks/?ocid=AID3041046" target="_blank" rel="noopener">available on LinkedIn Learning</A> and I am delivering a talk on ‘Deploying an application on AKS’ at <A href="https://azuresummit.live/speaker/rebai-hamida/?ocid=AID3041046" target="_blank" rel="noopener">the Cloud Summit</A>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_1-1632521174118.png" style="width: 424px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312794iBCC7E91BA460EEB9/image-dimensions/424x322?v=v2" width="424" height="322" role="button" title="Monish_Gangwani_1-1632521174118.png" alt="Monish_Gangwani_1-1632521174118.png" /></span></P> <P> </P> <P> </P> <P><STRONG>Your advice to developers?</STRONG></P> <P>Data is the most important asset today and learning about Kubernetes will make possible data interactions that were previously unthinkable. <SPAN style="font-family: inherit;">So definitely learn more about Kubernetes. Beyond that, I encourage all developers to commit themselves to lifelong learning.</SPAN></P> <P> </P> <P><STRONG><FONT size="2"><EM>Follow Hamida on <A href="https://twitter.com/RebaiHamida" target="_blank" rel="noopener">Twitter</A>, <A href="https://www.linkedin.com/in/hamida-rebai-trabelsi-09b8525/" target="_blank" rel="noopener">LinkedIn</A>, and <A href="https://didourebai.medium.com/" target="_blank" rel="noopener">Medium</A>. Hamida's Essentials of AKS Training (in French) on <A href="https://www.linkedin.com/learning/l-essentiel-d-azure-kubernetes-service-aks/bienvenue-dans-l-essentiel-d-azure-kubernetes-service-aks/?ocid=AID3041046" target="_blank" rel="noopener">LinkedIn Learning</A>.</EM></FONT></STRONG></P> <P><FONT size="2"><EM><STRONG>Continue learning about Kubernetes on Azure: visit the <A href="https://github.com/microsoft/monthlyresources/?ocid=AID3041046" target="_blank" rel="noopener">Microsoft Dev Repo on GitHub</A>.</STRONG></EM></FONT></P> Tue, 12 Oct 2021 21:11:25 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/from-tunisian-classroom-full-of-boys-to-architect-for-canadian/ba-p/2783379 Monish_Gangwani 2021-10-12T21:11:25Z Journey Towards Cloud Architecture https://techcommunity.microsoft.com/t5/azure-developer-community-blog/journey-towards-cloud-architecture/ba-p/2780579 <P class="wk wl uu wm b wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb oh xc pk by" data-selectable-paragraph="">In this article,<SPAN> </SPAN><A class="ay ow" href="https://github.com/i-am-dan" target="_blank" rel="noopener ugc nofollow">@i-am-dan<SPAN> </SPAN></A>and<SPAN> </SPAN><A class="ay ow" href="https://github.com/pjirsa" target="_blank" rel="noopener ugc nofollow">@pjirsa</A><SPAN> </SPAN>(Microsoft’s Cloud Solutions Architects) highlight the benefits of a modern event-based cloud architecture while migrating a legacy WebAPI to Azure.</P> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="be56" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""><STRONG class="be">Our Story</STRONG></H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">Our legacy API (Hackathon registration service)</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DanielKim_0-1632419899038.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312460i82A1FB0AF56629E0/image-size/medium?v=v2&px=400" role="button" title="DanielKim_0-1632419899038.png" alt="DanielKim_0-1632419899038.png" /></span></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">(Figure 1)</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Figure 1 represents the architecture of our original Hackathon Registration service.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">It includes the following components:</P> <UL class=""> <LI id="a75b" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph=""><EM class="zc">Registration Form —<SPAN> </SPAN></EM>A website which collects registration info from a new hackathon participant.</LI> <LI id="8f5e" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><EM class="zc">Registration API —<SPAN> </SPAN></EM>An ASP.NET Core WebAPI providing CRUD over the registration data.</LI> <LI id="438e" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><EM class="zc">Registration DB</EM><SPAN> </SPAN>— An Azure SQL Database to persist registration data.</LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Over time, additional functionality and business logic have been added to the legacy API. Some examples are:</P> <UL class=""> <LI id="8e2d" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph="">Adding a new user to a mailing list service (Mailchimp).</LI> <LI id="f282" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Inviting new guest users to an Azure AD tenant.</LI> <LI id="7c4a" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Adding a new user to a Microsoft Teams team and channels.</LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""><STRONG class="wm hq">And more requirements mean more code!</STRONG></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Our technical debt and existing design patterns were making it challenging to adapt to the new requirements.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">While th<SPAN>e</SPAN><SPAN> </SPAN>core functionality of collecting and storing user registration information remains constant, each hackathon event usually has its own requirements around other capabilities. Some events want to use an alternate mailing list provider. Others want to configure a unique hierarchy for teams and channels. Our API codebase<SPAN> </SPAN><EM class="zc">quickly started filling up with conditional statements and logical branches<SPAN> </SPAN></EM>making it nearly impossible to test and difficult to maintain.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">While the American divorce rate has<SPAN> </SPAN><A class="ay ow" href="https://www.census.gov/library/stories/2020/12/united-states-marriage-and-divorce-rates-declined-last-10-years.html" target="_blank" rel="noopener ugc nofollow">dropped</A>, we knew the<SPAN> </SPAN><STRONG class="wm hq">answer to our problem was to decouple</STRONG>. We want to decouple what we currently have into separate<SPAN> </SPAN><EM class="zc">components</EM>. Each component takes care of an atomic piece of business logic and should be easily modifiable without disrupting other components. This removes the need to bake unnecessary code into our base business logic. We decided to take a spike and design out how we can accomplish that using out of the box Azure services.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="06af" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">What does this have to do with me?</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">Though this API is a small example we believe componentizing your architecture while it’s still small is a big step towards modernizing your architecture.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">As developers, we believe in<SPAN> </SPAN><A class="ay ow" href="https://dev.to/danialmalik/a-brief-guide-to-clean-code-functions-104h#:~:text=A%20Brief%20Guide%20to%20Clean%20Code%3A%20Functions%201,of%20the%20system%20while%20classes%20are%20the%20nouns." target="_blank" rel="noopener ugc nofollow">Clean Code</A>. We have to think software architecture, similarly. Each small component is doing only what it is supposed to and then passes control to another component. This helps us to architect cleaner and sensible solutions in the cloud.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Whether you are already on the cloud or just thinking about modernizing your current architecture for the cloud, this article will hopefully give you a decent grasp of how you can go about approaching it the right way — or at least a better way. There’s no one design pattern to address all solutions of course.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""><STRONG class="wm hq">Options Options Options</STRONG></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="5077" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">App Service</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">One of the quickest way to modernize your software is using<SPAN> </SPAN><STRONG class="wm hq">Azure</STRONG><SPAN> </SPAN><STRONG class="wm hq">App Service</STRONG>. This way you allow Azure to handle all the networking and security for you. Here are some great ways to secure your App Services!</P> <UL class=""> <LI id="7124" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint" target="_blank" rel="noopener ugc nofollow">App Service Private Endpoint</A></LI> <LI id="04f6" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/app-service/app-service-ip-restrictions" target="_blank" rel="noopener ugc nofollow">App Service Access Restriction</A></LI> <LI id="d820" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/app-service/environment/intro" target="_blank" rel="noopener ugc nofollow">App Service Environment</A></LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""><EM class="zc">(VM is of course another route but going back to our reasoning we want to make sure things are small and manageable.)</EM></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">You can either host all your messy giant application in the App Service, OR you can refactor like mentioned above and put them into separate App Services and this gets into the territory of<SPAN> </SPAN><A class="ay ow" href="https://www.martinfowler.com/microservices/" target="_blank" rel="noopener ugc nofollow">Microservices</A>.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Did we mention the cost can be significantly cheaper?</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="7b08" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Serverless</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">One step further than an app service route is the Serverless<SPAN> </SPAN><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener ugc nofollow">Azure Functions</A><SPAN> </SPAN>route. This is where Azure dynamically manages the allocation and provisioning of servers. All the benefit of the App Service but with added bonus of being only charged when it’s invoked. Scott Guthrie calls it the ‘<EM class="zc">invocation model</EM>’ where you are only responsible for chargers when the resource is called.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Now… the fun(?) part!</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="4c11" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Events and Messages</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">As you manage multiple components, event and messaging architecture becomes very important. We want our services to communicate and respond to each other. However, if we make direct calls between them, we are re-introducing strict dependencies. Ideally, these services should be able to communicate without needing any specific knowledge about what those services are, or where they are located. To accomplish this, we introduce an eventing system.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Should I use events or messages?</P> <UL class=""> <LI id="aa6e" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph=""><STRONG class="wm hq">Events</STRONG><SPAN> </SPAN>Think of it as a notification. The sender of an event does not necessarily care who receives or acts on the event. Eventing systems typically provide confirmation that an event has been submitted, and no response to the sender that a subscriber has consumed or processed the event.</LI> <LI id="a219" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><STRONG class="wm hq">Messaging<SPAN> </SPAN></STRONG>Think of it as a task given by System A to System B. Messages usually contain a data payload. Messaging systems can accommodate a more formal relationship between a publisher and a subscriber. The sender generally knows who the consumer will be and is sending a data payload that the consumer expects for processing.</LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Whichever direction you go you need a<SPAN> </SPAN><EM class="zc">Broker</EM>.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">The broker we chose for our example is<SPAN> </SPAN><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/event-grid/overview" target="_blank" rel="noopener ugc nofollow">Azure Event Grid</A>.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">><SPAN> </SPAN><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/event-grid/compare-messaging-services" target="_blank" rel="noopener ugc nofollow">Checkout the doc</A><SPAN> </SPAN>which explains different event-driven services in Azure</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="5b5f" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Our Solution</H2> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DanielKim_1-1632420074586.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312461i8E08DF9FE18F5C80/image-size/medium?v=v2&px=400" role="button" title="DanielKim_1-1632420074586.png" alt="DanielKim_1-1632420074586.png" /></span></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">(Figure 2) represents the architecture of our refactored solution.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">The core functionality of the API is still there. But we have moved all the customizable supporting features out to their own services.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">In order to decouple them from the original API, and orchestrate the business logic, an Event Grid Topic has been implemented. This service receives event notifications from the API when operations are performed on the registration data.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Our supporting feature services can subscribe to these notifications to take the appropriate action when changes in the system occur.</P> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="4308" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">What are the benefits?</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">The immediate impact of this redesign is tremendous.</P> <UL class=""> <LI id="c1c4" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph="">Each component is completely autonomous. Interdependencies are decoupled and cross-service communication is faciliated by a highly fault-tolerant messaging system.</LI> <LI id="811c" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://en.wikipedia.org/wiki/Cyclomatic_complexity" target="_blank" rel="noopener ugc nofollow">Cyclomatic Complexity</A><SPAN> </SPAN>of each component is greatly reduced. In some cases reaching a perfect score. This has the added benefit of making the code easier to test and easier for developers to understand. Not only are unit tests easier, but integration testing can be done by testing each component individually. For example, before the changes, we would have to submit an entire “new user” request through the API to make sure that the “Add to Mailchimp” feature was working properly. Now, we can just test that one service on its own.</LI> <LI id="8bb7" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Updates to the system are much easier now. Each of the supporting services are “plug-n-play”. For example, we can easily swap out the Mailchimp service for another service that interfaces with SendGrid.</LI> <LI id="f807" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Event Grid allows multiple subscriptions to the same event, which makes adding new features and layering in additional business logic a snap.</LI> </UL> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="7595" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">The downside</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">You might be saying, “<EM class="zc">But now there are so many more ‘things’ to deal with!</EM>”.<SPAN> </SPAN><STRONG class="wm hq">Yes, that is true</STRONG>. But the benefits<SPAN> </SPAN><STRONG class="wm hq">FAR</STRONG><SPAN> </SPAN>out-weigh the downsides here. Cloud platforms (such as Azure) provide a wealth of governance and management tools out of the box that make it easy to provision, manage, and monitor ‘all the things’.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="aaff" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Lesson to be learnt</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""><EM class="zc">In hindsight I guess we got to this point because we didn’t have a good design discussion when the API was being created</EM>.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">But I’m sure lot of development shops do similar things. In order to push code out, the design you think is going to last doesn’t really do you any good, OR you just write code without designing at all! IT’S OK! The point is to<SPAN> </SPAN><EM class="zc">LEARN</EM><SPAN> </SPAN>from what you have built and try to continuously improve.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">The cloud offers flexibility. A light-weight, adaptable design for the cloud is more resilient to changes in feature requirements. As your needs change and grow, you are not locked in to the server or license you bought last year, you can scale up, down, out and in whenever you need to and the cost is only for what you use.</P> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="6ed2" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">The Final Word</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">Migrating legacy application architectures to the cloud sometimes requires a shift in perspective and thought-process. These cloud-native patterns can seem foreign and complicated at first. But with a little time and experience you will start to see the flexibility, scalability, and cost benefits of these designs.</P> Fri, 24 Sep 2021 03:53:41 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/journey-towards-cloud-architecture/ba-p/2780579 Daniel-Kim 2021-09-24T03:53:41Z Calling on developers for Virtual Hackathon https://techcommunity.microsoft.com/t5/azure-developer-community-blog/calling-on-developers-for-virtual-hackathon/ba-p/2778977 <P><STRONG><EM>Did you know that 1 in 5 nurses are leaving or considering leaving the profession?</EM></STRONG></P> <P> </P> <P>The disappearing frontline affects us all, and our health care practitioners are<SPAN> </SPAN><STRONG>calling on all developers</STRONG><SPAN> </SPAN>to bring your innovation and solutions to help build a sustainable nursing workforce for the future.</P> <P> </P> <P><U></U><A href="https://nursehack4health.org/" target="_self" rel="nofollow noopener noreferrer"><U>Join our 3 day virtual hackathon</U></A><SPAN> to work with other technologists, healthcare workers, and innovators to build meaningful solutions.</SPAN></P> <P> </P> <P><SPAN><STRONG>Why should You Attend?<BR /></STRONG>For the greater good? Ha ha. </SPAN><SPAN>Attending a hackathon is a great way to bond, brainstorm, develop and pitch healthcare solutions that will forever change the way you think about a problem, your perceived value and impact and your vision for your future in nursing and healthcare!</SPAN></P> <P> </P> <P><SPAN>You will get a chance to:</SPAN></P> <UL> <LI>Work along side and network with MS experts and other technologists who share a common vision.</LI> <LI>Ideate and create meaningful solutions to address real pain points that our new and seasoned heroes are going through.</LI> <LI>Getting to work alongside nurses on the frontlines will help them make their ideas a reality!</LI> <LI>Close the gap between your technical skills and the needs of our nurses.</LI> <LI>Perfect chance to contribute to open source and help build your brand.</LI> </UL> <P><STRONG>What if I don’t have any healthcare experience? </STRONG>No problem! That’s what the nurses are for (and we’ll have some tech-y healthcare industry people there too)</P> <P><STRONG><BR />What if I don’t have skills on the tech and tools the team needs?<SPAN> </SPAN></STRONG>Again, No problem! Your background on any developer tools and tech are more than enough – and we’ll have plenty of MSFT mentors in a variety of areas there to help you as well. Commonly used tech includes (but is definitely not limited to):</P> <UL> <LI>C#/Java/JavaScript, React.js, SQL, MySQL, Power Apps, bot frameworks, Power Virtual Agent, mobile app dev</LI> </UL> <P><STRONG>Check with your employer(s) </STRONG>Some employers have policies around employees moonlighting and working on open source projects</P> <P data-unlink="true"> </P> <P>Testimony:<BR /><A href="https://www.youtube.com/watch?v=JQVjOT7DZcU" target="_self" rel="nofollow noopener noreferrer">Company founded through NurseHack! (Youtube Video)</A> <BR /><BR /></P> <P data-unlink="true">Resources that could help prepare you for the hackathon:</P> <P data-unlink="true"><A href="https://github.com/NurseHack4Health/NH4H2021SpringHackathon" target="_self" rel="noopener noreferrer">NurseHack4Health Spring 2021</A><SPAN> </SPAN>(past solutions/presentation) </P> <P> </P> <P>Help build a sustainable nursing workforce for the future. Leverage your tech skills and hack for nurses’ wellbeing.</P> <P><EM>To register and to learn more: </EM><STRONG><EM><A href="https://nursehack4health.org/" target="_blank" rel="noopener nofollow noreferrer">https://nursehack4health.org</A></EM></STRONG></P> Thu, 23 Sep 2021 15:38:01 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/calling-on-developers-for-virtual-hackathon/ba-p/2778977 Anshika Goyal 2021-09-23T15:38:01Z Meet the band backstage at Azure and build https://techcommunity.microsoft.com/t5/azure-developer-community-blog/meet-the-band-backstage-at-azure-and-build/ba-p/2768701 <P><SPAN data-contrast="auto"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AAA Event card.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/311663iA88DC946DA8F1BB5/image-size/large?v=v2&px=999" role="button" title="AAA Event card.png" alt="AAA Event card.png" /></span></SPAN></P> <P> </P> <P><SPAN data-contrast="auto">We know it’s not easy juggling tradeoffs and prioritizing improvements. This is where the </SPAN><A href="https://aka.ms/wellarchitected/framework" target="_blank"><SPAN data-contrast="none">Azure Well-Architected Framework</SPAN></A><SPAN data-contrast="auto"> comes into the picture. </SPAN><SPAN> <BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto">Here’s how we describe it:</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="none">The </SPAN><A href="https://aka.ms/wellarchitected/framework" target="_blank"><SPAN data-contrast="none">Well-Architected Framework</SPAN></A><SPAN data-contrast="none"> is </SPAN><I><SPAN data-contrast="none">a set of guiding tenets that can be used to improve the quality of a workload. The framework consists of five pillars of architecture excellence: Cost Optimization, Operational Excellence, Performance Efficiency, Reliability, and Security. Incorporating these pillars helps produce high-quality, stable, and efficient cloud architecture.</SPAN></I><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">Using the Azure Well-Architected Framework as our guide, we are going to do something we have never done before. On September 23</SPAN><SPAN data-contrast="auto">rd</SPAN><SPAN data-contrast="auto"> online at </SPAN><A href="https://docs.microsoft.com/en-us/learn/tv/" target="_blank"><SPAN data-contrast="none">Learn TV</SPAN></A><SPAN data-contrast="auto">, followed several weeks later around the globe via the </SPAN><A href="https://developer.microsoft.com/reactor/" target="_blank"><SPAN data-contrast="none">Microsoft Reactors</SPAN></A><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="auto"> we’re going to take you </SPAN><STRONG><SPAN data-contrast="auto">behind the scenes at Azure.</SPAN></STRONG><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">Join us for </SPAN><A href="https://aka.ms/WAF-Backstage" target="_blank"><I><SPAN data-contrast="none">Well-Architected: The Backstage Tour</SPAN></I></A><SPAN data-contrast="auto">, a virtual event where you will get five brief peeks at how we power the features that address each of these pillars of the Azure Well-Architected Framework. Not only will you learn how things work behind the curtain, but you’ll also take away some tips and tricks you won’t find anywhere else.</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">Mark Russinovich, Azure Chief Technology Officer, will deliver the opening address to this two hour live event on Learn TV. It will bring you five sessions, each with an opportunity to get your questions answered directly from our speakers.</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">And if you miss this week, don’t worry about it! Register now and we’ll notify you as soon as the recording is available.</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">We hope you can join us - </SPAN><A href="https://aka.ms/WAF-Backstage" target="_blank"><SPAN data-contrast="none">RSVP today!</SPAN></A><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><I><SPAN data-contrast="auto">Please see below for the full list of sessions and their speakers.</SPAN></I><SPAN data-ccp-props="{}"> </SPAN></P> <P aria-level="1"><SPAN data-contrast="none">Keynote </SPAN><SPAN data-ccp-props="{"335559738":240}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Presenter: Mark Russinovich</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true,"335559685":-360,"335559731":360}"> </SPAN></P> <P><SPAN data-contrast="none">Reliability: Bringing Reliability Right to your Front Door </SPAN><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Presenter: Daniel Gicklhorn, Director Content Delivery for Azure.</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto">In this session we’ll go behind the scenes with Azure Front Door and how it leverages global vantage points and Microsoft’s global network to self-heal and optimize user experiences all the way from the edge to the app on Azure.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Security: The Secret Life of a Security Signal </SPAN><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Presenter: Rod Trent, (Senior Security Cloud Advocate), Cloud Advocacy</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">To combat cyber-attacks and protect against urgent threats, Microsoft collects billions of signals from the security ecosystem to create the contextual threat intelligence that’s built into products like Office 365, Windows, and Azure, Defender and Azure Sentinel.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">In this session, follow a single signal through its entire journey - from first detection in the wild to the rules that protect you. Then, we'll show you how to gain direct access to these rules and extend them for your own purposes.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Cost Optimization: Two reasons why you should believe us when we say you can optimize your Azure costs </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Presenters:</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Priyanshi Mittal (PM), Azure Cost Management and Billing</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Ritesh Kini (Senior PM), Azure Cost Optimization</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">David Blank-Edelman (Senior Cloud Advocate), Scalable Content</SPAN></STRONG><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">Azure has many tools and techniques to help customers optimize their cloud spend. In this session, we are going to behind the scenes and look at two of them built into Azure Advisor. There’s some pretty magical stuff based on fascinating research and careful engineering powering this service. We will show you all that plus some direct tips for your own cost optimization efforts.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Operational Excellence: ARM Templates Unplugged: How your resource </SPAN><I><SPAN data-contrast="none">actually</SPAN></I><SPAN data-contrast="none"> gets provisioned </SPAN><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Presenter: </SPAN></STRONG><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Alex Frankel (Senior PM), Azure Deployments </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">David Blank-Edelman (Senior Cloud Advocate), Scalable Content </SPAN></STRONG><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">Reproduceable infrastructure and workloads can be crucial for operational excellence. At some point as you build on Azure you will press into service some ARM templates – either authored directly or through tools like Bicep, Farmer, or PSArm. Ever wonder how we go from a simple template to a not-so-simple set of running resources? We’ll reveal the whole story from end-to-end and in the process show you some tips for working with this key provisioning tool. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Performance Efficiency: Fast & Furious: Optimizing for Quick & Reliable VM Deployments </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Presenter: Sofia Joison (PM), Azure Core Fundamentals</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN> <BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto">Virtual Machines are the building blocks of the cloud. And with something that fundamental, it's important to have a performant and reliable experience. In this session, we will go behind the scenes and learn about Azure's secret sauce to provisioning VMs. We'll share some tips and tricks so you can leverage these capabilities to ensure you get the best experience for all your VM deployment needs.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">We hope you can join us - </SPAN><A href="https://aka.ms/WAF-Backstage" target="_blank"><SPAN data-contrast="none">RSVP today!</SPAN></A><SPAN data-ccp-props="{}"> </SPAN></P> Mon, 20 Sep 2021 21:03:18 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/meet-the-band-backstage-at-azure-and-build/ba-p/2768701 wendywilson 2021-09-20T21:03:18Z New path : Tech resilience https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-path-tech-resilience/ba-p/2749436 <P class="">For many developers, tech-driven fields can be intimidating.</P> <P class=""> </P> <P class="">When you get stuck or lack support, you might end up leaving tech instead of staying in tech and get promoted.</P> <P class=""> </P> <P class=""><STRONG>Consequence</STRONG></P> <P class="">"The result is a smaller and less diverse workforce in tech."</P> <P class=""> </P> <P class=""><STRONG>Feeling of exclusion</STRONG></P> <P>Those who make it past these barriers during their educational journey can end up feeling excluded by workplace cultures that don’t match their own backgrounds and experiences. Far too many talented people avoid choosing or actively decide to leave tech because it can be unwelcoming.</P> <P> </P> <P><STRONG>Solution</STRONG></P> <P>By fostering tech resilience, confidence and mindset, you can grow the needed skills to not only stay in tech but also prepare you for your next position in tech, whether that's a new type of role or one with more managerial responsibility.</P> <P> </P> <P><STRONG>Our mission?</STRONG> To help build a more inclusive future for the tech industry by fostering confidence, resilience, and a sense of belonging.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=0xT4mBgjg0w" align="center" size="custom" width="676" height="676" uploading="false" thumbnail="https://i.ytimg.com/vi/0xT4mBgjg0w/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P> </P> <P>Therefore, we created this learning path <A href="https://docs.microsoft.com/learn/paths/tech-resilience/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/paths/tech-resilience/</A></P> <P> </P> <P>- Develop a growth mindset <A href="https://docs.microsoft.com/learn/modules/develop-growth-mindset/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/develop-growth-mindset/</A></P> <P>- Enhance your self-efficacy, <A href="https://docs.microsoft.com/learn/modules/enhance-self-efficacy/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/enhance-self-efficacy/</A></P> <P>- Cultivate a culture of belongingness, <A href="https://docs.microsoft.com/learn/modules/cultivate-culture-belongingness/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/cultivate-culture-belongingness/</A></P> <P>- Exercise your emotional intelligence, <A href="https://docs.microsoft.com/learn/modules/exercise-your-emotional-intelligence/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/exercise-your-emotional-intelligence/</A></P> <P>- Give and receive effective feedback, <A href="https://docs.microsoft.com/learn/modules/give-receive-effective-feedback/" target="_blank" rel="noopener">https://docs.microsoft.co/learn/modules/give-receive-effective-feedback/</A></P> <P>- Grow your cognitive flexibility, <A href="https://docs.microsoft.com/learn/modules/grow-cognitive-flexibility/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/grow-cognitive-flexibility/</A></P> <P>- Leverage self-regulation to work strategically, <A href="https://docs.microsoft.com/learn/modules/self-regulation-work-strategically/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/self-regulation-work-strategically/</A></P> <P>- Communicate with others strategically through mirroring and coaching, <A href="https://docs.microsoft.com/learn/modules/communicate-strategically-mirror-coach/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/communicate-strategically-mirror-coach/</A></P> <P>- Work with others by practice active listening, <A href="https://docs.microsoft.com/learn/modules/practice-active-listening/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/practice-active-listening/</A></P> <P> </P> Wed, 15 Sep 2021 13:21:21 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-path-tech-resilience/ba-p/2749436 Chris_Noring 2021-09-15T13:21:21Z new Learning path, Start in tech as an intern https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-start-in-tech-as-an-intern/ba-p/2714167 <P>You might be a student or in mid-career and you are starting to think, what if I can get into tech? It's never too late to start in tech, just know that there are ways to build your skills, get noticed and start to work at that new dream job of yours.</P> <P> </P> <P>At first, you might start with an intimidating feeling, where do I even begin, how would I build my skills? There are a lot of guidance to be had and in this learning path we've collected all that guidance for you in three modules.</P> <P> </P> <P><STRONG>First module</STRONG></P> <P>The idea is that your first starts building your skills, then craft a resume. Once you have a resume, you can start to network (or even before having a resume) in places where other tech folks might be.</P> <P> </P> <P><STRONG>Second module</STRONG></P> <P>Lastly, all that leg work hopefully leads to an interview, and here we also inform you of various interviews, questions you might get and how to approve them. </P> <P> </P> <P><STRONG>Third module</STRONG></P> <P>In the last interview, you've landed that coveted intern position and we guide you how to best carry it out </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="career-interview.jpg" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/307431i19E45C5D22141567/image-size/large?v=v2&px=999" role="button" title="career-interview.jpg" alt="career-interview.jpg" /></span></P> <P>Here is the learning path <A title="Start a career in tech" href="https://docs.microsoft.com/en-gb/learn/paths/start-career-in-tech/" target="_self">Start a career in tech</A></P> <P> </P> <P>- <A title="Grow your tech skills and get noticed" href="https://docs.microsoft.com/en-gb/learn/modules/career-get-noticed/" target="_self">Get noticed</A> Grow your tech skills and learn where and how to network, even as a student</P> <P>- <A title="Successfully interview to land an intern position" href="https://docs.microsoft.com/en-gb/learn/modules/career-interview/" target="_self">Successful interviewing</A> prepare for different types of interviews, tech and non tech ones</P> <P>- <A title="Learn how to grow as an intern and maximize your chances to be offered a full-time position" href="https://docs.microsoft.com/en-gb/learn/modules/career-growth/" target="_self">From intern to full time position</A>. Grow in your role as an intern, and turn that into a full-time position.</P> <P> </P> <P>Hear from <A title="Eleanor Lewis on why intern" href="https://www.microsoft.com/en-gb/videoplayer/embed/RE4OPAi?postJsllMsg=true&autoCaptions=en-gb" target="_self">Eleanor Lewis</A>, intern that now works full-time at Microsoft.</P> <P> </P> <P> </P> Tue, 14 Sep 2021 17:35:04 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-start-in-tech-as-an-intern/ba-p/2714167 Chris_Noring 2021-09-14T17:35:04Z Hackathon as a Service with GitHub Actions, Microsoft 365 and Power Platform https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hackathon-as-a-service-with-github-actions-microsoft-365-and/ba-p/2671063 <P>Generally speaking, an off-line hackathon event takes place with people getting together at the same time and place for about two to three nights, intensively. On the other hand, all events have turned into online-only nowadays, and there's no exception for the hackathon events either. To keep the same event experiences, hackathon organisers use many online collaboration tools. In this case, almost the same number of event staff members are necessary. What if you have limited resources and budget and are required to run the online hackathon event?</P> <P> </P> <P>For two weeks, I recently ran an online-only hackathon event called <A href="https://github.com/devrel-kr/HackaLearn/blob/main/README.en.md" target="_blank" rel="noopener">HackaLearn</A> from August 2, 2021. This post is the retrospective of the event from the event organiser's perspective. If anyone is planning a hackathon with a similar concept, I hope this post could be helpful.</P> <P> </P> <H2>The Background</H2> <P> </P> <P>In May 2021 at <A href="https://mybuild.microsoft.com/home?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">//Build</A> Conference, <A href="https://docs.microsoft.com/azure/static-web-apps/overview?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Azure Static Web Apps (ASWA)</A> became generally available. It's relatively newer than the other competitors' ones meaning it is less popular than the others. This HackaLearn event is one of the practices to promote ASWA. The idea was simple. We're not only running a hackathon event but also offering the participants learning experiences with <A href="https://docs.microsoft.com/learn/paths/azure-static-web-apps/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Learn</A> to participants so that they can feel how convenient ASWA is to use. Therefore, all participants can learn ASWA and build their app with ASWA – this was the direction.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-01-en.png" border="0" alt="HackaLearn Banner" /></P> <P> </P> <P>In fact, the first HackaLearn event was held in Israel, and other countries in the EMEA region have been running this event. I also borrowed the concept and localised the format for Korean uni students. With support from <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Learn Student Ambassadors (MLSA)</A> and <A href="https://githubcampus.expert" target="_blank" rel="noopener">GitHub Campus Experts (GCE)</A>, they review the participants pull requests and external field experts were invited as mentors and ran online mentoring sessions.</P> <P> </P> <H2>The Problems</H2> <P> </P> <P>As mentioned above, running a hackathon event requires intensive, dedicated and exclusive resources, including time, people and money. However, none of them was adequate. I've got very limited resources, and even I couldn't dedicate myself to this event either. I was the only one who could operate the event. Both <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">MLSAs</A> and <A href="https://githubcampus.expert" target="_blank" rel="noopener">GCEs</A> were dedicated for PR reviews and mentors for mentoring sessions. Automating all the event operation processes was the only answer for me.</P> <P> </P> <BLOCKQUOTE> <P>How can I automate all the things?</P> </BLOCKQUOTE> <P> </P> <P>For me, finding out the solution is the key focus area throughout this event.</P> <P> </P> <H2>The Constraints</H2> <P> </P> <P>There were a few constraints to be considered.</P> <P> </P> <UL> <LI> <P><STRONG>No Website for Hackathon</STRONG></P> <P>:police_car_light:</img> There was no website for HackaLearn. Usually, the event website is built on a one-off basis, which seems less economical.<BR />:backhand_index_pointing_right:</img> Therefore, I decided to use the GitHub repository for the event because it offers many built-in features such as Project, Discussions, Issues, Wiki, etc.</P> </LI> <LI> <P><STRONG>No Place for Participant Registration</STRONG></P> <P>:police_car_light:</img> There was no registration form.<BR />:backhand_index_pointing_right:</img> Therefore, I decided to use <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A>.</P> </LI> <LI> <P><STRONG>No Database for Participant Management</STRONG></P> <P>:police_car_light:</img> There was no database for the participant management to record their challenge progress.<BR />:backhand_index_pointing_right:</img> Therefore, instead of provisioning a database instance, I decided to use <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>.</P> </LI> <LI> <P><STRONG>No Dashboard for Teams and Individuals Progress Tracking</STRONG></P> <P>:police_car_light:</img> There was no dashboard to track each team's and each participant's progress.<BR />:backhand_index_pointing_right:</img> So instead, I decided to use their team page by merging their pull requests.</P> </LI> </UL> <P> </P> <P>I've defined the overall business process workflow in the following sequence diagrams. All I needed was to sort out those limitations stated above. To me, it was <A href="https://powerplatform.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Platform</A>, <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A> and <A href="https://www.microsoft.com/microsoft-365?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft 365</A> with minimal coding efforts and maximum outcomes.</P> <P> </P> <H2>The Plans for Process Automation</H2> <P> </P> <P>All of sudden, the limitations above have become opportunities to experiment with the new process automation!</P> <P> </P> <UL> <LI>The event itself uses the GitHub repository, meaning all PRs and issues can be handled by <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A>.</LI> <LI><A href="https://www.microsoft.com/microsoft-365?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft 365</A> services like <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A> and <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A> are used for data input and storage.</LI> <LI><A href="https://flow.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Automate</A> is one of the <A href="https://powerplatform.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Platform</A> services and is used for the core of process automation.</LI> </UL> <P> </P> <P>So, the GitHub repository and Microsoft 365 services are fully integrated with GitHub Actions workflows and Power Automate workflows. As a result, I was able to save a massive amount of time and money with them.</P> <P> </P> <H2>The Result – Participant Registration</H2> <P> </P> <P>The first automation process I worked on was about storing data. The participant details need to be saved in <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>. When a participant enters their details through <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A>, then a <A href="https://flow.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Automate</A> workflow is triggered to process the registration details. At the same time, the workflow calls a GitHub Actions workflow to create a team page for the participant. Here's the simple sequence diagram describing this process.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/registration-en.png" border="0" alt="Registration Sequence Diagram" /></P> <P> </P> <P>The overall process is divided into two parts – one to process participant details in the Power Automate workflow, and the other to process the details in the GitHub Actions workflow.</P> <P> </P> <H3>Power Automate Workflow</H3> <P> </P> <P>Let's have a look at the Power Automate part. When a participant registers through <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A>, the form automatically triggers a Power Automate workflow. The workflow checks the email address whether the participant has already registered or not. If the email doesn't exist, the participant details are stored to <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-05.png" border="0" alt="Registration Flow 1" /></P> <P> </P> <P>Then it generates a team page. Instead of creating it directly from the Power Automate workflow, it builds the page content and sends it to the GitHub Actions workflow. The <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#workflow_dispatch" target="_blank" rel="noopener"><CODE>workflow_dispatch</CODE></A> event is triggered for this action.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-06.png" border="0" alt="Registration Flow 2" /></P> <P> </P> <P>Finally, the workflow sends a confirmation email. In terms of the name, participants may register themselves with English names or Korean names. Therefore, I need logic to check the participant's name. If the participant name is written in English, it should be <CODE>[Given Name] [Surname]</CODE> (with a space; eg. Justin Yoo). If it's written in Korean, it should be <CODE>[Surname][Given Name]</CODE> (without a space; eg. 유저스틴). The red-boxed actions are responsible for identifying the participant's name. It may be simplified by adopting a custom connector with an Azure Functions endpoint.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-07.png" border="0" alt="Registration Flow 3" /></P> <P> </P> <H3>GitHub Actions Workflow</H3> <P> </P> <P>As mentioned above, the Power Automate workflow calls a GitHub Actions workflow to generate a team page. Let's have a look. The <CODE>workflow_dispatch</CODE> event takes the input details from Power Automate, and they are <CODE>teamName</CODE> and <CODE>content</CODE>.</P> <P> </P> <PRE>name: On Team Page Requested on: workflow_dispatch: inputs: teamName: description: The name of team required: true default: Team_HackaLearn content: description: The content of the file to be created required: true default: Hello HackaLearn </PRE> <P> </P> <P>Since GitHub <A href="https://github.com/marketplace?type=actions" target="_blank" rel="noopener">Marketplace</A> has various types of Actions, I can simply choose one to create the team page, commit the change and push it back to the repository.</P> <P> </P> <PRE> - name: Create team page uses: DamianReeves/write-file-action@master with: path: "./teams/${{ github.event.inputs.teamName }}.md" contents: ${{ github.event.inputs.content }} write-mode: overwrite - name: Commit team page shell: bash run: | git config --local user.email "hackalearn.korea@outlook.com" git config --local user.name "HackaLearn Korea" git add ./teams/\* --force git commit -m "Team: ${{ github.event.inputs.teamName }} added" - name: Push team page uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: ${{ github.ref }} </PRE> <P> </P> <P>Now, I've got the registration process fully automated. Let's move on.</P> <P> </P> <H2>The Result – Challenges Update</H2> <P> </P> <P>In this HackaLearn event, each participant was required to complete six challenges. Every time they finish one challenge, they MUST update their team page and create a PR to reflect their progress. As there are not many differences between the challenges, I'm going to use the Social Media Challenge as an example.</P> <P> </P> <P>Here's the simple sequence diagram describing the process.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/challenge-social-en.png" border="0" alt="Social Media Challenge Sequence Diagram" /></P> <P> </P> <OL> <LI>After the participant posts a post to their social media, they update their team page and raise a PR. Then, a GitHub Actions workflow labels the PR with <CODE>review-required</CODE> and assigns a reviewer.</LI> <LI>The assigned reviewer checks the social media post whether it's appropriately hashtagged with <CODE>#hackalearn</CODE> and <CODE>#hackalearnkorea</CODE>.</LI> <LI>Once confirmed, the reviewer adds the <CODE>review-completed</CODE> label to the PR. Then another GitHub Actions workflow automatically removes the <CODE>review-required</CODE> label from the PR.</LI> <LI>The reviewer completes the review by leaving a comment of <CODE>/socialsignoff</CODE>, and the comment triggers another GitHub Actions workflow. The workflow calls the Power Automate workflow that updates the record on <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A> with the challenge progress.</LI> <LI>The Power Automate workflow calls back to another GitHub Actions workflow to add <CODE>record-updated</CODE> and <CODE>completed-social</CODE> labels to the PR and remove the <CODE>review-completed</CODE> labels from it.</LI> <LI>If there is an issue while updating the record, the GitHub Actions workflow adds the <CODE>review-required</CODE> label so that the assigned reviewer starts review again.</LI> </OL> <P> </P> <H3>GitHub Actions Workflow</H3> <P> </P> <P>As described above, there are five GitHub Actions workflow used to handle this request.</P> <P> </P> <H4>Challenge Update PR</H4> <P> </P> <P>The GitHub Actions workflow is triggered by the participant requesting a new PR. The event triggered is <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#pull_request_target" target="_blank" rel="noopener"><CODE>pull_request_target</CODE></A>, and it's only activated when the changes occur under the <CODE>teams</CODE> directory.</P> <P> </P> <PRE>name: On Challenge Submitted on: pull_request_target: types: - opened branches: - main paths: - 'teams/**/*.md' </PRE> <P> </P> <P>If the PR is created later than the due date and time, the PR should not be accepted. Therefore, A PowerShell script is used to check the due date automatically. Since the PR's <CODE>created_at</CODE> value is the UTC value, it should be converted to the Korean local time, included in the PowerShell script.</P> <P> </P> <PRE>jobs: labelling: name: 'Add a label on submission: review-required' runs-on: ubuntu-latest steps: - name: Get PR date/time id: checkpoint shell: pwsh run: | $tz = [TimeZoneInfo]::FindSystemTimeZoneById("Asia/Seoul") $dateSubmitted = [DateTimeOffset]::Parse("${{ github.event.pull_request.created_at }}") $offset = $tz.GetUtcOffset($dateSubmitted) $dateSubmitted = $dateSubmitted.ToOffset($offset) $dateDue = $([DateTimeOffset]::Parse("2021-08-16T00:00:00.000+09:00")) $isOverdue = "$($dateSubmitted -gt $dateDue)".ToLowerInvariant() $dateSubmittedValue = $dateSubmitted.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz") $dateDueValue = $dateDue.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz") echo "::set-output name=dateSubmitted::$dateSubmittedValue" echo "::set-output name=dateDue::$dateDueValue" echo "::set-output name=isOverdue::$isOverdue" </PRE> <P> </P> <P>If the PR is over the due, it's immediately rejected and closed.</P> <P> </P> <PRE> - name: Add a label - Overdue if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} uses: buildsville/add-remove-label@v1 with: token: "${{ secrets.GITHUB_TOKEN }}" label: 'OVERDUE-SUBMIT' type: add - name: Comment to PR - Overdue if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} uses: bubkoo/auto-comment@v1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pullRequestOpened: | 👋🏼 @{{ author }} 님! * PR 제출 시각: ${{ steps.checkpoint.outputs.dateSubmitted }} * PR 마감 시각: ${{ steps.checkpoint.outputs.dateDue }} 안타깝게도 제출하신 PR은 마감 기한인 ${{ steps.checkpoint.outputs.dateDue }}을 넘기셨습니다. 😭 따라서, 이번 HackaLearn 이벤트에 반영되지 않습니다. 그동안 HackaLearn 이벤트에 참여해 주셔서 감사 드립니다. 다음 기회에 다시 만나요! - name: Close PR - Overdue if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} uses: superbrothers/close-pull-request@v3 with: comment: "제출 기한 종료" </PRE> <P> </P> <P>If it's before the due, label the PR, leave a comment and randomly assign a reviewer.</P> <P> </P> <PRE> - name: Add a label if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} uses: actions/labeler@v3 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" configuration-path: '.github/labeler.yml' - name: Comment to PR if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} uses: bubkoo/auto-comment@v1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pullRequestOpenedReactions: 'rocket, +1' pullRequestOpened: > 👋🏼 @{{ author }} 님! 챌린지 완료 PR를 생성해 주셔서 감사합니다! 🎉 참가자님의 해커톤 완주를 응원해요! 💪🏼 PR 템플릿 작성 가이드라인을 잘 준수하셨는지 확인해주세요. 최대한 빠르게 리뷰하겠습니다! 😊 🔹 From. HackaLearn 운영진 일동 🔹 - name: Randomly assign a staff if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} uses: gerardabello/auto-assign@v1.0.1 with: github-token: "${{ secrets.GITHUB_TOKEN }}" number-of-assignees: 1 assignee-pool: "${{ secrets.PR_REVIEWERS }}" </PRE> <P> </P> <H4>Challenge Review Completed</H4> <P> </P> <P>The assigned reviewer confirms the challenge and labels the result. This labelling action triggers the following GitHub Actions workflow.</P> <P> </P> <PRE>name: On Challenge Labelled on: pull_request_target: types: - labeled - unlabeled jobs: labelling: name: 'Update a label' runs-on: ubuntu-latest steps: - name: Respond to label uses: dessant/label-actions@v2 with: process-only: prs </PRE> <P> </P> <H4>Challenge Review Approval</H4> <P> </P> <P>Commenting like <CODE>/socialsignoff</CODE> for the social media post challenge automatically triggers the following GitHub Actions workflow, with the event of <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#issue_comment" target="_blank" rel="noopener"><CODE>issue_comment</CODE></A>.</P> <P> </P> <PRE>name: On Challenge Review Commented on: issue_comment: types: - created </PRE> <P> </P> <P>The first step of this workflow is to check whether the commenter is the assigned reviewer, then find out which challenge is approved. The <CODE>review-completed</CODE> label MUST exist on the PR, and the commenter MUST be in the reviewer list (<CODE>secrets.PR_REVIEWERS</CODE>).</P> <P> </P> <PRE>env: PR_REVIEWERS: ${{ secrets.PR_REVIEWERS }} jobs: signoff: if: ${{ github.event.issue.pull_request }} name: 'Sign-off challenge' runs-on: ubuntu-latest steps: - name: Get checkpoints id: checkpoint shell: pwsh run: | $hasValidLabel = "${{ contains(github.event.issue.labels.*.name, 'review-completed') }}" $isCommenterAssignee = "${{ github.event.comment.user.login == github.event.issue.assignee.login }}" $isValidCommenter = "${{ contains(env.PR_REVIEWERS, github.event.comment.user.login) }}" $isAswaSignoff = "${{ github.event.comment.body == '/aswasignoff' }}" $isGhaSignoff = "${{ github.event.comment.body == '/ghasignoff' }}" $isSocialSignoff = "${{ github.event.comment.body == '/socialsignoff' }}" $isAppSignoff = "${{ github.event.comment.body == '/appsignoff' }}" $isRepoSignoff = "${{ github.event.comment.body == '/reposignoff' }}" $isRetroSignoff = "${{ github.event.comment.body == '/retrosignoff' }}" $timestamp = "${{ github.event.comment.created_at }}" echo "::set-output name=hasValidLabel::$hasValidLabel" echo "::set-output name=isCommenterAssignee::$isCommenterAssignee" echo "::set-output name=isValidCommenter::$isValidCommenter" echo "::set-output name=isAswaSignoff::$isAswaSignoff" echo "::set-output name=isGhaSignoff::$isGhaSignoff" echo "::set-output name=isSocialSignoff::$isSocialSignoff" echo "::set-output name=isAppSignoff::$isAppSignoff" echo "::set-output name=isRepoSignoff::$isRepoSignoff" echo "::set-output name=isRetroSignoff::$isRetroSignoff" echo "::set-output name=timestamp::$timestamp" </PRE> <P> </P> <P>If all conditions are met, the workflow takes one action based on the type of the challenge. Each action calls a Power Automate workflow to update the record on <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>, send a confirmation email, and calls back to another GitHub Actions workflow.</P> <P> </P> <PRE>- name: Record challenge ASWA if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isAswaSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "aswa", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge GHA if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isGhaSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "gha", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge SOCIAL if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isSocialSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "social", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge APP if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isAppSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "app", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge REPO if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isRepoSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "repo", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge RETRO if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isRetroSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "retro", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' </PRE> <P> </P> <H4>Challenge Complete or Further Review</H4> <P> </P> <P>This GitHub Actions workflow completes the challenge, triggered by a Power Automate workflow through the <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#workflow_dispatch" target="_blank" rel="noopener"><CODE>workflow_dispatch</CODE></A> event. Power Automate sends values of <CODE>prId</CODE>, <CODE>labelsToAdd</CODE>, <CODE>labelsToRemove</CODE> and <CODE>isMergeable</CODE>.</P> <P> </P> <PRE>name: On Challenge Completed on: workflow_dispatch: inputs: prId: description: PR ID required: true default: '' labelsToAdd: description: The comma delimited labels to add required: true default: record-updated labelsToRemove: description: The comma delimited labels to remove required: true default: review-completed isMergeable: description: The value indicating whether the challenge is mergeable or not. required: true default: 'false' </PRE> <P> </P> <P>The first action is to add labels to the PR and remove labels from the PR.</P> <P> </P> <PRE>jobs: update_labels: name: 'Update labels' runs-on: ubuntu-latest steps: - name: Update labels on PR shell: pwsh run: | $headers = @{ "Authorization" = "token ${{ secrets.GITHUB_TOKEN }}"; "User-Agent" = "HackaLearn Bot"; "Accept" = "application/vnd.github.v3+json" } $owner = "devrel-kr" $repository = "HackaLearn" $issueId = "${{ github.event.inputs.prId }}" $labelsToAdd = "${{ github.event.inputs.labelsToAdd }}" -split "," $body = @{ "labels" = $labelsToAdd } $url = "https://api.github.com/repos/$owner/$repository/issues/$issueId/labels" Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $($body | ConvertTo-Json) $labelsToRemove = "${{ github.event.inputs.labelsToRemove }}" -split "," $labelsToRemove | ForEach-Object { $label = $_; $url = "https://api.github.com/repos/$owner/$repository/issues/$issueId/labels/$label"; Invoke-RestMethod -Method Delete -Uri $url -Headers $headers } </PRE> <P> </P> <P>And finally, this action merges the PR. If there's an error on the Power Automate workflow side, the <CODE>isMeargeable</CODE> value MUST be <CODE>false</CODE>, meaning it won't execute the merge action.</P> <P> </P> <PRE> merge_pr: name: 'Merge PR' needs: update_labels runs-on: ubuntu-latest steps: - name: Merge PR if: ${{ github.event.inputs.isMergeable == 'true' }} shell: pwsh run: | $headers = @{ "Authorization" = "token ${{ secrets.WORKFLOW_DISPATCH_TOKEN }}"; "User-Agent" = "HackaLearn Bot"; "Accept" = "application/vnd.github.v3+json" } $owner = "devrel-kr" $repository = "HackaLearn" $issueId = "${{ github.event.inputs.prId }}" $url = "https://api.github.com/repos/$owner/$repository/pulls/$issueId" $pr = Invoke-RestMethod -Method Get -Uri $url -Headers $headers $sha = $pr.head.sha $title = "" $message = "" $merge = "squash" $body = @{ "commit_title" = $title; "commit_message" = $message; "sha" = $sha; "merge_method" = $merge; } $url = "https://api.github.com/repos/$owner/$repository/pulls/$issueId/merge" Invoke-RestMethod -Method Put -Uri $url -Headers $headers -Body $($body | ConvertTo-Json) </PRE> <P> </P> <H3>Power Automate Workflow</H3> <P> </P> <P>The challenge approval workflow calls this Power Automate workflow. Firstly, it checks the type of challenges. If no challenge is identified, it does nothing.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-08.png" border="0" alt="Challenge Update Flow 1" /></P> <P> </P> <P>If the challenge is linked to the registered participant's GitHub ID, update the record on <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>; otherwise, do nothing.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-09.png" border="0" alt="Challenge Update Flow 2" /></P> <P> </P> <P>Finally, it sends a confirmation email using a different email template based on the number of challenges completed.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-10.png" border="0" alt="Challenge Update FLow 3" /></P> <P> </P> <H2>The Others: Other Power Automate Workflows</H2> <P> </P> <P>Previously described Power Automate workflows are triggered by GitHub Actions for integration. However, there are other workflows only for management purposes. As most processes are similar to each other, I'm not going to describe them all. Instead, it's the total number of workflows that I used for the event, which is 15 in total.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-04.png" border="0" alt="List of Power Automate Workflows" /></P> <P> </P> <P>Now all my business processes are fully automated. As an operator, I can focus on questions and PR reviews, but nothing else.</P> <P> </P> <H2>The Stats</H2> <P> </P> <P>The HackaLearn even was over! Here are some numbers related to this HackaLearn event.</P> <P> </P> <UL> <LI><CODE>14</CODE>: Number of days for HackaLearn</LI> <LI><CODE>171</CODE>: Total number of participants</LI> <LI><CODE>62</CODE>: Total number of participants who completed Cloud Skills Challenge</LI> <LI><CODE>21</CODE>: Total number of teams who uploaded social media posts</LI> <LI><CODE>17</CODE>: Total number of teams who completed building Azure Static Web Apps</LI> <LI><CODE>16</CODE>: Total number of teams who completed provided their GitHub repository</LI> <LI><CODE>20</CODE>: Total number of teams who published their blog post as a retrospective</LI> <LI><CODE>13</CODE>: Total number of teams who completed all six challenges</LI> </UL> <P> </P> <H2>The Lessons Learnt</H2> <P> </P> <P>Surely, there are many spaces for future improvement. What I've learnt from the automation exercise are:</P> <P> </P> <UL> <LI> <P><STRONG>Do not assume the way participants create their PRs is expected</STRONG></P> <P>:backhand_index_pointing_right:</img> The review automation process should be as flexible as possible.</P> </LI> <LI> <P><STRONG>Make the review process as simple as possible</STRONG></P> <P>:backhand_index_pointing_right:</img> The reviewers should only be required to focus on the PR, not anything else.</P> </LI> <LI> <P><STRONG>Reviewer should be assigned to a team instead of individual PRs</STRONG></P> <P>:backhand_index_pointing_right:</img> If a reviewer is assigned to a team, the chance for merge conflicts will dramatically decrease.</P> </LI> <LI> <P><STRONG>Make Power Automate workflows as modular as possible</STRONG></P> <P>:backhand_index_pointing_right:</img> There are many similar sequence of actions across many workflows.<BR />:backhand_index_pointing_right:</img> They can be modularised into either sub-workflows or custom APIs through custom connectors.</P> </LI> </UL> <P> </P> <H2>The Side Events</H2> <P> </P> <P>During the event, we ran live hands-on workshops for <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A> and <A href="https://docs.microsoft.com/azure/static-web-apps/overview?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Azure Static Web Apps</A> led by a <A href="https://githubcampus.expert" target="_blank" rel="noopener">GCE</A> and an <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">MLSA</A> respectively.</P> <P> </P> <UL> <LI> <P>Live Hands-on: GitHub Actions (in Korean)</P> <P><IFRAME src="https://www.youtube.com/embed/e_elLW6uNSc" width="710" height="399" allowfullscreen="allowfullscreen" loading="lazy"></IFRAME></P> </LI> <LI> <P>Live Hands-on: Azure Static Web Apps (in Korean)</P> <P><IFRAME src="https://www.youtube.com/embed/Hxkv6AjAisY" width="710" height="399" allowfullscreen="allowfullscreen" loading="lazy"></IFRAME></P> </LI> <LI> <P>Live Hands-on: Azure Static Web Apps with Headless CMS (in Korean)</P> <P><IFRAME src="https://www.youtube.com/embed/x3j3mDblqMY" width="710" height="399" allowfullscreen="allowfullscreen" loading="lazy"></IFRAME></P> </LI> </UL> <P> </P> <HR /> <P> </P> <P>So far, I summarised what I've learnt from this event and what I've done for workflow automation, using <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A>, <A href="https://www.microsoft.com/microsoft-365?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft 365</A> and <A href="https://flow.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Automate</A>. Although there are lots of spaces to improve, I managed to run the online hackathon event with a fully automated process. I can now do it again in the future.</P> <P> </P> <P>Specially thanks to <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">MLSAs</A> and <A href="https://githubcampus.expert" target="_blank" rel="noopener">GCEs</A> to review all the PRs, and mentors who answered questions from participants. Without them, regardless of the fully automated workflows, this event wouldn't be successfully running.</P> <P> </P> <P style="text-align: center;">This article was originally published on <A href="https://devkimchi.com/2021/08/20/running-hackathon-by-yourself-with-gha-m365-and-pp/" target="_blank" rel="noopener">Dev Kimchi</A>.</P> Mon, 23 Aug 2021 00:00:00 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hackathon-as-a-service-with-github-actions-microsoft-365-and/ba-p/2671063 justinyoo 2021-08-23T00:00:00Z New module: Build Serverless apps with Azure and Go https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-build-serverless-apps-with-azure-and-go/ba-p/2662657 <P><SPAN>Serverless architecture is a type of application development that allows you to run logic in the cloud without having to worry about building server infrastructure. Azure Functions implements a serverless architecture that runs your code on demand without requiring you to manually provision servers.</SPAN></P> <P> </P> <P><SPAN>To author Azure Functions in Go or Rust, for example, you use a feature called custom handlers. Custom handlers allow you to bring almost any language to Azure Functions.</SPAN></P> <P> </P> <H2 id="what-are-custom-handlers">What are custom handlers?</H2> <P>At its core, a custom handler is a web server. The web server receives events from the Functions host. You then have an opportunity to write code in your preferred language to respond to the events.</P> <P>With custom handlers, you can use any language that supports HTTP primitives. That's nearly any language.</P> <P> </P> <H2>An Azure Function app using Go</H2> <P> </P> <P>To create such an app, you only need to listen to HTTP events + make some minor configurations. Here's an example of what the code looks like:</P> <P> </P> <P> </P> <LI-CODE lang="bash">package main import ( "fmt" "io/ioutil" "log" "net/http" "os" ) func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { w.Write([]byte("hello world")) } else { body, _ := ioutil.ReadAll(r.Body) w.Write(body) } } func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() // mux.HandleFunc("/api/hello", helloHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }</LI-CODE> <P> </P> <P> </P> <P>To learn more about how to configure the app properly and work with things like message queues, have a look at this module</P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/serverless-go/" target="_blank" rel="noopener">Build serverless apps with Go and custom handlers - Learn | Microsoft Docs</A></P> <P> </P> Fri, 03 Dec 2021 18:53:58 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-build-serverless-apps-with-azure-and-go/ba-p/2662657 Chris_Noring 2021-12-03T18:53:58Z API Management, Power Platform, & Teams Better Together https://techcommunity.microsoft.com/t5/azure-developer-community-blog/api-management-power-platform-amp-teams-better-together/ba-p/2642915 <P aria-level="2"><STRONG><SPAN data-contrast="none">API Management, Power Platform, & Teams Better Together</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P aria-level="2"><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure demonstrates the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘API Management, Power Platform & Teams: Better Together.’</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">In this blog I will briefly recap </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, providing an overview of Power Platform Development patterns, an overview of Azure API Management, and Geetha Sivasailam’s demo of API Management’s integration with Power Platform.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P aria-level="2"><STRONG><SPAN data-contrast="none">What is Low-code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1628801638874.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302877i1AC48058FF6D4C09/image-size/large?v=v2&px=999" role="button" title="riduncan_0-1628801638874.png" alt="riduncan_0-1628801638874.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees track incoming inventory.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">To learn more, visit the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">LCAD on Azure page</SPAN></A><SPAN data-contrast="none">, and to walk through the aforementioned scenario try the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank"><SPAN data-contrast="none">LCAD on Azure guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_1-1628801638894.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302879i4E2C3ECC5C917E72/image-size/medium?v=v2&px=400" role="button" title="riduncan_1-1628801638894.jpeg" alt="riduncan_1-1628801638894.jpeg" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Power Platform Development Patterns</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Expounding on the explanation of low code application development on Azure, there are other ways to build low code applications. Below you will see 3 infographics, the first demonstrates the out-of-box capabilities of Power Platform. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The “clients” are the devices on which the end user consumes the UI and logic, typically a web and mobile device. The UI and logic are built in Power Apps and Power Automate, these are the canvas apps and workflow screens that you will see in Geetha’s demo.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The UI and logic are built upon the data either stored in Dataverse or connected to 1</SPAN><SPAN data-contrast="auto">st</SPAN><SPAN data-contrast="auto"> and 3</SPAN><SPAN data-contrast="auto">rd</SPAN><SPAN data-contrast="auto"> party services such as SharePoint, Office 365, and Twitter as seen below. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1628801638896.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302878iA662FE39CF862134/image-size/large?v=v2&px=999" role="button" title="riduncan_2-1628801638896.png" alt="riduncan_2-1628801638896.png" /></span></P> <P><SPAN data-contrast="auto">However, as alluded to in the opening section, there are times professional development is necessary. This is typically because the low code application requires connectivity that doesn’t come out of the box. These are what are referred to as custom connectors.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">There are 5 steps to building a custom connector. First is building and securing your API, describing that API and defining the connector, using your connector, and if you feel inclined you can share and certify that connector.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">If you’re looking to learn how to build a custom connector inside a Power App, check out the documentation on </SPAN><A href="https://docs.microsoft.com/en-us/connectors/custom-connectors/define-blank" target="_blank"><SPAN data-contrast="none">Create a custom connector from scratch | Microsoft Docs.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1628801638898.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302881i660F447BC71F54E7/image-size/large?v=v2&px=999" role="button" title="riduncan_3-1628801638898.png" alt="riduncan_3-1628801638898.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, one of the ways Microsoft is enabling low code application development to be leveraged further you can use Power Apps and Power Automate in Teams. Custom connectors can be exposed to apps in Teams via Azure API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">To build the API Management connector from scratch you create a test API, add an operation to the test API, add inbound policy to mock API response, add definition for API response schema, secure API Management with subscription keys, export API management as a custom connector to a Teams environment and consume the API from Power Apps & Power Automate in the same Teams’ environment.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_5-1628801638899.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302880i529BA1F8E84A3AA9/image-size/large?v=v2&px=999" role="button" title="riduncan_5-1628801638899.png" alt="riduncan_5-1628801638899.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">If you already have Teams subscriptions, Power Apps licenses, and Azure API Management subscriptions there is no additional cost to import your custom connectors in Teams. </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="APIM-to-Teams.gif" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302887i96D8DDB62A37ADEF/image-size/large?v=v2&px=999" role="button" title="APIM-to-Teams.gif" alt="APIM-to-Teams.gif" /></span></SPAN></P> <P> </P> <P> </P> <P> </P> <P><SPAN data-contrast="auto">This integration enables the end user to access UI and Logic easier and faster than before.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Azure API Management Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">In this webinar Geetha does a great job covering the benefits of Azure API Management. For those unfamiliar with Azure API Management, it is a SaaS solution for controlling access and governance nearly maintenance free.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">It allows you to manage thousands of APIs and backend services, maintenance free, products evolving endpoints evolving you can tweak them. Rather than trying to wrap and maintain APIs you can focus on developing the APIs.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto"> For more information on Azure API Management look at the infographic below and check out Geetha’s </SPAN><A href="https://channel9.msdn.com/Shows/POWERful-Devs/Geetha-Sivasailam-APIM-Power-Platform--Teams-Better-Together" target="_blank"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="auto"> on the POWERful Devs show on Channel 9.</SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_6-1628801638902.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302883i5D0A8F5B524B77DF/image-size/large?v=v2&px=999" role="button" title="riduncan_6-1628801638902.png" alt="riduncan_6-1628801638902.png" /></span></P> <P><STRONG><SPAN data-contrast="auto">Build an Azure APIM Connector and Integration into Power Platform Demo</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Geetha’s demo covers building an APIM connector from scratch in API Management and walks through the perspective of a citizen or pro developer who wants to proceed with implementation and testing of API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The demo covers a scenario in which the API façade has been designed, but the actual back-end implementation will come in later or is being developed in parallel.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">She answers questions such as “how can you mockup API responses and still work with your apps and flow implementation?” “How can you expose a mocked API via APIM as a connector and consume that?” Taking you through how to connect a custom connector in Power Apps and Power Automate.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">She also uses an API service to show the different ways you can create an API and either start from a blank API or start from a definition. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">When starting with a definition you can use an Open API definition, WADL, or WSDL. However, in this demo she shows how to start from a blank API. She subsequently shows the APIMSandbox, shown below.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_7-1628801638904.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302884i1D424C27E32C3C8A/image-size/large?v=v2&px=999" role="button" title="riduncan_7-1628801638904.png" alt="riduncan_7-1628801638904.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto"> In the frontend, she has a “get” action, and demonstrates how to mock the get request with a sample mock text, specifying a “mocktext” definition rather than the raw json you would get otherwise. The inbound processing, outbound processing, and backend are where you can specify and define policies.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_8-1628801638906.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302885i2706824190DCFF60/image-size/large?v=v2&px=999" role="button" title="riduncan_8-1628801638906.png" alt="riduncan_8-1628801638906.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Afterward, Geetha shows how to export the API into Power Apps or Power Automate. All you must do is select your Teams’ environment, specify a name for it and export it.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">She concludes by demonstrating how to consume the API in Power Automate, but that same API can be consumed in Power Apps as well.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_9-1628801638905.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302886iED4C68C493B1F7F3/image-size/large?v=v2&px=999" role="button" title="riduncan_9-1628801638905.png" alt="riduncan_9-1628801638905.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG></P> <P><SPAN data-contrast="none">Make sure to watch the </SPAN><A href="https://channel9.msdn.com/Shows/POWERful-Devs/Geetha-Sivasailam-APIM-Power-Platform--Teams-Better-Together" target="_blank"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="none"> on Channel 9 subscribe to the POWERful Devs channel to learn more about Power Platform and Azure integrations. Moreover, look out for news about the POWERful Devs conference this September which will cover the roles of citizen developers, professional developers, and fusion teams.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Resources</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Channel 9: POWERful Devs link</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://channel9.msdn.com/Shows/POWERful-Devs/Geetha-Sivasailam-APIM-Power-Platform--Teams-Better-Together" target="_blank"><SPAN data-contrast="none">Geetha Sivasailam - APIM, Power Platform & Teams Better Together | POWERful Devs | Channel 9 </SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Low Code Application Development on Azure</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN> <BR /></SPAN><A href="https://azure.microsoft.com/en-us/products/powerapps/" target="_blank"><SPAN data-contrast="none">Microsoft Power Apps on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">LCAD on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Learning Resources</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="http://aka.ms/fusiondevpath" target="_blank"><SPAN data-contrast="none">Fusion Development learning path</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_blank"><SPAN data-contrast="none">Fusion Development E-book</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://aka.ms/ppcvscode" target="_blank"><SPAN data-contrast="none">Power Platform Visual Studio Extension</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> Thu, 12 Aug 2021 21:31:50 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/api-management-power-platform-amp-teams-better-together/ba-p/2642915 riduncan 2021-08-12T21:31:50Z Build Custom Apps with Power Apps Component Framework https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-custom-apps-with-power-apps-component-framework/ba-p/2588515 <P aria-level="2"><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘Build Custom Power Apps with Power Apps Component Framework.’</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In this blog I will briefly recap </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, provide an overview of how to build a code component, and how to add a PCF to a Power App.</SPAN></P> <P> </P> <P aria-level="2"><STRONG><SPAN data-contrast="none">What is Low-code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1627332157351.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298493i043FCD2B1E002D5D/image-size/large?v=v2&px=999" role="button" title="riduncan_0-1627332157351.png" alt="riduncan_0-1627332157351.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees track incoming inventory.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">To learn more, visit the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure page</SPAN></A><SPAN data-contrast="none">, and to walk through the aforementioned scenario try the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_1-1627332157359.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298494i9BBBE1E2B225B65F/image-size/large?v=v2&px=999" role="button" title="riduncan_1-1627332157359.jpeg" alt="riduncan_1-1627332157359.jpeg" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">How to Build a Code Component</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">Power Component Frameworks are custom code components that extend your application when out-of-the-box connectors don’t fully meet your needs. These code components are reusable that can be leveraged across Power Apps applications.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">These components are all HTML or JavaScript but can support React and AngularJS as well. For those interested after reading this blog and watching the webinar, there is a PCF gallery that houses PCFs made by Microsoft developers and the Power Apps community, for any developer to leverage.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Feel free to add your own PCFs to the </SPAN><A href="https://pcf.gallery/" target="_blank" rel="noopener"><SPAN data-contrast="none">gallery!</SPAN></A></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Code components consist of three elements:</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">First is the manifest, an XML document that describes the meta data for the component.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Second is component implementation. To implement the component, the metadata is stored in the index.ts, also housing the logic. Additionally, there is a lifecycle to interact with the Power Apps component or framework.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Therefore, some methods will need to be created to control the lifecycle of the code component. Those methods are created when you “init” the project through the CLI.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Third are the resources; tags in the manifest that refer to the resource that the component requires to implement its’ visualization. Examples are css, code, img, html, and resx.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">To better understand the PCF architecture below is an infographic describing the four standard methods created for you when you “init” the project through the CLI.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1627332157361.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298495i689358527821CA7B/image-size/large?v=v2&px=999" role="button" title="riduncan_2-1627332157361.png" alt="riduncan_2-1627332157361.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">The next infographic depicts how the methods are invoked through a Framework Runtime process in a standardized life cycle.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1627332157363.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298496i3F37B5686AE47466/image-size/large?v=v2&px=999" role="button" title="riduncan_3-1627332157363.png" alt="riduncan_3-1627332157363.png" /></span></P> <P> </P> <P aria-level="2"><STRONG><SPAN data-contrast="none">What to expect in the webinar? </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">In the webinar </SPAN><SPAN data-contrast="auto">Cassie Breviu walks you step by step on how to build a PCF in CLI and Visual Studio that adds a slider component for Power Apps. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">The end user can leverage the slider when accounting for inventory, inputting customer order quantities, or a host of other use cases. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">That is one of the great benefits of PCFs, that they are reusable across Power Apps for a variety of use cases. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">Prior to importing the PCF into her Power App, Cassie will also demonstrate the necessary steps in the Power Platform Admin Center to secure her component and set the proper governance regulations.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P aria-level="2"><STRONG><SPAN data-contrast="none">Summary </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">Make sure to watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-build-apps-Powerapps-component-framework.html?lcid=en-us" target="_blank" rel="noopener"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="none"> to learn more Power Apps and Power Component Frameworks. Moreover, look out for news about the POWERful Devs conference this September which will cover the roles of citizen developers, professional developers, and fusion teams.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Resources</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Webinar Registration Link</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://info.microsoft.com/ww-Landing-build-apps-Powerapps-component-framework.html?lcid=en-us" target="_blank" rel="noopener"><SPAN data-contrast="none">Build Custom Apps</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Low Code Application Development on Azure</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN> <BR /></SPAN><A href="https://azure.microsoft.com/en-us/products/powerapps/" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Power Apps on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG>Learning Resources</STRONG></P> <P><A href="http://aka.ms/fusiondevpath" target="_self"><STRONG>Fusion Development learning path</STRONG></A></P> <P><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_self"><STRONG>Fusion Development E-book</STRONG></A></P> <P><A href="https://aka.ms/ppcvscode" target="_self"><STRONG>Power Platform Visual Studio Extension</STRONG></A></P> <P> </P> Thu, 12 Aug 2021 20:46:04 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-custom-apps-with-power-apps-component-framework/ba-p/2588515 riduncan 2021-08-12T20:46:04Z Winners Announced: Azure IoT Hack for Sustainability https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-iot-hack-for-sustainability/ba-p/2573056 <P>Over 300 developers gathered virtually over the course of 7 weeks to participate in the <A href="https://iotsustainabilityhack.devpost.com/" target="_blank" rel="noopener">Microsoft Azure IoT Hack for Sustainability</A> challenge. Participants were asked to join Microsoft in advancing sustainability by understanding how to use technology to measure and minimize environmental impact. The hackathon specifically focused on using Azure IoT technologies that will give endless possibilities: collect real time data, capture rich information using cameras and machine learnings, create real time insights, and automated action without human intervention. </P> <P> </P> <P>Let's take a look at the top 6 winning projects below:</P> <P> </P> <P><FONT size="5"><STRONG><U>1st Place:<A href="https://devpost.com/software/stemm-network" target="_blank" rel="noopener"> STEM Network</A></U></STRONG></FONT></P> <P>Created by: Advyth Ramachandran, Pranav Bhusari, Joshua Qin, Justin Shao</P> <P>The STEM Network - Street Tree Monitoring Network - consists of moisture sensors for public/municipal trees, designed to reduce the mortality of saplings and improve urban reforestation outcomes.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=cFhvWSK0l2M" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/cFhvWSK0l2M/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><STRONG><U>2nd Place:<A href="https://devpost.com/software/air_quality_bonanza" target="_blank" rel="noopener"> Air Quality Dashboard Analytics</A></U></STRONG></FONT></P> <P>Created by: Tarun Hari, William Short, Michael Huang, Martin Fabbri</P> <P>Empowered by the Azure Maps and IoT Platforms, the Air Quality Dashboard Analytics deliver actionable insights to citizens, homeowners, and cities. Think Trulia's crime maps, but for Air Quality!</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=uzA7f0Z_o9A" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/uzA7f0Z_o9A/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><STRONG><U>3rd Place:<A href="https://devpost.com/software/aquasave-ey6f2u" target="_blank" rel="noopener"> AquaSave</A></U></STRONG></FONT></P> <P>Created by: Aparna Ghantasala, Alexandra Talsky, Praveen Chandra, Ryan Curtis, Amarnath Tadigadapa</P> <P>Motivating people to recycle water and minimize water consumption, so that communities can work towards a water-positive future.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=61w27Fo2slQ" align="center" size="small" width="200" height="113" uploading="false" thumbnail="http://i.ytimg.com/vi/61w27Fo2slQ/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><STRONG><U>Honorable Mentions</U></STRONG></FONT></P> <P><FONT size="5"><U><STRONG><A href="https://devpost.com/software/hydrofarm" target="_blank" rel="noopener">HydroFarm</A></STRONG></U></FONT></P> <P>Created by: Germaine Ng, Wesley Muthemba, Yifei Fang, Guanting Li, Hernan Herrera</P> <P>About 70 percent of all the world's freshwater withdrawals go towards irrigation uses. HydroFarm aims to improve water use efficiency without decreasing yield.</P> <P> </P> <P><A href="https://devpost.com/software/the-smart-valve-2049" target="_blank" rel="noopener"><FONT size="5"><STRONG><U>The Smart Valve 2049</U></STRONG></FONT></A></P> <P>Created by: Derek Jamison, Brian Dinh</P> <P>State-of-the-art water management using Azure IoT Central, Azure Logic Apps, Web APIs & Raspberry Pi (plus sensors). Your outdoor plants are watered based on needs (moisture, weather, forecast, etc).</P> <P> </P> <P><A href="https://devpost.com/software/foodcy-v2fi8k" target="_blank" rel="noopener"><FONT size="5"><STRONG><U>Foodcy</U></STRONG></FONT></A></P> <P>Created by: Miko Aro</P> <P>Foodcy app connects local businesses like bakeries and supermarkets with residents and local shelters so they can reduce surplus food. It also uses AI technology to reduce food waste in the kitchen.</P> <P> </P> <P><U><STRONG><FONT size="5">Thank You</FONT></STRONG></U></P> <P>On behalf of the Microsoft U.S. Azure team, I'd like to thank all of the participants, and congratulate the winners on a job well done!</P> <P> </P> <P>Thank you to the judges who volunteered their time to give back to the community! Shout out to <STRONG>Amit Agrawal</STRONG> <LI-USER uid="50703"></LI-USER> , <STRONG>Diana Phillips</STRONG>, <STRONG>Lucio Tiberi</STRONG>, <STRONG>Monica Rodriquez</STRONG>, <STRONG>Pamela Cortez</STRONG> <LI-USER uid="263511"></LI-USER> , <STRONG>Rae Lyon</STRONG> <LI-USER uid="685674"></LI-USER> , <STRONG>Sarah Maston</STRONG> <LI-USER uid="153349"></LI-USER> </P> <P> </P> <P><U><STRONG><FONT size="5">Coming up</FONT></STRONG></U></P> <P>Don't miss out on future hackathon events! Sign up for the <A href="https://azure.microsoft.com/en-us/resources/join-the-azure-developer-community/" target="_blank" rel="noopener">Microsoft.Source Newsletter</A> to receive a regular digest of relevant technical content, events, and training.</P> <P> </P> Wed, 21 Jul 2021 21:55:41 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-iot-hack-for-sustainability/ba-p/2573056 NinaSui 2021-07-21T21:55:41Z New LEARN modules: Write your first code in F#, Write your first F# programs https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learn-modules-write-your-first-code-in-f-write-your-first-f/ba-p/2569795 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-07-21 at 11.42.54.png" style="width: 747px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297341i627E194D17ACB625/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-07-21 at 11.42.54.png" alt="Screenshot 2021-07-21 at 11.42.54.png" /></span></P> <P>F# is an open-source, cross-platform programming language that makes it easy to write succinct, performant, robust, and practical code.</P> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#%C2%A0references" target="_blank" rel="noopener" name="%C2%A0references"></A>References</H2> <P> </P> <UL> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The first F# module of many was just published on LEARN, check it out<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-steps/" target="_blank">Take your first steps with F#</A></LI> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The second module just published.<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-program/" target="_blank">Write your first F# programs</A></LI> <LI><A href="https://docs.microsoft.com/en-us/dotnet/fsharp/" target="_blank">F# docs</A></LI> </UL> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#%C2%A0why-f" target="_blank" rel="noopener" name="%C2%A0why-f"></A> </H2> <H2>Why F#?</H2> <P>There are many language features and aspects of the F# language that make it easy to be productive when writing code:</P> <UL> <LI><STRONG>Succinct</STRONG>: You write less code with F# that's also expressed in a clear manner.</LI> <LI><STRONG>Performant</STRONG>: F# comes with built-in parallelism and concurrency. It also uses the fact that it's part of the .NET runtime to speed things up.</LI> <LI><STRONG>Robust</STRONG>: There are language constructs that makes the code fault tolerant and robust like immutable by default, null value management and more.</LI> <LI><STRONG>Supports multiple programming paradigms</STRONG>: F# lets you choose the patterns and practices most effective for solving problems by providing strong support for functional and object programming paradigms.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#how-do-i-get-started" target="_blank" rel="noopener" name="how-do-i-get-started"></A>How do I get started?</H2> <P>There are a few things you need to get started.</P> <UL> <LI><STRONG>.NET SDK</STRONG>. You need to install the .NET SDK to be able to buiild, run, test and also create F# projects. You can find the<SPAN> </SPAN><A href="https://dotnet.microsoft.com/download" target="_blank" rel="noopener">F# SDK install</A><SPAN> </SPAN>here</LI> <LI><STRONG>Ionide</STRONG>. It's a VS Code plugin. It's not necessary to install, but it will give you things like Intellisense, tooltips, codelens, error highlight and more.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#your-first-code" target="_blank" rel="noopener" name="your-first-code"></A>Your first code</H2> <P>You can start writing F# by using the REPL called FSI, you can also scaffold an F# project using the<SPAN> </SPAN><CODE>dotnet</CODE><SPAN> </SPAN>executable.</P> <H3><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#create-a-project" target="_blank" rel="noopener" name="create-a-project"></A>Create a project</H3> <P>You create a project using<SPAN> </SPAN><CODE>dotnet</CODE><SPAN> </SPAN>like so:</P> <P> </P> <LI-CODE lang="bash">dotnet new console --language F# -o MyFSharpApp</LI-CODE> <P> </P> <P> </P> <P>Then you get a project with files:</P> <UL> <LI><STRONG>Program.fs</STRONG>, your entrypoint file</LI> <LI><STRONG>MyFSharpApp.csproj</STRONG>, your project file that contains everything it needs to know to build the project like dependencies for example.</LI> </UL> <H3><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#what-does-the-code-look-like" target="_blank" rel="noopener" name="what-does-the-code-look-like"></A>What does the code look like?</H3> <P>Here you have the code of<SPAN> </SPAN><EM>Program.fs</EM>. Itt contains the functions<SPAN> </SPAN><CODE>from()</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>main()</CODE>.<SPAN> </SPAN><CODE>main()</CODE><SPAN> </SPAN>is the entry point of the app, as seen by<SPAN> </SPAN><CODE>[<EntryPoint>]</CODE>.</P> <P> </P> <LI-CODE lang="fsharp">open System // Define a function to construct a message to print let from whom = sprintf "from %s" whom [<EntryPoint>] let main argv = let message = from "F#" // Call the function printfn "Hello world %s" message 0 // return an integer exit code</LI-CODE> <P> </P> <P>The<SPAN> </SPAN><CODE>from()</CODE><SPAN> </SPAN>function takes the arg<SPAN> </SPAN><CODE>whom</CODE><SPAN> </SPAN>and the function body prints a string using the function<SPAN> </SPAN><CODE>sprintf</CODE>.</P> <H2> </H2> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#how-do-i-learn-more" target="_blank" rel="noopener" name="how-do-i-learn-more"></A>How do I learn more?</H2> <P> </P> <UL> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The first F# module of many was just published on LEARN, check it out<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-steps/" target="_blank">Take your first steps with F#</A></LI> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The second module just published.<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-program/" target="_blank">Write your first F# programs</A></LI> <LI><A href="https://docs.microsoft.com/en-us/dotnet/fsharp/" target="_blank">F# docs</A></LI> </UL> Fri, 23 Jul 2021 10:36:18 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learn-modules-write-your-first-code-in-f-write-your-first-f/ba-p/2569795 Chris_Noring 2021-07-23T10:36:18Z An Illustrated Guide to Fusion Development https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-illustrated-guide-to-fusion-development/ba-p/2567146 <P><FONT size="5">1. Introduction<BR /></FONT></P> <P><FONT size="4">If you've attended any flagship Microsoft event, you've likely heard CEO Satya Nadella talk about <STRONG>Tech Intensity</STRONG> and the importance of <STRONG>Fusion teams </STRONG>for digital transformation at scale. But what do those words mean? And how does this relate to concepts like <STRONG>low-code development</STRONG> and related technologies like <STRONG>Power Platform</STRONG>? Here are three resources that can help you learn:<BR /><BR /></FONT></P> <OL> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development Learning Path</A></STRONG> - takes you from concepts (fusion teams, low code) to code (Power Apps components, OpenAPI-enabled Web APIs, integration with API Management and usage in Power Apps) with hands-on exercises and knowledge checks.</FONT></LI> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development e-Book</A></STRONG> - a guide that summarizes how fusion teams (of citizen developers and professional developers) can work together to build complex, fully-functional business applications using low-code development techniques, and combining Power Apps with Azure services.</FONT></LI> <LI><FONT size="4"><STRONG><A href="https://aka.ms/AzureFunctionsOnDemand" target="_self">Azure Functions: OpenAPI and Power Platforms Event</A> </STRONG>- a 2-hour live-streamed event with sessions covering core concepts (Power Apps, Power Fx, OpenAPI, Azure Functions) with interactive demos showcasing useful integrations for a fusion development workflow. Click below to visit the event page and watch the session replays!<BR /><BR /><A href="https://aka.ms/AzureFunctionsOnDemand" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AzureFunctionsEventSessions.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297177i47090CD07E885E10/image-size/large?v=v2&px=999" role="button" title="AzureFunctionsEventSessions.png" alt="AzureFunctionsEventSessions.png" /></span></A></FONT></LI> </OL> <P> </P> <P><FONT size="5">2. An Illustrated Guide to Fusion Development</FONT></P> <P> </P> <P><FONT size="4">If you're a visual or visual-spatial learner, you might find it helpful to get "the big picture" before you dive into the step-by-step progression of the learning paths. So today, I want to share one more resource that can help in this context -- this illustrated guide that visually summarizes the <STRONG><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development Learning Path</A>.</STRONG> </FONT></P> <P><FONT size="4"><BR /><A href="https://aka.ms/visual/fusion-dev-path/illustrated" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VisualGuide-FusionDevPath-DevTo.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297178i84E63E8EECAF3991/image-size/large?v=v2&px=999" role="button" title="VisualGuide-FusionDevPath-DevTo.png" alt="VisualGuide-FusionDevPath-DevTo.png" /></span></A></FONT></P> <P> </P> <P><FONT size="4"> Click on the image to get access to a <A href="https://aka.ms/visual/fusion-dev-path/illustrated" target="_self">higher-resolution (poster-sized) version</A> of the guide that can be printed out or used as desktop wallpaper. </FONT></P> <P> </P> <P><FONT size="5">3. Using The Illustrated Guide on your learning journey</FONT></P> <P><SPAN style="font-size: large; font-family: inherit;"><BR />Use this guide as a pre-read (to get a sense of terms, topics and flow </SPAN><STRONG style="font-size: large; font-family: inherit;">before</STRONG><SPAN style="font-size: large; font-family: inherit;"> you start the learning path. Then revisit the guide </SPAN><STRONG style="font-size: large; font-family: inherit;">after</STRONG><SPAN style="font-size: large; font-family: inherit;"> completing the path, to identify any gaps and reinforce learned concepts. </SPAN></P> <P> </P> <P><SPAN style="font-size: large; font-family: inherit;">Every cell in this illustration maps to a related unit or module within that learning path. By checking out the visual before and after you complete the relevant section, you might find yourself making connections or seeing patterns that help you remember that concept better, or see it in a new perspective. <STRONG>For instance: </STRONG>look at the examples below.</SPAN><BR /><BR /></P> <TABLE border="1" width="100%"> <TBODY> <TR> <TD width="50%"> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="TechIntensity.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297185i6C1817C2C1E0F3C1/image-size/large?v=v2&px=999" role="button" title="TechIntensity.png" alt="TechIntensity.png" /></span></P> <P> </P> </TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Tech Intensity?</FONT></STRONG></P> <P><FONT size="4">It's about three dimensions (organizational trust, individual capability & technological readiness) that signal successful <EM>adoption</EM> of technology to power digital transformation.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/transform-business-software-authoring-with-fusion-dev/2-tech-intensity?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> <TR> <TD width="50%"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="FusionDevProcess.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297184iC478E79A4FB62458/image-size/large?v=v2&px=999" role="button" title="FusionDevProcess.png" alt="FusionDevProcess.png" /></span></TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Fusion Development?</FONT></STRONG></P> <P><FONT size="4">It's about breaking the silos between citizen devs and professional devs, enabling them to work closely together to build apps that solve real business needs or challenges.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/transform-business-software-authoring-with-fusion-dev/4-fusion-development-process?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> <TR> <TD width="50%"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LowCode.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297186iEDA3C6D214CBC7B1/image-size/large?v=v2&px=999" role="button" title="LowCode.png" alt="LowCode.png" /></span></TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Low Code?</FONT></STRONG></P> <P><FONT size="4">It's about removing barriers and enabling more actions with less code (e.g., using drag-and-drop UI, scripting languages, declarative interfaces etc.) - so that <EM>anyone</EM> on the team can contribute meaningfully to their app development process.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/understanding-low-code-as-a-traditional-developer/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> <TR> <TD width="50%"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="power-apps.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297183iFBCFF6B8E5E60EB7/image-size/large?v=v2&px=999" role="button" title="power-apps.png" alt="power-apps.png" /></span></TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Power Apps?</FONT></STRONG></P> <P><FONT size="4">Part of the Power Platforms product suite, it enables citizen developers to rapidly build mobile and web apps, while pro-devs can craft custom APIs, data connectors, and event-driven workflows - to support their fusion team development process.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/understanding-low-code-as-a-traditional-developer/2-what-is-low-code?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P><FONT size="5"><BR />4. Summary<BR /></FONT></P> <P><FONT size="4">Thanks for reading! I hope you find this illustrated guide useful to you in your learning journey - as a citizen developer or professional developer exploring fusion development, or just as a curious technologist eager to learn about emerging technologies and paradigms.</FONT></P> <P> </P> <P><FONT size="4">Have feedback for me in what could make the illustrations better for your learning style? Leave a comment below! I would love to hear from you. Want more visual guides and visual storytelling content - <A href="https://twitter.com/sketchthedocs" target="_blank" rel="noopener">follow me </A>@SketchTheDocs.<BR /><BR />And don't forget to check out these three resources to skill up on Fusion Development:<BR /></FONT></P> <OL> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development Learning Path</A></STRONG> </FONT></LI> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development e-Book </A></STRONG> </FONT></LI> <LI><FONT size="4"><STRONG><A href="https://aka.ms/AzureFunctionsOnDemand" target="_self">Azure Functions: OpenAPI and Power Platforms Event</A> </STRONG>(session replays)</FONT></LI> </OL> <P><FONT size="4">Happy learning trails!</FONT></P> <P> </P> Tue, 20 Jul 2021 22:09:34 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-illustrated-guide-to-fusion-development/ba-p/2567146 nityan 2021-07-20T22:09:34Z New module: Introduction to testing in .NET https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-introduction-to-testing-in-net/ba-p/2567743 <P>Testing is crucial part of software development. We want to make sure the software we ship is as tested as much as possible. However, there are many ways to test, and the scenario and the application is usually what determines what the best approach is. Upskill your testing knowledge and get a good high-level view of all types of testing that exist, so you are better informed how to approach testing for your next program - cause you do test right?</P> <P> </P> <P>This module covers:</P> <P> </P> <UL> <LI>Evaluate if testing is right for your scenarios.</LI> <LI>Describe how different types of testing, the testing pyramid, and different testing schools of thought answer the demands of modern development.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-07-20 at 21.15.57.png" style="width: 869px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297160i7FD40D3597FAE6FE/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-07-20 at 21.15.57.png" alt="Screenshot 2021-07-20 at 21.15.57.png" /></span></P> <P>Check it out: <A href="https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-concepts/" target="_self">https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-concepts/</A></P> Tue, 20 Jul 2021 20:21:15 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-introduction-to-testing-in-net/ba-p/2567743 Chris_Noring 2021-07-20T20:21:15Z Hardening an ASP.NET container running on Kubernetes https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hardening-an-asp-net-container-running-on-kubernetes/ba-p/2542224 <P>In my day to day job, I often stumbled upon a surprising fact: many ASP.NET Core (or .NET 5) K8s deployments are too permissive when it comes to the execution context. Basically, most deployments are not hardened properly, and I see countless ASP.NET containers running as root. Admitedly, there is a lack of guidance from Microsoft in that matter. At the time of writing, I challenge you to find a single source of truth (feel free to add it in comment if I missed any), <EM>endorsed by Microsoft</EM> on how to to harden an ASP.NET Docker image. You'll rather stumble upon GitHub issues and questions here and there.</P> <P>As you know, ASP.NET relies on the built-in Kestrel web server and most ASP.NET applications are either MVC, either Web APIs, meaning that they are unlikely going to leverage operating system level capabilities that require high privileges.</P> <P>That said, if you take the simplest ASP.NET web API project and choose the default Visual Studio 2019 template, you'll end up with the following Dockerfile:</P> <P> </P> <LI-CODE lang="bash">FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build WORKDIR /src COPY ["simpleapi/simpleapi.csproj", "simpleapi/"] RUN dotnet restore "simpleapi/simpleapi.csproj" COPY . . WORKDIR "/src/simpleapi" RUN dotnet build "simpleapi.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "simpleapi.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "simpleapi.dll"] </LI-CODE> <P> </P> <P>If you build an image and run this, you must run it as root. If you don't, by requesting it specifically in your deployment through a securityContext:</P> <P> </P> <LI-CODE lang="bash">securityContext: runAsNonRoot: true </LI-CODE> <P> </P> <P>You'll encounter the following issue:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephaneey_0-1626175023077.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/295431i6148D566A5AD1758/image-size/medium?v=v2&px=400" role="button" title="stephaneey_0-1626175023077.png" alt="stephaneey_0-1626175023077.png" /></span></P> <P>Describing the pod with Kubectl quickly shows that the container tried to start as root:</P> <P> </P> <LI-CODE lang="bash">Warning Failed 94s (x8 over 2m53s) kubelet, aks-agentpool-38789445-vmss000001 Error: container has runAsNonRoot and image will run as root</LI-CODE> <P> </P> <P>What K8s tells you is that the image wants to start as root because no other user has been defined, so it defaults to root. But, because you explicitely added a <EM>runAsNonRoot</EM> instruction, it can't start it. Never mind, just specify a user and it should work, right? Let's try:</P> <P> </P> <LI-CODE lang="bash">securityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 2000</LI-CODE> <P> </P> <P>By the way, if you wonder, when no user is specified in the Docker image itself or through a securityContext, user 0 is assumed and 0 stands for root. Linux needs to have a user identifier (not name) as an input. Trying with the above config results in another error:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephaneey_1-1626175696989.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/295432iD0C4482CA431535E/image-size/medium?v=v2&px=400" role="button" title="stephaneey_1-1626175696989.png" alt="stephaneey_1-1626175696989.png" /></span></P> <P>This time it goes further as the container starts, crashes and restarts. Looking at the container logs with Kubectl logs reveals the problem (shortened for brevity):</P> <P> </P> <LI-CODE lang="bash">←[41m←[1m←[37mcrit←[39m←[22m←[49m: Microsoft.AspNetCore.Server.Kestrel[0] Unable to start Kestrel. System.Net.Sockets.SocketException (13): Permission denied</LI-CODE> <P> </P> <P>This could make you think that being root is required to start Kestrel but that is not the culprit. The problem is the port number it tries to bind to, which in the default image, is either 80 either 443. Both ports are below 1024 and today, you must be <EM>root</EM> to bind to a port that is < 1024. In Linux, the alternative to bind to a low port while not being root is to use Linux capabilities. However, ambient capabilities <A href="https://github.com/kubernetes/kubernetes/issues/56374" target="_self">are still not available</A> in K8s. So, first take away is: do not use port 80 or 443 in your ASP.NET Core images. Whatever setup you are using, I don't see how you could justify to bind to either of these ports. Most webapps/APIs are:</P> <UL> <LI>Proxied by a K8s Service which can listen to 80 and forward to 8080 for example, same with 443 of course</LI> <LI>Proxied by a sidecar container, which is part of a service mesh or solutions such as Dapr. Here again, the proxy can easily fallback to 8080 or 4433</LI> </UL> <P>So, I see no reason to stick to these ports. Therefore, the first thing to do is to pick another bunc of ports, right in the DockerFile. So, for example, you can simply achieve this with the following instructions in the Dockerfile (the same applies to 443 and TLS):</P> <P> </P> <LI-CODE lang="bash">EXPOSE 8080 ENV ASPNETCORE_URLS=http://*:8080</LI-CODE> <P> </P> <P>When changing the default port, you also need to instruct ASP.NET (core in this example) about it through an environment variable. Adding those two lines to our former DockerFile and deploying it with the above <EM>securityContext</EM> will result in an up and running ASP.NET container running as non-root. To enforce non-root, you may even do it right from the Dockerfile itself, yet, using another bunch of Docker instructions:</P> <P> </P> <LI-CODE lang="bash">RUN addgroup --group friendlygroupname --gid 2000 \ && adduser \ --uid 1000 \ --gid 2000 \ "friendlyusername" RUN chown friendlyusername:friendlygroupname /app USER friendlyusername:friendlygroupname </LI-CODE> <P> </P> <P>If you build and push the new Docker image and redeploy it, you will have an up and running ASP.NET container, running with its own user and group objects. </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephaneey_0-1626176706154.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/295435i61AC98E75C70C958/image-size/medium?v=v2&px=400" role="button" title="stephaneey_0-1626176706154.png" alt="stephaneey_0-1626176706154.png" /></span></P> <P>This approach is even preferred because even if you ommit the security context in the K8s deployment, the container will be started with the user and group specified in the image, meaning as a rootless container. But is it enough to consider this hardened? Well, we are in a much better situation than with the default image because:</P> <UL> <LI>The non-root user will be restricted even if the container itself is privileged in the K8s deployment (which should never be the case of an ASP.NET app by the way)</LI> <LI>The non-root user will be restricted in the container itself. For example, installing extra packages through <EM>apt-get</EM> will be denied, which could make it harder to setup tools in a remote code execution attack. By the way, the default ASP.NET base image does not ship with many tools, which makes it harder (good thing) to discover and run attacks. If on top of it, you make sure that no extra tools can be installed, you're already preventing most attacks.</LI> </UL> <P>But, we can do even more than this. For example, depending on the ASP.NET distrib you work with, curl might be available in the container, facilitating attacks such as downloading a binary or shell file from a remote endpoint. Of course, you should always make sure that the <EM>egress</EM> traffic is controlled correctly, which goes beyond the management of the container itself. However, such attacks could not be done in a read-only file system because the binary/archive/shell could not be stored locally in the container. So, we might be tempted to add another line to our securityContext:</P> <P> </P> <LI-CODE lang="bash">readOnlyRootFilesystem: true</LI-CODE> <P> </P> <P>Which will cause the container to fail at startup. In the logs you'll find:</P> <P> </P> <LI-CODE lang="bash">Failed to create CoreCLR, HRESULT: 0x80004005</LI-CODE> <P> </P> <P>And that is because you should disable some debugging telemetry setting in the Dockerfile by adding an extra ENV statement:</P> <P> </P> <LI-CODE lang="basic">ENV COMPlus_EnableDiagnostics=0</LI-CODE> <P> </P> <P>Note that it depends on the base image (ASP.NET version) you use and it is still debated whether ASP.NET runs smoothly or not on a read-only filesystem. You might have edge cases where the system needs to buffer "stuff" on the filesystem. So, use it with caution and make sure you spot any potential issue during your integration tests.</P> <P>Last but not least and because it never hurts, you should always drop all capabilities by default (full securityContext for clarity):</P> <P> </P> <LI-CODE lang="bash">runAsNonRoot: true runAsUser: 1000 runAsGroup: 2000 allowPrivilegeEscalation: false privileged: false readOnlyRootFilesystem: true capabilities: drop: - all</LI-CODE> <P> </P> <P>Because if you don't bind to a low port, you will not even need NET_BIND_SERVICE and because should you still run a container as root, dropping all these capabilities will still prevent root from leveraging some system capabilities, making it harder for an attacker to harm your environment. Of course, if you are running edge cases, you may add <A href="https://github.com/torvalds/linux/blob/master/include/uapi/linux/capability.h" target="_self">some capabilities</A> as needed, but removing all by default sounds like a good idea. </P> <P>Is that all? Well, no! There is still something that help harden not the image, but the container itself. You should always define resource requests and limits to make sure a single container cannot take up all CPU and Memory of the node it runs on. That will also help you detect unexpected memory leaks.</P> Tue, 13 Jul 2021 17:11:51 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hardening-an-asp-net-container-running-on-kubernetes/ba-p/2542224 stephaneey 2021-07-13T17:11:51Z IoT for Beginners, curriculum https://techcommunity.microsoft.com/t5/azure-developer-community-blog/iot-for-beginners-curriculum/ba-p/2533895 <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="MicrosoftTeams-image.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293187i882CF1EF57FD59F2/image-size/large?v=v2&px=999" role="button" title="MicrosoftTeams-image.png" alt="MicrosoftTeams-image.png" /></span></P> <P> </P> <P> </P> <P>It is our very great pleasure to announce the release of a new, free, MIT-licensed open-source curriculum all about the Internet of Things: <A href="https://aka.ms/iot-beginners" target="_blank" rel="noopener">IoT for Beginners</A>. Brought to you by a team of Azure Cloud Advocates, Program Managers, and <A href="https://studentambassadors.microsoft.com/?WT.mc_id=academic-17441-jabenn" target="_blank" rel="noopener">Microsoft Learn Student Ambassadors</A>, we hope to empower students of all ages to learn the basics of IoT. Presuming no knowledge of IoT, we offer a free 12-week, 24-lesson curriculum to help you dive into this amazing field.</P> <P> </P> <P>If you liked our first two curricula, <A href="https://aka.ms/webdev-beginners" target="_blank" rel="noopener">Web Dev for Beginners</A> and <A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning for beginners</A>, you will love IoT for Beginners!</P> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#join-us-on-the-journey-of-your-food-from-farm-to-table" target="_blank" rel="noopener" name="join-us-on-the-journey-of-your-food-from-farm-to-table"></A>Join us on the journey of your food, from farm to table!</H2> <P> </P> <P>Join us as we take the same journey as your food as it travels from farm to table, taking advantage of IoT on the way to improve farming, transport, manufacturing and food processing, retail and smart homes.</P> <P> </P> <P>Our curricula are structured with a modified Project-Based pedagogy and include:</P> <P> </P> <UL> <LI>a pre-lesson warmup quiz</LI> <LI>a written lesson</LI> <LI>video</LI> <LI>knowledge checks</LI> <LI>a project to build</LI> <LI>infographics, sketchnotes, and visuals</LI> <LI>a challenge</LI> <LI>an assignment</LI> <LI>a post-lesson quiz</LI> <LI>opportunities to deepen your knowledge on Microsoft Learn</LI> </UL> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#what-will-you-learn" target="_blank" rel="noopener" name="what-will-you-learn"></A>What will you learn?</H2> <P> </P> <DIV id="tinyMceEditorChris_Noring_0" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <P> </P> <P><A href="https://github.com/microsoft/IoT-For-Beginners/blob/main/sketchnotes/Roadmap.jpg" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Roadmap.jpg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/294143iE08C947DD69E5E51/image-size/large?v=v2&px=999" role="button" title="Roadmap.jpg" alt="Roadmap.jpg" /></span></A></P> <P> </P> <P> </P> <P>The lessons are grouped so that you can deep-dive into use cases of IoT. We start with an introduction to IoT, covering devices, sensors, actuators and cloud connectivity, where you will build an internet connected version of the "Hello world" or IoT, an LED. We then move on to farming, learning about digital agriculture and feedback loops to control automated watering systems. Your food then leaves the farm on trucks, and you learn how to track vehicles using GPS, visualize their journeys and get alerts when a truck approaches a processing plant. Once in the plant, we move to AIoT, learning how to distinguish between ripe and unripe fruit using AI models running from IoT devices and on the edge. Next we move to the supermarket, using IoT to manage stock levels. Finally we take the food home to cook, and learn about consumer smart devices, building a voice controlled smart timer that can even speak multiple languages.</P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#hardware" target="_blank" rel="noopener" name="hardware"></A>Hardware</H2> <P> </P> <P>The hard part (pun intended) for IoT is hardware, so we've designed this curriculum to be as accessible as possible. We want you to Learn IoT, not learn how to solder, know how to read resistor color codes, or know what a microfarad is, so we've made hardware choices to make things easier.</P> <P> </P> <P>You can choose to learn using microcontrollers using Arduino with a <A href="https://www.seeedstudio.com/Wio-Terminal-p-4509.html" target="_blank" rel="noopener">Wio Terminal</A>, or single board computers using a <A href="https://www.raspberrypi.org/products/raspberry-pi-4-model-b/" target="_blank" rel="noopener">Raspberry Pi</A>. We've also added a virtual hardware option so you can learn without having to purchase anything!</P> <P> </P> <P>For sensors and actuators, we've gone with the <A href="https://www.seeedstudio.com/category/Grove-c-1003.html" target="_blank" rel="noopener">Grove kit</A> from <A href="https://www.seeedstudio.com/" target="_blank" rel="noopener">Seeed Studio</A>, with easy to connect sensors and actuators.</P> <P> </P> <P> </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JimBennett_1-1625255958076.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293184iD7C16D337728ABB0/image-size/medium?v=v2&px=400" role="button" title="JimBennett_1-1625255958076.png" alt="JimBennett_1-1625255958076.png" /></span></P> <P> </P> <P>Our friends at Seeed have made it easy to buy the hardware, with packages containing all of the kit you need.</P> <UL> <LI><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Wio-Terminal-Starter-Kit-p-5006.html" target="_blank" rel="noopener">IoT for beginners with Seeed and Microsoft - Wio Terminal Starter Kit</A></LI> <LI><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit.html" target="_blank" rel="noopener">IoT for beginners with Seeed and Microsoft - Raspberry Pi 4 Starter Kit</A></LI> </UL> <P>If you are interested in learning using virtual hardware, you can write IoT code locally as if you were using a Raspberry Pi, then simulate sensors and actuators using <A href="https://github.com/CounterFit-IoT" target="_blank" rel="noopener">CounterFit</A>, a free, open source tool for simulating hardware.</P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#a-sneak-peek" target="_blank" rel="noopener" name="a-sneak-peek"></A>A sneak peek</H2> <P> </P> <P>This curriculum is filled with a lot of art, created by our team. Take a look at this cool sketchnote created by <A class="mentioned-user" href="https://dev.to/nitya" target="_blank" rel="noopener">@nitya</A> .</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JimBennett_2-1625255958257.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293185i6B46F7DAD862A4F3/image-size/large?v=v2&px=999" role="button" title="JimBennett_2-1625255958257.png" alt="JimBennett_2-1625255958257.png" /></span></P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#without-further-ado-please-meet-iot-for-beginners-a-curriculum" target="_blank" rel="noopener" name="without-further-ado-please-meet-iot-for-beginners-a-curriculum"></A>Without further ado, please meet <A href="https://aka.ms/iot-beginners" target="_blank" rel="noopener">IoT For Beginners: A Curriculum</A>!</H2> Tue, 13 Jul 2021 12:03:40 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/iot-for-beginners-curriculum/ba-p/2533895 Chris_Noring 2021-07-13T12:03:40Z Building a Cloud Native Lab at Home https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="accelerate.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293760iDAE4D393C7479C5E/image-size/large?v=v2&px=999" role="button" title="accelerate.png" alt="accelerate.png" /></span></P> <P> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Everyone loves a good home lab setup. The cloud is great, but buying and installing hardware in the comfort of your own home is something one can get addicted to :)</img></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Don't get me wrong - there are things I put straight into the cloud without even considering self-hosting. Even though I have been an Exchange Admin in a previous life I use Office 365, and I certainly trust OneDrive and Azure File Storage more than the maintenance of my own RAID/NAS. But running 30 virtual machines ain't free and even if there is a cost to buying hardware it might come up cheaper over time.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The challenge is that these days you want things to be as cloud native as they can. So, you don't want to install virtual machines where you install a web server that you subsequently have to configure. And even though you can install Docker on both Windows and Linux servers you want something more sophisticated than individual containers.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You want something like Kubernetes with all the fixings. No, Kubernetes is not the perfect option that you always want to use, but it's certainly something you should have hands-on experience with these days. (I'm approaching this lab from the developer perspective. Running VMs has been a solved problem for years.) Sure, there's options like Service Fabric as well since we're dealing with the Microsoft tech stack, but I'm not diving into that right now.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you set up an Ubuntu VM you can get going with Microk8s in minutes, but why stop there?</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Microsoft announced Azure Stack HCI AKS a few months back, and it just went GA. (That's hyper-converged servers that can plug into Azure and then you optionally put Azure Kubernetes Service on top.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">More info:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">I felt that not all my questions were easily answered in the docs. Do you need two nodes? What does it cost? How much hardware at a minimum?</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>Well, it's not like the docs are bad, but they do kind of drive you towards a more enterprisey setup. The bigger problem is that all the info you need is spread across a number of sections in the docs and that's why I wanted a more complete set of instructions (while not diving into all the technical details). So, inspired by what I could find on docs.microsoft.com and </SPAN><A href="http://aka.ms/azurearcjumpstart" target="_blank" rel="noopener"><SPAN>h</SPAN><SPAN>ttp://aka.ms/azurearcjumpstart</SPAN></A><SPAN> as well as an amount of testing and validation on my own I put together a little guide for building this at home.</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you want a "proper" cluster you need at least two nodes (with the witness going in the cloud) , and you'll want 2 NVMe drives + 8 SSDs for Storage Spaces Direct. (Well, you probably want all NVMe if money is no concern.) You'll probably want minimum 64 gigs of RAM in each box as well.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Azure Stack HCI doesn't have an up-front cost, but it will set you back 10$ a month pr core at the current pricing. So, it adds up if you're on a budget. And that does not include the licenses for any Windows VMs you run on the cluster. You can trial it for free for 60 days so there's no risk testing it though. It works nicely, but at the moment I don't feel it's quite worth it now as many of the features are still "Coming Soon". Since there are new versions in preview this might change in the future, so this is not a permanent evaluation on my part.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Wait a moment, I first said "Azure Stack HCI AKS" and then "Azure Stack HCI" without the AKS term. Was that a spelling error? No. The AKS part is an additional installation after you get the HCI part working. (Which means that HCI doesn't mean you must run Kubernetes. You can still do VMs in parallell.) Azure Stack HCI is an operating system you install yourself so you can install software on top of that. It shares a lot of the code base with Windows Server, but with some tweaks to become a cloud-connected evergreen OS.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You can however skip the cluster part and go single node, and for the sake of it I tested the latest build of Windows Server 2022 Preview instead of this purpose-built OS. This works like a charm.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">For hardware I went with an HPE Microserver Gen 10 Plus with 32GB RAM and even if I stuffed in two SSDs I tested on a single HDD just to be sure. Storage Spaces and/or RAID is a recommendation, but not a hard prerequisite. (I can confirm the Microserver unofficially supports 64GB RAM as well, but it's slightly expensive and tricky to chase down known good RAM sticks.) You can certainly make it work on different bits of hardware too - a configuration like this doesn't have to break your bank account in any way. (I like the size of the Microserver as well as iLO, built in quad port NIC even if it is just gigabit, etc.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Righty, I managed to install an operating system - now what? If you want a UI for management you're driven towards Windows Admin Center (WAC) in general these days:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/overview" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/overview</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Azure Stack HCI has the Server Core UI whereas with Windows Server 2022 you can still go full desktop mode.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Note: This isn't an intro to Kubernetes as such; it's about getting a specific wrapping of Kubernetes going. If you're a k8s veteran there are parts you can skim through, and if you're new to container orchestration you might want to research things in other places as well along the way. I try to hit a middle ground here.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">There's an AKS plugin for WAC that in theory will let you set it up through a wizard. I'm saying "theory" because I'm seeing inconsistency - sometimes I get an unhelpful CredSSP or WinRM error thrown in the face, and sometimes it works. And I'm not liking that. However, it is a great way to install the Powershell cmdlets and have a quick look if things in general are ok. (Screenshot from a two-node setup.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Windows Admin Center AKS Prereqs" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293775iAC028BBE06BF6571/image-size/medium?v=v2&px=400" role="button" title="aks_01.png" alt="Windows Admin Center AKS Prereqs" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Windows Admin Center AKS Prereqs</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">There's a quick start for using the Windows Admin Center (WAC) to set things up here:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/setup" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/setup</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">And for PowerShell here (you can install everything without involving WAC):</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/kubernetes-walkthrough-powershell" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/kubernetes-walkthrough-powershell</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Step 2 & 3 (in PowerShell) is where things can get a little confusing. I did not feel the parameters where sufficiently explained. An example of what I basically went with follows. (I have a slightly different IP addressing scheme, but same same in the bigger picture).</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Assuming you have a 192.168.0.0/24 subnet, and have already created a virtual switch on the server named "LAN". Let's say you use 192.168.0.2 - 192.168.0.99 (default gateway on .1) as your DHCP scope you'll want to carve out a static space separately for AKS.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You will want a range for the nodes, and you will want a range for any load balancers you provision in the cluster. (Adjust to account for your specifics.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <LI-CODE lang="powershell">$vnet = New-AksHciNetworkSetting -name aksvnet -vSwitchName "LAN" -macPoolName aksMacPool -k8sNodeIpPoolStart "192.168.0.101" -k8sNodeIpPoolEnd "192.168.0.110" -vipPoolStart "192.168.0.111" -vipPoolEnd "192.168.0.120" -ipAddressPrefix "192.168.0.0/24" -gateway "192.168.0.1" -dnsServers "192.168.0.1" Set-AksHciConfig -vnet $vnet -imageDir C:\ClusterStorage\Volume01\Images -cloudConfigLocation C:\ClusterStorage\Volume01\Config -cloudservicecidr "192.168.0.100/24" Set-AksHciRegistration -subscriptionId "guid" -resourceGroupName "rg-AKS" Install-AksHci -Verbose</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">It might take a little while to provision, but with a bit of luck it will go through. Don't worry about the Azure registration - this does not incur a cost, but is used for Azure Arc. (Azure Arc is a service for managing on-prem services from Azure and is not specific to AKS.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">After installation of the host cluster you might want to run the <SPAN style="font-style: italic;">Update-AksHci</SPAN> cmdlet in case you didn't get the newest release on the first go. (I have experienced this.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">This takes care of setting up the AKS host, but not the actual nodes for running workloads so you will want to create that next. I went with Linux nodes, but you can create Windows nodes as well if you like. This actually mirrors AKS hosted in Azure, but things have been abstracted away slightly there so you might not think much about this. (Which is OK.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you have a 32GB RAM server the <SPAN style="font-style: italic;">New-AksHciCluster</SPAN> cmdlet without parameters will probably fail since you don't have enough memory. And when scaling things down you'll also want to account for upgrades - when upgrading the cluster a new instance of each virtual machine is spun up in parallel requiring you to have enough headroom for this. This should work:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <LI-CODE lang="powershell">New-AksHciCluster -Name aks01 -loadBalancerVmSize "Standard_A2_v2" -controlplaneVmSize "Standard_A2_v2" -linuxNodeVmSize "Standard_A2_v2"</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>(I attempted using "Standard_K8S_v1</SPAN><SPAN>" for the worker node, but the memory peaked almost immediately resulting in a loop of creating new nodes that were also underpowered and never getting to a fully working state with the workloads described here.)</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you have 64GB or more you shouldn't have to tweak this.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You can upgrade your workload cluster to a newer Kubernetes version independently of the host version. There are limits though - to run the newest versions of Kubernetes on the nodes you may have to upgrade the host to a newer version as well in some cases. Both clusters can be connected to Azure with Arc, but the workload cluster is the most important one here.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Connect the cluster you just created to Azure like this:</P> <LI-CODE lang="powershell">Connect-AzAccount Enable-AksHciArcConnection -name aks01</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">At this point you should be good to verify things by putting some containers inside the cluster if you like.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">I have a very simple frontend & backend setup here:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://github.com/ahelland/HelloFoo" target="_blank" rel="noopener">https://github.com/ahelland/HelloFoo</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Since the images are on Docker hub you only need the <SPAN style="font-style: italic;">/k8s/HelloFoo.yaml</SPAN> if you don't feel like playing with the code or build your own images.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">I wouldn't call it fancy by any means, but it consists of two "microservices" you can test with a Kestrel-based image (dotnet run), Docker and Kubernetes.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">While still on the server you can download kubectl as you will need that to proceed:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><SPAN style="font-style: italic;">curl </SPAN><A href="https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe" target="_blank" rel="noopener"><SPAN style="font-style: italic;">https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe</SPAN></A><SPAN style="font-style: italic;"> -Outfile kubectl.exe</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You also need credentials to access the cluster:</P> <LI-CODE lang="powershell">Get-AksHciCredential -name aks01</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Apply with <SPAN style="font-style: italic;">.\kubectl.exe apply -f HelloFoo.yaml</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Then you can run <SPAN style="font-style: italic;">kubectl get -svc -A</SPAN> to give you the IP address (from the load balancer range you provided)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you just want a plain cloud native setup you're done now. (You can of course install <SPAN style="font-style: italic;">kubectl</SPAN> on your desktop if you prefer.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">However I kinda like testing out "day 2" use cases as well.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">GitOps and Flux is getting more popular as the option for installing configuration and services.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">This is also slightly lacking in the docs. It's actually quite simple (using the same repo):</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Find the cluster through Azure Arc in the Azure Portal and go to the GitOps blade and "Add configuration"</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="GitOps/Flux" style="width: 582px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293782iB7F7A348FCBF3E09/image-size/large?v=v2&px=999" role="button" title="flux_01.png" alt="GitOps/Flux" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">GitOps/Flux</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">For adding a public GitHub repo (like mine) it looks like this, but it's also possible to add private repos. Note the use of the git-path parameter to point to the right folder (containing yaml):</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="GitOps/Flux" style="width: 612px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293783iDB597EA80B9F2B5B/image-size/large?v=v2&px=999" role="button" title="flux_02.png" alt="GitOps/Flux" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">GitOps/Flux</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>For more background:<BR /></SPAN><A href="https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/use-gitops-with-helm" target="_blank" rel="noopener"><SPAN>https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/use-gitops-with-helm</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Once you have this working (you should probably have separate repos for config and apps) you can just go at it in your editor of choice and check in the results to do a roll-out. For an automated bootstrap scenario you can perform the setup with PowerShell as well. Which basically means - a script does all the work of setting up the Kubernetes cluster and then Git kicks in to deploy the essentials.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Since we're at it we will of course need monitoring and tracing abilities too. Azure Monitor is decent, but it does have a cost so if you're on a budget either skip it or keep an eye on it so it doesn't run up a huge bill.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The combo of Prometheus and Grafana is a well known solution for Kubernetes, and that's fairly easy to implement. Follow the instructions here:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/monitor-logging" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/monitor-logging</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">First enable Prometheus:</P> <LI-CODE lang="powershell">Install-AksHciMonitoring -Name aks01 -storageSizeGB 100 -retentionTimeHours 240</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">To load the config for Grafana:</P> <LI-CODE lang="powershell">kubectl apply -f https://raw.githubusercontent.com/microsoft/AKS-HCI-Apps/main/Monitoring/data-source.yaml kubectl apply -f https://raw.githubusercontent.com/microsoft/AKS-HCI-Apps/main/Monitoring/dashboards.yaml</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>Then install Grafana (which will use the data source and the dashbord from the previous two yaml files). (Note that this requires the installation of Helm - </SPAN><A href="https://helm.sh/docs/intro/install/" target="_blank" rel="noopener"><SPAN>https://helm.sh/docs/intro/install/</SPAN></A> downloading the zip and extracting should work on Windows Server.<SPAN>)</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <LI-CODE lang="powershell">helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm install grafana grafana/grafana --version 6.11.0 --set nodeSelector."kubernetes\.io/os"=linux --set sidecar.dashboards.enabled=true --set sidecar.datasources.enabled=true -n monitoring</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Retrieve the Grafana secret (and have it ready for logging in to the dashboard afterwards):</P> <LI-CODE lang="powershell">kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">(Note that the base64 option doesn't work on Windows, so you would need to do that decode separately.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Grafana displaying Prometheus metrics" style="width: 432px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293784i065D1D3516B1587A/image-size/large?v=v2&px=999" role="button" title="Grafana_01.png" alt="Grafana displaying Prometheus metrics" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Grafana displaying Prometheus metrics</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P>There's one more thing we want to do in the monitoring and diagnostics department, but a small digression first.</P> <P> </P> <P>For a small lab at home it's not necessary to be super strict with security and policies inside the cluster, but if you want to practice production the term "service mesh" will come up. I'm not going to do a comparison of those, but Istio, Linkerd and Consul are popular choices that Microsoft provides instructions for as well:</P> <P><A href="https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about</A></P> <P> </P> <P>For more info on meshes you can also check out <A href="https://meshery.io" target="_blank" rel="noopener">https://meshery.io</A></P> <P> </P> <P>I wanted to test "Open Service Mesh" as that is available as an add-on for AKS. I found these instructions clearer:</P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/tutorial-arc-enabled-open-service-mesh#install-arc-enabled-open-service-mesh-osm-on-an-arc-enabled-kubernetes-cluster" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/tutorial-arc-enabled-open-service-mesh#install-arc-enabled-open-service-mesh-osm-on-an-arc-enabled-kubernetes-cluster</A></P> <P> </P> <P>Since I didn't want to bother with making sure I had the right version of Azure Cli installed locally I just did it in Azure Cloud Shell :)</img> (Point being that you don't need to be on-prem to perform this step.)</P> <P> </P> <P>There is a snag at the time of writing this. The instructions point to version 0.8.4, but I wanted to use 0.9.0 (newer) which required me to use this cmdlet:</P> <LI-CODE lang="powershell">az k8s-extension create --cluster-name aks01 --resource-group ARC-AKS-01 --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --release-train staging --name osm --version 0.9.0</LI-CODE> <P> </P> <P>Since I'm using OSM I will also follow the MS instructions for installing the bookstore app:</P> <P><A href="https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about?pivots=client-operating-system-windows#deploy-a-new-application-to-be-managed-by-the-open-service-mesh-osm-azure-kubernetes-service-aks-add-on" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about?pivots=client-operating-system-windows#deploy-a-new-application-to-be-managed-by-the-open-service-mesh-osm-azure-kubernetes-service-aks-add-on</A></P> <P> </P> <P>Note that you should not use the instructions for Grafana and Prometheus from this page - these instructions are for "cloud AKS" not "on-prem AKS". (Prometheus will fail to run due to permissions issues.)</P> <P> </P> <P>You can however use the yaml from this page to install a popular tracing tool called Jaeger. Copy the yaml on the page and save to a file while adding the namespace on top:</P> <P> </P> <LI-CODE lang="yaml">apiVersion: v1 kind: Namespace metadata: name: jaeger labels: name: jaeger ---</LI-CODE> <P> </P> <P> </P> <P>And apply:</P> <LI-CODE lang="powershell">kubectl apply -f jaeger.yaml</LI-CODE> <P> </P> <P>Another quick note about the instructions here. It is referred to a configmap for the settings - this is not used in 0.9.0 any more so to read the config you will need to run the following command:</P> <LI-CODE lang="powershell">kubectl get meshconfig osm-mesh-config -n arc-osm-system -o yaml</LI-CODE> <P> </P> <P>We need to make two small adjustments (enable tracing and change the address for Jaeger) to this meshconfig which can be done by patching the meshconfig:</P> <LI-CODE lang="powershell">kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"observability":{"tracing":{"enable":true,"address": "jaeger.jaeger.svc.cluster.local","port":9411,"endpoint":"/api/v2/spans"}}}}' --type=merge</LI-CODE> <P> </P> <P>On Windows you will probably see an error about invalid json so you have to do an extra step:</P> <LI-CODE lang="powershell">$jsonpatch = '{"spec":{"observability":{"tracing":{"enable":true,"address": "jaeger.jaeger.svc.cluster.local","port":9411,"endpoint":"/api/v2/spans"}}}}' | ConvertTo-Json kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p $jsonpatch --type=merge</LI-CODE> <P> </P> <P>More info:</P> <P><A href="https://docs.openservicemesh.io/docs/concepts_features/osm_mesh_config/" target="_blank" rel="noopener">https://docs.openservicemesh.io/docs/concepts_features/osm_mesh_config/</A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jaeger" style="width: 993px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293785iC8B9C1E65AF01DE6/image-size/large?v=v2&px=999" role="button" title="jaeger_01.png" alt="Jaeger" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Jaeger</span></span></P> <P> </P> <P>For testing you can port-forward to the pods and this makes sense for the bookstore apps, but it's probably better to set up load balancers for this when you want it more permanent so create a file like this to expose Grafana, Jaeger and Prometheus:</P> <P> </P> <P> </P> <LI-CODE lang="yaml">apiVersion: v1 kind: Service metadata: namespace: monitoring name: grafana labels: app.kubernetes.io/instance: grafana app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: grafana app.kubernetes.io/version: 7.5.5 helm.sh/chart: grafana-6.11.0 spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 3000 selector: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana sessionAffinity: None type: LoadBalancer --- apiVersion: v1 kind: Service metadata: namespace: jaeger name: jaeger spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 16686 selector: app: jaeger sessionAffinity: None type: LoadBalancer --- apiVersion: v1 kind: Service metadata: namespace: monitoring name: prometheus spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 9090 selector: app: prometheus sessionAffinity: None type: LoadBalancer</LI-CODE> <P> </P> <P> </P> <P>It would actually be even better to set up ingresses and DNS names, etc. but for the purpose of getting your lab up and running in a basic form this is out of scope.</P> <P> </P> <P>Sure, I skipped some parts you might want to look into here:</P> <UL> <LI>The docs refer to Prometheus scraping metrics from OSM, which you kind of want, but I left that out for now.</LI> <LI>The service mesh is set to permissive which means you don't get all that mesh goodness.</LI> <LI>I have not touched upon network policies or plugins.</LI> <LI>Since I didn't do ingress and didn't do DNS it follows that https isn't part of the picture either.</LI> <LI>While GitOps is part of the CI/CD story we have not explored a setup with pipelines and repos so you might want to tinker with GitHub Actions to automate these pieces.</LI> </UL> <P> </P> <P>I will be exploring these features as well (don't know if I'll put out some instructions on that or not), and I encourage you to do the same. With the risk of repeating myself - this is intended to get an AKS cluster going so it can be used for a basic cloud native setup. What you make of it is up to you :)</img></P> <P> </P> <P>And the disclaimer - I know that this works and seems to be an acceptable way to use the software at the time of writing, but I cannot predict if Microsoft will change anything on the technical or licensing side of things.</P> Tue, 06 Jul 2021 19:10:00 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504 Andreas Helland 2021-07-06T19:10:00Z Web Development for Beginners: A new Learning Path on Microsoft Learn https://techcommunity.microsoft.com/t5/azure-developer-community-blog/web-development-for-beginners-a-new-learning-path-on-microsoft/ba-p/2502044 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="webdev.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/290366i358D67A3A7A0B4A8/image-size/large?v=v2&px=999" role="button" title="webdev.png" alt="webdev.png" /></span></P> <P>> This is based on the Git Hub curriculum <A href="https://github.com/microsoft/Web-Dev-For-Beginners/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">https://github.com/microsoft/Web-Dev-For-Beginners</A></P> <P> </P> <P>There are 16 million developers in the world today. Roughly half of those, 8 million are web developers. Web development is therefore a good skill to have as you are looking to land that first job and build a career in tech. But where do you begin to learn all that? With this path </P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/paths/web-development-101/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Web dev for beginners path</A>.</P> </BLOCKQUOTE> <P>It covers everything from HTML, CSS, JavaScript to Accessibility. </P> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#intro-to-programming" target="_blank" rel="noopener" name="intro-to-programming"></A>Intro to programming</H2> <P>What even is programming? Well, it's a way to instruct your machine to do things for you. By running statements, you can things like creating a web a page, a simple script or why not a computer game. The possibilities are endless. You do need some kind of text editor to type it all in, we provide that to in this first module.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-introduction-programming/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Intro to programming</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#accessibility-on-the-web" target="_blank" rel="noopener" name="accessibility-on-the-web"></A>Accessibility on the Web</H2> <P>Not everyone has perfect eyesight or see the colors you do or can even see at all. As a developer you need to realize that when you build programs, you should include everyone. There are specific tags and approaches you can use to make your app usable by anyone, regardless of disability. Be inclusive and build better apps.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-accessibility/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Web accessibility</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#javascript-variables-and-data-types" target="_blank" rel="noopener" name="javascript-variables-and-data-types"></A>JavaScript variables and data types</H2> <P>One of the most popular programming languages right now is JavaScript. JavaScript can be used in the browser to create an interactive experience, but it can also be used on the backend to create APIs, application that can talk to other services and even databases. Learn how to think in programming by being introduced to the concept of variables and data types.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-variables/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">JavaScript variables and data types</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#functions" target="_blank" rel="noopener" name="functions"></A>Functions</H2> <P>When you start out, you might have all your code statements in one file. But there is a way to organize your code so it can be made more readable but also reusable. What you can do is to create named areas, functions, which can be called whenever you need them to carry out a task for you.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-functions/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Functions in JavaScript</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#decisions-with-ifelse" target="_blank" rel="noopener" name="decisions-with-ifelse"></A>Decisions with IF/ELSE</H2> <P>Your code can execute differently depending on the values of different variables or some other condition. Having that flexibility makes your application useful in many different scenarios. Learn about IF, ELSE and much more.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-if-else/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Decisions with IF/ELSE</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#arrays-and-loops" target="_blank" rel="noopener" name="arrays-and-loops"></A>Arrays and loops</H2> <P>Sometimes your data takes on the form of a list. Imagining a recipe, or an ice cream menu or why not a receipt of things. Lists make it possible to store more than one thing and there are constructs that make it possible to operate on lists and get what you need from them such as their sum, or maybe the highest value and so on. </P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-arrays/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Arrays and loops</A></P> </BLOCKQUOTE> <P> </P> <P> </P> Wed, 30 Jun 2021 13:46:59 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/web-development-for-beginners-a-new-learning-path-on-microsoft/ba-p/2502044 Chris_Noring 2021-06-30T13:46:59Z Machine Learning for Beginners, Curriculum https://techcommunity.microsoft.com/t5/azure-developer-community-blog/machine-learning-for-beginners-curriculum/ba-p/2502024 <P>It is our very great pleasure to announce the release of a new, free, MIT-licensed open-source curriculum all about classic Machine Learning:<SPAN> </SPAN><STRONG><A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning for Beginners</A></STRONG>. Brought to you by a team of Azure Cloud Advocates and Program Managers, we hope to empower students of all ages to learn the basics of ML. Presuming no knowledge of ML, we offer a free 12-week, 24-lesson curriculum, plus a bonus 'postscript' lesson to help you dive into this amazing field.</P> <BLOCKQUOTE> <P>If you liked our first curriculum,<SPAN> </SPAN><A href="https://aka.ms/webdev-beginners" target="_blank" rel="noopener">Web Dev for Beginners</A>, you will love<SPAN> </SPAN><A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning for Beginners</A>!</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#join-us-on-a-voyage" target="_blank" rel="noopener" name="join-us-on-a-voyage"></A>Join us on a voyage!</H2> <P>Travel around the world in this themed semester-long self-study course as we look at ML topics through the lens of world cultures.</P> <P> </P> <P>Our curricula are structured with a modified Project-Based pedagogy and include:</P> <UL> <LI>a pre-lesson warmup quiz</LI> <LI>a written lesson</LI> <LI>video</LI> <LI>knowledge checks</LI> <LI>a project to build</LI> <LI>infographics, sketchnotes, and visuals</LI> <LI>a challenge</LI> <LI>an assignment</LI> <LI>a post-lesson quiz</LI> <LI>a 'PAT' (see below)</LI> <LI>opportunities to deepen your knowledge on Microsoft Learn</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#meet-the-team" target="_blank" rel="noopener" name="meet-the-team"></A>Meet the team!</H2> <P> </P> <DIV class=" fluidvids"><IFRAME src="https://www.youtube.com/embed/Tj1XWrDSYJU" width="710" height="399" allowfullscreen="allowfullscreen" class=" fluidvids-elem" loading="lazy" data-mce-fragment="1"></IFRAME></DIV> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#what-will-you-learn" target="_blank" rel="noopener" name="what-will-you-learn"></A>What will you learn?</H2> <P> </P> <P>The lessons are grouped so that you can deep-dive into various important aspects of classic ML. We start with an<SPAN> </SPAN><STRONG>introduction</STRONG><SPAN> </SPAN>to ML concepts, moving to its<SPAN> </SPAN><STRONG>history</STRONG>, concepts of<SPAN> </SPAN><STRONG>fairness</STRONG><SPAN> </SPAN>in machine learning, and discussing the tools and<SPAN> </SPAN><STRONG>techniques</STRONG><SPAN> </SPAN>of the trade. We then move on to<SPAN> </SPAN><STRONG>Regression</STRONG>,<SPAN> </SPAN><STRONG>Classification</STRONG>,<SPAN> </SPAN><STRONG>Clustering</STRONG>,<SPAN> </SPAN><STRONG>Natural Language Processing</STRONG>,<SPAN> </SPAN><STRONG>Time Series Forecasting</STRONG>,<SPAN> </SPAN><STRONG>Reinforcement Learning</STRONG>, with two<SPAN> </SPAN><STRONG>'applied'</STRONG><SPAN> </SPAN>lessons demonstrating how to use your models within web apps for inference. We end with a 'postscript' lesson listing<SPAN> </SPAN><STRONG>"real-world" applications</STRONG><SPAN> </SPAN>of ML, showing how these techniques are used "in the wild".</P> <P>To make it easy for new learners to get started with ML, we built the content so that it can be used offline and so that the exercises can be completed using .ipynb notebooks within Visual Studio Code. Grab your datasets and let's go!</P> <BLOCKQUOTE> <P>This curriculum is all about "classic Machine Learning", so we tackle these basic concepts for the most part using<SPAN> </SPAN><A href="https://scikit-learn.org/stable/user_guide.html" target="_blank" rel="noopener">Scikit-learn</A>, a library that helps demystify and explain these concepts. We don't discuss deep learning or neural networks in this ML curriculum, but please stay tuned as we release our AI for Beginners curriculum this Fall!</P> </BLOCKQUOTE> <P>Travel with us to discover North American pumpkin market pricing (Regression), Pan-Asian cuisines (Classification), Nigerian musical tastes (Clustering), European Hotel Reviews (NLP), World electricity usage (Time Series) and the Russian story about Peter and the Wolf (Reinforcement Learning).</P> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#how-to-use-this-curriculum-meet-pat" target="_blank" rel="noopener" name="how-to-use-this-curriculum-meet-pat"></A>How to use this curriculum: meet PAT</H2> <P> </P> <P>This is a self-study course, but it works well in groups so consider finding study buddies and learning together. Warm up with a pre-lesson low-stakes quiz and work through the lessons and assignments together or solo. Test your knowledge with the post-lesson quiz.</P> <P>New for this curriculum is the use of<SPAN> </SPAN><STRONG>Progress Assessment Tools</STRONG><SPAN> </SPAN>in the Discussion Board area. Once done with a lesson group, visit the Discussion Board and copy the template to a new Discussion using the "quote reply". Fill in your learnings in the self-reflection box and respond to other students in the repo. Let's learn together!</P> <P>We are also open to PRs and Issue raising, following our Code of Conduct and templating systems. We hope the community will chip in with translations of the lessons, quizzes and assignments. Thank you for participating as we learn together.</P> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#a-sneak-peek" target="_blank" rel="noopener" name="a-sneak-peek"></A>A sneak peek</H2> <P> </P> <P>This curriculum is filled with a lot of art, created by our team. Take a look at this cool sketchnote created by<SPAN> </SPAN><A class="mentioned-user" href="https://dev.to/girlie_mac" target="_blank" rel="noopener">@girlie_mac</A><SPAN> </SPAN>.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_1-1625058142891.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/292562i74A89D6D4F805B73/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_1-1625058142891.jpeg" alt="Chris_Noring_1-1625058142891.jpeg" /></span></P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#without-further-ado-please-meet-machine-learning-for-beginners-a-curriculum" target="_blank" rel="noopener" name="without-further-ado-please-meet-machine-learning-for-beginners-a-curriculum"></A><STRONG>Without further ado, please meet<SPAN> </SPAN><A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning For Beginners: A Curriculum</A>!</STRONG></H2> <P> </P> <P><FONT size="6"><STRONG>You need to LEARN Python? </STRONG></FONT></P> <P><STRONG>Here's our best recommendations from LEARN:</STRONG></P> <P> </P> <P><STRONG>- <A href="https://docs.microsoft.com/en-us/learn/modules/intro-to-python/" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/learn/modules/intro-to-python/</A></STRONG></P> <P><STRONG>- <A href="https://docs.microsoft.com/en-us/learn/paths/python-first-steps/" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/learn/paths/python-first-steps/</A></STRONG></P> <P> </P> <P> </P> <P> </P> Wed, 30 Jun 2021 13:42:31 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/machine-learning-for-beginners-curriculum/ba-p/2502024 Chris_Noring 2021-06-30T13:42:31Z #JulyOT 2021 - 31 Days of Learning for everyone interested in the Internet of Things https://techcommunity.microsoft.com/t5/azure-developer-community-blog/julyot-2021-31-days-of-learning-for-everyone-interested-in-the/ba-p/2450414 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JulyOT-Cloud-Logo.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288881i3C8AEB5098245D11/image-size/large?v=v2&px=999" role="button" title="JulyOT-Cloud-Logo.png" alt="JulyOT-Cloud-Logo.png" /></span></P> <P><SPAN data-contrast="none"><FONT size="5"><STRONG>Introduction</STRONG></FONT></SPAN></P> <P><SPAN data-contrast="none">It’s a new year, and it’s time for another round of #JulyOT! This themed month of blog posts, live streams, videos, and learning materials focuses on all things related to development of IoT Solutions built using Azure IoT Services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Throughout the month of July, the IoT Cloud Advocacy team @ Microsoft will be sharing content and events put together by IoT enthusiasts from around the world. This includes content from community members, Microsoft employees, and could even involve you! </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none"><BR />For every weekday in July, we’ll focus on a featured content piece from our </SPAN><A href="https://aka.ms/julyot" target="_blank" rel="noopener"><SPAN data-contrast="none">curated collection at the IoT Tech Community</SPAN></A><SPAN data-contrast="none">. The idea is to inspire those curious about IoT to pursue their own personal projects within the realm of Internet of Things. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Make sure to bookmark our <A href="https://aka.ms/julyot" target="_blank" rel="noopener">#JulyOT post at the </A></SPAN><A href="https://aka.ms/julyot" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft IoT Tech Community</SPAN></A><SPAN data-contrast="none"> and be sure to refresh the page throughout the month, as we will be adding new content each week that align to this year’s #JulyOT Content Themes! </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><FONT size="5"><STRONG><SPAN data-contrast="none">#JulyOT Content Themes</SPAN></STRONG></FONT><SPAN><FONT size="5"> </FONT><BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="none">Each week during the month of #JulyOT, we will focus on a specific area of IoT and we are pleased to say that we have a little bit of something for everyone. See below for a quick listing of our content themes for the month!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><SPAN data-contrast="none">July 1 – 2 : #JulyOT Content Kickoff </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><SPAN data-contrast="none">July 5 – 9 : Artificial Intelligence at the Edge </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><SPAN data-contrast="none">July 12 – 16 : Beginners, Students, Teachers and Makers</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><SPAN data-contrast="none">July 19 – 23 : Microcontrollers and Embedded Hardware </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><SPAN data-contrast="none">July 26 – 30 : Online learning and Certification </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN> </LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Whether you are interested in applied artificial intelligence, a total beginner, a student looking to start a class project, teacher looking for an IoT course curriculum, a hardware tinkerer / hacker, or professional developer looking to designate yourself as an official </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-220?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure IoT Developer</SPAN></A><SPAN data-contrast="none">, we have you covered! Check out the sections below for more details on what to expect during these themed weeks.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">Throughout the month we'll also be hosting a variety of livestreams throughout the world as part of the <A title="Microsoft Reactor #JulyOT2021 Series" href="https://developer.microsoft.com/en-us/reactor/eventseries/JulyOT2021?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener noreferrer">Microsoft Reactor #JulyOT2021 Series</A>. Register to attend live sessions featuring QnA with experts from the Microsoft IoT Advocacy team!</SPAN></P> <P> </P> <P><A title="Microsoft Reactor #JulyOT2021 Series" href="https://developer.microsoft.com/en-us/reactor/eventseries/JulyOT2021?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="reactor.PNG" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/292963i8EBD0FE6711D8E1B/image-size/medium?v=v2&px=400" role="button" title="reactor.PNG" alt="reactor.PNG" /></span></SPAN></A></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 1 – 2 : #JulyOT Content Kickoff </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">We plan to begin #JulyOT by spreading the word far and wide ot let everyone know that we are looking to inspire interested individuals from all over the world to build innovative IoT solutions. Help us by sharing this very blog post to your favorite IoT Communities!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">July 5 – 9 : Artificial Intelligence at the Edge</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pdecarlo_0-1623782410042.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288882iF6AF3BF0746A1C13/image-size/medium?v=v2&px=400" role="button" title="pdecarlo_0-1623782410042.png" alt="pdecarlo_0-1623782410042.png" /></span></P> <P> </P> <P><A href="https://microsoft.github.io/ai-at-edge/" target="_blank" rel="noopener"><SPAN data-contrast="none">Artificial Intelligence at the Edge</SPAN></A><SPAN data-contrast="none"> is one of the hottest trends in IoT, and we have an excellent line-up of community created content to excite all who have an interest in this area. We’ll begin with a creative solution from </SPAN><A href="https://www.linkedin.com/in/goranvuksic/" target="_blank" rel="noopener"><SPAN data-contrast="none">Goran Vuksic</SPAN></A><SPAN data-contrast="none"> that leverages the </SPAN><A href="https://azure.microsoft.com/en-us/services/azure-percept?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Percept Dev Kit</SPAN></A><SPAN data-contrast="none"> and </SPAN><A href="https://www.lego.com/en-us/themes/boost?CMP=AFC-AffiliateUS-msYS1Nvjv4c-3624890-115554-1" target="_blank" rel="noopener"><SPAN data-contrast="none">Lego Boost sensors</SPAN></A><SPAN data-contrast="none"> to create an Azure Percept Mobile! Also, </SPAN><A href="https://www.linkedin.com/in/pjgcreations/" target="_blank" rel="noopener"><SPAN data-contrast="none">Peter Gallagher</SPAN></A><SPAN data-contrast="none"> and </SPAN><A href="https://www.linkedin.com/in/clifford-agius/" target="_blank" rel="noopener"><SPAN data-contrast="none">Clifford Agius</SPAN></A><SPAN data-contrast="none">, both incredible </SPAN><A href="https://mvp.microsoft.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure IoT MVPs</SPAN></A><SPAN data-contrast="none"> from the larger IoT Developer Community and hosts of </SPAN><A href="https://www.youtube.com/channel/UCVQtNIXAgtJA-w9pd17WH5A" target="_blank" rel="noopener"><SPAN data-contrast="none">Azureish Live</SPAN></A><SPAN data-contrast="none">, will share some exciting content that will show you how to build your own solutions using the </SPAN><A href="https://azure.microsoft.com/en-us/services/azure-percept?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Percept Dev Kit</SPAN></A><SPAN data-contrast="none">. This will be followed up by an article from </SPAN><A href="https://www.linkedin.com/in/chintan-shah-7b7a2811/" target="_blank" rel="noopener"><SPAN data-contrast="none">Chintan Shah</SPAN></A><SPAN data-contrast="none">, product manager at </SPAN><A href="https://nvidia.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">NVIDIA</SPAN></A><SPAN data-contrast="none">, that will show you how to enhance pre-trained AI models using the Transfer Learning Toolkit on Azure Virtual Machines! To finish off the week, Benjamin Cabe will share his infamous </SPAN><A href="https://makezine.com/2021/05/28/what-an-ai-nose-knows/" target="_blank" rel="noopener"><SPAN data-contrast="none">Artificial Nose</SPAN></A><SPAN data-contrast="none">, a device that can make sense of smells using an off the shelf microcontroller paired with </SPAN><A href="https://www.tinyml.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">TinyML</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 12 – 16 : Beginners, Students, Teachers, and Makers</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pdecarlo_1-1623782562639.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288884i4CC049FE5E4CCC1D/image-size/medium?v=v2&px=400" role="button" title="pdecarlo_1-1623782562639.png" alt="pdecarlo_1-1623782562639.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">We often hear questions from folks interested in getting started with IoT, whether it is students looking to add a new in-demand skill to their learning, faculty looking for curricula to teach their knowledge-hungry students, bootcamps wanting to upskill their members, or experienced developers looking to learn a new area. This is why we’ve built </SPAN><A href="https://aka.ms/iot-beginners" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT for beginners</SPAN></A><SPAN data-contrast="none">, a free, open source, project-based, 24 lesson curriculum designed to teach you or your students IoT from the ground up, built in collaboration between Microsoft and students around the globe. We understand that not everyone has access to IoT hardware for learning, so we’ve provided multiple options for what you need to get started.</SPAN><SPAN> <BR /><BR /></SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pdecarlo_0-1625749717591.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/294289iF90BF23C46FCDA14/image-size/medium?v=v2&px=400" role="button" title="pdecarlo_0-1625749717591.png" alt="pdecarlo_0-1625749717591.png" /></span></P> <P><SPAN data-contrast="none">One option is to use IoT kits that our friends as </SPAN><A href="https://www.seeedstudio.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Seeed Studio</SPAN></A><SPAN data-contrast="none"> have put together, based around either an Arduino-based Wio Terminal, or a Raspberry Pi:</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Wio-Terminal-Starter-Kit-p-5006.html" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT for beginners with Seeed and Microsoft - Wio Terminal Starter Kit</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit.html" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT for beginners with Seeed and Microsoft - Raspberry Pi 4 Starter Kit</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P><SPAN data-contrast="none">The other option is to use </SPAN><A href="https://github.com/CounterFit-IoT/CounterFit" target="_blank" rel="noopener"><SPAN data-contrast="none">virtual IoT hardware that you can run on your computer</SPAN></A><SPAN data-contrast="none">, simulating a range of sensors and actuators.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">We’ll be kicking off the week with a </SPAN><A href="http://aka.ms/HelloIoTSeriesPage" target="_blank" rel="noopener"><SPAN data-contrast="none">series of livestreams</SPAN></A><SPAN data-contrast="none"> in collaboration with the </SPAN><A href="https://developer.microsoft.com/reactor/?WT.mc_id=academic-26896-jabenn" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Reactor</SPAN></A><SPAN data-contrast="none"> covering the first 4 lessons. We will then share more lessons, focusing on a different project each day. We start with learning how to use </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/2-farm" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT in a smart farm</SPAN></A><SPAN data-contrast="none"> to help feed our growing population. We then move on a journey from the farm to your table with lessons based on a </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/3-transport" target="_blank" rel="noopener"><SPAN data-contrast="none">smart logistics project</SPAN></A><SPAN data-contrast="none">, tracking your food as it leaves the farm. We jump to AI on the edge next as you learn how to build an </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/4-manufacturing" target="_blank" rel="noopener"><SPAN data-contrast="none">AI powered fruit quality detector</SPAN></A><SPAN data-contrast="none"> as part of a smart factory. Retail is next on the agenda as you see how to </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/5-retail" target="_blank" rel="noopener"><SPAN data-contrast="none">build stock counting once again using AI on the edge</SPAN></A><SPAN data-contrast="none">. To round off the week it’s time to cook something nice, using a timer you’ve built as part of a </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/6-consumer" target="_blank" rel="noopener"><SPAN data-contrast="none">voice controlled smart assistant</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN> <BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="none">As you get involved trying out these lessons and learning IoT we want you to share your experiences! Please share the IoT apps you have built with the hashtag #JulyOT!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 26 – 30 : Microcontrollers and Embedded Hardware</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="azure-sphere-end-to-end.png" style="width: 538px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288885i0A7CD10A7A86BA7E/image-size/large?v=v2&px=999" role="button" title="azure-sphere-end-to-end.png" alt="azure-sphere-end-to-end.png" /></span></P> <P><SPAN data-contrast="none">If you are not thinking about secure IoT then you should be especially considering recent ransomware attacks on American infrastructure. The focus of this week will be on building secure by design and default IoT solutions with </SPAN><A href="https://azure.microsoft.com/en-au/services/azure-sphere?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Sphere</SPAN></A><SPAN data-contrast="none"> and Azure IoT. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">This week will kickstart your Azure Sphere journey, and learn about best practices and useful tools that will make your life easier developing Azure Sphere applications. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Following this, be first to learn how we bought the </SPAN><A href="https://en.wikipedia.org/wiki/Altair_8800" target="_blank" rel="noopener"><SPAN data-contrast="none">Altair 8800</SPAN></A><SPAN data-contrast="none"> to Azure Sphere and cloud enabled the 40-year-old technology born when the internet was just a twinkle in Tim Berners-Lee's eye. This project pushed the boundaries of Azure Sphere, the project is open source and you will learn how to run the Altair 8800 on the Azure Sphere and develop Basic, Assembler and C applications on the Azure Sphere.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">We've also teamed up with Microchip to release new free courseware on </SPAN><A href="https://aka.ms/mu.microchip/AzureIoT" target="_blank" rel="noopener"><SPAN data-contrast="none">Microchip University </SPAN></A><SPAN data-contrast="none">and the Enabling a Seamless IoT Experience with Microsoft Azure IoT and Microchip MCUs/MPUs </SPAN><A href="https://aka.ms/mu.microchip/AzureIoT/ConnectingDevices/Webinar" target="_blank" rel="noopener"><SPAN data-contrast="none">on-demand webinar</SPAN></A><SPAN data-contrast="none">. Courses will cover the full device lifecycle, including provisioning at scale, connecting devices to the cloud, and working with top Microchip MCUs. (PIC, SAM E54, etc) Plus, we will cover how to work with IoT Plug and Play and using Azure IoT Central for device management. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">And finally, the Raspberry Pi Foundation released the new RP2040 based Raspberry Pi Pico this year and there is now a Wi-Fi enabled developer board built on the RP2040 from </SPAN><A href="https://store.arduino.cc/usa/nano-rp2040-connect-with-headers" target="_blank" rel="noopener"><SPAN data-contrast="none">Arduino</SPAN></A><SPAN data-contrast="none">. In this segment we will cover how to connect an RP2040 based microcontrollers to Azure IoT and Azure IoT Central with the new </SPAN><A href="https://github.com/Azure/azure-sdk-for-c" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure SDK for Embedded C</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 27 – 31 : Online Learning and Certification</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288890i36CFFBAC67F7DE5E/image-size/medium?v=v2&px=400" role="button" title="0.jpg" alt="0.jpg" /></span></SPAN></P> <P> </P> <P><SPAN data-contrast="none">During these 31 days, we also want to challenge our community to sharpen their knowledge of Azure IoT Services by offering an Azure IoT Developer Journey designed to guide learners in pursuit of an official designation as a </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-220?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">certified Azure IoT Developer</SPAN></A><SPAN data-contrast="none">. We are accompanying this Learning journey with a “</SPAN><A href="https://developer.microsoft.com/en-us/offers/30-days-to-learn-it?challenge_option=6437124F-B20B-4840-9715-CFD6D3F25C89?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">30 Days to Learn It - Cloud Skills Challenge</SPAN></A><SPAN data-contrast="none">”. This is a limited-time promotion that will challenge you to learn and apply knowledge of Azure IoT Services by completing a </SPAN><A href="https://docs.microsoft.com/en-us/users/cloudskillschallenge/collections/n52yhn0emjx0?WT.mc_id=cloudskillschallenge_6437124F-B20B-4840-9715-CFD6D3F25C89?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">curated series of interactive learning</SPAN></A><SPAN data-contrast="none"> modules from the </SPAN><A href="https://docs.microsoft.com/en-us/learn/browse/?expanded=azure&products=azure-iot%2Cazure-iot-central%2Cazure-iot-edge%2Cazure-iot-hub&resource_type=module" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Learn Online Learning Platform</SPAN></A><SPAN data-contrast="none">. Once you have registered for the Cloud Skills Challenge, if you are able to complete the assigned modules within a 30-day time period, you may be eligible to receive a 50% off voucher to take the official </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-220?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">AZ-220 IoT Developer Certification Exam</SPAN></A><SPAN data-contrast="none">.” </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Otherwise, if you would like to complete the recommended learning outside the 30 Days to learn it here are the individuals learning paths:</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/introduction-to-azure-iot/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Introduction to Azure IoT</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/build-intelligent-edge-with-azure-iot-edge/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Build the intelligent edge with Azure IoT Edge</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/securely-connect-iot-devices/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Securely connect IoT devices to the cloud</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/develop-iot-solutions-with-azure-iot-central/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop IoT solutions with Azure IoT Central</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/develop-azure-digital-twins/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop with Azure Digital Twins</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P> </P> <P><SPAN data-contrast="none">Apart from the self-paced learning approach if you prefer an instructor-led approach to complete your certification training here is where you may find </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/courses/az-220t00?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">more information</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Also, during this week you will learn more about how to </SPAN><A href="https://aka.ms/IoT-online-workshop" target="_blank" rel="noopener"><SPAN data-contrast="none">build end to end IoT solutions with our 6 part series.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN><SPAN data-contrast="auto">Learn how you can implement Microsoft Azure Defender for IoT to secure your entire IoT/OT environment, protect existing IoT/OT devices, and build security into new IoT innovations in our </SPAN><A href="https://aka.ms/defenderiot" target="_blank" rel="noopener"><SPAN data-contrast="none">new learning path</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">If you would like to take your learning journey to the next level, applying and relating services and concepts to a real-world scenario, we have a bunch of demo resources, virtual cloud workshops and hands-on labs to help you tackle some of these common scenarios end-to-end whether you are a developer, architect or decision maker trying to apply some of these key concepts to your industry or specific business scenario:</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="6" data-aria-level="1"><SPAN data-contrast="none">Leveraging Azure Digital Twins in a supply chain (</SPAN><A href="https://github.com/microsoft/MCW-Leveraging-Azure-Digital-Twins-in-a-supply-chain" target="_blank" rel="noopener"><SPAN data-contrast="none">MCW</SPAN></A><SPAN data-contrast="none"> version, </SPAN><A href="https://github.com/Azure-Samples/IoTDemos/tree/master/ADT-SupplyChainDemo" target="_blank" rel="noopener"><SPAN data-contrast="none">GitHub</SPAN></A><SPAN data-contrast="none"> version)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559737":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><A href="https://github.com/Azure-Samples/IoTDemos/tree/master/RetailDemo" target="_blank" rel="noopener"><SPAN data-contrast="none">Retail Demo - Instore Analytics</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559737":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="8" data-aria-level="1"><A href="https://github.com/Azure-Samples/IoTDemos/tree/master/WorkplaceHealthAndSafetyDemo" target="_blank" rel="noopener"><SPAN data-contrast="none">Workplace Health and Safety Demo</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559737":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="8" data-aria-level="1"><SPAN data-contrast="none">Chocolate Manufacturing Factory Condition Monitoring using Azure Digital Twins (MS Learn </SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/develop-azure-digital-twins/" target="_blank" rel="noopener"><SPAN data-contrast="none">version</SPAN></A><SPAN data-contrast="none">, GitHub </SPAN><A href="https://github.com/Azure-Samples/digital-twins-samples/tree/master/HandsOnLab" target="_blank" rel="noopener"><SPAN data-contrast="none">version</SPAN></A><SPAN data-contrast="none">)</SPAN><SPAN data-contrast="none"> </SPAN></LI> </UL> <P><FONT size="5"><STRONG><SPAN data-contrast="none">Conclusion:</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P><SPAN data-contrast="none">We hope to inspire all who partake in #JulyOT with the motivation to learn and apply your knowledge to create something new! If you have an idea, let us know about it on social media by using the hashtag #JulyOT to share your ideas and creations! We plan to feature your awesome submissions in a follow-up post, so start thinking about that project you always wanted to and keep us posted along the way, we can’t wait to see what you create!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> Thu, 08 Jul 2021 13:11:08 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/julyot-2021-31-days-of-learning-for-everyone-interested-in-the/ba-p/2450414 pdecarlo 2021-07-08T13:11:08Z Combating gender-based violence in South Africa with Microsoft Azure https://techcommunity.microsoft.com/t5/azure-developer-community-blog/combating-gender-based-violence-in-south-africa-with-microsoft/ba-p/2417972 <P>When Naomi and Christine Bisimwa took part in the Microsoft Hackathon, they had one goal: help local women experiencing gender-based violence.</P> <P> </P> <P>The result? S.A.F.E., a platform dedicated to empowering and protecting women. </P> <P> </P> <P>These dedicated developers led a team called “Combat against GBV” in using Microsoft Azure, AI, and GitHub to create an educational and interactive solution for women and children, accessible through Twitter, Facebook Messenger, and WhatsApp.</P> <P> </P> <P>In this video, Naomi and Christine Bisimwa explain the importance of cloud and mobile technology in tackling the rampant effects of gender-based violence in South Africa and the role their chatbot plays in empowering girls and women in their community to take their lives back into their own hands.</P> <P> </P> <P>If you are interested in being a change agent in your community, sharpen your technical skills today at <A href="http://aka.ms/trainingandcertification" target="_self">aka.ms/trainingandcertification</A>.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=rHpNoZthYWw" align="center" size="large" width="600" height="338" uploading="false" thumbnail="http://i.ytimg.com/vi/rHpNoZthYWw/hqdefault.jpg" external="url"></LI-VIDEO></P> Fri, 11 Jun 2021 06:23:58 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/combating-gender-based-violence-in-south-africa-with-microsoft/ba-p/2417972 Elsa_Ramesh 2021-06-11T06:23:58Z Fusion Teams 101: Low-Code Apps with Power Platform https://techcommunity.microsoft.com/t5/azure-developer-community-blog/fusion-teams-101-low-code-apps-with-power-platform/ba-p/2414037 <P aria-level="1"><STRONG><SPAN data-contrast="auto">Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":240,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, there will be a blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">LCAD on Azure is a solution that integrates the robust development capabilities of low code Microsoft Power Apps and the Azure products such as Azure Functions, Azure Logic Apps, and more.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This month’s webinar is </SPAN><A href="https://info.microsoft.com/ww-Landing-fusion-teams-101LowCode-power-platform.html" target="_blank" rel="noopener"><SPAN data-contrast="none">‘Fusion Teams 101: Low Code Apps with Power Platform.’</SPAN></A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1622747557549.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286060i942D4AE1E8A54363/image-size/large?v=v2&px=999" role="button" title="riduncan_0-1622747557549.png" alt="riduncan_0-1622747557549.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">This blog will briefly recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="auto">provide an overview of the </SPAN><STRONG><SPAN data-contrast="auto">fusion development learning path</SPAN></STRONG><SPAN data-contrast="auto">, low code </SPAN><STRONG><SPAN data-contrast="auto">serverless architecture</SPAN></STRONG><SPAN data-contrast="auto">, and recent </SPAN><STRONG><SPAN data-contrast="auto">pro developer focused updates to the Power Platform</SPAN></STRONG><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This is a helpful blog for those looking to deep dive on Fusion Development with Power Platform and those who want to integrate a fusion development team in their work environment.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What is Low code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">was created to help developers build business applications faster with less code.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees track incoming inventory.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy. Using Power Apps, it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">To learn more about possible scenarios with LCAD on Azure go through the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">self-guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_1-1622747557535.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286061iF8B49FD1CB33A415/image-size/large?v=v2&px=999" role="button" title="riduncan_1-1622747557535.png" alt="riduncan_1-1622747557535.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":240}"> </SPAN><STRONG><SPAN data-contrast="auto">Fusion Development Learning Path</SPAN></STRONG><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">The fusion development learning path is centered around a unique story telling style.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The learner is embedded as part of the fusion development team and helps them solve their business problem. The fusion team needs to track inventory more easily and needs to track data on their back end, but the data is in a legacy back end.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The two teams of the professional developers and the citizen developers work together, and the learning path situates you as a member of the team. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1622747557581.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286062i8820CBCAE7374D8E/image-size/large?v=v2&px=999" role="button" title="riduncan_2-1622747557581.png" alt="riduncan_2-1622747557581.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Below are the</SPAN><STRONG><SPAN data-contrast="auto"> 5 modules</SPAN></STRONG><SPAN data-contrast="auto"> that you walk through to solve the problem. Keep in mind each module can be completed individually but you learn more throughout each module. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1622747557575.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286065i268087B1732C6B15/image-size/large?v=v2&px=999" role="button" title="riduncan_3-1622747557575.png" alt="riduncan_3-1622747557575.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN><STRONG><SPAN data-contrast="auto">Transform Business Software Authoring </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">You learn how software development, IT, and business teams work better together using a new software paradigm called fusion development and how to develop apps better and faster using fusion development, which increases technical intensity.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Understanding Low Code as a Traditional Developer</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Professional developers are used to using VS and VS Code, Power Apps is a different environment therefore the module covers bridging the gap between existing traditional development knowledge and Power Apps logic, user interface creation, and data flow.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, the module introduces Microsoft Power Fx, the language you write in Power Apps, not just drag, and drop but can write code behind it. You will see the Power Fx formula, and the JavaScript equivalent will be side by side so you can see how you would traditionally build it.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Build a Power Apps component </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">This module is about building a custom Power Apps component. The ability for code first developers to create something that does not exist yet, build it, test it, deploy it in Power Apps. Like their current role but they only build one component of the app rather than build the entire app.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Integrate Open API-enabled web APIs with Azure API Management through Visual Studio.</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">In this module you take a web API, add an Open API description to it, and deploy to Azure App Service and API Management.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Discover and use web APIs with Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Lastly, in this module you build a custom connector to bridge the gap between Power Apps and API Management to bring an existing web service into your Power App.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">In the webinar the presenter, Matt Soucoup will take you through a demo on building the inventory management application and will walk you through modules 2, 4, and 5.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Low Code Serverless Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To understand the benefits of building a low code serverless architecture you must first understand the benefits of serverless and traditional PaaS architectures.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_4-1622747557537.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286063iC725EEBCB5C35664/image-size/large?v=v2&px=999" role="button" title="riduncan_4-1622747557537.png" alt="riduncan_4-1622747557537.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN><STRONG><SPAN data-contrast="auto">What is Serverless?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Serverless applications can be defined by three groups, abstraction of servers, event-driven or instant scale applications, and micro-billing charges.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Abstraction of servers</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">When as a professional developer you deploy and develop apps, but you don't have to manage servers.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Event-driven/instant scale</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The ability for your apps to scale elastically, scaling can be triggered and be brought back down as needed.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Micro-billing</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">You are billed on a per transaction basis for the services your applications consume.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Conventional PaaS Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_5-1622747557551.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286064iFA745E64C3991EA2/image-size/large?v=v2&px=999" role="button" title="riduncan_5-1622747557551.png" alt="riduncan_5-1622747557551.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">It was important to highlight the benefits of serverless before we dove into the differences of conventional PaaS architectures, standard serverless architectures, and serverless architectures that leverage low code.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">In conventional PaaS architectures web and mobile front ends are where the end user consumes the application. While the business logic is hosted in an app service, if you’re using Azure, then Azure App Service.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">That app service communicates with the database, however if any adjustments are needed for the application the entire app must be taken down. Or if a function in the app needs to scale up, the entire app must scale up which increases costs.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Serverless Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_6-1622747557565.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286068iCCD52C5A82FA73B6/image-size/large?v=v2&px=999" role="button" title="riduncan_6-1622747557565.png" alt="riduncan_6-1622747557565.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">With standard serverless architectures the way the end user experiences the app on a web or mobile front end is all normal. However, rather than the app being stored in an app service, it is broken into its core functions as serverless APIs, on Azure we call this service Azure Functions.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">These functions have all the above-listed benefits of serverless applications, the ability to scale elastically and only pay for what you consume. Moreover, react or angular software is used to build the front end.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Low Code Serverless Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_7-1622747557567.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286067iAB321E6552479CC0/image-size/large?v=v2&px=999" role="button" title="riduncan_7-1622747557567.png" alt="riduncan_7-1622747557567.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Serverless Architecture with Power Apps can be the same build architecture as a standard serverless architecture build. However, rather than React or Angular software it is replaced with Power Apps to build the front end of the app. Power Apps takes less time than traditional front end build software and can save up to 74% on development costs.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Build 2021 Fusion Team Power Platform Enhancements</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="auto">In the webinar the speaker, Kartik Kanakasabesan walks you through the new improvements to the Power Platform’s capabilities for professional developers and fusion teams. More specifically, he demonstrates the </SPAN><STRONG><SPAN data-contrast="auto">Microsoft Power Platform Command Line interface support for packages and canvas source files</SPAN></STRONG><SPAN data-contrast="auto">, </SPAN><STRONG><SPAN data-contrast="auto">Microsoft Power Platform tools for Visual Studio Code and Visual Studio</SPAN></STRONG><SPAN data-contrast="auto">, and the </SPAN><STRONG><SPAN data-contrast="auto">New Microsoft Power Platform application lifecycle management accelerators</SPAN></STRONG><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Power Platform Command Line interface support for packages and canvas source files</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_8-1622747557539.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286066i8FDF824BD233D71F/image-size/large?v=v2&px=999" role="button" title="riduncan_8-1622747557539.png" alt="riduncan_8-1622747557539.png" /></span></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">As part of the fusion theme, Microsoft now provides developers with the ability to render canvas apps in a source-code-friendly format. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The benefit of this capability is to enable canvas applications to take advantage of enterprise CI/CD pipelines for deployment and enhance the collaboration between citizens and code-first developers.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">For example, when resolving Power Fx functions, a citizen developer referencing a complicated regular expression for rounding updates in their canvas app, can collaborate with a pro developer to fix the function in the developer’s primary tool.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The citizen developer can then continue with their application development work using the fixed regular expression by the pro developer.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_9-1622747557568.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286071i09A5A1F1A1D087CD/image-size/large?v=v2&px=999" role="button" title="riduncan_9-1622747557568.png" alt="riduncan_9-1622747557568.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_10-1622747557569.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286070i8D1B18AEE581C477/image-size/large?v=v2&px=999" role="button" title="riduncan_10-1622747557569.png" alt="riduncan_10-1622747557569.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><I><SPAN data-contrast="none">Traditional rendition of Canvas App in Source control system (Top) issuing the unpack command (Bottom).</SPAN></I></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_11-1622747557553.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286069i9080CB02BCC1B959/image-size/large?v=v2&px=999" role="button" title="riduncan_11-1622747557553.png" alt="riduncan_11-1622747557553.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_12-1622747557574.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286073i164F56C749C5AEFB/image-size/large?v=v2&px=999" role="button" title="riduncan_12-1622747557574.png" alt="riduncan_12-1622747557574.png" /></span></P> <P><I><SPAN data-contrast="none">Source code rendition of a canvas app (Top) authoring PowerFx in VSCode (Bottom).</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">In addition, the Microsoft Power Platform CLI now also simplifies the package deployment process for Microsoft Power Platform developers and independent software vendors (ISVs).</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past, this process required several other command-line tools just to deploy a package into an environment. Now the Microsoft Power Platform CLI has a simple new sub command called </SPAN><I><SPAN data-contrast="none">package.</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">Within the package sub command, developers can now initialize a package with a template, add package references to solutions, and build and deploy without manual procedures. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Microsoft Power Platform tools for Visual Studio Code and Visual Studio</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_13-1622747557554.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286072i4E4815B42D1D7CE2/image-size/large?v=v2&px=999" role="button" title="riduncan_13-1622747557554.png" alt="riduncan_13-1622747557554.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">Microsoft has been actively working on simplifying the myriad of tools required to develop, pack, and deploy code first components to Microsoft Power Platform.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> Microsoft Power Platform CLI was the first iteration of this, and there are now similar capabilities directly into the code first experience for developers in Visual Studio Code.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The Visual Studio Code extension will be available across different Operating System platforms like Windows and Mac OS, as Microsoft continues to bring consistent experiences across platforms. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_14-1622747557576.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286074i5412B67F789CA18F/image-size/large?v=v2&px=999" role="button" title="riduncan_14-1622747557576.png" alt="riduncan_14-1622747557576.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">In addition to the Visual Studio Code capabilities, the Visual Studio team has been actively working on improving the application programming interface (API) publishing experience for developers.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past, developers building APIs would have to go outside of their developer environment, after publishing their API to Azure, to register their API in Azure API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">There are improvements to simplify the process and provide the ability to publish the API and register in API Management from Visual Studio directly. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_15-1622747557556.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286077i3BCCDD8E4B3BDDB1/image-size/large?v=v2&px=999" role="button" title="riduncan_15-1622747557556.png" alt="riduncan_15-1622747557556.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_16-1622747557557.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286078iCBE0FF28002BD7BB/image-size/large?v=v2&px=999" role="button" title="riduncan_16-1622747557557.png" alt="riduncan_16-1622747557557.png" /></span></P> <P> </P> <P><I><SPAN data-contrast="none">Publishing the API and registering the API in API Management from Visual Studio.</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">Once the API is registered in the API Management catalog, a developer can then export the API to Microsoft Power Platform as an API Management connector with only a few clicks.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_17-1622747557540.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286076iE984A0EED53BE036/image-size/large?v=v2&px=999" role="button" title="riduncan_17-1622747557540.png" alt="riduncan_17-1622747557540.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_18-1622747557542.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286079iCA063A57DF938B03/image-size/large?v=v2&px=999" role="button" title="riduncan_18-1622747557542.png" alt="riduncan_18-1622747557542.png" /></span></P> <P> </P> <P><I><SPAN data-contrast="none">Publishing the API from Management to Microsoft Power Platform.</SPAN></I></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_19-1622747557559.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286081iBCFC1DC6F1489C62/image-size/large?v=v2&px=999" role="button" title="riduncan_19-1622747557559.png" alt="riduncan_19-1622747557559.png" /></span><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">This now allows citizen developers to easily access their own company data when creating Microsoft Power Platform apps and flows.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Similarly, this capability expanded to also include Azure Functions, allowing developers to build serverless functions and have them be consumed via API Management in Microsoft Power Platform.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Using the Visual Studio 2019 preview edition, developers within Visual Studio can author their Azure Functions, and publish them directly into Azure, where </SPAN><A href="https://aka.ms/openapifunctions" target="_blank" rel="noopener"><SPAN data-contrast="none">developers are also able to register their Functions in API Management without leaving Visual Studio</SPAN></A><SPAN data-contrast="none">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_20-1622747557560.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286080i1EFF9315E5D8BA53/image-size/large?v=v2&px=999" role="button" title="riduncan_20-1622747557560.png" alt="riduncan_20-1622747557560.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_21-1622747557543.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286084iB92B450F34773342/image-size/large?v=v2&px=999" role="button" title="riduncan_21-1622747557543.png" alt="riduncan_21-1622747557543.png" /></span></P> <P><I><SPAN data-contrast="none">Publishing Azure Functions and registering in API Management from within Visual Studio.</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">Once the API is published and registered in API Management, the API can be exported as a connector to Microsoft Power Platform and consumed by apps and flows with ease.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_22-1622747557533.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286082iCFF2C8DCF1591175/image-size/large?v=v2&px=999" role="button" title="riduncan_22-1622747557533.png" alt="riduncan_22-1622747557533.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_23-1622747557544.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286083i4C66A06F54C4341B/image-size/large?v=v2&px=999" role="button" title="riduncan_23-1622747557544.png" alt="riduncan_23-1622747557544.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_24-1622747557508.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286085iAD65B72DC5C1D72E/image-size/large?v=v2&px=999" role="button" title="riduncan_24-1622747557508.png" alt="riduncan_24-1622747557508.png" /></span></P> <P><I><SPAN data-contrast="none">Using the Azure Function as Custom Connector in Microsoft Power Platform Applications.</SPAN></I><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Microsoft is constantly looking at ways to make citizens and pro developers collaborate in a frictionless way, without leaving their authoring environments.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> You can download Visual Studio 2019 build 16.10 to try out these API publishing capabilities in June.</SPAN></P> <P> </P> <P aria-level="3"><STRONG><SPAN data-contrast="none">New Microsoft Power Platform application lifecycle management accelerators</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_25-1622747557570.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286086i82C3ED72B12F59B5/image-size/large?v=v2&px=999" role="button" title="riduncan_25-1622747557570.png" alt="riduncan_25-1622747557570.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">The </SPAN><A href="https://aka.ms/coestarterkit" target="_blank" rel="noopener"><SPAN data-contrast="none">Center of Excellence (CoE) Starter Kit</SPAN></A><SPAN data-contrast="none">, empowers pro and citizen developers alike to participate in </SPAN><A href="https://docs.microsoft.com/en-us/power-platform/alm/" target="_blank" rel="noopener"><SPAN data-contrast="none">application lifecycle management (ALM)</SPAN></A><SPAN data-contrast="none"> and accelerate the process with out-of-the-box Azure DevOps pipelines and GitHub workflow templates.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The accelerators will be open source and available at the </SPAN><A href="https://github.com/microsoft/coe-starter-kit" target="_blank" rel="noopener"><SPAN data-contrast="none">new CoE Starter Kit GitHub repository</SPAN></A><SPAN data-contrast="none">. An </SPAN><A href="https://www.youtube.com/watch?v=aO-CmmGebLk" target="_blank" rel="noopener"><SPAN data-contrast="none">overview of the accelerators is available here</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_26-1622747557578.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286087i613386931E8C2531/image-size/large?v=v2&px=999" role="button" title="riduncan_26-1622747557578.png" alt="riduncan_26-1622747557578.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">New template Dataverse Solution to reference and exercise pipelines and workflows ensures all developers understand all elements of how the toolkit works and what’s available.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">With ready-to-go pipeline templates enabling Microsoft Power Platform ALM scenarios that can be quickly configured to drive advanced scenarios, developers can now benefit from a streamlined experience saving them valuable time.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_27-1622747557571.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286089iB2AE1B013FF54869/image-size/large?v=v2&px=999" role="button" title="riduncan_27-1622747557571.png" alt="riduncan_27-1622747557571.png" /></span></P> <P><SPAN data-contrast="none">New canvas app for </SPAN><A href="https://aka.ms/aa4am" target="_blank" rel="noopener"><SPAN data-contrast="none">developers and advanced makers</SPAN></A><SPAN data-contrast="none"> familiar with GitHub concepts and Azure DevOps will offer a convenient way to drive the dev loop.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">It allows developers to manage all Dataverse solutions in a single place, enables an easy approach to commit to Git branches, submit pull requests, and deploy specific builds to a dev environment while surfacing the status of those activities.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_28-1622747557573.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286090iE410E3C14F746CD0/image-size/large?v=v2&px=999" role="button" title="riduncan_28-1622747557573.png" alt="riduncan_28-1622747557573.png" /></span><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">New canvas app for </SPAN><A href="https://aka.ms/aa4m" target="_blank" rel="noopener"><SPAN data-contrast="none">citizen developers</SPAN></A><SPAN data-contrast="none"> will offer an easy approach to drive their portion of DevOps by viewing and managing source code on GitHub and community contributions.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Once a project is created and approved, a dashboard allows users to view projects and navigate to the maker portal to build and create assets under a newly created solution in just a few clicks.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Makers can deploy their progress or finalized solution to a test and a production environment.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_29-1622747557562.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286088i2002DE1C5FDB034F/image-size/large?v=v2&px=999" role="button" title="riduncan_29-1622747557562.png" alt="riduncan_29-1622747557562.png" /></span></P> <P> </P> <P><A href="https://github.com/microsoft/coe-starter-kit" target="_blank" rel="noopener"><SPAN data-contrast="none">Open source on GitHub</SPAN></A><SPAN data-contrast="none">, with acceptance of community contributions, is coming soon.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">With an active backlog on GitHub, Microsoft is actively building new functionality and will start accepting changes from the community soon to make the toolkit better for all developers.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN> <BR /></SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_30-1622747557579.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286093i6036B84F6390FBA3/image-size/large?v=v2&px=999" role="button" title="riduncan_30-1622747557579.png" alt="riduncan_30-1622747557579.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">This is just the beginning of what is possible with fusion team development. To learn more about Fusion teams watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-fusion-teams-101LowCode-power-platform.html" target="_blank" rel="noopener"><SPAN data-contrast="none">Fusion Teams 101 Low Code Apps with Power Platform webinar</SPAN></A><SPAN data-contrast="auto"> that premiers June 4</SPAN><SPAN data-contrast="auto">th</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_31-1622747557563.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286091iAD2562D3828437FE/image-size/large?v=v2&px=999" role="button" title="riduncan_31-1622747557563.png" alt="riduncan_31-1622747557563.png" /></span></P> <P> </P> <P aria-level="1"><SPAN data-contrast="auto">To get hands on experience creating a custom connector and extending a Power App with custom code as covered in this blog, start with the new learning path </SPAN><SPAN data-contrast="none">“</SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Transform your business applications with fusion development”.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559738":240,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="1"> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_32-1622747557546.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286092iC488ED8843095003/image-size/large?v=v2&px=999" role="button" title="riduncan_32-1622747557546.jpeg" alt="riduncan_32-1622747557546.jpeg" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P aria-level="1"><SPAN data-contrast="none">After completing the learning path, if you want to learn even more about how extend your low code applications with Azure and establishing a fusion development team in your organization read the accompanying e-book “</SPAN><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_blank" rel="noopener"><SPAN data-contrast="none">Fusion development approach to building apps using Power Apps”.</SPAN></A></P> <P aria-level="1"> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_33-1622747557547.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286095iD06FE0141D13DB71/image-size/large?v=v2&px=999" role="button" title="riduncan_33-1622747557547.jpeg" alt="riduncan_33-1622747557547.jpeg" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, if you want to try the new Power Platform Visual Studio and Visual Studio Code Extensions, visit </SPAN><A href="https://marketplace.visualstudio.com/items?itemName=microsoft-IsvExpTools.powerplatform-vscode" target="_blank" rel="noopener"><SPAN data-contrast="none">aka.ms/ppcvscode</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_34-1622747557526.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286094iA9455EC53713A775/image-size/large?v=v2&px=999" role="button" title="riduncan_34-1622747557526.png" alt="riduncan_34-1622747557526.png" /></span></P> Thu, 10 Jun 2021 21:48:44 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/fusion-teams-101-low-code-apps-with-power-platform/ba-p/2414037 riduncan 2021-06-10T21:48:44Z Community and certification related resources for developers https://techcommunity.microsoft.com/t5/azure-developer-community-blog/community-and-certification-related-resources-for-developers/ba-p/2382116 <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">At Build 2021, we are hosting a table topic for developers - <A href="https://mybuild.microsoft.com/sessions/9d3582b7-4169-4b80-84fa-367dccad3d41?source=sessions" target="_blank" rel="noopener">How the community and certifications can help you achieve more</A>.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Here are a list useful links that will support you to do more with the community and learning resources at Microsoft.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Developer Content</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/learn/tv/" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="LearnTV.png" style="width: 455px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/331507i33C9B0AFA2B76EBE/image-dimensions/455x263?v=v2" width="455" height="263" role="button" title="LearnTV.png" alt="LearnTV.png" /></span></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Learn TV</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Learn how to build solutions and use Microsoft products from the experts that built them! Learn TV is the place to find the latest digital content so you can always keep updated on the latest announcements, features, and products from Microsoft.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/learn/tv/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/tv/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Channel 9</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Channel 9 is a community where we bring forward the people behind our products and connect them with you. One of the recommended shows is <SPAN style="font-weight: bold;">CodeStories</SPAN>, where we showcase local Cloud Advocates, MVPs, Product Managers and Community Leaders.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://channel9.msdn.com/" target="_blank" rel="noopener">https://channel9.msdn.com/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2Fc9CodeStories&data=04%7C01%7Cv-zugree%40microsoft.com%7C838d8abe57244217116808d91bd32a15%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637571416018864233%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=l1YwAy1w8aGFty7bl7BlWVLsDsVchW0yNdmMljAaxkw%3D&reserved=0" target="_blank" rel="noopener">https://aka.ms/c9CodeStories</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft.Source</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Get the latest articles, documentation, and events from Microsoft. Source—the curated monthly developer community newsletter.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://azure.microsoft.com/resources/join-the-azure-developer-community/" target="_blank" rel="noopener">https://azure.microsoft.com/resources/join-the-azure-developer-community/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Tech News</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The monthly newsletter for developers and tech professionals, tailored to your preferences. Get the latest information from around Microsoft, covering technology advancements, interesting finds, product news, and events near you.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://developer.microsoft.com/Newsletter/" target="_blank" rel="noopener">https://developer.microsoft.com/Newsletter/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Community</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Developer Communities</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Discover and connect with others who build with Microsoft tools and services.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdeveloper.microsoft.com%2Fcommunity%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7Cbeba118009a44be2d09408d91cb02f05%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637572365289462464%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=N%2FPzxWNBvWtmFYJ%2FPkBlfa1EO9XWfg4Dae8itwHYQH4%3D&reserved=0" target="_blank" rel="noopener">https://developer.microsoft.com/community/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Azure</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Your community for best practices and the latest news on Azure.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://techcommunity.microsoft.com/t5/azure/ct-p/Azure" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/azure/ct-p/Azure</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft 365</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Microsoft 365 on Tech Community.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://techcommunity.microsoft.com/t5/microsoft-365/ct-p/microsoft365" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/microsoft-365/ct-p/microsoft365</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Dynamics 365</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Engage with experts and peers in our forums; discover blogs, webinars, videos, events, and more.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://community.dynamics.com/" target="_blank" rel="noopener">https://community.dynamics.com/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform Community</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Microsoft community site for Power Platform. It has separate forums for Power Apps, Power Automate, Power BI, and Power Virtual Agents. The new community user groups can also be accessed from here.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpowerusers.microsoft.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175919819%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=e3mYIKzS6ldoah8ZLdBHyGVCIF7KoNjoccEgTTlnhDc%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://powerusers.microsoft.com </SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Learning and Certification Resources</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Learn</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The home for Microsoft documentation and learning for developers and technology professionals.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/learn/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">30 Days to Learn It</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">30 Days to Learn It can help you build skills and start your preparation for Microsoft Certifications for AI, DevOps, Microsoft 365, low code, IoT, data science, cloud development, and more.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://aka.ms/30-Days-To-Learn-It" target="_blank" rel="noopener">https://aka.ms/30-Days-To-Learn-It</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Learn Certifications</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Earn certifications that show you are keeping pace with today’s technical roles and requirements.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmicrosoft.com%2Fcertifications&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776530327%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QWZEJDmWFBYBhsd8Bglujf1zdp3NYoJeCfXiLRUNmZU%3D&reserved=0" target="_blank" rel="noopener">Microsoft.com/certifications </A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Certification Training Poster</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Expand your technical skill set for Azure, Microsoft 365, Dynamics 365, and Power Platform. Certification overview poster with aligned exams – updated monthly.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2Ftraincertposter&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776530327%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=4pqQ4C%2BLDDK6YYE1qfbBXRn9YzXe46n0XkteaaGzZb0%3D&reserved=0" target="_blank" rel="noopener">Aka.ms/CertTrainPoster </A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Certification Renewal Overview</SPAN></P> <H1 style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Stay current with in-demand skills through free certification renewals.</H1> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2FCertRenewalOverview&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776540320%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Y90y2pKId0I9hNXMLwPFPzQY1bJKnNV4KfhcKc0UqJQ%3D&reserved=0" target="_blank" rel="noopener">Aka.ms/CertRenewalOverview</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Training and Certification Deck </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The Microsoft Azure training and certifications guide has been created to provide training and certification options to achieve personal success. It includes resources such as certification portfolio, overview, journey and learning path to help you prepare for your learning experience.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Faka.ms%2Ftraincertdeck&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776550314%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=GeBBul%2FA3nw3aFYr%2FO4HXoPmsdGdbbZrz%2Bs7yhJ4iik%3D&reserved=0" target="_blank" rel="noopener">Aka.ms/TrainCertDeck</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Resources shared by Julian Sharp</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Want to get involved? Connect with <LI-USER uid="8450"></LI-USER> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Community events </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Community led weekly events covering all aspects of Dynamics 365 and Power Platform.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fevents.powercommunity.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175919819%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=V7wW4amCZdT8BhPsqNd7bvkLJWVFrrh15hAzpQ8U8Bw%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://events.powercommunity.com </SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform School </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">The Power Platform Summer School works with adults from the BAME community, providing training on the Microsoft Power Platform as well as mentorship from industry professionals, during an 8 week program.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpowerplatformschool.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175929811%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=88g3OnN4%2FLcF%2FMPbE%2B%2B1rsM%2FquDYpIMdCnIz4NqbT4s%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://powerplatformschool.com</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform Starter Days</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Inspiring people to find their way into the tech industry and set the stage for them to start into a Power Platform tech career.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpowerplatformstarterdays.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175939810%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=cafLURw7n624hUVknfWXpkdWbzEm6CCfoYceUF%2F4Zhw%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://powerplatformstarterdays.com </SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform Hackathons</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">How to plan and run hackathons using Power Platform tools.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.microsoft.com%2Fpower-platform%2Fguidance%2Fadoption%2Fhackathons&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175939810%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=HXNVEld988GIXQavZvgo%2BHkUgB2p9hhw3L%2BtEw1oAeQ%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://docs.microsoft.com/power-platform/guidance/adoption/hackathons</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Community Virtual Event Hub</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">A centralised view of Community Virtual events.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.virtualeventshub.com%2F&data=04%7C01%7Cheidic%40redtech.com%7Cec2581de6beb49d25ebd08d91ee0a1d4%7C2a8bb167584b4ff0a140ac2de8b87f70%7C0%7C0%7C637574772407716211%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=jRf9F3cmY8SoqIf30erllYDdC0u0k3TqtkVL7nhUXo0%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://www.virtualeventshub.com</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Power Platform Study </SPAN><SPAN style="font-weight: bold;">Group</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">An online community group learning program for people wanting to take the Power Platform App Maker PL-100 exam.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fukcrm.wordpress.com%2F2021%2F05%2F23%2Fpl-100-study-group-june-2021%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175959798%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=HMys9TJY%2FPTzEgYHrrC0rEVN%2F8QhKSx5Z05VMZyvayM%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://ukcrm.wordpress.com/2021/05/23/pl-100-study-group-june-2021/</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">D365 Champs </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">A Dynamics and Power Platform community based in South East Asia with over 5,000 followers.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.d365champions.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175949804%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Ah1c%2FeRyol3fwNqaz1x%2Fj3nKcX102ymDQbsEKB0F7hs%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://www.d365champions.com </SPAN></A></P> Fri, 03 Dec 2021 18:57:43 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/community-and-certification-related-resources-for-developers/ba-p/2382116 Monish_Gangwani 2021-12-03T18:57:43Z Azure Logic Apps Announcement – GA of single-tenant Standard SKU https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-ga-of-single-tenant-standard-sku/ba-p/2382460 <P><STRONG>Meet the New Standard in Workflow</STRONG></P> <P> </P> <P>Today marks a new chapter for integration at Microsoft - the General Availability (GA) of Logic Apps Standard - our new single-tenant offering. A flexible, containerized, modern cloud-scale workflow engine you can run anywhere. Today, integration is more important than ever, it connects organizations with their most valuable assets - customers, business partners and their employees. It makes things happen, seamlessly, silently, to power experiences we take for granted, APIs being called by your TV to browse must-watch shows or catch the latest weather, snagging a bargain on your favorite website (with all the stock checking, order fulfillment and charging your credit card as backend workflows). Booking vacations when that was a thing, and keeping us all safe scheduling vaccine appointments on our phones, as well as checking in with friends and family wherever we are. The list goes on. Integration is everything.</P> <P> </P> <P><STRONG>Breaking Through the Cloud Barrier</STRONG></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/services/logic-apps/" target="_blank" rel="noopener">Logic Apps</A> has always been central to our <A href="https://www.gartner.com/reprints/?id=1-1ZNT008W&ct=200812&st=sb" target="_blank" rel="noopener">industry-leading</A> modern cloud integration platform – <A href="https://azure.microsoft.com/en-us/product-categories/integration/" target="_blank" rel="noopener">Azure Integration Services</A>. But it was stuck in the cloud, our cloud. We know that business can’t always be bounded like this, and integration needs to be pervasive and accessible, connecting to where things are today, where they need to be tomorrow and where they might be in the future. For that, you need to be able <SPAN>to </SPAN>extend the reach of your network using an integration platform than can truly meet you where you are. Welcome Logic Apps Standard, our born in the cloud integration engine that can now be deployed anywhere - our cloud, your cloud, their cloud, on-premises or edge. And your laptop or dev machine for local development. Windows, Linux or Mac. Anywhere.</P> <DIV id="tinyMceEditorJon Fancey_0" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VSCode.png" style="width: 974px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/283359i3E25AD2258F84268/image-size/large?v=v2&px=999" role="button" title="VSCode.png" alt="VSCode.png" /></span></P> <P>Figure 1. New VS Code extension.</P> <P> </P> <P><STRONG>The Speed You Need</STRONG></P> <P> </P> <P>We’ve also introduced new Stateless Workflows. As their name implies, this is a new workflow type in Logic Apps that doesn’t need storage to persist state between actions, making your workflows run faster and saving you money. What’s not to like about that? Stateless Workflows open up new high-volume, high-throughput scenarios for real-time processing of events, messages, APIs and data. We’ve achieved performance improvements across both Stateful and Stateless with a new connector model, built-in to the runtime, to provide high performance of some of our most common connectors - Service Bus, Event Hubs, Blob, SQL and MQ. Not only this but you can also now write your own connectors in .Net just like we do with all the same benefits with our new extensibility model for custom connectors.</P> <P> </P> <P><STRONG>A New Designer Designed For You</STRONG></P> <P> </P> <P>We didn’t want to reimagine our new runtime without reimagining the designer too. The no-code magic that brings integration to everyone, not just those who can code – or have time to. The canvas now allows you to bring your most complex business workflow, orchestration and automation problems. It has been recreated with not just a more modern look but incorporat<SPAN>e</SPAN>s a new layout engine making complex workflows render faster than ever, with full drag/drop, a new dedicated editing pane to de-clutter the whole experience, and new accessibility and other gestures to make authoring easier than ever. For everyone.</P> <P> </P> <P>But that’s not all, we’ve also created a new VS Code extension for authoring, allowing you – for the first time– to easily debug and test on your local machine, set breakpoints, examine variables values in flight and generally, just do what you do faster – in the World’s most popular IDE.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NewDesigner.png" style="width: 974px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/283356i694D2143EA572047/image-size/large?v=v2&px=999" role="button" title="NewDesigner.png" alt="NewDesigner.png" /></span></P> <P>Figure 2. New Workflow Designer.</P> <P> </P> <P><STRONG>Easier To Live With</STRONG></P> <P> </P> <P>As well as leaps forward in our runtime, our designer and general ‘developer flow’ we know that getting your great work to production with as little manual effort and intervention as possible is also what you need. We’ve worked on making it possible to parameterize your workflows in Logic Apps Standard so that you can automate deployments and set environment-specific values in your pipelines to make DevOps a snap. You can choose what you’re familiar with to stay in your groove with support for both Azure DevOps pipelines and GitHub Actions - with provided templates to help you get productive as quickly as possible. You’re able to take an infrastructure as code approach to deploy your solutions and use CI/CD practices to enable you and your team to iterate and deploy without friction as fast as your business demands.</P> <P> </P> <P>Not only this but Logic Apps Standard also now provides App Insights support too, allowing you ’see’ your running processes, as data flows between endpoints and monitor them using Azure Monitor as well as a host of other Azure built-in management capabilities.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DevOps.png" style="width: 974px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/283357i3D478283523D16C1/image-size/large?v=v2&px=999" role="button" title="DevOps.png" alt="DevOps.png" /></span></P> <P>Figure 3. DevOps with Logic Apps.</P> <P> </P> <P><STRONG>You’re Always In Control</STRONG></P> <P> </P> <P>Because Logic Apps Standard runs on <A href="https://azure.microsoft.com/en-us/services/app-service/" target="_blank" rel="noopener">App Service</A> – powering over 2 million web apps serving 40 billion requests per day - you get all the same great benefits that makes App Service great too. Auto scale, virtual network (VNet) support and Private Endpoints - right there at your fingertips - to build amazing solutions that span Web, Workflow and Functions. And of course, because Logic Apps is part of Azure Integration Services too, you can easily connect your applications using over 450 connectors, publish and consume APIs with API Management with just a few clicks and process events with Event Grid at planet-scale. </P> <P> </P> <P><STRONG>So What’s Next?</STRONG></P> <P> </P> <P>In a word, lots! We’ve also <A href="https://docs.microsoft.com/en-us/azure/logic-apps/azure-arc-enabled-logic-apps-overview" target="_blank" rel="noopener">released today</A>, the public preview of Logic Apps (and our other PaaS application services) on Azure Arc. Arc brings a new level of distributed deployment and centralized management to your application and integration environments. We’re also readying SQL support (Azure SQL, SQL Server, SQL Data Services) enabling you to run workloads fully locally with no Azure dependency on storage. Now in private preview, you can sign up <A href="http://aka.ms/logicappssql" target="_blank" rel="noopener">here</A> to express interest and get early access before the rest.</P> <P> </P> <P><STRONG>See For Yourself</STRONG></P> <P> </P> <P>Don’t just take our word for it, watch our Build session on-demand <A href="https://mybuild.microsoft.com/sessions/92bd3e12-fbf4-4278-b68f-fe776b02adfa" target="_blank" rel="noopener">here</A> where Derek Li, will take you through everything that’s new to get you up to speed. You’ll see how <A href="https://www.asos.com/" target="_blank" rel="noopener">ASOS</A>, a global leader in fashion and tech, is using Logic Apps Standard to help them realize their business goals faster than ever before.</P> <P> </P> <P>You can start right now, <A href="https://azure.microsoft.com/en-us/free/serverless/" target="_blank" rel="noopener">for free</A>, and take us for a spin. Read more on Logic Apps Standard <A href="https://docs.microsoft.com/en-us/azure/logic-apps/create-single-tenant-workflows-azure-portal" target="_blank" rel="noopener">here</A>. If you’re already familiar with Logic Apps and want to understand the differences you can review <A href="https://docs.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare" target="_blank" rel="noopener">this</A> article. And as always, let us know what you think and what we can do to help you in your efforts.</P> <P> </P> <P>- Jon<SPAN data-contrast="auto"> & the Logic Apps </SPAN><SPAN data-contrast="auto">t</SPAN><SPAN data-contrast="auto">eam</SPAN></P> Tue, 25 May 2021 15:00:02 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-ga-of-single-tenant-standard-sku/ba-p/2382460 Jon Fancey 2021-05-25T15:00:02Z Introducing Developer Velocity Lab – A Research Initiative to Amplify Developer Work and Well-Being https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-developer-velocity-lab-a-research-initiative-to/ba-p/2333140 <P><A title="Developer Velocity" href="https://azure.microsoft.com/en-us/overview/developer-velocity/?cid=dvl" target="_blank" rel="noopener">Developer Velocity</A> is an important and integral part of developer productivity, and software development is at the core of how organizations run. Improving developer velocity is critical to continued satisfaction, iteration, and innovation in software teams. Today, Microsoft is doubling down on its commitment to improving developers' work and well-being. Microsoft and GitHub are proud to present <A title="Developer Velocity Lab (DVL)" href="https://www.microsoft.com/en-us/research/group/developer-velocity-lab/?cid=techcomm" target="_blank" rel="noopener">Developer Velocity Lab (DVL)</A>, a joint research initiative that will live in Microsoft Research.</P> <P> </P> <P>Microsoft believes scientific advances through research are a fundamental part of how we empower people through our products and impact society more generally. Johannes Gehrke, Microsoft Research Technical Fellow and Lab Director notes, “Microsoft Research is transforming the world through deep research. We are excited to invest into research to empower developers to achieve more.” With DVL, we’re creating a mission-focused initiative about developers, which signals our belief in the importance of the developer community. Leading this research initiative is Dr. Nicole Forsgren, VP Research and Strategy at GitHub. Her industry leading work in DevOps and software development metrics includes authoring the Shingo Publication Award-winning book <A title="Accelerate: The Science of Lean Software and DevOps" href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations-ebook/dp/B07B9F83WM" target="_blank" rel="noopener"><EM>Accelerate: The Science of Lean Software and DevOps</EM></A>. In Nicole’s own words, “Creating a better experience for the world’s developers is core to the future of our digital world – whether that’s through advanced tooling or low/no-code. I’m thrilled to be leading the initiative in DVL.”</P> <P> </P> <P>DVL's mission is to discover, improve, and amplify developer work and well-being. We do this through socio-technical investigations in the following focus areas:</P> <P> </P> <P class="lia-indent-padding-left-30px"><STRONG>Productivity.</STRONG> Investigate ways to measure and improve developer productivity so we can help everyone work better, faster, smarter, and more securely. This includes investigations of low-code, no-code, and work at the intersection of code and ML and AI.</P> <P class="lia-indent-padding-left-30px"><STRONG>Community.</STRONG> Study the ways that people communicate, collaborate, share knowledge, and build communities when they build software. An important aspect of this is making all kinds of software development more accessible, inclusive, and sustainable.</P> <P class="lia-indent-padding-left-30px"><STRONG>Well-being.</STRONG> Investigate the intersections of happiness, satisfaction, and personal value with software development activities so we can find ways to make development more fun, enjoyable, and sustainable.</P> <P> </P> <P>As DVL continues to grow, this will include cultivating a community of researchers, organizations, and developers who share our love and commitment to this work. Our goal is for everyone to benefit from our research, with the intent to develop easily accessible work, optimized for developers and their communities. DVL will commit to making the bulk of our findings open, accessible, and available. We hope that you’ll follow along and utilize our upcoming work.</P> <P> </P> <H2>The SPACE of Developer Productivity</H2> <P>DVL's first publication, <A title="The SPACE of Developer Productivity: There's more to it than you think" href="https://www.microsoft.com/en-us/research/publication/the-space-of-developer-productivity-theres-more-to-it-than-you-think/?cid=techcommblog/" target="_blank" rel="noopener"><EM>The SPACE of Developer Productivity: There's more to it than you think</EM></A>, introduces a framework to help individuals, teams, and organizations measure developer productivity in a more holistic and impactful way. The framework includes five dimensions of software development to present a more complete picture of productivity and well-being. The framework is easily adaptable and flexible to many contexts. By including measures across multiple dimensions (we recommend at least three), teams and organizations can make better decisions and see better outcomes.</P> <P> </P> <P>To learn more, watch Nicole present a deep dive into the SPACE framework and its five dimensions, which are <STRONG>S</STRONG>: satisfaction and well-being, <STRONG>P</STRONG>: performance, <STRONG>A</STRONG>: activity, <STRONG>C</STRONG>: communication and collaboration, and <STRONG>E</STRONG>: efficiency and flow. She’ll also discuss the ins and outs of developer productivity, sharing common misconceptions as well as example metrics and how the framework can work for you.</P> <P> </P> <CENTER><IFRAME src="https://www.youtube.com/embed/t7SXM7njKXw" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></IFRAME></CENTER> <P> </P> <H2>SPACE Framework in Action: The Good Day Project</H2> <P>In conjunction with DVL’s launch, GitHub published <A title="The Good Day Project – Personal analytics for good days" href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener"> The Good Day Project – Personal analytics for good days</A>. The research presented a first look at the SPACE framework, a two-week study that invited GitHub developers to take a survey and share their engineering data to help identify what patterns and practices could help them have “good days.” A few overarching discoveries into patterns the team found:</P> <P> </P> <P class="lia-indent-padding-left-30px"><STRONG>Finding flow is key, and interruptions are a drag.</STRONG> Minimal or no interruptions give developers an 82% chance of having a good day, but interruptions throughout the day decrease the chance of a good day to just 7%.</P> <P class="lia-indent-padding-left-30px"><STRONG>Meetings are both awesome and terrible.</STRONG> Collaboration improves our work, but too many meetings can be a blocker; going from two to three meetings per day lowered the chances of developers making progress toward their goals by 60%.</P> <P class="lia-indent-padding-left-30px"><STRONG>A two minute daily reflection can help developers improve their days.</STRONG> Developers reported the daily reflection was a great new habit, and seeing patterns gave them clear ideas for what to change in their days.</P> <P class="lia-indent-padding-left-30px"> </P> <P>The data was also used to classify developers’ days as Flowing or Disrupted. Taking a look at these classifications shows us:</P> <P> </P> <TABLE border="1" width="100%"> <TBODY> <TR> <TD width="50%" height="42px"> <H4>Flowing Days</H4> </TD> <TD width="50%" height="42px"> <H4>Disrupted Days</H4> </TD> </TR> <TR> <TD width="50%" height="29px">Less than three meetings per day</TD> <TD width="50%" height="29px">More than three meetings per day</TD> </TR> <TR> <TD width="50%" height="29px">Interruptions during a small part of the day</TD> <TD width="50%" height="29px">Interruptions during most of the day</TD> </TR> <TR> <TD width="50%" height="29px">Progress towards goals most of the day</TD> <TD width="50%" height="29px">Less progress towards goals</TD> </TR> </TBODY> </TABLE> <P> </P> <P>When the study concluded, each participant received a personalized report to help them optimize their days moving forward. To glean more insight, including the full survey, read the <A title="The Good Day Project – Personal analytics for good days" href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener">report</A>.</P> <P> </P> Fri, 03 Dec 2021 18:59:02 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-developer-velocity-lab-a-research-initiative-to/ba-p/2333140 AlisonYu 2021-12-03T18:59:02Z Kickstart collaborative DevSecOps practices with GitHub and Azure https://techcommunity.microsoft.com/t5/azure-developer-community-blog/kickstart-collaborative-devsecops-practices-with-github-and/ba-p/2357730 <H2>Kickstart collaborative DevSecOps practices with GitHub and Azure</H2> <P> </P> <P>Companies on the forefront of digital transformation have seen DevOps provide software engineers and operations teams with a faster and more efficient way to develop code. Unfortunately, while DevOps practices have enabled faster, more efficient development cycles, they’ve also uncovered a new bottleneck—security. While many organizations have opted to push security to the end of application development and management, this can be very costly. <A href="https://securityboulevard.com/2020/09/the-importance-of-fixing-and-finding-vulnerabilities-in-development/#:~:text=According%20to%20the%20NIST%20(the,that%20should%20concern%20most%20organizations" target="_blank" rel="noopener">NIST</A> estimated the cost of fixing a security defect in production can be up to 60 times more expensive than during the development cycle. Conversely, Digital leaders recognize the importance of shifting security left and tackling vulnerabilities as soon as they arise. These leaders are integrating security into delivery pipelines, leveraging modern platform capabilities and fostering collaboration between the development and security teams in the latest evolution of the DevOps methodology, DevSecOps. Embracing DevSecOps is a software delivery advantage! By uncovering vulnerabilities earlier, your team can save time remediating issues and realizing compliancy, while also minimizing any associated costs.</P> <P> </P> <P>So how can your organization begin their DevSecOps adoption journey?</P> <P> </P> <P>It starts with incorporating security into the early stages of the development lifecycle (shift left) along with providing end-to-end observability to facilitate collaboration between the development and security teams. At last year’s Ignite, we discussed ways to shift left by <A href="https://azure.microsoft.com/en-us/blog/enabling-resilient-devops-practices-with-code-to-cloud-automation/" target="_blank" rel="noopener">adding security scans to container images</A> created as part of Continuous Integration (CI) workflow. This helps developers scan for common vulnerabilities in their container images before pushing to a container registry. Securing Container images is one great way of shifting security left, but organizations also need to give visibility into delivery pipelines and registry scans to their security teams.</P> <P> </P> <P>At <A href="https://aka.ms/Build2021-BRK214" target="_blank" rel="noopener">Microsoft Build 2021</A>, we are excited to announce the public preview of <A href="https://azure.microsoft.com/en-us/services/security-center/" target="_blank" rel="noopener">Azure Security Center</A> (ASC) integration with GitHub Actions. The new capabilities are our first steps towards building shared tooling and experience by extending the reporting from container scans into Azure Security Center—providing security teams better insight and understanding as to the source of vulnerable container images and the workflows and repositories they come from.</P> <P> </P> <H1>Provide DevSecOps teams observability into GitHub Action workflows</H1> <P>With this tighter integration we are allowing DevSecOps teams to run vulnerability scans, resolve findings, and visualize the security posture of workflows within their CI/CD pipeline.</P> <P> </P> <P>CI/CD vulnerability scanning of container images helps shift security left by offering increased visibility and control and by providing CI/CD scan assessments to Azure Security Center (ASC). Now, your security teams can access a holistic, 360-degree view across CI/CD pipelines and runtime resources through CI/CD scan assessments in ASC. DevSecOps teams will now receive greater, shared insight into development practices and potentially vulnerable code, containers, and infrastructure.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_0-1621124575237.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280894i58E28FDD71FA96F3/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_0-1621124575237.png" alt="samitjhaveri_0-1621124575237.png" /></span></P> <P> </P> <P>Going forward, any workflow that pushes a container image without a scan action present will alert the user with an ASC recommendation. Each ASC recommendation details the affected resources along with a proposed remediation path and steps to help each path achieve a “healthy” state. Below are details on how to enable the new capabilities across GitHub and Azure to get you started with your DevSecOps journey.</P> <P> </P> <H1>How to setup Azure Security Center for GitHub integration</H1> <P>You can easily onboard this feature by navigating to Settings->Integrations in Azure Security Center</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_1-1621124575266.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280897i2D917054CE1310E9/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_1-1621124575266.png" alt="samitjhaveri_1-1621124575266.png" /></span></P> <P> </P> <P>After clicking on Configure CI/CD integration, select the Microsoft Managed Application Insights account pertaining your region of choice.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_2-1621124575294.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280895i1FDE5D441DC1D496/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_2-1621124575294.png" alt="samitjhaveri_2-1621124575294.png" /></span></P> <P> </P> <P> </P> <P>To enable CI/CD Scanning in GitHub, start by adding the connection string and authentication token to publish the CI/CD scan results back to your Microsoft Managed Application Insights account.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_3-1621124575361.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280899i8B234D73CC622E22/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_3-1621124575361.png" alt="samitjhaveri_3-1621124575361.png" /></span></P> <P> </P> <P>Now it’s time to harvest insights into container image vulnerabilities. After you’ve enabled CI/CD scanning for images built and published from GitHub workflows, ASC showcases any vulnerabilities found in those images. Of course, it’s important to form a holistic picture of your data, and you can use these CI/CD scan results along with registry scan results to trace the lifecycle of the image from CI/CD to registry.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_4-1621124575373.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280898iDAAAE00808710D09/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_4-1621124575373.png" alt="samitjhaveri_4-1621124575373.png" /></span></P> <P> </P> <P> </P> <P>It’s important to think of this expanded scanning capability as the conduit to foster collaboration among your developer and SecOps teams. CI/CD vulnerability scanning gives much needed visibility into container images and the GitHub workflows that are pushing these images. You can also help developers scan their container images for common vulnerabilities—eliminating issues before deploying to a container registry, a containerized web app, or a Kubernetes cluster.</P> <P> </P> <H1>Start collaborating with GitHub and Azure</H1> <P>This feature is currently in Public Preview so please use non-production workflows while using this feature. This feature is available only in Public Cloud. You will need to use the feature flag as shown to use the feature in Azure Portal (<A style="font-family: inherit; background-color: #ffffff;" title="https://ms.portal.azure.com/?" href="https://ms.portal.azure.com/?feature.cicd=true#blade/Microsoft_Azure_Security/SecurityMenuBlade/5/0/" target="_blank" rel="noopener">https://ms.portal.azure.com/?feature.cicd=true#blade/Microsoft_Azure_Security/SecurityMenuBlade/5/0/</A><SPAN style="font-family: inherit;">)</SPAN><SPAN style="font-family: inherit;">. </SPAN>This feature flag will be removed in a few days.</P> <P> </P> <P>To learn more about container security check out <A href="https://aka.ms/DevSecOpsBlogDoc" target="_blank" rel="noopener">documentation</A> and visit the <A href="https://azure.microsoft.com/en-us/products/github/" target="_blank" rel="noopener">GitHub and Azure</A> page to find the full list of GitHub and Azure integrations. Don’t forget to check out the <A href="https://aka.ms/DevSecOpsPaper" target="_blank" rel="noopener">6 tips for integrating security into your DevOps practices</A> whitepaper to explore even more ways to kickstart your DevSecOps journey.</P> <P> </P> <P>For any questions regarding the public preview please send an email to <A href="mailto:azseccontainerred@microsoft.com" target="_blank" rel="noopener">azseccontainerred@microsoft.com</A></P> Thu, 10 Jun 2021 21:49:47 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/kickstart-collaborative-devsecops-practices-with-github-and/ba-p/2357730 samit_jhaveri 2021-06-10T21:49:47Z Increase Efficiency with Azure Functions and Power Platform https://techcommunity.microsoft.com/t5/azure-developer-community-blog/increase-efficiency-with-azure-functions-and-power-platform/ba-p/2370351 <H3><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN></H3> <P><SPAN data-contrast="auto">In 2021, </SPAN><SPAN data-contrast="auto">there will be </SPAN><SPAN data-contrast="auto">a</SPAN><SPAN data-contrast="auto"> blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">LCAD on Azure is a solution that integrates the robust development capabilities of lo</SPAN><SPAN data-contrast="auto">w </SPAN><SPAN data-contrast="auto">code Microsoft Power Apps and the Azure products</SPAN><SPAN data-contrast="auto"> such as Azure Functions, A</SPAN><SPAN data-contrast="auto">zure Logic Apps, and more.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This month’s webinar is ‘</SPAN><A href="https://info.microsoft.com/ww-Landing-IncreaseEfficiencyAzureFunctionsPowerPlatform.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">Increase Efficiency with Azure Functions and Power Platform</SPAN></A><SPAN data-contrast="auto">’</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">T</SPAN><SPAN data-contrast="auto">his blog </SPAN><SPAN data-contrast="auto">will briefly recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="auto">provide an overview of </SPAN><STRONG><SPAN data-contrast="auto">Azure Functions</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> reusability</SPAN></STRONG><SPAN data-contrast="auto">, </SPAN><STRONG><SPAN data-contrast="auto">Durable Functions</SPAN></STRONG><SPAN data-contrast="auto">, </SPAN><SPAN data-contrast="auto">and </SPAN><STRONG><SPAN data-contrast="auto">how to integrate Functions </SPAN></STRONG><STRONG><SPAN data-contrast="auto">across the Power Platform</SPAN></STRONG><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This is a </SPAN><SPAN data-contrast="auto">helpful </SPAN><SPAN data-contrast="auto">blog for those new to Azure Functions and those who want to start integrating Azure Functions into their Power Platform </SPAN><SPAN data-contrast="auto">build cases.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_7-1621465684123.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281986i0DEEA1EF3C45C0D9/image-size/large?v=v2&px=999" role="button" title="riduncan_7-1621465684123.png" alt="riduncan_7-1621465684123.png" /></span> </P> <H3><STRONG><SPAN data-contrast="none">What is Low</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></H3> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="auto">was created to help developers build business applications faster with less code.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse </SPAN><SPAN data-contrast="auto">employees</SPAN><SPAN data-contrast="auto"> track incoming inventory.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">That application would take months to build, test, and deploy. Using Power Apps, it can take hours to build, saving time and resources. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">To learn more about possible scenarios with LCAD on Azure go through the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">self-guided tour</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Guided tour.JPG" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/282001i461FF92CD4E9752D/image-size/large?v=v2&px=999" role="button" title="Guided tour.JPG" alt="Guided tour.JPG" /></span></P> <H3><STRONG><SPAN data-contrast="none">Azure Functions Reusability</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></H3> <P><SPAN data-contrast="auto">Why should you reuse functionality? There are four key reasons: shorter development time, consistency, easier testing, and live proven code.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_8-1621465684121.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281987i71741F5488C80B98/image-size/large?v=v2&px=999" role="button" title="riduncan_8-1621465684121.png" alt="riduncan_8-1621465684121.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">The </SPAN><STRONG><SPAN data-contrast="auto">shorter development time</SPAN></STRONG><SPAN data-contrast="auto"> is driven by not having to build code again</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto"> For example, if you’re validating a phone number with your application you don’t want to have to re-write the code for each nuanced small scenario, such as rebuilding a web app, then a portal, etc.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Not re-writing code even if it is being plugged into a new app enables shorter development time.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Additionally, this ties into greater </SPAN><STRONG><SPAN data-contrast="auto">consistency</SPAN></STRONG><SPAN data-contrast="auto"> in your code </SPAN><SPAN data-contrast="auto">creating a much cleaner user experience</SPAN><SPAN data-contrast="auto"> across platforms and devices.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Reuse of functionality also enables </SPAN><STRONG><SPAN data-contrast="auto">easier testing</SPAN></STRONG><SPAN data-contrast="auto">. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">When reusing functionality you can automate tests, however if yo</SPAN><SPAN data-contrast="auto">u write new code each time, </SPAN><SPAN data-contrast="auto">for each iteration you must manually test the code, subsequently increasing development time.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">However, if you reuse functionality, o</SPAN><SPAN data-contrast="auto">nce set up and spun up, every time you test apps down the line, all you need to do is check the Azure Function connection rather than starting from scratch.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, is the advantage of </SPAN><STRONG><SPAN data-contrast="auto">live proven code</SPAN></STRONG><SPAN data-contrast="auto">, which can’t be overstated</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">The separate aspects of functionality are already proven to work, therefore speeding up the application development lifecycle.</SPAN></P> <H3><STRONG><SPAN data-contrast="auto">Durable Functions</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H3> <P><SPAN data-contrast="auto">Durable Functions are an extension </SPAN><SPAN data-contrast="auto">of</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Azure Functions, that </SPAN><SPAN data-contrast="auto">let you write stateful functions in a serverless environment. The durable extension </SPAN><SPAN data-contrast="auto">manages state, checkpoints and restarts out of the box. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Durable Functions allow the creation of workflow activities like </SPAN><SPAN data-contrast="auto">Lo</SPAN><SPAN data-contrast="auto">gic </SPAN><SPAN data-contrast="auto">A</SPAN><SPAN data-contrast="auto">pps</SPAN><SPAN data-contrast="auto"> b</SPAN><SPAN data-contrast="auto">ut</SPAN><SPAN data-contrast="auto"> are</SPAN><SPAN data-contrast="auto"> completely customizable and </SPAN><SPAN data-contrast="auto">scalable.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Durable F</SPAN><SPAN data-contrast="auto">unctions can be called both synchronously and asynchronously. Output from </SPAN><SPAN data-contrast="auto">F</SPAN><SPAN data-contrast="auto">unctions can be saved to local variables and used later in execution.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">State and executions are managed within an Azure Table using the Event Sourcing Pattern and can be queried if needed. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_9-1621465684132.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281988i54EB7C13D1166FF4/image-size/large?v=v2&px=999" role="button" title="riduncan_9-1621465684132.png" alt="riduncan_9-1621465684132.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">For example, </SPAN><SPAN data-contrast="auto">if you want to fill in a field on a </SPAN><SPAN data-contrast="auto">form and</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">need</SPAN><SPAN data-contrast="auto"> to check </SPAN><SPAN data-contrast="auto">input information across </SPAN><SPAN data-contrast="auto">multiple databases,</SPAN><SPAN data-contrast="auto"> the</SPAN><SPAN data-contrast="auto"> orchestration </SPAN><SPAN data-contrast="auto">capabilities </SPAN><SPAN data-contrast="auto">of </SPAN><SPAN data-contrast="auto">D</SPAN><SPAN data-contrast="auto">urable Functions </SPAN><SPAN data-contrast="auto">enable</SPAN><SPAN data-contrast="auto"> that </SPAN><SPAN data-contrast="auto">functionality</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Moreover, if you need</SPAN><SPAN data-contrast="auto"> all the tasks to happen at the same time or </SPAN><SPAN data-contrast="auto">need</SPAN><SPAN data-contrast="auto"> them to happen in different patterns</SPAN><SPAN data-contrast="auto">, you c</SPAN><SPAN data-contrast="auto">ould build th</SPAN><SPAN data-contrast="auto">at </SPAN><SPAN data-contrast="auto">functionali</SPAN><SPAN data-contrast="auto">ty </SPAN><SPAN data-contrast="auto">in Power Automate or Logic apps. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">L</SPAN><SPAN data-contrast="auto">everaging Durable Functions enables greater </SPAN><SPAN data-contrast="auto">detail and options for functionality.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Lastly</SPAN><SPAN data-contrast="auto">, </SPAN><SPAN data-contrast="auto">these Functions scale rapidly to meet demand levels, however when inactive they </SPAN><SPAN data-contrast="auto">rest until called upon again.</SPAN></P> <P> </P> <H3><STRONG><SPAN data-contrast="auto">Functions Integration across the Power Platform</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H3> <H4><STRONG><SPAN data-contrast="auto">Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H4> <P><SPAN data-contrast="auto">There are 3 types of Power Apps available to integrate with Azure Functions. </SPAN><SPAN data-contrast="auto">Note that this blog will be covering JavaScript, however you can write Azure Functions in any language.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">First, there are </SPAN><STRONG><SPAN data-contrast="auto">Dataverse</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> forms</SPAN></STRONG><SPAN data-contrast="auto">. Dataverse forms are used within Model Drive</SPAN><SPAN data-contrast="auto">n applications that can contain JavaScript </SPAN><SPAN data-contrast="auto">F</SPAN><SPAN data-contrast="auto">unctions that fire on load or property change. These functions can call out to Azure Functions for long running queries. </SPAN><SPAN data-contrast="auto">Thus, enabling your colleagues to leverage your Azure Function.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Second, are </SPAN><STRONG><SPAN data-contrast="auto">Power Component Framework controls</SPAN></STRONG><SPAN data-contrast="auto"> (PCFs). They are a web packet that you can put in both model-driven app forms and canvas apps. </SPAN><SPAN data-contrast="auto">The code can be called from either place, if used to call out an Azure Function it creates a double layer of reusability and can separate deployment for use across </SPAN><SPAN data-contrast="auto">your</SPAN><SPAN data-contrast="auto"> business.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Third, are </SPAN><STRONG><SPAN data-contrast="auto">Power Apps </SPAN></STRONG><STRONG><SPAN data-contrast="auto">P</SPAN></STRONG><STRONG><SPAN data-contrast="auto">ortals</SPAN></STRONG><SPAN data-contrast="auto">. These scripts are very similar to </SPAN><SPAN data-contrast="auto">Dataverse</SPAN><SPAN data-contrast="auto"> forms and can be embedded into a portal to call </SPAN><SPAN data-contrast="auto">any web </SPAN><SPAN data-contrast="auto">API and</SPAN><SPAN data-contrast="auto"> call </SPAN><SPAN data-contrast="auto">an </SPAN><SPAN data-contrast="auto">Azure Function</SPAN><SPAN data-contrast="auto"> from the portal</SPAN><SPAN data-contrast="auto">. Security will have to be handled differently for public facing po</SPAN><SPAN data-contrast="auto">rtals than internal applications.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_10-1621465684134.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281994i50A2E1296CC758AE/image-size/large?v=v2&px=999" role="button" title="riduncan_10-1621465684134.png" alt="riduncan_10-1621465684134.png" /></span></P> <H3><STRONG><SPAN data-contrast="auto">Power Automate</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H3> <P><SPAN data-contrast="auto">In the webinar Lee</SPAN><SPAN data-contrast="auto"> Baker</SPAN><SPAN data-contrast="auto"> covers the stages of when</SPAN><SPAN data-contrast="auto"> and </SPAN><SPAN data-contrast="auto">how to connect a Power Automate flow to an Azure Function.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">When? </SPAN></STRONG><SPAN data-contrast="auto">You c</SPAN><SPAN data-contrast="auto">an start when a record is selected in a model driven app, hitting the on-demand flow button, pus</SPAN><SPAN data-contrast="auto">hes</SPAN><SPAN data-contrast="auto"> those records </SPAN><SPAN data-contrast="auto">to Power Automate</SPAN><SPAN data-contrast="auto">. Or you </SPAN><SPAN data-contrast="auto">can </SPAN><SPAN data-contrast="auto">use</SPAN><SPAN data-contrast="auto"> standard </SPAN><SPAN data-contrast="auto">Dataverse triggers </SPAN><SPAN data-contrast="auto">when creating, reading, updating, and deleting (CRUD)</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">How?</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">HTTP request actions from Power Automate or Logic Apps, can put data or URLs </SPAN><SPAN data-contrast="auto">incorporate </SPAN><SPAN data-contrast="auto">and get payload</SPAN><SPAN data-contrast="auto">s</SPAN><SPAN data-contrast="auto"> back to use in Azure Functions</SPAN><SPAN data-contrast="auto">, or</SPAN><SPAN data-contrast="auto"> you </SPAN><SPAN data-contrast="auto">can </SPAN><SPAN data-contrast="auto">build a custom connector</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">You would build a custom connector because </SPAN><SPAN data-contrast="auto">HTTP requests </SPAN><SPAN data-contrast="auto">are </SPAN><SPAN data-contrast="auto">often</SPAN><SPAN data-contrast="auto"> blocked by data loss policies in Power Platform </SPAN><SPAN data-contrast="auto">environments but</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">can </SPAN><SPAN data-contrast="auto">circumnavigate policies</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Custom connectors </SPAN><SPAN data-contrast="auto">can be </SPAN><SPAN data-contrast="auto">created in accordance with data loss </SPAN><SPAN data-contrast="auto">policies but pull the HTTP request directly into the canvas application via Azure Functions for a secure and streamlined approach.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_11-1621465684126.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281993iC659EA39B87CCF71/image-size/large?v=v2&px=999" role="button" title="riduncan_11-1621465684126.png" alt="riduncan_11-1621465684126.png" /></span></P> <H3><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG></H3> <P><SPAN data-contrast="auto">Th</SPAN><SPAN data-contrast="auto">is is just the beginning of what is possible with the</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">integration of </SPAN><SPAN data-contrast="auto">APIs into </SPAN><SPAN data-contrast="auto">Power Apps </SPAN><SPAN data-contrast="auto">via </SPAN><SPAN data-contrast="auto">Azure Functions</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> To learn more about the integration of Azure Functions and Power Apps watch </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="auto">webinar</SPAN><SPAN data-contrast="auto"> covered in this blog</SPAN><SPAN data-contrast="auto"> titled “</SPAN><A href="https://info.microsoft.com/ww-Landing-IncreaseEfficiencyAzureFunctionsPowerPlatform.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">Increase Efficiency with Azure Functions and Power Platform</SPAN></A><SPAN data-contrast="auto">”</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P aria-level="1"><SPAN data-contrast="auto">To get hands on experience creating a custom connector and extending a Power App with custom code </SPAN><SPAN data-contrast="auto">as covered in this blog, </SPAN><SPAN data-contrast="auto">start with the new learning path “</SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Transform your business applications with fusion development</SPAN><SPAN data-contrast="none">”.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559738":240,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="1"> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_12-1621465684128.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281995i3181718C12E14EC9/image-size/large?v=v2&px=999" role="button" title="riduncan_12-1621465684128.jpeg" alt="riduncan_12-1621465684128.jpeg" /></span></P> <P><SPAN data-contrast="none">After completing the learning path, i</SPAN><SPAN data-contrast="none">f you want to learn even more about how extend your low code applications with Azure and establish</SPAN><SPAN data-contrast="none">ing </SPAN><SPAN data-contrast="none">a fusion development team in your organization read the accompanying </SPAN><SPAN data-contrast="none">e</SPAN><SPAN data-contrast="none">-</SPAN><SPAN data-contrast="none">b</SPAN><SPAN data-contrast="none">ook </SPAN><SPAN data-contrast="none">“</SPAN><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_blank" rel="noopener"><SPAN data-contrast="none">Fusion development approach to building apps using Power Apps</SPAN><SPAN data-contrast="none">”.</SPAN></A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_13-1621465684130.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281997i859947C45CCB8DEB/image-size/large?v=v2&px=999" role="button" title="riduncan_13-1621465684130.jpeg" alt="riduncan_13-1621465684130.jpeg" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> Fri, 03 Dec 2021 18:55:35 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/increase-efficiency-with-azure-functions-and-power-platform/ba-p/2370351 riduncan 2021-12-03T18:55:35Z Deprecating the Distribution of Microsoft Container Images via Docker Hub https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deprecating-the-distribution-of-microsoft-container-images-via/ba-p/2366861 <H2>Summary</H2> <P>As containers and cloud native workloads continue to grow, ensuring that customers can reliably acquire vendor artifacts becomes crucial. Microsoft is committed to offer its customers reliable and performant experience for pulling Microsoft container images from the Microsoft Container Registry (MCR or mcr.microsoft.com). MCR contains the full catalog of container images produced by Microsoft with their most up-to-date versions and tags. By leveraging Azure’s global footprint, MCR offers public access to Microsoft’s images globally. With that in mind, we are deprecating all <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">/microsoft</A> org container images hosted in Docker Hub repositories on June 30<SUP>th</SUP>, 2021.</P> <P> </P> <H2>How does this impact you?</H2> <P>If you continue to reference Microsoft container images using repositories in Docker Hub, this will have impact on your development, deployment, and automation scripts.</P> <P>Examples for such references are: <CODE>FROM microsoft/*</CODE> in Dockerfile or <CODE>docker run microsoft/*</CODE> in automation scripts. You can leverage <A href="https://grep.app/" target="_blank" rel="noopener">https://grep.app/</A> to discover such references in OSS scripts.</P> <UL> <LI>Starting June 1<SUP>st</SUP>, 2021 pulls of <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">microsoft/</A> org container images from Docker Hub registry will be throttled according to Docker Terms of Use. This will limit the number of pulls that you are allowed within certain time period.</LI> <LI>Starting July 1<SUP>st</SUP>, 2021 repositories from microsoft/ org on Docker Hub will be removed. At this point development, deployment and automation scripts that still reference <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">microsoft/</A> org images from Docker Hub registry will fail.</LI> </UL> <P>To avoid any impact on your development, deployment or automation scripts, you must update <CODE>docker pull</CODE> commands, <CODE>FROM</CODE> statements in Dockerfiles, and other references to <CODE>microsoft/</CODE> container images to explicitly reference the <CODE>mcr.microsoft.com</CODE> registry.</P> <P>We understand that certain repositories from <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">microsoft/</A> org on Docker Hub registry are highly trafficked, and customers relying on them may not be able to complete these changes by June 30<SUP>th</SUP>, 2021. We are working to identify those repositories and provide extension for them. A list of such repositories and for how long they will be available will be published on <A href="https://github.com/microsoft/containerregistry/" target="_blank" rel="noopener">MCR’s GitHub repository</A> by June 1<SUP>st</SUP>, 2021.</P> <P> </P> <H2>Mapping of Docker Hub repositories to MCR repositories</H2> <P>Mapping between the repository names on Docker Hub and MCR can be found on <A href="https://github.com/microsoft/containerregistry/blob/master/docs/dockerhub-to-mcr-repo-mapping.md" target="_self">MCR's GitHub repository</A>.</P> <P> </P> <H2>Guidance for Consuming Public Container Images</H2> <P>Having a controlled workflow for consumption of public content like container images from Docker Hub and MCR is a key for building a secured and reliable software supply chain. Please see the <A href="https://opencontainers.org/posts/blog/2020-10-30-consuming-public-content/" target="_blank" rel="noopener">Open Container Initiative’s Consuming Public Content</A> for general guidance and <A href="https://aka.ms/consuming-public-content" target="_blank" rel="noopener">Azure’s guidance for consuming public content</A>.</P> <P> </P> <H2>Background</H2> <P>Back in 2018, we announced the <A href="https://azure.microsoft.com/en-us/blog/microsoft-syndicates-container-catalog/" target="_blank" rel="noopener">transition of Microsoft container images hosting to MCR with syndication to Docker Hub</A>, which laid the ground for worldwide distribution of Microsoft container images. Last year <A href="https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/" target="_blank" rel="noopener">Docker announced an update of their terms of use</A> and <A href="https://www.docker.com/blog/docker-hub-image-retention-policy-delayed-and-subscription-updates/" target="_blank" rel="noopener">plans for image retention</A> – both changes impacting pulls of container images from Docker Hub. Microsoft and Docker have worked closely to provide smooth transition for customers who need to pull /microsoft org container images. Docker Hub pages were updated to reflect the new pull location, mcr.microsoft.com, and are continuously updated with information how to pull up-to-date tags from MCR. We will continue this collaboration to provide an easy and frictionless discoverability mechanism for Microsoft container images through Docker Hub.</P> <P> </P> <H2>How to get additional help?</H2> <P>We understand that there may be unanswered questions. You can get additional help by submitting an <A href="https://github.com/microsoft/containerregistry/issues/new" target="_blank" rel="noopener">issue on GitHub</A> or sending an email to <A href="mailto:mcrfeedback@microsoft.com" target="_blank" rel="noopener">mcrfeedback@microsoft.com</A>.</P> Wed, 19 May 2021 19:56:31 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deprecating-the-distribution-of-microsoft-container-images-via/ba-p/2366861 toddysm 2021-05-19T19:56:31Z Plan your Microsoft Azure experience at Microsoft Build https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-build/ba-p/2365265 <P>Microsoft Build, our free digital event, starts next week and runs from May 25-27, 2021. We thought you might be interested to learn ways you can plan to experience the latest set of developer tools, platforms, and services helping you build amazing things on your terms, anywhere, with Microsoft and Azure. You’ll also have a chance to speak with Microsoft experts and have the opportunity to continue your technical learning journey.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/home" target="_self">Register</A> to gain full access to all Microsoft Build has to offer—it’s easy and at no-cost to you.</P> <P> </P> <P><STRONG>Create the perfect event schedule</STRONG></P> <P>Explore the session catalog to find expert speakers, interactive sessions, and more. After registering, get started on your journey using the <A href="https://mybuild.microsoft.com/sessions" target="_blank" rel="noopener">Build session catalogue</A>.</P> <P> </P> <P>Below are a set of featured Technical Sessions kicking off the key themes of Build 2021, with deeper related Breakout Sessions—all of which you won’t want to miss:</P> <P> </P> <P><STRONG>Increase Developer Velocity with Microsoft’s end-to-end developer platform:</STRONG></P> <UL> <LI>TS01: <A href="https://mybuild.microsoft.com/sessions/5ac55e8d-82e5-4b9f-b9bc-d51187761b42" target="_blank" rel="noopener">Increase Developer Velocity with Microsoft’s end-to-end developer platform</A></LI> <LI>BRK210: <A href="https://mybuild.microsoft.com/sessions/5d379e17-9e56-4afb-a871-d3ab807c75f1" target="_blank" rel="noopener">What's new in Windows 10 for ALL developers</A></LI> <LI>BRK211: <A href="https://mybuild.microsoft.com/sessions/309d47fd-5319-42cf-a54f-3a177653ab63" target="_blank" rel="noopener">Power Platform is the best way for teams to build together</A></LI> <LI>BRK212: <A href="https://mybuild.microsoft.com/sessions/2575e7f5-b57b-487d-950f-ab91b7238f00" target="_blank" rel="noopener">What's new in Visual Studio Code</A></LI> <LI>BRK213: <A href="https://mybuild.microsoft.com/sessions/76ebac39-517d-44da-a58e-df4193b5efa9" target="_blank" rel="noopener">The future of modern application development with .NET</A></LI> <LI>BRK214: <A href="https://mybuild.microsoft.com/sessions/87cc3b82-bc57-483d-90b3-e91e12516352" target="_blank" rel="noopener">Scaling DevSecOps with GitHub and Azure</A></LI> <LI>BRK215: <A href="https://mybuild.microsoft.com/sessions/1b7f92ef-71a6-4a64-bece-001f94a2b7b8" target="_blank" rel="noopener">Empowering developers with powerful tooling and enabling frictionless app adoption</A></LI> <LI>BRK216: <A href="https://mybuild.microsoft.com/sessions/2a64cf46-9578-4c40-b503-00ad0ec21813" target="_blank" rel="noopener">Building Low Code Vertical Apps using the Power Platform</A></LI> </UL> <P><STRONG>Deliver new intelligent cloud-native applications by harnessing the power of Data and AI:</STRONG></P> <UL> <LI>TS02: <A href="https://mybuild.microsoft.com/sessions/46f12ac0-4d74-4a53-95b1-22e406edd72c" target="_blank" rel="noopener">Harness the power of data in your applications with Azure</A></LI> <LI>BRK220: <A href="https://mybuild.microsoft.com/sessions/2ba55238-d398-46f9-9ff2-eafcd9d69df3" target="_blank" rel="noopener">Build intelligent applications infused with world-class AI</A></LI> <LI>BRK221: <A href="https://mybuild.microsoft.com/sessions/10930f2e-ad9c-460b-b91d-844d17a5a875" target="_blank" rel="noopener">Understand the ML process and embed models into apps</A></LI> <LI>BRK222: <A href="https://mybuild.microsoft.com/sessions/bd7db37e-c50e-45bc-9e7e-6f791881b887" target="_blank" rel="noopener">Scale, analyze and serve Microsoft Dynamics 365 application data with Azure</A></LI> <LI>BRK223: <A href="https://mybuild.microsoft.com/sessions/f06287c8-8e56-452f-ae2f-e739c2be4870" target="_blank" rel="noopener">Building Digital Twins, Mixed Reality and Metaverse Apps</A></LI> </UL> <P><STRONG>Build cloud-native applications your way and run them anywhere:</STRONG></P> <UL> <LI>TS03: <A href="https://mybuild.microsoft.com/sessions/2debfc2e-f0b3-4adf-bcec-d126930f806f" target="_blank" rel="noopener">Build cloud-native applications that run anywhere</A></LI> <LI>BRK230: <A href="https://mybuild.microsoft.com/sessions/b66c3a65-4d11-4c1b-9b29-4df873a8cf4d" target="_blank" rel="noopener">Run Open Source Applications your way with Microsoft Azure</A></LI> <LI>BRK231: <A href="https://mybuild.microsoft.com/sessions/fd09c810-26ad-45bd-957b-1a70b74d93ec" target="_blank" rel="noopener">Modernize applications using containers</A></LI> <LI>BRK232: <A href="https://mybuild.microsoft.com/sessions/c52cef38-5c92-4bbd-ae49-f78ded025e04" target="_blank" rel="noopener">Serverless: Event-driven application development</A></LI> <LI>BRK233: <A href="https://mybuild.microsoft.com/sessions/bafa8204-25b2-44c1-86a0-2c852c1e3794" target="_blank" rel="noopener">Build consistent hybrid and multicloud applications with Azure Arc</A></LI> </UL> <P><STRONG>Follow #MSBuild</STRONG></P> <P>Explore the latest event news, trending topics, and share your point of view in real time with your community. Join us on Twitter and LinkedIn by using #MSBuild.</P> <P> </P> <P><A href="https://twitter.com/msdev" target="_blank" rel="noopener">Join us on social ></A></P> <P> </P> <P><STRONG>Connection Zone</STRONG></P> <P>Only at #MSBuild can you strengthen your network with local connections and meet with Microsoft product teams to help influence the future of products and services.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/community-connect" target="_blank" rel="noopener">Connect today></A></P> <P> </P> <P><STRONG>Learning Zone</STRONG></P> <P>The Learning Zone is the center for training, development, and certification with Microsoft. Whatever your style of learning happens to be, you can find content and interactive opportunities to boost and diversify your cloud skills.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/learning-zone" target="_blank" rel="noopener">Explore trainings ></A></P> <P> </P> <P><STRONG>[New] to Microsoft Build: Product Roundtables!</STRONG> <BR />There is so much for you to learn by attending Microsoft Build. And while you attend, we want to learn from you too! Join group discussions between you, fellow attendees and our product teams to share insights that will help shape the future of the products you use. Follow these steps to sign-up for a Product Roundtable: </P> <P> </P> <UL> <LI>Go to <A href="https://mybuild.microsoft.com" target="_blank" rel="noopener">https://mybuild.microsoft.com</A> and select “<A href="https://register.build.microsoft.com/" target="_blank" rel="noopener">Register Now</A>” (You must be registered for Build to participate in a Product Roundtable)</LI> <LI>Once you’re registered and are authenticated, click the “<A href="https://mybuild.microsoft.com/community-connect" target="_blank" rel="noopener">Connection Zone</A>” drop-down and select “<A href="https://sessions.mybuild.microsoft.com/Page/Timezone?redir=sessionscheduler_roundtablehttps://sessions.mybuild.microsoft.com/Account/Login?ReturnUrl=/Page/Timezone?redir=sessionscheduler_roundtable" target="_blank" rel="noopener">Product Roundtables</A>”.</LI> <LI>Browse the list of available Product Roundtable meetings; search for a keyword or choose from the available filters on the left.</LI> </UL> <P> </P> <P><A href="https://sessions.mybuild.microsoft.com/Account/Login?ReturnUrl=/Page/Timezone?redir=sessionscheduler_roundtable" target="_blank" rel="noopener">Participate in a Product Roundtable ></A></P> <P> </P> <P><STRONG>One-on-one consultation</STRONG></P> <P>Schedule your 45-minute, one-on-one consultation with a Microsoft engineer to architect, design, implement or migrate your solutions.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/app-consult" target="_blank" rel="noopener">Schedule today ></A></P> <P> </P> <P><STRONG>Continue your learning journey</STRONG></P> <P>Discover more in-depth learning paths, training options, communities, and certification details across all Microsoft cloud solutions from one place.</P> <P> </P> <P><A href="https://aka.ms/learnatbuild" target="_blank" rel="noopener">Explore trainings ></A></P> Thu, 20 May 2021 20:59:13 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-build/ba-p/2365265 Mark Winters 2021-05-20T20:59:13Z Microsoft Power Platform is bridging the digital divide in Latin America https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-power-platform-is-bridging-the-digital-divide-in-latin/ba-p/2356463 <P>Sharif Nasser grew up with the dream of becoming an inventor.</P> <P> </P> <P>As a teenager, he became interested in AI and machine learning and became a strong believer in technology as a powerful tool for equity and progress. While currently studying Robotics at Tecnolo’gico de Monterrey, in Monterrey, Mexico, he uses his technical knowledge and expertise to bridge the digital divide across Latin America.</P> <P> </P> <P>Through large scale online teaching ventures of up to 5000 students, he is making technology more accessible to all. Learn more about his journey and his belief in low code platforms to lower the barrier to entry: <U><FONT color="#0000FF">aka.ms/power-students</FONT></U>.</P> <P> </P> <P>If you would like to sharpen your own technical skills, check out: aka.ms/trainingandcertification.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=lMStzDY9TKQ&list=PL6ihFEvicZRClm9-3ohcw3xSw-ZZYbeJo" align="center" size="large" width="600" height="338" uploading="false" thumbnail="http://i.ytimg.com/vi/lMStzDY9TKQ/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> Fri, 14 May 2021 22:36:47 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-power-platform-is-bridging-the-digital-divide-in-latin/ba-p/2356463 Elsa_Ramesh 2021-05-14T22:36:47Z Unlock the Future of Azure IoT through Power Platform https://techcommunity.microsoft.com/t5/azure-developer-community-blog/unlock-the-future-of-azure-iot-through-power-platform/ba-p/2318270 <P><STRONG><SPAN data-contrast="none"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Azure IoT Gif maker.gif" style="width: 600px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/277510i56E7681A2EEDBEED/image-size/large?v=v2&px=999" role="button" title="Azure IoT Gif maker.gif" alt="Azure IoT Gif maker.gif" /></span></SPAN></STRONG></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month there will be a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure is a solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘Unlock the Future of Azure IoT through Power Platform’.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> In this blog I will briefly recap </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, provide an overview of IoT on Azure and Azure Functions, how to pull an Azure Function into Power Automate, and how to integrate your Power Automate flow into Power Apps.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">What is Low-code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy. Using Power Apps, it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">IoT on Azure and Azure Functions</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The goal of this webinar is to understand how to use IoT hub and Power Apps to control an IoT device.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To start, one would write the code in Azure IoT Hub, to send commands directly to your IoT device. In this webinar Samuel wrote in Node for IoT Hub, and wrote two basic commands, toggle fan on, and off.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The commands are sent via the code in Azure IoT Hub, which at first run locally. Once tested and confirmed to be running properly the next question is how can one rapidly call the API from anywhere across the globe?</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The answer is to create a flow in Power Automate, and connect that flow to a Power App, which will be a complete dashboard that controls the IoT device from anywhere in the world.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To accomplish this task, you have to first create an Azure Function, which will then be pulled into Power Automate using a “Get” function creating the flow.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Once you've built the Azure Function, run and test it locally first, test the on and off states via the Function URL.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To build a trigger for the Azure Function, in this case a Power Automate flow, you need to create an Azure resources group to check the Azure Function and test its local capabilities.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">If the test fails it could potentially be that you did not create or have an access token for the IoT device. To connect a device, IoT or otherwise to the cloud, you need to have an access token.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">In the webinar Samuel added two application settings to his function for the on and off commands.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After adding these access tokens and adjusting the settings of the IoT device, Samuel was able to successfully run his Azure Function.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Azure Function automated with Power Automate</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After building the Azure Function, you now can build your Power Automate flow to start building your globally accessible dashboard to operate your IoT device.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Samuel starts by building a basic Power Automate framework, then flow, and demonstrates how to test the flow once complete.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">He starts with a HTTP request, and implements a “Get” command. From there it is a straightforward process, to test and get the IoT Device to run.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Power Automate flow into Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After building your Power Automate flow, you develop a simple UI to toggle the fan on and off. Do this by building a canvas Power App and importing the Power Automate flow into the app.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To start, create a blank canvas app, and name it. In the Power Apps ribbon, you select “button”, and pick the button’s source, selecting “Power Automate” and “add a flow”.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Select the flow that is connected to the Azure IoT device, its name should be reflected in the selection menu.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">If everything is running properly your IoT device will turn on.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">FYI</SPAN></STRONG><SPAN data-contrast="auto"> in the webinar Samuel is running out of time, so he creates a new Power Automate flow, which he imports into the canvas app.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Summary</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Make sure to watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-UnlocktheFutureofAzureIoTthroughPowerPlatform.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">webinar </SPAN></A><SPAN data-contrast="none">to learn more about Azure IoT and how to import Azure Functions into your Power Apps.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Additionally, there will be a Low-code application development on Azure ‘Learn Live’ session during Build, covering the new </SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">.NET x Power Apps learning path</SPAN></A><SPAN data-contrast="none">, covering integrations with Azure Functions, Visual Studio, and API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Lastly, tune in to the Power Apps x Azure featured session at Build on May 25</SPAN><SPAN data-contrast="none">th</SPAN><SPAN data-contrast="none">, to learn more about the next Visual Studio extensions, Power Apps source code, and the ALM accelerator package. Start registering for Microsoft Build at </SPAN><A href="https://register.build.microsoft.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Build 2021.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> Wed, 19 May 2021 12:19:21 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/unlock-the-future-of-azure-iot-through-power-platform/ba-p/2318270 riduncan 2021-05-19T12:19:21Z Visual Studio 2019 Tricks and Techniques - Review, sort of https://techcommunity.microsoft.com/t5/azure-developer-community-blog/visual-studio-2019-tricks-and-techniques-review-sort-of/ba-p/2280956 <P>Earlier this year, Packt released a new book...</P> <P> </P> <H1 id="title" class="a-spacing-none a-text-normal"><SPAN class="a-size-extra-large">Visual Studio 2019 Tricks and Techniques: A developer's guide to writing better code and maximizing productivity</SPAN></H1> <P> </P> <P><A href="http://aka.ms/VS2019Book" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VS2019Cover.png" style="width: 809px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/274498i98828BF915DFECFC/image-size/large?v=v2&px=999" role="button" title="VS2019Cover.png" alt="VS2019Cover.png" /></span></A></P> <P> </P> <P><A href="http://aka.ms/VS2019Book" target="_blank" rel="noopener">http://aka.ms/VS2019Book</A> </P> <P> </P> <P>But I should be honest. I was involved in this book. Let me find a version of the cover with my name on it...</P> <P> </P> <P><A href="http://aka.ms/VS2019Book" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VS2019Cover02.png" style="width: 637px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/274499i276B431C5E80328F/image-size/large?v=v2&px=999" role="button" title="VS2019Cover02.png" alt="VS2019Cover02.png" /></span></A></P> <P> </P> <P>There you go. I wrote the foreword! It was a great and wonderful thing! At least, I think it was. I really can't remember what I wrote. I'll go read it...</P> <P> </P> <P>Oh, I like how I opened the foreword...</P> <P> </P> <P><EM>"By combining Visual Studio Code and Visual Studio (VS), the brand is over two times more commonly used by developers than any other environment (Stack Overflow, 2019). What that means is that this topic is for 80% of all developers."</EM></P> <P> </P> <P>Have you thought about that? In this day and age, when there are so many IDE options for developers to pick from, they simply are choosing Visual Studio. There are many reasons why developers want to use Visual Studio, including compatibility with languages and tools, as well as various feature sets. </P> <P> </P> <P>I suppose it doesn't hurt that this is a professional tool (which means it makes money and thus is very well made, not cobbled together like a Frankenstein monster, as an open-source project by weekend warriors). And only a company like Microsoft could do that (invest in a great tool like this) and still make versions of it available for free!</P> <P> </P> <P>And that's really what this book is about... unleashing the power and capabilities of this well-adopted tool set. As I said/wrote in my foreword, the authors (Paul Schroeder and Aaron Cure) <STRONG>have cracked the code</STRONG>!</P> <P> </P> <P>If you apply the snippets, templates, git tips, and extension-based practices that you'll find in this book, then not only will you become more efficient, but you'll also become your team's hero and thought leader!</P> <P> </P> <P>Before I move on, did you notice how weird the subtitle was in the top version of the book cover? Let's inspect it:</P> <P> </P> <P><EM>"A developer's guide to mastering in core skills with the IDE and unlock advanced productivity secrets."</EM></P> <P> </P> <P>You could probably read that sentence for 20 minutes before you decipher and interpret all its secrets. I can see why they landed on a subtitle that was a little simpler to grok ("A developer's guide to writing better code and maximizing productivity"). Moving on...</P> <P> </P> <P>Let's take a look at what the topics are...</P> <P> </P> <OL> <LI>Flavors of Visual Studio</LI> <LI>Keyboard Shortcuts</LI> <LI>IDE Tips and Tricks</LI> <LI>Working with a Repository</LI> <LI>Working with Snippets</LI> <LI>Database Explorers</LI> <LI>Compiling, Debugging, and Versioning </LI> <LI>Introduction to Project and Item Templates</LI> <LI>Creating Your Own Templates</LI> <LI>Deploying Custom Templates</LI> <LI>Overviewing Visual Studio 2019 Extensions</LI> <LI>Overviewing VS Code Extensions</LI> <LI>CodeMaid is Your Friend</LI> <LI>Be Your Team's Hero with CodeGenHero</LI> <LI>Secure Code with Puma Scan</LI> <LI>Appendix: Other Popular Productivity Extensions</LI> </OL> <P> </P> <P>I know what you're thinking! You're thinking, "Is <EM>overviewing</EM> a word?" Yes, yes it is a word! More specifically, it's <A href="https://www.bing.com/search?q=define+overviewing&cvid=a5f9a1c4017a4a2aa4f3be7cd9514d1c&aqs=edge.0.0.3836j0j1&pglt=43&FORM=ANNAB1&PC=U531" target="_self">the present participle of a word</A>.</P> <P> </P> <P>Anyway, the reason why I wanted to write the foreword (and blog about it), is because I truly believe in the value. Developers don't use templates, especially, to the degree that they could. Plus, you'll peruse a plethora of other topics that you'd be wise to glean from. </P> <P> </P> <P>Also, one interesting tidbit is that the author (Mr. Schroeder) is partially at fault for the extension featured in chapter 14, CodeGenHero. So check that out!</P> <P> </P> <P>Whilst perusing the Amazons, I saw the reviews for the book, and they're pretty impressive. I want to give you just the titles of the reviews here, so you can see what I mean:</P> <P> </P> <UL> <LI>"Useful Visual Studio shortcuts, Git-Jitsu, snippet and debugging knowledge here." - Dan Hermes</LI> <LI>"Clear and concise with good examples to draw upon for furthering learning." - Robert Frey</LI> <LI>"This one is a must have!" - Binit Datta</LI> <LI>"Learn everything about Visual Studio 2019." - Yusuf</LI> <LI>"Excellent for those with some C# programming experience." - Ben Miller</LI> </UL> <P> </P> <P>This book is great for noobs and still useful for ratchety, engineering curmudgeons (I think I'm in transition from the former to the latter). So check it out, and leave a review on the Amazons:</P> <P> </P> <UL> <LI><A href="http://aka.ms/VS2019Book" target="_blank" rel="noopener">http://aka.ms/VS2019Book</A> </LI> </UL> <P> </P> <P>Remember to keep your mask on your face, your feet on the ground, and your head in the Cloud!</P> <P> </P> <P>Socially-Distanced Ed</P> <P> </P> <P> </P> Wed, 19 May 2021 12:31:48 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/visual-studio-2019-tricks-and-techniques-review-sort-of/ba-p/2280956 Ed Price 2021-05-19T12:31:48Z Six reasons to join us at RedisConf 2021 https://techcommunity.microsoft.com/t5/azure-developer-community-blog/six-reasons-to-join-us-at-redisconf-2021/ba-p/2273109 <P>Spring has arrived, which means that <A href="https://redislabs.com/redisconf/" target="_self">RedisConf</A>—the annual celebration of all things Redis—is almost here! Attending RedisConf is one of the best ways to sharpen your Redis skills by exploring best practices, learning about new features, and hearing from industry experts. You’ll also be able to virtually hang out with and learn from thousands of other developers passionate about Redis.</P> <P> </P> <P>We love Redis here at Microsoft, so we’re excited to be showing up at RedisConf in a big way this year. We’ll not only be talking more about our new <A href="https://aka.ms/redisenterprise" target="_blank" rel="noopener">Azure Cache for Redis Enterprise</A> offering, but we’ll also be hosting sessions and panels that dive deeper into the best ways to use Redis on Azure. Want to learn more? Here are seven reasons to attend RedisConf 2021:</P> <P> </P> <OL> <LI>Explore <A href="https://redislabs.com/redisconf/training/" target="_blank" rel="noopener">live and on-demand training</A> on how to use Redis with popular frameworks like Spring and .NET Core.</LI> <LI>Hear Microsoft CVP Julia Liuson present a keynote status update about the ongoing collaboration between Microsoft and Redis Labs, including the Enterprise tiers of Azure Cache for Redis.</LI> <LI>Listen to customers like Genesys, <A href="https://redislabs.com/redisconf/sessions/rc21-s23/" target="_blank" rel="noopener">Adobe</A>, and <A href="https://redislabs.com/redisconf/sessions/rc21-s21/" target="_blank" rel="noopener">SitePro</A> who are using Redis Enterprise on Azure for use-cases as diverse as IoT data ingestion and mobile push notification deduplication.</LI> <LI>Tune in for a roundtable discussion between the Microsoft and Redis Labs teams that touches on what the collaboration between the companies looks like and the benefits it brings to customers.</LI> <LI>Learn how to <A href="https://redislabs.com/redisconf/sessions/rc21-s10/" target="_blank" rel="noopener">harness the power of Redis and Apache Kafka</A> to crunch high-velocity time series data through the power of RedisTimeSeries.</LI> <LI>Hear from experts from our product team on the best way to run Redis on Azure, including tips-and-tricks for maximizing performance, ensuring network security, limiting costs, and building enterprise-scale deployments.</LI> </OL> <P class="lia-align-center"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_0-1618426689978.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/272899i9F7F1F42B277CAB4/image-size/medium?v=v2&px=400" role="button" title="kteegarden_0-1618426689978.png" alt="kteegarden_0-1618426689978.png" /></span></P> <P> </P> <P><STRONG>RedisConf kicks off on April 20<SUP>th</SUP>, and registration is free! <A href="https://redislabs.com/redisconf/?utm_medium=referral&utm_source=partner&utm_campaign=Microsoft+redisconf21-registration-promo" target="_blank" rel="noopener">Sign-up now to attend</A>. </STRONG>We’ll see you there.</P> Wed, 14 Apr 2021 18:59:55 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/six-reasons-to-join-us-at-redisconf-2021/ba-p/2273109 kteegarden 2021-04-14T18:59:55Z The Azure Data Architecture Map https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-data-architecture-map/ba-p/2251943 <P>Hi,</P> <P> </P> <P>I'm excited to announce this new map and I'm happy to see the great success (beyond expectations) of this map series. With nearly 300K views, these maps even gave birth to a more exhaustive book.</P> <P> </P> <P>FYI, here are all the maps of the series:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P>Admittedly, the data map was by far the hardest to build, because there is a big functional overlap across data services. Nevertheless, I tried to identify the primary use case of each service, or where a given service shines the most. </P> <P><BR />The purpose of the this map is to see, in a glimpse, which services may suit your functional needs but it is up to you to dig deeper.</P> <P> </P> <P>Here is the map:</P> <P> </P> <P><A title="Azure Data Architecture Map" href="https://techcommunity.microsoft.com/gxcuf89792/attachments/gxcuf89792/AzureDevCommunityBlog/641.9/2/data%20architecture.png" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="data architecture.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/269290iA4815DF1EBA9AFE9/image-size/large?v=v2&px=999" role="button" title="data architecture.png" alt="data architecture.png" /></span></A></P> <P> </P> <P> </P> <P> </P> <P>which focuses on the following areas:</P> <UL> <LI>Traditional: many enterprises still deal with traditional BI and there is nothing wrong with it! This category regroups Azure services which you can use to build your cubes, run your ETL jobs, etc.<BR /><BR /></LI> <LI>Modern: this category is the counterpart of the traditional category. For example, ELT is the modern counterpart of ETL...that's a bit the spirit :). You may of course find services that are in both sides.<BR /><BR /></LI> <LI>Big Data: Big Data is also recent in the data lanscape, so it could have been a subset of the modern group, but for sake of clarity, I decided to make it a separate group. <BR /><BR /></LI> <LI>Artificial Intelligence: AI is on every lips so I couldn't skip it although this category was hard to craft. There is so much overlap across AI services that it's kind of hard to categorize them. I tried to have a very condensed group. AI would deserve to have its own map.<BR /><BR /></LI> <LI>Others: in this category, you'll find concerns such as "sharing data with other companies", "Governing data", etc.</LI> </UL> <P>One note though: Microsoft is pushing hard on Azure Synapse Analytics and their aim is to have an all-in-one service, that combines decades of on-premises data practices and the most modern and top-notch data features. So, you'd better keep an eye on its development!</P> <P> </P> <P>Here is the pointer to the map:</P> <P> </P> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="29px" style="width: 50%;">v 1.0</TD> <TD height="29px" style="width: 50%;"><A href="https://app.mindmapmaker.org/#m:mm3727bf0da6e94510b0861090c0f35d1b" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm3727bf0da6e94510b0861090c0f35d1b</A></TD> </TR> <TR> <TD height="29px" style="width: 50%;">PDF version</TD> <TD height="29px" style="width: 50%;"> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="56px" style="width: 50%;"> <P><A href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter06/maps/Data%20Architecture.pdf" target="_blank" rel="noopener">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter06/maps/Data%20Architecture.pdf</A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> </TD> </TR> </TBODY> </TABLE> <P> </P> Thu, 08 Apr 2021 06:58:03 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-data-architecture-map/ba-p/2251943 stephaneey 2021-04-08T06:58:03Z Modern Application Development https://techcommunity.microsoft.com/t5/azure-developer-community-blog/modern-application-development/ba-p/2235485 <P><STRONG><SPAN data-contrast="auto">Blog Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">This blog will provide an overview of </SPAN><A href="https://azure.microsoft.com/en-us/solutions/modern-application-development/#:~:text=Modern%20application%20development%20is%20an,%2C%20and%20built%2Din%20monitoring." target="_blank" rel="noopener"><SPAN data-contrast="none">Modern application development</SPAN></A><SPAN data-contrast="auto">. The blog will first define</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="auto">m</SPAN><SPAN data-contrast="auto">odern</SPAN><SPAN data-contrast="auto"> application development</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">approach</SPAN><SPAN data-contrast="auto">. </SPAN><SPAN data-contrast="auto">Then delve into the </SPAN><SPAN data-contrast="auto">‘</SPAN><SPAN data-contrast="auto">7 building blocks</SPAN><SPAN data-contrast="auto">’</SPAN><SPAN data-contrast="auto"> of</SPAN><SPAN data-contrast="auto"> the </SPAN><SPAN data-contrast="auto">approach </SPAN><SPAN data-contrast="auto">starting with cloud native architecture</SPAN><SPAN data-contrast="auto">, followed by AI, </SPAN><SPAN data-contrast="auto">Integration, Data, Software delivery, Operations, </SPAN><SPAN data-contrast="auto">and Security.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Each segment will define</SPAN><SPAN data-contrast="auto"> and explain </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="auto">‘</SPAN><SPAN data-contrast="auto">building block</SPAN><SPAN data-contrast="auto">’</SPAN><SPAN data-contrast="auto"> and how th</SPAN><SPAN data-contrast="auto">e modern application development approach leverages the ‘building blocks’ to produce more robust applications.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/solutions/modern-application-development/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">What is Modern Application Development</SPAN></STRONG><STRONG><SPAN data-contrast="none"> (MAD)</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/modern-application-development/#:~:text=Modern%20application%20development%20is%20an,%2C%20and%20built%2Din%20monitoring." target="_blank" rel="noopener"><SPAN data-contrast="none">Modern application development</SPAN></A><SPAN data-contrast="none"> is an approach that enables you to </SPAN><SPAN data-contrast="auto">innovate rapidly by using cloud-native architectures with loosely coupled microservices, managed databases, AI, DevOps support, and built-in monitoring.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">resulting modern </SPAN><SPAN data-contrast="none">applications</SPAN><SPAN data-contrast="none"> leverage </SPAN><SPAN data-contrast="none">cloud native architectures by packaging code and dependencies in containers and deploy</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">them </SPAN><SPAN data-contrast="none">as microservices to increase developer velocity using DevOps practices.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Subsequently m</SPAN><SPAN data-contrast="none">odern applications utilize continuous integration and delivery</SPAN><SPAN data-contrast="none"> (CI/CD)</SPAN><SPAN data-contrast="none"> technologies and processes to improve system reliability</SPAN><SPAN data-contrast="none">. Modern apps employ a</SPAN><SPAN data-contrast="none">utomation to identify and quickly mitigate issues applying best practices like infrastructure as code and increas</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> data security with threat detection and protection.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Lastly, modern applications are faster by infusing AI into native architecture structures to reduce manual tasks, accelerating workflows and introducing low code application development tools to simplify and expedite development processes.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/overview/cloudnative/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Cloud-native </SPAN></STRONG><STRONG><SPAN data-contrast="none">architectures</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">According to The Cloud Native Computing Foundation</SPAN><SPAN data-contrast="none"> (CNCF)</SPAN><SPAN data-contrast="none">, cloud </SPAN><SPAN data-contrast="none">native</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">is</SPAN><SPAN data-contrast="none"> defined as “</SPAN><SPAN data-contrast="none">Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.”</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Utilizing that definition, what are the key tenants of a cloud-native approach, and how does each tenant benefit you? </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">As stated above, cloud-native architectures center on speed and agility. That speed and agility are derived from 6 factors</SPAN><SPAN data-contrast="auto">:</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">C</SPAN><SPAN data-contrast="auto">loud infrastructure</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">M</SPAN><SPAN data-contrast="auto">odern design</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> M</SPAN><SPAN data-contrast="auto">icroservices</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> C</SPAN><SPAN data-contrast="auto">ontainers</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> B</SPAN><SPAN data-contrast="auto">acking services</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> A</SPAN><SPAN data-contrast="auto">utomation. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1615417254157.png" style="width: 1378px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262621i9AA898CFC043E67A/image-dimensions/1378x485?v=v2" width="1378" height="485" role="button" title="riduncan_0-1615417254157.png" alt="riduncan_0-1615417254157.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Cloud infrastructure</SPAN></STRONG><SPAN data-contrast="auto"> is the </SPAN><STRONG><SPAN data-contrast="auto">most important factor</SPAN></STRONG><SPAN data-contrast="auto"> that contributes to the speed and agility of cloud-native architecture.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">3 </SPAN></STRONG><STRONG><SPAN data-contrast="auto">K</SPAN></STRONG><STRONG><SPAN data-contrast="auto">ey </SPAN></STRONG><STRONG><SPAN data-contrast="auto">Factors</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="auto"> Cloud-native systems full</SPAN><SPAN data-contrast="auto">y leverage the cloud service model using PaaS compute infra</SPAN><SPAN data-contrast="auto">structure</SPAN><SPAN data-contrast="auto"> and managed services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> Cloud-native systems continue to run as </SPAN><SPAN data-contrast="auto">infrastructure</SPAN><SPAN data-contrast="auto"> scales in or out without worrying about the back end because the infra is fully managed.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">Cloud-native systems </SPAN><SPAN data-contrast="auto">have</SPAN><SPAN data-contrast="auto"> auto scal</SPAN><SPAN data-contrast="auto">ing</SPAN><SPAN data-contrast="auto">, self-heal</SPAN><SPAN data-contrast="auto">ing</SPAN><SPAN data-contrast="auto">, and monitor</SPAN><SPAN data-contrast="auto">ing capabilities.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="auto">Modern Design is highly </SPAN><SPAN data-contrast="auto">effective </SPAN><SPAN data-contrast="auto">in part </SPAN><SPAN data-contrast="auto">due to the </SPAN><STRONG><SPAN data-contrast="auto">Twelve-Factor Application method</SPAN></STRONG><SPAN data-contrast="auto">, which is a set of principles and practices that develope</SPAN><SPAN data-contrast="auto">rs follow to construct applications optimized for modern cloud environments.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Most Critical Considerations for Modern Design</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">Communication</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">- </SPAN><SPAN data-contrast="auto">How front ends communication with </SPAN><SPAN data-contrast="auto">back-end</SPAN><SPAN data-contrast="auto"> services, and how </SPAN><SPAN data-contrast="auto">back-end</SPAN><SPAN data-contrast="auto"> services communicate with each other.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Resiliency</SPAN><SPAN data-contrast="auto"> - How services in your distributed architecture respond in </SPAN><SPAN data-contrast="auto">less-than-ideal</SPAN><SPAN data-contrast="auto"> scenarios due to the in-process, out-process </SPAN><SPAN data-contrast="auto">network communications of microservices architecture.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">Distributed Data</SPAN><SPAN data-contrast="auto"> - How do you query data or implement a transaction across multiple services?</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Identity</SPAN><SPAN data-contrast="auto"> - How does your service identify who is accessing it and their allotted permissions?</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><STRONG><SPAN data-contrast="auto">What are Microservices?</SPAN></STRONG><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Microservices are built as a distributed set of small, independent services that interact through a shared fabric. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_1-1615417254174.png" style="width: 1546px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262623i3649D2C4FCDF09FD/image-dimensions/1546x653?v=v2" width="1546" height="653" role="button" title="riduncan_1-1615417254174.png" alt="riduncan_1-1615417254174.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Improved Agility with </SPAN></STRONG><A href="https://azure.microsoft.com/en-us/solutions/microservice-applications/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Microservices</SPAN></STRONG></A><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Each microservice has an autonomous lifecycle and can evolve independently and deploy frequently. </SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Each microservice can scale independently</SPAN><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">enabling services to scale to meet demand. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="none">Those microservices are then packaged </SPAN><SPAN data-contrast="none">a container image, those images are stored in container registry</SPAN><SPAN data-contrast="none">. When needed you transform the container into a running </SPAN><SPAN data-contrast="none">container </SPAN><SPAN data-contrast="none">instance</SPAN><SPAN data-contrast="none">, to utilize the stored microservices. </SPAN><SPAN data-contrast="none">How</SPAN><SPAN data-contrast="none"> do</SPAN><SPAN data-contrast="none"> containers benefit cloud native apps?</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Benefits of </SPAN></STRONG><A href="https://azure.microsoft.com/en-us/product-categories/containers/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Containers</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Provide portability and guarantee consistency across environments.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Containers can isolate </SPAN><SPAN data-contrast="none">microservices</SPAN><SPAN data-contrast="none"> and their dependencies from the underlying infrastructure. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Smaller </SPAN><SPAN data-contrast="none">footprints</SPAN><SPAN data-contrast="none"> than full virtual machines (VMs). That smaller size increases densi</SPAN><SPAN data-contrast="none">ty, the number of microservices, that a given host can run at a time. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="none">Cloud native solutions also increase application speed and agility via backing services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1615417254161.png" style="width: 1520px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262622i5F3F3AA6AA90942E/image-dimensions/1520x942?v=v2" width="1520" height="942" role="button" title="riduncan_2-1615417254161.png" alt="riduncan_2-1615417254161.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Benefits of </SPAN></STRONG><A href="https://12factor.net/backing-services" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Backing Services</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Save time and </SPAN><SPAN data-contrast="none">labor</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Treat</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> backing services as</SPAN><SPAN data-contrast="none"> attached </SPAN><SPAN data-contrast="none">resources</SPAN><SPAN data-contrast="none"> enabl</SPAN><SPAN data-contrast="none">es</SPAN><SPAN data-contrast="none"> the services to attach and detach as needed without code changes </SPAN><SPAN data-contrast="none">to </SPAN><SPAN data-contrast="none">the </SPAN><SPAN data-contrast="none">microservices that contain information, enabling greater </SPAN><SPAN data-contrast="none">dynamism</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="none">Lastly, cloud-native solutions leverage automation. </SPAN><SPAN data-contrast="none">Using cloud-native </SPAN><SPAN data-contrast="none">architectures</SPAN><SPAN data-contrast="none"> your </SPAN><SPAN data-contrast="none">infrastructure and deployment are automated, consistent, and reputable.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Benefits of Automation</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><A href="https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code" target="_blank" rel="noopener"><SPAN data-contrast="none">In</SPAN><SPAN data-contrast="none">fr</SPAN><SPAN data-contrast="none">astructure</SPAN><SPAN data-contrast="none"> as Code</SPAN><SPAN data-contrast="none"> (IaC)</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">avoids</SPAN><SPAN data-contrast="none"> manual</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">environment </SPAN><SPAN data-contrast="none">configuration </SPAN><SPAN data-contrast="none">and deliver</SPAN><SPAN data-contrast="none">s</SPAN><SPAN data-contrast="none"> stable environments rapidly at scale.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Automated deployment leverages CI/CD to speed up innovation and deployment, updating on-demand</SPAN><SPAN data-contrast="none">; </SPAN><SPAN data-contrast="none">saving money and time. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><A href="https://azure.microsoft.com/en-us/overview/ai-platform/dev-resources/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Artificial Intelligence</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The second building block in the modern application development approach is A</SPAN><SPAN data-contrast="none">rtificial intelligence (AI)</SPAN><SPAN data-contrast="none">.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What comprises</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">artificial intelligence</SPAN></STRONG><STRONG><SPAN data-contrast="none">? How do I </SPAN></STRONG><STRONG><SPAN data-contrast="none">add AI to my applications? </SPAN></STRONG><A href="https://azure.microsoft.com/en-us/overview/ai-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Artificial Intelligence</SPAN></A><SPAN data-contrast="none"> is comprised of </SPAN><SPAN data-contrast="none">machine learning, knowledge mining, and AI apps and agents. Un</SPAN><SPAN data-contrast="none">der the apps and agent's domain there are two overarching products, </SPAN><A href="https://azure.microsoft.com/en-us/services/cognitive-services/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Cognitive Services</SPAN></A><SPAN data-contrast="none"> and </SPAN><A href="https://azure.microsoft.com/en-us/services/bot-services/" target="_blank" rel="noopener"><SPAN data-contrast="none">Bot Service</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">that we're going to focus on</SPAN><SPAN data-contrast="none">.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Cognitive services are a collection of domain specific pre-trained AI models that can be customized with your data. Bot service </SPAN><SPAN data-contrast="none">is a</SPAN><SPAN data-contrast="none"> purpose-built bot development environment with out-of-the-box templates. To learn how to add AI to your applications watch the</SPAN><SPAN data-contrast="none"> short</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">video titled </SPAN><SPAN data-contrast="none">“</SPAN><A href="https://azure.microsoft.com/en-us/overview/ai-platform/dev-resources/#videos" target="_blank" rel="noopener"><SPAN data-contrast="none">Easily add AI to your applications.</SPAN></A><SPAN data-contrast="none">”</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1615417254190.png" style="width: 1543px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262626i22363CD93A58FCD4/image-dimensions/1543x734?v=v2" width="1543" height="734" role="button" title="riduncan_3-1615417254190.png" alt="riduncan_3-1615417254190.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Innate Benefits</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">User benefits: </SPAN></STRONG><SPAN data-contrast="none">Translation, chatbots, and voice for AI-enabled user interfaces.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Business benefits:</SPAN></STRONG><SPAN data-contrast="none"> Enhanced business logic for scenarios like search, personalization, document processing, image ana</SPAN><SPAN data-contrast="none">lytics, anomaly detection, and speech analytics.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Modern App</SPAN></STRONG><STRONG><SPAN data-contrast="none">lication</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">Dev</SPAN></STRONG><STRONG><SPAN data-contrast="none">elopment</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">unique</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">benefit</SPAN></STRONG><STRONG><SPAN data-contrast="none">:</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Enable</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">d</SPAN><SPAN data-contrast="none">evelopers </SPAN><SPAN data-contrast="none">of any skill </SPAN><SPAN data-contrast="none">to add AI capabilities to their applications with pre-built and customizable AI models for speech, vision, </SPAN><SPAN data-contrast="none">language, and decision-making</SPAN><SPAN data-contrast="none">.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/product-categories/integration/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Integration</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The third building block is integration.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Why is integration needed, and how is it accomplished?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Integration is needed to integrate applications by connecting multiple i</SPAN><SPAN data-contrast="none">ndependent systems</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-contrast="none">The four core cloud services to meet integration needs are</SPAN><SPAN data-contrast="none">:</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><SPAN data-contrast="none">A</SPAN><SPAN data-contrast="auto"> way to publish and manage application programming interfaces (APIs). </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":259,"335559991":720}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">A way to create and run integration logic</SPAN><SPAN data-contrast="auto">, typically with a graphical tool for defining the workflow’s logic. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":259,"335559991":720}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> A way for applications and integration technologies to communicate in a loosely coupled way via messaging. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":259,"335559991":720}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">A technology that supports communication via events</SPAN></LI> </OL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_4-1615417254165.jpeg" style="width: 1537px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262624i680ADC41AE4E218D/image-dimensions/1537x771?v=v2" width="1537" height="771" role="button" title="riduncan_4-1615417254165.jpeg" alt="riduncan_4-1615417254165.jpeg" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What are the benefits of Azure integration services</SPAN></STRONG><STRONG><SPAN data-contrast="none"> and how do they translate to the modern app dev approach</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Azure meets all four needs, the first need is met by</SPAN><SPAN data-contrast="none"> Azure </SPAN><SPAN data-contrast="none">API management, the second is met by Azure Logic Apps, the third is Azure Service </SPAN><SPAN data-contrast="none">B</SPAN><SPAN data-contrast="none">us</SPAN><SPAN data-contrast="none">, and the </SPAN><SPAN data-contrast="none">final is met by </SPAN><SPAN data-contrast="none">Azure Event Grid.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The four components of Azure Integration Services address the core requirements of application integration. Yet real scenarios often require </SPAN><SPAN data-contrast="auto">more,</SPAN><SPAN data-contrast="auto"> and this is where the modern application development approach comes into play</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Perhaps </SPAN><SPAN data-contrast="auto">your integration application needs a place to store unstructured data, or a way to include custom code that does specialized data transformations.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Azure Integration Services is part of the larger Azure cloud platform, </SPAN><SPAN data-contrast="auto">making it</SPAN><SPAN data-contrast="auto"> easi</SPAN><SPAN data-contrast="auto">er</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">to </SPAN><SPAN data-contrast="auto">in</SPAN><SPAN data-contrast="auto">tegrate data, APIs, and </SPAN><SPAN data-contrast="auto">into your modern app to meet your needs.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">You might store unstructured data in Azure Data Lake Store, for instance, or write custom code using Azure Functions, </SPAN><SPAN data-contrast="auto">to meet</SPAN><SPAN data-contrast="auto"> serverless compute tech</SPAN><SPAN data-contrast="auto"> needs</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/services/azure-sql/sql-managed-instance/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Data</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The fourth building block is data, and more specifically managed databases.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What are the advantages of managed databases?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Fully managed, cloud-based databases provide limitless scale, low-latency access to rich data, and advanced data protection—all built in, regardless of languages or frameworks.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">How does the modern application development approach benefit from fully managed databases</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Modern application development leverages microservices and containers, the benefit to both technologies </SPAN><SPAN data-contrast="none">is</SPAN><SPAN data-contrast="none"> their ability to operate independently</SPAN><SPAN data-contrast="none"> and </SPAN><SPAN data-contrast="none">scale as demand warrants.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">To ensure the greatest user satisfaction and app functionality the limitless scale and low</SPAN><SPAN data-contrast="none">-</SPAN><SPAN data-contrast="none">latency access </SPAN><SPAN data-contrast="none">to data enable apps to run </SPAN><SPAN data-contrast="none">unimpeded.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_5-1615417254180.png" style="width: 1886px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262625iCA63945B54B2A5F3/image-dimensions/1886x1204?v=v2" width="1886" height="1204" role="button" title="riduncan_5-1615417254180.png" alt="riduncan_5-1615417254180.png" /></span></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/solutions/devops/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Software Delivery</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The fifth building block is software delivery.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What constitutes modern development software delivery practices?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Modern app development software delivery practices enable you to meet r</SPAN><SPAN data-contrast="none">apid market changes that require shorter release cycles without sacrificing quality, stability, and security.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The practice</SPAN><SPAN data-contrast="none">s help you to release in a fast, consistent, and reliable way by using highly productive tools, automating mundane and manual steps, and iterating in small increments through CI/CD and DevOps practices.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/overview/what-is-devops/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">What </SPAN></STRONG><STRONG><SPAN data-contrast="none">is </SPAN></STRONG><STRONG><SPAN data-contrast="none">DevOps?</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">A compound of development (Dev) and operations (Ops), DevOps is the union of people, process, and technology to continually provide value to customers.</SPAN><SPAN data-contrast="none"> DevOps enables formerly siloed roles—development, IT operations, quality engineering, and security—to coordinate and collaborate to produce better, more reliable products.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">By adopting a DevOps culture along with DevOps practices and tools, teams gain the ability to better respond to customer needs, increase confidence in the applications they build, and achieve development goals faster.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">DevOps influences the application lifecycle throughout its </SPAN><STRONG><SPAN data-contrast="none">plan</SPAN></STRONG><SPAN data-contrast="none">, </SPAN><STRONG><SPAN data-contrast="none">develop</SPAN></STRONG><SPAN data-contrast="none">, </SPAN><STRONG><SPAN data-contrast="none">deliver</SPAN></STRONG><SPAN data-contrast="none">, and </SPAN><STRONG><SPAN data-contrast="none">operate </SPAN></STRONG><SPAN data-contrast="none">phases.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_6-1615417254185.png" style="width: 1642px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262627iEB7A264D4A97EAF5/image-dimensions/1642x1414?v=v2" width="1642" height="1414" role="button" title="riduncan_6-1615417254185.png" alt="riduncan_6-1615417254185.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Plan</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In the plan phase, DevOps teams ideate, define, and describe features and capabilities of the applications and systems they are building. </SPAN><SPAN data-contrast="none">Creating backlogs, tracking bugs, managing agile software development with Scrum, using Kanban boards, and visualizing progress with dashboards are some of the ways DevOps teams plan with agility and visibility.</SPAN></P> <P> </P> <P aria-level="3"><STRONG><SPAN data-contrast="none">Develop</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="none">The develop phase includes all aspects of coding—writing, testing, reviewing, and the integration of code by team members—as well as building that code into build artifacts that can be deployed into various environments. </SPAN><SPAN data-contrast="none">To develop rapidly, they use highly productive tools, automate mundane and manual steps, and iterate in small increments through automated testing and continuous integration.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"> </P> <P aria-level="3"><STRONG><SPAN data-contrast="none">Deliver</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="none">Delivery is the process of deploying applications into production environments and deploying and configuring the fully governed foundational infrastructure that makes up those environments. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="none">In the deliver phase, teams define a release management process with clear manual approval </SPAN><SPAN data-contrast="none">stages.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">They</SPAN><SPAN data-contrast="none"> also set automated gates that move applications between stages until they’re made available to customers.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P aria-level="3"><STRONG><SPAN data-contrast="none">Operate</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The </SPAN><SPAN data-contrast="none">operate</SPAN><SPAN data-contrast="none"> phase involves maintaining, monitoring, and troubleshooting applications in production environments. In adopting DevOps practices, teams work to ensure system reliability, high availability, and aim for zero downtime while reinforcing security and governance.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/overview/continuous-delivery-vs-continuous-deployment/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">W</SPAN></STRONG><STRONG><SPAN data-contrast="none">hat is CI/CD?</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Under continuous integration, the develop phase—building and testing code—is fully automated. </SPAN><SPAN data-contrast="none">Each time you commit code, changes are validated and merged to the master branch, and the code is packaged in a build artifact.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Under continuous delivery, anytime a new build artifact is available, the artifact is automatically placed in the desired environment and deployed.</SPAN><SPAN data-contrast="none"> With continuous deployment, you automate the entire process from code </SPAN><SPAN data-contrast="none">commit</SPAN><SPAN data-contrast="none"> to production</SPAN><SPAN data-contrast="none">.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/services/monitor/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Operations</SPAN></STRONG><SPAN> <BR /></SPAN></A><SPAN data-contrast="auto">The sixth building block is operations to maximize automation.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">How do</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><STRONG><SPAN data-contrast="auto">you maximize automation in your modern app</SPAN></STRONG><STRONG><SPAN data-contrast="auto">lication development approach?</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">With an increasingly complex environment to manage, maximizing the use of automation helps you improve operational efficiency, identify issues before they affect customer experiences, and quickly mitigate issues when they occur.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Fully managed platforms provide automated logging, scaling, and high availability. Rich telemetry, actionable alerting, and full visibility into applications and the underlying system are key to a modern application development approach.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Automating regular checkups and applying best practices like infrastructure as code and site reliability engineering promotes resiliency and helps you respond to incidents with minimal downtime and data loss.</SPAN></P> <P> </P> <P><A href="https://docs.microsoft.com/en-us/azure/security/fundamentals/best-practices-and-patterns" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Security</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The seventh building block is multilayered security.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Why do I need multi-layered security in my modern </SPAN></STRONG><STRONG><SPAN data-contrast="auto">applications?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Modern applications </SPAN><SPAN data-contrast="none">require</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://docs.microsoft.com/en-us/azure/security/fundamentals/best-practices-and-patterns" target="_blank" rel="noopener"><SPAN data-contrast="none">multilayered security</SPAN></A><SPAN data-contrast="none"> across code, delivery pipelines, app runtimes, and databases. Start by providing developers secure dev boxes with well-governed identity. As part of the DevOps lifecycle, use automated tools to examine dependencies in code repositories and scan for vulnerabilities as you deploy apps to the target environment.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Enterprise-grade secrets and policy management encrypt the applications and give the operations team centralized policy enforcement.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">With fully managed compute and database services, security control is built in and threat protection is executed in real time.</SPAN></P> <P> </P> <P class="hd he fn hf b hg iu hh hi hj iv hk hl hm iw hn ho hp ix hq hr hs iy ht hu hw db dw" data-selectable-paragraph=""><STRONG class="hf co">Conclusion</STRONG><BR />While modern application development can seem daunting, it is an approach that can be done iteratively, and each step can yield large benefits for your team.</P> <P class="hd he fn hf b hg iu hh hi hj iv hk hl hm iw hn ho hp ix hq hr hs iy ht hu hw db dw" data-selectable-paragraph=""> </P> <P class="hd he fn hf b hg iu hh hi hj iv hk hl hm iw hn ho hp ix hq hr hs iy ht hu hw db dw" data-selectable-paragraph="">Access webinars, analyst reports, tutorials, and more on the<SPAN> </SPAN><A class="bp iz" href="https://azure.microsoft.com/en-us/solutions/modern-application-development/" target="_blank" rel="noopener nofollow">Modern application development on Azure</A><SPAN> </SPAN>page.</P> Fri, 26 Mar 2021 00:59:09 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/modern-application-development/ba-p/2235485 riduncan 2021-03-26T00:59:09Z [DevTest Labs] Decommissioning preview API's '2015-05-21-preview' & '2017-04-26-preview' in 90 days https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-decommissioning-preview-api-s-2015-05-21-preview/ba-p/2219208 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Develop and Test.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/267325iA0FC3F81BD42ECF9/image-size/large?v=v2&px=999" role="button" title="Develop and Test.png" alt="Develop and Test.png" /></span></P> <P> </P> <P>There were a few preview API’s that were made available in the previous years for Azure DevTest Labs, with the goal of enabling early access to certain features and functionalities.</P> <P> </P> <P>We have incorporated all the functionalities related to below preview API’s in the latest API specs, that were generally made available and we have decided to decommission below DTL preview API’s by June 17, 2021.</P> <P> </P> <UL> <LI> <STRONG>2015-05-21-preview</STRONG></LI> <LI><STRONG> </STRONG><STRONG>2017-04-26-preview</STRONG></LI> </UL> <P>If you are still using any of the above preview API’s, We recommend to migrate and use the <A href="https://github.com/Azure/azure-rest-api-specs/tree/master/specification/devtestlabs/resource-manager/Microsoft.DevTestLab/stable/2018-09-15" target="_blank" rel="noopener">latest DTL REST API Specs</A> that were generally made available. The decommissioning does not impact our current API version in preview, 2018-09-15-preview.</P> <P> </P> <P>‘<STRONG>2015-05-21-preview’</STRONG> and<STRONG> ‘</STRONG><STRONG>2017-04-26-preview</STRONG><STRONG>’ </STRONG>API versions would be decommissioned on June 17, 2021 and if you are using the preview API’s, we request you to kindly migrate before June 17, 2021.</P> <P> </P> <P>As always, please reach out to us in case of any questions or concerns.</P> <P> </P> <P>- DevTest Labs Product Team</P> <P> </P> Thu, 27 May 2021 22:17:43 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-decommissioning-preview-api-s-2015-05-21-preview/ba-p/2219208 Sagar_Lankala 2021-05-27T22:17:43Z Microsoft Customer Co-Creation: How You Can Help Influence the way Products and Services are Built https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-customer-co-creation-how-you-can-help-influence-the/ba-p/2217804 <P><SPAN data-contrast="auto">March is Women’s History Month </SPAN><SPAN data-contrast="auto">and what a more fitting </SPAN><SPAN data-contrast="auto">time</SPAN><SPAN data-contrast="auto"> for our team,</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Microsoft Azure Engineering, </SPAN><SPAN data-contrast="auto">to have our first post go up here on the Tech Community Blog. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="IWD2021Blog_800.png" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/265096iC2D31AA25D562AAD/image-size/large?v=v2&px=999" role="button" title="IWD2021Blog_800.png" alt="IWD2021Blog_800.png" /></span></SPAN></P> <P><SPAN data-contrast="auto">As a woman working in tech, I’m proud to work for a company like Microsoft, where diversity and inclusion is celebrated. </SPAN><SPAN data-contrast="auto">This mindset also shapes the way we build our </SPAN><SPAN data-contrast="auto">products and services. That’s where a program like </SPAN><SPAN data-contrast="auto">Microsoft </SPAN><SPAN data-contrast="auto">Customer Co-creation comes into play. If you haven’t heard about </SPAN><SPAN data-contrast="auto">it</SPAN><SPAN data-contrast="auto">, I’d like to take this opportunity to tell you </SPAN><SPAN data-contrast="auto">more</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CustomerCoCreationBlog_800.png" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/265097iE06B95E39C6D5D7F/image-size/large?v=v2&px=999" role="button" title="CustomerCoCreationBlog_800.png" alt="CustomerCoCreationBlog_800.png" /></span></SPAN></P> <P><A href="https://customercocreation.microsoft.com/home/blog" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft</SPAN><SPAN data-contrast="none"> Customer co-creation</SPAN></A><SPAN data-contrast="auto"> connects you directly with engineers within </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="none">Cloud Engineering (C+ AI) organization </SPAN><SPAN data-contrast="auto">so you can </SPAN><SPAN data-contrast="auto">talk to them about the products you care about. Sometimes this could mean playing an early role in product and service development</SPAN><SPAN data-contrast="auto"> before a single line of code is even written</SPAN><SPAN data-contrast="auto">. Ultimately, our hope is </SPAN><SPAN data-contrast="auto">your feedback will result in </SPAN><SPAN data-contrast="auto">the creation of </SPAN><SPAN data-contrast="auto">something you’ll</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">really love using</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">You can start by </SPAN><A href="https://customercocreation.microsoft.com/home/blog" target="_blank" rel="noopener"><SPAN data-contrast="none">fill</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> out your profile</SPAN></A><SPAN data-contrast="auto"> and tell</SPAN><SPAN data-contrast="auto">ing</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">us about yourself and what you’re interested in</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">When the right opportunity comes up, </SPAN><SPAN data-contrast="auto">our team will</SPAN><SPAN data-contrast="auto"> contact you, let you know the topic</SPAN><SPAN data-contrast="auto">,</SPAN><SPAN data-contrast="auto"> and ask your availability to participate in a feedback session. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">Your voice matters and </SPAN><SPAN data-contrast="auto">I</SPAN><SPAN data-contrast="auto"> hope you’ll consider joining the Microsoft</SPAN><SPAN data-contrast="auto"> Customer</SPAN><SPAN data-contrast="auto"> Co-creation program </SPAN><SPAN data-contrast="auto">and help</SPAN><SPAN data-contrast="auto"> influence </SPAN><SPAN data-contrast="auto">the services and products </SPAN><SPAN data-contrast="auto">you </SPAN><SPAN data-contrast="auto">use</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="BlogLogo.jpg" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/265100i8988DD20F3E1590E/image-size/large?v=v2&px=999" role="button" title="BlogLogo.jpg" alt="BlogLogo.jpg" /></span></P> Fri, 26 Mar 2021 00:58:34 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-customer-co-creation-how-you-can-help-influence-the/ba-p/2217804 Malgosia Mazany 2021-03-26T00:58:34Z [Customer Story] Enabling an Event Driven Architecture with DevTest Labs https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-enabling-an-event-driven-architecture-with/ba-p/2214548 <P><A href="https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration" target="_blank" rel="noopener">SharePoint Online</A> (SPO) is Microsoft’s enterprise-class document management service for <A href="https://www.microsoft.com/en-us/microsoft-365" target="_blank" rel="noopener">Microsoft365</A>. The <A href="https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration" target="_blank" rel="noopener">SharePoint Online</A> (SPO) team at Microsoft has created a solution, built on Azure DevTest Labs (DTL), to make SPO testing environments readily available to SharePoint engineers, leveraging the strengths of DevTest Labs and Azure. This is the second in a series of blog entries enabling anyone to build, configure and run a similar system using Azure and DTL. For part 1, see <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781" target="_blank" rel="noopener">How the SharePoint Online Team Leverages DevTest Labs</A>. </P> <P> </P> <P>In this blog post, two use cases of the solution’s expected VM lifecycle are described. A simple architecture is proposed that involves hooking up an <A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener">Azure Function App</A> to <A href="https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftdevtestlab" target="_blank" rel="noopener">DevTest Lab Events</A> by way of <A href="https://azure.microsoft.com/en-us/services/event-grid/" target="_blank" rel="noopener">Azure Event Grid</A> to implement the two use cases. There is a brief walk-through of the implementation intended to be used by other Azure customers to build similar solutions. If you are building an event-driven DTL application, consider using Azure Functions and Event Grid as the SPO team did. This article is of interest to you!</P> <P> </P> <H2>Scenario</H2> <P> </P> <P>As introduced in <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781" target="_blank" rel="noopener">Part 1</A> of this blog series, environments in Azure DevTest Labs are a natural fit for SPO integration testing. SPO engineers can claim test environments that are miniaturized data centers, with all components shrunk down and interacting on a single Azure VM inside DTL. Pools of these VMs are made available for SPO engineers so that test environments are readily available at any time. When finished, they unclaim them. </P> <P> </P> <P>There are two features that the SPO team has built on top of existing DevTest Labs Claim/Unclaim operations:</P> <P> </P> <P><STRONG><FONT color="#000000">Feature</FONT> 1 – Tag a Claimed VM</STRONG></P> <P> </P> <P>By default, DTL does not allow an easy way for the admin to know the ownership of claimed VMs. A common way to do this is to add an “Owner” tag to the VM using <A href="https://docs.microsoft.com/en-us/rest/api/resources/tags" target="_blank" rel="noopener">Azure Tags</A>. Tags are flexible and allow lab admins to easily organize Azure resources and make them easy to query, for example, to list VMs assigned to a given user or set of users. In this solution, when a user claims a VM, an event is fired, and the handler attaches an “Owner” tag, with associated user name as data, to the VM. The tag shows up in the VM’s properties in the Azure Portal.</P> <P> </P> <P><STRONG>Feature 2 – Delete an Unclaimed VM</STRONG></P> <P> </P> <P>In SPO’s use case, VMs are not re-usable. Once a VM is claimed by a lab user, the state on the VM may change in such a way as to make the VM unsuitable for future users’ needs. For example, users can change the state of one of the SharePoint web applications, or introduce state into SharePoint by simply adding a document to a document library as part of a test. (For a better understanding of SharePoint’s document libraries, try: <A href="https://support.microsoft.com/en-us/office/what-is-a-document-library-3b5976dd-65cf-4c9e-bf5a-713c10ca2872" target="_blank" rel="noopener">What is a document library?</A>) The engineer may also update the code running on the VM, which can change behavior in a way undesirable for other engineers.</P> <P> </P> <P>In general, once a VM is assigned to a lab user, its validity as a clean test environment can no longer be trusted. With this use case in mind, VMs in the SPO solution are single-use. Once unclaimed, they are deleted.</P> <P> </P> <P><STRONG><EM>Note:</EM></STRONG><EM> Replenishment of the pool of available VMs is described in a future blog entry in this series, entitled “Maintaining a Pool of Claimable VMs”.</EM></P> <P> </P> <P>Both of these features can be added to DevTest Labs using <A href="https://azure.microsoft.com/en-us/services/event-grid/" target="_blank" rel="noopener">Azure Event Grid</A>, with an <A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener">Azure Function</A> listening and handling events. The solution is simple and elegant; please read on to see how this is configured.</P> <P> </P> <H2>Event Handling with Azure Functions</H2> <P> </P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener">Azure Functions</A> are a flexible, serverless computing platform in Azure. Functions can be configured to trigger when an Azure event fires, and DevTest Labs fires “Claim” and “Unclaim” events when VMs are claimed or unclaimed, respectively. When configured properly through <A href="https://azure.microsoft.com/en-us/services/event-grid/" target="_blank" rel="noopener">Event Grid</A>, events are dispatched to an Azure Function subscriber.</P> <P> </P> <P>For simplicity and brevity, the solution described herein implements a single Azure function to handle both Claim and Unclaim events. The function is written in <A href="https://docs.microsoft.com/en-us/powershell" target="_blank" rel="noopener">PowerShell</A> and implements the tagging and delete business logic for these events. It is deployed in a Function App, triggered when events fire, in accordance with this table:</P> <P> </P> <TABLE width="719"> <TBODY> <TR> <TD width="133"> <P><STRONG>DevTestLab Event </STRONG></P> </TD> <TD width="370"> <P><STRONG>Event Name</STRONG></P> </TD> <TD width="215"> <P><STRONG>Action</STRONG></P> </TD> </TR> <TR> <TD width="133"> <P><STRONG>Claim</STRONG></P> </TD> <TD width="370"> <P>microsoft.devtestlab/labs/virtualmachines/claim/action</P> </TD> <TD width="215"> <P>Add an "Owner" tag to the VM</P> </TD> </TR> <TR> <TD width="133"> <P><STRONG>Unclaim</STRONG></P> </TD> <TD width="370"> <P>microsoft.devtestlab/labs/virtualmachines/unclaim/action</P> </TD> <TD width="215"> <P>Delete the VM</P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P><STRONG><EM>Note:</EM></STRONG><EM> You can find a complete list of DevTestLab events here: </EM><A href="https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftdevtestlab" target="_blank" rel="noopener"><EM>DevTest Lab Events</EM></A><EM>. There are several useful ones that, when paired with the technique described in this post, can be used to solve other event-driven scenarios using the template given here.</EM></P> <P> </P> <H2>Solution Architecture</H2> <P> </P> <P>This solution builds on the ideas presented in the article <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/extend-devtest-labs-azure-functions" target="_blank" rel="noopener">Use Azure Functions to extend DevTest Labs</A>. A key difference is how the events are triggered: In the article, the Functions are triggered via an HTTP call. In this example, Claim/Unclaim events are generated from the DevTest Lab and routed via Event Grid to the function app. We will also be building on the coding concepts in <A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid-trigger?tabs=csharp" target="_blank" rel="noopener">Azure Event Grid trigger for Azure Functions</A>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_15-1615912246433.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264413iBF4DEA280572CB61/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_15-1615912246433.png" alt="Sagar_Lankala_15-1615912246433.png" /></span></P> <P> </P> <H2>Walkthrough</H2> <P> </P> <P>The following solution assumes a pre-created Azure DevTest Lab, such as one created using the steps in <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/devtest-lab-create-lab" target="_blank" rel="noopener">Create a lab in Azure DevTest Labs</A>. In this example, the Lab has been freshly deployed with name “PetesDTL” and resource group “PetesDTL_rg” with no VMs yet created.</P> <P> </P> <P><STRONG>Step 1: Create a Function App</STRONG></P> <P>Use the “Create a Resource” UI and find “Function App” in your Azure subscription, and hit “Create”. Select the resource group for your DevTest Lab. This is optional but is a convenience for grouping your app with the other resources for your Lab. In this example, the Name of the app is "PetesFnApp" and is in the “PetesDTL_rg” resource group with a Runtime stack that is PowerShell Core. <A href="https://microsoft.com/powershell" target="_blank" rel="noopener">PowerShell Core</A> is a flexible, operating system independent control language that is easy to get to work with Azure.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_16-1615913628568.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264430iAC7FA62F4D69F6A4/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_16-1615913628568.png" alt="Sagar_Lankala_16-1615913628568.png" /></span></P> <P> </P> <P>Leaving the majority of the settings with their defaults, hit “Review + create”, then “Create” to deploy the function app after the verification step.</P> <P> </P> <P><STRONG>Step 2: Create the FnDTLClaimUnclaim Function</STRONG></P> <P>Navigate to the newly-deployed Function App, hit “Functions” and then “+ Add” to add a new function to the App. Leave the “Development environment” to be “Develop in portal” and select “Azure Event Grid trigger” for the template. In this example, the new function is named “FnDTLClaimUnclaim”. The name indicates that this Powershell Core function is dual-purpose and will handle both the “Claim” and “Unclaim” events from the DevTest Lab. Click “Add”.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_17-1615913657857.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264431iECF8CB03B838F24F/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_17-1615913657857.png" alt="Sagar_Lankala_17-1615913657857.png" /></span></P> <P> </P> <P><STRONG>Step 3: Add logic to the function</STRONG></P> <P>Navigate to the newly-created function, and hit “Code + Test”. There is some sample code in the edit window, which you can replace with the following code:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">param($eventGridEvent, $TriggerMetadata) $operationName = $eventGridEvent.data["operationName"] # Apply an Owner tag to a VM based on passed-in claims function ApplyOwnerTag($vmId, $claims) { # Get the VM $dtlVm = Get-AzResource -ResourceId $vmId -ErrorAction SilentlyContinue # Fetch user. # Prefer user specified in claims, then owner, then createdBy $claimPropName = $claims.keys | Where-Object {$_ -like "*/identity/claims/name"} if ($claimPropName) { $user = $claims[$claimPropName] } if (-not $user) { $user = $dtlVm.Properties.ownerUserPrincipalName } if (-not $user) { $user = $dtlVm.Properties.createdByUser } $tags = $dtlvm.Tags if ($tags) { if (-not $tags.keys.Contains("Owner")) { $tags.Add("Owner", $user) } } else { $tags = @{ Owner=$user } } # Save the VM's tags Set-AzResource -ResourceId $vmId -Tag $tags -Force | Out-Null } # Event Action # ------------------------------------------ # Claim Add "owner" tag to the VM # Unclaim Delete the VM $claimAction = ($operationName -eq "microsoft.devtestlab/labs/virtualmachines/claim/action") $unclaimAction = ($operationName -eq "microsoft.devtestlab/labs/virtualmachines/unclaim/action") if ($claimAction -or $unclaimAction) { $vmId = $eventGridEvent.subject Connect-AzAccount -Identity $dtlVm = Get-AzResource -ResourceId $vmId -ErrorAction SilentlyContinue if ($claimAction) { if (-not $dtlVm.Properties.allowClaim) { ApplyOwnerTag $vmId $eventGridEvent.data.claims } } else { if ($dtlVm.Properties.allowClaim) { Remove-AzResource -ResourceId $vmId -Force -ErrorAction SilentlyContinue } } } </LI-CODE> <P> </P> <P> </P> <P> </P> <P>Click “Save” to save the function.</P> <P> </P> <P>The code snippet contains an ApplyOwnerTag function and a main body. The ApplyOwnerTag function gets the user from variety of sources, preferring first the identity from the passed-in claims, then looking at the owner or created-by user from the DevTestLabs VM. Once it has a valid user name, it adds the “Owner” tag to the VM.</P> <P> </P> <P>The main body of the Azure Function first determines which event is being handled. On a Claim event, the ApplyOwnerTag function is called to add the “Owner” tag to the given VM. On Unclaim, the VM is removed. This logic implements the behavior desired for the SharePoint Online application for these two events.</P> <P> </P> <P><STRONG>Step 4: Assign an Identity and Role for the Azure Function</STRONG></P> <P> </P> <P>The Azure function has a call to Connect-AzAccount, which requires that the function app uses a System-assigned identity. (User-assigned identities can also be configured, however for simplicity this example uses a System-assigned identity.) Further, the identity in question needs access to resources in the subscription in order to add tags and to delete VMs. To configure this, click on the Function App, then Identity. Change the Status to “On”. </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_18-1615913793433.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264432iEACFF1531B2A335E/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_18-1615913793433.png" alt="Sagar_Lankala_18-1615913793433.png" /></span></P> <P> </P> <P>Next, Click on “Azure role assignments” to configure role-based access control for this Function App. In this example, Contributor role is assigned for the entire Azure subscription. While it’s possible to configure more fine-grained access to the Identity, this example in order to keeps things simple.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_19-1615913821861.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264433iD1200866F8C407DE/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_19-1615913821861.png" alt="Sagar_Lankala_19-1615913821861.png" /></span></P> <P> </P> <P>The resultant role assignment should look like this:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_20-1615913843791.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264434iD67D84695E111C29/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_20-1615913843791.png" alt="Sagar_Lankala_20-1615913843791.png" /></span></P> <P> </P> <P><STRONG>Step 5: Create an Event Subscription for the Function App</STRONG></P> <P> </P> <P>At this point we have logic ready to handle the DevTestLabs events, but the Function App is not configured to subscribe to those events. Azure Event Grid is infrastructure for mapping Azure events to logic and can be used to create rich applications. To get deeper into Azure Event Grid, please check out <A href="https://docs.microsoft.com/en-us/azure/event-grid/overview" target="_blank" rel="noopener">Azure Event Grid Overview</A>.</P> <P>Navigate to the subscription, then click Events. Under “Get Started”, click on “Azure Function”:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_21-1615913869342.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264435i85DEC63D32A4187F/image-size/medium?v=v2&px=400" role="button" title="Sagar_Lankala_21-1615913869342.png" alt="Sagar_Lankala_21-1615913869342.png" /></span></P> <P> </P> <P>Enter “DTLEventSub” as the name. Use “ClaimUnclaimVM” for the System Topic Name. For Endpoint Type select “Azure Function” with Endpoint “FnDTLClaimUnclaim”.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_22-1615913902855.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264436i42FA487A8A2B0F61/image-size/medium?v=v2&px=400" role="button" title="Sagar_Lankala_22-1615913902855.png" alt="Sagar_Lankala_22-1615913902855.png" /></span></P> <P> </P> <P>Hit Create. This will create the ClaimUnclaimVM Topic and the Event Subscription.</P> <P> </P> <P><STRONG>Step 6: Test the Claim functionality</STRONG></P> <P> </P> <P>Navigate to the DevTest Lab in your subscription, “PetesDTL” in this example, and click “+ Add” to create a new VM. The type of VM you choose is not relevant for this example – you can select the operating system and resources that are appropriate for your application. In this example the VM is named “petesvm001”. </P> <P>In “Advanced Settings”, select “Yes” for “Make this machine claimable” under “Claim options”, then in “Basic Settings” click “Create”. The reason is that we expect to Claim the VM through the UI to trigger the tagging behavior. Later, when we Unclaim the VM, we will expect to see the VM being deleted.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_26-1615914079102.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264440i5CBD3181F30BF22C/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_26-1615914079102.png" alt="Sagar_Lankala_26-1615914079102.png" /></span></P> <P> </P> <P>After the VM is created (this may take several minutes, perhaps tens of minutes, to complete) it should show in the “Claimable virtual machines” section of the DevTest Labs UI:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_25-1615914033001.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264439i82B28E8C950B2806/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_25-1615914033001.png" alt="Sagar_Lankala_25-1615914033001.png" /></span></P> <P> </P> <P>Note that this VM does not have an “Owner” tag yet, since it has not yet been claimed:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_24-1615914016828.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264438iC8791D649CECEE07/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_24-1615914016828.png" alt="Sagar_Lankala_24-1615914016828.png" /></span></P> <P><STRONG> </STRONG></P> <P>Now, click the ellipsis (…) on the VM in the Claimable virtual machines, and select “Claim”. This operation will also take several tens of minutes before the VM is successfully claimed and the Azure event has made its way through the Event Grid infrastructure and called our Azure Function. You can monitor when your Function has been called by selecting the Function in the Function App UI and seeing Total and Successful Execution Count in the Overview section:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_23-1615913992716.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264437iD5AB4F190B7F02D5/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_23-1615913992716.png" alt="Sagar_Lankala_23-1615913992716.png" /></span></P> <P> </P> <P>You can also see what the Azure Function logs in near real-time by using the “Code + Test” UI and opening the Logs popup at the bottom:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_27-1615914114419.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264441i15CD0666D69AAF45/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_27-1615914114419.png" alt="Sagar_Lankala_27-1615914114419.png" /></span></P> <P> </P> <P>After several minutes, the Function is called, and the ApplyOwnerTag PowerShell function adds the current user’s name in the Owner tag, as expected:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_28-1615914135842.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264443i2D857FC55D6C0EB9/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_28-1615914135842.png" alt="Sagar_Lankala_28-1615914135842.png" /></span></P> <P> </P> <P>Now navigate to “My virtual machines” in the DevTest Labs UI, click the ellipsis (…) and select “Unclaim”:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_29-1615914157921.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264444i609FE37C7ECF3AC3/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_29-1615914157921.png" alt="Sagar_Lankala_29-1615914157921.png" /></span></P> <P> </P> <P>Once again, it will take several minutes for the event to make its way through Azure to call FnDTLClaimUnclaim, but when it does the Remove-AzResource call will ensure the VM gets deleted:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_30-1615914175826.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264445i4829C43F36BD6A6C/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_30-1615914175826.png" alt="Sagar_Lankala_30-1615914175826.png" /></span></P> <P> </P> <P><SPAN>This completes the full Claim/Unclaim cycle that a SharePoint Online user would experience and demonstrates the two features built on top of DevTest Labs.</SPAN></P> <P> </P> <P><SPAN><STRONG>Some Notes on Performance</STRONG></SPAN></P> <P> </P> <P>The Azure Function App used in this example uses the <A href="https://microsoft.com/powershell" target="_blank" rel="noopener">PowerShell Core</A> runtime. PowerShell was chosen for its strength as a simple control language for Azure, and its amenability to concise code samples. However, there is overhead to the boot time and resource consumption for PowerShell-based Function Apps over, say, C#-based Apps that should not be overlooked for performance-sensitive applications.</P> <P> </P> <P>Eventing in Azure has its own set of performance characteristics, and you will notice with these samples delays of minutes and sometimes up to tens of minutes for events to fire and be handled by the Function App. This can be improved somewhat by upgrading from a Consumption Plan to an Dedicated App Service Plan, but one should bear in mind that there is always inherent and unavoidable latency due to the Azure’s eventing model, and this should be accounted for in the design of the Azure application.</P> <P> </P> <P><FONT size="4"><STRONG>What's Next?</STRONG></FONT></P> <P> </P> <P>The next blog post will describe how the SharePoint team built an Azure VPN that complements the DevTest Lab, securing the connection between lab users and the VMs they connect to. If you are interested in securing your environment, this is not one you will want to miss!</P> <P>If you run into any problems with the content, or have any questions, please feel free to drop a comment below this post and we will respond. Your feedback is always welcome.</P> <P> </P> <P><STRONG>- Pete Harwood</STRONG>, Principal Engineering Manager, OneDrive and SharePoint Engineering Fundamentals at Microsoft</P> <P> </P> <P> </P> Tue, 16 Mar 2021 21:23:59 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-enabling-an-event-driven-architecture-with/ba-p/2214548 Sagar_Lankala 2021-03-16T21:23:59Z Build new skills in 30 days https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-new-skills-in-30-days/ba-p/2197517 <P>Today, we are excited to share <A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A>, a guided, time-bound, personal learning challenge, built upon the Microsoft Learn interactive training platform. And as you learn, the new program helps you work towards certification – by completing a learning collection within the 30 days, you can earn a voucher once every six months for 50% off the cost of a Microsoft Certification exam.*</P> <P> </P> <P>At Microsoft, our goal is to help make technical learning accessible to anyone who wants to acquire a new skill, chase a new career path, and stay up to date on the latest technological advances.</P> <P> </P> <P>Technology continues to accelerate and change the world around us – requiring people and businesses to quickly innovate and adapt to the latest skills needed to thrive as a company and as an individual. To stay current, access to technical learning resources is critical. Last year we made <A href="https://blogs.microsoft.com/blog/2020/06/30/microsoft-launches-initiative-to-help-25-million-people-worldwide-acquire-the-digital-skills-needed-in-a-covid-19-economy/" target="_self">a big bet on learning with our Global Skilling Initiative</A>, aimed at helping 25 million people worldwide acquire critical new digital skills with free access to learning paths and content, and low-cost certifications to help people develop the skills new positions require.</P> <P> </P> <P><A title="30 Days to Learn It" href="https://developer.microsoft.com/offers/30-days-to-learn-it" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="30 Days to Learn It banner for blog.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262585iC7DD1D3EA2DEAC38/image-size/large?v=v2&px=999" role="button" title="30 Days to Learn It banner for blog.png" alt="30 Days to Learn It banner for blog.png" /></span></A></P> <P> </P> <P><STRONG>30 Days of Learning </STRONG></P> <P> </P> <P><A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A> accelerates your time to mastery of in-demand technical skills with a commitment of less than an hour each day for a month. Each learning journey introduces new technical skills and concepts using Microsoft Learn’s step-by-step tutorials, browser-based interactive coding and scripting environments, and task-based achievements. From the day you sign up, you have a month-long journey with a personal project tracker to visualize your progress through the learning content.</P> <P> </P> <P>Today, the program launches with eight different journeys to help you gain cloud development skills using Microsoft technologies. Topics covered include AI, DevOps, cloud-native apps, serverless applications, low code, Internet of Things (IoT), machine learning (ML), and compute infrastructure. Each learning journey is designed to also provide a foundation to help you prepare for the certification exam of your preferred learning journey. A Microsoft Certification provides an industry-recognized validation of your skills and can help advance your career.</P> <P> </P> <P style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog Post 2.png" style="width: 883px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262276i86653BA755911811/image-size/large?v=v2&px=999" role="button" title="Blog Post 2.png" alt="Blog Post 2.png" /></span></P> <P style="font-size: .65em;"><SUP>1 </SUP>Source: IDC White Paper, sponsored by Microsoft, Benefits of Role-Based Certifications (June 2020) </P> <P style="font-size: .65em;"><SUP>2 </SUP>Source: Nigel Frank Microsoft Azure Salary Survey (June 2020)</P> <P> </P> <P><STRONG>Okay – Start Learning! </STRONG></P> <P> </P> <P><A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A> offers the flexibility of completing a learning journey within 30 days from the time you sign up, at your own pace, and provides the added opportunity to earn a discount voucher for a Microsoft Certification exam if you complete your learning modules in the 30-day period*.</P> <P> </P> <P>This program is now available worldwide in 17 languages, and is currently <A href="https://developer.microsoft.com/offers/30-days-to-learn-it/official-rules#terms-and-conditions" target="_blank" rel="noopener">running through the end of June 2021</A>.</P> <P> </P> <P>Register for <A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A> and start your learning journey today!</P> <P> </P> <P style="font-size: .8em;">* <A href=""https://developer.microsoft.com/offers/30-days-to-learn-it/official-rules#terms-and-conditions" target="_blank" rel="noopener">Terms & conditions</A> apply: one (1) voucher per person every six months</P> <P style="font-size: .8em;"> </P> Thu, 11 Mar 2021 18:44:53 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-new-skills-in-30-days/ba-p/2197517 Cliff_Simpkins 2021-03-11T18:44:53Z Deliver Java Apps Quickly using Custom Connectors in Power Apps https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deliver-java-apps-quickly-using-custom-connectors-in-power-apps/ba-p/2176592 <P><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution. LCAD on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">This month’s webinar is ‘</SPAN><SPAN data-contrast="auto">Deliver Java Apps Quickly using Custom Connectors in Power Apps’</SPAN><SPAN data-contrast="none"> In this blog I will briefly </SPAN><SPAN data-contrast="none">recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">how the app was built with Java on Azure, app deployment, and building the app’s front end and UI with Power Apps.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">What is Low-code application development </SPAN></STRONG><STRONG><SPAN data-contrast="none">on</SPAN></STRONG><STRONG><SPAN data-contrast="none"> Azure</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory. That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none"> However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low. In the past that would require another heavy lift by the development team to rework their previous application iteration. Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector. Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. To learn </SPAN><SPAN data-contrast="none">more,</SPAN><SPAN data-contrast="none"> visit the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD</SPAN><SPAN data-contrast="none"> on Azure page</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">and to walk through the</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">a</SPAN><SPAN data-contrast="none">forementioned </SPAN><SPAN data-contrast="none">scenario</SPAN><SPAN data-contrast="none"> try the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Java on Azure Code</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In this webinar the sample application will be a Spring Boot application, or a Spring application on Azure, </SPAN><SPAN data-contrast="none">that is </SPAN><SPAN data-contrast="none">generated </SPAN><SPAN data-contrast="none">using </SPAN><SPAN data-contrast="none">JHipster</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">and will </SPAN><SPAN data-contrast="none">deploy the app </SPAN><SPAN data-contrast="none">with </SPAN><SPAN data-contrast="none">Azure App</SPAN><SPAN data-contrast="none"> service. The app’s purpose is </SPAN><SPAN data-contrast="none">to catalog products, product descriptions, </SPAN><SPAN data-contrast="none">ratings and image links</SPAN><SPAN data-contrast="none">, in a monolithic app. </SPAN><SPAN data-contrast="none">To learn how to build serverless PowerApps</SPAN><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="none"> please refer to last month’s </SPAN><A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-deep-dive-into-serverless-applications-on-power-apps-and-azure/ba-p/2113430" target="_blank" rel="noopener"><SPAN data-contrast="none">Serverless Low-code application development on Azure</SPAN></A><SPAN data-contrast="auto"> blog for details. </SPAN><SPAN data-contrast="auto">During the development of the </SPAN><SPAN data-contrast="auto">API</SPAN><SPAN data-contrast="auto"> Sandra used H2SQL and in production she used MySQL. </SPAN><SPAN data-contrast="auto">She then add</SPAN><SPAN data-contrast="auto">s</SPAN><SPAN data-contrast="auto"> descriptions, ratings, and image links to the </SPAN><SPAN data-contrast="auto">API</SPAN><SPAN data-contrast="auto"> in </SPAN><SPAN data-contrast="auto">a</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">JDS studio. </SPAN><SPAN data-contrast="auto">Lastly, she applies the API to her GitHub repository</SPAN><SPAN data-contrast="auto"> prior to deploying to Azure App service. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Deploying</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> the</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><STRONG><SPAN data-contrast="auto">S</SPAN></STRONG><STRONG><SPAN data-contrast="auto">ample </SPAN></STRONG><STRONG><SPAN data-contrast="auto">A</SPAN></STRONG><STRONG><SPAN data-contrast="auto">pp</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Sandra leverages the Maven plug-in in JHipste</SPAN><SPAN data-contrast="auto">r</SPAN><SPAN data-contrast="auto"> to deploy the app to Azure App service. </SPAN><SPAN data-contrast="auto">A</SPAN><SPAN data-contrast="auto">fter providing an A</SPAN><SPAN data-contrast="auto">zure resource group name </SPAN><SPAN data-contrast="auto">due to her choice of ‘split and deploy’ in GitHub Actions </SPAN><SPAN data-contrast="auto">she only manually deploy</SPAN><SPAN data-contrast="auto">s</SPAN><SPAN data-contrast="auto"> once, and a</SPAN><SPAN data-contrast="auto">ny new Git push from her master branch will be automatically deployed. </SPAN><SPAN data-contrast="auto">Once the app is successfully deployed it is available at myhispter.azurewebsites.net/V2APIdocs, where she copies the </SPAN><SPAN data-contrast="auto">Swagger API file into a JSON, which will be imported </SPAN><SPAN data-contrast="auto">into</SPAN><SPAN data-contrast="auto"> Power Apps as a custom connector.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Front-end </SPAN></STRONG><STRONG><SPAN data-contrast="auto">D</SPAN></STRONG><STRONG><SPAN data-contrast="auto">evelopment</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The goal of the front-end development is to build a user interface that end users will be satisfied with, to </SPAN><SPAN data-contrast="auto">do so the JSON must be brought into Power Apps as a custom connect</SPAN><SPAN data-contrast="auto">or so end users can access the API. The first step is clearly to import the open API into Power Apps, note that much of this process has been streamlined via the tight integration</SPAN><SPAN data-contrast="auto"> of Azure API management with Power Apps. To learn more about this tighter integration </SPAN><SPAN data-contrast="auto">watch a </SPAN><A href="https://www.youtube.com/watch?v=06CRN18kH1k&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=6" target="_blank" rel="noopener"><SPAN data-contrast="none">demo on integrating APIs via API management into Power Apps</SPAN><SPAN data-contrast="none">.</SPAN></A><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After importing the API, you </SPAN><SPAN data-contrast="auto">must</SPAN><SPAN data-contrast="auto"> create a custom connector,</SPAN><SPAN data-contrast="auto"> and connect that custom connector with the Open API the backend developer built. </SPAN><SPAN data-contrast="auto">After creating the custom connector Dawid used Power Apps logic formula language to collect data into a dataset, creating gallery display via the collected data. Lastly, Dawid will show you the data in a finalized application a</SPAN><SPAN data-contrast="auto">nd walk you through the process of sharing the app with a colleague or making them a co-owner. Lastly, once the app is shared, Dawid walks you through testing the app and soliciting user feedback via the app.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To conclude, professional developers can rapidly build the back and front ends of the application using Java, or any programming language with Power Apps. Fusion development teams, professional developers and citizen developers, can collaborate on apps together, reducing much of the lift for professional developers. Please watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-DeliverJavaAppsQuicklyUsingCustomConnectors.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="auto"> and </SPAN><SPAN data-contrast="auto">complete the </SPAN><A href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbRzDZlq55wCpLjWQ_IU7xv-VURVRFQUdPSTJVTjBOR0RWM0U1VFFSM1pYUS4u" target="_blank" rel="noopener"><SPAN data-contrast="none">survey</SPAN></A><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">so,</SPAN><SPAN data-contrast="auto"> we can improve these blogs and webinars in the future.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Resources</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="6" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Webinar</SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="6" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://info.microsoft.com/ww-Landing-DeliverJavaAppsQuicklyUsingCustomConnectors.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">Deliver Java Apps Quickly</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Low-code application development </SPAN></STRONG><STRONG><SPAN data-contrast="auto">on</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> Azure </SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="2"><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low Code Application Development</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="2"><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code app dev guided tour</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Java on Azure resources </SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://azure.microsoft.com/en-us/develop/java/" target="_blank" rel="noopener"><SPAN data-contrast="none">Java on Azure</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/java-on-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Java on Azure - Learn</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/publish-azure-web-app-with-azure-toolkit-eclipse/" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop Java web app on Azure using Eclipse - Learn </SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="4" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/publish-web-app-with-maven-plugin-for-azure-app-service/" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop Java web app on Azure using Maven - Learn </SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="5" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/deploy-java-containers/" target="_blank" rel="noopener"><SPAN data-contrast="none">Automate Java container deployments with Azure Pipelines - Learn </SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/azure-spring-cloud-workshop/" target="_blank" rel="noopener"><SPAN data-contrast="none">Deploy Spring microservices to Azure - Learn</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Power Apps resources</SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="2"><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure plus Power Apps for pro developers</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/intro-developing-power-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Introduction to developing with Power Platform</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="4" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/use-power-apps-component-framework/" target="_blank" rel="noopener"><SPAN data-contrast="none">Create components with Power Apps Component Framework</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/get-started-cds/" target="_blank" rel="noopener"><SPAN data-contrast="none">Get started using Microsoft Dataverse</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> Fri, 26 Mar 2021 01:01:09 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deliver-java-apps-quickly-using-custom-connectors-in-power-apps/ba-p/2176592 riduncan 2021-03-26T01:01:09Z Announcing Logic Apps Public Preview Refresh https://techcommunity.microsoft.com/t5/azure-developer-community-blog/announcing-logic-apps-public-preview-refresh/ba-p/2180994 <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> <P>We <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-logic-apps-runtime-performance-and-developer-improvements/ba-p/1645335" target="_blank" rel="noopener">announced</A> the public preview of Logic Apps' new runtime, performance and developer improvements in September 2020, and first <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-s-new-in-logic-apps/ba-p/1969149" target="_blank" rel="noopener">public preview refresh</A> in December 2020. Today, we are happy to announce another major update that continue to extend the capability of Logic Apps. You can find the highlights about this release below.</P> <P> </P> <P><STRONG>Quality focused</STRONG></P> <P>We have received tremendous amount of interests from customers in healthcare, insurance, retail and other industries on the new runtime. As the team gears up towards general availability of the new runtime, the top focus of this public preview refresh is quality. The team spent significant amount of time on bug fix, reliability, and supportability improvements, so that you can feel confident using the new runtime for production workload at general availability.</P> <P> </P> <P><STRONG>Cross-platform compatibility</STRONG></P> <P>Inline Code action allows customers to write simple JavaScript code from right within the workflow designer with the ability to reference outputs from previous actions. In this release, Inline Code action is now supported not only on Windows, but also on macOS and Linux. </P> <P> </P> <P><STRONG>Developer productivity</STRONG></P> <P>With the new runtime, customers can author workflows using the visual designer locally from <A href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps" target="_self">VS Code</A>. In this release, we’ve made it even more streamlined by removing designer’s storage dependency. This means you are no longer required to have storage emulator or connection to storage account in Azure to use the visual designer in VS Code.</P> <P> </P> <P>Other improvements to VS Code extension includes the ability to configure webhook hostname so that the callback request can be routed to localhost during testing, and the ability to switch from extension bundle to NuGet-based local project.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screen Shot 2021-03-02 at 11.59.15 PM.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/260428i04DB83552F2401F5/image-size/medium?v=v2&px=400" role="button" title="Screen Shot 2021-03-02 at 11.59.15 PM.png" alt="Screen Shot 2021-03-02 at 11.59.15 PM.png" /></span></P> <P> </P> <P><STRONG>Designer and portal improvements</STRONG></P> <P>New designer features in this release allow you to create parallel branches, drag-and-drop to rearrange actions, and easily delete unwanted actions via right-click menu.</P> <P> </P> <P>In Azure portal, the resource browse experience is combined to show both the multi-tenant/consumption Logic Apps, as well as the single-tenant Logic Apps on Functions runtime. Trigger history page is added to allow easy debugging when the workflow isn’t being triggered as expected.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screen Shot 2021-03-03 at 12.01.02 AM.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/260429i112C2B7DF001C403/image-size/medium?v=v2&px=400" role="button" title="Screen Shot 2021-03-03 at 12.01.02 AM.png" alt="Screen Shot 2021-03-03 at 12.01.02 AM.png" /></span></P> <P> </P> <P><STRONG>Accessibility</STRONG></P> <P>Microsoft is <A href="https://www.microsoft.com/accessibility" target="_self">committed</A> to revolutionizing access to technology for people living with disabilities, and us from the Logic Apps team believe in developing technologies that enable everyone to easily build workflows and integration solutions. In this release, we added keyboard navigation shortcuts to allow intuitive navigation of the graph between actions.</P> <P> </P> <P><STRONG>Learn more</STRONG></P> <P data-unlink="true">Please check out <A href="https://docs.microsoft.com/azure/logic-apps/logic-apps-overview-preview" target="_self">documentations</A> on the new runtime, and tune in to the upcoming <A href="https://www.youtube.com/watch?v=mJo-Lr5rZc0" target="_self">Logic Apps Live</A>, scheduled to premiere on March 4th, 2021 at 9AM pacific time, during which the team will cover the release in more details.</P> <P data-unlink="true"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screen Shot 2021-03-01 at 11.28.15 PM.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/260427i0E39E65AC02B1F64/image-size/medium?v=v2&px=400" role="button" title="Screen Shot 2021-03-01 at 11.28.15 PM.png" alt="Screen Shot 2021-03-01 at 11.28.15 PM.png" /></span></P> <P> </P> <P><SPAN>To get started, download the </SPAN><A href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps" target="_self" rel="noopener noreferrer">VS Code extension</A><SPAN> and create a local project, or create a new resource from the </SPAN><A href="https://portal.azure.com/" target="_self" rel="nofollow noopener noreferrer">Azure Portal</A><SPAN>. You can submit your feedback </SPAN><A href="http://aka.ms/lafeedback" target="_self" rel="noopener noreferrer">here</A><SPAN>.</SPAN></P> <P> </P> <P> </P> <P><SPAN>Derek, on behalf of the Logic Apps team</SPAN></P> </DIV> Fri, 05 Mar 2021 00:00:37 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/announcing-logic-apps-public-preview-refresh/ba-p/2180994 derek1ee 2021-03-05T00:00:37Z Introducing Microsoft Power Fx: the low-code programming language https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-microsoft-power-fx-the-low-code-programming-language/ba-p/2169705 <P><SPAN data-contrast="auto">Today the Power Platform introduces its </SPAN><SPAN data-contrast="auto">formula language for low-code</SPAN><SPAN data-contrast="auto">, </SPAN><SPAN data-contrast="auto">Microsoft Power Fx</SPAN><SPAN data-contrast="auto">. This language originates from </SPAN><SPAN data-contrast="auto">Microsoft Excel and</SPAN><SPAN data-contrast="auto"> is already the foundation of the </SPAN><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Power Apps</SPAN></A><SPAN data-contrast="auto"> canvas. You may </SPAN><SPAN data-contrast="auto">wonder</SPAN><SPAN data-contrast="auto">, why does a low-code platform need a programming language? </SPAN><SPAN data-contrast="none">The truth is, point-and-click tools are great for quickly assembling experiences and workflows, but many apps need a layer of logic that goes beyond what is practical to drag and drop</SPAN><SPAN data-contrast="none">, for example:</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><I><SPAN data-contrast="none">Show a list of customers who signed up in the last 7 days within 15 miles of this location. </SPAN></I><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><I><SPAN data-contrast="none">Highlight the newest entries in green. </SPAN></I><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><I><SPAN data-contrast="none">When a user clicks for more details, if the record has outstanding action items associated with it, pop those to the top of the screen.</SPAN></I><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></LI> </UL> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614365930920.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/258488i54F16EFBD10B8E65/image-size/medium?v=v2&px=400" role="button" title="riduncan_0-1614365930920.png" alt="riduncan_0-1614365930920.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559731":720,"335559739":160,"335559740":259}"> </SPAN><SPAN data-contrast="auto">C</SPAN><SPAN data-contrast="auto">ustom logic traditionally needed to solve such problems is where low-code platforms have “hit a cliff” </SPAN><SPAN data-contrast="auto">requiring </SPAN><SPAN data-contrast="none">traditional </SPAN><SPAN data-contrast="none">code, whe</SPAN><SPAN data-contrast="none">re</SPAN><SPAN data-contrast="none"> the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none"> solution has stepped in</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-contrast="none">Power Fx </SPAN><SPAN data-contrast="none">enables 200+ million people globally who </SPAN><SPAN data-contrast="none">build</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">with </SPAN><SPAN data-contrast="none">Microsoft Excel </SPAN><SPAN data-contrast="none">syntax</SPAN><SPAN data-contrast="none"> to build custom logi</SPAN><SPAN data-contrast="none">c</SPAN><SPAN data-contrast="none">, reducing much of the “cliff</SPAN><SPAN data-contrast="none">”</SPAN><SPAN data-contrast="none">.</SPAN><SPAN data-contrast="none"> However, this </SPAN><SPAN data-contrast="none">does not</SPAN><SPAN data-contrast="none"> reduce the integration capabilities of Azure and Power </SPAN><SPAN data-contrast="none">Apps but</SPAN><SPAN data-contrast="none"> enhances them</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Developers will cut their development time and cost by using Power Fx where the complexities of async coding are taken care of, </SPAN><SPAN data-contrast="auto">Dataverse, Power Apps’ underlying data platform, e</SPAN><SPAN data-contrast="auto">ntities and data types are first class objects, and guard rails prevent run away code and other common pitfalls. </SPAN><SPAN data-contrast="auto">Additionally, developers can </SPAN><SPAN data-contrast="auto">use </SPAN><SPAN data-contrast="auto">Power Fx with </SPAN><SPAN data-contrast="auto">tools they are already familiar with such as </SPAN><SPAN data-contrast="auto">VS (Visual Studio)</SPAN><SPAN data-contrast="auto"> Code, GitHub, Azure DevOps, and their own build scripts and tools. </SPAN><SPAN data-contrast="auto">Power Fx w</SPAN><SPAN data-contrast="auto">orks with “pro-code” components created in JavaScript, C#, or other professional languages.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Read the entire Power Fx announcement </SPAN><A href="https://powerapps.microsoft.com/en-us/blog/what-is-microsoft-power-fx/" target="_blank">here.</A></P> Fri, 05 Mar 2021 00:00:42 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-microsoft-power-fx-the-low-code-programming-language/ba-p/2169705 riduncan 2021-03-05T00:00:42Z Plan your Microsoft Azure experience at Microsoft Ignite https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite/ba-p/2156674 <P>Microsoft Ignite, our free digital event, starts next week and runs from March 2-4, 2021. We thought you might be interested to learn ways you can plan to experience the power of <SPAN data-contrast="none">Microsoft </SPAN><SPAN data-contrast="none">Azure and connect with your worldwide data, infrastructure, applications, and hybrid communities like never before. Attendees will learn about new innovations, speak with Microsoft experts from around the globe</SPAN><SPAN data-contrast="none">, and </SPAN><SPAN data-contrast="none">continue your technical </SPAN><SPAN data-contrast="none">learning</SPAN><SPAN data-contrast="none"> journey</SPAN><SPAN data-contrast="none">. </SPAN></P> <P> </P> <P><A href="https://register.ignite.microsoft.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Register</SPAN></A><SPAN data-contrast="none"> to gain full access to all Microsoft Ignite has to offer–it’s easy and at no-cost to you.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Create the perfect event schedule</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="none">Explore the session catalog </SPAN><SPAN data-contrast="none">to</SPAN><SPAN data-contrast="none"> find expert speakers, </SPAN><SPAN data-contrast="none">interactive sessions</SPAN><SPAN data-contrast="none">, and more. </SPAN><SPAN data-contrast="none">After registering, </SPAN><SPAN data-contrast="none">get </SPAN><SPAN data-contrast="none">s</SPAN><SPAN data-contrast="none">tart</SPAN><SPAN data-contrast="none">ed on</SPAN><SPAN data-contrast="none"> your journey at </SPAN><A href="https://myignite.microsoft.com/sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">myignite.microsoft.co</SPAN><SPAN data-contrast="none">m/sessions</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Below are </SPAN><SPAN data-contrast="none">seven featured </SPAN><SPAN data-contrast="none">session</SPAN><SPAN data-contrast="none">s </SPAN><SPAN data-contrast="none">on Microsoft Azure </SPAN><SPAN data-contrast="none">you can’t miss:</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/44be5449-eec6-4d63-8732-716147341d56?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS174: Go Limitless: with Azure Data & </SPAN><SPAN data-contrast="none">AI</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/9a68aef7-867e-441d-87bd-598923d7c5fc?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS175: Empowering every developer to innovate with Microsoft Azure</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/1b57402f-1284-422f-b45d-010a8d0eef4a?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS176: Innovate across Hybrid and Multicloud with Azure Arc</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/8c615c6a-64ef-4c40-8ede-7eed49bc92bc?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS177: Latest Azure innovation for Windows Server and SQL Server</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/48e213fc-37e7-4203-b507-59c0cb74b876?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS178: Introducing the future of mixed reality</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="6" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/80b8f59f-7b3b-41a1-ae79-7884e5eca5ba?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS179: New innovations to bring AI to the edge</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/df53b87d-ef87-45ec-b4e4-11f29f7fa755?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS180: What's new with Microsoft Azure infrastructure</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><STRONG>Follow #MSIgnite </STRONG></P> <P><SPAN data-contrast="none">Explore the latest event news, trending topics, and share your point of view in real time</SPAN><SPAN data-contrast="none"> with </SPAN><SPAN data-contrast="none">your</SPAN><SPAN data-contrast="none"> communit</SPAN><SPAN data-contrast="none">y</SPAN><SPAN data-contrast="none">.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Join us on Twitter and LinkedIn by using </SPAN><SPAN data-contrast="none">#MSIgnite.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><A href="https://twitter.com/MS_Ignite" target="_blank" rel="noopener"><SPAN data-contrast="none">Join today ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>Connection Zone </STRONG></P> <P><SPAN data-contrast="none">Only at #MSIgnite will you meet the engineers and partners who build and maintain our tools and get the answers to your toughest technical questions. Register for an Ask the Expert session at #MSIgnite. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://myignite.microsoft.com/community-connect" target="_blank" rel="noopener"><SPAN data-contrast="none">Connect today ></SPAN></A><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>Learning Zone </STRONG></P> <P><SPAN data-contrast="none">The Learning Zone is the center for training, development, and certification with Microsoft. Whatever your style of learning happens to be, </SPAN><SPAN data-contrast="none">you can find content and interactive opportunities to boost and diversify your </SPAN><SPAN data-contrast="none">cloud skills</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://myignite.microsoft.com/learning-zone" target="_blank" rel="noopener"><SPAN data-contrast="none">Explore today ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>One-on-one consultation </STRONG></P> <P><SPAN data-contrast="none">Schedule your 45-minute, one-on-one consultation with </SPAN><SPAN data-contrast="none">Microsoft </SPAN><SPAN data-contrast="none">Azure </SPAN><SPAN data-contrast="none">experts in </SPAN><SPAN data-contrast="none">infrastructure, data </SPAN><SPAN data-contrast="none">and </SPAN><SPAN data-contrast="none">AI, and application</SPAN><SPAN data-contrast="none"> development.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://myignite.microsoft.com/app-consult" target="_blank" rel="noopener"><SPAN data-contrast="none">Schedule today ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>Continue your learning journey </STRONG></P> <P><SPAN data-contrast="none">Find your way to deeper content, training options, communities</SPAN><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="none"> and certification details across all Microsoft cloud solutions from one place.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://aka.ms/learnatignite" target="_blank" rel="noopener"><SPAN data-contrast="none">Start exploring ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> Wed, 24 Feb 2021 18:32:26 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite/ba-p/2156674 Mark Winters 2021-02-24T18:32:26Z The Azure Security Architect Map https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091 <P>Hi,</P> <P> </P> <P>Recently, I built the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Solution-Architect-Map/ba-p/689700" target="_self">Azure <STRONG>Solution</STRONG> Architect Map</A> aimed at helping Architects finding their way in Azure. Given the unexpected success and the very positive feedback I received, I decided to come up with other maps, namely the Azure <STRONG>Security </STRONG>Architect Map, the Azure <STRONG>Infrastructure</STRONG> Architect Map and the Azure <STRONG>Application</STRONG> Architect Map.</P> <P> </P> <P>Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><STRONG><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></STRONG> - This map</LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P><BR />The purpose of the Solution Architect map is to give a high-level view and quick insights about what is available and how to choose between the different services according to some functional needs. <BR />It covers a few key areas, mostly about putting in place the foundations of an Azure Platform, and cannot go into the details because this would make the map very indigestible.</P> <P> </P> <P>Today I come with the Azure Security Architect Map:</P> <P> </P> <P><A href="https://stephaneeyskens.files.wordpress.com/2019/12/securitymap.png" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="map.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/162829iB5D0F42F300842C8/image-size/large?v=v2&px=999" role="button" title="securitymap.png" alt="securitymap.png" /></span></A></P> <P> </P> <P>which focuses on security only and goes much deeper into that key area. It is by no means the holy grail but it should help you take informed decisions on how you plan to use and deploy services and how you will govern your Azure workloads. I bring business drivers such as TTM, cost optimization and true elasticity into the equation to highlight the consequences of choosing an option over another.</P> <P> </P> <P>The map focuses on the following areas:</P> <UL> <LI>Network Layer</LI> <LI>Identity Layer</LI> <LI>Application Service Layer</LI> <LI>Application Data</LI> <LI>Security Posture</LI> <LI>Keys, Certificates and Secrets Management as well as Encryption capabilities</LI> <LI>MDM & MAM</LI> </UL> <P><STRONG><FONT size="3">How to read this map?</FONT></STRONG></P> <P> </P> <P>Whenever you see the attachment icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="attachicon.png" style="width: 22px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120128i004B5A4431671EB0/image-size/large?v=v2&px=999" role="button" title="attachicon.png" alt="attachicon.png" /></span>, it means that I have attached an explanation on a given rationale or service. If you see a (*) next to a node, it is kind of a must read information. So for instance, in the following screenshot:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vnet.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120129i449A2BE58FE83622/image-size/large?v=v2&px=999" role="button" title="vnet.png" alt="vnet.png" /></span></P> <P> </P> <P>I want to catch your attention on the following:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="attention.png" style="width: 458px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120315iAF01654DFE885992/image-dimensions/458x115?v=v2" width="458" height="115" role="button" title="attention.png" alt="attention.png" /></span></P> <P>The rationales behind certain routes are based on my own experience and do not represent the only option, but they should be considered as advisory only. So the idea is to review these maps frequently since the above information is likely to change over the coming months and I'll simply keep adding notes or remove them when it does not make sense anymore.</P> <P> </P> <P>The link icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="link.png" style="width: 31px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120317i038D48CCA48EF590/image-size/small?v=v2&px=200" role="button" title="link.png" alt="link.png" /></span>is a pointer to the corresponding Microsoft documentation.</P> <P> </P> <P>With this tool, any Security Architect (Cloud or not) will quickly grasp the security landscape of Azure. </P> <P> </P> <P>Here is the pointer to the map:</P> <P>Update (02/2021): the online MindMapMaker tool deletes maps that are older than 1 year....A pointer to the last version is available in the below table.</P> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v1.0 (06/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mmc00bf17b40454ecda863046602b7be3e" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mmc00bf17b40454ecda863046602b7be3e</A></STRIKE></TD> </TR> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v1.1 (12/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mm2247a15d373d4e97bf589772950af0ff" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm2247a15d373d4e97bf589772950af0ff</A></STRIKE></TD> </TR> <TR> <TD style="width: 50%;">Last MindMapMaker map</TD> <TD style="width: 50%;"> <P><A href="https://app.mindmapmaker.org/#m:mmd329ac370bf141948f565b79c40b0ff6" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mmd329ac370bf141948f565b79c40b0ff6</A></P> </TD> </TR> <TR> <TD style="width: 50%;">Last PDF map</TD> <TD style="width: 50%;"> <P><A href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter07/maps/Security%20Architecture.pdf" target="_blank" rel="noopener">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter07/maps/Security%20Architecture.pdf</A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P>Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><STRONG><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></STRONG> - This map</LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P> </P> Tue, 23 Feb 2021 09:46:20 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091 stephaneey 2021-02-23T09:46:20Z The Cloud-native Azure Application Architect Map https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242 <P>Hi,</P> <P> </P> <P>Recently, I built the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Solution-Architect-Map/ba-p/689700" target="_self">Azure <STRONG>Solution</STRONG> Architect Map</A> , the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Security-Architect-Map/ba-p/714091" target="_self">Azure <STRONG>Security</STRONG> Architect Map</A> and the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Infrastructure-Architect-Map/ba-p/766268" target="_self">Azure Infrastructure Architect Map</A> aimed at helping Architects finding their way in Azure. Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><STRONG><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></STRONG> - This map</LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P> </P> <P>I'm now coming with the next map in this series, namely: the Cloud-native Azure Application Architect Map.</P> <P><BR />As usual, this map is by no means the holy grail and is just there to highlight some good fit between Azure Services and Design Patterns. This map is certainly subject to controversy as they are thousands of ways to design and develop and application. My goal is only to highlight some possibilities. </P> <P> </P> <P>As usual, here is a screenshot of the map:</P> <P> </P> <P><A href="https://stephaneeyskens.files.wordpress.com/2019/12/cnative.png" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="map.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/128490i338079449BEA0B23/image-size/large?v=v2&px=999" role="button" title="The Azure Application Architect Map.png" alt="The Azure Application Architect Map.png" /></span></A></P> <P> </P> <P>The map focuses on the following areas:</P> <UL> <LI>Data & Big Data</LI> <LI>Common Design Patterns: SAGA, Circuit Breaker, Event-driven Architecture, etc.</LI> <LI>Domain-driven Design & Microservices: yes I clubbed them together :)</img></LI> <LI>Artificial Intelligence: NLP, Supervised & Unsupervised ML etc.</LI> <LI>Miscellaneous: things that come back regularly when developing applications such as real-time HTTP, search, job scheduling etc. </LI> </UL> <P><STRONG><FONT size="3">How to read this map?</FONT></STRONG></P> <P> </P> <P>Whenever you see the attachment icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="attachicon.png" style="width: 22px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120128i004B5A4431671EB0/image-size/large?v=v2&px=999" role="button" title="attachicon.png" alt="attachicon.png" /></span>, it means that I have attached an explanation on a given rationale or service. If you see a (*) next to a node, it is kind of a must read information. So for instance, in the following screenshot:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="dddcqrs.png" style="width: 439px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/127580i76912648F0FA13ED/image-size/large?v=v2&px=999" role="button" title="dddcqrs.png" alt="dddcqrs.png" /></span></P> <P> </P> <P>I want to catch your attention on why I make an association between DDD and Microservices:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="dddcqrsexplained.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/127581i95B7FA9354C040F8/image-size/large?v=v2&px=999" role="button" title="dddcqrsexplained.png" alt="dddcqrsexplained.png" /></span></P> <P>as well as why I make an association between CQRS and DDD:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cqrsdddexplained.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/127582i06C4646B502D6531/image-size/large?v=v2&px=999" role="button" title="cqrsdddexplained.png" alt="cqrsdddexplained.png" /></span></P> <P>You might of course disagree with this but at least, you understand my rationale.</P> <P>The link icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="link.png" style="width: 31px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120317i038D48CCA48EF590/image-size/small?v=v2&px=200" role="button" title="link.png" alt="link.png" /></span>is a pointer to the corresponding Microsoft documentation.</P> <P> </P> <P>Note that I haven't dived into AKS or Service Fabric since this guys would deserve a dedicated map and are not Azure services like others, they are a universe by themselves.</P> <P> </P> <P>With this tool, any Cloud-native Application Architect should quickly grasp the application landscape of Azure. </P> <P> </P> <P>Update: the online MindMapMaker tool deletes maps that are older than a year, therefore, just visit the last version.</P> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v1.0 & v.1 (09/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mm5e724c4dc8324504ab58c6d9b0f708b8" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm5e724c4dc8324504ab58c6d9b0f708b8</A></STRIKE></TD> </TR> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v 1.2 (12/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mm41003e37953d47e0841ae28cf0079f0e" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm41003e37953d47e0841ae28cf0079f0e</A></STRIKE></TD> </TR> <TR> <TD height="56px" style="width: 50%;">Last version MindMapMaker</TD> <TD height="56px" style="width: 50%;"> <P><A href="https://app.mindmapmaker.org/#m:mm87db50f890484619b2429b32c3545916" target="_blank">https://app.mindmapmaker.org/#m:mm87db50f890484619b2429b32c3545916</A></P> </TD> </TR> <TR> <TD height="29px" style="width: 50%;">Last version PDF</TD> <TD height="29px" style="width: 50%;"> <P><A href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter05/maps/Azure%20Application%20Architecture.pdf" target="_blank">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter05/maps/Azure%20Application%20Architecture.pdf</A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P>Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><STRONG><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></STRONG> - This map</LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P> </P> <P> </P> Sun, 21 Feb 2021 17:30:06 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242 stephaneey 2021-02-21T17:30:06Z A Visual Introduction To Azure Fundamentals https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-visual-introduction-to-azure-fundamentals/ba-p/2132410 <P><SPAN style="font-family: inherit; font-size: xx-large;">A Visual Introduction To Azure Fundamentals<BR /></SPAN></P> <P><EM>This is a summary of an article that I <A href="https://aka.ms/visual-azure-acg" target="_blank" rel="noopener">just published in A Cloud Guru</A> which goes into more details on the choice of the "truck" (delivery) metaphor and resources to prep for AZ-900. Don't forget to check that out!</EM></P> <P> </P> <P><FONT size="5">Setting The Stage</FONT></P> <P>The start of a new year is great to kickstart learning resolutions - and aiming for certification (like AZ-900) is a great goal to have!! But sticking to that resolution requires a study plan (for accountability) and study resources (that suit your learning style). Read the <A href="https://aka.ms/visual-azure-acg" target="_self">A Cloud Guru article</A> for some thoughts on how you can set yourself up for success, including links to communities and study guides that can help.</P> <P> </P> <P>Today though I want to focus on the learning styles we adopt - and in particular, on our <EM>visual learning</EM> ability. <A href="https://www.inc.com/molly-reynolds/how-to-spot-visual-auditory-and-kinesthetic-learni.html" target="_blank" rel="noopener">65% of us are visual learners</A> -- which means we absorb information ("see the big picture") more quickly from images than from text, and can make connections more quickly to relevant ideas ("connect the dots") by detecting or reinforcing patterns that we are innately familiar with.</P> <P> </P> <P>In reality, we all learn by mixing several styles - read/write (articles), kinesthetic (tutorials), auditory (lectures) and visual (imagery) -- so as you study for certification, it's worth exploring different resources to see which ones give you the best approach to not just understanding the topic, but retaining that knowledge and recalling it effectively later.</P> <P> </P> <P><FONT size="5">Azure Fundamentals: A Sketchnote!</FONT></P> <P>In 2021, I started the <A href="https://azure.cloud-skills.dev" target="_blank" rel="noopener">VisualAzure</A> project, and its accompanying <A href="https://cloud-skills.dev" target="_blank" rel="noopener">Cloud Skills: Sketchnotes</A> repository, in an effort to create useful learning resources for visual learners that could complement relevant <A href="https://docs.microsoft.com/?WT.mc_id=mobile-12359-ninarasi" target="_blank" rel="noopener">Microsoft Docs</A> and <A href="https://learn.microsoft.com/?WT.mc_id=mobile-12359-ninarasi" target="_self">Microsoft Learn</A> content. My first target -- the <A href="https://docs.microsoft.com/en-us/learn/certifications/azure-fundamentals?WT.mc_id=mobile-12359-ninarasi" target="_self">Azure Fundamentals learning paths and AZ-900.</A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Cloud_Guru.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/254744iE7FBA79C8717E50F/image-size/large?v=v2&px=999" role="button" title="Cloud_Guru.png" alt="Cloud_Guru.png" /></span></P> <P> </P> <P> </P> <P>Here is the sketchnote visualizing the <A href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-fundamentals/?WT.mc_id=mobile-12359-ninarasi" target="_blank" rel="noopener">Introduction To Azure Fundamentals</A> unit of the common module that anchors all six learning paths. The sketchnote uses two key visual storytelling tactics:</P> <UL> <LI><STRONG>A visual vocabulary</STRONG> -- so you can quickly scan the sheet at a glance, spot various "sections" and navigate the information "flow" using visual cues like icons, arrows and banners.</LI> <LI><STRONG>A visual metaphor </STRONG>-- in this case, the definition of cloud computing as "the <EM>delivery</EM> of computing services over the internet" inspired me to use a transport (delivery truck) metaphor, and use related analogies to explain other concepts tied to cloud computing.</LI> </UL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Azure-2-ACloudGuru-Fundamentals-Small.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/254745i05D151493044D40E/image-size/large?v=v2&px=999" role="button" title="Azure-2-ACloudGuru-Fundamentals-Small.png" alt="Azure-2-ACloudGuru-Fundamentals-Small.png" /></span></P> <P> </P> <P>I hope you find this not just interesting, but also informative and useful, for your Azure learning and certification journeys. I encourage you to check out these resources to learn more:</P> <UL> <LI>Read <A href="https://aka.ms/visual-azure-acg" target="_blank" rel="noopener">this accompanying article at A Cloud Guru!</A> to dive into metaphor and analogies.</LI> <LI>Check out <A href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-fundamentals/?WT.mc_id=mobile-12359-ninarasi" target="_blank" rel="noopener">the relevant MS Learn unit/module</A> and see if this helps your understanding.</LI> <LI>Download a higher-quality image from <A href="https://cloud-skills.dev/" target="_blank" rel="noopener">this site</A>, review it after a few weeks to test your recall.</LI> </UL> <P> </P> <P>Last but not least - if you have feedback for improving these sketchnotes, or want to request one for a specific Microsoft Learn (module) or Docs (topic) - leave me a request or share your comments via this <A href="https://github.com/SketchTheDocs/visual-azure/discussions" target="_blank" rel="noopener">Discussion Forum!</A> And if you found this useful and are a Redditor, I'd <A href="https://www.reddit.com/r/AZURE/comments/liebot/a_visual_guide_to_azure_fundamentals_a_cloud_guru/" target="_blank" rel="noopener">love an upvote</A> :smiling_face_with_smiling_eyes:</img><BR /><BR /></P> <P>Happy learning!</P> Sun, 14 Feb 2021 15:40:46 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-visual-introduction-to-azure-fundamentals/ba-p/2132410 nityan 2021-02-14T15:40:46Z A Deep Dive into Serverless Applications on Power Apps and Azure https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-deep-dive-into-serverless-applications-on-power-apps-and-azure/ba-p/2113430 <H2><STRONG><SPAN data-contrast="auto">Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘A Deep Dive </SPAN><SPAN data-contrast="none">into</SPAN><SPAN data-contrast="none"> Serverless</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="auto">Applications on Power Apps and Azur</SPAN><SPAN data-contrast="auto">e.</SPAN><SPAN data-contrast="auto">’</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In this blog I will </SPAN><SPAN data-contrast="none">briefly </SPAN><SPAN data-contrast="none">recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development</SPAN><SPAN data-contrast="none"> on Azure</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">provide </SPAN><SPAN data-contrast="none">an overview of serverless, why to build a serverless Power App, and what to look forward to in the webinar’s demos.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <H2><STRONG><SPAN data-contrast="none">What is </SPAN></STRONG><STRONG><SPAN data-contrast="none">Low-code application development on Azure</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614964504187.png" style="width: 1395px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261234iAE4D8B9F49A1768D/image-dimensions/1395x784?v=v2" width="1395" height="784" role="button" title="riduncan_0-1614964504187.png" alt="riduncan_0-1614964504187.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> In the past that would require another heavy lift by the development team to rework their previous application iteration. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. </SPAN></P> <P> </P> <P><SPAN data-contrast="none"><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">To learn </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">more,</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399"> visit the </SPAN></SPAN><A class="Hyperlink BCX8 SCXW12267399" href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399" data-ccp-charstyle="Hyperlink">LCAD</SPAN></SPAN><SPAN class="TextRun Underlined BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399" data-ccp-charstyle="Hyperlink"> on Azure page</SPAN></SPAN></A><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">, </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">and to walk through the</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399"> </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">a</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">forementioned </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">scenario</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399"> try the </SPAN></SPAN><A class="Hyperlink BCX8 SCXW12267399" href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399" data-ccp-charstyle="Hyperlink">LCAD on Azure guided tour</SPAN></SPAN></A><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">.</SPAN></SPAN><SPAN class="EOP BCX8 SCXW12267399" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614961772841.jpeg" style="width: 1397px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261222i2B2105E0958B3158/image-dimensions/1397x787?v=v2" width="1397" height="787" role="button" title="riduncan_0-1614961772841.jpeg" alt="riduncan_0-1614961772841.jpeg" /></span></P> <P> </P> <H2><STRONG><SPAN data-contrast="none">Serverless Applications</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">You may be wondering what a serverless application</SPAN><SPAN data-contrast="none"> is?</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Serverless is a cloud computing execution model where the cloud provider dynamically manages the allocation and provisioning of servers. A serverless application runs in stateless compute containers that are event-triggered, ephemeral, and fully managed by the cloud provider.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> In turn this model greatly benefits the developer and team by reducing th</SPAN><SPAN data-contrast="none">eir workload by </SPAN><SPAN data-contrast="none">reducing the need</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">to manage servers, and this model is much cheaper because teams don’t incur the hardware and associated costs. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">A logical next question is “</SPAN><SPAN data-contrast="none">in what scenario(s) do I go serverless?” </SPAN></P> <P> </P> <P><SPAN data-contrast="none">You can choose it when you have asynchronous</SPAN><SPAN data-contrast="none"> and concurrent tasks to be executed, when you have infrequent requests and spiky traffic</SPAN><SPAN data-contrast="none"> where you don’t have a dependency on latency. Also, when you’re looking to quickly iterate your development, build MVPs, change your code or change business requirements to</SPAN><SPAN data-contrast="none"> immediately deploy that code. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">You’re now convinced of serverless code’s benefits, </SPAN><SPAN data-contrast="none">but </SPAN><SPAN data-contrast="none">how do you get started? </SPAN></P> <P> </P> <P><SPAN data-contrast="none">At </SPAN><SPAN data-contrast="none">the core are cloud functions th</SPAN><SPAN data-contrast="none">at</SPAN><SPAN data-contrast="none"> enable </SPAN><SPAN data-contrast="none">you </SPAN><SPAN data-contrast="none">to write code in </SPAN><SPAN data-contrast="none">containers</SPAN><SPAN data-contrast="none">. I</SPAN><SPAN data-contrast="none">n reaction to an event execution can be triggered by any of the managed services or any custom</SPAN><SPAN data-contrast="none"> sources you might be defining that are important for your application.</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due</SPAN><SPAN data-contrast="none"> to </SPAN><A href="https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview?tabs=csharp" target="_blank" rel="noopener"><SPAN data-contrast="none">durable functions</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">you</SPAN><SPAN data-contrast="none"> can write stateful functions in a serverless compute environment. Lastly, serverless c</SPAN><SPAN data-contrast="none">ode is event driven, run</SPAN><SPAN data-contrast="none">ning </SPAN><SPAN data-contrast="none">in response to specific triggers which can be a HTTP or a blob trigger when running code in re</SPAN><SPAN data-contrast="none">sponse to a file being uploaded to a storage account number.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <H2><STRONG><SPAN data-contrast="none">Serverless Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">Building serverless applications on Azure sound great by themselves, why would you bother to build your using Microsoft Power Apps?</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Building business applications quickly is not easy when </SPAN><SPAN data-contrast="none">utilizing</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">several</SPAN><SPAN data-contrast="none"> different frameworks, hosting options, and complex integrations between systems. Leveraging serverless technologies (Azure Functions and Logic Apps) can </SPAN><SPAN data-contrast="none">provide</SPAN><SPAN data-contrast="none"> the building blocks for </SPAN><SPAN data-contrast="none">APIs</SPAN><SPAN data-contrast="none"> to connect to custom backends, services, or a Data Model (</SPAN><SPAN data-contrast="none">Dataverse</SPAN><SPAN data-contrast="none">) that stores data across many applications. </SPAN></P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=etVdXkGAiRc&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=11" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/etVdXkGAiRc/hqdefault.jpg" external="url"></LI-VIDEO></P> <P><SPAN data-contrast="none">Leverage these APIs to deeply integrate with PowerApps or </SPAN><SPAN data-contrast="none">Power Automate</SPAN><SPAN data-contrast="none"> and extend the data that is most critical to business users with apps that are quickly built, managed, and distributed.</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Moreover, with the development of ‘Fusion Development’ teams a term coined by analysts, developers can build back-end serverless APIs and import them via </SPAN><A href="https://powerapps.microsoft.com/en-us/blog/azure-api-management-connector-on-the-power-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure API management directly into </SPAN><SPAN data-contrast="none">Microsoft </SPAN><SPAN data-contrast="none">Power Apps</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">as custom connectors.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">‘Citizen Developers’ or those who aren’t professional developers, can </SPAN><SPAN data-contrast="none">leverage </SPAN><SPAN data-contrast="none">these APIs </SPAN><SPAN data-contrast="none">in their Power App, reducing the overall work of the developer, by not having to build front-end code.</SPAN><SPAN data-contrast="none"> Thus, piling on the time and resources saved by building serverless </SPAN><SPAN data-contrast="none">applications.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <H2><STRONG><SPAN data-contrast="auto">What to expect in the webinar?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">Simona will cover first build a web API that generates jokes, throughout this process she will test and debug her APIs. Afterward publishing the API to </SPAN><SPAN data-contrast="none">which is available to test at aka.</SPAN><SPAN data-contrast="none">ms</SPAN><SPAN data-contrast="none">/joke</SPAN><SPAN data-contrast="none"> which generates jokes using random words. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Lastly, she exports the API to </SPAN><SPAN data-contrast="none">Power Apps via the Azure portal and challenges the viewers to extend her app with Power Automate AI chatbots that send jokes as text messages.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=o8XnPISgHqQ&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=9" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/o8XnPISgHqQ/hqdefault.jpg" external="url"></LI-VIDEO></P> <H2><STRONG><SPAN data-contrast="none">Summary</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">Make sure to tune into </SPAN><SPAN data-contrast="none">the <A href="https://info.microsoft.com/ww-Landing-ADeepDiveintoServerlessApplications.html?LCID=EN-US" target="_self">webinar</A> on February 25</SPAN><SPAN data-contrast="none">th</SPAN><SPAN data-contrast="none"> to learn more about serverless APIs and how to export them into your Power Apps. Moreover, there will be a Low-code application development on Azure ‘Learn Live’ </SPAN><SPAN data-contrast="none">session during Ignite, </SPAN><SPAN data-contrast="none">the data loss prevention and new governance policies for Power Apps at Ignite, and </SPAN><SPAN data-contrast="none">an SAP on Azure </SPAN><SPAN data-contrast="none">Power Apps</SPAN><SPAN data-contrast="none"> webinar in March</SPAN><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Resources</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG>Webinar Registration Link</STRONG></P> <P><STRONG><A href="https://info.microsoft.com/ww-Landing-ADeepDiveintoServerlessApplications.html?LCID=EN-US" target="_blank" rel="noopener">Serverless Applications | Microsoft Power Apps</A></STRONG></P> <P><STRONG><SPAN data-contrast="auto">Low Code Application Development </SPAN></STRONG><STRONG><SPAN data-contrast="auto">on</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> Azure</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure plus Power Apps for pro developers</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://www.youtube.com/playlist?list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM" target="_blank" rel="noopener"><SPAN data-contrast="none">Low Code Application Development on Azure - YouTube</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Power Apps x Azure documentation</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/powerapps/developer/data-platform/azure-integration" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure integration document</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://powerapps.microsoft.com/en-us/blog/azure-api-management-connector-on-the-power-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure API Management integration announcement</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/azure/api-management/export-api-power-platform" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure API Management integration documentation</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Serverless documentation</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs" target="_blank" rel="noopener"><SPAN data-contrast="none">Compare serverless options</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/choose-azure-service-to-integrate-and-automate-business-processes/" target="_blank" rel="noopener"><SPAN data-contrast="none">Compare serverless options module</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Functions documentation</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/services/functions/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Functions website</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> Fri, 05 Mar 2021 17:22:14 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-deep-dive-into-serverless-applications-on-power-apps-and-azure/ba-p/2113430 riduncan 2021-03-05T17:22:14Z Creating a JWT Validation Web App https://techcommunity.microsoft.com/t5/azure-developer-community-blog/creating-a-jwt-validation-web-app/ba-p/2109450 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JWT.png" style="width: 401px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/251081i4C16DA40C0BF968F/image-dimensions/401x217?v=v2" width="401" height="217" role="button" title="JWT.png" alt="JWT.png" /></span></P><P> </P><P>If you have been doing any OAuth and/or Open ID Connect troubleshooting in recent years it's very likely you've run across <A href="https://jwt.io" target="_blank" rel="noopener">https://jwt.io</A>, or in the Microsoft world <A href="https://jwt.ms" target="_blank" rel="noopener">https://jwt.ms</A>. Great tools, but primarily JWT parsing tools rather than JWT validation tools.</P><P> </P><P>Yes, jwt.io allows you to upload your keys in the UI, but there are a lot of scenarios that doesn't work for.</P><P> </P><P>Let's rewind a step or two here first though. Last year I showed how you could create your own faux tokens. That is; the tokens were real enough, but they mimicked actual tokens as they would look if issued by Azure AD and Azure AD B2C without actually being signed by Microsoft's keys. If you pasted the result into jwt.ms it would look like a real token.</P><P> </P><P>Identity is a large topic, but the two central concepts are "who are you" (authentication) and "what are you allowed to do" (authorization). If your approach in web app or api is to accept any old token and say "this looks good" you might run into trouble.</P><P> </P><P>Which is why I wanted to show how to build a web app that will attempt to validate the token in addition to parsing it. This is based on supplying a metadata url to retrieve signing keys, etc. If you don't have this the app will just parse the token and check against the attributes you supply (issuer, audience).</P><P> </P><P>The code for this post can be found here:</P><P><A title="GitHub" href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor_jwt_validator_dotnet_core" target="_blank" rel="noopener">https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor_jwt_validator_dotnet_core</A> </P><P> </P><P>In the real world i don't actually recommend you to do all these steps manually. There are libraries that will handle most of these things for you like MSAL on the client side of Identity.Web on the backend side. It is however always useful to dig a little deeper to gain an understanding of how it works behind the scenes.</P><P> </P><P>There are third party libraries available for token validation that support a large range of algorithms and formats, but to keep it simple I'm just using components native to the .NET toolbox.</P><P> </P><P><STRONG>Step 1 - Is it a JWT that has been pasted in?</STRONG></P><P>The web app will allow pretty much any text to be passed in so we need to validate that it is actually a token.</P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); //Check if readable token (string is in a JWT format) var readableToken = handler.CanReadToken(Jwt.Base64Token); if (readableToken != true) { FormatStatus = "The token doesn't seem to be in a proper JWT format."; return; } if (readableToken == true) { FormatStatus = "The token seems to be in a proper JWT format."; }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 2 - Do we have metadata?</STRONG></P><P>To be able to leverage concepts like public/private key cryptography we need to exchange the keys used, and we also need to agree on a couple of other attributes the tokens contain. It is entirely possible to exchange this in a manual way whether that is sending files per email or reading them loud over the phone for that matter, but the recommended approach is to have the identity provider expose a metadata endpoint. Loading things in a more manual way also requires more code, so we've kept it simple here and only provide the option for using an endpoint. (If you don't have one the code will not break, but revert to just parsing the token.)</P><P> </P><P>If you followed my previous post you should be able to provide your own endpoint even if that's just pointing to a different port on <A href="https://localhost" target="_blank" rel="noopener">https://localhost</A>.</P><P><A title="Generating Azure AD "Look-Alike" Tokens" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/generating-azure-ad-quot-look-alike-quot-tokens/ba-p/1163098" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/azure-developer-community-blog/generating-azure-ad-quot-look-alike-quot-tokens/ba-p/1163098</A> </P><P><A title="GitHub" href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor-jwt_generator-dotnet-core" target="_blank" rel="noopener">https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor-jwt_generator-dotnet-core</A> </P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">//Load Metadata if available IConfigurationManager<OpenIdConnectConfiguration> configurationManager; OpenIdConnectConfiguration openIdConfig = null; bool metadataAvailable; try { configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(Jwt.MetadataAddress, new OpenIdConnectConfigurationRetriever()); openIdConfig = configurationManager.GetConfigurationAsync(CancellationToken.None).Result; metadataAvailable = true; MetadataStatus = $"Successfully loaded metadata."; } catch (Exception e) { MetadataStatus = $"Failed to load metadata (skipping signature validation): {e.Message}"; metadataAvailable = false; }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 3 - Set up token validation parameters</STRONG></P><P>As said already we handle the absence of metadata gracefully. We can still check things like the lifetime and the audience, but we are not able to verify the signature. And that is the critical part - what separates my fake tokens with actual Azure AD tokens is the keys they are signed with. Which is why you should never disable validation of the signing key like we do here :)</img></P><P> </P><P>While there is some logic in locating the keys and retrieving them we see that this is one of the things the libraries handle for us in a developer friendly way.</P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">TokenValidationParameters validationParameters = null; //If we cannot load metadata we fall back if (!metadataAvailable) { validationParameters = new TokenValidationParameters { ValidIssuer = Jwt.Issuer, ValidAudience = Jwt.Audience, ValidateLifetime = true, ValidateAudience = true, ValidateIssuer = true, //Needed to force disabling signature validation SignatureValidator = delegate (string token, TokenValidationParameters parameters) { var jwt = new JwtSecurityToken(token); return jwt; }, ValidateIssuerSigningKey = false, }; } //If we succcessfully loaded metadata we do signature validation as well if (metadataAvailable) { validationParameters = new TokenValidationParameters { ValidIssuer = openIdConfig.Issuer, ValidAudience = Jwt.Audience, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidateAudience = true, ValidateIssuer = true, IssuerSigningKeys = openIdConfig.SigningKeys }; }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 4 - Validate the token</STRONG></P><P>The actual validation is shorter than the setup. We read the JWT. (Notice how Microsoft also use "token" twice in the naming - spelling out the acronym it would be ReadJsonWebTokenToken.)</P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">token = handler.ReadJwtToken(Jwt.Base64Token); try { var identity = handler.ValidateToken(Jwt.Base64Token, validationParameters, out SecurityToken validatedToken); if (metadataAvailable) { output += "Token is valid according to metadata!"; } else { output += "Token is valid according to a self-evaluation!"; } jwtSignature = token.RawSignature; } catch (Exception e) { //Print errors }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 5 - Pretty print the contents and the result</STRONG></P><P>The last step is to print out the result of the validation test, and the contents of the token split into header/payload/signature with some color coding. I did not find satisfactory ways to do this with the built-in mechanisms as these didn't really play nice with Blazor so I did a more hackish and manual approach for this. Not including the code here, but it is of course part of the sample on GitHub.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ValidationResult.png" style="width: 532px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/251094i9680A5F7CA039B23/image-size/large?v=v2&px=999" role="button" title="ValidationResult.png" alt="ValidationResult.png" /></span></P><P> </P><P>In an actual app or api you would of course not care so much about these things anyway.</P><P> </P><P>While I also prefer using "proper" libraries for validation I use tools like this all the time when working with things like custom policies in Azure AD B2C.</P><P> </P><P>I'm sure you are able to come up with more elaborate versions that what I did here, but I'm hoping it provided some of the basic understand for making sure you don't end up in the category of developers who skip token validation. (There are unfortunately too many that don't do this right and produce code with horrible vulnerabilities included.)</P> Mon, 01 Feb 2021 20:03:44 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/creating-a-jwt-validation-web-app/ba-p/2109450 Andreas Helland 2021-02-01T20:03:44Z Developers Unite to Hack for Social Justice https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-unite-to-hack-for-social-justice/ba-p/2077118 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NinaSui_1-1611882553594.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/250480iD45625E7A7620819/image-size/large?v=v2&px=999" role="button" title="NinaSui_1-1611882553594.png" alt="NinaSui_1-1611882553594.png" /></span></P> <P> </P> <P>Over the course of 8 weeks, developers gathered virtually to participate in the <A href="https://socialjusticehack.devpost.com/" target="_blank" rel="noopener">Microsoft Azure Hack for Social Justice</A> event. The hackathon challenge statement was straightforward: design and build an application prototype that uses Azure to address a social justice issue. Participants were given access to Microsoft technical mentors, dedicated Azure environment, and self-paced learning resources. Although technology alone cannot solve complex societal issues, our hope is that participants will develop solutions that can help empower communities and drive change.</P> <P> </P> <P>Over 500 participants registered for the hack, 300+ were from the U.S., and 6 winning projects were selected. Check out these creations:</P> <P> </P> <P><FONT size="5"><U><STRONG>1st Place : </STRONG></U><A href="https://devpost.com/software/refugee-restrooms-agmx8p" target="_blank" rel="noopener">Equitable Restroom Access for Gender Non-Conforming </A></FONT></P> <P>Created by: <STRONG>Mahesh Babu</STRONG> (<LI-USER uid="395609"></LI-USER>) </P> <P>Provides safe restroom access for transgender, gender non-conforming, disabled individuals, and parents traveling with kids to find restrooms per their needs.</P> <P><EM>Azure Services Used: Azure Functions, Azure SendGrid</EM></P> <P> </P> <P><LI-VIDEO vid="https://vimeo.com/479646923" align="center" size="custom" width="663" height="663" uploading="false" thumbnail="https://i.vimeocdn.com/video/995544352_1280.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><U><STRONG>2nd Place: </STRONG></U><A href="https://devpost.com/software/lll-8nthku" target="_blank" rel="noopener">GetPro</A></FONT></P> <P>Created by: <STRONG>Amina Fong</STRONG> (<LI-USER uid="899575"></LI-USER>), <STRONG>William Broniec</STRONG> (<LI-USER uid="362934"></LI-USER>), <STRONG>Zechen Lu</STRONG> (<LI-USER uid="900127"></LI-USER>) </P> <P>Web app that centralizes information and professional resources for underrepresented populations to help even the playing field in educational and career opportunities.</P> <P><EM>Azure Services Used: Azure App Services, Azure SQL Database</EM></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/CxzBDm-gHyU" align="center" size="custom" width="507" height="507" uploading="false" thumbnail="https://i.ytimg.com/vi/CxzBDm-gHyU/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><U><STRONG>3rd Place:</STRONG></U><U><STRONG> </STRONG></U><A href="https://devpost.com/software/legal-helper-bot" target="_blank" rel="noopener">Legal Helper Bot</A></FONT></P> <P>Created by: <STRONG>Murtada Ahmed</STRONG></P> <P>Not knowing the law and ones rights can expose already vulnerable groups to more discrimination and abuse. Legal Helper Bot was created to change that.</P> <P><EM>Azure Services Used: Azure Bot Services, Azure Storage</EM></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/RnT0eOvsNCU" align="center" size="custom" width="492" height="492" uploading="false" thumbnail="https://i.ytimg.com/vi/RnT0eOvsNCU/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><U><STRONG>Honorable Mentions</STRONG></U></FONT></P> <P><FONT size="5"><A href="https://devpost.com/software/racial-bias-and-score-prediction-of-compas-score" target="_blank" rel="noopener">Racial Bias and Score Prediction of COMPAS Score</A></FONT></P> <P>Created by: <STRONG>Yuki Ao</STRONG> (<LI-USER uid="899871"></LI-USER>) </P> <P>Inform people of the racial bias in the U.S. Justice system and give the offenders a chance to know their score level beforehand.</P> <P> </P> <P><FONT size="5"><A href="https://devpost.com/software/tutorfirst" target="_blank" rel="noopener">TutorFirst</A></FONT></P> <P>Created by: <STRONG>Farhan Mashud</STRONG> (<LI-USER uid="899519"></LI-USER>), <STRONG>Isfar Oshir</STRONG> (<LI-USER uid="899521"></LI-USER>), <STRONG>Mohammed Uddin</STRONG> (<LI-USER uid="899520"></LI-USER>) </P> <P>App for low income students to receive free, high quality tutoring from tutor volunteers.</P> <P> </P> <P><FONT size="5"><A href="https://devpost.com/software/numbers-rvyjc1" target="_blank" rel="noopener">Feminist Action Board</A></FONT></P> <P>Created by: <STRONG>Aroma Rodrigues</STRONG> (<LI-USER uid="899816"></LI-USER>) </P> <P>Subscribes to a news API to provide real time news on gender violence and tracks organizations, petitions, and initiatives</P> <P> </P> <P>On behalf of the Microsoft U.S. Azure team, I'd like to sincerely thank all of the participants, and congratulate the winners on a job well done. Also, thank you to the mentors and judges who volunteered their time to give back to the community. </P> <P> </P> <P>Next up: check out these new hackathons that are open for registration</P> <UL> <LI><A href="https://aka.ms/accessibilityhacktc" target="_blank" rel="noopener">Microsoft Azure U.S. Hack for Accessibility (Jan 28 - Mar 15, 2021)</A></LI> <LI><A href="https://aka.ms/azureaihacktc" target="_blank" rel="noopener">Microsoft Azure AI Hackathon (Jan 26 - April 5, 2021)</A></LI> </UL> Fri, 29 Jan 2021 01:20:19 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-unite-to-hack-for-social-justice/ba-p/2077118 NinaSui 2021-01-29T01:20:19Z Automate Application Lifecycle Management with GitHub Actions for Power Platform Webinar https://techcommunity.microsoft.com/t5/azure-developer-community-blog/automate-application-lifecycle-management-with-github-actions/ba-p/2083829 <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG style="color: inherit; font-family: inherit; font-size: 18px;">Overview</STRONG><SPAN style="color: inherit; font-family: inherit; font-size: 18px;"> </SPAN></DIV> <DIV class="lia-message-body-wrapper lia-component-message-view-widget-body"> <DIV id="bodyDisplay" class="lia-message-body"> <DIV class="lia-message-body-content"> <P><SPAN>In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the <A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener noreferrer">Low Code Application Development on Azure</A> solution.</SPAN></P> <P> </P> <P><SPAN>Low-code app dev on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>This month’s webinar is ‘Develop Application Lifecycle Management (ALM) processes with GitHub Actions and Power Apps.’</SPAN></P> <P> </P> <P><SPAN>In this blog I will highlight what LCAD on Azure is, the 3 most prevalent products in the webinar and use cases and provide supporting documentation for you to learn more about the webinar's content. </SPAN><SPAN> </SPAN></P> <P> </P> <H4 id="toc-hId--1634335751"><STRONG>What is Low-code application development (LCAD) on Azure?</STRONG> </H4> <P><SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener noreferrer">Low Code Application Development on Azure</A> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN><SPAN> </SPAN></P> <P> </P> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614960637782.png" style="width: 1398px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261205i1D97A7FBC728FFAB/image-dimensions/1398x786?v=v2" width="1398" height="786" role="button" title="riduncan_0-1614960637782.png" alt="riduncan_0-1614960637782.png" /></span> <P> </P> <P> </P> <P> </P> <P><SPAN>For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory.</SPAN></P> <P> </P> <P><SPAN>That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN> However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low. </SPAN></P> <P> </P> <P><SPAN>In the past that would require another heavy lift by the development team to rework their previous application iteration. </SPAN></P> <P> </P> <P><SPAN>Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P> </P> <P><SPAN>Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>This is just one scenario that highlights the capabilities of the LCAD on Azure solution. To learn more about the solution itself there is a link at the bottom of this blog in the supporting documentation section.</SPAN></P> <P> </P> <P><SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">To learn </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">more,</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8"> visit the </SPAN></SPAN><A class="Hyperlink SCXW12267399 BCX8" href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8" data-ccp-charstyle="Hyperlink">LCAD</SPAN></SPAN><SPAN class="TextRun Underlined SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8" data-ccp-charstyle="Hyperlink"> on Azure page</SPAN></SPAN></A><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">, </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">and to walk through the</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8"> </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">a</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">forementioned </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">scenario</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8"> try the </SPAN></SPAN><A class="Hyperlink SCXW12267399 BCX8" href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8" data-ccp-charstyle="Hyperlink">LCAD on Azure guided tour</SPAN></SPAN></A><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">.</SPAN></SPAN><SPAN class="EOP SCXW12267399 BCX8" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></SPAN></P> <P> </P> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_1-1614960637783.jpeg" style="width: 1397px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261206iD8C87BEAFD01FDCE/image-dimensions/1397x787?v=v2" width="1397" height="787" role="button" title="riduncan_1-1614960637783.jpeg" alt="riduncan_1-1614960637783.jpeg" /></span> <P> </P> <P><SPAN>This month’s webinar is focused on the capability to automate application lifecycle management, like the above scenario, with GitHub Actions to further expedite and streamline the development process for developers. </SPAN><SPAN> </SPAN></P> <P> </P> <H4 id="toc-hId-853177082"><STRONG>Webinar Content</STRONG> </H4> <P><SPAN>The webinar explains <STRONG><U>‘Fusion Development’</U></STRONG> a process that leverages the citizen developer to build low-code applications themselves, further reducing strain on development teams, but professional developers meeting citizen developer's half-way by extending these applications with custom code. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>The webinar includes <STRONG><U>2 demos</U></STRONG>, one on the <STRONG><U>integration of API management and Power Apps</U></STRONG>, how to <STRONG><U>create a CI/CD pipeline using GitHub Actions</U></STRONG>. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>The integration of API management and Power Apps will cover the no cliff extensibility capabilities of Power Apps and Azure together, how to export APIs to Power Apps, and how to connect API management with Power Apps via Microsoft Teams for free.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>We introduced Azure API Management connectors to quickly publish Azure API Management backed APIs to the Power Platform for easy discovery and consumption, dramatically reducing the time it takes to create apps connecting to Azure services.</SPAN></P> <P> </P> <P><SPAN>This means that enterprises can now truly benefit from existing assets hosted on Azure, by making these available to Citizen developers with just a few clicks in the Azure portal.</SPAN></P> <P> </P> <P><SPAN>Thereby eliminating the additional steps to go create custom connectors in the Power Apps or Power Automate maker experiences.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=06CRN18kH1k&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=7" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/06CRN18kH1k/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><SPAN>The </SPAN><A href="https://help.github.com/articles/about-github-actions" target="_blank" rel="noopener noreferrer"><SPAN>GitHub Actions</SPAN></A><SPAN> demo will cover developer's ability to build automated software development lifecycle workflows.</SPAN></P> <P> </P> <P><SPAN>With GitHub Actions for Microsoft Power Platform, developers can create workflows in their repository to build, test, package, release, and deploy apps; perform automation; and manage bots and other components built on Microsoft Power Platform.</SPAN></P> <P> </P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=g3qfBeat-PM&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=8" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/g3qfBeat-PM/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <H4 id="toc-hId-1533235452"><STRONG>Conclusion</STRONG> </H4> <P><SPAN>The webinar is currently available </SPAN><A href="https://info.microsoft.com/ww-ondemand-develop-test-and-deliver-applications-with-github-actions-for-power-platform.html?lcid=en-us" target="_blank" rel="noopener noreferrer"><SPAN>on-demand</SPAN></A><SPAN>, and <SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8">and </SPAN></SPAN><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8">complete the </SPAN></SPAN><A class="Hyperlink SCXW253825262 BCX8" href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbRzDZlq55wCpLjWQ_IU7xv-VURVRFQUdPSTJVTjBOR0RWM0U1VFFSM1pYUS4u" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW253825262 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW253825262 BCX8" data-ccp-charstyle="Hyperlink">survey</SPAN></SPAN></A><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8"> </SPAN></SPAN><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8">so,</SPAN></SPAN><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8"> we can improve these blogs and webinars in the future.</SPAN></SPAN> The February webinar will cover the intersection of serverless applications and low-code. </SPAN></P> <P> </P> <H4 id="toc-hId--274219011"><STRONG>Resources</STRONG></H4> <P> </P> <P><STRONG>Power Apps x Azure websites </STRONG></P> <UL> <LI><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener noreferrer"><SPAN>LCAD on Azure website</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener noreferrer"><SPAN>Azure plus Power Apps for pro developers I Microsoft Power Apps</SPAN></A><SPAN> </SPAN></LI> </UL> <P><STRONG>Power Platform x Azure API Management Integration </STRONG></P> <UL> <LI><A href="https://powerapps.microsoft.com/en-us/blog/azure-api-management-connector-on-the-power-platform/" target="_blank" rel="noopener noreferrer"><SPAN>Public Preview Blog Post</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/api-management/export-api-power-platform" target="_blank" rel="noopener noreferrer"><SPAN>Step by Step Instruction</SPAN></A><SPAN> </SPAN></LI> </UL> <P><STRONG>Power Platform x GitHub Actions Automated SDLC workflows </STRONG></P> <UL> <LI><A href="https://powerapps.microsoft.com/en-us/blog/github-actions-for-the-power-platform-now-available-in-preview/" target="_blank" rel="noopener noreferrer"><SPAN>Public Preview Blog Post</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://docs.microsoft.com/en-us/power-platform/alm/devops-github-actions" target="_blank" rel="noopener noreferrer"><SPAN>GitHub Actions for Power Platform overview</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://docs.microsoft.com/en-us/power-platform/alm/devops-github-available-actions" target="_blank" rel="noopener noreferrer"><SPAN>Capabilities Documentation</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://www.youtube.com/watch?v=Bk4KpE_6YtY&feature=youtu.be" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Source control and automated deployment - Demo</SPAN></A><SPAN> </SPAN><SPAN> </SPAN></LI> <LI><A href="https://github.com/microsoft/powerplatform-actions-lab" target="_blank" rel="noopener noreferrer"><SPAN>Hands on lab of source control and automated deployment demo</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://github.com/microsoft/powerplatform-actions" target="_blank" rel="noopener noreferrer"><SPAN>Power Platform x GitHub Actions repo</SPAN></A><SPAN> </SPAN></LI> </UL> <P> </P> </DIV> </DIV> </DIV> Fri, 05 Mar 2021 17:28:02 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/automate-application-lifecycle-management-with-github-actions/ba-p/2083829 riduncan 2021-03-05T17:28:02Z [Mitigated] DevTest Labs Outage: Customers in certain regions might experience degraded performance https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-customers-in-certain-regions-might/ba-p/2064696 <DIV> <DIV><SPAN style="font-family: inherit;">Update at 12:30 AM UTC on 16 Jan 2021 - Issue has been mitigated and we do not expect customers to face any issues. We will update the blog post with the RCA soon. </SPAN></DIV> <DIV> </DIV> <DIV> <DIV><SPAN style="font-family: inherit;">Update at 19:30 UTC - We see decreasing number of failures but we are still keeping an eye out for any other potential issues. </SPAN></DIV> </DIV> <DIV><SPAN style="font-family: inherit;">-------------------------------------------------------------------------------------------------</SPAN></DIV> <DIV> </DIV> <DIV><SPAN style="font-family: inherit;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="devtestlabsintro_960.jpg" style="width: 424px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/250206i4A727BF2A649AF64/image-dimensions/424x258?v=v2" width="424" height="258" role="button" title="devtestlabsintro_960.jpg" alt="devtestlabsintro_960.jpg" /></span></SPAN></DIV> <DIV> </DIV> <SPAN style="font-family: inherit;">We would like to inform you that, starting </SPAN><SPAN style="font-family: inherit;">07:59 UTC on 15 Jan 2021,</SPAN><SPAN style="font-family: inherit;"> </SPAN><FONT face="inherit">customers in the below mentioned regions might </FONT>experience<FONT face="inherit"> degraded performance while performing any major action on DevTest Labs. We are currently investigating the root cause and our team continues to work diligently on a fix. </FONT></DIV> <DIV> </DIV> <DIV> <UL> <LI>Australia Southeast</LI> <LI>Canada Central</LI> <LI>Central India</LI> <LI>East Asia</LI> <LI>East US</LI> <LI>Japan East</LI> <LI>Korea Central</LI> <LI>North Europe</LI> <LI>UK West</LI> <LI>West India</LI> </UL> <P> </P> <DIV><FONT face="inherit">We will update this post to share regular updates and will also share a root cause analysis once the fix is rolled out. </FONT>We apologize for the inconvenience and thank you for your patience. </DIV> <P> </P> <P>- DevTest Labs Team</P> </DIV> Thu, 28 Jan 2021 09:23:09 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-customers-in-certain-regions-might/ba-p/2064696 Sagar_Lankala 2021-01-28T09:23:09Z [Customer Story] SharePoint Online Team leverages DevTest Labs to create Testing Environments https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781 <P>There are several teams within Microsoft which use <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/devtest-lab-overview" target="_blank" rel="noopener">Azure DevTest Labs</A> (DTL). <A href="https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration" target="_blank" rel="noopener">SharePoint Online</A> (SPO) team at Microsoft has created a solution, built on DTL, to solve the problem of making SPO testing environments readily available to SharePoint engineers – securely, at scale and with high availability – leveraging the strengths of DevTest Labs and Azure.</P> <P> </P> <P>This blog post is the first in a series of posts that highlights key parts of this solution. The series enables anyone to build, configure and run a similar system on DTL. Each post will cover one core aspect of the SharePoint Online solution, with a brief description of the scenarios involved, and the strategies applied to solve them. Each comes equipped with architecture diagrams, walk-throughs and code samples, presented in a generic and reusable way. It is hoped that customers in the Azure community, desiring to solve similar problems for their users, can benefit from the content herein to create their own DTL solutions.</P> <P> </P> <H2>About SharePoint Online</H2> <P> </P> <P>For background, SharePoint Online is Microsoft’s document storage service for <A href="https://www.microsoft.com/en-us/microsoft-365" target="_blank" rel="noopener">Microsoft365</A>. It is a massive enterprise business. In addition to providing enterprise-class document management, it has team collaboration, portal sites and content management. It forms the document storage backbone for <A href="https://www.microsoft.com/en-us/microsoft-365/exchange/email" target="_blank" rel="noopener">Exchange Online</A>, <A href="https://teams.microsoft.com/edustart" target="_blank" rel="noopener">Teams</A> and <A href="https://www.microsoft.com/en-us/download/office.aspx" target="_blank" rel="noopener">Office applications</A> such as Word and Excel. As one example, when you save a document in Teams, it is stored in SPO under the hood. Fortune 500 companies, schools, governments and non-profits critically depend on SharePoint Online for their business, storing over 480 exabytes of their data in it.</P> <P><EM>If you would like to learn more about SharePoint Online and its potential application to your business, start <A href="https://www.microsoft.com/en-us/microsoft-365/buy/compare-all-microsoft-365-products" target="_blank" rel="noopener">here</A>. There are Microsoft365 subscriptions tailored for home, business, and institutional use.</EM></P> <P> </P> <H2>SharePoint Online Scenario</H2> <P> </P> <P>With over 1000 engineers working on an ever-evolving 140 MLOC codebase in SharePoint Online, <STRONG>integration testing</STRONG> is a critical part of the engineering workflow. At its core, SharePoint is a three-tier web application, featuring a web tier, a business logic tier and a data layer, each working in conjunction as a single service in data centers across the globe. Engineers working on it require safe, isolated simulation environments that function like scaled-down three-tier data center deployments so that they can deeply test their code before it goes worldwide.</P> <P>The SharePoint Online team has shrunk the core SPO components and services so that they all fit on a single, interactive virtual machine (VM) that simulates the full data center, but is stripped down to its essence. It is therefore much easier to deploy. These single-VM environments are well-suited to testing most SPO scenarios – of course core document storage and team collaboration, but notably scenarios involving interaction with Office or Teams. Using these VMs, code changes can be deployed, poked and prodded, and debugged as it interacts with these components and services – all well before the code is ultimately deployed for enterprise customers in production data centers.</P> <P> </P> <H2>Use of DevTest Labs</H2> <P> </P> <P>DevTest Labs provides “labs” of machines, intended to host pre-configured testing environments at scale. The SPO team has built a solution in DevTest Labs to host these single-VM SPO environments, giving engineers a private, isolated, safe, simulated data center in which to test their code.</P> <P>Breaking it down step-by-step, the scenario for SharePoint Online engineers is as follows:</P> <OL> <LI>An engineer wishes to test their code. They fetch a virtual machine (VM) from the DevTest Lab.</LI> <LI>The VM hosts a pre-configured single-VM SPO environment with a stable build.</LI> <LI>They log in, interact with the environment, and patch a new code change into place to do testing.</LI> <LI>When they are finished, they throw away their VM – they can always fetch a fresh one for their next iteration.</LI> </OL> <P>The complexity of building these single-VM SPO environments, with all services and components wired up correctly, is hidden from the lab user. The work is done before the VM is assigned to the engineer, saving them the time and effort. Environments are ready to use as they are. Engineers have the option to simply use them as-is, or optionally patch their private changes and onto the VM to see how it behaves. These single-VM environments are the heart of their inner loop debugging and integration testing.</P> <P>Today, about 500 engineers use the SPO integration lab on a monthly basis, with plans to grow this to 750 or more. Typically about 2,500 VMs are allocated at any one point in time, running in three different Azure regions around the world. Azure allows the solution to easily scale to meet growing demand.</P> <P> </P> <H3>Why DevTest Labs?</H3> <P> </P> <P>Certainly a solution of this nature can be created without DevTest Labs, using Azure VMs directly. However, DevTest Labs provides out-of-box features that save time and money in implementation and maintenance. These include:</P> <UL> <LI>Standard service grouping and administration</LI> <LI>Flexible and extensible <A href="https://azure.microsoft.com/en-us/services/#networking" target="_blank" rel="noopener">networking</A> and user connectivity</LI> <LI>Ability for lab users to claim pre-created VMs without going through the full creation process</LI> <LI><A href="https://azure.microsoft.com/en-us/documentation/articles/devtest-lab-set-lab-policy/" target="_blank" rel="noopener">Policies and thresholds</A> to manage costs by shutting unused machines down</LI> <LI><A href="https://azure.microsoft.com/en-us/documentation/articles/devtest-lab-add-vm-with-artifacts/" target="_blank" rel="noopener">DTL Artifacts</A> to reduce the time required to set up and configure virtual machines once created</LI> </UL> <P>The full feature set of Azure is also available to extend DevTest Labs where needed, but leveraging the native capabilities of DevTest Labs reduces the cost to build, maintain and extend the solution. It also sets the solution up for future improvements planned by the Azure team at Microsoft. In short, <STRONG>DevTest Labs is a quite natural fit for this use case</STRONG>, rather than reinventing the wheel.</P> <P><EM>If you haven’t tried DevTest Labs yet, <A href="https://go.microsoft.com/fwlink/?LinkId=627034&clcid=0x409" target="_blank" rel="noopener">click here</A> to create your first lab. DevTest Labs is a <A href="https://azure.microsoft.com/en-us/pricing/details/devtest-lab/" target="_blank" rel="noopener">free service</A>!</EM></P> <H2> </H2> <H2>Solution Architecture</H2> <P> </P> <P>The solution builds on DevTest Labs as its basis. It is an event-driven architecture, using Azure EventGrid and an Azure Function app. It uses Shared Image Gallery to host VM images and employs a Point-to-Site VPN for secure access to the network hosting the VMs. It has an easy-to-use interface for checkin/checkout that is hosted outside the Azure portal. It extends DevTest Labs policy and allows users to manage when machines are shut down, and even postpone shutting machines down, above the times assigned by Azure DevTest Labs policy. </P> <P>Below is a diagram covering the architecture. Starting from the left, we have an Image Service which is responsible for creating Azure Compute images with SPO pre-configured. Image Service pulls the latest build available, triggers the deployment, waits for success, and publishes the result to Azure Shared Image Gallery for general consumption by DevTest Labs. It then fires an event that, by way of Event Grid, triggers an Azure Function App.</P> <DIV id="lia-teaserTinyMceEditorSagar_Lankala_0" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <DIV id="tinyMceEditorSagar_Lankala_1" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Picture1.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/245507iC4443202A6A04FB6/image-size/large?v=v2&px=999" role="button" title="Picture1.png" alt="Picture1.png" /></span></P> <P> </P> <P>The Function App contains the business logic for the SPO solution, which extends the core functionality DevTest Labs natively provides. The Function App responds to the event by triggering VM creation in DevTest Labs, in accordance with desired VM pool targets. A VPN Gateway is configured to provide point-to-site VPN connectivity for end users, who use Azure VPN Client to ensure the communication between the lab user and the VMs is authenticated and secure.</P> <P>The solution created has potential application to a broad set of scenarios. The designs and architecture described should be beneficial to Azure customers wanting to build similar solutions on DevTest Labs, including what code to build and what components to configure for their applications.</P> <H2> </H2> <H2>Introducing This Blog Series</H2> <P> </P> <P>In several upcoming blog posts, we’ll cover the following topics: </P> <UL> <LI>Overview: How the SharePoint team leverages DevTest Labs <EM>(Current Blog Post)</EM></LI> <LI>Enabling an Event-Driven Architecture with DevTest Labs</LI> <LI>Leveraging Point-to-Site VPN with DevTest Labs</LI> <LI>Maintaining a Pool of Claimable VMs</LI> <LI>Building a Simple User Interface for DevTest Labs</LI> <LI>Enabling Shutdown notifications via Teams</LI> </UL> <P>Each blog post borrows the concepts and architecture from the SPO solution, boiled down and made generally accessible for re-use by the Azure community. The content of this blog series forms a set of templates for others to build the same types of solutions for their applications as the SharePoint Online team did for their engineers.</P> <P> </P> <P><FONT size="4"><STRONG>What's Next?</STRONG></FONT></P> <P> </P> <P>In forthcoming blog posts, the rest of the topics will be covered, starting with how to enable an event-driven architecture with DevTest Labs similar to the one described above. Please stay tuned!</P> <P> </P> <P>If you run into any problems with the content, or have any questions, please feel free to drop a comment below this post and we will respond. Your feedback is always welcome!</P> <P> </P> <P><STRONG>- Pete Harwood</STRONG>, Principal Engineering Manager, OneDrive and SharePoint Engineering Fundamentals at Microsoft</P> Sat, 15 May 2021 01:15:00 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781 Sagar_Lankala 2021-05-15T01:15:00Z #DevDecember Week 5: It’s a (festive) wrap https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-5-it-s-a-festive-wrap/ba-p/1834830 <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week5.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/239463i9C0D2E6CB09CF544/image-size/large?v=v2&px=999" role="button" title="Blog-images_week5.png" alt="Blog-images_week5.png" /></span></SPAN></P> <P><SPAN>The end of #DevDecember is near, and we’re ready to kick off 2021. To help you mark the transition and start anew, we’ve created digital New Year postcards in three designs that you can adapt and share with fellow devs, friends, and family. Download the New Year cards</SPAN><FONT color="#000000"> on our </FONT><U><FONT color="#FF0000"><SPAN><STRONG><A href="https://aka.ms/DevDecember20Home" target="_self" rel="noopener noreferrer">#DevDecember homepage.</A></STRONG></SPAN></FONT></U></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Slide_8_1.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/239464iDC97AE1A044CDC85/image-size/medium?v=v2&px=400" role="button" title="Slide_8_1.png" alt="Slide_8_1.png" /></span></P> <P> </P> <P><STRONG>Before we hit send, let’s take one more look in the rearview mirror. </STRONG><SPAN> </SPAN></P> <P><SPAN>Each week, we asked for your #DevDecember thoughts, starting with the ways you grew this year as developer, and moving on to what communities had your back, what inspired you, and what projects and challenges you were most looking forward to in 2021.</SPAN><SPAN> </SPAN><A href="https://twitter.com/hashtag/DevDecember" target="_blank" rel="noopener"><SPAN>Check out what fellow devs shared</SPAN></A><SPAN>.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>Week 1</SPAN><SPAN>: </SPAN><SPAN>What helped us grow</SPAN><SPAN> </SPAN><SPAN>professionally</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>Beginner's series to JavaScript </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Taking your first steps toward mastering a new programming language is exciting, but it can also feel overwhelming. To help you get started with JavaScript, we've created short and easy-to-consume videos that break down the key concepts you need to know.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured1" target="_blank" rel="noopener"><SPAN>Start watching the series</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><SPAN> </SPAN><STRONG><SPAN>Agrotech</SPAN></STRONG><STRONG><SPAN> </SPAN></STRONG><STRONG><SPAN>IoT</SPAN></STRONG><STRONG><SPAN> workshop</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Want to grow your professional </SPAN><SPAN>IoT</SPAN><SPAN> skills? Your first stop may be the garden. Get your hands dirty with a workshop on how to build an internet-connected device to gather soil moisture data that will tell you (by lighting up an LED) if a plant needs watering.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured3" target="_blank" rel="noopener"><SPAN>Start digging in</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><SPAN> </SPAN><STRONG><SPAN>Bringing browser developer tools to Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>One of our favorite releases in 2020 was the Microsoft Edge Tools for VS Code extension, designed to simplify workflows. Connect to an existing browser instance, start a new one, or use a “headless” browser.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured4" target="_blank" rel="noopener"><SPAN>Explore the extension</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><STRONG><SPAN>Building a first "Power Apps"</SPAN></STRONG><STRONG><SPAN> app</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>@JoeCamp13</SPAN><SPAN> built an app to track inventory entirely with Power Apps. His explanation of how he did it, is illustrated with screenshots so you can follow along.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured2" target="_blank" rel="noopener"><SPAN>Start the walkthrough</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><SPAN>Week 2:</SPAN><SPAN> </SPAN><SPAN>How the community came</SPAN><SPAN> </SPAN><SPAN>together</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>Live coding community</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Learn from the best on Twitch! Watch devs code live, and connect and ask questions in real time. Find out how joining Microsoft’s virtual community can speed up learning new skills and languages.</SPAN><SPAN> <BR /></SPAN><A href="https://channel9.msdn.com/Events/Start-Dev-Change/Start-Dev-Change/Intro-to-Twitch-Join-the-Live-Coding-Community" target="_blank" rel="noopener"><SPAN>Watch an intro video on Twitch and live coding</SPAN></A><SPAN> (25 min)</SPAN><SPAN> <BR /></SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>The ReadMe Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Behind the open-source code used by millions of people are the unseen efforts of countless contributors, who put in long hours to build software, fix issues, and more. Meet some of the people making contributions, including veterans who find the teamwork required for open-source collaboration a natural fit. </SPAN><SPAN> </SPAN></P> <P><A href="https://github.com/readme" target="_blank" rel="noopener"><SPAN>Read their inspiring stories</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Remote collaboration with Live Share in Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>With Live Share, you can instantly share your project with fellow developers. No need to clone a repo or set up the environment. It’s a one-stop, real-time collaboration tool for pairing, code reviews, technical interviews, boot camps, and more.</SPAN><SPAN> </SPAN></P> <P><A href="https://www.youtube.com/watch?v=A2ceblXTBBc" target="_blank" rel="noopener">Watch a short video on how to set up Live Share</A><SPAN> (5 min)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>From the open source cookbook</SPAN></STRONG></P> <P><SPAN>Cooking up code is a bit like developing food recipes. The more people who test your recipe, the more it's likely to guarantee that what lands on your plate is what you intended.</SPAN><SPAN> </SPAN></P> <P><A href="https://microsoft.github.io/DevCookbook/" target="_blank" rel="noopener"><SPAN>Browse our crowdsourced cookbook with free code recipes</SPAN></A><SPAN> </SPAN></P> <P><SPAN> <BR /></SPAN><SPAN>Week 3:</SPAN><SPAN> </SPAN><SPAN>What inspired </SPAN><SPAN>us</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>IoT</SPAN></STRONG><STRONG><SPAN> and Azure help with family chores </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>With everyone at home, dishes pile up faster, garbage accumulates, and chores must be done more frequently. To keep track in real time what chores need to be completed and by when, Scott </SPAN><SPAN>Hanselman</SPAN><SPAN> built an </SPAN><SPAN>IoT</SPAN><SPAN> solution, using sensors, a web-based </SPAN><SPAN>heatmap</SPAN><SPAN>, and notifications. </SPAN><SPAN> </SPAN></P> <P><A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-iot-and-azure-to-help-with-family-chores/ba-p/1809444" target="_blank" rel="noopener"><SPAN>Check out how to build Chores </SPAN><SPAN>IoT</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>The Developer Activity Book </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Taking your mind off what you’re working on is sometimes the best way to get inspiration. The Developer Activity Book features family-friendly fun, including seven coloring pages, a crossword puzzle, a word search, and a logic puzzle. </SPAN><SPAN> </SPAN></P> <P><A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-developer-activity-book-for-remotedevlife/ba-p/1432196" target="_blank" rel="noopener"><SPAN>Get the Developer Activity Book</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>2020 Imagine Cup World Championship</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>The Imagine Cup World Championship encourages students across the globe to innovate using Microsoft Azure. Finalist teams created technological solutions to tackle pressing global issues. Get inspired by their passion and the incredible projects they created.</SPAN><SPAN> </SPAN></P> <P><A href="https://www.youtube.com/watch?v=ssxYilfoomQ&feature=youtu.be" target="_blank" rel="noopener"><SPAN>Watch the recap</SPAN></A><SPAN> (3 minutes)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Plastic Origins Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Most of the plastic that ends up in the oceans comes from inland sources. In this episode of </SPAN><SPAN>CodeStories</SPAN><SPAN>, Seth Juarez shows how developers can use AI to address this problem by monitoring </SPAN><SPAN>microplastic</SPAN><SPAN> and tracking ocean-bound plastic waste.</SPAN><SPAN> </SPAN></P> <P><A href="https://channel9.msdn.com/Shows/CodeStories/Microsoft-France-Surfrider-EU--Plastic-Origins-Project" target="_blank" rel="noopener"><SPAN>Watch the video</SPAN></A><SPAN> (13 minutes)</SPAN><SPAN> <BR /></SPAN><SPAN> </SPAN></P> <P><SPAN>Week 4:</SPAN><SPAN> </SPAN><SPAN>Looking forward to new</SPAN><SPAN> </SPAN><SPAN>challenges</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>Microsoft Learn Student Ambassadors </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>In 2020, we launched the Microsoft Learn Student Ambassadors program, where students can join a global community of peers, connect with mentors, learn the skills they need to land a dream job, and make a difference. Applications are open year-round, and we will accept hundreds more Student Ambassadors in 2021.</SPAN><SPAN> <BR /></SPAN><A href="https://techcommunity.microsoft.com/t5/student-developer-blog/welcome-microsoft-learn-student-ambassadors/ba-p/1570828" target="_blank" rel="noopener">Learn more about the program</A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Speed up development</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>What does it take to go from idea to development without detours? Best-in-class tools and product management are two of the things that boost velocity, a new McKinsey report found. Find out how to get stuff done faster in 2021 with this and other real-world strategies. </SPAN><SPAN> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/blog/unleash-the-full-potential-of-your-developer-teams-and-increase-developer-velocity/" target="_blank" rel="noopener"><SPAN>Read the McKinsey report on how to boost developer velocity</SPAN></A></P> <P> </P> <P><STRONG><SPAN>Learning to code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Intimidated by the idea of learning a new programming language? We’ve got a few ways to make it easier so 2021 is the year you make it happen. Download Visual Studio Code, then dive into tutorials and other resources that you can go through at your own pace.</SPAN><SPAN> </SPAN></P> <P><A href="https://code.visualstudio.com/learntocode" target="_blank" rel="noopener"><SPAN>Learn to program with Visual Studio Code</SPAN></A></P> <P> </P> <P><STRONG><SPAN>Predicting meteor showers using Python and VS Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Shooting for the moon in 2021? This session may provide inspiration. </SPAN><SPAN>Dr</SPAN><SPAN> G explains what meteor showers are and how data science is used to predict these events. No coding experience required.</SPAN><SPAN> </SPAN></P> <P><A href="https://www.youtube.com/watch?v=Aln9p6farRg" target="_blank" rel="noopener"><SPAN>Watch the recorded live stream</SPAN></A><SPAN> (50 min) </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>Finally, before we raise a glass, cup, or mug to </SPAN><SPAN>2021</SPAN><SPAN>, we’d like to thank </SPAN><SPAN>all </SPAN><SPAN>of you </SPAN><SPAN>who have shared</SPAN><SPAN> </SPAN><A href="https://twitter.com/hashtag/DevWithABev" target="_blank" rel="noopener"><SPAN>#</SPAN><SPAN>D</SPAN><SPAN>ev</SPAN><SPAN>W</SPAN><SPAN>ith</SPAN><SPAN>AB</SPAN><SPAN>ev</SPAN></A><SPAN> pictures during the month.</SPAN><SPAN> We’ve discovered a few new beverages and flavors to </SPAN><SPAN>sip</SPAN><SPAN> </SPAN><SPAN><img class="lia-deferred-image lia-image-emoji" src="https://techcommunity.microsoft.com/html/@8341BD79091AF36AA2A09063B554B5CD/images/emoticons/smile_40x40.gif" alt=":smile:" title=":smile:" /></SPAN><SPAN>.</SPAN><SPAN> </SPAN><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><FONT color="#800080"><SPAN>Here’s to</SPAN><SPAN> new projects and new adventures</SPAN><SPAN>!</SPAN><SPAN> H</SPAN>appy New Year<SPAN>!</SPAN><SPAN> </SPAN></FONT></P> Fri, 01 Jan 2021 10:05:20 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-5-it-s-a-festive-wrap/ba-p/1834830 livelovegeek 2021-01-01T10:05:20Z #DevDecember Week 4 Recap: Looking forward https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-4-recap-looking-forward/ba-p/1834829 <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week4.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237579i8C81B976DAB62F1E/image-size/large?v=v2&px=999" role="button" title="Blog-images_week4.png" alt="Blog-images_week4.png" /></span></SPAN></P> <P><SPAN class="TextRun SCXW119958490 BCX0"><SPAN class="NormalTextRun SCXW119958490 BCX0">2021 is right around the corner, and<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW119958490 BCX0"><SPAN class="NormalTextRun SCXW119958490 BCX0">with it comes</SPAN></SPAN><SPAN class="TextRun SCXW119958490 BCX0"><SPAN class="NormalTextRun SCXW119958490 BCX0"><SPAN> </SPAN>the optimism a new year brings. A clean slate, a new story to write. </SPAN></SPAN><SPAN class="EOP SCXW119958490 BCX0"> </SPAN></P> <P> </P> <P><SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW68609620 BCX0">So</SPAN><SPAN class="NormalTextRun SCXW68609620 BCX0"> this week, w</SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">e invite you to share </SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">what </SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">you hope to achieve in 2021</SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">—</SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">and the activities that will get you there. </SPAN></SPAN><SPAN class="EOP SCXW68609620 BCX0"> </SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">Do you plan<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">to</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN>spend more time listening in and sharing on live stream channels? Are there a</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">reas you want to brush up on</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">? Do you have projects and goals you can't wait to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">work on?</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">Use<SPAN> </SPAN></SPAN></SPAN><A href="https://aka.ms/DevDecember20Home" target="_self"><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">our</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun Underlined SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">fill-in-the-blank</SPAN></SPAN></A><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN>to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">share</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN>your</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">can-d</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">o items<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">for 2021</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW36221302 BCX0"> </SPAN></P> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_8_2.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/239460i234714BFBD0B43AC/image-size/medium?v=v2&px=400" role="button" title="Slide_8_2.png" alt="Slide_8_2.png" /></span></SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">W</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">e shared<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">these resources<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">recently</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">t</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">hat support<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">developer</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0"><SPAN> </SPAN>efforts</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">, whether you're just starting out or<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">are ready to kick it up a notch:</SPAN></SPAN><SPAN class="EOP SCXW89562749 BCX0"> </SPAN></P> <P><STRONG><SPAN>Microsoft Learn Student Ambassadors </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">In 2020</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">, we launched the Microsoft Learn Student Ambassadors program, where students can join a global community of peers, connect with mentors, learn the skills they need to land a dream job, and make a difference. Applications are open year-round</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">, and we will acce</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">pt hundreds more Student Ambassadors</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127"> in 2021</SPAN></SPAN></SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured13" target="_blank" rel="noopener">Learn more about the program</A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Speed up development</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">What does it take to go from idea to development without detours? Best-in-class tools and product management are two<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">of the things that boost veloci</SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">ty, a new McKinsey report found</SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">. Find out how to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">get stuff done faster</SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0"><SPAN> </SPAN>in 2021 with this and other real-world strategies. </SPAN></SPAN><SPAN class="EOP SCXW133027991 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured14 " target="_blank" rel="noopener">Read the McKinsey report on how to boost developer velocity</A><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Learning to code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">Intimidated by the idea of learning a<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">new<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">programming language?<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">We’ve got<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">a few ways to make it easier</SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0"><SPAN> </SPAN>so 2021 is the year you make it happen</SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">. Download<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">Visual Studio Code</SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">, then dive into tutorials and other resources<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">that<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">you can go through at your own pace.</SPAN></SPAN><SPAN class="EOP SCXW76440558 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured15" target="_blank" rel="noopener">Learn to program with Visual Studio Code</A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Predicting meteor showers using Python and Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">Shooting for the moon<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">in 2021</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">? T</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">his session may<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">provide</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0"><SPAN> </SPAN>inspiration. Dr G explains what meteor showers are and how data science is used to predict<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">these</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">events. No coding experience required.</SPAN></SPAN><SPAN class="EOP SCXW235576590 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured16" target="_blank" rel="noopener"><SPAN>Watch the recorded live stream</SPAN></A><SPAN> (50 min) </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>We’ve got one more thing to mention before we close out week 4 </SPAN><SPAN>of #DevDecember:</SPAN><SPAN> </SPAN></P> <UL> <LI><SPAN>#DevWithABev</SPAN><SPAN> is still going strong</SPAN><SPAN>. It’s simple. Snap a pic of you with your fav bev and post on Twitter with the hashtag</SPAN><SPAN> #DevWithABev.</SPAN><SPAN> </SPAN></LI> </UL> <P> </P> <P><SPAN>There are </SPAN><SPAN>only </SPAN><SPAN>a few more days left in 2020 </SPAN><SPAN>but</SPAN><SPAN> w</SPAN><SPAN>e’</SPAN><SPAN>ve got a final surprise in store</SPAN><SPAN>—</SPAN><SPAN>keep follow</SPAN><SPAN>ing #DevDecember </SPAN><SPAN>to find out what it is.</SPAN><SPAN> </SPAN></P> <P><SPAN> <BR /></SPAN><SPAN>Missed </SPAN><SPAN>a day or a week</SPAN><SPAN>? Head over to our <STRONG><A href="https://aka.ms/DevDecember20Home" target="_self">#DevDecember homepage</A></STRONG></SPAN><SPAN>.</SPAN><SPAN> </SPAN></P> Fri, 08 Jan 2021 01:02:23 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-4-recap-looking-forward/ba-p/1834829 livelovegeek 2021-01-08T01:02:23Z #DevDecember Week 3 Recap: Inspiration https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-3-recap-inspiration/ba-p/1834828 <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Blog-images_week3.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235277iC313707F6EC166D2/image-size/large?v=v2&px=999" role="button" title="Blog-images_week3.png" alt="Blog-images_week3.png" /></span></SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">This week</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0"><SPAN> </SPAN>in #DevDecember</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">, we<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">had the hard job of selecting just a handful of sources of inspiration</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0"><SPAN> </SPAN>from a big grab bag of options</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">. </SPAN></SPAN><SPAN class="EOP SCXW26024580 BCX0"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_20_1.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237444i851F900A2219C0F2/image-size/medium?v=v2&px=400" role="button" title="Slide_20_1.png" alt="Slide_20_1.png" /></span><SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">You’ll find </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">out what we went for below, but there were so many other excitin</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">g things we could have featured, so </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">we hope you will </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">add the things you prized most this year</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">. </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">What projects </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">impressed </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">you</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">?</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0"> What tools </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">did you like using</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">? </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">Use our </SPAN></SPAN><SPAN class="TextRun Underlined SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">fill-in-the-blank</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0"> to s</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">hare </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">what motivated and propelled you on in 2020</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">, tagged </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">as #DevDecember. </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">Thanks in advance for the inspiration.</SPAN></SPAN><SPAN class="EOP SCXW154441543 BCX0"> </SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW224080501 BCX0"><SPAN class="NormalTextRun SCXW224080501 BCX0">Now, let’s review what<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW224080501 BCX0"><SPAN class="NormalTextRun SCXW224080501 BCX0">we featured in week 3</SPAN></SPAN><SPAN class="TextRun SCXW224080501 BCX0"><SPAN class="NormalTextRun SCXW224080501 BCX0">:</SPAN></SPAN><SPAN class="EOP SCXW224080501 BCX0"> </SPAN></P> <P><STRONG><SPAN>IoT</SPAN></STRONG><STRONG><SPAN> and Azure h</SPAN></STRONG><STRONG><SPAN>elp </SPAN></STRONG><STRONG><SPAN>w</SPAN></STRONG><STRONG><SPAN>ith </SPAN></STRONG><STRONG><SPAN>f</SPAN></STRONG><STRONG><SPAN>amily </SPAN></STRONG><STRONG><SPAN>c</SPAN></STRONG><STRONG><SPAN>hores </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW113139885 BCX0"><SPAN class="NormalTextRun SCXW113139885 BCX0">With everyone at home, dishes pile up faster, garbage accumulates, and chores must be done more frequently. To keep track in real time what<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW113139885 BCX0">chores</SPAN><SPAN class="NormalTextRun SCXW113139885 BCX0"><SPAN> </SPAN>need to be completed and<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW113139885 BCX0"><SPAN class="NormalTextRun SCXW113139885 BCX0">by<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW113139885 BCX0"><SPAN class="NormalTextRun SCXW113139885 BCX0">when, Scott Hanselman built an IoT solution, using sensors, a web-based heatmap, and notifications. </SPAN></SPAN><SPAN class="EOP SCXW113139885 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured9" target="_self"><SPAN>Check out how to build Chores </SPAN><SPAN>IoT</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>The Developer Activity Book </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">Taking your mind of</SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">f</SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0"><SPAN> </SPAN>what you’re working on is sometimes the best way to get inspiration. The Developer Activity Book features<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">family-friendly fun, including<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">seven<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">coloring pages, a crossword puzzle, a word search, and a logic puzzle. </SPAN></SPAN><SPAN class="EOP SCXW123811758 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured10" target="_self"><SPAN>Get the Developer Activity Book</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>2020 Imag</SPAN></STRONG><STRONG><SPAN>ine Cup World Championship</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">The Imagine Cup<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">World Championship encourages</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN>students across the globe to innovate using Microsoft Azure. Finalist teams created tech</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">nological</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN>solutions<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">tackl</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">e</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN>pressing global issues</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">Get inspired by</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">their passion<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">and<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">the incredible projects they created</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW118449384 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured11" target="_self"><SPAN>Watch the recap</SPAN></A><SPAN> (3 minutes)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Plastic Origins Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">Most of the plastic that ends up in the oceans comes from inland sources. In this episode of<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW132318438 BCX0">CodeStories</SPAN><SPAN class="NormalTextRun SCXW132318438 BCX0">,<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">Seth Juarez</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0"><SPAN> </SPAN>shows how<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">developers<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">can use AI to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">address th</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">is</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0"><SPAN> </SPAN>problem by monitoring<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">microplastic and tracking<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">ocean</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">-</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">bound</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0"><SPAN> </SPAN>plastic waste.</SPAN></SPAN><SPAN class="EOP SCXW132318438 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured12" target="_self"><SPAN>Watch the video</SPAN></A><SPAN> (13 minutes)</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">Next </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">up is </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">week 4 of</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> #DevDecember</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">. We’ll cover</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> one of our favorite topics: </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">the</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> projects and</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">technologies</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">we’re most </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">look</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">ing</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> forward to</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">in 2021.</SPAN></SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">Meanwhile, w</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">e’re<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">hoping you’ll upload a</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>#DevWithABev selfie</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>if you haven’t already</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">What’s this about? Simply put,<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW60259339 BCX0">devs</SPAN><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>take a picture of themselves with a<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW60259339 BCX0">bev</SPAN><SPAN class="NormalTextRun SCXW60259339 BCX0">. Hot or cold, commonplace or original, we like it all. Share<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">and</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>tag your pic<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">#DevWithABev.</SPAN></SPAN><SPAN class="EOP SCXW60259339 BCX0"> </SPAN></P> <P> </P> <P><SPAN>Missed some </SPAN><SPAN>or all </SPAN><SPAN>of</SPAN><SPAN> </SPAN><SPAN>#</SPAN><SPAN>DevDecember</SPAN><SPAN>? Catch up on </SPAN><STRONG><A href="https://aka.ms/DevDecember20Home" target="_self">our #DevDecember homepage</A> </STRONG><SPAN>for more info! </SPAN></P> Fri, 01 Jan 2021 10:05:48 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-3-recap-inspiration/ba-p/1834828 livelovegeek 2021-01-01T10:05:48Z Migrating Azure AD B2C integration going from .NET Core 3.1 to .NET 5 https://techcommunity.microsoft.com/t5/azure-developer-community-blog/migrating-azure-ad-b2c-integration-going-from-net-core-3-1-to/ba-p/1983575 <P>This year's release of .NET happened a few weeks ago with .NET 5. (Core is gone from the name now.) I have some sample code that works as sort of a boilerplate to verify basic functionality without containing anything fancy. One of those is a web app where one can sign in through Azure AD B2C. Logically I went ahead and updated from .NET Core 3.1 to .NET 5 to see if everything still works.</P><P> </P><P>It works, but there are recommendations that you should put in some extra effort as the current NuGet packages are on their way to deprecation. Not like "will stop working in two weeks", but might as well tackle it now.</P><P> </P><P>The Microsoft Identity platform has received an overhaul in parallel to .NET and a little while before the .NET 5 release the Identity team released <EM>Microsoft.Identity.Web</EM> packages for handling auth in web apps. (Not just for Azure AD B2C, but identity in general.)</P><P> </P><P>Why is this upgrade necessary? Well, the old libraries were based on the Azure AD v1 endpoints, but these new libraries fully support the v2 endpoints. Which is great when going for full compliance with the OAuth and OpenID Connect protocols.</P><P> </P><P>Using my sample at <A href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/aad-b2c-custom_policies-dotnet-core" target="_blank" rel="noopener">https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/aad-b2c-custom_policies-dotnet-core</A> I wanted to do a test run from old to new.</P><P> </P><P>The current code is using <EM>Microsoft.AspNetCore.Authentication.AzureADB2C.UI</EM>. (You can take a look at the code for the <A title="Upgraded to .NET 5" href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/b6d8def3dcf8c46e38a9419a9dc88d5eb327501b/aad-b2c-custom_policies-dotnet-core" target="_blank" rel="noopener">Upgraded to .NET 5</A> checkpoint for reference.)</P><P> </P><P>You can start by using NuGet to download the latest version of <EM>Microsoft.Identity.Web</EM> and <EM>Microsoft.Identity.Web.UI</EM>. (1.4.0 when I'm typing this.) You can also remove <SPAN><EM>Microsoft.AspNetCore.Authentication.AzureADB2C.UI</EM> while you're at it.</SPAN></P><P> </P><P>In <EM>Startup.cs</EM> you should make the following changes:</P><P>Replace</P><P> </P><LI-CODE lang="csharp">services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme) .AddAzureADB2C(options => Configuration.Bind("AzureADB2C", options)).AddCookie();</LI-CODE><P> </P><P>With</P><P> </P><LI-CODE lang="csharp">services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureADB2C"));</LI-CODE><P> </P><P> </P><P>And change</P><P> </P><LI-CODE lang="csharp">services.AddRazorPages(); </LI-CODE><P> </P><P>To</P><P> </P><LI-CODE lang="csharp">services.AddRazorPages().AddMicrosoftIdentityUI();</LI-CODE><P> </P><P> </P><P><SPAN>If you have been doing "classic"</SPAN><SPAN> Azure AD apps you will notice how B2E and B2C are now almost identical. Seeing how they both follow the same set of standards this makes sense. As well as making it easier for .NET devs to support both internal and external facing authentication.</SPAN></P><P> </P><P>B2C has some extra logic in the sense that the different policies drive you to different endpoints, so the UI has to have awareness of this. And you need to modify a few things in the views.</P><P> </P><P>In <EM>LoginPartial.cshtml</EM>:</P><P>Change</P><P> </P><LI-CODE lang="csharp">@using Microsoft.AspNetCore.Authentication.AzureADB2C.UI @using Microsoft.Extensions.Options @inject IOptionsMonitor<AzureADB2COptions> AzureADB2COptions @{ var options = AzureADB2COptions.Get(AzureADB2CDefaults.AuthenticationScheme); }</LI-CODE><P> </P><P>To</P><P> </P><LI-CODE lang="csharp">@using Microsoft.Extensions.Options @using Microsoft.Identity.Web @inject IOptions<MicrosoftIdentityOptions> AzureADB2COptions @{ var options = AzureADB2COptions.Value; }</LI-CODE><P> </P><P> </P><P>And change the asp-area in links from using AzureADB2C:</P><P> </P><LI-CODE lang="csharp"><a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignOut">Sign out</a></LI-CODE><P> </P><P>To using MicrosoftIdentity:</P><P> </P><LI-CODE lang="csharp"><a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a></LI-CODE><P> </P><P> </P><P> </P><P> </P><P>And that's all there is to it :)</img></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Azure AD B2C SignUp" style="width: 241px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/240107i07730500C0838E23/image-size/medium?v=v2&px=400" role="button" title="SignUp.png" alt="Azure AD B2C SignUp" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Azure AD B2C SignUp</span></span></P><P> </P><P> </P><P>Now this is a fairly stripped down sample app without the complexity of a real world app, but this was a rather pain free procedure for changing the identity engine in a web app.</P><P> </P> Mon, 14 Dec 2020 17:00:00 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/migrating-azure-ad-b2c-integration-going-from-net-core-3-1-to/ba-p/1983575 Andreas Helland 2020-12-14T17:00:00Z #DevDecember Week 2 Recap: Community https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-2-recap-community/ba-p/1834827 <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week2.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234746i32908191DA073641/image-size/large?v=v2&px=999" role="button" title="Blog-images_week2.png" alt="Blog-images_week2.png" /></span></SPAN></P> <P><SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">When you're starting a </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">new dev </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">project or </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">tackling</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">coding problems</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">, </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">it helps</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">t</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">o build on the knowledge of others. In 2020 especially, </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">a helping hand </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">was</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">more than welcome</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">!</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="EOP SCXW168876321 BCX0"> </SPAN> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_18_1_Recap.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235806iCC2C65DAD6A12398/image-size/medium?v=v2&px=400" role="button" title="Slide_18_1_Recap.png" alt="Slide_18_1_Recap.png" /></span><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW95868378 BCX0 DefaultHighlightTransition">So</SPAN><SPAN class="NormalTextRun SCXW95868378 BCX0"><SPAN> </SPAN>i</SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">n our second week of #DevDecember, we<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">are taking<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">some time to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">celebrate the efforts of<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">the</SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">dev community.</SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0"> </SPAN></SPAN><SPAN class="EOP SCXW95868378 BCX0"> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">We’d love to hear how the dev community came through for you in 2020.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">Did you</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>get assistance</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>learn</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">ing</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>a new language</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">?</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>Did someone else inspire you</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">r project</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">?</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">Share your version of</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>this week’s fill-</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">in-</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">the-</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">blank<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">and tag your thoughts as #DevDecember. </SPAN></SPAN><SPAN class="EOP SCXW51787313 BCX0"> </SPAN></P> <P> </P> <P>Now, let's review this week’s highlights: </P> <P><STRONG><SPAN>L</SPAN></STRONG><STRONG><SPAN>ive </SPAN></STRONG><STRONG><SPAN>coding c</SPAN></STRONG><STRONG><SPAN>ommunity</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Learn from the best on Twitch</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">!</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Watch </SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW1136063">devs</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> code </SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 BCX0 SCXW1136063">live, </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 BCX0 SCXW1136063">and</SPAN><SPAN class="NormalTextRun BCX0 SCXW1136063"> connect and </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">ask questions</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> in real</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">time</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">. Find out how</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> joining</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Microsoft’s </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">virtual communit</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">y</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> can speed up </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">learning new skills and languages.</SPAN></SPAN><SPAN class="LineBreakBlob BlobObject DragDrop BCX0 SCXW1136063"><SPAN class="BCX0 SCXW1136063"> </SPAN><BR /></SPAN><A href="https://aka.ms/DevEdCalDec20featured6" target="_blank" rel="noopener noreferrer"><SPAN class="TextRun Underlined BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Watch an intro video on Twitch and live coding</SPAN></SPAN></A><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> (25 min)</SPAN></SPAN></SPAN></P> <P> </P> <P><STRONG><SPAN>The ReadMe Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Behind the </SPAN><SPAN>open</SPAN><SPAN>-</SPAN><SPAN>source code used by millions of people are the unseen efforts of </SPAN><SPAN>countless </SPAN><SPAN>contributors</SPAN><SPAN>, who </SPAN><SPAN>put in long hours to build software, fix issues, and more. </SPAN><SPAN>Meet</SPAN><SPAN> some of the </SPAN><SPAN>people making contributions, including veterans</SPAN><SPAN> who find the teamwork required for open source collaboration </SPAN><SPAN>a natural fit</SPAN><SPAN>.</SPAN><SPAN> </SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured5" target="_blank" rel="noopener"><SPAN>Read their inspiring stories</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Remote collaboration </SPAN></STRONG><STRONG><SPAN>with Live Share in</SPAN></STRONG><STRONG><SPAN> </SPAN></STRONG><STRONG><SPAN>Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>With Live Share</SPAN><SPAN>,</SPAN><SPAN> you can instantly share your project with fellow dev</SPAN><SPAN>eloper</SPAN><SPAN>s. No need to clone a repo or set up the environment</SPAN><SPAN>.</SPAN><SPAN> </SPAN><SPAN>It’s a one-stop, r</SPAN><SPAN>eal-time collaboration </SPAN><SPAN>tool</SPAN><SPAN> </SPAN><SPAN>for pairing, code reviews, technical interviews, boot</SPAN><SPAN> </SPAN><SPAN>camps</SPAN><SPAN>,</SPAN><SPAN> and more</SPAN><SPAN>.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured7" target="_self">Watch a short video on how to set up Live Share</A><SPAN> </SPAN><SPAN>(5 min)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>From the </SPAN></STRONG><STRONG><SPAN>open source</SPAN></STRONG><STRONG><SPAN> kitchen</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Cooking up code is a bit like developing food recipes. The more people </SPAN><SPAN>who </SPAN><SPAN>test your recipe, the more it's likely to guarantee that what lands on your plate is what you intended.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured8" target="_blank" rel="noopener"><SPAN>Browse our crowdsourced cookbook with free code recipes</SPAN></A><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>Before we call it a wrap, d<SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">on’t forget to check in with #DevWithABev</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">,</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0"> developer-with-a-beverage </SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">selfies</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">. Add to the collection with a pic</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">of yourself and a favorite holiday </SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW254978929 BCX0">beverage</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW254978929 BCX0">,</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW254978929 BCX0"> and</SPAN><SPAN class="NormalTextRun SCXW254978929 BCX0"> tag it #DevWithABev.</SPAN></SPAN><SPAN class="EOP SCXW254978929 BCX0"> </SPAN></SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">Next week, we’ll talk about<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">what inspired us in 2020</SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">Keep following #</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW73902411 BCX0">DevDecember</SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW73902411 BCX0">,<SPAN> and <STRONG>c</STRONG></SPAN></SPAN></SPAN><STRONG>heck out <A href="https://aka.ms/DevDecember20Home" target="_self"><U>our homepage</U></A></STRONG><STRONG> for more info! </STRONG></P> Fri, 01 Jan 2021 10:05:58 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-2-recap-community/ba-p/1834827 livelovegeek 2021-01-01T10:05:58Z What's New in Logic Apps https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-s-new-in-logic-apps/ba-p/1969149 <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">We <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-logic-apps-runtime-performance-and-developer-improvements/ba-p/1645335" target="_self">announced</A> public preview of the new Logic Apps runtime, performance and developer improvements in September, 2020. Today, we are happy to announce the availability of a major update that continue to extend the capability of Logic Apps. You can find the highlights about this release below.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Breakpoint Debugging</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">You've been asking about better debugging support, and it is now available with the new runtime. When running Logic Apps locally, it's possible to set breakpoint before and after an action, and examine the input and output during workflow executions.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MicrosoftTeams-image (3).png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/238874iACF1DFB734BBB8B3/image-size/large?v=v2&px=999" role="button" title="MicrosoftTeams-image (3).png" alt="MicrosoftTeams-image (3).png" /></span></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>New Layout Engine for Designer</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">Since the initial release of Logic Apps, we see customers' implementation grow in complexity: more actions, parallel branches, extensive use of control flows and advanced configurations. After the visual refresh for the workflow designer we recently released, we decided it's time to update the layout engine to better render more complex workflows. This refresh includes only the initial work to move to a new layout engine, more improvements will come in the coming months.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screen Shot 2020-12-08 at 3.12.07 PM.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/238878i88FCFA6B7C160CFB/image-size/large?v=v2&px=999" role="button" title="Screen Shot 2020-12-08 at 3.12.07 PM.png" alt="Screen Shot 2020-12-08 at 3.12.07 PM.png" /></span></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Custom Connector Extension</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">Custom connector allows you to easily connect to systems outside of the 400+ connectors available out-of-box. With the new runtime, you can now write codeful custom connector extensions. This new approach of creating custom connectors means it runs same process as the Logic App runtime, which results in higher throughput, low latency, and local connectivity. You can learn more about this capability <A href="https://techcommunity.microsoft.com/t5/integrations-on-azure/azure-logic-apps-running-anywhere-built-in-connector/ba-p/1921272" target="_self">here</A>.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Integration Account Support</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">Many of the Integration Account capabilities are now built-in. You can upload maps and schemas directly to the new Logic Apps resource, and perform XML validation, transformation, and Liquid operations without needing an Integration Account.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Cross Platform</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">With this release, you can develop and test Logic Apps locally using VS Code on macOS and Linux, and deploy Logic Apps to Linux container runtime as well as Kubernetes.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">I want to take this opportunity to thank you for continued support and feedback as we work to<SPAN>wards General Availability. </SPAN><SPAN style="font-family: inherit;">We can't wait for you to try it out and hear what you think.</SPAN></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><SPAN style="font-family: inherit;">To get started, install/update the </SPAN><A style="font-family: inherit; background-color: #ffffff;" href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps" target="_self">VS Code extension</A><SPAN style="font-family: inherit;"> and create a local project, or create a new resource from the </SPAN><A style="font-family: inherit; background-color: #ffffff;" href="https://portal.azure.com/" target="_self">Azure Portal</A><SPAN style="font-family: inherit;">. You can submit your feedback </SPAN><A style="font-family: inherit; background-color: #ffffff;" href="http://aka.ms/lafeedback" target="_self">here</A><SPAN style="font-family: inherit;">.</SPAN></DIV> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">- Derek, on behalf of the entire Logic Apps Team</DIV> Wed, 09 Dec 2020 23:11:08 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-s-new-in-logic-apps/ba-p/1969149 derek1ee 2020-12-09T23:11:08Z Azure Advocate Weekly Round Up - Holidays are almost here! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-holidays-are-almost-here/ba-p/1957205 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sarah_Banner.jpg" style="width: 622px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/238529iD80348C30134D075/image-dimensions/622x207?v=v2" width="622" height="207" role="button" title="Sarah_Banner.jpg" alt="Sarah_Banner.jpg" /></span></P> <P><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Sarah is a Cloud Advocate for Microsoft. In this Discover STEM video Sarah talks about cloud computing, including explaining the basic principles behind the technology, using terms like servers, data centres and computing power. She provides some advantages and disadvantages of using the technology and also provide examples for how industry might use cloud technology in the future. </P> <P> </P> <P><A href="https://css-tricks.com/a-gentle-introduction-to-using-a-docker-container-as-a-dev-environment/" target="_blank" rel="noopener">A Gentle Introduction to Using a Docker Container as a Dev Environment | CSS-Tricks</A><BR /><STRONG><I><A href="https://twitter.com/burkeholland" target="_blank" rel="noopener">Burke Holland</A></I></STRONG></P> <P>Sarcasm disclaimer: This article is mostly sarcasm. I do not think that I actually speak for Dylan Thomas and I would never encourage you to foist a light</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/green-energy-efficient-progressive-web-apps/?WT.ms_id=green-8967-cxa&WT.mc_id=green-8967-ashussai" target="_blank" rel="noopener">Green Energy Efficient Progressive Web Apps | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank" rel="noopener">Asim Hussain</A></I></STRONG></P> <P>As a web developer, can we adjust our code to participate in the global effort to reduce the carbon footprint? PWAs offer some solutions</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=1iZxhtxSDu0" target="_blank" rel="noopener">How to Monitor an Azure virtual machine with Azure Monitor</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Here is how to use Azure Monitor to collect and analyze monitoring data from Azure virtual machines to maintain their health. Virtual machines can be monitor...</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/working-with-git-branches/ba-p/1900867?WT.mc_id=modinfra-10949-salean" target="_blank" rel="noopener">Working with Git Branches!</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Let's get to grips with Git Branches</P> <P> </P> <P><A href="https://acloudguru.com/blog/engineering/5-things-you-should-know-about-real-time-analytics" target="_blank" rel="noopener">5 things you should know about Real-Time Analytics | A Cloud Guru</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>Running analytics on real-time data is a challenge many data engineers are facing today. But not all analytics can be done in real time! Many are dependent on the volume of the data and the processing requirements. Even logic conditions are becoming a bottleneck. For example, think about join operations on huge tables with more […]</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-azure-portal-updates-arm-template-support-for-file/ba-p/1934750?WT.mc_id=modinfra-11135-abartolo" target="_blank" rel="noopener">AzUpdate: Azure portal updates, ARM Template support for file share backup and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>It might be snowing in parts of the Northern Hemisphere, but we won't let that stop us from sharing Azure news with you. News covered this week includes: New Azure Portal updates for November 2020, Azure Resource Manager template support for Azure file share backup, How to use Windows Admin Center on-premises to manage Azure Windows Server VMs, Multiple new features for Azure VPN Gateway now Generally Available, and our Microsoft Learn Module of the Week.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/hybrid-management-where-do-i-start/ba-p/1943535?WT.mc_id=modinfra-11216-pierrer" target="_blank" rel="noopener">Hybrid management. Where do I start?</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank" rel="noopener">Pierre Roman</A></I></STRONG></P> <P>Managing & maintaining servers on-premises or in multiple clouds, as well as Azure? Learn about management tools for your servers wherever they are. </P> <P> </P> <P><A href="https://dev.to/azure/visualizeit-a-free-online-series-of-workshops-to-build-your-visual-storytelling-skills-d2b" target="_blank" rel="noopener">#VisualizeIT: A free online series of workshops to build your visual storytelling skills!</A><BR /><STRONG><I>Nitya Narasimhan</I></STRONG></P> <P>#VisualizeIT is a free online series of workshops for creative technologists, from @MSFTReactor, @azureadvocates and members of the @letssketchtech community. </P> <P> </P> <P><A href="https://blog.mastykarz.nl/handle-app-button-events-microsoft-teams-tabs/" target="_blank" rel="noopener">Handle app button events in Microsoft Teams tabs</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Did you know that you can respond to user clicking on the app button of your Microsoft Teams personal app?</P> <P> </P> <P><A href="https://youtu.be/qAIdFJC1SI8" target="_blank" rel="noopener">Weekly Update #67 - Rebuilding laptops, filming videos and news!</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>In this week's update I talk about rebuilding my laptop, talking at a user group, filming videos and the Azure news of the week. :red_circle:</img> Azure Cloud Shell Update -...</P> <P><LI-VIDEO vid="https://youtu.be/qAIdFJC1SI8" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://dev.to/azure/join-us-for-data-week-44il" target="_blank" rel="noopener">Picking the Right Distributed Database [Create: Data]</A><BR /><STRONG><I><A href="https://twitter.com/abhi_tweeter" target="_blank" rel="noopener">Abhishek Gupta</A></I></STRONG></P> <P>"In God we trust, all others must bring data" William Edwards Deming Well...</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/securing-a-windows-server-vm-in-azure/ba-p/1939268?WT.mc_id=modinfra-11348-socuff" target="_blank" rel="noopener">Securing a Windows Server VM in Azure</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>If you've built and managed Windows Servers in an on-premises environment, you may have a set of configuration steps as well as regular process and monitoring alerts, to ensure that server is as secure as possible. But if you run a Windows Server VM in Azure, apart from not having to manage the physical security of the underlying compute hardware, what on-premises concepts still apply, what may you need to alter and what capabilities of Azure should you include?</P> <P> </P> <P><A href="https://developer.microsoft.com/sharepoint/blogs/cli-microsoft-365-3-3/?WT.mc_id=m365-11349-wmastyka" target="_blank" rel="noopener">CLI for Microsoft 365 v3.3 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://developer.microsoft.com/microsoft-365/blogs/microsoft-365-pnp-weekly-episode-107/?WT.mc_id=m365-11360-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 107 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://towardsdatascience.com/what-is-serverless-sql-and-how-to-use-it-for-data-exploration-eadad1f1a036" target="_blank" rel="noopener">What is Serverless SQL? And how to use it for Data Exploration | by Adi Polak | Dec, 2020 | Towards Data Science</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>So, you are a data scientist, you work with data and need to explore it and run some analytics on the data before jumping into running extensive machine learning algorithms. According to Wikipedia…</P> <P> </P> <P><A href="https://youtu.be/b0APzGlBWMA" target="_blank" rel="noopener">Terraform for Java developers, part 1 of 4</A><BR /><STRONG><I><A href="https://twitter.com/juliendubois" target="_blank" rel="noopener">Julien Dubois</A></I></STRONG></P> <P>An introduction to Terraform focusing on Java developers. In this first video (out of 4), we describe what Terraform is, and we fork the Spring Petclinic pro...</P> <P><LI-VIDEO vid="https://youtu.be/b0APzGlBWMA" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> Tue, 08 Dec 2020 01:32:28 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-holidays-are-almost-here/ba-p/1957205 spboyer 2020-12-08T01:32:28Z What I plan to learn at the Learn Together: Dev Apps for Teams event https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-i-plan-to-learn-at-the-learn-together-dev-apps-for-teams/ba-p/1955137 <P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Learntogether.PNG" style="width: 945px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237657i6189DD8201CF5082/image-size/large?v=v2&px=999" role="button" title="Learntogether.PNG" alt="Learntogether.PNG" /></span></STRONG></P> <P> </P> <P><SPAN><A href="https://aka.ms/learntogether" target="_self">Learn Together: Dev Apps for Teams</A> is happening on Dec 16 and it will be more of a conversation-style event. Make sure to </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Faka.ms%2Flearntogether&data=04%7C01%7CNina.Sui%40microsoft.com%7C0cf904fb05324a3daf3c08d885b031b2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637406339079067525%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=162wBy7uc%2BV36wBMKFUxI%2Fk7RQWwSRrl%2FFxLj8oFKdg%3D&reserved=0" target="_blank" rel="noopener"><SPAN>set your reminders</SPAN></A><SPAN> to attend! </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>These conversations are specially curated for developers (by developers) around the opportunities and reasons to build apps for Teams. </SPAN><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>So what are we most excited to learn in the two hours?</SPAN><SPAN> </SPAN></P> <OL> <LI><SPAN><EM>Understand Teams Apps</EM></SPAN><SPAN> Learn the key concepts and terms necessary to build apps for Teams. Expand on the messaging, Tab app, extensions, Bots, and more. Learn to speak the language!</SPAN><SPAN> </SPAN></LI> <LI><SPAN><EM>“Hello, world! for Teams</EM></SPAN><SPAN> Getting started with Teams app development is as easy as click, click, hello world! Learn to build apps for Teams in minutes with the Teams Toolkit Visual Studio Code extension.</SPAN><SPAN> </SPAN></LI> <LI><SPAN><EM>Make your app part of your user’s day.</EM></SPAN><SPAN> Enhance the usability of your application by integrating messaging and meeting extensions, adaptive cards, and more.</SPAN><SPAN> </SPAN></LI> </OL> <P> </P> <P><SPAN>The event is closely tied around the Teams App Dev Learning Path and there will even be a Teams Dev Challenge for those that want to win prizes and put their skills to the test.</SPAN><SPAN> </SPAN></P> <P> </P> <P><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Faka.ms%2Flearntogether&data=04%7C01%7CNina.Sui%40microsoft.com%7C0cf904fb05324a3daf3c08d885b031b2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637406339079067525%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=162wBy7uc%2BV36wBMKFUxI%2Fk7RQWwSRrl%2FFxLj8oFKdg%3D&reserved=0" target="_blank" rel="noopener"><SPAN>Join us</SPAN></A><SPAN> live or stream on-demand and we are excited to #learntogether!</SPAN><SPAN> See you there! </SPAN></P> <P> </P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=SyTbx94m1T4&feature=youtu.be" align="center" size="large" width="600" height="338" uploading="false" thumbnail="https://i.ytimg.com/vi/SyTbx94m1T4/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P> </P> Fri, 04 Dec 2020 07:14:58 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-i-plan-to-learn-at-the-learn-together-dev-apps-for-teams/ba-p/1955137 NinaSui 2020-12-04T07:14:58Z #DevDecember Week 1 Recap: Growth https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-1-recap-growth/ba-p/1834826 <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week1.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233216i7C519C8A7680456B/image-size/large?v=v2&px=999" role="button" title="Blog-images_week1.png" alt="Blog-images_week1.png" /></span></SPAN></P><P><SPAN>In 2020, developers (along with the rest of the world) we</SPAN><SPAN>re challenged like never before, but the traits of determination and persistence describe practically every dev. I mean, honestly, you can't code without them - like when you get an error and realize you forgot a ";" somewhere and are scrolling through your IDE for dayyyssss - <EM>sigh</EM>.</SPAN></P><P> </P><P><SPAN>So, to get our first week of #</SPAN><SPAN>DevDecember off</SPAN><SPAN> to a running start, we highlighted </SPAN><SPAN>how resourceful </SPAN><SPAN>developers </SPAN><SPAN>proved</SPAN><SPAN> to be</SPAN><SPAN> in</SPAN><SPAN> overcom</SPAN><SPAN>ing</SPAN><SPAN> unexpected circumstances</SPAN><SPAN>.</SPAN><SPAN> Throughout the week we've shared various pieces of content that highlight this growth and determination.</SPAN></P><P> </P><P><SPAN>But, before we get to recapping those, we wanted to highlight a few fun things that we are doing in #DevDecember this year:</SPAN></P><P> </P><P><FONT size="4"><STRONG>Reflect with our fun fill-in-the-blank</STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_9_1.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234263i7AE01217E5F676AD/image-size/medium?v=v2&px=400" role="button" title="Slide_9_1.png" alt="Slide_9_1.png" /></span></P><P><SPAN>So much of getting through the y</SPAN><SPAN>ear was about bridging gaps, so we thought a fill-in-the-blank would be the best way to review some of the ways you became more skilled and resilient as a dev.<FONT color="#FF0000"> </FONT></SPAN><SPAN><A href="https://aka.ms/DevDecember20Home" target="_self">Check out the template</A>, fill it in, tag it as #</SPAN><SPAN>DevDecember</SPAN><SPAN>, and share </SPAN><SPAN>what you got done</SPAN><SPAN> and how. </SPAN><SPAN> </SPAN></P><P> </P><P> </P><P><STRONG><FONT size="4">#DevWithABev fun on social</FONT></STRONG></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Devwithbev_Selfie.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234756i32340B61B2F92127/image-size/medium?v=v2&px=400" role="button" title="Devwithbev_Selfie.png" alt="Devwithbev_Selfie.png" /></span>Before we recap, we should also mention #DevWithABev, a growing collection of developer-with-a-beverage selfies. Check out everyone's favorite winter beverage, and add your own personal flavor by taking a snapshot of yourself with yours and tagging it #DevWithABev. It’s 2020 and we could all use some friendly faces.</SPAN></P><P> </P><P> </P><P><FONT color="#333333">Now,</FONT><FONT color="#333333"> let's recap what we highlighted this week: </FONT></P><P> </P><P><FONT color="#000000"><STRONG>Beginner's series to JavaScript </STRONG></FONT></P><P>Taking your first steps toward mastering a new programming language is exciting, but it can also feel overwhelming. To help you get started with JavaScript, we've created short and easy-to-consume videos that break down the key concepts you need to know.</P><P><A href="https://aka.ms/DevEdCalDec20featured1" target="_blank" rel="noopener">Start watching the series</A></P><P> </P><P><FONT color="#000000"><STRONG>Agrotech IoT workshop</STRONG></FONT></P><P>Want to grow your professional IoT skills? Your first stop may be the garden. Get your hands dirty with a workshop on how to build an internet-connected device to gather soil moisture data that will tell you (by lighting up an LED) if a plant needs watering.</P><P><A href="https://aka.ms/DevEdCalDec20featured3" target="_blank" rel="noopener">Start digging in</A></P><P> </P><P><FONT color="#000000"><STRONG>Bringing browser developer tools to Visual Studio Code</STRONG></FONT></P><P>One of our favorite releases in 2020 was the Microsoft Edge Tools for VS Code extension, designed to simplify workflows. Connect to an existing browser instance, start a new one, or use a “headless” browser.</P><P><A href="https://aka.ms/DevEdCalDec20featured4" target="_blank" rel="noopener">Explore the extension</A></P><P> </P><P><FONT color="#000000"><STRONG>Building a first "Power Apps" app</STRONG></FONT></P><P>@JoeCamp13 built an app to track inventory entirely with Power Apps. His explanation of how he did it, is illustrated with screenshots so you can follow along.</P><P><A href="https://aka.ms/DevEdCalDec20featured2" target="_blank" rel="noopener">Start the walkthrough</A></P><P> </P><P><SPAN>Next week, we’ll talk about </SPAN><SPAN>some of</SPAN><SPAN> the ways the dev community </SPAN><SPAN>came together</SPAN><SPAN> </SPAN><SPAN>in 202</SPAN><SPAN>0</SPAN><SPAN>. </SPAN><SPAN>Keep following #</SPAN><SPAN>DevDecember</SPAN><SPAN> for daily updates</SPAN><SPAN> and affirmations of awesomeness</SPAN><SPAN>. </SPAN><SPAN> </SPAN></P><P> </P><P><SPAN>Not sure what </SPAN><SPAN>#</SPAN><SPAN>DevDecember</SPAN><SPAN> is all about</SPAN><SPAN>?<STRONG> Check out <A href="https://aka.ms/DevDecember20Home" target="_self">our homepage</A></STRONG></SPAN><STRONG> for more info! </STRONG></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="slide_20_Gif.gif" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237645i41AE169BA69EC86A/image-size/medium?v=v2&px=400" role="button" title="slide_20_Gif.gif" alt="slide_20_Gif.gif" /></span></P> Sat, 05 Dec 2020 00:16:45 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-1-recap-growth/ba-p/1834826 livelovegeek 2020-12-05T00:16:45Z Now That's What I Call .NET 5 on #Dev_Jams https://techcommunity.microsoft.com/t5/azure-developer-community-blog/now-that-s-what-i-call-net-5-on-dev-jams/ba-p/1942727 <P><SPAN data-contrast="auto"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_1.jpg" style="width: 292px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236772iBCD07BFAE035990A/image-dimensions/292x292?v=v2" width="292" height="292" role="button" title="NOW! DotNET 5 Booklet1024_1.jpg" alt="NOW! DotNET 5 Booklet1024_1.jpg" /></span></SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Do you ever have trouble getting into the coding flow because you just can’t decide what music you want to jam to? </SPAN><SPAN data-contrast="auto">Well, we have just the playlist for you: <A href="https://aka.ms/DevJams" target="_self">Now That's What I Call .NET 5!</A> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">To help celebrate the release of .NET 5, I reached out to some .NET devs around the world and asked them about why they love .NET and what their favorite song to listen to while coding is. With that info, we created the <A href="https://aka.ms/DevJams" target="_self">#dev_jams playlist on Spotify</A> and created an album booklet with our featured tracks/devs! Check it out below and feel free to download it for yourself at the bottom of the page. </SPAN></P> <P> </P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_2.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236771i39E133E83CA7E19E/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_2.jpg" alt="NOW! DotNET 5 Booklet1024_2.jpg" /></span></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_3.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236774iFC245836709EF6BF/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_3.jpg" alt="NOW! DotNET 5 Booklet1024_3.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Scott Hanselman</STRONG> - <A href="https://twitter.com/shanselman" target="_self">@shanselman</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_4.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236775i1035CA1B041567D4/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_4.jpg" alt="NOW! DotNET 5 Booklet1024_4.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Amiee Lo</STRONG> - <A href="https://twitter.com/amiee_lo" target="_self">@amiee_lo</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_5.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236776iADC6E1A1C341C358/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_5.jpg" alt="NOW! DotNET 5 Booklet1024_5.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Torin Solarin-Sodara</STRONG> - <A href="https://twitter.com/tonerdo" target="_self">@tonerdo</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_6.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236777i1791F03E923EFDBC/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_6.jpg" alt="NOW! DotNET 5 Booklet1024_6.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Aida Crone</STRONG> - <A href="https://twitter.com/aidapsibr" target="_self">@aidapsibr</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_7.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236778i94A964E9EA2E7B20/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_7.jpg" alt="NOW! DotNET 5 Booklet1024_7.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Rodney Littles, II</STRONG> - <A href="https://twitter.com/rlittlesii" target="_self">@rlittiesii</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_8.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236779i7E86C416215E951A/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_8.jpg" alt="NOW! DotNET 5 Booklet1024_8.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Bron Thulke</STRONG> - <A href="https://twitter.com/_bron_" target="_self">@_bron_</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_9.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236780i9734174A5C2CBD81/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_9.jpg" alt="NOW! DotNET 5 Booklet1024_9.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Michael Dera</STRONG> - <A href="https://twitter.com/michaeldera" target="_self">@michaeldera</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_10.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236781iB95C2302CFB851C2/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_10.jpg" alt="NOW! DotNET 5 Booklet1024_10.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Mark Rendle</STRONG> - <A href="https://twitter.com/markrendle" target="_self">@markrendle</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_11.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236782i0444B80025B83FA0/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_11.jpg" alt="NOW! DotNET 5 Booklet1024_11.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Jeremy Sinclair</STRONG> - <A href="https://twitter.com/sinclairinat0r" target="_self">@sinclairinat0r</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_12.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236770i6D51F6EC78DA9415/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_12.jpg" alt="NOW! DotNET 5 Booklet1024_12.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Jayme Singleton</STRONG> - <A href="https://twitter.com/JaymeSingleton1" target="_self">@jaymesingleton1</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_13.jpg" style="width: 291px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236773i3CA5D651269D6656/image-dimensions/291x291?v=v2" width="291" height="291" role="button" title="NOW! DotNET 5 Booklet1024_13.jpg" alt="NOW! DotNET 5 Booklet1024_13.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">+ a special shout out to <STRONG>Marc Duiker</STRONG> (<A href="https://twitter.com/marcduiker" target="_self">@marcduiker</A>) for creating the amazing pixel art!</SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">What do you think of these featured tracks? Did we miss a song? Let us know your favorite song by using the hashtag #dev_jams on Twitter. Happy jamming!</SPAN></P> <P> </P> <P><EM>Also, just in case you missed it - you can download .NET 5 for Windows, macOS, and Linux <A href="https://dotnet.microsoft.com/download/dotnet/5.0" target="_blank" rel="noopener">here.</A> And although <A href="https://www.dotnetconf.net/" target="_blank" rel="noopener">.NET Conf 2020</A> has wrapped up, you can still catch all the <A href="https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVWop1HEOml2OdqbDs6IlcI" target="_blank" rel="noopener">sessions on demand</A> and get a head start on all the new features that were introduced with .NET 5!</EM></P> Mon, 30 Nov 2020 23:47:33 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/now-that-s-what-i-call-net-5-on-dev-jams/ba-p/1942727 livelovegeek 2020-11-30T23:47:33Z Azure Advocates Weekly Round Up - Scaling Events w/ Serverless, Cog Services, and DevOps Boards https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-scaling-events-w-serverless-cog/ba-p/1928458 <P><A href="https://youtu.be/Lg4B_H-t8fY" target="_blank" rel="noopener">XR Tea Party: BabylonJS & WebXR</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank" rel="noopener">Aysegul Yonet</A></I></STRONG></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/Lg4B_H-t8fY" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-cloud-assert/ba-p/1866840?WT.mc_id=modinfra-8958-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - Cloud Assert</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>This week, Tiberiu Radu (Azure Stack Hub PM) and I, had the chance to speak to Azure Stack Hub Partner Cloud Assert.</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/how-to-measure-the-power-consumption-of-your-frontend-application/?WT.mc_id=green-8991-ashussai" target="_blank" rel="noopener">How To Measure The Power Consumption of Your Frontend Application | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank" rel="noopener">Asim Hussain</A></I></STRONG></P> <P>The second principle of Sustainable Software Engineering is to build energy efficient applications. The very first step in that direction is to measure the energy your application consumes, also known as its energy cost. Once you measure or estimate the energy cost of your application,</P> <P> </P> <P><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Browse content tagged with "Cloud Adoption Framework Series" on Channel 9.</P> <P> </P> <P><A href="https://cloud-days.jfrog.com/microsoft-azure/" target="_blank" rel="noopener">DevOps Cloud Days, Day 3, Nov 18, 2020 - JFrog & Microsoft Azure</A><BR /><STRONG><I><A href="https://twitter.com/jldeen" target="_blank" rel="noopener">Jessica Deen</A></I></STRONG></P> <P>Join JFrog and Microsoft Azure to learn about integrations and future development. Secure your applications and modernize your business.</P> <P> </P> <P><A href="https://dev.to/lazerwalker/scaling-an-online-virtual-world-with-serverless-tech-4pfo" target="_blank" rel="noopener">Scaling an Online Virtual World with Serverless Tech</A><BR /><STRONG><I><A href="https://twitter.com/lazerwalker" target="_blank" rel="noopener">Em Lazer-Walker</A></I></STRONG></P> <P>I help run an annual game design conference called Roguelike Celebration. Naturally, this year we wer...</P> <P> </P> <P><A href="http://aka.ms/datadog-azureiot" target="_blank" rel="noopener">Monitoring IoT systems from edge to cloud with Datadog</A><BR /><STRONG><I><A href="https://twitter.com/pjdecarlo" target="_blank" rel="noopener">Paul DeCarlo</A></I></STRONG></P> <P>Microsoft Azure has a strong and active partnership with Datadog , the leading cloud-based monitoring and observability platform. Recently, Datadog and</P> <P> </P> <P><A href="https://aka.ms/staticWebAppPRWorkflowForAppServicePt2" target="_blank" rel="noopener">Static Web App PR Workflow for Azure App Service using Azure DevOps Pt 2 (But what if my code is in GitHub) | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/AbelSquidHead" target="_blank" rel="noopener">Abel Wang</A></I></STRONG></P> <P>Static Web App PR Workflow for Azure App Service using Azure DevOps Pt 2 (But what if my code is in GitHub) In part 1 (Static Web App PR Workflow for Azure App Service), I walked you you through how to set up that sweet pull request workflow for Static Web Apps for your app if your app was: hosted in Azure App Service your code in Azure Repos your CI pipeline in Azure Pipelines.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-devops-boards-and-excel/ba-p/1850371?WT.mc_id=modinfra-10509-salean" target="_blank" rel="noopener">Azure DevOps Boards and Excel!</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Use Excel to help manage your Azure DevOps Board items!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-new-priority-account-capabilities-in-microsoft-365/ba-p/1908148?WT.mc_id=modinfra-10527-abartolo" target="_blank" rel="noopener">AzUpdate: New Priority Account capabilities in Microsoft 365, Bastion and Vnet peering, and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>Another busy week for cloud services at Microsoft. Here are the news items the team at AzUpdate are covering this week: New Priority Account capabilities now available in Microsoft 365, Azure Bastion and VNet peering can be used together, New integrations between GitHub and Azure Policy allow for better manage policy definitions and assignments, New constrained vCPUs capable VMs now available and of course the Microsoft Learn module of the week.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-create-a-windows-server-2019-nas-fileserver-from-the/ba-p/1893837?WT.mc_id=modinfra-10555-rclaus" target="_blank" rel="noopener">HOW TO: Create a Windows Server 2019 NAS / FileServer from the command line</A><BR /><STRONG><I><A href="https://twitter.com/RicksterCDN" target="_blank" rel="noopener">Rick Claus</A></I></STRONG></P> <P>Windows Server 2019 default install has no GUI or Desktop. How do you go about setting this thing up from the command line? In this post I give you the How To on how to setup a simple File Server to replace an old NAS device that was failing in my home lab. We're talking PowerShell to configure Storage Spaces, User Accounts, SMB Shares, Power Profiles and more! </P> <P> </P> <P><A href="https://dev.to/azure/control-holiday-lights-with-python-azure-iot-and-power-apps-2ic6" target="_blank" rel="noopener">Control holiday lights with Python, Azure IoT and Power Apps</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">Jim Bennett</A></I></STRONG></P> <P>No more controlling your holiday lights by hand - instead use IoT and a no-code mobile app!. Tagged with pythonfunbites, azure, python, iot.</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/azure-stack-hub-partner-solutions-series-cloud-assert/" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series – Cloud Assert</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>This week, Tiberiu Radu (Azure Stack Hub PM <LI-USER uid="433488"></LI-USER>) and I, had the chance to speak to Azure Stack Hub Partner Cloud Assert.</P> <P> </P> <P><A href="https://dev.to/azure/azurefunbytes-episode-21-azure-security-with-deanbryen-1kdf" target="_blank" rel="noopener">AzureFunBytes - Episode 21 - @Azure Security with @deanbryen</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>Security is always the primary concern for those deploying applications into the cloud. This week on... Tagged with azure, security, tutorial, beginners.</P> <P> </P> <P><A href="https://dev.to/azure/translating-text-with-just-a-few-lines-of-code-using-azure-cognitive-services-4fao" target="_blank" rel="noopener">Translating text with just a few lines of code using Azure Cognitive Services</A><BR /><STRONG><I>Christopher Harrison</I></STRONG></P> <P>This article is part of #PythonFunBites. An old co-worker of mine is fond of saying "we're not launc... Tagged with pythonbites, azure, python, ai.</P> <P> </P> <P><A href="https://dev.to/azure/getting-started-with-web-dev-using-flask-44l5" target="_blank" rel="noopener">Getting started with web dev using Flask</A><BR /><STRONG><I>Christopher Harrison</I></STRONG></P> <P>This article is part of #PythonFunBites. There's a lot of different web dev frameworks out there, an... Tagged with pythonfunbites, python, flask, webdev.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/setup-azure-shell-locally-of-on-a-local-network-part-2/ba-p/1883237?WT.mc_id=modinfra-10876-pierrer" target="_blank" rel="noopener">Set up Azure Shell locally - part 2</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank" rel="noopener">Pierre Roman</A></I></STRONG></P> <P>Azure Cloud Shell running in Visual Studio Code - differences with VS Code.</P> <P> </P> <P><A href="https://dev.to/azure/working-with-jupyter-notebooks-in-visual-studio-code-5130" target="_blank" rel="noopener">Working with Jupyter Notebooks in Visual Studio Code</A><BR /><STRONG><I><A href="https://twitter.com/paladique" target="_blank" rel="noopener">Jasmine Greenaway</A></I></STRONG></P> <P>How to use Jupyter Notebooks in Visual Studio Code. Tagged with pythonfunbites, azure, python.</P> <P> </P> <P><A href="https://aka.ms/WhatsNewOct2020" target="_blank" rel="noopener">What's New in Azure DevOps Docs For October? | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/AbelSquidHead" target="_blank" rel="noopener">Abel Wang</A></I></STRONG></P> <P>What’s new for October1, 2020 – October 31, 2020 Hey hey! New docs have dropped for Azure DevOps for the month of October. What has changed? Oh, just things like… Delete and recover packages Remove, delete, or restore work items Use the Cross-platform CLI for Azure DevOps using personal access tokens (PATs) …and much more!</P> <P> </P> <P><A href="https://devblogs.microsoft.com/devops/azurefunbytes-short-azure-containers-kubernetes-container-instances-more/?WT.mc_id=devops-11004-jagord" target="_blank" rel="noopener">AzureFunBytes Short - Azure Containers (Kubernetes, Container Instances, More) | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>Containers provide an easy way to run batch jobs without having to manage an environment and dependencies. Dynamic compute options, such as Azure Container Instances (ACI), can be used to efficiently ingest source data, process it, and place it in a durable store such as Azure Blob storage.</P> <P> </P> <P><A href="https://dev.to/azure/the-python-community-is-stronger-together-1anl" target="_blank" rel="noopener">The Python Community is Stronger Together</A><BR /><STRONG><I><A href="https://twitter.com/nnja" target="_blank" rel="noopener">Nina Zakharenko</A></I></STRONG></P> <P>Some thoughts on how to stay connected with the Python Community in 2020. </P> <P> </P> <P><A href="https://developer.microsoft.com/microsoft-365/blogs/microsoft-365-pnp-weekly-episode-105/?WT.mc_id=m365-11044-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 105 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://aka.ms/AAacwbq" target="_blank" rel="noopener">Microsoft Autonomous Driving Startups Program</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>Join us for an exceptional conversation with Aditya from the Microsoft Autonomous Driving program. Aditya shares the trends in Autonomous Driving, what startups are building, how Microsoft can help,</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/lisa-at-the-edge-podcast-thomas-maurer-career-development-azure-arc/" target="_blank" rel="noopener">Lisa At The Edge Podcast – Thomas Maurer – Career Development & Azure Arc</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Lisa At The Edge Podcast - Thomas Maurer - Career Development & Azure Arc we talked about Azure Arc and Azure Hybrid Cloud!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/educator-developer-blog/control-holiday-lights-with-python-azure-iot-and-power-apps/ba-p/1903902?WT.mc_id=academic-11204-jabenn" target="_blank" rel="noopener">Control holiday lights with Python, Azure IoT and Power Apps</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">Jim Bennett</A></I></STRONG></P> <P>As the December holiday season descends, some cultures celebrate with lights, where's other folks have breaks from school and are looking for a fun</P> <P> </P> Tue, 24 Nov 2020 20:53:45 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-scaling-events-w-serverless-cog/ba-p/1928458 spboyer 2020-11-24T20:53:45Z Join us for #SeasonsOfServerless - our festive developer challenge! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/join-us-for-seasonsofserverless-our-festive-developer-challenge/ba-p/1901451 <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="A Festive Serverless Developer Challenge: https://aka.ms/SeasonsOfServerless" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234428i9ABC3E942072A5ED/image-size/large?v=v2&px=999" role="button" title="chalkboard.gif" alt="A Festive Serverless Developer Challenge: https://aka.ms/SeasonsOfServerless" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">A Festive Serverless Developer Challenge: https://aka.ms/SeasonsOfServerless</span></span></P> <P> </P> <P><STRONG><FONT color="#FF0000">Check out the first challenge right now:</FONT> <BR /><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/Nov-23-2020.md" target="_self">"The Perfect Holiday Turkey"</A> on the<A href="https://aka.ms/SeasonsOfServerless" target="_self"> Seasons Of Serverless Website</A>! </STRONG></P> <P> </P> <P><FONT size="6"><FONT size="7">#SeasonsOfServerless</FONT> </FONT></P> <P> </P> <P><FONT size="6">An Azure Advocates Festive Developer Challenge!</FONT></P> <P><FONT size="4"><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8">The<SPAN> </SPAN></SPAN></SPAN><A class="Hyperlink SCXW29597693 BCX8" href="https://twitter.com/azureadvocates" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW29597693 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW29597693 BCX8" data-ccp-charstyle="Hyperlink">Azure Advocates</SPAN></SPAN></A><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8"> have teamed up with<SPAN> </SPAN></SPAN></SPAN><A class="Hyperlink SCXW29597693 BCX8" href="https://studentambassadors.microsoft.com/" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW29597693 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW29597693 BCX8" data-ccp-charstyle="Hyperlink">Microsoft Student Ambassadors</SPAN></SPAN></A><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8"><SPAN> </SPAN>around the world for a new multi-week series<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8">of developer challenges – just in time for the festive holiday season!!! Join us as we travel the globe in search of popular festive recipes for our virtual<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8">potluck</SPAN></SPAN><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8"><SPAN> </SPAN>– and find intriguing ways to tackle each chef’s challenges with our time-tested serverless recipes!</SPAN></SPAN><SPAN class="EOP SCXW29597693 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P> </P> <P> </P> <P><STRONG><FONT size="5"><SPAN class="TextRun MacChromeBold SCXW223924860 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW223924860 BCX8">WHAT IS THE CHALLENGE ABOUT?</SPAN></SPAN><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></STRONG></P> <P><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW250697636 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW250697636 BCX8" data-ccp-parastyle="Quote"><STRONG><BR /><FONT size="4">Origin Story:<BR /></FONT><BR /></STRONG></SPAN></SPAN></SPAN></P> <P class="lia-indent-padding-left-30px"><EM>Mes chers amis,</EM></P> <P class="lia-indent-padding-left-30px"><EM>Every year, we all look forward to our annual holiday potluck. From jollof rice all across West Africa to Indian ladoos to celebrate Diwali, sharing our favorite foods and traditions is our favorite part of the season!</EM></P> <P class="lia-indent-padding-left-30px"><EM>Of course, we know that's not possible this year, so we've come up with an alternative: a virtual code challenge potluck! Each week, someone in our community is going to post a unique code challenge exploring a recipe and a food for all of our friends to solve. It may not be the same as breaking bread in-person or smelling and tasting your flavorful creations, but hopefully these delectable brain-teasers can still give us a taste of each other's traditions.</EM></P> <P class="lia-indent-padding-left-30px"><EM>Grosses bises, Dominique et Simone</EM></P> <P> </P> <P><FONT size="4"><STRONG><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW250697636 BCX8" data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559685":864,"335559737":864,"335559738":200,"335559739":160,"335559740":259}">The Mission:<BR /></SPAN></SPAN></STRONG><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW250697636 BCX8" data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559685":864,"335559737":864,"335559738":200,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW190509864 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW190509864 BCX8">Our intrepid chefs (and challenge creators) quickly realized that making these dishes requires a little help – </SPAN></SPAN></SPAN></SPAN><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW250697636 BCX8" data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559685":864,"335559737":864,"335559738":200,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW190509864 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW190509864 BCX8">and </SPAN></SPAN><SPAN class="TextRun SCXW190509864 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW190509864 BCX8">they think serverless fits the bill quite nicely!</SPAN></SPAN></SPAN></SPAN></FONT></P> <P><FONT size="4"><A href="https://aka.ms/SeasonsOfServerless" target="_self">#SeasonsOfServerless</A> follows on the footsteps of last year's popular <A href="https://dev.to/azure/25-days-of-serverless-content-collection-3baj/comments" target="_self">#25DaysOfServerless</A> challenge. This year, we wanted to give you more time to enjoy each challenge so we spaced them out - a challenge a week starting November end, and going through the holidays into the new year!</FONT></P> <P> </P> <P><FONT size="4">And our first challenge is already out! Hear all about it from the amazing Student Ambassadors and Cloud Advocates who .. ahem .. cooked it up!</FONT></P> <P> </P> <P><FONT size="4"><LI-VIDEO vid="https://youtu.be/BCbG50Zhw0Y" align="center" size="custom" width="643" height="643" uploading="false" thumbnail="https://i.ytimg.com/vi/BCbG50Zhw0Y/hqdefault.jpg" external="url"></LI-VIDEO></FONT></P> <P> </P> <P> </P> <P><FONT size="5"><STRONG><SPAN data-contrast="auto">HOW CAN YOU PARTICIPATE?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Visit the </SPAN><A href="https://aka.ms/SeasonsOfServerless" target="_blank" rel="noopener"><SPAN data-contrast="none">Seasons Of Serverless</SPAN></A><SPAN data-contrast="auto"> website</SPAN><SPAN data-contrast="auto"> and familiarize yourself with the </SPAN><A href="https://github.com/microsoft/seasons-of-serverless#rules" target="_blank" rel="noopener"><SPAN data-contrast="none">Rules</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Revisit the site each week to </SPAN><SPAN data-contrast="auto">uncover</SPAN><SPAN data-contrast="auto"> </SPAN><A href="https://github.com/microsoft/seasons-of-serverless#first-challenge-november-23rd" target="_blank" rel="noopener"><SPAN data-contrast="none">a new coding challenge</SPAN></A><SPAN data-contrast="auto"> and </SPAN><SPAN data-contrast="auto">recipe</SPAN><SPAN data-contrast="auto">!</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Solve the challenge within the week – we have a handy </SPAN><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/RESOURCES.md" target="_blank" rel="noopener"><SPAN data-contrast="none">Resources</SPAN></A><SPAN data-contrast="auto"> page to help you!</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Submit your solution as a </SPAN><A href="https://github.com/microsoft/seasons-of-serverless#submit-your-solution-as-a-custom-ISSUE-to-our-repository" target="_blank" rel="noopener"><SPAN data-contrast="none">tagged issue </SPAN><SPAN data-contrast="none">on</SPAN><SPAN data-contrast="none"> the repo</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Celebrate!! (Qualifying solutions will earn you a spot on the </SPAN><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/CONTRIBUTORS.md" target="_blank" rel="noopener"><SPAN data-contrast="none">Contributors Hall of Fame</SPAN></A><SPAN data-contrast="auto">!)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> </UL> <P><FONT size="4"><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P> </P> <P><FONT size="5"><STRONG><SPAN data-contrast="auto">WHY ARE WE DOING THIS?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P><FONT size="4"><A href="https://aka.ms/SeasonsOfServerless" target="_blank" rel="noopener"><SPAN data-contrast="none">#SeasonsOfServerless</SPAN></A><SPAN data-contrast="none"> follows </SPAN><SPAN data-contrast="none">in</SPAN><SPAN data-contrast="none"> t</SPAN><SPAN data-contrast="none">he footsteps of </SPAN><SPAN data-contrast="none">our</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">2019</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://dev.to/azure/25-days-of-serverless-content-collection-3baj/comments" target="_blank" rel="noopener"><SPAN data-contrast="none">#25DaysOfServerless</SPAN></A><SPAN data-contrast="none"> challenge.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">We realized </SPAN><SPAN data-contrast="none">that developers not only enjoyed solving the code puzzles, </SPAN><SPAN data-contrast="none">but they</SPAN><SPAN data-contrast="none"> al</SPAN><SPAN data-contrast="none">so loved learning about festive customs and cultures around the world.</SPAN><SPAN data-contrast="none"> However, the challenge-a-day pace is not holiday-friendly. So, this year we’re spacing them out</SPAN><SPAN data-contrast="none"> a little more</SPAN><SPAN data-contrast="none"> – </SPAN><SPAN data-contrast="none">with one challenge a wee</SPAN><SPAN data-contrast="none">k starting Nov 23 and </SPAN><SPAN data-contrast="none">continuing </SPAN><SPAN data-contrast="none">into the New Year! </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P><FONT size="4"><SPAN data-contrast="none"><BR /><STRONG>Let’s Do This!!</STRONG> :flexed_biceps:</img></SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P> </P> <P> </P> <P><STRONG><FONT color="#FF0000">Check out the first challenge right now:</FONT> <BR /><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/Nov-23-2020.md" target="_self">"The Perfect Holiday Turkey"</A> on the<A href="https://aka.ms/SeasonsOfServerless" target="_self"> Seasons Of Serverless Website</A>! </STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="The Perfect Turkey - #SeasonsOfServerless" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235566iD57D5BAE1D8E61F2/image-size/large?v=v2&px=999" role="button" title="banner-1.png" alt="The Perfect Turkey - #SeasonsOfServerless" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">The Perfect Turkey - #SeasonsOfServerless</span></span></P> <P> </P> Tue, 24 Nov 2020 18:01:25 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/join-us-for-seasonsofserverless-our-festive-developer-challenge/ba-p/1901451 nityan 2020-11-24T18:01:25Z The Developer Wish List - #DevDecember https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-developer-wish-list-devdecember/ba-p/1796670 <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Blog-images_week0_Devwishlist.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233828iA2DDF9EF2DD69C39/image-size/large?v=v2&px=999" role="button" title="Blog-images_week0_Devwishlist.png" alt="Blog-images_week0_Devwishlist.png" /></span></SPAN></P> <P> </P> <P>For many of us around the world, the holiday season is right around the corner!</P> <P> </P> <P>You may find yourself struggling what gift to get for your friends and family. Chances are that they will want some ideas for you too! My family certainly does, and I have to come up with twice as many ideas since my birthday is also in December! <img class="lia-deferred-image lia-image-emoji" src="https://techcommunity.microsoft.com/html/@0277EEB71C55CDE7DB26DB254BF2F52B/images/emoticons/laugh_40x40.gif" alt=":lol:" title=":lol:" /></P> <P> </P> <P>This inspired me to reach out to a few of my techy friends to ask what product would be at the top of their wish list if they didn't already own it. The result? An awesome mix of geeky gadgets and some products that are just for fun.</P> <P> </P> <P><FONT color="#FF0000"><EM>Please note: This list is not an endorsement of any product nor are we getting compensated for any of this. It's all just for fun! </EM></FONT></P> <P> </P> <P><FONT size="4"><STRONG>1. A copy of <A href="https://smile.amazon.com/GitHub-Dummies-Guthals/dp/1119572673/ref=smi_www_rco2_go_smi_4368549507?_encoding=UTF8&dchild=1&ie=UTF8&keywords=github&qid=1605222110&s=books&sr=1-2" target="_blank" rel="noopener">GitHub for Dummies</A> that'll come in handy whether you are looking to learn more about GitHub or want a useful gift to inspire a new developer!</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_0-1606106903865.jpeg" style="width: 233px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235499i5DFA77250258B13C/image-dimensions/233x291?v=v2" width="233" height="291" role="button" title="livelovegeek_0-1606106903865.jpeg" alt="livelovegeek_0-1606106903865.jpeg" /></span></P> <P> </P> <P><STRONG>Review: </STRONG><EM>"GitHub is the largest open source community and with the knowledge of how to use GitHub, it opens the doors for folks to contribute to open source projects, collaborate with people on their own projects, and learn from others. I co-wrote this book with Phil Haack because we believe that everyone should have the opportunity to join communities that matter to them. I love that this book not only introduces GitHub features, but also Git on the command line AND how to continue to engage in communities outside of GitHub through conferences and events." </EM>– <STRONG>Dr. Sarah Guthals, <A href="https://twitter.com/drguthals" target="_blank" rel="noopener">@drguthals</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>2. Whether you are new to coding or a seasoned pro, the <A href="https://www.raspberrypi.org/products/raspberry-pi-400/" target="_blank" rel="noopener">Raspberry Pi 400</A> is bound to bring out your inner geek!</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_1-1606106903899.jpeg" style="width: 309px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235501i239AD06CBC989599/image-dimensions/309x214?v=v2" width="309" height="214" role="button" title="livelovegeek_1-1606106903899.jpeg" alt="livelovegeek_1-1606106903899.jpeg" /></span></P> <P> </P> <P><STRONG>Review: </STRONG><EM>"The Raspberry Pi 400 should be on everyone's wishlist! It's a Raspberry Pi in a keyboard similar to the computers I grew up with like the ZX Spectrum. Just plug in a mouse and TV and away you go! Another bonus? It runs VS Code natively!</EM><EM>" </EM>– <STRONG>Jim Bennett, <A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">@jimbobbennett</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>3. An <A href="https://instantpot.com/portfolio-item/duo-gourmet/" target="_blank" rel="noopener">Instant Pot</A> that essentially cooks your food for you don’t have to order takeout food for the 6<SUP>th</SUP> time this week ;)</img></STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_2-1606106903912.jpeg" style="width: 276px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235500iFAD09C6065A541B0/image-dimensions/276x276?v=v2" width="276" height="276" role="button" title="livelovegeek_2-1606106903912.jpeg" alt="livelovegeek_2-1606106903912.jpeg" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"Working from home can be hard. We may find ourselves working weird hours and extra to achieve the same level of productivity, and still wanting to eat healthy and home-cooked food. That's when an Instant Pot may come handy. It is a pressure-cooker and slow-cooker in one device. I have found it especially useful during those long days when I have lacked motivation to cook. Just put your ingredients in the pot and fire-and-forget. I have enjoyed making vegetables, meat stews and lentils in my Instant Pot." </EM>– <STRONG>Orko Momin, <A href="https://twitter.com/orktopus" target="_blank" rel="noopener">@orktopus</A></STRONG></P> <P><STRONG> </STRONG></P> <P> </P> <P><FONT size="4"><STRONG>4. The <A href="https://www.hanselman.com/blog/the-perfect-nintendo-switch-travel-set-up-and-recommended-accessories" target="_blank" rel="noopener">Scott Hanselman recommended ‘Nintendo Switch Travel Pack’</A> that will get you set up for gaming on the road or on the couch</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_3-1606106903935.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235502i5D31C2417C074B19/image-size/medium?v=v2&px=400" role="button" title="livelovegeek_3-1606106903935.jpeg" alt="livelovegeek_3-1606106903935.jpeg" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"I've had a Nintendo Switch since launch day and let me tell you, it's joyful. Joyous. It's a little joy device. I love 4k Xboxen and raw power as much as the next Jane or Joe Gamer, but the Switch just keeps pumping out happy games. Indie games, Metroidvania games like Axiom Verge, Legend of Zelda: Breath of the Wild (worth the cost of the system) and now, super Mario Odyssey. Even Doom and Wolfenstein 2 are coming to the Switch soon! I've travelled already with my Switch all over. <A href="https://www.hanselman.com/blog/the-perfect-nintendo-switch-travel-set-up-and-recommended-accessories" target="_blank" rel="noopener">Here's</A> what I've come up with for my travels - and my at-home Switch Experience. I owe and use these items personally - and I vouch for their awesomeness and utility.” </EM>– <STRONG>Scott Hanselman, <A href="https://twitter.com/shanselman" target="_blank" rel="noopener">@shanselman</A></STRONG></P> <P><STRONG> </STRONG></P> <P> </P> <P><FONT size="4"><STRONG>5. An Italian chopping knife - aka a <EM><A href="https://www.williams-sonoma.com/products/open-kitchen-by-williams-sonoma-mezzaluna/?sku=9031067" target="_blank" rel="noopener">Mezzaluna</A></EM> - to cook up something delicious after a long day of coding. Buon appetito!</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_4-1606106904111.png" style="width: 276px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235504iB7CA9939EB870B7B/image-dimensions/276x248?v=v2" width="276" height="248" role="button" title="livelovegeek_4-1606106904111.png" alt="livelovegeek_4-1606106904111.png" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"For all the lovers of Italian food, this curiously-shaped knife (mezzaluna means half-moon) is perfect for chopping vegetables and making that perfect soffritto for your ragù, meatballs, or my personal favorite, my mom's famous risotto! Sorry – the recipe is top secret.</EM><EM>” </EM>– <STRONG>Alessandro Segala, </STRONG><A href="https://twitter.com/ItalyPaleAle" target="_blank" rel="noopener"><STRONG>@ItalyPaleAle</STRONG></A></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>6. An <A href="https://www.elgato.com/en/gaming/stream-deck-xl" target="_blank" rel="noopener">Elgato Stream Deck</A> to help you start or step-up your streaming game</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_5-1606106904184.png" style="width: 315px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235503iA8E42DC086C13C03/image-dimensions/315x248?v=v2" width="315" height="248" role="button" title="livelovegeek_5-1606106904184.png" alt="livelovegeek_5-1606106904184.png" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"The Stream Deck is a small programmable external keyboard with LCD buttons that comes with an initial configuration to help live-video streamers run their shows without having to change applications, type, or move their mouse. It can help you by automating interactions with Open Broadcaster Software (OBS), play sounds, launch applications, manage media player applications, send key strokes, and interact with services like Twitter, Twitch, and YouTube. There are built-in tools to run a whole series of these actions with a single button push, and every button can have a custom blog of text or image to represent its functionality. Developers LOVE the stream deck because it is very extensible through a WebSocket API using JavaScript, HTML, or even C# to build plugins that will allow you to create animations, macros, and interactions with your favorite tools. We’ve seen folks set up buttons to start and stop applications as well as to automate features in their favorite development tools.</EM><EM>” </EM>– <STRONG>Jeff Fritz, <A href="https://twitter.com/csharpfritz" target="_blank" rel="noopener">@csharpfritz</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>7. A good ole’ fashion <A href="https://smile.amazon.com/gp/product/B01M1AIV31" target="_blank" rel="noopener">fountain pen</A> that’ll make you actually want to write out your to-do list</STRONG></FONT></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_6-1606106904197.png" style="width: 255px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235505i2EB3BD28378BEECE/image-dimensions/255x246?v=v2" width="255" height="246" role="button" title="livelovegeek_6-1606106904197.png" alt="livelovegeek_6-1606106904197.png" /></span></P> <P><STRONG>Review:</STRONG><EM> “I love the way a solid, old-school, pen compels me to write things down. Because I like writing with the pen so much, I started evaluating my days in a <A href="https://bestself.co/collections/journals-planners/products/self-journal" target="_blank" rel="noopener">Self Journal</A> even planning what I want to accomplish the next day. It's been semi-therapeutic as well during our funky pandemic time where everything seems to roll together oddly: this helps me see progress and helps with purpose.</EM><EM>” </EM>– <STRONG>Seth Juarez, <A href="https://twitter.com/sethjuarez" target="_blank" rel="noopener">@sethjuarez</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>8. A <A href="https://smile.amazon.com/dp/B07PZL6798/ref=cm_sw_r_cp_apa_fabt1_ui2SFbS2RM9XE?pldnSite=1" target="_blank" rel="noopener">mini handheld fan</A> that is perfect for maker/DIY projects or even just to cool you down during never-ending meetings </STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_7-1606106904280.png" style="width: 264px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235506iE3FC30F118B5EFB9/image-dimensions/264x237?v=v2" width="264" height="237" role="button" title="livelovegeek_7-1606106904280.png" alt="livelovegeek_7-1606106904280.png" /></span></P> <P><BR /><STRONG>Review:</STRONG><EM> “This fan has been one of my favorite recent purchases! Not only does it keep me cool/give me wind-swept music video hair while on streams/Teams meetings, but I use it around the house, too! I recently put together a maker cabinet (for all my crafts, IoT projects, etc), and this fan has solved the problem of waiting for paint/glue/soldering projects to dry and cool. The wrapping stand also makes it easy to clamp onto whatever surface (computer/desk/DIY station) you need!” </EM>– <STRONG>Chloe Condon, <A href="https://twitter.com/ChloeCondon" target="_blank" rel="noopener">@ChloeCondon</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>9. A <A href="https://smile.amazon.com/ORORO-Womens-Lightweight-Heated-Battery/dp/B083LLS47W/ref=sr_1_1_sspa" target="_blank" rel="noopener">heated vest</A> to keep you warm during the cold months of the year or on your next plane ride (whenever that may be) </STRONG></FONT></P> <P><BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_8-1606106904443.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235507iE9A96D9A931563FC/image-size/medium?v=v2&px=400" role="button" title="livelovegeek_8-1606106904443.png" alt="livelovegeek_8-1606106904443.png" /></span></P> <P> </P> <P><STRONG>Review:</STRONG><EM> “Back a long, long, time ago - when I was still traveling by plane on a frequent basis (aka up until January 2020) - I saw a woman wearing a glowing vest while waiting for her luggage, so naturally, I had to ask her about it. I wrote down the brand and ordered one for myself while I waited for my ride. The vest is cute, good quality, and most importantly, warm. It has three different heat levels and the battery lasts for hours on a single charge (the battery can also double as a portable USB charger). The vest comes in men’s and women’s styles and the company makes other heated products too like sweatshirts, parkas, gloves, and yes, even socks. So, if you are perpetually cold like me, or know someone who is, I highly recommend checking these out!” </EM>– Morgan Mitchell Bell, <A href="https://twitter.com/livelovegeek" target="_blank" rel="noopener">@livelovegeek</A> </P> <P> </P> <P>So, that's it! What caught your attention? Is there anything that you'd add to this list? Let us know in the comments below!</P> <P> </P> <P>Oh, and while you're here, make sure you follow along with <A href="https://twitter.com/search?q=%23DevDecember&src=typed_query" target="_blank" rel="noopener">#DevDecember on Twitter</A>. We will be sharing cool content, fun activities, and more throughout the month of December. If you want a sneak peek of some of the fun we are planning, check out our <STRONG><A href="https://aka.ms/DevDecember20Home" target="_self">#DevDecember homepage</A></STRONG> (plus, we've already posted some of the digital swag 🤫).</P> Mon, 23 Nov 2020 18:35:21 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-developer-wish-list-devdecember/ba-p/1796670 livelovegeek 2020-11-23T18:35:21Z Azure Advocates Weekly Round Up - Web Developers Beginner Curriculum! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-web-developers-beginner/ba-p/1891137 <H1><A href="https://github.com/microsoft/Web-Dev-For-Beginners" target="_self">Web Development for Beginners now available!</A></H1> <P><SPAN>Azure Cloud Advocates at Microsoft are pleased to offer a 12-week, 24-lesson curriculum all about JavaScript, CSS, and HTML basics. Each lesson includes pre- and post-lesson quizzes, written instructions to complete the lesson, a solution, an assignment and more. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.</SPAN></P> <P> </P> <P><SPAN>See more at: <A href="https://github.com/microsoft/Web-Dev-For-Beginners" target="_self">https://github.com/microsoft/Web-Dev-For-Beginners</A></SPAN></P> <P> </P> <P><FONT size="5"><SPAN>Content Round Up</SPAN></FONT></P> <P> </P> <P><A href="https://youtu.be/pAyG6UYuz-Y" target="_blank" rel="noopener">Datacenter Migration & Azure Migrate - Sarah Lean</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>In this Skylines Summer Session, Sarah Lean, #Microsoft #Cloud Advocate, is interviewed by Richard Hooper and Gregor Suttie and discusses</P> <P><LI-VIDEO vid="https://youtu.be/pAyG6UYuz-Y" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-setup-and-run-azure-shell-locally/ba-p/1840528?WT.mc_id=modinfra-8133-pierrer" target="_blank" rel="noopener">How to setup and run Azure Cloud Shell locally</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank" rel="noopener">Pierre Roman</A></I></STRONG></P> <P>Scripts running in Azure Cloud Shell can exceed the 20 minute timeout. Learn how to run it locally to avoid this restriction.</P> <P> </P> <P><A href="https://www.codemag.com/Article/2010052/Project-Tye-Creating-Microservices-in-a-.NET-Way" target="_blank" rel="noopener">CODE Magazine - Project Tye: Creating Microservices in a .NET Way</A><BR /><STRONG><I><A href="https://twitter.com/spboyer" target="_blank" rel="noopener">Shayne Boyer</A></I></STRONG></P> <P>Project Tye: Creating Microservices in a .NET Way</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-rfc/ba-p/1866550?WT.mc_id=modinfra-8956-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - RFC</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>This week in our Azure Stack Hub Partner solution video series, I am going to introduce you to Azure Stack Hub Partner RFC.</P> <P> </P> <P><A href="https://github.com/microsoft/Web-Dev-For-Beginners" target="_blank" rel="noopener">microsoft/Web-Dev-For-Beginners</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank" rel="noopener">Yohan Lasorsa</A></I></STRONG></P> <P>24 Lessons, 12 Weeks, Get Started as a Web Developer - microsoft/Web-Dev-For-Beginners</P> <P> </P> <P><A href="https://youtu.be/Q-s6eFPv4QM" target="_blank" rel="noopener">Introduction to #WebXR with Ayşegül Yönet</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank" rel="noopener">Aysegul Yonet</A></I></STRONG></P> <P>🥽 WebXR is the latest evolution in the exploration of virtual and augmented realities. Sounds interesting, right? Dive into the Basics of WebXR with Ayşegül...</P> <P><LI-VIDEO vid="https://youtu.be/Q-s6eFPv4QM" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://blog.mastykarz.nl/connect-react-app-microsoft-365/" target="_blank" rel="noopener">Connect your React app to Microsoft 365</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>With the Microsoft Graph Toolkit, you'll be able to connect your app to Microsoft 365 in a matter of minutes. Here is how you'd do it.</P> <P> </P> <P><A href="https://dev.to/azure/debug-node-js-app-with-built-in-or-vs-code-debugger-41n4" target="_blank" rel="noopener">Debug Node.js app with built-in or VS Code debugger</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank" rel="noopener">Yohan Lasorsa</A></I></STRONG></P> <P>Learn how to use built-in or VS Code debugger to fix bugs in your Node.js apps more efficiently with this series of bite-sized videos for beginners. </P> <P> </P> <P><A href="https://developer.microsoft.com/microsoft-365/blogs/microsoft-365-pnp-weekly-episode-104/?WT.mc_id=m365-10519-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 104 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-build-an-audit-azure-policy-with-multiple-parameters/ba-p/1866062?WT.mc_id=modinfra-10601-socuff" target="_blank" rel="noopener">How to build an audit Azure Policy with multiple parameters</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>Learn how to build an audit mode Azure Policy, to show resources that don't have all of your required tags.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/apps-on-azure/azure-functions-via-github-actions-with-no-publish-profile/ba-p/1859300?WT.mc_id=devops-10697-juyoo" target="_blank" rel="noopener">Azure Functions via GitHub Actions with No Publish Profile</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank" rel="noopener">Justin Yoo</A></I></STRONG></P> <P>Throughout this series, I'm going to show how an Azure Functions instance can map APEX domains, add an SSL certificate and update its public inbound IP</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-11-06-deploy-to-github-packages-with-github-actions/" target="_blank" rel="noopener">Deploy to GitHub Packages With GitHub Actions | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank" rel="noopener">Aaron Powell</A></I></STRONG></P> <P>Let's look at how to automate releases to GitHub Packages using GitHub Actions</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=NNDdk9Y_nPw" target="_blank" rel="noopener">DevOps and Machine Learning, with Henk Boelman</A><BR /><STRONG><I><A href="https://twitter.com/hboelman" target="_blank" rel="noopener">Henk Boelman</A></I></STRONG></P> <P>DevOps and Machine Learning, with Henk Boelman – Codecamp_The One with DevOps 2020 With machine learning becoming more and more an engineering problem the ne...</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/c-corner-azure-learning-and-microsoft-certification-ama-ft-thomas-maurer/" target="_blank" rel="noopener">C# Corner Azure Learning and Microsoft Certification – AMA ft. Thomas Maurer</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Last week I had the honor to be a guest in the C# Corner Live AMA (Ask Me Anything) about Azure Learning and Microsoft Certification.</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=0hKU9yB9Ixk" target="_blank" rel="noopener">Azure Functions - Tartine & Tech</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank" rel="noopener">Yohan Lasorsa</A></I></STRONG></P> <P>Les Azure functions font partie de la stack Server less d'Azure. Dans cet épisode, Yohan vous explique en quoi ça consiste et comment créer votre premier pro...</P> <P> </P> <P><A href="https://devkimchi.com/2020/11/11/openapi-extension-to-support-azure-functions-v1/" target="_blank" rel="noopener">OpenAPI Extension to Support Azure Functions V1</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank" rel="noopener">Justin Yoo</A></I></STRONG></P> <P>This post shows how Azure Functions v3 runtime works as a proxy to Azure Functions v1 runtime, to enable the Open API extension.</P> <P> </P> <P><A href="https://aka.ms/AAab79w" target="_blank" rel="noopener">Wayve | Disrupting Autonomous Driving</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>Join us for an exceptional conversation with Alex Kendall, co-founder, and CEO of Wayve, who raised more than 40M$ to kickstart the biggest vehicle academy. </P> <P> </P> <P><A href="https://codetraveler.io/2020/11/11/using-immutable-objects-with-sqlite-net/" target="_blank" rel="noopener">Using Immutable Objects with SQLite-Net</A><BR /><STRONG><I><A href="https://twitter.com/TheCodeTraveler" target="_blank" rel="noopener">Brandon Minnick</A></I></STRONG></P> <P>SQLite-NET has become the most popular database, especially amongst Xamarin developers, but it hasn't supported Immutable Objects, until now! Thanks to Init-Only Properties in C#9.0, we can now use Immutable Objects with our SQLite database!</P> <P> </P> Mon, 16 Nov 2020 15:34:07 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-web-developers-beginner/ba-p/1891137 spboyer 2020-11-16T15:34:07Z DevTest Labs - Shutdown Notifications in Teams Chat Messages https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-shutdown-notifications-in-teams-chat-messages/ba-p/1874092 <P>Azure DevTest Labs automatic shutdown policies can save money by ensuring that VMs are shut down every night and do not sit idle indefinitely. On those occasions when a lab user works late, the shutdown notification settings allow lab users to be warned when the machine is about to be shutdown. In this blog post, we will cover how to use the Webhook URL setting for auto-shutdown notification settings to send a direct chat message to someone working late and warn them that their machine is about to be turned off. We will also cover how to create the chat message so the user can delay the shutdown by an hour or two by clicking a button in the chat message.</P> <H1>Create Logic App to receive shutdown notifications</H1> <OL> <LI><A href="https://docs.microsoft.com/en-us/azure/logic-apps/quickstart-create-first-logic-app-workflow#create-your-logic-app" target="_blank" rel="noopener">Create a Logic App</A>.</LI> <LI>Add <A href="https://docs.microsoft.com/en-us/azure/connectors/connectors-native-reqres#add-request-trigger" target="_blank" rel="noopener"><STRONG>When an HTTP request is received trigger</STRONG></A> to the Logic App.</LI> </OL> <P class="lia-align-center"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sagar_Lankala_0-1605041267623.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232756iF13DD1F4D397F4BE/image-size/medium?v=v2&px=400" role="button" title="Sagar_Lankala_0-1605041267623.png" alt="Sagar_Lankala_0-1605041267623.png" /></span></P> <P> </P> <P>As seen in the picture above, this action needs a JSON schema so information in the request body can be used by actions in the Logic App. Schema for the request is below for convenience. The <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/devtest-lab-auto-shutdown#notifications" target="_blank" rel="noopener">Configure autoshutdown for lab and compute virtual machines in Azure DevTest Labs</A> article contains the latest JSON schema for shutdown notifications.</P> <P> </P> <P> <FONT color="#000000"><STRONG>{</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "$schema": "<A href="http://json-schema.org/draft-04/schema#" target="_blank" rel="noopener">http://json-schema.org/draft-04/schema#</A>",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "properties": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl120": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl60": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "eventType": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "guid": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "labName": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "owner": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "resourceGroupName": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "skipUrl": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "subscriptionId": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmName": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmUrl": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "minutesUntilShutdown": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "required": [</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "skipUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl60",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl120",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmName",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "guid",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "owner",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "eventType",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "subscriptionId",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "resourceGroupName",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "labName",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "minutesUntilShutdown"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> ],</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "object"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P> </P> <OL start="3"> <LI>Add a <A href="https://docs.microsoft.com/en-us/connectors/teams/#post-your-own-adaptive-card-as-the-flow-bot-to-a-user" target="_blank" rel="noopener"><STRONG>Post your own adaptive card as the Flow bot to a user (preview)</STRONG></A> action to the Logic App. This action will send a chat message from the Flow bot to a specific user. This action also allows an <A href="https://adaptivecards.io/" target="_blank" rel="noopener">adaptive card</A> to be sent to a user, which means we can add buttons to the message. This action does require a connection of a Microsoft Account.</LI> </OL> <P> </P> <P>The <STRONG>recipient</STRONG> of the message should be the owner of the VM. Get the owner’s email by searching for the ‘owner’ dynamic content from the HTTP request trigger.</P> <P> </P> <P>The message in this action will be JSON that uses the Adaptive Card JSON schema. For our example, we have a simple message to the user telling them that their VM will be shutdown soon and buttons to allow the user to skip the shutdown, delay the shutdown 1 hour or delay the shutdown 2 hours.</P> <P> </P> <P><FONT color="#000000"><STRONG>{</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "$schema": "<A href="http://adaptivecards.io/schemas/adaptive-card.json" target="_blank" rel="noopener">http://adaptivecards.io/schemas/adaptive-card.json</A>",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "AdaptiveCard",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "version": "1.0",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "speak": "Your virtual machine is shutting down soon. Do you want to delay the shutdown?",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "body": [</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "TextBlock",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text": "Virtual Machine Auto-Shutdown",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "size": "large",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "weight": "bolder"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "TextBlock",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text": "The virtual machine @{triggerBody()['vmName']} is scheduled for shutdown in @{triggerBody()?['minutesUntilShutdown']} minutes.",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "wrap": "true"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> ],</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "actions": [</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "Action.OpenUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "title": "Delay 1 hour",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "url": "@{triggerBody()['delayUrl60']}"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "Action.OpenUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "title": "Delay 2 hours",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "url": "@{triggerBody()['delayUrl120']}"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "Action.OpenUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "title": "Skip shutdown",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "url": "@{triggerBody()['skipUrl']}"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> ]</STRONG></FONT></P> <P><FONT color="#000000"><STRONG>}</STRONG></FONT></P> <P> </P> <P>The ‘@triggerBody()’ statements tell the LogicApp to get the value from the HTTP request trigger we created in the previous step.</P> <P> </P> <P>Lastly, set the <STRONG>IsAlert</STRONG> setting in the action to ‘Yes’. This will cause the user to be notified in their Activity stream when the message is sent.</P> <P> </P> <P>Action should look like the following picture.</P> <P class="lia-align-center"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sagar_Lankala_4-1605041410636.png" style="width: 476px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232759iF4769805A7DF2FB9/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_4-1605041410636.png" alt="Sagar_Lankala_4-1605041410636.png" /></span></P> <P> </P> <OL start="4"> <LI>Add a HTTP <STRONG>Response</STRONG> action. Set the status code to 200 to indicate everything was successful.</LI> </OL> <P>Now that we have our Logic App that can handle sending a message to a user, it’s time to setup the DevTest Lab to send notifications to our Logic App. We will need the url to call the Logic App. To get the url, expand the <STRONG>When an HTTP request is received</STRONG> trigger step and copy the <STRONG>HTTP POST URL</STRONG> property.</P> <H1>Configure lab auto-shutdown settings</H1> <P> </P> <P>Auto-shutdown settings are configured at either the lab level or individual lab VM level. Individual settings for auto-shutdown notifications are only allowed if the lab owner sets the auto-shutdown policy to allow individual users to override the lab auto-shutdown settings. See <A href="https://docs.microsoft.com/azure/devtest-labs/devtest-lab-auto-shutdown" target="_blank" rel="noopener">Configure auto-shutdown for lab in Azure DevTest Labs</A> for further details.</P> <P>Let’s cover how to use the Logic App we created above by configuring auto-shutdown settings at a lab level.</P> <OL> <LI>On the home page for your lab, select Configuration and policies.</LI> <LI>Select <STRONG>Auto-shutdown</STRONG> in the <STRONG>Schedules</STRONG> section of the left menu.</LI> <LI>Select <STRONG>On</STRONG> to enable auto-shutdown policy.</LI> <LI>For <STRONG>Webhook URL</STRONG>, paste the url for the Logic App we created earlier.</LI> <LI>Select Save.</LI> </OL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_2-1605041267648.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232757i75C24C3EAC58D968/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_2-1605041267648.png" alt="Sagar_Lankala_2-1605041267648.png" /></span></P> <P> </P> <P> </P> <H1>Conclusion</H1> <P>That’s all we need to do! Next time a lab VM in our lab is about to be shutdown, the lab VM owner will be sent a chat message in Teams. The message will allow the lab VM owner to quickly delay shutdown using the action buttons on the bottom of the message.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_3-1605041267653.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232758i79803ECA42DCC3B6/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_3-1605041267653.png" alt="Sagar_Lankala_3-1605041267653.png" /></span></P> <P> </P> <P> </P> Fri, 13 Nov 2020 18:06:05 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-shutdown-notifications-in-teams-chat-messages/ba-p/1874092 Sagar_Lankala 2020-11-13T18:06:05Z Azure Advocates Weekly Round Up - .NET Learn Challenge, MS Exam Prep help and more! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-net-learn-challenge-ms-exam-prep/ba-p/1867304 <P>It's November, .NET November that is. Check out the .NET Learn Challenge get over 35 hours of FREE Learning. More Exam help posts from the team this week amongst many other great code samples, blog posts and videos!</P> <P> </P> <P><A href="https://youtu.be/pAyG6UYuz-Y" target="_blank" rel="noopener">Datacenter Migration & Azure Migrate - Sarah Lean</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>In this Skylines Summer Session, Sarah Lean, #Microsoft #Cloud Advocate, is interviewed by Richard Hooper and Gregor Suttie and discusses</P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/pAyG6UYuz-Y" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://www.twitch.tv/videos/793735988" target="_blank" rel="noopener">Shayne sits down with LayalCodesIt on Twitch</A><BR /><STRONG><I><A href="https://twitter.com/spboyer" target="_blank">Shayne Boyer</A></I></STRONG></P> <P>Hang out with Shayne on Layla's channel this week to hear more about the .NET Learn Challenge and working within Developer Relations at Microsoft.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/apps-on-azure/how-to-create-a-no-code-ai-app-with-azure-cognitive-services-and/ba-p/1847264?WT.mc_id=aiml-8438-ayyonet" target="_blank" rel="noopener">How to Create a No Code AI App with Azure Cognitive Services and Power Apps</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank">Aysegul Yonet</A></I></STRONG></P> <P>You might have an idea for an application using AI and not have anyone to build it. You might be a programmer and want to try out your ideas and Azure</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-telkomtelstra/ba-p/1837289?WT.mc_id=modinfra-8960-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - telkomtelstra</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>telkomtelstra is a Service Provider working with Enterprise customers across Indonesia. Check out their journey with Azure Stack Hub!</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/vlc-energy-optimization-with-gpu/?WT.mc_id=green-8990-ashussai" target="_blank" rel="noopener">VLC Energy Optimization With GPU | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank">Asim Hussain</A></I></STRONG></P> <P>For the past few years, sustainable software engineering has arisen as one of the major topics in the daily discussions I have with software developers. Due to the advancements in technology, as well as the increasing awareness we share on climate change and the overall impact of tech on the environment,</P> <P> </P> <P><A href="https://github.com/microsoft/iot-curriculum/tree/main/labs/iot/environment-monitor" target="_blank" rel="noopener">microsoft/iot-curriculum</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank">Jim Bennett</A></I></STRONG></P> <P>Hands on labs and content for students and educators to learn and teach the Internet of Things at schools, universities, coding clubs, community colleges and bootcamps - microsoft/iot-curriculum</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/what-is-azure-defender/ba-p/1843528?WT.mc_id=modinfra-9866-socuff" target="_blank" rel="noopener">What is Azure Defender?</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank">Sonia Cuff</A></I></STRONG></P> <P>Learn about the improved experience for managing security across hybrid and multi-cloud environments with the Azure Defender XDR product.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/all-you-need-to-know-about-microsoft-exams/ba-p/1794460?WT.mc_id=modinfra-10046-salean" target="_blank" rel="noopener">All you need to know about Microsoft Exams</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Taking any exam can be a stressful experience which requires a lot of preparation and planning. Let's look at the process for studying, booking and sitting a Microsoft exam. </P> <P> </P> <P><A href="https://youtu.be/Q-s6eFPv4QM" target="_blank" rel="noopener">Introduction to #WebXR with Ayşegül Yönet</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank">Aysegul Yonet</A></I></STRONG></P> <P>🥽 WebXR is the latest evolution in the exploration of virtual and augmented realities. Sounds interesting, right? Dive into the Basics of WebXR with Ayşegül.</P> <P><LI-VIDEO vid="https://youtu.be/Q-s6eFPv4QM" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://dev.to/azure/build-a-web-api-with-node-js-and-express-16fk" target="_blank" rel="noopener">Build a web API with Node.js and Express</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank">Yohan Lasorsa</A></I></STRONG></P> <P>Learn how to use Node.js and Express to create a RESTful web API with this series of bite-sized videos for beginners. </P> <P> </P> <P><A href="https://developer.microsoft.com/sharepoint/blogs/microsoft-365-pnp-weekly-episode-103/?WT.mc_id=m365-10520-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 103 - Microsoft 365 Developer Blog</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://dev.to/dotnet/net-learning-challenge-4008" target="_blank" rel="noopener">.NET Learning Challenge!</A><BR /><STRONG><I><A href="https://twitter.com/spboyer" target="_blank">Shayne Boyer</A></I></STRONG></P> <P>Compete, Learn, and Develop Skills <A href="https://aka.ms/dotnetskills" target="_self">https://aka.ms/dotnetskills</A> November 1, 2020 - November 30th. </P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/how-to-get-started-learning-microsoft-azure-and-cloud-computing/" target="_blank" rel="noopener">How to get started learning Microsoft Azure and Cloud Computing</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Here is how to get started with learning Microsoft Azure and Cloud Computing. Check out this blog and learn how to get started with Azure!</P> <P> </P> <P><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Interview with Sarah Lean, Senior Cloud Advocate at Microsoft</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/experts-live-switzerland-2020-azure-hybrid-learn-about-hybrid-cloud-management/" target="_blank" rel="noopener">Experts Live Switzerland 2020: Azure Hybrid – Learn about Hybrid Cloud Management</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Now the recording of my session: "Azure Hybrid - Learn about Hybrid Cloud Management" is available! With an overview on Microsoft Azure Arc!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/internet-of-things/az-220-iot-developer-certification-study-guide/ba-p/1854393?WT.mc_id=iot-10684-pdecarlo" target="_blank" rel="noopener">AZ-220 IoT Developer Certification Study Guide</A><BR /><STRONG><I><A href="https://twitter.com/pjdecarlo" target="_blank">Paul DeCarlo</A></I></STRONG></P> <P>Microsoft offers an official IoT Developer Specialty Certification which requires passing the AZ-220 Certification Exam . </P> <P> </P> <P><A href="https://www.youtube.com/playlist?list=PLGi0uFHAUvEGIXv0dm93Dca84FT3EXGY0" target="_blank" rel="noopener">Environment Monitor Lab - Using a Raspberry Pi</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank">Jim Bennett</A></I></STRONG></P> <P>A walkthrough of the Environment Monitor IoT lab available at <A href="https://aka.ms/iot-curriculum/env-monitor" target="_blank">https://aka.ms/iot-curriculum/env-monitor</A> using a Raspberry Pi and a Grove Pi+ kit.</P> <P> </P> <P><A href="https://devkimchi.com/2020/11/05/deploying-azure-functions-via-github-actions-without-publish-profile/" target="_blank" rel="noopener">Deploying Azure Functions via GitHub Actions without Publish Profile</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank">Justin Yoo</A></I></STRONG></P> <P>This post shows how to deploy Azure Functions app via GitHub Actions, without having to know the publish profile.</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-11-05-building-a-video-chat-app-part-3-displaying-video/" target="_blank" rel="noopener">Building a Video Chat App, Part 3 - Displaying Video | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank">Aaron Powell</A></I></STRONG></P> <P>We've got access to the camera, now to display the feed</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=FHsMf_S7Tds" target="_blank" rel="noopener">Azure Thursday - 5 November 2020</A><BR /><STRONG><I><A href="https://twitter.com/hboelman" target="_blank">Henk Boelman</A></I></STRONG></P> <P>View the schedule on: <A href="https://www.azurethursday.com" target="_self">https://www.azurethursday.com</A></P> <P> </P> <P><A href="https://blog.mastykarz.nl/download-user-group-profile-picture-microsoft-graph-js-sdk/" target="_blank" rel="noopener">Quick tip: download user or group profile picture using Microsoft Graph JS SDK</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>When building your application on Microsoft 365 you might need to download the profile picture of a user or group. Here is how to do it using the Microsoft Graph SDK.</P> <P> </P> <P><A href="https://dev.to/maudlv/evenements-en-ligne-intelligence-artificielle-machine-learning-et-azure-4jb6" target="_blank" rel="noopener">Evénements en ligne : Intelligence Artificielle, Machine Learning et Azure</A><BR /><STRONG><I>Maud Levy</I></STRONG></P> <P>Pour le mois de novembre, Microsoft propose plusieurs conférences en ligne en français autour du Mach...</P> <P> </P> <P><A href="https://youtu.be/McXNicDXWkM" target="_blank" rel="noopener">Dataminds Connect - Taking Models To The Next Level With Azure Machine Learning</A><BR /><STRONG><I><A href="https://twitter.com/hboelman" target="_blank">Henk Boelman</A></I></STRONG></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/McXNicDXWkM" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <!-- Add a placeholder for the Twitch embed --><!-- Load the Twitch embed script --><!-- Create a Twitch.Player object. This will render within the placeholder div --> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/c-corner-azure-learning-and-microsoft-certification-ama-ft-thomas-maurer/" target="_blank" rel="noopener">C# Corner Azure Learning and Microsoft Certification – AMA ft. Thomas Maurer</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Last week I had the honor to be a guest in the C# Corner Live AMA (Ask Me Anything) about Azure Learning and Microsoft Certification.</P> <P> </P> Mon, 09 Nov 2020 15:23:03 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-net-learn-challenge-ms-exam-prep/ba-p/1867304 spboyer 2020-11-09T15:23:03Z Using IoT and Azure to Help with Family Chores https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-iot-and-azure-to-help-with-family-chores/ba-p/1809444 <H3>Intro </H3> <P> </P> <P>At Microsoft Ignite 2020, Scott Hanselman showcased how he is using Azure, IoT (Internet of Things), and Developer Tools to help his family manage household chores. </P> <P> </P> <H3>The Problem</H3> <P> </P> <P>Scott, like more and more people who are working from home, realized that there had to be a better way to stay in front of the need to do additional chores around his home. With everyone at home, things like dishes, garbage, and general chores add up fast. He wanted to be able to see at a glance the current list of chores that needed to be completed, real-time status of chores that can change quickly over time, and to be notified when certain chores were needed to be complete, for instance garbage.</P> <P> </P> <H3>The Solution</H3> <P> </P> <P>Scott already leverages a <A href="https://dakboard.com/site" target="_blank" rel="noopener">DAKboard</A>, which allows customization of a display via a website. On <A href="https://www.hanselman.com/blog/how-to-build-a-wall-mounted-family-calendar-and-dashboard-with-a-raspberry-pi-and-cheap-monitor" target="_blank" rel="noopener">his DAKboard</A>, Scott can put his work/personal calendar, family photos and the weather all on a monitor that sits in his kitchen. He wanted to be able to add a "heatmap" of sorts to his DAKboard that would show parts of the house that notable chores are (garbage cans for instance) and what the "status" of them are in real-time. This way, if he sees that a chore needs to be done, the family can respond. </P> <P> </P> <P>There are a few things at play here. </P> <P> </P> <UL> <LI><STRONG>Sensors: </STRONG>Most of the chores rely on items that are not "smart", so external sensors and an IoT solution will be needed.</LI> <LI><STRONG>Web:</STRONG> The heatmap requires real-time updates, so a web solution that offers such will be needed.</LI> <LI><STRONG>Notifications:</STRONG> Finally, he wants to be notified when the threshold is met of a certain chore instantly, so a communication mechanism is needed.</LI> </UL> <P> </P> <P>With the above requirements, we can start to build a solution. The solution will require an IoT device that will poll the status of a particular chore. The device will update a datastore via a service and the heatmap will be a web application that will sync with the value of the datastore in real time. With that, we landed on the below solution architecture.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture1.png" style="width: 936px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/231521iF77D129E628EDA49/image-size/large?v=v2&px=999" role="button" title="Picture1.png" alt="Picture1.png" /></span></P> <P> </P> <P>To build the solution, we knew that an IoT device would be needed to monitor the status of the chore. We decided on a <A href="https://www.raspberrypi.org/" target="_blank" rel="noopener">Raspberry Pi</A> with a connected . In the case of garbage status, the sensor was attached to the inside of the lid of the garbage can. The sensor could then check the level of the garbage in the can and update the chore datastore via an Azure Function written in Node.js. When the datastore is updated, another Azure Function, written in C#, is triggered that compares the current level to the threshold, and if it is met, a notification is sent.</P> <P> </P> <P>For the notification, we relied on recently announced <A href="https://docs.microsoft.com/en-us/azure/communication-services/overview" target="_blank" rel="noopener">Azure Communication Services</A><U><SPAN> to send an SMS</SPAN></U>. When the notification function determines a message needs to be sent, it will leverage a <A href="https://docs.microsoft.com/en-us/azure/communication-services/quickstarts/telephony-sms/get-phone-number" target="_blank" rel="noopener">phone number</A> obtained via Azure Communication Services and the chore assignee will get a message from that number. Azure Communication Services is configured via the Azure Portal, more information can be seen at the <A href="https://github.com/microsoft/ChoresIoT#deployment-scenarios" target="_blank" rel="noopener">GitHub repository for the ChoresIOT solution</A>. Working against Azure Communication Services is seamless, as it is included in the already existing <A href="https://azure.github.io/azure-sdk/" target="_blank" rel="noopener">Azure SDK</A> (software development kit). There is also an <A href="https://docs.microsoft.com/en-us/azure/communication-services/quickstarts/telephony-sms/logic-app" target="_blank" rel="noopener">Azure Logic App connector for Azure Communication Services</A> that you can leverage.</P> <P> </P> <P>For the heatmap UI, we need to leverage a web technology that allows real-time communication with the function that manages the datastore. The technology that was decided on was <A href="https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-overview" target="_blank" rel="noopener">Azure SignalR Service</A>. The complete application leverages <A href="https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-3.1#blazor-webassembly" target="_blank" rel="noopener">ASP.NET Core Blazor WebAssembly</A> in .NET 5 configured to integrate with Azure SignalR Service. Because we are leveraging <A href="https://webassembly.org/" target="_self">WebAssembly</A>, we are able to deploy the application to any host since a backend server is not required. We deployed the web application to <A href="https://docs.microsoft.com/en-us/azure/static-web-apps/overview" target="_blank" rel="noopener">Azure Static Web Apps</A>, a new service in Azure where you can host applications that do not require a connected backend server. Finally, since the solution is using Azure SignalR Service, when the chore datastore is updated, the heatmap will update automatically whenever the threshold for a particular chore is met.</P> <P> </P> <P>Now that the solution is complete, whenever a chore status is updated via the Raspberry Pi, the datastore will be updated via the Azure Function. Once the datastore is updated, the other Azure Function will check the status the chore threshold and send an SMS if needed. Finally, the heatmap will be updated in real-time. This end to end experience can be seen below during the Microsoft Ignite 2020 session.</P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/0oLZPgbKvmc?t=1158" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/0oLZPgbKvmc/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P>As you can see in the video, when Scott puts trash into the garbage, the heatmap automatically updates and he receives an SMS message, powered by Azure Communication Services. </P> <P> </P> <H3>What's Next?</H3> <P> </P> <P>The <A href="https://github.com/microsoft/ChoresIoT" target="_self">ChoresIoT GitHub Repository</A> lists out all the parts needed to setup a similar solution at home. Take a look at the source code and contribute or ask questions if interested. For more information on <A href="https://azure.microsoft.com/en-us/services/communication-services/" target="_self">Azure Communication Services</A> and how to enable telephony-over-IP communications features to your applications, be sure to check out the <A href="https://docs.microsoft.com/azure/communication-services/overview" target="_blank" rel="noopener">documentation</A>.</P> <P> </P> <P>Also be sure to check out the <A href="https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-free-services" target="_blank" rel="noopener">free services</A> that you can create in Azure today.</P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> Wed, 04 Nov 2020 20:33:33 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-iot-and-azure-to-help-with-family-chores/ba-p/1809444 Isaac Levin 2020-11-04T20:33:33Z Azure Advocate Weekly Round Up - DNS + SSL & GitHub Actions? HealthChecks for VMs? Sounds Scary!!! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-dns-ssl-amp-github-actions/ba-p/1837854 <P><A href="https://www.xamarinpodcast.com/80" target="_blank" rel="noopener">The Xamarin Podcast Episode 80: Seeing AI</A><BR /><STRONG><I><A href="https://twitter.com/codemillmatt" target="_blank">Matt Soucoup</A></I></STRONG></P> <P>Seeing AI is an app for iOS that narrates the world around you. And it's built with Xamarin and Azure. In this episode of the Xamarin Podcast, Matt talks to the folks behind Seeing AI.</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/the-carbon-footprint-of-ai/?WT.mc_id=green-8966-ashussai" target="_blank" rel="noopener">The Carbon Footprint Of AI | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank">Asim Hussain</A></I></STRONG></P> <P>The carbon footprint of AI is increasing exponentially. Bigger models requiring ever more data contribute toward 'RedAI' - we need a new approach</P> <P> </P> <P><A href="https://youtu.be/OIKV_jc3yec" target="_blank" rel="noopener">Collect data from a Windows computer in a hybrid environment with Azure Monitor</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Azure Monitor can collect data directly from your physical or virtual Windows computers in your environment into a Log Analytics workspace for detailed analy...</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=EMceqFUDh4M" target="_blank" rel="noopener">Microsoft 365 & SharePoint PnP Weekly – Episode 102</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>In this weekly discussion of latest news and topics around Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) </P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/first-look-at-azure-automanage/ba-p/1787819?WT.mc_id=modinfra-9950-salean" target="_blank" rel="noopener">First Look at Azure Automanage</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Let's take a first look at the new service, Azure Automanage that was launched at Microsoft Ignite 2020.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/step-by-step-azure-resource-health-alert-into-microsoft-teams/ba-p/1817484?WT.mc_id=modinfra-10077-socuff" target="_blank" rel="noopener">Step-by-Step: Azure Resource Health alert into Microsoft Teams</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank">Sonia Cuff</A></I></STRONG></P> <P>Step-by-step create an Azure resource health alert for an unavailable virtual machine and post a message into Microsoft Teams.</P> <P> </P> <P><A href="https://24x7itconnection.com/2020/10/29/microsoft-endpoint-manager-for-modern-management-in-2020/" target="_blank" rel="noopener">Microsoft Endpoint Manager for Modern Management in 2020</A><BR /><STRONG><I><A href="https://twitter.com/ExchangeGoddess" target="_blank">Phoummala Schmitt</A></I></STRONG></P> <P>This year more than ever it’s important to be able to secure and manage devices. Microsoft Endpoint Manager is a great option.</P> <P> </P> <P><A href="https://www.techielass.com/teams-meeting-recordings" target="_blank" rel="noopener">Microsoft Teams Meeting Recordings</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Techie Lass Blog - Technical…Practical…From A Scottish Lass</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/manage-sharepoint-and-microsoft-teams-with-powershell-core/ba-p/1792229?WT.mc_id=modinfra-10259-abartolo" target="_blank" rel="noopener">How to Manage SharePoint and Microsoft Teams with PowerShell Core</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank">Anthony Bartolo</A></I></STRONG></P> <P>If you're addicted with SharePoint, you might be glad to know that managing SharePoint is now possible with PowerShell Core.</P> <P> </P> <P><A href="https://youtu.be/6fhpyi1oJMk" target="_blank" rel="noopener">Azure Security Centre - Asset Inventory</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>In this "Azure at a Glance" video let's take a look at what the Asset Inventory feature with Azure Security Centre can offer you. For more information check ...</P> <P> </P> <P><A href="https://devkimchi.com/2020/10/28/updating-azure-dns-and-ssl-certificate-on-azure-functions-via-github-actions/" target="_blank" rel="noopener">Updating Azure DNS and SSL Certificate on Azure Functions via GitHub Actions</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank">Justin Yoo</A></I></STRONG></P> <P>This post shows how to automatically update A record on Azure DNS when the inbound IP address of Azure Functions instance is updated, and reflect the change to the SSL certificate through GitHub Actions.</P> <P> </P> <P><A href="https://www.jimbobbennett.io/run-visual-studio-code-on-a-raspberry-pi/" target="_blank" rel="noopener">Run Visual Studio Code on a Raspberry Pi</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank">Jim Bennett</A></I></STRONG></P> <P>It's finally here! An official supported version of VS Code that runs on a Raspberry Pi! ICYMI: VS Code now officially supports @Raspberry_Pi too! </P> <P> </P> <P><A href="https://www.youtube.com/watch?v=3DgpVwnQ3V4" target="_blank" rel="noopener">Demo JBoss EAP VMSS Quickstart</A><BR /><STRONG><I><A href="https://twitter.com/skriemhild" target="_blank">Sandra Ahlgrimm</A></I></STRONG></P> <P>Theresa Nguyen, Senior Product Manager at Microsoft showcases JBoss EAP on Azure VMSS </P> <P> </P> <P><A href="https://channel9.msdn.com/Shows/IT-Ops-Talk/Azure-Stack-Hub-Partner-Solutions-Series-MyCloudDoor?WT.mc_id=modinfra-10338-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - MyCloudDoor</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>MyCloudDoor is an Azure Stack Hub partner and Preferred SI that focused on managed services and creating value for their customers throughout the world. </P> <P> </P> <P><A href="https://youtu.be/5CZT8-7eFkg" target="_blank" rel="noopener">Az Update Show S01E26</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank">Pierre Roman</A></I></STRONG></P> <P>Episode 26 of the Az Update Show. Another plethora of news stories to share on this week's AzUpdate show. News includes: What’s new for IT Pros in Windows 10...</P> <P> </P> <P><A href="https://dev.to/azure/get-your-to-do-tasks-every-morning-on-microsoft-teams-using-azure-logic-apps-3ci1/?WT.mc_M365-10421-aycabas" target="_blank" rel="noopener">Get your To-Do tasks every morning on Microsoft Teams using Azure Logic Apps</A><BR /><STRONG><I><A href="https://twitter.com/aycabs" target="_blank">Ayca Bas</A></I></STRONG></P> <P>I am super excited since Microsoft Graph To Do APIs are introduced at Microsoft Build 2020. </P> <P> </P> <P><A href="https://dev.to/sinedied/work-with-files-and-directories-in-a-node-js-app-4kh8" target="_blank" rel="noopener">Work with files and directories in a Node.js app</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank">Yohan Lasorsa</A></I></STRONG></P> <P>Learn how to use built-in modules to work with files and directories in a Node.js app with this series of bite-sized videos for beginners. Tagged with webdev, beginners, javascript, node.</P> <P> </P> <P><A href="https://blog.mastykarz.nl/move-microsoft-teams-without-losing-content/" target="_blank" rel="noopener">Move to Microsoft Teams without losing your content</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>With this new Microsoft Graph API you can move to Microsoft Teams and take your data with you!</P> <P> </P> Fri, 30 Oct 2020 15:43:41 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-dns-ssl-amp-github-actions/ba-p/1837854 spboyer 2020-10-30T15:43:41Z Developers + Nurses = NurseHack4Health https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-nurses-nursehack4health/ba-p/1820356 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NurseHack4Health.png" style="width: 444px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232950iF82DEF17B3243D04/image-size/large?v=v2&px=999" role="button" title="NurseHack4Health.png" alt="NurseHack4Health.png" /></span></P> <P>Microsoft is a proud sponsor of <STRONG>NurseHack4Health</STRONG> - a 3 day virtual hackathon from <STRONG>Nov. 13-15, 2020</STRONG> to leverage technology and help improve access to reliable, trusted information. This hackathon is made possible by the collaboration between Microsoft, Johnson & Johnson, SONSIEL, and devup. Read below for more details, and <STRONG>register at</STRONG> <A href="https://www.nursehack4health.org/" target="_blank" rel="noopener">https://www.nursehack4health.org/</A> <STRONG>by Nov. 9 to reserve a spot</STRONG>. </P> <P> </P> <P><STRONG>The challenge:</STRONG> Information about the COVID-19 pandemic is rapidly changing, and gaining access to reliable public health information has been challenging, highlighting a need for improved communication and trustworthy resources. </P> <P> </P> <P><STRONG>The hackathon:</STRONG> This event presents a rare opportunity to bring together individuals with a diverse set of ideas and skills - nurses, other healthcare professionals, engineers, IT experts and innovators - to problem-solve in a supporting, inspiring and innovative environment. This is an open source hackathon being hosted on Microsoft Teams, and using GitHub for solution repositories.</P> <P> </P> <P><STRONG>The participant's experience:</STRONG> Participants will focus on how technology can be leveraged to create better outcomes for all in the most pressing areas of education and communication. Central ideas of focus may include:</P> <UL> <LI>Ensuring the health and safety of students and teachers in the classroom</LI> <LI>Relaying to the public the importance of vaccines</LI> <LI>Breaking down racial disparities and social inequities</LI> <LI>Sharing best practices across healthcare providers and facilities</LI> <LI>And more</LI> </UL> <P>Participants will also:</P> <UL> <LI>Work alongside Microsoft and architects from the dev community</LI> <LI>Bring existing skills around HTML/JavaScript, ASP.NET, Java, SQL or NoSQL</LI> <LI>Have access to free Azure services, Power BI, and Power Apps during the duration of the hackathon</LI> </UL> <P> </P> <P><STRONG>Pre-hackathon training:</STRONG> The hackathon is supported by Microsoft mentors to help answer technical questions. To get a jump start on GitHub, Teams, Power Apps, and Power Virtual Agents bots, join the <A href="https://aka.ms/nursehack4health/cscreg" target="_self">Cloud Skills Challenge</A> for curated self-learning modules covering these topics. Track your progress against others on the <A href="https://aka.ms/nursehack4health/cscleader" target="_self">leaderboard</A>.</P> <P> </P> <P>During the hackathon, the following technologies are expected to surface:</P> <UL> <LI>AI-Driven Software Development</LI> <LI>Progressive Web Apps</LI> <LI>Internet of Things for Healthcare - Connecting Devices, Enhancing Accessibility</LI> <LI>Blockchain</LI> <LI>AR/VR/MR - The Use of Immersive Technologies</LI> <LI>Low/No-Code Development - Development Using GUIs (Power Platform)</LI> </UL> <P> </P> <P><STRONG>All participants are welcomed</STRONG>: Despite the event being called a hackathon, this is not just about coding, it's about community. Whether you are new to hackathons or a veteran, there are plenty of ways to get involved, and it's a great opportunity to learn. All participants are welcomed!</P> <P> </P> <P>Register or learn more about the hackathon at <A href="https://www.nursehack4health.org/" target="_blank" rel="noopener">https://www.nursehack4health.org/</A></P> <P> </P> <P> </P> Wed, 11 Nov 2020 18:16:54 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-nurses-nursehack4health/ba-p/1820356 NinaSui 2020-11-11T18:16:54Z Azure Advocates Weekly Round Up - Saving Halloween with Azure Maps and more! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-saving-halloween-with-azure-maps/ba-p/1819428 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CatShark.jpg" style="width: 880px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232982i8B23E1BEA8B332CE/image-size/large?v=v2&px=999" role="button" title="CatShark.jpg" alt="CatShark.jpg" /></span></P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-salt/ba-p/1795522?WT.mc_id=modinfra-8959-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - Salt</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Salt business focuses on bringing a multi-tenanted Azure Stack Hub environment in the Caribbean Islands. Check it out!</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=wl80Bk5T7b4" target="_blank" rel="noopener">Microsoft 365 PnP Weekly – Episode 101</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>In this 1st installment after the 100th installment of the weekly discussion revolving around the latest news and topics on Microsoft 365.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/windows-subsystem-for-linux-2-traffic-routing-issues/ba-p/1764074?WT.mc_id=modinfra-9875-abartolo" target="_blank" rel="noopener">Windows Subsystem for Linux 2 - Addressing Traffic Routing Issues</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>WSL2 traffic not routing to local Hyper-V vSwitches? Check this out!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-migrate-and-powerbi/ba-p/1778654?WT.mc_id=modinfra-9876-salean" target="_blank" rel="noopener">Azure Migrate and PowerBI</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Use new PowerBI templates to visualise your Azure Migrate data!</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=lMl2r_Wi_C8&feature=youtu.be" target="_blank" rel="noopener">October 22, 2020 | Leveraging Turnkey AI Live Tutorial</A><BR /><STRONG><I><A href="https://twitter.com/ruthieyakubu" target="_blank" rel="noopener">Ruth Yakubu</A></I></STRONG></P> <P>Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.</P> <P> </P> <P><A href="https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=aiml-9969-ayyonet" target="_blank" rel="noopener">Cognitive Services—APIs for AI Developers | Microsoft Azure</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank" rel="noopener">Aysegul Yonet</A></I></STRONG></P> <P>Azure Cognitive Services brings AI within reach of every developer through a family of APIs that don’t require machine-learning expertise.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-portal-announcements-and-videos/ba-p/1794165?WT.mc_id=modinfra-10078-socuff" target="_blank" rel="noopener">Azure portal - Announcements and videos</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>Like any cloud service, the Azure portal also gets updates - here's how to stay up to date with the announcements.</P> <P> </P> <P><A href="https://dev.to/rabwill/hosting-my-first-ever-developer-bootcamp-in-microsoft-teams-a-retrospect-1ghi" target="_blank" rel="noopener">Hosting my first ever Developer Bootcamp in Microsoft Teams : A retrospect</A><BR /><STRONG><I>Rabia Williams</I></STRONG></P> <P>IMAGINE… You have a few weeks, to collaborate with a select groups of awesome fellow techies...</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=iiLbhj4hPJM&feature=youtu.be" target="_blank" rel="noopener">Build “One Productivity Hub” using Microsoft Teams and Microsoft Graph Toolkit</A><BR /><STRONG><I><A href="https://twitter.com/aycabs" target="_blank" rel="noopener">Ayca Bas</A></I></STRONG></P> <P>In this workshop you will learn to use Microsoft Graph Toolkit to build a solution for Microsoft Teams. The user will be able to track daily calendar, tasks ...</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/10/video-recording-azure-architecture-best-practices/" target="_blank" rel="noopener">Video Recording: Azure Architecture Best Practices</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Here is the Azure Architecture Best Practices Virtual Event Video Recording with Microsoft Cloud Solution Architect, Dominik Zemp!</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/10/how-to-create-azure-hybrid-cloud-architectures" target="_blank" rel="noopener">How to create Azure Hybrid Cloud Architectures</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Looking for Azure hybrid cloud architectures in the Azure Architecture Center? You can find diagrams, reference architectures, and much more!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-windows-10-version-20h2-azure-ad-provisioning-updates/ba-p/1810670?WT.mc_id=modinfra-10100-abartolo" target="_blank" rel="noopener">AzUpdate: Windows 10 version 20H2, Azure AD provisioning updates, Modular Datacenters and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>Another plethora of news stories to share on this week's AzUpdate show. News includes: What’s new for IT Pros in Windows 10 version 20H2, Designing Azure Modular Datacenters, Azure AD provisioning updates that include attribute mapping and improved performance, newly announced plans for Microsoft to establish its first cloud region in Austria and as always, the Microsoft Learn module of the week.</P> <P> </P> <P><A href="https://dev.to/azure/azurefunbytes-short-ai-on-azure-2d8j" target="_blank" rel="noopener">AzureFunBytes Short - AI on @Azure</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>With AI, we can build solutions that seemed like science fiction a short time ago; enabling incredibl... Tagged with azure, cloud, beginners, ai.</P> <P> </P> <P><A href="https://bit.ly/ato-ml-docker" target="_blank" rel="noopener">Docker and Python: making them play nicely and securely for Ml and DS</A><BR /><STRONG><I><A href="https://twitter.com/ixek" target="_blank" rel="noopener">Tania Allard</A></I></STRONG></P> <P>Docker has become a standard tool for developers around the world to deploy applications in a reproducible and robust manner. The existence of Docker and Docker compose have reduced the time needed to set up new software and implementing complex technology stacks for our applications. Now, six years after the initial release of` Docker, we can say with confidence that containers and containers orchestration have become some of the defaults in the current technology stacks. There are thousands of tutorials and getting started documents for those wanting to adopt Docker for apps deployment. However, if you are a Data Scientist, a researcher or someone working on scientific computing wanting to adopt Docker, the story is quite different. There are very few tutorials (in comparison to app/web) and documents focused on Docker best practices for DS and scientific computing. If you are working on DS, ML or scientific computing, this talk is for you. We’ll cover best practices when building Docker containers for data-intensive applications, from optimising your image build, to ensuring your containers are secure and efficient deployment workflows. We will talk about the most common problems faced while using Docker with data-intensive applications and how you can overcome most of them. Finally, I’ll give some practical and useful tips for you to improve your Docker workflows and practises. Attendees will leave the talk feeling confident about adopting Docker across a range of DS, ML and research projects.</P> <P> </P> <P><A href="https://youtu.be/MPGUcfzSVNs" target="_blank" rel="noopener">Deploy your Java Application to Azure App Service with Maven</A><BR /><STRONG><I><A href="https://twitter.com/skriemhild" target="_blank" rel="noopener">Sandra Ahlgrimm</A></I></STRONG></P> <P>In this 4 minutes tutorial Sandra shows how you can deploy a Spring Boot web application to Azure App Service.</P> <P> </P> <P><A href="https://dev.to/azure/saving-halloween-2020-with-azure-maps-and-candy-caches-22f" target="_blank" rel="noopener">Saving Halloween 2020 with Azure Maps and Candy Caches</A><BR /><STRONG><I><A href="https://twitter.com/JenLooper" target="_blank" rel="noopener">Jen Looper</A></I></STRONG></P> <P>Let me show you how I rallied my town and created a map showing kids where to find contactless, pandemic-friendly candy caches that saved Halloween!. Tagged with javascript, vue, webdev, tutorial.</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-10-22-building-a-video-chat-app-part-2-accessing-cameras/" target="_blank" rel="noopener">Building a Video Chat App, Part 2 - Accessing Cameras | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank" rel="noopener">Aaron Powell</A></I></STRONG></P> <P>Lights, camera, action! It's time to get devices for our app.</P> <P> </P> <P><A href="https://dev.to/lazerwalker/using-game-design-to-make-virtual-events-more-social-24o" target="_blank" rel="noopener">Using Game Design to Make Virtual Events More Social</A><BR /><STRONG><I><A href="https://twitter.com/lazerwalker" target="_blank" rel="noopener">Em Lazer-Walker</A></I></STRONG></P> <P>A few months ago, I had a conundrum: I couldn't stand virtual conferences. I personally go to in-per... Tagged with games, conferences, mud, events.</P> <P> </P> <P><A href="https://www.jimbobbennett.io/run-visual-studio-code-on-a-raspberry-pi/" target="_blank" rel="noopener">Run Visual Studio Code on a Raspberry Pi</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">Jim Bennett</A></I></STRONG></P> <P>It's finally here! An official supported version of VS Code that runs on a Raspberry Pi! ICYMI: VS Code now officially supports @Raspberry_Pi too! </P> <P> </P> <P><A href="https://www.youtube.com/watch?v=3DgpVwnQ3V4" target="_blank" rel="noopener">Demo JBoss EAP VMSS Quickstart</A><BR /><STRONG><I><A href="https://twitter.com/skriemhild" target="_blank" rel="noopener">Sandra Ahlgrimm</A></I></STRONG></P> <P>Theresa Nguyen, Senior Product Manager at Microsoft showcases JBoss EAP on Azure VMSS Find more at <A href="https://aka.ms/jbossEAP" target="_blank" rel="noopener">https://aka.ms/jbossEAP</A> and <A href="https://aka.ms/jboss-eap" target="_blank" rel="noopener">https://aka.ms/jboss-eap</A> Get y...</P> <P> </P> Wed, 11 Nov 2020 20:01:42 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-saving-halloween-with-azure-maps/ba-p/1819428 spboyer 2020-11-11T20:01:42Z Check out new data science Learn modules inspired by the Netflix Original Over the Moon https://techcommunity.microsoft.com/t5/azure-developer-community-blog/check-out-new-data-science-learn-modules-inspired-by-the-netflix/ba-p/1806363 <P class="lia-align-left"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="OTM_Final.JPG" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/228398i13F661BB9489BCFC/image-size/large?v=v2&px=999" role="button" title="OTM_Final.JPG" alt="OTM_Final.JPG" /></span></P> <P> </P> <P>The need for more data scientists, machine learning experts, and AI engineers in every industry is rapidly growing. These roles required a broad set of skills from data analysis with no-code and low-code solutions to designing and writing intricate machine learning models that solve some of our planets most difficult problems. Microsoft is dedicated to providing high quality, free content to help you develop your skills depending on your professional goals and personal interests.</P> <P> </P> <P>One such endeavor in creating an opportunity for you to learn and upskill is through unique partnerships. In the summer of 2020 we launched a set of Microsoft Learn modules inspired by real NASA scientists and engineers at <A href="https://aka.ms/LearnInSpace" target="_blank" rel="noopener">https://aka.ms/LearnInSpace</A>. And this Fall we are excited to bring you three more Microsoft Learn modules inspired by the new <A href="https://www.youtube.com/watch?v=26DIABx44Tw" target="_blank" rel="noopener">Netflix Original Over the Moon</A>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sguthals_0-1603321787474.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/228379iBEFCDB95D74DE4AD/image-size/medium?v=v2&px=400" role="button" title="sguthals_0-1603321787474.jpeg" alt="sguthals_0-1603321787474.jpeg" /></span></P> <P> </P> <P>Fei Fei is a young girl who builds a rocket to the Moon on a mission to prove the existence of a legendary Moon Goddess. Fei Fei is fueled by the memories and love of her mother to use her creativity, resourcefulness, determination, and imagination to accomplish something beyond this world: reach the Moon. While the story takes place in a beautifully drawn universe, it is directly related to the types of problems real-life engineers face as they prepare and execute missions to the Moon and beyond. These lessons are also on our<A href="http://microsoft.com/inculture/over-the-moon/?ocid=AID3024378_QSG_485828#STEM" target="_blank" rel="noopener"> Over the Moon InCulture site,</A> where you can also find videos from the voice actors of the film and even a drawing tutorial from director Glen Keane!</P> <P> </P> <P>And with these new resources you can start your journey of using fiction to inspire solutions to real-world problems. I’m not a NASA scientist or engineer, and I’ve never personally been to the Moon, but I have skilled up in coding and data wrangling, allowing me to take what I *do* know about space exploration and make predictions and new discoveries through basic data science practices.</P> <P>So if you’re like me, and you are interested in:</P> <UL> <LI>Space travel</LI> <LI>Moon missions</LI> <LI>Rockets</LI> <LI>Moon rocks</LI> <LI>Animated films</LI> <LI>Fiction</LI> <LI>Coding</LI> <LI>Python</LI> <LI>Data Science</LI> <LI>AI</LI> <LI>Problem solving</LI> <LI>All of the above</LI> </UL> <P>Then, I invite you to not only check out these <A href="https://aka.ms/LearnWithDrG/OverTheMoon" target="_blank" rel="noopener">new Learn modules</A>, but also join me on my new show,<A href="https://aka.ms/LearnWithDrG" target="_blank" rel="noopener"> Learn with Dr G</A>, where I will dive into these modules and do some live coding! You can find all the details below on all of the new learning resources and opportunities related to space!</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sguthals_1-1603321787516.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/228380i00866566231D2CE2/image-size/medium?v=v2&px=400" role="button" title="sguthals_1-1603321787516.jpeg" alt="sguthals_1-1603321787516.jpeg" /></span></P> <P> </P> <H4>Watch <A href="https://www.netflix.com/title/80214236" target="_blank" rel="noopener">Over The Moon - now streaming on Netflix</A>!</H4> <P> </P> <H2>Microsoft Learn Modules</H2> <H4><A href="https://docs.microsoft.com/learn/modules/plan-moon-mission-using-python-pandas?WT.mc_id=OverTheMoon_InCulture_-web-cxa%20" target="_blank" rel="noopener">Preparing for Moon Missions</A></H4> <P>Like Fei Fei, use data to plan your own mission to the Moon. Ensure your rocket can not only get you there, but also bring you and all your Moon rocks safely back to Earth. Analyze and visualize datasets with common data cleansing practices with <A href="https://code.visualstudio.com/learntocode/?utm_source=MSLearn&utm_medium=direct&utm_campaign=PartnerLessons" target="_blank" rel="noopener">Python in Visual Studio Code</A>.</P> <P> </P> <H4><A href="https://docs.microsoft.com/learn/modules/predict-meteor-showers-using-python/?WT.mc_id=OverTheMoon_InCulture_-web-cxa%20" target="_blank" rel="noopener">Predict meteor showers</A></H4> <P><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">B</SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">uild a<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">Machine Learning<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">prediction model</SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun"><SPAN> </SPAN>after cleansing<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">a space-themed data set</SPAN></SPAN><SPAN class="TrackChangeTextInsertion TrackedChange SCXW199629723 BCX8"><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun"><SPAN> </SPAN>on meteor showers. Incorporate Chang’e’s potential<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">affects</SPAN><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun"><SPAN> </SPAN>on meteor showers for an added complexity</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">.<SPAN> </SPAN></SPAN></SPAN></SPAN></P> <P> </P> <H4><A href="https://docs.microsoft.com/learn/modules/train-custom-vision-ai?WT.mc_id=OverTheMoon_InCulture_-web-cxa%20" target="_blank" rel="noopener">Find Bungee on the Moon</A></H4> <P>Repurposing the camera on the Lunar Rover, search through the Moon’s surface for Fei Fei’s buddy Bungee before it’s time to head back to Earth. Use <A href="https://azure.microsoft.com/services/cognitive-services/" target="_blank" rel="noopener">Azure Custom Vision</A> to Classify pictures of animals (like Bungee, main character Fei Fei’s pet) without ever writing code.</P> <P> </P> <H2>Learn with Dr G Live Streams and Episodes</H2> <H4><A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/Over-the-Moon-Learn-Lessons-Overview/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener"><STRONG>Intro to the Over the Moon Modules</STRONG></A></H4> <P>Completing a successful Moon Mission doesn't only involve getting to the moon, but also returning safely to Earth – ideally with some rocks to learn from! Join Dr. G as she draws inspiration from the new <A href="https://www.netflix.com/title/80214236" target="_blank" rel="noopener">Netflix Original Over the Moon</A> and the ingenuity of the NASA Apollo missions to analyze and clean data to predict how much moon rock astronauts might be able to bring back as part of the Artemis Program in 2024. No coding experience required, and you can follow along with the free Microsoft Learn lessons at <A href="https://aka.ms/LearnWithDrG/OverTheMoon" target="_blank" rel="noopener">https://aka.ms/LearnWithDrG/OverTheMoon</A>.</P> <P> </P> <H4><A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/Datas-Role-in-Moon-Missions-Fictional-and-Real/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener"><STRONG>Data’s Role in Moon Missions: Fictional and Real </STRONG></A></H4> <P>Completing a successful Moon Mission doesn’t only involve getting to the moon, but also returning safely to Earth – ideally with some rocks to learn from! Join Dr. G as she draws inspiration from the film and the ingenuity of the NASA Apollo missions to analyze and clean data to predict how much moon rock astronauts might be able to bring back as part of the Artemis Program in 2024.</P> <P> </P> <H4><STRONG>Predicting Meteor Showers Using Python and Visual Studio Code</STRONG></H4> <P>(<A href="https://www.meetup.com/Microsoft-Reactor-Redmond/events/273465419/" target="_blank" rel="noopener">Sign up for Live Stream on October 27th here</A>, <A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener">Available on-demand on October 30th here</A>)</P> <P>In the film, Fei Fei builds a rocket to fly to the Moon to meet the Moon Goddess Chang’e. It is said that when Chang’e cries, her tears are the shooting starts we see in our night sky. This inspired Dr G to deep dive into what meteor showers actually are and how they are predicted. Join this live stream as Dr G explores how data science plays a role in predicting celestial events, and even brings in a little magic from the film to predict when we could have seen the meteor shower caused by Chang’e from Fei Fei’s visit.</P> <P> </P> <H4><STRONG>Use Azure Custom Vision to Repurpose the Lunar Rover</STRONG></H4> <P>(<A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener">Available on-demand on October 30th here</A>)</P> <P>The Lunar rover has been instrumental in helping us advance our understanding of the Moon and our Universe, and in the new film it even makes an appearance when Fei Fei lands on the moon with her buddy Bungee and brother Chin! This inspired Dr G. to think about a scenario where Fei Fei brought her own Lunar rover to the Moon to take pictures and send them back to her once she returned to Earth. In this video, Dr. G will build an image classifier using Azure Custom Vision to identify Bungee so that if Bungee is ever on the Moon without Fei Fei, her Lunar Rover can send down pics of Bungee exploring the surface, and avoid sending pictures of rocks.</P> Fri, 23 Oct 2020 17:58:53 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/check-out-new-data-science-learn-modules-inspired-by-the-netflix/ba-p/1806363 sguthals 2020-10-23T17:58:53Z [Mitigated] DevTest Labs Outage: Certain lab operations may fail due to an ARM outage https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-certain-lab-operations-may-fail/ba-p/1797510 <P>Update: We would like to inform you that the issue is mitigated as of 12:00 AM UTC on 19th Oct 2020. </P> <P> </P> <P>Please add a comment if you are still experiencing any issues within DevTest Labs.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AzureStatus.png" style="width: 452px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233468i2050CA62FA333C71/image-dimensions/452x226?v=v2" width="452" height="226" role="button" title="AzureStatus.png" alt="AzureStatus.png" /></span></P> <P> </P> <P>----------------------------------------------------------------------------------------------------------------</P> <P>We would like to inform you that starting <SPAN>18:35 UTC on 19 Oct 2020,</SPAN> we are currently investigating an issue where certain lab operations may fail. Based on our current investigation, this is happening due to an outage within the Azure Resource Manager. More details on the outage here: <A href="https://status.azure.com/en-us/status?service=cognitive-services" target="_blank" rel="noopener">https://status.azure.com/en-us/status?service=cognitive-services</A></P> <P> </P> <P>Following lab operations may not work as expected during this time: </P> <UL> <LI>Creating/ updating/ deleting lab virtual machines</LI> <LI>Creating custom images, formulas</LI> <LI>Setting lab schedules </LI> </UL> <P> </P> <P>Our team continues to work on a fix and we will update this post to share regular updates. </P> <P> </P> <P>We apologize for the inconvenience and thank you for your patience. </P> <P> </P> <P>-DevTest Labs Team<BR /> </P> <P> </P> Fri, 13 Nov 2020 17:31:07 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-certain-lab-operations-may-fail/ba-p/1797510 TanmayeeKamath 2020-11-13T17:31:07Z Azure Advocates Weekly Round Up - Security, JavaScript, and more M365 this week! https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-security-javascript-and-more/ba-p/1795800 <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Attackers.png" style="width: 514px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233474i74491F50DC7F25DD/image-size/large?v=v2&px=999" role="button" title="Attackers.png" alt="Attackers.png" /></span></P> <P> </P> <P><A href="https://aka.ms/createa11y" target="_blank" rel="noopener">How does accessibility fit into an MVP? | Creating Startups</A><BR /><STRONG><I><A href="https://twitter.com/simona_cotin" target="_blank" rel="noopener">Simona Cotin</A></I></STRONG></P> <P>This is a guest post by Obinna Ekwuno, software engineer at Gatsby and Marcy Sutton, freelance web developer and accessibility specialist. Read more about Obinna and Marcy at the end of this article. Accessibility has become a buzz word for making sure that disabled users get a fair experience when interfacing with platforms on the web or on mobile.</P> <P> </P> <P><A href="https://github.com/OfficeDev/M365Bootcamp-TeamsOneProductivityHub" target="_blank" rel="noopener">OfficeDev/M365Bootcamp-TeamsOneProductivityHub</A><BR /><STRONG><I><A href="https://twitter.com/aycabs" target="_blank" rel="noopener">Ayca Bas</A></I></STRONG></P> <P>Use Microsoft Graph Toolkit to build a solution for Microsoft Teams that will track daily calendar, tasks and e-mails in a Teams Tab as one productivity hub. - OfficeDev/M365Bootcamp-TeamsOneProductivityHub</P> <P> </P> <P><A href="https://acloudguru.com/blog/engineering/how-to-develop-serverless-apps-with-github-codespaces" target="_blank" rel="noopener">How to Develop Serverless Apps with GitHub Codespaces | A Cloud Guru</A><BR /><STRONG><I>Alvaro Videla Godoy</I></STRONG></P> <P>Want to develop a serverless app with Codespaces? This tutorial will show you how to get an Azure Functions & Static Web App project ready.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-ivedha/ba-p/1778793?WT.mc_id=modinfra-8957-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - iVedha</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Aytra was borne as an ISV solution aimed at enabling partners in their Azure Stack Hub journey. Check it out!</P> <P> </P> <P><A href="https://speakerdeck.com/nitya/intro-to-mobile-development" target="_blank" rel="noopener">Intro to Mobile Development</A><BR /><STRONG><I><A href="https://twitter.com/nitya" target="_blank" rel="noopener">Nitya Narasimhan</A></I></STRONG></P> <P>Mobile app development is both a huge opportunity and a constant challenge. In this talk we’ll look at the mobile development landscape – from native apps to multi-platform development and mobile web. We’ll talk about design challenges and personalizing user experiences to match diverse contexts. And we’ll look at emerging paradigms in dual-screen and multi-posture devices (e.g., Surface Duo) and talk about how we can leverage these technological advances to rethink the modern mobile app.</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=Vs_8bh4jOIA" target="_blank" rel="noopener">Microsoft 365 PnP Weekly – Episode 100</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>A weekly discussion of the latest news and topics around Microsoft 365</P> <P> </P> <P><A href="https://devblogs.microsoft.com/devops/what-is-infrastructure-as-code/?WT.mc_id=devops-9609-jagord" target="_blank" rel="noopener">What is infrastructure as code? | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>What is infrastructure as code? Microsoft Azure provides you with a number of options to deploy your infrastructure. In the One Dev Question series, Cloud Developer Advocate Abel Wang explains how Azure DevOps provides developer services to support teams to plan work...</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/top-10-best-practices-for-azure-security/ba-p/1770087?WT.mc_id=modinfra-9720-socuff" target="_blank" rel="noopener">Top 10 Best Practices for Azure Security</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>Mark Simos, lead Cyber security architect for Microsoft, explored the lessons learned from protecting both Microsoft's own technology environments and the responsibility we have to our customers, and shares the top 10 (+1!) recommendations for Azure security best practices.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/what-is-azure-hybrid-benefit/ba-p/1764400?WT.mc_id=modinfra-9767-salean" target="_blank" rel="noopener">What is Azure Hybrid Benefit?</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>The Azure Hybrid Benefit can help you save move when you are running your workloads within Azure by leveraging your on prem licenses, find out more in this blog post. </P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/10/automanage-for-azure-virtual-machines/" target="_blank" rel="noopener">Automanage for Azure virtual machines</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Azure Automanage for virtual machines is a service that helps to discover, onboard, and configure Azure Management services for Azure VMs.</P> <P> </P> <P><A href="https://dev.to/lazerwalker/running-a-virtual-conference-roguelike-celebration-s-av-setup-44hk" target="_blank" rel="noopener">Running A Virtual Conference: Roguelike Celebration’s AV Setup </A><BR /><STRONG><I><A href="https://twitter.com/lazerwalker" target="_blank" rel="noopener">Em Lazer-Walker</A></I></STRONG></P> <P>The Roguelike Celebration conference has been running for five years, but two weeks ago marks our fir... Tagged with streaming, events, conferences, twitch.</P> <P> </P> <P><A href="https://github.com/DanWahlin/Fluidvue" target="_blank" rel="noopener">DanWahlin/FluidVue</A><BR /><STRONG><I><A href="https://twitter.com/danwahlin" target="_blank" rel="noopener">Dan Wahlin</A></I></STRONG></P> <P>Contribute to DanWahlin/FluidVue development by creating an account on GitHub.</P> <P> </P> <P><A href="https://devkimchi.com/2020/10/14/lets-encrypt-ssl-certificate-on-azure-functions/" target="_blank" rel="noopener">Adding Let's Encrypt SSL Certificate to Azure Functions</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank" rel="noopener">Justin Yoo</A></I></STRONG></P> <P>This post shows how to generate an SSL certificate through Let's Encrypt API and bind the certificate to the custom APEX domain on Azure Functions app.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-microsoft-365-apps-admin-center-azure-site-recovery-tls/ba-p/1785491?WT.mc_id=modinfra-9985-abartolo" target="_blank" rel="noopener">AzUpdate: Microsoft 365 Apps Admin Center, Azure Site Recovery TLS Certificate Changes and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>Lots to share in the world of Microsoft services this week. News includes Microsoft 365 Apps Admin Center's new inventory & monthly servicing feature currently in preview, Azure Cognitive Services has achieved human parity in image captioning, Azure Site Recovery TLS Certificate Changes, Static Web App PR Workflow for Azure App Service using Azure DevOps, and of course the Microsoft Learn Module of the week.</P> <P> </P> <P><A href="https://blog.mastykarz.nl/250-million-reasons-build-applications-microsoft-365/" target="_blank" rel="noopener">250 million reasons to build applications on Microsoft 365</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>You might have heard of Microsoft Teams, Outlook, or SharePoint. But did you know that next to being some of the most popular applications from Microsoft, they are a part of a highly extensible development platform with a rich partner ecosystem?</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-10-13-want-to-learn-javascript-weve-got-a-series-for-you/" target="_blank" rel="noopener">Want to Learn JavaScript? We've Got a Series for You! | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank" rel="noopener">Aaron Powell</A></I></STRONG></P> <P>Get ready to dive into all things JavaScript.</P> <P> </P> Fri, 13 Nov 2020 18:10:17 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-security-javascript-and-more/ba-p/1795800 spboyer 2020-11-13T18:10:17Z Azure DevTest Labs available in UAE North, Germany West Central and Norway East regions https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-devtest-labs-available-in-uae-north-germany-west-central/ba-p/1769281 <P><A href="https://aka.ms/dtl" target="_blank" rel="noopener noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">Azure DevTest Labs</A><SPAN> </SPAN><SPAN>is now available in the UAE North, Germany West Central and Norway East regions. The support includes full Azure DevTest Labs capabilities. To see the other supported regions for DevTest Labs, see Azure </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fregions%2Fservices%2F&data=02%7C01%7CTanmayee.Kamath%40microsoft.com%7C4e6764f82fcf4305170408d7f2b18ece%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244716734847958&sdata=t1%2B48uITWBLD3DFn4qHzoUdOjtjWFgaNaTh0MP1iNEo%3D&reserved=0" target="_blank" rel="noopener nofollow noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">products available by region</A><SPAN>. </SPAN></P> <P> </P> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Capture (1).PNG" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/225843iEED8802282F5872E/image-size/large?v=v2&px=999" role="button" title="Capture (1).PNG" alt="Capture (1).PNG" /></span></SPAN></P> <P> </P> <P>Get started by visiting the<SPAN> </SPAN><A href="https://docs.microsoft.com/en-us/azure/devtest-labs/" target="_blank" rel="noopener noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">DevTest Labs documentation</A>. </P> <P> </P> <P><SPAN>Try it today and let us know what you think. If you have an idea or feedback, go to the </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Ffeedback.azure.com%2Fforums%2F320373-azure-devtest-labs&data=02%7C01%7CTanmayee.Kamath%40microsoft.com%7C4e6764f82fcf4305170408d7f2b18ece%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244716734857914&sdata=eDdD1dzKcQMrJsCnm5KJv2NySnPD%2BP08QsqzsuHn5SY%3D&reserved=0" target="_blank" rel="noopener nofollow noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">Azure DevTest Labs feedback forum</A><SPAN>.</SPAN></P> <P> </P> <P><SPAN>If you or your customers have questions, post them on the </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.microsoft.com%2Fanswers%2Ftopics%2Fazure-devtestlabs.html&data=02%7C01%7CTanmayee.Kamath%40microsoft.com%7C4e6764f82fcf4305170408d7f2b18ece%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244716734867870&sdata=fow%2B33ifa%2FgvxFc8OUeYO1HTioMVlyeT%2FHUEqXMypUM%3D&reserved=0" target="_blank" rel="noopener nofollow noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">Azure DevTest Labs forum</A><SPAN>.</SPAN></P> <P> </P> Mon, 12 Oct 2020 15:00:00 GMT https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-devtest-labs-available-in-uae-north-germany-west-central/ba-p/1769281 TanmayeeKamath 2020-10-12T15:00:00Z This XML file does not appear to have any style information associated with it. The document tree is shown below. <rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0"> <channel> <title>Azure Developer Community Blog articles</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/bg-p/AzureDevCommunityBlog</link> <description>Azure Developer Community Blog articles</description> <pubDate>Wed, 09 Mar 2022 08:28:04 GMT</pubDate> <dc:creator>AzureDevCommunityBlog</dc:creator> <dc:date>2022-03-09T08:28:04Z</dc:date> <item> <title>Using secretless Azure Functions from within AKS</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-secretless-azure-functions-from-within-aks/ba-p/3248143</link> <description><P>I recently implemented <A href="https://github.com/kedacore/keda/issues/2656" target="_self">a change in KEDA</A> (currently evaluated as a potential pull request), consisting of leveraging managed identities in a more granular way, in order to adhere to the least privilege principle. While I was testing my changes, I wanted to use managed identities not only for KEDA itself but also for the Azure Functions I was using in my tests. I found out that although there are quite a few docs on the topic, none is targeting AKS:</P> <P> </P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue-trigger?tabs=csharp#identity-based-connections" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue-trigger?tabs=csharp#identity-based-connections</A></P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob#connecting-to-host-storage-with-an-identity-preview" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference?tabs=blob#connecting-to-host-storage-with-an-identity-preview</A></P> <P> </P> <P>You can find many articles showing how to grab a token from an HTTP triggered function, or using identity-based triggers, but in the context of a function hosted in Azure itself. It's not rocket science to make this work in AKS but I thought it was a good idea to recap it here as I couldn't find anything on that.</P> <P> </P> <P><FONT size="5">Quick intro to managed identities</FONT></P> <P>Here is a quick reminder for those who would still not know about MI. The value proposition of MI is: no password in code (or config). MI are considered best practices because the credentials used by identities are entirely managed by Azure itself. Workloads can <EM>refer to</EM> identities without the need to store credentials anywhere. On top of this, you can manage authorization with Azure AD (single pane of glasses), unlike shared access signatures and alternate authorization methods.</P> <P><FONT size="5">AKS & MI</FONT></P> <P>For MI to work in AKS, you need to enable them. You can find a comprehensive explanation on how to do this <A href="https://docs.microsoft.com/en-us/azure/aks/use-managed-identity" target="_self">here</A>. In a nutshell, MI works the following way in AKS:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="aksnmi.png" style="width: 879px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/353247i1EBC070C411D57A9/image-size/large?v=v2&px=999" role="button" title="aksnmi.png" alt="aksnmi.png" /></span></P> <P> </P> <P> </P> <P>An <STRONG>AzureIdentity</STRONG> and <STRONG>AzureIdentityBinding</STRONG> resource must be defined. They target a user-assigned identity, which is attached to the cluster's VM scale set. The identity can be referred to by deployments through the <EM><STRONG>aadpodbinding</STRONG> </EM>annotation. The function (or anything else) container makes a call to the MI system endpoint <A href="http://169....which" target="_blank" rel="noopener">http://169..., </A>that is intercepted by the NMI pod, which in turn, performs a call to Azure Active Directory to get an access token for the calling container. The calling container can present the returned token to the Azure resource to gain access.</P> <P> </P> <P><FONT size="5">Using the right packages for the function</FONT></P> <P>The packages you have to use depend on the Azure resource you interact with. In my example, I used storage account queues as well as service bus queues. To leverage MI from within the function, you must:</P> <UL> <LI>use the Microsoft.Azure.WebJobs.Extensions.Storage >= 5.0.0</LI> <LI>use the Microsoft.Azure.WebJobs.Extensions.ServiceBus >= 5.0.0</LI> <LI>use the Microsoft.NET.Sdk.Functions >= 4.1.0</LI> </UL> <P>Note that the storage package is not really an option because Azure Functions need an Azure Storage account for the most part.</P> <P><FONT size="5">Passing the right settings to the function</FONT></P> <P>Azure functions takes their configuration from the local settings and from their host's configuration. When using Azure Functions hosted on Azure, we can simply use the function app settings. In AKS, this is slightly different as we have to pass the settings through a <STRONG>ConfigMap</STRONG> or a <STRONG>Secret</STRONG>. To target both the Azure Storage account and the Service Bus, you'll have to define a secret like the following:</P> <P> </P> <DIV> <DIV><LI-CODE lang="yaml">data: AzureWebJobsStorage__accountName: <base64 value of storage account name> ServiceBusConnection__fullyQualifiedNamespace: <base64 value of the service bus FQDN> FUNCTIONS_WORKER_RUNTIME: <base64 value of the function language> apiVersion: v1 kind: Secret metadata: name: <secret name> ---</LI-CODE></DIV> <DIV>In the above example, I use the same storage account for my storage-queue trigger as well as the storage account that is required by functions to work. In case I was using a different storage account for the queue trigger, I'd declare an extra setting with the account name. The service bus queue-triggered function relies on the __fullyQualifiedNamespace to start listening to the service bus. Paradoxally, although I create a K8s secret, there is no secret information here, thanks to the MI.</DIV> <DIV> </DIV> <DIV>For your reference, I'm pasting the entire YAML here:</DIV> <DIV> </DIV> <DIV><LI-CODE lang="yaml">data: AzureWebJobsStorage__accountName: <base64 value of the storage account name> ServiceBusConnection__fullyQualifiedNamespace: <base64 value of the service bus FQDN> FUNCTIONS_WORKER_RUNTIME: <base64 value of the function code> apiVersion: v1 kind: Secret metadata: name: misecret --- apiVersion: aadpodidentity.k8s.io/v1 kind: AzureIdentity metadata: name: storageandbushandler annotations: aadpodidentity.k8s.io/Behavior: namespaced spec: type: 0 resourceID: /subscriptions/.../resourceGroups/.../providers/Microsoft.ManagedIdentity/userAssignedIdentities/storageandbushandler clientID: <client ID of the user-assigned identity> --- apiVersion: aadpodidentity.k8s.io/v1 kind: AzureIdentityBinding metadata: name: storageandbushandler-binding spec: azureIdentity: storageandbushandler selector: storageandbushandler --- apiVersion: apps/v1 kind: Deployment metadata: name: busandstoragemessagehandlers labels: app: busandstoragemessagehandlers spec: selector: matchLabels: app: busandstoragemessagehandlers template: metadata: labels: app: busandstoragemessagehandlers aadpodidbinding: storageandbushandler spec: containers: - name: secretlessfunc image: stephaneey/secretlessfunc:dev imagePullPolicy: Always envFrom: - secretRef: name: misecret ---</LI-CODE></DIV> <DIV>You can see that the secret is passed to the function through the <STRONG>envFrom</STRONG> attribute. If you want to give it a test, you can use the docker image I pushed to Docker Hub.</DIV> <DIV> </DIV> <DIV>and the code of both functions, embedded in the above docker image (nothing special):</DIV> <DIV><LI-CODE lang="csharp">[FunctionName("StorageQueue")] public void StorageQueue([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]string myQueueItem, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); } [FunctionName("ServiceBusQueue")] public void ServiceBusQueue([ServiceBusTrigger("myqueue-items", Connection = "ServiceBusConnection")] string myQueueItem, ILogger log) { log.LogInformation($"C# Queue trigger function processed: {myQueueItem}"); }</LI-CODE></DIV> <DIV> </DIV> <DIV>You just need to make sure the connection string names you mention in the triggers correspond to the settings you specify in the K8s secret.</DIV> </DIV></description> <pubDate>Sat, 05 Mar 2022 16:00:53 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-secretless-azure-functions-from-within-aks/ba-p/3248143</guid> <dc:creator>stephaneey</dc:creator> <dc:date>2022-03-05T16:00:53Z</dc:date> ... </item> <item> <title>How YOU can build a Mock REST API based on JSON for ASP .NET and minimal API</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-can-build-a-mock-rest-api-based-on-json-for-asp-net-and/ba-p/3196039</link> <description><BLOCKQUOTE> <P>TLDR; this article describes how to create a Mock API from a JSON file for minimal API in ASP .NET</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#what-and-why-mock-apis" target="_blank" rel="noopener" name="what-and-why-mock-apis"></A>What and why Mock APIs</H2> <P>To mock something means you respond with fake data, that data can be in-memory, from a file or some kind of tool generating a bunch of endpoints. There are some reasons why mocking an API could be a good idea:</P> <UL> <LI><STRONG>Different teams work at different speeds</STRONG>. Let's say your app is built by two different teams, or developers and one is faster than the other. That's when it's handy to rely on a mocked API.</LI> <LI><STRONG>You start with the frontend first</STRONG>. Your team/developer have decided to build a full vertical and starts with the frontend and slowly work their way towards the backend and the data source.</LI> </UL> <P>Ok, so we established there might be a need to mock your API. So how do we do it? You want to be able to specify the data you want to mock and there are some formats out there that makes sense to have such mocked data in like JSON, XML or CSV perhaps. For the sake of this article, we will go with JSON</P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#planning-our-project-what-we-need-to-do" target="_blank" rel="noopener" name="planning-our-project-what-we-need-to-do"></A>Planning our project, what we need to do</H2> <P>Ok, so high-level, we need to do the following:</P> <UL> <LI><STRONG>Create a file in JSON</STRONG>, containing our routes and the response. We imagine the JSON file looking something like so:</LI> </UL> <P> </P> <LI-CODE lang="json"> { "Products": [ { "Id": 1, "Name": "Mock" }, { "Id": 2, "Name": "Second Mock" } ] }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <UL> <LI><STRONG>What routes do we want?</STRONG><SPAN> </SPAN>A good API should implement GET, POST, PUT and DELETE to support a RESTful approach.</LI> <LI><STRONG>Responding to changes.</STRONG><SPAN> </SPAN>So what should happen if the user actually calls POST, PUT or DELETE? Reasonably, the mocked file should change.</LI> </UL> <P>Ok, so we know high-level what we need, and how things should behave, let's see if we can choose our technical approach next.</P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#approach-lets-create-the-solution" target="_blank" rel="noopener" name="approach-lets-create-the-solution"></A>Approach - let's create the solution</H2> <P>The normal way to setup routes, in Minimal API, is to call code like so:</P> <P> </P> <LI-CODE lang="csharp">app.MapGet("/", () => "Hello World!");</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>By calling<SPAN> </SPAN><CODE>MapGet()</CODE><SPAN> </SPAN>we create a route to "/" that when called responds with "Hello World". For the sake of our API, we will have to call<SPAN> </SPAN><CODE>MapGet()</CODE>,<SPAN> </SPAN><CODE>MapPost()</CODE>,<SPAN> </SPAN><CODE>MapPut()</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>MapDelete()</CODE>.</P> <BLOCKQUOTE> <P>Here be dragons. Many of you, I'm sure, are used to working with JSON in a typed manor, meaning you are likely to create types for your classes and rely on methods like<SPAN> </SPAN><CODE>Deserialize()</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>Serialize()</CODE>. That's a great approach, however, for a mocked API that doesn't even exist yet, this code doesn't rely on any of that :)</img></P> </BLOCKQUOTE> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#defining-the-routes-making-it-loosely-coupled" target="_blank" rel="noopener" name="defining-the-routes-making-it-loosely-coupled"></A>Defining the routes, making it loosely coupled</H3> <P>It would be neat if these routes were loosely coupled code that we could just bring in, when developing, and removed when we are live with our app.</P> <P>When<SPAN> </SPAN><CODE>app.MapGet()</CODE><SPAN> </SPAN>was called, it invoked an instance of the class<SPAN> </SPAN><CODE>WebApplication</CODE>. By creating an extension method on said class, we have a way an approach to add code in a way that it's nicely separated. We also need a static class to put said extension method in. That means our code starting out should look something like so:</P> <P> </P> <LI-CODE lang="csharp">public static class RouteMiddlewareExtensions { public static WebApplication UseExtraRoutes(this WebApplication app) { } }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#exercise-read-from-a-mock-file-and-add-support-for-raw-get-endraw-" target="_blank" rel="noopener" name="exercise-read-from-a-mock-file-and-add-support-for-raw-get-endraw-"></A>Exercise - Read from a mock file, and add support for<SPAN> </SPAN><CODE>GET</CODE></H2> <P>Ok, we know how we are starting, a static class and an extension method, so let's make that happen:</P> <OL> <LI>Run<SPAN> </SPAN><CODE>dotnet new</CODE>, to generate a new minimal API project</LI> </OL> <P> </P> <LI-CODE lang="bash"> dotnet new web -o MyApi -f net6.0 cd Myapi</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Create a file<SPAN> </SPAN><EM>MockMiddleware.cs</EM><SPAN> </SPAN>and give it the following code:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> using System.Text.Json; using System.Text.Json.Nodes; public static class RouteMiddlewareExtensions { public static WebApplication UseExtraRoutes(this WebApplication app) { } }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Add code to read a JSON file into a JSON representation:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> var writableDoc = JsonNode.Parse(File.ReadAllText("mock.json"));</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Note the choice of<SPAN> </SPAN><CODE>JsonNode</CODE>, this is so we can make the JSON doc writable, which we will need for POST, PUT and DELETE later on.</P> <OL> <LI>Create the file<SPAN> </SPAN><EM>mock.json</EM><SPAN> </SPAN>and give it the following content:</LI> </OL> <P> </P> <LI-CODE lang="json"> { "Products": [ { "Id": 1, "Name": "Mock" }, { "Id": 2, "Name": "Second Mock" } ], "Orders": [ { "Id": 1, "Name": "Order1" }, { "Id": 2, "Name": "Second Order" } ] }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-get-endraw-" target="_blank" rel="noopener" name="add-raw-get-endraw-"></A>Add<SPAN> </SPAN><CODE>GET</CODE></H3> <P>Let's support our first HTTP verb, GET.</P> <OL> <LI>Add the following code:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> foreach(var elem in writableDoc?.Root.AsObject().AsEnumerable()) { var arr = elem.Value.AsArray(); app.MapGet(string.Format("/{0}", elem.Key), () => elem.Value.ToString()); }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>In the above code, we navigate into the root object. Then, we convert it to an object representation and starts iterating over the keys, according to the mock file, that means<SPAN> </SPAN><CODE>Products</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>Orders</CODE>. Lastly, we setup the route and the callback, the route is at<SPAN> </SPAN><CODE>elem.Key</CODE><SPAN> </SPAN>and the value we want to return is at<SPAN> </SPAN><CODE>elem.Value</CODE>.</P> <OL> <LI>In the file<SPAN> </SPAN><EM>Program.cs</EM><SPAN> </SPAN>add the following line:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> app.UseExtraRoutes();</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>The preceding code will ensure our routes are added to the app.</P> <OL> <LI>Run<SPAN> </SPAN><CODE>dotnet run</CODE>, to run the app</LI> </OL> <P> </P> <LI-CODE lang="bash"> dotnet run</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Navigate to the port indicated in the console output and navigate to<SPAN> </SPAN><CODE>/products</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>/orders</CODE>, they should both show an output</LI> </OL> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-get-endraw-by-id" target="_blank" rel="noopener" name="add-raw-get-endraw-by-id"></A>Add<SPAN> </SPAN><CODE>GET</CODE><SPAN> </SPAN>by id</H3> <P>Ok, you got the basic GET case to work, what about filtering the data with parameter. Using<SPAN> </SPAN><CODE>/products/1</CODE>, should just return one record back. How do we do that?</P> <OL> <LI>Add the following code in the foreach loop in<SPAN> </SPAN><EM>MockMiddlware.cs</EM>:</LI> </OL> <P> </P> <LI-CODE lang="csharp">app.MapGet(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr.SingleOrDefault(row => row .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); return matchedItem; });</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>The above code is iterating over the rows for a specific route and looks for an<SPAN> </SPAN><CODE>id</CODE><SPAN> </SPAN>property that matches our<SPAN> </SPAN><CODE>{id}</CODE><SPAN> </SPAN>pattern. The found item is returned.</P> <OL> <LI>Run<SPAN> </SPAN><CODE>dotnet run</CODE><SPAN> </SPAN>to test out this code:</LI> </OL> <P> </P> <LI-CODE lang="bash"> dotnet run</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>Navigate to<SPAN> </SPAN><CODE>/products/1</CODE>, you should see the following JSON output:</LI> </OL> <P> </P> <LI-CODE lang="bash"> { "Id": 1, "Name": "Mock" }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Great, we got it to work.</P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#exercise-write-data" target="_blank" rel="noopener" name="exercise-write-data"></A>Exercise - write data</H2> <P>Now that we can read data from our mock API, lets tackle writing data. The fact that we were<SPAN> </SPAN><CODE>JsonNode.Parse()</CODE><SPAN> </SPAN>in the beginning makes it possible for us to use operations on the<SPAN> </SPAN><CODE>JsonNode</CODE><SPAN> </SPAN>instance. In short, our approach will be:</P> <UL> <LI>find the specific place in the<SPAN> </SPAN><CODE>JsonNode</CODE>, that represents our mock data, and change it</LI> <LI>save down the whole<SPAN> </SPAN><CODE>JsonNode</CODE><SPAN> </SPAN>instance to our<SPAN> </SPAN><EM>mock.json</EM>. If the user uses an operation to change the data, that should be reflected in the Mock file.</LI> </UL> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-post-endraw-" target="_blank" rel="noopener" name="add-raw-post-endraw-"></A>Add<SPAN> </SPAN><CODE>POST</CODE></H3> <P>To implement this route, we will use<SPAN> </SPAN><CODE>MapPost()</CODE><SPAN> </SPAN>but we can't just give it a typed object in the callback for the route, because we don't know what it looks like. Instead, we will use the request object, read the body and add that to the<SPAN> </SPAN><CODE>JsonNode</CODE>.</P> <OL> <LI>Add following code to support<SPAN> </SPAN><CODE>POST</CODE>:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> app.MapPost(string.Format("/{0}", elem.Key), async (HttpRequest request) => { string content = string.Empty; using(StreamReader reader = new StreamReader(request.Body)) { content = await reader.ReadToEndAsync(); } var newNode = JsonNode.Parse(content); var array = elem.Value.AsArray(); newNode.AsObject().Add("Id", array.Count() + 1); array.Add(newNode); File.WriteAllText("mock.json", writableDoc.ToString()); return content; });</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>In the above code, we have<SPAN> </SPAN><CODE>request</CODE><SPAN> </SPAN>as input parameter to our route handler function.</P> <P> </P> <LI-CODE lang="csharp"> app.MapPost(string.Format("/{0}", elem.Key), async (HttpRequest request) => {});</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Then we read the body, using a<SPAN> </SPAN><CODE>StreamReader</CODE>.</P> <P> </P> <LI-CODE lang="csharp"> using(StreamReader reader = new StreamReader(request.Body)) { content = await reader.ReadToEndAsync(); }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Next, we construct a JSON representation from our received BODY:</P> <P> </P> <LI-CODE lang="csharp">var newNode = JsonNode.Parse(content);</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>This is followed by locating the place to insert this new JSON and adding it:</P> <P> </P> <LI-CODE lang="csharp">var array = elem.Value.AsArray(); newNode.AsObject().Add("Id", array.Count() + 1); array.Add(newNode);</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Lastly, we update the mock file and respond something back to the calling client:</P> <P> </P> <LI-CODE lang="csharp">File.WriteAllText("mock.json", writableDoc.ToString()); return content;</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-raw-delete-endraw-" target="_blank" rel="noopener" name="add-raw-delete-endraw-"></A>Add<SPAN> </SPAN><CODE>DELETE</CODE></H3> <P>To support deletion, we need a very similar approach to how we located an entry by id parameter. We also need to locate where to delete in the<SPAN> </SPAN><CODE>JsonObject</CODE>.</P> <OL> <LI>Add the following code to support delete:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> app.MapDelete(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr .Select((value, index) => new{ value, index}) .SingleOrDefault(row => row.value .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); if (matchedItem != null) { arr.RemoveAt(matchedItem.index); File.WriteAllText("mock.json", writableDoc.ToString()); } return "OK"; });</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>First, we find the item in question, but we also make sure that we know what the index of the found item is. We will use this index later to remove the item. Hence, we get the following code:</P> <P> </P> <LI-CODE lang="csharp"> var matchedItem = arr .Select((value, index) => new{ value, index}) .SingleOrDefault(row => row.value .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) );</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Our<SPAN> </SPAN><CODE>matchedItem</CODE><SPAN> </SPAN>now contains either NULL or an object that has an<SPAN> </SPAN><CODE>index</CODE><SPAN> </SPAN>property. Using this<SPAN> </SPAN><CODE>index</CODE><SPAN> </SPAN>property, we will be able to perform deletions:</P> <P> </P> <LI-CODE lang="csharp"> if (matchedItem != null) { arr.RemoveAt(matchedItem.index); File.WriteAllText("mock.json", writableDoc.ToString()); }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>To test writes, use something like Postman or Advanced REST client, it should work.</P> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#add-route-info" target="_blank" rel="noopener" name="add-route-info"></A>Add route info</H3> <P>We're almost done, as courtesy towards the programmer using this code, we want to print out what routes we have and support so it's easy to know what we support.</P> <OL> <LI>Add this code, just at the start of the method<SPAN> </SPAN><CODE>UseExtraRoutes()</CODE>:</LI> </OL> <P> </P> <LI-CODE lang="csharp"> // print API foreach (var elem in writableDoc?.Root.AsObject().AsEnumerable()){ Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(string.Format("POST /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("DELETE /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(" "); }</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>That's it, that's all we intend to implement. Hopefully, this is all useful to you and you will be able to use it next you just want an API up and running that you can build a front-end app off of.</P> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#full-code" target="_blank" rel="noopener" name="full-code"></A>Full code</H3> <P>If you got lost at any point, here's the full code:</P> <P><EM>Program.cs</EM></P> <P> </P> <LI-CODE lang="csharp">using Mock; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.UseExtraRoutes(); // this is where our routes get added app.Run();</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P><EM>MockMiddleware.cs</EM></P> <P> </P> <LI-CODE lang="csharp">using System.Text.Json; using System.Text.Json.Nodes; namespace Mock; public static class RouteMiddlewareExtensions { public static WebApplication UseExtraRoutes(this WebApplication app) { var writableDoc = JsonNode.Parse(File.ReadAllText("mock.json")); // print API foreach (var elem in writableDoc?.Root.AsObject().AsEnumerable()){ Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("GET /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(string.Format("POST /{0}", elem.Key.ToLower())); Console.WriteLine(string.Format("DELETE /{0}", elem.Key.ToLower()) + "/id"); Console.WriteLine(" "); } // setup routes foreach(var elem in writableDoc?.Root.AsObject().AsEnumerable()) { var arr = elem.Value.AsArray(); app.MapGet(string.Format("/{0}", elem.Key), () => elem.Value.ToString()); app.MapGet(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr.SingleOrDefault(row => row .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); return matchedItem; }); app.MapPost(string.Format("/{0}", elem.Key), async (HttpRequest request) => { string content = string.Empty; using(StreamReader reader = new StreamReader(request.Body)) { content = await reader.ReadToEndAsync(); } var newNode = JsonNode.Parse(content); var array = elem.Value.AsArray(); newNode.AsObject().Add("Id", array.Count() + 1); array.Add(newNode); File.WriteAllText("mock.json", writableDoc.ToString()); return content; }); app.MapPut(string.Format("/{0}", elem.Key), () => { return "TODO"; }); app.MapDelete(string.Format("/{0}", elem.Key) + "/{id}", (int id) => { var matchedItem = arr .Select((value, index) => new{ value, index}) .SingleOrDefault(row => row.value .AsObject() .Any(o => o.Key.ToLower() == "id" && int.Parse(o.Value.ToString()) == id) ); if (matchedItem != null) { arr.RemoveAt(matchedItem.index); File.WriteAllText("mock.json", writableDoc.ToString()); } return "OK"; }); }; return app; } }</LI-CODE> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H3><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#update-homework" target="_blank" rel="noopener" name="update-homework"></A>Update - homework</H3> <P>For your homework, see if you can implement PUT. :)</img></P> <H2> </H2> <H2><A href="https://dev.to/dotnet/how-you-can-build-a-mock-api-based-on-json-for-asp-net-and-minimal-api-1dmd#summary" target="_blank" rel="noopener" name="summary"></A>Summary</H2> <P>I took you through a journey of implementing a Mock API for minimal APIs. Hopefully, you found this useful and can use it in a future project.</P> <P>Here's a repo for the code<SPAN> </SPAN><A href="https://github.com/softchris/mock-sharp.git" target="_blank" rel="noopener">repo</A></P> <BLOCKQUOTE> <P>Please comment if you want me to make this into either a tool or a NuGet package :)</img></P> </BLOCKQUOTE></description> <pubDate>Tue, 22 Feb 2022 01:06:24 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-can-build-a-mock-rest-api-based-on-json-for-asp-net-and/ba-p/3196039</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2022-02-22T01:06:24Z</dc:date> ... </item> <item> <title>Azure Cache for Redis TLS: Upcoming migration to DigiCert Global G2 CA Root</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-cache-for-redis-tls-upcoming-migration-to-digicert-global/ba-p/3171086</link> <description><P><STRONG>This blog contains important information about TLS certificate changes for Azure Cache for Redis endpoints that <U>may</U> impact client connectivity. </STRONG> </P> <P> </P> <P>In 2020, most Azure services were updated to use TLS certificates from Certificate Authorities (CAs) that chain up to the DigiCert Global G2 root. However, Azure Cache for Redis, remained on TLS certificates issued by the Baltimore CyberTrust Root. Because the current Baltimore CyberTrust Root will expire in May 2025, now is the time for Azure Cache for Redis to switch to the DigiCert Global G2 CA Root*. The migration will start in May 2022, and finish by the end of June 2022. </P> <P> </P> <P><STRONG>We expect that most Azure Cache for </STRONG><STRONG>Redis customers will not be impacted; however, your application may be impacted if you explicitly specify a list of acceptable CAs (a practice known as “certificate pinning”)</STRONG>. This change is limited to the <A href="https://azure.microsoft.com/regions/" target="_blank" rel="noopener">public Azure cloud and Azure Government cloud</A>. There are no changes in Azure sovereign cloud offerings.</P> <P><STRONG>If any of your client applications are pinned to the root CA Baltimore CyberTrust Root or current intermediate CAs listed in the table below</STRONG>, <STRONG>immediate action is required</STRONG> to prevent disruption to connectivity to Azure Cache for Redis. </P> <P> </P> <P><EM>* Other Azure service TLS certificates may be issued by a different PKI. *</EM></P> <P> </P> <P><EM>Overview of Action Required</EM></P> <P> </P> <UL> <LI>If your client application has pinned to the Baltimore CyberTrust Root CA, in addition to Baltimore, add the <A href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_blank" rel="noopener">DigiCert Global Root G2</A> to your trusted root store before May 2022. </LI> <LI>If your client application has pinned to the intermediate CAs, in addition to Microsoft RSA TLS CAs, add the Microsoft Azure TLS Issuing CAs to your trusted root store before May 2022. </LI> <LI>Keep using the current root or intermediate CAs in your applications or devices until the transition period is completed (necessary to prevent connection interruption). <EM> </EM></LI> </UL> <P><FONT size="5"><STRONG><U>How to check if your client application is affected</U></STRONG></FONT></P> <P>Check if your application has pinned to </P> <UL> <LI>Root CA: Baltimore CyberTrust Root CA or, </LI> <LI>Intermediate CA: Microsoft RSA TLS CA 01 </LI> <LI>Intermediate CA: Microsoft RSA TLS CA 02 </LI> </UL> <P>Search your source code for the thumbprint, Common Name, and other cert properties of any of the root CA or intermediate CAs. If there is a match, then your application will be impacted, <STRONG>immediate action is required</STRONG>.</P> <P> </P> <P><FONT size="5"><STRONG><U>Action required </U></STRONG></FONT></P> <P>1. To continue without disruption due to this change, Microsoft recommends that, in addition to Baltimore, client applications or devices trust the root CA – DigiCert Global Root G2: </P> <P><A href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_blank" rel="noopener">DigiCert Global Root G2 <BR /></A>(Thumbprint: df3c24f9bfd666761b268073fe06d1cc8d4f82a4) </P> <P>Intermediate certificates are expected to change more frequently than the root CAs. Customers who use certificate pinning are recommended to not take dependencies on them and instead pin to the root certificate as it rolls less frequently. </P> <P> </P> <P>2. <SPAN data-contrast="auto">To prevent future disruption, you should also add the following roots to the trusted store. This will save you from the allowlist effort in near future if you add the recommended root CAs now:</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI><A title="DigiCert Global Root G3" href="https://www.digicert.com/kb/digicert-root-certificates.htm" target="_self" rel="nofollow noopener noreferrer"><SPAN data-contrast="none">DigiCert Global </SPAN><SPAN data-contrast="none">Root</SPAN><SPAN data-contrast="none"> G3</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> <BR /></SPAN><SPAN data-contrast="auto">(Thumbprint: 7e04de896a3e666d00e687d33ffad93be83d349e)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559685":1440,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><A href="https://www.microsoft.com/pkiops/certs/Microsoft%20RSA%20Root%20Certificate%20Authority%202017.crt" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">Microsoft RSA Root Certificate Authority 2017</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> <BR /></SPAN><SPAN data-contrast="auto">(Thumbprint: 73a5e64a3bff8316ff0edccc618a906e4eae4d74)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559685":1440,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><A href="https://www.microsoft.com/pkiops/certs/Microsoft%20ECC%20Root%20Certificate%20Authority%202017.crt" target="_blank" rel="noopener noreferrer"><SPAN data-contrast="none">Microsoft ECC Root Certificate Authority 2017</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> <BR /></SPAN><SPAN data-contrast="auto">(Thumbprint: 999a64c37ff47d9fab95f14769891460eec4c3c5)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559685":1440,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P><BR />3. If you are currently pinning to the intermediate CAs and have a requirement to continue pinning to intermediate CAs, to prevent future disruption, you should also add the intermediate <SPAN>Microsoft Azure ECC TLS CAs listed in the table below to the trusted store.</SPAN></P> <P>List of possible Root CAs is available here: <A href="https://docs.microsoft.com/azure/security/fundamentals/tls-certificate-changes#what-is-changing" target="_blank" rel="noopener">Azure TLS Certificate Changes | Microsoft Docs</A></P> <P> </P> <P><EM><U>Support</U></EM></P> <P><SPAN data-contrast="auto">If you have any questions, get answers from community experts in <A href="https://aka.ms/redis/QnA" target="_self">Microsoft Q&A</A>. If you have completed step 1 and need technical help, please open a </SPAN><A href="https://ms.portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade/newsupportrequest" target="_blank" rel="noopener nofollow noreferrer"><SPAN data-contrast="none">support request</SPAN></A><SPAN data-contrast="auto"> with the options below and a member from our engineering team will get back to you.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI><SPAN data-contrast="auto">For <EM>Issue type</EM>, select <STRONG>Technical</STRONG>.</SPAN></LI> <LI><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}">For <EM>Subscription</EM>, select your subscription. </SPAN></LI> <LI><SPAN data-contrast="auto">For <EM>Service</EM>, select <STRONG>My Services</STRONG>, then select <STRONG>Cache for Redis</STRONG>.</SPAN></LI> <LI><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}">For <EM>Resource</EM>, select your resource. </SPAN></LI> <LI><SPAN data-contrast="auto">For <EM>Problem type</EM>, select <STRONG>Availability, Connectivity and Timeouts</STRONG>.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto">For <EM>Problem subtype</EM>, select <STRONG>Connection Error</STRONG>.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P> </P> <P><U><EM>Certificate Renewal Summary </EM></U></P> <P>The table below provides information about the certificates that are being rolled out. Depending on which certificate your service uses for establishing TLS connections, action may be needed to prevent loss of connectivity. </P> <P> </P> <TABLE width="587"> <TBODY> <TR> <TD width="58"> <P><STRONG>Certificate</STRONG> </P> </TD> <TD width="175"> <P><STRONG>Current</STRONG> </P> </TD> <TD width="264"> <P><STRONG>Post Rollover (May 2022)</STRONG> </P> </TD> <TD width="90"> <P><STRONG>Action</STRONG> </P> </TD> </TR> <TR> <TD width="58"> <P>Root </P> </TD> <TD width="175"> <P>Thumbprint (SHA1): d4de20d05e66fc53fe1a50882c78db2852cae474 <BR />Expiration: Monday, May 12, 2025, 4:59:00 PM <BR />Subject Name: <BR />CN = Baltimore CyberTrust Root </P> <P>OU = CyberTrust <BR />O = Baltimore <BR />C = IE </P> </TD> <TD width="264"> <P>Thumbprint (SHA1): df3c24f9bfd666761b268073fe06d1cc8d4f82a4 </P> <P>Expiration: Friday, January 15, 2038 5:00:00 AM <BR />Subject Name: <BR />CN = DigiCert Global Root G2 <BR />OU = <A href="http://www.digicert.com/" target="_blank" rel="noopener">www.digicert.com <BR /></A>O = DigiCert Inc <BR />C = US </P> </TD> <TD width="90"> <P><STRONG>Required by</STRONG></P> <P><STRONG>April 30, 2022</STRONG> </P> </TD> </TR> <TR> <TD width="58"> <P>Root </P> </TD> <TD width="175"> <P> </P> </TD> <TD width="264"> <P>Thumbprint (SHA1): <BR />7e04de896a3e666d00e687d33ffad93be83d349e <BR />Expiration: Friday, January 15, 2038 5:00:00 AM <BR />CN = DigiCert Global Root G3 <BR />OU = <A href="http://www.digicert.com/" target="_blank" rel="noopener">www.digicert.com <BR /></A>O = DigiCert Inc <BR />C = US </P> <P> </P> <P>Thumbprint (SHA1): <BR />73a5e64a3bff8316ff0edccc618a906e4eae4d74 <BR />Expiration: Friday, July 18, 2042 4:00:23 PM <BR />CN = Microsoft RSA Root Certificate Authority 2017 <BR />O = Microsoft Corporation <BR />C = US </P> <P> </P> <P>Thumbprint (SHA1): <BR />999a64c37ff47d9fab95f14769891460eec4c3c5 <BR />Expiration: Friday, July 18, 2042 4:16:04 PM <BR />CN = Microsoft ECC Root Certificate Authority 2017 <BR />O = Microsoft Corporation <BR />C = US </P> <P> </P> </TD> <TD width="90"> <P><STRONG>Recommended to prevent disruption <BR />from future changes</STRONG> </P> </TD> </TR> <TR> <TD width="58"> <P>Intermediates </P> </TD> <TD width="175"> <P><U>Thumbprints (SHA1): </U> </P> <P> </P> <P>CN = Microsoft RSA TLS CA 01 </P> <P>Thumbprint: </P> <P>703d7a8f0ebf55aaa59f98eaf4a206004eb2516a </P> <P> </P> <P>CN = Microsoft RSA TLS CA 02 </P> <P>Thumbprint: b0c2d2d13cdd56cdaa6ab6e2c04440be4a429c75 </P> <P> </P> <P>Expiration: Tuesday, October 8, 2024 12:00:00 AM. <BR />Subject Name: </P> <P>O = Microsoft Corporation </P> <P>C = US </P> </TD> <TD width="264"> <P><U>Thumbprints (SHA1): </U> </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 01 <BR />Thumbprint: </P> <P>b9ed88eb05c15c79639493016200fdab08137af3 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 02 </P> <P>Thumbprint: </P> <P>c5fb956a0e7672e9857b402008e7ccad031f9b08 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 05 </P> <P>Thumbprint: </P> <P>56f1ca470bb94e274b516a330494c792c419cf87 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 06 </P> <P>Thumbprint: </P> <P>8f1fd57f27c828d7be29743b4d02cd7e6e5f43e6 </P> <P> </P> <P>Expiration: Thursday, June 27, 2024 4:59:59 PM; <BR />Subject Name: </P> <P>Issuer = Microsoft RSA Root Certificate Authority 2017 </P> <P>O = Microsoft Corporation </P> <P>C = US </P> <P> </P> <P>-------------------------------------------------------</P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 01 <BR />Thumbprint: </P> <P>2f2877c5d778c31e0f29c7e371df5471bd673173 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 02 </P> <P>Thumbprint: </P> <P>e7eea674ca718e3befd90858e09f8372ad0ae2aa </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 05 <BR />Thumbprint: </P> <P>6c3af02e7f269aa73afd0eff2a88a4a1f04ed1e5 </P> <P> </P> <P>CN = Microsoft Azure TLS Issuing CA 06 </P> <P>Thumbprint: </P> <P>30e01761ab97e59a06b41ef20af6f2de7ef4f7b0 </P> <P> </P> <P>Expiration: Thursday, June 27, 2024 4:59:59 PM; <BR />Subject Name: </P> <P>Issuer = DigiCert Global Root G2 </P> <P>O = DigiCert Inc </P> <P>C = US </P> <P> </P> </TD> <TD width="90"> <P><STRONG>Required by</STRONG></P> <P><STRONG>April 30, 2022 </STRONG> </P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P> </P> <P> </P> <P> </P></description> <pubDate>Sat, 05 Mar 2022 00:19:53 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-cache-for-redis-tls-upcoming-migration-to-digicert-global/ba-p/3171086</guid> <dc:creator>Shruti_Pathak</dc:creator> <dc:date>2022-03-05T00:19:53Z</dc:date> ... </item> <item> <title>Building a Cloud Native Lab - Scripted Edition</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-scripted-edition/ba-p/3169848</link> <description><P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Last year I did a blog post on how to build a cloud native lab at home based on Azure Stack HCI and AKS:</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"><A title="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504</A></P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">In that post I mentioned in passing that I'd also be looking into doing day two stuff. And I did. It just didn't materialize in a new post :)</img></P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">What I realized when testing out stuff was that while I did use my own blog post for reference it was sort of unpractical scrolling up and down the page to find the right command, and jumping between various tools and ways of solving things. I thought that "hey, wouldn't it be nice if I could just start a script and have it go through everything automatically?" Of course it would; it was just a matter of a little bit of effort getting there. (Or almost there at least.)</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">TL;DR - I have a repo over at <A title="https://github.com/ahelland/Cloud-Native-DevLab" href="https://github.com/ahelland/Cloud-Native-DevLab" target="_blank" rel="noopener">https://github.com/ahelland/Cloud-Native-DevLab</A> where I have made a collection of scripts to set you up with an AKS cluster along with a couple of features you may need/want to test on your Windows Server/Azure Stack HCI box.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Still here? I'll call out a few things to provide a backdrop and a couple of explanations.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">I wanted to have a repo you could pull down and step through interactively on your client computer using .NET Interactive Notebooks. That's a great way to run code inline in a document. Turns out that doesn't work when you attempt to setup a remote PowerShell session.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">I was also thinking about having the repo set up Visual Studio Code and all the UI tooling you need (locally on the host system). That sort of worked, but that would assume you're running the Desktop Experience which you're not doing if you use Azure Stack HCI. So I made it a command line experience - you probably need to copy the initial bootstrapping from your desktop to the server, but as part of the bootstrap Git is installed and the repo pulled down so you can do the rest without having a CTRL-C + CTRL-V party.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">So, looking at the commit dates it seems this was done a long time ago? Yes and no. A couple of things went up early, but I needed some QA time and was also stuck on bugs with the product and the components so it wasn't that easy. I didn't want to provide a guide sending you straight into "this doesn't work". There's also other things I spent time testing that ended up being left out. And I wasn't in a hurry I guess :)</img></P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Modularizing it however was not an error; that was a deliberate choice. I have separated things into sections that should be independent of each other - you just want to test Flux and don't care about Grafana? No prob.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">The repo does not go into great lengths explaining choices and the "why" of things. I wanted to keep it more to the point. That way it is easier to update and replace things as well.</P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; margin-left: .375in; font-family: Calibri; font-size: 11.0pt;">Here are sections and components of the guide:</P> <UL style="direction: ltr; unicode-bidi: embed; margin-top: 0in; margin-bottom: 0in;" type="disc"> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/01_Bootstrap" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">01_Bootstrap</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We install the necessary tooling and install a management and a workload cluster.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/02_Monitoring" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">02_Monitoring</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We install Prometheus, Grafana and Jaeger. Loadbalancers for all three are also created (if you want), but not DNS names.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/03_Azure_Policy" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">03_Azure_Policy</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We create a service principal (with a "Policy Writer" role) and use this to enable Azure Policy in our cluster.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/04_ExternalAccess" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">04_ExternalAccess</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />We install Nginx and CertManager, and configure integration with Azure DNS. This enables you to have Kubernetes take care of configuring DNS for you and enroll a certificate from Let's Encrypt when you deploy an application to the cluster.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/05_MonitoringIngress" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">05_MonitoringIngress</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />This section provides configuration files for enabling ingress for Prometheus and Jaeger.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/06_AzureServiceOperator" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">06_AzureServiceOperator</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Brief explanation on Azure Service Operator with links to MS docs.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/07_Dapr" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">07_Dapr</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Explanation of Dapr plus installation commands. Links to more info and samples.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/08_Flux" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">08_Flux</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Installation of a sample app using a GitOps approach with Flux.</SPAN></LI> <LI style="margin-top: 12pt; margin-bottom: 12pt; vertical-align: middle; color: #201f1e;"><A href="https://github.com/ahelland/Cloud-Native-DevLab/blob/main/Samples" target="_blank"><SPAN style="font-family: Calibri; font-size: 11.0pt;">Samples</SPAN></A><SPAN style="font-family: Calibri; font-size: 11.0pt;"><BR />Samples for testing out the basic functionality of the cluster based on the installations in the sections above.</SPAN></LI> </UL> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">While the focus is more on the scripts than explanations I have attempted to include some instructions. Note that you also need to fill in the blanks yourself for variables unique to your environment. (Cloning the repo and just executing the PowerShell immediately will most likely throw errors at you.)</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">I'm not saying this is the only way, or the right way for everyone. And since the focus is on dev use it could very well be that you don't care about things like Azure Policy. Having it all in one location and tested in a cohesive manner should help though.</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">I'm currently working on testing workload identities. Worked fairly easy on AKS in the cloud. Not as easy in the on-prem variant so we'll see how that plays out. Point being - I try to add things to the guide, and will attempt to both optimize and re-arrange content if needed. I also intend/want to create more complex samples; but need to have the baseline working before going all in on that.</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">I guess the value of all of this is still limited if you don't have the hardware to run things. That has made me think of whether I should create a version for AKS running in Azure as well, but I haven't decided - there are already a ton of guides and documentation out there for that purpose.</P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="AzureStackHCI_Cluster.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/348449iCA020D9CCF30D643/image-size/large?v=v2&px=999" role="button" title="AzureStackHCI_Cluster.png" alt="AzureStackHCI_Cluster.png" /></span></P> <P> </P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">Here's the link to the repo again:<BR /><A title="GitHub - ahelland/Cloud-Native-DevLab: Installation scripts and instructions for setting up an on-prem dev lab based on Azure Stack HCI AKS." href="https://github.com/ahelland/Cloud-Native-DevLab" target="_blank" rel="noopener">https://github.com/ahelland/Cloud-Native-DevLab</A></P> <P style="margin-left: .375in; margin-top: 12pt; margin-bottom: 12pt; font-family: Calibri; font-size: 11.0pt; color: #201f1e;">As always - stay tuned for more cloud fun!</P></description> <pubDate>Tue, 15 Feb 2022 20:06:13 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-scripted-edition/ba-p/3169848</guid> <dc:creator>Andreas Helland</dc:creator> <dc:date>2022-02-15T20:06:13Z</dc:date> ... </item> <item> <title>Winners Announced: Azure Hack for Wellness</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-hack-for-wellness/ba-p/3165373</link> <description><P><SPAN>The nature of work has changed. The move to hybrid jobs is underway, and the developer community is uniquely equipped to reimagine experiences that enrich and fulfill employees’ wellness. Over 200 developers participated in the <A href="https://wellnesshack.devpost.com/" target="_self">Microsoft Azure Hack for Wellness</A> virtual hackathon where the event specifically focused on using Azure services to help organizations support their members' well beings. Organizations could be businesses, schools, or communities. As a bonus, applications that integrate into Microsoft Teams were eligible for additional prize. </SPAN></P> <P> </P> <P><SPAN>See below for the top 3 winning projects:</SPAN></P> <P> </P> <P><FONT size="6"><SPAN>1st Place: <A href="https://devpost.com/software/rest-azzure" target="_self">Rest Azzure</A></SPAN></FONT></P> <P><SPAN>Created by: Nefertiti Bourne, Ed Hart, Marcos A Oliva</SPAN></P> <P><SPAN>A mobile app that connects with MS Teams and chatbot and dashboard.</SPAN></P> <P><SPAN><LI-VIDEO vid="https://youtu.be/N8Y6imL3iLo" align="center" size="large" width="600" height="450" uploading="false" thumbnail="https://i.ytimg.com/vi/N8Y6imL3iLo/hqdefault.jpg" external="url"></LI-VIDEO><BR /></SPAN></P> <P><FONT size="6"><SPAN>2nd Place: <A href="https://devpost.com/software/wellness-assistant" target="_self">Feeling Well</A></SPAN></FONT></P> <P><SPAN>Created by: Zechen Lu, Amina Fong</SPAN></P> <P><SPAN>Feeling Well incentivizes employees to take breaks for developing wellness by offering monthly rewards based on the amount of breaks they take.</SPAN></P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=9jNMFnzjeaA&t=13s" align="center" size="large" width="600" height="338" uploading="false" thumbnail="https://i.ytimg.com/vi/9jNMFnzjeaA/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><FONT size="6"><SPAN>3rd place: <A href="https://devpost.com/software/outstanding-meetings" target="_self">Outstanding Meetings</A></SPAN></FONT></P> <P><SPAN>Created by: Rupesh Kurvankattil, Tariku Tessema, Steve Jones</SPAN></P> <P><SPAN>Motivates individuals in the workspace to practice healthy habits by standing up during meetings.</SPAN></P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=bKxML45oewU" align="center" size="large" width="600" height="338" uploading="false" thumbnail="https://i.ytimg.com/vi/bKxML45oewU/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><FONT size="5"><U>Thank You</U></FONT></P> <P>On behalf of the Microsoft U.S. Azure team, I'd like to thank all of the participants, and congratulate the winners on a great job!</P> <P> </P> <P>Thank you to the judges who volunteered their time to give back to the community! Special thanks to <STRONG>Kendall Roden</STRONG>, <STRONG>Nicole Herskowitz</STRONG>, <STRONG>Rajmohan Rajagopalan</STRONG>, <STRONG>Scott Prather</STRONG>, <STRONG>Tomomi Imura</STRONG>, <STRONG>Uthappa Kattera Chengappa</STRONG></P> <P> </P> <P><U><FONT size="5">Coming up</FONT></U></P> <P>There are two more virtual hackathon events going on right now! Take a look and feel free to sign up for one or more of these events!</P> <UL> <LI><A href="https://aka.ms/hackthetrialtc" target="_self">Microsoft Azure Trial Hackathon on DEV</A> - What's the most interesting thing you can do with a free Azure trial? Submissions due March 8, 2022. Open to global audiences. </LI> <LI><A href="https://aka.ms/humanitarianhacktc" target="_self">Microsoft US Azure AI Hack for Humanitarian Action</A> - Build for disaster response, refugees and displaced people, human rights, or the needs of women and children with Azure AI. Submissions due March 28, 2022. Open to U.S. residents.</LI> </UL> <P> </P></description> <pubDate>Mon, 14 Feb 2022 23:42:38 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-hack-for-wellness/ba-p/3165373</guid> <dc:creator>NinaSui</dc:creator> <dc:date>2022-02-14T23:42:38Z</dc:date> ... </item> <item> <title>How to utilize active geo-replication in Azure Cache for Redis</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-to-utilize-active-geo-replication-in-azure-cache-for-redis/ba-p/3074404</link> <description><P>In an increasingly global and online world, the speed, availability, and consistency of data has never been more important. We’ve seen customers of all sizes take advantage of the outstanding performance of <A href="https://azure.microsoft.com/services/cache/" target="_blank">Azure Cache for Redis</A>, but we’ve also heard your requests for a Redis solution that offers even higher availability and more robust geographic consistency. That’s why we’re excited to announce the latest element of our collaboration with <A href="https://redis.com/cloud-partners/microsoft-azure/" target="_blank">Redis Corporation</A>—the general availability of active geo-replication in our Enterprise offering of Azure Cache for Redis.</P> <P> </P> <H1>Active geo-replication background</H1> <P>Active geo-replication is a powerful tool that enables Azure Cache for Redis clusters to be linked together for seamless active-active replication of data. In other words, you can write to one Redis cluster and your data will be automatically copied to the other linked clusters, and vice versa. Data is quickly duplicated with strong eventual consistency between clusters. This multi-primary, multi-write architecture is built on <A href="https://redis.com/redis-enterprise/technology/active-active-geo-distribution/" target="_blank">conflict-free replicated data types (CRDTs)</A>, a groundbreaking technology that enables seamless conflict resolution.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_0-1643313027910.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/343084iB7053269D808AB29/image-size/medium?v=v2&px=400" role="button" title="kteegarden_0-1643313027910.png" alt="kteegarden_0-1643313027910.png" /></span></P> <H1>Use-cases for active geo-replication</H1> <P>Active geo-replication gives developers a powerful tool to tackle otherwise frustrating technical challenges, such as:</P> <P> </P> <H2>Enterprise-grade Availability</H2> <P>As Redis steadily increases in popularity and adoption, it is becoming an essential part of mission-critical applications. Many customers in the financial services, retail, and software industries need Redis in both high availability and disaster recovery scenarios. The Enterprise tiers of Azure Cache for Redis help deliver both. Zone redundancy already enables Enterprise Azure Cache for Redis to be resilient to zone-level outages and reach a <A href="https://azure.microsoft.com/support/legal/sla/cache/v1_1/" target="_blank">99.99% availability SLA</A>. Adding active geo-replication helps further protect against region-level outages, <A href="https://azure.microsoft.com/support/legal/sla/cache/v1_1/" target="_blank">boosting the availability SLA up to 99.999%</A>.</P> <P> </P> <P>Even better, experiencing the benefits of higher availability is straightforward. Even if there is an outage in one region, the caches in other regions will have the latest synchronized copy of the data in your cache. And when the region comes back online, the original cache will automatically be updated with data written to the linked regions during the outage.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_1-1643313027916.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/343085iA140E1DDFA3DAF94/image-size/medium?v=v2&px=400" role="button" title="kteegarden_1-1643313027916.png" alt="kteegarden_1-1643313027916.png" /></span></P> <P> </P> <H2>Local Latency Performance</H2> <P>Customer expectations for speedy application performance are sky high. <A href="https://redis.com/wp-content/uploads/2021/08/DS-RedisLabs-Retail-Transformation.pdf" target="_blank">Nine in ten shoppers will abandon a retail website if it is too slow</A>. As applications become global, this presents a challenge with caching. Your cache may be quick, but if your customers are talking to a cache that is halfway around the world, network latency can erase the benefits of the cache. With active geo-replication, you can get local latency performance while maintaining cache consistency because users and applications can be directed to the geo-replicated cache closest to them.</P> <P> </P> <P> </P> <H2>Global Synchronization of Data</H2> <P>Managing multiple sources of data can be a frustrating challenge. Scale or latency constraints can force you to silo your app infrastructure by geography, which then can introduce data consistency issues. Some applications are designed to have the same experience across borders, which confounds the problem even further. For example, a game developer might want all players to see a global leaderboard which ranks players across regions. While Redis is a common way to implement a leaderboard, aggregating multiple independent leaderboards from separate Redis instances is a hassle. With active geo-replication, however, the linked Redis instances can all update the same shared sorted set leaderboard, meaning a new high score in Tokyo will be automatically ranked next to a score from a player in London.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_2-1643313027929.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/343086i1F8842A7C6FF9B0F/image-size/medium?v=v2&px=400" role="button" title="kteegarden_2-1643313027929.png" alt="kteegarden_2-1643313027929.png" /></span></P> <H1>Try it on Azure</H1> <P>Azure Cache for Redis gives you a fully-managed Redis experience. With full portal integration, <A href="https://docs.microsoft.com/azure/azure-cache-for-redis/cache-how-to-active-geo-replication" target="_blank">configuring active geo-replication</A> is straightforward, and gives you a wide selection of regions to choose from in the ever-growing Azure footprint. <A href="https://azure.microsoft.com/en-us/free/" target="_blank">Try active geo-replication today</A> in the Enterprise and Enterprise flash tiers of Azure Cache for Redis, read how to <A href="https://docs.microsoft.com/azure/azure-cache-for-redis/cache-how-to-active-geo-replication" target="_blank">configure the feature</A>, or check out a <A href="https://github.com/MSFTeegarden/Azure-Redis-Active-Geo-Demo" target="_blank">simple active geo-replication demo</A>. </P></description> <pubDate>Wed, 02 Feb 2022 16:00:00 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-to-utilize-active-geo-replication-in-azure-cache-for-redis/ba-p/3074404</guid> <dc:creator>kteegarden</dc:creator> <dc:date>2022-02-02T16:00:00Z</dc:date> ... </item> <item> <title>New Learning path on Python 11 parts - check it out</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-on-python-11-parts-check-it-out/ba-p/3101700</link> <description><P>On the Academic team, we set out to create a long path of Python modules. The idea was to address all the concerns you might have starting out with Python. All the way from learning the basic building blocks to managing larger Python projects. Whether you're into #iot #datascience #machinelearning or #webdev - this is a great way to start.</P> <P> </P> <P>Check out the below article for more details on the learning path </P> <P><A href="https://techcommunity.microsoft.com/t5/educator-developer-blog/how-you-can-learn-python-with-this-11-part-series/ba-p/3101534#M779" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/educator-developer-blog/how-you-can-learn-python-with-this-11-part-series/ba-p/3101534#M779</A></P> <P> </P> <P>If you just want to start learning, here's the path on aka.ms/learn</P> <P><A href="https://docs.microsoft.com/en-us/learn/paths/beginner-python/" target="_self">Python path, 11 modules</A> </P> <P> </P> <P>It's free - start learning today.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pexels-lukas-296282.jpg" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/344356iF0C130D7263138F6/image-size/large?v=v2&px=999" role="button" title="pexels-lukas-296282.jpg" alt="pexels-lukas-296282.jpg" /></span></P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P></description> <pubDate>Tue, 01 Feb 2022 23:28:17 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-on-python-11-parts-check-it-out/ba-p/3101700</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2022-02-01T23:28:17Z</dc:date> ... </item> <item> <title>Managing Microsoft365 with Microsoft365DSC and Azure DevOps</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/managing-microsoft365-with-microsoft365dsc-and-azure-devops/ba-p/3054333</link> <description><P><A href="https://microsoft365dsc.com/" target="_blank" rel="nofollow noopener">Microsoft365DSC</A><SPAN> is an Open-Source PowerShell Desired State Module. It allows configuration, monitoring, exporting, reporting and assessment of M365 tenants. Many organizations are implementing DevOps practices and with </SPAN><A href="https://github.com/microsoft/Microsoft365DSC" target="_blank" rel="nofollow noopener">Microsoft365DSC</A><SPAN> and </SPAN><A href="https://docs.microsoft.com/en-us/azure/devops/user-guide/what-is-azure-devops" target="_blank" rel="nofollow noopener">Azure DevOps</A><SPAN> you can implement Configuration as Code within your Microsoft 365 tenant.</SPAN></P> <P> </P> <P>At a high level the setup will look like:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Microsoft365DSC and Azure DevOps" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/337970i89D684B397A69E18/image-size/large?v=v2&px=999" role="button" title="M365DSCDevOps (2).png" alt="Microsoft365DSC and Azure DevOps" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Microsoft365DSC and Azure DevOps</span></span></P> <P> </P> <P>The whitepaper<SPAN> </SPAN><A href="https://office365dsc.azurewebsites.net/Pages/Resources/Whitepapers/Managing%20Microsoft%20365%20with%20Microsoft365Dsc%20and%20Azure%20DevOps.pdf" target="_blank" rel="nofollow noopener">Microsoft365Dsc and Azure DevOps</A><SPAN> </SPAN>dives into creating a solution with Azure DevOps and Microsoft365DSC.</P> <P> </P> <P>The whitepaper will cover in detail the following:</P> <UL> <LI>Creating account for DSC</LI> <LI>Configuration of Azure DevOps project</LI> <LI>Configuration of Azure DevOps build agents</LI> <LI>Configuration of Azure Key Vault to store secrets</LI> <LI>Creating build and release pipelines to deploy configuration to M365 tenant</LI> <LI>Securing service accounts with Azure Conditional Access policy</LI> <LI>Using certificate instead of username/password for M365 authentication</LI> </UL></description> <pubDate>Fri, 07 Jan 2022 14:33:21 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/managing-microsoft365-with-microsoft365dsc-and-azure-devops/ba-p/3054333</guid> <dc:creator>Derek Smay</dc:creator> <dc:date>2022-01-07T14:33:21Z</dc:date> ... </item> <item> <title>Do the #Code4Good thing—make the world a better place</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/do-the-code4good-thing-make-the-world-a-better-place/ba-p/3016575</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="MichelleSandford_0-1638246414812.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330257i5F8BB5A3647DC0F9/image-size/medium?v=v2&px=400" role="button" title="MichelleSandford_0-1638246414812.jpeg" alt="MichelleSandford_0-1638246414812.jpeg" /></span></P> <P> </P> <P><I><SPAN data-contrast="none">Michelle Sandford, Community Engagement PMM for emerging Developers at Microsoft, shares why she does the #Code4Good thing, and awesome ways you can use your tech skills to make the world a better place, too.</SPAN></I><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">I focus on supporting enablement, diversity, and inclusion initiatives. I like to teach people to code (usually women or children), because I want to bring a more even mix of people into the tech industry, and the best way to do that is to get involved and show them how much fun it is. I love giving my time to do this for my community because I am also learning while teaching. People ask me questions that I’ve never considered, and it makes me stop and think more deeply about what I do and how. That helps me grow, while I am enabling others to grow. But it isn’t just about me and how much I enjoy these experiences. I think each of us has a duty to give something back, to enable the next generation to do more and be more than we ever were. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">People often ask me how I choose what opportunities to get involved in. I say “</SPAN><I><SPAN data-contrast="none">It’s easy, think about what you care about, what excites you, what drives you, and align all your focus on those things.”</SPAN></I><SPAN data-contrast="none"> But of course, it’s not always easy, especially if you have no idea about what opportunities are out there, what you can do, what you like doing, and what you stand for. You must try all the things. So, if you have time, say yes. Do the Thing (as </SPAN><A href="https://donasarkar.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Dona </SPAN></A><SPAN data-contrast="none">Sarkar</SPAN><SPAN data-contrast="none"> says). After a while you will discover some of the things that inspire you and make you happy.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">So here are a few #Code4Good opportunities to consider:</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="none">Code for good in a </SPAN></STRONG><A href="https://givecamp.org/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">GiveCamp.</SPAN></STRONG></A><SPAN data-contrast="none"> Learn </SPAN><SPAN data-contrast="none">how the idea for GiveCamp came to life, how they use tech to help non-profits, and how you can get involved in this </SPAN><A href="https://docs.microsoft.com/en-us/events/build-may-2021/general/connection-zone/con031/" target="_blank" rel="noopener"><SPAN data-contrast="none">video.</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><STRONG><SPAN data-contrast="none">Volunteer as a mentor team member or event tech mentor at hackathons</SPAN></STRONG><SPAN data-contrast="none"> such as </SPAN><A href="https://govhack.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">GovHack</SPAN></A><SPAN data-contrast="none"> - a festival of ideas</SPAN><SPAN data-contrast="none">. Look at innovation or student hubs for details on local hackathons. Microsoft’s Global Hackathon which comes out via </SPAN><A href="https://www.microsoft.com/en-us/garage/" target="_blank" rel="noopener"><SPAN data-contrast="none">The Microsoft Garage</SPAN></A><SPAN data-contrast="none"> each year is a great way to get involved and there are many teams to choose from, often accepting external team members. </SPAN><A href="https://www.microsoft.com/en-us/ai/ai-for-good-participation" target="_blank" rel="noopener"><SPAN data-contrast="none">Participate in Microsoft AI for Good Projects.</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><SPAN data-contrast="none">If you like to code, </SPAN><STRONG><SPAN data-contrast="none">get involved in the </SPAN></STRONG><A href="https://opensource.microsoft.com/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Open Source Community</SPAN></STRONG></A><SPAN data-contrast="none"> There are so many valuable projects than run entirely on the time and good will of volunteers and you can contribute time, code, or money to help out.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="none">Find in-kind dev opportunities</SPAN></STRONG><SPAN data-contrast="none"> through </SPAN><A href="https://www.catchafire.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">Catchafire</SPAN></A><SPAN data-contrast="none"> or </SPAN><A href="https://www.volunteermatch.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">VolunteerMatch</SPAN></A><SPAN data-contrast="none">, you can search their opportunities on LinkedIn. You can also search “Volunteer Developer” in a LinkedIn job search.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><STRONG><SPAN data-contrast="none">Become a mentor in a STEM program</SPAN></STRONG><SPAN data-contrast="none"> such as </SPAN><A href="https://shecodes.com.au/" target="_blank" rel="noopener"><SPAN data-contrast="none">She Codes.</SPAN></A><SPAN data-contrast="none"> This is an Australian program but there are programs like this in every country looking for mentors. Check out </SPAN><A href="https://www.nuevofoundation.org/what-we-do" target="_blank" rel="noopener"><SPAN data-contrast="none">Nuevo Foundation,</SPAN></A><SPAN data-contrast="none"> </SPAN><A href="https://coderdojo.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">CoderDojo</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://abcn.com.au/" target="_blank" rel="noopener"><SPAN data-contrast="none">ABCN</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://djangogirls.org/en/" target="_blank" rel="noopener"><SPAN data-contrast="none">Django Girls</SPAN></A><SPAN data-contrast="none">, and of course, </SPAN><A href="https://www.womenwhocode.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Women Who Code</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><STRONG><SPAN data-contrast="none">Hit the </SPAN></STRONG><A href="https://techcommunity.microsoft.com/t5/azure/ct-p/Azure" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">forums</SPAN></STRONG></A><SPAN data-contrast="none"> and help fellow community members solve tech issues in your area of expertise.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><STRONG><SPAN data-contrast="none">Give an inspiring or educational talk </SPAN></STRONG><SPAN data-contrast="none">at meetups and conferences. Many encourage first time speakers and will actively support you with mentorship from an experienced speaker. You can submit proposals to speak at conferences by responding to a CFP (Call for Papers/Programs), which can be found on sites such as: </SPAN><A href="https://www.cfpland.com/conferences/" target="_blank" rel="noopener"><SPAN data-contrast="none">CFP Land</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://twitter.com/techdailycfp" target="_blank" rel="noopener"><SPAN data-contrast="none">Tech Daily CFP</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://www.papercall.io/events" target="_blank" rel="noopener"><SPAN data-contrast="none">PaperCall</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://confs.tech/cfp" target="_blank" rel="noopener"><SPAN data-contrast="none">Confs.tech</SPAN></A><SPAN data-contrast="none">, </SPAN><A href="https://twitter.com/appcfp" target="_blank" rel="noopener"><SPAN data-contrast="none">SeeCFP</SPAN></A><SPAN data-contrast="none">, and </SPAN><A href="https://callingallpapers.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">CallingAllPapers</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">I recently participated in a session at Microsoft Ignite that talked about how you can make an impact through contribution to community.<A href="https://myignite.microsoft.com/sessions/1dabe2de-d29d-4c7e-8cb4-bcc5516d92f2?source=/schedule" target="_self"> Check out the replay.</A></SPAN></P> <P><SPAN data-contrast="none">Do you have favorite avenues to contribute to dev and broader communities? Please share #Code4Good opportunities you’ve been involved with in the blog comments section below!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><I><SPAN data-contrast="none">Michelle Sandford, Community Engagement PMM for emerging Developers at Microsoft, is a Tedx Speaker, Australian Computer Society WA Chairman, and was previously named one of MCV's 30 Most Influential Women in Games. She lives at the heart of the developer community and helps drive awareness and engagement as an AI influencer and chatbot builder. She is an advocate for STEM, the Games Industry, and Developers. For daily updates from Michelle follow @codess_aus on <A href="https://twitter.com/codess_aus" target="_self">Twitter</A> and <A href="https://instagram.com/codess_aus" target="_self">Instagram</A>, or follow her on </SPAN></I><A href="https://www.linkedin.com/in/michellesandford/" target="_blank" rel="noopener"><I><SPAN data-contrast="none">LinkedIn</SPAN></I></A><I><SPAN data-contrast="none">.</SPAN></I><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P></description> <pubDate>Tue, 07 Dec 2021 01:39:30 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/do-the-code4good-thing-make-the-world-a-better-place/ba-p/3016575</guid> <dc:creator>Michelle Sandford</dc:creator> <dc:date>2021-12-07T01:39:30Z</dc:date> ... </item> <item> <title>An airline pilot develops a robotic arm for his friend’s son using .NET and a 3D printer</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-airline-pilot-develops-a-robotic-arm-for-his-friend-s-son/ba-p/3015347</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_0-1638211868010.png" style="width: 465px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330083i151162BB82C0BF1F/image-dimensions/465x261?v=v2" width="465" height="261" role="button" title="Monish_Gangwani_0-1638211868010.png" alt="Monish_Gangwani_0-1638211868010.png" /></span></P> <P><EM>Kayden Jeffery trying on the robotic arm that Clifford Agius built for him</EM></P> <P><EM> </EM></P> <P><FONT size="4"><STRONG>Clifford Agius is a freelance .NET developer who flies around the world in a Boeing 787 for his day-job. When he is not thousands of feet above sea-level, he loves to code. </STRONG><STRONG>When a family friend asked Cliff for help improving her son’s prosthetic arm, the 787 pilot by day/freelance developer by night used open-source software to build a new arm for the teen.</STRONG></FONT></P> <P> </P> <P><FONT size="4"><STRONG>He has big plans on making the robotic arm easily available to families and communities who do not have access to resources and around continuing to improve the technical capability of his creation using .NET 6 and Visual Studio 2022.</STRONG></FONT></P> <P> </P> <P><STRONG><EM>We don’t usually come across someone who is a commercial pilot and a developer. Tell us a little about your journey and what inspires you to build the kind of apps that you do?</EM> </STRONG></P> <P>I spent the first 11 years of my career writing software and automating production line equipment. I always wanted to learn to fly, and after many years in tech, I could afford to go to pilot school and get a private license. So I signed up and that led to me taking two years off to go to flight school and became a commercial pilot.</P> <P> </P> <P>Shortly after, I was invited by a friend to contract for him; he needed someone to build a few modules in C# and .NET. I knew the paradigms of code and was quickly able to familiarize myself with .NET. I worked on those modules during the layover downtime at hotels for six months. And that led to how I get to work on fun dev projects during my layovers. My engineering background has translated to me working on a lot of IoT related projects built using .NET, and I like to work on projects that make a difference in the world.</P> <P> </P> <P><EM><STRONG>Tell us about HandyApp and how it came about.</STRONG></EM></P> <P>December of 2016, a family friend started chatting about a news article in the media here in the UK, about a dad that 3D printed a hand for his daughter. ”You've got 3D printer, right, Cliff?” – she asked. I realized then that she was asking whether I could create one for her son Kayden, who was born with half an arm. Kayden is a good kid and he had received an arm extension from the local health services agency that had a hook, which was not optimal for holding things and hence was not super functional. I wanted to see if I could help – I managed to find the code for the 3D printed hand referenced in the news in open source projects and I printed out the hand. That 3D hand did not have a great grip either and Kayden hated it.</P> <P> </P> <P>I was bitten by the bug and wanted to find a solution. I went back to the drawing board and started revisualizing and researching. That’s when I stumbled across <A href="https://openbionics.com/" target="_blank" rel="noopener">OpenBionics</A> and was able to build HandyApp.</P> <P> </P> <P>HandyApp is an OpenSource mobile application built using .NET; it allows users of the OpenSource Bionic Hand project to control the hand and it's settings via bluetooth. This is still very much a work in progress but the current build will allow a Bluetooth Connection to the Adafruit board inside the hand and remote control and set-up.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_1-1638211868087.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330082iC0C001CA114A4006/image-size/medium?v=v2&px=400" role="button" title="Monish_Gangwani_1-1638211868087.png" alt="Monish_Gangwani_1-1638211868087.png" /></span></P> <P><EM>Kayden enjoying the summer by the lake</EM></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_2-1638211868249.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330084iE8D0E408FAE5A897/image-size/medium?v=v2&px=400" role="button" title="Monish_Gangwani_2-1638211868249.png" alt="Monish_Gangwani_2-1638211868249.png" /></span></P> <P><EM>Kayden with the prosthetic arm provided to him by the local health services agency</EM></P> <P> </P> <P><STRONG><EM>It sounds like this became an important project for you at a personal level. What are your future plans around it?</EM> </STRONG></P> <P>Yes, this project became important because it is so meaningful to change people’s lives through technology… There are plans to continue the building of this app to a point that any user can configure their own Bionic hand as well as record sensor reading and upload them to an Azure Cloud function for analysis and suggestion of settings, but this is still on the todo list. I also want to take advantage of all the cool stuff in .NET 6 and Visual Studio 2022.</P> <P> </P> <P>Importantly, I would like to make this solution more easily available to families. I have considered how much money this would cost a family living where there is no health services agency. I calculated the cost down to 500 pounds. After the pandemic is over, I intend to stick a 3D printer in a box, some spools of filament, some screws, nuts, bolts and some electronics boards and take them overseas on a flight. I've spoken to hospitals in Pakistan and in India and there is some early interest.</P> <P> </P> <P>I have also started looking at building LeggyApp, which is an app connected to a prosthetic leg.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_3-1638211868485.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/330085i2A7052AE76BFC54B/image-size/medium?v=v2&px=400" role="button" title="Monish_Gangwani_3-1638211868485.png" alt="Monish_Gangwani_3-1638211868485.png" /></span></P> <P><EM>The robotic arm kit</EM></P> <P> </P> <P><EM><STRONG>Tell us about the cool stuff in .NET 6 and Visual Studio 2022 you plan to take advantage of. </STRONG></EM></P> <P>I am excited about .NET MAUI ((Multi-platform App UI) and plan to update the app so it can target Windows and MacOS in addition to the current platforms, Android and iOS - all with the same code base. I am also planning to switch to Wilderness Labs Meadow F7 boards inside the robotic arm so that we can have .NET not just in the mobile and desktop client but also on the actual device. Once Wilderness Labs Meadow runs .NET on the IoT Hardware taking advantage of the new .NET 6 tooling and changes to the BCL, we can then carry out over-the-air updates on the hardware. So, if we wish to update the code we can build and have an Azure Dev Ops process push the updates directly to the hardware removing the need for the user to visit a technician for updates.</P> <P> </P> <P>This change to .NET on the hardware as well as across the mobile and desktop means that we can share code between the two code bases with shared Models and Service layers reducing the need to have bespoke versions of these. The possibilities with .NET MAUI are endless and I recently wrote <A href="https://www.cliffordagius.co.uk/post/whatismaui/" target="_self">a blog</A> about it.</P> <P> </P> <P>Visual Studio 2022 allows me to use hot restart, and hot reloads, so I can edit my C# code to bring the dev cycle down from a minute and a half to just a few seconds. The fact that I can plug my developer iPhone into my Windows Surface Book laptop when I'm traveling around the world and keep coding is awesome. I've been using Visual Studio 2022 for last couple of months as my daily.</P> <P> </P> <P>Also Microsoft has gone out of the way to make sure that accessibility is engrained into the design. So the biggest advantage of Visual Studio 2022 will be the accessibility gains, the speed improvements, app startup times, and being able to develop and compile <EM>really, really</EM> fast.</P> <P><SPAN style="font-weight: normal !msorm;"><STRONG> </STRONG></SPAN></P> <P><EM><STRONG>Do you have any advice to aspiring or striving developers?</STRONG></EM></P> <P>Keep learning. Learning and challenging our ourselves to explore the unexplored is where real growth as an individual takes place. I use the content on docs.microsoft.com to keep myself updated and recommend it to all developers.</P> <P> </P> <P><STRONG>Watch Clifford Agius and young Kayden demo the robotic arm and HandyApp </STRONG></P> <P><A href="https://azure.microsoft.com/en-gb/developer/stories/" target="_blank" rel="noopener"><STRONG>https://azure.microsoft.com/en-gb/developer/stories/</STRONG><BR /></A> </P> <P><STRONG>.NET 6 announcement</STRONG></P> <P><SPAN>It is ready for your #app — over a year in the making, we are very happy to release </SPAN><SPAN>.NET 6 and a higher performance web stack to simplify and speed up development! </SPAN><SPAN>Learn more: <A title="https://aka.ms/dotnet6-ga" href="https://aka.ms/dotnet6-GA" target="_blank" rel="noreferrer noopener">https://aka.ms/dotnet6-GA</A> </SPAN></P> <P><LI-WRAPPER> </LI-WRAPPER></P> <P> </P> <P><STRONG>CODE Magazine Focus Issue: .NET 6</STRONG></P> <P><SPAN>Read all about the .NET 6 release and what’s new in Visual Studio 2022 for .NET </SPAN><SPAN>#developers in this special issue of CODE Magazine: <A title="https://aka.ms/dotnet6-code-mag" href="https://aka.ms/dotnet6-code-mag" target="_blank" rel="noreferrer noopener">https://aka.ms/dotnet6-code-</A></SPAN><SPAN><A title="https://aka.ms/dotnet6-code-mag" href="https://aka.ms/dotnet6-code-mag" target="_blank" rel="noreferrer noopener">mag</A> </SPAN></P> <P> </P> <P><STRONG>Cliff's blog: </STRONG><A href="https://www.cliffordagius.co.uk/" target="_blank" rel="noopener">https://www.cliffordagius.co.uk/</A></P> <P> </P> <P><EM><STRONG>CodeStories Blogs is a series of interviews with innovative and inspiring developers.</STRONG></EM></P></description> <pubDate>Tue, 30 Nov 2021 08:48:06 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-airline-pilot-develops-a-robotic-arm-for-his-friend-s-son/ba-p/3015347</guid> <dc:creator>Monish_Gangwani</dc:creator> <dc:date>2021-11-30T08:48:06Z</dc:date> ... </item> <item> <title>Azure Friday: The year in retrospect</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-friday-the-year-in-retrospect/ba-p/3015107</link> <description><P><SPAN data-contrast="auto">Hi everyone, I think one thing we can all agree on is that 2021 has been a wild and wonderful ride for anyone keeping up with innovations in Azure Services. We’ve seen advancements across the platform all the way from making Quantum computing more accessible, to the rise of GitHub in workflows, to updates in everything from Cosmos DB to Blobs.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">As we are wrapping up the year, I’d like to share some reflections on Azure Friday with a few episodes that may be especially interesting and widely useful to developers. If you missed any of these, you might want to catch up on watching them now. </SPAN><SPAN> <BR /></SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">We have data science that proves you are more likely to be successful in Azure if you get started with the </SPAN><A href="https://docs.microsoft.com/en-us/azure/azure-portal/azure-portal-quickstart-center" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Quickstart Center</SPAN></A><SPAN data-contrast="auto">. In </SPAN><STRONG><I><SPAN data-contrast="auto">Better Azure content, programs & services through applied data science</SPAN></I></STRONG><SPAN data-contrast="auto"> Lisa Cohen explained how Microsoft uses data science to help Azure customers. Learn about content, programs, and services to guide you on your cloud journey, and how we use your feedback to drive improvements in Azure.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=Qll-wtjIobU" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/Qll-wtjIobU/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW236030956 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW236030956 BCX0">Just because something is running in a container, that does not automatically mean that you </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">have security baked in. </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">Azure Container Instances (ACI) allow for a quick, simple, and cost-effective way to run serverless containers in production. </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">Jessica </SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW236030956 BCX0">Deen</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> explains</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> ways to be intentional about</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">how you design container</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">s</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> and build with security </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">in</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> mind </SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">in </SPAN></SPAN><SPAN class="TextRun SCXW236030956 BCX0" data-contrast="auto"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW236030956 BCX0">Best</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0"> practices for Azure Container Instances (ACI) with GitHub Actions</SPAN><SPAN class="NormalTextRun SCXW236030956 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=jkEkeTW1QeE" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/jkEkeTW1QeE/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW182523104">O</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">ne of the most fun </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">episodes</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> for me this year</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> was definitely</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW182523104">gee</SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW182523104">k</SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW182523104">ing</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> out in</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW182523104">Retro Game Translation with Azure Cognitive Services and IoT Edge</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW182523104"> w</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">ith </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">Paul </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">DeCarlo</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">,</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">as he demonstrated how he </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">uses IoT Edge with Cognitive Services Containers to enhance</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> and localize</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">favorite retro videogames</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">.</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">W</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">e shared a few</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">treasured </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">items from our </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">respective </SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">retro gaming collections</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104"> in this one</SPAN><SPAN class="NormalTextRun BCX0 SCXW182523104">, too.</SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><LI-VIDEO vid="https://www.youtube.com/watch?v=atga5uMsrYY" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/atga5uMsrYY/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="TextRun SCXW263399982 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW263399982 BCX0">Did you know that you can use optimization </SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0">algorithms</SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0"> </SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0">inspired by</SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0"> decades of quantum physics research to help solve optimization problems? </SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0">In </SPAN></SPAN><SPAN class="TextRun SCXW263399982 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW263399982 BCX0">Quantum-inspired algorithms and the Azure Quantum optimization service</SPAN></SPAN><SPAN class="TextRun SCXW263399982 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW263399982 BCX0"> Delbert Murphy joined Scott to show how Quantum-Inspired optimization (QIO) takes state-of-the-art algorithmic techniques from quantum </SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW263399982 BCX0">physics</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW263399982 BCX0">,</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW263399982 BCX0"> and</SPAN><SPAN class="NormalTextRun SCXW263399982 BCX0"> makes these capabilities available in Azure on conventional hardware, and callable from a Python client. </SPAN></SPAN><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=ggwKsoR8m08" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/ggwKsoR8m08/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW73754094 BCX0">Something that blew my mind when I learned it this year was that Azure offers satellite ground station as a service. How cool is that? Scott</SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0"> spoke with rocket scientist </SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">Hrishi Shelar and learned about Azure Orbital</SPAN></SPAN><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="none"><SPAN class="NormalTextRun SCXW73754094 BCX0">—</SPAN></SPAN><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW73754094 BCX0">a fully managed cloud-based ground station as a service that enables you to communicate with your spacecraft or satellite constellations, downlink and uplink data, process your data in the cloud, </SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">and </SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">chain services with Azure services. It’s </SPAN><SPAN class="NormalTextRun AdvancedProofingIssueV2 SCXW73754094 BCX0">pretty amazing</SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">! Watch </SPAN></SPAN><SPAN class="TextRun SCXW73754094 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW73754094 BCX0">How to use Azure Orbital to communicate with your satellites</SPAN><SPAN class="NormalTextRun SCXW73754094 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><LI-VIDEO vid="https://www.youtube.com/watch?v=MqgjSBKAxIg" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/MqgjSBKAxIg/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW180139325 BCX0" data-contrast="auto"><SPAN class="NormalTextRun SCXW180139325 BCX0">Did a specific episode of Azure Friday </SPAN><SPAN class="NormalTextRun SCXW180139325 BCX0">stand out to you as memorable this year? I’d love to hear about it in the comments.</SPAN></SPAN><SPAN class="EOP SCXW180139325 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW236030956 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW182523104" data-contrast="auto"><SPAN class="EOP SCXW263399982 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW73754094 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW180139325 BCX0" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun BCX0 SCXW67672907" data-contrast="auto"><SPAN class="NormalTextRun BCX0 SCXW67672907">Keep watching Azure Friday episodes on <A href="https://docs.microsoft.com/en-us/shows/Azure-Friday/" target="_blank" rel="noopener">Azure Friday | Microsoft Docs</A></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></P></description> <pubDate>Thu, 02 Dec 2021 18:58:06 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-friday-the-year-in-retrospect/ba-p/3015107</guid> <dc:creator>RobCaron</dc:creator> <dc:date>2021-12-02T18:58:06Z</dc:date> ... </item> <item> <title>10 shades of public API hosting on Azure</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/10-shades-of-public-api-hosting-on-azure/ba-p/2989856</link> <description><P>APIs are everywhere and there are many ways to host them in Azure! Let us see what are the different possibilities with the pros & cons of each. I am not going to discuss the bits and bytes about each possibility. The purpose of this post is to give you a rough idea of what is possible for a simple scenario (single region, high-availability and disaster recovery are out of scope). I will provide small diagrams for more advanced scenarios.</P> <P> </P> <H2>1) Function App - Consumption tier</H2> <P> </P> <P>Function Apps ship with HTTP-triggered functions. These can be suitable to expose tiny APIs.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly (economies of scale), Easy to deploy, Fully elastic with built-in auto-scaling from 0 to n instances.</P> <P><U><STRONG>Cons</STRONG></U>: Limited security controls. Network ACLs are the only way to limit public exposure. Data accessed by such functions must be public from a connectivity perspective. Cold start due to serverless tier. Limited execution time as well as per-execution resource consumption. No WAF (Web Application Firewall) features.</P> <P> </P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, Basic API needs (ie: no catalog, no versioning, etc.), asynchronous APIs, Synchronous APIs that can live with the cold start, No strong compliance requirements.</P> <P> </P> <H2>2) Multi-Tenant App Service - Standard tier</H2> <P>Like functions, Web Apps are pretty neat and easy to get started with. Microsoft is managing everything for you under the hoods. </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly (economies of scale) but fixed cost incurred (unlike functions on consumption tier), Easy to deploy, Auto-scaling plans. Resource is limited to the capacity you are willing to pay. No cold start when Always On is turned on!</P> <P><U><STRONG>Cons</STRONG></U>: Limited security controls. Network ACLs are the only way to limit public exposure. Data accessed by such apps must be public from a network perspective. No WAF.</P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, Basic API needs (ie: no catalog, no versioning, etc.), No strong compliance requirements.</P> <P> </P> <H2>3) Azure Container Instances (ACI)</H2> <P>While Azure Container Instances can be used to host long-running services, I would advise against this idea and keep the ACIs for asynchronous job operations, short-lived executions and as the serverless (virtual kubelets) part of Azure Kubernetes Service. </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly (pay per second of execution), providing the API is not constantly up and running.</P> <P><U><STRONG>Cons</STRONG></U>: Limited security controls with Windows Containers, better with Linux as Linux-based ACIs can integrate with virtual networks.</P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, Basic API needs (ie: no catalog, no versioning, etc.), No strong compliance requirements. Lift & shift of plain old legacy Windows-based backend services.</P> <H2>4) Functions Apps Consumption tier or App Service standard+ Azure API Management (APIM) Consumption tier</H2> <P>In this setup, you intend to publish APIs through Azure API Management. The pros & cons of the underlying hosting option (app service or function apps) remain as explained earlier and are not repeated below.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost-friendly because the serverless flavor of APIM has no fixed cost. It will auto-scale with the actual demand. You can add features to your APIs such as enforcing policies (JWT validation, headers checks etc.) as well as version them. </P> <P><U><STRONG>Cons</STRONG></U>: More security controls but there is still a few major caveats: network ACLs remain the only way to limit public exposure of the backend and traffic cannot be forced through APIM because the consumption tier has no static IP so this can't be used as a network ACL on the backend side. Data accessed by such apps must still be public from a network perspective. Still no WAF because APIM is a a PEP (Policy Enforcement Point) but not a WAF. </P> <P><U><STRONG>Use cases</STRONG></U>: Lab, PoC, Prototyping, Limited budgets, More advanced API needs (catalog, versioning, consistent way of exposing APIs etc.), No strong compliance requirements.</P> <P> </P> <H2>5) Functions Apps Consumption tier or App Service standard+ Azure API Management (APIM) Basic or Standard tier</H2> <P>In this setup, you intend to publish APIs (<EM>and enforce routing</EM>) through Azure API Management. </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: You benefit from APIM capabilities AND you can restrict traffic to the backend to your APIM instance because as of the basic tier, APIM comes with a static IP. </P> <P><U><STRONG>Cons</STRONG></U>: A bit more expensive (fixed cost for APIM). Manual scaling for the Basic tier (plans possible as of Standard). Data stores accessed by the backends must still be public from a network perspective. Still no WAF because APIM is a a PEP (Policy Enforcement Point) but not a WAF. </P> <P><U><STRONG>Use cases</STRONG></U>: Limited budgets, More advanced API needs (catalog, versioning, consistent way of exposing APIs etc.), No strong compliance requirements.</P> <P> </P> <H2>6) App Service (or Functions) on Premium tier+Private Endpoint+VNET Integration+WAF</H2> <P>In this setup, you want isolate your backend services totally from internet and make them only accessible through a web application firewall (WAF). Because it is a little more complex, here is a small diagram showing the different blocs and their interactions.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="plinkvnetintegration.png" style="width: 722px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328462i3330053516527FA8/image-size/large?v=v2&px=999" role="button" title="plinkvnetintegration.png" alt="plinkvnetintegration.png" /></span></P> <P>The traffic flies from a caller (here a mobile device) to a WAF which has a public IP. The WAF has a backend pool targeting the endpoints defined in the corresponding private endpoint subnet. The app service is integrated with Azure Private Link (and private DNS zone) for the INBOUND traffic. VNET integration for the App Service (or function app) is enabled to handle the OUTBOUND traffic through another VNET's subnet.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: This hosting option is more secure than the preceding ones because the data stores can be firewalled thanks to the control over the outbound traffic of the API. The backend services are isolated from internet and proxied by a WAF. </P> <P><U><STRONG>Cons</STRONG></U>: This architecture is a bit convoluted and is not the best one to run at scale.</P> <P><U><STRONG>Use cases</STRONG></U>: Stronger focus on security. Basic API needs (no more APIM in the picture). </P> <P> </P> <H2>7) App Service (or Functions) on Premium tier+Private Endpoint+VNET Integration+WAF+APIM Premium</H2> <P>The purpose of this setup is the same as the previous one but you want to combine both WAF & APIM (how it should be) before hitting backend services. </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="plinkvnetintegrationapimwaf.png" style="width: 722px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328465iD7E02E7C97E31DF8/image-size/large?v=v2&px=999" role="button" title="plinkvnetintegrationapimwaf.png" alt="plinkvnetintegrationapimwaf.png" /></span></P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Inbound traffic is more secure because it traverses a WAF and a PEP. Network ACLs can be set at backend level to only let the API gateway (which has a static IP) call the backend. Outbound traffic of the API gateway can be controlled by a NVA or Azure Firewall.</P> <P><U><STRONG>Cons</STRONG></U>: This architecture is a bit convoluted and is not the best one to run at scale, from a manageability perspective. APIM premium is expensive but is required because at the time of writing (11/2021), only the Premium tier integrates with Virtual Networks. </P> <P><U><STRONG>Use cases</STRONG></U>: Stronger focus on security, advanced API needs and possible geo-distributed APIs setup.</P> <P> </P> <H2>8)</img> WAF+APIM Premium+App Service Environment (ASE)</H2> <P>Before ASE v3, ILB ASEs had a rather bad reputation because of their cost (flat fees), and their complexity. It was indeed quite easy to break them with improperly configured firewall rules. ASE v3 are a breeze to setup and are less expensive (no more flat fee). Therefore ILB ASE comes back as a very interesting option because it offers the best-in-class security at an affordable price, at least from a backend hosting perspective.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ase.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328468iD1AA186116E5886F/image-size/large?v=v2&px=999" role="button" title="ase.png" alt="ase.png" /></span></P> <P> </P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Inbound and outbound traffic can be fully controlled by an NVA or Azure Firewall. Intra VNET traffic can be controlled with both Network Security Groups and Azure Firewall. Backends are totally isolated from internet. This setup is scalable because the ASE can host tons of backends and functions. The underlying compute is based on a single-tenant architecture (Isolated tier). Compared to the previous setup involving only private endpoints, controlling the network traffic is easier with an ASE. However, in 11/2021, private endpoints can also be subject to both UDRs & NSGs but it is a public preview feature that is only available in some regions...This comment is also relevant for the ASE-based architecture since the apps hosted on the ASE are likely to talk to public PaaS services (Azure SQL, Azure Storage, etc.) through private endpoints.</P> <P><U><STRONG>Cons</STRONG></U>: Costs (incurred by the isolated tiers and APIM premium) and complexity. Although ASE v3 is a breeze compared to its predecessors, this setup is often part of a larger Hub & Spoke architecture, which involves a lot of networking and firewalling work. You do not get started with it over night! </P> <P><U><STRONG>Use cases</STRONG></U>: Stronger compliance requirements, advanced API needs and possible geo-distributed APIs setup. This setup is perfectly suitable as a Web Landing Zone that hosts tons of web apps and APIs. </P> <P> </P> <H2>9) WAF+APIM Premium+AKS</H2> <P>Kubernetes has become a first-class citizen everywhere and AKS is the Microsoft-managed K8s offering on Azure (By the way, Azure Arc also has a ton of handy features to manage K8s clusters at scale wherever they are hosted). So, with this in mind, I could not skip it. Here is a very simplified diagram showing the different building blocks:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AKS.png" style="width: 762px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/328469iCFF6CE6FBD59A587/image-size/large?v=v2&px=999" role="button" title="AKS.png" alt="AKS.png" /></span></P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Very similar to the previous architecture with regards to inbound and outbound, Hub & Spoke integration, etc.. although AKS adds a serious bits of extra complexity network-wise. AKS allows you to host nearly anything and has a very rich ecosystem. When I think AKS, I think all the benefits of VMs with all the benefits of cloud native architectures (Infrastructure as Code, increased resilience, zero downtime, releases during business hours, polyglot apps, etc.). </P> <P><U><STRONG>Cons</STRONG></U>: Costs incurred by APIM premium and the AKS node pools, which should involve at least 3 nodes but ideally 5 for a minimal production-grade setup. Another potential deal-breaker for some organizations is the complexity of K8s (AKS). App Services and Function Apps are <EM><STRONG>way easier</STRONG> </EM>to work with and it is a Kubernetes lover who tells you this!</P> <P><U><STRONG>Use cases</STRONG></U>: Stronger compliance requirements, advanced API needs and possible geo-distributed APIs setup. This setup is perfectly suitable as a Web Landing Zone that hosts tons of web apps and APIs. Microservices architectures (K8s and its ecosystem, including service meshes, are very supportive of microservices architectures).</P> <P> </P> <H2>10) Container Apps</H2> <P>I put it last, not because it's the most advanced but because it is in preview. This new service (public preview in 11/2021) is very promising because it comes with some of the AKS promises without the complexity because Microsoft manages nearly everything for you. Container apps remind me Service Fabric Mesh to some extent, let's hope they'll have a brighter future. However, at the time of writing, it is no way in line with typical enterprise needs (Hub & Spoke) but Microsoft is working on a BYO VNET feature. It is still a little early to come with pros & cons but here are a few of them.</P> <P> </P> <P><U><STRONG>Pros</STRONG></U>: Cost friendly since it scales from 0 to n, like Azure Functions. Easy to deploy and manage.</P> <P><U><STRONG>Cons</STRONG></U>: N/A (too early)</P> <P><U><STRONG>Use cases</STRONG></U>: right now, PoCs and protoyping only. In the future, microservices architectures, which is why this service has been built from the ground up.</P></description> <pubDate>Sat, 18 Dec 2021 15:20:47 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/10-shades-of-public-api-hosting-on-azure/ba-p/2989856</guid> <dc:creator>stephaneey</dc:creator> <dc:date>2021-12-18T15:20:47Z</dc:date> ... </item> <item> <title>Helping Professional Developers accelerate collaboration with low-code Power Apps on Microsoft Teams</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/helping-professional-developers-accelerate-collaboration-with/ba-p/2941803</link> <description><P><STRONG><SPAN data-contrast="none">How Professional Developers can use low-code </SPAN></STRONG><STRONG><SPAN data-contrast="none">Microsoft Power Apps and Teams to drive agility and collaboration within your organization </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">With major business disruption during the pandemic in 2020, Microsoft Power Apps and Teams were tools that quickly realized their value for being able to help teams collaborate and automate manual processes. To help understand how Power Apps and Teams can work together to help your organization, Professional developers have pulled together a series of 16 articles that help you, a professional developer, get started using low-code within a collaboration tool to simplify how your teams navigate their day-to-day tasks. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Get ready to jump in and learn how low-code Power Apps can help your business. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CodeProject.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/331289i0DBFE6C514DB9C42/image-size/large?v=v2&px=999" role="button" title="CodeProject.png" alt="CodeProject.png" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Power Apps Solution for Professional Developers Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">We explain why professional developers should care about Power Apps and Teams as well as where these tools fit within the software development and deployment landscape. We will also provide guidance on when it makes sense to use Power Apps instead of traditional development tools. Next, we demo how to build a Power App within Teams and export the app if needed. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303172/Power-Apps-for-Professional-Developers-1-Power-App" target="_blank" rel="noopener"><SPAN data-contrast="none">Power Apps for Professional Developers 1: Power Apps + Teams Overview</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303173/Power-Apps-for-Professional-Developers-2-How-to-bu" target="_blank" rel="noopener"><SPAN data-contrast="none">Power Apps for Professional Developers 2: How to build Power Apps</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303174/Power-Apps-for-Professional-Developers-3-Exporting" target="_blank" rel="noopener"><SPAN data-contrast="none">Power Apps for Professional Developers 3: Exporting Teams Apps</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution with a Customer Connector Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">We explain why professional developers should care about Power Apps and Teams and dive into how they can use a customer connector within the Team’s environment. The next articles then dive into app flows and how to think about updating information within the customer connector. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5309042/Building-a-Teams-Power-App-Using-a-Custom-Connecto" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using a Custom Connector Part 1: Introduction to Using Custom Connectors in Power Apps for Microsoft Teams</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5309044/Building-a-Teams-Power-App-Using-a-Custom-Connec-2" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using a Custom Connector Part 2: Integrating Power App Flow to Update Information</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5309046/Building-a-Teams-Power-App-Using-a-Custom-Connec-3" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using a Custom Connector Part 3: Editing Data and Writing Back to the App</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution with an SAP Connector Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Have SAP? Look at these articles to see how you can use the SAP connector with Microsoft Power Apps within your Microsoft Teams environment. There are also posts on reading and highlighting your app and how to write back data.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5310030/Building-a-Teams-Power-App-with-an-SAP-Connector-P" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App with an SAP Connector Part 1: Creating Environments and Adding a Connector</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5310032/Building-a-Teams-Power-App-Using-the-SAP-Connector" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using the SAP Connector Part 2: Reading and Displaying SAP Data in a Power App</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5310033/Building-a-Teams-Power-App-Using-the-SAP-Connect-2" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App Using the SAP Connector Part 3: Writing Data from a Power App Back to SAP</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution for Retail Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">We explore how to create a customer information application for a personalized retail shopping service, using Power Apps for Microsoft Teams. We will go into components of the app, including data entry and customer display UI.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303163/Building-a-Teams-Power-App-for-Retail-1-Creating-a" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App for Retail 1: Creating a Power App and Dataverse Database</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303166/Building-a-Teams-Power-App-for-Retail-2-Creating-a" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App for Retail 2: Creating a Customer Information Data Entry UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303168/Building-a-Teams-Power-App-for-Retail-3-Creating-a" target="_blank" rel="noopener"><SPAN data-contrast="none">Building a Teams Power App for Retail 3: Creating a Customer Display UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Building a Teams Power Apps Solution for Manufacturing Series</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">In this series, we look at a classic example of an ordering system. What could be a very manual task, we show you how to build a Power Apps solution. This includes creating UI’s for both customers and manufacturers. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":240,"335559740":240}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303169/Build-a-Teams-Power-App-for-Manufacturing-1-Get-St" target="_blank" rel="noopener"><SPAN data-contrast="none">Build a Teams Power App for Manufacturing 1: Get Started with Dataverse</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303170/Build-a-Teams-Power-App-for-Manufacturing-2-Create" target="_blank" rel="noopener"><SPAN data-contrast="none">Build a Teams Power App for Manufacturing 2: Create the Customer UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://www.codeproject.com/Articles/5303171/Build-a-Teams-Power-App-for-Manufacturing-3-Create" target="_blank" rel="noopener"><SPAN data-contrast="none">Build a Teams Power App for Manufacturing 3: Create the Manufacturer UI</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":252}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">As you can see there are many ways Power Apps can help various organizations be more agile. To learn more, check out </SPAN><A href="https://powerapps.microsoft.com/en-us/" target="_blank" rel="noopener"><SPAN data-contrast="none">Business Apps | Microsoft Power Apps</SPAN></A><SPAN data-contrast="none"> or reach out to your Microsoft representative. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P></description> <pubDate>Thu, 02 Dec 2021 19:04:43 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/helping-professional-developers-accelerate-collaboration-with/ba-p/2941803</guid> <dc:creator>Jacqui_Cuffe_McNamara</dc:creator> <dc:date>2021-12-02T19:04:43Z</dc:date> ... </item> <item> <title>Get started with minimal API for .NET 6</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/get-started-with-minimal-api-for-net-6/ba-p/2940108</link> <description><BLOCKQUOTE> <P>TLDR; Using minimal API, you can create a Web API in just 4 lines of code by leveraging new features like top-level statements and more.</P> </BLOCKQUOTE> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0why-minimal-api" target="_blank" rel="noopener" name="%C2%A0why-minimal-api"></A> Why Minimal API</H2> <P>There are many reasons for wanting to create an API in a few lines of code:</P> <UL> <LI><STRONG>Create a prototype</STRONG>. Sometimes you want a quick result, a prototype, something to discuss with your colleagues. Having something up and running quickly enables you to quickly do changes to it until you get what you want.</LI> <LI><STRONG>Progressive enhancement</STRONG>. You might not want all the "bells and whistles" to start with but you may need them over time. Minimal API makes it easy to gradually add what you need, when you need it.</LI> </UL> <H2> </H2> <H2> Learn more</H2> <P>Check out these LEARN modules on learning to use minimal API</P> <UL> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-api?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">Your first minimal API + Swagger</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-database?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with Entity Framework</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-spa?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with React</A></LI> </UL> <H2> </H2> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#how-is-it-different-from-a-normal-web-api" target="_blank" rel="noopener" name="how-is-it-different-from-a-normal-web-api"></A>How is it different from a normal Web API?</H2> <P>There are a few differences:</P> <UL> <LI><STRONG>Less files</STRONG>.<SPAN> </SPAN><EM>Startup.cs</EM><SPAN> </SPAN>isn't there anymore, only<SPAN> </SPAN><EM>Program.cs</EM><SPAN> </SPAN>remains.</LI> <LI><STRONG>Top level statements and implicit global usings</STRONG>. Because it's using top level statements,<SPAN> </SPAN><CODE>using</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>namespace</CODE><SPAN> </SPAN>are gone as well, so this code:</LI> </UL> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp"> using System; namespace Application { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>is now this code:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp"> Console.WriteLine("Hello World!");</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <UL> <LI><STRONG>Routes</STRONG><SPAN> </SPAN>Your routes aren't mapped to controller classes but rather setup with a<SPAN> </SPAN><CODE>Map[VERB]</CODE><SPAN> </SPAN>function, like you see above with<SPAN> </SPAN><CODE>MapGet()</CODE><SPAN> </SPAN>which takes a route and a function to invoke when said route is hit.</LI> </UL> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0your-first-api" target="_blank" rel="noopener" name="%C2%A0your-first-api"></A> Your first API</H2> <P>To get started with minimal API, you need to make sure that .NET 6 is installed and then you can scaffold an API via the command line, like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="bash">dotnet new web -o MyApi -f net6.0</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Once you run that, you get a folder<SPAN> </SPAN><EM>MyApi</EM><SPAN> </SPAN>with your API in it.</P> <P>What you get is the following code in<SPAN> </SPAN><EM>Program.cs</EM>:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.MapGet("/", () => "Hello World!"); app.Run();</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>To run it, type<SPAN> </SPAN><CODE>dotnet run</CODE>. A little difference here with the port is that it assumes random ports in a range rather than 5000/5001 that you may be used to. You can however configure the ports as needed. Learn more on this<SPAN> </SPAN><A href="https://docs.microsoft.com/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-6.0#working-with-ports" target="_blank" rel="noopener">docs page</A></P> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0explaining-the-parts" target="_blank" rel="noopener" name="%C2%A0explaining-the-parts"></A> Explaining the parts</H2> <P>Ok so you have a minimal API, what's going on with the code?</P> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0creating-a-builder" target="_blank" rel="noopener" name="%C2%A0creating-a-builder"></A> Creating a builder</H3> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args);</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>On the first line you create a<SPAN> </SPAN><CODE>builder</CODE><SPAN> </SPAN>instance.<SPAN> </SPAN><CODE>builder</CODE><SPAN> </SPAN>has a<SPAN> </SPAN><CODE>Services</CODE><SPAN> </SPAN>property on it, so you can add capabilities on it like Swagger Cors, Entity Framework and more. Here's an example where you set up Swagger capabilities (this needs install of the Swashbuckle NuGet to work though):</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "Todo API", Description = "Keep track of your tasks", Version = "v1" }); });</LI-CODE> <P> </P> <P> </P> <P> </P> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#creating-the-app-instance" target="_blank" rel="noopener" name="creating-the-app-instance"></A>Creating the app instance</H3> <P>Here's the next line:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var app = builder.Build();</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Here we create an<SPAN> </SPAN><CODE>app</CODE><SPAN> </SPAN>instance. Via the<SPAN> </SPAN><CODE>app</CODE><SPAN> </SPAN>instance, we can do things like:</P> <UL> <LI>Starting the app,<SPAN> </SPAN><CODE>app.Run()</CODE></LI> <LI>Configuring routes,<SPAN> </SPAN><CODE>app.MapGet()</CODE></LI> <LI>Configure middleware,<SPAN> </SPAN><CODE>app.UseSwagger()</CODE></LI> </UL> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#defining-the-routes" target="_blank" rel="noopener" name="defining-the-routes"></A>Defining the routes</H3> <P>With the following code, a route and route handler is configured:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">app.MapGet("/", () => "Hello World!");</LI-CODE> <P> </P> <P> </P> <P> </P> <P>The method<SPAN> </SPAN><CODE>MapGet()</CODE><SPAN> </SPAN>sets up a new route and takes the route "/" and a route handler, a function as the second argument<SPAN> </SPAN><CODE>() => "Hello World!"</CODE>.</P> <H3><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#starting-the-app" target="_blank" rel="noopener" name="starting-the-app"></A>Starting the app</H3> <P>To start the app, and have it serve requests, the last thing you do is call<SPAN> </SPAN><CODE>Run()</CODE><SPAN> </SPAN>on the<SPAN> </SPAN><CODE>app</CODE><SPAN> </SPAN>instance like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">app.Run();</LI-CODE> <P> </P> <P> </P> <P> </P> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0add-routes" target="_blank" rel="noopener" name="%C2%A0add-routes"></A> Add routes</H2> <P>To add an additional route, we can type like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">public record Pizza(int Id, string Name); app.MapGet("/pizza", () => new Pizza(1, "Margherita"));</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Now you have code that looks like so:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.MapGet("/pizza", () => new Pizza(1, "Margherita")); app.MapGet("/", () => "Hello World!"); public record Pizza(int Id, string Name); app.Run();</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Where you to run this code, with<SPAN> </SPAN><CODE>dotnet run</CODE><SPAN> </SPAN>and navigate to<SPAN> </SPAN><CODE>/pizza</CODE><SPAN> </SPAN>you would get a JSON response:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="json">{ "pizza" : { "id" : 1, "name" : "Margherita" } }</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#example-app" target="_blank" rel="noopener" name="example-app"></A>Example app</H2> <P>Let's take all our learnings so far and put that into an app that supports GET and POST and lets also show easily you can use query parameters:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseDeveloperExceptionPage(); } var pizzas = new List<Pizza>(){ new Pizza(1, "Margherita"), new Pizza(2, "Al Tonno"), new Pizza(3, "Pineapple"), new Pizza(4, "Meat meat meat") }; app.MapGet("/", () => "Hello World!"); app.MapGet("/pizzas/{id}", (int id) => pizzas.SingleOrDefault(pizzas => pizzas.Id == id)); app.MapGet("/pizzas", (int ? page, int ? pageSize) => { if(page.HasValue && pageSize.HasValue) { return pizzas.Skip((page.Value -1) * pageSize.Value).Take(pageSize.Value); } else { return pizzas; } }); app.MapPost("/pizza", (Pizza pizza) => pizzas.Add(pizza)); app.Run(); public record Pizza(int Id, string Name);</LI-CODE> <P> </P> <P> </P> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Run this app with<SPAN> </SPAN><CODE>dotnet run</CODE></P> <P>In your browser, try various things like:</P> <UL> <LI>"<A href="http://localhost:%7BPORT%7D/pizzas" target="_blank" rel="noopener">http://localhost:{PORT}/pizzas</A>", should give you all pizzas back</LI> <LI>"<A href="http://localhost:%7BPORT%7D/pizzas?page=1&pageSize=2" target="_blank" rel="noopener">http://localhost:{PORT}/pizzas?page=1&pageSize=2</A>", should give you the two first pizzas. See how the query parameters are working for you.</LI> <LI>"<A href="http://localhost:%7BPORT%7D/pizzas/2" target="_blank" rel="noopener">http://localhost:{PORT}/pizzas/2</A>", should give you the "Al Tonno" pizza back. Here you have the<SPAN> </SPAN><CODE>{id}</CODE><SPAN> </SPAN>matching the 2 and thereby it filters down on the one item that matches.</LI> </UL> <H2><A href="https://dev.to/dotnet/get-started-with-minimal-api-1il7#%C2%A0learn-more" target="_blank" rel="noopener" name="%C2%A0learn-more"></A></H2> <H2> Learn more</H2> <P>Check out these LEARN modules on learning to use minimal API</P> <UL> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-api?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">Your first minimal API + Swagger</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-database?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with Entity Framework</A></LI> <LI><A href="https://docs.microsoft.com/learn/modules/build-web-api-minimal-spa?wt.mc_id=academic-0000-chnoring" target="_blank" rel="noopener">minimal API with React</A></LI> </UL> <P> </P></description> <pubDate>Mon, 08 Nov 2021 21:16:22 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/get-started-with-minimal-api-for-net-6/ba-p/2940108</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-11-08T21:16:22Z</dc:date> ... </item> <item> <title>Azure Logic Apps Announcement - Fall 2021 Release</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-fall-2021-release/ba-p/2911923</link> <description><P>Azure Logic Apps team is happy to announce the Fall 2021 release at the Ignite conference.</P> <P> </P> <P><SPAN><STRONG>Why it matters:</STRONG> Logic Apps is a key part of Azure Integration Services, at the //build conference this year, we announced the General Availability of Logic Apps Standard, a flexible, containerized, modern cloud-scale workflow engine you can run anywhere. Over the past 6 months, we've seen accelerate growth of the service. Equipped with feedbacks, recommendations, and business scenarios from customers like you, the team have worked extremely hard to deliver this release, addressing many of the top asks.</SPAN></P> <P> </P> <P><SPAN><STRONG>The big picture:</STRONG> Microsoft has been named as a Leader in <A href="https://azure.microsoft.com/blog/microsoft-named-as-a-leader-in-2021-gartner-magic-quadrant-for-enterprise-integration-platform-as-a-service/" target="_self">2021 Gartner® Magic Quadrant™ for Enterprise Integration Platform as a Service</A>, this marked the 4th year of Microsoft as a leader in terms of both ability to execute and completeness of vision. In addition, Microsoft have also been named as a Leader in t</SPAN><SPAN>he Forrester Wave™ on Enterprise integration platform as a service (iPaaS).</SPAN></P> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Gartner MQ on enterprise iPaaS" style="width: 694px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322848i472DCEE753BEDEEF/image-size/large?v=v2&px=999" role="button" title="gartner.png" alt="Gartner MQ on enterprise iPaaS" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Gartner MQ on enterprise iPaaS</span></span></SPAN></P> <P><SPAN><STRONG>Go deeper:</STRONG> the Fall 2021 release of Logic Apps is feature-packed, most of them will be available by the time you're reading this blob post, with the rest being rolled out and becoming available throughout the week of Ignite.</SPAN></P> <UL> <LI><SPAN><STRONG>SQL as storage provider</STRONG> is now in public preview. Storage is a key piece of the Logic Apps service, it is where the runtime stores the states of the workflows as they are running, enabling Logic Apps to be highly resilient and suitable for mission-critical workloads. With the new runtime, it is possible to create and run Logic Apps Standard anywhere: locally, on premises, multi-cloud thanks to Azure Arc. The SQL as a storage provider feature allows you to use a SQL database as storage for Logic Apps, which can be co-located with wherever the Logic Apps runtime is. This removes the dependency on Azure Storage, and affords you low latency, more predictable cost, and the ability to run in a fully disconnected manner if needed. <A href="https://docs.microsoft.com/azure/logic-apps/set-up-sql-db-storage-single-tenant-standard-workflows" target="_self">Learn more</A></SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="SQL as a storage provider" style="width: 587px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322855i9FA8A70EC08920A2/image-dimensions/587x352?v=v2" width="587" height="352" role="button" title="sql.png" alt="SQL as a storage provider" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">SQL as a storage provider</span></span></SPAN></P> <UL> <LI><SPAN><STRONG>Managed identity</STRONG> provides an identity for applications to use when connecting to resources that support Azure Active Directory authentication. In the Fall 2021 release, we added managed identity support for multi-auth capable Azure connectors such as SQL and Azure Blob in Logic Apps Consumption, as well as managed identity support for all Azure connectors in Logic Apps Standard. <A href="https://docs.microsoft.com/azure/logic-apps/create-managed-service-identity?tabs=consumption" target="_self">Learn more</A></SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Managed identity in Logic Apps" style="width: 520px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322856i23498FA227108529/image-dimensions/520x310?v=v2" width="520" height="310" role="button" title="msi.JPG" alt="Managed identity in Logic Apps" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Managed identity in Logic Apps</span></span></SPAN></P> <UL> <LI><SPAN><STRONG>Automation Tasks</STRONG> provides all Azure customers an easy way to automate their daily tasks, with just a few clicks, you can create tasks that automatically turns on and off the virtual machine on a schedule, purge old blobs in the storage account, or get a monthly usage report sent via email. In this release, the Logic Apps team have partnered with the Azure messaging team on building the experience for easy event replication. As a customer, you can choose from out-of-box templates to replicate the actual messages and events (rather than just metadata) between and across Service Bus queue, Service Bus topic, and Event Hub. Stateless workflows in Logic Apps standard are used to power this experience behind the scene, so you know the replication is highly performant. <A href="https://docs.microsoft.com/azure/logic-apps/create-replication-tasks-azure-resources" target="_self">Learn more</A></SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Automation tasks for event replication" style="width: 490px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322857i645436E732616345/image-dimensions/490x320?v=v2" width="490" height="320" role="button" title="task.JPG" alt="Automation tasks for event replication" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Automation tasks for event replication</span></span></SPAN></P> <P> </P> <P> </P> <UL> <LI><STRONG>Designer</STRONG> is the key to fast development, and we have made it even better. Following the major designer refresh that gave it a new look-and-feel, designer have also gotten a performance boost with the latest release. The lines rendered on the canvas is more intuitive to help you better understand the flow, especially for composite actions such as Condition and Switch. <A href="https://docs.microsoft.com/azure/logic-apps/designer-overview" target="_self">Learn more</A></LI> </UL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Line rendering on condition action" style="width: 599px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322859i530C962469BCC362/image-dimensions/599x306?v=v2" width="599" height="306" role="button" title="if.png" alt="Line rendering on condition action" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Line rendering on condition action</span></span></P> <UL> <LI><SPAN><STRONG>Consumption to Standard export</STRONG> is available for public preview. To aid customers with existing Logic Apps Consumption resources to upgrade to Standard, an export experience is available in the Azure portal. It will analyze the workflow and help you create corresponding resources in the Standard SKU, accelerating the adoption and unlock richer capabilities in Logic Apps Standard such as virtual network integration.</SPAN></LI> </UL> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Export Logic Apps Consumption to Standard" style="width: 559px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/322860i241205B932710279/image-dimensions/559x239?v=v2" width="559" height="239" role="button" title="export.JPG" alt="Export Logic Apps Consumption to Standard" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Export Logic Apps Consumption to Standard</span></span></SPAN></P> <UL> <LI><SPAN><STRONG>Connectors</STRONG>, a key value proposition for Logic Apps is continuously being improved, including SFTP with trigger support; <A href="https://docs.microsoft.com/azure/logic-apps/logic-apps-enterprise-integration-flatfile?tabs=standard" target="_self">flatfile encode/decode without Integration Account dependency in Logic Apps Standard</A>; <A href="https://docs.microsoft.com/azure/connectors/connectors-create-api-cosmos-db?tabs=standard" target="_self">Cosmos DB with trigger, CRUD, and bulk create support</A>; and lastly but certainly not least, peek-lock support is added to the built-in Service Bus connector to allow the implementation of advanced messaging patterns.</SPAN></LI> </UL> <P> </P> <P><STRONG>See for yourself:</STRONG> make sure to check out our <A href="https://myignite.microsoft.com/sessions/94dac4c6-9cf2-4426-b22e-0304e4aefbf1" target="_self">demo-packed session for Ignite</A> that also features how ASOS, a global leader in fashion and tech, is leveraging Logic Apps to deliver innovate solutions.</P> <P> </P> <P><SPAN><STRONG>What's next:</STRONG> if you are not already using Logic Apps, get started today with <A href="https://azure.microsoft.com/free/serverless/" target="_self">12 months of free services</A> a see how Logic Apps can help your business innovate faster. If you are an experienced Logic Apps customer, be sure to check out the new features, and as always, let us know your thoughts and feedback in the discussion section below.</SPAN></P> <P> </P> <P><SPAN>Derek Li, on behalf of the entire Logic Apps team</SPAN></P></description> <pubDate>Tue, 02 Nov 2021 18:24:11 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-fall-2021-release/ba-p/2911923</guid> <dc:creator>derek1ee</dc:creator> <dc:date>2021-11-02T18:24:11Z</dc:date> ... </item> <item> <title>Putting Tools in Your Hands to Improve Developer Productivity</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/putting-tools-in-your-hands-to-improve-developer-productivity/ba-p/2902225</link> <description><P><STRONG>By: <LI-USER uid="61063"></LI-USER>, Senior Product Marketing Manager and <LI-USER uid="1023930"></LI-USER>, Senior Product Marketing Manager </STRONG></P> <P> </P> <P>Developers are tasked with building the future. For organizations looking to usher in the next wave of digital transformation, it’s essential to create the right working environment to maximize developer innovation and well-being.</P> <P> </P> <P><A href="https://azure.microsoft.com/overview/developer-velocity/" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DeveloperVelocity.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/331504i48BAE046213C6976/image-size/large?v=v2&px=999" role="button" title="DeveloperVelocity.png" alt="DeveloperVelocity.png" /></span></A></P> <P> </P> <P>When we talk about improving <A href="https://azure.microsoft.com/overview/developer-velocity/" target="_blank" rel="noopener">Developer Velocity</A>, we’re referring to removing barriers and points of friction for developers so they can feel valued and achieve more.</P> <P> </P> <P>Organizations that boost Developer Velocity achieve better business results and innovate faster<A href="#_ftn1" target="_blank" rel="noopener" name="_ftnref1"><SPAN><SUP>[1]</SUP></SPAN></A>. Naturally, this has become a common goal among businesses, but unfortunately, many struggle to accurately measure Developer Velocity. Historically, firms have measured this by tracking activity-related metrics such as lines of code written per day or number of builds shipped in a quarter, but this approach fails to consider other key factors. It’s time for organizations to take a step back and see the bigger picture: Developer Velocity is about far more than just speed of delivery – it’s about the other factors that impact developers as well.</P> <P> </P> <P>For the past two years, Microsoft has been a strong proponent of Developer Velocity research, leading numerous projects and initiatives to understand what it takes for organizations to achieve it.</P> <P> </P> <P>In 2021, we took the next step in our journey by launching <A href="https://aka.ms/dvl" target="_blank" rel="noopener">Developer Velocity Lab</A> (DVL), a joint GitHub and Microsoft initiative which lives under Microsoft Research. DVL is led by Dr. Nicole Forsgren. Her industry-leading work in DevOps and software development metrics includes authoring the Shingo Publication Award-winning book Accelerate: The Science of Lean Software and DevOps.</P> <P> </P> <P>Today, we’re highlighting two pre-existing tools, and releasing one more, which will help you measure Developer Velocity more holistically in your own organization and make improvements to drive better business. Here are the three tools available to help teams and organizations improve their Developer Velocity:</P> <UL> <LI>The Developer Velocity Assessment, which organizations have been using to improve outcomes for almost two years.</LI> <LI>The SPACE framework, a flexible tool which can be used to help anyone think more deeply about measuring and improving development work and create their own metrics.</LI> <LI>The DevOps Workflow Generator, a new interactive tool that helps teams build their workflows so they can visualize and communicate their work, and later benchmark their performance.</LI> </UL> <P>Now, let’s explore how each tool can help you and your organization improve your Developer Velocity.</P> <P> </P> <H4><U>Measuring your organization’s Developer Velocity with the Assessment </U></H4> <P>One of our key goals has always been to provide you with tools to take action. In May 2020 we released the <A href="https://developervelocityassessment.com/" target="_blank" rel="noopener">Developer Velocity Assessment</A> to help organizations measure their current Developer Velocity. Since release, this tool has helped hundreds of companies of all sizes understand the impact of technology, working practices, and organization enablement on their development teams’ performance. This assessment helps organizations benchmark their Developer Velocity Index (DVI) scores relative to industry peers, as well as understand actionable guidance for how to drive better business outcomes for their organization. Understanding your current level of Developer Velocity enables you to begin making improvements. </P> <P> </P> <H4><U>Using </U><U>the SPACE framework to enhance Developer Velocity </U></H4> <P>Another tool to help you understand Developer Velocity in your own organization is the SPACE framework. True to DVL’s research roots, this framework is derived from DVL’s first publication, <A href="https://www.microsoft.com/research/publication/the-space-of-developer-productivity-theres-more-to-it-than-you-think/?cid=techcommblog/" target="_blank" rel="noopener"><EM>The SPACE of Developer Productivity: There's more to it than you think</EM></A>. The SPACE framework is an easily adaptable and flexible tool that helps organizations measure developer productivity in a more holistic manner.</P> <P> </P> <P>The five dimensions of the SPACE framework are: <STRONG>S:</STRONG> satisfaction and well-being, <STRONG>P:</STRONG> performance, <STRONG>A:</STRONG> activity, <STRONG>C:</STRONG> communication and collaboration, and <STRONG>E:</STRONG> efficiency and flow. We suggest measuring at least three of the five dimensions at any given time. Traditionally, developer activity was the main metric that organizations measured, without focusing as much on other key areas such as efficiency and flow.</P> <P> </P> <P>To see an example of the SPACE framework in action, check out how GitHub implemented it during <A href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener">The Good Day Project</A>. This two-week study invited GitHub developers to take a daily survey and share their engineering data to help identify which patterns and practices could help them have “good days.” The study yielded many interesting results, but some of the key findings were that interruptions are more disruptive than we think, too many meetings can get in the way of progress, and a short reflection period at the end of each day makes a big difference in how people feel in terms of meeting their goals.</P> <P> </P> <P>By implementing the SPACE framework, you can more holistically measure and understand Developer Velocity in your organization.</P> <P> </P> <H4><U>Visualize and improve your work with the DevOps Workflow Generator</U> <FONT color="#FF0000"><SUP>NEW!</SUP></FONT></H4> <P>Today, DVL is excited to announce the release of a new tool designed to help organizations measure and improve Developer Velocity: the <A href="https://aka.ms/devopsworkflow" target="_blank" rel="noopener">DevOps Workflow Generator</A>. By granting users an end-to-end view of their entire DevOps toolchain in one place, they can begin to surface, track, and understand the tooling and automation that supports their workflows. Without a clear – and shared – understanding of the workflow, improving it is not possible.</P> <P> </P> <BLOCKQUOTE> <P>At Microsoft Research, we’re very focused on helping developers around the world be happy and successful. As we better understand developers’ environments and what contributes to good days and good outcomes, we can design better tools and solutions to support them. We’re confident that the DevOps Workflow Generator will help users better understand the interplay between their various tools and enable them to have more productive conversations about optimizing their environments for improved efficiency and flow.</P> <P> </P> <P>- Dr. Nicole Forsgren, Partner Research Manager, Microsoft Research<SPAN style="font-family: inherit;"> </SPAN></P> </BLOCKQUOTE> <P><SPAN style="font-family: inherit;">Additionally, the anonymous, aggregated data collected from the DevOps Workflow Generator will help users understand up-to-date DevOps trends in their industry and/or geography. Once the tool has collected enough responses, DVL will release reports summarizing and revealing any prevalent DevOps trends</SPAN><A style="font-family: inherit; background-color: #ffffff;" href="#_ftn2" target="_blank" rel="noopener" name="_ftnref2"><SUP>[2]</SUP></A><SPAN style="font-family: inherit;">.</SPAN></P> <H4> </H4> <H4><U>Start your Developer Velocity journey today</U></H4> <P>As almost every company is now a software company, developers are at the core of the next wave of digital transformation. Our overarching goal is to help developers, teams, and organizations in a holistic way. This includes understanding the impact of technology, working practices and organizational enablement with the <A href="https://developervelocityassessment.com/" target="_blank" rel="noopener">Developer Velocity Assessment</A>; improving Developer Velocity across multiple dimensions of the <A href="https://aka.ms/SPACEpaper" target="_blank" rel="noopener">SPACE framework</A>; and even optimizing an organization’s DevOps toolchain through the use of the new <A href="https://aka.ms/devopsworkflow" target="_blank" rel="noopener">DevOps Workflow Generator</A>.</P> <P> </P> <P>We are delighted to see teams taking the next step on their Developer Velocity journeys towards unlocking better overall performance for their teams. To learn more about how some of our customers have improved business outcomes by tapping into the full power and creativity of their developers, read this report on <A href="https://azure.microsoft.com/en-us/resources/developer-velocity-lessons-from-digital-leaders/" target="_blank" rel="noopener">Developer Velocity: Lessons from Digital Leaders</A>. For an example of how GitHub implemented the SPACE framework and found real-world ways to improve developers’ days, check out GitHub’s <A href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener">Good Day report</A>.</P> <P> </P> <P>We believe the tools that Microsoft has released will help you and your organization improve your overall developer productivity and take the next step on your Developer Velocity journey.</P> <P> </P> <P>-----------------</P> <P><A href="#_ftnref1" target="_blank" rel="noopener" name="_ftn1"><SPAN><SUP>[1]</SUP></SPAN></A> <A href="https://azure.microsoft.com/resources/developer-velocity-lessons-from-digital-leaders/" target="_blank" rel="noopener">Developer Velocity: Lessons from Digital Leaders on Accelerating Business Performance through Software Excellence</A><SPAN>. Microsoft</SPAN>. March, 2021.</P> <P><A href="#_ftnref2" target="_blank" rel="noopener" name="_ftn2"><SPAN><SUP>[2]</SUP></SPAN></A> Final reports contingent on sufficient user participation.</P></description> <pubDate>Fri, 03 Dec 2021 18:50:38 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/putting-tools-in-your-hands-to-improve-developer-productivity/ba-p/2902225</guid> <dc:creator>AlisonYu</dc:creator> <dc:date>2021-12-03T18:50:38Z</dc:date> ... </item> <item> <title>Build secure apps on hardened dev environments with secure DevOps workflows</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-secure-apps-on-hardened-dev-environments-with-secure/ba-p/2893917</link> <description><P>The threat landscape has evolved over the past few years. Hackers are “shifting-left,” compromising upstream dependencies and engineering systems. These advanced attacks can impact entire development environments and software supply chains. One recent example occurred at a software vendor where an attacker targeted their developer workflow and software supply chain. After gaining access, the attacker uploaded a new image into thousands of builds that scanned their software supply chain—extracting secrets/credentials and widening the breach. This attack exemplifies how it’s no longer enough to just integrate security within the DevOps workflow, now you must harden and secure the workflow itself!</P> <P> </P> <P>So, how do you secure your upstream development environments?</P> <P> </P> <P>Kick it off by securing all developer machines and ensuring that your developers interact with non-trusted code in a secure manner. These steps help prevent malicious code from executing on developer machines and prevent hackers from using developer machines to act as a "jump-box" to further systems.</P> <P> </P> <P><A href="https://github.blog/2021-08-11-githubs-engineering-team-moved-codespaces/" target="_blank" rel="noopener">GitHub Codespaces</A> is a solution where your developers can securely interact with non-trusted code inside a sandbox environment. This cloud-powered development environment is available anywhere, on any device. Going further, it’s never been simpler to manage user permissions, store encrypted secrets in the right places, and implement GPG verification, so that commits are verified and made only by trusted users. And it’s fast too. Your team can go from zero to a functioning development environment in less than 10 seconds! Developers can spin off new Codespaces for parallel workstreams with no overhead. The solution is flexible and efficient while also providing security, compliance, and productivity enhancements for your organization.</P> <P> </P> <P>Along with developer machines, you’ll also need to secure your DevOps workflows. GitHub Actions helps your development teams easily create secure and automated workflows to build, test, package, release, and deploy apps to Azure or any other cloud. Azure provides a rich set of <A href="https://docs.microsoft.com/en-us/azure/developer/github/" target="_blank" rel="noopener">GitHub Actions integrations</A> that help you adopt an “everything as-code” DevOps model. In this model, compliance and security policies, build and release pipelines, etc. are written “as code,” enabling continuous improvement, better re-use, and greater transparency.</P> <P> </P> <P>It’s now common for hackers to target development environments, use discovered credentials to tamper with source code, and inject malicious code. Compounding this risk is the fact that your development teams must store their Azure service principal secrets in GitHub, which is both redundant and extremely risky. At <A href="https://myignite.microsoft.com/sessions/0c2b0490-1e47-4144-a569-20632ea53661?source=sessions" target="_blank" rel="noopener">Microsoft Ignite 2021</A><SPAN>,</SPAN> I’m excited to announce the preview of capabilities that enable developers to secure their deployments to Azure without requiring them to store long-term credentials in GitHub!</P> <P> </P> <P><STRONG>Remove credentials from developer environments with new Azure and GitHub integrations</STRONG></P> <P> </P> <P>Removing long-lived, Azure credentials from the development environment is a key strategy to reduce vulnerabilities that hackers can easily exploit. <SPAN>You can now deploy from your GitHub repo to Azure without creating, storing, or managing credentials for Azure AD applications. This uses the <A href="https://docs.microsoft.com/en-us/azure/active-directory/develop/workload-identity-federation" target="_blank" rel="noopener">Azure AD workload identity federation</A> capability which is now in public preview.</SPAN> The new capabilities alleviate the need for managing Azure service principal secrets and other long-lived cloud credentials in the GitHub secret store. With this integration, you can manage all cloud resources access securely in Azure. These capabilities also minimize the chances of service downtime due to expired credentials in GitHub.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samit_jhaveri_0-1635396060660.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/320727i67F17330D8D5E8B0/image-size/medium?v=v2&px=400" role="button" title="samit_jhaveri_0-1635396060660.png" alt="samit_jhaveri_0-1635396060660.png" /></span></P> <P> </P> <P><STRONG>Setting up OpenID Connect (OIDC) integration with Azure AD and GitHub Actions</STRONG></P> <P> </P> <P>To set up a secured GitHub Actions workflow using OpenID Connect integration with Azure AD you'll need:</P> <UL> <LI>An <A href="https://docs.microsoft.com/en-us/azure/active-directory/develop/" target="_blank" rel="noopener">Active Directory application</A> with a service principal that has contributor access to your subscription</LI> <LI>An Active Directory application configured with a federated credential to trust tokens issued by GitHub Actions to your GitHub repository. You can configure this in the Azure portal or with Microsoft Graph REST APIs</LI> <LI>A GitHub Actions workflow that requests GitHub issue tokens to the workflow and uses the azure/login@v1.4.0 action</LI> </UL> <P> </P> <P>To learn more about how to set up the integration, check out the <A href="https://aka.ms/OIDCAzureConnect" target="_blank" rel="noopener">documentation</A>.</P> <P> </P> <P><STRONG>Start building secure apps with GitHub and Azure</STRONG></P> <P> </P> <P>With deep integrations between GitHub and Azure, the <A href="https://azure.microsoft.com/en-us/solutions/devsecops/#overview" target="_blank" rel="noopener">Microsoft DevSecOps solution</A> is the complete software development solution that empowers your development teams to securely deliver cloud-native apps at DevOps speed! This solution enables you to write more secure code, respond quickly to vulnerabilities in your software supply chain, adopt best practices to harden your development environments, and foster collaboration between your developers and security teams.</P> <P> </P> <P>For more information on integrating security into your development lifecycle and hardening your DevOps workflows, check out our <A href="https://azure.microsoft.com/en-us/resources/6-tips-to-integrate-security-into-your-devops-practices/" target="_blank" rel="noopener">e-book</A>.</P> <P> </P></description> <pubDate>Tue, 02 Nov 2021 17:01:14 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-secure-apps-on-hardened-dev-environments-with-secure/ba-p/2893917</guid> <dc:creator>samit_jhaveri</dc:creator> <dc:date>2021-11-02T17:01:14Z</dc:date> ... </item> <item> <title>Plan your Microsoft Azure experience at Microsoft Ignite 2021</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite-2021/ba-p/2871583</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="bff948bd-7c60-41e2-ba58-6d3195441884.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319128iF4AFDC943B3C5026/image-size/large?v=v2&px=999" role="button" title="bff948bd-7c60-41e2-ba58-6d3195441884.png" alt="bff948bd-7c60-41e2-ba58-6d3195441884.png" /></span></P> <P> </P> <P><SPAN style="font-family: inherit;">We thought you might be interested to learn how you can plan your Microsoft and Azure experience at the upcoming Microsoft Ignite, our free digital event from November 2</SPAN><SUP style="font-family: inherit;">nd</SUP><SPAN style="font-family: inherit;"> – 4</SPAN><SUP style="font-family: inherit;">th</SUP><SPAN style="font-family: inherit;">, 2021.</SPAN></P> <P> </P> <P>During the event, you’ll discover the latest infrastructure, data and AI, application development, and security technologies that help you innovate anywhere from multicloud to edge, with Microsoft and Azure. You’ll also have a chance to speak with Microsoft experts and have the opportunity to continue your technical learning journey.</P> <P> </P> <P><A href="https://myignite.microsoft.com/home" target="_blank" rel="noopener">Register</A> to gain full access to all Microsoft Ignite has to offer – it’s easy and at no-cost to you.</P> <P> </P> <P><STRONG>Innovate Anywhere from Multicloud to Edge</STRONG></P> <P>We are excited to share how we’re delivering next-generation apps that run securely anywhere, are built with limitless data capabilities, and harness the power of AI. Join Scott Guthrie who will kick off with <STRONG><EM>Innovate Anywhere From Multicloud to Edge</EM></STRONG> along with these curated sessions you won’t want to miss:</P> <P> </P> <UL> <LI><STRONG><A href="https://myignite.microsoft.com/sessions/bd48b752-53b7-4e0e-b15c-4245a0e5ca50?source=sessions" target="_blank" rel="noopener">CTS03: Innovate Anywhere From Multicloud to Edge</A></STRONG></LI> <LI><A href="https://myignite.microsoft.com/sessions/27b4aeb9-ba89-403c-9cdf-4c629eb538c1?source=sessions" target="_blank" rel="noopener">BRK210: Secure, develop, and innovate in hybrid and multicloud with Microsoft Azure</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/56830052-a938-459e-8b5c-950ac6ac945d?source=sessions" target="_blank" rel="noopener">BRK211: Accelerate your cloud migration and modernization journey with Azure</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/0c2b0490-1e47-4144-a569-20632ea53661?source=sessions" target="_blank" rel="noopener">BRK212: Build secure apps with collaborative DevSecOps practices</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/64ad9ab4-31aa-410a-b5a0-792c9318eb90?source=sessions" target="_blank" rel="noopener">BRK213: Innovate with Cloud Native and Open Source on Azure</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/225eccb7-68f8-4d7b-9f67-4828b20b0a0f?source=sessions" target="_blank" rel="noopener">BRK214: Accelerate innovation with low-code applications using Power Platform</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/cb857345-7f4b-459f-b8bf-ab481a02be72?source=sessions" target="_blank" rel="noopener">BRK215: Accelerate time to insight with Azure Synapse</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/e3f5c4bc-5cc8-4e09-89a7-033da3a16433?source=sessions" target="_blank" rel="noopener">BRK216: Introducing new innovations in Azure AI</A></LI> <LI><A href="https://myignite.microsoft.com/sessions/88fb4748-e5a9-4fc2-8ddb-68366473a8bd?source=sessions" target="_blank" rel="noopener">BRK225: Transform your business with new innovations from edge to cloud across SQL Server and Azure SQL</A></LI> </UL> <P><STRONG>Follow #MSIgnite</STRONG></P> <P>Explore the latest event news, trending topics, and share your point of view in real time with your community. Join us on Twitter and LinkedIn by using #MSIgnite.</P> <P><A href="https://twitter.com/MS_Ignite" target="_blank" rel="noopener">Join the conversation ></A></P> <P> </P> <P><STRONG>Connection Zone</STRONG></P> <P>Only at #MSIgnite can you discover live, interactive content from Microsoft experts and your worldwide community.</P> <P><A href="https://myignite.microsoft.com/community-connect" target="_blank" rel="noopener">Get connected ></A></P> <P> </P> <P><STRONG>Learning Zone</STRONG></P> <P>Are you ready to accelerate your skills? Check out the Learning Zone at #MSIgnite and gain access to expert-guided sessions, become certified and take the Cloud Skills Challenge!</P> <P><A href="https://myignite.microsoft.com/learning-zone" target="_blank" rel="noopener">Learning Zone ></A></P> <P> </P> <P><STRONG>1:1 Consultation</STRONG></P> <P>Connect with a Microsoft engineer for questions related to architecting, implementing, or migrating a new solution by scheduling a 45-minute consultation.</P> <P><A href="https://myignite.microsoft.com/app-consult" target="_blank" rel="noopener">Schedule today ></A></P> <P> </P> <P><STRONG>Continue your learning journey</STRONG></P> <P>Discover more in-depth learning paths, training options, communities, and certification details across all Microsoft cloud solutions from one place.</P> <P><A href="https://aka.ms/learnatignite" target="_blank" rel="noopener">Start exploring ></A></P></description> <pubDate>Fri, 03 Dec 2021 18:52:02 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite-2021/ba-p/2871583</guid> <dc:creator>Jenn Jinhong</dc:creator> <dc:date>2021-12-03T18:52:02Z</dc:date> ... </item> <item> <title>How YOU create a script package for PowerShell gallery</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-create-a-script-package-for-powershell-gallery/ba-p/2870551</link> <description><HEADER id="main-title" class="crayons-article__header"> <DIV class="crayons-article__header__meta"> <DIV class="spec__tags"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-10-21 at 18.24.49.png" style="width: 787px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319019i7E14ACC2534DB0E5/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-10-21 at 18.24.49.png" alt="Screenshot 2021-10-21 at 18.24.49.png" /></span></DIV> </DIV> </HEADER> <DIV class="crayons-article__main"> <DIV id="article-body" class="crayons-article__body text-styles spec__body" data-article-id="871543"> <BLOCKQUOTE> <P>TLDR; this article covers how to build a package for the PowerShell gallery. This is a great way to share your scripts and modules with others. You want to help the community, right? Of course, you do :)</img></P> </BLOCKQUOTE> <P>Here's the steps we are about to take:</P> <UL> <LI><STRONG>Author script</STRONG>. First you need to create a script. In this case we are creating a script, but you can also create and upload a module to PowerShell gallery.</LI> <LI><STRONG>Document it</STRONG>. When you document your script, you do so, so<SPAN> </SPAN><CODE>Get-Help</CODE><SPAN> </SPAN>will work with it, this is highly recommended to do.</LI> <LI><STRONG>Prepare the package</STRONG>. To be able to upload your script, it needs a specific set of metadata, there are commands that will help you do that.</LI> <LI><STRONG>Sign up for PowerShell gallery</STRONG>. It's free to sign up for the gallery, but what you do need from it is an API key that will help you publish your package.</LI> <LI><STRONG>Publish</STRONG>. Using a command, you can push your package to the gallery. At this point you have bragging rights, and can show your friends :)</img></LI> <LI><STRONG>Save or install package</STRONG>. There are two different approaches you can use to consume a package, pick one.</LI> <LI>that's it :)</img></LI> </UL> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#author-script" target="_blank" rel="noopener" name="author-script"></A>Author script</H2> <P>To author a script, you need a file ending in<SPAN> </SPAN><CODE>.ps1</CODE>. Then you can use the PowerShell scripting language to add your commands and/or parameters.</P> <H2> </H2> <H2>Support Get-Help</H2> <P> To support the Get-Help command, you want to add some documentation that supports. Add for example the above meta information right on top of a function:</P> <LI-CODE lang="powershell"><# .SYNOPSIS Retrieves a planet .DESCRIPTION A command that retrieves a planet by id .PARAMETER Id Specifies the record you want back .INPUTS Id .OUTPUTS Object. .EXAMPLE PS> Get-Planet 1 #> Function Get-Planet { implementation... }</LI-CODE> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#document-it" target="_blank" rel="noopener" name="document-it"></A>Document it</H2> <P>Before you can upload your package, it needs some metadata. Without this metadata, your package will be rejected if you try to upload it. The metadata you need are information on things like version, author, company and a description. What you do is to feed that information into a command and out comes metadata + a unique GUID. At this point you need to add this metadata to the top of your script file.</P> <P>First, let's generate the metadata, or script info, as it's also referred to:</P> <OL> <LI>Generate script file info:</LI> </OL> <LI-CODE lang="powershell">$Parms = @{ Path = "./new.ps1" Version = "1.0" Author = "<email>" CompanyName = "<company>" Description = "Description" } New-ScriptFileInfo @Parms -PassThru</LI-CODE> <DIV class="highlight js-code-highlight"><CODE>this creates a file <EM>new.ps1</EM>.</CODE></DIV> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>You will also get meta information within the above file that looks something like so:</P> <LI-CODE lang="powershell"> <#PSScriptInfo .VERSION 1.0 .GUID <a unique GUID> .AUTHOR <email> .COMPANYNAME <company> .COPYRIGHT .TAGS the tags you want, comma separated .LICENSEURI https://mit-license.org .PROJECTURI link to for example github, if that's where you store the code .ICONURI .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES .PRIVATEDATA #> <# .DESCRIPTION Description #> # Here's the rest of your script</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> </DIV> </DIV> <P>Next, you want to perhaps fill in more info in the above meta information. You want to make sure you have a nice project description and tags for better visibility in the gallery. Next, you can verify that the script file and its script info validates.</P> <OL> <LI>Ensure all is good with script file info:</LI> </OL> <LI-CODE lang="powershell">Test-ScriptFileInfo -Path ./swapi.ps1</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>If everything is good, you will get a response similar to:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Version Name Author Description ------- ---- ------ ----------- 1.1 swapi author Description </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Great, you are ready for the next step, which is to publish your script to the gallery.</P> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#sign-up-for-the-powershell-gallery" target="_blank" rel="noopener" name="sign-up-for-the-powershell-gallery"></A>Sign up for the PowerShell Gallery</H2> <OL> <LI>Navigate to<SPAN> </SPAN><A href="https://www.powershellgallery.com/" target="_blank" rel="noopener">https://www.powershellgallery.com/</A><SPAN> </SPAN>and create a user.</LI> <LI>Select API keys menu option in top-right part of the page.</LI> <LI>Select "Create" and expand that section. Here you are faced with following fields:</LI> </OL> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_0-1634837022312.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319017i614C473B9811476D/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_0-1634837022312.png" alt="Chris_Noring_0-1634837022312.png" /></span> <OL> <LI>Fill in the following values:</LI> </OL> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_1-1634837022308.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319015i249CB82F836453E5/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_1-1634837022308.png" alt="Chris_Noring_1-1634837022308.png" /></span> <P> </P> <P>and select "Create". Now copy this API key, you will use it next.</P> <OL> <LI> <P>Publish your script using<SPAN> </SPAN><CODE>Publish-Script</CODE>:</P> </LI> </OL> <LI-CODE lang="powershell">Publish-Script -Path ./swapi.ps1 -NuGetApiKey <api key></LI-CODE> <P> </P> <P>That should take a few seconds, once done, you will be able to find your script.</P> <OL> <LI> <P>In PowerShell gallery, select "Manage Packages", expand "Published Packages", there's your package, give yourself a high-five, well done!! :)</img></P> </LI> </OL> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#consume-your-package" target="_blank" rel="noopener" name="consume-your-package"></A>Consume your package</H2> <P>To ensure everything work as intended, we will try to consume our package by downloading it from the PowerShell gallery and use it on our machine. We have two options on how to do that:</P> <UL> <LI><STRONG>Install the script</STRONG>. This will place the script in a specific downloads folder. We will still need to dot source it to use it.</LI> <LI><STRONG>Save the script</STRONG>. This will allow is to save the script to a destination on our machine that we decide, we still need to dot source to use it.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#a-install-script" target="_blank" rel="noopener" name="a-install-script"></A>a) Install script</H2> <OL> <LI> <P>Install from the PowerShell gallery:</P> </LI> </OL> <P><CODE></CODE></P> <LI-CODE lang="powershell">Install-Script -Name swapi -Force</LI-CODE> <P><CODE></CODE></P> <P><CODE> </CODE></P> <P>At this point, your script was installed on your machine, in a specific script folder. Next, you need to find that script folder, so you can dot source and use the content of the script.</P> <OL> <LI> <P>Verify install with<SPAN> </SPAN><CODE>Get-InstallledScript</CODE></P> </LI> </OL> <LI-CODE lang="powershell"> Get-InstalledScript</LI-CODE> <P class="lia-indent-padding-left-30px"><CODE></CODE></P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_2-1634837022309.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/319016i524BE983E7B12BAC/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_2-1634837022309.png" alt="Chris_Noring_2-1634837022309.png" /></span> <P> </P> <P>Great, you were able to get some information back on that the package (your script), was downloaded from PowerShell Gallery. Next, you need to find the install path of the script, to be able to use it.</P> <OL> <LI>To use the script, we first need to localize it with<SPAN> </SPAN><CODE>Get-InstalledScript</CODE>:</LI> </OL> <LI-CODE lang="powershell">(Get-InstalledScript -Name "swapi").InstalledLocation</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>it says something like so:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> /Users/<user>/.local/share/powershell/Scripts </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>dot source from there, use the response in the last step and<SPAN> </SPAN><EM>dot source</EM><SPAN> </SPAN>it like so:</LI> </OL> <LI-CODE lang="powershell">. /Users/<user./.local/share/powershell/Scripts/swapi.ps1</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Note the usage of "." and then the path as the second argument, that's what's meant by dot sourcing.</P> <P>At this point, your script is on your machine, the content of it is available to use.</P> <OL> <LI>To test it out, try running<SPAN> </SPAN><CODE>Get-Planet</CODE>, you elected to download the swapi</LI> </OL> <LI-CODE lang="powershell">Get-Planet 2</LI-CODE> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>This should give a JSON response.</P> <H2> </H2> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#b-save-script-and-then-dot-source" target="_blank" rel="noopener" name="b-save-script-and-then-dot-source"></A>b) Save script and then dot source</H2> <P>In this second approach, instead of installing the script, you would save it to disk at a location you specify. The big difference is that it doesn't end up in pre-determined install location, but rather in a place you choose.</P> <LI-CODE lang="powershell">Save-Script -Name swapi -Repository PSGallery –Path ./package-swapi -Force</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>creates a<SPAN> </SPAN><EM>package-swapi</EM><SPAN> </SPAN>subdirectory and places the script in there. So your file system looks like so:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> /package-swapi swapi.ps1 </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>dot source with:</LI> </OL> <DIV class="highlight js-code-highlight"> <PRE class="highlight powershell"><CODE> <SPAN class="n">cd</SPAN> <SPAN class="nx">package-swapi</SPAN> <SPAN class="o">.</SPAN> <SPAN class="n">swapi.ps1</SPAN> </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <OL> <LI>To test it out, try running<SPAN> </SPAN><CODE>Get-Planet</CODE>, you elected to download the swapi package.</LI> </OL> <DIV class="highlight js-code-highlight"> <PRE class="highlight powershell"><CODE> <SPAN class="n">Get-Planet</SPAN> <SPAN class="nx">2</SPAN> </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>This should give a JSON response.</P> <H2><A href="https://dev.to/softchris/create-a-script-for-powershell-gallery-19m0#summary" target="_blank" rel="noopener" name="summary"></A>Summary</H2> <P>Congratulations, you've managed to create a package for PowerShell gallery, upload it to the gallery and managed to download and use said package.</P> <P>You've come a long way, now build your own packages, share them with the community and let me know.</P> <P>Thanks for reading :)</img></P> </DIV> </DIV></description> <pubDate>Thu, 21 Oct 2021 17:53:22 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/how-you-create-a-script-package-for-powershell-gallery/ba-p/2870551</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-10-21T17:53:22Z</dc:date> ... </item> <item> <title>Test your PowerShell code with Pester</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/test-your-powershell-code-with-pester/ba-p/2835759</link> <description><BLOCKQUOTE> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-10-11 at 22.28.42.png" style="width: 619px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316615i9632507F0A19192E/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-10-11 at 22.28.42.png" alt="Screenshot 2021-10-11 at 22.28.42.png" /></span></P> <P>TLDR; this article covers the testing framework Pester that you use to test your PowerShell scripts.</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#why-test" target="_blank" rel="noopener" name="why-test"></A>Why test</H2> <P>The reason you want to have tests are many:</P> <UL> <LI><STRONG>Correctness</STRONG>. Ensure your code works as as intended for certain scenarios.</LI> <LI><STRONG>Confidence</STRONG>. When you have a lot of tests covering your code it creates a level of confidence. With this confidence you start daring to change this, if you for example would need to refactor code and ensure it still works after those changes.</LI> <LI><STRONG>Architecture</STRONG>. Another reason for having tests is that it drives architecture. If you create tests around what you do, you ensure you build your code in a way that makes it testable. That,<SPAN> </SPAN><EM>drives the architecture</EM>.</LI> </UL> <P>There are many other reasons for wanting to have tests but the three above are quite compelling.</P> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#what-is-pester" target="_blank" rel="noopener" name="what-is-pester"></A>What is Pester</H2> <P>Pester is a test framework meant for PowerShell and is a module you can install. It has several features:</P> <UL> <LI><STRONG>Assertions</STRONG>. Pester comes with diverse ways of asserting conditions that will determine if your tests should fail or not.</LI> <LI><STRONG>Able to run tests</STRONG>. You can run tests with Pester, both a single test with a single piece of input as well as testing many different inputs at once.</LI> <LI><STRONG>Can group your tests in test suites</STRONG>. When you start having quite a few tests, you want a way to group those tests into larger logical groups, that's what test suites are.</LI> <LI><STRONG>Ability to mock calls</STRONG>. In you tests you might have calls to commands that carry out side-effects, like accessing a data store or creating a file for example. When you want your tests to focus on the behavior on the tests, mocking is a good idea.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#install" target="_blank" rel="noopener" name="install"></A>Install</H2> <P>To install Pester, you run the below command.</P> <P> </P> <LI-CODE lang="powershell">Install-Module -Name Pester -Force</LI-CODE> <P> </P> <P>Once it's installed, you can start authoring your tests.</P> <P>From install page:</P> <BLOCKQUOTE> <P>Pester runs on Windows, Linux, MacOS and anywhere else thanks to PowerShell. It is compatible with Windows PowerShell 3, 4, 5, 6 and 7.<BR />Pester 3 comes pre-installed with Windows 10</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#our-first-test" target="_blank" rel="noopener" name="our-first-test"></A>Our first test</H2> <P>For our first test, we will learn how to write a test as well as running it.</P> <OL> <LI>To create our first test, create a file<SPAN> </SPAN><EM>A-Test.ps1</EM></LI> <LI>Add the following code:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Describe "A suite" { It "my first test" { $Value = "Value" $Value | Should -Be "Value" } }</LI-CODE> <P> </P> <P> </P> <P>The test above, have a<SPAN> </SPAN><CODE>Describe</CODE><SPAN> </SPAN>construct which is the declaration of a suite, and a string argument, giving the suite a name. Within the suite there's a test definition<SPAN> </SPAN><CODE>It</CODE>, which also has a string argument that represents the name of the test. Within the test, there's test itself where the code is set up:</P> <P> </P> <LI-CODE lang="powershell">$Value = "Value"</LI-CODE> <P> </P> <P>and then it's asserted upon</P> <P> </P> <LI-CODE lang="powershell"> $Value | Should -Be "Value"</LI-CODE> <P> </P> <P>Note the use of the<SPAN> </SPAN><CODE>Should -Be</CODE>, which determines equality between<SPAN> </SPAN><CODE>$Value</CODE><SPAN> </SPAN>and "Value".</P> <OL> <LI>To run the test, call<SPAN> </SPAN><CODE>Invoke-Pester</CODE><SPAN> </SPAN>(./ for the path in Linux ans macOS and .\ for Windows):</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Invoke-Pester ./A-Test.ps1 </LI-CODE></DIV> </DIV> </DIV> <P>The outcome of running the test is:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Starting discovery in 1 files. Discovery found 1 tests in 6ms. Running tests. [+] /<path>/A-Test.ps1 42ms (11ms|26ms) Tests completed in 44ms Tests Passed: 1, Failed: 0, Skipped: 0 NotRun: 0 </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#a-more-real-looking-test" target="_blank" rel="noopener" name="a-more-real-looking-test"></A>A more real looking test</H2> <P>The first test was great in that it let us understand the mechanics of testing and concepts like a suite, a test, and an assertion like<SPAN> </SPAN><CODE>Should -Be</CODE>. A more real looking test would test code in a script file that's not in our test file. Here's the steps we will take next:</P> <UL> <LI>Create a script file with our production code.</LI> <LI><EM>Dot source</EM><SPAN> </SPAN>said script file.</LI> <LI>Create a test and run it.</LI> </UL> <H3> </H3> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#create-production-code" target="_blank" rel="noopener" name="create-production-code"></A>Create production code</H3> <P>You will have code that you want to test but let's create this script file for the sake of demonstration.</P> <OL> <LI>Create a file<SPAN> </SPAN><EM>Get-Tomato.ps1</EM></LI> <LI>Add the following code:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Function Get-Tomato() { new-object psobject -property @{ Name = "Tomato" } }</LI-CODE></DIV> </DIV> </DIV> <P>This code will create a custom object for each time the<SPAN> </SPAN><CODE>Get-Tomato()</CODE><SPAN> </SPAN>function is invoked.</P> <OL> <LI>Let's<SPAN> </SPAN><EM>dot source</EM><SPAN> </SPAN>it next so are session knows about it:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> . ./Get-Tomato.ps1</LI-CODE> <P> </P> <OL> <LI>Verify that your function has been picked up by running:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Get-Tomato</LI-CODE> <P> </P> <P>you should see the following in the console:</P> <P> </P> <LI-CODE lang="bash">Name ---- Tomato</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#create-the-test" target="_blank" rel="noopener" name="create-the-test"></A>Create the test</H3> <P>Now that we have our production code, let's author the test next.</P> <OL> <LI>Create a file<SPAN> </SPAN><EM>Get-Tomato.Tests.ps1</EM><SPAN> </SPAN>and give it the following code</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Describe "Tomatoes" { It "Get Tomato" { $tomato = Get-Tomato $tomato.Name | Should -Be "Tomato" } }</LI-CODE> <P> </P> <OL> <LI>Run the test with<SPAN> </SPAN><CODE>Invoke-Pester</CODE>:</LI> </OL> <P> </P> <LI-CODE lang="powershell">Invoke-Pester ./Get-Tomato.Tests.ps1</LI-CODE> <P> </P> <P>you should see the following output:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Invoke-Pester ./Get-Tomato.Tests.ps1 Starting discovery in 1 files. Discovery found 1 tests in 6ms. Running tests. [+] /<path>/Get-Tomato.Tests.ps1 66ms (9ms|52ms) Tests completed in 68ms Tests Passed: 1, Failed: 0, Skipped: 0 NotRun: 0</CODE></PRE> </DIV> <P>Great, you ran a test on a more real looking code.</P> <H2> </H2> <H2><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#working-with-side-effects" target="_blank" rel="noopener" name="working-with-side-effects"></A>Working with side effects</H2> <P>You will have code that you write that eventually performs side effects, like accessing a network resource or create a file. Let's look at such a case and how Pester handles it. The short answer is that you can use mocks, a construct that's executed instead of the actual command. All you need to do is to focus that the<SPAN> </SPAN><EM>right behavior</EM><SPAN> </SPAN>happens.</P> <H3> </H3> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#update-production-code" target="_blank" rel="noopener" name="update-production-code"></A>Update production code</H3> <P>So, in this case, imagine that our production code now will have more function<SPAN> </SPAN><CODE>Save-Tomato</CODE><SPAN> </SPAN>that saves an object to a file.</P> <OL> <LI>Update the <EM>Get-Tomato.ps1 </EM>file with this code:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Function Save-Tomato() { Param( [string] $Name ) New-Item -ItemType File -Path ./Tomato.txt -Value $Name -Force }</LI-CODE> <P> </P> <OL> <LI><EM>Dot source</EM><SPAN> </SPAN>the code to ensure it's being picked up:</LI> </OL> <P> </P> <LI-CODE lang="powershell">. /Get-Tomato.ps1</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <H3><A href="https://dev.to/azure/test-your-powershell-code-with-pester-4hlc#create-a-test" target="_blank" rel="noopener" name="create-a-test"></A>Create a test</H3> <P>Ok, so you have added<SPAN> </SPAN><CODE>Save-Tomato()</CODE><SPAN> </SPAN>to your script file. Now for a test. Your code is calling<SPAN> </SPAN><CODE>New-Item</CODE>, which creates a new file. As part of testing, you don't want it to create a file each time the test is being run. More likely, you just want to see the test does what it's supposed to, i.e. calling the correct command/s. So, to solve this issue, we can mock, replace the current implementation of<SPAN> </SPAN><CODE>New-Item</CODE><SPAN> </SPAN>with our own.</P> <UL> <LI> <P><STRONG>To mock</STRONG>, we first need to replace the actual implementation like so:</P> </LI> </UL> <P> </P> <LI-CODE lang="powershell">Mock -CommandName New-Item -MockWith {}</LI-CODE> <P> </P> <UL> <LI><STRONG>Call the command</STRONG>. At this point, you need to call the command like you would usually do. In your case, it means that you call<SPAN> </SPAN><CODE>Save-Tomato()</CODE>:</LI> </UL> <P> </P> <LI-CODE lang="powershell">Save-Tomato # this should call New-Item</LI-CODE> <P> </P> <UL> <LI><STRONG>Verify</STRONG>. The last part of the mocking process is to verify that you mock has been called</LI> </UL> <P class="lia-indent-padding-left-30px">The command<SPAN> </SPAN><CODE>Should -Invoke</CODE>, allows you to specify what command it should have called, like so:</P> <P> </P> <LI-CODE lang="powershell">Should -Invoke -CommandName New-Item -Times 1 -Exactly</LI-CODE> <P> </P> <P class="lia-indent-padding-left-30px">The above code verifies<SPAN> </SPAN><CODE>New-Item</CODE><SPAN> </SPAN>is called exactly one time.</P> <UL> <LI>Let's put it all together as a test:</LI> </UL> <P> </P> <LI-CODE lang="powershell">It "Save tomato" { Mock -CommandName New-Item -MockWith {} Save-Tomato "my tomato" Should -Invoke -CommandName New-Item -Times 1 -Exactly }</LI-CODE> <P> </P> <OL> <LI>Remove<SPAN> </SPAN><EM>Tomato.txt</EM><SPAN> </SPAN>and then run the test with<SPAN> </SPAN><CODE>Invoke-Pester</CODE><SPAN> </SPAN>like so:</LI> </OL> <P> </P> <LI-CODE lang="powershell"> Invoke-Pester ./Get-Tomato.Tests.ps1</LI-CODE> <P> </P> <P>At this point your tests should run successfully like so:</P> <DIV class="highlight js-code-highlight"> <PRE class="highlight plaintext"><CODE> Starting discovery in 1 files. Discovery found 2 tests in 8ms. Running tests. [+] /Users/chnoring/Documents/dev/projects/powershell-projects/articles/Get-Tomato.Tests.ps1 78ms (34ms|37ms) Tests completed in 80ms Tests Passed: 2, Failed: 0, Skipped: 0 NotRun: 0 </CODE></PRE> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"> </DIV> </DIV> </DIV> <P>Also, note how<SPAN> </SPAN><EM>Tomato.txt</EM><SPAN> </SPAN>isn't created, because you are mocking the call to<SPAN> </SPAN><CODE>New-Item</CODE>, success.</P> <P>Congrats, you've learned how to install test framework Pester, on top of that, you've learned to author your first tests and even learned how to mock the call to actual commands. To learn more, have a look at Pesters GitHub page:</P> <BLOCKQUOTE> <UL> <LI><A href="https://github.com/pester/Pester" target="_blank" rel="noopener">Pester GH page</A></LI> <LI><A title="Pester VS Code extension" href="https://marketplace.visualstudio.com/items?itemName=pspester.pester-test" target="_self">Check out the Pester extension for VS Code</A> , thanks JGrote</LI> </UL> </BLOCKQUOTE></description> <pubDate>Tue, 12 Oct 2021 17:59:12 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/test-your-powershell-code-with-pester/ba-p/2835759</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-10-12T17:59:12Z</dc:date> ... </item> <item> <title>Building a Web Report in PowerShell, use the -Force Luke</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-web-report-in-powershell-use-the-force-luke/ba-p/2824832</link> <description><BLOCKQUOTE> <P>TLDR; The idea of this article is to show how to build a web report. I will show the usage of several commands that you can connect that does all the heavy lifting for you</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#the-scenario-create-a-report-from-some-remote-data" target="_blank" rel="noopener" name="the-scenario-create-a-report-from-some-remote-data"></A>The scenario - create a report from some remote data</H2> <P>Ok, here you are, you are looking to read data from one place and present that as a web report. The data is remote, you need to fetch it somehow, you also probably need to think about how to convert the incoming data and lastly create that web report. If you are a developer, you probably think that oh ok, this is probably a few moving parts, 10-20 lines of code. But you've heard of PowerShell, it's supposed to be powerful, do a lot of heavy lifting, so why not give it a spin.</P> <H2> </H2> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#the-steps-we-will-take" target="_blank" rel="noopener" name="the-steps-we-will-take"></A>The steps we will take</H2> <P>To achieve our task, we need to plan it out. Carry it out sequentially, and who knows, maybe this is something we can reuse? So what steps:</P> <OL> <LI><STRONG>Fetch the data</STRONG>. Need to grab the data somehow</LI> <LI><STRONG>Convert</STRONG>. Lets assume this data comes in some type of format and we most likely need to convert it some other form.</LI> <LI><STRONG>Present</STRONG>. So we fetched the data, massaged it into a suitable format, now what? Now, we want to present it as a web report, HTML, CSS etc.</LI> </OL> <H2> </H2> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#getting-to-work" target="_blank" rel="noopener" name="getting-to-work"></A>Getting to work</H2> <P>We have a game plan. Now let's see if we can find the commands we need. A good starting point is the<SPAN> </SPAN><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/?view=powershell-7.1" target="_blank" rel="noopener">Microsoft.PowerShell.Utility section</A>. In this section, there are tons of commands that does a lot of heavy lifting for you.</P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#grabbing-the-data" target="_blank" rel="noopener" name="grabbing-the-data"></A>Grabbing the data</H3> <P>First things first, we need to grab some data remotely, so what's our options?</P> <UL> <LI><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-webrequest?view=powershell-7.1" target="_blank" rel="noopener">Invoke-WebRequest</A><SPAN> </SPAN>this seems to let us call a URL, send a body, credentials etc, seems promising.</LI> <LI><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-7.1" target="_blank" rel="noopener">Invoke-RestMethod</A>. What about this one, how is it different? This sentence right here:</LI> </UL> <BLOCKQUOTE> <P>PowerShell formats the response based to the data type. For an RSS or ATOM feed, PowerShell returns the Item or Entry XML nodes. For JavaScript Object Notation (JSON) or XML, PowerShell converts, or deserializes, the content into [PSCustomObject] objects.</P> </BLOCKQUOTE> <P>It takes a JSON response and turns that into a PSCustomObject, nice. Well let's see with our other commands before we make a decision.</P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#presenting-the-data" target="_blank" rel="noopener" name="presenting-the-data"></A>Presenting the data</H3> <P>This is the last thing we need to do but we need to understand if there's a command that helps us with report creation and most importantly, what input it takes. I think we found it:</P> <UL> <LI><A href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertto-html?view=powershell-7.1" target="_blank" rel="noopener">ConvertTo-Html</A><SPAN> </SPAN>Converts .NET objects into HTML that can be displayed in a Web browser.</LI> </UL> <P>Yea, that reminds us of something,<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE>. Why? Cause<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE><SPAN> </SPAN>produces custom objects, i.e .NET objects.</P> <P>How do we save the report to a file though, so we can store that somewhere and let it be hosted by a web server? Oh, here's an example, pipe it to<SPAN> </SPAN><CODE>Out-File</CODE>, like so<SPAN> </SPAN><CODE>ConvertTo-Html | Out-File aliases.htm</CODE></P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#overview-of-the-solution" target="_blank" rel="noopener" name="overview-of-the-solution"></A>Overview of the solution</H3> <P>So we have a theory on how to do this:</P> <OL> <LI>Call<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE>.</LI> <LI>Followed by<SPAN> </SPAN><CODE>ConvertTo-Html</CODE>.</LI> <LI>Followed by<SPAN> </SPAN><CODE>Out-File</CODE>.</LI> </OL> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#build-the-solution" target="_blank" rel="noopener" name="build-the-solution"></A>Build the solution</H3> <P>Seems almost too easy. Ah well, let's give it whirl. First things first, lets choose a data source, SWAPI, the Star Wars API, cause use the<SPAN> </SPAN><CODE>-Force</CODE>, am I right? :)</img></P> <OL> <LI>Start<SPAN> </SPAN><CODE>pwsh</CODE><SPAN> </SPAN>in the console.</LI> <LI>Create a file<SPAN> </SPAN><EM>web-report.ps1</EM></LI> <LI>Add the following code:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Invoke-RestMethod -URI https://swapi.dev/api/people/1/ | ConvertTo-Html | Out-File report.htm</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Run<SPAN> </SPAN><CODE>./web-report.ps1</CODE><SPAN> </SPAN>(or<SPAN> </SPAN><CODE>.\web-report.ps1</CODE><SPAN> </SPAN>for Windows folks)</LI> </OL> <P>It created a<SPAN> </SPAN><EM>report.htm</EM><SPAN> </SPAN>file for us. Ok, let's have a look:</P> <P> </P> <LI-CODE lang="markup"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup> <tr><th>name</th><th>height</th><th>mass</th><th>hair_color</th><th>skin_color</th><th>eye_color</th><th>birth_year</th><th>gender</th><th>homeworld</th><th>films</th><th>species</th><th>vehicles</th><th>starships</th><th>created</th><th>edited</th><th>url</th></tr> <tr><td>Luke Skywalker</td><td>172</td><td>77</td><td>blond</td><td>fair</td><td>blue</td><td>19BBY</td><td>male</td><td>https://swapi.dev/api/planets/1/</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>09/12/2014 13:50:51</td><td>20/12/2014 21:17:56</td><td>https://swapi.dev/api/people/1/</td></tr> </table> </body></html></LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <OL> <LI>Show this file in a browser with<SPAN> </SPAN><CODE>Invoke_Item</CODE>:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Invoke-Item ./report.htm</LI-CODE></DIV> </DIV> </DIV> <P>This should start up a browser and you should see something like:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_0-1633648317946.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316080iADB1C70B0BDCD1B3/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_0-1633648317946.png" alt="Chris_Noring_0-1633648317946.png" /></span></P> <P> </P> <P>Ok, you could be done here, or we can make it more flexible. We don't like hardcoded values, right? RIGHT?</P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#making-it-flexible" target="_blank" rel="noopener" name="making-it-flexible"></A>Making it flexible</H3> <P>I thought so, now, let's add some parameters for, URL, and report name.</P> <OL> <LI>Add the following code to the top part of our script<SPAN> </SPAN><EM>web-report.ps1</EM>:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Param( [String] $URL = "https://swapi.dev/api/people/1/", [String] $Report = "report.htm" )</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Lets invoke it again, this time with a new URL "<A href="https://swapi.dev/api/people/2/%22:" target="_blank" rel="noopener">https://swapi.dev/api/people/2/":</A></LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> ./web-report.ps1 -URL https://swapi.dev/api/people/2/</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Lets check the response in<SPAN> </SPAN><EM>report.htm</EM>. :</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup> <tr><th>name</th><th>height</th><th>mass</th><th>hair_color</th><th>skin_color</th><th>eye_color</th><th>birth_year</th><th>gender</th><th>homeworld</th><th>films</th><th>species</th><th>vehicles</th><th>starships</th><th>created</th><th>edited</th><th>url</th></tr> <tr><td>C-3PO</td><td>167</td><td>75</td><td>n/a</td><td>gold</td><td>yellow</td><td>112BBY</td><td>n/a</td><td>https://swapi.dev/api/planets/1/</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>System.Object[]</td><td>10/12/2014 15:10:51</td><td>20/12/2014 21:17:50</td><td>https://swapi.dev/api/people/2/</td></tr> </table> </body></html></LI-CODE></DIV> </DIV> </DIV> <P>This time we have<SPAN> </SPAN><CODE>C-3PO</CODE>, yup, definitely not Luke, it seems to be working :)</img></P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#improve-the-response" target="_blank" rel="noopener" name="improve-the-response"></A>Improve the response</H3> <P>So, so far we had a ton of columns coming back, maybe we just need a few fields from the response, like<SPAN> </SPAN><CODE>name</CODE>,<SPAN> </SPAN><CODE>planet</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>height</CODE>. Yea let's do that, and justt pick what we need from the response:</P> <OL> <LI>Let's add<SPAN> </SPAN><CODE>Select-Object</CODE><SPAN> </SPAN>like so:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> Select-Object name, age, planet |</LI-CODE></DIV> </DIV> </DIV> <P>with the full code looking like so:</P> <P> </P> <LI-CODE lang="powershell"> Param( [String] $URL = "https://swapi.dev/api/people/1/", [String] $Report = "report.htm" ) Invoke-RestMethod -URI $URL | ConvertTo-Html -Property name, height, homeworld | Out-File $Report</LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <OL> <LI>Let's invoke it again:</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="powershell"> ./web-report.ps1 -URL https://swapi.dev/api/people/1/</LI-CODE></DIV> </DIV> </DIV> <P>and our report now looks like:</P> <P> </P> <LI-CODE lang="markup"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>HTML TABLE</title> </head><body> <table> <colgroup><col/><col/><col/></colgroup> <tr><th>name</th><th>height</th><th>homeworld</th></tr> <tr><td>Luke Skywalker</td><td>172</td><td>https://swapi.dev/api/planets/1/</td></tr> </table> </body></html></LI-CODE> <P> </P> <DIV class="highlight js-code-highlight"> </DIV> <P>Much better :)</img> In fact, reading up a bit, we can just use -Property on<SPAN> </SPAN><CODE>ConvertTo-Html</CODE>, so we get:</P> <P> </P> <LI-CODE lang="powershell"> Invoke-RestMethod -URI $URL | ConvertTo-Html -Property name, height, homeworld | Out-File $Report</LI-CODE> <P> </P> <H3> </H3> <H3><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#make-it-pretty" target="_blank" rel="noopener" name="make-it-pretty"></A>Make it pretty</H3> <P>In all honesty, this report is bad, no colors, no nothing. Surely, we must be able to pass a CSS file to<SPAN> </SPAN><CODE>ConvertTo-Html</CODE>?</P> <P>Ah yes, looking through the docs there's the parameter<SPAN> </SPAN><CODE>-CssUri</CODE><SPAN> </SPAN>that takes a file path. Let's create a CSS file then.</P> <OL> <LI>Create<SPAN> </SPAN><CODE>report.css</CODE><SPAN> </SPAN>and add the following CSS</LI> </OL> <DIV class="highlight js-code-highlight"> <DIV class="highlight__panel js-actions-panel"> <DIV class="highlight__panel-action js-fullscreen-code-action"><LI-CODE lang="css"> table { border: solid 1px black; padding: 10px; border-collapse: collapse; } tr:nth-child(even) {background: #CCC} tr:nth-child(odd) {background: #FFF}</LI-CODE></DIV> </DIV> </DIV> <OL> <LI>Update the script to take<SPAN> </SPAN><CODE>-CssUri report.css</CODE><SPAN> </SPAN>on<SPAN> </SPAN><CODE>ConvertTo-Html</CODE></LI> <LI>Run it again, you should see this in the browser:</LI> </OL> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_1-1633648317947.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316081i40A896330A464C00/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_1-1633648317947.png" alt="Chris_Noring_1-1633648317947.png" /></span></P> <P> </P> <H2><A href="https://dev.to/azure/building-a-web-report-in-powershell-use-the-force-luke-58aj#summary" target="_blank" rel="noopener" name="summary"></A>Summary</H2> <P>In summary, we learned that we could use just a few commands,<SPAN> </SPAN><CODE>Invoke-RestMethod</CODE>,<SPAN> </SPAN><CODE>ConvertTo-Html</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>Out-File</CODE><SPAN> </SPAN>and boom, we've created ourselves a report.</P> <P>Full code:</P> <P> </P> <LI-CODE lang="powershell">Param( [String] $URL = "https://swapi.dev/api/people/1/", [String] $Report = "report.htm" ) Invoke-RestMethod -URI $URL | ConvertTo-Html -CssUri report.css -Title "Web report" -Property name, height, homeworld | Out-File $Report</LI-CODE> <P> </P> <P> </P></description> <pubDate>Thu, 07 Oct 2021 23:21:24 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-web-report-in-powershell-use-the-force-luke/ba-p/2824832</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-10-07T23:21:24Z</dc:date> ... </item> <item> <title>new module : Testing in C# using Visual Studio</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-testing-in-c-using-visual-studio/ba-p/2815085</link> <description><P>Testing is an important part of shipping and maintaining an application. </P> <P> </P> <P>To really make writing and running tests a part of your everyday workflow, it needs to be easy to author and run tests. Not only that, but it also needs to be fast. One of the great features of Visual Studio is its ability to support different test frameworks but also the tooling around authoring and running tests.</P> <P> </P> <P>In this module, you'll do the following:</P> <P> </P> <UL> <LI><STRONG>Write a test</STRONG>: Learn the basic parts of writing a test and use test projects that reference your product code.</LI> <LI><STRONG>Use Visual Studio to run and debug your tests</STRONG>: See the output of your tests and interact with a whole suite of tests.</LI> <LI><STRONG>Sharpen your test-writing skills</STRONG>: Use Fluent Assertions, data-driven tests, and mocking to expand your testing skills.</LI> </UL> <P>Link to module: <A title="C# testing in visual studio" href="https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-tools/1-introduction" target="_self">https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-tools/1-introduction</A> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vs-testing.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/315411i9F9ECBC3DFF58971/image-size/large?v=v2&px=999" role="button" title="vs-testing.png" alt="vs-testing.png" /></span></P></description> <pubDate>Tue, 05 Oct 2021 22:09:30 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-testing-in-c-using-visual-studio/ba-p/2815085</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-10-05T22:09:30Z</dc:date> ... </item> <item> <title>Working With Azure AD B2C Custom Policies</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/working-with-azure-ad-b2c-custom-policies/ba-p/2804056</link> <description><P>In this post, we will learn one of the two sign-in options provided by an Azure AD B2C tenant, and this is the custom policies (the other one is the user flows). With Custom Policies, we can build customized authentication flows based on our needs.</P> <P> </P> <H1>Getting Started</H1> <P>Before getting started make sure we have :</P> <UL> <LI>An Azure AD B2C tenant</LI> <LI>A registered web application</LI> <LI>The necessary policy keys and register the Identity Experience Framework Apps</LI> <LI>Download the <A href="https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/archive/refs/heads/master.zip" target="_blank" rel="noopener">Azure AD B2C policy starter pack</A> from GitHub, make the configurations and upload it to the tenant.</LI> </UL> <P> </P> <H1>Add signing/encryption keys</H1> <P>Sign in to the Azure Portal, search for the Azure AD B2C tenant, and click Open B2C Tenant.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="01.PNG" style="width: 222px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314401iBC7E2B763DBBA9DD/image-size/medium?v=v2&px=400" role="button" title="01.PNG" alt="01.PNG" /></span></P> <P>From the overview page, under the Policies section, select <STRONG>Identity Experience Framework</STRONG>.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="02.png" style="width: 292px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314402iCEE9B1E2D741A248/image-size/medium?v=v2&px=400" role="button" title="02.png" alt="02.png" /></span></P> <H2>Create the signing key</H2> <P> </P> <P>Select Manage - <STRONG>Policy Keys</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="03.png" style="width: 275px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314403i825C04E1C1000998/image-size/medium?v=v2&px=400" role="button" title="03.png" alt="03.png" /></span></P> <P> </P> <P>select <STRONG>Add</STRONG></P> <P> </P> <P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="04.png" style="width: 352px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314405i940D36D1DE9394BF/image-size/medium?v=v2&px=400" role="button" title="04.png" alt="04.png" /></span></STRONG></P> <P> </P> <UL> <LI>From the <STRONG>Options </STRONG>section, select from the drop-down menu <STRONG>Generate</STRONG>.</LI> <LI>In the filed <STRONG>Name</STRONG>, type <STRONG>TokenSigningKeyContainer</STRONG>.</LI> <LI>In the <STRONG>Key type</STRONG>, choose <STRONG>RSA</STRONG>.</LI> <LI>In the <STRONG>Key usage</STRONG>, select <STRONG>Signature</STRONG>.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="05.png" style="width: 310px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314406iD217A2F4AA8F8C91/image-size/medium?v=v2&px=400" role="button" title="05.png" alt="05.png" /></span></P> <P> </P> <P>Select <STRONG>Create</STRONG>.</P> <H2>Create the encryption key</H2> <UL> <LI>Select <STRONG>Policy Keys</STRONG> and then select <STRONG>Add</STRONG>.</LI> <LI>From the <STRONG>Options </STRONG>section, select from the drop-down menu <STRONG>Generate</STRONG>.</LI> <LI>In the filed <STRONG>Name</STRONG>, type <STRONG>TokenEncryptionKeyContainer</STRONG>.</LI> <LI>In the <STRONG>Key type</STRONG>, choose <STRONG>RSA</STRONG>.</LI> <LI>In the <STRONG>Key usage</STRONG>, select <STRONG>Encryption</STRONG>.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="06.png" style="width: 326px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314407iBC11DE4E2D2508D6/image-size/medium?v=v2&px=400" role="button" title="06.png" alt="06.png" /></span></P> <P> </P> <P> </P> <P>Select <STRONG>Create</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="07.png" style="width: 125px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316378i70D85B1D33B2AA62/image-size/medium?v=v2&px=400" role="button" title="07.png" alt="07.png" /></span> </P> <H1>Register the IdentityExperienceFramework application</H1> <P>At the next step, we have to register the <STRONG>IdentityExperienceFramework</STRONG> application. <SPAN data-preserver-spaces="true">From the left-hand side, blade select </SPAN><STRONG><SPAN data-preserver-spaces="true">Manage</SPAN></STRONG><SPAN data-preserver-spaces="true"> - </SPAN><STRONG><SPAN data-preserver-spaces="true">App registration</SPAN></STRONG><SPAN data-preserver-spaces="true">s and then select </SPAN><STRONG><SPAN data-preserver-spaces="true">+ New registration</SPAN></STRONG><SPAN data-preserver-spaces="true">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="08.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314408i5B2526FAE872CE1B/image-size/medium?v=v2&px=400" role="button" title="08.png" alt="08.png" /></span></P> <P> </P> <P>In the field name, type <STRONG>IdentityExperienceFramework</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="09.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314409i7C463CB90C0D543A/image-size/medium?v=v2&px=400" role="button" title="09.png" alt="09.png" /></span></P> <P>Under <STRONG>Supported account types</STRONG>, select <STRONG>Accounts in this organizational directory only</STRONG> (tenant name B2C only - Single tenant).</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="10.png" style="width: 619px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314413iC097F4AFD6CB21E8/image-size/large?v=v2&px=999" role="button" title="10.png" alt="10.png" /></span></P> <P> </P> <P>Under the <STRONG>Redirect URI </STRONG>section, select <STRONG>Web</STRONG>, and then type <STRONG><EM><A href="https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com" target="_blank" rel="noopener">https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com</A>.</EM></STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="11.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314414i70F400742BDE640D/image-size/large?v=v2&px=999" role="button" title="11.png" alt="11.png" /></span></P> <P> </P> <P>Under the <STRONG>Permissions</STRONG> section, select the <STRONG>Grant admin consent to openid and offline_access permissions</STRONG> check box.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="12.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314416iFA002D1A0EE3AA70/image-size/large?v=v2&px=999" role="button" title="12.png" alt="12.png" /></span></P> <P> </P> <P>And click <STRONG>Register</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="13.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314415i74447F40402E9C01/image-size/medium?v=v2&px=400" role="button" title="13.png" alt="13.png" /></span></P> <H1>Expose the API by adding a scope</H1> <P>In the left-hand side blade, under the <STRONG>Manage </STRONG>section, select <STRONG>Expose an API,</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="14.png" style="width: 167px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314418i1459D043F1761002/image-size/medium?v=v2&px=400" role="button" title="14.png" alt="14.png" /></span></P> <P> </P> <P>and then select <STRONG> +</STRONG> <STRONG>Add a scope</STRONG>,</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="15.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314419iA25DF94C6D865D6B/image-size/medium?v=v2&px=400" role="button" title="15.png" alt="15.png" /></span></P> <P> </P> <P><SPAN data-preserver-spaces="true">finally, select </SPAN><STRONG><SPAN data-preserver-spaces="true">Save and continue</SPAN></STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="16.png" style="width: 363px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314420i760E2DF9EF9DC87B/image-size/medium?v=v2&px=400" role="button" title="16.png" alt="16.png" /></span></P> <P> </P> <P>Now, we have to type the values as shown in the image below to create a scope that allows custom policy execution in the Azure AD B2C tenant:</P> <P> </P> <UL> <LI><STRONG>Scope name:</STRONG> user_impersonation</LI> <LI><STRONG>Admin consent display name:</STRONG> Access IdentityExperienceFramework</LI> <LI><STRONG>Admin consent description:</STRONG> Allow the application to access IdentityExperienceFramework on behalf of the signed-in user.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="17.png" style="width: 500px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314421iE1504C66C6243DE5/image-size/large?v=v2&px=999" role="button" title="17.png" alt="17.png" /></span></P> <P> </P> <P>Click <STRONG>Add scope</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="18.png" style="width: 302px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314422iF5A37A85D1E473EF/image-size/medium?v=v2&px=400" role="button" title="18.png" alt="18.png" /></span></P> <H1>Register the ProxyIdentityExperienceFramework application</H1> <P><SPAN data-preserver-spaces="true">Go to <STRONG>Manage</STRONG> - <STRONG>App registrations</STRONG>, and then click </SPAN><STRONG><SPAN data-preserver-spaces="true">+ New registration</SPAN></STRONG><SPAN data-preserver-spaces="true">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="19.png" style="width: 389px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314425iA9E5D0AD1FFD6201/image-size/medium?v=v2&px=400" role="button" title="19.png" alt="19.png" /></span></P> <P> </P> <P>In the Name field, type <STRONG>ProxyIdentityExperienceFramework</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="20.png" style="width: 410px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314426i068D45165D4FE912/image-size/large?v=v2&px=999" role="button" title="20.png" alt="20.png" /></span></P> <P> </P> <P>Under <STRONG>Supported account types</STRONG>, select<STRONG> Accounts in this organizational directory only</STRONG>, radio button.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="21.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314427i2A897D9236A16932/image-size/large?v=v2&px=999" role="button" title="21.png" alt="21.png" /></span></P> <P> </P> <P>Under the <STRONG>Redirect URI </STRONG>section, use the drop-down to select <STRONG>Public client/native (mobile & desktop), </STRONG>and for <STRONG>Redirect URI</STRONG>, type <STRONG>myapp://auth</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="22.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314429iFD51A0DD589BDAD1/image-size/large?v=v2&px=999" role="button" title="22.png" alt="22.png" /></span></P> <P> </P> <P>Under the <STRONG>Permissions </STRONG>section, select the <STRONG>Grant admin consent to openid and offline_access permissions</STRONG> check box.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="23.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314430i467F9E434F2DEC76/image-size/large?v=v2&px=999" role="button" title="23.png" alt="23.png" /></span></P> <P> </P> <P>And click the <STRONG>Register </STRONG>button.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="24.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314432i2E88BE01F78BE5E5/image-size/medium?v=v2&px=400" role="button" title="24.png" alt="24.png" /></span></P> <H1>Specify that the application should be treated as a public client</H1> <P>In the left-hand side menu, select <STRONG>Manage</STRONG> - <STRONG>Authentication</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="25.png" style="width: 236px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314433i5EE2FFFEEB925104/image-size/medium?v=v2&px=400" role="button" title="25.png" alt="25.png" /></span></P> <P> </P> <P>Under the <STRONG>Advanced settings </STRONG>section, in the <STRONG>Allow public client flows</STRONG>, set the <STRONG>Enable the following mobile and desktop flows</STRONG> to <STRONG>Yes</STRONG>.</P> <P> </P> <TABLE style="border-collapse: collapse; width: 100%;"> <TBODY> <TR> <TD style="width: 100%;"><STRONG>Info:</STRONG> Make user that "<STRONG>allowPublicClient</STRONG>": true is set in the application manifest.</TD> </TR> </TBODY> </TABLE> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="26.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314434i6A3DF44E95201FCA/image-size/large?v=v2&px=999" role="button" title="26.png" alt="26.png" /></span></P> <P> </P> <P>And select <STRONG>Save</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="27.png" style="width: 415px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314435i225DC35B21B9D907/image-size/large?v=v2&px=999" role="button" title="27.png" alt="27.png" /></span></P> <P> </P> <P>Now, grant permissions to the API scope we exposed earlier in the IdentityExperienceFramework registration: In the left menu, select <STRONG>Manage</STRONG> - <STRONG>API permissions</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="28.png" style="width: 171px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314436i4E64724C9C85D283/image-size/medium?v=v2&px=400" role="button" title="28.png" alt="28.png" /></span></P> <P> </P> <P>Under <STRONG>Configured permissions</STRONG>, select <STRONG>Add a permission</STRONG>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="29.png" style="width: 485px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314437iD8AC3928D4AE3118/image-size/large?v=v2&px=999" role="button" title="29.png" alt="29.png" /></span></P> <P> </P> <P>Under the Request API permissions section, click on the <STRONG>My APIs</STRONG> tab, and select the <STRONG>IdentityExperienceFramework</STRONG> application.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="30.png" style="width: 564px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314438i6D7224616945B417/image-size/large?v=v2&px=999" role="button" title="30.png" alt="30.png" /></span></P> <P> </P> <P>Under the <STRONG>Select Permissions</STRONG> section, select the <STRONG>user_impersonation</STRONG> scope.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="31.png" style="width: 517px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314439iA7EB0520FAC16008/image-size/large?v=v2&px=999" role="button" title="31.png" alt="31.png" /></span></P> <P> </P> <P>And select the <STRONG>Add permissions </STRONG>button</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="32.png" style="width: 291px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314440i2DECD59BD105DEEB/image-size/medium?v=v2&px=400" role="button" title="32.png" alt="32.png" /></span></P> <P> </P> <P>Now, select <STRONG>Grant admin consent</STRONG> for (tenant name).</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="33.png" style="width: 597px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314441i19E29CCF6707A38C/image-size/large?v=v2&px=999" role="button" title="33.png" alt="33.png" /></span> </P> <H1>Working with the custom policy starter pack</H1> <P> </P> <P>After unzipping the custom policy starter pack, zip file, we will see the folders as the image below.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="00_1.PNG" style="width: 235px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/316377iAE5499684C84A001/image-size/medium?v=v2&px=400" role="button" title="00_1.PNG" alt="00_1.PNG" /></span></P> <P> </P> <TABLE style="border-collapse: collapse; width: 80.2826%; height: 115px;" width="80.2826%"> <TBODY> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;"><STRONG>Folder Name</STRONG></TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;"><STRONG>Description</STRONG></TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">LocalAccounts</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;"> Includes custom policies XML files for local accounts</TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">SocialAccounts</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;">Includes custom policies XML files for social accounts</TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">SocialAndLocalAccounts</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;">Includes custom policies XML files for both local and social accounts</TD> </TR> <TR style="height: 23px;"> <TD width="22.4421%" style="width: 22.4421%; height: 23px;">SocialAndLocalAccountsWithMfa</TD> <TD width="57.8417%" style="width: 57.8417%; height: 23px;">Includes custom policies XML files for both local and social accounts with multi-factor authentication (Mfa)</TD> </TR> </TBODY> </TABLE> <P> </P> <H1>Configure the Custom Policies</H1> <P>Before we upload the custom policy XML files we must make some changes to the <STRONG><EM>TrustFrameworkExtensions.xml.</EM></STRONG></P> <P> </P> <TABLE style="height: 87px; width: 82.5259%; border-collapse: collapse; border-style: solid;"> <TBODY> <TR style="height: 24px;"> <TD style="width: 27.0469%; height: 24px;">ProxyIdentityExperienceFramework</TD> <TD style="width: 29.269%; height: 24px;"><Item Key="client_id"></TD> <TD style="width: 34.1997%; height: 24px;"> <DIV class="fxc-essentials-label-container fxc-essentials-label-container-left"><LABEL id="_essentials_161" class="fxc-essentials-label fxs-portal-subtext" title="Application (client) ID">Application (client) ID</LABEL></DIV> </TD> <TD style="width: 28.6073%;"> IdentityExperienceFrameworkAppId</TD> </TR> <TR style="height: 24px;"> <TD style="width: 27.0469%; height: 24px;">IdentityExperienceFramework</TD> <TD style="width: 29.269%; height: 24px;"><Item Key="IdTokenAudience"></TD> <TD style="width: 34.1997%; height: 24px;"><LABEL id="_essentials_161" class="fxc-essentials-label fxs-portal-subtext" title="Application (client) ID">Application (client) ID</LABEL></TD> <TD style="width: 28.6073%;">IdentityExperienceFramework</TD> </TR> </TBODY> </TABLE> <P> </P> <P>Find, open the <STRONG>LocalAccounts</STRONG>/<STRONG>TrustFrameworkExtensions.xml,</STRONG> search for the <STRONG><TechnicalProfile Id="login-NonInteractive"></STRONG> element and replace the values as the examples below, and save the files.</P> <P> </P> <TABLE style="height: 255px; width: 85.0635%; border-collapse: collapse; border-style: solid;" width="85.06350000000002%"> <TBODY> <TR> <TD width="100%" style="width: 100%;"> <P><STRONG><DisplayName>Local Account SignIn</DisplayName></STRONG></P> <P><TechnicalProfiles> <STRONG><TechnicalProfile Id="login-NonInteractive"></STRONG></P> <P><Metadata></P> <P><STRONG><Item Key="client_id">ProxyIdentityExperienceFrameworkAppId</Item></STRONG></P> <P><STRONG><Item Key="IdTokenAudience">IdentityExperienceFrameworkAppId</Item></STRONG></P> <P></Metadata></P> <P><InputClaims></P> <P><STRONG><InputClaim ClaimTypeReferenceId="client_id" DefaultValue="ProxyIdentityExperienceFrameworkAppId" /></STRONG></P> <P><STRONG><InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="IdentityExperienceFrameworkAppId" /></STRONG></P> <P></InputClaims></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <TABLE style="height: 340px; width: 84.6896%; border-collapse: collapse; border-style: solid;"> <TBODY> <TR> <TD style="width: 100%;"> <DIV> <STRONG><DisplayName>Local Account SignIn</DisplayName></STRONG></DIV> <DIV> <TechnicalProfiles></DIV> <DIV> <STRONG><TechnicalProfile Id="login-NonInteractive"></STRONG></DIV> <DIV> <Metadata></DIV> <DIV> <STRONG><Item Key="client_id">########-####-####-####-############</Item></STRONG></DIV> <DIV> <STRONG> <Item Key="IdTokenAudience">########-####-####-####-############</Item></STRONG></DIV> <DIV> </Metadata></DIV> <DIV> <InputClaims></DIV> <DIV> <STRONG><InputClaim ClaimTypeReferenceId="client_id" DefaultValue="########-####-####-####-############" /></STRONG></DIV> <DIV><STRONG> <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="########-####-####-####-############" /></STRONG></DIV> <DIV> </InputClaims></DIV> </TD> </TR> </TBODY> </TABLE> <H1>Upload the Policies</H1> <P>The last step is to upload the custom policies to the Azure B2C tenant. Under the Policies section, select the Identity Experience Framework menu item in the B2C tenant in the Azure portal.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="34.png" style="width: 298px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314442i1E730BDF1960B7D3/image-size/large?v=v2&px=999" role="button" title="34.png" alt="34.png" /></span></P> <P> </P> <P>Select <STRONG>Upload custom policy</STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="35.png" style="width: 692px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/314443iBECA0839C5331F00/image-size/large?v=v2&px=999" role="button" title="35.png" alt="35.png" /></span></P> <P> </P> <P>Upload the policy files, in the following order:</P> <P> </P> <OL> <LI>TrustFrameworkBase.xml</LI> <LI>TrustFrameworkExtensions.xml</LI> <LI>SignUpOrSignin.xml</LI> <LI>ProfileEdit.xml</LI> <LI>PasswordReset.xml</LI> </OL> <P>Every policy file we upload will add the <STRONG>B2C_1A_ prefix</STRONG>.</P> <H1>Useful links</H1> <UL> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/overview" target="_blank" rel="noopener">What is Azure Active Directory B2C?</A></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-tenant" target="_blank" rel="noopener">Create an Azure Active Directory B2C tenant</A></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-register-applications?tabs=app-reg-ga" target="_blank" rel="noopener">Register a web application in Azure Active Directory B2C</A></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/active-directory-b2c/tutorial-create-user-flows?pivots=b2c-custom-policy" target="_blank" rel="noopener">Create custom policies in Azure Active Directory B2C</A></LI> </UL> <P> </P></description> <pubDate>Sun, 10 Oct 2021 09:45:08 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/working-with-azure-ad-b2c-custom-policies/ba-p/2804056</guid> <dc:creator>George Grammatikos</dc:creator> <dc:date>2021-10-10T09:45:08Z</dc:date> ... </item> <item> <title>NEW data science curriculum on GitHub was just released, 20 free lessons</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-data-science-curriculum-on-github-was-just-released-20-free/ba-p/2797143</link> <description><P>The curriculum can be found at:</P> <UL> <LI><A href="https://aka.ms/datascience-beginners" target="_self">aka.ms/datascience-beginners</A></LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MicrosoftTeams-image (4).png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/313795iE2E04DF57A7745EE/image-size/large?v=v2&px=999" role="button" title="MicrosoftTeams-image (4).png" alt="MicrosoftTeams-image (4).png" /></span></P> <P> </P> <P><SPAN>Azure Cloud Advocates at Microsoft are pleased to offer a 10-week, 20-lesson curriculum all about Data Science. Each lesson includes pre-lesson and post-lesson quizzes, written instructions to complete the lesson, a solution, and an assignment. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.</SPAN></P> <P> </P> <H2>Each lesson includes:</H2> <UL> <LI>Optional sketchnote</LI> <LI>Optional supplemental video</LI> <LI>Pre-lesson warmup quiz</LI> <LI>Written lesson</LI> <LI>For project-based lessons, step-by-step guides on how to build the project</LI> <LI>Knowledge checks</LI> <LI>A challenge</LI> <LI>Supplemental reading</LI> <LI>Assignment</LI> <LI>Post-lesson quiz</LI> </UL> <P> </P> <P> </P> <P>This curriculum is in a series that shows beginners different technical industries:</P> <UL> <LI><SPAN><A href="https://github.com/microsoft/Data-Science-For-Beginners" target="_self">Data Science for Beginners</A> - Check out all the content for this curriculum!</SPAN></LI> <LI> <DIV><A href="https://aka.ms/webdev-beginners" target="_self" rel="noopener noreferrer"><SPAN>Web Dev for Beginners</SPAN></A></DIV> </LI> <LI> <DIV><A href="https://aka.ms/iot-beginners" target="_self" rel="noopener noreferrer"><SPAN>IoT for Beginners</SPAN></A></DIV> </LI> <LI> <DIV><A href="https://github.com/microsoft/ML-For-Beginners" target="_self" rel="noopener noreferrer"><SPAN>Machine Learning for Beginners</SPAN></A></DIV> </LI> </UL> <P> </P> <P>You can find a related blog post at <A href="https://techcommunity.microsoft.com/t5/educator-developer-blog/introducing-data-science-for-beginners/ba-p/2796770" target="_self">announcing a new curriculum</A></P></description> <pubDate>Mon, 04 Oct 2021 18:27:57 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-data-science-curriculum-on-github-was-just-released-20-free/ba-p/2797143</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-10-04T18:27:57Z</dc:date> ... </item> <item> <title>From Tunisian classroom full of boys to architect for Canadian government: A journey of perseverance</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/from-tunisian-classroom-full-of-boys-to-architect-for-canadian/ba-p/2783379</link> <description><P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MonishGangwani_0-1632512735534.png" style="width: 623px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312753iA814E8A16840BEE7/image-dimensions/623x441?v=v2" width="623" height="441" role="button" title="MonishGangwani_0-1632512735534.png" alt="MonishGangwani_0-1632512735534.png" /></span></P> <P><FONT size="5"><STRONG>HAMIDA REBAI TRABELSI </STRONG>is a passionate learner who juggles multiple roles with ease: a senior technology professional at one of Canada’s government agencies, a Microsoft MVP, a mother. Hamida’s journey to Software and Cloud Architect at Revenu in Quebec has been one of determination; as one of the only two girls in a classroom of 28 boys in Tunisia, North Africa, she used the computer lab at school to teach herself PASCAL programming. Today she is the only woman on Revenu’s Cloud Migration team, architecting the agency’s migration strategy to digitize all their data by March 2023. An expert on the use of Kubernetes for data digitization, Hamida freely shares her knowledge through blogs, technical articles, and conferences. Hamida shares about her experience with Kubernetes and what she’s working on now in this discussion.</FONT></P> <P> </P> <P><STRONG>Tell us about your job at Revenu. What are you currently working on?</STRONG></P> <P>Renevu is a government agency that encourages social and economic development in Québec. We help individuals and businesses understand and fulfill their tax obligations. Specifically, we administer tax legislation and the social programs entrusted to us by the government; we collect debts and run checks to ensure that tax laws are applied fairly; we collect support and pay it to the rightful recipients.</P> <P> </P> <P>As you can imagine, our work generates huge volumes of unstructured data. The ability to mine data in a manner that scales and is accurate is super critical to help us do our job thoroughly and serve the taxpayers and our various constituents. I am currently architecting and implementing our cloud migration strategy, which is a multi-year project to digitize our data across multiple clouds. Doing so will help us have a common structure for data, which in turn will yield greater accuracy and help the agency work with greater speed. We will also have the capability to apply AI models in the future. For applications that we are not able to migrate, we are working on plans to rearchitect them using containers and microservices.</P> <P> </P> <P><STRONG>Tell us more about the use of containers and their impact on your migration project.</STRONG></P> <P>In order to simplify the deployment and management of applications based on microservices, we used containers with Kubernetes orchestrators. To ensure the continuous integration and continuous delivery and secure DevOps implementation with Kubernetes using Azure DevOps, AKS is also a reliable solution for bringing DevOps and Kubernetes together to improve the speed and security of the development process.</P> <P> </P> <P>In order to ensure our huge volume of applications function without any problems, we use Constant Monitoring in AKS and in Azure to accelerate the feedback loop. Azure Pipelines help us deliver faster while staying compliant with critical policies specified by Azure.</P> <P>During peaks AKS and Azure Container Instances offer several functionalities to help us scale and manage costs based on our consumption.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_0-1632521137661.png" style="width: 653px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312793i3BE77152C07F29E5/image-dimensions/653x302?v=v2" width="653" height="302" role="button" title="Monish_Gangwani_0-1632521137661.png" alt="Monish_Gangwani_0-1632521137661.png" /></span></P> <P> </P> <P> </P> <P><STRONG>Who has been the single biggest influence on your life and career?</STRONG></P> <P>My father. <EM>As one of the only two girls in a classroom with 28 boys back in Tunisia, I was determined to pursue my passion for software programming</EM> and having my father’s support was immensely valuable. He always encouraged to keep learning and growing; at a time when progressive parents expect their kids to become doctors, he acknowledged my aptitude for and supported me in pursuing software as a career. I learned the importance of being responsible for my choices and not to take the opportunities I have been presented with for granted.</P> <P> </P> <P><STRONG>Clearly your father ignited the spark for learning in you. How has that become a full-fledged passion and how do you stay up-to-date yourself?</STRONG></P> <P>Well, for me learning is my way of having fun. Whether we are on vacation or it’s a regular workday, I create time within my day to learn something new. Learning has become my hobby, my favorite pastime. And when you’re having fun and it adds value to your entire life, it becomes something you believe in strongly and that has translated into a passion for me.</P> <P> </P> <P>My dream would be to create a consolidated web-based learning platform where I can share articles, blogs, podcasts with others and they can do the same.</P> <P> </P> <P>As far as staying updated myself, I am committed to training others which propels me to keep up with the latest tech. Also, as an MVP, I get access to a ton of latest information from Microsoft, which keeps me current. There is also a vast amount of free training available. In fact, I just delivered a training on ‘Essentials of Azure Kubernetes Services’ that is <A href="https://www.linkedin.com/learning/l-essentiel-d-azure-kubernetes-service-aks/bienvenue-dans-l-essentiel-d-azure-kubernetes-service-aks/?ocid=AID3041046" target="_blank" rel="noopener">available on LinkedIn Learning</A> and I am delivering a talk on ‘Deploying an application on AKS’ at <A href="https://azuresummit.live/speaker/rebai-hamida/?ocid=AID3041046" target="_blank" rel="noopener">the Cloud Summit</A>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Monish_Gangwani_1-1632521174118.png" style="width: 424px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312794iBCC7E91BA460EEB9/image-dimensions/424x322?v=v2" width="424" height="322" role="button" title="Monish_Gangwani_1-1632521174118.png" alt="Monish_Gangwani_1-1632521174118.png" /></span></P> <P> </P> <P> </P> <P><STRONG>Your advice to developers?</STRONG></P> <P>Data is the most important asset today and learning about Kubernetes will make possible data interactions that were previously unthinkable. <SPAN style="font-family: inherit;">So definitely learn more about Kubernetes. Beyond that, I encourage all developers to commit themselves to lifelong learning.</SPAN></P> <P> </P> <P><STRONG><FONT size="2"><EM>Follow Hamida on <A href="https://twitter.com/RebaiHamida" target="_blank" rel="noopener">Twitter</A>, <A href="https://www.linkedin.com/in/hamida-rebai-trabelsi-09b8525/" target="_blank" rel="noopener">LinkedIn</A>, and <A href="https://didourebai.medium.com/" target="_blank" rel="noopener">Medium</A>. Hamida's Essentials of AKS Training (in French) on <A href="https://www.linkedin.com/learning/l-essentiel-d-azure-kubernetes-service-aks/bienvenue-dans-l-essentiel-d-azure-kubernetes-service-aks/?ocid=AID3041046" target="_blank" rel="noopener">LinkedIn Learning</A>.</EM></FONT></STRONG></P> <P><FONT size="2"><EM><STRONG>Continue learning about Kubernetes on Azure: visit the <A href="https://github.com/microsoft/monthlyresources/?ocid=AID3041046" target="_blank" rel="noopener">Microsoft Dev Repo on GitHub</A>.</STRONG></EM></FONT></P></description> <pubDate>Tue, 12 Oct 2021 21:11:25 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/from-tunisian-classroom-full-of-boys-to-architect-for-canadian/ba-p/2783379</guid> <dc:creator>Monish_Gangwani</dc:creator> <dc:date>2021-10-12T21:11:25Z</dc:date> ... </item> <item> <title>Journey Towards Cloud Architecture</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/journey-towards-cloud-architecture/ba-p/2780579</link> <description><P class="wk wl uu wm b wn wo wp wq wr ws wt wu wv ww wx wy wz xa xb oh xc pk by" data-selectable-paragraph="">In this article,<SPAN> </SPAN><A class="ay ow" href="https://github.com/i-am-dan" target="_blank" rel="noopener ugc nofollow">@i-am-dan<SPAN> </SPAN></A>and<SPAN> </SPAN><A class="ay ow" href="https://github.com/pjirsa" target="_blank" rel="noopener ugc nofollow">@pjirsa</A><SPAN> </SPAN>(Microsoft’s Cloud Solutions Architects) highlight the benefits of a modern event-based cloud architecture while migrating a legacy WebAPI to Azure.</P> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="be56" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""><STRONG class="be">Our Story</STRONG></H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">Our legacy API (Hackathon registration service)</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DanielKim_0-1632419899038.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312460i82A1FB0AF56629E0/image-size/medium?v=v2&px=400" role="button" title="DanielKim_0-1632419899038.png" alt="DanielKim_0-1632419899038.png" /></span></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">(Figure 1)</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Figure 1 represents the architecture of our original Hackathon Registration service.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">It includes the following components:</P> <UL class=""> <LI id="a75b" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph=""><EM class="zc">Registration Form —<SPAN> </SPAN></EM>A website which collects registration info from a new hackathon participant.</LI> <LI id="8f5e" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><EM class="zc">Registration API —<SPAN> </SPAN></EM>An ASP.NET Core WebAPI providing CRUD over the registration data.</LI> <LI id="438e" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><EM class="zc">Registration DB</EM><SPAN> </SPAN>— An Azure SQL Database to persist registration data.</LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Over time, additional functionality and business logic have been added to the legacy API. Some examples are:</P> <UL class=""> <LI id="8e2d" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph="">Adding a new user to a mailing list service (Mailchimp).</LI> <LI id="f282" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Inviting new guest users to an Azure AD tenant.</LI> <LI id="7c4a" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Adding a new user to a Microsoft Teams team and channels.</LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""><STRONG class="wm hq">And more requirements mean more code!</STRONG></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Our technical debt and existing design patterns were making it challenging to adapt to the new requirements.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">While th<SPAN>e</SPAN><SPAN> </SPAN>core functionality of collecting and storing user registration information remains constant, each hackathon event usually has its own requirements around other capabilities. Some events want to use an alternate mailing list provider. Others want to configure a unique hierarchy for teams and channels. Our API codebase<SPAN> </SPAN><EM class="zc">quickly started filling up with conditional statements and logical branches<SPAN> </SPAN></EM>making it nearly impossible to test and difficult to maintain.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">While the American divorce rate has<SPAN> </SPAN><A class="ay ow" href="https://www.census.gov/library/stories/2020/12/united-states-marriage-and-divorce-rates-declined-last-10-years.html" target="_blank" rel="noopener ugc nofollow">dropped</A>, we knew the<SPAN> </SPAN><STRONG class="wm hq">answer to our problem was to decouple</STRONG>. We want to decouple what we currently have into separate<SPAN> </SPAN><EM class="zc">components</EM>. Each component takes care of an atomic piece of business logic and should be easily modifiable without disrupting other components. This removes the need to bake unnecessary code into our base business logic. We decided to take a spike and design out how we can accomplish that using out of the box Azure services.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="06af" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">What does this have to do with me?</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">Though this API is a small example we believe componentizing your architecture while it’s still small is a big step towards modernizing your architecture.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">As developers, we believe in<SPAN> </SPAN><A class="ay ow" href="https://dev.to/danialmalik/a-brief-guide-to-clean-code-functions-104h#:~:text=A%20Brief%20Guide%20to%20Clean%20Code%3A%20Functions%201,of%20the%20system%20while%20classes%20are%20the%20nouns." target="_blank" rel="noopener ugc nofollow">Clean Code</A>. We have to think software architecture, similarly. Each small component is doing only what it is supposed to and then passes control to another component. This helps us to architect cleaner and sensible solutions in the cloud.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Whether you are already on the cloud or just thinking about modernizing your current architecture for the cloud, this article will hopefully give you a decent grasp of how you can go about approaching it the right way — or at least a better way. There’s no one design pattern to address all solutions of course.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""><STRONG class="wm hq">Options Options Options</STRONG></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="5077" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">App Service</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">One of the quickest way to modernize your software is using<SPAN> </SPAN><STRONG class="wm hq">Azure</STRONG><SPAN> </SPAN><STRONG class="wm hq">App Service</STRONG>. This way you allow Azure to handle all the networking and security for you. Here are some great ways to secure your App Services!</P> <UL class=""> <LI id="7124" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/app-service/networking/private-endpoint" target="_blank" rel="noopener ugc nofollow">App Service Private Endpoint</A></LI> <LI id="04f6" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/app-service/app-service-ip-restrictions" target="_blank" rel="noopener ugc nofollow">App Service Access Restriction</A></LI> <LI id="d820" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/app-service/environment/intro" target="_blank" rel="noopener ugc nofollow">App Service Environment</A></LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""><EM class="zc">(VM is of course another route but going back to our reasoning we want to make sure things are small and manageable.)</EM></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">You can either host all your messy giant application in the App Service, OR you can refactor like mentioned above and put them into separate App Services and this gets into the territory of<SPAN> </SPAN><A class="ay ow" href="https://www.martinfowler.com/microservices/" target="_blank" rel="noopener ugc nofollow">Microservices</A>.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Did we mention the cost can be significantly cheaper?</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="7b08" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Serverless</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">One step further than an app service route is the Serverless<SPAN> </SPAN><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener ugc nofollow">Azure Functions</A><SPAN> </SPAN>route. This is where Azure dynamically manages the allocation and provisioning of servers. All the benefit of the App Service but with added bonus of being only charged when it’s invoked. Scott Guthrie calls it the ‘<EM class="zc">invocation model</EM>’ where you are only responsible for chargers when the resource is called.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Now… the fun(?) part!</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="4c11" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Events and Messages</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">As you manage multiple components, event and messaging architecture becomes very important. We want our services to communicate and respond to each other. However, if we make direct calls between them, we are re-introducing strict dependencies. Ideally, these services should be able to communicate without needing any specific knowledge about what those services are, or where they are located. To accomplish this, we introduce an eventing system.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Should I use events or messages?</P> <UL class=""> <LI id="aa6e" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph=""><STRONG class="wm hq">Events</STRONG><SPAN> </SPAN>Think of it as a notification. The sender of an event does not necessarily care who receives or acts on the event. Eventing systems typically provide confirmation that an event has been submitted, and no response to the sender that a subscriber has consumed or processed the event.</LI> <LI id="a219" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><STRONG class="wm hq">Messaging<SPAN> </SPAN></STRONG>Think of it as a task given by System A to System B. Messages usually contain a data payload. Messaging systems can accommodate a more formal relationship between a publisher and a subscriber. The sender generally knows who the consumer will be and is sending a data payload that the consumer expects for processing.</LI> </UL> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Whichever direction you go you need a<SPAN> </SPAN><EM class="zc">Broker</EM>.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">The broker we chose for our example is<SPAN> </SPAN><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/event-grid/overview" target="_blank" rel="noopener ugc nofollow">Azure Event Grid</A>.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">><SPAN> </SPAN><A class="ay ow" href="https://docs.microsoft.com/en-us/azure/event-grid/compare-messaging-services" target="_blank" rel="noopener ugc nofollow">Checkout the doc</A><SPAN> </SPAN>which explains different event-driven services in Azure</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="5b5f" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Our Solution</H2> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DanielKim_1-1632420074586.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/312461i8E08DF9FE18F5C80/image-size/medium?v=v2&px=400" role="button" title="DanielKim_1-1632420074586.png" alt="DanielKim_1-1632420074586.png" /></span></P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">(Figure 2) represents the architecture of our refactored solution.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">The core functionality of the API is still there. But we have moved all the customizable supporting features out to their own services.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">In order to decouple them from the original API, and orchestrate the business logic, an Event Grid Topic has been implemented. This service receives event notifications from the API when operations are performed on the registration data.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">Our supporting feature services can subscribe to these notifications to take the appropriate action when changes in the system occur.</P> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="4308" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">What are the benefits?</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">The immediate impact of this redesign is tremendous.</P> <UL class=""> <LI id="c1c4" class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc yz za zb by" data-selectable-paragraph="">Each component is completely autonomous. Interdependencies are decoupled and cross-service communication is faciliated by a highly fault-tolerant messaging system.</LI> <LI id="811c" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph=""><A class="ay ow" href="https://en.wikipedia.org/wiki/Cyclomatic_complexity" target="_blank" rel="noopener ugc nofollow">Cyclomatic Complexity</A><SPAN> </SPAN>of each component is greatly reduced. In some cases reaching a perfect score. This has the added benefit of making the code easier to test and easier for developers to understand. Not only are unit tests easier, but integration testing can be done by testing each component individually. For example, before the changes, we would have to submit an entire “new user” request through the API to make sure that the “Add to Mailchimp” feature was working properly. Now, we can just test that one service on its own.</LI> <LI id="8bb7" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Updates to the system are much easier now. Each of the supporting services are “plug-n-play”. For example, we can easily swap out the Mailchimp service for another service that interfaces with SendGrid.</LI> <LI id="f807" class="wk wl uu wm b wn zd wo wp wq ze wr ws wt zf wu wv ww zg wx wy wz zh xa xb xc yz za zb by" data-selectable-paragraph="">Event Grid allows multiple subscriptions to the same event, which makes adding new features and layering in additional business logic a snap.</LI> </UL> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="7595" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">The downside</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">You might be saying, “<EM class="zc">But now there are so many more ‘things’ to deal with!</EM>”.<SPAN> </SPAN><STRONG class="wm hq">Yes, that is true</STRONG>. But the benefits<SPAN> </SPAN><STRONG class="wm hq">FAR</STRONG><SPAN> </SPAN>out-weigh the downsides here. Cloud platforms (such as Azure) provide a wealth of governance and management tools out of the box that make it easy to provision, manage, and monitor ‘all the things’.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <H2 id="aaff" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">Lesson to be learnt</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""><EM class="zc">In hindsight I guess we got to this point because we didn’t have a good design discussion when the API was being created</EM>.</P> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">But I’m sure lot of development shops do similar things. In order to push code out, the design you think is going to last doesn’t really do you any good, OR you just write code without designing at all! IT’S OK! The point is to<SPAN> </SPAN><EM class="zc">LEARN</EM><SPAN> </SPAN>from what you have built and try to continuously improve.</P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph=""> </P> <P class="wk wl uu wm b wn yu wo wp wq yv wr ws wt yw wu wv ww yx wx wy wz yy xa xb xc pk by" data-selectable-paragraph="">The cloud offers flexibility. A light-weight, adaptable design for the cloud is more resilient to changes in feature requirements. As your needs change and grow, you are not locked in to the server or license you bought last year, you can scale up, down, out and in whenever you need to and the cost is only for what you use.</P> <H2 class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph=""> </H2> <H2 id="6ed2" class="xd xe uu bv fs xf xg xh xi xj xk xl xm xn xo xp xq xr xs xt xu xv xw xx xy xz by" data-selectable-paragraph="">The Final Word</H2> <P class="wk wl uu wm b wn ya wo wp wq yb wr ws wt yc wu wv ww yd wx wy wz ye xa xb xc pk by" data-selectable-paragraph="">Migrating legacy application architectures to the cloud sometimes requires a shift in perspective and thought-process. These cloud-native patterns can seem foreign and complicated at first. But with a little time and experience you will start to see the flexibility, scalability, and cost benefits of these designs.</P></description> <pubDate>Fri, 24 Sep 2021 03:53:41 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/journey-towards-cloud-architecture/ba-p/2780579</guid> <dc:creator>Daniel-Kim</dc:creator> <dc:date>2021-09-24T03:53:41Z</dc:date> ... </item> <item> <title>Calling on developers for Virtual Hackathon</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/calling-on-developers-for-virtual-hackathon/ba-p/2778977</link> <description><P><STRONG><EM>Did you know that 1 in 5 nurses are leaving or considering leaving the profession?</EM></STRONG></P> <P> </P> <P>The disappearing frontline affects us all, and our health care practitioners are<SPAN> </SPAN><STRONG>calling on all developers</STRONG><SPAN> </SPAN>to bring your innovation and solutions to help build a sustainable nursing workforce for the future.</P> <P> </P> <P><U></U><A href="https://nursehack4health.org/" target="_self" rel="nofollow noopener noreferrer"><U>Join our 3 day virtual hackathon</U></A><SPAN> to work with other technologists, healthcare workers, and innovators to build meaningful solutions.</SPAN></P> <P> </P> <P><SPAN><STRONG>Why should You Attend?<BR /></STRONG>For the greater good? Ha ha. </SPAN><SPAN>Attending a hackathon is a great way to bond, brainstorm, develop and pitch healthcare solutions that will forever change the way you think about a problem, your perceived value and impact and your vision for your future in nursing and healthcare!</SPAN></P> <P> </P> <P><SPAN>You will get a chance to:</SPAN></P> <UL> <LI>Work along side and network with MS experts and other technologists who share a common vision.</LI> <LI>Ideate and create meaningful solutions to address real pain points that our new and seasoned heroes are going through.</LI> <LI>Getting to work alongside nurses on the frontlines will help them make their ideas a reality!</LI> <LI>Close the gap between your technical skills and the needs of our nurses.</LI> <LI>Perfect chance to contribute to open source and help build your brand.</LI> </UL> <P><STRONG>What if I don’t have any healthcare experience? </STRONG>No problem! That’s what the nurses are for (and we’ll have some tech-y healthcare industry people there too)</P> <P><STRONG><BR />What if I don’t have skills on the tech and tools the team needs?<SPAN> </SPAN></STRONG>Again, No problem! Your background on any developer tools and tech are more than enough – and we’ll have plenty of MSFT mentors in a variety of areas there to help you as well. Commonly used tech includes (but is definitely not limited to):</P> <UL> <LI>C#/Java/JavaScript, React.js, SQL, MySQL, Power Apps, bot frameworks, Power Virtual Agent, mobile app dev</LI> </UL> <P><STRONG>Check with your employer(s) </STRONG>Some employers have policies around employees moonlighting and working on open source projects</P> <P data-unlink="true"> </P> <P>Testimony:<BR /><A href="https://www.youtube.com/watch?v=JQVjOT7DZcU" target="_self" rel="nofollow noopener noreferrer">Company founded through NurseHack! (Youtube Video)</A> <BR /><BR /></P> <P data-unlink="true">Resources that could help prepare you for the hackathon:</P> <P data-unlink="true"><A href="https://github.com/NurseHack4Health/NH4H2021SpringHackathon" target="_self" rel="noopener noreferrer">NurseHack4Health Spring 2021</A><SPAN> </SPAN>(past solutions/presentation) </P> <P> </P> <P>Help build a sustainable nursing workforce for the future. Leverage your tech skills and hack for nurses’ wellbeing.</P> <P><EM>To register and to learn more: </EM><STRONG><EM><A href="https://nursehack4health.org/" target="_blank" rel="noopener nofollow noreferrer">https://nursehack4health.org</A></EM></STRONG></P></description> <pubDate>Thu, 23 Sep 2021 15:38:01 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/calling-on-developers-for-virtual-hackathon/ba-p/2778977</guid> <dc:creator>Anshika Goyal</dc:creator> <dc:date>2021-09-23T15:38:01Z</dc:date> ... </item> <item> <title>Meet the band backstage at Azure and build</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/meet-the-band-backstage-at-azure-and-build/ba-p/2768701</link> <description><P><SPAN data-contrast="auto"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AAA Event card.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/311663iA88DC946DA8F1BB5/image-size/large?v=v2&px=999" role="button" title="AAA Event card.png" alt="AAA Event card.png" /></span></SPAN></P> <P> </P> <P><SPAN data-contrast="auto">We know it’s not easy juggling tradeoffs and prioritizing improvements. This is where the </SPAN><A href="https://aka.ms/wellarchitected/framework" target="_blank"><SPAN data-contrast="none">Azure Well-Architected Framework</SPAN></A><SPAN data-contrast="auto"> comes into the picture. </SPAN><SPAN> <BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto">Here’s how we describe it:</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="none">The </SPAN><A href="https://aka.ms/wellarchitected/framework" target="_blank"><SPAN data-contrast="none">Well-Architected Framework</SPAN></A><SPAN data-contrast="none"> is </SPAN><I><SPAN data-contrast="none">a set of guiding tenets that can be used to improve the quality of a workload. The framework consists of five pillars of architecture excellence: Cost Optimization, Operational Excellence, Performance Efficiency, Reliability, and Security. Incorporating these pillars helps produce high-quality, stable, and efficient cloud architecture.</SPAN></I><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">Using the Azure Well-Architected Framework as our guide, we are going to do something we have never done before. On September 23</SPAN><SPAN data-contrast="auto">rd</SPAN><SPAN data-contrast="auto"> online at </SPAN><A href="https://docs.microsoft.com/en-us/learn/tv/" target="_blank"><SPAN data-contrast="none">Learn TV</SPAN></A><SPAN data-contrast="auto">, followed several weeks later around the globe via the </SPAN><A href="https://developer.microsoft.com/reactor/" target="_blank"><SPAN data-contrast="none">Microsoft Reactors</SPAN></A><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="auto"> we’re going to take you </SPAN><STRONG><SPAN data-contrast="auto">behind the scenes at Azure.</SPAN></STRONG><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">Join us for </SPAN><A href="https://aka.ms/WAF-Backstage" target="_blank"><I><SPAN data-contrast="none">Well-Architected: The Backstage Tour</SPAN></I></A><SPAN data-contrast="auto">, a virtual event where you will get five brief peeks at how we power the features that address each of these pillars of the Azure Well-Architected Framework. Not only will you learn how things work behind the curtain, but you’ll also take away some tips and tricks you won’t find anywhere else.</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">Mark Russinovich, Azure Chief Technology Officer, will deliver the opening address to this two hour live event on Learn TV. It will bring you five sessions, each with an opportunity to get your questions answered directly from our speakers.</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">And if you miss this week, don’t worry about it! Register now and we’ll notify you as soon as the recording is available.</SPAN><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">We hope you can join us - </SPAN><A href="https://aka.ms/WAF-Backstage" target="_blank"><SPAN data-contrast="none">RSVP today!</SPAN></A><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><I><SPAN data-contrast="auto">Please see below for the full list of sessions and their speakers.</SPAN></I><SPAN data-ccp-props="{}"> </SPAN></P> <P aria-level="1"><SPAN data-contrast="none">Keynote </SPAN><SPAN data-ccp-props="{"335559738":240}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Presenter: Mark Russinovich</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true,"335559685":-360,"335559731":360}"> </SPAN></P> <P><SPAN data-contrast="none">Reliability: Bringing Reliability Right to your Front Door </SPAN><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Presenter: Daniel Gicklhorn, Director Content Delivery for Azure.</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto">In this session we’ll go behind the scenes with Azure Front Door and how it leverages global vantage points and Microsoft’s global network to self-heal and optimize user experiences all the way from the edge to the app on Azure.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Security: The Secret Life of a Security Signal </SPAN><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Presenter: Rod Trent, (Senior Security Cloud Advocate), Cloud Advocacy</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">To combat cyber-attacks and protect against urgent threats, Microsoft collects billions of signals from the security ecosystem to create the contextual threat intelligence that’s built into products like Office 365, Windows, and Azure, Defender and Azure Sentinel.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">In this session, follow a single signal through its entire journey - from first detection in the wild to the rules that protect you. Then, we'll show you how to gain direct access to these rules and extend them for your own purposes.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Cost Optimization: Two reasons why you should believe us when we say you can optimize your Azure costs </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Presenters:</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Priyanshi Mittal (PM), Azure Cost Management and Billing</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Ritesh Kini (Senior PM), Azure Cost Optimization</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">David Blank-Edelman (Senior Cloud Advocate), Scalable Content</SPAN></STRONG><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">Azure has many tools and techniques to help customers optimize their cloud spend. In this session, we are going to behind the scenes and look at two of them built into Azure Advisor. There’s some pretty magical stuff based on fascinating research and careful engineering powering this service. We will show you all that plus some direct tips for your own cost optimization efforts.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Operational Excellence: ARM Templates Unplugged: How your resource </SPAN><I><SPAN data-contrast="none">actually</SPAN></I><SPAN data-contrast="none"> gets provisioned </SPAN><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Presenter: </SPAN></STRONG><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Alex Frankel (Senior PM), Azure Deployments </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">David Blank-Edelman (Senior Cloud Advocate), Scalable Content </SPAN></STRONG><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="auto">Reproduceable infrastructure and workloads can be crucial for operational excellence. At some point as you build on Azure you will press into service some ARM templates – either authored directly or through tools like Bicep, Farmer, or PSArm. Ever wonder how we go from a simple template to a not-so-simple set of running resources? We’ll reveal the whole story from end-to-end and in the process show you some tips for working with this key provisioning tool. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-contrast="none">Performance Efficiency: Fast & Furious: Optimizing for Quick & Reliable VM Deployments </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Presenter: Sofia Joison (PM), Azure Core Fundamentals</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN> <BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="auto">Virtual Machines are the building blocks of the cloud. And with something that fundamental, it's important to have a performant and reliable experience. In this session, we will go behind the scenes and learn about Azure's secret sauce to provisioning VMs. We'll share some tips and tricks so you can leverage these capabilities to ensure you get the best experience for all your VM deployment needs.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-ccp-props="{}"> </SPAN></P> <P><SPAN data-contrast="auto">We hope you can join us - </SPAN><A href="https://aka.ms/WAF-Backstage" target="_blank"><SPAN data-contrast="none">RSVP today!</SPAN></A><SPAN data-ccp-props="{}"> </SPAN></P></description> <pubDate>Mon, 20 Sep 2021 21:03:18 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/meet-the-band-backstage-at-azure-and-build/ba-p/2768701</guid> <dc:creator>wendywilson</dc:creator> <dc:date>2021-09-20T21:03:18Z</dc:date> ... </item> <item> <title>New path : Tech resilience</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-path-tech-resilience/ba-p/2749436</link> <description><P class="">For many developers, tech-driven fields can be intimidating.</P> <P class=""> </P> <P class="">When you get stuck or lack support, you might end up leaving tech instead of staying in tech and get promoted.</P> <P class=""> </P> <P class=""><STRONG>Consequence</STRONG></P> <P class="">"The result is a smaller and less diverse workforce in tech."</P> <P class=""> </P> <P class=""><STRONG>Feeling of exclusion</STRONG></P> <P>Those who make it past these barriers during their educational journey can end up feeling excluded by workplace cultures that don’t match their own backgrounds and experiences. Far too many talented people avoid choosing or actively decide to leave tech because it can be unwelcoming.</P> <P> </P> <P><STRONG>Solution</STRONG></P> <P>By fostering tech resilience, confidence and mindset, you can grow the needed skills to not only stay in tech but also prepare you for your next position in tech, whether that's a new type of role or one with more managerial responsibility.</P> <P> </P> <P><STRONG>Our mission?</STRONG> To help build a more inclusive future for the tech industry by fostering confidence, resilience, and a sense of belonging.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=0xT4mBgjg0w" align="center" size="custom" width="676" height="676" uploading="false" thumbnail="https://i.ytimg.com/vi/0xT4mBgjg0w/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P> </P> <P>Therefore, we created this learning path <A href="https://docs.microsoft.com/learn/paths/tech-resilience/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/paths/tech-resilience/</A></P> <P> </P> <P>- Develop a growth mindset <A href="https://docs.microsoft.com/learn/modules/develop-growth-mindset/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/develop-growth-mindset/</A></P> <P>- Enhance your self-efficacy, <A href="https://docs.microsoft.com/learn/modules/enhance-self-efficacy/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/enhance-self-efficacy/</A></P> <P>- Cultivate a culture of belongingness, <A href="https://docs.microsoft.com/learn/modules/cultivate-culture-belongingness/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/cultivate-culture-belongingness/</A></P> <P>- Exercise your emotional intelligence, <A href="https://docs.microsoft.com/learn/modules/exercise-your-emotional-intelligence/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/exercise-your-emotional-intelligence/</A></P> <P>- Give and receive effective feedback, <A href="https://docs.microsoft.com/learn/modules/give-receive-effective-feedback/" target="_blank" rel="noopener">https://docs.microsoft.co/learn/modules/give-receive-effective-feedback/</A></P> <P>- Grow your cognitive flexibility, <A href="https://docs.microsoft.com/learn/modules/grow-cognitive-flexibility/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/grow-cognitive-flexibility/</A></P> <P>- Leverage self-regulation to work strategically, <A href="https://docs.microsoft.com/learn/modules/self-regulation-work-strategically/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/self-regulation-work-strategically/</A></P> <P>- Communicate with others strategically through mirroring and coaching, <A href="https://docs.microsoft.com/learn/modules/communicate-strategically-mirror-coach/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/communicate-strategically-mirror-coach/</A></P> <P>- Work with others by practice active listening, <A href="https://docs.microsoft.com/learn/modules/practice-active-listening/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/modules/practice-active-listening/</A></P> <P> </P></description> <pubDate>Wed, 15 Sep 2021 13:21:21 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-path-tech-resilience/ba-p/2749436</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-09-15T13:21:21Z</dc:date> ... </item> <item> <title>new Learning path, Start in tech as an intern</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-start-in-tech-as-an-intern/ba-p/2714167</link> <description><P>You might be a student or in mid-career and you are starting to think, what if I can get into tech? It's never too late to start in tech, just know that there are ways to build your skills, get noticed and start to work at that new dream job of yours.</P> <P> </P> <P>At first, you might start with an intimidating feeling, where do I even begin, how would I build my skills? There are a lot of guidance to be had and in this learning path we've collected all that guidance for you in three modules.</P> <P> </P> <P><STRONG>First module</STRONG></P> <P>The idea is that your first starts building your skills, then craft a resume. Once you have a resume, you can start to network (or even before having a resume) in places where other tech folks might be.</P> <P> </P> <P><STRONG>Second module</STRONG></P> <P>Lastly, all that leg work hopefully leads to an interview, and here we also inform you of various interviews, questions you might get and how to approve them. </P> <P> </P> <P><STRONG>Third module</STRONG></P> <P>In the last interview, you've landed that coveted intern position and we guide you how to best carry it out </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="career-interview.jpg" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/307431i19E45C5D22141567/image-size/large?v=v2&px=999" role="button" title="career-interview.jpg" alt="career-interview.jpg" /></span></P> <P>Here is the learning path <A title="Start a career in tech" href="https://docs.microsoft.com/en-gb/learn/paths/start-career-in-tech/" target="_self">Start a career in tech</A></P> <P> </P> <P>- <A title="Grow your tech skills and get noticed" href="https://docs.microsoft.com/en-gb/learn/modules/career-get-noticed/" target="_self">Get noticed</A> Grow your tech skills and learn where and how to network, even as a student</P> <P>- <A title="Successfully interview to land an intern position" href="https://docs.microsoft.com/en-gb/learn/modules/career-interview/" target="_self">Successful interviewing</A> prepare for different types of interviews, tech and non tech ones</P> <P>- <A title="Learn how to grow as an intern and maximize your chances to be offered a full-time position" href="https://docs.microsoft.com/en-gb/learn/modules/career-growth/" target="_self">From intern to full time position</A>. Grow in your role as an intern, and turn that into a full-time position.</P> <P> </P> <P>Hear from <A title="Eleanor Lewis on why intern" href="https://www.microsoft.com/en-gb/videoplayer/embed/RE4OPAi?postJsllMsg=true&autoCaptions=en-gb" target="_self">Eleanor Lewis</A>, intern that now works full-time at Microsoft.</P> <P> </P> <P> </P></description> <pubDate>Tue, 14 Sep 2021 17:35:04 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learning-path-start-in-tech-as-an-intern/ba-p/2714167</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-09-14T17:35:04Z</dc:date> ... </item> <item> <title>Hackathon as a Service with GitHub Actions, Microsoft 365 and Power Platform</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hackathon-as-a-service-with-github-actions-microsoft-365-and/ba-p/2671063</link> <description><P>Generally speaking, an off-line hackathon event takes place with people getting together at the same time and place for about two to three nights, intensively. On the other hand, all events have turned into online-only nowadays, and there's no exception for the hackathon events either. To keep the same event experiences, hackathon organisers use many online collaboration tools. In this case, almost the same number of event staff members are necessary. What if you have limited resources and budget and are required to run the online hackathon event?</P> <P> </P> <P>For two weeks, I recently ran an online-only hackathon event called <A href="https://github.com/devrel-kr/HackaLearn/blob/main/README.en.md" target="_blank" rel="noopener">HackaLearn</A> from August 2, 2021. This post is the retrospective of the event from the event organiser's perspective. If anyone is planning a hackathon with a similar concept, I hope this post could be helpful.</P> <P> </P> <H2>The Background</H2> <P> </P> <P>In May 2021 at <A href="https://mybuild.microsoft.com/home?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">//Build</A> Conference, <A href="https://docs.microsoft.com/azure/static-web-apps/overview?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Azure Static Web Apps (ASWA)</A> became generally available. It's relatively newer than the other competitors' ones meaning it is less popular than the others. This HackaLearn event is one of the practices to promote ASWA. The idea was simple. We're not only running a hackathon event but also offering the participants learning experiences with <A href="https://docs.microsoft.com/learn/paths/azure-static-web-apps/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Learn</A> to participants so that they can feel how convenient ASWA is to use. Therefore, all participants can learn ASWA and build their app with ASWA – this was the direction.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-01-en.png" border="0" alt="HackaLearn Banner" /></P> <P> </P> <P>In fact, the first HackaLearn event was held in Israel, and other countries in the EMEA region have been running this event. I also borrowed the concept and localised the format for Korean uni students. With support from <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Learn Student Ambassadors (MLSA)</A> and <A href="https://githubcampus.expert" target="_blank" rel="noopener">GitHub Campus Experts (GCE)</A>, they review the participants pull requests and external field experts were invited as mentors and ran online mentoring sessions.</P> <P> </P> <H2>The Problems</H2> <P> </P> <P>As mentioned above, running a hackathon event requires intensive, dedicated and exclusive resources, including time, people and money. However, none of them was adequate. I've got very limited resources, and even I couldn't dedicate myself to this event either. I was the only one who could operate the event. Both <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">MLSAs</A> and <A href="https://githubcampus.expert" target="_blank" rel="noopener">GCEs</A> were dedicated for PR reviews and mentors for mentoring sessions. Automating all the event operation processes was the only answer for me.</P> <P> </P> <BLOCKQUOTE> <P>How can I automate all the things?</P> </BLOCKQUOTE> <P> </P> <P>For me, finding out the solution is the key focus area throughout this event.</P> <P> </P> <H2>The Constraints</H2> <P> </P> <P>There were a few constraints to be considered.</P> <P> </P> <UL> <LI> <P><STRONG>No Website for Hackathon</STRONG></P> <P>:police_car_light:</img> There was no website for HackaLearn. Usually, the event website is built on a one-off basis, which seems less economical.<BR />:backhand_index_pointing_right:</img> Therefore, I decided to use the GitHub repository for the event because it offers many built-in features such as Project, Discussions, Issues, Wiki, etc.</P> </LI> <LI> <P><STRONG>No Place for Participant Registration</STRONG></P> <P>:police_car_light:</img> There was no registration form.<BR />:backhand_index_pointing_right:</img> Therefore, I decided to use <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A>.</P> </LI> <LI> <P><STRONG>No Database for Participant Management</STRONG></P> <P>:police_car_light:</img> There was no database for the participant management to record their challenge progress.<BR />:backhand_index_pointing_right:</img> Therefore, instead of provisioning a database instance, I decided to use <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>.</P> </LI> <LI> <P><STRONG>No Dashboard for Teams and Individuals Progress Tracking</STRONG></P> <P>:police_car_light:</img> There was no dashboard to track each team's and each participant's progress.<BR />:backhand_index_pointing_right:</img> So instead, I decided to use their team page by merging their pull requests.</P> </LI> </UL> <P> </P> <P>I've defined the overall business process workflow in the following sequence diagrams. All I needed was to sort out those limitations stated above. To me, it was <A href="https://powerplatform.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Platform</A>, <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A> and <A href="https://www.microsoft.com/microsoft-365?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft 365</A> with minimal coding efforts and maximum outcomes.</P> <P> </P> <H2>The Plans for Process Automation</H2> <P> </P> <P>All of sudden, the limitations above have become opportunities to experiment with the new process automation!</P> <P> </P> <UL> <LI>The event itself uses the GitHub repository, meaning all PRs and issues can be handled by <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A>.</LI> <LI><A href="https://www.microsoft.com/microsoft-365?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft 365</A> services like <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A> and <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A> are used for data input and storage.</LI> <LI><A href="https://flow.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Automate</A> is one of the <A href="https://powerplatform.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Platform</A> services and is used for the core of process automation.</LI> </UL> <P> </P> <P>So, the GitHub repository and Microsoft 365 services are fully integrated with GitHub Actions workflows and Power Automate workflows. As a result, I was able to save a massive amount of time and money with them.</P> <P> </P> <H2>The Result – Participant Registration</H2> <P> </P> <P>The first automation process I worked on was about storing data. The participant details need to be saved in <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>. When a participant enters their details through <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A>, then a <A href="https://flow.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Automate</A> workflow is triggered to process the registration details. At the same time, the workflow calls a GitHub Actions workflow to create a team page for the participant. Here's the simple sequence diagram describing this process.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/registration-en.png" border="0" alt="Registration Sequence Diagram" /></P> <P> </P> <P>The overall process is divided into two parts – one to process participant details in the Power Automate workflow, and the other to process the details in the GitHub Actions workflow.</P> <P> </P> <H3>Power Automate Workflow</H3> <P> </P> <P>Let's have a look at the Power Automate part. When a participant registers through <A href="https://www.microsoft.com/microsoft-365/online-surveys-polls-quizzes?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Forms</A>, the form automatically triggers a Power Automate workflow. The workflow checks the email address whether the participant has already registered or not. If the email doesn't exist, the participant details are stored to <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-05.png" border="0" alt="Registration Flow 1" /></P> <P> </P> <P>Then it generates a team page. Instead of creating it directly from the Power Automate workflow, it builds the page content and sends it to the GitHub Actions workflow. The <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#workflow_dispatch" target="_blank" rel="noopener"><CODE>workflow_dispatch</CODE></A> event is triggered for this action.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-06.png" border="0" alt="Registration Flow 2" /></P> <P> </P> <P>Finally, the workflow sends a confirmation email. In terms of the name, participants may register themselves with English names or Korean names. Therefore, I need logic to check the participant's name. If the participant name is written in English, it should be <CODE>[Given Name] [Surname]</CODE> (with a space; eg. Justin Yoo). If it's written in Korean, it should be <CODE>[Surname][Given Name]</CODE> (without a space; eg. 유저스틴). The red-boxed actions are responsible for identifying the participant's name. It may be simplified by adopting a custom connector with an Azure Functions endpoint.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-07.png" border="0" alt="Registration Flow 3" /></P> <P> </P> <H3>GitHub Actions Workflow</H3> <P> </P> <P>As mentioned above, the Power Automate workflow calls a GitHub Actions workflow to generate a team page. Let's have a look. The <CODE>workflow_dispatch</CODE> event takes the input details from Power Automate, and they are <CODE>teamName</CODE> and <CODE>content</CODE>.</P> <P> </P> <PRE>name: On Team Page Requested on: workflow_dispatch: inputs: teamName: description: The name of team required: true default: Team_HackaLearn content: description: The content of the file to be created required: true default: Hello HackaLearn </PRE> <P> </P> <P>Since GitHub <A href="https://github.com/marketplace?type=actions" target="_blank" rel="noopener">Marketplace</A> has various types of Actions, I can simply choose one to create the team page, commit the change and push it back to the repository.</P> <P> </P> <PRE> - name: Create team page uses: DamianReeves/write-file-action@master with: path: "./teams/${{ github.event.inputs.teamName }}.md" contents: ${{ github.event.inputs.content }} write-mode: overwrite - name: Commit team page shell: bash run: | git config --local user.email "hackalearn.korea@outlook.com" git config --local user.name "HackaLearn Korea" git add ./teams/\* --force git commit -m "Team: ${{ github.event.inputs.teamName }} added" - name: Push team page uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} branch: ${{ github.ref }} </PRE> <P> </P> <P>Now, I've got the registration process fully automated. Let's move on.</P> <P> </P> <H2>The Result – Challenges Update</H2> <P> </P> <P>In this HackaLearn event, each participant was required to complete six challenges. Every time they finish one challenge, they MUST update their team page and create a PR to reflect their progress. As there are not many differences between the challenges, I'm going to use the Social Media Challenge as an example.</P> <P> </P> <P>Here's the simple sequence diagram describing the process.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/challenge-social-en.png" border="0" alt="Social Media Challenge Sequence Diagram" /></P> <P> </P> <OL> <LI>After the participant posts a post to their social media, they update their team page and raise a PR. Then, a GitHub Actions workflow labels the PR with <CODE>review-required</CODE> and assigns a reviewer.</LI> <LI>The assigned reviewer checks the social media post whether it's appropriately hashtagged with <CODE>#hackalearn</CODE> and <CODE>#hackalearnkorea</CODE>.</LI> <LI>Once confirmed, the reviewer adds the <CODE>review-completed</CODE> label to the PR. Then another GitHub Actions workflow automatically removes the <CODE>review-required</CODE> label from the PR.</LI> <LI>The reviewer completes the review by leaving a comment of <CODE>/socialsignoff</CODE>, and the comment triggers another GitHub Actions workflow. The workflow calls the Power Automate workflow that updates the record on <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A> with the challenge progress.</LI> <LI>The Power Automate workflow calls back to another GitHub Actions workflow to add <CODE>record-updated</CODE> and <CODE>completed-social</CODE> labels to the PR and remove the <CODE>review-completed</CODE> labels from it.</LI> <LI>If there is an issue while updating the record, the GitHub Actions workflow adds the <CODE>review-required</CODE> label so that the assigned reviewer starts review again.</LI> </OL> <P> </P> <H3>GitHub Actions Workflow</H3> <P> </P> <P>As described above, there are five GitHub Actions workflow used to handle this request.</P> <P> </P> <H4>Challenge Update PR</H4> <P> </P> <P>The GitHub Actions workflow is triggered by the participant requesting a new PR. The event triggered is <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#pull_request_target" target="_blank" rel="noopener"><CODE>pull_request_target</CODE></A>, and it's only activated when the changes occur under the <CODE>teams</CODE> directory.</P> <P> </P> <PRE>name: On Challenge Submitted on: pull_request_target: types: - opened branches: - main paths: - 'teams/**/*.md' </PRE> <P> </P> <P>If the PR is created later than the due date and time, the PR should not be accepted. Therefore, A PowerShell script is used to check the due date automatically. Since the PR's <CODE>created_at</CODE> value is the UTC value, it should be converted to the Korean local time, included in the PowerShell script.</P> <P> </P> <PRE>jobs: labelling: name: 'Add a label on submission: review-required' runs-on: ubuntu-latest steps: - name: Get PR date/time id: checkpoint shell: pwsh run: | $tz = [TimeZoneInfo]::FindSystemTimeZoneById("Asia/Seoul") $dateSubmitted = [DateTimeOffset]::Parse("${{ github.event.pull_request.created_at }}") $offset = $tz.GetUtcOffset($dateSubmitted) $dateSubmitted = $dateSubmitted.ToOffset($offset) $dateDue = $([DateTimeOffset]::Parse("2021-08-16T00:00:00.000+09:00")) $isOverdue = "$($dateSubmitted -gt $dateDue)".ToLowerInvariant() $dateSubmittedValue = $dateSubmitted.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz") $dateDueValue = $dateDue.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz") echo "::set-output name=dateSubmitted::$dateSubmittedValue" echo "::set-output name=dateDue::$dateDueValue" echo "::set-output name=isOverdue::$isOverdue" </PRE> <P> </P> <P>If the PR is over the due, it's immediately rejected and closed.</P> <P> </P> <PRE> - name: Add a label - Overdue if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} uses: buildsville/add-remove-label@v1 with: token: "${{ secrets.GITHUB_TOKEN }}" label: 'OVERDUE-SUBMIT' type: add - name: Comment to PR - Overdue if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} uses: bubkoo/auto-comment@v1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pullRequestOpened: | 👋🏼 @{{ author }} 님! * PR 제출 시각: ${{ steps.checkpoint.outputs.dateSubmitted }} * PR 마감 시각: ${{ steps.checkpoint.outputs.dateDue }} 안타깝게도 제출하신 PR은 마감 기한인 ${{ steps.checkpoint.outputs.dateDue }}을 넘기셨습니다. 😭 따라서, 이번 HackaLearn 이벤트에 반영되지 않습니다. 그동안 HackaLearn 이벤트에 참여해 주셔서 감사 드립니다. 다음 기회에 다시 만나요! - name: Close PR - Overdue if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} uses: superbrothers/close-pull-request@v3 with: comment: "제출 기한 종료" </PRE> <P> </P> <P>If it's before the due, label the PR, leave a comment and randomly assign a reviewer.</P> <P> </P> <PRE> - name: Add a label if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} uses: actions/labeler@v3 with: repo-token: "${{ secrets.GITHUB_TOKEN }}" configuration-path: '.github/labeler.yml' - name: Comment to PR if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} uses: bubkoo/auto-comment@v1 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} pullRequestOpenedReactions: 'rocket, +1' pullRequestOpened: > 👋🏼 @{{ author }} 님! 챌린지 완료 PR를 생성해 주셔서 감사합니다! 🎉 참가자님의 해커톤 완주를 응원해요! 💪🏼 PR 템플릿 작성 가이드라인을 잘 준수하셨는지 확인해주세요. 최대한 빠르게 리뷰하겠습니다! 😊 🔹 From. HackaLearn 운영진 일동 🔹 - name: Randomly assign a staff if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} uses: gerardabello/auto-assign@v1.0.1 with: github-token: "${{ secrets.GITHUB_TOKEN }}" number-of-assignees: 1 assignee-pool: "${{ secrets.PR_REVIEWERS }}" </PRE> <P> </P> <H4>Challenge Review Completed</H4> <P> </P> <P>The assigned reviewer confirms the challenge and labels the result. This labelling action triggers the following GitHub Actions workflow.</P> <P> </P> <PRE>name: On Challenge Labelled on: pull_request_target: types: - labeled - unlabeled jobs: labelling: name: 'Update a label' runs-on: ubuntu-latest steps: - name: Respond to label uses: dessant/label-actions@v2 with: process-only: prs </PRE> <P> </P> <H4>Challenge Review Approval</H4> <P> </P> <P>Commenting like <CODE>/socialsignoff</CODE> for the social media post challenge automatically triggers the following GitHub Actions workflow, with the event of <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#issue_comment" target="_blank" rel="noopener"><CODE>issue_comment</CODE></A>.</P> <P> </P> <PRE>name: On Challenge Review Commented on: issue_comment: types: - created </PRE> <P> </P> <P>The first step of this workflow is to check whether the commenter is the assigned reviewer, then find out which challenge is approved. The <CODE>review-completed</CODE> label MUST exist on the PR, and the commenter MUST be in the reviewer list (<CODE>secrets.PR_REVIEWERS</CODE>).</P> <P> </P> <PRE>env: PR_REVIEWERS: ${{ secrets.PR_REVIEWERS }} jobs: signoff: if: ${{ github.event.issue.pull_request }} name: 'Sign-off challenge' runs-on: ubuntu-latest steps: - name: Get checkpoints id: checkpoint shell: pwsh run: | $hasValidLabel = "${{ contains(github.event.issue.labels.*.name, 'review-completed') }}" $isCommenterAssignee = "${{ github.event.comment.user.login == github.event.issue.assignee.login }}" $isValidCommenter = "${{ contains(env.PR_REVIEWERS, github.event.comment.user.login) }}" $isAswaSignoff = "${{ github.event.comment.body == '/aswasignoff' }}" $isGhaSignoff = "${{ github.event.comment.body == '/ghasignoff' }}" $isSocialSignoff = "${{ github.event.comment.body == '/socialsignoff' }}" $isAppSignoff = "${{ github.event.comment.body == '/appsignoff' }}" $isRepoSignoff = "${{ github.event.comment.body == '/reposignoff' }}" $isRetroSignoff = "${{ github.event.comment.body == '/retrosignoff' }}" $timestamp = "${{ github.event.comment.created_at }}" echo "::set-output name=hasValidLabel::$hasValidLabel" echo "::set-output name=isCommenterAssignee::$isCommenterAssignee" echo "::set-output name=isValidCommenter::$isValidCommenter" echo "::set-output name=isAswaSignoff::$isAswaSignoff" echo "::set-output name=isGhaSignoff::$isGhaSignoff" echo "::set-output name=isSocialSignoff::$isSocialSignoff" echo "::set-output name=isAppSignoff::$isAppSignoff" echo "::set-output name=isRepoSignoff::$isRepoSignoff" echo "::set-output name=isRetroSignoff::$isRetroSignoff" echo "::set-output name=timestamp::$timestamp" </PRE> <P> </P> <P>If all conditions are met, the workflow takes one action based on the type of the challenge. Each action calls a Power Automate workflow to update the record on <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>, send a confirmation email, and calls back to another GitHub Actions workflow.</P> <P> </P> <PRE>- name: Record challenge ASWA if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isAswaSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "aswa", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge GHA if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isGhaSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "gha", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge SOCIAL if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isSocialSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "social", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge APP if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isAppSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "app", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge REPO if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isRepoSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "repo", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' - name: Record challenge RETRO if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isRetroSignoff == 'true' }} uses: joelwmale/webhook-action@2.1.0 with: url: ${{ secrets.FLOW_URL }} body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "retro", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' </PRE> <P> </P> <H4>Challenge Complete or Further Review</H4> <P> </P> <P>This GitHub Actions workflow completes the challenge, triggered by a Power Automate workflow through the <A href="https://docs.github.com/en/github-ae@latest/actions/reference/events-that-trigger-workflows#workflow_dispatch" target="_blank" rel="noopener"><CODE>workflow_dispatch</CODE></A> event. Power Automate sends values of <CODE>prId</CODE>, <CODE>labelsToAdd</CODE>, <CODE>labelsToRemove</CODE> and <CODE>isMergeable</CODE>.</P> <P> </P> <PRE>name: On Challenge Completed on: workflow_dispatch: inputs: prId: description: PR ID required: true default: '' labelsToAdd: description: The comma delimited labels to add required: true default: record-updated labelsToRemove: description: The comma delimited labels to remove required: true default: review-completed isMergeable: description: The value indicating whether the challenge is mergeable or not. required: true default: 'false' </PRE> <P> </P> <P>The first action is to add labels to the PR and remove labels from the PR.</P> <P> </P> <PRE>jobs: update_labels: name: 'Update labels' runs-on: ubuntu-latest steps: - name: Update labels on PR shell: pwsh run: | $headers = @{ "Authorization" = "token ${{ secrets.GITHUB_TOKEN }}"; "User-Agent" = "HackaLearn Bot"; "Accept" = "application/vnd.github.v3+json" } $owner = "devrel-kr" $repository = "HackaLearn" $issueId = "${{ github.event.inputs.prId }}" $labelsToAdd = "${{ github.event.inputs.labelsToAdd }}" -split "," $body = @{ "labels" = $labelsToAdd } $url = "https://api.github.com/repos/$owner/$repository/issues/$issueId/labels" Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $($body | ConvertTo-Json) $labelsToRemove = "${{ github.event.inputs.labelsToRemove }}" -split "," $labelsToRemove | ForEach-Object { $label = $_; $url = "https://api.github.com/repos/$owner/$repository/issues/$issueId/labels/$label"; Invoke-RestMethod -Method Delete -Uri $url -Headers $headers } </PRE> <P> </P> <P>And finally, this action merges the PR. If there's an error on the Power Automate workflow side, the <CODE>isMeargeable</CODE> value MUST be <CODE>false</CODE>, meaning it won't execute the merge action.</P> <P> </P> <PRE> merge_pr: name: 'Merge PR' needs: update_labels runs-on: ubuntu-latest steps: - name: Merge PR if: ${{ github.event.inputs.isMergeable == 'true' }} shell: pwsh run: | $headers = @{ "Authorization" = "token ${{ secrets.WORKFLOW_DISPATCH_TOKEN }}"; "User-Agent" = "HackaLearn Bot"; "Accept" = "application/vnd.github.v3+json" } $owner = "devrel-kr" $repository = "HackaLearn" $issueId = "${{ github.event.inputs.prId }}" $url = "https://api.github.com/repos/$owner/$repository/pulls/$issueId" $pr = Invoke-RestMethod -Method Get -Uri $url -Headers $headers $sha = $pr.head.sha $title = "" $message = "" $merge = "squash" $body = @{ "commit_title" = $title; "commit_message" = $message; "sha" = $sha; "merge_method" = $merge; } $url = "https://api.github.com/repos/$owner/$repository/pulls/$issueId/merge" Invoke-RestMethod -Method Put -Uri $url -Headers $headers -Body $($body | ConvertTo-Json) </PRE> <P> </P> <H3>Power Automate Workflow</H3> <P> </P> <P>The challenge approval workflow calls this Power Automate workflow. Firstly, it checks the type of challenges. If no challenge is identified, it does nothing.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-08.png" border="0" alt="Challenge Update Flow 1" /></P> <P> </P> <P>If the challenge is linked to the registered participant's GitHub ID, update the record on <A href="https://www.microsoft.com/microsoft-365/microsoft-lists?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft Lists</A>; otherwise, do nothing.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-09.png" border="0" alt="Challenge Update Flow 2" /></P> <P> </P> <P>Finally, it sends a confirmation email using a different email template based on the number of challenges completed.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-10.png" border="0" alt="Challenge Update FLow 3" /></P> <P> </P> <H2>The Others: Other Power Automate Workflows</H2> <P> </P> <P>Previously described Power Automate workflows are triggered by GitHub Actions for integration. However, there are other workflows only for management purposes. As most processes are similar to each other, I'm not going to describe them all. Instead, it's the total number of workflows that I used for the event, which is 15 in total.</P> <P> </P> <P><IMG src="https://sa0blogs.blob.core.windows.net/devkimchi/2021/08/running-hackathon-by-yourself-with-gha-m365-and-pp-04.png" border="0" alt="List of Power Automate Workflows" /></P> <P> </P> <P>Now all my business processes are fully automated. As an operator, I can focus on questions and PR reviews, but nothing else.</P> <P> </P> <H2>The Stats</H2> <P> </P> <P>The HackaLearn even was over! Here are some numbers related to this HackaLearn event.</P> <P> </P> <UL> <LI><CODE>14</CODE>: Number of days for HackaLearn</LI> <LI><CODE>171</CODE>: Total number of participants</LI> <LI><CODE>62</CODE>: Total number of participants who completed Cloud Skills Challenge</LI> <LI><CODE>21</CODE>: Total number of teams who uploaded social media posts</LI> <LI><CODE>17</CODE>: Total number of teams who completed building Azure Static Web Apps</LI> <LI><CODE>16</CODE>: Total number of teams who completed provided their GitHub repository</LI> <LI><CODE>20</CODE>: Total number of teams who published their blog post as a retrospective</LI> <LI><CODE>13</CODE>: Total number of teams who completed all six challenges</LI> </UL> <P> </P> <H2>The Lessons Learnt</H2> <P> </P> <P>Surely, there are many spaces for future improvement. What I've learnt from the automation exercise are:</P> <P> </P> <UL> <LI> <P><STRONG>Do not assume the way participants create their PRs is expected</STRONG></P> <P>:backhand_index_pointing_right:</img> The review automation process should be as flexible as possible.</P> </LI> <LI> <P><STRONG>Make the review process as simple as possible</STRONG></P> <P>:backhand_index_pointing_right:</img> The reviewers should only be required to focus on the PR, not anything else.</P> </LI> <LI> <P><STRONG>Reviewer should be assigned to a team instead of individual PRs</STRONG></P> <P>:backhand_index_pointing_right:</img> If a reviewer is assigned to a team, the chance for merge conflicts will dramatically decrease.</P> </LI> <LI> <P><STRONG>Make Power Automate workflows as modular as possible</STRONG></P> <P>:backhand_index_pointing_right:</img> There are many similar sequence of actions across many workflows.<BR />:backhand_index_pointing_right:</img> They can be modularised into either sub-workflows or custom APIs through custom connectors.</P> </LI> </UL> <P> </P> <H2>The Side Events</H2> <P> </P> <P>During the event, we ran live hands-on workshops for <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A> and <A href="https://docs.microsoft.com/azure/static-web-apps/overview?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Azure Static Web Apps</A> led by a <A href="https://githubcampus.expert" target="_blank" rel="noopener">GCE</A> and an <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">MLSA</A> respectively.</P> <P> </P> <UL> <LI> <P>Live Hands-on: GitHub Actions (in Korean)</P> <P><IFRAME src="https://www.youtube.com/embed/e_elLW6uNSc" width="710" height="399" allowfullscreen="allowfullscreen" loading="lazy"></IFRAME></P> </LI> <LI> <P>Live Hands-on: Azure Static Web Apps (in Korean)</P> <P><IFRAME src="https://www.youtube.com/embed/Hxkv6AjAisY" width="710" height="399" allowfullscreen="allowfullscreen" loading="lazy"></IFRAME></P> </LI> <LI> <P>Live Hands-on: Azure Static Web Apps with Headless CMS (in Korean)</P> <P><IFRAME src="https://www.youtube.com/embed/x3j3mDblqMY" width="710" height="399" allowfullscreen="allowfullscreen" loading="lazy"></IFRAME></P> </LI> </UL> <P> </P> <HR /> <P> </P> <P>So far, I summarised what I've learnt from this event and what I've done for workflow automation, using <A href="https://github.com/features/actions" target="_blank" rel="noopener">GitHub Actions</A>, <A href="https://www.microsoft.com/microsoft-365?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Microsoft 365</A> and <A href="https://flow.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">Power Automate</A>. Although there are lots of spaces to improve, I managed to run the online hackathon event with a fully automated process. I can now do it again in the future.</P> <P> </P> <P>Specially thanks to <A href="https://studentambassadors.microsoft.com/?WT.mc_id=power-39037-juyoo" target="_blank" rel="noopener">MLSAs</A> and <A href="https://githubcampus.expert" target="_blank" rel="noopener">GCEs</A> to review all the PRs, and mentors who answered questions from participants. Without them, regardless of the fully automated workflows, this event wouldn't be successfully running.</P> <P> </P> <P style="text-align: center;">This article was originally published on <A href="https://devkimchi.com/2021/08/20/running-hackathon-by-yourself-with-gha-m365-and-pp/" target="_blank" rel="noopener">Dev Kimchi</A>.</P></description> <pubDate>Mon, 23 Aug 2021 00:00:00 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hackathon-as-a-service-with-github-actions-microsoft-365-and/ba-p/2671063</guid> <dc:creator>justinyoo</dc:creator> <dc:date>2021-08-23T00:00:00Z</dc:date> ... </item> <item> <title>New module: Build Serverless apps with Azure and Go</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-build-serverless-apps-with-azure-and-go/ba-p/2662657</link> <description><P><SPAN>Serverless architecture is a type of application development that allows you to run logic in the cloud without having to worry about building server infrastructure. Azure Functions implements a serverless architecture that runs your code on demand without requiring you to manually provision servers.</SPAN></P> <P> </P> <P><SPAN>To author Azure Functions in Go or Rust, for example, you use a feature called custom handlers. Custom handlers allow you to bring almost any language to Azure Functions.</SPAN></P> <P> </P> <H2 id="what-are-custom-handlers">What are custom handlers?</H2> <P>At its core, a custom handler is a web server. The web server receives events from the Functions host. You then have an opportunity to write code in your preferred language to respond to the events.</P> <P>With custom handlers, you can use any language that supports HTTP primitives. That's nearly any language.</P> <P> </P> <H2>An Azure Function app using Go</H2> <P> </P> <P>To create such an app, you only need to listen to HTTP events + make some minor configurations. Here's an example of what the code looks like:</P> <P> </P> <P> </P> <LI-CODE lang="bash">package main import ( "fmt" "io/ioutil" "log" "net/http" "os" ) func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { w.Write([]byte("hello world")) } else { body, _ := ioutil.ReadAll(r.Body) w.Write(body) } } func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() // mux.HandleFunc("/api/hello", helloHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }</LI-CODE> <P> </P> <P> </P> <P>To learn more about how to configure the app properly and work with things like message queues, have a look at this module</P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/serverless-go/" target="_blank" rel="noopener">Build serverless apps with Go and custom handlers - Learn | Microsoft Docs</A></P> <P> </P></description> <pubDate>Fri, 03 Dec 2021 18:53:58 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-build-serverless-apps-with-azure-and-go/ba-p/2662657</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-12-03T18:53:58Z</dc:date> ... </item> <item> <title>API Management, Power Platform, & Teams Better Together</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/api-management-power-platform-amp-teams-better-together/ba-p/2642915</link> <description><P aria-level="2"><STRONG><SPAN data-contrast="none">API Management, Power Platform, & Teams Better Together</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P aria-level="2"><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure demonstrates the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘API Management, Power Platform & Teams: Better Together.’</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">In this blog I will briefly recap </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, providing an overview of Power Platform Development patterns, an overview of Azure API Management, and Geetha Sivasailam’s demo of API Management’s integration with Power Platform.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P aria-level="2"><STRONG><SPAN data-contrast="none">What is Low-code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1628801638874.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302877i1AC48058FF6D4C09/image-size/large?v=v2&px=999" role="button" title="riduncan_0-1628801638874.png" alt="riduncan_0-1628801638874.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees track incoming inventory.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">To learn more, visit the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">LCAD on Azure page</SPAN></A><SPAN data-contrast="none">, and to walk through the aforementioned scenario try the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank"><SPAN data-contrast="none">LCAD on Azure guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_1-1628801638894.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302879i4E2C3ECC5C917E72/image-size/medium?v=v2&px=400" role="button" title="riduncan_1-1628801638894.jpeg" alt="riduncan_1-1628801638894.jpeg" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Power Platform Development Patterns</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Expounding on the explanation of low code application development on Azure, there are other ways to build low code applications. Below you will see 3 infographics, the first demonstrates the out-of-box capabilities of Power Platform. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The “clients” are the devices on which the end user consumes the UI and logic, typically a web and mobile device. The UI and logic are built in Power Apps and Power Automate, these are the canvas apps and workflow screens that you will see in Geetha’s demo.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The UI and logic are built upon the data either stored in Dataverse or connected to 1</SPAN><SPAN data-contrast="auto">st</SPAN><SPAN data-contrast="auto"> and 3</SPAN><SPAN data-contrast="auto">rd</SPAN><SPAN data-contrast="auto"> party services such as SharePoint, Office 365, and Twitter as seen below. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1628801638896.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302878iA662FE39CF862134/image-size/large?v=v2&px=999" role="button" title="riduncan_2-1628801638896.png" alt="riduncan_2-1628801638896.png" /></span></P> <P><SPAN data-contrast="auto">However, as alluded to in the opening section, there are times professional development is necessary. This is typically because the low code application requires connectivity that doesn’t come out of the box. These are what are referred to as custom connectors.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">There are 5 steps to building a custom connector. First is building and securing your API, describing that API and defining the connector, using your connector, and if you feel inclined you can share and certify that connector.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">If you’re looking to learn how to build a custom connector inside a Power App, check out the documentation on </SPAN><A href="https://docs.microsoft.com/en-us/connectors/custom-connectors/define-blank" target="_blank"><SPAN data-contrast="none">Create a custom connector from scratch | Microsoft Docs.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1628801638898.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302881i660F447BC71F54E7/image-size/large?v=v2&px=999" role="button" title="riduncan_3-1628801638898.png" alt="riduncan_3-1628801638898.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, one of the ways Microsoft is enabling low code application development to be leveraged further you can use Power Apps and Power Automate in Teams. Custom connectors can be exposed to apps in Teams via Azure API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">To build the API Management connector from scratch you create a test API, add an operation to the test API, add inbound policy to mock API response, add definition for API response schema, secure API Management with subscription keys, export API management as a custom connector to a Teams environment and consume the API from Power Apps & Power Automate in the same Teams’ environment.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_5-1628801638899.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302880i529BA1F8E84A3AA9/image-size/large?v=v2&px=999" role="button" title="riduncan_5-1628801638899.png" alt="riduncan_5-1628801638899.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">If you already have Teams subscriptions, Power Apps licenses, and Azure API Management subscriptions there is no additional cost to import your custom connectors in Teams. </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="APIM-to-Teams.gif" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302887i96D8DDB62A37ADEF/image-size/large?v=v2&px=999" role="button" title="APIM-to-Teams.gif" alt="APIM-to-Teams.gif" /></span></SPAN></P> <P> </P> <P> </P> <P> </P> <P><SPAN data-contrast="auto">This integration enables the end user to access UI and Logic easier and faster than before.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Azure API Management Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">In this webinar Geetha does a great job covering the benefits of Azure API Management. For those unfamiliar with Azure API Management, it is a SaaS solution for controlling access and governance nearly maintenance free.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">It allows you to manage thousands of APIs and backend services, maintenance free, products evolving endpoints evolving you can tweak them. Rather than trying to wrap and maintain APIs you can focus on developing the APIs.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto"> For more information on Azure API Management look at the infographic below and check out Geetha’s </SPAN><A href="https://channel9.msdn.com/Shows/POWERful-Devs/Geetha-Sivasailam-APIM-Power-Platform--Teams-Better-Together" target="_blank"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="auto"> on the POWERful Devs show on Channel 9.</SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_6-1628801638902.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302883i5D0A8F5B524B77DF/image-size/large?v=v2&px=999" role="button" title="riduncan_6-1628801638902.png" alt="riduncan_6-1628801638902.png" /></span></P> <P><STRONG><SPAN data-contrast="auto">Build an Azure APIM Connector and Integration into Power Platform Demo</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Geetha’s demo covers building an APIM connector from scratch in API Management and walks through the perspective of a citizen or pro developer who wants to proceed with implementation and testing of API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The demo covers a scenario in which the API façade has been designed, but the actual back-end implementation will come in later or is being developed in parallel.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">She answers questions such as “how can you mockup API responses and still work with your apps and flow implementation?” “How can you expose a mocked API via APIM as a connector and consume that?” Taking you through how to connect a custom connector in Power Apps and Power Automate.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">She also uses an API service to show the different ways you can create an API and either start from a blank API or start from a definition. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">When starting with a definition you can use an Open API definition, WADL, or WSDL. However, in this demo she shows how to start from a blank API. She subsequently shows the APIMSandbox, shown below.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_7-1628801638904.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302884i1D424C27E32C3C8A/image-size/large?v=v2&px=999" role="button" title="riduncan_7-1628801638904.png" alt="riduncan_7-1628801638904.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto"> In the frontend, she has a “get” action, and demonstrates how to mock the get request with a sample mock text, specifying a “mocktext” definition rather than the raw json you would get otherwise. The inbound processing, outbound processing, and backend are where you can specify and define policies.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_8-1628801638906.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302885i2706824190DCFF60/image-size/large?v=v2&px=999" role="button" title="riduncan_8-1628801638906.png" alt="riduncan_8-1628801638906.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Afterward, Geetha shows how to export the API into Power Apps or Power Automate. All you must do is select your Teams’ environment, specify a name for it and export it.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">She concludes by demonstrating how to consume the API in Power Automate, but that same API can be consumed in Power Apps as well.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_9-1628801638905.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/302886iED4C68C493B1F7F3/image-size/large?v=v2&px=999" role="button" title="riduncan_9-1628801638905.png" alt="riduncan_9-1628801638905.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG></P> <P><SPAN data-contrast="none">Make sure to watch the </SPAN><A href="https://channel9.msdn.com/Shows/POWERful-Devs/Geetha-Sivasailam-APIM-Power-Platform--Teams-Better-Together" target="_blank"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="none"> on Channel 9 subscribe to the POWERful Devs channel to learn more about Power Platform and Azure integrations. Moreover, look out for news about the POWERful Devs conference this September which will cover the roles of citizen developers, professional developers, and fusion teams.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Resources</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Channel 9: POWERful Devs link</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://channel9.msdn.com/Shows/POWERful-Devs/Geetha-Sivasailam-APIM-Power-Platform--Teams-Better-Together" target="_blank"><SPAN data-contrast="none">Geetha Sivasailam - APIM, Power Platform & Teams Better Together | POWERful Devs | Channel 9 </SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Low Code Application Development on Azure</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN> <BR /></SPAN><A href="https://azure.microsoft.com/en-us/products/powerapps/" target="_blank"><SPAN data-contrast="none">Microsoft Power Apps on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank"><SPAN data-contrast="none">LCAD on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Learning Resources</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="http://aka.ms/fusiondevpath" target="_blank"><SPAN data-contrast="none">Fusion Development learning path</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_blank"><SPAN data-contrast="none">Fusion Development E-book</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://aka.ms/ppcvscode" target="_blank"><SPAN data-contrast="none">Power Platform Visual Studio Extension</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P></description> <pubDate>Thu, 12 Aug 2021 21:31:50 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/api-management-power-platform-amp-teams-better-together/ba-p/2642915</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-08-12T21:31:50Z</dc:date> ... </item> <item> <title>Build Custom Apps with Power Apps Component Framework</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-custom-apps-with-power-apps-component-framework/ba-p/2588515</link> <description><P aria-level="2"><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘Build Custom Power Apps with Power Apps Component Framework.’</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In this blog I will briefly recap </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, provide an overview of how to build a code component, and how to add a PCF to a Power App.</SPAN></P> <P> </P> <P aria-level="2"><STRONG><SPAN data-contrast="none">What is Low-code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1627332157351.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298493i043FCD2B1E002D5D/image-size/large?v=v2&px=999" role="button" title="riduncan_0-1627332157351.png" alt="riduncan_0-1627332157351.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees track incoming inventory.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">To learn more, visit the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure page</SPAN></A><SPAN data-contrast="none">, and to walk through the aforementioned scenario try the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_1-1627332157359.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298494i9BBBE1E2B225B65F/image-size/large?v=v2&px=999" role="button" title="riduncan_1-1627332157359.jpeg" alt="riduncan_1-1627332157359.jpeg" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">How to Build a Code Component</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">Power Component Frameworks are custom code components that extend your application when out-of-the-box connectors don’t fully meet your needs. These code components are reusable that can be leveraged across Power Apps applications.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">These components are all HTML or JavaScript but can support React and AngularJS as well. For those interested after reading this blog and watching the webinar, there is a PCF gallery that houses PCFs made by Microsoft developers and the Power Apps community, for any developer to leverage.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Feel free to add your own PCFs to the </SPAN><A href="https://pcf.gallery/" target="_blank" rel="noopener"><SPAN data-contrast="none">gallery!</SPAN></A></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Code components consist of three elements:</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">First is the manifest, an XML document that describes the meta data for the component.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Second is component implementation. To implement the component, the metadata is stored in the index.ts, also housing the logic. Additionally, there is a lifecycle to interact with the Power Apps component or framework.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Therefore, some methods will need to be created to control the lifecycle of the code component. Those methods are created when you “init” the project through the CLI.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Third are the resources; tags in the manifest that refer to the resource that the component requires to implement its’ visualization. Examples are css, code, img, html, and resx.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">To better understand the PCF architecture below is an infographic describing the four standard methods created for you when you “init” the project through the CLI.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1627332157361.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298495i689358527821CA7B/image-size/large?v=v2&px=999" role="button" title="riduncan_2-1627332157361.png" alt="riduncan_2-1627332157361.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">The next infographic depicts how the methods are invoked through a Framework Runtime process in a standardized life cycle.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1627332157363.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/298496i3F37B5686AE47466/image-size/large?v=v2&px=999" role="button" title="riduncan_3-1627332157363.png" alt="riduncan_3-1627332157363.png" /></span></P> <P> </P> <P aria-level="2"><STRONG><SPAN data-contrast="none">What to expect in the webinar? </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">In the webinar </SPAN><SPAN data-contrast="auto">Cassie Breviu walks you step by step on how to build a PCF in CLI and Visual Studio that adds a slider component for Power Apps. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">The end user can leverage the slider when accounting for inventory, inputting customer order quantities, or a host of other use cases. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">That is one of the great benefits of PCFs, that they are reusable across Power Apps for a variety of use cases. </SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="auto">Prior to importing the PCF into her Power App, Cassie will also demonstrate the necessary steps in the Power Platform Admin Center to secure her component and set the proper governance regulations.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":276}"> </SPAN></P> <P aria-level="2"><STRONG><SPAN data-contrast="none">Summary </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":276}"> </SPAN></P> <P><SPAN data-contrast="none">Make sure to watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-build-apps-Powerapps-component-framework.html?lcid=en-us" target="_blank" rel="noopener"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="none"> to learn more Power Apps and Power Component Frameworks. Moreover, look out for news about the POWERful Devs conference this September which will cover the roles of citizen developers, professional developers, and fusion teams.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Resources</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Webinar Registration Link</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://info.microsoft.com/ww-Landing-build-apps-Powerapps-component-framework.html?lcid=en-us" target="_blank" rel="noopener"><SPAN data-contrast="none">Build Custom Apps</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Low Code Application Development on Azure</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN> <BR /></SPAN><A href="https://azure.microsoft.com/en-us/products/powerapps/" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Power Apps on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":276}"> </SPAN></P> <P><STRONG>Learning Resources</STRONG></P> <P><A href="http://aka.ms/fusiondevpath" target="_self"><STRONG>Fusion Development learning path</STRONG></A></P> <P><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_self"><STRONG>Fusion Development E-book</STRONG></A></P> <P><A href="https://aka.ms/ppcvscode" target="_self"><STRONG>Power Platform Visual Studio Extension</STRONG></A></P> <P> </P></description> <pubDate>Thu, 12 Aug 2021 20:46:04 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-custom-apps-with-power-apps-component-framework/ba-p/2588515</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-08-12T20:46:04Z</dc:date> ... </item> <item> <title>Winners Announced: Azure IoT Hack for Sustainability</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-iot-hack-for-sustainability/ba-p/2573056</link> <description><P>Over 300 developers gathered virtually over the course of 7 weeks to participate in the <A href="https://iotsustainabilityhack.devpost.com/" target="_blank" rel="noopener">Microsoft Azure IoT Hack for Sustainability</A> challenge. Participants were asked to join Microsoft in advancing sustainability by understanding how to use technology to measure and minimize environmental impact. The hackathon specifically focused on using Azure IoT technologies that will give endless possibilities: collect real time data, capture rich information using cameras and machine learnings, create real time insights, and automated action without human intervention. </P> <P> </P> <P>Let's take a look at the top 6 winning projects below:</P> <P> </P> <P><FONT size="5"><STRONG><U>1st Place:<A href="https://devpost.com/software/stemm-network" target="_blank" rel="noopener"> STEM Network</A></U></STRONG></FONT></P> <P>Created by: Advyth Ramachandran, Pranav Bhusari, Joshua Qin, Justin Shao</P> <P>The STEM Network - Street Tree Monitoring Network - consists of moisture sensors for public/municipal trees, designed to reduce the mortality of saplings and improve urban reforestation outcomes.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=cFhvWSK0l2M" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/cFhvWSK0l2M/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><STRONG><U>2nd Place:<A href="https://devpost.com/software/air_quality_bonanza" target="_blank" rel="noopener"> Air Quality Dashboard Analytics</A></U></STRONG></FONT></P> <P>Created by: Tarun Hari, William Short, Michael Huang, Martin Fabbri</P> <P>Empowered by the Azure Maps and IoT Platforms, the Air Quality Dashboard Analytics deliver actionable insights to citizens, homeowners, and cities. Think Trulia's crime maps, but for Air Quality!</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=uzA7f0Z_o9A" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/uzA7f0Z_o9A/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><STRONG><U>3rd Place:<A href="https://devpost.com/software/aquasave-ey6f2u" target="_blank" rel="noopener"> AquaSave</A></U></STRONG></FONT></P> <P>Created by: Aparna Ghantasala, Alexandra Talsky, Praveen Chandra, Ryan Curtis, Amarnath Tadigadapa</P> <P>Motivating people to recycle water and minimize water consumption, so that communities can work towards a water-positive future.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=61w27Fo2slQ" align="center" size="small" width="200" height="113" uploading="false" thumbnail="http://i.ytimg.com/vi/61w27Fo2slQ/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><STRONG><U>Honorable Mentions</U></STRONG></FONT></P> <P><FONT size="5"><U><STRONG><A href="https://devpost.com/software/hydrofarm" target="_blank" rel="noopener">HydroFarm</A></STRONG></U></FONT></P> <P>Created by: Germaine Ng, Wesley Muthemba, Yifei Fang, Guanting Li, Hernan Herrera</P> <P>About 70 percent of all the world's freshwater withdrawals go towards irrigation uses. HydroFarm aims to improve water use efficiency without decreasing yield.</P> <P> </P> <P><A href="https://devpost.com/software/the-smart-valve-2049" target="_blank" rel="noopener"><FONT size="5"><STRONG><U>The Smart Valve 2049</U></STRONG></FONT></A></P> <P>Created by: Derek Jamison, Brian Dinh</P> <P>State-of-the-art water management using Azure IoT Central, Azure Logic Apps, Web APIs & Raspberry Pi (plus sensors). Your outdoor plants are watered based on needs (moisture, weather, forecast, etc).</P> <P> </P> <P><A href="https://devpost.com/software/foodcy-v2fi8k" target="_blank" rel="noopener"><FONT size="5"><STRONG><U>Foodcy</U></STRONG></FONT></A></P> <P>Created by: Miko Aro</P> <P>Foodcy app connects local businesses like bakeries and supermarkets with residents and local shelters so they can reduce surplus food. It also uses AI technology to reduce food waste in the kitchen.</P> <P> </P> <P><U><STRONG><FONT size="5">Thank You</FONT></STRONG></U></P> <P>On behalf of the Microsoft U.S. Azure team, I'd like to thank all of the participants, and congratulate the winners on a job well done!</P> <P> </P> <P>Thank you to the judges who volunteered their time to give back to the community! Shout out to <STRONG>Amit Agrawal</STRONG> <LI-USER uid="50703"></LI-USER> , <STRONG>Diana Phillips</STRONG>, <STRONG>Lucio Tiberi</STRONG>, <STRONG>Monica Rodriquez</STRONG>, <STRONG>Pamela Cortez</STRONG> <LI-USER uid="263511"></LI-USER> , <STRONG>Rae Lyon</STRONG> <LI-USER uid="685674"></LI-USER> , <STRONG>Sarah Maston</STRONG> <LI-USER uid="153349"></LI-USER> </P> <P> </P> <P><U><STRONG><FONT size="5">Coming up</FONT></STRONG></U></P> <P>Don't miss out on future hackathon events! Sign up for the <A href="https://azure.microsoft.com/en-us/resources/join-the-azure-developer-community/" target="_blank" rel="noopener">Microsoft.Source Newsletter</A> to receive a regular digest of relevant technical content, events, and training.</P> <P> </P></description> <pubDate>Wed, 21 Jul 2021 21:55:41 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/winners-announced-azure-iot-hack-for-sustainability/ba-p/2573056</guid> <dc:creator>NinaSui</dc:creator> <dc:date>2021-07-21T21:55:41Z</dc:date> ... </item> <item> <title>New LEARN modules: Write your first code in F#, Write your first F# programs</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learn-modules-write-your-first-code-in-f-write-your-first-f/ba-p/2569795</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-07-21 at 11.42.54.png" style="width: 747px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297341i627E194D17ACB625/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-07-21 at 11.42.54.png" alt="Screenshot 2021-07-21 at 11.42.54.png" /></span></P> <P>F# is an open-source, cross-platform programming language that makes it easy to write succinct, performant, robust, and practical code.</P> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#%C2%A0references" target="_blank" rel="noopener" name="%C2%A0references"></A>References</H2> <P> </P> <UL> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The first F# module of many was just published on LEARN, check it out<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-steps/" target="_blank">Take your first steps with F#</A></LI> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The second module just published.<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-program/" target="_blank">Write your first F# programs</A></LI> <LI><A href="https://docs.microsoft.com/en-us/dotnet/fsharp/" target="_blank">F# docs</A></LI> </UL> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#%C2%A0why-f" target="_blank" rel="noopener" name="%C2%A0why-f"></A> </H2> <H2>Why F#?</H2> <P>There are many language features and aspects of the F# language that make it easy to be productive when writing code:</P> <UL> <LI><STRONG>Succinct</STRONG>: You write less code with F# that's also expressed in a clear manner.</LI> <LI><STRONG>Performant</STRONG>: F# comes with built-in parallelism and concurrency. It also uses the fact that it's part of the .NET runtime to speed things up.</LI> <LI><STRONG>Robust</STRONG>: There are language constructs that makes the code fault tolerant and robust like immutable by default, null value management and more.</LI> <LI><STRONG>Supports multiple programming paradigms</STRONG>: F# lets you choose the patterns and practices most effective for solving problems by providing strong support for functional and object programming paradigms.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#how-do-i-get-started" target="_blank" rel="noopener" name="how-do-i-get-started"></A>How do I get started?</H2> <P>There are a few things you need to get started.</P> <UL> <LI><STRONG>.NET SDK</STRONG>. You need to install the .NET SDK to be able to buiild, run, test and also create F# projects. You can find the<SPAN> </SPAN><A href="https://dotnet.microsoft.com/download" target="_blank" rel="noopener">F# SDK install</A><SPAN> </SPAN>here</LI> <LI><STRONG>Ionide</STRONG>. It's a VS Code plugin. It's not necessary to install, but it will give you things like Intellisense, tooltips, codelens, error highlight and more.</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#your-first-code" target="_blank" rel="noopener" name="your-first-code"></A>Your first code</H2> <P>You can start writing F# by using the REPL called FSI, you can also scaffold an F# project using the<SPAN> </SPAN><CODE>dotnet</CODE><SPAN> </SPAN>executable.</P> <H3><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#create-a-project" target="_blank" rel="noopener" name="create-a-project"></A>Create a project</H3> <P>You create a project using<SPAN> </SPAN><CODE>dotnet</CODE><SPAN> </SPAN>like so:</P> <P> </P> <LI-CODE lang="bash">dotnet new console --language F# -o MyFSharpApp</LI-CODE> <P> </P> <P> </P> <P>Then you get a project with files:</P> <UL> <LI><STRONG>Program.fs</STRONG>, your entrypoint file</LI> <LI><STRONG>MyFSharpApp.csproj</STRONG>, your project file that contains everything it needs to know to build the project like dependencies for example.</LI> </UL> <H3><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#what-does-the-code-look-like" target="_blank" rel="noopener" name="what-does-the-code-look-like"></A>What does the code look like?</H3> <P>Here you have the code of<SPAN> </SPAN><EM>Program.fs</EM>. Itt contains the functions<SPAN> </SPAN><CODE>from()</CODE><SPAN> </SPAN>and<SPAN> </SPAN><CODE>main()</CODE>.<SPAN> </SPAN><CODE>main()</CODE><SPAN> </SPAN>is the entry point of the app, as seen by<SPAN> </SPAN><CODE>[<EntryPoint>]</CODE>.</P> <P> </P> <LI-CODE lang="fsharp">open System // Define a function to construct a message to print let from whom = sprintf "from %s" whom [<EntryPoint>] let main argv = let message = from "F#" // Call the function printfn "Hello world %s" message 0 // return an integer exit code</LI-CODE> <P> </P> <P>The<SPAN> </SPAN><CODE>from()</CODE><SPAN> </SPAN>function takes the arg<SPAN> </SPAN><CODE>whom</CODE><SPAN> </SPAN>and the function body prints a string using the function<SPAN> </SPAN><CODE>sprintf</CODE>.</P> <H2> </H2> <H2><A href="https://dev.to/azure/write-your-first-code-in-f-36gl#how-do-i-learn-more" target="_blank" rel="noopener" name="how-do-i-learn-more"></A>How do I learn more?</H2> <P> </P> <UL> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The first F# module of many was just published on LEARN, check it out<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-steps/" target="_blank">Take your first steps with F#</A></LI> <LI><STRONG>LEARN module</STRONG><SPAN> </SPAN>The second module just published.<SPAN> </SPAN><A href="https://docs.microsoft.com/en-gb/learn/modules/fsharp-first-program/" target="_blank">Write your first F# programs</A></LI> <LI><A href="https://docs.microsoft.com/en-us/dotnet/fsharp/" target="_blank">F# docs</A></LI> </UL></description> <pubDate>Fri, 23 Jul 2021 10:36:18 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-learn-modules-write-your-first-code-in-f-write-your-first-f/ba-p/2569795</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-07-23T10:36:18Z</dc:date> ... </item> <item> <title>An Illustrated Guide to Fusion Development</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-illustrated-guide-to-fusion-development/ba-p/2567146</link> <description><P><FONT size="5">1. Introduction<BR /></FONT></P> <P><FONT size="4">If you've attended any flagship Microsoft event, you've likely heard CEO Satya Nadella talk about <STRONG>Tech Intensity</STRONG> and the importance of <STRONG>Fusion teams </STRONG>for digital transformation at scale. But what do those words mean? And how does this relate to concepts like <STRONG>low-code development</STRONG> and related technologies like <STRONG>Power Platform</STRONG>? Here are three resources that can help you learn:<BR /><BR /></FONT></P> <OL> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development Learning Path</A></STRONG> - takes you from concepts (fusion teams, low code) to code (Power Apps components, OpenAPI-enabled Web APIs, integration with API Management and usage in Power Apps) with hands-on exercises and knowledge checks.</FONT></LI> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development e-Book</A></STRONG> - a guide that summarizes how fusion teams (of citizen developers and professional developers) can work together to build complex, fully-functional business applications using low-code development techniques, and combining Power Apps with Azure services.</FONT></LI> <LI><FONT size="4"><STRONG><A href="https://aka.ms/AzureFunctionsOnDemand" target="_self">Azure Functions: OpenAPI and Power Platforms Event</A> </STRONG>- a 2-hour live-streamed event with sessions covering core concepts (Power Apps, Power Fx, OpenAPI, Azure Functions) with interactive demos showcasing useful integrations for a fusion development workflow. Click below to visit the event page and watch the session replays!<BR /><BR /><A href="https://aka.ms/AzureFunctionsOnDemand" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AzureFunctionsEventSessions.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297177i47090CD07E885E10/image-size/large?v=v2&px=999" role="button" title="AzureFunctionsEventSessions.png" alt="AzureFunctionsEventSessions.png" /></span></A></FONT></LI> </OL> <P> </P> <P><FONT size="5">2. An Illustrated Guide to Fusion Development</FONT></P> <P> </P> <P><FONT size="4">If you're a visual or visual-spatial learner, you might find it helpful to get "the big picture" before you dive into the step-by-step progression of the learning paths. So today, I want to share one more resource that can help in this context -- this illustrated guide that visually summarizes the <STRONG><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development Learning Path</A>.</STRONG> </FONT></P> <P><FONT size="4"><BR /><A href="https://aka.ms/visual/fusion-dev-path/illustrated" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="VisualGuide-FusionDevPath-DevTo.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297178i84E63E8EECAF3991/image-size/large?v=v2&px=999" role="button" title="VisualGuide-FusionDevPath-DevTo.png" alt="VisualGuide-FusionDevPath-DevTo.png" /></span></A></FONT></P> <P> </P> <P><FONT size="4"> Click on the image to get access to a <A href="https://aka.ms/visual/fusion-dev-path/illustrated" target="_self">higher-resolution (poster-sized) version</A> of the guide that can be printed out or used as desktop wallpaper. </FONT></P> <P> </P> <P><FONT size="5">3. Using The Illustrated Guide on your learning journey</FONT></P> <P><SPAN style="font-size: large; font-family: inherit;"><BR />Use this guide as a pre-read (to get a sense of terms, topics and flow </SPAN><STRONG style="font-size: large; font-family: inherit;">before</STRONG><SPAN style="font-size: large; font-family: inherit;"> you start the learning path. Then revisit the guide </SPAN><STRONG style="font-size: large; font-family: inherit;">after</STRONG><SPAN style="font-size: large; font-family: inherit;"> completing the path, to identify any gaps and reinforce learned concepts. </SPAN></P> <P> </P> <P><SPAN style="font-size: large; font-family: inherit;">Every cell in this illustration maps to a related unit or module within that learning path. By checking out the visual before and after you complete the relevant section, you might find yourself making connections or seeing patterns that help you remember that concept better, or see it in a new perspective. <STRONG>For instance: </STRONG>look at the examples below.</SPAN><BR /><BR /></P> <TABLE border="1" width="100%"> <TBODY> <TR> <TD width="50%"> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="TechIntensity.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297185i6C1817C2C1E0F3C1/image-size/large?v=v2&px=999" role="button" title="TechIntensity.png" alt="TechIntensity.png" /></span></P> <P> </P> </TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Tech Intensity?</FONT></STRONG></P> <P><FONT size="4">It's about three dimensions (organizational trust, individual capability & technological readiness) that signal successful <EM>adoption</EM> of technology to power digital transformation.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/transform-business-software-authoring-with-fusion-dev/2-tech-intensity?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> <TR> <TD width="50%"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="FusionDevProcess.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297184iC478E79A4FB62458/image-size/large?v=v2&px=999" role="button" title="FusionDevProcess.png" alt="FusionDevProcess.png" /></span></TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Fusion Development?</FONT></STRONG></P> <P><FONT size="4">It's about breaking the silos between citizen devs and professional devs, enabling them to work closely together to build apps that solve real business needs or challenges.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/transform-business-software-authoring-with-fusion-dev/4-fusion-development-process?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> <TR> <TD width="50%"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="LowCode.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297186iEDA3C6D214CBC7B1/image-size/large?v=v2&px=999" role="button" title="LowCode.png" alt="LowCode.png" /></span></TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Low Code?</FONT></STRONG></P> <P><FONT size="4">It's about removing barriers and enabling more actions with less code (e.g., using drag-and-drop UI, scripting languages, declarative interfaces etc.) - so that <EM>anyone</EM> on the team can contribute meaningfully to their app development process.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/understanding-low-code-as-a-traditional-developer/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> <TR> <TD width="50%"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="power-apps.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297183iFBCFF6B8E5E60EB7/image-size/large?v=v2&px=999" role="button" title="power-apps.png" alt="power-apps.png" /></span></TD> <TD width="50%"> <P><STRONG><FONT size="4">What is Power Apps?</FONT></STRONG></P> <P><FONT size="4">Part of the Power Platforms product suite, it enables citizen developers to rapidly build mobile and web apps, while pro-devs can craft custom APIs, data connectors, and event-driven workflows - to support their fusion team development process.</FONT></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/understanding-low-code-as-a-traditional-developer/2-what-is-low-code?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_blank" rel="noopener"><STRONG><FONT size="3">Learn More</FONT></STRONG></A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P><FONT size="5"><BR />4. Summary<BR /></FONT></P> <P><FONT size="4">Thanks for reading! I hope you find this illustrated guide useful to you in your learning journey - as a citizen developer or professional developer exploring fusion development, or just as a curious technologist eager to learn about emerging technologies and paradigms.</FONT></P> <P> </P> <P><FONT size="4">Have feedback for me in what could make the illustrations better for your learning style? Leave a comment below! I would love to hear from you. Want more visual guides and visual storytelling content - <A href="https://twitter.com/sketchthedocs" target="_blank" rel="noopener">follow me </A>@SketchTheDocs.<BR /><BR />And don't forget to check out these three resources to skill up on Fusion Development:<BR /></FONT></P> <OL> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development Learning Path</A></STRONG> </FONT></LI> <LI><FONT size="4"><STRONG><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/?WT.mc_id=azurefunctionsonlearntv-35831-ninarasi" target="_self">Fusion Development e-Book </A></STRONG> </FONT></LI> <LI><FONT size="4"><STRONG><A href="https://aka.ms/AzureFunctionsOnDemand" target="_self">Azure Functions: OpenAPI and Power Platforms Event</A> </STRONG>(session replays)</FONT></LI> </OL> <P><FONT size="4">Happy learning trails!</FONT></P> <P> </P></description> <pubDate>Tue, 20 Jul 2021 22:09:34 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/an-illustrated-guide-to-fusion-development/ba-p/2567146</guid> <dc:creator>nityan</dc:creator> <dc:date>2021-07-20T22:09:34Z</dc:date> ... </item> <item> <title>New module: Introduction to testing in .NET</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-introduction-to-testing-in-net/ba-p/2567743</link> <description><P>Testing is crucial part of software development. We want to make sure the software we ship is as tested as much as possible. However, there are many ways to test, and the scenario and the application is usually what determines what the best approach is. Upskill your testing knowledge and get a good high-level view of all types of testing that exist, so you are better informed how to approach testing for your next program - cause you do test right?</P> <P> </P> <P>This module covers:</P> <P> </P> <UL> <LI>Evaluate if testing is right for your scenarios.</LI> <LI>Describe how different types of testing, the testing pyramid, and different testing schools of thought answer the demands of modern development.</LI> </UL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screenshot 2021-07-20 at 21.15.57.png" style="width: 869px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/297160i7FD40D3597FAE6FE/image-size/large?v=v2&px=999" role="button" title="Screenshot 2021-07-20 at 21.15.57.png" alt="Screenshot 2021-07-20 at 21.15.57.png" /></span></P> <P>Check it out: <A href="https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-concepts/" target="_self">https://docs.microsoft.com/en-us/learn/modules/visual-studio-test-concepts/</A></P></description> <pubDate>Tue, 20 Jul 2021 20:21:15 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-module-introduction-to-testing-in-net/ba-p/2567743</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-07-20T20:21:15Z</dc:date> ... </item> <item> <title>Hardening an ASP.NET container running on Kubernetes</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hardening-an-asp-net-container-running-on-kubernetes/ba-p/2542224</link> <description><P>In my day to day job, I often stumbled upon a surprising fact: many ASP.NET Core (or .NET 5) K8s deployments are too permissive when it comes to the execution context. Basically, most deployments are not hardened properly, and I see countless ASP.NET containers running as root. Admitedly, there is a lack of guidance from Microsoft in that matter. At the time of writing, I challenge you to find a single source of truth (feel free to add it in comment if I missed any), <EM>endorsed by Microsoft</EM> on how to to harden an ASP.NET Docker image. You'll rather stumble upon GitHub issues and questions here and there.</P> <P>As you know, ASP.NET relies on the built-in Kestrel web server and most ASP.NET applications are either MVC, either Web APIs, meaning that they are unlikely going to leverage operating system level capabilities that require high privileges.</P> <P>That said, if you take the simplest ASP.NET web API project and choose the default Visual Studio 2019 template, you'll end up with the following Dockerfile:</P> <P> </P> <LI-CODE lang="bash">FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build WORKDIR /src COPY ["simpleapi/simpleapi.csproj", "simpleapi/"] RUN dotnet restore "simpleapi/simpleapi.csproj" COPY . . WORKDIR "/src/simpleapi" RUN dotnet build "simpleapi.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "simpleapi.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "simpleapi.dll"] </LI-CODE> <P> </P> <P>If you build an image and run this, you must run it as root. If you don't, by requesting it specifically in your deployment through a securityContext:</P> <P> </P> <LI-CODE lang="bash">securityContext: runAsNonRoot: true </LI-CODE> <P> </P> <P>You'll encounter the following issue:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephaneey_0-1626175023077.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/295431i6148D566A5AD1758/image-size/medium?v=v2&px=400" role="button" title="stephaneey_0-1626175023077.png" alt="stephaneey_0-1626175023077.png" /></span></P> <P>Describing the pod with Kubectl quickly shows that the container tried to start as root:</P> <P> </P> <LI-CODE lang="bash">Warning Failed 94s (x8 over 2m53s) kubelet, aks-agentpool-38789445-vmss000001 Error: container has runAsNonRoot and image will run as root</LI-CODE> <P> </P> <P>What K8s tells you is that the image wants to start as root because no other user has been defined, so it defaults to root. But, because you explicitely added a <EM>runAsNonRoot</EM> instruction, it can't start it. Never mind, just specify a user and it should work, right? Let's try:</P> <P> </P> <LI-CODE lang="bash">securityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 2000</LI-CODE> <P> </P> <P>By the way, if you wonder, when no user is specified in the Docker image itself or through a securityContext, user 0 is assumed and 0 stands for root. Linux needs to have a user identifier (not name) as an input. Trying with the above config results in another error:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephaneey_1-1626175696989.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/295432iD0C4482CA431535E/image-size/medium?v=v2&px=400" role="button" title="stephaneey_1-1626175696989.png" alt="stephaneey_1-1626175696989.png" /></span></P> <P>This time it goes further as the container starts, crashes and restarts. Looking at the container logs with Kubectl logs reveals the problem (shortened for brevity):</P> <P> </P> <LI-CODE lang="bash">←[41m←[1m←[37mcrit←[39m←[22m←[49m: Microsoft.AspNetCore.Server.Kestrel[0] Unable to start Kestrel. System.Net.Sockets.SocketException (13): Permission denied</LI-CODE> <P> </P> <P>This could make you think that being root is required to start Kestrel but that is not the culprit. The problem is the port number it tries to bind to, which in the default image, is either 80 either 443. Both ports are below 1024 and today, you must be <EM>root</EM> to bind to a port that is < 1024. In Linux, the alternative to bind to a low port while not being root is to use Linux capabilities. However, ambient capabilities <A href="https://github.com/kubernetes/kubernetes/issues/56374" target="_self">are still not available</A> in K8s. So, first take away is: do not use port 80 or 443 in your ASP.NET Core images. Whatever setup you are using, I don't see how you could justify to bind to either of these ports. Most webapps/APIs are:</P> <UL> <LI>Proxied by a K8s Service which can listen to 80 and forward to 8080 for example, same with 443 of course</LI> <LI>Proxied by a sidecar container, which is part of a service mesh or solutions such as Dapr. Here again, the proxy can easily fallback to 8080 or 4433</LI> </UL> <P>So, I see no reason to stick to these ports. Therefore, the first thing to do is to pick another bunc of ports, right in the DockerFile. So, for example, you can simply achieve this with the following instructions in the Dockerfile (the same applies to 443 and TLS):</P> <P> </P> <LI-CODE lang="bash">EXPOSE 8080 ENV ASPNETCORE_URLS=http://*:8080</LI-CODE> <P> </P> <P>When changing the default port, you also need to instruct ASP.NET (core in this example) about it through an environment variable. Adding those two lines to our former DockerFile and deploying it with the above <EM>securityContext</EM> will result in an up and running ASP.NET container running as non-root. To enforce non-root, you may even do it right from the Dockerfile itself, yet, using another bunch of Docker instructions:</P> <P> </P> <LI-CODE lang="bash">RUN addgroup --group friendlygroupname --gid 2000 \ && adduser \ --uid 1000 \ --gid 2000 \ "friendlyusername" RUN chown friendlyusername:friendlygroupname /app USER friendlyusername:friendlygroupname </LI-CODE> <P> </P> <P>If you build and push the new Docker image and redeploy it, you will have an up and running ASP.NET container, running with its own user and group objects. </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="stephaneey_0-1626176706154.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/295435i61AC98E75C70C958/image-size/medium?v=v2&px=400" role="button" title="stephaneey_0-1626176706154.png" alt="stephaneey_0-1626176706154.png" /></span></P> <P>This approach is even preferred because even if you ommit the security context in the K8s deployment, the container will be started with the user and group specified in the image, meaning as a rootless container. But is it enough to consider this hardened? Well, we are in a much better situation than with the default image because:</P> <UL> <LI>The non-root user will be restricted even if the container itself is privileged in the K8s deployment (which should never be the case of an ASP.NET app by the way)</LI> <LI>The non-root user will be restricted in the container itself. For example, installing extra packages through <EM>apt-get</EM> will be denied, which could make it harder to setup tools in a remote code execution attack. By the way, the default ASP.NET base image does not ship with many tools, which makes it harder (good thing) to discover and run attacks. If on top of it, you make sure that no extra tools can be installed, you're already preventing most attacks.</LI> </UL> <P>But, we can do even more than this. For example, depending on the ASP.NET distrib you work with, curl might be available in the container, facilitating attacks such as downloading a binary or shell file from a remote endpoint. Of course, you should always make sure that the <EM>egress</EM> traffic is controlled correctly, which goes beyond the management of the container itself. However, such attacks could not be done in a read-only file system because the binary/archive/shell could not be stored locally in the container. So, we might be tempted to add another line to our securityContext:</P> <P> </P> <LI-CODE lang="bash">readOnlyRootFilesystem: true</LI-CODE> <P> </P> <P>Which will cause the container to fail at startup. In the logs you'll find:</P> <P> </P> <LI-CODE lang="bash">Failed to create CoreCLR, HRESULT: 0x80004005</LI-CODE> <P> </P> <P>And that is because you should disable some debugging telemetry setting in the Dockerfile by adding an extra ENV statement:</P> <P> </P> <LI-CODE lang="basic">ENV COMPlus_EnableDiagnostics=0</LI-CODE> <P> </P> <P>Note that it depends on the base image (ASP.NET version) you use and it is still debated whether ASP.NET runs smoothly or not on a read-only filesystem. You might have edge cases where the system needs to buffer "stuff" on the filesystem. So, use it with caution and make sure you spot any potential issue during your integration tests.</P> <P>Last but not least and because it never hurts, you should always drop all capabilities by default (full securityContext for clarity):</P> <P> </P> <LI-CODE lang="bash">runAsNonRoot: true runAsUser: 1000 runAsGroup: 2000 allowPrivilegeEscalation: false privileged: false readOnlyRootFilesystem: true capabilities: drop: - all</LI-CODE> <P> </P> <P>Because if you don't bind to a low port, you will not even need NET_BIND_SERVICE and because should you still run a container as root, dropping all these capabilities will still prevent root from leveraging some system capabilities, making it harder for an attacker to harm your environment. Of course, if you are running edge cases, you may add <A href="https://github.com/torvalds/linux/blob/master/include/uapi/linux/capability.h" target="_self">some capabilities</A> as needed, but removing all by default sounds like a good idea. </P> <P>Is that all? Well, no! There is still something that help harden not the image, but the container itself. You should always define resource requests and limits to make sure a single container cannot take up all CPU and Memory of the node it runs on. That will also help you detect unexpected memory leaks.</P></description> <pubDate>Tue, 13 Jul 2021 17:11:51 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/hardening-an-asp-net-container-running-on-kubernetes/ba-p/2542224</guid> <dc:creator>stephaneey</dc:creator> <dc:date>2021-07-13T17:11:51Z</dc:date> ... </item> <item> <title>IoT for Beginners, curriculum</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/iot-for-beginners-curriculum/ba-p/2533895</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="MicrosoftTeams-image.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293187i882CF1EF57FD59F2/image-size/large?v=v2&px=999" role="button" title="MicrosoftTeams-image.png" alt="MicrosoftTeams-image.png" /></span></P> <P> </P> <P> </P> <P>It is our very great pleasure to announce the release of a new, free, MIT-licensed open-source curriculum all about the Internet of Things: <A href="https://aka.ms/iot-beginners" target="_blank" rel="noopener">IoT for Beginners</A>. Brought to you by a team of Azure Cloud Advocates, Program Managers, and <A href="https://studentambassadors.microsoft.com/?WT.mc_id=academic-17441-jabenn" target="_blank" rel="noopener">Microsoft Learn Student Ambassadors</A>, we hope to empower students of all ages to learn the basics of IoT. Presuming no knowledge of IoT, we offer a free 12-week, 24-lesson curriculum to help you dive into this amazing field.</P> <P> </P> <P>If you liked our first two curricula, <A href="https://aka.ms/webdev-beginners" target="_blank" rel="noopener">Web Dev for Beginners</A> and <A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning for beginners</A>, you will love IoT for Beginners!</P> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#join-us-on-the-journey-of-your-food-from-farm-to-table" target="_blank" rel="noopener" name="join-us-on-the-journey-of-your-food-from-farm-to-table"></A>Join us on the journey of your food, from farm to table!</H2> <P> </P> <P>Join us as we take the same journey as your food as it travels from farm to table, taking advantage of IoT on the way to improve farming, transport, manufacturing and food processing, retail and smart homes.</P> <P> </P> <P>Our curricula are structured with a modified Project-Based pedagogy and include:</P> <P> </P> <UL> <LI>a pre-lesson warmup quiz</LI> <LI>a written lesson</LI> <LI>video</LI> <LI>knowledge checks</LI> <LI>a project to build</LI> <LI>infographics, sketchnotes, and visuals</LI> <LI>a challenge</LI> <LI>an assignment</LI> <LI>a post-lesson quiz</LI> <LI>opportunities to deepen your knowledge on Microsoft Learn</LI> </UL> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#what-will-you-learn" target="_blank" rel="noopener" name="what-will-you-learn"></A>What will you learn?</H2> <P> </P> <DIV id="tinyMceEditorChris_Noring_0" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <P> </P> <P><A href="https://github.com/microsoft/IoT-For-Beginners/blob/main/sketchnotes/Roadmap.jpg" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Roadmap.jpg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/294143iE08C947DD69E5E51/image-size/large?v=v2&px=999" role="button" title="Roadmap.jpg" alt="Roadmap.jpg" /></span></A></P> <P> </P> <P> </P> <P>The lessons are grouped so that you can deep-dive into use cases of IoT. We start with an introduction to IoT, covering devices, sensors, actuators and cloud connectivity, where you will build an internet connected version of the "Hello world" or IoT, an LED. We then move on to farming, learning about digital agriculture and feedback loops to control automated watering systems. Your food then leaves the farm on trucks, and you learn how to track vehicles using GPS, visualize their journeys and get alerts when a truck approaches a processing plant. Once in the plant, we move to AIoT, learning how to distinguish between ripe and unripe fruit using AI models running from IoT devices and on the edge. Next we move to the supermarket, using IoT to manage stock levels. Finally we take the food home to cook, and learn about consumer smart devices, building a voice controlled smart timer that can even speak multiple languages.</P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#hardware" target="_blank" rel="noopener" name="hardware"></A>Hardware</H2> <P> </P> <P>The hard part (pun intended) for IoT is hardware, so we've designed this curriculum to be as accessible as possible. We want you to Learn IoT, not learn how to solder, know how to read resistor color codes, or know what a microfarad is, so we've made hardware choices to make things easier.</P> <P> </P> <P>You can choose to learn using microcontrollers using Arduino with a <A href="https://www.seeedstudio.com/Wio-Terminal-p-4509.html" target="_blank" rel="noopener">Wio Terminal</A>, or single board computers using a <A href="https://www.raspberrypi.org/products/raspberry-pi-4-model-b/" target="_blank" rel="noopener">Raspberry Pi</A>. We've also added a virtual hardware option so you can learn without having to purchase anything!</P> <P> </P> <P>For sensors and actuators, we've gone with the <A href="https://www.seeedstudio.com/category/Grove-c-1003.html" target="_blank" rel="noopener">Grove kit</A> from <A href="https://www.seeedstudio.com/" target="_blank" rel="noopener">Seeed Studio</A>, with easy to connect sensors and actuators.</P> <P> </P> <P> </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JimBennett_1-1625255958076.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293184iD7C16D337728ABB0/image-size/medium?v=v2&px=400" role="button" title="JimBennett_1-1625255958076.png" alt="JimBennett_1-1625255958076.png" /></span></P> <P> </P> <P>Our friends at Seeed have made it easy to buy the hardware, with packages containing all of the kit you need.</P> <UL> <LI><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Wio-Terminal-Starter-Kit-p-5006.html" target="_blank" rel="noopener">IoT for beginners with Seeed and Microsoft - Wio Terminal Starter Kit</A></LI> <LI><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit.html" target="_blank" rel="noopener">IoT for beginners with Seeed and Microsoft - Raspberry Pi 4 Starter Kit</A></LI> </UL> <P>If you are interested in learning using virtual hardware, you can write IoT code locally as if you were using a Raspberry Pi, then simulate sensors and actuators using <A href="https://github.com/CounterFit-IoT" target="_blank" rel="noopener">CounterFit</A>, a free, open source tool for simulating hardware.</P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#a-sneak-peek" target="_blank" rel="noopener" name="a-sneak-peek"></A>A sneak peek</H2> <P> </P> <P>This curriculum is filled with a lot of art, created by our team. Take a look at this cool sketchnote created by <A class="mentioned-user" href="https://dev.to/nitya" target="_blank" rel="noopener">@nitya</A> .</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JimBennett_2-1625255958257.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293185i6B46F7DAD862A4F3/image-size/large?v=v2&px=999" role="button" title="JimBennett_2-1625255958257.png" alt="JimBennett_2-1625255958257.png" /></span></P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-iot-for-beginners-12i7-temp-slug-1229194?preview=0044589665a79384ed7e8767cf1e73697457c37127dc9e95f279691ac039d97e24bdf1aee1b0a2a78b50a502432f50d8e9b466caab22b963430a3f11#without-further-ado-please-meet-iot-for-beginners-a-curriculum" target="_blank" rel="noopener" name="without-further-ado-please-meet-iot-for-beginners-a-curriculum"></A>Without further ado, please meet <A href="https://aka.ms/iot-beginners" target="_blank" rel="noopener">IoT For Beginners: A Curriculum</A>!</H2></description> <pubDate>Tue, 13 Jul 2021 12:03:40 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/iot-for-beginners-curriculum/ba-p/2533895</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-07-13T12:03:40Z</dc:date> ... </item> <item> <title>Building a Cloud Native Lab at Home</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="accelerate.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293760iDAE4D393C7479C5E/image-size/large?v=v2&px=999" role="button" title="accelerate.png" alt="accelerate.png" /></span></P> <P> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Everyone loves a good home lab setup. The cloud is great, but buying and installing hardware in the comfort of your own home is something one can get addicted to :)</img></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Don't get me wrong - there are things I put straight into the cloud without even considering self-hosting. Even though I have been an Exchange Admin in a previous life I use Office 365, and I certainly trust OneDrive and Azure File Storage more than the maintenance of my own RAID/NAS. But running 30 virtual machines ain't free and even if there is a cost to buying hardware it might come up cheaper over time.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The challenge is that these days you want things to be as cloud native as they can. So, you don't want to install virtual machines where you install a web server that you subsequently have to configure. And even though you can install Docker on both Windows and Linux servers you want something more sophisticated than individual containers.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You want something like Kubernetes with all the fixings. No, Kubernetes is not the perfect option that you always want to use, but it's certainly something you should have hands-on experience with these days. (I'm approaching this lab from the developer perspective. Running VMs has been a solved problem for years.) Sure, there's options like Service Fabric as well since we're dealing with the Microsoft tech stack, but I'm not diving into that right now.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you set up an Ubuntu VM you can get going with Microk8s in minutes, but why stop there?</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Microsoft announced Azure Stack HCI AKS a few months back, and it just went GA. (That's hyper-converged servers that can plug into Azure and then you optionally put Azure Kubernetes Service on top.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">More info:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">I felt that not all my questions were easily answered in the docs. Do you need two nodes? What does it cost? How much hardware at a minimum?</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>Well, it's not like the docs are bad, but they do kind of drive you towards a more enterprisey setup. The bigger problem is that all the info you need is spread across a number of sections in the docs and that's why I wanted a more complete set of instructions (while not diving into all the technical details). So, inspired by what I could find on docs.microsoft.com and </SPAN><A href="http://aka.ms/azurearcjumpstart" target="_blank" rel="noopener"><SPAN>h</SPAN><SPAN>ttp://aka.ms/azurearcjumpstart</SPAN></A><SPAN> as well as an amount of testing and validation on my own I put together a little guide for building this at home.</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you want a "proper" cluster you need at least two nodes (with the witness going in the cloud) , and you'll want 2 NVMe drives + 8 SSDs for Storage Spaces Direct. (Well, you probably want all NVMe if money is no concern.) You'll probably want minimum 64 gigs of RAM in each box as well.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Azure Stack HCI doesn't have an up-front cost, but it will set you back 10$ a month pr core at the current pricing. So, it adds up if you're on a budget. And that does not include the licenses for any Windows VMs you run on the cluster. You can trial it for free for 60 days so there's no risk testing it though. It works nicely, but at the moment I don't feel it's quite worth it now as many of the features are still "Coming Soon". Since there are new versions in preview this might change in the future, so this is not a permanent evaluation on my part.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Wait a moment, I first said "Azure Stack HCI AKS" and then "Azure Stack HCI" without the AKS term. Was that a spelling error? No. The AKS part is an additional installation after you get the HCI part working. (Which means that HCI doesn't mean you must run Kubernetes. You can still do VMs in parallell.) Azure Stack HCI is an operating system you install yourself so you can install software on top of that. It shares a lot of the code base with Windows Server, but with some tweaks to become a cloud-connected evergreen OS.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You can however skip the cluster part and go single node, and for the sake of it I tested the latest build of Windows Server 2022 Preview instead of this purpose-built OS. This works like a charm.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">For hardware I went with an HPE Microserver Gen 10 Plus with 32GB RAM and even if I stuffed in two SSDs I tested on a single HDD just to be sure. Storage Spaces and/or RAID is a recommendation, but not a hard prerequisite. (I can confirm the Microserver unofficially supports 64GB RAM as well, but it's slightly expensive and tricky to chase down known good RAM sticks.) You can certainly make it work on different bits of hardware too - a configuration like this doesn't have to break your bank account in any way. (I like the size of the Microserver as well as iLO, built in quad port NIC even if it is just gigabit, etc.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Righty, I managed to install an operating system - now what? If you want a UI for management you're driven towards Windows Admin Center (WAC) in general these days:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/overview" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/windows-server/manage/windows-admin-center/overview</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Azure Stack HCI has the Server Core UI whereas with Windows Server 2022 you can still go full desktop mode.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Note: This isn't an intro to Kubernetes as such; it's about getting a specific wrapping of Kubernetes going. If you're a k8s veteran there are parts you can skim through, and if you're new to container orchestration you might want to research things in other places as well along the way. I try to hit a middle ground here.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">There's an AKS plugin for WAC that in theory will let you set it up through a wizard. I'm saying "theory" because I'm seeing inconsistency - sometimes I get an unhelpful CredSSP or WinRM error thrown in the face, and sometimes it works. And I'm not liking that. However, it is a great way to install the Powershell cmdlets and have a quick look if things in general are ok. (Screenshot from a two-node setup.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Windows Admin Center AKS Prereqs" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293775iAC028BBE06BF6571/image-size/medium?v=v2&px=400" role="button" title="aks_01.png" alt="Windows Admin Center AKS Prereqs" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Windows Admin Center AKS Prereqs</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">There's a quick start for using the Windows Admin Center (WAC) to set things up here:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/setup" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/setup</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">And for PowerShell here (you can install everything without involving WAC):</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/kubernetes-walkthrough-powershell" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/kubernetes-walkthrough-powershell</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Step 2 & 3 (in PowerShell) is where things can get a little confusing. I did not feel the parameters where sufficiently explained. An example of what I basically went with follows. (I have a slightly different IP addressing scheme, but same same in the bigger picture).</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Assuming you have a 192.168.0.0/24 subnet, and have already created a virtual switch on the server named "LAN". Let's say you use 192.168.0.2 - 192.168.0.99 (default gateway on .1) as your DHCP scope you'll want to carve out a static space separately for AKS.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You will want a range for the nodes, and you will want a range for any load balancers you provision in the cluster. (Adjust to account for your specifics.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <LI-CODE lang="powershell">$vnet = New-AksHciNetworkSetting -name aksvnet -vSwitchName "LAN" -macPoolName aksMacPool -k8sNodeIpPoolStart "192.168.0.101" -k8sNodeIpPoolEnd "192.168.0.110" -vipPoolStart "192.168.0.111" -vipPoolEnd "192.168.0.120" -ipAddressPrefix "192.168.0.0/24" -gateway "192.168.0.1" -dnsServers "192.168.0.1" Set-AksHciConfig -vnet $vnet -imageDir C:\ClusterStorage\Volume01\Images -cloudConfigLocation C:\ClusterStorage\Volume01\Config -cloudservicecidr "192.168.0.100/24" Set-AksHciRegistration -subscriptionId "guid" -resourceGroupName "rg-AKS" Install-AksHci -Verbose</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">It might take a little while to provision, but with a bit of luck it will go through. Don't worry about the Azure registration - this does not incur a cost, but is used for Azure Arc. (Azure Arc is a service for managing on-prem services from Azure and is not specific to AKS.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">After installation of the host cluster you might want to run the <SPAN style="font-style: italic;">Update-AksHci</SPAN> cmdlet in case you didn't get the newest release on the first go. (I have experienced this.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">This takes care of setting up the AKS host, but not the actual nodes for running workloads so you will want to create that next. I went with Linux nodes, but you can create Windows nodes as well if you like. This actually mirrors AKS hosted in Azure, but things have been abstracted away slightly there so you might not think much about this. (Which is OK.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you have a 32GB RAM server the <SPAN style="font-style: italic;">New-AksHciCluster</SPAN> cmdlet without parameters will probably fail since you don't have enough memory. And when scaling things down you'll also want to account for upgrades - when upgrading the cluster a new instance of each virtual machine is spun up in parallel requiring you to have enough headroom for this. This should work:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <LI-CODE lang="powershell">New-AksHciCluster -Name aks01 -loadBalancerVmSize "Standard_A2_v2" -controlplaneVmSize "Standard_A2_v2" -linuxNodeVmSize "Standard_A2_v2"</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>(I attempted using "Standard_K8S_v1</SPAN><SPAN>" for the worker node, but the memory peaked almost immediately resulting in a loop of creating new nodes that were also underpowered and never getting to a fully working state with the workloads described here.)</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you have 64GB or more you shouldn't have to tweak this.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You can upgrade your workload cluster to a newer Kubernetes version independently of the host version. There are limits though - to run the newest versions of Kubernetes on the nodes you may have to upgrade the host to a newer version as well in some cases. Both clusters can be connected to Azure with Arc, but the workload cluster is the most important one here.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Connect the cluster you just created to Azure like this:</P> <LI-CODE lang="powershell">Connect-AzAccount Enable-AksHciArcConnection -name aks01</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">At this point you should be good to verify things by putting some containers inside the cluster if you like.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">I have a very simple frontend & backend setup here:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><A href="https://github.com/ahelland/HelloFoo" target="_blank" rel="noopener">https://github.com/ahelland/HelloFoo</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Since the images are on Docker hub you only need the <SPAN style="font-style: italic;">/k8s/HelloFoo.yaml</SPAN> if you don't feel like playing with the code or build your own images.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">I wouldn't call it fancy by any means, but it consists of two "microservices" you can test with a Kestrel-based image (dotnet run), Docker and Kubernetes.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">While still on the server you can download kubectl as you will need that to proceed:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="nb"><SPAN style="font-style: italic;">curl </SPAN><A href="https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe" target="_blank" rel="noopener"><SPAN style="font-style: italic;">https://dl.k8s.io/release/v1.21.0/bin/windows/amd64/kubectl.exe</SPAN></A><SPAN style="font-style: italic;"> -Outfile kubectl.exe</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">You also need credentials to access the cluster:</P> <LI-CODE lang="powershell">Get-AksHciCredential -name aks01</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Apply with <SPAN style="font-style: italic;">.\kubectl.exe apply -f HelloFoo.yaml</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Then you can run <SPAN style="font-style: italic;">kubectl get -svc -A</SPAN> to give you the IP address (from the load balancer range you provided)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">If you just want a plain cloud native setup you're done now. (You can of course install <SPAN style="font-style: italic;">kubectl</SPAN> on your desktop if you prefer.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">However I kinda like testing out "day 2" use cases as well.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">GitOps and Flux is getting more popular as the option for installing configuration and services.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">This is also slightly lacking in the docs. It's actually quite simple (using the same repo):</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Find the cluster through Azure Arc in the Azure Portal and go to the GitOps blade and "Add configuration"</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="GitOps/Flux" style="width: 582px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293782iB7F7A348FCBF3E09/image-size/large?v=v2&px=999" role="button" title="flux_01.png" alt="GitOps/Flux" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">GitOps/Flux</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">For adding a public GitHub repo (like mine) it looks like this, but it's also possible to add private repos. Note the use of the git-path parameter to point to the right folder (containing yaml):</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="GitOps/Flux" style="width: 612px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293783iDB597EA80B9F2B5B/image-size/large?v=v2&px=999" role="button" title="flux_02.png" alt="GitOps/Flux" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">GitOps/Flux</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>For more background:<BR /></SPAN><A href="https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/use-gitops-with-helm" target="_blank" rel="noopener"><SPAN>https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/use-gitops-with-helm</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Once you have this working (you should probably have separate repos for config and apps) you can just go at it in your editor of choice and check in the results to do a roll-out. For an automated bootstrap scenario you can perform the setup with PowerShell as well. Which basically means - a script does all the work of setting up the Kubernetes cluster and then Git kicks in to deploy the essentials.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Since we're at it we will of course need monitoring and tracing abilities too. Azure Monitor is decent, but it does have a cost so if you're on a budget either skip it or keep an eye on it so it doesn't run up a huge bill.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The combo of Prometheus and Grafana is a well known solution for Kubernetes, and that's fairly easy to implement. Follow the instructions here:</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/en-us/azure-stack/aks-hci/monitor-logging" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure-stack/aks-hci/monitor-logging</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">First enable Prometheus:</P> <LI-CODE lang="powershell">Install-AksHciMonitoring -Name aks01 -storageSizeGB 100 -retentionTimeHours 240</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">To load the config for Grafana:</P> <LI-CODE lang="powershell">kubectl apply -f https://raw.githubusercontent.com/microsoft/AKS-HCI-Apps/main/Monitoring/data-source.yaml kubectl apply -f https://raw.githubusercontent.com/microsoft/AKS-HCI-Apps/main/Monitoring/dashboards.yaml</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN>Then install Grafana (which will use the data source and the dashbord from the previous two yaml files). (Note that this requires the installation of Helm - </SPAN><A href="https://helm.sh/docs/intro/install/" target="_blank" rel="noopener"><SPAN>https://helm.sh/docs/intro/install/</SPAN></A> downloading the zip and extracting should work on Windows Server.<SPAN>)</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <LI-CODE lang="powershell">helm repo add grafana https://grafana.github.io/helm-charts helm repo update helm install grafana grafana/grafana --version 6.11.0 --set nodeSelector."kubernetes\.io/os"=linux --set sidecar.dashboards.enabled=true --set sidecar.datasources.enabled=true -n monitoring</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Retrieve the Grafana secret (and have it ready for logging in to the dashboard afterwards):</P> <LI-CODE lang="powershell">kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo</LI-CODE> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">(Note that the base64 option doesn't work on Windows, so you would need to do that decode separately.)</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Grafana displaying Prometheus metrics" style="width: 432px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293784i065D1D3516B1587A/image-size/large?v=v2&px=999" role="button" title="Grafana_01.png" alt="Grafana displaying Prometheus metrics" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Grafana displaying Prometheus metrics</span></span></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P>There's one more thing we want to do in the monitoring and diagnostics department, but a small digression first.</P> <P> </P> <P>For a small lab at home it's not necessary to be super strict with security and policies inside the cluster, but if you want to practice production the term "service mesh" will come up. I'm not going to do a comparison of those, but Istio, Linkerd and Consul are popular choices that Microsoft provides instructions for as well:</P> <P><A href="https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about</A></P> <P> </P> <P>For more info on meshes you can also check out <A href="https://meshery.io" target="_blank" rel="noopener">https://meshery.io</A></P> <P> </P> <P>I wanted to test "Open Service Mesh" as that is available as an add-on for AKS. I found these instructions clearer:</P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/tutorial-arc-enabled-open-service-mesh#install-arc-enabled-open-service-mesh-osm-on-an-arc-enabled-kubernetes-cluster" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/azure-arc/kubernetes/tutorial-arc-enabled-open-service-mesh#install-arc-enabled-open-service-mesh-osm-on-an-arc-enabled-kubernetes-cluster</A></P> <P> </P> <P>Since I didn't want to bother with making sure I had the right version of Azure Cli installed locally I just did it in Azure Cloud Shell :)</img> (Point being that you don't need to be on-prem to perform this step.)</P> <P> </P> <P>There is a snag at the time of writing this. The instructions point to version 0.8.4, but I wanted to use 0.9.0 (newer) which required me to use this cmdlet:</P> <LI-CODE lang="powershell">az k8s-extension create --cluster-name aks01 --resource-group ARC-AKS-01 --cluster-type connectedClusters --extension-type Microsoft.openservicemesh --scope cluster --release-train staging --name osm --version 0.9.0</LI-CODE> <P> </P> <P>Since I'm using OSM I will also follow the MS instructions for installing the bookstore app:</P> <P><A href="https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about?pivots=client-operating-system-windows#deploy-a-new-application-to-be-managed-by-the-open-service-mesh-osm-azure-kubernetes-service-aks-add-on" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/aks/servicemesh-osm-about?pivots=client-operating-system-windows#deploy-a-new-application-to-be-managed-by-the-open-service-mesh-osm-azure-kubernetes-service-aks-add-on</A></P> <P> </P> <P>Note that you should not use the instructions for Grafana and Prometheus from this page - these instructions are for "cloud AKS" not "on-prem AKS". (Prometheus will fail to run due to permissions issues.)</P> <P> </P> <P>You can however use the yaml from this page to install a popular tracing tool called Jaeger. Copy the yaml on the page and save to a file while adding the namespace on top:</P> <P> </P> <LI-CODE lang="yaml">apiVersion: v1 kind: Namespace metadata: name: jaeger labels: name: jaeger ---</LI-CODE> <P> </P> <P> </P> <P>And apply:</P> <LI-CODE lang="powershell">kubectl apply -f jaeger.yaml</LI-CODE> <P> </P> <P>Another quick note about the instructions here. It is referred to a configmap for the settings - this is not used in 0.9.0 any more so to read the config you will need to run the following command:</P> <LI-CODE lang="powershell">kubectl get meshconfig osm-mesh-config -n arc-osm-system -o yaml</LI-CODE> <P> </P> <P>We need to make two small adjustments (enable tracing and change the address for Jaeger) to this meshconfig which can be done by patching the meshconfig:</P> <LI-CODE lang="powershell">kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p '{"spec":{"observability":{"tracing":{"enable":true,"address": "jaeger.jaeger.svc.cluster.local","port":9411,"endpoint":"/api/v2/spans"}}}}' --type=merge</LI-CODE> <P> </P> <P>On Windows you will probably see an error about invalid json so you have to do an extra step:</P> <LI-CODE lang="powershell">$jsonpatch = '{"spec":{"observability":{"tracing":{"enable":true,"address": "jaeger.jaeger.svc.cluster.local","port":9411,"endpoint":"/api/v2/spans"}}}}' | ConvertTo-Json kubectl patch meshconfig osm-mesh-config -n arc-osm-system -p $jsonpatch --type=merge</LI-CODE> <P> </P> <P>More info:</P> <P><A href="https://docs.openservicemesh.io/docs/concepts_features/osm_mesh_config/" target="_blank" rel="noopener">https://docs.openservicemesh.io/docs/concepts_features/osm_mesh_config/</A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Jaeger" style="width: 993px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/293785iC8B9C1E65AF01DE6/image-size/large?v=v2&px=999" role="button" title="jaeger_01.png" alt="Jaeger" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Jaeger</span></span></P> <P> </P> <P>For testing you can port-forward to the pods and this makes sense for the bookstore apps, but it's probably better to set up load balancers for this when you want it more permanent so create a file like this to expose Grafana, Jaeger and Prometheus:</P> <P> </P> <P> </P> <LI-CODE lang="yaml">apiVersion: v1 kind: Service metadata: namespace: monitoring name: grafana labels: app.kubernetes.io/instance: grafana app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: grafana app.kubernetes.io/version: 7.5.5 helm.sh/chart: grafana-6.11.0 spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 3000 selector: app.kubernetes.io/instance: grafana app.kubernetes.io/name: grafana sessionAffinity: None type: LoadBalancer --- apiVersion: v1 kind: Service metadata: namespace: jaeger name: jaeger spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 16686 selector: app: jaeger sessionAffinity: None type: LoadBalancer --- apiVersion: v1 kind: Service metadata: namespace: monitoring name: prometheus spec: externalTrafficPolicy: Cluster ports: - port: 80 protocol: TCP targetPort: 9090 selector: app: prometheus sessionAffinity: None type: LoadBalancer</LI-CODE> <P> </P> <P> </P> <P>It would actually be even better to set up ingresses and DNS names, etc. but for the purpose of getting your lab up and running in a basic form this is out of scope.</P> <P> </P> <P>Sure, I skipped some parts you might want to look into here:</P> <UL> <LI>The docs refer to Prometheus scraping metrics from OSM, which you kind of want, but I left that out for now.</LI> <LI>The service mesh is set to permissive which means you don't get all that mesh goodness.</LI> <LI>I have not touched upon network policies or plugins.</LI> <LI>Since I didn't do ingress and didn't do DNS it follows that https isn't part of the picture either.</LI> <LI>While GitOps is part of the CI/CD story we have not explored a setup with pipelines and repos so you might want to tinker with GitHub Actions to automate these pieces.</LI> </UL> <P> </P> <P>I will be exploring these features as well (don't know if I'll put out some instructions on that or not), and I encourage you to do the same. With the risk of repeating myself - this is intended to get an AKS cluster going so it can be used for a basic cloud native setup. What you make of it is up to you :)</img></P> <P> </P> <P>And the disclaimer - I know that this works and seems to be an acceptable way to use the software at the time of writing, but I cannot predict if Microsoft will change anything on the technical or licensing side of things.</P></description> <pubDate>Tue, 06 Jul 2021 19:10:00 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/building-a-cloud-native-lab-at-home/ba-p/2519504</guid> <dc:creator>Andreas Helland</dc:creator> <dc:date>2021-07-06T19:10:00Z</dc:date> ... </item> <item> <title>Web Development for Beginners: A new Learning Path on Microsoft Learn</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/web-development-for-beginners-a-new-learning-path-on-microsoft/ba-p/2502044</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="webdev.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/290366i358D67A3A7A0B4A8/image-size/large?v=v2&px=999" role="button" title="webdev.png" alt="webdev.png" /></span></P> <P>> This is based on the Git Hub curriculum <A href="https://github.com/microsoft/Web-Dev-For-Beginners/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">https://github.com/microsoft/Web-Dev-For-Beginners</A></P> <P> </P> <P>There are 16 million developers in the world today. Roughly half of those, 8 million are web developers. Web development is therefore a good skill to have as you are looking to land that first job and build a career in tech. But where do you begin to learn all that? With this path </P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/paths/web-development-101/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Web dev for beginners path</A>.</P> </BLOCKQUOTE> <P>It covers everything from HTML, CSS, JavaScript to Accessibility. </P> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#intro-to-programming" target="_blank" rel="noopener" name="intro-to-programming"></A>Intro to programming</H2> <P>What even is programming? Well, it's a way to instruct your machine to do things for you. By running statements, you can things like creating a web a page, a simple script or why not a computer game. The possibilities are endless. You do need some kind of text editor to type it all in, we provide that to in this first module.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-introduction-programming/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Intro to programming</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#accessibility-on-the-web" target="_blank" rel="noopener" name="accessibility-on-the-web"></A>Accessibility on the Web</H2> <P>Not everyone has perfect eyesight or see the colors you do or can even see at all. As a developer you need to realize that when you build programs, you should include everyone. There are specific tags and approaches you can use to make your app usable by anyone, regardless of disability. Be inclusive and build better apps.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-accessibility/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Web accessibility</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#javascript-variables-and-data-types" target="_blank" rel="noopener" name="javascript-variables-and-data-types"></A>JavaScript variables and data types</H2> <P>One of the most popular programming languages right now is JavaScript. JavaScript can be used in the browser to create an interactive experience, but it can also be used on the backend to create APIs, application that can talk to other services and even databases. Learn how to think in programming by being introduced to the concept of variables and data types.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-variables/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">JavaScript variables and data types</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#functions" target="_blank" rel="noopener" name="functions"></A>Functions</H2> <P>When you start out, you might have all your code statements in one file. But there is a way to organize your code so it can be made more readable but also reusable. What you can do is to create named areas, functions, which can be called whenever you need them to carry out a task for you.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-functions/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Functions in JavaScript</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#decisions-with-ifelse" target="_blank" rel="noopener" name="decisions-with-ifelse"></A>Decisions with IF/ELSE</H2> <P>Your code can execute differently depending on the values of different variables or some other condition. Having that flexibility makes your application useful in many different scenarios. Learn about IF, ELSE and much more.</P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-if-else/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Decisions with IF/ELSE</A></P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/softchris/web-dev-for-beginners-on-learn-4j48-temp-slug-4222989?preview=75a0f612dc3a5e5d8048270079990c140ffcb18e23d4521c4463fe6b41d50b9cfe002e00d2ccd731d9af88204e037d60b9aab82c60824744ba2abe30#arrays-and-loops" target="_blank" rel="noopener" name="arrays-and-loops"></A>Arrays and loops</H2> <P>Sometimes your data takes on the form of a list. Imagining a recipe, or an ice cream menu or why not a receipt of things. Lists make it possible to store more than one thing and there are constructs that make it possible to operate on lists and get what you need from them such as their sum, or maybe the highest value and so on. </P> <BLOCKQUOTE> <P><A href="https://docs.microsoft.com/en-us/learn/modules/web-development-101-arrays/?WT.mc_ID=academic-33004-leestott" target="_blank" rel="noopener">Arrays and loops</A></P> </BLOCKQUOTE> <P> </P> <P> </P></description> <pubDate>Wed, 30 Jun 2021 13:46:59 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/web-development-for-beginners-a-new-learning-path-on-microsoft/ba-p/2502044</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-06-30T13:46:59Z</dc:date> ... </item> <item> <title>Machine Learning for Beginners, Curriculum</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/machine-learning-for-beginners-curriculum/ba-p/2502024</link> <description><P>It is our very great pleasure to announce the release of a new, free, MIT-licensed open-source curriculum all about classic Machine Learning:<SPAN> </SPAN><STRONG><A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning for Beginners</A></STRONG>. Brought to you by a team of Azure Cloud Advocates and Program Managers, we hope to empower students of all ages to learn the basics of ML. Presuming no knowledge of ML, we offer a free 12-week, 24-lesson curriculum, plus a bonus 'postscript' lesson to help you dive into this amazing field.</P> <BLOCKQUOTE> <P>If you liked our first curriculum,<SPAN> </SPAN><A href="https://aka.ms/webdev-beginners" target="_blank" rel="noopener">Web Dev for Beginners</A>, you will love<SPAN> </SPAN><A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning for Beginners</A>!</P> </BLOCKQUOTE> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#join-us-on-a-voyage" target="_blank" rel="noopener" name="join-us-on-a-voyage"></A>Join us on a voyage!</H2> <P>Travel around the world in this themed semester-long self-study course as we look at ML topics through the lens of world cultures.</P> <P> </P> <P>Our curricula are structured with a modified Project-Based pedagogy and include:</P> <UL> <LI>a pre-lesson warmup quiz</LI> <LI>a written lesson</LI> <LI>video</LI> <LI>knowledge checks</LI> <LI>a project to build</LI> <LI>infographics, sketchnotes, and visuals</LI> <LI>a challenge</LI> <LI>an assignment</LI> <LI>a post-lesson quiz</LI> <LI>a 'PAT' (see below)</LI> <LI>opportunities to deepen your knowledge on Microsoft Learn</LI> </UL> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#meet-the-team" target="_blank" rel="noopener" name="meet-the-team"></A>Meet the team!</H2> <P> </P> <DIV class=" fluidvids"><IFRAME src="https://www.youtube.com/embed/Tj1XWrDSYJU" width="710" height="399" allowfullscreen="allowfullscreen" class=" fluidvids-elem" loading="lazy" data-mce-fragment="1"></IFRAME></DIV> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#what-will-you-learn" target="_blank" rel="noopener" name="what-will-you-learn"></A>What will you learn?</H2> <P> </P> <P>The lessons are grouped so that you can deep-dive into various important aspects of classic ML. We start with an<SPAN> </SPAN><STRONG>introduction</STRONG><SPAN> </SPAN>to ML concepts, moving to its<SPAN> </SPAN><STRONG>history</STRONG>, concepts of<SPAN> </SPAN><STRONG>fairness</STRONG><SPAN> </SPAN>in machine learning, and discussing the tools and<SPAN> </SPAN><STRONG>techniques</STRONG><SPAN> </SPAN>of the trade. We then move on to<SPAN> </SPAN><STRONG>Regression</STRONG>,<SPAN> </SPAN><STRONG>Classification</STRONG>,<SPAN> </SPAN><STRONG>Clustering</STRONG>,<SPAN> </SPAN><STRONG>Natural Language Processing</STRONG>,<SPAN> </SPAN><STRONG>Time Series Forecasting</STRONG>,<SPAN> </SPAN><STRONG>Reinforcement Learning</STRONG>, with two<SPAN> </SPAN><STRONG>'applied'</STRONG><SPAN> </SPAN>lessons demonstrating how to use your models within web apps for inference. We end with a 'postscript' lesson listing<SPAN> </SPAN><STRONG>"real-world" applications</STRONG><SPAN> </SPAN>of ML, showing how these techniques are used "in the wild".</P> <P>To make it easy for new learners to get started with ML, we built the content so that it can be used offline and so that the exercises can be completed using .ipynb notebooks within Visual Studio Code. Grab your datasets and let's go!</P> <BLOCKQUOTE> <P>This curriculum is all about "classic Machine Learning", so we tackle these basic concepts for the most part using<SPAN> </SPAN><A href="https://scikit-learn.org/stable/user_guide.html" target="_blank" rel="noopener">Scikit-learn</A>, a library that helps demystify and explain these concepts. We don't discuss deep learning or neural networks in this ML curriculum, but please stay tuned as we release our AI for Beginners curriculum this Fall!</P> </BLOCKQUOTE> <P>Travel with us to discover North American pumpkin market pricing (Regression), Pan-Asian cuisines (Classification), Nigerian musical tastes (Clustering), European Hotel Reviews (NLP), World electricity usage (Time Series) and the Russian story about Peter and the Wolf (Reinforcement Learning).</P> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#how-to-use-this-curriculum-meet-pat" target="_blank" rel="noopener" name="how-to-use-this-curriculum-meet-pat"></A>How to use this curriculum: meet PAT</H2> <P> </P> <P>This is a self-study course, but it works well in groups so consider finding study buddies and learning together. Warm up with a pre-lesson low-stakes quiz and work through the lessons and assignments together or solo. Test your knowledge with the post-lesson quiz.</P> <P>New for this curriculum is the use of<SPAN> </SPAN><STRONG>Progress Assessment Tools</STRONG><SPAN> </SPAN>in the Discussion Board area. Once done with a lesson group, visit the Discussion Board and copy the template to a new Discussion using the "quote reply". Fill in your learnings in the self-reflection box and respond to other students in the repo. Let's learn together!</P> <P>We are also open to PRs and Issue raising, following our Code of Conduct and templating systems. We hope the community will chip in with translations of the lessons, quizzes and assignments. Thank you for participating as we learn together.</P> <H2> </H2> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#a-sneak-peek" target="_blank" rel="noopener" name="a-sneak-peek"></A>A sneak peek</H2> <P> </P> <P>This curriculum is filled with a lot of art, created by our team. Take a look at this cool sketchnote created by<SPAN> </SPAN><A class="mentioned-user" href="https://dev.to/girlie_mac" target="_blank" rel="noopener">@girlie_mac</A><SPAN> </SPAN>.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Chris_Noring_1-1625058142891.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/292562i74A89D6D4F805B73/image-size/medium?v=v2&px=400" role="button" title="Chris_Noring_1-1625058142891.jpeg" alt="Chris_Noring_1-1625058142891.jpeg" /></span></P> <P> </P> <H2><A href="https://dev.to/azure/announcing-a-new-free-curriculum-machine-learning-for-beginners-1h58#without-further-ado-please-meet-machine-learning-for-beginners-a-curriculum" target="_blank" rel="noopener" name="without-further-ado-please-meet-machine-learning-for-beginners-a-curriculum"></A><STRONG>Without further ado, please meet<SPAN> </SPAN><A href="https://aka.ms/ml-beginners" target="_blank" rel="noopener">Machine Learning For Beginners: A Curriculum</A>!</STRONG></H2> <P> </P> <P><FONT size="6"><STRONG>You need to LEARN Python? </STRONG></FONT></P> <P><STRONG>Here's our best recommendations from LEARN:</STRONG></P> <P> </P> <P><STRONG>- <A href="https://docs.microsoft.com/en-us/learn/modules/intro-to-python/" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/learn/modules/intro-to-python/</A></STRONG></P> <P><STRONG>- <A href="https://docs.microsoft.com/en-us/learn/paths/python-first-steps/" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/learn/paths/python-first-steps/</A></STRONG></P> <P> </P> <P> </P> <P> </P></description> <pubDate>Wed, 30 Jun 2021 13:42:31 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/machine-learning-for-beginners-curriculum/ba-p/2502024</guid> <dc:creator>Chris_Noring</dc:creator> <dc:date>2021-06-30T13:42:31Z</dc:date> ... </item> <item> <title>#JulyOT 2021 - 31 Days of Learning for everyone interested in the Internet of Things</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/julyot-2021-31-days-of-learning-for-everyone-interested-in-the/ba-p/2450414</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JulyOT-Cloud-Logo.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288881i3C8AEB5098245D11/image-size/large?v=v2&px=999" role="button" title="JulyOT-Cloud-Logo.png" alt="JulyOT-Cloud-Logo.png" /></span></P> <P><SPAN data-contrast="none"><FONT size="5"><STRONG>Introduction</STRONG></FONT></SPAN></P> <P><SPAN data-contrast="none">It’s a new year, and it’s time for another round of #JulyOT! This themed month of blog posts, live streams, videos, and learning materials focuses on all things related to development of IoT Solutions built using Azure IoT Services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Throughout the month of July, the IoT Cloud Advocacy team @ Microsoft will be sharing content and events put together by IoT enthusiasts from around the world. This includes content from community members, Microsoft employees, and could even involve you! </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none"><BR />For every weekday in July, we’ll focus on a featured content piece from our </SPAN><A href="https://aka.ms/julyot" target="_blank" rel="noopener"><SPAN data-contrast="none">curated collection at the IoT Tech Community</SPAN></A><SPAN data-contrast="none">. The idea is to inspire those curious about IoT to pursue their own personal projects within the realm of Internet of Things. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Make sure to bookmark our <A href="https://aka.ms/julyot" target="_blank" rel="noopener">#JulyOT post at the </A></SPAN><A href="https://aka.ms/julyot" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft IoT Tech Community</SPAN></A><SPAN data-contrast="none"> and be sure to refresh the page throughout the month, as we will be adding new content each week that align to this year’s #JulyOT Content Themes! </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><FONT size="5"><STRONG><SPAN data-contrast="none">#JulyOT Content Themes</SPAN></STRONG></FONT><SPAN><FONT size="5"> </FONT><BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="none">Each week during the month of #JulyOT, we will focus on a specific area of IoT and we are pleased to say that we have a little bit of something for everyone. See below for a quick listing of our content themes for the month!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><SPAN data-contrast="none">July 1 – 2 : #JulyOT Content Kickoff </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><SPAN data-contrast="none">July 5 – 9 : Artificial Intelligence at the Edge </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><SPAN data-contrast="none">July 12 – 16 : Beginners, Students, Teachers and Makers</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><SPAN data-contrast="none">July 19 – 23 : Microcontrollers and Embedded Hardware </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><SPAN data-contrast="none">July 26 – 30 : Online learning and Certification </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN> </LI> </UL> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Whether you are interested in applied artificial intelligence, a total beginner, a student looking to start a class project, teacher looking for an IoT course curriculum, a hardware tinkerer / hacker, or professional developer looking to designate yourself as an official </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-220?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure IoT Developer</SPAN></A><SPAN data-contrast="none">, we have you covered! Check out the sections below for more details on what to expect during these themed weeks.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">Throughout the month we'll also be hosting a variety of livestreams throughout the world as part of the <A title="Microsoft Reactor #JulyOT2021 Series" href="https://developer.microsoft.com/en-us/reactor/eventseries/JulyOT2021?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener noreferrer">Microsoft Reactor #JulyOT2021 Series</A>. Register to attend live sessions featuring QnA with experts from the Microsoft IoT Advocacy team!</SPAN></P> <P> </P> <P><A title="Microsoft Reactor #JulyOT2021 Series" href="https://developer.microsoft.com/en-us/reactor/eventseries/JulyOT2021?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="reactor.PNG" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/292963i8EBD0FE6711D8E1B/image-size/medium?v=v2&px=400" role="button" title="reactor.PNG" alt="reactor.PNG" /></span></SPAN></A></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 1 – 2 : #JulyOT Content Kickoff </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">We plan to begin #JulyOT by spreading the word far and wide ot let everyone know that we are looking to inspire interested individuals from all over the world to build innovative IoT solutions. Help us by sharing this very blog post to your favorite IoT Communities!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">July 5 – 9 : Artificial Intelligence at the Edge</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pdecarlo_0-1623782410042.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288882iF6AF3BF0746A1C13/image-size/medium?v=v2&px=400" role="button" title="pdecarlo_0-1623782410042.png" alt="pdecarlo_0-1623782410042.png" /></span></P> <P> </P> <P><A href="https://microsoft.github.io/ai-at-edge/" target="_blank" rel="noopener"><SPAN data-contrast="none">Artificial Intelligence at the Edge</SPAN></A><SPAN data-contrast="none"> is one of the hottest trends in IoT, and we have an excellent line-up of community created content to excite all who have an interest in this area. We’ll begin with a creative solution from </SPAN><A href="https://www.linkedin.com/in/goranvuksic/" target="_blank" rel="noopener"><SPAN data-contrast="none">Goran Vuksic</SPAN></A><SPAN data-contrast="none"> that leverages the </SPAN><A href="https://azure.microsoft.com/en-us/services/azure-percept?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Percept Dev Kit</SPAN></A><SPAN data-contrast="none"> and </SPAN><A href="https://www.lego.com/en-us/themes/boost?CMP=AFC-AffiliateUS-msYS1Nvjv4c-3624890-115554-1" target="_blank" rel="noopener"><SPAN data-contrast="none">Lego Boost sensors</SPAN></A><SPAN data-contrast="none"> to create an Azure Percept Mobile! Also, </SPAN><A href="https://www.linkedin.com/in/pjgcreations/" target="_blank" rel="noopener"><SPAN data-contrast="none">Peter Gallagher</SPAN></A><SPAN data-contrast="none"> and </SPAN><A href="https://www.linkedin.com/in/clifford-agius/" target="_blank" rel="noopener"><SPAN data-contrast="none">Clifford Agius</SPAN></A><SPAN data-contrast="none">, both incredible </SPAN><A href="https://mvp.microsoft.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure IoT MVPs</SPAN></A><SPAN data-contrast="none"> from the larger IoT Developer Community and hosts of </SPAN><A href="https://www.youtube.com/channel/UCVQtNIXAgtJA-w9pd17WH5A" target="_blank" rel="noopener"><SPAN data-contrast="none">Azureish Live</SPAN></A><SPAN data-contrast="none">, will share some exciting content that will show you how to build your own solutions using the </SPAN><A href="https://azure.microsoft.com/en-us/services/azure-percept?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Percept Dev Kit</SPAN></A><SPAN data-contrast="none">. This will be followed up by an article from </SPAN><A href="https://www.linkedin.com/in/chintan-shah-7b7a2811/" target="_blank" rel="noopener"><SPAN data-contrast="none">Chintan Shah</SPAN></A><SPAN data-contrast="none">, product manager at </SPAN><A href="https://nvidia.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">NVIDIA</SPAN></A><SPAN data-contrast="none">, that will show you how to enhance pre-trained AI models using the Transfer Learning Toolkit on Azure Virtual Machines! To finish off the week, Benjamin Cabe will share his infamous </SPAN><A href="https://makezine.com/2021/05/28/what-an-ai-nose-knows/" target="_blank" rel="noopener"><SPAN data-contrast="none">Artificial Nose</SPAN></A><SPAN data-contrast="none">, a device that can make sense of smells using an off the shelf microcontroller paired with </SPAN><A href="https://www.tinyml.org/" target="_blank" rel="noopener"><SPAN data-contrast="none">TinyML</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 12 – 16 : Beginners, Students, Teachers, and Makers</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pdecarlo_1-1623782562639.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288884i4CC049FE5E4CCC1D/image-size/medium?v=v2&px=400" role="button" title="pdecarlo_1-1623782562639.png" alt="pdecarlo_1-1623782562639.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">We often hear questions from folks interested in getting started with IoT, whether it is students looking to add a new in-demand skill to their learning, faculty looking for curricula to teach their knowledge-hungry students, bootcamps wanting to upskill their members, or experienced developers looking to learn a new area. This is why we’ve built </SPAN><A href="https://aka.ms/iot-beginners" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT for beginners</SPAN></A><SPAN data-contrast="none">, a free, open source, project-based, 24 lesson curriculum designed to teach you or your students IoT from the ground up, built in collaboration between Microsoft and students around the globe. We understand that not everyone has access to IoT hardware for learning, so we’ve provided multiple options for what you need to get started.</SPAN><SPAN> <BR /><BR /></SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="pdecarlo_0-1625749717591.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/294289iF90BF23C46FCDA14/image-size/medium?v=v2&px=400" role="button" title="pdecarlo_0-1625749717591.png" alt="pdecarlo_0-1625749717591.png" /></span></P> <P><SPAN data-contrast="none">One option is to use IoT kits that our friends as </SPAN><A href="https://www.seeedstudio.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Seeed Studio</SPAN></A><SPAN data-contrast="none"> have put together, based around either an Arduino-based Wio Terminal, or a Raspberry Pi:</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Wio-Terminal-Starter-Kit-p-5006.html" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT for beginners with Seeed and Microsoft - Wio Terminal Starter Kit</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://www.seeedstudio.com/IoT-for-beginners-with-Seeed-and-Microsoft-Raspberry-Pi-Starter-Kit.html" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT for beginners with Seeed and Microsoft - Raspberry Pi 4 Starter Kit</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P><SPAN data-contrast="none">The other option is to use </SPAN><A href="https://github.com/CounterFit-IoT/CounterFit" target="_blank" rel="noopener"><SPAN data-contrast="none">virtual IoT hardware that you can run on your computer</SPAN></A><SPAN data-contrast="none">, simulating a range of sensors and actuators.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">We’ll be kicking off the week with a </SPAN><A href="http://aka.ms/HelloIoTSeriesPage" target="_blank" rel="noopener"><SPAN data-contrast="none">series of livestreams</SPAN></A><SPAN data-contrast="none"> in collaboration with the </SPAN><A href="https://developer.microsoft.com/reactor/?WT.mc_id=academic-26896-jabenn" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Reactor</SPAN></A><SPAN data-contrast="none"> covering the first 4 lessons. We will then share more lessons, focusing on a different project each day. We start with learning how to use </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/2-farm" target="_blank" rel="noopener"><SPAN data-contrast="none">IoT in a smart farm</SPAN></A><SPAN data-contrast="none"> to help feed our growing population. We then move on a journey from the farm to your table with lessons based on a </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/3-transport" target="_blank" rel="noopener"><SPAN data-contrast="none">smart logistics project</SPAN></A><SPAN data-contrast="none">, tracking your food as it leaves the farm. We jump to AI on the edge next as you learn how to build an </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/4-manufacturing" target="_blank" rel="noopener"><SPAN data-contrast="none">AI powered fruit quality detector</SPAN></A><SPAN data-contrast="none"> as part of a smart factory. Retail is next on the agenda as you see how to </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/5-retail" target="_blank" rel="noopener"><SPAN data-contrast="none">build stock counting once again using AI on the edge</SPAN></A><SPAN data-contrast="none">. To round off the week it’s time to cook something nice, using a timer you’ve built as part of a </SPAN><A href="https://github.com/microsoft/IoT-For-Beginners/tree/main/6-consumer" target="_blank" rel="noopener"><SPAN data-contrast="none">voice controlled smart assistant</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN> <BR /></SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="none">As you get involved trying out these lessons and learning IoT we want you to share your experiences! Please share the IoT apps you have built with the hashtag #JulyOT!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 26 – 30 : Microcontrollers and Embedded Hardware</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="azure-sphere-end-to-end.png" style="width: 538px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288885i0A7CD10A7A86BA7E/image-size/large?v=v2&px=999" role="button" title="azure-sphere-end-to-end.png" alt="azure-sphere-end-to-end.png" /></span></P> <P><SPAN data-contrast="none">If you are not thinking about secure IoT then you should be especially considering recent ransomware attacks on American infrastructure. The focus of this week will be on building secure by design and default IoT solutions with </SPAN><A href="https://azure.microsoft.com/en-au/services/azure-sphere?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Sphere</SPAN></A><SPAN data-contrast="none"> and Azure IoT. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">This week will kickstart your Azure Sphere journey, and learn about best practices and useful tools that will make your life easier developing Azure Sphere applications. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Following this, be first to learn how we bought the </SPAN><A href="https://en.wikipedia.org/wiki/Altair_8800" target="_blank" rel="noopener"><SPAN data-contrast="none">Altair 8800</SPAN></A><SPAN data-contrast="none"> to Azure Sphere and cloud enabled the 40-year-old technology born when the internet was just a twinkle in Tim Berners-Lee's eye. This project pushed the boundaries of Azure Sphere, the project is open source and you will learn how to run the Altair 8800 on the Azure Sphere and develop Basic, Assembler and C applications on the Azure Sphere.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">We've also teamed up with Microchip to release new free courseware on </SPAN><A href="https://aka.ms/mu.microchip/AzureIoT" target="_blank" rel="noopener"><SPAN data-contrast="none">Microchip University </SPAN></A><SPAN data-contrast="none">and the Enabling a Seamless IoT Experience with Microsoft Azure IoT and Microchip MCUs/MPUs </SPAN><A href="https://aka.ms/mu.microchip/AzureIoT/ConnectingDevices/Webinar" target="_blank" rel="noopener"><SPAN data-contrast="none">on-demand webinar</SPAN></A><SPAN data-contrast="none">. Courses will cover the full device lifecycle, including provisioning at scale, connecting devices to the cloud, and working with top Microchip MCUs. (PIC, SAM E54, etc) Plus, we will cover how to work with IoT Plug and Play and using Azure IoT Central for device management. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">And finally, the Raspberry Pi Foundation released the new RP2040 based Raspberry Pi Pico this year and there is now a Wi-Fi enabled developer board built on the RP2040 from </SPAN><A href="https://store.arduino.cc/usa/nano-rp2040-connect-with-headers" target="_blank" rel="noopener"><SPAN data-contrast="none">Arduino</SPAN></A><SPAN data-contrast="none">. In this segment we will cover how to connect an RP2040 based microcontrollers to Azure IoT and Azure IoT Central with the new </SPAN><A href="https://github.com/Azure/azure-sdk-for-c" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure SDK for Embedded C</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">July 27 – 31 : Online Learning and Certification</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="0.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/288890i36CFFBAC67F7DE5E/image-size/medium?v=v2&px=400" role="button" title="0.jpg" alt="0.jpg" /></span></SPAN></P> <P> </P> <P><SPAN data-contrast="none">During these 31 days, we also want to challenge our community to sharpen their knowledge of Azure IoT Services by offering an Azure IoT Developer Journey designed to guide learners in pursuit of an official designation as a </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-220?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">certified Azure IoT Developer</SPAN></A><SPAN data-contrast="none">. We are accompanying this Learning journey with a “</SPAN><A href="https://developer.microsoft.com/en-us/offers/30-days-to-learn-it?challenge_option=6437124F-B20B-4840-9715-CFD6D3F25C89?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">30 Days to Learn It - Cloud Skills Challenge</SPAN></A><SPAN data-contrast="none">”. This is a limited-time promotion that will challenge you to learn and apply knowledge of Azure IoT Services by completing a </SPAN><A href="https://docs.microsoft.com/en-us/users/cloudskillschallenge/collections/n52yhn0emjx0?WT.mc_id=cloudskillschallenge_6437124F-B20B-4840-9715-CFD6D3F25C89?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">curated series of interactive learning</SPAN></A><SPAN data-contrast="none"> modules from the </SPAN><A href="https://docs.microsoft.com/en-us/learn/browse/?expanded=azure&products=azure-iot%2Cazure-iot-central%2Cazure-iot-edge%2Cazure-iot-hub&resource_type=module" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Learn Online Learning Platform</SPAN></A><SPAN data-contrast="none">. Once you have registered for the Cloud Skills Challenge, if you are able to complete the assigned modules within a 30-day time period, you may be eligible to receive a 50% off voucher to take the official </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-220?WT.mc_id=iot-21003-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">AZ-220 IoT Developer Certification Exam</SPAN></A><SPAN data-contrast="none">.” </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Otherwise, if you would like to complete the recommended learning outside the 30 Days to learn it here are the individuals learning paths:</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/introduction-to-azure-iot/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Introduction to Azure IoT</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/build-intelligent-edge-with-azure-iot-edge/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Build the intelligent edge with Azure IoT Edge</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/securely-connect-iot-devices/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Securely connect IoT devices to the cloud</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/develop-iot-solutions-with-azure-iot-central/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop IoT solutions with Azure IoT Central</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="5" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><A href="https://docs.microsoft.com/en-us/learn/paths/develop-azure-digital-twins/?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop with Azure Digital Twins</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <P> </P> <P><SPAN data-contrast="none">Apart from the self-paced learning approach if you prefer an instructor-led approach to complete your certification training here is where you may find </SPAN><A href="https://docs.microsoft.com/en-us/learn/certifications/courses/az-220t00?WT.mc_id=iot-20412-cxa" target="_blank" rel="noopener"><SPAN data-contrast="none">more information</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Also, during this week you will learn more about how to </SPAN><A href="https://aka.ms/IoT-online-workshop" target="_blank" rel="noopener"><SPAN data-contrast="none">build end to end IoT solutions with our 6 part series.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN><SPAN data-contrast="auto">Learn how you can implement Microsoft Azure Defender for IoT to secure your entire IoT/OT environment, protect existing IoT/OT devices, and build security into new IoT innovations in our </SPAN><A href="https://aka.ms/defenderiot" target="_blank" rel="noopener"><SPAN data-contrast="none">new learning path</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">If you would like to take your learning journey to the next level, applying and relating services and concepts to a real-world scenario, we have a bunch of demo resources, virtual cloud workshops and hands-on labs to help you tackle some of these common scenarios end-to-end whether you are a developer, architect or decision maker trying to apply some of these key concepts to your industry or specific business scenario:</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="6" data-aria-level="1"><SPAN data-contrast="none">Leveraging Azure Digital Twins in a supply chain (</SPAN><A href="https://github.com/microsoft/MCW-Leveraging-Azure-Digital-Twins-in-a-supply-chain" target="_blank" rel="noopener"><SPAN data-contrast="none">MCW</SPAN></A><SPAN data-contrast="none"> version, </SPAN><A href="https://github.com/Azure-Samples/IoTDemos/tree/master/ADT-SupplyChainDemo" target="_blank" rel="noopener"><SPAN data-contrast="none">GitHub</SPAN></A><SPAN data-contrast="none"> version)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559737":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><A href="https://github.com/Azure-Samples/IoTDemos/tree/master/RetailDemo" target="_blank" rel="noopener"><SPAN data-contrast="none">Retail Demo - Instore Analytics</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559737":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="8" data-aria-level="1"><A href="https://github.com/Azure-Samples/IoTDemos/tree/master/WorkplaceHealthAndSafetyDemo" target="_blank" rel="noopener"><SPAN data-contrast="none">Workplace Health and Safety Demo</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559737":0,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="4" aria-setsize="-1" data-aria-posinset="8" data-aria-level="1"><SPAN data-contrast="none">Chocolate Manufacturing Factory Condition Monitoring using Azure Digital Twins (MS Learn </SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/develop-azure-digital-twins/" target="_blank" rel="noopener"><SPAN data-contrast="none">version</SPAN></A><SPAN data-contrast="none">, GitHub </SPAN><A href="https://github.com/Azure-Samples/digital-twins-samples/tree/master/HandsOnLab" target="_blank" rel="noopener"><SPAN data-contrast="none">version</SPAN></A><SPAN data-contrast="none">)</SPAN><SPAN data-contrast="none"> </SPAN></LI> </UL> <P><FONT size="5"><STRONG><SPAN data-contrast="none">Conclusion:</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P><SPAN data-contrast="none">We hope to inspire all who partake in #JulyOT with the motivation to learn and apply your knowledge to create something new! If you have an idea, let us know about it on social media by using the hashtag #JulyOT to share your ideas and creations! We plan to feature your awesome submissions in a follow-up post, so start thinking about that project you always wanted to and keep us posted along the way, we can’t wait to see what you create!</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P></description> <pubDate>Thu, 08 Jul 2021 13:11:08 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/julyot-2021-31-days-of-learning-for-everyone-interested-in-the/ba-p/2450414</guid> <dc:creator>pdecarlo</dc:creator> <dc:date>2021-07-08T13:11:08Z</dc:date> ... </item> <item> <title>Combating gender-based violence in South Africa with Microsoft Azure</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/combating-gender-based-violence-in-south-africa-with-microsoft/ba-p/2417972</link> <description><P>When Naomi and Christine Bisimwa took part in the Microsoft Hackathon, they had one goal: help local women experiencing gender-based violence.</P> <P> </P> <P>The result? S.A.F.E., a platform dedicated to empowering and protecting women. </P> <P> </P> <P>These dedicated developers led a team called “Combat against GBV” in using Microsoft Azure, AI, and GitHub to create an educational and interactive solution for women and children, accessible through Twitter, Facebook Messenger, and WhatsApp.</P> <P> </P> <P>In this video, Naomi and Christine Bisimwa explain the importance of cloud and mobile technology in tackling the rampant effects of gender-based violence in South Africa and the role their chatbot plays in empowering girls and women in their community to take their lives back into their own hands.</P> <P> </P> <P>If you are interested in being a change agent in your community, sharpen your technical skills today at <A href="http://aka.ms/trainingandcertification" target="_self">aka.ms/trainingandcertification</A>.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=rHpNoZthYWw" align="center" size="large" width="600" height="338" uploading="false" thumbnail="http://i.ytimg.com/vi/rHpNoZthYWw/hqdefault.jpg" external="url"></LI-VIDEO></P></description> <pubDate>Fri, 11 Jun 2021 06:23:58 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/combating-gender-based-violence-in-south-africa-with-microsoft/ba-p/2417972</guid> <dc:creator>Elsa_Ramesh</dc:creator> <dc:date>2021-06-11T06:23:58Z</dc:date> ... </item> <item> <title>Fusion Teams 101: Low-Code Apps with Power Platform</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/fusion-teams-101-low-code-apps-with-power-platform/ba-p/2414037</link> <description><P aria-level="1"><STRONG><SPAN data-contrast="auto">Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":240,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, there will be a blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">LCAD on Azure is a solution that integrates the robust development capabilities of low code Microsoft Power Apps and the Azure products such as Azure Functions, Azure Logic Apps, and more.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This month’s webinar is </SPAN><A href="https://info.microsoft.com/ww-Landing-fusion-teams-101LowCode-power-platform.html" target="_blank" rel="noopener"><SPAN data-contrast="none">‘Fusion Teams 101: Low Code Apps with Power Platform.’</SPAN></A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1622747557549.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286060i942D4AE1E8A54363/image-size/large?v=v2&px=999" role="button" title="riduncan_0-1622747557549.png" alt="riduncan_0-1622747557549.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">This blog will briefly recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="auto">provide an overview of the </SPAN><STRONG><SPAN data-contrast="auto">fusion development learning path</SPAN></STRONG><SPAN data-contrast="auto">, low code </SPAN><STRONG><SPAN data-contrast="auto">serverless architecture</SPAN></STRONG><SPAN data-contrast="auto">, and recent </SPAN><STRONG><SPAN data-contrast="auto">pro developer focused updates to the Power Platform</SPAN></STRONG><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This is a helpful blog for those looking to deep dive on Fusion Development with Power Platform and those who want to integrate a fusion development team in their work environment.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What is Low code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">was created to help developers build business applications faster with less code.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees track incoming inventory.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy. Using Power Apps, it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">To learn more about possible scenarios with LCAD on Azure go through the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">self-guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_1-1622747557535.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286061iF8B49FD1CB33A415/image-size/large?v=v2&px=999" role="button" title="riduncan_1-1622747557535.png" alt="riduncan_1-1622747557535.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":240}"> </SPAN><STRONG><SPAN data-contrast="auto">Fusion Development Learning Path</SPAN></STRONG><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">The fusion development learning path is centered around a unique story telling style.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The learner is embedded as part of the fusion development team and helps them solve their business problem. The fusion team needs to track inventory more easily and needs to track data on their back end, but the data is in a legacy back end.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The two teams of the professional developers and the citizen developers work together, and the learning path situates you as a member of the team. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1622747557581.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286062i8820CBCAE7374D8E/image-size/large?v=v2&px=999" role="button" title="riduncan_2-1622747557581.png" alt="riduncan_2-1622747557581.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Below are the</SPAN><STRONG><SPAN data-contrast="auto"> 5 modules</SPAN></STRONG><SPAN data-contrast="auto"> that you walk through to solve the problem. Keep in mind each module can be completed individually but you learn more throughout each module. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1622747557575.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286065i268087B1732C6B15/image-size/large?v=v2&px=999" role="button" title="riduncan_3-1622747557575.png" alt="riduncan_3-1622747557575.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN><STRONG><SPAN data-contrast="auto">Transform Business Software Authoring </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">You learn how software development, IT, and business teams work better together using a new software paradigm called fusion development and how to develop apps better and faster using fusion development, which increases technical intensity.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Understanding Low Code as a Traditional Developer</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Professional developers are used to using VS and VS Code, Power Apps is a different environment therefore the module covers bridging the gap between existing traditional development knowledge and Power Apps logic, user interface creation, and data flow.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, the module introduces Microsoft Power Fx, the language you write in Power Apps, not just drag, and drop but can write code behind it. You will see the Power Fx formula, and the JavaScript equivalent will be side by side so you can see how you would traditionally build it.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Build a Power Apps component </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">This module is about building a custom Power Apps component. The ability for code first developers to create something that does not exist yet, build it, test it, deploy it in Power Apps. Like their current role but they only build one component of the app rather than build the entire app.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Integrate Open API-enabled web APIs with Azure API Management through Visual Studio.</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">In this module you take a web API, add an Open API description to it, and deploy to Azure App Service and API Management.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto"> Discover and use web APIs with Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Lastly, in this module you build a custom connector to bridge the gap between Power Apps and API Management to bring an existing web service into your Power App.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">In the webinar the presenter, Matt Soucoup will take you through a demo on building the inventory management application and will walk you through modules 2, 4, and 5.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Low Code Serverless Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To understand the benefits of building a low code serverless architecture you must first understand the benefits of serverless and traditional PaaS architectures.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_4-1622747557537.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286063iC725EEBCB5C35664/image-size/large?v=v2&px=999" role="button" title="riduncan_4-1622747557537.png" alt="riduncan_4-1622747557537.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN><STRONG><SPAN data-contrast="auto">What is Serverless?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Serverless applications can be defined by three groups, abstraction of servers, event-driven or instant scale applications, and micro-billing charges.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Abstraction of servers</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">When as a professional developer you deploy and develop apps, but you don't have to manage servers.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Event-driven/instant scale</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The ability for your apps to scale elastically, scaling can be triggered and be brought back down as needed.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Micro-billing</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">You are billed on a per transaction basis for the services your applications consume.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Conventional PaaS Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_5-1622747557551.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286064iFA745E64C3991EA2/image-size/large?v=v2&px=999" role="button" title="riduncan_5-1622747557551.png" alt="riduncan_5-1622747557551.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">It was important to highlight the benefits of serverless before we dove into the differences of conventional PaaS architectures, standard serverless architectures, and serverless architectures that leverage low code.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">In conventional PaaS architectures web and mobile front ends are where the end user consumes the application. While the business logic is hosted in an app service, if you’re using Azure, then Azure App Service.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">That app service communicates with the database, however if any adjustments are needed for the application the entire app must be taken down. Or if a function in the app needs to scale up, the entire app must scale up which increases costs.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Serverless Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_6-1622747557565.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286068iCCD52C5A82FA73B6/image-size/large?v=v2&px=999" role="button" title="riduncan_6-1622747557565.png" alt="riduncan_6-1622747557565.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">With standard serverless architectures the way the end user experiences the app on a web or mobile front end is all normal. However, rather than the app being stored in an app service, it is broken into its core functions as serverless APIs, on Azure we call this service Azure Functions.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">These functions have all the above-listed benefits of serverless applications, the ability to scale elastically and only pay for what you consume. Moreover, react or angular software is used to build the front end.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Low Code Serverless Architecture</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_7-1622747557567.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286067iAB321E6552479CC0/image-size/large?v=v2&px=999" role="button" title="riduncan_7-1622747557567.png" alt="riduncan_7-1622747557567.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Serverless Architecture with Power Apps can be the same build architecture as a standard serverless architecture build. However, rather than React or Angular software it is replaced with Power Apps to build the front end of the app. Power Apps takes less time than traditional front end build software and can save up to 74% on development costs.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Build 2021 Fusion Team Power Platform Enhancements</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="auto">In the webinar the speaker, Kartik Kanakasabesan walks you through the new improvements to the Power Platform’s capabilities for professional developers and fusion teams. More specifically, he demonstrates the </SPAN><STRONG><SPAN data-contrast="auto">Microsoft Power Platform Command Line interface support for packages and canvas source files</SPAN></STRONG><SPAN data-contrast="auto">, </SPAN><STRONG><SPAN data-contrast="auto">Microsoft Power Platform tools for Visual Studio Code and Visual Studio</SPAN></STRONG><SPAN data-contrast="auto">, and the </SPAN><STRONG><SPAN data-contrast="auto">New Microsoft Power Platform application lifecycle management accelerators</SPAN></STRONG><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Power Platform Command Line interface support for packages and canvas source files</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_8-1622747557539.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286066i8FDF824BD233D71F/image-size/large?v=v2&px=999" role="button" title="riduncan_8-1622747557539.png" alt="riduncan_8-1622747557539.png" /></span></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">As part of the fusion theme, Microsoft now provides developers with the ability to render canvas apps in a source-code-friendly format. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The benefit of this capability is to enable canvas applications to take advantage of enterprise CI/CD pipelines for deployment and enhance the collaboration between citizens and code-first developers.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">For example, when resolving Power Fx functions, a citizen developer referencing a complicated regular expression for rounding updates in their canvas app, can collaborate with a pro developer to fix the function in the developer’s primary tool.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The citizen developer can then continue with their application development work using the fixed regular expression by the pro developer.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_9-1622747557568.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286071i09A5A1F1A1D087CD/image-size/large?v=v2&px=999" role="button" title="riduncan_9-1622747557568.png" alt="riduncan_9-1622747557568.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_10-1622747557569.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286070i8D1B18AEE581C477/image-size/large?v=v2&px=999" role="button" title="riduncan_10-1622747557569.png" alt="riduncan_10-1622747557569.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><I><SPAN data-contrast="none">Traditional rendition of Canvas App in Source control system (Top) issuing the unpack command (Bottom).</SPAN></I></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_11-1622747557553.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286069i9080CB02BCC1B959/image-size/large?v=v2&px=999" role="button" title="riduncan_11-1622747557553.png" alt="riduncan_11-1622747557553.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_12-1622747557574.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286073i164F56C749C5AEFB/image-size/large?v=v2&px=999" role="button" title="riduncan_12-1622747557574.png" alt="riduncan_12-1622747557574.png" /></span></P> <P><I><SPAN data-contrast="none">Source code rendition of a canvas app (Top) authoring PowerFx in VSCode (Bottom).</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">In addition, the Microsoft Power Platform CLI now also simplifies the package deployment process for Microsoft Power Platform developers and independent software vendors (ISVs).</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past, this process required several other command-line tools just to deploy a package into an environment. Now the Microsoft Power Platform CLI has a simple new sub command called </SPAN><I><SPAN data-contrast="none">package.</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">Within the package sub command, developers can now initialize a package with a template, add package references to solutions, and build and deploy without manual procedures. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN> <BR /></SPAN><STRONG><SPAN data-contrast="auto">Microsoft Power Platform tools for Visual Studio Code and Visual Studio</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_13-1622747557554.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286072i4E4815B42D1D7CE2/image-size/large?v=v2&px=999" role="button" title="riduncan_13-1622747557554.png" alt="riduncan_13-1622747557554.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">Microsoft has been actively working on simplifying the myriad of tools required to develop, pack, and deploy code first components to Microsoft Power Platform.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> Microsoft Power Platform CLI was the first iteration of this, and there are now similar capabilities directly into the code first experience for developers in Visual Studio Code.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The Visual Studio Code extension will be available across different Operating System platforms like Windows and Mac OS, as Microsoft continues to bring consistent experiences across platforms. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_14-1622747557576.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286074i5412B67F789CA18F/image-size/large?v=v2&px=999" role="button" title="riduncan_14-1622747557576.png" alt="riduncan_14-1622747557576.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">In addition to the Visual Studio Code capabilities, the Visual Studio team has been actively working on improving the application programming interface (API) publishing experience for developers.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past, developers building APIs would have to go outside of their developer environment, after publishing their API to Azure, to register their API in Azure API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">There are improvements to simplify the process and provide the ability to publish the API and register in API Management from Visual Studio directly. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_15-1622747557556.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286077i3BCCDD8E4B3BDDB1/image-size/large?v=v2&px=999" role="button" title="riduncan_15-1622747557556.png" alt="riduncan_15-1622747557556.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_16-1622747557557.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286078iCBE0FF28002BD7BB/image-size/large?v=v2&px=999" role="button" title="riduncan_16-1622747557557.png" alt="riduncan_16-1622747557557.png" /></span></P> <P> </P> <P><I><SPAN data-contrast="none">Publishing the API and registering the API in API Management from Visual Studio.</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">Once the API is registered in the API Management catalog, a developer can then export the API to Microsoft Power Platform as an API Management connector with only a few clicks.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_17-1622747557540.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286076iE984A0EED53BE036/image-size/large?v=v2&px=999" role="button" title="riduncan_17-1622747557540.png" alt="riduncan_17-1622747557540.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_18-1622747557542.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286079iCA063A57DF938B03/image-size/large?v=v2&px=999" role="button" title="riduncan_18-1622747557542.png" alt="riduncan_18-1622747557542.png" /></span></P> <P> </P> <P><I><SPAN data-contrast="none">Publishing the API from Management to Microsoft Power Platform.</SPAN></I></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_19-1622747557559.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286081iBCFC1DC6F1489C62/image-size/large?v=v2&px=999" role="button" title="riduncan_19-1622747557559.png" alt="riduncan_19-1622747557559.png" /></span><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">This now allows citizen developers to easily access their own company data when creating Microsoft Power Platform apps and flows.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Similarly, this capability expanded to also include Azure Functions, allowing developers to build serverless functions and have them be consumed via API Management in Microsoft Power Platform.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Using the Visual Studio 2019 preview edition, developers within Visual Studio can author their Azure Functions, and publish them directly into Azure, where </SPAN><A href="https://aka.ms/openapifunctions" target="_blank" rel="noopener"><SPAN data-contrast="none">developers are also able to register their Functions in API Management without leaving Visual Studio</SPAN></A><SPAN data-contrast="none">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_20-1622747557560.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286080i1EFF9315E5D8BA53/image-size/large?v=v2&px=999" role="button" title="riduncan_20-1622747557560.png" alt="riduncan_20-1622747557560.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_21-1622747557543.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286084iB92B450F34773342/image-size/large?v=v2&px=999" role="button" title="riduncan_21-1622747557543.png" alt="riduncan_21-1622747557543.png" /></span></P> <P><I><SPAN data-contrast="none">Publishing Azure Functions and registering in API Management from within Visual Studio.</SPAN></I></P> <P> </P> <P><SPAN data-contrast="none">Once the API is published and registered in API Management, the API can be exported as a connector to Microsoft Power Platform and consumed by apps and flows with ease.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_22-1622747557533.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286082iCFF2C8DCF1591175/image-size/large?v=v2&px=999" role="button" title="riduncan_22-1622747557533.png" alt="riduncan_22-1622747557533.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_23-1622747557544.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286083i4C66A06F54C4341B/image-size/large?v=v2&px=999" role="button" title="riduncan_23-1622747557544.png" alt="riduncan_23-1622747557544.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_24-1622747557508.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286085iAD65B72DC5C1D72E/image-size/large?v=v2&px=999" role="button" title="riduncan_24-1622747557508.png" alt="riduncan_24-1622747557508.png" /></span></P> <P><I><SPAN data-contrast="none">Using the Azure Function as Custom Connector in Microsoft Power Platform Applications.</SPAN></I><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Microsoft is constantly looking at ways to make citizens and pro developers collaborate in a frictionless way, without leaving their authoring environments.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> You can download Visual Studio 2019 build 16.10 to try out these API publishing capabilities in June.</SPAN></P> <P> </P> <P aria-level="3"><STRONG><SPAN data-contrast="none">New Microsoft Power Platform application lifecycle management accelerators</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_25-1622747557570.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286086i82C3ED72B12F59B5/image-size/large?v=v2&px=999" role="button" title="riduncan_25-1622747557570.png" alt="riduncan_25-1622747557570.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">The </SPAN><A href="https://aka.ms/coestarterkit" target="_blank" rel="noopener"><SPAN data-contrast="none">Center of Excellence (CoE) Starter Kit</SPAN></A><SPAN data-contrast="none">, empowers pro and citizen developers alike to participate in </SPAN><A href="https://docs.microsoft.com/en-us/power-platform/alm/" target="_blank" rel="noopener"><SPAN data-contrast="none">application lifecycle management (ALM)</SPAN></A><SPAN data-contrast="none"> and accelerate the process with out-of-the-box Azure DevOps pipelines and GitHub workflow templates.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The accelerators will be open source and available at the </SPAN><A href="https://github.com/microsoft/coe-starter-kit" target="_blank" rel="noopener"><SPAN data-contrast="none">new CoE Starter Kit GitHub repository</SPAN></A><SPAN data-contrast="none">. An </SPAN><A href="https://www.youtube.com/watch?v=aO-CmmGebLk" target="_blank" rel="noopener"><SPAN data-contrast="none">overview of the accelerators is available here</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_26-1622747557578.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286087i613386931E8C2531/image-size/large?v=v2&px=999" role="button" title="riduncan_26-1622747557578.png" alt="riduncan_26-1622747557578.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">New template Dataverse Solution to reference and exercise pipelines and workflows ensures all developers understand all elements of how the toolkit works and what’s available.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">With ready-to-go pipeline templates enabling Microsoft Power Platform ALM scenarios that can be quickly configured to drive advanced scenarios, developers can now benefit from a streamlined experience saving them valuable time.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_27-1622747557571.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286089iB2AE1B013FF54869/image-size/large?v=v2&px=999" role="button" title="riduncan_27-1622747557571.png" alt="riduncan_27-1622747557571.png" /></span></P> <P><SPAN data-contrast="none">New canvas app for </SPAN><A href="https://aka.ms/aa4am" target="_blank" rel="noopener"><SPAN data-contrast="none">developers and advanced makers</SPAN></A><SPAN data-contrast="none"> familiar with GitHub concepts and Azure DevOps will offer a convenient way to drive the dev loop.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">It allows developers to manage all Dataverse solutions in a single place, enables an easy approach to commit to Git branches, submit pull requests, and deploy specific builds to a dev environment while surfacing the status of those activities.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_28-1622747557573.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286090iE410E3C14F746CD0/image-size/large?v=v2&px=999" role="button" title="riduncan_28-1622747557573.png" alt="riduncan_28-1622747557573.png" /></span><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">New canvas app for </SPAN><A href="https://aka.ms/aa4m" target="_blank" rel="noopener"><SPAN data-contrast="none">citizen developers</SPAN></A><SPAN data-contrast="none"> will offer an easy approach to drive their portion of DevOps by viewing and managing source code on GitHub and community contributions.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Once a project is created and approved, a dashboard allows users to view projects and navigate to the maker portal to build and create assets under a newly created solution in just a few clicks.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Makers can deploy their progress or finalized solution to a test and a production environment.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_29-1622747557562.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286088i2002DE1C5FDB034F/image-size/large?v=v2&px=999" role="button" title="riduncan_29-1622747557562.png" alt="riduncan_29-1622747557562.png" /></span></P> <P> </P> <P><A href="https://github.com/microsoft/coe-starter-kit" target="_blank" rel="noopener"><SPAN data-contrast="none">Open source on GitHub</SPAN></A><SPAN data-contrast="none">, with acceptance of community contributions, is coming soon.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">With an active backlog on GitHub, Microsoft is actively building new functionality and will start accepting changes from the community soon to make the toolkit better for all developers.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN> <BR /></SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_30-1622747557579.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286093i6036B84F6390FBA3/image-size/large?v=v2&px=999" role="button" title="riduncan_30-1622747557579.png" alt="riduncan_30-1622747557579.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">This is just the beginning of what is possible with fusion team development. To learn more about Fusion teams watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-fusion-teams-101LowCode-power-platform.html" target="_blank" rel="noopener"><SPAN data-contrast="none">Fusion Teams 101 Low Code Apps with Power Platform webinar</SPAN></A><SPAN data-contrast="auto"> that premiers June 4</SPAN><SPAN data-contrast="auto">th</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_31-1622747557563.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286091iAD2562D3828437FE/image-size/large?v=v2&px=999" role="button" title="riduncan_31-1622747557563.png" alt="riduncan_31-1622747557563.png" /></span></P> <P> </P> <P aria-level="1"><SPAN data-contrast="auto">To get hands on experience creating a custom connector and extending a Power App with custom code as covered in this blog, start with the new learning path </SPAN><SPAN data-contrast="none">“</SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Transform your business applications with fusion development”.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559738":240,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="1"> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_32-1622747557546.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286092iC488ED8843095003/image-size/large?v=v2&px=999" role="button" title="riduncan_32-1622747557546.jpeg" alt="riduncan_32-1622747557546.jpeg" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P aria-level="1"><SPAN data-contrast="none">After completing the learning path, if you want to learn even more about how extend your low code applications with Azure and establishing a fusion development team in your organization read the accompanying e-book “</SPAN><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_blank" rel="noopener"><SPAN data-contrast="none">Fusion development approach to building apps using Power Apps”.</SPAN></A></P> <P aria-level="1"> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_33-1622747557547.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286095iD06FE0141D13DB71/image-size/large?v=v2&px=999" role="button" title="riduncan_33-1622747557547.jpeg" alt="riduncan_33-1622747557547.jpeg" /></span></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, if you want to try the new Power Platform Visual Studio and Visual Studio Code Extensions, visit </SPAN><A href="https://marketplace.visualstudio.com/items?itemName=microsoft-IsvExpTools.powerplatform-vscode" target="_blank" rel="noopener"><SPAN data-contrast="none">aka.ms/ppcvscode</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_34-1622747557526.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/286094iA9455EC53713A775/image-size/large?v=v2&px=999" role="button" title="riduncan_34-1622747557526.png" alt="riduncan_34-1622747557526.png" /></span></P></description> <pubDate>Thu, 10 Jun 2021 21:48:44 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/fusion-teams-101-low-code-apps-with-power-platform/ba-p/2414037</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-06-10T21:48:44Z</dc:date> ... </item> <item> <title>Community and certification related resources for developers</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/community-and-certification-related-resources-for-developers/ba-p/2382116</link> <description><P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">At Build 2021, we are hosting a table topic for developers - <A href="https://mybuild.microsoft.com/sessions/9d3582b7-4169-4b80-84fa-367dccad3d41?source=sessions" target="_blank" rel="noopener">How the community and certifications can help you achieve more</A>.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Here are a list useful links that will support you to do more with the community and learning resources at Microsoft.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Developer Content</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/learn/tv/" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="LearnTV.png" style="width: 455px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/331507i33C9B0AFA2B76EBE/image-dimensions/455x263?v=v2" width="455" height="263" role="button" title="LearnTV.png" alt="LearnTV.png" /></span></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Learn TV</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Learn how to build solutions and use Microsoft products from the experts that built them! Learn TV is the place to find the latest digital content so you can always keep updated on the latest announcements, features, and products from Microsoft.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/learn/tv/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/tv/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Channel 9</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Channel 9 is a community where we bring forward the people behind our products and connect them with you. One of the recommended shows is <SPAN style="font-weight: bold;">CodeStories</SPAN>, where we showcase local Cloud Advocates, MVPs, Product Managers and Community Leaders.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://channel9.msdn.com/" target="_blank" rel="noopener">https://channel9.msdn.com/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2Fc9CodeStories&data=04%7C01%7Cv-zugree%40microsoft.com%7C838d8abe57244217116808d91bd32a15%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637571416018864233%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=l1YwAy1w8aGFty7bl7BlWVLsDsVchW0yNdmMljAaxkw%3D&reserved=0" target="_blank" rel="noopener">https://aka.ms/c9CodeStories</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft.Source</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Get the latest articles, documentation, and events from Microsoft. Source—the curated monthly developer community newsletter.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://azure.microsoft.com/resources/join-the-azure-developer-community/" target="_blank" rel="noopener">https://azure.microsoft.com/resources/join-the-azure-developer-community/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Tech News</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The monthly newsletter for developers and tech professionals, tailored to your preferences. Get the latest information from around Microsoft, covering technology advancements, interesting finds, product news, and events near you.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://developer.microsoft.com/Newsletter/" target="_blank" rel="noopener">https://developer.microsoft.com/Newsletter/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Community</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Developer Communities</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Discover and connect with others who build with Microsoft tools and services.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdeveloper.microsoft.com%2Fcommunity%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7Cbeba118009a44be2d09408d91cb02f05%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637572365289462464%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=N%2FPzxWNBvWtmFYJ%2FPkBlfa1EO9XWfg4Dae8itwHYQH4%3D&reserved=0" target="_blank" rel="noopener">https://developer.microsoft.com/community/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Azure</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Your community for best practices and the latest news on Azure.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://techcommunity.microsoft.com/t5/azure/ct-p/Azure" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/azure/ct-p/Azure</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft 365</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Microsoft 365 on Tech Community.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://techcommunity.microsoft.com/t5/microsoft-365/ct-p/microsoft365" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/microsoft-365/ct-p/microsoft365</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Dynamics 365</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Engage with experts and peers in our forums; discover blogs, webinars, videos, events, and more.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://community.dynamics.com/" target="_blank" rel="noopener">https://community.dynamics.com/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform Community</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Microsoft community site for Power Platform. It has separate forums for Power Apps, Power Automate, Power BI, and Power Virtual Agents. The new community user groups can also be accessed from here.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpowerusers.microsoft.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175919819%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=e3mYIKzS6ldoah8ZLdBHyGVCIF7KoNjoccEgTTlnhDc%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://powerusers.microsoft.com </SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Learning and Certification Resources</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Learn</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The home for Microsoft documentation and learning for developers and technology professionals.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://docs.microsoft.com/learn/" target="_blank" rel="noopener">https://docs.microsoft.com/learn/</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">30 Days to Learn It</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">30 Days to Learn It can help you build skills and start your preparation for Microsoft Certifications for AI, DevOps, Microsoft 365, low code, IoT, data science, cloud development, and more.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://aka.ms/30-Days-To-Learn-It" target="_blank" rel="noopener">https://aka.ms/30-Days-To-Learn-It</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Microsoft Learn Certifications</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Earn certifications that show you are keeping pace with today’s technical roles and requirements.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Fmicrosoft.com%2Fcertifications&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776530327%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=QWZEJDmWFBYBhsd8Bglujf1zdp3NYoJeCfXiLRUNmZU%3D&reserved=0" target="_blank" rel="noopener">Microsoft.com/certifications </A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Certification Training Poster</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Expand your technical skill set for Azure, Microsoft 365, Dynamics 365, and Power Platform. Certification overview poster with aligned exams – updated monthly.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2Ftraincertposter&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776530327%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=4pqQ4C%2BLDDK6YYE1qfbBXRn9YzXe46n0XkteaaGzZb0%3D&reserved=0" target="_blank" rel="noopener">Aka.ms/CertTrainPoster </A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Certification Renewal Overview</SPAN></P> <H1 style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">Stay current with in-demand skills through free certification renewals.</H1> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Faka.ms%2FCertRenewalOverview&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776540320%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Y90y2pKId0I9hNXMLwPFPzQY1bJKnNV4KfhcKc0UqJQ%3D&reserved=0" target="_blank" rel="noopener">Aka.ms/CertRenewalOverview</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Training and Certification Deck </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">The Microsoft Azure training and certifications guide has been created to provide training and certification options to achieve personal success. It includes resources such as certification portfolio, overview, journey and learning path to help you prepare for your learning experience.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Faka.ms%2Ftraincertdeck&data=04%7C01%7Cv-zugree%40microsoft.com%7C74371ac8a91f4e06c0c608d91e5d2a81%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574207776550314%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=GeBBul%2FA3nw3aFYr%2FO4HXoPmsdGdbbZrz%2Bs7yhJ4iik%3D&reserved=0" target="_blank" rel="noopener">Aka.ms/TrainCertDeck</A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 14.0pt; color: #7f7f7f;"><SPAN style="font-weight: bold; text-decoration: underline;">Resources shared by Julian Sharp</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Want to get involved? Connect with <LI-USER uid="8450"></LI-USER> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Community events </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Community led weekly events covering all aspects of Dynamics 365 and Power Platform.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fevents.powercommunity.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175919819%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=V7wW4amCZdT8BhPsqNd7bvkLJWVFrrh15hAzpQ8U8Bw%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://events.powercommunity.com </SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform School </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">The Power Platform Summer School works with adults from the BAME community, providing training on the Microsoft Power Platform as well as mentorship from industry professionals, during an 8 week program.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpowerplatformschool.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175929811%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=88g3OnN4%2FLcF%2FMPbE%2B%2B1rsM%2FquDYpIMdCnIz4NqbT4s%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://powerplatformschool.com</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform Starter Days</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">Inspiring people to find their way into the tech industry and set the stage for them to start into a Power Platform tech career.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpowerplatformstarterdays.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175939810%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=cafLURw7n624hUVknfWXpkdWbzEm6CCfoYceUF%2F4Zhw%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://powerplatformstarterdays.com </SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Platform Hackathons</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">How to plan and run hackathons using Power Platform tools.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.microsoft.com%2Fpower-platform%2Fguidance%2Fadoption%2Fhackathons&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175939810%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=HXNVEld988GIXQavZvgo%2BHkUgB2p9hhw3L%2BtEw1oAeQ%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://docs.microsoft.com/power-platform/guidance/adoption/hackathons</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">Power Community Virtual Event Hub</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">A centralised view of Community Virtual events.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.virtualeventshub.com%2F&data=04%7C01%7Cheidic%40redtech.com%7Cec2581de6beb49d25ebd08d91ee0a1d4%7C2a8bb167584b4ff0a140ac2de8b87f70%7C0%7C0%7C637574772407716211%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=jRf9F3cmY8SoqIf30erllYDdC0u0k3TqtkVL7nhUXo0%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://www.virtualeventshub.com</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><SPAN style="font-weight: bold;">Power Platform Study </SPAN><SPAN style="font-weight: bold;">Group</SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;">An online community group learning program for people wanting to take the Power Platform App Maker PL-100 exam.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fukcrm.wordpress.com%2F2021%2F05%2F23%2Fpl-100-study-group-june-2021%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175959798%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=HMys9TJY%2FPTzEgYHrrC0rEVN%2F8QhKSx5Z05VMZyvayM%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://ukcrm.wordpress.com/2021/05/23/pl-100-study-group-june-2021/</SPAN></A></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"> </P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB"><SPAN style="font-weight: bold;">D365 Champs </SPAN></P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;" lang="en-GB">A Dynamics and Power Platform community based in South East Asia with over 5,000 followers.</P> <P style="margin: 0in; font-family: Calibri; font-size: 11.0pt;"><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.d365champions.com%2F&data=04%7C01%7Cv-zugree%40microsoft.com%7C4f41eb6a9d544ae8b67008d91edc63d2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637574754175949804%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=Ah1c%2FeRyol3fwNqaz1x%2Fj3nKcX102ymDQbsEKB0F7hs%3D&reserved=0" target="_blank" rel="noopener"><SPAN>https://www.d365champions.com </SPAN></A></P></description> <pubDate>Fri, 03 Dec 2021 18:57:43 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/community-and-certification-related-resources-for-developers/ba-p/2382116</guid> <dc:creator>Monish_Gangwani</dc:creator> <dc:date>2021-12-03T18:57:43Z</dc:date> ... </item> <item> <title>Azure Logic Apps Announcement – GA of single-tenant Standard SKU</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-ga-of-single-tenant-standard-sku/ba-p/2382460</link> <description><P><STRONG>Meet the New Standard in Workflow</STRONG></P> <P> </P> <P>Today marks a new chapter for integration at Microsoft - the General Availability (GA) of Logic Apps Standard - our new single-tenant offering. A flexible, containerized, modern cloud-scale workflow engine you can run anywhere. Today, integration is more important than ever, it connects organizations with their most valuable assets - customers, business partners and their employees. It makes things happen, seamlessly, silently, to power experiences we take for granted, APIs being called by your TV to browse must-watch shows or catch the latest weather, snagging a bargain on your favorite website (with all the stock checking, order fulfillment and charging your credit card as backend workflows). Booking vacations when that was a thing, and keeping us all safe scheduling vaccine appointments on our phones, as well as checking in with friends and family wherever we are. The list goes on. Integration is everything.</P> <P> </P> <P><STRONG>Breaking Through the Cloud Barrier</STRONG></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/services/logic-apps/" target="_blank" rel="noopener">Logic Apps</A> has always been central to our <A href="https://www.gartner.com/reprints/?id=1-1ZNT008W&ct=200812&st=sb" target="_blank" rel="noopener">industry-leading</A> modern cloud integration platform – <A href="https://azure.microsoft.com/en-us/product-categories/integration/" target="_blank" rel="noopener">Azure Integration Services</A>. But it was stuck in the cloud, our cloud. We know that business can’t always be bounded like this, and integration needs to be pervasive and accessible, connecting to where things are today, where they need to be tomorrow and where they might be in the future. For that, you need to be able <SPAN>to </SPAN>extend the reach of your network using an integration platform than can truly meet you where you are. Welcome Logic Apps Standard, our born in the cloud integration engine that can now be deployed anywhere - our cloud, your cloud, their cloud, on-premises or edge. And your laptop or dev machine for local development. Windows, Linux or Mac. Anywhere.</P> <DIV id="tinyMceEditorJon Fancey_0" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VSCode.png" style="width: 974px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/283359i3E25AD2258F84268/image-size/large?v=v2&px=999" role="button" title="VSCode.png" alt="VSCode.png" /></span></P> <P>Figure 1. New VS Code extension.</P> <P> </P> <P><STRONG>The Speed You Need</STRONG></P> <P> </P> <P>We’ve also introduced new Stateless Workflows. As their name implies, this is a new workflow type in Logic Apps that doesn’t need storage to persist state between actions, making your workflows run faster and saving you money. What’s not to like about that? Stateless Workflows open up new high-volume, high-throughput scenarios for real-time processing of events, messages, APIs and data. We’ve achieved performance improvements across both Stateful and Stateless with a new connector model, built-in to the runtime, to provide high performance of some of our most common connectors - Service Bus, Event Hubs, Blob, SQL and MQ. Not only this but you can also now write your own connectors in .Net just like we do with all the same benefits with our new extensibility model for custom connectors.</P> <P> </P> <P><STRONG>A New Designer Designed For You</STRONG></P> <P> </P> <P>We didn’t want to reimagine our new runtime without reimagining the designer too. The no-code magic that brings integration to everyone, not just those who can code – or have time to. The canvas now allows you to bring your most complex business workflow, orchestration and automation problems. It has been recreated with not just a more modern look but incorporat<SPAN>e</SPAN>s a new layout engine making complex workflows render faster than ever, with full drag/drop, a new dedicated editing pane to de-clutter the whole experience, and new accessibility and other gestures to make authoring easier than ever. For everyone.</P> <P> </P> <P>But that’s not all, we’ve also created a new VS Code extension for authoring, allowing you – for the first time– to easily debug and test on your local machine, set breakpoints, examine variables values in flight and generally, just do what you do faster – in the World’s most popular IDE.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NewDesigner.png" style="width: 974px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/283356i694D2143EA572047/image-size/large?v=v2&px=999" role="button" title="NewDesigner.png" alt="NewDesigner.png" /></span></P> <P>Figure 2. New Workflow Designer.</P> <P> </P> <P><STRONG>Easier To Live With</STRONG></P> <P> </P> <P>As well as leaps forward in our runtime, our designer and general ‘developer flow’ we know that getting your great work to production with as little manual effort and intervention as possible is also what you need. We’ve worked on making it possible to parameterize your workflows in Logic Apps Standard so that you can automate deployments and set environment-specific values in your pipelines to make DevOps a snap. You can choose what you’re familiar with to stay in your groove with support for both Azure DevOps pipelines and GitHub Actions - with provided templates to help you get productive as quickly as possible. You’re able to take an infrastructure as code approach to deploy your solutions and use CI/CD practices to enable you and your team to iterate and deploy without friction as fast as your business demands.</P> <P> </P> <P>Not only this but Logic Apps Standard also now provides App Insights support too, allowing you ’see’ your running processes, as data flows between endpoints and monitor them using Azure Monitor as well as a host of other Azure built-in management capabilities.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="DevOps.png" style="width: 974px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/283357i3D478283523D16C1/image-size/large?v=v2&px=999" role="button" title="DevOps.png" alt="DevOps.png" /></span></P> <P>Figure 3. DevOps with Logic Apps.</P> <P> </P> <P><STRONG>You’re Always In Control</STRONG></P> <P> </P> <P>Because Logic Apps Standard runs on <A href="https://azure.microsoft.com/en-us/services/app-service/" target="_blank" rel="noopener">App Service</A> – powering over 2 million web apps serving 40 billion requests per day - you get all the same great benefits that makes App Service great too. Auto scale, virtual network (VNet) support and Private Endpoints - right there at your fingertips - to build amazing solutions that span Web, Workflow and Functions. And of course, because Logic Apps is part of Azure Integration Services too, you can easily connect your applications using over 450 connectors, publish and consume APIs with API Management with just a few clicks and process events with Event Grid at planet-scale. </P> <P> </P> <P><STRONG>So What’s Next?</STRONG></P> <P> </P> <P>In a word, lots! We’ve also <A href="https://docs.microsoft.com/en-us/azure/logic-apps/azure-arc-enabled-logic-apps-overview" target="_blank" rel="noopener">released today</A>, the public preview of Logic Apps (and our other PaaS application services) on Azure Arc. Arc brings a new level of distributed deployment and centralized management to your application and integration environments. We’re also readying SQL support (Azure SQL, SQL Server, SQL Data Services) enabling you to run workloads fully locally with no Azure dependency on storage. Now in private preview, you can sign up <A href="http://aka.ms/logicappssql" target="_blank" rel="noopener">here</A> to express interest and get early access before the rest.</P> <P> </P> <P><STRONG>See For Yourself</STRONG></P> <P> </P> <P>Don’t just take our word for it, watch our Build session on-demand <A href="https://mybuild.microsoft.com/sessions/92bd3e12-fbf4-4278-b68f-fe776b02adfa" target="_blank" rel="noopener">here</A> where Derek Li, will take you through everything that’s new to get you up to speed. You’ll see how <A href="https://www.asos.com/" target="_blank" rel="noopener">ASOS</A>, a global leader in fashion and tech, is using Logic Apps Standard to help them realize their business goals faster than ever before.</P> <P> </P> <P>You can start right now, <A href="https://azure.microsoft.com/en-us/free/serverless/" target="_blank" rel="noopener">for free</A>, and take us for a spin. Read more on Logic Apps Standard <A href="https://docs.microsoft.com/en-us/azure/logic-apps/create-single-tenant-workflows-azure-portal" target="_blank" rel="noopener">here</A>. If you’re already familiar with Logic Apps and want to understand the differences you can review <A href="https://docs.microsoft.com/en-us/azure/logic-apps/single-tenant-overview-compare" target="_blank" rel="noopener">this</A> article. And as always, let us know what you think and what we can do to help you in your efforts.</P> <P> </P> <P>- Jon<SPAN data-contrast="auto"> & the Logic Apps </SPAN><SPAN data-contrast="auto">t</SPAN><SPAN data-contrast="auto">eam</SPAN></P></description> <pubDate>Tue, 25 May 2021 15:00:02 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-logic-apps-announcement-ga-of-single-tenant-standard-sku/ba-p/2382460</guid> <dc:creator>Jon Fancey</dc:creator> <dc:date>2021-05-25T15:00:02Z</dc:date> ... </item> <item> <title>Introducing Developer Velocity Lab – A Research Initiative to Amplify Developer Work and Well-Being</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-developer-velocity-lab-a-research-initiative-to/ba-p/2333140</link> <description><P><A title="Developer Velocity" href="https://azure.microsoft.com/en-us/overview/developer-velocity/?cid=dvl" target="_blank" rel="noopener">Developer Velocity</A> is an important and integral part of developer productivity, and software development is at the core of how organizations run. Improving developer velocity is critical to continued satisfaction, iteration, and innovation in software teams. Today, Microsoft is doubling down on its commitment to improving developers' work and well-being. Microsoft and GitHub are proud to present <A title="Developer Velocity Lab (DVL)" href="https://www.microsoft.com/en-us/research/group/developer-velocity-lab/?cid=techcomm" target="_blank" rel="noopener">Developer Velocity Lab (DVL)</A>, a joint research initiative that will live in Microsoft Research.</P> <P> </P> <P>Microsoft believes scientific advances through research are a fundamental part of how we empower people through our products and impact society more generally. Johannes Gehrke, Microsoft Research Technical Fellow and Lab Director notes, “Microsoft Research is transforming the world through deep research. We are excited to invest into research to empower developers to achieve more.” With DVL, we’re creating a mission-focused initiative about developers, which signals our belief in the importance of the developer community. Leading this research initiative is Dr. Nicole Forsgren, VP Research and Strategy at GitHub. Her industry leading work in DevOps and software development metrics includes authoring the Shingo Publication Award-winning book <A title="Accelerate: The Science of Lean Software and DevOps" href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations-ebook/dp/B07B9F83WM" target="_blank" rel="noopener"><EM>Accelerate: The Science of Lean Software and DevOps</EM></A>. In Nicole’s own words, “Creating a better experience for the world’s developers is core to the future of our digital world – whether that’s through advanced tooling or low/no-code. I’m thrilled to be leading the initiative in DVL.”</P> <P> </P> <P>DVL's mission is to discover, improve, and amplify developer work and well-being. We do this through socio-technical investigations in the following focus areas:</P> <P> </P> <P class="lia-indent-padding-left-30px"><STRONG>Productivity.</STRONG> Investigate ways to measure and improve developer productivity so we can help everyone work better, faster, smarter, and more securely. This includes investigations of low-code, no-code, and work at the intersection of code and ML and AI.</P> <P class="lia-indent-padding-left-30px"><STRONG>Community.</STRONG> Study the ways that people communicate, collaborate, share knowledge, and build communities when they build software. An important aspect of this is making all kinds of software development more accessible, inclusive, and sustainable.</P> <P class="lia-indent-padding-left-30px"><STRONG>Well-being.</STRONG> Investigate the intersections of happiness, satisfaction, and personal value with software development activities so we can find ways to make development more fun, enjoyable, and sustainable.</P> <P> </P> <P>As DVL continues to grow, this will include cultivating a community of researchers, organizations, and developers who share our love and commitment to this work. Our goal is for everyone to benefit from our research, with the intent to develop easily accessible work, optimized for developers and their communities. DVL will commit to making the bulk of our findings open, accessible, and available. We hope that you’ll follow along and utilize our upcoming work.</P> <P> </P> <H2>The SPACE of Developer Productivity</H2> <P>DVL's first publication, <A title="The SPACE of Developer Productivity: There's more to it than you think" href="https://www.microsoft.com/en-us/research/publication/the-space-of-developer-productivity-theres-more-to-it-than-you-think/?cid=techcommblog/" target="_blank" rel="noopener"><EM>The SPACE of Developer Productivity: There's more to it than you think</EM></A>, introduces a framework to help individuals, teams, and organizations measure developer productivity in a more holistic and impactful way. The framework includes five dimensions of software development to present a more complete picture of productivity and well-being. The framework is easily adaptable and flexible to many contexts. By including measures across multiple dimensions (we recommend at least three), teams and organizations can make better decisions and see better outcomes.</P> <P> </P> <P>To learn more, watch Nicole present a deep dive into the SPACE framework and its five dimensions, which are <STRONG>S</STRONG>: satisfaction and well-being, <STRONG>P</STRONG>: performance, <STRONG>A</STRONG>: activity, <STRONG>C</STRONG>: communication and collaboration, and <STRONG>E</STRONG>: efficiency and flow. She’ll also discuss the ins and outs of developer productivity, sharing common misconceptions as well as example metrics and how the framework can work for you.</P> <P> </P> <CENTER><IFRAME src="https://www.youtube.com/embed/t7SXM7njKXw" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"></IFRAME></CENTER> <P> </P> <H2>SPACE Framework in Action: The Good Day Project</H2> <P>In conjunction with DVL’s launch, GitHub published <A title="The Good Day Project – Personal analytics for good days" href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener"> The Good Day Project – Personal analytics for good days</A>. The research presented a first look at the SPACE framework, a two-week study that invited GitHub developers to take a survey and share their engineering data to help identify what patterns and practices could help them have “good days.” A few overarching discoveries into patterns the team found:</P> <P> </P> <P class="lia-indent-padding-left-30px"><STRONG>Finding flow is key, and interruptions are a drag.</STRONG> Minimal or no interruptions give developers an 82% chance of having a good day, but interruptions throughout the day decrease the chance of a good day to just 7%.</P> <P class="lia-indent-padding-left-30px"><STRONG>Meetings are both awesome and terrible.</STRONG> Collaboration improves our work, but too many meetings can be a blocker; going from two to three meetings per day lowered the chances of developers making progress toward their goals by 60%.</P> <P class="lia-indent-padding-left-30px"><STRONG>A two minute daily reflection can help developers improve their days.</STRONG> Developers reported the daily reflection was a great new habit, and seeing patterns gave them clear ideas for what to change in their days.</P> <P class="lia-indent-padding-left-30px"> </P> <P>The data was also used to classify developers’ days as Flowing or Disrupted. Taking a look at these classifications shows us:</P> <P> </P> <TABLE border="1" width="100%"> <TBODY> <TR> <TD width="50%" height="42px"> <H4>Flowing Days</H4> </TD> <TD width="50%" height="42px"> <H4>Disrupted Days</H4> </TD> </TR> <TR> <TD width="50%" height="29px">Less than three meetings per day</TD> <TD width="50%" height="29px">More than three meetings per day</TD> </TR> <TR> <TD width="50%" height="29px">Interruptions during a small part of the day</TD> <TD width="50%" height="29px">Interruptions during most of the day</TD> </TR> <TR> <TD width="50%" height="29px">Progress towards goals most of the day</TD> <TD width="50%" height="29px">Less progress towards goals</TD> </TR> </TBODY> </TABLE> <P> </P> <P>When the study concluded, each participant received a personalized report to help them optimize their days moving forward. To glean more insight, including the full survey, read the <A title="The Good Day Project – Personal analytics for good days" href="https://github.blog/2021-05-25-octoverse-spotlight-good-day-project/" target="_blank" rel="noopener">report</A>.</P> <P> </P></description> <pubDate>Fri, 03 Dec 2021 18:59:02 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-developer-velocity-lab-a-research-initiative-to/ba-p/2333140</guid> <dc:creator>AlisonYu</dc:creator> <dc:date>2021-12-03T18:59:02Z</dc:date> ... </item> <item> <title>Kickstart collaborative DevSecOps practices with GitHub and Azure</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/kickstart-collaborative-devsecops-practices-with-github-and/ba-p/2357730</link> <description><H2>Kickstart collaborative DevSecOps practices with GitHub and Azure</H2> <P> </P> <P>Companies on the forefront of digital transformation have seen DevOps provide software engineers and operations teams with a faster and more efficient way to develop code. Unfortunately, while DevOps practices have enabled faster, more efficient development cycles, they’ve also uncovered a new bottleneck—security. While many organizations have opted to push security to the end of application development and management, this can be very costly. <A href="https://securityboulevard.com/2020/09/the-importance-of-fixing-and-finding-vulnerabilities-in-development/#:~:text=According%20to%20the%20NIST%20(the,that%20should%20concern%20most%20organizations" target="_blank" rel="noopener">NIST</A> estimated the cost of fixing a security defect in production can be up to 60 times more expensive than during the development cycle. Conversely, Digital leaders recognize the importance of shifting security left and tackling vulnerabilities as soon as they arise. These leaders are integrating security into delivery pipelines, leveraging modern platform capabilities and fostering collaboration between the development and security teams in the latest evolution of the DevOps methodology, DevSecOps. Embracing DevSecOps is a software delivery advantage! By uncovering vulnerabilities earlier, your team can save time remediating issues and realizing compliancy, while also minimizing any associated costs.</P> <P> </P> <P>So how can your organization begin their DevSecOps adoption journey?</P> <P> </P> <P>It starts with incorporating security into the early stages of the development lifecycle (shift left) along with providing end-to-end observability to facilitate collaboration between the development and security teams. At last year’s Ignite, we discussed ways to shift left by <A href="https://azure.microsoft.com/en-us/blog/enabling-resilient-devops-practices-with-code-to-cloud-automation/" target="_blank" rel="noopener">adding security scans to container images</A> created as part of Continuous Integration (CI) workflow. This helps developers scan for common vulnerabilities in their container images before pushing to a container registry. Securing Container images is one great way of shifting security left, but organizations also need to give visibility into delivery pipelines and registry scans to their security teams.</P> <P> </P> <P>At <A href="https://aka.ms/Build2021-BRK214" target="_blank" rel="noopener">Microsoft Build 2021</A>, we are excited to announce the public preview of <A href="https://azure.microsoft.com/en-us/services/security-center/" target="_blank" rel="noopener">Azure Security Center</A> (ASC) integration with GitHub Actions. The new capabilities are our first steps towards building shared tooling and experience by extending the reporting from container scans into Azure Security Center—providing security teams better insight and understanding as to the source of vulnerable container images and the workflows and repositories they come from.</P> <P> </P> <H1>Provide DevSecOps teams observability into GitHub Action workflows</H1> <P>With this tighter integration we are allowing DevSecOps teams to run vulnerability scans, resolve findings, and visualize the security posture of workflows within their CI/CD pipeline.</P> <P> </P> <P>CI/CD vulnerability scanning of container images helps shift security left by offering increased visibility and control and by providing CI/CD scan assessments to Azure Security Center (ASC). Now, your security teams can access a holistic, 360-degree view across CI/CD pipelines and runtime resources through CI/CD scan assessments in ASC. DevSecOps teams will now receive greater, shared insight into development practices and potentially vulnerable code, containers, and infrastructure.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_0-1621124575237.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280894i58E28FDD71FA96F3/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_0-1621124575237.png" alt="samitjhaveri_0-1621124575237.png" /></span></P> <P> </P> <P>Going forward, any workflow that pushes a container image without a scan action present will alert the user with an ASC recommendation. Each ASC recommendation details the affected resources along with a proposed remediation path and steps to help each path achieve a “healthy” state. Below are details on how to enable the new capabilities across GitHub and Azure to get you started with your DevSecOps journey.</P> <P> </P> <H1>How to setup Azure Security Center for GitHub integration</H1> <P>You can easily onboard this feature by navigating to Settings->Integrations in Azure Security Center</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_1-1621124575266.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280897i2D917054CE1310E9/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_1-1621124575266.png" alt="samitjhaveri_1-1621124575266.png" /></span></P> <P> </P> <P>After clicking on Configure CI/CD integration, select the Microsoft Managed Application Insights account pertaining your region of choice.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_2-1621124575294.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280895i1FDE5D441DC1D496/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_2-1621124575294.png" alt="samitjhaveri_2-1621124575294.png" /></span></P> <P> </P> <P> </P> <P>To enable CI/CD Scanning in GitHub, start by adding the connection string and authentication token to publish the CI/CD scan results back to your Microsoft Managed Application Insights account.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_3-1621124575361.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280899i8B234D73CC622E22/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_3-1621124575361.png" alt="samitjhaveri_3-1621124575361.png" /></span></P> <P> </P> <P>Now it’s time to harvest insights into container image vulnerabilities. After you’ve enabled CI/CD scanning for images built and published from GitHub workflows, ASC showcases any vulnerabilities found in those images. Of course, it’s important to form a holistic picture of your data, and you can use these CI/CD scan results along with registry scan results to trace the lifecycle of the image from CI/CD to registry.</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="samitjhaveri_4-1621124575373.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/280898iDAAAE00808710D09/image-size/medium?v=v2&px=400" role="button" title="samitjhaveri_4-1621124575373.png" alt="samitjhaveri_4-1621124575373.png" /></span></P> <P> </P> <P> </P> <P>It’s important to think of this expanded scanning capability as the conduit to foster collaboration among your developer and SecOps teams. CI/CD vulnerability scanning gives much needed visibility into container images and the GitHub workflows that are pushing these images. You can also help developers scan their container images for common vulnerabilities—eliminating issues before deploying to a container registry, a containerized web app, or a Kubernetes cluster.</P> <P> </P> <H1>Start collaborating with GitHub and Azure</H1> <P>This feature is currently in Public Preview so please use non-production workflows while using this feature. This feature is available only in Public Cloud. You will need to use the feature flag as shown to use the feature in Azure Portal (<A style="font-family: inherit; background-color: #ffffff;" title="https://ms.portal.azure.com/?" href="https://ms.portal.azure.com/?feature.cicd=true#blade/Microsoft_Azure_Security/SecurityMenuBlade/5/0/" target="_blank" rel="noopener">https://ms.portal.azure.com/?feature.cicd=true#blade/Microsoft_Azure_Security/SecurityMenuBlade/5/0/</A><SPAN style="font-family: inherit;">)</SPAN><SPAN style="font-family: inherit;">. </SPAN>This feature flag will be removed in a few days.</P> <P> </P> <P>To learn more about container security check out <A href="https://aka.ms/DevSecOpsBlogDoc" target="_blank" rel="noopener">documentation</A> and visit the <A href="https://azure.microsoft.com/en-us/products/github/" target="_blank" rel="noopener">GitHub and Azure</A> page to find the full list of GitHub and Azure integrations. Don’t forget to check out the <A href="https://aka.ms/DevSecOpsPaper" target="_blank" rel="noopener">6 tips for integrating security into your DevOps practices</A> whitepaper to explore even more ways to kickstart your DevSecOps journey.</P> <P> </P> <P>For any questions regarding the public preview please send an email to <A href="mailto:azseccontainerred@microsoft.com" target="_blank" rel="noopener">azseccontainerred@microsoft.com</A></P></description> <pubDate>Thu, 10 Jun 2021 21:49:47 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/kickstart-collaborative-devsecops-practices-with-github-and/ba-p/2357730</guid> <dc:creator>samit_jhaveri</dc:creator> <dc:date>2021-06-10T21:49:47Z</dc:date> ... </item> <item> <title>Increase Efficiency with Azure Functions and Power Platform</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/increase-efficiency-with-azure-functions-and-power-platform/ba-p/2370351</link> <description><H3><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN></H3> <P><SPAN data-contrast="auto">In 2021, </SPAN><SPAN data-contrast="auto">there will be </SPAN><SPAN data-contrast="auto">a</SPAN><SPAN data-contrast="auto"> blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">LCAD on Azure is a solution that integrates the robust development capabilities of lo</SPAN><SPAN data-contrast="auto">w </SPAN><SPAN data-contrast="auto">code Microsoft Power Apps and the Azure products</SPAN><SPAN data-contrast="auto"> such as Azure Functions, A</SPAN><SPAN data-contrast="auto">zure Logic Apps, and more.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This month’s webinar is ‘</SPAN><A href="https://info.microsoft.com/ww-Landing-IncreaseEfficiencyAzureFunctionsPowerPlatform.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">Increase Efficiency with Azure Functions and Power Platform</SPAN></A><SPAN data-contrast="auto">’</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">T</SPAN><SPAN data-contrast="auto">his blog </SPAN><SPAN data-contrast="auto">will briefly recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="auto">provide an overview of </SPAN><STRONG><SPAN data-contrast="auto">Azure Functions</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> reusability</SPAN></STRONG><SPAN data-contrast="auto">, </SPAN><STRONG><SPAN data-contrast="auto">Durable Functions</SPAN></STRONG><SPAN data-contrast="auto">, </SPAN><SPAN data-contrast="auto">and </SPAN><STRONG><SPAN data-contrast="auto">how to integrate Functions </SPAN></STRONG><STRONG><SPAN data-contrast="auto">across the Power Platform</SPAN></STRONG><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">This is a </SPAN><SPAN data-contrast="auto">helpful </SPAN><SPAN data-contrast="auto">blog for those new to Azure Functions and those who want to start integrating Azure Functions into their Power Platform </SPAN><SPAN data-contrast="auto">build cases.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_7-1621465684123.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281986i0DEEA1EF3C45C0D9/image-size/large?v=v2&px=999" role="button" title="riduncan_7-1621465684123.png" alt="riduncan_7-1621465684123.png" /></span> </P> <H3><STRONG><SPAN data-contrast="none">What is Low</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></H3> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="auto">was created to help developers build business applications faster with less code.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse </SPAN><SPAN data-contrast="auto">employees</SPAN><SPAN data-contrast="auto"> track incoming inventory.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">That application would take months to build, test, and deploy. Using Power Apps, it can take hours to build, saving time and resources. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">In the past that would require another heavy lift by the development team to rework their previous application iteration.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">To learn more about possible scenarios with LCAD on Azure go through the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">self-guided tour</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Guided tour.JPG" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/282001i461FF92CD4E9752D/image-size/large?v=v2&px=999" role="button" title="Guided tour.JPG" alt="Guided tour.JPG" /></span></P> <H3><STRONG><SPAN data-contrast="none">Azure Functions Reusability</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></H3> <P><SPAN data-contrast="auto">Why should you reuse functionality? There are four key reasons: shorter development time, consistency, easier testing, and live proven code.</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_8-1621465684121.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281987i71741F5488C80B98/image-size/large?v=v2&px=999" role="button" title="riduncan_8-1621465684121.png" alt="riduncan_8-1621465684121.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">The </SPAN><STRONG><SPAN data-contrast="auto">shorter development time</SPAN></STRONG><SPAN data-contrast="auto"> is driven by not having to build code again</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto"> For example, if you’re validating a phone number with your application you don’t want to have to re-write the code for each nuanced small scenario, such as rebuilding a web app, then a portal, etc.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Not re-writing code even if it is being plugged into a new app enables shorter development time.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Additionally, this ties into greater </SPAN><STRONG><SPAN data-contrast="auto">consistency</SPAN></STRONG><SPAN data-contrast="auto"> in your code </SPAN><SPAN data-contrast="auto">creating a much cleaner user experience</SPAN><SPAN data-contrast="auto"> across platforms and devices.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Reuse of functionality also enables </SPAN><STRONG><SPAN data-contrast="auto">easier testing</SPAN></STRONG><SPAN data-contrast="auto">. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">When reusing functionality you can automate tests, however if yo</SPAN><SPAN data-contrast="auto">u write new code each time, </SPAN><SPAN data-contrast="auto">for each iteration you must manually test the code, subsequently increasing development time.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">However, if you reuse functionality, o</SPAN><SPAN data-contrast="auto">nce set up and spun up, every time you test apps down the line, all you need to do is check the Azure Function connection rather than starting from scratch.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Lastly, is the advantage of </SPAN><STRONG><SPAN data-contrast="auto">live proven code</SPAN></STRONG><SPAN data-contrast="auto">, which can’t be overstated</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">The separate aspects of functionality are already proven to work, therefore speeding up the application development lifecycle.</SPAN></P> <H3><STRONG><SPAN data-contrast="auto">Durable Functions</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H3> <P><SPAN data-contrast="auto">Durable Functions are an extension </SPAN><SPAN data-contrast="auto">of</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Azure Functions, that </SPAN><SPAN data-contrast="auto">let you write stateful functions in a serverless environment. The durable extension </SPAN><SPAN data-contrast="auto">manages state, checkpoints and restarts out of the box. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Durable Functions allow the creation of workflow activities like </SPAN><SPAN data-contrast="auto">Lo</SPAN><SPAN data-contrast="auto">gic </SPAN><SPAN data-contrast="auto">A</SPAN><SPAN data-contrast="auto">pps</SPAN><SPAN data-contrast="auto"> b</SPAN><SPAN data-contrast="auto">ut</SPAN><SPAN data-contrast="auto"> are</SPAN><SPAN data-contrast="auto"> completely customizable and </SPAN><SPAN data-contrast="auto">scalable.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Durable F</SPAN><SPAN data-contrast="auto">unctions can be called both synchronously and asynchronously. Output from </SPAN><SPAN data-contrast="auto">F</SPAN><SPAN data-contrast="auto">unctions can be saved to local variables and used later in execution.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">State and executions are managed within an Azure Table using the Event Sourcing Pattern and can be queried if needed. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_9-1621465684132.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281988i54EB7C13D1166FF4/image-size/large?v=v2&px=999" role="button" title="riduncan_9-1621465684132.png" alt="riduncan_9-1621465684132.png" /></span></P> <P> </P> <P><SPAN data-contrast="auto">For example, </SPAN><SPAN data-contrast="auto">if you want to fill in a field on a </SPAN><SPAN data-contrast="auto">form and</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">need</SPAN><SPAN data-contrast="auto"> to check </SPAN><SPAN data-contrast="auto">input information across </SPAN><SPAN data-contrast="auto">multiple databases,</SPAN><SPAN data-contrast="auto"> the</SPAN><SPAN data-contrast="auto"> orchestration </SPAN><SPAN data-contrast="auto">capabilities </SPAN><SPAN data-contrast="auto">of </SPAN><SPAN data-contrast="auto">D</SPAN><SPAN data-contrast="auto">urable Functions </SPAN><SPAN data-contrast="auto">enable</SPAN><SPAN data-contrast="auto"> that </SPAN><SPAN data-contrast="auto">functionality</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Moreover, if you need</SPAN><SPAN data-contrast="auto"> all the tasks to happen at the same time or </SPAN><SPAN data-contrast="auto">need</SPAN><SPAN data-contrast="auto"> them to happen in different patterns</SPAN><SPAN data-contrast="auto">, you c</SPAN><SPAN data-contrast="auto">ould build th</SPAN><SPAN data-contrast="auto">at </SPAN><SPAN data-contrast="auto">functionali</SPAN><SPAN data-contrast="auto">ty </SPAN><SPAN data-contrast="auto">in Power Automate or Logic apps. </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">L</SPAN><SPAN data-contrast="auto">everaging Durable Functions enables greater </SPAN><SPAN data-contrast="auto">detail and options for functionality.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Lastly</SPAN><SPAN data-contrast="auto">, </SPAN><SPAN data-contrast="auto">these Functions scale rapidly to meet demand levels, however when inactive they </SPAN><SPAN data-contrast="auto">rest until called upon again.</SPAN></P> <P> </P> <H3><STRONG><SPAN data-contrast="auto">Functions Integration across the Power Platform</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H3> <H4><STRONG><SPAN data-contrast="auto">Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H4> <P><SPAN data-contrast="auto">There are 3 types of Power Apps available to integrate with Azure Functions. </SPAN><SPAN data-contrast="auto">Note that this blog will be covering JavaScript, however you can write Azure Functions in any language.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">First, there are </SPAN><STRONG><SPAN data-contrast="auto">Dataverse</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> forms</SPAN></STRONG><SPAN data-contrast="auto">. Dataverse forms are used within Model Drive</SPAN><SPAN data-contrast="auto">n applications that can contain JavaScript </SPAN><SPAN data-contrast="auto">F</SPAN><SPAN data-contrast="auto">unctions that fire on load or property change. These functions can call out to Azure Functions for long running queries. </SPAN><SPAN data-contrast="auto">Thus, enabling your colleagues to leverage your Azure Function.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Second, are </SPAN><STRONG><SPAN data-contrast="auto">Power Component Framework controls</SPAN></STRONG><SPAN data-contrast="auto"> (PCFs). They are a web packet that you can put in both model-driven app forms and canvas apps. </SPAN><SPAN data-contrast="auto">The code can be called from either place, if used to call out an Azure Function it creates a double layer of reusability and can separate deployment for use across </SPAN><SPAN data-contrast="auto">your</SPAN><SPAN data-contrast="auto"> business.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Third, are </SPAN><STRONG><SPAN data-contrast="auto">Power Apps </SPAN></STRONG><STRONG><SPAN data-contrast="auto">P</SPAN></STRONG><STRONG><SPAN data-contrast="auto">ortals</SPAN></STRONG><SPAN data-contrast="auto">. These scripts are very similar to </SPAN><SPAN data-contrast="auto">Dataverse</SPAN><SPAN data-contrast="auto"> forms and can be embedded into a portal to call </SPAN><SPAN data-contrast="auto">any web </SPAN><SPAN data-contrast="auto">API and</SPAN><SPAN data-contrast="auto"> call </SPAN><SPAN data-contrast="auto">an </SPAN><SPAN data-contrast="auto">Azure Function</SPAN><SPAN data-contrast="auto"> from the portal</SPAN><SPAN data-contrast="auto">. Security will have to be handled differently for public facing po</SPAN><SPAN data-contrast="auto">rtals than internal applications.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_10-1621465684134.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281994i50A2E1296CC758AE/image-size/large?v=v2&px=999" role="button" title="riduncan_10-1621465684134.png" alt="riduncan_10-1621465684134.png" /></span></P> <H3><STRONG><SPAN data-contrast="auto">Power Automate</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H3> <P><SPAN data-contrast="auto">In the webinar Lee</SPAN><SPAN data-contrast="auto"> Baker</SPAN><SPAN data-contrast="auto"> covers the stages of when</SPAN><SPAN data-contrast="auto"> and </SPAN><SPAN data-contrast="auto">how to connect a Power Automate flow to an Azure Function.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">When? </SPAN></STRONG><SPAN data-contrast="auto">You c</SPAN><SPAN data-contrast="auto">an start when a record is selected in a model driven app, hitting the on-demand flow button, pus</SPAN><SPAN data-contrast="auto">hes</SPAN><SPAN data-contrast="auto"> those records </SPAN><SPAN data-contrast="auto">to Power Automate</SPAN><SPAN data-contrast="auto">. Or you </SPAN><SPAN data-contrast="auto">can </SPAN><SPAN data-contrast="auto">use</SPAN><SPAN data-contrast="auto"> standard </SPAN><SPAN data-contrast="auto">Dataverse triggers </SPAN><SPAN data-contrast="auto">when creating, reading, updating, and deleting (CRUD)</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">How?</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">HTTP request actions from Power Automate or Logic Apps, can put data or URLs </SPAN><SPAN data-contrast="auto">incorporate </SPAN><SPAN data-contrast="auto">and get payload</SPAN><SPAN data-contrast="auto">s</SPAN><SPAN data-contrast="auto"> back to use in Azure Functions</SPAN><SPAN data-contrast="auto">, or</SPAN><SPAN data-contrast="auto"> you </SPAN><SPAN data-contrast="auto">can </SPAN><SPAN data-contrast="auto">build a custom connector</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">You would build a custom connector because </SPAN><SPAN data-contrast="auto">HTTP requests </SPAN><SPAN data-contrast="auto">are </SPAN><SPAN data-contrast="auto">often</SPAN><SPAN data-contrast="auto"> blocked by data loss policies in Power Platform </SPAN><SPAN data-contrast="auto">environments but</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">can </SPAN><SPAN data-contrast="auto">circumnavigate policies</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Custom connectors </SPAN><SPAN data-contrast="auto">can be </SPAN><SPAN data-contrast="auto">created in accordance with data loss </SPAN><SPAN data-contrast="auto">policies but pull the HTTP request directly into the canvas application via Azure Functions for a secure and streamlined approach.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_11-1621465684126.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281993iC659EA39B87CCF71/image-size/large?v=v2&px=999" role="button" title="riduncan_11-1621465684126.png" alt="riduncan_11-1621465684126.png" /></span></P> <H3><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG></H3> <P><SPAN data-contrast="auto">Th</SPAN><SPAN data-contrast="auto">is is just the beginning of what is possible with the</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">integration of </SPAN><SPAN data-contrast="auto">APIs into </SPAN><SPAN data-contrast="auto">Power Apps </SPAN><SPAN data-contrast="auto">via </SPAN><SPAN data-contrast="auto">Azure Functions</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> To learn more about the integration of Azure Functions and Power Apps watch </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="auto">webinar</SPAN><SPAN data-contrast="auto"> covered in this blog</SPAN><SPAN data-contrast="auto"> titled “</SPAN><A href="https://info.microsoft.com/ww-Landing-IncreaseEfficiencyAzureFunctionsPowerPlatform.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">Increase Efficiency with Azure Functions and Power Platform</SPAN></A><SPAN data-contrast="auto">”</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P aria-level="1"><SPAN data-contrast="auto">To get hands on experience creating a custom connector and extending a Power App with custom code </SPAN><SPAN data-contrast="auto">as covered in this blog, </SPAN><SPAN data-contrast="auto">start with the new learning path “</SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Transform your business applications with fusion development</SPAN><SPAN data-contrast="none">”.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559738":240,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="1"> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_12-1621465684128.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281995i3181718C12E14EC9/image-size/large?v=v2&px=999" role="button" title="riduncan_12-1621465684128.jpeg" alt="riduncan_12-1621465684128.jpeg" /></span></P> <P><SPAN data-contrast="none">After completing the learning path, i</SPAN><SPAN data-contrast="none">f you want to learn even more about how extend your low code applications with Azure and establish</SPAN><SPAN data-contrast="none">ing </SPAN><SPAN data-contrast="none">a fusion development team in your organization read the accompanying </SPAN><SPAN data-contrast="none">e</SPAN><SPAN data-contrast="none">-</SPAN><SPAN data-contrast="none">b</SPAN><SPAN data-contrast="none">ook </SPAN><SPAN data-contrast="none">“</SPAN><A href="https://docs.microsoft.com/en-us/powerapps/guidance/fusion-dev-ebook/" target="_blank" rel="noopener"><SPAN data-contrast="none">Fusion development approach to building apps using Power Apps</SPAN><SPAN data-contrast="none">”.</SPAN></A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_13-1621465684130.jpeg" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/281997i859947C45CCB8DEB/image-size/large?v=v2&px=999" role="button" title="riduncan_13-1621465684130.jpeg" alt="riduncan_13-1621465684130.jpeg" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P></description> <pubDate>Fri, 03 Dec 2021 18:55:35 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/increase-efficiency-with-azure-functions-and-power-platform/ba-p/2370351</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-12-03T18:55:35Z</dc:date> ... </item> <item> <title>Deprecating the Distribution of Microsoft Container Images via Docker Hub</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deprecating-the-distribution-of-microsoft-container-images-via/ba-p/2366861</link> <description><H2>Summary</H2> <P>As containers and cloud native workloads continue to grow, ensuring that customers can reliably acquire vendor artifacts becomes crucial. Microsoft is committed to offer its customers reliable and performant experience for pulling Microsoft container images from the Microsoft Container Registry (MCR or mcr.microsoft.com). MCR contains the full catalog of container images produced by Microsoft with their most up-to-date versions and tags. By leveraging Azure’s global footprint, MCR offers public access to Microsoft’s images globally. With that in mind, we are deprecating all <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">/microsoft</A> org container images hosted in Docker Hub repositories on June 30<SUP>th</SUP>, 2021.</P> <P> </P> <H2>How does this impact you?</H2> <P>If you continue to reference Microsoft container images using repositories in Docker Hub, this will have impact on your development, deployment, and automation scripts.</P> <P>Examples for such references are: <CODE>FROM microsoft/*</CODE> in Dockerfile or <CODE>docker run microsoft/*</CODE> in automation scripts. You can leverage <A href="https://grep.app/" target="_blank" rel="noopener">https://grep.app/</A> to discover such references in OSS scripts.</P> <UL> <LI>Starting June 1<SUP>st</SUP>, 2021 pulls of <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">microsoft/</A> org container images from Docker Hub registry will be throttled according to Docker Terms of Use. This will limit the number of pulls that you are allowed within certain time period.</LI> <LI>Starting July 1<SUP>st</SUP>, 2021 repositories from microsoft/ org on Docker Hub will be removed. At this point development, deployment and automation scripts that still reference <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">microsoft/</A> org images from Docker Hub registry will fail.</LI> </UL> <P>To avoid any impact on your development, deployment or automation scripts, you must update <CODE>docker pull</CODE> commands, <CODE>FROM</CODE> statements in Dockerfiles, and other references to <CODE>microsoft/</CODE> container images to explicitly reference the <CODE>mcr.microsoft.com</CODE> registry.</P> <P>We understand that certain repositories from <A href="https://hub.docker.com/publishers/microsoftowner" target="_self">microsoft/</A> org on Docker Hub registry are highly trafficked, and customers relying on them may not be able to complete these changes by June 30<SUP>th</SUP>, 2021. We are working to identify those repositories and provide extension for them. A list of such repositories and for how long they will be available will be published on <A href="https://github.com/microsoft/containerregistry/" target="_blank" rel="noopener">MCR’s GitHub repository</A> by June 1<SUP>st</SUP>, 2021.</P> <P> </P> <H2>Mapping of Docker Hub repositories to MCR repositories</H2> <P>Mapping between the repository names on Docker Hub and MCR can be found on <A href="https://github.com/microsoft/containerregistry/blob/master/docs/dockerhub-to-mcr-repo-mapping.md" target="_self">MCR's GitHub repository</A>.</P> <P> </P> <H2>Guidance for Consuming Public Container Images</H2> <P>Having a controlled workflow for consumption of public content like container images from Docker Hub and MCR is a key for building a secured and reliable software supply chain. Please see the <A href="https://opencontainers.org/posts/blog/2020-10-30-consuming-public-content/" target="_blank" rel="noopener">Open Container Initiative’s Consuming Public Content</A> for general guidance and <A href="https://aka.ms/consuming-public-content" target="_blank" rel="noopener">Azure’s guidance for consuming public content</A>.</P> <P> </P> <H2>Background</H2> <P>Back in 2018, we announced the <A href="https://azure.microsoft.com/en-us/blog/microsoft-syndicates-container-catalog/" target="_blank" rel="noopener">transition of Microsoft container images hosting to MCR with syndication to Docker Hub</A>, which laid the ground for worldwide distribution of Microsoft container images. Last year <A href="https://www.docker.com/blog/scaling-docker-to-serve-millions-more-developers-network-egress/" target="_blank" rel="noopener">Docker announced an update of their terms of use</A> and <A href="https://www.docker.com/blog/docker-hub-image-retention-policy-delayed-and-subscription-updates/" target="_blank" rel="noopener">plans for image retention</A> – both changes impacting pulls of container images from Docker Hub. Microsoft and Docker have worked closely to provide smooth transition for customers who need to pull /microsoft org container images. Docker Hub pages were updated to reflect the new pull location, mcr.microsoft.com, and are continuously updated with information how to pull up-to-date tags from MCR. We will continue this collaboration to provide an easy and frictionless discoverability mechanism for Microsoft container images through Docker Hub.</P> <P> </P> <H2>How to get additional help?</H2> <P>We understand that there may be unanswered questions. You can get additional help by submitting an <A href="https://github.com/microsoft/containerregistry/issues/new" target="_blank" rel="noopener">issue on GitHub</A> or sending an email to <A href="mailto:mcrfeedback@microsoft.com" target="_blank" rel="noopener">mcrfeedback@microsoft.com</A>.</P></description> <pubDate>Wed, 19 May 2021 19:56:31 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deprecating-the-distribution-of-microsoft-container-images-via/ba-p/2366861</guid> <dc:creator>toddysm</dc:creator> <dc:date>2021-05-19T19:56:31Z</dc:date> ... </item> <item> <title>Plan your Microsoft Azure experience at Microsoft Build</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-build/ba-p/2365265</link> <description><P>Microsoft Build, our free digital event, starts next week and runs from May 25-27, 2021. We thought you might be interested to learn ways you can plan to experience the latest set of developer tools, platforms, and services helping you build amazing things on your terms, anywhere, with Microsoft and Azure. You’ll also have a chance to speak with Microsoft experts and have the opportunity to continue your technical learning journey.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/home" target="_self">Register</A> to gain full access to all Microsoft Build has to offer—it’s easy and at no-cost to you.</P> <P> </P> <P><STRONG>Create the perfect event schedule</STRONG></P> <P>Explore the session catalog to find expert speakers, interactive sessions, and more. After registering, get started on your journey using the <A href="https://mybuild.microsoft.com/sessions" target="_blank" rel="noopener">Build session catalogue</A>.</P> <P> </P> <P>Below are a set of featured Technical Sessions kicking off the key themes of Build 2021, with deeper related Breakout Sessions—all of which you won’t want to miss:</P> <P> </P> <P><STRONG>Increase Developer Velocity with Microsoft’s end-to-end developer platform:</STRONG></P> <UL> <LI>TS01: <A href="https://mybuild.microsoft.com/sessions/5ac55e8d-82e5-4b9f-b9bc-d51187761b42" target="_blank" rel="noopener">Increase Developer Velocity with Microsoft’s end-to-end developer platform</A></LI> <LI>BRK210: <A href="https://mybuild.microsoft.com/sessions/5d379e17-9e56-4afb-a871-d3ab807c75f1" target="_blank" rel="noopener">What's new in Windows 10 for ALL developers</A></LI> <LI>BRK211: <A href="https://mybuild.microsoft.com/sessions/309d47fd-5319-42cf-a54f-3a177653ab63" target="_blank" rel="noopener">Power Platform is the best way for teams to build together</A></LI> <LI>BRK212: <A href="https://mybuild.microsoft.com/sessions/2575e7f5-b57b-487d-950f-ab91b7238f00" target="_blank" rel="noopener">What's new in Visual Studio Code</A></LI> <LI>BRK213: <A href="https://mybuild.microsoft.com/sessions/76ebac39-517d-44da-a58e-df4193b5efa9" target="_blank" rel="noopener">The future of modern application development with .NET</A></LI> <LI>BRK214: <A href="https://mybuild.microsoft.com/sessions/87cc3b82-bc57-483d-90b3-e91e12516352" target="_blank" rel="noopener">Scaling DevSecOps with GitHub and Azure</A></LI> <LI>BRK215: <A href="https://mybuild.microsoft.com/sessions/1b7f92ef-71a6-4a64-bece-001f94a2b7b8" target="_blank" rel="noopener">Empowering developers with powerful tooling and enabling frictionless app adoption</A></LI> <LI>BRK216: <A href="https://mybuild.microsoft.com/sessions/2a64cf46-9578-4c40-b503-00ad0ec21813" target="_blank" rel="noopener">Building Low Code Vertical Apps using the Power Platform</A></LI> </UL> <P><STRONG>Deliver new intelligent cloud-native applications by harnessing the power of Data and AI:</STRONG></P> <UL> <LI>TS02: <A href="https://mybuild.microsoft.com/sessions/46f12ac0-4d74-4a53-95b1-22e406edd72c" target="_blank" rel="noopener">Harness the power of data in your applications with Azure</A></LI> <LI>BRK220: <A href="https://mybuild.microsoft.com/sessions/2ba55238-d398-46f9-9ff2-eafcd9d69df3" target="_blank" rel="noopener">Build intelligent applications infused with world-class AI</A></LI> <LI>BRK221: <A href="https://mybuild.microsoft.com/sessions/10930f2e-ad9c-460b-b91d-844d17a5a875" target="_blank" rel="noopener">Understand the ML process and embed models into apps</A></LI> <LI>BRK222: <A href="https://mybuild.microsoft.com/sessions/bd7db37e-c50e-45bc-9e7e-6f791881b887" target="_blank" rel="noopener">Scale, analyze and serve Microsoft Dynamics 365 application data with Azure</A></LI> <LI>BRK223: <A href="https://mybuild.microsoft.com/sessions/f06287c8-8e56-452f-ae2f-e739c2be4870" target="_blank" rel="noopener">Building Digital Twins, Mixed Reality and Metaverse Apps</A></LI> </UL> <P><STRONG>Build cloud-native applications your way and run them anywhere:</STRONG></P> <UL> <LI>TS03: <A href="https://mybuild.microsoft.com/sessions/2debfc2e-f0b3-4adf-bcec-d126930f806f" target="_blank" rel="noopener">Build cloud-native applications that run anywhere</A></LI> <LI>BRK230: <A href="https://mybuild.microsoft.com/sessions/b66c3a65-4d11-4c1b-9b29-4df873a8cf4d" target="_blank" rel="noopener">Run Open Source Applications your way with Microsoft Azure</A></LI> <LI>BRK231: <A href="https://mybuild.microsoft.com/sessions/fd09c810-26ad-45bd-957b-1a70b74d93ec" target="_blank" rel="noopener">Modernize applications using containers</A></LI> <LI>BRK232: <A href="https://mybuild.microsoft.com/sessions/c52cef38-5c92-4bbd-ae49-f78ded025e04" target="_blank" rel="noopener">Serverless: Event-driven application development</A></LI> <LI>BRK233: <A href="https://mybuild.microsoft.com/sessions/bafa8204-25b2-44c1-86a0-2c852c1e3794" target="_blank" rel="noopener">Build consistent hybrid and multicloud applications with Azure Arc</A></LI> </UL> <P><STRONG>Follow #MSBuild</STRONG></P> <P>Explore the latest event news, trending topics, and share your point of view in real time with your community. Join us on Twitter and LinkedIn by using #MSBuild.</P> <P> </P> <P><A href="https://twitter.com/msdev" target="_blank" rel="noopener">Join us on social ></A></P> <P> </P> <P><STRONG>Connection Zone</STRONG></P> <P>Only at #MSBuild can you strengthen your network with local connections and meet with Microsoft product teams to help influence the future of products and services.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/community-connect" target="_blank" rel="noopener">Connect today></A></P> <P> </P> <P><STRONG>Learning Zone</STRONG></P> <P>The Learning Zone is the center for training, development, and certification with Microsoft. Whatever your style of learning happens to be, you can find content and interactive opportunities to boost and diversify your cloud skills.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/learning-zone" target="_blank" rel="noopener">Explore trainings ></A></P> <P> </P> <P><STRONG>[New] to Microsoft Build: Product Roundtables!</STRONG> <BR />There is so much for you to learn by attending Microsoft Build. And while you attend, we want to learn from you too! Join group discussions between you, fellow attendees and our product teams to share insights that will help shape the future of the products you use. Follow these steps to sign-up for a Product Roundtable: </P> <P> </P> <UL> <LI>Go to <A href="https://mybuild.microsoft.com" target="_blank" rel="noopener">https://mybuild.microsoft.com</A> and select “<A href="https://register.build.microsoft.com/" target="_blank" rel="noopener">Register Now</A>” (You must be registered for Build to participate in a Product Roundtable)</LI> <LI>Once you’re registered and are authenticated, click the “<A href="https://mybuild.microsoft.com/community-connect" target="_blank" rel="noopener">Connection Zone</A>” drop-down and select “<A href="https://sessions.mybuild.microsoft.com/Page/Timezone?redir=sessionscheduler_roundtablehttps://sessions.mybuild.microsoft.com/Account/Login?ReturnUrl=/Page/Timezone?redir=sessionscheduler_roundtable" target="_blank" rel="noopener">Product Roundtables</A>”.</LI> <LI>Browse the list of available Product Roundtable meetings; search for a keyword or choose from the available filters on the left.</LI> </UL> <P> </P> <P><A href="https://sessions.mybuild.microsoft.com/Account/Login?ReturnUrl=/Page/Timezone?redir=sessionscheduler_roundtable" target="_blank" rel="noopener">Participate in a Product Roundtable ></A></P> <P> </P> <P><STRONG>One-on-one consultation</STRONG></P> <P>Schedule your 45-minute, one-on-one consultation with a Microsoft engineer to architect, design, implement or migrate your solutions.</P> <P> </P> <P><A href="https://mybuild.microsoft.com/app-consult" target="_blank" rel="noopener">Schedule today ></A></P> <P> </P> <P><STRONG>Continue your learning journey</STRONG></P> <P>Discover more in-depth learning paths, training options, communities, and certification details across all Microsoft cloud solutions from one place.</P> <P> </P> <P><A href="https://aka.ms/learnatbuild" target="_blank" rel="noopener">Explore trainings ></A></P></description> <pubDate>Thu, 20 May 2021 20:59:13 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-build/ba-p/2365265</guid> <dc:creator>Mark Winters</dc:creator> <dc:date>2021-05-20T20:59:13Z</dc:date> ... </item> <item> <title>Microsoft Power Platform is bridging the digital divide in Latin America</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-power-platform-is-bridging-the-digital-divide-in-latin/ba-p/2356463</link> <description><P>Sharif Nasser grew up with the dream of becoming an inventor.</P> <P> </P> <P>As a teenager, he became interested in AI and machine learning and became a strong believer in technology as a powerful tool for equity and progress. While currently studying Robotics at Tecnolo’gico de Monterrey, in Monterrey, Mexico, he uses his technical knowledge and expertise to bridge the digital divide across Latin America.</P> <P> </P> <P>Through large scale online teaching ventures of up to 5000 students, he is making technology more accessible to all. Learn more about his journey and his belief in low code platforms to lower the barrier to entry: <U><FONT color="#0000FF">aka.ms/power-students</FONT></U>.</P> <P> </P> <P>If you would like to sharpen your own technical skills, check out: aka.ms/trainingandcertification.</P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=lMStzDY9TKQ&list=PL6ihFEvicZRClm9-3ohcw3xSw-ZZYbeJo" align="center" size="large" width="600" height="338" uploading="false" thumbnail="http://i.ytimg.com/vi/lMStzDY9TKQ/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P></description> <pubDate>Fri, 14 May 2021 22:36:47 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-power-platform-is-bridging-the-digital-divide-in-latin/ba-p/2356463</guid> <dc:creator>Elsa_Ramesh</dc:creator> <dc:date>2021-05-14T22:36:47Z</dc:date> ... </item> <item> <title>Unlock the Future of Azure IoT through Power Platform</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/unlock-the-future-of-azure-iot-through-power-platform/ba-p/2318270</link> <description><P><STRONG><SPAN data-contrast="none"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Azure IoT Gif maker.gif" style="width: 600px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/277510i56E7681A2EEDBEED/image-size/large?v=v2&px=999" role="button" title="Azure IoT Gif maker.gif" alt="Azure IoT Gif maker.gif" /></span></SPAN></STRONG></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month there will be a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure is a solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘Unlock the Future of Azure IoT through Power Platform’.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> In this blog I will briefly recap </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">, provide an overview of IoT on Azure and Azure Functions, how to pull an Azure Function into Power Automate, and how to integrate your Power Automate flow into Power Apps.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">What is Low-code application development on Azure?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy. Using Power Apps, it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In the past that would require another heavy lift by the development team to rework their previous application iteration. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">IoT on Azure and Azure Functions</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The goal of this webinar is to understand how to use IoT hub and Power Apps to control an IoT device.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To start, one would write the code in Azure IoT Hub, to send commands directly to your IoT device. In this webinar Samuel wrote in Node for IoT Hub, and wrote two basic commands, toggle fan on, and off.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The commands are sent via the code in Azure IoT Hub, which at first run locally. Once tested and confirmed to be running properly the next question is how can one rapidly call the API from anywhere across the globe?</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The answer is to create a flow in Power Automate, and connect that flow to a Power App, which will be a complete dashboard that controls the IoT device from anywhere in the world.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To accomplish this task, you have to first create an Azure Function, which will then be pulled into Power Automate using a “Get” function creating the flow.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Once you've built the Azure Function, run and test it locally first, test the on and off states via the Function URL.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To build a trigger for the Azure Function, in this case a Power Automate flow, you need to create an Azure resources group to check the Azure Function and test its local capabilities.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">If the test fails it could potentially be that you did not create or have an access token for the IoT device. To connect a device, IoT or otherwise to the cloud, you need to have an access token.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">In the webinar Samuel added two application settings to his function for the on and off commands.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After adding these access tokens and adjusting the settings of the IoT device, Samuel was able to successfully run his Azure Function.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Azure Function automated with Power Automate</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After building the Azure Function, you now can build your Power Automate flow to start building your globally accessible dashboard to operate your IoT device.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Samuel starts by building a basic Power Automate framework, then flow, and demonstrates how to test the flow once complete.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">He starts with a HTTP request, and implements a “Get” command. From there it is a straightforward process, to test and get the IoT Device to run.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Power Automate flow into Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After building your Power Automate flow, you develop a simple UI to toggle the fan on and off. Do this by building a canvas Power App and importing the Power Automate flow into the app.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To start, create a blank canvas app, and name it. In the Power Apps ribbon, you select “button”, and pick the button’s source, selecting “Power Automate” and “add a flow”.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Select the flow that is connected to the Azure IoT device, its name should be reflected in the selection menu.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">If everything is running properly your IoT device will turn on.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">FYI</SPAN></STRONG><SPAN data-contrast="auto"> in the webinar Samuel is running out of time, so he creates a new Power Automate flow, which he imports into the canvas app.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Summary</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Make sure to watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-UnlocktheFutureofAzureIoTthroughPowerPlatform.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">webinar </SPAN></A><SPAN data-contrast="none">to learn more about Azure IoT and how to import Azure Functions into your Power Apps.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Additionally, there will be a Low-code application development on Azure ‘Learn Live’ session during Build, covering the new </SPAN><A href="https://docs.microsoft.com/en-us/learn/paths/transform-business-applications-with-fusion-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">.NET x Power Apps learning path</SPAN></A><SPAN data-contrast="none">, covering integrations with Azure Functions, Visual Studio, and API Management.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Lastly, tune in to the Power Apps x Azure featured session at Build on May 25</SPAN><SPAN data-contrast="none">th</SPAN><SPAN data-contrast="none">, to learn more about the next Visual Studio extensions, Power Apps source code, and the ALM accelerator package. Start registering for Microsoft Build at </SPAN><A href="https://register.build.microsoft.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Build 2021.</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":240}"> </SPAN></P></description> <pubDate>Wed, 19 May 2021 12:19:21 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/unlock-the-future-of-azure-iot-through-power-platform/ba-p/2318270</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-05-19T12:19:21Z</dc:date> ... </item> <item> <title>Visual Studio 2019 Tricks and Techniques - Review, sort of</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/visual-studio-2019-tricks-and-techniques-review-sort-of/ba-p/2280956</link> <description><P>Earlier this year, Packt released a new book...</P> <P> </P> <H1 id="title" class="a-spacing-none a-text-normal"><SPAN class="a-size-extra-large">Visual Studio 2019 Tricks and Techniques: A developer's guide to writing better code and maximizing productivity</SPAN></H1> <P> </P> <P><A href="http://aka.ms/VS2019Book" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VS2019Cover.png" style="width: 809px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/274498i98828BF915DFECFC/image-size/large?v=v2&px=999" role="button" title="VS2019Cover.png" alt="VS2019Cover.png" /></span></A></P> <P> </P> <P><A href="http://aka.ms/VS2019Book" target="_blank" rel="noopener">http://aka.ms/VS2019Book</A> </P> <P> </P> <P>But I should be honest. I was involved in this book. Let me find a version of the cover with my name on it...</P> <P> </P> <P><A href="http://aka.ms/VS2019Book" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="VS2019Cover02.png" style="width: 637px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/274499i276B431C5E80328F/image-size/large?v=v2&px=999" role="button" title="VS2019Cover02.png" alt="VS2019Cover02.png" /></span></A></P> <P> </P> <P>There you go. I wrote the foreword! It was a great and wonderful thing! At least, I think it was. I really can't remember what I wrote. I'll go read it...</P> <P> </P> <P>Oh, I like how I opened the foreword...</P> <P> </P> <P><EM>"By combining Visual Studio Code and Visual Studio (VS), the brand is over two times more commonly used by developers than any other environment (Stack Overflow, 2019). What that means is that this topic is for 80% of all developers."</EM></P> <P> </P> <P>Have you thought about that? In this day and age, when there are so many IDE options for developers to pick from, they simply are choosing Visual Studio. There are many reasons why developers want to use Visual Studio, including compatibility with languages and tools, as well as various feature sets. </P> <P> </P> <P>I suppose it doesn't hurt that this is a professional tool (which means it makes money and thus is very well made, not cobbled together like a Frankenstein monster, as an open-source project by weekend warriors). And only a company like Microsoft could do that (invest in a great tool like this) and still make versions of it available for free!</P> <P> </P> <P>And that's really what this book is about... unleashing the power and capabilities of this well-adopted tool set. As I said/wrote in my foreword, the authors (Paul Schroeder and Aaron Cure) <STRONG>have cracked the code</STRONG>!</P> <P> </P> <P>If you apply the snippets, templates, git tips, and extension-based practices that you'll find in this book, then not only will you become more efficient, but you'll also become your team's hero and thought leader!</P> <P> </P> <P>Before I move on, did you notice how weird the subtitle was in the top version of the book cover? Let's inspect it:</P> <P> </P> <P><EM>"A developer's guide to mastering in core skills with the IDE and unlock advanced productivity secrets."</EM></P> <P> </P> <P>You could probably read that sentence for 20 minutes before you decipher and interpret all its secrets. I can see why they landed on a subtitle that was a little simpler to grok ("A developer's guide to writing better code and maximizing productivity"). Moving on...</P> <P> </P> <P>Let's take a look at what the topics are...</P> <P> </P> <OL> <LI>Flavors of Visual Studio</LI> <LI>Keyboard Shortcuts</LI> <LI>IDE Tips and Tricks</LI> <LI>Working with a Repository</LI> <LI>Working with Snippets</LI> <LI>Database Explorers</LI> <LI>Compiling, Debugging, and Versioning </LI> <LI>Introduction to Project and Item Templates</LI> <LI>Creating Your Own Templates</LI> <LI>Deploying Custom Templates</LI> <LI>Overviewing Visual Studio 2019 Extensions</LI> <LI>Overviewing VS Code Extensions</LI> <LI>CodeMaid is Your Friend</LI> <LI>Be Your Team's Hero with CodeGenHero</LI> <LI>Secure Code with Puma Scan</LI> <LI>Appendix: Other Popular Productivity Extensions</LI> </OL> <P> </P> <P>I know what you're thinking! You're thinking, "Is <EM>overviewing</EM> a word?" Yes, yes it is a word! More specifically, it's <A href="https://www.bing.com/search?q=define+overviewing&cvid=a5f9a1c4017a4a2aa4f3be7cd9514d1c&aqs=edge.0.0.3836j0j1&pglt=43&FORM=ANNAB1&PC=U531" target="_self">the present participle of a word</A>.</P> <P> </P> <P>Anyway, the reason why I wanted to write the foreword (and blog about it), is because I truly believe in the value. Developers don't use templates, especially, to the degree that they could. Plus, you'll peruse a plethora of other topics that you'd be wise to glean from. </P> <P> </P> <P>Also, one interesting tidbit is that the author (Mr. Schroeder) is partially at fault for the extension featured in chapter 14, CodeGenHero. So check that out!</P> <P> </P> <P>Whilst perusing the Amazons, I saw the reviews for the book, and they're pretty impressive. I want to give you just the titles of the reviews here, so you can see what I mean:</P> <P> </P> <UL> <LI>"Useful Visual Studio shortcuts, Git-Jitsu, snippet and debugging knowledge here." - Dan Hermes</LI> <LI>"Clear and concise with good examples to draw upon for furthering learning." - Robert Frey</LI> <LI>"This one is a must have!" - Binit Datta</LI> <LI>"Learn everything about Visual Studio 2019." - Yusuf</LI> <LI>"Excellent for those with some C# programming experience." - Ben Miller</LI> </UL> <P> </P> <P>This book is great for noobs and still useful for ratchety, engineering curmudgeons (I think I'm in transition from the former to the latter). So check it out, and leave a review on the Amazons:</P> <P> </P> <UL> <LI><A href="http://aka.ms/VS2019Book" target="_blank" rel="noopener">http://aka.ms/VS2019Book</A> </LI> </UL> <P> </P> <P>Remember to keep your mask on your face, your feet on the ground, and your head in the Cloud!</P> <P> </P> <P>Socially-Distanced Ed</P> <P> </P> <P> </P></description> <pubDate>Wed, 19 May 2021 12:31:48 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/visual-studio-2019-tricks-and-techniques-review-sort-of/ba-p/2280956</guid> <dc:creator>Ed Price</dc:creator> <dc:date>2021-05-19T12:31:48Z</dc:date> ... </item> <item> <title>Six reasons to join us at RedisConf 2021</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/six-reasons-to-join-us-at-redisconf-2021/ba-p/2273109</link> <description><P>Spring has arrived, which means that <A href="https://redislabs.com/redisconf/" target="_self">RedisConf</A>—the annual celebration of all things Redis—is almost here! Attending RedisConf is one of the best ways to sharpen your Redis skills by exploring best practices, learning about new features, and hearing from industry experts. You’ll also be able to virtually hang out with and learn from thousands of other developers passionate about Redis.</P> <P> </P> <P>We love Redis here at Microsoft, so we’re excited to be showing up at RedisConf in a big way this year. We’ll not only be talking more about our new <A href="https://aka.ms/redisenterprise" target="_blank" rel="noopener">Azure Cache for Redis Enterprise</A> offering, but we’ll also be hosting sessions and panels that dive deeper into the best ways to use Redis on Azure. Want to learn more? Here are seven reasons to attend RedisConf 2021:</P> <P> </P> <OL> <LI>Explore <A href="https://redislabs.com/redisconf/training/" target="_blank" rel="noopener">live and on-demand training</A> on how to use Redis with popular frameworks like Spring and .NET Core.</LI> <LI>Hear Microsoft CVP Julia Liuson present a keynote status update about the ongoing collaboration between Microsoft and Redis Labs, including the Enterprise tiers of Azure Cache for Redis.</LI> <LI>Listen to customers like Genesys, <A href="https://redislabs.com/redisconf/sessions/rc21-s23/" target="_blank" rel="noopener">Adobe</A>, and <A href="https://redislabs.com/redisconf/sessions/rc21-s21/" target="_blank" rel="noopener">SitePro</A> who are using Redis Enterprise on Azure for use-cases as diverse as IoT data ingestion and mobile push notification deduplication.</LI> <LI>Tune in for a roundtable discussion between the Microsoft and Redis Labs teams that touches on what the collaboration between the companies looks like and the benefits it brings to customers.</LI> <LI>Learn how to <A href="https://redislabs.com/redisconf/sessions/rc21-s10/" target="_blank" rel="noopener">harness the power of Redis and Apache Kafka</A> to crunch high-velocity time series data through the power of RedisTimeSeries.</LI> <LI>Hear from experts from our product team on the best way to run Redis on Azure, including tips-and-tricks for maximizing performance, ensuring network security, limiting costs, and building enterprise-scale deployments.</LI> </OL> <P class="lia-align-center"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="kteegarden_0-1618426689978.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/272899i9F7F1F42B277CAB4/image-size/medium?v=v2&px=400" role="button" title="kteegarden_0-1618426689978.png" alt="kteegarden_0-1618426689978.png" /></span></P> <P> </P> <P><STRONG>RedisConf kicks off on April 20<SUP>th</SUP>, and registration is free! <A href="https://redislabs.com/redisconf/?utm_medium=referral&utm_source=partner&utm_campaign=Microsoft+redisconf21-registration-promo" target="_blank" rel="noopener">Sign-up now to attend</A>. </STRONG>We’ll see you there.</P></description> <pubDate>Wed, 14 Apr 2021 18:59:55 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/six-reasons-to-join-us-at-redisconf-2021/ba-p/2273109</guid> <dc:creator>kteegarden</dc:creator> <dc:date>2021-04-14T18:59:55Z</dc:date> ... </item> <item> <title>The Azure Data Architecture Map</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-data-architecture-map/ba-p/2251943</link> <description><P>Hi,</P> <P> </P> <P>I'm excited to announce this new map and I'm happy to see the great success (beyond expectations) of this map series. With nearly 300K views, these maps even gave birth to a more exhaustive book.</P> <P> </P> <P>FYI, here are all the maps of the series:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P>Admittedly, the data map was by far the hardest to build, because there is a big functional overlap across data services. Nevertheless, I tried to identify the primary use case of each service, or where a given service shines the most. </P> <P><BR />The purpose of the this map is to see, in a glimpse, which services may suit your functional needs but it is up to you to dig deeper.</P> <P> </P> <P>Here is the map:</P> <P> </P> <P><A title="Azure Data Architecture Map" href="https://techcommunity.microsoft.com/gxcuf89792/attachments/gxcuf89792/AzureDevCommunityBlog/641.9/2/data%20architecture.png" target="_self"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="data architecture.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/269290iA4815DF1EBA9AFE9/image-size/large?v=v2&px=999" role="button" title="data architecture.png" alt="data architecture.png" /></span></A></P> <P> </P> <P> </P> <P> </P> <P>which focuses on the following areas:</P> <UL> <LI>Traditional: many enterprises still deal with traditional BI and there is nothing wrong with it! This category regroups Azure services which you can use to build your cubes, run your ETL jobs, etc.<BR /><BR /></LI> <LI>Modern: this category is the counterpart of the traditional category. For example, ELT is the modern counterpart of ETL...that's a bit the spirit :). You may of course find services that are in both sides.<BR /><BR /></LI> <LI>Big Data: Big Data is also recent in the data lanscape, so it could have been a subset of the modern group, but for sake of clarity, I decided to make it a separate group. <BR /><BR /></LI> <LI>Artificial Intelligence: AI is on every lips so I couldn't skip it although this category was hard to craft. There is so much overlap across AI services that it's kind of hard to categorize them. I tried to have a very condensed group. AI would deserve to have its own map.<BR /><BR /></LI> <LI>Others: in this category, you'll find concerns such as "sharing data with other companies", "Governing data", etc.</LI> </UL> <P>One note though: Microsoft is pushing hard on Azure Synapse Analytics and their aim is to have an all-in-one service, that combines decades of on-premises data practices and the most modern and top-notch data features. So, you'd better keep an eye on its development!</P> <P> </P> <P>Here is the pointer to the map:</P> <P> </P> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="29px" style="width: 50%;">v 1.0</TD> <TD height="29px" style="width: 50%;"><A href="https://app.mindmapmaker.org/#m:mm3727bf0da6e94510b0861090c0f35d1b" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm3727bf0da6e94510b0861090c0f35d1b</A></TD> </TR> <TR> <TD height="29px" style="width: 50%;">PDF version</TD> <TD height="29px" style="width: 50%;"> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="56px" style="width: 50%;"> <P><A href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter06/maps/Data%20Architecture.pdf" target="_blank" rel="noopener">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter06/maps/Data%20Architecture.pdf</A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> </TD> </TR> </TBODY> </TABLE> <P> </P></description> <pubDate>Thu, 08 Apr 2021 06:58:03 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-data-architecture-map/ba-p/2251943</guid> <dc:creator>stephaneey</dc:creator> <dc:date>2021-04-08T06:58:03Z</dc:date> ... </item> <item> <title>Modern Application Development</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/modern-application-development/ba-p/2235485</link> <description><P><STRONG><SPAN data-contrast="auto">Blog Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">This blog will provide an overview of </SPAN><A href="https://azure.microsoft.com/en-us/solutions/modern-application-development/#:~:text=Modern%20application%20development%20is%20an,%2C%20and%20built%2Din%20monitoring." target="_blank" rel="noopener"><SPAN data-contrast="none">Modern application development</SPAN></A><SPAN data-contrast="auto">. The blog will first define</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="auto">m</SPAN><SPAN data-contrast="auto">odern</SPAN><SPAN data-contrast="auto"> application development</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">approach</SPAN><SPAN data-contrast="auto">. </SPAN><SPAN data-contrast="auto">Then delve into the </SPAN><SPAN data-contrast="auto">‘</SPAN><SPAN data-contrast="auto">7 building blocks</SPAN><SPAN data-contrast="auto">’</SPAN><SPAN data-contrast="auto"> of</SPAN><SPAN data-contrast="auto"> the </SPAN><SPAN data-contrast="auto">approach </SPAN><SPAN data-contrast="auto">starting with cloud native architecture</SPAN><SPAN data-contrast="auto">, followed by AI, </SPAN><SPAN data-contrast="auto">Integration, Data, Software delivery, Operations, </SPAN><SPAN data-contrast="auto">and Security.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Each segment will define</SPAN><SPAN data-contrast="auto"> and explain </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="auto">‘</SPAN><SPAN data-contrast="auto">building block</SPAN><SPAN data-contrast="auto">’</SPAN><SPAN data-contrast="auto"> and how th</SPAN><SPAN data-contrast="auto">e modern application development approach leverages the ‘building blocks’ to produce more robust applications.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/solutions/modern-application-development/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">What is Modern Application Development</SPAN></STRONG><STRONG><SPAN data-contrast="none"> (MAD)</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/modern-application-development/#:~:text=Modern%20application%20development%20is%20an,%2C%20and%20built%2Din%20monitoring." target="_blank" rel="noopener"><SPAN data-contrast="none">Modern application development</SPAN></A><SPAN data-contrast="none"> is an approach that enables you to </SPAN><SPAN data-contrast="auto">innovate rapidly by using cloud-native architectures with loosely coupled microservices, managed databases, AI, DevOps support, and built-in monitoring.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">resulting modern </SPAN><SPAN data-contrast="none">applications</SPAN><SPAN data-contrast="none"> leverage </SPAN><SPAN data-contrast="none">cloud native architectures by packaging code and dependencies in containers and deploy</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">them </SPAN><SPAN data-contrast="none">as microservices to increase developer velocity using DevOps practices.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Subsequently m</SPAN><SPAN data-contrast="none">odern applications utilize continuous integration and delivery</SPAN><SPAN data-contrast="none"> (CI/CD)</SPAN><SPAN data-contrast="none"> technologies and processes to improve system reliability</SPAN><SPAN data-contrast="none">. Modern apps employ a</SPAN><SPAN data-contrast="none">utomation to identify and quickly mitigate issues applying best practices like infrastructure as code and increas</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> data security with threat detection and protection.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Lastly, modern applications are faster by infusing AI into native architecture structures to reduce manual tasks, accelerating workflows and introducing low code application development tools to simplify and expedite development processes.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/overview/cloudnative/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Cloud-native </SPAN></STRONG><STRONG><SPAN data-contrast="none">architectures</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">According to The Cloud Native Computing Foundation</SPAN><SPAN data-contrast="none"> (CNCF)</SPAN><SPAN data-contrast="none">, cloud </SPAN><SPAN data-contrast="none">native</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">is</SPAN><SPAN data-contrast="none"> defined as “</SPAN><SPAN data-contrast="none">Cloud-native technologies empower organizations to build and run scalable applications in modern, dynamic environments such as public, private, and hybrid clouds. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Containers, service meshes, microservices, immutable infrastructure, and declarative APIs exemplify this approach.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">These techniques enable loosely coupled systems that are resilient, manageable, and observable. Combined with robust automation, they allow engineers to make high-impact changes frequently and predictably with minimal toil.”</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Utilizing that definition, what are the key tenants of a cloud-native approach, and how does each tenant benefit you? </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">As stated above, cloud-native architectures center on speed and agility. That speed and agility are derived from 6 factors</SPAN><SPAN data-contrast="auto">:</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">C</SPAN><SPAN data-contrast="auto">loud infrastructure</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">M</SPAN><SPAN data-contrast="auto">odern design</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> M</SPAN><SPAN data-contrast="auto">icroservices</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> C</SPAN><SPAN data-contrast="auto">ontainers</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> B</SPAN><SPAN data-contrast="auto">acking services</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> A</SPAN><SPAN data-contrast="auto">utomation. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_0-1615417254157.png" style="width: 1378px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262621i9AA898CFC043E67A/image-dimensions/1378x485?v=v2" width="1378" height="485" role="button" title="riduncan_0-1615417254157.png" alt="riduncan_0-1615417254157.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Cloud infrastructure</SPAN></STRONG><SPAN data-contrast="auto"> is the </SPAN><STRONG><SPAN data-contrast="auto">most important factor</SPAN></STRONG><SPAN data-contrast="auto"> that contributes to the speed and agility of cloud-native architecture.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">3 </SPAN></STRONG><STRONG><SPAN data-contrast="auto">K</SPAN></STRONG><STRONG><SPAN data-contrast="auto">ey </SPAN></STRONG><STRONG><SPAN data-contrast="auto">Factors</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="auto"> Cloud-native systems full</SPAN><SPAN data-contrast="auto">y leverage the cloud service model using PaaS compute infra</SPAN><SPAN data-contrast="auto">structure</SPAN><SPAN data-contrast="auto"> and managed services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> Cloud-native systems continue to run as </SPAN><SPAN data-contrast="auto">infrastructure</SPAN><SPAN data-contrast="auto"> scales in or out without worrying about the back end because the infra is fully managed.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">Cloud-native systems </SPAN><SPAN data-contrast="auto">have</SPAN><SPAN data-contrast="auto"> auto scal</SPAN><SPAN data-contrast="auto">ing</SPAN><SPAN data-contrast="auto">, self-heal</SPAN><SPAN data-contrast="auto">ing</SPAN><SPAN data-contrast="auto">, and monitor</SPAN><SPAN data-contrast="auto">ing capabilities.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="auto">Modern Design is highly </SPAN><SPAN data-contrast="auto">effective </SPAN><SPAN data-contrast="auto">in part </SPAN><SPAN data-contrast="auto">due to the </SPAN><STRONG><SPAN data-contrast="auto">Twelve-Factor Application method</SPAN></STRONG><SPAN data-contrast="auto">, which is a set of principles and practices that develope</SPAN><SPAN data-contrast="auto">rs follow to construct applications optimized for modern cloud environments.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Most Critical Considerations for Modern Design</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">Communication</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">- </SPAN><SPAN data-contrast="auto">How front ends communication with </SPAN><SPAN data-contrast="auto">back-end</SPAN><SPAN data-contrast="auto"> services, and how </SPAN><SPAN data-contrast="auto">back-end</SPAN><SPAN data-contrast="auto"> services communicate with each other.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Resiliency</SPAN><SPAN data-contrast="auto"> - How services in your distributed architecture respond in </SPAN><SPAN data-contrast="auto">less-than-ideal</SPAN><SPAN data-contrast="auto"> scenarios due to the in-process, out-process </SPAN><SPAN data-contrast="auto">network communications of microservices architecture.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-contrast="auto">Distributed Data</SPAN><SPAN data-contrast="auto"> - How do you query data or implement a transaction across multiple services?</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Identity</SPAN><SPAN data-contrast="auto"> - How does your service identify who is accessing it and their allotted permissions?</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><STRONG><SPAN data-contrast="auto">What are Microservices?</SPAN></STRONG><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Microservices are built as a distributed set of small, independent services that interact through a shared fabric. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_1-1615417254174.png" style="width: 1546px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262623i3649D2C4FCDF09FD/image-dimensions/1546x653?v=v2" width="1546" height="653" role="button" title="riduncan_1-1615417254174.png" alt="riduncan_1-1615417254174.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Improved Agility with </SPAN></STRONG><A href="https://azure.microsoft.com/en-us/solutions/microservice-applications/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Microservices</SPAN></STRONG></A><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Each microservice has an autonomous lifecycle and can evolve independently and deploy frequently. </SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Each microservice can scale independently</SPAN><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">enabling services to scale to meet demand. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="none">Those microservices are then packaged </SPAN><SPAN data-contrast="none">a container image, those images are stored in container registry</SPAN><SPAN data-contrast="none">. When needed you transform the container into a running </SPAN><SPAN data-contrast="none">container </SPAN><SPAN data-contrast="none">instance</SPAN><SPAN data-contrast="none">, to utilize the stored microservices. </SPAN><SPAN data-contrast="none">How</SPAN><SPAN data-contrast="none"> do</SPAN><SPAN data-contrast="none"> containers benefit cloud native apps?</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Benefits of </SPAN></STRONG><A href="https://azure.microsoft.com/en-us/product-categories/containers/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Containers</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Provide portability and guarantee consistency across environments.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Containers can isolate </SPAN><SPAN data-contrast="none">microservices</SPAN><SPAN data-contrast="none"> and their dependencies from the underlying infrastructure. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Smaller </SPAN><SPAN data-contrast="none">footprints</SPAN><SPAN data-contrast="none"> than full virtual machines (VMs). That smaller size increases densi</SPAN><SPAN data-contrast="none">ty, the number of microservices, that a given host can run at a time. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="none">Cloud native solutions also increase application speed and agility via backing services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_2-1615417254161.png" style="width: 1520px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262622i5F3F3AA6AA90942E/image-dimensions/1520x942?v=v2" width="1520" height="942" role="button" title="riduncan_2-1615417254161.png" alt="riduncan_2-1615417254161.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Benefits of </SPAN></STRONG><A href="https://12factor.net/backing-services" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Backing Services</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Save time and </SPAN><SPAN data-contrast="none">labor</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Treat</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> backing services as</SPAN><SPAN data-contrast="none"> attached </SPAN><SPAN data-contrast="none">resources</SPAN><SPAN data-contrast="none"> enabl</SPAN><SPAN data-contrast="none">es</SPAN><SPAN data-contrast="none"> the services to attach and detach as needed without code changes </SPAN><SPAN data-contrast="none">to </SPAN><SPAN data-contrast="none">the </SPAN><SPAN data-contrast="none">microservices that contain information, enabling greater </SPAN><SPAN data-contrast="none">dynamism</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><SPAN data-contrast="none">Lastly, cloud-native solutions leverage automation. </SPAN><SPAN data-contrast="none">Using cloud-native </SPAN><SPAN data-contrast="none">architectures</SPAN><SPAN data-contrast="none"> your </SPAN><SPAN data-contrast="none">infrastructure and deployment are automated, consistent, and reputable.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Benefits of Automation</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><A href="https://docs.microsoft.com/en-us/azure/devops/learn/what-is-infrastructure-as-code" target="_blank" rel="noopener"><SPAN data-contrast="none">In</SPAN><SPAN data-contrast="none">fr</SPAN><SPAN data-contrast="none">astructure</SPAN><SPAN data-contrast="none"> as Code</SPAN><SPAN data-contrast="none"> (IaC)</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">avoids</SPAN><SPAN data-contrast="none"> manual</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">environment </SPAN><SPAN data-contrast="none">configuration </SPAN><SPAN data-contrast="none">and deliver</SPAN><SPAN data-contrast="none">s</SPAN><SPAN data-contrast="none"> stable environments rapidly at scale.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Automated deployment leverages CI/CD to speed up innovation and deployment, updating on-demand</SPAN><SPAN data-contrast="none">; </SPAN><SPAN data-contrast="none">saving money and time. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </OL> <P><A href="https://azure.microsoft.com/en-us/overview/ai-platform/dev-resources/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Artificial Intelligence</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The second building block in the modern application development approach is A</SPAN><SPAN data-contrast="none">rtificial intelligence (AI)</SPAN><SPAN data-contrast="none">.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What comprises</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">artificial intelligence</SPAN></STRONG><STRONG><SPAN data-contrast="none">? How do I </SPAN></STRONG><STRONG><SPAN data-contrast="none">add AI to my applications? </SPAN></STRONG><A href="https://azure.microsoft.com/en-us/overview/ai-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Artificial Intelligence</SPAN></A><SPAN data-contrast="none"> is comprised of </SPAN><SPAN data-contrast="none">machine learning, knowledge mining, and AI apps and agents. Un</SPAN><SPAN data-contrast="none">der the apps and agent's domain there are two overarching products, </SPAN><A href="https://azure.microsoft.com/en-us/services/cognitive-services/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Cognitive Services</SPAN></A><SPAN data-contrast="none"> and </SPAN><A href="https://azure.microsoft.com/en-us/services/bot-services/" target="_blank" rel="noopener"><SPAN data-contrast="none">Bot Service</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">that we're going to focus on</SPAN><SPAN data-contrast="none">.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Cognitive services are a collection of domain specific pre-trained AI models that can be customized with your data. Bot service </SPAN><SPAN data-contrast="none">is a</SPAN><SPAN data-contrast="none"> purpose-built bot development environment with out-of-the-box templates. To learn how to add AI to your applications watch the</SPAN><SPAN data-contrast="none"> short</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">video titled </SPAN><SPAN data-contrast="none">“</SPAN><A href="https://azure.microsoft.com/en-us/overview/ai-platform/dev-resources/#videos" target="_blank" rel="noopener"><SPAN data-contrast="none">Easily add AI to your applications.</SPAN></A><SPAN data-contrast="none">”</SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_3-1615417254190.png" style="width: 1543px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262626i22363CD93A58FCD4/image-dimensions/1543x734?v=v2" width="1543" height="734" role="button" title="riduncan_3-1615417254190.png" alt="riduncan_3-1615417254190.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Innate Benefits</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">User benefits: </SPAN></STRONG><SPAN data-contrast="none">Translation, chatbots, and voice for AI-enabled user interfaces.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Business benefits:</SPAN></STRONG><SPAN data-contrast="none"> Enhanced business logic for scenarios like search, personalization, document processing, image ana</SPAN><SPAN data-contrast="none">lytics, anomaly detection, and speech analytics.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Modern App</SPAN></STRONG><STRONG><SPAN data-contrast="none">lication</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">Dev</SPAN></STRONG><STRONG><SPAN data-contrast="none">elopment</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">unique</SPAN></STRONG><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><STRONG><SPAN data-contrast="none">benefit</SPAN></STRONG><STRONG><SPAN data-contrast="none">:</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Enable</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">d</SPAN><SPAN data-contrast="none">evelopers </SPAN><SPAN data-contrast="none">of any skill </SPAN><SPAN data-contrast="none">to add AI capabilities to their applications with pre-built and customizable AI models for speech, vision, </SPAN><SPAN data-contrast="none">language, and decision-making</SPAN><SPAN data-contrast="none">.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/product-categories/integration/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Integration</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The third building block is integration.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Why is integration needed, and how is it accomplished?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Integration is needed to integrate applications by connecting multiple i</SPAN><SPAN data-contrast="none">ndependent systems</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-contrast="none">The four core cloud services to meet integration needs are</SPAN><SPAN data-contrast="none">:</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <OL> <LI><STRONG><SPAN data-contrast="none"> </SPAN></STRONG><SPAN data-contrast="none">A</SPAN><SPAN data-contrast="auto"> way to publish and manage application programming interfaces (APIs). </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":259,"335559991":720}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">A way to create and run integration logic</SPAN><SPAN data-contrast="auto">, typically with a graphical tool for defining the workflow’s logic. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":259,"335559991":720}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> A way for applications and integration technologies to communicate in a loosely coupled way via messaging. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559739":160,"335559740":259,"335559991":720}"> </SPAN></LI> <LI><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">A technology that supports communication via events</SPAN></LI> </OL> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_4-1615417254165.jpeg" style="width: 1537px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262624i680ADC41AE4E218D/image-dimensions/1537x771?v=v2" width="1537" height="771" role="button" title="riduncan_4-1615417254165.jpeg" alt="riduncan_4-1615417254165.jpeg" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What are the benefits of Azure integration services</SPAN></STRONG><STRONG><SPAN data-contrast="none"> and how do they translate to the modern app dev approach</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Azure meets all four needs, the first need is met by</SPAN><SPAN data-contrast="none"> Azure </SPAN><SPAN data-contrast="none">API management, the second is met by Azure Logic Apps, the third is Azure Service </SPAN><SPAN data-contrast="none">B</SPAN><SPAN data-contrast="none">us</SPAN><SPAN data-contrast="none">, and the </SPAN><SPAN data-contrast="none">final is met by </SPAN><SPAN data-contrast="none">Azure Event Grid.</SPAN></P> <P> </P> <P><SPAN data-contrast="auto">The four components of Azure Integration Services address the core requirements of application integration. Yet real scenarios often require </SPAN><SPAN data-contrast="auto">more,</SPAN><SPAN data-contrast="auto"> and this is where the modern application development approach comes into play</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Perhaps </SPAN><SPAN data-contrast="auto">your integration application needs a place to store unstructured data, or a way to include custom code that does specialized data transformations.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Azure Integration Services is part of the larger Azure cloud platform, </SPAN><SPAN data-contrast="auto">making it</SPAN><SPAN data-contrast="auto"> easi</SPAN><SPAN data-contrast="auto">er</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">to </SPAN><SPAN data-contrast="auto">in</SPAN><SPAN data-contrast="auto">tegrate data, APIs, and </SPAN><SPAN data-contrast="auto">into your modern app to meet your needs.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">You might store unstructured data in Azure Data Lake Store, for instance, or write custom code using Azure Functions, </SPAN><SPAN data-contrast="auto">to meet</SPAN><SPAN data-contrast="auto"> serverless compute tech</SPAN><SPAN data-contrast="auto"> needs</SPAN><SPAN data-contrast="auto">.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/services/azure-sql/sql-managed-instance/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Data</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The fourth building block is data, and more specifically managed databases.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What are the advantages of managed databases?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Fully managed, cloud-based databases provide limitless scale, low-latency access to rich data, and advanced data protection—all built in, regardless of languages or frameworks.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">How does the modern application development approach benefit from fully managed databases</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Modern application development leverages microservices and containers, the benefit to both technologies </SPAN><SPAN data-contrast="none">is</SPAN><SPAN data-contrast="none"> their ability to operate independently</SPAN><SPAN data-contrast="none"> and </SPAN><SPAN data-contrast="none">scale as demand warrants.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">To ensure the greatest user satisfaction and app functionality the limitless scale and low</SPAN><SPAN data-contrast="none">-</SPAN><SPAN data-contrast="none">latency access </SPAN><SPAN data-contrast="none">to data enable apps to run </SPAN><SPAN data-contrast="none">unimpeded.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_5-1615417254180.png" style="width: 1886px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262625iCA63945B54B2A5F3/image-dimensions/1886x1204?v=v2" width="1886" height="1204" role="button" title="riduncan_5-1615417254180.png" alt="riduncan_5-1615417254180.png" /></span></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/solutions/devops/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Software Delivery</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The fifth building block is software delivery.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">What constitutes modern development software delivery practices?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Modern app development software delivery practices enable you to meet r</SPAN><SPAN data-contrast="none">apid market changes that require shorter release cycles without sacrificing quality, stability, and security.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">The practice</SPAN><SPAN data-contrast="none">s help you to release in a fast, consistent, and reliable way by using highly productive tools, automating mundane and manual steps, and iterating in small increments through CI/CD and DevOps practices.</SPAN></P> <P> </P> <P><A href="https://azure.microsoft.com/en-us/overview/what-is-devops/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">What </SPAN></STRONG><STRONG><SPAN data-contrast="none">is </SPAN></STRONG><STRONG><SPAN data-contrast="none">DevOps?</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">A compound of development (Dev) and operations (Ops), DevOps is the union of people, process, and technology to continually provide value to customers.</SPAN><SPAN data-contrast="none"> DevOps enables formerly siloed roles—development, IT operations, quality engineering, and security—to coordinate and collaborate to produce better, more reliable products.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">By adopting a DevOps culture along with DevOps practices and tools, teams gain the ability to better respond to customer needs, increase confidence in the applications they build, and achieve development goals faster.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">DevOps influences the application lifecycle throughout its </SPAN><STRONG><SPAN data-contrast="none">plan</SPAN></STRONG><SPAN data-contrast="none">, </SPAN><STRONG><SPAN data-contrast="none">develop</SPAN></STRONG><SPAN data-contrast="none">, </SPAN><STRONG><SPAN data-contrast="none">deliver</SPAN></STRONG><SPAN data-contrast="none">, and </SPAN><STRONG><SPAN data-contrast="none">operate </SPAN></STRONG><SPAN data-contrast="none">phases.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="riduncan_6-1615417254185.png" style="width: 1642px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262627iEB7A264D4A97EAF5/image-dimensions/1642x1414?v=v2" width="1642" height="1414" role="button" title="riduncan_6-1615417254185.png" alt="riduncan_6-1615417254185.png" /></span></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Plan</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In the plan phase, DevOps teams ideate, define, and describe features and capabilities of the applications and systems they are building. </SPAN><SPAN data-contrast="none">Creating backlogs, tracking bugs, managing agile software development with Scrum, using Kanban boards, and visualizing progress with dashboards are some of the ways DevOps teams plan with agility and visibility.</SPAN></P> <P> </P> <P aria-level="3"><STRONG><SPAN data-contrast="none">Develop</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="none">The develop phase includes all aspects of coding—writing, testing, reviewing, and the integration of code by team members—as well as building that code into build artifacts that can be deployed into various environments. </SPAN><SPAN data-contrast="none">To develop rapidly, they use highly productive tools, automate mundane and manual steps, and iterate in small increments through automated testing and continuous integration.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"> </P> <P aria-level="3"><STRONG><SPAN data-contrast="none">Deliver</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="none">Delivery is the process of deploying applications into production environments and deploying and configuring the fully governed foundational infrastructure that makes up those environments. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P aria-level="3"><SPAN data-contrast="none">In the deliver phase, teams define a release management process with clear manual approval </SPAN><SPAN data-contrast="none">stages.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">They</SPAN><SPAN data-contrast="none"> also set automated gates that move applications between stages until they’re made available to customers.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P aria-level="3"><STRONG><SPAN data-contrast="none">Operate</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559738":40,"335559739":0,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">The </SPAN><SPAN data-contrast="none">operate</SPAN><SPAN data-contrast="none"> phase involves maintaining, monitoring, and troubleshooting applications in production environments. In adopting DevOps practices, teams work to ensure system reliability, high availability, and aim for zero downtime while reinforcing security and governance.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/overview/continuous-delivery-vs-continuous-deployment/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">W</SPAN></STRONG><STRONG><SPAN data-contrast="none">hat is CI/CD?</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Under continuous integration, the develop phase—building and testing code—is fully automated. </SPAN><SPAN data-contrast="none">Each time you commit code, changes are validated and merged to the master branch, and the code is packaged in a build artifact.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Under continuous delivery, anytime a new build artifact is available, the artifact is automatically placed in the desired environment and deployed.</SPAN><SPAN data-contrast="none"> With continuous deployment, you automate the entire process from code </SPAN><SPAN data-contrast="none">commit</SPAN><SPAN data-contrast="none"> to production</SPAN><SPAN data-contrast="none">.</SPAN></P> <P><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/services/monitor/" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Operations</SPAN></STRONG><SPAN> <BR /></SPAN></A><SPAN data-contrast="auto">The sixth building block is operations to maximize automation.</SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">How do</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><STRONG><SPAN data-contrast="auto">you maximize automation in your modern app</SPAN></STRONG><STRONG><SPAN data-contrast="auto">lication development approach?</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">With an increasingly complex environment to manage, maximizing the use of automation helps you improve operational efficiency, identify issues before they affect customer experiences, and quickly mitigate issues when they occur.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Fully managed platforms provide automated logging, scaling, and high availability. Rich telemetry, actionable alerting, and full visibility into applications and the underlying system are key to a modern application development approach.</SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Automating regular checkups and applying best practices like infrastructure as code and site reliability engineering promotes resiliency and helps you respond to incidents with minimal downtime and data loss.</SPAN></P> <P> </P> <P><A href="https://docs.microsoft.com/en-us/azure/security/fundamentals/best-practices-and-patterns" target="_blank" rel="noopener"><STRONG><SPAN data-contrast="none">Security</SPAN></STRONG></A><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The seventh building block is multilayered security.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Why do I need multi-layered security in my modern </SPAN></STRONG><STRONG><SPAN data-contrast="auto">applications?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">Modern applications </SPAN><SPAN data-contrast="none">require</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://docs.microsoft.com/en-us/azure/security/fundamentals/best-practices-and-patterns" target="_blank" rel="noopener"><SPAN data-contrast="none">multilayered security</SPAN></A><SPAN data-contrast="none"> across code, delivery pipelines, app runtimes, and databases. Start by providing developers secure dev boxes with well-governed identity. As part of the DevOps lifecycle, use automated tools to examine dependencies in code repositories and scan for vulnerabilities as you deploy apps to the target environment.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">Enterprise-grade secrets and policy management encrypt the applications and give the operations team centralized policy enforcement.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">With fully managed compute and database services, security control is built in and threat protection is executed in real time.</SPAN></P> <P> </P> <P class="hd he fn hf b hg iu hh hi hj iv hk hl hm iw hn ho hp ix hq hr hs iy ht hu hw db dw" data-selectable-paragraph=""><STRONG class="hf co">Conclusion</STRONG><BR />While modern application development can seem daunting, it is an approach that can be done iteratively, and each step can yield large benefits for your team.</P> <P class="hd he fn hf b hg iu hh hi hj iv hk hl hm iw hn ho hp ix hq hr hs iy ht hu hw db dw" data-selectable-paragraph=""> </P> <P class="hd he fn hf b hg iu hh hi hj iv hk hl hm iw hn ho hp ix hq hr hs iy ht hu hw db dw" data-selectable-paragraph="">Access webinars, analyst reports, tutorials, and more on the<SPAN> </SPAN><A class="bp iz" href="https://azure.microsoft.com/en-us/solutions/modern-application-development/" target="_blank" rel="noopener nofollow">Modern application development on Azure</A><SPAN> </SPAN>page.</P></description> <pubDate>Fri, 26 Mar 2021 00:59:09 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/modern-application-development/ba-p/2235485</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-03-26T00:59:09Z</dc:date> ... </item> <item> <title>[DevTest Labs] Decommissioning preview API's '2015-05-21-preview' & '2017-04-26-preview' in 90 days</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-decommissioning-preview-api-s-2015-05-21-preview/ba-p/2219208</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Develop and Test.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/267325iA0FC3F81BD42ECF9/image-size/large?v=v2&px=999" role="button" title="Develop and Test.png" alt="Develop and Test.png" /></span></P> <P> </P> <P>There were a few preview API’s that were made available in the previous years for Azure DevTest Labs, with the goal of enabling early access to certain features and functionalities.</P> <P> </P> <P>We have incorporated all the functionalities related to below preview API’s in the latest API specs, that were generally made available and we have decided to decommission below DTL preview API’s by June 17, 2021.</P> <P> </P> <UL> <LI> <STRONG>2015-05-21-preview</STRONG></LI> <LI><STRONG> </STRONG><STRONG>2017-04-26-preview</STRONG></LI> </UL> <P>If you are still using any of the above preview API’s, We recommend to migrate and use the <A href="https://github.com/Azure/azure-rest-api-specs/tree/master/specification/devtestlabs/resource-manager/Microsoft.DevTestLab/stable/2018-09-15" target="_blank" rel="noopener">latest DTL REST API Specs</A> that were generally made available. The decommissioning does not impact our current API version in preview, 2018-09-15-preview.</P> <P> </P> <P>‘<STRONG>2015-05-21-preview’</STRONG> and<STRONG> ‘</STRONG><STRONG>2017-04-26-preview</STRONG><STRONG>’ </STRONG>API versions would be decommissioned on June 17, 2021 and if you are using the preview API’s, we request you to kindly migrate before June 17, 2021.</P> <P> </P> <P>As always, please reach out to us in case of any questions or concerns.</P> <P> </P> <P>- DevTest Labs Product Team</P> <P> </P></description> <pubDate>Thu, 27 May 2021 22:17:43 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-decommissioning-preview-api-s-2015-05-21-preview/ba-p/2219208</guid> <dc:creator>Sagar_Lankala</dc:creator> <dc:date>2021-05-27T22:17:43Z</dc:date> ... </item> <item> <title>Microsoft Customer Co-Creation: How You Can Help Influence the way Products and Services are Built</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-customer-co-creation-how-you-can-help-influence-the/ba-p/2217804</link> <description><P><SPAN data-contrast="auto">March is Women’s History Month </SPAN><SPAN data-contrast="auto">and what a more fitting </SPAN><SPAN data-contrast="auto">time</SPAN><SPAN data-contrast="auto"> for our team,</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">Microsoft Azure Engineering, </SPAN><SPAN data-contrast="auto">to have our first post go up here on the Tech Community Blog. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="IWD2021Blog_800.png" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/265096iC2D31AA25D562AAD/image-size/large?v=v2&px=999" role="button" title="IWD2021Blog_800.png" alt="IWD2021Blog_800.png" /></span></SPAN></P> <P><SPAN data-contrast="auto">As a woman working in tech, I’m proud to work for a company like Microsoft, where diversity and inclusion is celebrated. </SPAN><SPAN data-contrast="auto">This mindset also shapes the way we build our </SPAN><SPAN data-contrast="auto">products and services. That’s where a program like </SPAN><SPAN data-contrast="auto">Microsoft </SPAN><SPAN data-contrast="auto">Customer Co-creation comes into play. If you haven’t heard about </SPAN><SPAN data-contrast="auto">it</SPAN><SPAN data-contrast="auto">, I’d like to take this opportunity to tell you </SPAN><SPAN data-contrast="auto">more</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CustomerCoCreationBlog_800.png" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/265097iE06B95E39C6D5D7F/image-size/large?v=v2&px=999" role="button" title="CustomerCoCreationBlog_800.png" alt="CustomerCoCreationBlog_800.png" /></span></SPAN></P> <P><A href="https://customercocreation.microsoft.com/home/blog" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft</SPAN><SPAN data-contrast="none"> Customer co-creation</SPAN></A><SPAN data-contrast="auto"> connects you directly with engineers within </SPAN><SPAN data-contrast="auto">the </SPAN><SPAN data-contrast="none">Cloud Engineering (C+ AI) organization </SPAN><SPAN data-contrast="auto">so you can </SPAN><SPAN data-contrast="auto">talk to them about the products you care about. Sometimes this could mean playing an early role in product and service development</SPAN><SPAN data-contrast="auto"> before a single line of code is even written</SPAN><SPAN data-contrast="auto">. Ultimately, our hope is </SPAN><SPAN data-contrast="auto">your feedback will result in </SPAN><SPAN data-contrast="auto">the creation of </SPAN><SPAN data-contrast="auto">something you’ll</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">really love using</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">You can start by </SPAN><A href="https://customercocreation.microsoft.com/home/blog" target="_blank" rel="noopener"><SPAN data-contrast="none">fill</SPAN><SPAN data-contrast="none">ing</SPAN><SPAN data-contrast="none"> out your profile</SPAN></A><SPAN data-contrast="auto"> and tell</SPAN><SPAN data-contrast="auto">ing</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">us about yourself and what you’re interested in</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">When the right opportunity comes up, </SPAN><SPAN data-contrast="auto">our team will</SPAN><SPAN data-contrast="auto"> contact you, let you know the topic</SPAN><SPAN data-contrast="auto">,</SPAN><SPAN data-contrast="auto"> and ask your availability to participate in a feedback session. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><SPAN data-contrast="auto">Your voice matters and </SPAN><SPAN data-contrast="auto">I</SPAN><SPAN data-contrast="auto"> hope you’ll consider joining the Microsoft</SPAN><SPAN data-contrast="auto"> Customer</SPAN><SPAN data-contrast="auto"> Co-creation program </SPAN><SPAN data-contrast="auto">and help</SPAN><SPAN data-contrast="auto"> influence </SPAN><SPAN data-contrast="auto">the services and products </SPAN><SPAN data-contrast="auto">you </SPAN><SPAN data-contrast="auto">use</SPAN><SPAN data-contrast="auto">.</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="BlogLogo.jpg" style="width: 800px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/265100i8988DD20F3E1590E/image-size/large?v=v2&px=999" role="button" title="BlogLogo.jpg" alt="BlogLogo.jpg" /></span></P></description> <pubDate>Fri, 26 Mar 2021 00:58:34 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/microsoft-customer-co-creation-how-you-can-help-influence-the/ba-p/2217804</guid> <dc:creator>Malgosia Mazany</dc:creator> <dc:date>2021-03-26T00:58:34Z</dc:date> ... </item> <item> <title>[Customer Story] Enabling an Event Driven Architecture with DevTest Labs</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-enabling-an-event-driven-architecture-with/ba-p/2214548</link> <description><P><A href="https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration" target="_blank" rel="noopener">SharePoint Online</A> (SPO) is Microsoft’s enterprise-class document management service for <A href="https://www.microsoft.com/en-us/microsoft-365" target="_blank" rel="noopener">Microsoft365</A>. The <A href="https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration" target="_blank" rel="noopener">SharePoint Online</A> (SPO) team at Microsoft has created a solution, built on Azure DevTest Labs (DTL), to make SPO testing environments readily available to SharePoint engineers, leveraging the strengths of DevTest Labs and Azure. This is the second in a series of blog entries enabling anyone to build, configure and run a similar system using Azure and DTL. For part 1, see <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781" target="_blank" rel="noopener">How the SharePoint Online Team Leverages DevTest Labs</A>. </P> <P> </P> <P>In this blog post, two use cases of the solution’s expected VM lifecycle are described. A simple architecture is proposed that involves hooking up an <A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener">Azure Function App</A> to <A href="https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftdevtestlab" target="_blank" rel="noopener">DevTest Lab Events</A> by way of <A href="https://azure.microsoft.com/en-us/services/event-grid/" target="_blank" rel="noopener">Azure Event Grid</A> to implement the two use cases. There is a brief walk-through of the implementation intended to be used by other Azure customers to build similar solutions. If you are building an event-driven DTL application, consider using Azure Functions and Event Grid as the SPO team did. This article is of interest to you!</P> <P> </P> <H2>Scenario</H2> <P> </P> <P>As introduced in <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781" target="_blank" rel="noopener">Part 1</A> of this blog series, environments in Azure DevTest Labs are a natural fit for SPO integration testing. SPO engineers can claim test environments that are miniaturized data centers, with all components shrunk down and interacting on a single Azure VM inside DTL. Pools of these VMs are made available for SPO engineers so that test environments are readily available at any time. When finished, they unclaim them. </P> <P> </P> <P>There are two features that the SPO team has built on top of existing DevTest Labs Claim/Unclaim operations:</P> <P> </P> <P><STRONG><FONT color="#000000">Feature</FONT> 1 – Tag a Claimed VM</STRONG></P> <P> </P> <P>By default, DTL does not allow an easy way for the admin to know the ownership of claimed VMs. A common way to do this is to add an “Owner” tag to the VM using <A href="https://docs.microsoft.com/en-us/rest/api/resources/tags" target="_blank" rel="noopener">Azure Tags</A>. Tags are flexible and allow lab admins to easily organize Azure resources and make them easy to query, for example, to list VMs assigned to a given user or set of users. In this solution, when a user claims a VM, an event is fired, and the handler attaches an “Owner” tag, with associated user name as data, to the VM. The tag shows up in the VM’s properties in the Azure Portal.</P> <P> </P> <P><STRONG>Feature 2 – Delete an Unclaimed VM</STRONG></P> <P> </P> <P>In SPO’s use case, VMs are not re-usable. Once a VM is claimed by a lab user, the state on the VM may change in such a way as to make the VM unsuitable for future users’ needs. For example, users can change the state of one of the SharePoint web applications, or introduce state into SharePoint by simply adding a document to a document library as part of a test. (For a better understanding of SharePoint’s document libraries, try: <A href="https://support.microsoft.com/en-us/office/what-is-a-document-library-3b5976dd-65cf-4c9e-bf5a-713c10ca2872" target="_blank" rel="noopener">What is a document library?</A>) The engineer may also update the code running on the VM, which can change behavior in a way undesirable for other engineers.</P> <P> </P> <P>In general, once a VM is assigned to a lab user, its validity as a clean test environment can no longer be trusted. With this use case in mind, VMs in the SPO solution are single-use. Once unclaimed, they are deleted.</P> <P> </P> <P><STRONG><EM>Note:</EM></STRONG><EM> Replenishment of the pool of available VMs is described in a future blog entry in this series, entitled “Maintaining a Pool of Claimable VMs”.</EM></P> <P> </P> <P>Both of these features can be added to DevTest Labs using <A href="https://azure.microsoft.com/en-us/services/event-grid/" target="_blank" rel="noopener">Azure Event Grid</A>, with an <A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener">Azure Function</A> listening and handling events. The solution is simple and elegant; please read on to see how this is configured.</P> <P> </P> <H2>Event Handling with Azure Functions</H2> <P> </P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-overview" target="_blank" rel="noopener">Azure Functions</A> are a flexible, serverless computing platform in Azure. Functions can be configured to trigger when an Azure event fires, and DevTest Labs fires “Claim” and “Unclaim” events when VMs are claimed or unclaimed, respectively. When configured properly through <A href="https://azure.microsoft.com/en-us/services/event-grid/" target="_blank" rel="noopener">Event Grid</A>, events are dispatched to an Azure Function subscriber.</P> <P> </P> <P>For simplicity and brevity, the solution described herein implements a single Azure function to handle both Claim and Unclaim events. The function is written in <A href="https://docs.microsoft.com/en-us/powershell" target="_blank" rel="noopener">PowerShell</A> and implements the tagging and delete business logic for these events. It is deployed in a Function App, triggered when events fire, in accordance with this table:</P> <P> </P> <TABLE width="719"> <TBODY> <TR> <TD width="133"> <P><STRONG>DevTestLab Event </STRONG></P> </TD> <TD width="370"> <P><STRONG>Event Name</STRONG></P> </TD> <TD width="215"> <P><STRONG>Action</STRONG></P> </TD> </TR> <TR> <TD width="133"> <P><STRONG>Claim</STRONG></P> </TD> <TD width="370"> <P>microsoft.devtestlab/labs/virtualmachines/claim/action</P> </TD> <TD width="215"> <P>Add an "Owner" tag to the VM</P> </TD> </TR> <TR> <TD width="133"> <P><STRONG>Unclaim</STRONG></P> </TD> <TD width="370"> <P>microsoft.devtestlab/labs/virtualmachines/unclaim/action</P> </TD> <TD width="215"> <P>Delete the VM</P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P><STRONG><EM>Note:</EM></STRONG><EM> You can find a complete list of DevTestLab events here: </EM><A href="https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftdevtestlab" target="_blank" rel="noopener"><EM>DevTest Lab Events</EM></A><EM>. There are several useful ones that, when paired with the technique described in this post, can be used to solve other event-driven scenarios using the template given here.</EM></P> <P> </P> <H2>Solution Architecture</H2> <P> </P> <P>This solution builds on the ideas presented in the article <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/extend-devtest-labs-azure-functions" target="_blank" rel="noopener">Use Azure Functions to extend DevTest Labs</A>. A key difference is how the events are triggered: In the article, the Functions are triggered via an HTTP call. In this example, Claim/Unclaim events are generated from the DevTest Lab and routed via Event Grid to the function app. We will also be building on the coding concepts in <A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-event-grid-trigger?tabs=csharp" target="_blank" rel="noopener">Azure Event Grid trigger for Azure Functions</A>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_15-1615912246433.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264413iBF4DEA280572CB61/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_15-1615912246433.png" alt="Sagar_Lankala_15-1615912246433.png" /></span></P> <P> </P> <H2>Walkthrough</H2> <P> </P> <P>The following solution assumes a pre-created Azure DevTest Lab, such as one created using the steps in <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/devtest-lab-create-lab" target="_blank" rel="noopener">Create a lab in Azure DevTest Labs</A>. In this example, the Lab has been freshly deployed with name “PetesDTL” and resource group “PetesDTL_rg” with no VMs yet created.</P> <P> </P> <P><STRONG>Step 1: Create a Function App</STRONG></P> <P>Use the “Create a Resource” UI and find “Function App” in your Azure subscription, and hit “Create”. Select the resource group for your DevTest Lab. This is optional but is a convenience for grouping your app with the other resources for your Lab. In this example, the Name of the app is "PetesFnApp" and is in the “PetesDTL_rg” resource group with a Runtime stack that is PowerShell Core. <A href="https://microsoft.com/powershell" target="_blank" rel="noopener">PowerShell Core</A> is a flexible, operating system independent control language that is easy to get to work with Azure.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_16-1615913628568.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264430iAC7FA62F4D69F6A4/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_16-1615913628568.png" alt="Sagar_Lankala_16-1615913628568.png" /></span></P> <P> </P> <P>Leaving the majority of the settings with their defaults, hit “Review + create”, then “Create” to deploy the function app after the verification step.</P> <P> </P> <P><STRONG>Step 2: Create the FnDTLClaimUnclaim Function</STRONG></P> <P>Navigate to the newly-deployed Function App, hit “Functions” and then “+ Add” to add a new function to the App. Leave the “Development environment” to be “Develop in portal” and select “Azure Event Grid trigger” for the template. In this example, the new function is named “FnDTLClaimUnclaim”. The name indicates that this Powershell Core function is dual-purpose and will handle both the “Claim” and “Unclaim” events from the DevTest Lab. Click “Add”.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_17-1615913657857.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264431iECF8CB03B838F24F/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_17-1615913657857.png" alt="Sagar_Lankala_17-1615913657857.png" /></span></P> <P> </P> <P><STRONG>Step 3: Add logic to the function</STRONG></P> <P>Navigate to the newly-created function, and hit “Code + Test”. There is some sample code in the edit window, which you can replace with the following code:</P> <P> </P> <P> </P> <P> </P> <LI-CODE lang="csharp">param($eventGridEvent, $TriggerMetadata) $operationName = $eventGridEvent.data["operationName"] # Apply an Owner tag to a VM based on passed-in claims function ApplyOwnerTag($vmId, $claims) { # Get the VM $dtlVm = Get-AzResource -ResourceId $vmId -ErrorAction SilentlyContinue # Fetch user. # Prefer user specified in claims, then owner, then createdBy $claimPropName = $claims.keys | Where-Object {$_ -like "*/identity/claims/name"} if ($claimPropName) { $user = $claims[$claimPropName] } if (-not $user) { $user = $dtlVm.Properties.ownerUserPrincipalName } if (-not $user) { $user = $dtlVm.Properties.createdByUser } $tags = $dtlvm.Tags if ($tags) { if (-not $tags.keys.Contains("Owner")) { $tags.Add("Owner", $user) } } else { $tags = @{ Owner=$user } } # Save the VM's tags Set-AzResource -ResourceId $vmId -Tag $tags -Force | Out-Null } # Event Action # ------------------------------------------ # Claim Add "owner" tag to the VM # Unclaim Delete the VM $claimAction = ($operationName -eq "microsoft.devtestlab/labs/virtualmachines/claim/action") $unclaimAction = ($operationName -eq "microsoft.devtestlab/labs/virtualmachines/unclaim/action") if ($claimAction -or $unclaimAction) { $vmId = $eventGridEvent.subject Connect-AzAccount -Identity $dtlVm = Get-AzResource -ResourceId $vmId -ErrorAction SilentlyContinue if ($claimAction) { if (-not $dtlVm.Properties.allowClaim) { ApplyOwnerTag $vmId $eventGridEvent.data.claims } } else { if ($dtlVm.Properties.allowClaim) { Remove-AzResource -ResourceId $vmId -Force -ErrorAction SilentlyContinue } } } </LI-CODE> <P> </P> <P> </P> <P> </P> <P>Click “Save” to save the function.</P> <P> </P> <P>The code snippet contains an ApplyOwnerTag function and a main body. The ApplyOwnerTag function gets the user from variety of sources, preferring first the identity from the passed-in claims, then looking at the owner or created-by user from the DevTestLabs VM. Once it has a valid user name, it adds the “Owner” tag to the VM.</P> <P> </P> <P>The main body of the Azure Function first determines which event is being handled. On a Claim event, the ApplyOwnerTag function is called to add the “Owner” tag to the given VM. On Unclaim, the VM is removed. This logic implements the behavior desired for the SharePoint Online application for these two events.</P> <P> </P> <P><STRONG>Step 4: Assign an Identity and Role for the Azure Function</STRONG></P> <P> </P> <P>The Azure function has a call to Connect-AzAccount, which requires that the function app uses a System-assigned identity. (User-assigned identities can also be configured, however for simplicity this example uses a System-assigned identity.) Further, the identity in question needs access to resources in the subscription in order to add tags and to delete VMs. To configure this, click on the Function App, then Identity. Change the Status to “On”. </P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_18-1615913793433.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264432iEACFF1531B2A335E/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_18-1615913793433.png" alt="Sagar_Lankala_18-1615913793433.png" /></span></P> <P> </P> <P>Next, Click on “Azure role assignments” to configure role-based access control for this Function App. In this example, Contributor role is assigned for the entire Azure subscription. While it’s possible to configure more fine-grained access to the Identity, this example in order to keeps things simple.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_19-1615913821861.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264433iD1200866F8C407DE/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_19-1615913821861.png" alt="Sagar_Lankala_19-1615913821861.png" /></span></P> <P> </P> <P>The resultant role assignment should look like this:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_20-1615913843791.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264434iD67D84695E111C29/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_20-1615913843791.png" alt="Sagar_Lankala_20-1615913843791.png" /></span></P> <P> </P> <P><STRONG>Step 5: Create an Event Subscription for the Function App</STRONG></P> <P> </P> <P>At this point we have logic ready to handle the DevTestLabs events, but the Function App is not configured to subscribe to those events. Azure Event Grid is infrastructure for mapping Azure events to logic and can be used to create rich applications. To get deeper into Azure Event Grid, please check out <A href="https://docs.microsoft.com/en-us/azure/event-grid/overview" target="_blank" rel="noopener">Azure Event Grid Overview</A>.</P> <P>Navigate to the subscription, then click Events. Under “Get Started”, click on “Azure Function”:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_21-1615913869342.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264435i85DEC63D32A4187F/image-size/medium?v=v2&px=400" role="button" title="Sagar_Lankala_21-1615913869342.png" alt="Sagar_Lankala_21-1615913869342.png" /></span></P> <P> </P> <P>Enter “DTLEventSub” as the name. Use “ClaimUnclaimVM” for the System Topic Name. For Endpoint Type select “Azure Function” with Endpoint “FnDTLClaimUnclaim”.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_22-1615913902855.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264436i42FA487A8A2B0F61/image-size/medium?v=v2&px=400" role="button" title="Sagar_Lankala_22-1615913902855.png" alt="Sagar_Lankala_22-1615913902855.png" /></span></P> <P> </P> <P>Hit Create. This will create the ClaimUnclaimVM Topic and the Event Subscription.</P> <P> </P> <P><STRONG>Step 6: Test the Claim functionality</STRONG></P> <P> </P> <P>Navigate to the DevTest Lab in your subscription, “PetesDTL” in this example, and click “+ Add” to create a new VM. The type of VM you choose is not relevant for this example – you can select the operating system and resources that are appropriate for your application. In this example the VM is named “petesvm001”. </P> <P>In “Advanced Settings”, select “Yes” for “Make this machine claimable” under “Claim options”, then in “Basic Settings” click “Create”. The reason is that we expect to Claim the VM through the UI to trigger the tagging behavior. Later, when we Unclaim the VM, we will expect to see the VM being deleted.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_26-1615914079102.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264440i5CBD3181F30BF22C/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_26-1615914079102.png" alt="Sagar_Lankala_26-1615914079102.png" /></span></P> <P> </P> <P>After the VM is created (this may take several minutes, perhaps tens of minutes, to complete) it should show in the “Claimable virtual machines” section of the DevTest Labs UI:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_25-1615914033001.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264439i82B28E8C950B2806/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_25-1615914033001.png" alt="Sagar_Lankala_25-1615914033001.png" /></span></P> <P> </P> <P>Note that this VM does not have an “Owner” tag yet, since it has not yet been claimed:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_24-1615914016828.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264438iC8791D649CECEE07/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_24-1615914016828.png" alt="Sagar_Lankala_24-1615914016828.png" /></span></P> <P><STRONG> </STRONG></P> <P>Now, click the ellipsis (…) on the VM in the Claimable virtual machines, and select “Claim”. This operation will also take several tens of minutes before the VM is successfully claimed and the Azure event has made its way through the Event Grid infrastructure and called our Azure Function. You can monitor when your Function has been called by selecting the Function in the Function App UI and seeing Total and Successful Execution Count in the Overview section:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_23-1615913992716.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264437iD5AB4F190B7F02D5/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_23-1615913992716.png" alt="Sagar_Lankala_23-1615913992716.png" /></span></P> <P> </P> <P>You can also see what the Azure Function logs in near real-time by using the “Code + Test” UI and opening the Logs popup at the bottom:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_27-1615914114419.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264441i15CD0666D69AAF45/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_27-1615914114419.png" alt="Sagar_Lankala_27-1615914114419.png" /></span></P> <P> </P> <P>After several minutes, the Function is called, and the ApplyOwnerTag PowerShell function adds the current user’s name in the Owner tag, as expected:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_28-1615914135842.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264443i2D857FC55D6C0EB9/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_28-1615914135842.png" alt="Sagar_Lankala_28-1615914135842.png" /></span></P> <P> </P> <P>Now navigate to “My virtual machines” in the DevTest Labs UI, click the ellipsis (…) and select “Unclaim”:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_29-1615914157921.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264444i609FE37C7ECF3AC3/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_29-1615914157921.png" alt="Sagar_Lankala_29-1615914157921.png" /></span></P> <P> </P> <P>Once again, it will take several minutes for the event to make its way through Azure to call FnDTLClaimUnclaim, but when it does the Remove-AzResource call will ensure the VM gets deleted:</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_30-1615914175826.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/264445i4829C43F36BD6A6C/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_30-1615914175826.png" alt="Sagar_Lankala_30-1615914175826.png" /></span></P> <P> </P> <P><SPAN>This completes the full Claim/Unclaim cycle that a SharePoint Online user would experience and demonstrates the two features built on top of DevTest Labs.</SPAN></P> <P> </P> <P><SPAN><STRONG>Some Notes on Performance</STRONG></SPAN></P> <P> </P> <P>The Azure Function App used in this example uses the <A href="https://microsoft.com/powershell" target="_blank" rel="noopener">PowerShell Core</A> runtime. PowerShell was chosen for its strength as a simple control language for Azure, and its amenability to concise code samples. However, there is overhead to the boot time and resource consumption for PowerShell-based Function Apps over, say, C#-based Apps that should not be overlooked for performance-sensitive applications.</P> <P> </P> <P>Eventing in Azure has its own set of performance characteristics, and you will notice with these samples delays of minutes and sometimes up to tens of minutes for events to fire and be handled by the Function App. This can be improved somewhat by upgrading from a Consumption Plan to an Dedicated App Service Plan, but one should bear in mind that there is always inherent and unavoidable latency due to the Azure’s eventing model, and this should be accounted for in the design of the Azure application.</P> <P> </P> <P><FONT size="4"><STRONG>What's Next?</STRONG></FONT></P> <P> </P> <P>The next blog post will describe how the SharePoint team built an Azure VPN that complements the DevTest Lab, securing the connection between lab users and the VMs they connect to. If you are interested in securing your environment, this is not one you will want to miss!</P> <P>If you run into any problems with the content, or have any questions, please feel free to drop a comment below this post and we will respond. Your feedback is always welcome.</P> <P> </P> <P><STRONG>- Pete Harwood</STRONG>, Principal Engineering Manager, OneDrive and SharePoint Engineering Fundamentals at Microsoft</P> <P> </P> <P> </P></description> <pubDate>Tue, 16 Mar 2021 21:23:59 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-enabling-an-event-driven-architecture-with/ba-p/2214548</guid> <dc:creator>Sagar_Lankala</dc:creator> <dc:date>2021-03-16T21:23:59Z</dc:date> ... </item> <item> <title>Build new skills in 30 days</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-new-skills-in-30-days/ba-p/2197517</link> <description><P>Today, we are excited to share <A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A>, a guided, time-bound, personal learning challenge, built upon the Microsoft Learn interactive training platform. And as you learn, the new program helps you work towards certification – by completing a learning collection within the 30 days, you can earn a voucher once every six months for 50% off the cost of a Microsoft Certification exam.*</P> <P> </P> <P>At Microsoft, our goal is to help make technical learning accessible to anyone who wants to acquire a new skill, chase a new career path, and stay up to date on the latest technological advances.</P> <P> </P> <P>Technology continues to accelerate and change the world around us – requiring people and businesses to quickly innovate and adapt to the latest skills needed to thrive as a company and as an individual. To stay current, access to technical learning resources is critical. Last year we made <A href="https://blogs.microsoft.com/blog/2020/06/30/microsoft-launches-initiative-to-help-25-million-people-worldwide-acquire-the-digital-skills-needed-in-a-covid-19-economy/" target="_self">a big bet on learning with our Global Skilling Initiative</A>, aimed at helping 25 million people worldwide acquire critical new digital skills with free access to learning paths and content, and low-cost certifications to help people develop the skills new positions require.</P> <P> </P> <P><A title="30 Days to Learn It" href="https://developer.microsoft.com/offers/30-days-to-learn-it" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="30 Days to Learn It banner for blog.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262585iC7DD1D3EA2DEAC38/image-size/large?v=v2&px=999" role="button" title="30 Days to Learn It banner for blog.png" alt="30 Days to Learn It banner for blog.png" /></span></A></P> <P> </P> <P><STRONG>30 Days of Learning </STRONG></P> <P> </P> <P><A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A> accelerates your time to mastery of in-demand technical skills with a commitment of less than an hour each day for a month. Each learning journey introduces new technical skills and concepts using Microsoft Learn’s step-by-step tutorials, browser-based interactive coding and scripting environments, and task-based achievements. From the day you sign up, you have a month-long journey with a personal project tracker to visualize your progress through the learning content.</P> <P> </P> <P>Today, the program launches with eight different journeys to help you gain cloud development skills using Microsoft technologies. Topics covered include AI, DevOps, cloud-native apps, serverless applications, low code, Internet of Things (IoT), machine learning (ML), and compute infrastructure. Each learning journey is designed to also provide a foundation to help you prepare for the certification exam of your preferred learning journey. A Microsoft Certification provides an industry-recognized validation of your skills and can help advance your career.</P> <P> </P> <P style="text-align: center;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog Post 2.png" style="width: 883px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/262276i86653BA755911811/image-size/large?v=v2&px=999" role="button" title="Blog Post 2.png" alt="Blog Post 2.png" /></span></P> <P style="font-size: .65em;"><SUP>1 </SUP>Source: IDC White Paper, sponsored by Microsoft, Benefits of Role-Based Certifications (June 2020) </P> <P style="font-size: .65em;"><SUP>2 </SUP>Source: Nigel Frank Microsoft Azure Salary Survey (June 2020)</P> <P> </P> <P><STRONG>Okay – Start Learning! </STRONG></P> <P> </P> <P><A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A> offers the flexibility of completing a learning journey within 30 days from the time you sign up, at your own pace, and provides the added opportunity to earn a discount voucher for a Microsoft Certification exam if you complete your learning modules in the 30-day period*.</P> <P> </P> <P>This program is now available worldwide in 17 languages, and is currently <A href="https://developer.microsoft.com/offers/30-days-to-learn-it/official-rules#terms-and-conditions" target="_blank" rel="noopener">running through the end of June 2021</A>.</P> <P> </P> <P>Register for <A href="https://developer.microsoft.com/offers/30-days-to-learn-it?ocid=AID3028423_PersonalCSC_Corp_HQ_Blog" target="_blank" rel="noopener">30 Days to Learn It</A> and start your learning journey today!</P> <P> </P> <P style="font-size: .8em;">* <A href=""https://developer.microsoft.com/offers/30-days-to-learn-it/official-rules#terms-and-conditions" target="_blank" rel="noopener">Terms & conditions</A> apply: one (1) voucher per person every six months</P> <P style="font-size: .8em;"> </P></description> <pubDate>Thu, 11 Mar 2021 18:44:53 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/build-new-skills-in-30-days/ba-p/2197517</guid> <dc:creator>Cliff_Simpkins</dc:creator> <dc:date>2021-03-11T18:44:53Z</dc:date> ... </item> <item> <title>Deliver Java Apps Quickly using Custom Connectors in Power Apps</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deliver-java-apps-quickly-using-custom-connectors-in-power-apps/ba-p/2176592</link> <description><P><STRONG><SPAN data-contrast="none">Overview</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution. LCAD on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">This month’s webinar is ‘</SPAN><SPAN data-contrast="auto">Deliver Java Apps Quickly using Custom Connectors in Power Apps’</SPAN><SPAN data-contrast="none"> In this blog I will briefly </SPAN><SPAN data-contrast="none">recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">how the app was built with Java on Azure, app deployment, and building the app’s front end and UI with Power Apps.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">What is Low-code application development </SPAN></STRONG><STRONG><SPAN data-contrast="none">on</SPAN></STRONG><STRONG><SPAN data-contrast="none"> Azure</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory. That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none"> However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low. In the past that would require another heavy lift by the development team to rework their previous application iteration. Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector. Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. To learn </SPAN><SPAN data-contrast="none">more,</SPAN><SPAN data-contrast="none"> visit the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD</SPAN><SPAN data-contrast="none"> on Azure page</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">and to walk through the</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">a</SPAN><SPAN data-contrast="none">forementioned </SPAN><SPAN data-contrast="none">scenario</SPAN><SPAN data-contrast="none"> try the </SPAN><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure guided tour</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="none">Java on Azure Code</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="none">In this webinar the sample application will be a Spring Boot application, or a Spring application on Azure, </SPAN><SPAN data-contrast="none">that is </SPAN><SPAN data-contrast="none">generated </SPAN><SPAN data-contrast="none">using </SPAN><SPAN data-contrast="none">JHipster</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">and will </SPAN><SPAN data-contrast="none">deploy the app </SPAN><SPAN data-contrast="none">with </SPAN><SPAN data-contrast="none">Azure App</SPAN><SPAN data-contrast="none"> service. The app’s purpose is </SPAN><SPAN data-contrast="none">to catalog products, product descriptions, </SPAN><SPAN data-contrast="none">ratings and image links</SPAN><SPAN data-contrast="none">, in a monolithic app. </SPAN><SPAN data-contrast="none">To learn how to build serverless PowerApps</SPAN><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="none"> please refer to last month’s </SPAN><A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-deep-dive-into-serverless-applications-on-power-apps-and-azure/ba-p/2113430" target="_blank" rel="noopener"><SPAN data-contrast="none">Serverless Low-code application development on Azure</SPAN></A><SPAN data-contrast="auto"> blog for details. </SPAN><SPAN data-contrast="auto">During the development of the </SPAN><SPAN data-contrast="auto">API</SPAN><SPAN data-contrast="auto"> Sandra used H2SQL and in production she used MySQL. </SPAN><SPAN data-contrast="auto">She then add</SPAN><SPAN data-contrast="auto">s</SPAN><SPAN data-contrast="auto"> descriptions, ratings, and image links to the </SPAN><SPAN data-contrast="auto">API</SPAN><SPAN data-contrast="auto"> in </SPAN><SPAN data-contrast="auto">a</SPAN><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">JDS studio. </SPAN><SPAN data-contrast="auto">Lastly, she applies the API to her GitHub repository</SPAN><SPAN data-contrast="auto"> prior to deploying to Azure App service. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Deploying</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> the</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><STRONG><SPAN data-contrast="auto">S</SPAN></STRONG><STRONG><SPAN data-contrast="auto">ample </SPAN></STRONG><STRONG><SPAN data-contrast="auto">A</SPAN></STRONG><STRONG><SPAN data-contrast="auto">pp</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">Sandra leverages the Maven plug-in in JHipste</SPAN><SPAN data-contrast="auto">r</SPAN><SPAN data-contrast="auto"> to deploy the app to Azure App service. </SPAN><SPAN data-contrast="auto">A</SPAN><SPAN data-contrast="auto">fter providing an A</SPAN><SPAN data-contrast="auto">zure resource group name </SPAN><SPAN data-contrast="auto">due to her choice of ‘split and deploy’ in GitHub Actions </SPAN><SPAN data-contrast="auto">she only manually deploy</SPAN><SPAN data-contrast="auto">s</SPAN><SPAN data-contrast="auto"> once, and a</SPAN><SPAN data-contrast="auto">ny new Git push from her master branch will be automatically deployed. </SPAN><SPAN data-contrast="auto">Once the app is successfully deployed it is available at myhispter.azurewebsites.net/V2APIdocs, where she copies the </SPAN><SPAN data-contrast="auto">Swagger API file into a JSON, which will be imported </SPAN><SPAN data-contrast="auto">into</SPAN><SPAN data-contrast="auto"> Power Apps as a custom connector.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Front-end </SPAN></STRONG><STRONG><SPAN data-contrast="auto">D</SPAN></STRONG><STRONG><SPAN data-contrast="auto">evelopment</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">The goal of the front-end development is to build a user interface that end users will be satisfied with, to </SPAN><SPAN data-contrast="auto">do so the JSON must be brought into Power Apps as a custom connect</SPAN><SPAN data-contrast="auto">or so end users can access the API. The first step is clearly to import the open API into Power Apps, note that much of this process has been streamlined via the tight integration</SPAN><SPAN data-contrast="auto"> of Azure API management with Power Apps. To learn more about this tighter integration </SPAN><SPAN data-contrast="auto">watch a </SPAN><A href="https://www.youtube.com/watch?v=06CRN18kH1k&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=6" target="_blank" rel="noopener"><SPAN data-contrast="none">demo on integrating APIs via API management into Power Apps</SPAN><SPAN data-contrast="none">.</SPAN></A><SPAN data-contrast="auto"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">After importing the API, you </SPAN><SPAN data-contrast="auto">must</SPAN><SPAN data-contrast="auto"> create a custom connector,</SPAN><SPAN data-contrast="auto"> and connect that custom connector with the Open API the backend developer built. </SPAN><SPAN data-contrast="auto">After creating the custom connector Dawid used Power Apps logic formula language to collect data into a dataset, creating gallery display via the collected data. Lastly, Dawid will show you the data in a finalized application a</SPAN><SPAN data-contrast="auto">nd walk you through the process of sharing the app with a colleague or making them a co-owner. Lastly, once the app is shared, Dawid walks you through testing the app and soliciting user feedback via the app.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Conclusion</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-contrast="auto">To conclude, professional developers can rapidly build the back and front ends of the application using Java, or any programming language with Power Apps. Fusion development teams, professional developers and citizen developers, can collaborate on apps together, reducing much of the lift for professional developers. Please watch the </SPAN><A href="https://info.microsoft.com/ww-Landing-DeliverJavaAppsQuicklyUsingCustomConnectors.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">webinar</SPAN></A><SPAN data-contrast="auto"> and </SPAN><SPAN data-contrast="auto">complete the </SPAN><A href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbRzDZlq55wCpLjWQ_IU7xv-VURVRFQUdPSTJVTjBOR0RWM0U1VFFSM1pYUS4u" target="_blank" rel="noopener"><SPAN data-contrast="none">survey</SPAN></A><SPAN data-contrast="auto"> </SPAN><SPAN data-contrast="auto">so,</SPAN><SPAN data-contrast="auto"> we can improve these blogs and webinars in the future.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Resources</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="6" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Webinar</SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="6" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://info.microsoft.com/ww-Landing-DeliverJavaAppsQuicklyUsingCustomConnectors.html?LCID=EN-US" target="_blank" rel="noopener"><SPAN data-contrast="none">Deliver Java Apps Quickly</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Low-code application development </SPAN></STRONG><STRONG><SPAN data-contrast="auto">on</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> Azure </SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="2"><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low Code Application Development</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="2"><A href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code app dev guided tour</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Java on Azure resources </SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://azure.microsoft.com/en-us/develop/java/" target="_blank" rel="noopener"><SPAN data-contrast="none">Java on Azure</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/java-on-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Java on Azure - Learn</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/publish-azure-web-app-with-azure-toolkit-eclipse/" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop Java web app on Azure using Eclipse - Learn </SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="4" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/publish-web-app-with-maven-plugin-for-azure-app-service/" target="_blank" rel="noopener"><SPAN data-contrast="none">Develop Java web app on Azure using Maven - Learn </SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="5" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/deploy-java-containers/" target="_blank" rel="noopener"><SPAN data-contrast="none">Automate Java container deployments with Azure Pipelines - Learn </SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/modules/azure-spring-cloud-workshop/" target="_blank" rel="noopener"><SPAN data-contrast="none">Deploy Spring microservices to Azure - Learn</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="-" data-font="Calibri" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><STRONG><SPAN data-contrast="auto">Power Apps resources</SPAN></STRONG><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="2" data-aria-level="2"><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure plus Power Apps for pro developers</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="3" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/intro-developing-power-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Introduction to developing with Power Platform</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="4" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/use-power-apps-component-framework/" target="_blank" rel="noopener"><SPAN data-contrast="none">Create components with Power Apps Component Framework</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL> <UL> <LI data-leveltext="o" data-font="Courier New" data-listid="5" aria-setsize="-1" data-aria-posinset="1" data-aria-level="2"><A href="https://docs.microsoft.com/en-us/learn/paths/get-started-cds/" target="_blank" rel="noopener"><SPAN data-contrast="none">Get started using Microsoft Dataverse</SPAN></A><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></LI> </UL></description> <pubDate>Fri, 26 Mar 2021 01:01:09 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/deliver-java-apps-quickly-using-custom-connectors-in-power-apps/ba-p/2176592</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-03-26T01:01:09Z</dc:date> ... </item> <item> <title>Announcing Logic Apps Public Preview Refresh</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/announcing-logic-apps-public-preview-refresh/ba-p/2180994</link> <description><DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> <P>We <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-logic-apps-runtime-performance-and-developer-improvements/ba-p/1645335" target="_blank" rel="noopener">announced</A> the public preview of Logic Apps' new runtime, performance and developer improvements in September 2020, and first <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-s-new-in-logic-apps/ba-p/1969149" target="_blank" rel="noopener">public preview refresh</A> in December 2020. Today, we are happy to announce another major update that continue to extend the capability of Logic Apps. You can find the highlights about this release below.</P> <P> </P> <P><STRONG>Quality focused</STRONG></P> <P>We have received tremendous amount of interests from customers in healthcare, insurance, retail and other industries on the new runtime. As the team gears up towards general availability of the new runtime, the top focus of this public preview refresh is quality. The team spent significant amount of time on bug fix, reliability, and supportability improvements, so that you can feel confident using the new runtime for production workload at general availability.</P> <P> </P> <P><STRONG>Cross-platform compatibility</STRONG></P> <P>Inline Code action allows customers to write simple JavaScript code from right within the workflow designer with the ability to reference outputs from previous actions. In this release, Inline Code action is now supported not only on Windows, but also on macOS and Linux. </P> <P> </P> <P><STRONG>Developer productivity</STRONG></P> <P>With the new runtime, customers can author workflows using the visual designer locally from <A href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps" target="_self">VS Code</A>. In this release, we’ve made it even more streamlined by removing designer’s storage dependency. This means you are no longer required to have storage emulator or connection to storage account in Azure to use the visual designer in VS Code.</P> <P> </P> <P>Other improvements to VS Code extension includes the ability to configure webhook hostname so that the callback request can be routed to localhost during testing, and the ability to switch from extension bundle to NuGet-based local project.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screen Shot 2021-03-02 at 11.59.15 PM.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/260428i04DB83552F2401F5/image-size/medium?v=v2&px=400" role="button" title="Screen Shot 2021-03-02 at 11.59.15 PM.png" alt="Screen Shot 2021-03-02 at 11.59.15 PM.png" /></span></P> <P> </P> <P><STRONG>Designer and portal improvements</STRONG></P> <P>New designer features in this release allow you to create parallel branches, drag-and-drop to rearrange actions, and easily delete unwanted actions via right-click menu.</P> <P> </P> <P>In Azure portal, the resource browse experience is combined to show both the multi-tenant/consumption Logic Apps, as well as the single-tenant Logic Apps on Functions runtime. Trigger history page is added to allow easy debugging when the workflow isn’t being triggered as expected.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screen Shot 2021-03-03 at 12.01.02 AM.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/260429i112C2B7DF001C403/image-size/medium?v=v2&px=400" role="button" title="Screen Shot 2021-03-03 at 12.01.02 AM.png" alt="Screen Shot 2021-03-03 at 12.01.02 AM.png" /></span></P> <P> </P> <P><STRONG>Accessibility</STRONG></P> <P>Microsoft is <A href="https://www.microsoft.com/accessibility" target="_self">committed</A> to revolutionizing access to technology for people living with disabilities, and us from the Logic Apps team believe in developing technologies that enable everyone to easily build workflows and integration solutions. In this release, we added keyboard navigation shortcuts to allow intuitive navigation of the graph between actions.</P> <P> </P> <P><STRONG>Learn more</STRONG></P> <P data-unlink="true">Please check out <A href="https://docs.microsoft.com/azure/logic-apps/logic-apps-overview-preview" target="_self">documentations</A> on the new runtime, and tune in to the upcoming <A href="https://www.youtube.com/watch?v=mJo-Lr5rZc0" target="_self">Logic Apps Live</A>, scheduled to premiere on March 4th, 2021 at 9AM pacific time, during which the team will cover the release in more details.</P> <P data-unlink="true"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Screen Shot 2021-03-01 at 11.28.15 PM.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/260427i0E39E65AC02B1F64/image-size/medium?v=v2&px=400" role="button" title="Screen Shot 2021-03-01 at 11.28.15 PM.png" alt="Screen Shot 2021-03-01 at 11.28.15 PM.png" /></span></P> <P> </P> <P><SPAN>To get started, download the </SPAN><A href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps" target="_self" rel="noopener noreferrer">VS Code extension</A><SPAN> and create a local project, or create a new resource from the </SPAN><A href="https://portal.azure.com/" target="_self" rel="nofollow noopener noreferrer">Azure Portal</A><SPAN>. You can submit your feedback </SPAN><A href="http://aka.ms/lafeedback" target="_self" rel="noopener noreferrer">here</A><SPAN>.</SPAN></P> <P> </P> <P> </P> <P><SPAN>Derek, on behalf of the Logic Apps team</SPAN></P> </DIV></description> <pubDate>Fri, 05 Mar 2021 00:00:37 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/announcing-logic-apps-public-preview-refresh/ba-p/2180994</guid> <dc:creator>derek1ee</dc:creator> <dc:date>2021-03-05T00:00:37Z</dc:date> ... </item> <item> <title>Introducing Microsoft Power Fx: the low-code programming language</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-microsoft-power-fx-the-low-code-programming-language/ba-p/2169705</link> <description><P><SPAN data-contrast="auto">Today the Power Platform introduces its </SPAN><SPAN data-contrast="auto">formula language for low-code</SPAN><SPAN data-contrast="auto">, </SPAN><SPAN data-contrast="auto">Microsoft Power Fx</SPAN><SPAN data-contrast="auto">. This language originates from </SPAN><SPAN data-contrast="auto">Microsoft Excel and</SPAN><SPAN data-contrast="auto"> is already the foundation of the </SPAN><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Microsoft Power Apps</SPAN></A><SPAN data-contrast="auto"> canvas. You may </SPAN><SPAN data-contrast="auto">wonder</SPAN><SPAN data-contrast="auto">, why does a low-code platform need a programming language? </SPAN><SPAN data-contrast="none">The truth is, point-and-click tools are great for quickly assembling experiences and workflows, but many apps need a layer of logic that goes beyond what is practical to drag and drop</SPAN><SPAN data-contrast="none">, for example:</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><I><SPAN data-contrast="none">Show a list of customers who signed up in the last 7 days within 15 miles of this location. </SPAN></I><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><I><SPAN data-contrast="none">Highlight the newest entries in green. </SPAN></I><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><I><SPAN data-contrast="none">When a user clicks for more details, if the record has outstanding action items associated with it, pop those to the top of the screen.</SPAN></I><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335559739":160,"335559740":259,"469777462":[720],"469777927":[0],"469777928":[1]}"> </SPAN></LI> </UL> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614365930920.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/258488i54F16EFBD10B8E65/image-size/medium?v=v2&px=400" role="button" title="riduncan_0-1614365930920.png" alt="riduncan_0-1614365930920.png" /></span></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559731":720,"335559739":160,"335559740":259}"> </SPAN><SPAN data-contrast="auto">C</SPAN><SPAN data-contrast="auto">ustom logic traditionally needed to solve such problems is where low-code platforms have “hit a cliff” </SPAN><SPAN data-contrast="auto">requiring </SPAN><SPAN data-contrast="none">traditional </SPAN><SPAN data-contrast="none">code, whe</SPAN><SPAN data-contrast="none">re</SPAN><SPAN data-contrast="none"> the </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development on Azure</SPAN></A><SPAN data-contrast="none"> solution has stepped in</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-contrast="none">Power Fx </SPAN><SPAN data-contrast="none">enables 200+ million people globally who </SPAN><SPAN data-contrast="none">build</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">with </SPAN><SPAN data-contrast="none">Microsoft Excel </SPAN><SPAN data-contrast="none">syntax</SPAN><SPAN data-contrast="none"> to build custom logi</SPAN><SPAN data-contrast="none">c</SPAN><SPAN data-contrast="none">, reducing much of the “cliff</SPAN><SPAN data-contrast="none">”</SPAN><SPAN data-contrast="none">.</SPAN><SPAN data-contrast="none"> However, this </SPAN><SPAN data-contrast="none">does not</SPAN><SPAN data-contrast="none"> reduce the integration capabilities of Azure and Power </SPAN><SPAN data-contrast="none">Apps but</SPAN><SPAN data-contrast="none"> enhances them</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Developers will cut their development time and cost by using Power Fx where the complexities of async coding are taken care of, </SPAN><SPAN data-contrast="auto">Dataverse, Power Apps’ underlying data platform, e</SPAN><SPAN data-contrast="auto">ntities and data types are first class objects, and guard rails prevent run away code and other common pitfalls. </SPAN><SPAN data-contrast="auto">Additionally, developers can </SPAN><SPAN data-contrast="auto">use </SPAN><SPAN data-contrast="auto">Power Fx with </SPAN><SPAN data-contrast="auto">tools they are already familiar with such as </SPAN><SPAN data-contrast="auto">VS (Visual Studio)</SPAN><SPAN data-contrast="auto"> Code, GitHub, Azure DevOps, and their own build scripts and tools. </SPAN><SPAN data-contrast="auto">Power Fx w</SPAN><SPAN data-contrast="auto">orks with “pro-code” components created in JavaScript, C#, or other professional languages.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Read the entire Power Fx announcement </SPAN><A href="https://powerapps.microsoft.com/en-us/blog/what-is-microsoft-power-fx/" target="_blank">here.</A></P></description> <pubDate>Fri, 05 Mar 2021 00:00:42 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/introducing-microsoft-power-fx-the-low-code-programming-language/ba-p/2169705</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-03-05T00:00:42Z</dc:date> ... </item> <item> <title>Plan your Microsoft Azure experience at Microsoft Ignite</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite/ba-p/2156674</link> <description><P>Microsoft Ignite, our free digital event, starts next week and runs from March 2-4, 2021. We thought you might be interested to learn ways you can plan to experience the power of <SPAN data-contrast="none">Microsoft </SPAN><SPAN data-contrast="none">Azure and connect with your worldwide data, infrastructure, applications, and hybrid communities like never before. Attendees will learn about new innovations, speak with Microsoft experts from around the globe</SPAN><SPAN data-contrast="none">, and </SPAN><SPAN data-contrast="none">continue your technical </SPAN><SPAN data-contrast="none">learning</SPAN><SPAN data-contrast="none"> journey</SPAN><SPAN data-contrast="none">. </SPAN></P> <P> </P> <P><A href="https://register.ignite.microsoft.com/" target="_blank" rel="noopener"><SPAN data-contrast="none">Register</SPAN></A><SPAN data-contrast="none"> to gain full access to all Microsoft Ignite has to offer–it’s easy and at no-cost to you.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="none">Create the perfect event schedule</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN> <BR /></SPAN><SPAN data-contrast="none">Explore the session catalog </SPAN><SPAN data-contrast="none">to</SPAN><SPAN data-contrast="none"> find expert speakers, </SPAN><SPAN data-contrast="none">interactive sessions</SPAN><SPAN data-contrast="none">, and more. </SPAN><SPAN data-contrast="none">After registering, </SPAN><SPAN data-contrast="none">get </SPAN><SPAN data-contrast="none">s</SPAN><SPAN data-contrast="none">tart</SPAN><SPAN data-contrast="none">ed on</SPAN><SPAN data-contrast="none"> your journey at </SPAN><A href="https://myignite.microsoft.com/sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">myignite.microsoft.co</SPAN><SPAN data-contrast="none">m/sessions</SPAN></A><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Below are </SPAN><SPAN data-contrast="none">seven featured </SPAN><SPAN data-contrast="none">session</SPAN><SPAN data-contrast="none">s </SPAN><SPAN data-contrast="none">on Microsoft Azure </SPAN><SPAN data-contrast="none">you can’t miss:</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/44be5449-eec6-4d63-8732-716147341d56?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS174: Go Limitless: with Azure Data & </SPAN><SPAN data-contrast="none">AI</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/9a68aef7-867e-441d-87bd-598923d7c5fc?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS175: Empowering every developer to innovate with Microsoft Azure</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/1b57402f-1284-422f-b45d-010a8d0eef4a?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS176: Innovate across Hybrid and Multicloud with Azure Arc</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/8c615c6a-64ef-4c40-8ede-7eed49bc92bc?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS177: Latest Azure innovation for Windows Server and SQL Server</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/48e213fc-37e7-4203-b507-59c0cb74b876?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS178: Introducing the future of mixed reality</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="6" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/80b8f59f-7b3b-41a1-ae79-7884e5eca5ba?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS179: New innovations to bring AI to the edge</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> <LI data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><A href="https://myignite.microsoft.com/sessions/df53b87d-ef87-45ec-b4e4-11f29f7fa755?source=sessions" target="_blank" rel="noopener"><SPAN data-contrast="none">FS180: What's new with Microsoft Azure infrastructure</SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></LI> </UL> <P><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><STRONG>Follow #MSIgnite </STRONG></P> <P><SPAN data-contrast="none">Explore the latest event news, trending topics, and share your point of view in real time</SPAN><SPAN data-contrast="none"> with </SPAN><SPAN data-contrast="none">your</SPAN><SPAN data-contrast="none"> communit</SPAN><SPAN data-contrast="none">y</SPAN><SPAN data-contrast="none">.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">Join us on Twitter and LinkedIn by using </SPAN><SPAN data-contrast="none">#MSIgnite.</SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":0,"335559740":240}"> </SPAN></P> <P><A href="https://twitter.com/MS_Ignite" target="_blank" rel="noopener"><SPAN data-contrast="none">Join today ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>Connection Zone </STRONG></P> <P><SPAN data-contrast="none">Only at #MSIgnite will you meet the engineers and partners who build and maintain our tools and get the answers to your toughest technical questions. Register for an Ask the Expert session at #MSIgnite. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://myignite.microsoft.com/community-connect" target="_blank" rel="noopener"><SPAN data-contrast="none">Connect today ></SPAN></A><STRONG><SPAN data-contrast="auto"> </SPAN></STRONG><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>Learning Zone </STRONG></P> <P><SPAN data-contrast="none">The Learning Zone is the center for training, development, and certification with Microsoft. Whatever your style of learning happens to be, </SPAN><SPAN data-contrast="none">you can find content and interactive opportunities to boost and diversify your </SPAN><SPAN data-contrast="none">cloud skills</SPAN><SPAN data-contrast="none">. </SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://myignite.microsoft.com/learning-zone" target="_blank" rel="noopener"><SPAN data-contrast="none">Explore today ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>One-on-one consultation </STRONG></P> <P><SPAN data-contrast="none">Schedule your 45-minute, one-on-one consultation with </SPAN><SPAN data-contrast="none">Microsoft </SPAN><SPAN data-contrast="none">Azure </SPAN><SPAN data-contrast="none">experts in </SPAN><SPAN data-contrast="none">infrastructure, data </SPAN><SPAN data-contrast="none">and </SPAN><SPAN data-contrast="none">AI, and application</SPAN><SPAN data-contrast="none"> development.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://myignite.microsoft.com/app-consult" target="_blank" rel="noopener"><SPAN data-contrast="none">Schedule today ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P> </P> <P><STRONG>Continue your learning journey </STRONG></P> <P><SPAN data-contrast="none">Find your way to deeper content, training options, communities</SPAN><SPAN data-contrast="none">,</SPAN><SPAN data-contrast="none"> and certification details across all Microsoft cloud solutions from one place.</SPAN><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P> <P><A href="https://aka.ms/learnatignite" target="_blank" rel="noopener"><SPAN data-contrast="none">Start exploring ></SPAN></A><SPAN data-ccp-props="{"134233117":true,"134233118":true,"201341983":0,"335559740":240}"> </SPAN></P></description> <pubDate>Wed, 24 Feb 2021 18:32:26 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/plan-your-microsoft-azure-experience-at-microsoft-ignite/ba-p/2156674</guid> <dc:creator>Mark Winters</dc:creator> <dc:date>2021-02-24T18:32:26Z</dc:date> ... </item> <item> <title>The Azure Security Architect Map</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091</link> <description><P>Hi,</P> <P> </P> <P>Recently, I built the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Solution-Architect-Map/ba-p/689700" target="_self">Azure <STRONG>Solution</STRONG> Architect Map</A> aimed at helping Architects finding their way in Azure. Given the unexpected success and the very positive feedback I received, I decided to come up with other maps, namely the Azure <STRONG>Security </STRONG>Architect Map, the Azure <STRONG>Infrastructure</STRONG> Architect Map and the Azure <STRONG>Application</STRONG> Architect Map.</P> <P> </P> <P>Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><STRONG><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></STRONG> - This map</LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P><BR />The purpose of the Solution Architect map is to give a high-level view and quick insights about what is available and how to choose between the different services according to some functional needs. <BR />It covers a few key areas, mostly about putting in place the foundations of an Azure Platform, and cannot go into the details because this would make the map very indigestible.</P> <P> </P> <P>Today I come with the Azure Security Architect Map:</P> <P> </P> <P><A href="https://stephaneeyskens.files.wordpress.com/2019/12/securitymap.png" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="map.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/162829iB5D0F42F300842C8/image-size/large?v=v2&px=999" role="button" title="securitymap.png" alt="securitymap.png" /></span></A></P> <P> </P> <P>which focuses on security only and goes much deeper into that key area. It is by no means the holy grail but it should help you take informed decisions on how you plan to use and deploy services and how you will govern your Azure workloads. I bring business drivers such as TTM, cost optimization and true elasticity into the equation to highlight the consequences of choosing an option over another.</P> <P> </P> <P>The map focuses on the following areas:</P> <UL> <LI>Network Layer</LI> <LI>Identity Layer</LI> <LI>Application Service Layer</LI> <LI>Application Data</LI> <LI>Security Posture</LI> <LI>Keys, Certificates and Secrets Management as well as Encryption capabilities</LI> <LI>MDM & MAM</LI> </UL> <P><STRONG><FONT size="3">How to read this map?</FONT></STRONG></P> <P> </P> <P>Whenever you see the attachment icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="attachicon.png" style="width: 22px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120128i004B5A4431671EB0/image-size/large?v=v2&px=999" role="button" title="attachicon.png" alt="attachicon.png" /></span>, it means that I have attached an explanation on a given rationale or service. If you see a (*) next to a node, it is kind of a must read information. So for instance, in the following screenshot:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="vnet.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120129i449A2BE58FE83622/image-size/large?v=v2&px=999" role="button" title="vnet.png" alt="vnet.png" /></span></P> <P> </P> <P>I want to catch your attention on the following:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="attention.png" style="width: 458px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120315iAF01654DFE885992/image-dimensions/458x115?v=v2" width="458" height="115" role="button" title="attention.png" alt="attention.png" /></span></P> <P>The rationales behind certain routes are based on my own experience and do not represent the only option, but they should be considered as advisory only. So the idea is to review these maps frequently since the above information is likely to change over the coming months and I'll simply keep adding notes or remove them when it does not make sense anymore.</P> <P> </P> <P>The link icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="link.png" style="width: 31px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120317i038D48CCA48EF590/image-size/small?v=v2&px=200" role="button" title="link.png" alt="link.png" /></span>is a pointer to the corresponding Microsoft documentation.</P> <P> </P> <P>With this tool, any Security Architect (Cloud or not) will quickly grasp the security landscape of Azure. </P> <P> </P> <P>Here is the pointer to the map:</P> <P>Update (02/2021): the online MindMapMaker tool deletes maps that are older than 1 year....A pointer to the last version is available in the below table.</P> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v1.0 (06/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mmc00bf17b40454ecda863046602b7be3e" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mmc00bf17b40454ecda863046602b7be3e</A></STRIKE></TD> </TR> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v1.1 (12/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mm2247a15d373d4e97bf589772950af0ff" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm2247a15d373d4e97bf589772950af0ff</A></STRIKE></TD> </TR> <TR> <TD style="width: 50%;">Last MindMapMaker map</TD> <TD style="width: 50%;"> <P><A href="https://app.mindmapmaker.org/#m:mmd329ac370bf141948f565b79c40b0ff6" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mmd329ac370bf141948f565b79c40b0ff6</A></P> </TD> </TR> <TR> <TD style="width: 50%;">Last PDF map</TD> <TD style="width: 50%;"> <P><A href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter07/maps/Security%20Architecture.pdf" target="_blank" rel="noopener">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter07/maps/Security%20Architecture.pdf</A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P>Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><STRONG><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></STRONG> - This map</LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P> </P></description> <pubDate>Tue, 23 Feb 2021 09:46:20 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091</guid> <dc:creator>stephaneey</dc:creator> <dc:date>2021-02-23T09:46:20Z</dc:date> ... </item> <item> <title>The Cloud-native Azure Application Architect Map</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242</link> <description><P>Hi,</P> <P> </P> <P>Recently, I built the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Solution-Architect-Map/ba-p/689700" target="_self">Azure <STRONG>Solution</STRONG> Architect Map</A> , the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Security-Architect-Map/ba-p/714091" target="_self">Azure <STRONG>Security</STRONG> Architect Map</A> and the <A href="https://techcommunity.microsoft.com/t5/Azure-Developer-Community-Blog/The-Azure-Infrastructure-Architect-Map/ba-p/766268" target="_self">Azure Infrastructure Architect Map</A> aimed at helping Architects finding their way in Azure. Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><STRONG><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></STRONG> - This map</LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P> </P> <P>I'm now coming with the next map in this series, namely: the Cloud-native Azure Application Architect Map.</P> <P><BR />As usual, this map is by no means the holy grail and is just there to highlight some good fit between Azure Services and Design Patterns. This map is certainly subject to controversy as they are thousands of ways to design and develop and application. My goal is only to highlight some possibilities. </P> <P> </P> <P>As usual, here is a screenshot of the map:</P> <P> </P> <P><A href="https://stephaneeyskens.files.wordpress.com/2019/12/cnative.png" target="_blank" rel="noopener"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="map.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/128490i338079449BEA0B23/image-size/large?v=v2&px=999" role="button" title="The Azure Application Architect Map.png" alt="The Azure Application Architect Map.png" /></span></A></P> <P> </P> <P>The map focuses on the following areas:</P> <UL> <LI>Data & Big Data</LI> <LI>Common Design Patterns: SAGA, Circuit Breaker, Event-driven Architecture, etc.</LI> <LI>Domain-driven Design & Microservices: yes I clubbed them together :)</img></LI> <LI>Artificial Intelligence: NLP, Supervised & Unsupervised ML etc.</LI> <LI>Miscellaneous: things that come back regularly when developing applications such as real-time HTTP, search, job scheduling etc. </LI> </UL> <P><STRONG><FONT size="3">How to read this map?</FONT></STRONG></P> <P> </P> <P>Whenever you see the attachment icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="attachicon.png" style="width: 22px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120128i004B5A4431671EB0/image-size/large?v=v2&px=999" role="button" title="attachicon.png" alt="attachicon.png" /></span>, it means that I have attached an explanation on a given rationale or service. If you see a (*) next to a node, it is kind of a must read information. So for instance, in the following screenshot:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="dddcqrs.png" style="width: 439px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/127580i76912648F0FA13ED/image-size/large?v=v2&px=999" role="button" title="dddcqrs.png" alt="dddcqrs.png" /></span></P> <P> </P> <P>I want to catch your attention on why I make an association between DDD and Microservices:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="dddcqrsexplained.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/127581i95B7FA9354C040F8/image-size/large?v=v2&px=999" role="button" title="dddcqrsexplained.png" alt="dddcqrsexplained.png" /></span></P> <P>as well as why I make an association between CQRS and DDD:</P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="cqrsdddexplained.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/127582i06C4646B502D6531/image-size/large?v=v2&px=999" role="button" title="cqrsdddexplained.png" alt="cqrsdddexplained.png" /></span></P> <P>You might of course disagree with this but at least, you understand my rationale.</P> <P>The link icon <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="link.png" style="width: 31px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/120317i038D48CCA48EF590/image-size/small?v=v2&px=200" role="button" title="link.png" alt="link.png" /></span>is a pointer to the corresponding Microsoft documentation.</P> <P> </P> <P>Note that I haven't dived into AKS or Service Fabric since this guys would deserve a dedicated map and are not Azure services like others, they are a universe by themselves.</P> <P> </P> <P>With this tool, any Cloud-native Application Architect should quickly grasp the application landscape of Azure. </P> <P> </P> <P>Update: the online MindMapMaker tool deletes maps that are older than a year, therefore, just visit the last version.</P> <TABLE style="border-collapse: collapse; width: 100%;" border="1" width="100%"> <TBODY> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v1.0 & v.1 (09/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mm5e724c4dc8324504ab58c6d9b0f708b8" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm5e724c4dc8324504ab58c6d9b0f708b8</A></STRIKE></TD> </TR> <TR> <TD height="29px" style="width: 50%;"><STRIKE>v 1.2 (12/2019)</STRIKE></TD> <TD height="29px" style="width: 50%;"><STRIKE><A href="https://app.mindmapmaker.org/#m:mm41003e37953d47e0841ae28cf0079f0e" target="_blank" rel="noopener">https://app.mindmapmaker.org/#m:mm41003e37953d47e0841ae28cf0079f0e</A></STRIKE></TD> </TR> <TR> <TD height="56px" style="width: 50%;">Last version MindMapMaker</TD> <TD height="56px" style="width: 50%;"> <P><A href="https://app.mindmapmaker.org/#m:mm87db50f890484619b2429b32c3545916" target="_blank">https://app.mindmapmaker.org/#m:mm87db50f890484619b2429b32c3545916</A></P> </TD> </TR> <TR> <TD height="29px" style="width: 50%;">Last version PDF</TD> <TD height="29px" style="width: 50%;"> <P><A href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter05/maps/Azure%20Application%20Architecture.pdf" target="_blank">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook/blob/master/Chapter05/maps/Azure%20Application%20Architecture.pdf</A></P> </TD> </TR> </TBODY> </TABLE> <P> </P> <P>Here are all the maps in my series of Architecture Maps:</P> <UL> <LI><A id="link_20" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-openid-connect-oidc-architecture-map/ba-p/1119450" target="_blank" rel="noopener">The OpenID Connect (OIDC) Architecture Map</A></LI> <LI><A id="link_26" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-kubernetes-service-aks-architecture-map/ba-p/1078714" target="_blank" rel="noopener">The Azure Kubernetes Service (AKS) Architecture Map</A></LI> <LI><STRONG><A id="link_10" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242" target="_blank" rel="noopener">The Cloud-native Azure Application Architect Map</A></STRONG> - This map</LI> <LI><A id="link_13" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-infrastructure-architect-map/ba-p/766268" target="_blank" rel="noopener">The Azure Infrastructure Architect Map</A></LI> <LI><A id="link_14" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-security-architect-map/ba-p/714091" target="_blank" rel="noopener">The Azure Security Architect Map</A></LI> <LI><A id="link_15" class="page-link lia-link-navigation lia-custom-event" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-azure-solution-architect-map/ba-p/689700" target="_blank" rel="noopener">The Azure Solution Architect Map</A></LI> </UL> <P> </P> <P> </P></description> <pubDate>Sun, 21 Feb 2021 17:30:06 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-cloud-native-azure-application-architect-map/ba-p/812242</guid> <dc:creator>stephaneey</dc:creator> <dc:date>2021-02-21T17:30:06Z</dc:date> ... </item> <item> <title>A Visual Introduction To Azure Fundamentals</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-visual-introduction-to-azure-fundamentals/ba-p/2132410</link> <description><P><SPAN style="font-family: inherit; font-size: xx-large;">A Visual Introduction To Azure Fundamentals<BR /></SPAN></P> <P><EM>This is a summary of an article that I <A href="https://aka.ms/visual-azure-acg" target="_blank" rel="noopener">just published in A Cloud Guru</A> which goes into more details on the choice of the "truck" (delivery) metaphor and resources to prep for AZ-900. Don't forget to check that out!</EM></P> <P> </P> <P><FONT size="5">Setting The Stage</FONT></P> <P>The start of a new year is great to kickstart learning resolutions - and aiming for certification (like AZ-900) is a great goal to have!! But sticking to that resolution requires a study plan (for accountability) and study resources (that suit your learning style). Read the <A href="https://aka.ms/visual-azure-acg" target="_self">A Cloud Guru article</A> for some thoughts on how you can set yourself up for success, including links to communities and study guides that can help.</P> <P> </P> <P>Today though I want to focus on the learning styles we adopt - and in particular, on our <EM>visual learning</EM> ability. <A href="https://www.inc.com/molly-reynolds/how-to-spot-visual-auditory-and-kinesthetic-learni.html" target="_blank" rel="noopener">65% of us are visual learners</A> -- which means we absorb information ("see the big picture") more quickly from images than from text, and can make connections more quickly to relevant ideas ("connect the dots") by detecting or reinforcing patterns that we are innately familiar with.</P> <P> </P> <P>In reality, we all learn by mixing several styles - read/write (articles), kinesthetic (tutorials), auditory (lectures) and visual (imagery) -- so as you study for certification, it's worth exploring different resources to see which ones give you the best approach to not just understanding the topic, but retaining that knowledge and recalling it effectively later.</P> <P> </P> <P><FONT size="5">Azure Fundamentals: A Sketchnote!</FONT></P> <P>In 2021, I started the <A href="https://azure.cloud-skills.dev" target="_blank" rel="noopener">VisualAzure</A> project, and its accompanying <A href="https://cloud-skills.dev" target="_blank" rel="noopener">Cloud Skills: Sketchnotes</A> repository, in an effort to create useful learning resources for visual learners that could complement relevant <A href="https://docs.microsoft.com/?WT.mc_id=mobile-12359-ninarasi" target="_blank" rel="noopener">Microsoft Docs</A> and <A href="https://learn.microsoft.com/?WT.mc_id=mobile-12359-ninarasi" target="_self">Microsoft Learn</A> content. My first target -- the <A href="https://docs.microsoft.com/en-us/learn/certifications/azure-fundamentals?WT.mc_id=mobile-12359-ninarasi" target="_self">Azure Fundamentals learning paths and AZ-900.</A></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Cloud_Guru.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/254744iE7FBA79C8717E50F/image-size/large?v=v2&px=999" role="button" title="Cloud_Guru.png" alt="Cloud_Guru.png" /></span></P> <P> </P> <P> </P> <P>Here is the sketchnote visualizing the <A href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-fundamentals/?WT.mc_id=mobile-12359-ninarasi" target="_blank" rel="noopener">Introduction To Azure Fundamentals</A> unit of the common module that anchors all six learning paths. The sketchnote uses two key visual storytelling tactics:</P> <UL> <LI><STRONG>A visual vocabulary</STRONG> -- so you can quickly scan the sheet at a glance, spot various "sections" and navigate the information "flow" using visual cues like icons, arrows and banners.</LI> <LI><STRONG>A visual metaphor </STRONG>-- in this case, the definition of cloud computing as "the <EM>delivery</EM> of computing services over the internet" inspired me to use a transport (delivery truck) metaphor, and use related analogies to explain other concepts tied to cloud computing.</LI> </UL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Azure-2-ACloudGuru-Fundamentals-Small.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/254745i05D151493044D40E/image-size/large?v=v2&px=999" role="button" title="Azure-2-ACloudGuru-Fundamentals-Small.png" alt="Azure-2-ACloudGuru-Fundamentals-Small.png" /></span></P> <P> </P> <P>I hope you find this not just interesting, but also informative and useful, for your Azure learning and certification journeys. I encourage you to check out these resources to learn more:</P> <UL> <LI>Read <A href="https://aka.ms/visual-azure-acg" target="_blank" rel="noopener">this accompanying article at A Cloud Guru!</A> to dive into metaphor and analogies.</LI> <LI>Check out <A href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-fundamentals/?WT.mc_id=mobile-12359-ninarasi" target="_blank" rel="noopener">the relevant MS Learn unit/module</A> and see if this helps your understanding.</LI> <LI>Download a higher-quality image from <A href="https://cloud-skills.dev/" target="_blank" rel="noopener">this site</A>, review it after a few weeks to test your recall.</LI> </UL> <P> </P> <P>Last but not least - if you have feedback for improving these sketchnotes, or want to request one for a specific Microsoft Learn (module) or Docs (topic) - leave me a request or share your comments via this <A href="https://github.com/SketchTheDocs/visual-azure/discussions" target="_blank" rel="noopener">Discussion Forum!</A> And if you found this useful and are a Redditor, I'd <A href="https://www.reddit.com/r/AZURE/comments/liebot/a_visual_guide_to_azure_fundamentals_a_cloud_guru/" target="_blank" rel="noopener">love an upvote</A> :smiling_face_with_smiling_eyes:</img><BR /><BR /></P> <P>Happy learning!</P></description> <pubDate>Sun, 14 Feb 2021 15:40:46 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-visual-introduction-to-azure-fundamentals/ba-p/2132410</guid> <dc:creator>nityan</dc:creator> <dc:date>2021-02-14T15:40:46Z</dc:date> ... </item> <item> <title>A Deep Dive into Serverless Applications on Power Apps and Azure</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-deep-dive-into-serverless-applications-on-power-apps-and-azure/ba-p/2113430</link> <description><H2><STRONG><SPAN data-contrast="auto">Overview</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the Low-code application development (LCAD) on Azure solution. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">LCAD on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">This month’s webinar is ‘A Deep Dive </SPAN><SPAN data-contrast="none">into</SPAN><SPAN data-contrast="none"> Serverless</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="auto">Applications on Power Apps and Azur</SPAN><SPAN data-contrast="auto">e.</SPAN><SPAN data-contrast="auto">’</SPAN></P> <P> </P> <P><SPAN data-contrast="none">In this blog I will </SPAN><SPAN data-contrast="none">briefly </SPAN><SPAN data-contrast="none">recap</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development</SPAN><SPAN data-contrast="none"> on Azure</SPAN></A><SPAN data-contrast="none">, </SPAN><SPAN data-contrast="none">provide </SPAN><SPAN data-contrast="none">an overview of serverless, why to build a serverless Power App, and what to look forward to in the webinar’s demos.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <H2><STRONG><SPAN data-contrast="none">What is </SPAN></STRONG><STRONG><SPAN data-contrast="none">Low-code application development on Azure</SPAN></STRONG><STRONG><SPAN data-contrast="none">?</SPAN></STRONG><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">Low-code application development (LCAD) on Azure</SPAN></A><SPAN data-contrast="none"> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services.</SPAN></P> <P><SPAN data-contrast="none"> </SPAN></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614964504187.png" style="width: 1395px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261234iAE4D8B9F49A1768D/image-dimensions/1395x784?v=v2" width="1395" height="784" role="button" title="riduncan_0-1614964504187.png" alt="riduncan_0-1614964504187.png" /></span></P> <P> </P> <P><SPAN data-contrast="none">For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> In the past that would require another heavy lift by the development team to rework their previous application iteration. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. </SPAN></P> <P> </P> <P><SPAN data-contrast="none"><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">To learn </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">more,</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399"> visit the </SPAN></SPAN><A class="Hyperlink BCX8 SCXW12267399" href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399" data-ccp-charstyle="Hyperlink">LCAD</SPAN></SPAN><SPAN class="TextRun Underlined BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399" data-ccp-charstyle="Hyperlink"> on Azure page</SPAN></SPAN></A><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">, </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">and to walk through the</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399"> </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">a</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">forementioned </SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">scenario</SPAN></SPAN><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399"> try the </SPAN></SPAN><A class="Hyperlink BCX8 SCXW12267399" href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399" data-ccp-charstyle="Hyperlink">LCAD on Azure guided tour</SPAN></SPAN></A><SPAN class="TextRun BCX8 SCXW12267399" data-contrast="none"><SPAN class="NormalTextRun BCX8 SCXW12267399">.</SPAN></SPAN><SPAN class="EOP BCX8 SCXW12267399" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614961772841.jpeg" style="width: 1397px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261222i2B2105E0958B3158/image-dimensions/1397x787?v=v2" width="1397" height="787" role="button" title="riduncan_0-1614961772841.jpeg" alt="riduncan_0-1614961772841.jpeg" /></span></P> <P> </P> <H2><STRONG><SPAN data-contrast="none">Serverless Applications</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">You may be wondering what a serverless application</SPAN><SPAN data-contrast="none"> is?</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Serverless is a cloud computing execution model where the cloud provider dynamically manages the allocation and provisioning of servers. A serverless application runs in stateless compute containers that are event-triggered, ephemeral, and fully managed by the cloud provider.</SPAN></P> <P> </P> <P><SPAN data-contrast="none"> In turn this model greatly benefits the developer and team by reducing th</SPAN><SPAN data-contrast="none">eir workload by </SPAN><SPAN data-contrast="none">reducing the need</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">to manage servers, and this model is much cheaper because teams don’t incur the hardware and associated costs. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">A logical next question is “</SPAN><SPAN data-contrast="none">in what scenario(s) do I go serverless?” </SPAN></P> <P> </P> <P><SPAN data-contrast="none">You can choose it when you have asynchronous</SPAN><SPAN data-contrast="none"> and concurrent tasks to be executed, when you have infrequent requests and spiky traffic</SPAN><SPAN data-contrast="none"> where you don’t have a dependency on latency. Also, when you’re looking to quickly iterate your development, build MVPs, change your code or change business requirements to</SPAN><SPAN data-contrast="none"> immediately deploy that code. </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">You’re now convinced of serverless code’s benefits, </SPAN><SPAN data-contrast="none">but </SPAN><SPAN data-contrast="none">how do you get started? </SPAN></P> <P> </P> <P><SPAN data-contrast="none">At </SPAN><SPAN data-contrast="none">the core are cloud functions th</SPAN><SPAN data-contrast="none">at</SPAN><SPAN data-contrast="none"> enable </SPAN><SPAN data-contrast="none">you </SPAN><SPAN data-contrast="none">to write code in </SPAN><SPAN data-contrast="none">containers</SPAN><SPAN data-contrast="none">. I</SPAN><SPAN data-contrast="none">n reaction to an event execution can be triggered by any of the managed services or any custom</SPAN><SPAN data-contrast="none"> sources you might be defining that are important for your application.</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Due</SPAN><SPAN data-contrast="none"> to </SPAN><A href="https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview?tabs=csharp" target="_blank" rel="noopener"><SPAN data-contrast="none">durable functions</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">you</SPAN><SPAN data-contrast="none"> can write stateful functions in a serverless compute environment. Lastly, serverless c</SPAN><SPAN data-contrast="none">ode is event driven, run</SPAN><SPAN data-contrast="none">ning </SPAN><SPAN data-contrast="none">in response to specific triggers which can be a HTTP or a blob trigger when running code in re</SPAN><SPAN data-contrast="none">sponse to a file being uploaded to a storage account number.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <H2><STRONG><SPAN data-contrast="none">Serverless Power Apps</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">Building serverless applications on Azure sound great by themselves, why would you bother to build your using Microsoft Power Apps?</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Building business applications quickly is not easy when </SPAN><SPAN data-contrast="none">utilizing</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">several</SPAN><SPAN data-contrast="none"> different frameworks, hosting options, and complex integrations between systems. Leveraging serverless technologies (Azure Functions and Logic Apps) can </SPAN><SPAN data-contrast="none">provide</SPAN><SPAN data-contrast="none"> the building blocks for </SPAN><SPAN data-contrast="none">APIs</SPAN><SPAN data-contrast="none"> to connect to custom backends, services, or a Data Model (</SPAN><SPAN data-contrast="none">Dataverse</SPAN><SPAN data-contrast="none">) that stores data across many applications. </SPAN></P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=etVdXkGAiRc&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=11" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/etVdXkGAiRc/hqdefault.jpg" external="url"></LI-VIDEO></P> <P><SPAN data-contrast="none">Leverage these APIs to deeply integrate with PowerApps or </SPAN><SPAN data-contrast="none">Power Automate</SPAN><SPAN data-contrast="none"> and extend the data that is most critical to business users with apps that are quickly built, managed, and distributed.</SPAN><SPAN data-contrast="none"> </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Moreover, with the development of ‘Fusion Development’ teams a term coined by analysts, developers can build back-end serverless APIs and import them via </SPAN><A href="https://powerapps.microsoft.com/en-us/blog/azure-api-management-connector-on-the-power-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure API management directly into </SPAN><SPAN data-contrast="none">Microsoft </SPAN><SPAN data-contrast="none">Power Apps</SPAN></A><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">as custom connectors.</SPAN></P> <P> </P> <P><SPAN data-contrast="none">‘Citizen Developers’ or those who aren’t professional developers, can </SPAN><SPAN data-contrast="none">leverage </SPAN><SPAN data-contrast="none">these APIs </SPAN><SPAN data-contrast="none">in their Power App, reducing the overall work of the developer, by not having to build front-end code.</SPAN><SPAN data-contrast="none"> Thus, piling on the time and resources saved by building serverless </SPAN><SPAN data-contrast="none">applications.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559731":720,"335559739":160,"335559740":259}"> </SPAN></P> <H2><STRONG><SPAN data-contrast="auto">What to expect in the webinar?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">Simona will cover first build a web API that generates jokes, throughout this process she will test and debug her APIs. Afterward publishing the API to </SPAN><SPAN data-contrast="none">which is available to test at aka.</SPAN><SPAN data-contrast="none">ms</SPAN><SPAN data-contrast="none">/joke</SPAN><SPAN data-contrast="none"> which generates jokes using random words. </SPAN></P> <P> </P> <P><SPAN data-contrast="none">Lastly, she exports the API to </SPAN><SPAN data-contrast="none">Power Apps via the Azure portal and challenges the viewers to extend her app with Power Automate AI chatbots that send jokes as text messages.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><LI-VIDEO vid="https://www.youtube.com/watch?v=o8XnPISgHqQ&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=9" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/o8XnPISgHqQ/hqdefault.jpg" external="url"></LI-VIDEO></P> <H2><STRONG><SPAN data-contrast="none">Summary</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></H2> <P><SPAN data-contrast="none">Make sure to tune into </SPAN><SPAN data-contrast="none">the <A href="https://info.microsoft.com/ww-Landing-ADeepDiveintoServerlessApplications.html?LCID=EN-US" target="_self">webinar</A> on February 25</SPAN><SPAN data-contrast="none">th</SPAN><SPAN data-contrast="none"> to learn more about serverless APIs and how to export them into your Power Apps. Moreover, there will be a Low-code application development on Azure ‘Learn Live’ </SPAN><SPAN data-contrast="none">session during Ignite, </SPAN><SPAN data-contrast="none">the data loss prevention and new governance policies for Power Apps at Ignite, and </SPAN><SPAN data-contrast="none">an SAP on Azure </SPAN><SPAN data-contrast="none">Power Apps</SPAN><SPAN data-contrast="none"> webinar in March</SPAN><SPAN data-contrast="none">.</SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></P> <P> </P> <P><STRONG><SPAN data-contrast="auto">Resources</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG>Webinar Registration Link</STRONG></P> <P><STRONG><A href="https://info.microsoft.com/ww-Landing-ADeepDiveintoServerlessApplications.html?LCID=EN-US" target="_blank" rel="noopener">Serverless Applications | Microsoft Power Apps</A></STRONG></P> <P><STRONG><SPAN data-contrast="auto">Low Code Application Development </SPAN></STRONG><STRONG><SPAN data-contrast="auto">on</SPAN></STRONG><STRONG><SPAN data-contrast="auto"> Azure</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener"><SPAN data-contrast="none">LCAD on Azure</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure plus Power Apps for pro developers</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://www.youtube.com/playlist?list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM" target="_blank" rel="noopener"><SPAN data-contrast="none">Low Code Application Development on Azure - YouTube</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Power Apps x Azure documentation</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/powerapps/developer/data-platform/azure-integration" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure integration document</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://powerapps.microsoft.com/en-us/blog/azure-api-management-connector-on-the-power-platform/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure API Management integration announcement</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/azure/api-management/export-api-power-platform" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure API Management integration documentation</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><STRONG><SPAN data-contrast="auto">Serverless documentation</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/functions-compare-logic-apps-ms-flow-webjobs" target="_blank" rel="noopener"><SPAN data-contrast="none">Compare serverless options</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/learn/modules/choose-azure-service-to-integrate-and-automate-business-processes/" target="_blank" rel="noopener"><SPAN data-contrast="none">Compare serverless options module</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://docs.microsoft.com/en-us/azure/azure-functions/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Functions documentation</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/services/functions/" target="_blank" rel="noopener"><SPAN data-contrast="none">Azure Functions website</SPAN></A><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></P></description> <pubDate>Fri, 05 Mar 2021 17:22:14 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/a-deep-dive-into-serverless-applications-on-power-apps-and-azure/ba-p/2113430</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-03-05T17:22:14Z</dc:date> ... </item> <item> <title>Creating a JWT Validation Web App</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/creating-a-jwt-validation-web-app/ba-p/2109450</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="JWT.png" style="width: 401px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/251081i4C16DA40C0BF968F/image-dimensions/401x217?v=v2" width="401" height="217" role="button" title="JWT.png" alt="JWT.png" /></span></P><P> </P><P>If you have been doing any OAuth and/or Open ID Connect troubleshooting in recent years it's very likely you've run across <A href="https://jwt.io" target="_blank" rel="noopener">https://jwt.io</A>, or in the Microsoft world <A href="https://jwt.ms" target="_blank" rel="noopener">https://jwt.ms</A>. Great tools, but primarily JWT parsing tools rather than JWT validation tools.</P><P> </P><P>Yes, jwt.io allows you to upload your keys in the UI, but there are a lot of scenarios that doesn't work for.</P><P> </P><P>Let's rewind a step or two here first though. Last year I showed how you could create your own faux tokens. That is; the tokens were real enough, but they mimicked actual tokens as they would look if issued by Azure AD and Azure AD B2C without actually being signed by Microsoft's keys. If you pasted the result into jwt.ms it would look like a real token.</P><P> </P><P>Identity is a large topic, but the two central concepts are "who are you" (authentication) and "what are you allowed to do" (authorization). If your approach in web app or api is to accept any old token and say "this looks good" you might run into trouble.</P><P> </P><P>Which is why I wanted to show how to build a web app that will attempt to validate the token in addition to parsing it. This is based on supplying a metadata url to retrieve signing keys, etc. If you don't have this the app will just parse the token and check against the attributes you supply (issuer, audience).</P><P> </P><P>The code for this post can be found here:</P><P><A title="GitHub" href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor_jwt_validator_dotnet_core" target="_blank" rel="noopener">https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor_jwt_validator_dotnet_core</A> </P><P> </P><P>In the real world i don't actually recommend you to do all these steps manually. There are libraries that will handle most of these things for you like MSAL on the client side of Identity.Web on the backend side. It is however always useful to dig a little deeper to gain an understanding of how it works behind the scenes.</P><P> </P><P>There are third party libraries available for token validation that support a large range of algorithms and formats, but to keep it simple I'm just using components native to the .NET toolbox.</P><P> </P><P><STRONG>Step 1 - Is it a JWT that has been pasted in?</STRONG></P><P>The web app will allow pretty much any text to be passed in so we need to validate that it is actually a token.</P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler(); //Check if readable token (string is in a JWT format) var readableToken = handler.CanReadToken(Jwt.Base64Token); if (readableToken != true) { FormatStatus = "The token doesn't seem to be in a proper JWT format."; return; } if (readableToken == true) { FormatStatus = "The token seems to be in a proper JWT format."; }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 2 - Do we have metadata?</STRONG></P><P>To be able to leverage concepts like public/private key cryptography we need to exchange the keys used, and we also need to agree on a couple of other attributes the tokens contain. It is entirely possible to exchange this in a manual way whether that is sending files per email or reading them loud over the phone for that matter, but the recommended approach is to have the identity provider expose a metadata endpoint. Loading things in a more manual way also requires more code, so we've kept it simple here and only provide the option for using an endpoint. (If you don't have one the code will not break, but revert to just parsing the token.)</P><P> </P><P>If you followed my previous post you should be able to provide your own endpoint even if that's just pointing to a different port on <A href="https://localhost" target="_blank" rel="noopener">https://localhost</A>.</P><P><A title="Generating Azure AD "Look-Alike" Tokens" href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/generating-azure-ad-quot-look-alike-quot-tokens/ba-p/1163098" target="_blank" rel="noopener">https://techcommunity.microsoft.com/t5/azure-developer-community-blog/generating-azure-ad-quot-look-alike-quot-tokens/ba-p/1163098</A> </P><P><A title="GitHub" href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor-jwt_generator-dotnet-core" target="_blank" rel="noopener">https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/blazor-jwt_generator-dotnet-core</A> </P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">//Load Metadata if available IConfigurationManager<OpenIdConnectConfiguration> configurationManager; OpenIdConnectConfiguration openIdConfig = null; bool metadataAvailable; try { configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(Jwt.MetadataAddress, new OpenIdConnectConfigurationRetriever()); openIdConfig = configurationManager.GetConfigurationAsync(CancellationToken.None).Result; metadataAvailable = true; MetadataStatus = $"Successfully loaded metadata."; } catch (Exception e) { MetadataStatus = $"Failed to load metadata (skipping signature validation): {e.Message}"; metadataAvailable = false; }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 3 - Set up token validation parameters</STRONG></P><P>As said already we handle the absence of metadata gracefully. We can still check things like the lifetime and the audience, but we are not able to verify the signature. And that is the critical part - what separates my fake tokens with actual Azure AD tokens is the keys they are signed with. Which is why you should never disable validation of the signing key like we do here :)</img></P><P> </P><P>While there is some logic in locating the keys and retrieving them we see that this is one of the things the libraries handle for us in a developer friendly way.</P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">TokenValidationParameters validationParameters = null; //If we cannot load metadata we fall back if (!metadataAvailable) { validationParameters = new TokenValidationParameters { ValidIssuer = Jwt.Issuer, ValidAudience = Jwt.Audience, ValidateLifetime = true, ValidateAudience = true, ValidateIssuer = true, //Needed to force disabling signature validation SignatureValidator = delegate (string token, TokenValidationParameters parameters) { var jwt = new JwtSecurityToken(token); return jwt; }, ValidateIssuerSigningKey = false, }; } //If we succcessfully loaded metadata we do signature validation as well if (metadataAvailable) { validationParameters = new TokenValidationParameters { ValidIssuer = openIdConfig.Issuer, ValidAudience = Jwt.Audience, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidateAudience = true, ValidateIssuer = true, IssuerSigningKeys = openIdConfig.SigningKeys }; }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 4 - Validate the token</STRONG></P><P>The actual validation is shorter than the setup. We read the JWT. (Notice how Microsoft also use "token" twice in the naming - spelling out the acronym it would be ReadJsonWebTokenToken.)</P><P> </P><P> </P><P> </P><P> </P><LI-CODE lang="csharp">token = handler.ReadJwtToken(Jwt.Base64Token); try { var identity = handler.ValidateToken(Jwt.Base64Token, validationParameters, out SecurityToken validatedToken); if (metadataAvailable) { output += "Token is valid according to metadata!"; } else { output += "Token is valid according to a self-evaluation!"; } jwtSignature = token.RawSignature; } catch (Exception e) { //Print errors }</LI-CODE><P> </P><P> </P><P> </P><P> </P><P><STRONG>Step 5 - Pretty print the contents and the result</STRONG></P><P>The last step is to print out the result of the validation test, and the contents of the token split into header/payload/signature with some color coding. I did not find satisfactory ways to do this with the built-in mechanisms as these didn't really play nice with Blazor so I did a more hackish and manual approach for this. Not including the code here, but it is of course part of the sample on GitHub.</P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ValidationResult.png" style="width: 532px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/251094i9680A5F7CA039B23/image-size/large?v=v2&px=999" role="button" title="ValidationResult.png" alt="ValidationResult.png" /></span></P><P> </P><P>In an actual app or api you would of course not care so much about these things anyway.</P><P> </P><P>While I also prefer using "proper" libraries for validation I use tools like this all the time when working with things like custom policies in Azure AD B2C.</P><P> </P><P>I'm sure you are able to come up with more elaborate versions that what I did here, but I'm hoping it provided some of the basic understand for making sure you don't end up in the category of developers who skip token validation. (There are unfortunately too many that don't do this right and produce code with horrible vulnerabilities included.)</P></description> <pubDate>Mon, 01 Feb 2021 20:03:44 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/creating-a-jwt-validation-web-app/ba-p/2109450</guid> <dc:creator>Andreas Helland</dc:creator> <dc:date>2021-02-01T20:03:44Z</dc:date> ... </item> <item> <title>Developers Unite to Hack for Social Justice</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-unite-to-hack-for-social-justice/ba-p/2077118</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NinaSui_1-1611882553594.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/250480iD45625E7A7620819/image-size/large?v=v2&px=999" role="button" title="NinaSui_1-1611882553594.png" alt="NinaSui_1-1611882553594.png" /></span></P> <P> </P> <P>Over the course of 8 weeks, developers gathered virtually to participate in the <A href="https://socialjusticehack.devpost.com/" target="_blank" rel="noopener">Microsoft Azure Hack for Social Justice</A> event. The hackathon challenge statement was straightforward: design and build an application prototype that uses Azure to address a social justice issue. Participants were given access to Microsoft technical mentors, dedicated Azure environment, and self-paced learning resources. Although technology alone cannot solve complex societal issues, our hope is that participants will develop solutions that can help empower communities and drive change.</P> <P> </P> <P>Over 500 participants registered for the hack, 300+ were from the U.S., and 6 winning projects were selected. Check out these creations:</P> <P> </P> <P><FONT size="5"><U><STRONG>1st Place : </STRONG></U><A href="https://devpost.com/software/refugee-restrooms-agmx8p" target="_blank" rel="noopener">Equitable Restroom Access for Gender Non-Conforming </A></FONT></P> <P>Created by: <STRONG>Mahesh Babu</STRONG> (<LI-USER uid="395609"></LI-USER>) </P> <P>Provides safe restroom access for transgender, gender non-conforming, disabled individuals, and parents traveling with kids to find restrooms per their needs.</P> <P><EM>Azure Services Used: Azure Functions, Azure SendGrid</EM></P> <P> </P> <P><LI-VIDEO vid="https://vimeo.com/479646923" align="center" size="custom" width="663" height="663" uploading="false" thumbnail="https://i.vimeocdn.com/video/995544352_1280.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><U><STRONG>2nd Place: </STRONG></U><A href="https://devpost.com/software/lll-8nthku" target="_blank" rel="noopener">GetPro</A></FONT></P> <P>Created by: <STRONG>Amina Fong</STRONG> (<LI-USER uid="899575"></LI-USER>), <STRONG>William Broniec</STRONG> (<LI-USER uid="362934"></LI-USER>), <STRONG>Zechen Lu</STRONG> (<LI-USER uid="900127"></LI-USER>) </P> <P>Web app that centralizes information and professional resources for underrepresented populations to help even the playing field in educational and career opportunities.</P> <P><EM>Azure Services Used: Azure App Services, Azure SQL Database</EM></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/CxzBDm-gHyU" align="center" size="custom" width="507" height="507" uploading="false" thumbnail="https://i.ytimg.com/vi/CxzBDm-gHyU/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><U><STRONG>3rd Place:</STRONG></U><U><STRONG> </STRONG></U><A href="https://devpost.com/software/legal-helper-bot" target="_blank" rel="noopener">Legal Helper Bot</A></FONT></P> <P>Created by: <STRONG>Murtada Ahmed</STRONG></P> <P>Not knowing the law and ones rights can expose already vulnerable groups to more discrimination and abuse. Legal Helper Bot was created to change that.</P> <P><EM>Azure Services Used: Azure Bot Services, Azure Storage</EM></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/RnT0eOvsNCU" align="center" size="custom" width="492" height="492" uploading="false" thumbnail="https://i.ytimg.com/vi/RnT0eOvsNCU/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><FONT size="5"><U><STRONG>Honorable Mentions</STRONG></U></FONT></P> <P><FONT size="5"><A href="https://devpost.com/software/racial-bias-and-score-prediction-of-compas-score" target="_blank" rel="noopener">Racial Bias and Score Prediction of COMPAS Score</A></FONT></P> <P>Created by: <STRONG>Yuki Ao</STRONG> (<LI-USER uid="899871"></LI-USER>) </P> <P>Inform people of the racial bias in the U.S. Justice system and give the offenders a chance to know their score level beforehand.</P> <P> </P> <P><FONT size="5"><A href="https://devpost.com/software/tutorfirst" target="_blank" rel="noopener">TutorFirst</A></FONT></P> <P>Created by: <STRONG>Farhan Mashud</STRONG> (<LI-USER uid="899519"></LI-USER>), <STRONG>Isfar Oshir</STRONG> (<LI-USER uid="899521"></LI-USER>), <STRONG>Mohammed Uddin</STRONG> (<LI-USER uid="899520"></LI-USER>) </P> <P>App for low income students to receive free, high quality tutoring from tutor volunteers.</P> <P> </P> <P><FONT size="5"><A href="https://devpost.com/software/numbers-rvyjc1" target="_blank" rel="noopener">Feminist Action Board</A></FONT></P> <P>Created by: <STRONG>Aroma Rodrigues</STRONG> (<LI-USER uid="899816"></LI-USER>) </P> <P>Subscribes to a news API to provide real time news on gender violence and tracks organizations, petitions, and initiatives</P> <P> </P> <P>On behalf of the Microsoft U.S. Azure team, I'd like to sincerely thank all of the participants, and congratulate the winners on a job well done. Also, thank you to the mentors and judges who volunteered their time to give back to the community. </P> <P> </P> <P>Next up: check out these new hackathons that are open for registration</P> <UL> <LI><A href="https://aka.ms/accessibilityhacktc" target="_blank" rel="noopener">Microsoft Azure U.S. Hack for Accessibility (Jan 28 - Mar 15, 2021)</A></LI> <LI><A href="https://aka.ms/azureaihacktc" target="_blank" rel="noopener">Microsoft Azure AI Hackathon (Jan 26 - April 5, 2021)</A></LI> </UL></description> <pubDate>Fri, 29 Jan 2021 01:20:19 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-unite-to-hack-for-social-justice/ba-p/2077118</guid> <dc:creator>NinaSui</dc:creator> <dc:date>2021-01-29T01:20:19Z</dc:date> ... </item> <item> <title>Automate Application Lifecycle Management with GitHub Actions for Power Platform Webinar</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/automate-application-lifecycle-management-with-github-actions/ba-p/2083829</link> <description><DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG style="color: inherit; font-family: inherit; font-size: 18px;">Overview</STRONG><SPAN style="color: inherit; font-family: inherit; font-size: 18px;"> </SPAN></DIV> <DIV class="lia-message-body-wrapper lia-component-message-view-widget-body"> <DIV id="bodyDisplay" class="lia-message-body"> <DIV class="lia-message-body-content"> <P><SPAN>In 2021, each month we will be releasing a monthly blog covering the webinar of the month for the <A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener noreferrer">Low Code Application Development on Azure</A> solution.</SPAN></P> <P> </P> <P><SPAN>Low-code app dev on Azure is a new solution to demonstrate the robust development capabilities of integrating low-code Microsoft Power Apps and the Azure products you may be familiar with. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>This month’s webinar is ‘Develop Application Lifecycle Management (ALM) processes with GitHub Actions and Power Apps.’</SPAN></P> <P> </P> <P><SPAN>In this blog I will highlight what LCAD on Azure is, the 3 most prevalent products in the webinar and use cases and provide supporting documentation for you to learn more about the webinar's content. </SPAN><SPAN> </SPAN></P> <P> </P> <H4 id="toc-hId--1634335751"><STRONG>What is Low-code application development (LCAD) on Azure?</STRONG> </H4> <P><SPAN><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener noreferrer">Low Code Application Development on Azure</A> was created to help developers build business applications faster with less code, leveraging the Power Platform, and more specifically Power Apps, yet helping them scale and extend their Power Apps with Azure services. </SPAN><SPAN> </SPAN></P> <P> </P> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_0-1614960637782.png" style="width: 1398px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261205i1D97A7FBC728FFAB/image-dimensions/1398x786?v=v2" width="1398" height="786" role="button" title="riduncan_0-1614960637782.png" alt="riduncan_0-1614960637782.png" /></span> <P> </P> <P> </P> <P> </P> <P><SPAN>For example, a pro developer who works for a manufacturing company would need to build a line-of-business (LOB) application to help warehouse employees’ track incoming inventory.</SPAN></P> <P> </P> <P><SPAN>That application would take months to build, test, and deploy, however with Power Apps’ it can take hours to build, saving time and resources.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN> However, say the warehouse employees want the application to place procurement orders for additional inventory automatically when current inventory hits a determined low. </SPAN></P> <P> </P> <P><SPAN>In the past that would require another heavy lift by the development team to rework their previous application iteration. </SPAN></P> <P> </P> <P><SPAN>Due to the integration of Power Apps and Azure a professional developer can build an API in Visual Studio (VS) Code, publish it to their Azure portal, and export the API to Power Apps integrating it into their application as a custom connector.</SPAN></P> <P> </P> <P><SPAN>Afterwards, that same API is re-usable indefinitely in the Power Apps’ studio, for future use with other applications, saving the company and developers more time and resources. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>This is just one scenario that highlights the capabilities of the LCAD on Azure solution. To learn more about the solution itself there is a link at the bottom of this blog in the supporting documentation section.</SPAN></P> <P> </P> <P><SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">To learn </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">more,</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8"> visit the </SPAN></SPAN><A class="Hyperlink SCXW12267399 BCX8" href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8" data-ccp-charstyle="Hyperlink">LCAD</SPAN></SPAN><SPAN class="TextRun Underlined SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8" data-ccp-charstyle="Hyperlink"> on Azure page</SPAN></SPAN></A><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">, </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">and to walk through the</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8"> </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">a</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">forementioned </SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">scenario</SPAN></SPAN><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8"> try the </SPAN></SPAN><A class="Hyperlink SCXW12267399 BCX8" href="https://dynamicstestdrive-uat.azurewebsites.net/en-us/guidedtour/power-platform/azure-low-code-app-development-with-power-apps/1/1" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8" data-ccp-charstyle="Hyperlink">LCAD on Azure guided tour</SPAN></SPAN></A><SPAN class="TextRun SCXW12267399 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW12267399 BCX8">.</SPAN></SPAN><SPAN class="EOP SCXW12267399 BCX8" data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></SPAN></P> <P> </P> <span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="riduncan_1-1614960637783.jpeg" style="width: 1397px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/261206iD8C87BEAFD01FDCE/image-dimensions/1397x787?v=v2" width="1397" height="787" role="button" title="riduncan_1-1614960637783.jpeg" alt="riduncan_1-1614960637783.jpeg" /></span> <P> </P> <P><SPAN>This month’s webinar is focused on the capability to automate application lifecycle management, like the above scenario, with GitHub Actions to further expedite and streamline the development process for developers. </SPAN><SPAN> </SPAN></P> <P> </P> <H4 id="toc-hId-853177082"><STRONG>Webinar Content</STRONG> </H4> <P><SPAN>The webinar explains <STRONG><U>‘Fusion Development’</U></STRONG> a process that leverages the citizen developer to build low-code applications themselves, further reducing strain on development teams, but professional developers meeting citizen developer's half-way by extending these applications with custom code. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>The webinar includes <STRONG><U>2 demos</U></STRONG>, one on the <STRONG><U>integration of API management and Power Apps</U></STRONG>, how to <STRONG><U>create a CI/CD pipeline using GitHub Actions</U></STRONG>. </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>The integration of API management and Power Apps will cover the no cliff extensibility capabilities of Power Apps and Azure together, how to export APIs to Power Apps, and how to connect API management with Power Apps via Microsoft Teams for free.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>We introduced Azure API Management connectors to quickly publish Azure API Management backed APIs to the Power Platform for easy discovery and consumption, dramatically reducing the time it takes to create apps connecting to Azure services.</SPAN></P> <P> </P> <P><SPAN>This means that enterprises can now truly benefit from existing assets hosted on Azure, by making these available to Citizen developers with just a few clicks in the Azure portal.</SPAN></P> <P> </P> <P><SPAN>Thereby eliminating the additional steps to go create custom connectors in the Power Apps or Power Automate maker experiences.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=06CRN18kH1k&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=7" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/06CRN18kH1k/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P><SPAN>The </SPAN><A href="https://help.github.com/articles/about-github-actions" target="_blank" rel="noopener noreferrer"><SPAN>GitHub Actions</SPAN></A><SPAN> demo will cover developer's ability to build automated software development lifecycle workflows.</SPAN></P> <P> </P> <P><SPAN>With GitHub Actions for Microsoft Power Platform, developers can create workflows in their repository to build, test, package, release, and deploy apps; perform automation; and manage bots and other components built on Microsoft Power Platform.</SPAN></P> <P> </P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=g3qfBeat-PM&list=PL8IYfXypsj2Dp-jDh4TpkxnYlGmIccKfM&index=8" align="center" size="medium" width="400" height="225" uploading="false" thumbnail="https://i.ytimg.com/vi/g3qfBeat-PM/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <H4 id="toc-hId-1533235452"><STRONG>Conclusion</STRONG> </H4> <P><SPAN>The webinar is currently available </SPAN><A href="https://info.microsoft.com/ww-ondemand-develop-test-and-deliver-applications-with-github-actions-for-power-platform.html?lcid=en-us" target="_blank" rel="noopener noreferrer"><SPAN>on-demand</SPAN></A><SPAN>, and <SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8">and </SPAN></SPAN><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8">complete the </SPAN></SPAN><A class="Hyperlink SCXW253825262 BCX8" href="https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbRzDZlq55wCpLjWQ_IU7xv-VURVRFQUdPSTJVTjBOR0RWM0U1VFFSM1pYUS4u" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW253825262 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW253825262 BCX8" data-ccp-charstyle="Hyperlink">survey</SPAN></SPAN></A><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8"> </SPAN></SPAN><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8">so,</SPAN></SPAN><SPAN class="TextRun SCXW253825262 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW253825262 BCX8"> we can improve these blogs and webinars in the future.</SPAN></SPAN> The February webinar will cover the intersection of serverless applications and low-code. </SPAN></P> <P> </P> <H4 id="toc-hId--274219011"><STRONG>Resources</STRONG></H4> <P> </P> <P><STRONG>Power Apps x Azure websites </STRONG></P> <UL> <LI><A href="https://azure.microsoft.com/en-us/solutions/low-code-application-development/" target="_blank" rel="noopener noreferrer"><SPAN>LCAD on Azure website</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://powerapps.microsoft.com/en-us/power-apps-and-azure/" target="_blank" rel="noopener noreferrer"><SPAN>Azure plus Power Apps for pro developers I Microsoft Power Apps</SPAN></A><SPAN> </SPAN></LI> </UL> <P><STRONG>Power Platform x Azure API Management Integration </STRONG></P> <UL> <LI><A href="https://powerapps.microsoft.com/en-us/blog/azure-api-management-connector-on-the-power-platform/" target="_blank" rel="noopener noreferrer"><SPAN>Public Preview Blog Post</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://docs.microsoft.com/en-us/azure/api-management/export-api-power-platform" target="_blank" rel="noopener noreferrer"><SPAN>Step by Step Instruction</SPAN></A><SPAN> </SPAN></LI> </UL> <P><STRONG>Power Platform x GitHub Actions Automated SDLC workflows </STRONG></P> <UL> <LI><A href="https://powerapps.microsoft.com/en-us/blog/github-actions-for-the-power-platform-now-available-in-preview/" target="_blank" rel="noopener noreferrer"><SPAN>Public Preview Blog Post</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://docs.microsoft.com/en-us/power-platform/alm/devops-github-actions" target="_blank" rel="noopener noreferrer"><SPAN>GitHub Actions for Power Platform overview</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://docs.microsoft.com/en-us/power-platform/alm/devops-github-available-actions" target="_blank" rel="noopener noreferrer"><SPAN>Capabilities Documentation</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://www.youtube.com/watch?v=Bk4KpE_6YtY&feature=youtu.be" target="_blank" rel="noopener nofollow noreferrer"><SPAN>Source control and automated deployment - Demo</SPAN></A><SPAN> </SPAN><SPAN> </SPAN></LI> <LI><A href="https://github.com/microsoft/powerplatform-actions-lab" target="_blank" rel="noopener noreferrer"><SPAN>Hands on lab of source control and automated deployment demo</SPAN></A><SPAN> </SPAN></LI> <LI><A href="https://github.com/microsoft/powerplatform-actions" target="_blank" rel="noopener noreferrer"><SPAN>Power Platform x GitHub Actions repo</SPAN></A><SPAN> </SPAN></LI> </UL> <P> </P> </DIV> </DIV> </DIV></description> <pubDate>Fri, 05 Mar 2021 17:28:02 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/automate-application-lifecycle-management-with-github-actions/ba-p/2083829</guid> <dc:creator>riduncan</dc:creator> <dc:date>2021-03-05T17:28:02Z</dc:date> ... </item> <item> <title>[Mitigated] DevTest Labs Outage: Customers in certain regions might experience degraded performance</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-customers-in-certain-regions-might/ba-p/2064696</link> <description><DIV> <DIV><SPAN style="font-family: inherit;">Update at 12:30 AM UTC on 16 Jan 2021 - Issue has been mitigated and we do not expect customers to face any issues. We will update the blog post with the RCA soon. </SPAN></DIV> <DIV> </DIV> <DIV> <DIV><SPAN style="font-family: inherit;">Update at 19:30 UTC - We see decreasing number of failures but we are still keeping an eye out for any other potential issues. </SPAN></DIV> </DIV> <DIV><SPAN style="font-family: inherit;">-------------------------------------------------------------------------------------------------</SPAN></DIV> <DIV> </DIV> <DIV><SPAN style="font-family: inherit;"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="devtestlabsintro_960.jpg" style="width: 424px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/250206i4A727BF2A649AF64/image-dimensions/424x258?v=v2" width="424" height="258" role="button" title="devtestlabsintro_960.jpg" alt="devtestlabsintro_960.jpg" /></span></SPAN></DIV> <DIV> </DIV> <SPAN style="font-family: inherit;">We would like to inform you that, starting </SPAN><SPAN style="font-family: inherit;">07:59 UTC on 15 Jan 2021,</SPAN><SPAN style="font-family: inherit;"> </SPAN><FONT face="inherit">customers in the below mentioned regions might </FONT>experience<FONT face="inherit"> degraded performance while performing any major action on DevTest Labs. We are currently investigating the root cause and our team continues to work diligently on a fix. </FONT></DIV> <DIV> </DIV> <DIV> <UL> <LI>Australia Southeast</LI> <LI>Canada Central</LI> <LI>Central India</LI> <LI>East Asia</LI> <LI>East US</LI> <LI>Japan East</LI> <LI>Korea Central</LI> <LI>North Europe</LI> <LI>UK West</LI> <LI>West India</LI> </UL> <P> </P> <DIV><FONT face="inherit">We will update this post to share regular updates and will also share a root cause analysis once the fix is rolled out. </FONT>We apologize for the inconvenience and thank you for your patience. </DIV> <P> </P> <P>- DevTest Labs Team</P> </DIV></description> <pubDate>Thu, 28 Jan 2021 09:23:09 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-customers-in-certain-regions-might/ba-p/2064696</guid> <dc:creator>Sagar_Lankala</dc:creator> <dc:date>2021-01-28T09:23:09Z</dc:date> ... </item> <item> <title>[Customer Story] SharePoint Online Team leverages DevTest Labs to create Testing Environments</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781</link> <description><P>There are several teams within Microsoft which use <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/devtest-lab-overview" target="_blank" rel="noopener">Azure DevTest Labs</A> (DTL). <A href="https://www.microsoft.com/en-us/microsoft-365/sharepoint/collaboration" target="_blank" rel="noopener">SharePoint Online</A> (SPO) team at Microsoft has created a solution, built on DTL, to solve the problem of making SPO testing environments readily available to SharePoint engineers – securely, at scale and with high availability – leveraging the strengths of DevTest Labs and Azure.</P> <P> </P> <P>This blog post is the first in a series of posts that highlights key parts of this solution. The series enables anyone to build, configure and run a similar system on DTL. Each post will cover one core aspect of the SharePoint Online solution, with a brief description of the scenarios involved, and the strategies applied to solve them. Each comes equipped with architecture diagrams, walk-throughs and code samples, presented in a generic and reusable way. It is hoped that customers in the Azure community, desiring to solve similar problems for their users, can benefit from the content herein to create their own DTL solutions.</P> <P> </P> <H2>About SharePoint Online</H2> <P> </P> <P>For background, SharePoint Online is Microsoft’s document storage service for <A href="https://www.microsoft.com/en-us/microsoft-365" target="_blank" rel="noopener">Microsoft365</A>. It is a massive enterprise business. In addition to providing enterprise-class document management, it has team collaboration, portal sites and content management. It forms the document storage backbone for <A href="https://www.microsoft.com/en-us/microsoft-365/exchange/email" target="_blank" rel="noopener">Exchange Online</A>, <A href="https://teams.microsoft.com/edustart" target="_blank" rel="noopener">Teams</A> and <A href="https://www.microsoft.com/en-us/download/office.aspx" target="_blank" rel="noopener">Office applications</A> such as Word and Excel. As one example, when you save a document in Teams, it is stored in SPO under the hood. Fortune 500 companies, schools, governments and non-profits critically depend on SharePoint Online for their business, storing over 480 exabytes of their data in it.</P> <P><EM>If you would like to learn more about SharePoint Online and its potential application to your business, start <A href="https://www.microsoft.com/en-us/microsoft-365/buy/compare-all-microsoft-365-products" target="_blank" rel="noopener">here</A>. There are Microsoft365 subscriptions tailored for home, business, and institutional use.</EM></P> <P> </P> <H2>SharePoint Online Scenario</H2> <P> </P> <P>With over 1000 engineers working on an ever-evolving 140 MLOC codebase in SharePoint Online, <STRONG>integration testing</STRONG> is a critical part of the engineering workflow. At its core, SharePoint is a three-tier web application, featuring a web tier, a business logic tier and a data layer, each working in conjunction as a single service in data centers across the globe. Engineers working on it require safe, isolated simulation environments that function like scaled-down three-tier data center deployments so that they can deeply test their code before it goes worldwide.</P> <P>The SharePoint Online team has shrunk the core SPO components and services so that they all fit on a single, interactive virtual machine (VM) that simulates the full data center, but is stripped down to its essence. It is therefore much easier to deploy. These single-VM environments are well-suited to testing most SPO scenarios – of course core document storage and team collaboration, but notably scenarios involving interaction with Office or Teams. Using these VMs, code changes can be deployed, poked and prodded, and debugged as it interacts with these components and services – all well before the code is ultimately deployed for enterprise customers in production data centers.</P> <P> </P> <H2>Use of DevTest Labs</H2> <P> </P> <P>DevTest Labs provides “labs” of machines, intended to host pre-configured testing environments at scale. The SPO team has built a solution in DevTest Labs to host these single-VM SPO environments, giving engineers a private, isolated, safe, simulated data center in which to test their code.</P> <P>Breaking it down step-by-step, the scenario for SharePoint Online engineers is as follows:</P> <OL> <LI>An engineer wishes to test their code. They fetch a virtual machine (VM) from the DevTest Lab.</LI> <LI>The VM hosts a pre-configured single-VM SPO environment with a stable build.</LI> <LI>They log in, interact with the environment, and patch a new code change into place to do testing.</LI> <LI>When they are finished, they throw away their VM – they can always fetch a fresh one for their next iteration.</LI> </OL> <P>The complexity of building these single-VM SPO environments, with all services and components wired up correctly, is hidden from the lab user. The work is done before the VM is assigned to the engineer, saving them the time and effort. Environments are ready to use as they are. Engineers have the option to simply use them as-is, or optionally patch their private changes and onto the VM to see how it behaves. These single-VM environments are the heart of their inner loop debugging and integration testing.</P> <P>Today, about 500 engineers use the SPO integration lab on a monthly basis, with plans to grow this to 750 or more. Typically about 2,500 VMs are allocated at any one point in time, running in three different Azure regions around the world. Azure allows the solution to easily scale to meet growing demand.</P> <P> </P> <H3>Why DevTest Labs?</H3> <P> </P> <P>Certainly a solution of this nature can be created without DevTest Labs, using Azure VMs directly. However, DevTest Labs provides out-of-box features that save time and money in implementation and maintenance. These include:</P> <UL> <LI>Standard service grouping and administration</LI> <LI>Flexible and extensible <A href="https://azure.microsoft.com/en-us/services/#networking" target="_blank" rel="noopener">networking</A> and user connectivity</LI> <LI>Ability for lab users to claim pre-created VMs without going through the full creation process</LI> <LI><A href="https://azure.microsoft.com/en-us/documentation/articles/devtest-lab-set-lab-policy/" target="_blank" rel="noopener">Policies and thresholds</A> to manage costs by shutting unused machines down</LI> <LI><A href="https://azure.microsoft.com/en-us/documentation/articles/devtest-lab-add-vm-with-artifacts/" target="_blank" rel="noopener">DTL Artifacts</A> to reduce the time required to set up and configure virtual machines once created</LI> </UL> <P>The full feature set of Azure is also available to extend DevTest Labs where needed, but leveraging the native capabilities of DevTest Labs reduces the cost to build, maintain and extend the solution. It also sets the solution up for future improvements planned by the Azure team at Microsoft. In short, <STRONG>DevTest Labs is a quite natural fit for this use case</STRONG>, rather than reinventing the wheel.</P> <P><EM>If you haven’t tried DevTest Labs yet, <A href="https://go.microsoft.com/fwlink/?LinkId=627034&clcid=0x409" target="_blank" rel="noopener">click here</A> to create your first lab. DevTest Labs is a <A href="https://azure.microsoft.com/en-us/pricing/details/devtest-lab/" target="_blank" rel="noopener">free service</A>!</EM></P> <H2> </H2> <H2>Solution Architecture</H2> <P> </P> <P>The solution builds on DevTest Labs as its basis. It is an event-driven architecture, using Azure EventGrid and an Azure Function app. It uses Shared Image Gallery to host VM images and employs a Point-to-Site VPN for secure access to the network hosting the VMs. It has an easy-to-use interface for checkin/checkout that is hosted outside the Azure portal. It extends DevTest Labs policy and allows users to manage when machines are shut down, and even postpone shutting machines down, above the times assigned by Azure DevTest Labs policy. </P> <P>Below is a diagram covering the architecture. Starting from the left, we have an Image Service which is responsible for creating Azure Compute images with SPO pre-configured. Image Service pulls the latest build available, triggers the deployment, waits for success, and publishes the result to Azure Shared Image Gallery for general consumption by DevTest Labs. It then fires an event that, by way of Event Grid, triggers an Azure Function App.</P> <DIV id="lia-teaserTinyMceEditorSagar_Lankala_0" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <DIV id="tinyMceEditorSagar_Lankala_1" class="mceNonEditable lia-copypaste-placeholder"> </DIV> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Picture1.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/245507iC4443202A6A04FB6/image-size/large?v=v2&px=999" role="button" title="Picture1.png" alt="Picture1.png" /></span></P> <P> </P> <P>The Function App contains the business logic for the SPO solution, which extends the core functionality DevTest Labs natively provides. The Function App responds to the event by triggering VM creation in DevTest Labs, in accordance with desired VM pool targets. A VPN Gateway is configured to provide point-to-site VPN connectivity for end users, who use Azure VPN Client to ensure the communication between the lab user and the VMs is authenticated and secure.</P> <P>The solution created has potential application to a broad set of scenarios. The designs and architecture described should be beneficial to Azure customers wanting to build similar solutions on DevTest Labs, including what code to build and what components to configure for their applications.</P> <H2> </H2> <H2>Introducing This Blog Series</H2> <P> </P> <P>In several upcoming blog posts, we’ll cover the following topics: </P> <UL> <LI>Overview: How the SharePoint team leverages DevTest Labs <EM>(Current Blog Post)</EM></LI> <LI>Enabling an Event-Driven Architecture with DevTest Labs</LI> <LI>Leveraging Point-to-Site VPN with DevTest Labs</LI> <LI>Maintaining a Pool of Claimable VMs</LI> <LI>Building a Simple User Interface for DevTest Labs</LI> <LI>Enabling Shutdown notifications via Teams</LI> </UL> <P>Each blog post borrows the concepts and architecture from the SPO solution, boiled down and made generally accessible for re-use by the Azure community. The content of this blog series forms a set of templates for others to build the same types of solutions for their applications as the SharePoint Online team did for their engineers.</P> <P> </P> <P><FONT size="4"><STRONG>What's Next?</STRONG></FONT></P> <P> </P> <P>In forthcoming blog posts, the rest of the topics will be covered, starting with how to enable an event-driven architecture with DevTest Labs similar to the one described above. Please stay tuned!</P> <P> </P> <P>If you run into any problems with the content, or have any questions, please feel free to drop a comment below this post and we will respond. Your feedback is always welcome!</P> <P> </P> <P><STRONG>- Pete Harwood</STRONG>, Principal Engineering Manager, OneDrive and SharePoint Engineering Fundamentals at Microsoft</P></description> <pubDate>Sat, 15 May 2021 01:15:00 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/customer-story-sharepoint-online-team-leverages-devtest-labs-to/ba-p/2050781</guid> <dc:creator>Sagar_Lankala</dc:creator> <dc:date>2021-05-15T01:15:00Z</dc:date> ... </item> <item> <title>#DevDecember Week 5: It’s a (festive) wrap</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-5-it-s-a-festive-wrap/ba-p/1834830</link> <description><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week5.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/239463i9C0D2E6CB09CF544/image-size/large?v=v2&px=999" role="button" title="Blog-images_week5.png" alt="Blog-images_week5.png" /></span></SPAN></P> <P><SPAN>The end of #DevDecember is near, and we’re ready to kick off 2021. To help you mark the transition and start anew, we’ve created digital New Year postcards in three designs that you can adapt and share with fellow devs, friends, and family. Download the New Year cards</SPAN><FONT color="#000000"> on our </FONT><U><FONT color="#FF0000"><SPAN><STRONG><A href="https://aka.ms/DevDecember20Home" target="_self" rel="noopener noreferrer">#DevDecember homepage.</A></STRONG></SPAN></FONT></U></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Slide_8_1.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/239464iDC97AE1A044CDC85/image-size/medium?v=v2&px=400" role="button" title="Slide_8_1.png" alt="Slide_8_1.png" /></span></P> <P> </P> <P><STRONG>Before we hit send, let’s take one more look in the rearview mirror. </STRONG><SPAN> </SPAN></P> <P><SPAN>Each week, we asked for your #DevDecember thoughts, starting with the ways you grew this year as developer, and moving on to what communities had your back, what inspired you, and what projects and challenges you were most looking forward to in 2021.</SPAN><SPAN> </SPAN><A href="https://twitter.com/hashtag/DevDecember" target="_blank" rel="noopener"><SPAN>Check out what fellow devs shared</SPAN></A><SPAN>.</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>Week 1</SPAN><SPAN>: </SPAN><SPAN>What helped us grow</SPAN><SPAN> </SPAN><SPAN>professionally</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>Beginner's series to JavaScript </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Taking your first steps toward mastering a new programming language is exciting, but it can also feel overwhelming. To help you get started with JavaScript, we've created short and easy-to-consume videos that break down the key concepts you need to know.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured1" target="_blank" rel="noopener"><SPAN>Start watching the series</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><SPAN> </SPAN><STRONG><SPAN>Agrotech</SPAN></STRONG><STRONG><SPAN> </SPAN></STRONG><STRONG><SPAN>IoT</SPAN></STRONG><STRONG><SPAN> workshop</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Want to grow your professional </SPAN><SPAN>IoT</SPAN><SPAN> skills? Your first stop may be the garden. Get your hands dirty with a workshop on how to build an internet-connected device to gather soil moisture data that will tell you (by lighting up an LED) if a plant needs watering.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured3" target="_blank" rel="noopener"><SPAN>Start digging in</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><SPAN> </SPAN><STRONG><SPAN>Bringing browser developer tools to Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>One of our favorite releases in 2020 was the Microsoft Edge Tools for VS Code extension, designed to simplify workflows. Connect to an existing browser instance, start a new one, or use a “headless” browser.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured4" target="_blank" rel="noopener"><SPAN>Explore the extension</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><STRONG><SPAN>Building a first "Power Apps"</SPAN></STRONG><STRONG><SPAN> app</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>@JoeCamp13</SPAN><SPAN> built an app to track inventory entirely with Power Apps. His explanation of how he did it, is illustrated with screenshots so you can follow along.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured2" target="_blank" rel="noopener"><SPAN>Start the walkthrough</SPAN><SPAN><BR /></SPAN></A><SPAN> </SPAN></P> <P><SPAN>Week 2:</SPAN><SPAN> </SPAN><SPAN>How the community came</SPAN><SPAN> </SPAN><SPAN>together</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>Live coding community</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Learn from the best on Twitch! Watch devs code live, and connect and ask questions in real time. Find out how joining Microsoft’s virtual community can speed up learning new skills and languages.</SPAN><SPAN> <BR /></SPAN><A href="https://channel9.msdn.com/Events/Start-Dev-Change/Start-Dev-Change/Intro-to-Twitch-Join-the-Live-Coding-Community" target="_blank" rel="noopener"><SPAN>Watch an intro video on Twitch and live coding</SPAN></A><SPAN> (25 min)</SPAN><SPAN> <BR /></SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>The ReadMe Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Behind the open-source code used by millions of people are the unseen efforts of countless contributors, who put in long hours to build software, fix issues, and more. Meet some of the people making contributions, including veterans who find the teamwork required for open-source collaboration a natural fit. </SPAN><SPAN> </SPAN></P> <P><A href="https://github.com/readme" target="_blank" rel="noopener"><SPAN>Read their inspiring stories</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Remote collaboration with Live Share in Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>With Live Share, you can instantly share your project with fellow developers. No need to clone a repo or set up the environment. It’s a one-stop, real-time collaboration tool for pairing, code reviews, technical interviews, boot camps, and more.</SPAN><SPAN> </SPAN></P> <P><A href="https://www.youtube.com/watch?v=A2ceblXTBBc" target="_blank" rel="noopener">Watch a short video on how to set up Live Share</A><SPAN> (5 min)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>From the open source cookbook</SPAN></STRONG></P> <P><SPAN>Cooking up code is a bit like developing food recipes. The more people who test your recipe, the more it's likely to guarantee that what lands on your plate is what you intended.</SPAN><SPAN> </SPAN></P> <P><A href="https://microsoft.github.io/DevCookbook/" target="_blank" rel="noopener"><SPAN>Browse our crowdsourced cookbook with free code recipes</SPAN></A><SPAN> </SPAN></P> <P><SPAN> <BR /></SPAN><SPAN>Week 3:</SPAN><SPAN> </SPAN><SPAN>What inspired </SPAN><SPAN>us</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>IoT</SPAN></STRONG><STRONG><SPAN> and Azure help with family chores </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>With everyone at home, dishes pile up faster, garbage accumulates, and chores must be done more frequently. To keep track in real time what chores need to be completed and by when, Scott </SPAN><SPAN>Hanselman</SPAN><SPAN> built an </SPAN><SPAN>IoT</SPAN><SPAN> solution, using sensors, a web-based </SPAN><SPAN>heatmap</SPAN><SPAN>, and notifications. </SPAN><SPAN> </SPAN></P> <P><A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-iot-and-azure-to-help-with-family-chores/ba-p/1809444" target="_blank" rel="noopener"><SPAN>Check out how to build Chores </SPAN><SPAN>IoT</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>The Developer Activity Book </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Taking your mind off what you’re working on is sometimes the best way to get inspiration. The Developer Activity Book features family-friendly fun, including seven coloring pages, a crossword puzzle, a word search, and a logic puzzle. </SPAN><SPAN> </SPAN></P> <P><A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-developer-activity-book-for-remotedevlife/ba-p/1432196" target="_blank" rel="noopener"><SPAN>Get the Developer Activity Book</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>2020 Imagine Cup World Championship</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>The Imagine Cup World Championship encourages students across the globe to innovate using Microsoft Azure. Finalist teams created technological solutions to tackle pressing global issues. Get inspired by their passion and the incredible projects they created.</SPAN><SPAN> </SPAN></P> <P><A href="https://www.youtube.com/watch?v=ssxYilfoomQ&feature=youtu.be" target="_blank" rel="noopener"><SPAN>Watch the recap</SPAN></A><SPAN> (3 minutes)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Plastic Origins Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Most of the plastic that ends up in the oceans comes from inland sources. In this episode of </SPAN><SPAN>CodeStories</SPAN><SPAN>, Seth Juarez shows how developers can use AI to address this problem by monitoring </SPAN><SPAN>microplastic</SPAN><SPAN> and tracking ocean-bound plastic waste.</SPAN><SPAN> </SPAN></P> <P><A href="https://channel9.msdn.com/Shows/CodeStories/Microsoft-France-Surfrider-EU--Plastic-Origins-Project" target="_blank" rel="noopener"><SPAN>Watch the video</SPAN></A><SPAN> (13 minutes)</SPAN><SPAN> <BR /></SPAN><SPAN> </SPAN></P> <P><SPAN>Week 4:</SPAN><SPAN> </SPAN><SPAN>Looking forward to new</SPAN><SPAN> </SPAN><SPAN>challenges</SPAN><SPAN> </SPAN></P> <P><STRONG><SPAN>Microsoft Learn Student Ambassadors </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>In 2020, we launched the Microsoft Learn Student Ambassadors program, where students can join a global community of peers, connect with mentors, learn the skills they need to land a dream job, and make a difference. Applications are open year-round, and we will accept hundreds more Student Ambassadors in 2021.</SPAN><SPAN> <BR /></SPAN><A href="https://techcommunity.microsoft.com/t5/student-developer-blog/welcome-microsoft-learn-student-ambassadors/ba-p/1570828" target="_blank" rel="noopener">Learn more about the program</A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Speed up development</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>What does it take to go from idea to development without detours? Best-in-class tools and product management are two of the things that boost velocity, a new McKinsey report found. Find out how to get stuff done faster in 2021 with this and other real-world strategies. </SPAN><SPAN> </SPAN></P> <P><A href="https://azure.microsoft.com/en-us/blog/unleash-the-full-potential-of-your-developer-teams-and-increase-developer-velocity/" target="_blank" rel="noopener"><SPAN>Read the McKinsey report on how to boost developer velocity</SPAN></A></P> <P> </P> <P><STRONG><SPAN>Learning to code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Intimidated by the idea of learning a new programming language? We’ve got a few ways to make it easier so 2021 is the year you make it happen. Download Visual Studio Code, then dive into tutorials and other resources that you can go through at your own pace.</SPAN><SPAN> </SPAN></P> <P><A href="https://code.visualstudio.com/learntocode" target="_blank" rel="noopener"><SPAN>Learn to program with Visual Studio Code</SPAN></A></P> <P> </P> <P><STRONG><SPAN>Predicting meteor showers using Python and VS Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Shooting for the moon in 2021? This session may provide inspiration. </SPAN><SPAN>Dr</SPAN><SPAN> G explains what meteor showers are and how data science is used to predict these events. No coding experience required.</SPAN><SPAN> </SPAN></P> <P><A href="https://www.youtube.com/watch?v=Aln9p6farRg" target="_blank" rel="noopener"><SPAN>Watch the recorded live stream</SPAN></A><SPAN> (50 min) </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>Finally, before we raise a glass, cup, or mug to </SPAN><SPAN>2021</SPAN><SPAN>, we’d like to thank </SPAN><SPAN>all </SPAN><SPAN>of you </SPAN><SPAN>who have shared</SPAN><SPAN> </SPAN><A href="https://twitter.com/hashtag/DevWithABev" target="_blank" rel="noopener"><SPAN>#</SPAN><SPAN>D</SPAN><SPAN>ev</SPAN><SPAN>W</SPAN><SPAN>ith</SPAN><SPAN>AB</SPAN><SPAN>ev</SPAN></A><SPAN> pictures during the month.</SPAN><SPAN> We’ve discovered a few new beverages and flavors to </SPAN><SPAN>sip</SPAN><SPAN> </SPAN><SPAN><img class="lia-deferred-image lia-image-emoji" src="https://techcommunity.microsoft.com/html/@8341BD79091AF36AA2A09063B554B5CD/images/emoticons/smile_40x40.gif" alt=":smile:" title=":smile:" /></SPAN><SPAN>.</SPAN><SPAN> </SPAN><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><FONT color="#800080"><SPAN>Here’s to</SPAN><SPAN> new projects and new adventures</SPAN><SPAN>!</SPAN><SPAN> H</SPAN>appy New Year<SPAN>!</SPAN><SPAN> </SPAN></FONT></P></description> <pubDate>Fri, 01 Jan 2021 10:05:20 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-5-it-s-a-festive-wrap/ba-p/1834830</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2021-01-01T10:05:20Z</dc:date> ... </item> <item> <title>#DevDecember Week 4 Recap: Looking forward</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-4-recap-looking-forward/ba-p/1834829</link> <description><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week4.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237579i8C81B976DAB62F1E/image-size/large?v=v2&px=999" role="button" title="Blog-images_week4.png" alt="Blog-images_week4.png" /></span></SPAN></P> <P><SPAN class="TextRun SCXW119958490 BCX0"><SPAN class="NormalTextRun SCXW119958490 BCX0">2021 is right around the corner, and<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW119958490 BCX0"><SPAN class="NormalTextRun SCXW119958490 BCX0">with it comes</SPAN></SPAN><SPAN class="TextRun SCXW119958490 BCX0"><SPAN class="NormalTextRun SCXW119958490 BCX0"><SPAN> </SPAN>the optimism a new year brings. A clean slate, a new story to write. </SPAN></SPAN><SPAN class="EOP SCXW119958490 BCX0"> </SPAN></P> <P> </P> <P><SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW68609620 BCX0">So</SPAN><SPAN class="NormalTextRun SCXW68609620 BCX0"> this week, w</SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">e invite you to share </SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">what </SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">you hope to achieve in 2021</SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">—</SPAN></SPAN><SPAN class="TextRun SCXW68609620 BCX0"><SPAN class="NormalTextRun SCXW68609620 BCX0">and the activities that will get you there. </SPAN></SPAN><SPAN class="EOP SCXW68609620 BCX0"> </SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">Do you plan<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">to</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN>spend more time listening in and sharing on live stream channels? Are there a</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">reas you want to brush up on</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">? Do you have projects and goals you can't wait to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">work on?</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">Use<SPAN> </SPAN></SPAN></SPAN><A href="https://aka.ms/DevDecember20Home" target="_self"><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">our</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun Underlined SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">fill-in-the-blank</SPAN></SPAN></A><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN>to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">share</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN>your</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">can-d</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">o items<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">for 2021</SPAN></SPAN><SPAN class="TextRun SCXW36221302 BCX0"><SPAN class="NormalTextRun SCXW36221302 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW36221302 BCX0"> </SPAN></P> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_8_2.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/239460i234714BFBD0B43AC/image-size/medium?v=v2&px=400" role="button" title="Slide_8_2.png" alt="Slide_8_2.png" /></span></SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">W</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">e shared<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">these resources<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">recently</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">t</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">hat support<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">developer</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0"><SPAN> </SPAN>efforts</SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">, whether you're just starting out or<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW89562749 BCX0"><SPAN class="NormalTextRun SCXW89562749 BCX0">are ready to kick it up a notch:</SPAN></SPAN><SPAN class="EOP SCXW89562749 BCX0"> </SPAN></P> <P><STRONG><SPAN>Microsoft Learn Student Ambassadors </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">In 2020</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">, we launched the Microsoft Learn Student Ambassadors program, where students can join a global community of peers, connect with mentors, learn the skills they need to land a dream job, and make a difference. Applications are open year-round</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">, and we will acce</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127">pt hundreds more Student Ambassadors</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW171597127"><SPAN class="NormalTextRun BCX0 SCXW171597127"> in 2021</SPAN></SPAN></SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured13" target="_blank" rel="noopener">Learn more about the program</A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Speed up development</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">What does it take to go from idea to development without detours? Best-in-class tools and product management are two<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">of the things that boost veloci</SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">ty, a new McKinsey report found</SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">. Find out how to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0">get stuff done faster</SPAN></SPAN><SPAN class="TextRun SCXW133027991 BCX0"><SPAN class="NormalTextRun SCXW133027991 BCX0"><SPAN> </SPAN>in 2021 with this and other real-world strategies. </SPAN></SPAN><SPAN class="EOP SCXW133027991 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured14 " target="_blank" rel="noopener">Read the McKinsey report on how to boost developer velocity</A><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Learning to code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">Intimidated by the idea of learning a<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">new<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">programming language?<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">We’ve got<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">a few ways to make it easier</SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0"><SPAN> </SPAN>so 2021 is the year you make it happen</SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">. Download<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">Visual Studio Code</SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">, then dive into tutorials and other resources<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">that<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW76440558 BCX0"><SPAN class="NormalTextRun SCXW76440558 BCX0">you can go through at your own pace.</SPAN></SPAN><SPAN class="EOP SCXW76440558 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured15" target="_blank" rel="noopener">Learn to program with Visual Studio Code</A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Predicting meteor showers using Python and Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">Shooting for the moon<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">in 2021</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">? T</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">his session may<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">provide</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0"><SPAN> </SPAN>inspiration. Dr G explains what meteor showers are and how data science is used to predict<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">these</SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW235576590 BCX0"><SPAN class="NormalTextRun SCXW235576590 BCX0">events. No coding experience required.</SPAN></SPAN><SPAN class="EOP SCXW235576590 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured16" target="_blank" rel="noopener"><SPAN>Watch the recorded live stream</SPAN></A><SPAN> (50 min) </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>We’ve got one more thing to mention before we close out week 4 </SPAN><SPAN>of #DevDecember:</SPAN><SPAN> </SPAN></P> <UL> <LI><SPAN>#DevWithABev</SPAN><SPAN> is still going strong</SPAN><SPAN>. It’s simple. Snap a pic of you with your fav bev and post on Twitter with the hashtag</SPAN><SPAN> #DevWithABev.</SPAN><SPAN> </SPAN></LI> </UL> <P> </P> <P><SPAN>There are </SPAN><SPAN>only </SPAN><SPAN>a few more days left in 2020 </SPAN><SPAN>but</SPAN><SPAN> w</SPAN><SPAN>e’</SPAN><SPAN>ve got a final surprise in store</SPAN><SPAN>—</SPAN><SPAN>keep follow</SPAN><SPAN>ing #DevDecember </SPAN><SPAN>to find out what it is.</SPAN><SPAN> </SPAN></P> <P><SPAN> <BR /></SPAN><SPAN>Missed </SPAN><SPAN>a day or a week</SPAN><SPAN>? Head over to our <STRONG><A href="https://aka.ms/DevDecember20Home" target="_self">#DevDecember homepage</A></STRONG></SPAN><SPAN>.</SPAN><SPAN> </SPAN></P></description> <pubDate>Fri, 08 Jan 2021 01:02:23 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-4-recap-looking-forward/ba-p/1834829</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2021-01-08T01:02:23Z</dc:date> ... </item> <item> <title>#DevDecember Week 3 Recap: Inspiration</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-3-recap-inspiration/ba-p/1834828</link> <description><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Blog-images_week3.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235277iC313707F6EC166D2/image-size/large?v=v2&px=999" role="button" title="Blog-images_week3.png" alt="Blog-images_week3.png" /></span></SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">This week</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0"><SPAN> </SPAN>in #DevDecember</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">, we<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">had the hard job of selecting just a handful of sources of inspiration</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0"><SPAN> </SPAN>from a big grab bag of options</SPAN></SPAN><SPAN class="TextRun SCXW26024580 BCX0"><SPAN class="NormalTextRun SCXW26024580 BCX0">. </SPAN></SPAN><SPAN class="EOP SCXW26024580 BCX0"> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_20_1.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237444i851F900A2219C0F2/image-size/medium?v=v2&px=400" role="button" title="Slide_20_1.png" alt="Slide_20_1.png" /></span><SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">You’ll find </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">out what we went for below, but there were so many other excitin</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">g things we could have featured, so </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">we hope you will </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">add the things you prized most this year</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">. </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">What projects </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">impressed </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">you</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">?</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0"> What tools </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">did you like using</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">? </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">Use our </SPAN></SPAN><SPAN class="TextRun Underlined SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">fill-in-the-blank</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0"> to s</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">hare </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">what motivated and propelled you on in 2020</SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">, tagged </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">as #DevDecember. </SPAN></SPAN><SPAN class="TextRun SCXW154441543 BCX0"><SPAN class="NormalTextRun SCXW154441543 BCX0">Thanks in advance for the inspiration.</SPAN></SPAN><SPAN class="EOP SCXW154441543 BCX0"> </SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW224080501 BCX0"><SPAN class="NormalTextRun SCXW224080501 BCX0">Now, let’s review what<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW224080501 BCX0"><SPAN class="NormalTextRun SCXW224080501 BCX0">we featured in week 3</SPAN></SPAN><SPAN class="TextRun SCXW224080501 BCX0"><SPAN class="NormalTextRun SCXW224080501 BCX0">:</SPAN></SPAN><SPAN class="EOP SCXW224080501 BCX0"> </SPAN></P> <P><STRONG><SPAN>IoT</SPAN></STRONG><STRONG><SPAN> and Azure h</SPAN></STRONG><STRONG><SPAN>elp </SPAN></STRONG><STRONG><SPAN>w</SPAN></STRONG><STRONG><SPAN>ith </SPAN></STRONG><STRONG><SPAN>f</SPAN></STRONG><STRONG><SPAN>amily </SPAN></STRONG><STRONG><SPAN>c</SPAN></STRONG><STRONG><SPAN>hores </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW113139885 BCX0"><SPAN class="NormalTextRun SCXW113139885 BCX0">With everyone at home, dishes pile up faster, garbage accumulates, and chores must be done more frequently. To keep track in real time what<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW113139885 BCX0">chores</SPAN><SPAN class="NormalTextRun SCXW113139885 BCX0"><SPAN> </SPAN>need to be completed and<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW113139885 BCX0"><SPAN class="NormalTextRun SCXW113139885 BCX0">by<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW113139885 BCX0"><SPAN class="NormalTextRun SCXW113139885 BCX0">when, Scott Hanselman built an IoT solution, using sensors, a web-based heatmap, and notifications. </SPAN></SPAN><SPAN class="EOP SCXW113139885 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured9" target="_self"><SPAN>Check out how to build Chores </SPAN><SPAN>IoT</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>The Developer Activity Book </SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">Taking your mind of</SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">f</SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0"><SPAN> </SPAN>what you’re working on is sometimes the best way to get inspiration. The Developer Activity Book features<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">family-friendly fun, including<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">seven<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW123811758 BCX0"><SPAN class="NormalTextRun SCXW123811758 BCX0">coloring pages, a crossword puzzle, a word search, and a logic puzzle. </SPAN></SPAN><SPAN class="EOP SCXW123811758 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured10" target="_self"><SPAN>Get the Developer Activity Book</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>2020 Imag</SPAN></STRONG><STRONG><SPAN>ine Cup World Championship</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">The Imagine Cup<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">World Championship encourages</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN>students across the globe to innovate using Microsoft Azure. Finalist teams created tech</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">nological</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN>solutions<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">tackl</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">e</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN>pressing global issues</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">Get inspired by</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">their passion<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">and<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">the incredible projects they created</SPAN></SPAN><SPAN class="TextRun SCXW118449384 BCX0"><SPAN class="NormalTextRun SCXW118449384 BCX0">.</SPAN></SPAN><SPAN class="EOP SCXW118449384 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured11" target="_self"><SPAN>Watch the recap</SPAN></A><SPAN> (3 minutes)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Plastic Origins Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">Most of the plastic that ends up in the oceans comes from inland sources. In this episode of<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW132318438 BCX0">CodeStories</SPAN><SPAN class="NormalTextRun SCXW132318438 BCX0">,<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">Seth Juarez</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0"><SPAN> </SPAN>shows how<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">developers<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">can use AI to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">address th</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">is</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0"><SPAN> </SPAN>problem by monitoring<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">microplastic and tracking<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">ocean</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">-</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0">bound</SPAN></SPAN><SPAN class="TextRun SCXW132318438 BCX0"><SPAN class="NormalTextRun SCXW132318438 BCX0"><SPAN> </SPAN>plastic waste.</SPAN></SPAN><SPAN class="EOP SCXW132318438 BCX0"> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured12" target="_self"><SPAN>Watch the video</SPAN></A><SPAN> (13 minutes)</SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">Next </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">up is </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">week 4 of</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> #DevDecember</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">. We’ll cover</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> one of our favorite topics: </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">the</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> projects and</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">technologies</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">we’re most </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">look</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">ing</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> forward to</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW222089784"><SPAN class="NormalTextRun BCX0 SCXW222089784">in 2021.</SPAN></SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">Meanwhile, w</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">e’re<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">hoping you’ll upload a</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>#DevWithABev selfie</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>if you haven’t already</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">What’s this about? Simply put,<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW60259339 BCX0">devs</SPAN><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>take a picture of themselves with a<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun SpellingErrorV2 SCXW60259339 BCX0">bev</SPAN><SPAN class="NormalTextRun SCXW60259339 BCX0">. Hot or cold, commonplace or original, we like it all. Share<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">and</SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0"><SPAN> </SPAN>tag your pic<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW60259339 BCX0"><SPAN class="NormalTextRun SCXW60259339 BCX0">#DevWithABev.</SPAN></SPAN><SPAN class="EOP SCXW60259339 BCX0"> </SPAN></P> <P> </P> <P><SPAN>Missed some </SPAN><SPAN>or all </SPAN><SPAN>of</SPAN><SPAN> </SPAN><SPAN>#</SPAN><SPAN>DevDecember</SPAN><SPAN>? Catch up on </SPAN><STRONG><A href="https://aka.ms/DevDecember20Home" target="_self">our #DevDecember homepage</A> </STRONG><SPAN>for more info! </SPAN></P></description> <pubDate>Fri, 01 Jan 2021 10:05:48 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-3-recap-inspiration/ba-p/1834828</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2021-01-01T10:05:48Z</dc:date> ... </item> <item> <title>Migrating Azure AD B2C integration going from .NET Core 3.1 to .NET 5</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/migrating-azure-ad-b2c-integration-going-from-net-core-3-1-to/ba-p/1983575</link> <description><P>This year's release of .NET happened a few weeks ago with .NET 5. (Core is gone from the name now.) I have some sample code that works as sort of a boilerplate to verify basic functionality without containing anything fancy. One of those is a web app where one can sign in through Azure AD B2C. Logically I went ahead and updated from .NET Core 3.1 to .NET 5 to see if everything still works.</P><P> </P><P>It works, but there are recommendations that you should put in some extra effort as the current NuGet packages are on their way to deprecation. Not like "will stop working in two weeks", but might as well tackle it now.</P><P> </P><P>The Microsoft Identity platform has received an overhaul in parallel to .NET and a little while before the .NET 5 release the Identity team released <EM>Microsoft.Identity.Web</EM> packages for handling auth in web apps. (Not just for Azure AD B2C, but identity in general.)</P><P> </P><P>Why is this upgrade necessary? Well, the old libraries were based on the Azure AD v1 endpoints, but these new libraries fully support the v2 endpoints. Which is great when going for full compliance with the OAuth and OpenID Connect protocols.</P><P> </P><P>Using my sample at <A href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/aad-b2c-custom_policies-dotnet-core" target="_blank" rel="noopener">https://github.com/ahelland/Identity-CodeSamples-v2/tree/master/aad-b2c-custom_policies-dotnet-core</A> I wanted to do a test run from old to new.</P><P> </P><P>The current code is using <EM>Microsoft.AspNetCore.Authentication.AzureADB2C.UI</EM>. (You can take a look at the code for the <A title="Upgraded to .NET 5" href="https://github.com/ahelland/Identity-CodeSamples-v2/tree/b6d8def3dcf8c46e38a9419a9dc88d5eb327501b/aad-b2c-custom_policies-dotnet-core" target="_blank" rel="noopener">Upgraded to .NET 5</A> checkpoint for reference.)</P><P> </P><P>You can start by using NuGet to download the latest version of <EM>Microsoft.Identity.Web</EM> and <EM>Microsoft.Identity.Web.UI</EM>. (1.4.0 when I'm typing this.) You can also remove <SPAN><EM>Microsoft.AspNetCore.Authentication.AzureADB2C.UI</EM> while you're at it.</SPAN></P><P> </P><P>In <EM>Startup.cs</EM> you should make the following changes:</P><P>Replace</P><P> </P><LI-CODE lang="csharp">services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme) .AddAzureADB2C(options => Configuration.Bind("AzureADB2C", options)).AddCookie();</LI-CODE><P> </P><P>With</P><P> </P><LI-CODE lang="csharp">services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureADB2C"));</LI-CODE><P> </P><P> </P><P>And change</P><P> </P><LI-CODE lang="csharp">services.AddRazorPages(); </LI-CODE><P> </P><P>To</P><P> </P><LI-CODE lang="csharp">services.AddRazorPages().AddMicrosoftIdentityUI();</LI-CODE><P> </P><P> </P><P><SPAN>If you have been doing "classic"</SPAN><SPAN> Azure AD apps you will notice how B2E and B2C are now almost identical. Seeing how they both follow the same set of standards this makes sense. As well as making it easier for .NET devs to support both internal and external facing authentication.</SPAN></P><P> </P><P>B2C has some extra logic in the sense that the different policies drive you to different endpoints, so the UI has to have awareness of this. And you need to modify a few things in the views.</P><P> </P><P>In <EM>LoginPartial.cshtml</EM>:</P><P>Change</P><P> </P><LI-CODE lang="csharp">@using Microsoft.AspNetCore.Authentication.AzureADB2C.UI @using Microsoft.Extensions.Options @inject IOptionsMonitor<AzureADB2COptions> AzureADB2COptions @{ var options = AzureADB2COptions.Get(AzureADB2CDefaults.AuthenticationScheme); }</LI-CODE><P> </P><P>To</P><P> </P><LI-CODE lang="csharp">@using Microsoft.Extensions.Options @using Microsoft.Identity.Web @inject IOptions<MicrosoftIdentityOptions> AzureADB2COptions @{ var options = AzureADB2COptions.Value; }</LI-CODE><P> </P><P> </P><P>And change the asp-area in links from using AzureADB2C:</P><P> </P><LI-CODE lang="csharp"><a class="nav-link text-dark" asp-area="AzureADB2C" asp-controller="Account" asp-action="SignOut">Sign out</a></LI-CODE><P> </P><P>To using MicrosoftIdentity:</P><P> </P><LI-CODE lang="csharp"><a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a></LI-CODE><P> </P><P> </P><P> </P><P> </P><P>And that's all there is to it :)</img></P><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Azure AD B2C SignUp" style="width: 241px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/240107i07730500C0838E23/image-size/medium?v=v2&px=400" role="button" title="SignUp.png" alt="Azure AD B2C SignUp" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">Azure AD B2C SignUp</span></span></P><P> </P><P> </P><P>Now this is a fairly stripped down sample app without the complexity of a real world app, but this was a rather pain free procedure for changing the identity engine in a web app.</P><P> </P></description> <pubDate>Mon, 14 Dec 2020 17:00:00 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/migrating-azure-ad-b2c-integration-going-from-net-core-3-1-to/ba-p/1983575</guid> <dc:creator>Andreas Helland</dc:creator> <dc:date>2020-12-14T17:00:00Z</dc:date> ... </item> <item> <title>#DevDecember Week 2 Recap: Community</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-2-recap-community/ba-p/1834827</link> <description><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week2.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234746i32908191DA073641/image-size/large?v=v2&px=999" role="button" title="Blog-images_week2.png" alt="Blog-images_week2.png" /></span></SPAN></P> <P><SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">When you're starting a </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">new dev </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">project or </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">tackling</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">coding problems</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">, </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">it helps</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">t</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">o build on the knowledge of others. In 2020 especially, </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">a helping hand </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">was</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">more than welcome</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0">!</SPAN></SPAN><SPAN class="TextRun SCXW168876321 BCX0"><SPAN class="NormalTextRun SCXW168876321 BCX0"> </SPAN></SPAN><SPAN class="EOP SCXW168876321 BCX0"> </SPAN> </SPAN></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_18_1_Recap.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235806iCC2C65DAD6A12398/image-size/medium?v=v2&px=400" role="button" title="Slide_18_1_Recap.png" alt="Slide_18_1_Recap.png" /></span><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW95868378 BCX0 DefaultHighlightTransition">So</SPAN><SPAN class="NormalTextRun SCXW95868378 BCX0"><SPAN> </SPAN>i</SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">n our second week of #DevDecember, we<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">are taking<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">some time to<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">celebrate the efforts of<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">the</SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0">dev community.</SPAN></SPAN><SPAN class="TextRun SCXW95868378 BCX0"><SPAN class="NormalTextRun SCXW95868378 BCX0"> </SPAN></SPAN><SPAN class="EOP SCXW95868378 BCX0"> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">We’d love to hear how the dev community came through for you in 2020.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">Did you</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>get assistance</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>learn</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">ing</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>a new language</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">?</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>Did someone else inspire you</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">r project</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">?</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">Share your version of</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0"><SPAN> </SPAN>this week’s fill-</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">in-</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">the-</SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">blank<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW51787313 BCX0"><SPAN class="NormalTextRun SCXW51787313 BCX0">and tag your thoughts as #DevDecember. </SPAN></SPAN><SPAN class="EOP SCXW51787313 BCX0"> </SPAN></P> <P> </P> <P>Now, let's review this week’s highlights: </P> <P><STRONG><SPAN>L</SPAN></STRONG><STRONG><SPAN>ive </SPAN></STRONG><STRONG><SPAN>coding c</SPAN></STRONG><STRONG><SPAN>ommunity</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Learn from the best on Twitch</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">!</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Watch </SPAN><SPAN class="NormalTextRun SpellingErrorV2 BCX0 SCXW1136063">devs</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> code </SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 BCX0 SCXW1136063">live, </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 BCX0 SCXW1136063">and</SPAN><SPAN class="NormalTextRun BCX0 SCXW1136063"> connect and </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">ask questions</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> in real</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">time</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">. Find out how</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> joining</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Microsoft’s </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">virtual communit</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">y</SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> can speed up </SPAN></SPAN><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">learning new skills and languages.</SPAN></SPAN><SPAN class="LineBreakBlob BlobObject DragDrop BCX0 SCXW1136063"><SPAN class="BCX0 SCXW1136063"> </SPAN><BR /></SPAN><A href="https://aka.ms/DevEdCalDec20featured6" target="_blank" rel="noopener noreferrer"><SPAN class="TextRun Underlined BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063">Watch an intro video on Twitch and live coding</SPAN></SPAN></A><SPAN class="TextRun BCX0 SCXW1136063"><SPAN class="NormalTextRun BCX0 SCXW1136063"> (25 min)</SPAN></SPAN></SPAN></P> <P> </P> <P><STRONG><SPAN>The ReadMe Project</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Behind the </SPAN><SPAN>open</SPAN><SPAN>-</SPAN><SPAN>source code used by millions of people are the unseen efforts of </SPAN><SPAN>countless </SPAN><SPAN>contributors</SPAN><SPAN>, who </SPAN><SPAN>put in long hours to build software, fix issues, and more. </SPAN><SPAN>Meet</SPAN><SPAN> some of the </SPAN><SPAN>people making contributions, including veterans</SPAN><SPAN> who find the teamwork required for open source collaboration </SPAN><SPAN>a natural fit</SPAN><SPAN>.</SPAN><SPAN> </SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured5" target="_blank" rel="noopener"><SPAN>Read their inspiring stories</SPAN></A><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>Remote collaboration </SPAN></STRONG><STRONG><SPAN>with Live Share in</SPAN></STRONG><STRONG><SPAN> </SPAN></STRONG><STRONG><SPAN>Visual Studio Code</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>With Live Share</SPAN><SPAN>,</SPAN><SPAN> you can instantly share your project with fellow dev</SPAN><SPAN>eloper</SPAN><SPAN>s. No need to clone a repo or set up the environment</SPAN><SPAN>.</SPAN><SPAN> </SPAN><SPAN>It’s a one-stop, r</SPAN><SPAN>eal-time collaboration </SPAN><SPAN>tool</SPAN><SPAN> </SPAN><SPAN>for pairing, code reviews, technical interviews, boot</SPAN><SPAN> </SPAN><SPAN>camps</SPAN><SPAN>,</SPAN><SPAN> and more</SPAN><SPAN>.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured7" target="_self">Watch a short video on how to set up Live Share</A><SPAN> </SPAN><SPAN>(5 min)</SPAN><SPAN> </SPAN></P> <P> </P> <P><STRONG><SPAN>From the </SPAN></STRONG><STRONG><SPAN>open source</SPAN></STRONG><STRONG><SPAN> kitchen</SPAN></STRONG><SPAN> </SPAN></P> <P><SPAN>Cooking up code is a bit like developing food recipes. The more people </SPAN><SPAN>who </SPAN><SPAN>test your recipe, the more it's likely to guarantee that what lands on your plate is what you intended.</SPAN><SPAN> </SPAN></P> <P><A href="https://aka.ms/DevEdCalDec20featured8" target="_blank" rel="noopener"><SPAN>Browse our crowdsourced cookbook with free code recipes</SPAN></A><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>Before we call it a wrap, d<SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">on’t forget to check in with #DevWithABev</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">,</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0"> developer-with-a-beverage </SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">selfies</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">. Add to the collection with a pic</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0"> </SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun SCXW254978929 BCX0">of yourself and a favorite holiday </SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW254978929 BCX0">beverage</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW254978929 BCX0">,</SPAN></SPAN><SPAN class="TextRun SCXW254978929 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW254978929 BCX0"> and</SPAN><SPAN class="NormalTextRun SCXW254978929 BCX0"> tag it #DevWithABev.</SPAN></SPAN><SPAN class="EOP SCXW254978929 BCX0"> </SPAN></SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">Next week, we’ll talk about<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">what inspired us in 2020</SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">.<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun SCXW73902411 BCX0">Keep following #</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW73902411 BCX0">DevDecember</SPAN></SPAN><SPAN class="TextRun SCXW73902411 BCX0"><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW73902411 BCX0">,<SPAN> and <STRONG>c</STRONG></SPAN></SPAN></SPAN><STRONG>heck out <A href="https://aka.ms/DevDecember20Home" target="_self"><U>our homepage</U></A></STRONG><STRONG> for more info! </STRONG></P></description> <pubDate>Fri, 01 Jan 2021 10:05:58 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-2-recap-community/ba-p/1834827</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2021-01-01T10:05:58Z</dc:date> ... </item> <item> <title>What's New in Logic Apps</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-s-new-in-logic-apps/ba-p/1969149</link> <description><DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">We <A href="https://techcommunity.microsoft.com/t5/azure-developer-community-blog/new-logic-apps-runtime-performance-and-developer-improvements/ba-p/1645335" target="_self">announced</A> public preview of the new Logic Apps runtime, performance and developer improvements in September, 2020. Today, we are happy to announce the availability of a major update that continue to extend the capability of Logic Apps. You can find the highlights about this release below.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Breakpoint Debugging</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">You've been asking about better debugging support, and it is now available with the new runtime. When running Logic Apps locally, it's possible to set breakpoint before and after an action, and examine the input and output during workflow executions.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MicrosoftTeams-image (3).png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/238874iACF1DFB734BBB8B3/image-size/large?v=v2&px=999" role="button" title="MicrosoftTeams-image (3).png" alt="MicrosoftTeams-image (3).png" /></span></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>New Layout Engine for Designer</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">Since the initial release of Logic Apps, we see customers' implementation grow in complexity: more actions, parallel branches, extensive use of control flows and advanced configurations. After the visual refresh for the workflow designer we recently released, we decided it's time to update the layout engine to better render more complex workflows. This refresh includes only the initial work to move to a new layout engine, more improvements will come in the coming months.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Screen Shot 2020-12-08 at 3.12.07 PM.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/238878i88FCFA6B7C160CFB/image-size/large?v=v2&px=999" role="button" title="Screen Shot 2020-12-08 at 3.12.07 PM.png" alt="Screen Shot 2020-12-08 at 3.12.07 PM.png" /></span></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Custom Connector Extension</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">Custom connector allows you to easily connect to systems outside of the 400+ connectors available out-of-box. With the new runtime, you can now write codeful custom connector extensions. This new approach of creating custom connectors means it runs same process as the Logic App runtime, which results in higher throughput, low latency, and local connectivity. You can learn more about this capability <A href="https://techcommunity.microsoft.com/t5/integrations-on-azure/azure-logic-apps-running-anywhere-built-in-connector/ba-p/1921272" target="_self">here</A>.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Integration Account Support</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">Many of the Integration Account capabilities are now built-in. You can upload maps and schemas directly to the new Logic Apps resource, and perform XML validation, transformation, and Liquid operations without needing an Integration Account.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><STRONG>Cross Platform</STRONG></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">With this release, you can develop and test Logic Apps locally using VS Code on macOS and Linux, and deploy Logic Apps to Linux container runtime as well as Kubernetes.</DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">I want to take this opportunity to thank you for continued support and feedback as we work to<SPAN>wards General Availability. </SPAN><SPAN style="font-family: inherit;">We can't wait for you to try it out and hear what you think.</SPAN></DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"><SPAN style="font-family: inherit;">To get started, install/update the </SPAN><A style="font-family: inherit; background-color: #ffffff;" href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurelogicapps" target="_self">VS Code extension</A><SPAN style="font-family: inherit;"> and create a local project, or create a new resource from the </SPAN><A style="font-family: inherit; background-color: #ffffff;" href="https://portal.azure.com/" target="_self">Azure Portal</A><SPAN style="font-family: inherit;">. You can submit your feedback </SPAN><A style="font-family: inherit; background-color: #ffffff;" href="http://aka.ms/lafeedback" target="_self">here</A><SPAN style="font-family: inherit;">.</SPAN></DIV> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options"> </DIV> <DIV class="lia-message-subject-wrapper lia-component-subject lia-component-message-view-widget-subject-with-options">- Derek, on behalf of the entire Logic Apps Team</DIV></description> <pubDate>Wed, 09 Dec 2020 23:11:08 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-s-new-in-logic-apps/ba-p/1969149</guid> <dc:creator>derek1ee</dc:creator> <dc:date>2020-12-09T23:11:08Z</dc:date> ... </item> <item> <title>Azure Advocate Weekly Round Up - Holidays are almost here!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-holidays-are-almost-here/ba-p/1957205</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sarah_Banner.jpg" style="width: 622px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/238529iD80348C30134D075/image-dimensions/622x207?v=v2" width="622" height="207" role="button" title="Sarah_Banner.jpg" alt="Sarah_Banner.jpg" /></span></P> <P><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Sarah is a Cloud Advocate for Microsoft. In this Discover STEM video Sarah talks about cloud computing, including explaining the basic principles behind the technology, using terms like servers, data centres and computing power. She provides some advantages and disadvantages of using the technology and also provide examples for how industry might use cloud technology in the future. </P> <P> </P> <P><A href="https://css-tricks.com/a-gentle-introduction-to-using-a-docker-container-as-a-dev-environment/" target="_blank" rel="noopener">A Gentle Introduction to Using a Docker Container as a Dev Environment | CSS-Tricks</A><BR /><STRONG><I><A href="https://twitter.com/burkeholland" target="_blank" rel="noopener">Burke Holland</A></I></STRONG></P> <P>Sarcasm disclaimer: This article is mostly sarcasm. I do not think that I actually speak for Dylan Thomas and I would never encourage you to foist a light</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/green-energy-efficient-progressive-web-apps/?WT.ms_id=green-8967-cxa&WT.mc_id=green-8967-ashussai" target="_blank" rel="noopener">Green Energy Efficient Progressive Web Apps | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank" rel="noopener">Asim Hussain</A></I></STRONG></P> <P>As a web developer, can we adjust our code to participate in the global effort to reduce the carbon footprint? PWAs offer some solutions</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=1iZxhtxSDu0" target="_blank" rel="noopener">How to Monitor an Azure virtual machine with Azure Monitor</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Here is how to use Azure Monitor to collect and analyze monitoring data from Azure virtual machines to maintain their health. Virtual machines can be monitor...</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/working-with-git-branches/ba-p/1900867?WT.mc_id=modinfra-10949-salean" target="_blank" rel="noopener">Working with Git Branches!</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Let's get to grips with Git Branches</P> <P> </P> <P><A href="https://acloudguru.com/blog/engineering/5-things-you-should-know-about-real-time-analytics" target="_blank" rel="noopener">5 things you should know about Real-Time Analytics | A Cloud Guru</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>Running analytics on real-time data is a challenge many data engineers are facing today. But not all analytics can be done in real time! Many are dependent on the volume of the data and the processing requirements. Even logic conditions are becoming a bottleneck. For example, think about join operations on huge tables with more […]</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-azure-portal-updates-arm-template-support-for-file/ba-p/1934750?WT.mc_id=modinfra-11135-abartolo" target="_blank" rel="noopener">AzUpdate: Azure portal updates, ARM Template support for file share backup and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>It might be snowing in parts of the Northern Hemisphere, but we won't let that stop us from sharing Azure news with you. News covered this week includes: New Azure Portal updates for November 2020, Azure Resource Manager template support for Azure file share backup, How to use Windows Admin Center on-premises to manage Azure Windows Server VMs, Multiple new features for Azure VPN Gateway now Generally Available, and our Microsoft Learn Module of the Week.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/hybrid-management-where-do-i-start/ba-p/1943535?WT.mc_id=modinfra-11216-pierrer" target="_blank" rel="noopener">Hybrid management. Where do I start?</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank" rel="noopener">Pierre Roman</A></I></STRONG></P> <P>Managing & maintaining servers on-premises or in multiple clouds, as well as Azure? Learn about management tools for your servers wherever they are. </P> <P> </P> <P><A href="https://dev.to/azure/visualizeit-a-free-online-series-of-workshops-to-build-your-visual-storytelling-skills-d2b" target="_blank" rel="noopener">#VisualizeIT: A free online series of workshops to build your visual storytelling skills!</A><BR /><STRONG><I>Nitya Narasimhan</I></STRONG></P> <P>#VisualizeIT is a free online series of workshops for creative technologists, from @MSFTReactor, @azureadvocates and members of the @letssketchtech community. </P> <P> </P> <P><A href="https://blog.mastykarz.nl/handle-app-button-events-microsoft-teams-tabs/" target="_blank" rel="noopener">Handle app button events in Microsoft Teams tabs</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Did you know that you can respond to user clicking on the app button of your Microsoft Teams personal app?</P> <P> </P> <P><A href="https://youtu.be/qAIdFJC1SI8" target="_blank" rel="noopener">Weekly Update #67 - Rebuilding laptops, filming videos and news!</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>In this week's update I talk about rebuilding my laptop, talking at a user group, filming videos and the Azure news of the week. :red_circle:</img> Azure Cloud Shell Update -...</P> <P><LI-VIDEO vid="https://youtu.be/qAIdFJC1SI8" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://dev.to/azure/join-us-for-data-week-44il" target="_blank" rel="noopener">Picking the Right Distributed Database [Create: Data]</A><BR /><STRONG><I><A href="https://twitter.com/abhi_tweeter" target="_blank" rel="noopener">Abhishek Gupta</A></I></STRONG></P> <P>"In God we trust, all others must bring data" William Edwards Deming Well...</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/securing-a-windows-server-vm-in-azure/ba-p/1939268?WT.mc_id=modinfra-11348-socuff" target="_blank" rel="noopener">Securing a Windows Server VM in Azure</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>If you've built and managed Windows Servers in an on-premises environment, you may have a set of configuration steps as well as regular process and monitoring alerts, to ensure that server is as secure as possible. But if you run a Windows Server VM in Azure, apart from not having to manage the physical security of the underlying compute hardware, what on-premises concepts still apply, what may you need to alter and what capabilities of Azure should you include?</P> <P> </P> <P><A href="https://developer.microsoft.com/sharepoint/blogs/cli-microsoft-365-3-3/?WT.mc_id=m365-11349-wmastyka" target="_blank" rel="noopener">CLI for Microsoft 365 v3.3 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://developer.microsoft.com/microsoft-365/blogs/microsoft-365-pnp-weekly-episode-107/?WT.mc_id=m365-11360-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 107 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://towardsdatascience.com/what-is-serverless-sql-and-how-to-use-it-for-data-exploration-eadad1f1a036" target="_blank" rel="noopener">What is Serverless SQL? And how to use it for Data Exploration | by Adi Polak | Dec, 2020 | Towards Data Science</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>So, you are a data scientist, you work with data and need to explore it and run some analytics on the data before jumping into running extensive machine learning algorithms. According to Wikipedia…</P> <P> </P> <P><A href="https://youtu.be/b0APzGlBWMA" target="_blank" rel="noopener">Terraform for Java developers, part 1 of 4</A><BR /><STRONG><I><A href="https://twitter.com/juliendubois" target="_blank" rel="noopener">Julien Dubois</A></I></STRONG></P> <P>An introduction to Terraform focusing on Java developers. In this first video (out of 4), we describe what Terraform is, and we fork the Spring Petclinic pro...</P> <P><LI-VIDEO vid="https://youtu.be/b0APzGlBWMA" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P></description> <pubDate>Tue, 08 Dec 2020 01:32:28 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-holidays-are-almost-here/ba-p/1957205</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-12-08T01:32:28Z</dc:date> ... </item> <item> <title>What I plan to learn at the Learn Together: Dev Apps for Teams event</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-i-plan-to-learn-at-the-learn-together-dev-apps-for-teams/ba-p/1955137</link> <description><P><STRONG><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Learntogether.PNG" style="width: 945px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237657i6189DD8201CF5082/image-size/large?v=v2&px=999" role="button" title="Learntogether.PNG" alt="Learntogether.PNG" /></span></STRONG></P> <P> </P> <P><SPAN><A href="https://aka.ms/learntogether" target="_self">Learn Together: Dev Apps for Teams</A> is happening on Dec 16 and it will be more of a conversation-style event. Make sure to </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Faka.ms%2Flearntogether&data=04%7C01%7CNina.Sui%40microsoft.com%7C0cf904fb05324a3daf3c08d885b031b2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637406339079067525%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=162wBy7uc%2BV36wBMKFUxI%2Fk7RQWwSRrl%2FFxLj8oFKdg%3D&reserved=0" target="_blank" rel="noopener"><SPAN>set your reminders</SPAN></A><SPAN> to attend! </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>These conversations are specially curated for developers (by developers) around the opportunities and reasons to build apps for Teams. </SPAN><SPAN> </SPAN><SPAN> </SPAN></P> <P> </P> <P><SPAN>So what are we most excited to learn in the two hours?</SPAN><SPAN> </SPAN></P> <OL> <LI><SPAN><EM>Understand Teams Apps</EM></SPAN><SPAN> Learn the key concepts and terms necessary to build apps for Teams. Expand on the messaging, Tab app, extensions, Bots, and more. Learn to speak the language!</SPAN><SPAN> </SPAN></LI> <LI><SPAN><EM>“Hello, world! for Teams</EM></SPAN><SPAN> Getting started with Teams app development is as easy as click, click, hello world! Learn to build apps for Teams in minutes with the Teams Toolkit Visual Studio Code extension.</SPAN><SPAN> </SPAN></LI> <LI><SPAN><EM>Make your app part of your user’s day.</EM></SPAN><SPAN> Enhance the usability of your application by integrating messaging and meeting extensions, adaptive cards, and more.</SPAN><SPAN> </SPAN></LI> </OL> <P> </P> <P><SPAN>The event is closely tied around the Teams App Dev Learning Path and there will even be a Teams Dev Challenge for those that want to win prizes and put their skills to the test.</SPAN><SPAN> </SPAN></P> <P> </P> <P><A href="https://nam06.safelinks.protection.outlook.com/?url=http%3A%2F%2Faka.ms%2Flearntogether&data=04%7C01%7CNina.Sui%40microsoft.com%7C0cf904fb05324a3daf3c08d885b031b2%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637406339079067525%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=162wBy7uc%2BV36wBMKFUxI%2Fk7RQWwSRrl%2FFxLj8oFKdg%3D&reserved=0" target="_blank" rel="noopener"><SPAN>Join us</SPAN></A><SPAN> live or stream on-demand and we are excited to #learntogether!</SPAN><SPAN> See you there! </SPAN></P> <P> </P> <P><SPAN><LI-VIDEO vid="https://www.youtube.com/watch?v=SyTbx94m1T4&feature=youtu.be" align="center" size="large" width="600" height="338" uploading="false" thumbnail="https://i.ytimg.com/vi/SyTbx94m1T4/hqdefault.jpg" external="url"></LI-VIDEO></SPAN></P> <P> </P> <P> </P></description> <pubDate>Fri, 04 Dec 2020 07:14:58 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/what-i-plan-to-learn-at-the-learn-together-dev-apps-for-teams/ba-p/1955137</guid> <dc:creator>NinaSui</dc:creator> <dc:date>2020-12-04T07:14:58Z</dc:date> ... </item> <item> <title>#DevDecember Week 1 Recap: Growth</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-1-recap-growth/ba-p/1834826</link> <description><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Blog-images_week1.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233216i7C519C8A7680456B/image-size/large?v=v2&px=999" role="button" title="Blog-images_week1.png" alt="Blog-images_week1.png" /></span></SPAN></P><P><SPAN>In 2020, developers (along with the rest of the world) we</SPAN><SPAN>re challenged like never before, but the traits of determination and persistence describe practically every dev. I mean, honestly, you can't code without them - like when you get an error and realize you forgot a ";" somewhere and are scrolling through your IDE for dayyyssss - <EM>sigh</EM>.</SPAN></P><P> </P><P><SPAN>So, to get our first week of #</SPAN><SPAN>DevDecember off</SPAN><SPAN> to a running start, we highlighted </SPAN><SPAN>how resourceful </SPAN><SPAN>developers </SPAN><SPAN>proved</SPAN><SPAN> to be</SPAN><SPAN> in</SPAN><SPAN> overcom</SPAN><SPAN>ing</SPAN><SPAN> unexpected circumstances</SPAN><SPAN>.</SPAN><SPAN> Throughout the week we've shared various pieces of content that highlight this growth and determination.</SPAN></P><P> </P><P><SPAN>But, before we get to recapping those, we wanted to highlight a few fun things that we are doing in #DevDecember this year:</SPAN></P><P> </P><P><FONT size="4"><STRONG>Reflect with our fun fill-in-the-blank</STRONG></FONT></P><P><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Slide_9_1.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234263i7AE01217E5F676AD/image-size/medium?v=v2&px=400" role="button" title="Slide_9_1.png" alt="Slide_9_1.png" /></span></P><P><SPAN>So much of getting through the y</SPAN><SPAN>ear was about bridging gaps, so we thought a fill-in-the-blank would be the best way to review some of the ways you became more skilled and resilient as a dev.<FONT color="#FF0000"> </FONT></SPAN><SPAN><A href="https://aka.ms/DevDecember20Home" target="_self">Check out the template</A>, fill it in, tag it as #</SPAN><SPAN>DevDecember</SPAN><SPAN>, and share </SPAN><SPAN>what you got done</SPAN><SPAN> and how. </SPAN><SPAN> </SPAN></P><P> </P><P> </P><P><STRONG><FONT size="4">#DevWithABev fun on social</FONT></STRONG></P><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="Devwithbev_Selfie.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234756i32340B61B2F92127/image-size/medium?v=v2&px=400" role="button" title="Devwithbev_Selfie.png" alt="Devwithbev_Selfie.png" /></span>Before we recap, we should also mention #DevWithABev, a growing collection of developer-with-a-beverage selfies. Check out everyone's favorite winter beverage, and add your own personal flavor by taking a snapshot of yourself with yours and tagging it #DevWithABev. It’s 2020 and we could all use some friendly faces.</SPAN></P><P> </P><P> </P><P><FONT color="#333333">Now,</FONT><FONT color="#333333"> let's recap what we highlighted this week: </FONT></P><P> </P><P><FONT color="#000000"><STRONG>Beginner's series to JavaScript </STRONG></FONT></P><P>Taking your first steps toward mastering a new programming language is exciting, but it can also feel overwhelming. To help you get started with JavaScript, we've created short and easy-to-consume videos that break down the key concepts you need to know.</P><P><A href="https://aka.ms/DevEdCalDec20featured1" target="_blank" rel="noopener">Start watching the series</A></P><P> </P><P><FONT color="#000000"><STRONG>Agrotech IoT workshop</STRONG></FONT></P><P>Want to grow your professional IoT skills? Your first stop may be the garden. Get your hands dirty with a workshop on how to build an internet-connected device to gather soil moisture data that will tell you (by lighting up an LED) if a plant needs watering.</P><P><A href="https://aka.ms/DevEdCalDec20featured3" target="_blank" rel="noopener">Start digging in</A></P><P> </P><P><FONT color="#000000"><STRONG>Bringing browser developer tools to Visual Studio Code</STRONG></FONT></P><P>One of our favorite releases in 2020 was the Microsoft Edge Tools for VS Code extension, designed to simplify workflows. Connect to an existing browser instance, start a new one, or use a “headless” browser.</P><P><A href="https://aka.ms/DevEdCalDec20featured4" target="_blank" rel="noopener">Explore the extension</A></P><P> </P><P><FONT color="#000000"><STRONG>Building a first "Power Apps" app</STRONG></FONT></P><P>@JoeCamp13 built an app to track inventory entirely with Power Apps. His explanation of how he did it, is illustrated with screenshots so you can follow along.</P><P><A href="https://aka.ms/DevEdCalDec20featured2" target="_blank" rel="noopener">Start the walkthrough</A></P><P> </P><P><SPAN>Next week, we’ll talk about </SPAN><SPAN>some of</SPAN><SPAN> the ways the dev community </SPAN><SPAN>came together</SPAN><SPAN> </SPAN><SPAN>in 202</SPAN><SPAN>0</SPAN><SPAN>. </SPAN><SPAN>Keep following #</SPAN><SPAN>DevDecember</SPAN><SPAN> for daily updates</SPAN><SPAN> and affirmations of awesomeness</SPAN><SPAN>. </SPAN><SPAN> </SPAN></P><P> </P><P><SPAN>Not sure what </SPAN><SPAN>#</SPAN><SPAN>DevDecember</SPAN><SPAN> is all about</SPAN><SPAN>?<STRONG> Check out <A href="https://aka.ms/DevDecember20Home" target="_self">our homepage</A></STRONG></SPAN><STRONG> for more info! </STRONG></P><P> </P><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="slide_20_Gif.gif" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/237645i41AE169BA69EC86A/image-size/medium?v=v2&px=400" role="button" title="slide_20_Gif.gif" alt="slide_20_Gif.gif" /></span></P></description> <pubDate>Sat, 05 Dec 2020 00:16:45 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devdecember-week-1-recap-growth/ba-p/1834826</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2020-12-05T00:16:45Z</dc:date> ... </item> <item> <title>Now That's What I Call .NET 5 on #Dev_Jams</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/now-that-s-what-i-call-net-5-on-dev-jams/ba-p/1942727</link> <description><P><SPAN data-contrast="auto"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_1.jpg" style="width: 292px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236772iBCD07BFAE035990A/image-dimensions/292x292?v=v2" width="292" height="292" role="button" title="NOW! DotNET 5 Booklet1024_1.jpg" alt="NOW! DotNET 5 Booklet1024_1.jpg" /></span></SPAN></P> <P> </P> <P><SPAN data-contrast="auto">Do you ever have trouble getting into the coding flow because you just can’t decide what music you want to jam to? </SPAN><SPAN data-contrast="auto">Well, we have just the playlist for you: <A href="https://aka.ms/DevJams" target="_self">Now That's What I Call .NET 5!</A> </SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">To help celebrate the release of .NET 5, I reached out to some .NET devs around the world and asked them about why they love .NET and what their favorite song to listen to while coding is. With that info, we created the <A href="https://aka.ms/DevJams" target="_self">#dev_jams playlist on Spotify</A> and created an album booklet with our featured tracks/devs! Check it out below and feel free to download it for yourself at the bottom of the page. </SPAN></P> <P> </P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_2.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236771i39E133E83CA7E19E/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_2.jpg" alt="NOW! DotNET 5 Booklet1024_2.jpg" /></span></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_3.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236774iFC245836709EF6BF/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_3.jpg" alt="NOW! DotNET 5 Booklet1024_3.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Scott Hanselman</STRONG> - <A href="https://twitter.com/shanselman" target="_self">@shanselman</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_4.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236775i1035CA1B041567D4/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_4.jpg" alt="NOW! DotNET 5 Booklet1024_4.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Amiee Lo</STRONG> - <A href="https://twitter.com/amiee_lo" target="_self">@amiee_lo</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_5.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236776iADC6E1A1C341C358/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_5.jpg" alt="NOW! DotNET 5 Booklet1024_5.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Torin Solarin-Sodara</STRONG> - <A href="https://twitter.com/tonerdo" target="_self">@tonerdo</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_6.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236777i1791F03E923EFDBC/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_6.jpg" alt="NOW! DotNET 5 Booklet1024_6.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Aida Crone</STRONG> - <A href="https://twitter.com/aidapsibr" target="_self">@aidapsibr</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_7.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236778i94A964E9EA2E7B20/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_7.jpg" alt="NOW! DotNET 5 Booklet1024_7.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Rodney Littles, II</STRONG> - <A href="https://twitter.com/rlittlesii" target="_self">@rlittiesii</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_8.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236779i7E86C416215E951A/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_8.jpg" alt="NOW! DotNET 5 Booklet1024_8.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Bron Thulke</STRONG> - <A href="https://twitter.com/_bron_" target="_self">@_bron_</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_9.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236780i9734174A5C2CBD81/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_9.jpg" alt="NOW! DotNET 5 Booklet1024_9.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Michael Dera</STRONG> - <A href="https://twitter.com/michaeldera" target="_self">@michaeldera</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_10.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236781iB95C2302CFB851C2/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_10.jpg" alt="NOW! DotNET 5 Booklet1024_10.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Mark Rendle</STRONG> - <A href="https://twitter.com/markrendle" target="_self">@markrendle</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_11.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236782i0444B80025B83FA0/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_11.jpg" alt="NOW! DotNET 5 Booklet1024_11.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Jeremy Sinclair</STRONG> - <A href="https://twitter.com/sinclairinat0r" target="_self">@sinclairinat0r</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_12.jpg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236770i6D51F6EC78DA9415/image-size/medium?v=v2&px=400" role="button" title="NOW! DotNET 5 Booklet1024_12.jpg" alt="NOW! DotNET 5 Booklet1024_12.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><STRONG>Jayme Singleton</STRONG> - <A href="https://twitter.com/JaymeSingleton1" target="_self">@jaymesingleton1</A></SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NOW! DotNET 5 Booklet1024_13.jpg" style="width: 291px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/236773i3CA5D651269D6656/image-dimensions/291x291?v=v2" width="291" height="291" role="button" title="NOW! DotNET 5 Booklet1024_13.jpg" alt="NOW! DotNET 5 Booklet1024_13.jpg" /></span></SPAN></P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">+ a special shout out to <STRONG>Marc Duiker</STRONG> (<A href="https://twitter.com/marcduiker" target="_self">@marcduiker</A>) for creating the amazing pixel art!</SPAN></P> <P> </P> <P><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}">What do you think of these featured tracks? Did we miss a song? Let us know your favorite song by using the hashtag #dev_jams on Twitter. Happy jamming!</SPAN></P> <P> </P> <P><EM>Also, just in case you missed it - you can download .NET 5 for Windows, macOS, and Linux <A href="https://dotnet.microsoft.com/download/dotnet/5.0" target="_blank" rel="noopener">here.</A> And although <A href="https://www.dotnetconf.net/" target="_blank" rel="noopener">.NET Conf 2020</A> has wrapped up, you can still catch all the <A href="https://www.youtube.com/playlist?list=PLdo4fOcmZ0oVWop1HEOml2OdqbDs6IlcI" target="_blank" rel="noopener">sessions on demand</A> and get a head start on all the new features that were introduced with .NET 5!</EM></P></description> <pubDate>Mon, 30 Nov 2020 23:47:33 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/now-that-s-what-i-call-net-5-on-dev-jams/ba-p/1942727</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2020-11-30T23:47:33Z</dc:date> ... </item> <item> <title>Azure Advocates Weekly Round Up - Scaling Events w/ Serverless, Cog Services, and DevOps Boards</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-scaling-events-w-serverless-cog/ba-p/1928458</link> <description><P><A href="https://youtu.be/Lg4B_H-t8fY" target="_blank" rel="noopener">XR Tea Party: BabylonJS & WebXR</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank" rel="noopener">Aysegul Yonet</A></I></STRONG></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/Lg4B_H-t8fY" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-cloud-assert/ba-p/1866840?WT.mc_id=modinfra-8958-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - Cloud Assert</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>This week, Tiberiu Radu (Azure Stack Hub PM) and I, had the chance to speak to Azure Stack Hub Partner Cloud Assert.</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/how-to-measure-the-power-consumption-of-your-frontend-application/?WT.mc_id=green-8991-ashussai" target="_blank" rel="noopener">How To Measure The Power Consumption of Your Frontend Application | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank" rel="noopener">Asim Hussain</A></I></STRONG></P> <P>The second principle of Sustainable Software Engineering is to build energy efficient applications. The very first step in that direction is to measure the energy your application consumes, also known as its energy cost. Once you measure or estimate the energy cost of your application,</P> <P> </P> <P><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Browse content tagged with "Cloud Adoption Framework Series" on Channel 9.</P> <P> </P> <P><A href="https://cloud-days.jfrog.com/microsoft-azure/" target="_blank" rel="noopener">DevOps Cloud Days, Day 3, Nov 18, 2020 - JFrog & Microsoft Azure</A><BR /><STRONG><I><A href="https://twitter.com/jldeen" target="_blank" rel="noopener">Jessica Deen</A></I></STRONG></P> <P>Join JFrog and Microsoft Azure to learn about integrations and future development. Secure your applications and modernize your business.</P> <P> </P> <P><A href="https://dev.to/lazerwalker/scaling-an-online-virtual-world-with-serverless-tech-4pfo" target="_blank" rel="noopener">Scaling an Online Virtual World with Serverless Tech</A><BR /><STRONG><I><A href="https://twitter.com/lazerwalker" target="_blank" rel="noopener">Em Lazer-Walker</A></I></STRONG></P> <P>I help run an annual game design conference called Roguelike Celebration. Naturally, this year we wer...</P> <P> </P> <P><A href="http://aka.ms/datadog-azureiot" target="_blank" rel="noopener">Monitoring IoT systems from edge to cloud with Datadog</A><BR /><STRONG><I><A href="https://twitter.com/pjdecarlo" target="_blank" rel="noopener">Paul DeCarlo</A></I></STRONG></P> <P>Microsoft Azure has a strong and active partnership with Datadog , the leading cloud-based monitoring and observability platform. Recently, Datadog and</P> <P> </P> <P><A href="https://aka.ms/staticWebAppPRWorkflowForAppServicePt2" target="_blank" rel="noopener">Static Web App PR Workflow for Azure App Service using Azure DevOps Pt 2 (But what if my code is in GitHub) | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/AbelSquidHead" target="_blank" rel="noopener">Abel Wang</A></I></STRONG></P> <P>Static Web App PR Workflow for Azure App Service using Azure DevOps Pt 2 (But what if my code is in GitHub) In part 1 (Static Web App PR Workflow for Azure App Service), I walked you you through how to set up that sweet pull request workflow for Static Web Apps for your app if your app was: hosted in Azure App Service your code in Azure Repos your CI pipeline in Azure Pipelines.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-devops-boards-and-excel/ba-p/1850371?WT.mc_id=modinfra-10509-salean" target="_blank" rel="noopener">Azure DevOps Boards and Excel!</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Use Excel to help manage your Azure DevOps Board items!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-new-priority-account-capabilities-in-microsoft-365/ba-p/1908148?WT.mc_id=modinfra-10527-abartolo" target="_blank" rel="noopener">AzUpdate: New Priority Account capabilities in Microsoft 365, Bastion and Vnet peering, and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>Another busy week for cloud services at Microsoft. Here are the news items the team at AzUpdate are covering this week: New Priority Account capabilities now available in Microsoft 365, Azure Bastion and VNet peering can be used together, New integrations between GitHub and Azure Policy allow for better manage policy definitions and assignments, New constrained vCPUs capable VMs now available and of course the Microsoft Learn module of the week.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-create-a-windows-server-2019-nas-fileserver-from-the/ba-p/1893837?WT.mc_id=modinfra-10555-rclaus" target="_blank" rel="noopener">HOW TO: Create a Windows Server 2019 NAS / FileServer from the command line</A><BR /><STRONG><I><A href="https://twitter.com/RicksterCDN" target="_blank" rel="noopener">Rick Claus</A></I></STRONG></P> <P>Windows Server 2019 default install has no GUI or Desktop. How do you go about setting this thing up from the command line? In this post I give you the How To on how to setup a simple File Server to replace an old NAS device that was failing in my home lab. We're talking PowerShell to configure Storage Spaces, User Accounts, SMB Shares, Power Profiles and more! </P> <P> </P> <P><A href="https://dev.to/azure/control-holiday-lights-with-python-azure-iot-and-power-apps-2ic6" target="_blank" rel="noopener">Control holiday lights with Python, Azure IoT and Power Apps</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">Jim Bennett</A></I></STRONG></P> <P>No more controlling your holiday lights by hand - instead use IoT and a no-code mobile app!. Tagged with pythonfunbites, azure, python, iot.</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/azure-stack-hub-partner-solutions-series-cloud-assert/" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series – Cloud Assert</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>This week, Tiberiu Radu (Azure Stack Hub PM <LI-USER uid="433488"></LI-USER>) and I, had the chance to speak to Azure Stack Hub Partner Cloud Assert.</P> <P> </P> <P><A href="https://dev.to/azure/azurefunbytes-episode-21-azure-security-with-deanbryen-1kdf" target="_blank" rel="noopener">AzureFunBytes - Episode 21 - @Azure Security with @deanbryen</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>Security is always the primary concern for those deploying applications into the cloud. This week on... Tagged with azure, security, tutorial, beginners.</P> <P> </P> <P><A href="https://dev.to/azure/translating-text-with-just-a-few-lines-of-code-using-azure-cognitive-services-4fao" target="_blank" rel="noopener">Translating text with just a few lines of code using Azure Cognitive Services</A><BR /><STRONG><I>Christopher Harrison</I></STRONG></P> <P>This article is part of #PythonFunBites. An old co-worker of mine is fond of saying "we're not launc... Tagged with pythonbites, azure, python, ai.</P> <P> </P> <P><A href="https://dev.to/azure/getting-started-with-web-dev-using-flask-44l5" target="_blank" rel="noopener">Getting started with web dev using Flask</A><BR /><STRONG><I>Christopher Harrison</I></STRONG></P> <P>This article is part of #PythonFunBites. There's a lot of different web dev frameworks out there, an... Tagged with pythonfunbites, python, flask, webdev.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/setup-azure-shell-locally-of-on-a-local-network-part-2/ba-p/1883237?WT.mc_id=modinfra-10876-pierrer" target="_blank" rel="noopener">Set up Azure Shell locally - part 2</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank" rel="noopener">Pierre Roman</A></I></STRONG></P> <P>Azure Cloud Shell running in Visual Studio Code - differences with VS Code.</P> <P> </P> <P><A href="https://dev.to/azure/working-with-jupyter-notebooks-in-visual-studio-code-5130" target="_blank" rel="noopener">Working with Jupyter Notebooks in Visual Studio Code</A><BR /><STRONG><I><A href="https://twitter.com/paladique" target="_blank" rel="noopener">Jasmine Greenaway</A></I></STRONG></P> <P>How to use Jupyter Notebooks in Visual Studio Code. Tagged with pythonfunbites, azure, python.</P> <P> </P> <P><A href="https://aka.ms/WhatsNewOct2020" target="_blank" rel="noopener">What's New in Azure DevOps Docs For October? | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/AbelSquidHead" target="_blank" rel="noopener">Abel Wang</A></I></STRONG></P> <P>What’s new for October1, 2020 – October 31, 2020 Hey hey! New docs have dropped for Azure DevOps for the month of October. What has changed? Oh, just things like… Delete and recover packages Remove, delete, or restore work items Use the Cross-platform CLI for Azure DevOps using personal access tokens (PATs) …and much more!</P> <P> </P> <P><A href="https://devblogs.microsoft.com/devops/azurefunbytes-short-azure-containers-kubernetes-container-instances-more/?WT.mc_id=devops-11004-jagord" target="_blank" rel="noopener">AzureFunBytes Short - Azure Containers (Kubernetes, Container Instances, More) | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>Containers provide an easy way to run batch jobs without having to manage an environment and dependencies. Dynamic compute options, such as Azure Container Instances (ACI), can be used to efficiently ingest source data, process it, and place it in a durable store such as Azure Blob storage.</P> <P> </P> <P><A href="https://dev.to/azure/the-python-community-is-stronger-together-1anl" target="_blank" rel="noopener">The Python Community is Stronger Together</A><BR /><STRONG><I><A href="https://twitter.com/nnja" target="_blank" rel="noopener">Nina Zakharenko</A></I></STRONG></P> <P>Some thoughts on how to stay connected with the Python Community in 2020. </P> <P> </P> <P><A href="https://developer.microsoft.com/microsoft-365/blogs/microsoft-365-pnp-weekly-episode-105/?WT.mc_id=m365-11044-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 105 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://aka.ms/AAacwbq" target="_blank" rel="noopener">Microsoft Autonomous Driving Startups Program</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>Join us for an exceptional conversation with Aditya from the Microsoft Autonomous Driving program. Aditya shares the trends in Autonomous Driving, what startups are building, how Microsoft can help,</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/lisa-at-the-edge-podcast-thomas-maurer-career-development-azure-arc/" target="_blank" rel="noopener">Lisa At The Edge Podcast – Thomas Maurer – Career Development & Azure Arc</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Lisa At The Edge Podcast - Thomas Maurer - Career Development & Azure Arc we talked about Azure Arc and Azure Hybrid Cloud!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/educator-developer-blog/control-holiday-lights-with-python-azure-iot-and-power-apps/ba-p/1903902?WT.mc_id=academic-11204-jabenn" target="_blank" rel="noopener">Control holiday lights with Python, Azure IoT and Power Apps</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">Jim Bennett</A></I></STRONG></P> <P>As the December holiday season descends, some cultures celebrate with lights, where's other folks have breaks from school and are looking for a fun</P> <P> </P></description> <pubDate>Tue, 24 Nov 2020 20:53:45 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-scaling-events-w-serverless-cog/ba-p/1928458</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-11-24T20:53:45Z</dc:date> ... </item> <item> <title>Join us for #SeasonsOfServerless - our festive developer challenge!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/join-us-for-seasonsofserverless-our-festive-developer-challenge/ba-p/1901451</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="A Festive Serverless Developer Challenge: https://aka.ms/SeasonsOfServerless" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/234428i9ABC3E942072A5ED/image-size/large?v=v2&px=999" role="button" title="chalkboard.gif" alt="A Festive Serverless Developer Challenge: https://aka.ms/SeasonsOfServerless" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">A Festive Serverless Developer Challenge: https://aka.ms/SeasonsOfServerless</span></span></P> <P> </P> <P><STRONG><FONT color="#FF0000">Check out the first challenge right now:</FONT> <BR /><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/Nov-23-2020.md" target="_self">"The Perfect Holiday Turkey"</A> on the<A href="https://aka.ms/SeasonsOfServerless" target="_self"> Seasons Of Serverless Website</A>! </STRONG></P> <P> </P> <P><FONT size="6"><FONT size="7">#SeasonsOfServerless</FONT> </FONT></P> <P> </P> <P><FONT size="6">An Azure Advocates Festive Developer Challenge!</FONT></P> <P><FONT size="4"><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8">The<SPAN> </SPAN></SPAN></SPAN><A class="Hyperlink SCXW29597693 BCX8" href="https://twitter.com/azureadvocates" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW29597693 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW29597693 BCX8" data-ccp-charstyle="Hyperlink">Azure Advocates</SPAN></SPAN></A><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8"> have teamed up with<SPAN> </SPAN></SPAN></SPAN><A class="Hyperlink SCXW29597693 BCX8" href="https://studentambassadors.microsoft.com/" target="_blank" rel="noreferrer noopener"><SPAN class="TextRun Underlined SCXW29597693 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW29597693 BCX8" data-ccp-charstyle="Hyperlink">Microsoft Student Ambassadors</SPAN></SPAN></A><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8"><SPAN> </SPAN>around the world for a new multi-week series<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8">of developer challenges – just in time for the festive holiday season!!! Join us as we travel the globe in search of popular festive recipes for our virtual<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8">potluck</SPAN></SPAN><SPAN class="TextRun SCXW29597693 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW29597693 BCX8"><SPAN> </SPAN>– and find intriguing ways to tackle each chef’s challenges with our time-tested serverless recipes!</SPAN></SPAN><SPAN class="EOP SCXW29597693 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P> </P> <P> </P> <P><STRONG><FONT size="5"><SPAN class="TextRun MacChromeBold SCXW223924860 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW223924860 BCX8">WHAT IS THE CHALLENGE ABOUT?</SPAN></SPAN><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></STRONG></P> <P><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW250697636 BCX8" data-contrast="none"><SPAN class="NormalTextRun SCXW250697636 BCX8" data-ccp-parastyle="Quote"><STRONG><BR /><FONT size="4">Origin Story:<BR /></FONT><BR /></STRONG></SPAN></SPAN></SPAN></P> <P class="lia-indent-padding-left-30px"><EM>Mes chers amis,</EM></P> <P class="lia-indent-padding-left-30px"><EM>Every year, we all look forward to our annual holiday potluck. From jollof rice all across West Africa to Indian ladoos to celebrate Diwali, sharing our favorite foods and traditions is our favorite part of the season!</EM></P> <P class="lia-indent-padding-left-30px"><EM>Of course, we know that's not possible this year, so we've come up with an alternative: a virtual code challenge potluck! Each week, someone in our community is going to post a unique code challenge exploring a recipe and a food for all of our friends to solve. It may not be the same as breaking bread in-person or smelling and tasting your flavorful creations, but hopefully these delectable brain-teasers can still give us a taste of each other's traditions.</EM></P> <P class="lia-indent-padding-left-30px"><EM>Grosses bises, Dominique et Simone</EM></P> <P> </P> <P><FONT size="4"><STRONG><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW250697636 BCX8" data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559685":864,"335559737":864,"335559738":200,"335559739":160,"335559740":259}">The Mission:<BR /></SPAN></SPAN></STRONG><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW250697636 BCX8" data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559685":864,"335559737":864,"335559738":200,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW190509864 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW190509864 BCX8">Our intrepid chefs (and challenge creators) quickly realized that making these dishes requires a little help – </SPAN></SPAN></SPAN></SPAN><SPAN class="EOP SCXW223924860 BCX8" data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"><SPAN class="EOP SCXW250697636 BCX8" data-ccp-props="{"201341983":0,"335551550":2,"335551620":2,"335559685":864,"335559737":864,"335559738":200,"335559739":160,"335559740":259}"><SPAN class="TextRun SCXW190509864 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW190509864 BCX8">and </SPAN></SPAN><SPAN class="TextRun SCXW190509864 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW190509864 BCX8">they think serverless fits the bill quite nicely!</SPAN></SPAN></SPAN></SPAN></FONT></P> <P><FONT size="4"><A href="https://aka.ms/SeasonsOfServerless" target="_self">#SeasonsOfServerless</A> follows on the footsteps of last year's popular <A href="https://dev.to/azure/25-days-of-serverless-content-collection-3baj/comments" target="_self">#25DaysOfServerless</A> challenge. This year, we wanted to give you more time to enjoy each challenge so we spaced them out - a challenge a week starting November end, and going through the holidays into the new year!</FONT></P> <P> </P> <P><FONT size="4">And our first challenge is already out! Hear all about it from the amazing Student Ambassadors and Cloud Advocates who .. ahem .. cooked it up!</FONT></P> <P> </P> <P><FONT size="4"><LI-VIDEO vid="https://youtu.be/BCbG50Zhw0Y" align="center" size="custom" width="643" height="643" uploading="false" thumbnail="https://i.ytimg.com/vi/BCbG50Zhw0Y/hqdefault.jpg" external="url"></LI-VIDEO></FONT></P> <P> </P> <P> </P> <P><FONT size="5"><STRONG><SPAN data-contrast="auto">HOW CAN YOU PARTICIPATE?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <UL> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Visit the </SPAN><A href="https://aka.ms/SeasonsOfServerless" target="_blank" rel="noopener"><SPAN data-contrast="none">Seasons Of Serverless</SPAN></A><SPAN data-contrast="auto"> website</SPAN><SPAN data-contrast="auto"> and familiarize yourself with the </SPAN><A href="https://github.com/microsoft/seasons-of-serverless#rules" target="_blank" rel="noopener"><SPAN data-contrast="none">Rules</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Revisit the site each week to </SPAN><SPAN data-contrast="auto">uncover</SPAN><SPAN data-contrast="auto"> </SPAN><A href="https://github.com/microsoft/seasons-of-serverless#first-challenge-november-23rd" target="_blank" rel="noopener"><SPAN data-contrast="none">a new coding challenge</SPAN></A><SPAN data-contrast="auto"> and </SPAN><SPAN data-contrast="auto">recipe</SPAN><SPAN data-contrast="auto">!</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Solve the challenge within the week – we have a handy </SPAN><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/RESOURCES.md" target="_blank" rel="noopener"><SPAN data-contrast="none">Resources</SPAN></A><SPAN data-contrast="auto"> page to help you!</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="4" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Submit your solution as a </SPAN><A href="https://github.com/microsoft/seasons-of-serverless#submit-your-solution-as-a-custom-ISSUE-to-our-repository" target="_blank" rel="noopener"><SPAN data-contrast="none">tagged issue </SPAN><SPAN data-contrast="none">on</SPAN><SPAN data-contrast="none"> the repo</SPAN></A><SPAN data-contrast="auto">.</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> <LI data-leveltext="" data-font="Symbol" data-listid="1" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><FONT size="4"><SPAN data-contrast="auto">Celebrate!! (Qualifying solutions will earn you a spot on the </SPAN><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/CONTRIBUTORS.md" target="_blank" rel="noopener"><SPAN data-contrast="none">Contributors Hall of Fame</SPAN></A><SPAN data-contrast="auto">!)</SPAN><SPAN data-ccp-props="{"134233279":true,"201341983":0,"335551550":1,"335551620":1,"335559685":720,"335559737":0,"335559739":160,"335559740":259,"335559991":360}"> </SPAN></FONT></LI> </UL> <P><FONT size="4"><SPAN data-contrast="none"> </SPAN><SPAN data-ccp-props="{"201341983":0,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P> </P> <P><FONT size="5"><STRONG><SPAN data-contrast="auto">WHY ARE WE DOING THIS?</SPAN></STRONG><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P><FONT size="4"><A href="https://aka.ms/SeasonsOfServerless" target="_blank" rel="noopener"><SPAN data-contrast="none">#SeasonsOfServerless</SPAN></A><SPAN data-contrast="none"> follows </SPAN><SPAN data-contrast="none">in</SPAN><SPAN data-contrast="none"> t</SPAN><SPAN data-contrast="none">he footsteps of </SPAN><SPAN data-contrast="none">our</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">2019</SPAN><SPAN data-contrast="none"> </SPAN><A href="https://dev.to/azure/25-days-of-serverless-content-collection-3baj/comments" target="_blank" rel="noopener"><SPAN data-contrast="none">#25DaysOfServerless</SPAN></A><SPAN data-contrast="none"> challenge.</SPAN><SPAN data-contrast="none"> </SPAN><SPAN data-contrast="none">We realized </SPAN><SPAN data-contrast="none">that developers not only enjoyed solving the code puzzles, </SPAN><SPAN data-contrast="none">but they</SPAN><SPAN data-contrast="none"> al</SPAN><SPAN data-contrast="none">so loved learning about festive customs and cultures around the world.</SPAN><SPAN data-contrast="none"> However, the challenge-a-day pace is not holiday-friendly. So, this year we’re spacing them out</SPAN><SPAN data-contrast="none"> a little more</SPAN><SPAN data-contrast="none"> – </SPAN><SPAN data-contrast="none">with one challenge a wee</SPAN><SPAN data-contrast="none">k starting Nov 23 and </SPAN><SPAN data-contrast="none">continuing </SPAN><SPAN data-contrast="none">into the New Year! </SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P><FONT size="4"><SPAN data-contrast="none"><BR /><STRONG>Let’s Do This!!</STRONG> :flexed_biceps:</img></SPAN><SPAN data-ccp-props="{"201341983":0,"335551550":1,"335551620":1,"335559739":160,"335559740":259}"> </SPAN></FONT></P> <P> </P> <P> </P> <P><STRONG><FONT color="#FF0000">Check out the first challenge right now:</FONT> <BR /><A href="https://github.com/microsoft/Seasons-of-Serverless/blob/main/Nov-23-2020.md" target="_self">"The Perfect Holiday Turkey"</A> on the<A href="https://aka.ms/SeasonsOfServerless" target="_self"> Seasons Of Serverless Website</A>! </STRONG></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="The Perfect Turkey - #SeasonsOfServerless" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235566iD57D5BAE1D8E61F2/image-size/large?v=v2&px=999" role="button" title="banner-1.png" alt="The Perfect Turkey - #SeasonsOfServerless" /><span class="lia-inline-image-caption" onclick="event.preventDefault();">The Perfect Turkey - #SeasonsOfServerless</span></span></P> <P> </P></description> <pubDate>Tue, 24 Nov 2020 18:01:25 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/join-us-for-seasonsofserverless-our-festive-developer-challenge/ba-p/1901451</guid> <dc:creator>nityan</dc:creator> <dc:date>2020-11-24T18:01:25Z</dc:date> ... </item> <item> <title>The Developer Wish List - #DevDecember</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-developer-wish-list-devdecember/ba-p/1796670</link> <description><P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Blog-images_week0_Devwishlist.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233828iA2DDF9EF2DD69C39/image-size/large?v=v2&px=999" role="button" title="Blog-images_week0_Devwishlist.png" alt="Blog-images_week0_Devwishlist.png" /></span></SPAN></P> <P> </P> <P>For many of us around the world, the holiday season is right around the corner!</P> <P> </P> <P>You may find yourself struggling what gift to get for your friends and family. Chances are that they will want some ideas for you too! My family certainly does, and I have to come up with twice as many ideas since my birthday is also in December! <img class="lia-deferred-image lia-image-emoji" src="https://techcommunity.microsoft.com/html/@0277EEB71C55CDE7DB26DB254BF2F52B/images/emoticons/laugh_40x40.gif" alt=":lol:" title=":lol:" /></P> <P> </P> <P>This inspired me to reach out to a few of my techy friends to ask what product would be at the top of their wish list if they didn't already own it. The result? An awesome mix of geeky gadgets and some products that are just for fun.</P> <P> </P> <P><FONT color="#FF0000"><EM>Please note: This list is not an endorsement of any product nor are we getting compensated for any of this. It's all just for fun! </EM></FONT></P> <P> </P> <P><FONT size="4"><STRONG>1. A copy of <A href="https://smile.amazon.com/GitHub-Dummies-Guthals/dp/1119572673/ref=smi_www_rco2_go_smi_4368549507?_encoding=UTF8&dchild=1&ie=UTF8&keywords=github&qid=1605222110&s=books&sr=1-2" target="_blank" rel="noopener">GitHub for Dummies</A> that'll come in handy whether you are looking to learn more about GitHub or want a useful gift to inspire a new developer!</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_0-1606106903865.jpeg" style="width: 233px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235499i5DFA77250258B13C/image-dimensions/233x291?v=v2" width="233" height="291" role="button" title="livelovegeek_0-1606106903865.jpeg" alt="livelovegeek_0-1606106903865.jpeg" /></span></P> <P> </P> <P><STRONG>Review: </STRONG><EM>"GitHub is the largest open source community and with the knowledge of how to use GitHub, it opens the doors for folks to contribute to open source projects, collaborate with people on their own projects, and learn from others. I co-wrote this book with Phil Haack because we believe that everyone should have the opportunity to join communities that matter to them. I love that this book not only introduces GitHub features, but also Git on the command line AND how to continue to engage in communities outside of GitHub through conferences and events." </EM>– <STRONG>Dr. Sarah Guthals, <A href="https://twitter.com/drguthals" target="_blank" rel="noopener">@drguthals</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>2. Whether you are new to coding or a seasoned pro, the <A href="https://www.raspberrypi.org/products/raspberry-pi-400/" target="_blank" rel="noopener">Raspberry Pi 400</A> is bound to bring out your inner geek!</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_1-1606106903899.jpeg" style="width: 309px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235501i239AD06CBC989599/image-dimensions/309x214?v=v2" width="309" height="214" role="button" title="livelovegeek_1-1606106903899.jpeg" alt="livelovegeek_1-1606106903899.jpeg" /></span></P> <P> </P> <P><STRONG>Review: </STRONG><EM>"The Raspberry Pi 400 should be on everyone's wishlist! It's a Raspberry Pi in a keyboard similar to the computers I grew up with like the ZX Spectrum. Just plug in a mouse and TV and away you go! Another bonus? It runs VS Code natively!</EM><EM>" </EM>– <STRONG>Jim Bennett, <A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">@jimbobbennett</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>3. An <A href="https://instantpot.com/portfolio-item/duo-gourmet/" target="_blank" rel="noopener">Instant Pot</A> that essentially cooks your food for you don’t have to order takeout food for the 6<SUP>th</SUP> time this week ;)</img></STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_2-1606106903912.jpeg" style="width: 276px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235500iFAD09C6065A541B0/image-dimensions/276x276?v=v2" width="276" height="276" role="button" title="livelovegeek_2-1606106903912.jpeg" alt="livelovegeek_2-1606106903912.jpeg" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"Working from home can be hard. We may find ourselves working weird hours and extra to achieve the same level of productivity, and still wanting to eat healthy and home-cooked food. That's when an Instant Pot may come handy. It is a pressure-cooker and slow-cooker in one device. I have found it especially useful during those long days when I have lacked motivation to cook. Just put your ingredients in the pot and fire-and-forget. I have enjoyed making vegetables, meat stews and lentils in my Instant Pot." </EM>– <STRONG>Orko Momin, <A href="https://twitter.com/orktopus" target="_blank" rel="noopener">@orktopus</A></STRONG></P> <P><STRONG> </STRONG></P> <P> </P> <P><FONT size="4"><STRONG>4. The <A href="https://www.hanselman.com/blog/the-perfect-nintendo-switch-travel-set-up-and-recommended-accessories" target="_blank" rel="noopener">Scott Hanselman recommended ‘Nintendo Switch Travel Pack’</A> that will get you set up for gaming on the road or on the couch</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_3-1606106903935.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235502i5D31C2417C074B19/image-size/medium?v=v2&px=400" role="button" title="livelovegeek_3-1606106903935.jpeg" alt="livelovegeek_3-1606106903935.jpeg" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"I've had a Nintendo Switch since launch day and let me tell you, it's joyful. Joyous. It's a little joy device. I love 4k Xboxen and raw power as much as the next Jane or Joe Gamer, but the Switch just keeps pumping out happy games. Indie games, Metroidvania games like Axiom Verge, Legend of Zelda: Breath of the Wild (worth the cost of the system) and now, super Mario Odyssey. Even Doom and Wolfenstein 2 are coming to the Switch soon! I've travelled already with my Switch all over. <A href="https://www.hanselman.com/blog/the-perfect-nintendo-switch-travel-set-up-and-recommended-accessories" target="_blank" rel="noopener">Here's</A> what I've come up with for my travels - and my at-home Switch Experience. I owe and use these items personally - and I vouch for their awesomeness and utility.” </EM>– <STRONG>Scott Hanselman, <A href="https://twitter.com/shanselman" target="_blank" rel="noopener">@shanselman</A></STRONG></P> <P><STRONG> </STRONG></P> <P> </P> <P><FONT size="4"><STRONG>5. An Italian chopping knife - aka a <EM><A href="https://www.williams-sonoma.com/products/open-kitchen-by-williams-sonoma-mezzaluna/?sku=9031067" target="_blank" rel="noopener">Mezzaluna</A></EM> - to cook up something delicious after a long day of coding. Buon appetito!</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_4-1606106904111.png" style="width: 276px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235504iB7CA9939EB870B7B/image-dimensions/276x248?v=v2" width="276" height="248" role="button" title="livelovegeek_4-1606106904111.png" alt="livelovegeek_4-1606106904111.png" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"For all the lovers of Italian food, this curiously-shaped knife (mezzaluna means half-moon) is perfect for chopping vegetables and making that perfect soffritto for your ragù, meatballs, or my personal favorite, my mom's famous risotto! Sorry – the recipe is top secret.</EM><EM>” </EM>– <STRONG>Alessandro Segala, </STRONG><A href="https://twitter.com/ItalyPaleAle" target="_blank" rel="noopener"><STRONG>@ItalyPaleAle</STRONG></A></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>6. An <A href="https://www.elgato.com/en/gaming/stream-deck-xl" target="_blank" rel="noopener">Elgato Stream Deck</A> to help you start or step-up your streaming game</STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_5-1606106904184.png" style="width: 315px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235503iA8E42DC086C13C03/image-dimensions/315x248?v=v2" width="315" height="248" role="button" title="livelovegeek_5-1606106904184.png" alt="livelovegeek_5-1606106904184.png" /></span></P> <P><BR /><STRONG>Review: </STRONG><EM>"The Stream Deck is a small programmable external keyboard with LCD buttons that comes with an initial configuration to help live-video streamers run their shows without having to change applications, type, or move their mouse. It can help you by automating interactions with Open Broadcaster Software (OBS), play sounds, launch applications, manage media player applications, send key strokes, and interact with services like Twitter, Twitch, and YouTube. There are built-in tools to run a whole series of these actions with a single button push, and every button can have a custom blog of text or image to represent its functionality. Developers LOVE the stream deck because it is very extensible through a WebSocket API using JavaScript, HTML, or even C# to build plugins that will allow you to create animations, macros, and interactions with your favorite tools. We’ve seen folks set up buttons to start and stop applications as well as to automate features in their favorite development tools.</EM><EM>” </EM>– <STRONG>Jeff Fritz, <A href="https://twitter.com/csharpfritz" target="_blank" rel="noopener">@csharpfritz</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>7. A good ole’ fashion <A href="https://smile.amazon.com/gp/product/B01M1AIV31" target="_blank" rel="noopener">fountain pen</A> that’ll make you actually want to write out your to-do list</STRONG></FONT></P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_6-1606106904197.png" style="width: 255px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235505i2EB3BD28378BEECE/image-dimensions/255x246?v=v2" width="255" height="246" role="button" title="livelovegeek_6-1606106904197.png" alt="livelovegeek_6-1606106904197.png" /></span></P> <P><STRONG>Review:</STRONG><EM> “I love the way a solid, old-school, pen compels me to write things down. Because I like writing with the pen so much, I started evaluating my days in a <A href="https://bestself.co/collections/journals-planners/products/self-journal" target="_blank" rel="noopener">Self Journal</A> even planning what I want to accomplish the next day. It's been semi-therapeutic as well during our funky pandemic time where everything seems to roll together oddly: this helps me see progress and helps with purpose.</EM><EM>” </EM>– <STRONG>Seth Juarez, <A href="https://twitter.com/sethjuarez" target="_blank" rel="noopener">@sethjuarez</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>8. A <A href="https://smile.amazon.com/dp/B07PZL6798/ref=cm_sw_r_cp_apa_fabt1_ui2SFbS2RM9XE?pldnSite=1" target="_blank" rel="noopener">mini handheld fan</A> that is perfect for maker/DIY projects or even just to cool you down during never-ending meetings </STRONG></FONT></P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_7-1606106904280.png" style="width: 264px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235506iE3FC30F118B5EFB9/image-dimensions/264x237?v=v2" width="264" height="237" role="button" title="livelovegeek_7-1606106904280.png" alt="livelovegeek_7-1606106904280.png" /></span></P> <P><BR /><STRONG>Review:</STRONG><EM> “This fan has been one of my favorite recent purchases! Not only does it keep me cool/give me wind-swept music video hair while on streams/Teams meetings, but I use it around the house, too! I recently put together a maker cabinet (for all my crafts, IoT projects, etc), and this fan has solved the problem of waiting for paint/glue/soldering projects to dry and cool. The wrapping stand also makes it easy to clamp onto whatever surface (computer/desk/DIY station) you need!” </EM>– <STRONG>Chloe Condon, <A href="https://twitter.com/ChloeCondon" target="_blank" rel="noopener">@ChloeCondon</A></STRONG></P> <P> </P> <P> </P> <P><FONT size="4"><STRONG>9. A <A href="https://smile.amazon.com/ORORO-Womens-Lightweight-Heated-Battery/dp/B083LLS47W/ref=sr_1_1_sspa" target="_blank" rel="noopener">heated vest</A> to keep you warm during the cold months of the year or on your next plane ride (whenever that may be) </STRONG></FONT></P> <P><BR /><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="livelovegeek_8-1606106904443.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/235507iE9A96D9A931563FC/image-size/medium?v=v2&px=400" role="button" title="livelovegeek_8-1606106904443.png" alt="livelovegeek_8-1606106904443.png" /></span></P> <P> </P> <P><STRONG>Review:</STRONG><EM> “Back a long, long, time ago - when I was still traveling by plane on a frequent basis (aka up until January 2020) - I saw a woman wearing a glowing vest while waiting for her luggage, so naturally, I had to ask her about it. I wrote down the brand and ordered one for myself while I waited for my ride. The vest is cute, good quality, and most importantly, warm. It has three different heat levels and the battery lasts for hours on a single charge (the battery can also double as a portable USB charger). The vest comes in men’s and women’s styles and the company makes other heated products too like sweatshirts, parkas, gloves, and yes, even socks. So, if you are perpetually cold like me, or know someone who is, I highly recommend checking these out!” </EM>– Morgan Mitchell Bell, <A href="https://twitter.com/livelovegeek" target="_blank" rel="noopener">@livelovegeek</A> </P> <P> </P> <P>So, that's it! What caught your attention? Is there anything that you'd add to this list? Let us know in the comments below!</P> <P> </P> <P>Oh, and while you're here, make sure you follow along with <A href="https://twitter.com/search?q=%23DevDecember&src=typed_query" target="_blank" rel="noopener">#DevDecember on Twitter</A>. We will be sharing cool content, fun activities, and more throughout the month of December. If you want a sneak peek of some of the fun we are planning, check out our <STRONG><A href="https://aka.ms/DevDecember20Home" target="_self">#DevDecember homepage</A></STRONG> (plus, we've already posted some of the digital swag 🤫).</P></description> <pubDate>Mon, 23 Nov 2020 18:35:21 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/the-developer-wish-list-devdecember/ba-p/1796670</guid> <dc:creator>livelovegeek</dc:creator> <dc:date>2020-11-23T18:35:21Z</dc:date> ... </item> <item> <title>Azure Advocates Weekly Round Up - Web Developers Beginner Curriculum!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-web-developers-beginner/ba-p/1891137</link> <description><H1><A href="https://github.com/microsoft/Web-Dev-For-Beginners" target="_self">Web Development for Beginners now available!</A></H1> <P><SPAN>Azure Cloud Advocates at Microsoft are pleased to offer a 12-week, 24-lesson curriculum all about JavaScript, CSS, and HTML basics. Each lesson includes pre- and post-lesson quizzes, written instructions to complete the lesson, a solution, an assignment and more. Our project-based pedagogy allows you to learn while building, a proven way for new skills to 'stick'.</SPAN></P> <P> </P> <P><SPAN>See more at: <A href="https://github.com/microsoft/Web-Dev-For-Beginners" target="_self">https://github.com/microsoft/Web-Dev-For-Beginners</A></SPAN></P> <P> </P> <P><FONT size="5"><SPAN>Content Round Up</SPAN></FONT></P> <P> </P> <P><A href="https://youtu.be/pAyG6UYuz-Y" target="_blank" rel="noopener">Datacenter Migration & Azure Migrate - Sarah Lean</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>In this Skylines Summer Session, Sarah Lean, #Microsoft #Cloud Advocate, is interviewed by Richard Hooper and Gregor Suttie and discusses</P> <P><LI-VIDEO vid="https://youtu.be/pAyG6UYuz-Y" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-setup-and-run-azure-shell-locally/ba-p/1840528?WT.mc_id=modinfra-8133-pierrer" target="_blank" rel="noopener">How to setup and run Azure Cloud Shell locally</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank" rel="noopener">Pierre Roman</A></I></STRONG></P> <P>Scripts running in Azure Cloud Shell can exceed the 20 minute timeout. Learn how to run it locally to avoid this restriction.</P> <P> </P> <P><A href="https://www.codemag.com/Article/2010052/Project-Tye-Creating-Microservices-in-a-.NET-Way" target="_blank" rel="noopener">CODE Magazine - Project Tye: Creating Microservices in a .NET Way</A><BR /><STRONG><I><A href="https://twitter.com/spboyer" target="_blank" rel="noopener">Shayne Boyer</A></I></STRONG></P> <P>Project Tye: Creating Microservices in a .NET Way</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-rfc/ba-p/1866550?WT.mc_id=modinfra-8956-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - RFC</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>This week in our Azure Stack Hub Partner solution video series, I am going to introduce you to Azure Stack Hub Partner RFC.</P> <P> </P> <P><A href="https://github.com/microsoft/Web-Dev-For-Beginners" target="_blank" rel="noopener">microsoft/Web-Dev-For-Beginners</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank" rel="noopener">Yohan Lasorsa</A></I></STRONG></P> <P>24 Lessons, 12 Weeks, Get Started as a Web Developer - microsoft/Web-Dev-For-Beginners</P> <P> </P> <P><A href="https://youtu.be/Q-s6eFPv4QM" target="_blank" rel="noopener">Introduction to #WebXR with Ayşegül Yönet</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank" rel="noopener">Aysegul Yonet</A></I></STRONG></P> <P>🥽 WebXR is the latest evolution in the exploration of virtual and augmented realities. Sounds interesting, right? Dive into the Basics of WebXR with Ayşegül...</P> <P><LI-VIDEO vid="https://youtu.be/Q-s6eFPv4QM" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://blog.mastykarz.nl/connect-react-app-microsoft-365/" target="_blank" rel="noopener">Connect your React app to Microsoft 365</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>With the Microsoft Graph Toolkit, you'll be able to connect your app to Microsoft 365 in a matter of minutes. Here is how you'd do it.</P> <P> </P> <P><A href="https://dev.to/azure/debug-node-js-app-with-built-in-or-vs-code-debugger-41n4" target="_blank" rel="noopener">Debug Node.js app with built-in or VS Code debugger</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank" rel="noopener">Yohan Lasorsa</A></I></STRONG></P> <P>Learn how to use built-in or VS Code debugger to fix bugs in your Node.js apps more efficiently with this series of bite-sized videos for beginners. </P> <P> </P> <P><A href="https://developer.microsoft.com/microsoft-365/blogs/microsoft-365-pnp-weekly-episode-104/?WT.mc_id=m365-10519-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 104 - Microsoft 365 Developer Blog</A><BR /><STRONG><I><A href="https://twitter.com/waldekm" target="_blank" rel="noopener">Waldek Mastykarz</A></I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-build-an-audit-azure-policy-with-multiple-parameters/ba-p/1866062?WT.mc_id=modinfra-10601-socuff" target="_blank" rel="noopener">How to build an audit Azure Policy with multiple parameters</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>Learn how to build an audit mode Azure Policy, to show resources that don't have all of your required tags.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/apps-on-azure/azure-functions-via-github-actions-with-no-publish-profile/ba-p/1859300?WT.mc_id=devops-10697-juyoo" target="_blank" rel="noopener">Azure Functions via GitHub Actions with No Publish Profile</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank" rel="noopener">Justin Yoo</A></I></STRONG></P> <P>Throughout this series, I'm going to show how an Azure Functions instance can map APEX domains, add an SSL certificate and update its public inbound IP</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-11-06-deploy-to-github-packages-with-github-actions/" target="_blank" rel="noopener">Deploy to GitHub Packages With GitHub Actions | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank" rel="noopener">Aaron Powell</A></I></STRONG></P> <P>Let's look at how to automate releases to GitHub Packages using GitHub Actions</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=NNDdk9Y_nPw" target="_blank" rel="noopener">DevOps and Machine Learning, with Henk Boelman</A><BR /><STRONG><I><A href="https://twitter.com/hboelman" target="_blank" rel="noopener">Henk Boelman</A></I></STRONG></P> <P>DevOps and Machine Learning, with Henk Boelman – Codecamp_The One with DevOps 2020 With machine learning becoming more and more an engineering problem the ne...</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/c-corner-azure-learning-and-microsoft-certification-ama-ft-thomas-maurer/" target="_blank" rel="noopener">C# Corner Azure Learning and Microsoft Certification – AMA ft. Thomas Maurer</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Last week I had the honor to be a guest in the C# Corner Live AMA (Ask Me Anything) about Azure Learning and Microsoft Certification.</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=0hKU9yB9Ixk" target="_blank" rel="noopener">Azure Functions - Tartine & Tech</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank" rel="noopener">Yohan Lasorsa</A></I></STRONG></P> <P>Les Azure functions font partie de la stack Server less d'Azure. Dans cet épisode, Yohan vous explique en quoi ça consiste et comment créer votre premier pro...</P> <P> </P> <P><A href="https://devkimchi.com/2020/11/11/openapi-extension-to-support-azure-functions-v1/" target="_blank" rel="noopener">OpenAPI Extension to Support Azure Functions V1</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank" rel="noopener">Justin Yoo</A></I></STRONG></P> <P>This post shows how Azure Functions v3 runtime works as a proxy to Azure Functions v1 runtime, to enable the Open API extension.</P> <P> </P> <P><A href="https://aka.ms/AAab79w" target="_blank" rel="noopener">Wayve | Disrupting Autonomous Driving</A><BR /><STRONG><I><A href="https://twitter.com/adipolak" target="_blank" rel="noopener">Adi Polak</A></I></STRONG></P> <P>Join us for an exceptional conversation with Alex Kendall, co-founder, and CEO of Wayve, who raised more than 40M$ to kickstart the biggest vehicle academy. </P> <P> </P> <P><A href="https://codetraveler.io/2020/11/11/using-immutable-objects-with-sqlite-net/" target="_blank" rel="noopener">Using Immutable Objects with SQLite-Net</A><BR /><STRONG><I><A href="https://twitter.com/TheCodeTraveler" target="_blank" rel="noopener">Brandon Minnick</A></I></STRONG></P> <P>SQLite-NET has become the most popular database, especially amongst Xamarin developers, but it hasn't supported Immutable Objects, until now! Thanks to Init-Only Properties in C#9.0, we can now use Immutable Objects with our SQLite database!</P> <P> </P></description> <pubDate>Mon, 16 Nov 2020 15:34:07 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-web-developers-beginner/ba-p/1891137</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-11-16T15:34:07Z</dc:date> ... </item> <item> <title>DevTest Labs - Shutdown Notifications in Teams Chat Messages</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-shutdown-notifications-in-teams-chat-messages/ba-p/1874092</link> <description><P>Azure DevTest Labs automatic shutdown policies can save money by ensuring that VMs are shut down every night and do not sit idle indefinitely. On those occasions when a lab user works late, the shutdown notification settings allow lab users to be warned when the machine is about to be shutdown. In this blog post, we will cover how to use the Webhook URL setting for auto-shutdown notification settings to send a direct chat message to someone working late and warn them that their machine is about to be turned off. We will also cover how to create the chat message so the user can delay the shutdown by an hour or two by clicking a button in the chat message.</P> <H1>Create Logic App to receive shutdown notifications</H1> <OL> <LI><A href="https://docs.microsoft.com/en-us/azure/logic-apps/quickstart-create-first-logic-app-workflow#create-your-logic-app" target="_blank" rel="noopener">Create a Logic App</A>.</LI> <LI>Add <A href="https://docs.microsoft.com/en-us/azure/connectors/connectors-native-reqres#add-request-trigger" target="_blank" rel="noopener"><STRONG>When an HTTP request is received trigger</STRONG></A> to the Logic App.</LI> </OL> <P class="lia-align-center"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sagar_Lankala_0-1605041267623.png" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232756iF13DD1F4D397F4BE/image-size/medium?v=v2&px=400" role="button" title="Sagar_Lankala_0-1605041267623.png" alt="Sagar_Lankala_0-1605041267623.png" /></span></P> <P> </P> <P>As seen in the picture above, this action needs a JSON schema so information in the request body can be used by actions in the Logic App. Schema for the request is below for convenience. The <A href="https://docs.microsoft.com/en-us/azure/devtest-labs/devtest-lab-auto-shutdown#notifications" target="_blank" rel="noopener">Configure autoshutdown for lab and compute virtual machines in Azure DevTest Labs</A> article contains the latest JSON schema for shutdown notifications.</P> <P> </P> <P> <FONT color="#000000"><STRONG>{</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "$schema": "<A href="http://json-schema.org/draft-04/schema#" target="_blank" rel="noopener">http://json-schema.org/draft-04/schema#</A>",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "properties": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl120": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl60": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "eventType": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "guid": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "labName": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "owner": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "resourceGroupName": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "skipUrl": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "subscriptionId": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmName": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmUrl": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "minutesUntilShutdown": {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "string"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "required": [</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "skipUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl60",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "delayUrl120",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmName",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "guid",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "owner",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "eventType",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "subscriptionId",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "resourceGroupName",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "labName",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "vmUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "minutesUntilShutdown"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> ],</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "object"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P> </P> <OL start="3"> <LI>Add a <A href="https://docs.microsoft.com/en-us/connectors/teams/#post-your-own-adaptive-card-as-the-flow-bot-to-a-user" target="_blank" rel="noopener"><STRONG>Post your own adaptive card as the Flow bot to a user (preview)</STRONG></A> action to the Logic App. This action will send a chat message from the Flow bot to a specific user. This action also allows an <A href="https://adaptivecards.io/" target="_blank" rel="noopener">adaptive card</A> to be sent to a user, which means we can add buttons to the message. This action does require a connection of a Microsoft Account.</LI> </OL> <P> </P> <P>The <STRONG>recipient</STRONG> of the message should be the owner of the VM. Get the owner’s email by searching for the ‘owner’ dynamic content from the HTTP request trigger.</P> <P> </P> <P>The message in this action will be JSON that uses the Adaptive Card JSON schema. For our example, we have a simple message to the user telling them that their VM will be shutdown soon and buttons to allow the user to skip the shutdown, delay the shutdown 1 hour or delay the shutdown 2 hours.</P> <P> </P> <P><FONT color="#000000"><STRONG>{</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "$schema": "<A href="http://adaptivecards.io/schemas/adaptive-card.json" target="_blank" rel="noopener">http://adaptivecards.io/schemas/adaptive-card.json</A>",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "AdaptiveCard",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "version": "1.0",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "speak": "Your virtual machine is shutting down soon. Do you want to delay the shutdown?",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "body": [</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "TextBlock",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text": "Virtual Machine Auto-Shutdown",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "size": "large",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "weight": "bolder"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "TextBlock",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "text": "The virtual machine @{triggerBody()['vmName']} is scheduled for shutdown in @{triggerBody()?['minutesUntilShutdown']} minutes.",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "wrap": "true"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> ],</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "actions": [</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "Action.OpenUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "title": "Delay 1 hour",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "url": "@{triggerBody()['delayUrl60']}"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "Action.OpenUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "title": "Delay 2 hours",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "url": "@{triggerBody()['delayUrl120']}"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> },</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> {</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "type": "Action.OpenUrl",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "title": "Skip shutdown",</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> "url": "@{triggerBody()['skipUrl']}"</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> }</STRONG></FONT></P> <P><FONT color="#000000"><STRONG> ]</STRONG></FONT></P> <P><FONT color="#000000"><STRONG>}</STRONG></FONT></P> <P> </P> <P>The ‘@triggerBody()’ statements tell the LogicApp to get the value from the HTTP request trigger we created in the previous step.</P> <P> </P> <P>Lastly, set the <STRONG>IsAlert</STRONG> setting in the action to ‘Yes’. This will cause the user to be notified in their Activity stream when the message is sent.</P> <P> </P> <P>Action should look like the following picture.</P> <P class="lia-align-center"><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Sagar_Lankala_4-1605041410636.png" style="width: 476px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232759iF4769805A7DF2FB9/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_4-1605041410636.png" alt="Sagar_Lankala_4-1605041410636.png" /></span></P> <P> </P> <OL start="4"> <LI>Add a HTTP <STRONG>Response</STRONG> action. Set the status code to 200 to indicate everything was successful.</LI> </OL> <P>Now that we have our Logic App that can handle sending a message to a user, it’s time to setup the DevTest Lab to send notifications to our Logic App. We will need the url to call the Logic App. To get the url, expand the <STRONG>When an HTTP request is received</STRONG> trigger step and copy the <STRONG>HTTP POST URL</STRONG> property.</P> <H1>Configure lab auto-shutdown settings</H1> <P> </P> <P>Auto-shutdown settings are configured at either the lab level or individual lab VM level. Individual settings for auto-shutdown notifications are only allowed if the lab owner sets the auto-shutdown policy to allow individual users to override the lab auto-shutdown settings. See <A href="https://docs.microsoft.com/azure/devtest-labs/devtest-lab-auto-shutdown" target="_blank" rel="noopener">Configure auto-shutdown for lab in Azure DevTest Labs</A> for further details.</P> <P>Let’s cover how to use the Logic App we created above by configuring auto-shutdown settings at a lab level.</P> <OL> <LI>On the home page for your lab, select Configuration and policies.</LI> <LI>Select <STRONG>Auto-shutdown</STRONG> in the <STRONG>Schedules</STRONG> section of the left menu.</LI> <LI>Select <STRONG>On</STRONG> to enable auto-shutdown policy.</LI> <LI>For <STRONG>Webhook URL</STRONG>, paste the url for the Logic App we created earlier.</LI> <LI>Select Save.</LI> </OL> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_2-1605041267648.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232757i75C24C3EAC58D968/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_2-1605041267648.png" alt="Sagar_Lankala_2-1605041267648.png" /></span></P> <P> </P> <P> </P> <H1>Conclusion</H1> <P>That’s all we need to do! Next time a lab VM in our lab is about to be shutdown, the lab VM owner will be sent a chat message in Teams. The message will allow the lab VM owner to quickly delay shutdown using the action buttons on the bottom of the message.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Sagar_Lankala_3-1605041267653.png" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232758i79803ECA42DCC3B6/image-size/large?v=v2&px=999" role="button" title="Sagar_Lankala_3-1605041267653.png" alt="Sagar_Lankala_3-1605041267653.png" /></span></P> <P> </P> <P> </P></description> <pubDate>Fri, 13 Nov 2020 18:06:05 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/devtest-labs-shutdown-notifications-in-teams-chat-messages/ba-p/1874092</guid> <dc:creator>Sagar_Lankala</dc:creator> <dc:date>2020-11-13T18:06:05Z</dc:date> ... </item> <item> <title>Azure Advocates Weekly Round Up - .NET Learn Challenge, MS Exam Prep help and more!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-net-learn-challenge-ms-exam-prep/ba-p/1867304</link> <description><P>It's November, .NET November that is. Check out the .NET Learn Challenge get over 35 hours of FREE Learning. More Exam help posts from the team this week amongst many other great code samples, blog posts and videos!</P> <P> </P> <P><A href="https://youtu.be/pAyG6UYuz-Y" target="_blank" rel="noopener">Datacenter Migration & Azure Migrate - Sarah Lean</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>In this Skylines Summer Session, Sarah Lean, #Microsoft #Cloud Advocate, is interviewed by Richard Hooper and Gregor Suttie and discusses</P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/pAyG6UYuz-Y" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://www.twitch.tv/videos/793735988" target="_blank" rel="noopener">Shayne sits down with LayalCodesIt on Twitch</A><BR /><STRONG><I><A href="https://twitter.com/spboyer" target="_blank">Shayne Boyer</A></I></STRONG></P> <P>Hang out with Shayne on Layla's channel this week to hear more about the .NET Learn Challenge and working within Developer Relations at Microsoft.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/apps-on-azure/how-to-create-a-no-code-ai-app-with-azure-cognitive-services-and/ba-p/1847264?WT.mc_id=aiml-8438-ayyonet" target="_blank" rel="noopener">How to Create a No Code AI App with Azure Cognitive Services and Power Apps</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank">Aysegul Yonet</A></I></STRONG></P> <P>You might have an idea for an application using AI and not have anyone to build it. You might be a programmer and want to try out your ideas and Azure</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-telkomtelstra/ba-p/1837289?WT.mc_id=modinfra-8960-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - telkomtelstra</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>telkomtelstra is a Service Provider working with Enterprise customers across Indonesia. Check out their journey with Azure Stack Hub!</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/vlc-energy-optimization-with-gpu/?WT.mc_id=green-8990-ashussai" target="_blank" rel="noopener">VLC Energy Optimization With GPU | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank">Asim Hussain</A></I></STRONG></P> <P>For the past few years, sustainable software engineering has arisen as one of the major topics in the daily discussions I have with software developers. Due to the advancements in technology, as well as the increasing awareness we share on climate change and the overall impact of tech on the environment,</P> <P> </P> <P><A href="https://github.com/microsoft/iot-curriculum/tree/main/labs/iot/environment-monitor" target="_blank" rel="noopener">microsoft/iot-curriculum</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank">Jim Bennett</A></I></STRONG></P> <P>Hands on labs and content for students and educators to learn and teach the Internet of Things at schools, universities, coding clubs, community colleges and bootcamps - microsoft/iot-curriculum</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/what-is-azure-defender/ba-p/1843528?WT.mc_id=modinfra-9866-socuff" target="_blank" rel="noopener">What is Azure Defender?</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank">Sonia Cuff</A></I></STRONG></P> <P>Learn about the improved experience for managing security across hybrid and multi-cloud environments with the Azure Defender XDR product.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/all-you-need-to-know-about-microsoft-exams/ba-p/1794460?WT.mc_id=modinfra-10046-salean" target="_blank" rel="noopener">All you need to know about Microsoft Exams</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Taking any exam can be a stressful experience which requires a lot of preparation and planning. Let's look at the process for studying, booking and sitting a Microsoft exam. </P> <P> </P> <P><A href="https://youtu.be/Q-s6eFPv4QM" target="_blank" rel="noopener">Introduction to #WebXR with Ayşegül Yönet</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank">Aysegul Yonet</A></I></STRONG></P> <P>🥽 WebXR is the latest evolution in the exploration of virtual and augmented realities. Sounds interesting, right? Dive into the Basics of WebXR with Ayşegül.</P> <P><LI-VIDEO vid="https://youtu.be/Q-s6eFPv4QM" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P><A href="https://dev.to/azure/build-a-web-api-with-node-js-and-express-16fk" target="_blank" rel="noopener">Build a web API with Node.js and Express</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank">Yohan Lasorsa</A></I></STRONG></P> <P>Learn how to use Node.js and Express to create a RESTful web API with this series of bite-sized videos for beginners. </P> <P> </P> <P><A href="https://developer.microsoft.com/sharepoint/blogs/microsoft-365-pnp-weekly-episode-103/?WT.mc_id=m365-10520-wmastyka" target="_blank" rel="noopener">Microsoft 365 PnP Weekly - Episode 103 - Microsoft 365 Developer Blog</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>Connect to the latest conferences, trainings, and blog posts for Microsoft 365, Office client, and SharePoint developers. Join the Microsoft 365 Developer Program.</P> <P> </P> <P><A href="https://dev.to/dotnet/net-learning-challenge-4008" target="_blank" rel="noopener">.NET Learning Challenge!</A><BR /><STRONG><I><A href="https://twitter.com/spboyer" target="_blank">Shayne Boyer</A></I></STRONG></P> <P>Compete, Learn, and Develop Skills <A href="https://aka.ms/dotnetskills" target="_self">https://aka.ms/dotnetskills</A> November 1, 2020 - November 30th. </P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/how-to-get-started-learning-microsoft-azure-and-cloud-computing/" target="_blank" rel="noopener">How to get started learning Microsoft Azure and Cloud Computing</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Here is how to get started with learning Microsoft Azure and Cloud Computing. Check out this blog and learn how to get started with Azure!</P> <P> </P> <P><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Interview with Sarah Lean, Senior Cloud Advocate at Microsoft</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/experts-live-switzerland-2020-azure-hybrid-learn-about-hybrid-cloud-management/" target="_blank" rel="noopener">Experts Live Switzerland 2020: Azure Hybrid – Learn about Hybrid Cloud Management</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Now the recording of my session: "Azure Hybrid - Learn about Hybrid Cloud Management" is available! With an overview on Microsoft Azure Arc!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/internet-of-things/az-220-iot-developer-certification-study-guide/ba-p/1854393?WT.mc_id=iot-10684-pdecarlo" target="_blank" rel="noopener">AZ-220 IoT Developer Certification Study Guide</A><BR /><STRONG><I><A href="https://twitter.com/pjdecarlo" target="_blank">Paul DeCarlo</A></I></STRONG></P> <P>Microsoft offers an official IoT Developer Specialty Certification which requires passing the AZ-220 Certification Exam . </P> <P> </P> <P><A href="https://www.youtube.com/playlist?list=PLGi0uFHAUvEGIXv0dm93Dca84FT3EXGY0" target="_blank" rel="noopener">Environment Monitor Lab - Using a Raspberry Pi</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank">Jim Bennett</A></I></STRONG></P> <P>A walkthrough of the Environment Monitor IoT lab available at <A href="https://aka.ms/iot-curriculum/env-monitor" target="_blank">https://aka.ms/iot-curriculum/env-monitor</A> using a Raspberry Pi and a Grove Pi+ kit.</P> <P> </P> <P><A href="https://devkimchi.com/2020/11/05/deploying-azure-functions-via-github-actions-without-publish-profile/" target="_blank" rel="noopener">Deploying Azure Functions via GitHub Actions without Publish Profile</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank">Justin Yoo</A></I></STRONG></P> <P>This post shows how to deploy Azure Functions app via GitHub Actions, without having to know the publish profile.</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-11-05-building-a-video-chat-app-part-3-displaying-video/" target="_blank" rel="noopener">Building a Video Chat App, Part 3 - Displaying Video | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank">Aaron Powell</A></I></STRONG></P> <P>We've got access to the camera, now to display the feed</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=FHsMf_S7Tds" target="_blank" rel="noopener">Azure Thursday - 5 November 2020</A><BR /><STRONG><I><A href="https://twitter.com/hboelman" target="_blank">Henk Boelman</A></I></STRONG></P> <P>View the schedule on: <A href="https://www.azurethursday.com" target="_self">https://www.azurethursday.com</A></P> <P> </P> <P><A href="https://blog.mastykarz.nl/download-user-group-profile-picture-microsoft-graph-js-sdk/" target="_blank" rel="noopener">Quick tip: download user or group profile picture using Microsoft Graph JS SDK</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>When building your application on Microsoft 365 you might need to download the profile picture of a user or group. Here is how to do it using the Microsoft Graph SDK.</P> <P> </P> <P><A href="https://dev.to/maudlv/evenements-en-ligne-intelligence-artificielle-machine-learning-et-azure-4jb6" target="_blank" rel="noopener">Evénements en ligne : Intelligence Artificielle, Machine Learning et Azure</A><BR /><STRONG><I>Maud Levy</I></STRONG></P> <P>Pour le mois de novembre, Microsoft propose plusieurs conférences en ligne en français autour du Mach...</P> <P> </P> <P><A href="https://youtu.be/McXNicDXWkM" target="_blank" rel="noopener">Dataminds Connect - Taking Models To The Next Level With Azure Machine Learning</A><BR /><STRONG><I><A href="https://twitter.com/hboelman" target="_blank">Henk Boelman</A></I></STRONG></P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/McXNicDXWkM" align="center" size="custom" width="661" height="661" uploading="false" thumbnail="https://i.ytimg.com/vi/Q-s6eFPv4QM/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <!-- Add a placeholder for the Twitch embed --><!-- Load the Twitch embed script --><!-- Create a Twitch.Player object. This will render within the placeholder div --> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/11/c-corner-azure-learning-and-microsoft-certification-ama-ft-thomas-maurer/" target="_blank" rel="noopener">C# Corner Azure Learning and Microsoft Certification – AMA ft. Thomas Maurer</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Last week I had the honor to be a guest in the C# Corner Live AMA (Ask Me Anything) about Azure Learning and Microsoft Certification.</P> <P> </P></description> <pubDate>Mon, 09 Nov 2020 15:23:03 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-net-learn-challenge-ms-exam-prep/ba-p/1867304</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-11-09T15:23:03Z</dc:date> ... </item> <item> <title>Using IoT and Azure to Help with Family Chores</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-iot-and-azure-to-help-with-family-chores/ba-p/1809444</link> <description><H3>Intro </H3> <P> </P> <P>At Microsoft Ignite 2020, Scott Hanselman showcased how he is using Azure, IoT (Internet of Things), and Developer Tools to help his family manage household chores. </P> <P> </P> <H3>The Problem</H3> <P> </P> <P>Scott, like more and more people who are working from home, realized that there had to be a better way to stay in front of the need to do additional chores around his home. With everyone at home, things like dishes, garbage, and general chores add up fast. He wanted to be able to see at a glance the current list of chores that needed to be completed, real-time status of chores that can change quickly over time, and to be notified when certain chores were needed to be complete, for instance garbage.</P> <P> </P> <H3>The Solution</H3> <P> </P> <P>Scott already leverages a <A href="https://dakboard.com/site" target="_blank" rel="noopener">DAKboard</A>, which allows customization of a display via a website. On <A href="https://www.hanselman.com/blog/how-to-build-a-wall-mounted-family-calendar-and-dashboard-with-a-raspberry-pi-and-cheap-monitor" target="_blank" rel="noopener">his DAKboard</A>, Scott can put his work/personal calendar, family photos and the weather all on a monitor that sits in his kitchen. He wanted to be able to add a "heatmap" of sorts to his DAKboard that would show parts of the house that notable chores are (garbage cans for instance) and what the "status" of them are in real-time. This way, if he sees that a chore needs to be done, the family can respond. </P> <P> </P> <P>There are a few things at play here. </P> <P> </P> <UL> <LI><STRONG>Sensors: </STRONG>Most of the chores rely on items that are not "smart", so external sensors and an IoT solution will be needed.</LI> <LI><STRONG>Web:</STRONG> The heatmap requires real-time updates, so a web solution that offers such will be needed.</LI> <LI><STRONG>Notifications:</STRONG> Finally, he wants to be notified when the threshold is met of a certain chore instantly, so a communication mechanism is needed.</LI> </UL> <P> </P> <P>With the above requirements, we can start to build a solution. The solution will require an IoT device that will poll the status of a particular chore. The device will update a datastore via a service and the heatmap will be a web application that will sync with the value of the datastore in real time. With that, we landed on the below solution architecture.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Picture1.png" style="width: 936px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/231521iF77D129E628EDA49/image-size/large?v=v2&px=999" role="button" title="Picture1.png" alt="Picture1.png" /></span></P> <P> </P> <P>To build the solution, we knew that an IoT device would be needed to monitor the status of the chore. We decided on a <A href="https://www.raspberrypi.org/" target="_blank" rel="noopener">Raspberry Pi</A> with a connected . In the case of garbage status, the sensor was attached to the inside of the lid of the garbage can. The sensor could then check the level of the garbage in the can and update the chore datastore via an Azure Function written in Node.js. When the datastore is updated, another Azure Function, written in C#, is triggered that compares the current level to the threshold, and if it is met, a notification is sent.</P> <P> </P> <P>For the notification, we relied on recently announced <A href="https://docs.microsoft.com/en-us/azure/communication-services/overview" target="_blank" rel="noopener">Azure Communication Services</A><U><SPAN> to send an SMS</SPAN></U>. When the notification function determines a message needs to be sent, it will leverage a <A href="https://docs.microsoft.com/en-us/azure/communication-services/quickstarts/telephony-sms/get-phone-number" target="_blank" rel="noopener">phone number</A> obtained via Azure Communication Services and the chore assignee will get a message from that number. Azure Communication Services is configured via the Azure Portal, more information can be seen at the <A href="https://github.com/microsoft/ChoresIoT#deployment-scenarios" target="_blank" rel="noopener">GitHub repository for the ChoresIOT solution</A>. Working against Azure Communication Services is seamless, as it is included in the already existing <A href="https://azure.github.io/azure-sdk/" target="_blank" rel="noopener">Azure SDK</A> (software development kit). There is also an <A href="https://docs.microsoft.com/en-us/azure/communication-services/quickstarts/telephony-sms/logic-app" target="_blank" rel="noopener">Azure Logic App connector for Azure Communication Services</A> that you can leverage.</P> <P> </P> <P>For the heatmap UI, we need to leverage a web technology that allows real-time communication with the function that manages the datastore. The technology that was decided on was <A href="https://docs.microsoft.com/en-us/azure/azure-signalr/signalr-overview" target="_blank" rel="noopener">Azure SignalR Service</A>. The complete application leverages <A href="https://docs.microsoft.com/en-us/aspnet/core/blazor/?view=aspnetcore-3.1#blazor-webassembly" target="_blank" rel="noopener">ASP.NET Core Blazor WebAssembly</A> in .NET 5 configured to integrate with Azure SignalR Service. Because we are leveraging <A href="https://webassembly.org/" target="_self">WebAssembly</A>, we are able to deploy the application to any host since a backend server is not required. We deployed the web application to <A href="https://docs.microsoft.com/en-us/azure/static-web-apps/overview" target="_blank" rel="noopener">Azure Static Web Apps</A>, a new service in Azure where you can host applications that do not require a connected backend server. Finally, since the solution is using Azure SignalR Service, when the chore datastore is updated, the heatmap will update automatically whenever the threshold for a particular chore is met.</P> <P> </P> <P>Now that the solution is complete, whenever a chore status is updated via the Raspberry Pi, the datastore will be updated via the Azure Function. Once the datastore is updated, the other Azure Function will check the status the chore threshold and send an SMS if needed. Finally, the heatmap will be updated in real-time. This end to end experience can be seen below during the Microsoft Ignite 2020 session.</P> <P> </P> <P><LI-VIDEO vid="https://youtu.be/0oLZPgbKvmc?t=1158" align="center" size="small" width="200" height="113" uploading="false" thumbnail="https://i.ytimg.com/vi/0oLZPgbKvmc/hqdefault.jpg" external="url"></LI-VIDEO></P> <P> </P> <P>As you can see in the video, when Scott puts trash into the garbage, the heatmap automatically updates and he receives an SMS message, powered by Azure Communication Services. </P> <P> </P> <H3>What's Next?</H3> <P> </P> <P>The <A href="https://github.com/microsoft/ChoresIoT" target="_self">ChoresIoT GitHub Repository</A> lists out all the parts needed to setup a similar solution at home. Take a look at the source code and contribute or ask questions if interested. For more information on <A href="https://azure.microsoft.com/en-us/services/communication-services/" target="_self">Azure Communication Services</A> and how to enable telephony-over-IP communications features to your applications, be sure to check out the <A href="https://docs.microsoft.com/azure/communication-services/overview" target="_blank" rel="noopener">documentation</A>.</P> <P> </P> <P>Also be sure to check out the <A href="https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-free-services" target="_blank" rel="noopener">free services</A> that you can create in Azure today.</P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P> <P> </P></description> <pubDate>Wed, 04 Nov 2020 20:33:33 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/using-iot-and-azure-to-help-with-family-chores/ba-p/1809444</guid> <dc:creator>Isaac Levin</dc:creator> <dc:date>2020-11-04T20:33:33Z</dc:date> ... </item> <item> <title>Azure Advocate Weekly Round Up - DNS + SSL & GitHub Actions? HealthChecks for VMs? Sounds Scary!!!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-dns-ssl-amp-github-actions/ba-p/1837854</link> <description><P><A href="https://www.xamarinpodcast.com/80" target="_blank" rel="noopener">The Xamarin Podcast Episode 80: Seeing AI</A><BR /><STRONG><I><A href="https://twitter.com/codemillmatt" target="_blank">Matt Soucoup</A></I></STRONG></P> <P>Seeing AI is an app for iOS that narrates the world around you. And it's built with Xamarin and Azure. In this episode of the Xamarin Podcast, Matt talks to the folks behind Seeing AI.</P> <P> </P> <P><A href="https://devblogs.microsoft.com/sustainable-software/the-carbon-footprint-of-ai/?WT.mc_id=green-8966-ashussai" target="_blank" rel="noopener">The Carbon Footprint Of AI | Sustainable Software</A><BR /><STRONG><I><A href="https://twitter.com/jawache" target="_blank">Asim Hussain</A></I></STRONG></P> <P>The carbon footprint of AI is increasing exponentially. Bigger models requiring ever more data contribute toward 'RedAI' - we need a new approach</P> <P> </P> <P><A href="https://youtu.be/OIKV_jc3yec" target="_blank" rel="noopener">Collect data from a Windows computer in a hybrid environment with Azure Monitor</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>Azure Monitor can collect data directly from your physical or virtual Windows computers in your environment into a Log Analytics workspace for detailed analy...</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=EMceqFUDh4M" target="_blank" rel="noopener">Microsoft 365 & SharePoint PnP Weekly – Episode 102</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>In this weekly discussion of latest news and topics around Microsoft 365, hosts – Vesa Juvonen (Microsoft) | @vesajuvonen, Waldek Mastykarz (Microsoft) </P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/first-look-at-azure-automanage/ba-p/1787819?WT.mc_id=modinfra-9950-salean" target="_blank" rel="noopener">First Look at Azure Automanage</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Let's take a first look at the new service, Azure Automanage that was launched at Microsoft Ignite 2020.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/step-by-step-azure-resource-health-alert-into-microsoft-teams/ba-p/1817484?WT.mc_id=modinfra-10077-socuff" target="_blank" rel="noopener">Step-by-Step: Azure Resource Health alert into Microsoft Teams</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank">Sonia Cuff</A></I></STRONG></P> <P>Step-by-step create an Azure resource health alert for an unavailable virtual machine and post a message into Microsoft Teams.</P> <P> </P> <P><A href="https://24x7itconnection.com/2020/10/29/microsoft-endpoint-manager-for-modern-management-in-2020/" target="_blank" rel="noopener">Microsoft Endpoint Manager for Modern Management in 2020</A><BR /><STRONG><I><A href="https://twitter.com/ExchangeGoddess" target="_blank">Phoummala Schmitt</A></I></STRONG></P> <P>This year more than ever it’s important to be able to secure and manage devices. Microsoft Endpoint Manager is a great option.</P> <P> </P> <P><A href="https://www.techielass.com/teams-meeting-recordings" target="_blank" rel="noopener">Microsoft Teams Meeting Recordings</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>Techie Lass Blog - Technical…Practical…From A Scottish Lass</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/manage-sharepoint-and-microsoft-teams-with-powershell-core/ba-p/1792229?WT.mc_id=modinfra-10259-abartolo" target="_blank" rel="noopener">How to Manage SharePoint and Microsoft Teams with PowerShell Core</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank">Anthony Bartolo</A></I></STRONG></P> <P>If you're addicted with SharePoint, you might be glad to know that managing SharePoint is now possible with PowerShell Core.</P> <P> </P> <P><A href="https://youtu.be/6fhpyi1oJMk" target="_blank" rel="noopener">Azure Security Centre - Asset Inventory</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank">Sarah Lean</A></I></STRONG></P> <P>In this "Azure at a Glance" video let's take a look at what the Asset Inventory feature with Azure Security Centre can offer you. For more information check ...</P> <P> </P> <P><A href="https://devkimchi.com/2020/10/28/updating-azure-dns-and-ssl-certificate-on-azure-functions-via-github-actions/" target="_blank" rel="noopener">Updating Azure DNS and SSL Certificate on Azure Functions via GitHub Actions</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank">Justin Yoo</A></I></STRONG></P> <P>This post shows how to automatically update A record on Azure DNS when the inbound IP address of Azure Functions instance is updated, and reflect the change to the SSL certificate through GitHub Actions.</P> <P> </P> <P><A href="https://www.jimbobbennett.io/run-visual-studio-code-on-a-raspberry-pi/" target="_blank" rel="noopener">Run Visual Studio Code on a Raspberry Pi</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank">Jim Bennett</A></I></STRONG></P> <P>It's finally here! An official supported version of VS Code that runs on a Raspberry Pi! ICYMI: VS Code now officially supports @Raspberry_Pi too! </P> <P> </P> <P><A href="https://www.youtube.com/watch?v=3DgpVwnQ3V4" target="_blank" rel="noopener">Demo JBoss EAP VMSS Quickstart</A><BR /><STRONG><I><A href="https://twitter.com/skriemhild" target="_blank">Sandra Ahlgrimm</A></I></STRONG></P> <P>Theresa Nguyen, Senior Product Manager at Microsoft showcases JBoss EAP on Azure VMSS </P> <P> </P> <P><A href="https://channel9.msdn.com/Shows/IT-Ops-Talk/Azure-Stack-Hub-Partner-Solutions-Series-MyCloudDoor?WT.mc_id=modinfra-10338-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - MyCloudDoor</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank">Thomas Maurer</A></I></STRONG></P> <P>MyCloudDoor is an Azure Stack Hub partner and Preferred SI that focused on managed services and creating value for their customers throughout the world. </P> <P> </P> <P><A href="https://youtu.be/5CZT8-7eFkg" target="_blank" rel="noopener">Az Update Show S01E26</A><BR /><STRONG><I><A href="https://twitter.com/WiredCanuck" target="_blank">Pierre Roman</A></I></STRONG></P> <P>Episode 26 of the Az Update Show. Another plethora of news stories to share on this week's AzUpdate show. News includes: What’s new for IT Pros in Windows 10...</P> <P> </P> <P><A href="https://dev.to/azure/get-your-to-do-tasks-every-morning-on-microsoft-teams-using-azure-logic-apps-3ci1/?WT.mc_M365-10421-aycabas" target="_blank" rel="noopener">Get your To-Do tasks every morning on Microsoft Teams using Azure Logic Apps</A><BR /><STRONG><I><A href="https://twitter.com/aycabs" target="_blank">Ayca Bas</A></I></STRONG></P> <P>I am super excited since Microsoft Graph To Do APIs are introduced at Microsoft Build 2020. </P> <P> </P> <P><A href="https://dev.to/sinedied/work-with-files-and-directories-in-a-node-js-app-4kh8" target="_blank" rel="noopener">Work with files and directories in a Node.js app</A><BR /><STRONG><I><A href="https://twitter.com/sinedied" target="_blank">Yohan Lasorsa</A></I></STRONG></P> <P>Learn how to use built-in modules to work with files and directories in a Node.js app with this series of bite-sized videos for beginners. Tagged with webdev, beginners, javascript, node.</P> <P> </P> <P><A href="https://blog.mastykarz.nl/move-microsoft-teams-without-losing-content/" target="_blank" rel="noopener">Move to Microsoft Teams without losing your content</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>With this new Microsoft Graph API you can move to Microsoft Teams and take your data with you!</P> <P> </P></description> <pubDate>Fri, 30 Oct 2020 15:43:41 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocate-weekly-round-up-dns-ssl-amp-github-actions/ba-p/1837854</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-10-30T15:43:41Z</dc:date> ... </item> <item> <title>Developers + Nurses = NurseHack4Health</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-nurses-nursehack4health/ba-p/1820356</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NurseHack4Health.png" style="width: 444px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232950iF82DEF17B3243D04/image-size/large?v=v2&px=999" role="button" title="NurseHack4Health.png" alt="NurseHack4Health.png" /></span></P> <P>Microsoft is a proud sponsor of <STRONG>NurseHack4Health</STRONG> - a 3 day virtual hackathon from <STRONG>Nov. 13-15, 2020</STRONG> to leverage technology and help improve access to reliable, trusted information. This hackathon is made possible by the collaboration between Microsoft, Johnson & Johnson, SONSIEL, and devup. Read below for more details, and <STRONG>register at</STRONG> <A href="https://www.nursehack4health.org/" target="_blank" rel="noopener">https://www.nursehack4health.org/</A> <STRONG>by Nov. 9 to reserve a spot</STRONG>. </P> <P> </P> <P><STRONG>The challenge:</STRONG> Information about the COVID-19 pandemic is rapidly changing, and gaining access to reliable public health information has been challenging, highlighting a need for improved communication and trustworthy resources. </P> <P> </P> <P><STRONG>The hackathon:</STRONG> This event presents a rare opportunity to bring together individuals with a diverse set of ideas and skills - nurses, other healthcare professionals, engineers, IT experts and innovators - to problem-solve in a supporting, inspiring and innovative environment. This is an open source hackathon being hosted on Microsoft Teams, and using GitHub for solution repositories.</P> <P> </P> <P><STRONG>The participant's experience:</STRONG> Participants will focus on how technology can be leveraged to create better outcomes for all in the most pressing areas of education and communication. Central ideas of focus may include:</P> <UL> <LI>Ensuring the health and safety of students and teachers in the classroom</LI> <LI>Relaying to the public the importance of vaccines</LI> <LI>Breaking down racial disparities and social inequities</LI> <LI>Sharing best practices across healthcare providers and facilities</LI> <LI>And more</LI> </UL> <P>Participants will also:</P> <UL> <LI>Work alongside Microsoft and architects from the dev community</LI> <LI>Bring existing skills around HTML/JavaScript, ASP.NET, Java, SQL or NoSQL</LI> <LI>Have access to free Azure services, Power BI, and Power Apps during the duration of the hackathon</LI> </UL> <P> </P> <P><STRONG>Pre-hackathon training:</STRONG> The hackathon is supported by Microsoft mentors to help answer technical questions. To get a jump start on GitHub, Teams, Power Apps, and Power Virtual Agents bots, join the <A href="https://aka.ms/nursehack4health/cscreg" target="_self">Cloud Skills Challenge</A> for curated self-learning modules covering these topics. Track your progress against others on the <A href="https://aka.ms/nursehack4health/cscleader" target="_self">leaderboard</A>.</P> <P> </P> <P>During the hackathon, the following technologies are expected to surface:</P> <UL> <LI>AI-Driven Software Development</LI> <LI>Progressive Web Apps</LI> <LI>Internet of Things for Healthcare - Connecting Devices, Enhancing Accessibility</LI> <LI>Blockchain</LI> <LI>AR/VR/MR - The Use of Immersive Technologies</LI> <LI>Low/No-Code Development - Development Using GUIs (Power Platform)</LI> </UL> <P> </P> <P><STRONG>All participants are welcomed</STRONG>: Despite the event being called a hackathon, this is not just about coding, it's about community. Whether you are new to hackathons or a veteran, there are plenty of ways to get involved, and it's a great opportunity to learn. All participants are welcomed!</P> <P> </P> <P>Register or learn more about the hackathon at <A href="https://www.nursehack4health.org/" target="_blank" rel="noopener">https://www.nursehack4health.org/</A></P> <P> </P> <P> </P></description> <pubDate>Wed, 11 Nov 2020 18:16:54 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/developers-nurses-nursehack4health/ba-p/1820356</guid> <dc:creator>NinaSui</dc:creator> <dc:date>2020-11-11T18:16:54Z</dc:date> ... </item> <item> <title>Azure Advocates Weekly Round Up - Saving Halloween with Azure Maps and more!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-saving-halloween-with-azure-maps/ba-p/1819428</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="CatShark.jpg" style="width: 880px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/232982i8B23E1BEA8B332CE/image-size/large?v=v2&px=999" role="button" title="CatShark.jpg" alt="CatShark.jpg" /></span></P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-salt/ba-p/1795522?WT.mc_id=modinfra-8959-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - Salt</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Salt business focuses on bringing a multi-tenanted Azure Stack Hub environment in the Caribbean Islands. Check it out!</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=wl80Bk5T7b4" target="_blank" rel="noopener">Microsoft 365 PnP Weekly – Episode 101</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>In this 1st installment after the 100th installment of the weekly discussion revolving around the latest news and topics on Microsoft 365.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/windows-subsystem-for-linux-2-traffic-routing-issues/ba-p/1764074?WT.mc_id=modinfra-9875-abartolo" target="_blank" rel="noopener">Windows Subsystem for Linux 2 - Addressing Traffic Routing Issues</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>WSL2 traffic not routing to local Hyper-V vSwitches? Check this out!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-migrate-and-powerbi/ba-p/1778654?WT.mc_id=modinfra-9876-salean" target="_blank" rel="noopener">Azure Migrate and PowerBI</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>Use new PowerBI templates to visualise your Azure Migrate data!</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=lMl2r_Wi_C8&feature=youtu.be" target="_blank" rel="noopener">October 22, 2020 | Leveraging Turnkey AI Live Tutorial</A><BR /><STRONG><I><A href="https://twitter.com/ruthieyakubu" target="_blank" rel="noopener">Ruth Yakubu</A></I></STRONG></P> <P>Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.</P> <P> </P> <P><A href="https://azure.microsoft.com/services/cognitive-services/?WT.mc_id=aiml-9969-ayyonet" target="_blank" rel="noopener">Cognitive Services—APIs for AI Developers | Microsoft Azure</A><BR /><STRONG><I><A href="https://twitter.com/AysSomething" target="_blank" rel="noopener">Aysegul Yonet</A></I></STRONG></P> <P>Azure Cognitive Services brings AI within reach of every developer through a family of APIs that don’t require machine-learning expertise.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-portal-announcements-and-videos/ba-p/1794165?WT.mc_id=modinfra-10078-socuff" target="_blank" rel="noopener">Azure portal - Announcements and videos</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>Like any cloud service, the Azure portal also gets updates - here's how to stay up to date with the announcements.</P> <P> </P> <P><A href="https://dev.to/rabwill/hosting-my-first-ever-developer-bootcamp-in-microsoft-teams-a-retrospect-1ghi" target="_blank" rel="noopener">Hosting my first ever Developer Bootcamp in Microsoft Teams : A retrospect</A><BR /><STRONG><I>Rabia Williams</I></STRONG></P> <P>IMAGINE… You have a few weeks, to collaborate with a select groups of awesome fellow techies...</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=iiLbhj4hPJM&feature=youtu.be" target="_blank" rel="noopener">Build “One Productivity Hub” using Microsoft Teams and Microsoft Graph Toolkit</A><BR /><STRONG><I><A href="https://twitter.com/aycabs" target="_blank" rel="noopener">Ayca Bas</A></I></STRONG></P> <P>In this workshop you will learn to use Microsoft Graph Toolkit to build a solution for Microsoft Teams. The user will be able to track daily calendar, tasks ...</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/10/video-recording-azure-architecture-best-practices/" target="_blank" rel="noopener">Video Recording: Azure Architecture Best Practices</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Here is the Azure Architecture Best Practices Virtual Event Video Recording with Microsoft Cloud Solution Architect, Dominik Zemp!</P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/10/how-to-create-azure-hybrid-cloud-architectures" target="_blank" rel="noopener">How to create Azure Hybrid Cloud Architectures</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Looking for Azure hybrid cloud architectures in the Azure Architecture Center? You can find diagrams, reference architectures, and much more!</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-windows-10-version-20h2-azure-ad-provisioning-updates/ba-p/1810670?WT.mc_id=modinfra-10100-abartolo" target="_blank" rel="noopener">AzUpdate: Windows 10 version 20H2, Azure AD provisioning updates, Modular Datacenters and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>Another plethora of news stories to share on this week's AzUpdate show. News includes: What’s new for IT Pros in Windows 10 version 20H2, Designing Azure Modular Datacenters, Azure AD provisioning updates that include attribute mapping and improved performance, newly announced plans for Microsoft to establish its first cloud region in Austria and as always, the Microsoft Learn module of the week.</P> <P> </P> <P><A href="https://dev.to/azure/azurefunbytes-short-ai-on-azure-2d8j" target="_blank" rel="noopener">AzureFunBytes Short - AI on @Azure</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>With AI, we can build solutions that seemed like science fiction a short time ago; enabling incredibl... Tagged with azure, cloud, beginners, ai.</P> <P> </P> <P><A href="https://bit.ly/ato-ml-docker" target="_blank" rel="noopener">Docker and Python: making them play nicely and securely for Ml and DS</A><BR /><STRONG><I><A href="https://twitter.com/ixek" target="_blank" rel="noopener">Tania Allard</A></I></STRONG></P> <P>Docker has become a standard tool for developers around the world to deploy applications in a reproducible and robust manner. The existence of Docker and Docker compose have reduced the time needed to set up new software and implementing complex technology stacks for our applications. Now, six years after the initial release of` Docker, we can say with confidence that containers and containers orchestration have become some of the defaults in the current technology stacks. There are thousands of tutorials and getting started documents for those wanting to adopt Docker for apps deployment. However, if you are a Data Scientist, a researcher or someone working on scientific computing wanting to adopt Docker, the story is quite different. There are very few tutorials (in comparison to app/web) and documents focused on Docker best practices for DS and scientific computing. If you are working on DS, ML or scientific computing, this talk is for you. We’ll cover best practices when building Docker containers for data-intensive applications, from optimising your image build, to ensuring your containers are secure and efficient deployment workflows. We will talk about the most common problems faced while using Docker with data-intensive applications and how you can overcome most of them. Finally, I’ll give some practical and useful tips for you to improve your Docker workflows and practises. Attendees will leave the talk feeling confident about adopting Docker across a range of DS, ML and research projects.</P> <P> </P> <P><A href="https://youtu.be/MPGUcfzSVNs" target="_blank" rel="noopener">Deploy your Java Application to Azure App Service with Maven</A><BR /><STRONG><I><A href="https://twitter.com/skriemhild" target="_blank" rel="noopener">Sandra Ahlgrimm</A></I></STRONG></P> <P>In this 4 minutes tutorial Sandra shows how you can deploy a Spring Boot web application to Azure App Service.</P> <P> </P> <P><A href="https://dev.to/azure/saving-halloween-2020-with-azure-maps-and-candy-caches-22f" target="_blank" rel="noopener">Saving Halloween 2020 with Azure Maps and Candy Caches</A><BR /><STRONG><I><A href="https://twitter.com/JenLooper" target="_blank" rel="noopener">Jen Looper</A></I></STRONG></P> <P>Let me show you how I rallied my town and created a map showing kids where to find contactless, pandemic-friendly candy caches that saved Halloween!. Tagged with javascript, vue, webdev, tutorial.</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-10-22-building-a-video-chat-app-part-2-accessing-cameras/" target="_blank" rel="noopener">Building a Video Chat App, Part 2 - Accessing Cameras | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank" rel="noopener">Aaron Powell</A></I></STRONG></P> <P>Lights, camera, action! It's time to get devices for our app.</P> <P> </P> <P><A href="https://dev.to/lazerwalker/using-game-design-to-make-virtual-events-more-social-24o" target="_blank" rel="noopener">Using Game Design to Make Virtual Events More Social</A><BR /><STRONG><I><A href="https://twitter.com/lazerwalker" target="_blank" rel="noopener">Em Lazer-Walker</A></I></STRONG></P> <P>A few months ago, I had a conundrum: I couldn't stand virtual conferences. I personally go to in-per... Tagged with games, conferences, mud, events.</P> <P> </P> <P><A href="https://www.jimbobbennett.io/run-visual-studio-code-on-a-raspberry-pi/" target="_blank" rel="noopener">Run Visual Studio Code on a Raspberry Pi</A><BR /><STRONG><I><A href="https://twitter.com/jimbobbennett" target="_blank" rel="noopener">Jim Bennett</A></I></STRONG></P> <P>It's finally here! An official supported version of VS Code that runs on a Raspberry Pi! ICYMI: VS Code now officially supports @Raspberry_Pi too! </P> <P> </P> <P><A href="https://www.youtube.com/watch?v=3DgpVwnQ3V4" target="_blank" rel="noopener">Demo JBoss EAP VMSS Quickstart</A><BR /><STRONG><I><A href="https://twitter.com/skriemhild" target="_blank" rel="noopener">Sandra Ahlgrimm</A></I></STRONG></P> <P>Theresa Nguyen, Senior Product Manager at Microsoft showcases JBoss EAP on Azure VMSS Find more at <A href="https://aka.ms/jbossEAP" target="_blank" rel="noopener">https://aka.ms/jbossEAP</A> and <A href="https://aka.ms/jboss-eap" target="_blank" rel="noopener">https://aka.ms/jboss-eap</A> Get y...</P> <P> </P></description> <pubDate>Wed, 11 Nov 2020 20:01:42 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-saving-halloween-with-azure-maps/ba-p/1819428</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-11-11T20:01:42Z</dc:date> ... </item> <item> <title>Check out new data science Learn modules inspired by the Netflix Original Over the Moon</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/check-out-new-data-science-learn-modules-inspired-by-the-netflix/ba-p/1806363</link> <description><P class="lia-align-left"><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="OTM_Final.JPG" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/228398i13F661BB9489BCFC/image-size/large?v=v2&px=999" role="button" title="OTM_Final.JPG" alt="OTM_Final.JPG" /></span></P> <P> </P> <P>The need for more data scientists, machine learning experts, and AI engineers in every industry is rapidly growing. These roles required a broad set of skills from data analysis with no-code and low-code solutions to designing and writing intricate machine learning models that solve some of our planets most difficult problems. Microsoft is dedicated to providing high quality, free content to help you develop your skills depending on your professional goals and personal interests.</P> <P> </P> <P>One such endeavor in creating an opportunity for you to learn and upskill is through unique partnerships. In the summer of 2020 we launched a set of Microsoft Learn modules inspired by real NASA scientists and engineers at <A href="https://aka.ms/LearnInSpace" target="_blank" rel="noopener">https://aka.ms/LearnInSpace</A>. And this Fall we are excited to bring you three more Microsoft Learn modules inspired by the new <A href="https://www.youtube.com/watch?v=26DIABx44Tw" target="_blank" rel="noopener">Netflix Original Over the Moon</A>.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sguthals_0-1603321787474.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/228379iBEFCDB95D74DE4AD/image-size/medium?v=v2&px=400" role="button" title="sguthals_0-1603321787474.jpeg" alt="sguthals_0-1603321787474.jpeg" /></span></P> <P> </P> <P>Fei Fei is a young girl who builds a rocket to the Moon on a mission to prove the existence of a legendary Moon Goddess. Fei Fei is fueled by the memories and love of her mother to use her creativity, resourcefulness, determination, and imagination to accomplish something beyond this world: reach the Moon. While the story takes place in a beautifully drawn universe, it is directly related to the types of problems real-life engineers face as they prepare and execute missions to the Moon and beyond. These lessons are also on our<A href="http://microsoft.com/inculture/over-the-moon/?ocid=AID3024378_QSG_485828#STEM" target="_blank" rel="noopener"> Over the Moon InCulture site,</A> where you can also find videos from the voice actors of the film and even a drawing tutorial from director Glen Keane!</P> <P> </P> <P>And with these new resources you can start your journey of using fiction to inspire solutions to real-world problems. I’m not a NASA scientist or engineer, and I’ve never personally been to the Moon, but I have skilled up in coding and data wrangling, allowing me to take what I *do* know about space exploration and make predictions and new discoveries through basic data science practices.</P> <P>So if you’re like me, and you are interested in:</P> <UL> <LI>Space travel</LI> <LI>Moon missions</LI> <LI>Rockets</LI> <LI>Moon rocks</LI> <LI>Animated films</LI> <LI>Fiction</LI> <LI>Coding</LI> <LI>Python</LI> <LI>Data Science</LI> <LI>AI</LI> <LI>Problem solving</LI> <LI>All of the above</LI> </UL> <P>Then, I invite you to not only check out these <A href="https://aka.ms/LearnWithDrG/OverTheMoon" target="_blank" rel="noopener">new Learn modules</A>, but also join me on my new show,<A href="https://aka.ms/LearnWithDrG" target="_blank" rel="noopener"> Learn with Dr G</A>, where I will dive into these modules and do some live coding! You can find all the details below on all of the new learning resources and opportunities related to space!</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="sguthals_1-1603321787516.jpeg" style="width: 400px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/228380i00866566231D2CE2/image-size/medium?v=v2&px=400" role="button" title="sguthals_1-1603321787516.jpeg" alt="sguthals_1-1603321787516.jpeg" /></span></P> <P> </P> <H4>Watch <A href="https://www.netflix.com/title/80214236" target="_blank" rel="noopener">Over The Moon - now streaming on Netflix</A>!</H4> <P> </P> <H2>Microsoft Learn Modules</H2> <H4><A href="https://docs.microsoft.com/learn/modules/plan-moon-mission-using-python-pandas?WT.mc_id=OverTheMoon_InCulture_-web-cxa%20" target="_blank" rel="noopener">Preparing for Moon Missions</A></H4> <P>Like Fei Fei, use data to plan your own mission to the Moon. Ensure your rocket can not only get you there, but also bring you and all your Moon rocks safely back to Earth. Analyze and visualize datasets with common data cleansing practices with <A href="https://code.visualstudio.com/learntocode/?utm_source=MSLearn&utm_medium=direct&utm_campaign=PartnerLessons" target="_blank" rel="noopener">Python in Visual Studio Code</A>.</P> <P> </P> <H4><A href="https://docs.microsoft.com/learn/modules/predict-meteor-showers-using-python/?WT.mc_id=OverTheMoon_InCulture_-web-cxa%20" target="_blank" rel="noopener">Predict meteor showers</A></H4> <P><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">B</SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">uild a<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">Machine Learning<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">prediction model</SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun"><SPAN> </SPAN>after cleansing<SPAN> </SPAN></SPAN></SPAN><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">a space-themed data set</SPAN></SPAN><SPAN class="TrackChangeTextInsertion TrackedChange SCXW199629723 BCX8"><SPAN class="TextRun SCXW199629723 BCX8" data-contrast="auto"><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun"><SPAN> </SPAN>on meteor showers. Incorporate Chang’e’s potential<SPAN> </SPAN></SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">affects</SPAN><SPAN class="NormalTextRun SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun"><SPAN> </SPAN>on meteor showers for an added complexity</SPAN><SPAN class="NormalTextRun ContextualSpellingAndGrammarErrorV2 SCXW199629723 BCX8" data-ccp-charstyle="normaltextrun">.<SPAN> </SPAN></SPAN></SPAN></SPAN></P> <P> </P> <H4><A href="https://docs.microsoft.com/learn/modules/train-custom-vision-ai?WT.mc_id=OverTheMoon_InCulture_-web-cxa%20" target="_blank" rel="noopener">Find Bungee on the Moon</A></H4> <P>Repurposing the camera on the Lunar Rover, search through the Moon’s surface for Fei Fei’s buddy Bungee before it’s time to head back to Earth. Use <A href="https://azure.microsoft.com/services/cognitive-services/" target="_blank" rel="noopener">Azure Custom Vision</A> to Classify pictures of animals (like Bungee, main character Fei Fei’s pet) without ever writing code.</P> <P> </P> <H2>Learn with Dr G Live Streams and Episodes</H2> <H4><A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/Over-the-Moon-Learn-Lessons-Overview/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener"><STRONG>Intro to the Over the Moon Modules</STRONG></A></H4> <P>Completing a successful Moon Mission doesn't only involve getting to the moon, but also returning safely to Earth – ideally with some rocks to learn from! Join Dr. G as she draws inspiration from the new <A href="https://www.netflix.com/title/80214236" target="_blank" rel="noopener">Netflix Original Over the Moon</A> and the ingenuity of the NASA Apollo missions to analyze and clean data to predict how much moon rock astronauts might be able to bring back as part of the Artemis Program in 2024. No coding experience required, and you can follow along with the free Microsoft Learn lessons at <A href="https://aka.ms/LearnWithDrG/OverTheMoon" target="_blank" rel="noopener">https://aka.ms/LearnWithDrG/OverTheMoon</A>.</P> <P> </P> <H4><A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/Datas-Role-in-Moon-Missions-Fictional-and-Real/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener"><STRONG>Data’s Role in Moon Missions: Fictional and Real </STRONG></A></H4> <P>Completing a successful Moon Mission doesn’t only involve getting to the moon, but also returning safely to Earth – ideally with some rocks to learn from! Join Dr. G as she draws inspiration from the film and the ingenuity of the NASA Apollo missions to analyze and clean data to predict how much moon rock astronauts might be able to bring back as part of the Artemis Program in 2024.</P> <P> </P> <H4><STRONG>Predicting Meteor Showers Using Python and Visual Studio Code</STRONG></H4> <P>(<A href="https://www.meetup.com/Microsoft-Reactor-Redmond/events/273465419/" target="_blank" rel="noopener">Sign up for Live Stream on October 27th here</A>, <A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener">Available on-demand on October 30th here</A>)</P> <P>In the film, Fei Fei builds a rocket to fly to the Moon to meet the Moon Goddess Chang’e. It is said that when Chang’e cries, her tears are the shooting starts we see in our night sky. This inspired Dr G to deep dive into what meteor showers actually are and how they are predicted. Join this live stream as Dr G explores how data science plays a role in predicting celestial events, and even brings in a little magic from the film to predict when we could have seen the meteor shower caused by Chang’e from Fei Fei’s visit.</P> <P> </P> <H4><STRONG>Use Azure Custom Vision to Repurpose the Lunar Rover</STRONG></H4> <P>(<A href="https://channel9.msdn.com/Shows/Learn-with-Dr-G/?WT.mc_id=LearnDrG-c9-niner" target="_blank" rel="noopener">Available on-demand on October 30th here</A>)</P> <P>The Lunar rover has been instrumental in helping us advance our understanding of the Moon and our Universe, and in the new film it even makes an appearance when Fei Fei lands on the moon with her buddy Bungee and brother Chin! This inspired Dr G. to think about a scenario where Fei Fei brought her own Lunar rover to the Moon to take pictures and send them back to her once she returned to Earth. In this video, Dr. G will build an image classifier using Azure Custom Vision to identify Bungee so that if Bungee is ever on the Moon without Fei Fei, her Lunar Rover can send down pics of Bungee exploring the surface, and avoid sending pictures of rocks.</P></description> <pubDate>Fri, 23 Oct 2020 17:58:53 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/check-out-new-data-science-learn-modules-inspired-by-the-netflix/ba-p/1806363</guid> <dc:creator>sguthals</dc:creator> <dc:date>2020-10-23T17:58:53Z</dc:date> ... </item> <item> <title>[Mitigated] DevTest Labs Outage: Certain lab operations may fail due to an ARM outage</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-certain-lab-operations-may-fail/ba-p/1797510</link> <description><P>Update: We would like to inform you that the issue is mitigated as of 12:00 AM UTC on 19th Oct 2020. </P> <P> </P> <P>Please add a comment if you are still experiencing any issues within DevTest Labs.</P> <P> </P> <P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="AzureStatus.png" style="width: 452px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233468i2050CA62FA333C71/image-dimensions/452x226?v=v2" width="452" height="226" role="button" title="AzureStatus.png" alt="AzureStatus.png" /></span></P> <P> </P> <P>----------------------------------------------------------------------------------------------------------------</P> <P>We would like to inform you that starting <SPAN>18:35 UTC on 19 Oct 2020,</SPAN> we are currently investigating an issue where certain lab operations may fail. Based on our current investigation, this is happening due to an outage within the Azure Resource Manager. More details on the outage here: <A href="https://status.azure.com/en-us/status?service=cognitive-services" target="_blank" rel="noopener">https://status.azure.com/en-us/status?service=cognitive-services</A></P> <P> </P> <P>Following lab operations may not work as expected during this time: </P> <UL> <LI>Creating/ updating/ deleting lab virtual machines</LI> <LI>Creating custom images, formulas</LI> <LI>Setting lab schedules </LI> </UL> <P> </P> <P>Our team continues to work on a fix and we will update this post to share regular updates. </P> <P> </P> <P>We apologize for the inconvenience and thank you for your patience. </P> <P> </P> <P>-DevTest Labs Team<BR /> </P> <P> </P></description> <pubDate>Fri, 13 Nov 2020 17:31:07 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/mitigated-devtest-labs-outage-certain-lab-operations-may-fail/ba-p/1797510</guid> <dc:creator>TanmayeeKamath</dc:creator> <dc:date>2020-11-13T17:31:07Z</dc:date> ... </item> <item> <title>Azure Advocates Weekly Round Up - Security, JavaScript, and more M365 this week!</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-security-javascript-and-more/ba-p/1795800</link> <description><P><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Attackers.png" style="width: 514px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/233474i74491F50DC7F25DD/image-size/large?v=v2&px=999" role="button" title="Attackers.png" alt="Attackers.png" /></span></P> <P> </P> <P><A href="https://aka.ms/createa11y" target="_blank" rel="noopener">How does accessibility fit into an MVP? | Creating Startups</A><BR /><STRONG><I><A href="https://twitter.com/simona_cotin" target="_blank" rel="noopener">Simona Cotin</A></I></STRONG></P> <P>This is a guest post by Obinna Ekwuno, software engineer at Gatsby and Marcy Sutton, freelance web developer and accessibility specialist. Read more about Obinna and Marcy at the end of this article. Accessibility has become a buzz word for making sure that disabled users get a fair experience when interfacing with platforms on the web or on mobile.</P> <P> </P> <P><A href="https://github.com/OfficeDev/M365Bootcamp-TeamsOneProductivityHub" target="_blank" rel="noopener">OfficeDev/M365Bootcamp-TeamsOneProductivityHub</A><BR /><STRONG><I><A href="https://twitter.com/aycabs" target="_blank" rel="noopener">Ayca Bas</A></I></STRONG></P> <P>Use Microsoft Graph Toolkit to build a solution for Microsoft Teams that will track daily calendar, tasks and e-mails in a Teams Tab as one productivity hub. - OfficeDev/M365Bootcamp-TeamsOneProductivityHub</P> <P> </P> <P><A href="https://acloudguru.com/blog/engineering/how-to-develop-serverless-apps-with-github-codespaces" target="_blank" rel="noopener">How to Develop Serverless Apps with GitHub Codespaces | A Cloud Guru</A><BR /><STRONG><I>Alvaro Videla Godoy</I></STRONG></P> <P>Want to develop a serverless app with Codespaces? This tutorial will show you how to get an Azure Functions & Static Web App project ready.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azure-stack-hub-partner-solutions-series-ivedha/ba-p/1778793?WT.mc_id=modinfra-8957-thmaure" target="_blank" rel="noopener">Azure Stack Hub Partner Solutions Series - iVedha</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Aytra was borne as an ISV solution aimed at enabling partners in their Azure Stack Hub journey. Check it out!</P> <P> </P> <P><A href="https://speakerdeck.com/nitya/intro-to-mobile-development" target="_blank" rel="noopener">Intro to Mobile Development</A><BR /><STRONG><I><A href="https://twitter.com/nitya" target="_blank" rel="noopener">Nitya Narasimhan</A></I></STRONG></P> <P>Mobile app development is both a huge opportunity and a constant challenge. In this talk we’ll look at the mobile development landscape – from native apps to multi-platform development and mobile web. We’ll talk about design challenges and personalizing user experiences to match diverse contexts. And we’ll look at emerging paradigms in dual-screen and multi-posture devices (e.g., Surface Duo) and talk about how we can leverage these technological advances to rethink the modern mobile app.</P> <P> </P> <P><A href="https://www.youtube.com/watch?v=Vs_8bh4jOIA" target="_blank" rel="noopener">Microsoft 365 PnP Weekly – Episode 100</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>A weekly discussion of the latest news and topics around Microsoft 365</P> <P> </P> <P><A href="https://devblogs.microsoft.com/devops/what-is-infrastructure-as-code/?WT.mc_id=devops-9609-jagord" target="_blank" rel="noopener">What is infrastructure as code? | Azure DevOps Blog</A><BR /><STRONG><I><A href="https://twitter.com/jaydestro" target="_blank" rel="noopener">Jay Gordon</A></I></STRONG></P> <P>What is infrastructure as code? Microsoft Azure provides you with a number of options to deploy your infrastructure. In the One Dev Question series, Cloud Developer Advocate Abel Wang explains how Azure DevOps provides developer services to support teams to plan work...</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/top-10-best-practices-for-azure-security/ba-p/1770087?WT.mc_id=modinfra-9720-socuff" target="_blank" rel="noopener">Top 10 Best Practices for Azure Security</A><BR /><STRONG><I><A href="https://twitter.com/SoniaCuff" target="_blank" rel="noopener">Sonia Cuff</A></I></STRONG></P> <P>Mark Simos, lead Cyber security architect for Microsoft, explored the lessons learned from protecting both Microsoft's own technology environments and the responsibility we have to our customers, and shares the top 10 (+1!) recommendations for Azure security best practices.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/what-is-azure-hybrid-benefit/ba-p/1764400?WT.mc_id=modinfra-9767-salean" target="_blank" rel="noopener">What is Azure Hybrid Benefit?</A><BR /><STRONG><I><A href="https://twitter.com/techielass" target="_blank" rel="noopener">Sarah Lean</A></I></STRONG></P> <P>The Azure Hybrid Benefit can help you save move when you are running your workloads within Azure by leveraging your on prem licenses, find out more in this blog post. </P> <P> </P> <P><A href="https://www.thomasmaurer.ch/2020/10/automanage-for-azure-virtual-machines/" target="_blank" rel="noopener">Automanage for Azure virtual machines</A><BR /><STRONG><I><A href="https://twitter.com/ThomasMaurer" target="_blank" rel="noopener">Thomas Maurer</A></I></STRONG></P> <P>Azure Automanage for virtual machines is a service that helps to discover, onboard, and configure Azure Management services for Azure VMs.</P> <P> </P> <P><A href="https://dev.to/lazerwalker/running-a-virtual-conference-roguelike-celebration-s-av-setup-44hk" target="_blank" rel="noopener">Running A Virtual Conference: Roguelike Celebration’s AV Setup </A><BR /><STRONG><I><A href="https://twitter.com/lazerwalker" target="_blank" rel="noopener">Em Lazer-Walker</A></I></STRONG></P> <P>The Roguelike Celebration conference has been running for five years, but two weeks ago marks our fir... Tagged with streaming, events, conferences, twitch.</P> <P> </P> <P><A href="https://github.com/DanWahlin/Fluidvue" target="_blank" rel="noopener">DanWahlin/FluidVue</A><BR /><STRONG><I><A href="https://twitter.com/danwahlin" target="_blank" rel="noopener">Dan Wahlin</A></I></STRONG></P> <P>Contribute to DanWahlin/FluidVue development by creating an account on GitHub.</P> <P> </P> <P><A href="https://devkimchi.com/2020/10/14/lets-encrypt-ssl-certificate-on-azure-functions/" target="_blank" rel="noopener">Adding Let's Encrypt SSL Certificate to Azure Functions</A><BR /><STRONG><I><A href="https://twitter.com/justinchronicle" target="_blank" rel="noopener">Justin Yoo</A></I></STRONG></P> <P>This post shows how to generate an SSL certificate through Let's Encrypt API and bind the certificate to the custom APEX domain on Azure Functions app.</P> <P> </P> <P><A href="https://techcommunity.microsoft.com/t5/itops-talk-blog/azupdate-microsoft-365-apps-admin-center-azure-site-recovery-tls/ba-p/1785491?WT.mc_id=modinfra-9985-abartolo" target="_blank" rel="noopener">AzUpdate: Microsoft 365 Apps Admin Center, Azure Site Recovery TLS Certificate Changes and more</A><BR /><STRONG><I><A href="https://twitter.com/wirelesslife" target="_blank" rel="noopener">Anthony Bartolo</A></I></STRONG></P> <P>Lots to share in the world of Microsoft services this week. News includes Microsoft 365 Apps Admin Center's new inventory & monthly servicing feature currently in preview, Azure Cognitive Services has achieved human parity in image captioning, Azure Site Recovery TLS Certificate Changes, Static Web App PR Workflow for Azure App Service using Azure DevOps, and of course the Microsoft Learn Module of the week.</P> <P> </P> <P><A href="https://blog.mastykarz.nl/250-million-reasons-build-applications-microsoft-365/" target="_blank" rel="noopener">250 million reasons to build applications on Microsoft 365</A><BR /><STRONG><I>Waldek Mastykarz</I></STRONG></P> <P>You might have heard of Microsoft Teams, Outlook, or SharePoint. But did you know that next to being some of the most popular applications from Microsoft, they are a part of a highly extensible development platform with a rich partner ecosystem?</P> <P> </P> <P><A href="https://www.aaron-powell.com/posts/2020-10-13-want-to-learn-javascript-weve-got-a-series-for-you/" target="_blank" rel="noopener">Want to Learn JavaScript? We've Got a Series for You! | LINQ to Fail</A><BR /><STRONG><I><A href="https://twitter.com/slace" target="_blank" rel="noopener">Aaron Powell</A></I></STRONG></P> <P>Get ready to dive into all things JavaScript.</P> <P> </P></description> <pubDate>Fri, 13 Nov 2020 18:10:17 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-advocates-weekly-round-up-security-javascript-and-more/ba-p/1795800</guid> <dc:creator>spboyer</dc:creator> <dc:date>2020-11-13T18:10:17Z</dc:date> ... </item> <item> <title>Azure DevTest Labs available in UAE North, Germany West Central and Norway East regions</title> <link>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-devtest-labs-available-in-uae-north-germany-west-central/ba-p/1769281</link> <description><P><A href="https://aka.ms/dtl" target="_blank" rel="noopener noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">Azure DevTest Labs</A><SPAN> </SPAN><SPAN>is now available in the UAE North, Germany West Central and Norway East regions. The support includes full Azure DevTest Labs capabilities. To see the other supported regions for DevTest Labs, see Azure </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fazure.microsoft.com%2Fen-us%2Fregions%2Fservices%2F&data=02%7C01%7CTanmayee.Kamath%40microsoft.com%7C4e6764f82fcf4305170408d7f2b18ece%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244716734847958&sdata=t1%2B48uITWBLD3DFn4qHzoUdOjtjWFgaNaTh0MP1iNEo%3D&reserved=0" target="_blank" rel="noopener nofollow noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">products available by region</A><SPAN>. </SPAN></P> <P> </P> <P><SPAN><span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Capture (1).PNG" style="width: 999px;"><img src="https://techcommunity.microsoft.com/t5/image/serverpage/image-id/225843iEED8802282F5872E/image-size/large?v=v2&px=999" role="button" title="Capture (1).PNG" alt="Capture (1).PNG" /></span></SPAN></P> <P> </P> <P>Get started by visiting the<SPAN> </SPAN><A href="https://docs.microsoft.com/en-us/azure/devtest-labs/" target="_blank" rel="noopener noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">DevTest Labs documentation</A>. </P> <P> </P> <P><SPAN>Try it today and let us know what you think. If you have an idea or feedback, go to the </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Ffeedback.azure.com%2Fforums%2F320373-azure-devtest-labs&data=02%7C01%7CTanmayee.Kamath%40microsoft.com%7C4e6764f82fcf4305170408d7f2b18ece%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244716734857914&sdata=eDdD1dzKcQMrJsCnm5KJv2NySnPD%2BP08QsqzsuHn5SY%3D&reserved=0" target="_blank" rel="noopener nofollow noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">Azure DevTest Labs feedback forum</A><SPAN>.</SPAN></P> <P> </P> <P><SPAN>If you or your customers have questions, post them on the </SPAN><A href="https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fdocs.microsoft.com%2Fanswers%2Ftopics%2Fazure-devtestlabs.html&data=02%7C01%7CTanmayee.Kamath%40microsoft.com%7C4e6764f82fcf4305170408d7f2b18ece%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637244716734867870&sdata=fow%2B33ifa%2FgvxFc8OUeYO1HTioMVlyeT%2FHUEqXMypUM%3D&reserved=0" target="_blank" rel="noopener nofollow noopener noreferrer" data-event="page-clicked-link" data-bi-id="page-clicked-link" data-bi-an="undefined" data-bi-tn="undefined">Azure DevTest Labs forum</A><SPAN>.</SPAN></P> <P> </P></description> <pubDate>Mon, 12 Oct 2020 15:00:00 GMT</pubDate> <guid>https://techcommunity.microsoft.com/t5/azure-developer-community-blog/azure-devtest-labs-available-in-uae-north-germany-west-central/ba-p/1769281</guid> <dc:creator>TanmayeeKamath</dc:creator> <dc:date>2020-10-12T15:00:00Z</dc:date> ... </item> ... </channel> ... </rss>