<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Azure on Isaac Levin</title><link>https://example.com/tags/azure/</link><description>Recent content in Azure on Isaac Levin</description><generator>Hugo</generator><language>en</language><managingEditor>isaac@isaaclevin.com (Isaac Levin)</managingEditor><webMaster>isaac@isaaclevin.com (Isaac Levin)</webMaster><lastBuildDate>Tue, 19 May 2020 21:00:00 -0200</lastBuildDate><atom:link href="https://example.com/tags/azure/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a PresenceLight</title><link>https://example.com/2020/presence-light/</link><pubDate>Tue, 19 May 2020 21:00:00 -0200</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2020/presence-light/</guid><description>&lt;h2 id="i-did-a-thing"&gt;I Did A Thing&lt;/h2&gt;
&lt;br /&gt;
Anyone who knows me knows that I am a fairly large "tinkerer", as in, someone who spends a good amount time trying out new things, but eventually gets bored quickly and moves on. One of the things that I have always been a fan of is productivity enhancements, to coincide with my laziness. Due to this, I have created a fair amount of things, but never truly finished any personal project. This time, I actually finished something (I mean as much as you can actually finish something these days) and to be honest, I am pretty proud of it. I have offically launched [PresenceLight](url to store), a Windows Desktop application written in .NET Core 5 that allows folks to manage smart lights in their home. Right now, it works with [LIFX](https://www.lifx.com/)/[Phillips Hue](https://www2.meethue.com/en-us) lights and allows you to do things like set the color of the lights to your Availability in Microsoft Teams, your Windows 10 theme, or frankly a color you just want the lights to be. You can install PresenceLight from the [Microsoft Store](https://www.microsoft.com/en-us/p/presencelight/9nffkd8gznl7), [Chocolatey](https://chocolatey.org/packages/PresenceLight/), on the [Releases tab of the GitHub repo](https://github.com/isaacrlevin/PresenceLight/releases) and from the new [Windows Package Manager](https://docs.microsoft.com/en-us/windows/package-manager). I think one of the things we struggle with as developers is that we aren't good enough to do certain things, imposter syndrome and all that, but we truly have the ability to build great things. I hope that the fact a lazy developer built something that is actually useful to other people besides me encourages people to try to do the same. Ok, enough of this, on to the tech!
&lt;br /&gt;
&lt;h2 id="finding-your-motivation"&gt;Finding Your Motivation&lt;/h2&gt;
&lt;br /&gt;
As someone who has worked from home for a fair amount of time in my career (more than half to be exact), one of things that has always intrigued me is how to let your family know when you are "free" vs "busy" as one of the difficult balancing acts of working from home is being able to focus on work tasks. Since I have 2 small kids, this is even more essential. In the past, I used a program called [Skyue](https://blog.thoughtstuff.co.uk/2016/12/announcing-skyue-a-free-skype-for-business-integration-with-phillips-hue/), a free tool built my Microsoft MVP [Tom Morgan](https://twitter.com/tomorgan) to broadcast your Skype for Business status to a Phillips Hue Light, and it was perfect. I used that tool for a long time, but eventually that came to an end when I started using Microsoft Teams, which eventually replaced Skype for Business. I was bummed as there was nothing comparable to Skyue for Teams, and because of the way that Teams set and retrieved Presence (the new term for status), it seemed like it wasn't possible.
&lt;br /&gt;
&lt;h2 id="behold-the-presence-api"&gt;Behold the Presence Api&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;Around November of 2019, I saw some rumblings in UserVoice of exposing Teams Presence via Microsoft Graph, I was curious. Basically the ask was simple, &amp;ldquo;Let me get Teams Presence via some Api&amp;rdquo;. I read the thread and saw that someone from Microsoft was commenting, so I did what any self-righteous Microsoftie would do, I bothered him. I found him on Teams and asked him for some more detail, and he was kind enough to tell me that Presence would be available in the beta endpoint of Graph in December, so I waited, and then I saw &lt;a href="https://developer.microsoft.com/en-us/graph/blogs/microsoft-graph-presence-apis-are-now-available-in-public-preview/" target="_blank" rel="noopener noreffer"&gt;this&lt;/a&gt;
. &lt;strong&gt;Huge shoutout to Vinod Ravichandran for being so nice to me!!&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Storing GitHub Traffic with Azure Functions</title><link>https://example.com/2020/github-stats-tracking/</link><pubDate>Thu, 19 Mar 2020 11:15:58 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2020/github-stats-tracking/</guid><description>&lt;h2 id="frustrated-by-github-insights"&gt;Frustrated by GitHub Insights&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;As an owner of a handful of large public repos for my job, one of the things that I care about is knowing the traffic to the repos to get an understanding of visibility. GitHub has this amazing feature, called &lt;a href="https://github.com/features/insights" target="_blank" rel="noopener noreffer"&gt;GitHub Insights&lt;/a&gt;
, which allows you to see some of this data, however it is capped at a date range of 14 days in the past. I am not sure on the long-term goals of Insights, but if that cap stays, it will frustrate folks, some of them very well known &lt;a href="https://github.com/isaacs/github/issues/399" target="_blank" rel="noopener noreffer"&gt;folks&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Building My Blog with GitHub Actions</title><link>https://example.com/2020/blog-on-actions/</link><pubDate>Wed, 08 Jan 2020 08:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2020/blog-on-actions/</guid><description>&lt;h2 id="so-i-changed-my-devops"&gt;So I Changed My DevOps&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;As some may know, I already had a fully working &lt;a href="https://example.com/post/building-blog" rel=""&gt;CI/CD process for my blog&lt;/a&gt;
 and it was running on Azure Pipelines. As someone that is always learning and wanting to play with a new tool, I was pretty intrigued when &lt;a href="https://github.com/features/actions" target="_blank" rel="noopener noreffer"&gt;GitHub Actions&lt;/a&gt;
 was formally announced at GitHub Universe. I wanted to see how challenging it would be to move my DevOps process from Azure Pipelines to GitHub Actions and it was not hard at all.&lt;/p&gt;</description></item><item><title>Update My Blog Via Email with Azure Functions</title><link>https://example.com/2019/blog-update-email/</link><pubDate>Wed, 28 Aug 2019 11:00:59 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2019/blog-update-email/</guid><description>&lt;h2 id="starting-with-a-manual-multi-step-process"&gt;Starting with a Manual, Multi-Step Process&lt;/h2&gt;
&lt;br /&gt;
I have [blogged](/post/building-blog) about the changes I made to streamline my site architecture and continue to work on ways to improve it. One thing that I did a month ago was replace the static page that was my [speaking page][/speaking] and make it more dynamic. Before whenever I had a new speaking gig, I would go into my repo and edit the HTML, EVERY... TIME.... I quickly became not a fan of that, so I started to look into options that were less cringey. I discovered in Hugo you can have data-driven pages using a source like json to house content. What I did was build a [shortcode](https://gohugo.io/content-management/shortcodes/) to read data from a json file and output it in a format I wanted, in this case, an HTML table.
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Deoptimize Your Snapshots Now in Snapshot Debugger</title><link>https://example.com/2019/snapshot-deoptimized/</link><pubDate>Fri, 14 Jun 2019 08:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2019/snapshot-deoptimized/</guid><description>&lt;h2 id="have-you-tried-snapshot-debugger-yet-no-why-not"&gt;Have You Tried Snapshot Debugger Yet? No? Why Not?&lt;/h2&gt;
&lt;br /&gt;
If you don't know by now, I am a huge fan of [Snapshot Debugger](https://docs.microsoft.com/azure/azure-monitor/app/snapshot-debugger), which if you are not aware is a tool that allows .NET developers to get better visibility into their remote applications. Snapshot Debugger is accessible via 2 locations, the Azure Portal (Product Name is Application Insights Snapshot Debugger), where you can see variables in your call stack like so.
&lt;br /&gt;&lt;br /&gt;
 Snapshot Debugger is also built into Visual Studio Enterprise (Product Name is Visual Studio SnapshotDebugger, man naming is hard 😊) so be sure to ask your boss for it if you don't have it. You can access this feature by downloading a snapshot from the Azure Portal (the extension is .diagsession) and opening it with Visual Studio. With Snapshot Debugger, you have the ability to view, key information related to exceptions that your application is throwing, which quickens the time to triage and eventually solve your problem. I have talked about on [Channel 9](https://www.youtube.com/watch?v=Ug2ZO5zbYmc), and spoken at numerous conferences about how it is a must-have tool for every .NET developer on the planet.
&lt;br /&gt;&lt;br /&gt;
&lt;h2 id="current-limitations"&gt;Current Limitations&lt;/h2&gt;
&lt;br /&gt;
Right now, there is a considerable limitation with Snapshot Debugger. To not affect performance of apps, by default code is optimized when snapshots are generated, what does this mean? It means that your ability to view certain variables is taken away. This severely limits our ability as developers to get the full view of an exception that happens. But there has recently been help from the Product Group in this area.&lt;br /&gt;&lt;br /&gt;
&lt;h2 id="configurable-deoptimization"&gt;Configurable Deoptimization&lt;/h2&gt;
&lt;br /&gt;
Beginning in version `1.3.5-pre-1906.403`(preview release) of `Microsoft.ApplicationInsights.SnapshotCollector`, a setting was added to the `SnapshotCollectorConfiguration` node called *DeoptimizeMethodCount*.
&lt;br /&gt;&lt;br /&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SnapshotCollectorConfiguration&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line hl"&gt;&lt;span class="ln"&gt; 2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;DeoptimizeMethodCount&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;IsEnabledInDeveloperMode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ThresholdForSnapshotting&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MaximumSnapshotsRequired&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MaximumCollectionPlanSize&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 7&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ReconnectInterval&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;00:15:00&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 8&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ProblemCounterResetInterval&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;1.00:00:00&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt; 9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SnapshotsPerTenMinutesLimit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;10&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SnapshotsPerDayLimit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;11&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;SnapshotInLowPriorityThread&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;12&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ProvideAnonymousTelemetry&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;13&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;FailedRequestLimit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;14&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
This setting allows developers to configure the level of deoptimization suitable for their apps. To enable deoptimization, be sure to enable Snapshot Debugger call stacks and local variable support from the Application Insights configuration page.
&lt;br /&gt;
&lt;figure&gt;&lt;img src="https://example.com/images/deopt/portal.png"&gt;
&lt;/figure&gt;

&lt;br /&gt;
&lt;p&gt;The default value is 1 (setting to 0 completely disables deoptimization), meaning you will only have deoptimization at the first level of your exception, for instance below an exception is thrown and there is only visibility at the first level of the call stack.&lt;/p&gt;</description></item><item><title>How I Built A Blog</title><link>https://example.com/2019/building-blog/</link><pubDate>Thu, 25 Apr 2019 08:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2019/building-blog/</guid><description>&lt;h2 id="i-have-updated-my-blog-to-use-github-actions-for-cicd-check-out-this-post-to-learn-more"&gt;I have updated my blog to use &lt;a href="https://github.com/features/actions" target="_blank" rel="noopener noreffer"&gt;GitHub Actions&lt;/a&gt;
 for Ci/CD, check out this &lt;a href="https://example.com/post/blog-on-actions" rel=""&gt;post&lt;/a&gt;
 to learn more!&lt;/h2&gt;
&lt;h2 id="why-a-post-on-this"&gt;Why a Post on This?&lt;/h2&gt;
&lt;br /&gt;
I have been asked a few times why I decided to build a blog and more importantly, what I did to build a blog that was lightweight, easy to modify (i.e. add posts) and most importantly, is cheap. This is how I approached it, and I understand that some people have more criteria when they look to create a blog, but I am a simple man with simple needs. Remembering the previous version of this blog was an Server-Side rendered Angular 6 application with an ASP.NET Core backend with Azure SQL holding all the data, there was tons of code to write and maintain, and when things did not work (a gist not loading properly for example), I had to debug the issue, which at times took away from building content. So with this criteria, I decided to adopt the following implementation for my blog:
&lt;br /&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Blog will be a Static Website (plain HTML, CSS, JS)&lt;/li&gt;
&lt;li&gt;Blog will be deployed to Azure Blog Storage for hosting&lt;/li&gt;
&lt;li&gt;Site will utilize a domain purchased through Azure DNS&lt;/li&gt;
&lt;li&gt;Azure CDN will be configured to serve site as efficiently as possible&lt;/li&gt;
&lt;li&gt;CloudFlare will direct traffic to site in certain scenarios&lt;/li&gt;
&lt;li&gt;CI/CD will be configured using Azure DevOps to push commits to Blob Storage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description></item><item><title>AZ-400 Microsoft Azure DevOps Solutions</title><link>https://example.com/2019/az-400-study-guide/</link><pubDate>Mon, 11 Mar 2019 11:00:59 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2019/az-400-study-guide/</guid><description>&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;This is one guide in a series of guides that can act as study material for Microsoft&amp;rsquo;s new Azure oriented certification exams.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://example.com/post/az-203-study-guide" rel=""&gt;AZ-203 Exam Guide&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;p&gt;The AZ-400 exam, which is titled &amp;ldquo;Microsoft Azure DevOps Solutions&amp;rdquo; and has a target audience of Azure DevOps Engineers. This exam was in beta for some time and was recently released proper in February 2019. Passing this exam is one requirement to earn the &amp;ldquo;Microsoft Certified: Azure DevOps Engineer&amp;rdquo; certification, the other being an &amp;ldquo;Azure Administrator Associate&amp;rdquo; or &amp;ldquo;Azure Developer Associate&amp;rdquo;. Going forward, most Microsoft certifications are moving to a &lt;a href="https://buildazure.com/2018/09/24/introducing-role-based-microsoft-azure-certification-shakeup/" target="_blank" rel="noopener noreffer"&gt;job-role based&lt;/a&gt;
 (great take by Chris Pietschmann at Build Azure) approach, which in my opinion is a good move, as it allows folks to focus on passing exams that contain content that will directly be used on the job. For more information about the exam, take a look at the &lt;a href="https://www.microsoft.com/learning/exam-AZ-400.aspx" target="_blank" rel="noopener noreffer"&gt;Official Exam Page&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Using Azure CloudShell as a Dev Sandbox</title><link>https://example.com/2019/azure-cloudshell-sandbox/</link><pubDate>Sun, 03 Feb 2019 11:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2019/azure-cloudshell-sandbox/</guid><description>&lt;h2 id="have-you-heard-of-cloudshell"&gt;Have You Heard of CloudShell?&lt;/h2&gt;
&lt;br /&gt;
Back in around the Build 2017 timeframe, the first implementation of [Azure CloudShell](https://docs.microsoft.com/azure/cloud-shell/overview) was rolled out, bringing the ability to run Azure CLI commands from the context of a logged in Azure session, from anywhere the Azure Portal could be loaded (i.e. a browser). This allowed you to do many things via the command line in the Azure world without having to use the GUI or have the tooling installed on your machine. Since that time, there have been a ton of features rolled out to CloudShell, and it can be accessed via it's own url [https://shell.azure.com/](https://shell.azure.com/), though you can still access it via the portal like so.
&lt;br /&gt;
[&lt;figure&gt;&lt;img src="https://example.com/images/cloud-shell/get-started.png"&gt;
&lt;/figure&gt;
](/images/cloud-shell/get-started.png)
&lt;br /&gt;
&lt;p&gt;After initiating CloudShell if you haven&amp;rsquo;t before, it will ask you a few things, like what Resource Group you want to install CloudShell in (CloudShell is temporary but needs Azure Files to persist your files). You are also given the option to default what terminal interface you want (PowerShell of Linux Bash). The experience you see when opening CloudShell is a terminal view that is connected to your chosen Azure Directory.&lt;/p&gt;</description></item><item><title>AZ-203 Developing Solutions for Microsoft Azure Study Guide</title><link>https://example.com/2019/az-203-study-guide/</link><pubDate>Mon, 14 Jan 2019 11:00:59 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2019/az-203-study-guide/</guid><description>&lt;!-- &lt;strong&gt;This is one guide in a series of guides that can act as study material for Microsoft's new Azure oriented certification exams.&lt;/strong&gt;

* [AZ-300 Exam Guide](/post/az-300-study-guide)
* [AZ-301 Exam Guide](/post/az-301-study-guide) --&gt;
&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;Update here, I passed this exam in January 2019 exclusively using this study guide. &lt;/strong&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;As a Microsoft employee who works with customers and a cloud enthusiast, I see it essential to be knowledgeable of how the cloud can bring the best value to the developer. Because of this, I am taking the AZ-203 exam, which is titled &amp;ldquo;Developing Solutions for Microsoft Azure&amp;rdquo;. This exam was in beta for some time and was recently released proper in January 2019. Developers used to the Microsoft certification world will see this exam as a replacement for 70-532, which is the older iteration of Azure technology geared for developers. Passing this exam will reward developers with the &amp;ldquo;Microsoft Certified Azure Developer Associate&amp;rdquo; certification. Going forward, most Microsoft certifications are moving to a &lt;a href="https://buildazure.com/2018/09/24/introducing-role-based-microsoft-azure-certification-shakeup/" target="_blank" rel="noopener noreffer"&gt;job-role based&lt;/a&gt;
 (great take by Chris Pietschmann at Build Azure) approach, which in my opinion is a good move, as it allows folks to focus on passing exams that contain content that will directly be used on the job. For more information about the exam, take a look at the &lt;a href="https://www.microsoft.com/learning/exam-AZ-203.aspx" target="_blank" rel="noopener noreffer"&gt;Official Exam Page&lt;/a&gt;
&lt;/p&gt;</description></item><item><title>Six Opinionated Tips to be a Better .NET Developer</title><link>https://example.com/2018/six-opinionated-tips/</link><pubDate>Thu, 06 Dec 2018 08:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2018/six-opinionated-tips/</guid><description>&lt;h2 id="tis-the-season"&gt;Tis the Season&lt;/h2&gt;
&lt;br /&gt;
I am humble to be a part of the [2nd Annual C# Advent Calendar](https://crosscuttingconcerns.com/The-Second-Annual-C-Advent
). Thank you to everyone who helped put it together and contributed. My blog post is hopefully a fun one not to be taken too seriously. I have been a developer for over 10 years, and I am always looking at new ways to be more productive. May I present you with 6 tips that I have started to adopt that I think have increased my developer skills 1000% (YMMV).
&lt;br /&gt;&lt;br /&gt;
&lt;h2 id="1-make-the-cli-your-best-friend"&gt;1. Make the CLI your Best Friend&lt;/h2&gt;
&lt;br /&gt;
I will shout it from the rooftops, **I LOVE CLIs!!!** I just find the process of working in the command line a far more efficient experience than the IDE in certain scenarios. Being a .NET developer, it is obvious I would gravitate towards the [.NET CLI](https://docs.microsoft.com/dotnet/core/tools/) to kickstart my development experience.
&lt;br /&gt;&lt;br /&gt;
The main benefit to using .NET CLI is getting started with writing .NET Core applications, with a few commands, you can have a template app created and running locally.
&lt;br /&gt;&lt;br /&gt;
```csharp
dotnet new webapi -o TestApi
dotnet run
```
&lt;br /&gt;
Running that serves up a kestrel instance of the default WebApi template, with no IDE required. Extending this further, we can `watch` on the same command and it will re-run the `run` command whenever a file changes in the project.
&lt;br /&gt;&lt;br /&gt;


&lt;figure class="thumb"&gt;
 
 &lt;div class="overlay"&gt;
 &lt;img class="thumbnail" src="https://example.com/images/6tips/dotnet-watch.png" data-alt="/images/6tips/dotnet-watch.gif" /&gt;
 &lt;span href="#" class="playWrapper"&gt;
 &lt;/span&gt;&lt;/div&gt;
 
 
&lt;/figure&gt;

&lt;br /&gt;
That is pretty cool! There are some really cool things you can do with the CLI, but there are also some very important things you can do as part of SDLC with CLI tools. Using the .NET CLI to build, test, and publish your applications is super easy, especially if you use an ALM tool where you can control the configuration of your build environment.
&lt;br /&gt;&lt;br /&gt;
One amazing additional thing to consider with the CLI is the extension capabilities. [Global Tools](https://docs.microsoft.com/dotnet/core/tools/global-tools) are custom developments that can be downloaded via nuget and are executed via the command line. You can use global tools to build custom demands for functions that as a developer we tend to do repetitively. How about being able to get a random blog post in infamous [cowsay](https://www.nuget.org/packages/dotnet-cowsay/) format. (**Full disclosure, I wrote this, disregard the shameless self-promotion**).
&lt;br /&gt;&lt;br /&gt;


&lt;figure class="thumb"&gt;
 
 &lt;div class="overlay"&gt;
 &lt;img class="thumbnail" src="https://example.com/images/6tips/cowsay.png" data-alt="/images/6tips/cowsay.gif" /&gt;
 &lt;span href="#" class="playWrapper"&gt;
 &lt;/span&gt;&lt;/div&gt;
 
 
&lt;/figure&gt;

&lt;br /&gt;
There are tons of useful global tools available developed by Microsoft or the community, take a look at some of them [here](https://github.com/natemcmaster/dotnet-tools). I highly encourage folks to use the CLI as much as they can, who knows you might become someone who never opens Visual Studio again! (not advocating that, VS is awesome)
&lt;br /&gt;&lt;br /&gt;
## 2. Use Application Insights for Local Development
&lt;br /&gt;
Application Insights might be my favorite tool of all time. Any opportunity I have to bang the drum and promote it I am there. I talk to my customers about it, and I speak about it at community events and conferences. The number one misconception people have about Application Insights is that you can only use it if your app is in Azure. That is simply not true! Sure, Application Insights is a first-class citizen in Azure, but you can host your apps in other Cloud Providers or even On-Premises and still get the benefit. Actually, you don't even have to deploy your app to see the capabilities of Application Insights.
&lt;p&gt;Application Insights is simply a REST service with a SDK that batches telemetry and pushes it to the Api, so you can leverage the full power of App Insights while working locally. The easiest way to get Application Insights is within Visual Studio by adding a Connected Service. Do this by Right-clicking on your project and select Add &amp;gt; Application Insights Telemetry
&lt;br /&gt;&lt;br /&gt;
&lt;figure&gt;&lt;a href="https://example.com/images/6tips/appinsights-add.png"&gt;&lt;img src="https://example.com/images/6tips/appinsights-add.png"&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;br /&gt;
From there, you will be prompted with a wizard to walk-through setup of the Application Insights resource. From here, you can elect to just install the SDK on your app, which does nothing in Azure, but allows you to see what kind of data will be sent to the Api if you decide to use it.
&lt;br /&gt;&lt;br /&gt;
&lt;figure&gt;&lt;a href="https://example.com/images/6tips/appinsights-add2.png"&gt;&lt;img src="https://example.com/images/6tips/appinsights-add2.png"&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;br /&gt;
Once you complete the wizard, you will have the SDK from nuget installed into your app, and the necessary changes added to your app to utilize the SDK. If you start your application, you will see a new Application Insights button appear in Visual Studio when you are in debug mode.
&lt;br /&gt;&lt;br /&gt;
&lt;figure&gt;&lt;a href="https://example.com/images/6tips/appinsights-add3.png"&gt;&lt;img src="https://example.com/images/6tips/appinsights-add3.png"&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;br /&gt;
This is a built in Application Insights viewer that allows us to see what kind of telemetry our application tracks, with filtering and other features included. This is a powerful experience that is great for getting a first taste of Application Insights. If you like what you see, I highly recommend using Application Insights for your applications, as it a great experience at a very good price point.
&lt;br /&gt;&lt;br /&gt;
&lt;figure&gt;&lt;a href="https://example.com/images/6tips/appinsights-add4.png"&gt;&lt;img src="https://example.com/images/6tips/appinsights-add4.png"&gt;&lt;/a&gt;
&lt;/figure&gt;

&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Building a Simple Contact Form with Azure Functions</title><link>https://example.com/2018/azure-function-contact-form/</link><pubDate>Wed, 21 Nov 2018 11:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2018/azure-function-contact-form/</guid><description>&lt;h2 id="an-easy-solution-for-an-easy-task"&gt;An Easy Solution for an Easy Task&lt;/h2&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
I write about Azure Functions over and over again because they are the perfect solution for what I am trying to do, small little things that I don&amp;rsquo;t want to spin up a larger unnecessary app to do it. That along with the fact they just run and go away, the price point for the things I do make it basically free.
&lt;br /&gt;&lt;br /&gt;
I recently remapped my blog to a static website hosted in Azure Blob Storage. During the process, I decided that it would be nice to have a way for people to contact me if they wanted to (no idea why they would). I looked at some options around contact form services and I was not really impressed with the free options and didn&amp;rsquo;t want to create some account to manage. Then I had a thought, why not have an Azure Function that I could http post to and sent an email from there, easy peasy. And boy was it!
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description></item><item><title>Azure CLIs Are Awesome</title><link>https://example.com/2018/azure-cli-alias/</link><pubDate>Sun, 01 Jul 2018 11:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2018/azure-cli-alias/</guid><description>&lt;h2 id="did-you-know-the-azure-cli-was-extendable"&gt;Did you know the Azure CLI was Extendable?&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;I did not know this. I was minding my business, when I decided to catch up on some Azure Friday videos, and found this &lt;a href="https://channel9.msdn.com/Shows/Azure-Friday/Azure-CLI-Extensions" target="_blank" rel="noopener noreffer"&gt;beauty&lt;/a&gt;
 from June 23rd 2018 regarding extending the Azure CLI and how it was completely in the open. In the video one of the extensions was showcased, alias, which allows a developer to create quick commands for Azure CLI commands. So often when working with the Azure CLI, I write these long, impossible to remember commands where only one or two things change. For instance&lt;/p&gt;</description></item><item><title>Azure Media Services with Azure Functions</title><link>https://example.com/2018/azure-media-services-azure-functions/</link><pubDate>Tue, 12 Jun 2018 11:25:05 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2018/azure-media-services-azure-functions/</guid><description>&lt;h2 id="new-version-of-azure-media-services"&gt;New Version of Azure Media Services&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;I have been a fan of Azure Media Services for a long time. I worked with a customer roll it our to their organization a few years back and immediately saw the opportunity to enable a company with the ability to wholly own their video content and host/play the media inside their organization. Previously, the SDK that interfaced with Azure Media Services, consisted of 2 External Packages&lt;/p&gt;</description></item><item><title>Extensions to Application Insights Telemetry Collection</title><link>https://example.com/2018/application-insights-extensions/</link><pubDate>Thu, 01 Mar 2018 11:00:59 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2018/application-insights-extensions/</guid><description>&lt;h2 id="extending-the-greatness-of-application-insights"&gt;Extending the Greatness of Application Insights&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;I will start off by saying I love Application Insights. I have been using it for a long time, and am delighted at the new roll-out of features for it. I have even been giving a talk on Application Insights and how easy it is to instrument your application, so check that out if you are interested. One thing that is great about Application Insights is how extendable it is. The nature of how the data is structured allows a developer to add custom metadata to the telemetry, as well as add filter out telemetry based on specific criteria. Whenever I spin up a new app, I always notice that I add a handful of extensions to the telemetry collection process and thought it would be helpful to share.&lt;/p&gt;</description></item><item><title>Using Entity Framework Core with Azure Functions</title><link>https://example.com/2017/azure-function-ef-core/</link><pubDate>Thu, 02 Nov 2017 11:14:48 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2017/azure-function-ef-core/</guid><description>&lt;h2 id="dot-net-standard-support-in-azure-functions"&gt;Dot Net Standard Support in Azure Functions!&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;I have talked about Azure Functions before, but up until this point, I felt like it was limited to cases where you needed to interact with a database. One prime example being listening on an Ftp folder and tracking the files in a database. You would do this in the past don&amp;rsquo;t get me wrong, but I wanted to use the newest stuff with the newest stuff, and using an older mechanism to interact with a database with something as cool as Azure Functions bummed me out. Things have changed! Now Azure Functions have support for Dot Net Standard 2.0, which opens up a ton of opportunities, one of which being able to leverage Entity Framework Core to interact with data.&lt;/p&gt;</description></item><item><title>Polling for Data in Reddit with Azure Functions</title><link>https://example.com/2017/reddit-poller-azure-functions/</link><pubDate>Thu, 03 Aug 2017 11:15:58 -0400</pubDate><author>isaac@isaaclevin.com (Isaac Levin)</author><guid>https://example.com/2017/reddit-poller-azure-functions/</guid><description>&lt;h2 id="being-repitive-is-not-fun"&gt;Being Repitive is not fun&lt;/h2&gt;
&lt;br /&gt;
&lt;p&gt;Ever since I can remember I have loved to automate things. Whether it was taking toys and mounting them on remote control car parts or convincing my brother that the show I wanted to watch at a particular time was far better than anything he wanted to watch. I guess those things aren&amp;rsquo;t really automation rather more like a combination of laziness and and ability to make a little effort so something wasn&amp;rsquo;t as contrived the next time&amp;hellip; WAIT, ISN&amp;rsquo;T THAT AUTOMATION?!?!?! Anyway, I have always enjoyed doing things that make my life easier even if I have to do some work to make it happen. One of those things has always been automating things related to the web.&lt;/p&gt;</description></item></channel></rss>